PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bild aus optischer Maus mit Bascom auslesen?



Frank E.
07.02.2008, 09:37
Hallo,

ich weiss ... das Thema optische Maus ist bereits bis zum Abwinken durch. Aber zu einem ganz bestimmten Aspekt konnte ich bisher Nichts finden:

Reichen denn die Resourcen eines ATMega8 mit Bascom aus, um einem Maussensor das Bild der internen Kamera zu entlocken (und dann per UART zu versenden)?

Ich bin neu auf dem Gebiet und kann bisher nur mit Bascom, nix C, nix ASM. Ich brauche eigentlich nur 2 Subroutinen um Bytes per PS/2 zu senden und zu empfangen, den Rest bekomme ich selber hin.

Die vorhandenen "fertigen" PS/2-bezogenen Befehle (KBD, Mouse) sind ja auf ganz bestimmte Zwecke festgelegt und gestatten keine "freie" binäre Kommunikation. Um an das interne Bild zu kommen ist doch Einiges an Registerschieberei nötig.

Mein Ziel ist eine Art "optischer Messkopf", der einfach auf Anforderung vom Host (PC oder Mac) mit einem Datenstrom antwortet: zuerst das Bild der Kamera (für einen Autofocus) und dann die Werte für X- und Y-Verschiebung.

Frank

stefan_Z
07.02.2008, 13:37
Ja, das sollte gehen, ich hab den Link zu der informativsten Seite leider grad nicht parat... Es gibt aber zu den meisten Chips auch Datenblätter.

hacker
07.02.2008, 17:10
Klar kann der ATMega8 das.



$regfile = "m8def.dat"
$crystal = 16000000
$baud = 19200


Ddr_sck Alias Ddrc.4
Ddr_sdio Alias Ddrc.5

Port_sck Alias Portc.4
Port_sdio Alias Portc.5
Pin_sdio Alias Pinc.5

Declare Sub Adns2610_init()
Declare Sub Adns2610_write_byte(byval Write_byte As Byte)
Declare Function Adns2610_read_byte() As Byte
Declare Sub Adns2610_write_operation(byval Address_byte As Byte , Byval Data_byte As Byte)
Declare Function Adns2610_read_operation(byval Address_byte As Byte) As Byte

On Urxc Onrxd
Enable Urxc
Enable Interrupts

Dim Empfangsbyte As Byte
Dim Zeichen As String * 1
Dim Print_byte As Byte

Declare Sub Picture()
Declare Sub Properties()
Declare Sub Xy()

Call Adns2610_init()



Dim Read_data As Byte

Read_data = 0




Do





Loop
End

Onrxd:

Empfangsbyte = Udr

Zeichen = Chr(empfangsbyte)

If Zeichen = "#" Then

Call Picture()

End If

If Zeichen = "!" Then

Call Properties()

End If

If Zeichen = "$" Then

Call Xy()

End If

Return

Sub Picture()

Call Adns2610_write_operation(&H00 , &H01)

Waitus 500

Call Adns2610_write_operation(&H08 , &H00)

Waitus 100

Local I As Integer

For I = 1 To 324

Print_byte = Adns2610_read_operation(&H08)

Print Print_byte;

Waitms 10

Next I

End Sub

Sub Properties()

Print_byte = Adns2610_read_operation(&H04)

Print Print_byte;

Waitms 10

Print_byte = Adns2610_read_operation(&H09)

Print Print_byte;

Waitms 10

Print_byte = Adns2610_read_operation(&H0a)

Print Print_byte;

End Sub

Sub Xy()

Print_byte = Adns2610_read_operation(&H03)

Print Print_byte;

Waitms 10

Print_byte = Adns2610_read_operation(&H02)

Print Print_byte;

End Sub

Sub Adns2610_init()

Ddr_sck = 1
Ddr_sdio = 1

Port_sck = 1
Port_sdio = 1

Call Adns2610_write_operation(&H00 , &H80)

Waitus 250

End Sub

Sub Adns2610_write_byte(byval Write_byte As Byte)

Local I As Byte

Ddr_sdio = 1

For I = 7 To 0 Step -1

Port_sck = 0

