Forum: Mikrocontroller und Digitale Elektronik bascom software uart waitkey abbrechen


von dani (Gast)


Lesenswert?

Hallo,

ich muss mit dem SW-UART per WAITKEY Daten einlesen.
Das Problem ist, das nicht immer Daten anliegen und sich dann das 
Programm "aufhängt". INKEY kann ich nicht ohne weiteres verwenden, da 
die Abfrage und Auswertung zu umfangreich wird.

Beim HW-UART setzte ich einfach in einem Timerinterrupt Ucsra.rxc = 1 
und das Progamm läuft nach WAITKEY weiter. Gibt es beim SW-UART eine 
Variable die anzeigt das ein BYTE eingelesen wurde?

dani

von Heinz (Gast)


Lesenswert?

Nein. Beim Software-UART mußt du pollen. Daß heißt, du must ständig 
nachschauen, ob ein Byte empfangen wurde. Besser wäre es, eine eigene 
Interruptroutine zu schreiben, wenn du mit der implementierten nicht 
zufrieden bist.

von dani (Gast)


Lesenswert?

Hab ich mir schon gedacht. Die Schwierigkeit ist, das ich an das Layout 
und den µC (Mega8) gebunden bin und ohne die Routine schon bei 98% 
Speicherauslastung bin .... ich befürchte eine Routine zum "Pollen" und 
Auswerten passt nicht mehr rein ...
Ich hab auch schon versucht im Timerinterrupt Daten auf die UART zu 
schreiben, damit WAITKEY was zu lesen hat, funktioniert leider nicht.

von Heinz (Gast)


Lesenswert?

dani schrieb:
> Die Schwierigkeit ist, das ich an das Layout
> und den µC (Mega8) gebunden bin und ohne die Routine schon bei 98%
> Speicherauslastung bin ....
Es gibt doch auch noch den ATmega168, der über doppelt so viel Flash 
verfügt.

von dani (Gast)


Lesenswert?

Daran hab ich auch schon gedacht, wollte aber drum herum kommen.
Irgendwie kann ich den 164 und 168n nicht mit Ponyprog programmieren, 
obwohl ich ihn auswählen kann.

von Heinz (Gast)


Lesenswert?

Versuch mal, dein Problem in C zu formulieren. Ich denke, der GCC 
(AVR-Studio) ist ein wenig effizienter als BASCOM. Vielleicht passt es 
dann ja noch in den ATmega8. Hast du in BASCOM die Option "Optimize 
code" mit einem Häkchen versehen?

von weinbauer (Gast)


Lesenswert?

es gibt das $timeout ...
bei Softuart leg ich die gern auf nen Interrupteingang, dann kann man 
einfach auf die fallende flanke triggern

von dani (Gast)


Lesenswert?

Danke für die Antworten.

"optimize code" ist mir bisher nie aufgefallen ... werde ich mal 
probieren.

Mein SW-UART liegt sogar schon auf INT0.

Du meinst  das Auslesen mit INKEY durch eine negative Flanke initiieren?

von weinbauer (Gast)


Lesenswert?

exakt, den config int0 auf falling und dann inkey in der ISR

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.