hallo, wo liegt der Fehler? hab die Usart Funktionen aus dem Datenblatt übernommen aber es wird nichts gesendet... bitte mal meinen Quellcode anschauen :) #include <avr/io.h> #include <stdint.h> #include "main.h" // F_CPU is defined by makefile #define BAUD 9600 #define MYUBRR F_CPU/16/BAUD-1 // Asynchronous Normal mode int main(void) { USART_Init(MYUBRR); while(1) { // Mainloop USART_Transmit("hello"); USART_Transmit("\r\n"); } return 0; } void USART_Init( unsigned int ubrr) { /* Set baud rate */ UBRRH = (unsigned char) (ubrr>>8); UBRRL = (unsigned char)ubrr; /* Enable receiver and transmitter */ UCSRB = (1<<RXEN)|(1<<TXEN); /* Set frame format: 8data, 2stop bits*/ UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); } void USART_Transmit(unsigned char data) { /* Wait for empty transmit buffer */ while (!(UCSRA & (1<<UDRE)) ); /* Put data into buffer, sends the data */ UDR= data; }
Das kompiliert doch garantiert nicht ohne irgendwelche Warnings, oder? Die Funktion USART_Transmit kann nur ein einzelnes Zeichen senden, keinen kompletten String. Ersetze USART_Transmit("hello"); USART_Transmit("\r\n"); durch USART_Transmit('h'); USART_Transmit('e'); USART_Transmit('l'); USART_Transmit('l'); USART_Transmit('o'); USART_Transmit('\r'); USART_Transmit('\n');
ah ok, macht es einen Unterschied ob ich " oder ' benutze? es kommt nun aber auch nichts an
Hi chris, > wo liegt der Fehler? hab die Usart Funktionen aus dem Datenblatt > übernommen aber es wird nichts gesendet... Glaube kaum, dass so etwas im Datenblatt steht! > #define MYUBRR F_CPU/16/BAUD-1 // Asynchronous Normal mode OK, aber warum benutzt Du MYUBRR weiter unten nicht? > USART_Transmit("hello"); > USART_Transmit("\r\n"); Vergleiche mal den Parameter dieses Aufrufs mit dem Parametern in der Funktion unten!! > UBRRH = (unsigned char) (ubrr>>8); > UBRRL = (unsigned char)ubrr; sollte heißen: UBRR=MYUBRR; > /* Set frame format: 8data, 2stop bits*/ > UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); Wirklich 2 Stopp-Bits -- was erwartet denn Dein Empfänger (Terminal-Programm o.ä.)? > void USART_Transmit(unsigned char data) Parameterdefinition anders als oben - hat der Compiler denn nicht gemeckert? Vermutlich sind noch mehr Fehler drin, diese fallen aber auf dem ersten Blick besonders ins Auge. Gruß Fred
chris wrote: > ah ok, macht es einen Unterschied ob ich " oder ' benutze? > es kommt nun aber auch nichts an Bitte informier' Dich mal in einem Standard-Werk zu C über "String" versus "char". Gruß Fred
ich hab den fehler gefunden ich hätte auf die Kompiler Warnings achten sollen, hatte die Funktionen garnicht deklariert... einfach über der main Funktion noch dies Eingefügt: void USART_Init( unsigned int ubrr); void USART_Transmit(unsigned char data); und siehe da es kommen Daten im Terminal an. Danke für die Antworten!
Fred S. wrote: > Wirklich 2 Stopp-Bits -- was erwartet denn Dein Empfänger > (Terminal-Programm o.ä.)? Wenn er 2 Stop-Bits sendet, spielt es doch keine Rolle, ob der Empfänger 1 oder 2 Stop-Bits erwartet.
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.