Port_sdio = Write_byte.i

Waitus 1

Port_sck = 1

Waitus 1

Next I

Ddr_sdio = 0
Port_sdio = 0

End Sub

Function Adns2610_read_byte() As Byte

Local I As Byte

Local Data_byte As Byte

Waitus 250

For I = 7 To 0 Step -1

Port_sck = 0

Waitus 1

Port_sck = 1

Data_byte.i = Pin_sdio

Next I

Adns2610_read_byte = Data_byte

End Function

Sub Adns2610_write_operation(byval Address_byte As Byte , Byval Data_byte As Byte)

Address_byte = Address_byte Or &B10000000

Call Adns2610_write_byte(address_byte)
Call Adns2610_write_byte(data_byte)

End Sub

Function Adns2610_read_operation(byval Address_byte As Byte) As Byte

Call Adns2610_write_byte(address_byte)

Adns2610_read_operation = Adns2610_read_byte()

End Function

Ich hab den jetzt aber nicht gekürzt. Aber ich denke, da sollte jeder in der Lage sein, die nötigen Subs herraus zu lesen.

Viel Erfolg damit.

Wenn noch Fragen bzgl. Maussensor sind, einfach fragen.

Gruß
Hacker

sechsrad
08.02.2008, 12:30
welche maus kann man da nehmen um dieses projekt zum laufen zu bringen?

hacker
08.02.2008, 12:48
Den Maussensor ADNS2610 von Agilent.

Alex20q90
31.03.2008, 15:58
Hi,

ich hab zufällig eine Maus gefunden mit einem 2610 drinn :cheesy:

Ich hab mal Dein Programm so abgeändert das es beim Einschalten die Daten sendet. Hab halt viele Zahlen auf dem Bildschirm (der Wert wird kleiner je mehr man den Sensor abdeckt).

Ich hab mal hier irgendwo ein Programm gesehen mit dem man die Pixeldaten des Sensors abbilden kann! Weist Du wo ich das herbekomme? Wird damit gern mal etwas spielen!

Grüße
Alex

hacker
31.03.2008, 17:10
Ich hab leider schon mein max. Uplodelimit erreicht. Ich kann es dir per Mail schicken, wenn du magst. Dann schick mir einfach eine PM.


Gruß Hacker

stefan_Z
01.04.2008, 17:33
frag doch mal den Admin nach mehr Upload... So wervolle Sachen sollten uns nicht entgehen, nur weil du eine Upload-Limit wie ein Noob hast. Sowas hast du nicht verdient! ;-)

hacker
01.04.2008, 18:09
Nein, das wäre nicht gerecht. Jeder soll gleich viel Upload bekommen.

Viel mehr würde es mir was bringen, wo ich meinen ganzen geposteten Anhänge oder so wieder löschen kann.


Kann man im Wiki Dateianhänge für die einzelnen Artikel machen? Da wäre es sinnvoll, das upload frei zugeben...(wenn es nicht schon ist).

amal
16.05.2011, 18:38
gibt es diese Code auch in C?

Che Guevara
16.05.2011, 19:39
Hallo,

hast du dir den Code mal angesehen? Ich denke, den könnte man innerhalb kurzer Zeit selbstständig in C übersetzen, den es sind nur wenige / keine Bascom-Spezifische Befehle enthalten. Wenn du Fragen hast, kannst du diese gerne Stellen, jedoch kann ich nur Bascom, aber ich denke, ich kann dir das meiste erklären, sodass du es dann in C umsetzen kannst.
BTW:
Hast du dir mal angesehn, wann die Beiträge verfasst wurden? Ich bin mir nicht sicher, ob all diese User überhaupt noch im Forum aktiv sind...

Gruß
Chris

amal
19.05.2011, 13:16
Den Maussensor ADNS2610 von Agilent.

ich habe das mit dem Beispiel in C gemacht, aber leider hat es nicht geklappt, da der Maussensor ADNS2610 keinen Motion-Status hat, daher kann man gar nicht die Pins DXOVF und DYOVF abfragen, wie hast du es gemacht? Hacker, ich habe versucht dir eine private Nachricht zu senden, leider hat es nicht geklappt!
VG A