Hi, ich hab ein Schaltung mit einem Attiny2313. Diese Schaltung überträgt mit hilfe eines Max232N (1µF an der Ladepumpe) Daten. Dabei werden sicher 3/4 der Daten falsch übertragen. Ich habe bereits das Kabel, den µC und den Max232 ausgetauscht. Ohne erfolge. Woran könnte es noch leigen ?
An der Baudrate. AVR-Tutorial: UART http://www.mikrocontroller.net/articles/AVR_Checkliste#UART.2FUSART MfG Falk
Am Timing. Entweder das Oszillator-Timing oder das Software Timing. Die Leute wollen es ja immer nicht glauben, aber der interne Oszillator taugt nichts für die serielle Schnittstelle (ja, man kann ihn kalibrieren, nur sind Anfänger damit noch mehr überfordert). Quarz dran, richtig berechnete Kondensatoren dran, Fuses richtig setzen, UBRR richtig setzen, U2X richtig setzen. Dann klappt das wie das Katzenmachen. Wenn's um die Software geht, darauf achten, dass man nur schreiben sollte, wenn das Datenregister frei ist.
hi, ich benutze ein 9,216Mhz Quarz. Die Baudrate ist 115200. (UBRR = 4). Aber auch mit andern Baudraten ist der Fehler der gleiche. Hier ist der Initalisierung und die sende funktion:
1 | void initUSART( unsigned int baud ) |
2 | {
|
3 | UBRRH = (unsigned char)(baud>>8); |
4 | UBRRL = (unsigned char)baud; |
5 | |
6 | UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE); |
7 | }
|
8 | |
9 | void USART_send(unsigned char c) |
10 | {
|
11 | while (!(UCSRA & (1<<UDRE))); |
12 | UDR = c; |
13 | }
|
Und dein baud ist auch 4 und nicht 115200, wie der Name vermuten lässt? MfG Falk
du meinste in meiner main sollte ich das so aufrufen:
1 | initUSART(115200); // 115200 Baud |
2 | |
3 | |
4 | while(1) |
5 | {
|
6 | while( PIND & TASTE ); |
7 | |
8 | |
9 | for(j='a'; j<='z'; j++) |
10 | {
|
11 | USART_send(j); |
12 | }
|
13 | |
14 | }
|
jetzt empfange ich nur noch 0en.
Alexander B. wrote:
> du meinste in meiner main sollte ich das so aufrufen:
Nein , gerade so nicht ...
also so wie ich es hatte. ist vielleicht die abweichung der realen zur soll baudrate zu groß`(1%) ?
Der Baudratenfehler müßte eigentlcih bei dem Quarz und der Baudrate 0% sein. Hast Du die Kondensatoren richtig herum am MAX232? MfG Paul
hi, 9.126 MHZ ist leider ja kein Baudratequarz. Die Kondensatoren sind alle richtig. Der fehler ist ja das nur ca 30% der Daten richtig an kommen. Ich hatte auch schon überlegt einen Hammingcode einzusetzen, denn das Parity Bit brings ja auch nicht. woran könnte es noch liegen ?
@ Alexander B. (jeroen) >9.126 MHZ ist leider ja kein Baudratequarz. Bitte? Erst schreibst du "ich benutze ein 9,216Mhz Quarz. Die Baudrate ist 115200. (UBRR = 4)." Das ist ein perfekter Baudratenquarz. Und nun 9.126 MHz. Zahlendreher? >Der fehler ist ja das nur ca 30% der Daten richtig an kommen. Ich hatte >auch schon überlegt einen Hammingcode einzusetzen, denn das Parity Bit >brings ja auch nicht. Bitte? Wenn 2/3 flöten gehen ist was faul. Da nützt auch Mr. Hamming gar nix. >woran könnte es noch liegen ? Arbeite die Checkliste Schritt für Schritt durch. http://www.mikrocontroller.net/articles/AVR_Checkliste#UART.2FUSART MFG Falk
hi, also laut http://www.mikrocontroller.net/articles/Baudratenquarz ist es kein Baudrate Quarz. Die Liste hab vor der Thread erstellung durchgelesen und daran liegt es glaub ich nicht, das einzige das ich noch nicht ausgetauscht habe ist das Quarz. Die Fusebits sind alle in PonyProg nicht gesetzt, also External Crystal/Ceramic Resonator (Quarz). Woran könnt es noch liegen ? woran hab ich noch nicht gedacht ?
hi, ich hab jetzt hin gebekommen. Es lage doch (wie ich vermutete) an dem Quarz. Hab es ein 4Mhz Quarz drin, nur schade das ich über 19200 nichts mehr kann.
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.