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
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.