Hi Jungs, ich habe vor kurzem versucht, den UART meines ATMega8 zum laufen zu bringen. Dazu habe ich folgendes Programm geschrieben (siehe Anhang!). Leider ist es mir nicht geglückt, ihn zum laufen zu bringen. Ich habe den Quellcode mehrmals schon durchgesehen, aber keinen Fehler gefunden. Schließlich habe ich versucht, das Programm mit dem Simulator von AVR Studio zu simulieren und habe entdeckt, dass ich die Register UBRRH und UCSRC, die unter der gleichen Adresse angesprochen werden, nicht mit verschiedenen Werten beschreiben kann, was aber notwendig wäre. Nämlich UCSRC mit 0x00 und UBRRH mit 0x86. Wer hat schon ähnliche Erfahrungen gemacht und kann mir weiterhelfen. Ich weiss keinen Rat mehr! Ich bin froh für jeglichen Hinweis, weil ich auf dem Gebiet AVR noch ziemlich neu bin. Vielen Dank im Voraus und bis dann! Daniela
Einige Funktionen des USART werden im AVR Studio nicht korrekt simuliert, dieses beherrscht nur die UART Funktionen. Mit welcher Taktfrequenz soll der MEGA8 denn laufen. Bei den Direktiven sind auch noch einige Fallen drin: .equ status=0x19 ???
Die neuen Megas haben teilweise Register die nicht im normalen I/O Bereich liegen. Die können nicht mit den entsprechenden I/O Befehlen angesprochen werden sondern man muß andere Befehle verwednen. Welche Register jetzt aber bei welchem Controller mit welchen Befehlen angesprochen werden müssen weiß ich jetzt nicht auswendig Gruß Markus
@mmerten der Mega8 läuft bei mir mit 16 MHz. Das Problem ist halt, dass ich am Pin TXD kein Signal bekomme. Meiner Meinung nach kann ich die Register UBRRH und UCSRC nicht mit verschiedenen Werten beschreiben. Auch wenn ich den Inhalt der beiden Register über den Simulator auslese, sind beide Werte stets gleich? Ich weiss nicht, was ich noch tun kann.
Daniel, du must das URSEL bit (MSB) setzen um das UCSRC zu beschreiben. Das UBRRH - Register darf ja ohnehinn keine so großen Werte annehmen also URSEL = 0. Gruß Bernhard
Hallo, Als Ergänzung zum obigen Text sei das Manuel S.148/149 zu empfehlern. Schreiben: out UBRRH, 0b0000xxxx out UCSRC, 0b1xxxxxxx x = Bit beliebig 0 = Bit muss 0 sein 1 = Bit muss 1 sein Lesen: in R16, UBRRH in R16, UCSRC Um UCSRC zu erhalten muss das I/O Register zweimal hintereinander gelesen werden.
@daniela Das Problem ist nicht der UART sondern fängt schon hier an: .equ status=0x19 ???? Du solltest zuerst einmal der Timer-Routine Aufmerksamkeit schenken, die ja wohl "flag gesteuert" im sekundentakt das "Sekunden-Register" über den UART versenden soll.
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.