UART sendet letzte Zeichen falsch

OP Persönliche Seite #670466
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
Angehängte Dateien:
#670481
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.
Gast #670519
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
OP Persönliche Seite #670536
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.
#670545
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...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren