Werbung
Moin,
Grundsätzlich sind die meisten Sensoren von optischen Mäusen noch mit einer PS/2 Schnittstelle ausgerüstet, wenn auch nicht am Kabel, aber noch irgendwo am Chip. Such einfach mal das Datenblatt des Sensors (Bezeichnung steht auf dem Chip) und die Spezifikationen von PS/2. Ist im Grunde ein 3-Draht Bus, mit nem speziellen Code kannst du dann die verarbeiteten Mausdaten auslesen, die sollten aussehen, wie n Integer-Wert für die X und für die Y Richtung, welche die aktuell zurückgelegte Pixelzahl beschreibt. Google hilft sicher.
Hi,
danke erstmal werd das alles mal ausprobieren. PS/2 Maus ist es nicht es ist eine alte USB Laserfunkmaus. Ich bau die Muas jetzt mal ausseinander und guck mal was das fürn Chip is.
VD Panzerfan
Hi,
\/ ich hab den Sensor rausgefunden und das Datenblatt hab ich auch noch!!! Es ist ein ADNS2620. Jetzt schau ich mal wie man den anschließen könnte.
mfg Panzerfan
Edit: Weiss jemand wie man SDIO und SCK ausliest. Wie ich gesehen hab ist das so was ähnliches wie I²C, könnte man damit das Teil auch auslesen?
Hallo Panzerfan,
so ein Maussensor hat eine SPI Schnittstelle, über die man das Teil auslesen kann. Im CC2 Forum gibt es dazu ein Projekt, bei dem ein ADNS5020 an einen ATmega88 angeschlossen wird und über die SPI Hardware des AVRs ausgelesen wird.
http://www.cc-zwei.de/wiki/index.php...:OMS_ADNS-5020
Auch der c't-Bot hat einen Mausensor ADNS2610, der an einem ATmega32 angeschlossen wird, dort wird die SPI Schnittstelle per Software Bitbanging emuliert.
http://wiki.ctbot.de/index.php/Maussensor
Hi,
Könnte man sowas auch einfacher beim RP6 machen? Bin noch ziemlich neu in der Robotik(bin erst 13). Ausserdem wollte ich noch nich so ans ISP ranmachen.
mfg Panzerfan
Edit: Also ich hab jetzt mal auf den Schaltplan gesehen und gesehen das man dann SDIO an MOSI an den 1. Pin und SCK auf SL4/SCK an PIN 7. Stimmt das? Und ausserdem wenn an SCK auch SL4 hängt ist es dann nicht so das Status LED 4 blinkt wenn man was mit SCK macht? Oder sehe ich da was falsch?
Hallo
Ein spannendes Thema. Ich habe in meiner Bastelkiste zwar nur eine Maus mit einem ADNS-2051 gefunden aber die SPI-Kommunikation (nicht mit ISP verwechseln!) dürfte ähnlich bis gleich sein. Da die gemeinsame Datenleitung von jedem Partner (Mega32 und Maussensor) in einen z-state (hochohmig) geschaltet werden sollte, würde ich, zumindest für erste Tests, den ADC0 als Datenleitung verwenden. Takt wäre dann auf ADC1. Vermutlich würde es auch mit SCL und SDA am XBUS funktionieren. Die sind zwar auch zusätzlich beschaltet, aber was dem I2C nutzt kann dem SPI vermutlich nicht wirklich schaden. Obwohl der RP6 auch SPI beherrscht werde ich zum Einstieg die Signale "von Hand" erzeugen, dann weiß ich wenigstens, was ich mache ;) Ich muss mich allerdings noch etwas mehr ins Thema einlesen, vielleicht ist Hardware-SPI doch die bessere Lösung.
Gruß
mic
![]()
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Inzwischen habe ich einen Adapter zusammengebastelt und ein kleines Testprogramm geschrieben, allerdings funzt es noch nicht so richtig![]()
Wenn es denn nun funktionieren sollte, was kann der RP6 damit anfangen? Wenn er die Maus über den Boden schieben würde, was könnte er dann mit den Daten anstellen? Oder sollte man daraus einen Trackball basteln? Oder einen Fingerscannern? Fragen über Fragen...
Mein Adapter verwendet SCL(PC0) für Clock- und SDA(PC1) als Datenpin. Mit sleep(10) als extrem langsames Takten sieht der Code so aus:
.. aber eben, es funktioniert nichtCode:/*Standardstecker Pin Name Farbe Beschreibung 1 VCC Rot +5 V 2 D- Weiß Data - (Clock) 3 D+ Grün Data + (Daten) 4 GND Schw Masse von: http://de.wikipedia.org/wiki/Univers...us#USB-Stecker */ #include "RP6RobotBaseLib.h" #define clk_port PORTC #define clk_ddr DDRC #define clk_h clk_ddr |= 1; clk_port |= 1 #define clk_l clk_ddr |= 1; clk_port &= ~1 #define data_port PORTC #define data_ddr DDRC #define data_h data_ddr |= 2; data_port |= 2 #define data_l data_ddr |= 2; data_port &= ~2 #define data_z data_ddr &= ~2; data_port &= ~2 #define data_in (PINC & 2) void init( void) { clk_h; data_z; } void write_data(uint16_t data) { uint8_t bit=16; while(bit--) { clk_l; sleep(10); if(data & (1<<bit)) {data_h;} else data_l; sleep(10); clk_h; sleep(10); } } uint16_t read_data(uint8_t adr) { uint8_t bit, data; bit=8; while(bit--) { clk_l; sleep(10); if(adr & (1<<bit)) {data_h;} else data_l; sleep(10); clk_h; sleep(10); } data_z; sleep(255); bit=8; data=0; while(bit--) { clk_l; sleep(10); clk_h; if(data_in) data |= (1<<bit); sleep(10); } return(data); } int main(void) { initRobotBase(); init(); read_data(0); mSleep(1000); while(1) { writeInteger(read_data(0), 2); writeString_P(" - "); mSleep(1000); writeInteger(read_data(2), 2); writeString_P("\n\r"); //write_data(0x0a01 | (1<<15)); mSleep(1000); } return(0); }![]()
![]()
Atmel’s products are not intended, authorized, or warranted for use
as components in applications intended to support or sustain life!
Hallo mic,
ganz so einfach funktioniert es nicht mit den Maussensor. Dazu muß man sich schon durch das Datenblatt des Maussensors quälen. Das ist ja ein komplettes Protokoll mit Befehlen zum Abfragen und Schreiben von Config Registern zur Initialisierung. Die Befehle sind zudem noch von Sensor zu Sensor verschieden.
Zudem wird der SDA Pin als Eingang zum Lesen und als Ausgang zum Schreiben benutzt. Mit einem kleinen Fehler im Programm killt man sich schnell den Maussensor (ist mir auch einmal passiert), wenn der Maussensor und der Controller beide den SDA Pin als Ausgang betreiben. Für erste Versuche sollte man hier einen Reihenwiderstand in die Leitung hängen.
Für den ADNS2610 findet man hier ein komplettes Datenblatt:
http://www.avagotech.com/docs/AV02-1184EN
Für den ADNS2620:
http://www.avagotech.com/docs/AV02-1115EN
Für den ADNS2051:
http://bdml.stanford.edu/twiki/pub/M...r/ADNS2051.pdf
Man kann mit dem Maussensor über kleine Strecken recht genaue Informationen über die zurückgelegte Wegstrecke erhalten. Auf langen Strecken summieren sich die Fehler allerdings zu recht deutlichen Fehlern.
Als kleines Schmankerl ohne größeren Nutzwert: es lässt sich auch das gerade aufgenommene Bild der Kamera auslesen.
Das sieht dann z.B. so aus:
das bild hätte mich jetzt auch interessiertAls kleines Schmankerl ohne größeren Nutzwert: es lässt sich auch das gerade aufgenommene Bild der Kamera auslesen.
Das sieht dann z.B. so aus:![]()
öhm, wo kriegt man so nen sensor her, wenn man gerade nicht zufällig ne alte maus da hat (die hab ich gerade wirklich zufällig hier, aber der chip ist nicht identifizierbar!)
gruß
andieh
Lesezeichen