Forum: Mikrocontroller und Digitale Elektronik Interrupt WinAVR Problem


von Sebastian Geier (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich probiere gerade alle möglichen Interrupts des AT90s4433 mit WinAVR
aus. Leider klappts mit dem UART Rx Interrupt nicht.
Mein Programm soll ganz einfach sein:
Sobald ich mit einem Terminalprogramm eine Zahl sende, soll diese an
den Lampen des PORTBs ausgegeben werden. (Verwende das STK500.)

Folgendes habe ich gemacht:
PORTB auf Ausgabe gestellt (DDRB=0xFF).
RXIE, RXCIE, TXCIE im UCSRB Register angeschaltet.
Die Baudrate auf 38000 in UBRR eingestellt.
Die globalen Interrupts mittels sei() freigeschaltet.
Als Interruptvektor habe ich SIG_UART_RECV gewählt.

Leider funktioniert es nicht.
Könnte mir jemand vielleicht sagen, was ich falsch gemacht habe bzw.
vergessen?

Vielen Dank

von Rahul D. (rahul)


Lesenswert?

Vielleicht, weil die Baudrate bei 38400 liegen müsste?
Dann solltest du erst die Baudrate und dann die UART-Flags einstellen.
Du weisst auch, dass PORTB=0x00 beim STK500 ein Leuchten aller LEDs
nach sich zieht?!

von Sebastian Geier (Gast)


Lesenswert?

Das ich 38000 geschrieben habe, war ein versehen, es ist natürlich
38400.
Das alle Lampen leuchten weiß ich, ist ja soweit egal. Sobald eine Zahl
gesendet wird ändert sich ja was an den Lampen.

Habe die Baudrate jetzt zuerst eingestellt, leider ohne Veränderung am
Problem.

von Sebastian Geier (Gast)


Lesenswert?

Hey, jetzt klappts doch. War ein kleiner Fehler beim Aufspielen des
Programms.

Eine Frage hätte ich allerdings noch.

Ich weiß wofür SIG_UART_RECV und SIG_UART_TRANS vorhanden ist. Aber bei
SIG_UART_DATA....wofür ist das? Andere Programme, z.B. Codevision
verwenden auch nur 2 Typen Interrupt.

Danke

von Rahul D. (rahul)


Lesenswert?

_TRANS wird verwendet, wenn man wissen will, ob ein Byte vollständig
gesendet wurde (halbduplex-Übertragungen wie RS485).
_DATA meldet, dass das UDR frei ist, und neue Daten in dieses Register
geschrieben werden können.

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.