Forum: Mikrocontroller und Digitale Elektronik UART PC <-> AVR zeiten


von Phillip H. (philharmony)


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

von jack (Gast)


Lesenswert?

>Gibt es eine Faustregel, wie viel Zeit vergeht, wenn man vom PC mehrere
>Bytes an den nC sendet?

Kommt auf die Baudrate an.

von Phillip H. (philharmony)


Lesenswert?

Ach ja, klar, sorry.
Baud 9600, 8er Framing, 2Stop, kein Parity.

von sechszweisechs (Gast)


Lesenswert?

9600,8,n,2 sind 11Bit zu je 1/9600 s, sind 1.145ms. War das schwierig ?

von jack (Gast)


Lesenswert?

9600 Symbole (also Byte) pro Sekunde.
Rechne es Dir aus.

von Helmi (Gast)


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

von sechszweisechs (Gast)


Lesenswert?

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.

von tastendrücker (Gast)


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

von Peter D. (peda)


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

von Falk B. (falk)


Lesenswert?

@ Peter Dannegger (peda)

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

Soviel zum Thema Windows, Multitasking und Kerneltreiber. Ohje!

MFG
Falk

von Phillip H. (philharmony)


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

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.