Hallo zusammen, Verzweifle gerade daran meinen UART-Port ans laufen zu bekommen. Habe das MyAVR Mk2 Board und benutze WinAVR. Hab es einfach mal mit dem Programm von Kreatives-Chaos versucht aber ich bekomme einfach nicht gesendet oder empfangen. Hier der Quellcode: #include <avr/io.h> #include <inttypes.h> // Sollte schon im Makefile definiert sein. // In dem Fall hier einfach löschen. #define F_CPU 3686400UL #define BAUD 9600UL #define UBRR_BAUD ((F_CPU/(16UL*BAUD))-1) // USART initialisieren void uart_init(void) { // Baudrate einstellen (Normaler Modus) UBRRH = (uint8_t) (UBRR_BAUD>>8); UBRRL = (uint8_t) (UBRR_BAUD & 0x0ff); // oder einfacher: // UBRR = UBRR_BAUD; // Aktivieren von receiver und transmitter UCSRB = (1<<RXEN)|(1<<TXEN); // Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); } int main(void) { uint8_t buffer; // USART initialisieren uart_init(); while (1) { // Warten bis Daten empfangen wurden while ( !(UCSRA & (1<<RXC)) ) ; // Empfangsregister auslesen buffer = UDR; // Warten bis der Sendepuffer frei ist while ( !( UCSRA & (1<<UDRE)) ) ; // Daten in den Puffer schreiben und damit senden UDR = buffer; } } Würde mich freuen wenn mich jemand unterstützen könnte.
Hallo Speck doch dein Programm erst mal ab auf nur senden. Wenn das funktioniert, dann kommt das Empfangsprogramm dran. MfG Joachim
Was genau funktioniert denn nicht? Senden? Empfangen? Wo bleibt er hängen? Meine Glaskugel is leider kaputt -.- MfG Markus
Anfänger schrieb: > // Aktivieren von receiver und transmitter > UCSRB = (1<<RXEN)|(1<<TXEN); > > // Einstellen des Datenformats: 8 Datenbits, 1 Stoppbit > UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); Dreh die beiden Zeilen mal von der Reihenfolge her rum. Statt UCSRB = (1<<RXEN)|(1<<TXEN); würde ich schreiben: UCSRB |= (1<<RXEN)|(1<<TXEN); Das wird aber nicht der Fehler sein, sondern eher die Reihenfolge der beiden Befehle das Problem sein. Hatten wir hier im Forum erst kürzlich. Dass da immer wieder Leute reintappen, lag an der falschen Reihenfolge dieser beiden Befehle im UART-Artikel. Dieser wurde daraufhin angepasst. Gruß, Frank
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.