- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 25

Thema: Daten Senden Empfangen Ic -> Pc -> Ic

Baum-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #14
    Neuer Benutzer Öfters hier
    Registriert seit
    22.10.2015
    Beiträge
    11
    Hallo,

    habe jezt auch mal die Baudrate fix eingestellt dies hat aber auch nichts gebracht. Immer der selbe "Müll".
    Habe meinen externen Quarz mal weggenommen und habe intern den RCOsc. mal auf 8MHz; 6CK+64ms gestellt, und habe meine F_CPU auf 8000000 gestellt
    Meine LED's blinken alle noch im sekundentakt.
    Wenn ich mir einen festen Wert oder Buchstabe übertragen lassen will, kommt in ANSI nichts mehr an und in Ascii nur noch komische Symbole, ich sehe aber an meinen RXD das irgendwelche daten ankommen.

    Hier nochmal mein Programm
    Code:
    #include <avr/io.h>
    #include <util/delay.h>
    #include <stdlib.h>
    			  
    #define F_CPU 8000000// 12000000	 /* evtl. bereits via Compilerparameter definiert */
    #define BAUD 300      // Baudrate
     
    // Berechnungen
    #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1)   // clever runden
    #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
    #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD) 		// Fehler in Promille, 1000 = kein Fehler.
     
    #include <util/setbaud.h>
    
    //------------------------------------------------------------------------------------------
    
    //USART initialisieren
    void uart_init(void)
    {
    	//Set Baudrate
    	UBRRH = UBRR_VAL >> 8;
    	UBRRL = UBRR_VAL & 0xFF;
    	
    	UCSRB |= (1<<TXEN) | (1<<RXEN);					//UART TX und RX einschalten
    	UCSRC = (1<<URSEL) |(1<<UCSZ1) | (1<<UCSZ0);	// Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit
    }
    
    //------------------------------------------------------------------------------------------
    
    //Warteschleife
    void delay_ms(unsigned int ms)
    {
        unsigned int zaehler;   
        while (ms) {
            zaehler = F_CPU / 5000;       
            while (zaehler) {
                __asm volatile("nop");
                zaehler--;
            }
            ms--;
        }
    }
    
    //------------------------------------------------------------------------------------------
    
    // Zeichen senden
    int uart_putc(unsigned char c)
    {
    	while (!(UCSRA & (1<<UDRE)))
    	{
    	}
    	UDR = c;
    	return 0;
    }
    //------------------------------------------------------------------------------------------
    
    //String senden
    void uart_puts(char *s)
    {
    	while (*s)
        {   /* so lange *s != '\0' also ungleich dem "String-Endezeichen(Terminator)" */
            uart_putc(*s);
            s++;
        }
    }
    //------------------------------------------------------------------------------------------
    
    //Zeichen empfangen
    uint8_t uart_getc(void)
    {
    	while (!(UCSRA & (1<<RXC)))	//warten bis Zeichen verfügbar 
    	;
    	return UDR;					//Zeichen aus UDR an Aufrufer zurückgeben
    
    }
    //------------------------------------------------------------------------------------------
    
    //Sting empfangen
    void uart_gets(char *Buffer, uint8_t MaxLen)
    {
    	uint8_t NextChar;
      uint8_t StringLen = 0;
     
      NextChar = uart_getc();         // Warte auf und empfange das nächste Zeichen
     
                                      // Sammle solange Zeichen, bis:
                                      // * entweder das String Ende Zeichen kam
                                      // * oder das aufnehmende Array voll ist
      while( NextChar != '\n' && StringLen < MaxLen - 1 ) {
        *Buffer++ = NextChar;
        StringLen++;
        NextChar = uart_getc();
      }
     
                                      // Noch ein '\0' anhängen um einen Standard
                                      // C-String daraus zu machen
      *Buffer = '\0';
    
    }
    //------------------------------------------------------------------------------------------
    
    //Hauptprogramm
    int main(void)
    {
    	int Line[2];			//Array vom Typ int
    	char Buffer[3];			//String mit maximal 8 zeichen
    	int a;
    	
    	DDRB = 0xFF;
    	PORTB = 0xFF;
    a=12;
    	uart_init();			// UART einstellen
    
    	while (1)
    	{
    		if ((UCSRA & (1<<RXC)))			//überprüfen ob neue Zeichen vorhanden sind
    		{
    			uart_gets(Line, sizeof(Line));		//Zeichen wurden empfangen, jetzt abholen
    			
    			a=atoi (Line);				//aus Text eine Zahl machen
    
    			itoa (Line, Buffer, 10);			// Aus der Variablen a ein Text erstellen
    
    			uart_puts("j");				//Senden festen Buchstaben j
    		}
    		else
    		{
    		uart_puts(a);      //Variable a senden Testzwecke
    			PORTB = 0b00000000;
    		uart_puts(a);      //Variable a senden Testzwecke
    			delay_ms(1000);
    		uart_puts(a);     //Variable a senden Testzwecke
    			PORTB = 0b00001111;
    		uart_puts(a);     //Variable a senden Testzwecke
    			delay_ms(1000);
    			PORTB = 0b11110000;
    			delay_ms(1000);
    			PORTB = 0b11111111;
    			delay_ms(1000);
    		}
    
    	}
    
    }
    Kann das wirklich nur an der CPU-Frequenz liegen?

    Habe eben mal noch Versucht eine feste Variable zu Übertragen das heißt ich habe
    Code:
    uart_puts("12")
    geschrieben und es kommt auch die 12 an auch wenn ich buchstaben übertrage funktioniert das.

    Wenn ich jetzt aber eine Variabel deklariere zum Beispiel
    Code:
    char a;
    a = 65;
    Aber hier kommt dann nur wirres zeug an.
    Geändert von knoddelpusch (28.10.2015 um 21:50 Uhr)

Ähnliche Themen

  1. Daten senden und empfangen mit IR
    Von GerdM im Forum Robby RP6
    Antworten: 3
    Letzter Beitrag: 21.06.2009, 12:40
  2. RS232 daten empfangen, senden und auswerten
    Von Crischan im Forum Software, Algorithmen und KI
    Antworten: 62
    Letzter Beitrag: 20.03.2009, 16:10
  3. USART Senden und Empfangen von Daten.
    Von Ferdinand im Forum C - Programmierung (GCC u.a.)
    Antworten: 5
    Letzter Beitrag: 05.02.2009, 22:13
  4. Daten senden/empfangen
    Von FSTII im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 15
    Letzter Beitrag: 29.12.2006, 16:25
  5. Antworten: 1
    Letzter Beitrag: 22.09.2006, 16:33

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress