PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : "fernbedienung" über RS232 "so lange wie tast



jcrypter
19.08.2010, 07:44
...e gedrückt

Guten Morgen liebes Forum,

ich habe es gestern geschafft eine Verbindung zwischen meinem PC und dem Mega32 über RS232 herzustellen.

Jubel! ;)

Jetzt stellt sich für mich die Frage wie sich etwas realisieren ließe, dass einer Fernsteuerung gleich kommt.
Dass heißt, so lange ich eine Taste drücke wird eine Aktion ausgeführt.
Bzw. so lange ein bestimmtes Zeichen immer und immer wieder an den µC gesendet wird, wird irgendeine Aktion ausgeführt, meinetwegen eine LED leuchtet.

Was für Möglichkeiten gibt es da?

Was mir als erstes einfallen würde, wäre die empfangenen Daten in einem Interrupt aufzufangen und dabei abzugleichen, ob das empfangene Zeichen mit einem bestimmten Steuerzeichen übereinstimmt und dann eine Aktion auszuführen. Das hätte allerdings den Nachteil, dass ich auch wenn keine Aktion ausgeführt werden soll zumindest ein "Stop" schicken muss, da sonst die Aktion die begonnen wurde bis in alle Ewigkeit weiterläuft, da die Interruptroutine ja nicht nochmal aufgerufen würde um zu merken, dass nichts mehr kommt.

Während ich das schreibe habe ich noch eine Idee.

Man drückt am PC (in dem dafür vorgesehenen Programm, dass noch zu schreiben wäre) eine Taste(z.B. Pfeil hoch) und hält sie gedrückt. Das Programm schickt über die serielle Schnittstelle einmal ein Zeichen (z.B. eine 1 ), sozusagen als OnKeyPress-Methode.
Der µC empfängt das Zeichen sammelt es in der Interrupt-Routine auf, analysiert, empfangenes Zeichen = 1 und setzt irgendeinen Port auf 1.
Solange also nichts weiter vom PC kommen würde bleibt der Port auf 1.
Jetzt lässt der Benutzer am PC die Taste los, die OnKeyUp-Methode schickt ein weiteres Zeichen (z.B. 4).
Der µC empfängt das Zeichen und weiß, dass die vorherige Aktion beendet ist, Port auf 0.

Klingt jetzt erstmal gar nicht schlecht, finde ich ;)

Was sagt ihr dazu?
Vermutlich geht es anders und einfacher?!

viele Grüße,
Crypi

Richard
19.08.2010, 08:23
Du schaltest die LED ein wenn das Zeichen kommt und aus wenn kein oder ein
anderes kommt. Dazu muss natürlich die Schnittstellen dauernd oder per
IRQ überwacht werden. So Habe ich einmal eine Kamerasteuerung mit sehr
einfachen Programm realisiert, läuft seit ca. 20 Jahren ohne Probleme. :-)

Gruß Richard

jcrypter
19.08.2010, 08:36
hm ok, also ein ähnlicher Ansatz wie der, den ich zu erst verfolgte.

Hat auch den Vorteil, dass es nicht ewig weiter läuft wenn z.B. die Verbindung getrennt werden sollte.

Crypi

radbruch
19.08.2010, 08:52
Hallo


...in dem dafür vorgesehenen Programm, dass noch zu schreiben wäreSolche Programme gibt es schon, man nennt sie Terminalprogramme.

Von Microsoft wird für alle Windowsversionen das Hyperterminal angeboten (teileweise muss man es runterladen):
http://technet.microsoft.com/de-de/library/cc784492(WS.10).aspx

Allgemein beliebt und ebenfalls kostenlos ist HTerm:
http://www.der-hammer.info/terminal/index.htm

Ich verwende das ansifähige ZOC:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=54087

Gruß

mic

jcrypter
19.08.2010, 09:03
Danke für die Links!

Ich meinte ein Programm, das eine Benutzeroberfläche besitzt und weitere Funktionen.
Ich war einen Schritt weiter als das Terminal, mit dem mache ich ja auch meine Versuche zur Zeit.
Trotzdem danke!

Crypi

peterfido
19.08.2010, 19:29
Sowas löse ich immer mit einem zusätzlichen Zeichen (oder auch mal Bit)

Wenn etwas gestartet wird, sende ich den Code mit einer anschließenden 1, beim Beenden eine anschließende 0. Bei einem kleinen "Befehlssatz", wo 7 Bit ausreichen, wird das 8. Bit entsprechend gesetzt oder gelöscht.

Vitis
20.08.2010, 07:13
oder einfacher, nicht im urx-Interrupt das gesendete Zeichen abfragen sondern
dafür nen Timer nehmen.
UDR ist 0 wenn kein Zeichen da ist.

Willa
20.08.2010, 07:48
Ich würde in deinem PC Programm einen Timer laufen lassen der alle 100ms nachschaut, welche Testen auf deinem Computer gedrückt sind. Und dann sendet dieser Timer alle 100ms ein Paket in dem drinne steht welche der möglichen Tasten gedrückt sind und welche nicht. Auf dem µC fragst du per ischarwaiting in deinem Mainloop ab ob grad eine Information vorliegt, und schaltest danach die entsprechenden ports. Das ganze lässt sich in VB.NET mit sharpdevelop verwirklichen, da hab ich auch mal nen Artikel im wiki drüber geschrieben.