- LiTime Speicher und Akkus         
Ergebnis 1 bis 9 von 9

Thema: Maussensor am atmega - Fehlersuche?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    12.09.2007
    Beiträge
    10

    Maussensor am atmega - Fehlersuche?

    Anzeige

    Praxistest und DIY Projekte
    Hallo, Hilfe

    ich versuche einen optischen Maussensor an einen Atmega 644 anzuschließen. Leider bekomme ich keine Kommunikation zustande!

    Dazu habe ich eine billige Maus auseinander genommen und die Platine soweit zurecht geschnitten, dass nur noch die Bauteile, die laut Datenblatt für die Ansteuerung des Sensorchips notwendig sind, übrig bleiben (Platzgründe).
    Es handelt sich nicht um den bekannten ADNS-2610 Sensorchip sondern über einen (chinesischen?) MSC-12085, der aber beinahe genau so aussieht und fast die gleiche Beschaltung hat, wie im Datenblatt vom 2610.

    Angeschlossen über ein 60cm 4adriges Kabel an ein Atmega Board. Bei Stromanschluss erwacht der Sensor, bzw die LED zum Leben (d.h. Helligkeitsanpassung wie bei einer Maus funktioniert wohl.)

    Programmieren tue ich in Bascom wie folgt:
    Code:
    ' write byte 1 #1000 0000
    
       Write_byte = &H04
    
       Ddr_sdio = 1
    
       Port_sck = 0
       Port_sdio = 1
       Port_sck = 1
       Waitus 1
    
       Port_sck = 0
       Port_sdio = Write_byte.6
       Port_sck = 1
       Waitus 1
    
       Port_sck = 0
       Port_sdio = Write_byte.5
       Port_sck = 1
       Waitus 1
    
       Port_sck = 0
       Port_sdio = Write_byte.4
       Port_sck = 1
       Waitus 1
    
       Port_sck = 0
       Port_sdio = Write_byte.3
       Port_sck = 1
       Waitus 1
    
       Port_sck = 0
       Port_sdio = Write_byte.2
       Port_sck = 1
       Waitus 1
    
       Port_sck = 0
       Port_sdio = Write_byte.1
       Port_sck = 1
       Waitus 1
    
       Port_sck = 0
       Port_sdio = Write_byte.0
       Port_sck = 1
       Waitus 1
    
    
       Ddr_sdio = 0
       Port_sdio = 0
    
    
    ' read byte 2
    
       Waitus 250
    
       Port_sck = 0
       Waitus 1
       Port_sck = 1
       Data_byte.7 = Pin_sdio
    
       Port_sck = 0
       Waitus 1
       Port_sck = 1
       Data_byte.6 = Pin_sdio
    
       Port_sck = 0
       Waitus 1
       Port_sck = 1
       Data_byte.5 = Pin_sdio
    
       Port_sck = 0
       Waitus 1
       Port_sck = 1
       Data_byte.4 = Pin_sdio
    
       Port_sck = 0
       Waitus 1
       Port_sck = 1
       Data_byte.3 = Pin_sdio
    
       Port_sck = 0
       Waitus 1
       Port_sck = 1
       Data_byte.2 = Pin_sdio
    
       Port_sck = 0
       Waitus 1
       Port_sck = 1
       Data_byte.1 = Pin_sdio
    
       Port_sck = 0
       Waitus 1
       Port_sck = 1
       Data_byte.0 = Pin_sdio
    
       Print "Byte: " ; Data_byte
    Ich erhalte allerdings immer nur Nullen!!!

    Hat jemand eine Idee, wie man so eine Schaltung debuggen kann (ohne Oszi)?
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken mausplatine_002b.jpg  

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    12.09.2007
    Beiträge
    10
    wenn ich in einer Schleife alle Register durchgehe

    Code:
    Dim Vers As String * 50
    Vers = "opt Maus 0001"
    
    
    
    Ddr_sck Alias Ddrb.5
    Ddr_sdio Alias Ddrb.4
    
    
    Port_sck Alias Portb.5
    Port_sdio Alias Portb.4
    Pin_sdio Alias Pinb.4
    
    
       Dim Data_byte As Byte
       Dim Write_byte As Byte
    
    
    'Print "Hallo"
    
    Print Vers
    Print
    
    
    
       Ddr_sck = 1
       Ddr_sdio = 1
    
       Port_sck = 1
       Port_sdio = 1
    
       'Call Adns2610_write_operation(&H00 , &H80)
    
       Waitus 250
    
       Write_byte = &H00
    
    Do
    
       Wait 2
    
    ' write byte 1 #1000 0000
    ...
    ' read byte
    ...
    
    
       Print "Register: " ; Write_byte ; " read: " ; Data_byte
    
       Write_byte = Write_byte + 1
       Write_byte = Write_byte Mod 30
    Loop
    
    End
    bekomme ich als Antwort abwechselnd 0 und 255:

    Code:
    opt Maus 0001
    
    Register: 0 read: 0
    Register: 1 read: 255
    Register: 2 read: 0
    Register: 3 read: 255
    Register: 4 read: 0
    Register: 5 read: 255

    ???
    Stimmt das Timing nicht?

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    auto-eng,

    ohne ein Datenblatt Deines ICs ist Deine Frage schwer zu beantworten. Der einzige Hinweis, den ich gefunden habe, findest Du im angehängten pdf auf Seite 3. Leider geht daraus nur der Hersteller hervor: Unity, vermutlich in China, nicht in Texas (www.unity.com).

    Es könnte sein, dass der IC nicht den ADNS-Bus unterstützt, sondern den PS/2-Bus.

    Ciao,

    mare_crisium
    Angehängte Dateien Angehängte Dateien

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    12.09.2007
    Beiträge
    10
    Vielen Dank für die Antwort und die Recherche!

    Ich hatte dieses Datenblatt auch schon gefunden und aus folgender Stelle:

    Sensor Support
    • Support Traditional Ball Type Sensor
      Support PixArt PAN101B Series Optical Sensor
      Support PixArt PAN3101DB Optical Sensor
      Support Agilent HDNS-2000, ADNS-2051, ADNS-2610, ADNS-2620 Optical Sensor
      Support Unity MCS-12085 Optical Sensor



    und der Tatsache, dass eine Sonderbehandlung des MCS Chips nirgends erwähnt wird geschlossen, dass der Chip nicht nur Pinkompatibel ist sondern wohl auch das gleiche Protokoll verwendet wie die Agilent Chips.

    Ich habe da wenig Erfahrung: Ist meine Schlussfolgerung zulässig?

    Könnte jemand, der mit den ADNS Chips experimentiert, meinen Versuch nachstellen und den Code testen oder mir einen funktionierenden Testcode zur Verfügung stellen?

    Danke, Dirk

  5. #5
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.02.2006
    Ort
    3. Planet eines kleinen Sonnensystems in einem Seitenarm der Milchstraße
    Alter
    69
    Beiträge
    622
    Hallo Dirk,

    da ich nur Assembler und C einsetze, verstehe ich Dein Bascom nicht. Bisher habe ich verschiedene Maus-Sensoren zum Laufen bekommen (auch "no name" Varianten). Das Protokoll war immer gleich. Weißt Du, mit welcher Frequenz der Sensor läuft? Die Protokoll-Datenrate sollte 1/12 dieser Frequenz nicht überschreiten. Die Register-Adressen können sehr unterschiedlich sein. Wenn ich eine Maus öffne, trenne ich nur die SDIO- und SCLK-Leitungen zwischen Sensor und Controller, da der Sensor bei Billig-Mäusen oft keinen eigenen Resonator hat und den Systemtakt vom Controller erhält (ich meine hier nicht SCLK!).


    Gruß

    Fred
    Only entropy comes easy. - Anton Checkhov

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.651
    Hallo Fred,

    Zitat Zitat von fhs
    ... Bisher habe ich verschiedene Maus-Sensoren zum Laufen bekommen (auch "no name" Varianten). Das Protokoll war immer gleich ...
    Das ist gut zu wissen - da werde ich sicher bei Gelegenheit auf Dich zurückkommen. Ich hatte Kugelmäuse und optische zerlegt und deren Ausgänge studiert (sprich: herumgedocktert und gebastelt und gestochert, eben ohne wirkliche Systematik) und das dann ziemlich entnervt weggelegt. Aber ich will diese Navigationshilfe bei Gelegenheit wieder angehen.
    Ciao sagt der JoeamBerg

  7. #7
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.02.2006
    Ort
    3. Planet eines kleinen Sonnensystems in einem Seitenarm der Milchstraße
    Alter
    69
    Beiträge
    622
    Hallo Joe,

    wenn man sowieso einen µC einsetzt, kann man leichter das Signal direkt vom Sensor anzapfen als das PS/2- bzw. USB-Signal, das der Controller ausgibt. Uralte Sensoren haben auch Quadraturausgänge; die neueren verwenden eine Zweidraht-Übertragung: https://www.roboternetz.de/wissen/in....C3.BCber_SDIO .

    Viele Grüße

    Fred
    Only entropy comes easy. - Anton Checkhov

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    24.02.2006
    Ort
    3. Planet eines kleinen Sonnensystems in einem Seitenarm der Milchstraße
    Alter
    69
    Beiträge
    622
    tut mir leid -- doppelt --- gelöscht

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.12.2005
    Beiträge
    535
    auto-eng,

    ja, Deine Folgerung aus dem Datenblatt ist schlüssig. In meiner Billig-Maus war halt ein IC von @Lab verbaut, der nur über PS/2 anzusprechen war. Bei Deinem ist das wohl anders.

    Leider programmiere ich meine Sachen alle in Assembler, deshalb kann ich Dich in puncto Timing und Bascom leider nicht beraten .

    Ciao,

    mare_crisium

Berechtigungen

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

LiTime Speicher und Akkus