Forum: Mikrocontroller und Digitale Elektronik Problem mit BASCOM / UART


von Hartmut (Gast)


Lesenswert?

Mahlzeit,

ich nutze einen Atmega2560 und empfange Daten über UART.
Hierbei habe ich folgendes Problem:
Ich Frage mit ischarwaiting() ab, ob ein Zeichen im Buffer liegt.
Anschließend hole ich mir die Daten mit dem INPUT Befehl.

Wird nun die Übertragung gestört bzw. die UART-Schnittstelle 
unterbrochen, wird natürlich nicht das CR empfangen.
Somit bleibt der Controller bei dem INPUT Befehl hängen, solange bis das 
CR empfangen wird.

Wie kann ich dies umgehen?


Gruß

Hartmut

von Christian K. (christian_rx7) Benutzerseite


Lesenswert?

Einen Timer starten und bei jeden empfangenen Zeichen auf 0 zurück 
setzen, wenn der Timer einen gewissen Wert erreicht hat, Empfang 
abbrechen.
Nennt sich Timeout.

Christian_RX7

von Hartmut (Gast)


Lesenswert?

Darum geht es ja genau...
Man kann INPUT nicht abbrechen

von mue_c (Gast)


Lesenswert?

Input kannst du über die &timeout Direktive abbrechen.
Sauberer ist meiner Meinung nach, jedes Zeichen einzeln über den URXC 
Interrupt zu empfangen. Dann kannst du dir auch das permanente Abfragen 
von IsCharWaiting() schenken.

von mue_c (Gast)


Lesenswert?

Sorry, heißt natürlich $timeout

von allu (Gast)


Lesenswert?

Zum Einlesen der Zeichen verwende ich Inkex().

If          Ischarwaiting() = 1 Then                 'Zeichen lesen
            Incr Zeiger
            Empfangspuffer(zeiger) = Inkey()   'Byte aus dem Uart lesen
End If

Gruß Allu

von Udo (Gast)


Lesenswert?

Warum nicht per Hardware-UART und Interrupt? Das stört dann das 
restliche Programm nicht. Ind per festgelegtem Timer den Puffer mal 
löschen.

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.