UART PC <-> AVR zeiten

OP #706838
Lesenswert?

Hallo
Gibt es eine Faustregel, wie viel Zeit vergeht, wenn man vom PC mehrere 
Bytes an den nC sendet?
Also wenn ich zb 0x54 0xfd 0x7d 0x... sende.

Hintergrund ist folgender:
Ich baue mir aus den Bytes ein 16-stelliges Char-Array zusammen, welches 
dann am Ende, wenn es fertig empfangen wurde (per Interrupt-Routine) 
über Schieberegister aus LEDs ausgegeben wird.
Dazu habe ich eine Globale counter-variable, die bei jedem Byte 
incrementiert wird, bis 16bytes empfangen wurden.
Dann wird ausgegeben.
Ich möchte nun den Fall eines Übertragungsabbruchs abfangen, indem ich 
bei jedem Byte eine art "Watchdog" neu starte (8-Bit/16Bit counter), 
dessen overflow-interrupt mir den Zähler wieder auf 0 setzt.
Kommt also eine Weile kein neues byte mehr dann wird der counter 
resettet und die nächste Übertragung kann wieder bei null einsetzen.
Dazu muß ich dann eben wissen, wie lange der Timer etwa laufen sollte 
bis er ein interrupt auslöst.
Der Atm8535 läuft bei mir mit 3,6864mHz.
Grüße
Phil
Gast #706864
Lesenswert?

Bei 9600 Baud z.B. dauert jedes Bit das uebertragen wird 104uS
Wenn du nun 8Bit (also 1 Byte) uebertragen moechtest dann sin das 
8Datenbit + 1 Stopbit + 1Startbit = 10 Bit *104uS = 1.04mS .
Das ist die Zeit die fuer die uebertragung von 1 Byte gebraucht wird.
Wenn du nun ein Timeout realisieren moechtest muss das halt laenger als 
obengenannte Zeit sein. Fuer deine zwecke wuerde Ich einfach mal 
16*1.04mS
annehmen. So wuerde das Timeout halt dann ablaufen wenn die 16 Zeichen 
uebertragen worden sind. Wie gesagt nur als Beispiel kannste gerne 
laenger als auch kuerzer machen.


Gruss Helmi
Gast #706871
Lesenswert?

>Baud 9600, 8er Framing, 2Stop, kein Parity.

Na dann rechne doch:

 1 Startbit + 8 Datenbits + 2 Stopbits = 11 Bits

 9600 Baud (=) 9600 Bit/s

 => 1 Datum (11 Bits) benötigen 11/9600 = 0,001145s (=) 1.15ms
#706882
Lesenswert?

sechszweisechs wrote:
> Beim PC kann man sich nicht darauf verlassen, dass alle bytes an einem
> stueck kommen. Da koennen schon mal ein paar Duzend ms dazwischen sein.

Start nebenbei ein Schachprogramm oder ne Videobearbeitung und es können 
sogar mehrere Sekunden sein.

Ein Timeout aus PC-Richtung ist völlig unzuverlässig bzw. es sollte dann 
größer 30s sein.


Peter
OP #706895
Lesenswert?

Hmmm, das macht das ganze natürlich schon schwieriger.
Gut, ich könnte meinerseits ja auch einfach von nC ein Timeout vorgeben 
und wenn es erreicht ist ein "Timeout-Byte" senden damit der PC "weiß" 
daß er nochmal anfangen kann.
Ich benutze übrigens einen USB-Comport (UM232R).
Vielen Dank erstmal für die Tips!
Phil

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