Hallo Ihr Wissenden, ich hab mir mal aus den Beispielen aus dem Datenbaltt des mega8 folgenden Code gebastelt um ein paar Daten zum PC zu schicken: #include <avr/io.h> #include <avr/interrupt.h> #include <avr/signal.h> #define F_CPU 1000000 /* 4Mhz */ #define UART_BAUD_RATE 9600 /* 9600 baud */ #define BAUD (F_CPU/(UART_BAUD_RATE*16l)-1) void USART_INIT( unsigned int baud) { UBRRH = (unsigned int) (baud >> 8); UBRRL = (unsigned int) baud; UCSRB = (1<<RXEN) | (1<<TXEN); UCSRC = (1<<URSEL) | (1<<USBS) | (3<<UCSZ0); } void USART_Transmit(unsigned char data) { while ( !(UCSRA & (1<<UDRE))) ; UDR = data; } void main(void) { USART_INIT(BAUD); for(;;) { USART_Transmit("H"); USART_Transmit("a"); USART_Transmit("l"); USART_Transmit("l"); USART_Transmit("o"); USART_Transmit(0x0A); USART_Transmit(0x0D); } } Laut Datenblatt ist der Transfer auf 8N2 eingestellt. Das gleiche hab ich im Windows im Hyperterminal eingestellt. Ich bekomme aber anstatt dem erwarteten String "Hallo" folgendes: "¦ ¢¤¤" was ja zumindest mal gleichlang wie Hallo +0x0A + 0x0D ist. Kennt das Problem jemand bzw. sieht einen Fehler im Code. Danke schon mal, der Jochen P.S. weiß jemand wie man den internen Oszi deaktivieren kann. Hab bei mir ein 4MHz Quarz am uC trag ich allerding 4MHz im Code ein tut sich garnichts. Das müsste dann wohl heisen das der interne Quarz den UART steuert.
Der interne Oszillator ist nicht genau genug, jedenfalls nicht ohne Kalibrierung. Stell am besten auf den externen Quarz um: http://www.mikrocontroller.net/tutorial/io-basics.htm
Hallo noch mal, hab jetzt mal meinen uC erzählt das er nur den externen Takt verwenden soll. Ich hab das mit diesem Programm noch nicht gecheckt, aber bei einem ähnlichen Prg das Daten über die Serielle sendet hat es funktioniert. Der Jochen
Du wirst es zwar nicht mehr brauchen, aber vieleicht haben andere ein änliches Problem. Die lösung lautet (man achte auf den unterschied ' und " ): USART_Transmit('H'); USART_Transmit('a'); USART_Transmit('l'); USART_Transmit('l'); USART_Transmit('o'); USART_Transmit(0x0A); USART_Transmit(0x0D);
Oh man, das ist jetzt auch schon wieder 6 Monate her g. Mitlerweile ist nir der Unterschied zwischen " und ' natürlich klar gg Trotzdem Danke gg Jochen
Salut, außerdem fällt mir in der Definition von BAUD ein Typo auf: 161 statt 16. Ist aber inzwischen sicherlich nicht mehr relevant. :) Gruß, Mark
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.