www.mikrocontroller.net

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


Autor: Phillip Hommel (philharmony)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: jack (Gast)
Datum:

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

Kommt auf die Baudrate an.

Autor: Phillip Hommel (philharmony)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja, klar, sorry.
Baud 9600, 8er Framing, 2Stop, kein Parity.

Autor: sechszweisechs (Gast)
Datum:

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

Autor: jack (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
9600 Symbole (also Byte) pro Sekunde.
Rechne es Dir aus.

Autor: Helmi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: sechszweisechs (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: tastendrücker (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Phillip Hommel (philharmony)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.