mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik USART. Übertragungfehler.


Autor: Alexander B. (jeroen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ?

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welche Taktquelle benutzt Du? Welche Baudrate?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Norgan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Alexander B. (jeroen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
void initUSART( unsigned int baud )
{
  UBRRH = (unsigned char)(baud>>8);
  UBRRL = (unsigned char)baud;  
  
  UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE);
}

void USART_send(unsigned char c)
{
    while (!(UCSRA & (1<<UDRE))); 
    UDR = c;                          
}

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und dein baud ist auch 4 und nicht 115200, wie der Name vermuten 
lässt?

MfG
Falk

Autor: Alexander B. (jeroen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du meinste in meiner main sollte ich das so aufrufen:

initUSART(115200); // 115200 Baud
  
  
while(1)
{
 while( PIND & TASTE );
    
    
 for(j='a'; j<='z'; j++)
 {
  USART_send(j);
 }
    
}

jetzt empfange ich nur noch 0en.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alexander B. wrote:
> du meinste in meiner main sollte ich das so aufrufen:
Nein , gerade so nicht ...

Autor: Alexander B. (jeroen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie denn ?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
initUSART(4); // 115200 Baud @ 9,216Mhz

Autor: Alexander B. (jeroen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
also so wie ich es hatte.

ist vielleicht die abweichung der realen zur soll baudrate zu groß`(1%) 
?

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Baudratenfehler müßte eigentlcih bei dem Quarz und der Baudrate 0% 
sein. Hast Du die Kondensatoren richtig herum am MAX232?

MfG Paul

Autor: Alexander B. (jeroen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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_Checkl...

MFG
Falk

Autor: Alexander B. (jeroen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ?

Autor: Alexander B. (jeroen)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.