Hallo, ich habe schon bei meheren avrs die uart programmiert. Hat bis jetzt immer geklappt. Zb atmega16 at90can atmega1280. Jetzt habe ich ein atmega8 Meine init ist so void uart0_init(void) { UCSRB = 0x00; //disable while setting baud rate UCSRA = 0x00; UCSRC = URSEL | 0x06; UBRRH = 0x00; //set baud rate hi UBRRL = 0x33; //set baud rate lo UCSRB = 0x98; } void uart0_putc(char c) { while(!(UCSRA & (1<<UDR)));// Wait until Rs232 is ready UDR=c; } Aber mein transmitter ist niemlas ready. Mein programm hängt immer in der while schleife was ist da los. Hat bis jetzt bei jedem atmega geklappt
Ja bei den andren avrs geht es ja einwandfrei so wie ich es immer mache. Gibt es beim atmega8 etwas besonderes zu beachten bei der usart?
Hi
>Ja bei den andren avrs geht es ja einwandfrei so wie ich es immer mache.
Dann machst du schon immer etwas falsch:
1<<UDR -> 1<<UDRE
MfG Spess
Schau' Dir mal folgende Zeilen näher an: UCSRC = URSEL | 0x06; while(!(UCSRA & (1<<UDR))) URSEL ist eine Bitnummer und das Ding, das ein freies TX Data Register anzeigt, heißt nicht UDR. Schwer zu glauben, dass das irgendwo lief.
micro1 schrieb: > while(!(UCSRA & (1<<UDR)));// Wait until Rs232 is ready ^ [..] > Gibt es beim atmega8 etwas besonderes zu beachten bei der usart? Ja - das Datenblatt ;-) Wie spess53 schon schrub: da gehört 'UDRE' hin (siehe auch das Datenblatt vom Mega8 im Kapitel "19.6.1 Sending Frames with 5 to 8 Data Bits") - UDR (also das Datenregister) hat da nix verloren. HTH und HF
Ja tatsächlich es muss UDRE heisen. Schande über mich
Die Zeile mit URSEL ist auch verkehrt. Aber das schrieb ich schon.
OK das mit dem UDR habe ich falsch kopiert. Richtig das durfte nie funktionieren. Ich habe es berichtigt und nun geht es. URSEL ist auch falsch hatte aber so keinen einfluss. Leider war mein USB2SERIELL Wandler dahin. Deswegen hatte ich so Probleme
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.