-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Bild aus optischer Maus mit Bascom auslesen?

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.10.2007
    Beiträge
    113

    Bild aus optischer Maus mit Bascom auslesen?

    Anzeige

    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

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    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.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    10.03.2005
    Alter
    28
    Beiträge
    967
    Klar kann der ATMega8 das.


    Code:
    $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
    Ich würde ja gern die Welt verändern..., doch Gott gibt mir den Quellcode nicht!

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    14.01.2008
    Beiträge
    164
    welche maus kann man da nehmen um dieses projekt zum laufen zu bringen?

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    10.03.2005
    Alter
    28
    Beiträge
    967
    Den Maussensor ADNS2610 von Agilent.
    Ich würde ja gern die Welt verändern..., doch Gott gibt mir den Quellcode nicht!

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    26.07.2004
    Beiträge
    274
    Hi,

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

    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

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    10.03.2005
    Alter
    28
    Beiträge
    967
    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
    Ich würde ja gern die Welt verändern..., doch Gott gibt mir den Quellcode nicht!

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    26.05.2007
    Beiträge
    594
    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!

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    10.03.2005
    Alter
    28
    Beiträge
    967
    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).
    Ich würde ja gern die Welt verändern..., doch Gott gibt mir den Quellcode nicht!

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    23.03.2011
    Beiträge
    51
    gibt es diese Code auch in C?

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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