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
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.
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.
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.
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.
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?
es gibt das $timeout ... bei Softuart leg ich die gern auf nen Interrupteingang, dann kann man einfach auf die fallende flanke triggern
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.