-         

Ergebnis 1 bis 8 von 8

Thema: "fernbedienung" über RS232 "so lange wie tast

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.07.2004
    Beiträge
    510

    "fernbedienung" über RS232 "so lange wie tast

    Anzeige

    ...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

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    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

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.07.2004
    Beiträge
    510
    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

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.783
    Blog-Einträge
    8
    Hallo

    ...in dem dafür vorgesehenen Programm, dass noch zu schreiben wäre
    Solche 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/l...92(WS.10).aspx

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

    Ich verwende das ansifähige ZOC:
    http://www.roboternetz.de/phpBB2/zei...ag.php?t=54087

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.07.2004
    Beiträge
    510
    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

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    18.05.2007
    Ort
    Berlin
    Alter
    46
    Beiträge
    765
    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.
    Wenn das Herz involviert ist, steht die Logik außen vor! \/

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    oder einfacher, nicht im urx-Interrupt das gesendete Zeichen abfragen sondern
    dafür nen Timer nehmen.
    UDR ist 0 wenn kein Zeichen da ist.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  8. #8
    Erfahrener Benutzer Roboter Genie Avatar von Willa
    Registriert seit
    26.10.2006
    Ort
    Bremen
    Alter
    37
    Beiträge
    1.269
    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.
    Viele Grüße, William
    -> http://william.thielicke.org/

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •