Forum: Mikrocontroller und Digitale Elektronik RS232 an ATmega 2561


von Stephan S. (scoty6v)


Lesenswert?

Hallo,
ich versuche seit zwei Tagen die Serielle Schnittstelle des ATmega2561 
zu nutzen. Habe bereits hier im Forum gesucht, aber nichts Hilfreiches 
finden können.

Ich habe die Schnittstelle initialisiert und wollte Bytes per Interrupt 
empfangen. Da ich noch nicht den richtigen Namen für den Interrupt 
gefunden habe, wollte ich das Empfangenbyte pollen.

Nachdem ich ein Byte gesendet habe, Finde ich im Debugmodus das richtige 
Byte im UDR0-Regsiter. Das RXC0-Bit des UCSR0A-Registers wird auch high 
gesetzt. Trotz allem springt mein Programm hier nicht weiter:

while ( !(UCSR0A & (1<<RXC0)) );
rs232getData();

Was mich noch wudert ist, dass das UDRE0-Bit immer high ist. Müsste das 
nicht auch low werden, wenn ein Byte vorhanden ist?

Vielen Dank für Eure Hilfe im Vorraus.
Ein kleines Beispeil für die Schnittstellen des ATmega2561 wäre nicht 
schlecht. Ich wollte dem meinen Codes des ATmega32 arbeiten, muss aber 
irgendetwas übersehen, was noch angepasst werden müsste.

von STK500-Besitzer (Gast)


Lesenswert?

Wie wäre es mit mehr Code?
In dem "Fliegenschiss" von Code ist zumindest kein Fehler erkennbar.

>Was mich noch wudert ist, dass das UDRE0-Bit immer high ist. Müsste das
>nicht auch low werden, wenn ein Byte vorhanden ist?

Weil das USART vielleicht doppelt gepuffert ist?

von Stephan S. (scoty6v)


Lesenswert?

Ich habe meinen Fehler gefunden.
Ganz böse Falle.
Meine Interruptserviceroutine passte wie gesagt vom Namen her nicht 
(Name von ATmega32). Frage wäre noch, wo finde ich denn die Namen der 
ISR-Aufrufe? Die Adressen finde ich ja im Datenblatt. Ich meine sowas 
wie USART_TXC_vect.

Mein Problem war dann, dass ich die Interruptenable-Bits gesetzt 
gelassen habe und auch sei() aufgerufen hatte.

Das hat dann ungemerkt zu einem Neustart geführt, weil ja keine passende 
ISR vorhanden war.

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.