Forum: Mikrocontroller und Digitale Elektronik UART bei ATMega8


von Daniela Meier (Gast)


Angehängte Dateien:

Lesenswert?

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

von mmerten (Gast)


Lesenswert?

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 ???

von Markus Burrer (Gast)


Lesenswert?

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

von mmerten (Gast)


Lesenswert?

@markus
der MEGA8 zählt noch nicht dazu, dem reichen noch 63 I/O-Register.

von Daniela (Gast)


Lesenswert?

@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.

von Bernhard T (Gast)


Lesenswert?

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

von Ruedi B (Gast)


Lesenswert?

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.

von Bernhard T (Gast)


Lesenswert?

Sorry Daniela wegen dem Namen
Gruß Bernhard

von mmerten (Gast)


Lesenswert?

@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
Noch kein Account? Hier anmelden.