Code: #include <avr/io.h> #define F_CPU 4000000 #define USART_BAUD_RATE 9600 #define USART_BAUD_SELECT (F_CPU/(USART_BAUD_RATE*16)-1) void USART_Init(void) { UCSRB = (1<<RXEN) | (1<<TXEN); UBRRL = (unsigned char) USART_BAUD_SELECT; } void usart_writeChar(unsigned char c)// Zeichen mit dem USART senden { while (!(UCSRA & (1<<UDRE))) {} UDR = c; } void usart_writeString(unsigned char *string)// String mit dem USART senden { while (!(UCSRA & (1<<UDRE))) {} while ( *string) usart_writeChar(*string++); } void usart_crlf(void) // CarriageReturn + LineFeed = Neue Zeile { usart_writeChar(0x0D); // CR #13 usart_writeChar(0x0A); // LF #10 } unsigned char usart_readChar(void) // Interrupt-unabhängig ein Zeichen lesen { while(!(UCSRA & (1<<RXC))) {} return UDR; } int main(void){ USART_Init(); for (;;) { usart_writeChar ('a'); } } wenn ich nun ein "a" an das terminal von bray senden will, dann empfange ich nichts schlaues. mit dem hyperterminal von windows kann ich gar nichts empfangen. kann mir jemand weiterhelfen? danke für die mithilfe!!!!!!!!!!!!!!!
du musst erst etwas (0) in ins UBRRH schreiben. Steht aber auch im Datenblatt. Das Datenblatt ist dein Freund
danke! UBRRH= (unsigned char) (USART_BAUD_SELECT>>8); habe ich vom datenblatt entnommen, hat aber keinen einfluss! etwas anderes streikt, aber keine ahnung!
Läuft der Controller wirklich mit 4MHz? Den "{" würde ich eine Zeile spendieren, und nicht in einem Kommentar schreiben. Wenn dann davor, sonst sind sie Kommentar. Ich kenne das Terminal-Programm nicht. Such doch sonst mal nach Comtest von B&B-Electronics. Das benutze ich immer.
der oszillator weist eine frequenz von 4mhz, das ist schon ok.in meinem programm ist"{" schon richtig, nur hier ist es nicht richtig. was kann man den mit diesem comtest machen? kenne ich gar nicht. Danke!
sicher, dass nicht der interne Oszillator läuft? Einer der häufigsten Fehler überhaupt
wie ist den das möglich??? ich habe den doch nicht aktiviert oder? ich habe nur einen externen angeschlossen
Der interne Oszillator ist im Auslieferungszustand aktiviert, dann läuft der Controller mit 1Mhz - egal, was außen angeschlossen ist. Der externe Quarz muß erst per Fuse freigeschaltet werden. Steht aber auch alles im Datenblatt ;)
was ist den fuse? wie kann man das einstellen? hat das was mit register zu tun?? damit ich den exterenen oszi aktivieren will muss CKSEL=0x00, sein oder? wie kann man das anstellen? habe so was wirklich nie gemacht:( wenn das bloss der fehler ist, dann huuu zu schön um wahr zu sein. aber wie kann man bloss fuse setzen oder was es auch ist?
Was ein Fuse ist -> steht im Datenblatt. Wie man die Programmiert -> steht im Datenblatt und in der Anleitung Deiner Programmiersoftware. ABER VORSICHT! Durch falsche Programmierung der Fuse-Bits kannst Du den Controller so konfigurieren, daß Du nicht mehr ohne Aufwand herankommst. Welche Programmiersoftware benutzt Du? Welchen Controller genau benutzt Du? Ich würde es erstmal mit einer Änderung in der Software auf 1 MHz Taktfrequenz versuchen, evtl. funktioniert das, kann noch Timingprobleme bringen, weil der interne Oszillator nicht ganz so genau wie ein Quarz ist. Wäre aber die sichere Methode.
merci ! habe es endlich geschafft. alles läuft nun einwandfrei. hatte gestern noch eine lange nacht gehabt. hehehe :) danke nochmals für eure hilfe!!!!!
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.