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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.