Moin,
habe gerade ein sehr seltsames Verhalten bei meiner Programmierung
festgestellt. Hab an meinem Atmega32 einen MAX232 mit 38400 Bauds und
einem externen Quartz mit 16 MHz.
Die Übertragung klappt schon seit längeren ordentlich und es gab bis auf
jetzt nie Probleme. Wenn ich jetzt doch ein Byte 0x00 übertrage werden
die folgend übertragenden Bytes unabhängig vom übergebenen Wert auch mit
0x00 übertragen. Kurze Zeit später läuft die Kommunikation wieder
ordentlich.
Hab jetzt erstmal folgende Anpassung an das Programm gemacht:
1 | /**
|
2 | * Sendet ein einzelnes Zeichen
|
3 | * an die RS232 Schnittstelle
|
4 | */
|
5 | void serial_putc(unsigned char data)
|
6 | {
|
7 |
|
8 | /* Wait for empty transmit buffer */
|
9 | while ( !( UCSRA & (1<<UDRE)) )
|
10 | ;
|
11 | /* Put data into buffer, sends the data */
|
12 | UDR = data;
|
13 |
|
14 | if (data == (unsigned char)0x00)
|
15 | _delay_ms(10);
|
16 |
|
17 | } // serial_putc
|
Allerdings sollte so eine Bremse doch normalerweise nicht nötig sein,
wenn ich auf die Hardware-Flags für die Übertragungsbereitschaft warte?
Falls jemand das auch schon mal gesehen hat, oder einen Tip für den
Ursprung kennt...gerne!
Grüße
Thomas