Gast
#3316593
Hallo miteinander, ich verzweifel hier gerade an einem Problem mit den UART des Atmega128. In kurzen Worten eine Erläuterung des bei meinem Vorhaben (Leider darf/kann ich den Code nicht ins Netz stellen...er wäre auch sehr umfangreich). Ich polle den Empfangspuffer bis ein Byte vvollständig empfangen wurde und schreibe es dann in ein Array. Sobald ein Timer abgelaufen ist, "schaue" ich mir die empfangenen Bytes an. Bisher hat es immer über einen USB->RS232 Adapter zwischen AVR und PC über HTerm fehlerfrei funktioniert. Nun habe ich es direkt an die RS232 Schnittstelle eines PCs angeschlossen und bekomme recht reproduzierbare fehlerhafte Bytes. Hab daraufhin die Formel zur Berechnung für UBRR verändert und es wurde besser aber auch nicht komplett fehlerfrei. Immer wieder sind einzelne Bytes fehlerhaft. Als Formeln habe ich die 2 getestet: #define F_CPU 16000000UL #define BAUD 1155200UL 1. (F_CPU+BAUD*8UL)/BAUD*16UL)-1 -> bei Nutzung des UBS Adapters fehlerfrei -> bei Nutzung der PC RS232 Schnittstelle fehlerbehafteter Empfang 2. FCPU/16UL/BAUD-1 -> bei Nutzung des UBS Adapters fehlerbehaftet -> bei Nutzung der PC RS232 Schnittstelle fehlerbehafteter Empfang, aber besser als bei der 1. Formel Der Empfang basiert wie geschrieben auf: uint8_t USART_getc(){ while(!UCSR1A & (1<<RXC1)) return UDR1; } do{ data = USART_getc(); data_array[loop_poll_count] = data; data = 0x00; loop_poll_count++: }while(...) Komischerweise treten die fehlerhaften Bytes reproduzierbar für bestimme Hex-werte auf. Was könnte das Problem sein. Bringt ein schnellerer Quarz bspw. 32Mhz etwas? Viele Grüße und vielen Dank und im Voraus.