Hallo zusammen Kann mir jemand von euch verraten, wie ich die Richtige Baudrate beim ATmega168 einstellen kann. Die Baudrate ist 19200 KBaud. Wozu dienen UBRRnH und UBRRnL und wie werden sie richtig initialisiert? David
So wie´s im Datenblatt steht.Das Register ist ein Teiler für den Haupttakt.Den musst du also schonmal wissen.Dann wird beides (also Haupttakt und gewünschte Baudrate) in die Formel im Datenblatt eingesetzt und schon weisst du,welchen Wert du reinschreiben musst.Per WinAVR (GCC) kannst du einfach UBR = Wert; schreiben,bei Assembler musst du noch die Reihenfolge von Low und Highpart beachten.
[Ironie] Zu dem Thema gibts super Infos im Datenblatt. Das kostet bei www.atmel.com zwar satte 0,00 Euro, aber das isses echt Wert ;o) [/Ironie] Gruß, Magnetus
Das grobe weiß ich auch. Das Probelm ist, daß ich versuche mit einem ATMEGA168 Daten an ein Terminal zu senden und dieses emfpängt nur komsiche zeichen. Jetz weiß ich nicht ob ich die Bautrate richtig gestetzt habe, weil ich nicht weiß was ich in den UBRRnH und was in den UBRRnL schreiben soll. Was heißt das wenn eine Zahl da steht und dann >>8 z.B. BAUD >> 8 was im USERS Manuel so steht? David
Poste deinen Code,LIES & VERSUCH ZUMINDEST das Datenblatt ZU VERSTEHEN. Atmel drückt sich gemessen an anderen Herstellern nun wirklich noch ganz brauchbar aus.Sogar Beispiele sind in selbigem zu finden. Das Forum hier dient in erster Linie zum lernen und Erfahrungen austauschen.Um Arbeit/Hausaufgaben an andere zu degradieren ist es der verkehrte Ort.
"Was heißt das wenn eine Zahl da steht und dann
>>8 z.B. BAUD >> 8 was im USERS Manuel so steht?"
Ich versteh die Frage nicht.
Ja Ja ich weiß es schon. Habe das Datenblatt ausführlichst studiert. Ich habe es auch schon geschafft daß der Controller die daten empfängt. Das Problem ist daß ich es nicht senden kann. Ich weiß nicht woran es liegt. Habe ein Max232 zwischen Controller und Computer geschalten und versuche in einer einfachen endlosschleife einfach das zeichen 'a' zu senden, damit es im terminal auftaucht. Nachdem ich den genzen tag verschwendet habe und außer daß irgendwelche Y auftauchen taucht das gewünschte a nicht auf. Ich vermute daß es an der Bautrate liegt, darum habe ich nachgefragt. Beispiel USARS Manuell void USART_Init( unsigned int baud ) { /* Set baud rate */ UBRRnH = (unsigned char)(baud>>8); <-------- Was heißt das?? UBRRnL = (unsigned char)baud; /* Enable receiver and transmitter */ UCSRnB = (1<<RXENn)|(1<<TXENn); /* Set frame format: 8data, 2stop bit */ UCSRnC = (1<<USBSn)|(3<<UCSZn0); Die Daten empfangen tue ich mir der einstellung. UBRR0L = 8. 115200und für UBRR0H gebe ich 0 ein. aber da mein Terminal maximal 19400 Baud kann muß ich doch bei 16 Mhz UBRR0L = 51 eingeben. was muß ich für UBRR0H eingeben? Fest steht es lauft nicht und ich suche nach lösungen vielleicht ist es eine kleinigkeit, bitte um verständniss. David
> Baudratenquarz verwendet? Ich meinte damit: - Hast Du einen Quarz an den AVR angeschlossen? - Ist die Frequenz des Quarzes für Baudraten geeignet (z.B. 3,6864MHz) - Hast du die entsprechenden Fusebits eingestellt, damit der AVR den Quarz auch benutzt? Die C-Syntax kenne ich nicht, ich arbeite in Assembler. Aber UBBRnH und UBBRnL stehen für das H-Byte und L-Byte des UART-Vorteiler-Registers, wobei H und L für Highbyte und Lowbyte stehen und n für die Nummer des UART. Da der Mega168 nur über U(S)ART0 verfügt, ist n natürlich 0. Du musst Deinen Baudratenwert also in Highbyte und Lowbyte zerlegen und das Highbyte in UBBR0H schreiben, das Lowbyte in UBBR0L. ...
> Du musst Deinen Baudratenwert also in Highbyte und Lowbyte zerlegen > und das Highbyte in UBBR0H schreiben, das Lowbyte in UBBR0L. @Dave ... und genau das macht der Code UBRRnH = (unsigned char)(baud>>8); <-------- Was heißt das?? UBRRnL = (unsigned char)baud; Das >> steht für 'nach rechts schieben' und zwar um 8 Bits. Also eine Division durch 256. Die Frage ist jetzt allerdings: welchen Wert hat 'baud'? Ach ja: Es ist im übrigen nicht der Fall, dass in 'baud' die gewünschte Baudrate stehen soll. Du hast das Datenblatt studiert. Dann ist dir sicherlich auch aufgefallen, dass es da eine Formel gibt, nach der sich der zu setzende Wert aus der Baudrate und der verwendeten Taktfrequenz errechnet. D.h. Du gehst mit deiner Baudrate und der Taktfrequenz in die Formel hinein, kriegst einen Wert heraus und dieser Wert wird dann in die Register UBRRnH und UBRRnL nach obiger Methode gesetzt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.