.. ein Problem mit dem USART an einem ATMEGA 88A ..
Meine Probleme mit unpassenden UARTS sind (waren ?) zahllos. Irgendwann hatte ich dann entweder standardmässig oder fallweise diese Routine eingebunden und verwendet :
Code:
// ============================================================================= =
// == Auslesen der UBBR0-Werte und Ausgabe auf UART
// ============================================================================= =
void UBBR0tst ( void ) // UBBR auslesen und auf UART ausgeben <main
{ //
u16 bdv, iword; // Bauddivider und iword für Anzeige auf UART
// - - - - - - - - - - - - - - - -
// Testweise Ausgabe des UBBR0 vorbereiten
// Rechenformel : ( (u16)(F_CPU / BAUD / 16 - 0.5) )
// bdv = (u16)(F_CPU / 115200 / 16 );
// In main: = (u16)(F_CPU / BAUD / 16 - 0.5 );
bdv = (u16)(F_CPU / BAUD / 16 - 0.5 );
iword = uniq ( bdv, (bdv >>8));
// Hier anschließend - - - f Datenaustausch
uputs0 ("\r\tUBRR0 Rechnung: "); uputs0u ( iword ); // Anzeige UBRR0
wms ( 1000);
iword = uniq ( UBRR0L, UBRR0H );
uputs0 ("\t => Register ~L/H: "); uputs0u ( iword ); // Anzeige UBRR0
//
return; // Ende void UBBR0tst ( void )
}
// ============================================================================= =
Damit hatte ich dann Tipp-, Bibliotheks-, Rundungs- und sonstige -fehler oder so entdecken können. Sieht am Terminal, nach Reset oder Kaltstart der Platine, so aus (die Farbe rot ist rein"getürkt"):
Code:
NaCo x50 5 Mar 2019 13:20
UART0_64 256 kBd, Datenuebertrgg ebenso
Datenformat je 3 Bytes [ENQ][Sensora][Sensorb]
Übertragung ca 1 x je 3 Bytes / sek
UBRR0 Rechnung: 4 => Register ~L/H: 4
?Addr I²C-Dev 0xE0-0xFE; NoDev =: '-'
I²Cdevaddr aktiv 224 0xE0
I²Cdevaddr aktiv 226 0xE2
-------------- I²C_look Ende @ Addr.: 254 / 0xFE
#> ~r1n~/Tst1prsc: 1 Messung pro Sekunde
¼.¼.¯.¼.¼.½.!.¼.½.¼.¼.¼.¼.¼.¼.¼.¼.¼.¼.
Ne ausführlicher Anmerkung, so kurz nach dem Frühstück, geht grad nicht . . . 
Nachtrag:
Warum das Ganze? Es gehört natürlich die Berechnung des Baudratenfehlers dazu - Vorsicht: manche Schritte ganzzahlig rechnen. Die Abweichung (klick) kann erheblich sein, mit meinem neuen "Scope" sieht man wie deutlich :-/ so etwas sein kann. Und die Empfindlichkeit auf unterschiedlich große Baudratenabweichungen sind bei unterschiedlichen Empfängern (und Baudraten) eben verschieden.
Lesezeichen