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

Thema: Atmega32 Offset-Problem, Empfang von Nachrichten via USART

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    12.04.2007
    Beiträge
    6

    Atmega32 Offset-Problem, Empfang von Nachrichten via USART

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo zusammen,

    ich bin seit wenigen Tagen stolzer Besitzer eines STK500 und eines Atmega32. Diesen kleinen Baustein moechte ich nun in Betrieb nehmen und muss leider folgendes Problem feststellen:

    Schreibe ich eine Zahl via HTerm an meinen Baustein, empfaengt er die Falsche Zahl. Schreibe ich eine Zahl vom Baustein auf mein Terminal, ist sie richtig. An was kann das liegen?

    Baud-Rate und 8N1 sind korrekt eingestellt, folgendes Programm wird verwendet (und via AVR8 Burn-O-Mat auf den Baustein gebracht)

    Code:
    #include <avr/io.h>
    #include <inttypes.h>
    
    /* frequency of 1Mhz, internal oscillator. */
    #define F_CPU 1000000UL
    /* baud rate */
    #define BAUD 9600UL
    
    #define UBBR_BAUD ((F_CPU/(16L*BAUD))-1)
    
    /* initialize USART */
    void uart_init(void)
    {
    	/* specify baud rate */
    	UBRRH = (uint8_t)(UBBR_BAUD>>8);
    	UBRRL = (uint8_t)(UBBR_BAUD);
    
    	/* activate receiver and transmitter */
    	UCSRB = (1<<RXEN) | (1<<TXEN);
    
    	/* 8N1 asynchronous */
    	UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
    }
    
    int main(void)
    {
    	uint8_t buffer;
    
    	// portB -> outputs
    	DDRB=0xff; 
    	PORTB=0xff;
    
    	// inizialize UART
    	uart_init();
    
    	while (1)
    	{		
    		// receive message
    		while (!(UCSRA & (1<<RXC)));
    		buffer = (UDR); // *
    		// buffer = (buffer - 0x80); // **
    
    		// wait until write buffer is free
    		while ( !( UCSRA & (1<<UDRE)) );
    		UDR = buffer; 
    	}
    	
    	return 0;
    }
    Ergebnisse:
    - Ich schreibe eine 1 (0x31) zum Baustein, Baustein zeigt mir 0xB1 an
    - Ich ersetze die * Zeile durch die ** Zeile und bekomme als Antwort auf die 1 (0x31) eine 0xF1

    Ich komm grad irgendwie nicht mehr ganz mit ... vll. kann mir jemand Helfen (Hoffentlich nur ein kleines Problem )

    Mit freundliche Gruessen
    Florian

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Siehe Datenblatt Seite 163, da siehst du die Fehlerrate bei deiner Baudrate. Ändere mal auf 4800 und es wird warscheinlich funktionieren. Dein HTerm ist warscheinlich etwas Fehlertoleranter als der µC. Wenn du etwas Sicherheit bei der Datenübertragung haben willst ist ein Baudratenquarz die sicherste Lösung.
    Hubert

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    12.04.2007
    Beiträge
    6
    Danke Hubert, das war das Problem. Haette ich auch selbst drauf kommen koennen, immerhin habe ich in genau dieser Tabelle schon mehrmals nachgesehen. Mir ist allerdings nie aufgefallen, dass sich die Fehlerwerte von u2x=0 udn u2x=1 so sehr unterscheiden.

    Nochmal ein ganz dickes DANKE!

    Mit freundlichen Gruessen
    buthus

    P.S.: Werde das mit dem Quarz aber auch noch testen ...

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress