-         

Ergebnis 1 bis 7 von 7

Thema: Kugelmaus Ps2 Protokol [Bascom]

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    22.11.2009
    Beiträge
    19

    Kugelmaus Ps2 Protokol [Bascom]

    Anzeige

    Hallo.
    ich Suche jetzt schon seid Stunden nach einer Lösung für mein Problem.
    Ich weiß es gibt hunderte Threads über die Maussensoren hier im Forum, aber keiner hat mir wirklich weitergeholfen.

    Folgendes Problem:

    Ich habe eine alte Kugelmaus (Schaltplan im Anhang). Die Data Leitung habe ich am PortA.0 und die Clockleitung am PortA.1 angeschlossen.
    Mit dem Ps2-Protokol bin ich vertraut.
    Ich möchte das ganze in Bascom programmieren, da ich nur ein RS232 Kabel habe ,um den Code auf den Chip zu laden.
    Eine Assemblerlösung die ich in meinen Bascom Code integrieren kann wäre auch ok.

    Also ich habe noch ein paar Anfangsschwierigkeiten.
    Wenn ich jetzt alles Anschalte, müsste mir die Maus ausgeben, das der Selbsttest erfolgreich war und mir die Id durchgeben.
    Wie kann ich die Daten die von der Maus gesendet werden anzeigen lassen?(Am besten code Beispiel)
    Nun müsste die Maus sich ja im Ruhezustand befinden und darauf warten, das ich das Data reporting aktiviere. Wie kann ich das in Bascom machen? Und wie empfange ich dann die Daten, die die Maus mir zusendet?

    Das hat doch bestimmt jemand schonmal in Bascom realisiert und kann mir vielleicht auf die Sprünge helfen?

    Ich freue mich über jede Antwort.

    Gruß D2zA
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken schaltplan_149.png  

  2. #2
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.08.2004
    Ort
    Graz
    Beiträge
    342
    Ich hab mal versucht das Protokoll für 2 Mäuse mit asynchronem Ablauf zu implementieren. Leider hatte ich immer sporadische Übertragungsfehler, ich denke es liegt an der Print-Ausgabe, habe das inzwischen nicht mehr weiter verfolgt. Mit einer Maus funktioniert es.
    Vielleicht hilft der Code ja...

    mfg
    Angehängte Dateien Angehängte Dateien
    • Dateityp: zip ps2.zip (6,3 KB, 148x aufgerufen)

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    22.11.2009
    Beiträge
    19
    Hallo,
    vielen Dank für deinen Code, der wird sicherlich nützlich sein, ich werde mich gleich da mal reinarbeiten.


    Gruß

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    22.11.2009
    Beiträge
    19
    hallo,
    ich habe eine Frage zu deinem Code, mir ist nämlich noch nicht genau klar, welche Rolle die Ticker spielen.

    Du verwendest ja für eine Maus zwei Ticker:

    Ticker_time(1) = 10 ' ~200µS, dev1 host start bit
    Ticker_time(2) = 150 ' 10mS, update movement



    Zu Timer 1:
    Warum muss der Startbit timer 200µS betragen?
    Könnte man den Timer auch durch ein Delay ersetzen, oder muss das Zeitinterfall genau 200µS betragen?

    Zu Timer 2:
    So wie ich das verstanden habe, bestimmt man damit das Zeitintervall, in dem die Maus abgefragt wird, ob sich was bewegt hat. Ist das Richtig?
    Kann man den Timer beliebig verändern, oder durch waitms ersetzen?


    Was ich auch noch nicht ganz verstehe ist die Funktion Ticker_Get_interrupt()

    Was wird beispielsweise mit dem Befehl erreicht:
    Ps2_tickerinterrupt = Ticker_get_interrupt()

    Wird dort der Variabel Ps2_tickerinterrupt der aktuelle ticker interrupt zugewiesen, oder wird dort einfach der ticker abgearbeitet, sodass die gewünschte Zeit vergeht?



    Vielen Dank schonmal.
    Gruß D2zA

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.08.2004
    Ort
    Graz
    Beiträge
    342
    Die Ticker sind einfach Software-Timer (läuft mit einem HW-Timer, kann aber bis zu 256 Zeiten messen).

    Ticker_get_interrupt() verarbeitet die Softwaretimer Geschichte und gibt im Falle eines Interrupts dessen ID zurück mit der man dann weiter arbeiten kann, wenn kein Interrupt aufgetreten ist, wird 0 zurückgegeben.
    Durch verändern von Ticker_Time(x) kannst du auch die Zeiten ändern.

    Natürlich könntest du die ganze Tickersache durch Delays ersetzen, aber genau das wollte ich vermeiden: Delays sind einfach Schleifen die den Prozessor anhalten, mit den Tickern kann der Prozessor in den Pausen andere Sachen machen (essentiell bei der Verwendung von 2 Mäusen).

    mfg

  6. #6
    Neuer Benutzer Öfters hier
    Registriert seit
    22.11.2009
    Beiträge
    19
    Ok ich verstehe.
    Was wird denn in der Ticker Service Interrupt Routine erledigt?

    Ticker_isr:
    $asm
    push R25
    push R24
    IN R24, SREG
    PUSH R24
    $end Asm

    Ticker_timer = Ticker_preload ' reset the timer register with calculated preload value
    Ticker_newtick = True ' set flag
    $asm
    pop R24
    Out Sreg , R24
    POP R24
    pop R25
    $end Asm
    Return

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    15.08.2004
    Ort
    Graz
    Beiträge
    342
    Die Assembler-Teile sichern und stellen die verwendeten Register wieder her. Bascom erstellt normalerweise in den Interrupt-Routinen Code der alle Register sichert, da ich aber nur 3 brauche habe ich das selbst gemacht um das zu beschleunigen.
    Dann wird noch das Timerregister mit dem berechneten Wert neu geladen damit das richtige Intervall erreicht wird. Zum Schluss wird noch das Flag gesetzt dass der Interrupt aufgetreten ist um dann in der Funktion Ticker_Get_Interrupt das zu bearbeiten. Das Flag und die Bearbeitung im Hauptprogramm hat den Sinn, die Interruptroutine, die ja das laufende Programm unerbricht, möglichst kurz zu halten.

    mfg

Berechtigungen

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