mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit Empfang - UART Library Fleury


Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich nutze einen ATmega1281 und möchte über USART1 mit dem PC
kommunizieren. Dazu nutze ich die UART Library von Peter Fleury.
Damit ich sie compilieren konnte, musste ich lediglich die 
Interruptvektoren
anpassen. Das Beispeilprogramm läuft auch soweit. Ich kann einzelne 
Zeichen
senden und als Echo empfangen.
Jetzt zu meinem Problem:
Sobald ich einen kompletten String an den UART sende, kommt als Echo nur 
die
ersten 1-3 Zeichen korrekt zurück. Es ist aber auch schon vorgekommen, 
dass ich über längere Zeit den String korrekt empfangen habe. Der Fehler 
liegt auch definitiv auf Controller-Seite. Habe mir die zurückgesendeten 
Zeichen mit dem Oszi angeschaut und er sendet wirklich diesen Mist.
Woran könnte das liegen? Wie gesagt, der Empfang von einzelnen Zeichen 
ist korrekt. Hatte jemand schon ein ähnliches Problem?
Könnte es sein, dass die Empfangsroutine, die empfangenen Zeichen nicht 
schnell genug verarbeiten kann? Ich weiß mittlerweile nicht mehr so 
richtig wonach ich suchen soll, darum wär ich für Hilfe sehr dankbar!

Grüße

Heiko

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Könnte es sein, dass die Empfangsroutine, die empfangenen Zeichen nicht
> schnell genug verarbeiten kann?

Das könntest du selbst testen, wenn du mit der Baudrate runter gehst. Es 
müsste weniger Fehler geben, wenn deine Vermutung stimmt.

Autor: MNR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Außerdem kannst du den Buffer in Peters Routinen in 2er Potenzen 
erhöhen.

Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab den Fehler gefunden. Mit einem delay von ein paar ms zwischen den 
einzelnen Bytes funzt alles. Die ISR ist also einfach zu langsam.
Kann man das irgendwie optimieren.
Danke euch für die Antworten.

Grüße Heiko

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Heiko (Gast)

>Hab den Fehler gefunden. Mit einem delay von ein paar ms zwischen den
>einzelnen Bytes funzt alles. Die ISR ist also einfach zu langsam.

Dann hast du was falsch programmiert. Ein AVR kann bei richtiger 
Programmierung 115k2 lückenlos verarbeiten.

MfG
Falk

Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na ja,
ich hab ja eigentlich gar nix programmiert, hab den Code 1:1 übernommen. 
Aber es ist doch definitiv so, dass man zum leeren des UDR eine gewisse 
Zeit benötigt. Wenn in der Zeit schon ein neues Byte kommt, geht es 
verloren, oder seh ich das falsch. Der PC sendet alles hintereinander 
ohne Pause zwischen Stop und Startbit.
Aber irgendwie versteh ich das noch nicht ganz, weil die uC Taktrate ja 
wesentlich höer ist als die Baudrate. Der uC sollte das doch eigentlich 
verarbeiten können. Ich les jetzt noch mal im Datenblatt nach...

Grüße

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Heiko (Gast)

>Aber es ist doch definitiv so, dass man zum leeren des UDR eine gewisse
>Zeit benötigt. Wenn in der Zeit schon ein neues Byte kommt, geht es
>verloren, oder seh ich das falsch. Der PC sendet alles hintereinander

Ja, das siehst du falsch. Das Lesen von UDR dauert 1 Takt. Im Interrupt 
mit allem drum und dran vielleicht 20 Takte. Selbst bei 115k2 dauert die 
Übertragung von 1 Byte mindesten 160 Takte, eher mehr, je nach 
verwendeter Quarzfreqenz.

>ohne Pause zwischen Stop und Startbit.

Kein Thema. Das Problem ist dein mangelndes Verständniss soei 
Programierung.

>Aber irgendwie versteh ich das noch nicht ganz, weil die uC Taktrate ja
>wesentlich höer ist als die Baudrate. Der uC sollte das doch eigentlich

EBEN!

>verarbeiten können. Ich les jetzt noch mal im Datenblatt nach...

Gute Idee.

MFG
Falk

Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versteh leider nicht so ganz warum manche Leute in diesem Forum 
immer so einen agressiven Ton anschlagen. Wenn ihr eure Agressionen 
rauslassen wollt, geht in die Boxbude.

Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Falk

Du hattest Recht. Es funktioniert tatsächlich.
Aber der Fehler lag weder an der UART-Library noch an meinen 
unzureichenden
Programmierkenntnissen :-)
Habe jetzt den Controller getauscht und alles funktioniert tadellos.
Ich nehme an das der Takt beim alten Controller eine starke Abweichung
hatte. Werde jetzt mal versuchen den internen RC-Oszillator zu 
kalibrieren.

Grüße

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Heiko (Gast)

>Habe jetzt den Controller getauscht und alles funktioniert tadellos.
>Ich nehme an das der Takt beim alten Controller eine starke Abweichung
>hatte. Werde jetzt mal versuchen den internen RC-Oszillator zu
>kalibrieren.

NEIIIIIIN!

http://www.mikrocontroller.net/articles/AVR_Tutori...

MfG
Falk

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.