Hallo Leute.
Ich beschreibe hier kurz, wie ich die Platine einer optische Maus mit dem PAN101 IC an meinem ATMEGA angeschlossen habe um später damit Wegmessungen durchzuführen.
Grund, warum ich dafür einen Thread eröffne ist u.a., dass im Thread
https://www.roboternetz.de/phpBB2/viewtopic.php?t=22353 im AVR-C Forum danach gefragt wurde und dass beim c't Bot zwar ein Sensor einer optischen Maus verwendet wird, dieser aber nicht der PAN101 ist.
Wenn man sich die Platine der Maus ansieht, findet man leicht die Anschlüsse für PS/2 VCC, GND, Data und Clock. VCC und GND kann man mit den 5V/GND des AVR verbinden. die Data und Clock sind allerdings für das PS/2 Protokoll und für uns nicht geeignet.
Daten und Clockleitung des PAN101 liegen auf Pin 19 und 18 und sind leider auf der Mausplatine auf Masse gelegt. Daher musste ich die Verbindungen mit einem kleinen Trennschleifer trennen und danach zwei separate Kabel anlöten.
Bild hier
Die fertige Robomausplatine mit Stiftleiste sieht man hier.
Bild hier
Die Data und SCK Ausgänge habe ich mit PinD5 und 6 am AVR verbunden, was allerdings nur für das beigefügt Bascom Programm eine Rolle spielt.
Wichtig ist, sich genau an das Protokoll im Datenblatt zu halten, da habe ich einige erfolglose Versuche hinter mich bringen müssen.
Bei Fragen und natürlich auch Anregungen und Kritik habe ich ein offenes Ohr.
Code:$regfile = "m32def.dat" $crystal = 8000000 ' [LCD Code , Init, etc. entfernt..] Sda Alias Portd.5 Sck Alias Portd.6 Sdapin Alias Pind.5 Sckpin Alias Pind.6 Dim B As Byte Dim Bb As Byte Dim Ix As Integer Dim Iy As Integer Dim I As Byte Declare Sub Maus_sens_writebyte(bdata As Byte) Declare Function Maus_sens_readbyte()as Byte Declare Sub Maus_sens_write(adr As Byte , Bdata As Byte) Declare Function Maus_sens_read(byval Adr As Byte) As Byte Config Sdapin = Output Config Sckpin = Output Sda = 1 'Sck = 1 Do B = Maus_sens_read(2) If B.7 = 1 Then Bb = Maus_sens_read(3) Ix = Bb If Bb.7 = 1 Then Bb.7 = 0 Ix = Bb - 128 End If Bb = Maus_sens_read(4) Iy = Bb If Bb.7 = 1 Then Bb.7 = 0 Iy = Bb - 128 End If Locate 2 , 1 Lcd B ; "-- X:" ; Ix ; " Y:" ; Iy ; " " 'Waitms 50 End If Loop End ' Hilfsfunktionen für 2 Draht ' Uebertraegt ein Byte an den Sensor Sub Maus_sens_writebyte(bdata As Byte) Config Sdapin = Output 'Daten rausschreiben For I = 7 To 0 Step -1 Sck = 0 Sda = Bdata.i Sck = 1 Waitus 1 Next I Sda = 1 ' high z-state Sck = 0 End Sub 'Liest ein Byte vom Sensor Function Maus_sens_readbyte()as Byte Dim Bdata As Byte Bdata = 0 Config Sdapin = Input For I = 7 To 0 Step -1 Sck = 1 Waitus 1 Bdata.i = Sdapin Sck = 0 Next I Maus_sens_readbyte = Bdata End Function 'Uebertraegt ein write-Kommando an den Sensor Sub Maus_sens_write(byte Adr , Dim Bdata As Byte) Adr.7 = 1 Call Maus_sens_writebyte(adr) Call Maus_sens_writebyte(bdata) Waitus 4 End Sub 'Schickt ein Lesekommando an den Sensor 'und liest ein Byte zurueck Function Maus_sens_read(dim Adr As Byte) As Byte Call Maus_sens_writebyte(adr) Waitms 4 Maus_sens_read = Maus_sens_readbyte() End Function
Und hier noch die Ausgabe auf dem LCD beim Verschieben der Maus nach "rechts vorne".
Bild hier







Zitieren
)

Lesezeichen