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
>Gibt es eine Faustregel, wie viel Zeit vergeht, wenn man vom PC mehrere >Bytes an den nC sendet? Kommt auf die Baudrate an.
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
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.
>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
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
@ 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.