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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.