PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Inkey(#5)-Abfrage bei SW-Uart funktioniert nur manchmal



otto richter
13.06.2010, 08:15
Hallo da draußen,

ich habe ein Board mit einem ATMega1284 unter BASCOM...9.9. Es funktioniert soweit auch alles.

Jetzt habe ich einen SoftUart #5 ist mit


Open "comd.4:9600,8,N,1" For Input As #5

initialisiert.

Wenn ich im Hauptprogramm eine Abfrage der Seriellen Schnittstelle mit inkey(#5) mache, funktioniert diese nur manchmal.

Baudrate, RS232-Treiber-IC, Terminal-Einstellungen etc. sind in Ordnung, es geht ja auch, aber eben nur manchmal.

Der Code in der Do - Loop - Haupt-Schleife:


Do
If Inkey(#5) <> 0 Then ' Zeichen da ?
Print #6 , "Zeichen da!"
Else
Print #6 , ".";
End If
waitms 10
loop

Wenn ich Daten über das Terminal an #5 schicke werden diese nur manchmal erkannt (="Zeichen da!"). Meist wird jedoch der Tastendruck ignoriert und das Programm sendet ein ".".

Je häufiger bzw. schneller ich die inkey()-Abfrage mache, durch verkleinern der wait-Zeit, desto höher die "Trefferrate".

Dem Handbuch nach ist inkey() die einzige Möglichkeit bei einm Soft-Uart 'rauzubekommen, ob ein Zeichen angekommen ist. Input #5 kann ich nicht machen, da das Programm dann an der Abfrage wartet.

Das Daten-Eingangsregister des Soft-Uarts scheint von irgend jemandem überschrieben zu werden, oder gibt es so etwas wie ein "Receiver-Ready-Flag"

Hat jemand eine Erklärung?

Vielen Dank

Otto Richter

Furtion
14.06.2010, 14:20
Hi,

das Problem ist so weit ich das beurteilen kann, dass er das Zeichen
nicht erkennen kann, wenn er in der waitms ist. Umgehen könntest du das
Eingangssignal auf nen Interruptport setzt, und er dann in eine ISR springt,
in der er das Zeichen ausließt. Da der Softuart eine reine Softwarelösung
ist, gibt es auch keine Receiver-Ready-Flags oder Dateninputregeister. Der
Controller wartet an der Stelle Inkey() warscheinlich genau 1 Byte ab,
wenn in der Zeit grade zufällig keins gesendet wird, kommt auch keins an.