Forum: Mikrocontroller und Digitale Elektronik UART sendet letzte Zeichen falsch


von Sebastian E. (senz) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hallo,
meine ersten Gehversuche mit einem ATTINY 2313 und seinem UART sind bis 
auf ein Problem erfolgreich.
Beim Senden eines ASCII Strings aus dem Programmspeicher an den PC 
werden die letzten beiden Zeichen falsch gesendet.

String zu Senden: .db 27,"Test der RS232-Schnittstelle",13,0,0
im Terminal empfangen: <27>Test der RS232-SchnittstellÙÃ

Terminalprogramm: HTerm 0.6.5 beta

Quarz: 14,31818 MHz
UBRR:  185 (4800 Baud)
8 Datenbits
1 Stopbit
Parität keine

Unabhängig von der Länge des Strings werden die letzten Zeichen falsch 
übertragen. Fuses sind richtig gesetzt, AVR läuft mit der richtigen 
Freuqenz. Bei anderen Baudraten zeigt sich das selbe Ergebnis. 
Übertragung funktioniert bis 28.8KBaud!
Was ist hier falsch?
Ein Auszug aus dem Code ist im Anhang.

Grüße, Sebastian

von µluxx .. (uluxx) Benutzerseite


Lesenswert?

was ist bei dir t0?
soweit ich weiß kann der lpm befehl sachen nur nach r0 laden?!

µLuxx

von Johannes M. (johnny-m)


Lesenswert?

µluxx .. wrote:
> was ist bei dir t0?
> soweit ich weiß kann der lpm befehl sachen nur nach r0 laden?!
Nö. Es gibt zwar eine Variante, bei der lpm ohne Parameter aufgerufen 
wird, und dabei ist das Ziel r0, aber der Tiny2313 kann auch die 
Varianten mit Parametern. Und da ist die Syntax korrekt.

von Wolfgang Horn (Gast)


Lesenswert?

Hi, Sebastian,

was passiert in Deinem Programm, nachdem es das letzte Zeichen in UDR 
geschrieben hat?

Es darf nichts passieren, was die Übertragung stört, denn in dem Moment 
ist ein Zeichen noch unterwegs, und das andere ist gerade zum Absenden 
vorbereitet.

Beispiel RS-485, halbduplex: Da frage ich erst das Transmit Complete 
(oder so ähnlich) ab, bevor ich wieder auf Empfang schalte.


ciao
Wolfgang horn

von Sebastian E. (senz) Benutzerseite


Lesenswert?

Nach dem letzten Zeichen (Auswertung der 0) springt das Programm per ret 
zurück in eine 5 Sek Schleife, die eine LED blinken lässt, von da aus 
das Senden gestartet wird.

Das mit dem lpm und Parametern weiß ich auch erst seit heute als ich mir 
im Datenblatt die Instructionset des 2313 durchgelesen hatte. :) Hatte 
den code blind kopiert und mich gewundert, daß es trotzdem funktioniert.

von Sebastian E. (senz) Benutzerseite


Lesenswert?

Ich habe den Fehler gefunden!
Der Tip "Was passiert danach" hat geholfen! Nach dem Rücksprung lief das 
Programm ins Lehre bzw. in die folgende Senderoutine.
Also Augen auf beim wilden Hüpfen...

Danke für den Tip Wolfgang!

von Johannes M. (johnny-m)


Lesenswert?

Sebastian Enz wrote:
> Ich habe den Fehler gefunden!
> Der Tip "Was passiert danach" hat geholfen! Nach dem Rücksprung lief das
> Programm ins Lehre bzw. in die folgende Senderoutine.
> Also Augen auf beim wilden Hüpfen...
Und demnächst vielleicht sofort den kompletten Code schicken und nicht 
nur so einen Schnipsel! Ich weiß echt nicht, warum das immer wieder 
gesagt werden muss...

von Sebastian E. (senz) Benutzerseite


Lesenswert?

Sorry,
ich geb' mir Mühe!

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
Noch kein Account? Hier anmelden.