-
Timeout für SUART ?
Ich habe ein Problem mit dem SUART.
Ich sende alle 100ms zwei Zeichen zu einem Meßgerät. Das funktioniert ja auch noch. Jetzt kommt mein Problem.
Die Antwort vom Meßgerät kann zwischen 0 und 10 Zeichen lang sein.
Wenn ich nun den Input Befehl verwende, hängt sich das Programm auf.
Gibt es eine Möglichkeit, die Schleife zu verlassen, wenn innerhalb von 5ms kein Zeichen mehr ankommt? Die Zeichenkette hat kein CR oder LF.
Vieleicht gibt es ja auch eine andere Möglichkeit. Ich habe mir schon fast die Finger wund getippt aber noch keine dauerhaft funktionierende Lösung gefunden.
Vieleicht hat ja jemand einen Beispielcode oder einen guten Tipp ?
Vielen Dank im voraus =;
-
Hi,
guck' mal in der Hilfe beim Befehl "Timeout"
Wenn eine einstellbare Zeit lang nix kommt, verläßt er die Input Routine.
Hab's selber noch nicht ausprobiert..
Gruß
Christopher
-
Ist nett gemeint, aber der Befehl ist nur für den HW-UART gedacht.
Danke für deine Mühe
-
Hi,
sorry. habe ich falsch verstanden, ich dachte du hättest dich verschrieben:
SUART = USART ;)
Gruß
Christopher
-
Danke für den Hinweis.
Ich habe aber noch einen Fehler gemacht.
Ich sende und empfange nicht Zeichen sonder Bytes.
Deshalb kann ich auch nicht Inkey() verwenden.
Es könnte ja eine Null gesendet werden.
Danke für den Hinweis
-
Hi,
du könntest in einem Timer eine Variable hochzählen lassen, die du bei jedem empfangenen Zeichen nullst.
Erreicht die Variable einen bestimmten Wert (kein Zeichen mehr) , kannst du darauf reagieren.... Ach so, ja, BYTES , nicht Zeichen ;)
Du startest einfach direkt nach dem Input den Timer und wartest bis er den Wert erreicht hat.
Gruß
Christopher
-
Habe ich schon probiert.
Ich bekomme einen Interrupt und springe in die entsprechende Routine.
Wenn ivh dann wieder zurück springe hänge ich wieder fest.
-
Hi,
Wie sieht es mit ischarwaiting aus und dann mit inkey holen ?
Das geht auch mit "0" und dem SW- UART.
Gruß
Christopher
-
Das werde ich auf jeden Fall ausprobieren.
Danke
-
So einfach ist das nicht.
Ischarwaiting(#2) = 1
Ruft den Fehler hervor: Error : 328 Not valid for SW UART
Ich habe die Lösung für die Software UART ohne WAITKEY vor kurzem gepostet:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=17444
Kurzfassung: Du musst RX mit INTx verbinden und INT auf eine fallende Flanke auslösen und GIFR beachten.
Code:
Int0_int: 'Interrupt Handler For Int0
S = Inkey(#2) 'get it from Soft UART
Printbin S 'send to Hard UART
Set End_flag 'Flag für Soft_Ischarwaiting()
Gifr = Gifr Or &H40 'clear Flag Int0 !!!!!
Return