Forum: Mikrocontroller und Digitale Elektronik UART Timing mit STM8S007C8


von LukiLeu (Gast)


Lesenswert?

Guten Tag
Ich habe eine sehr spezifische Frage, vielleicht kann die jemand 
beantworten.
Ich habe einen STM8S007C8 an welchem eine UART angehängt ist (an UART1). 
Wir betreiben die UART mit einer Baudrate von 19'200. Über diese UART 
empfängt der STM8 Befehle (können mehrere Bytes lang sein). Manchmal 
werden diese Befehle jedoch verschluckt.
Wir haben nun einmal das Signal aufgezeichnet. Dabei haben wir 
festgestellt, dass das Startbyte des nächsten Bytes minimal zu früh 
kommt (wenn eigentlich das Stopbit noch nicht fertig ist). Leider ist 
dies sehr schwer "bewusst zu generieren", da einige Elemente stark 
temperaturabhängig sind und dieser Effekt besonders bei höheren 
Temperaturen vorkommt (~80°C).
Aus dem Datenblatt (Seite 329) habe ich gesehen, dass jedes Bit "16x" 
abgetastet wird, wobei nur in der Mitte die Werte geprüft werden. Was 
passiert nun, wenn das Startbit kommt, bevor das Stopbit zum 16ten Mal 
abgetastet wurde? Werden die nachfolgenden Bits um diesen 1 
Abtastzeitpunkt verschoben oder synchronisiert sich der STM8 neu?
Freundliche Grüsse
LukiLeu

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

LukiLeu schrieb:
> Aus dem Datenblatt (Seite 329) habe ich gesehen, dass jedes Bit "16x"
> abgetastet wird, wobei nur in der Mitte die Werte geprüft werden. Was
> passiert nun, wenn das Startbit kommt, bevor das Stopbit zum 16ten Mal
> abgetastet wurde? Werden die nachfolgenden Bits um diesen 1

 Ublich sind 10-16 Samples pro bit, wobei fur Databits 3 Samples
 (von 16) in der Mitte verwendet werden und fur Stopbit 3 Samples
 (von 10) im letzten Drittel.
 Es wird "majority voting" verwendet, also 2 aus 3.

 Beim Stopbit werden die letzten 3 Samples ausgewertet, also
 kann der Stopbit max. 5% Abweichung haben.
 Wenn der Stopbit kurzer ist, wird der gerade empfangene Byte zwar als
 richtig erkannt, aber die Startdetection Logic furs nachste Byte wird
 wahrscheinlich nicht richtig funktionieren.

 Abhilfe:
 Sender sendet mit 2 Stopbits, beim Empfanger wird der zweite Stopbit
 niemals gepruft.

von LukiLeu (Gast)


Lesenswert?

Besten Dank für deine Antwort.

Marc V. schrieb:
> Beim Stopbit werden die letzten 3 Samples ausgewertet, also
>  kann der Stopbit max. 5% Abweichung haben.

Beim vorliegenden STM8 ist es gemäss Datenblatt (Seite 330) so:
> 1 Stop Bit: Sampling for 1 stop Bit is done on the 8th, 9th and 10th samples
Ich gehe davon aus, dass beim Stopbit auch mit 16 Samples gearbeitet 
wird (ich habe jedenfalls keine andere Angabe gefunden).

Trifft hier auch zu dass die Startdetection Logik nicht funktioniert, 
das Stopbit würde ja in der Mitte des Bits bereits als richtig erkannt 
und nicht erst am Ende.

Hier noch der Link zum Datenblatt (falls es jemanden interessiert):
http://www.st.com/web/en/resource/technical/document/reference_manual/CD00190271.pdf

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

LukiLeu schrieb:
> Beim vorliegenden STM8 ist es gemäss Datenblatt (Seite 330) so:
>> 1 Stop Bit: Sampling for 1 stop Bit is done on the 8th, 9th and 10th samples
> Ich gehe davon aus, dass beim Stopbit auch mit 16 Samples gearbeitet
> wird (ich habe jedenfalls keine andere Angabe gefunden).

 Kann auch sein, dann ist die Rechnung noch schlimer: max. 3.1% Error
 oder max. - 1.6us.
 Sollte aber jede Hardware-UART locker einhalten, allerdings nicht bei
 80°C - da lauft jeder Quartz ein bisschen schneller, somit rutscht der
 Empfanger mit jedem empfangenem bit etwas aus der Mitte um am Ende
 ausserhalb des bits zu landen. Vor dem Stopbit war schon 9*Fehler,
 also...
 Ich wurde auch mal die Bitzeiten genau ausmessen.

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.