PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Maussensor am atmega - Fehlersuche?



auto-eng
28.10.2008, 21:59
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:


' 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)?

auto-eng
28.10.2008, 23:06
wenn ich in einer Schleife alle Register durchgehe



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:



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?

mare_crisium
29.10.2008, 15:45
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

auto-eng
29.10.2008, 21:45
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

fhs
30.10.2008, 08:10
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

oberallgeier
30.10.2008, 09:24
Hallo Fred,


... 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.

fhs
30.10.2008, 09:50
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/index.php/Maussensor#seriell_.C3.BCber_SDIO .

Viele Grüße

Fred

fhs
30.10.2008, 09:51
tut mir leid -- doppelt --- gelöscht

mare_crisium
30.10.2008, 11:15
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