-
        

Seite 1 von 4 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 33

Thema: Maussensor an RP6

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    07.11.2008
    Alter
    22
    Beiträge
    47

    Maussensor an RP6

    Anzeige

    Hi @ all

    Weiß jemand zufällig wie man an den RP6 einen Maussensor anbaut? Hab schon im Netz geschaut aber nichts nennenswertes gefunden. Es wäre auch recht gut wenn mir jemand erklärt wie so ein Maussensor funzt und was für daten er ausgibt.


    mfg Panzerfan
    Ich war´s nicht!!


  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    17.08.2004
    Beiträge
    1.065
    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.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    07.11.2008
    Alter
    22
    Beiträge
    47
    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
    Ich war´s nicht!!


  4. #4
    Benutzer Stammmitglied
    Registriert seit
    07.11.2008
    Alter
    22
    Beiträge
    47
    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?
    Ich war´s nicht!!


  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    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

  6. #6
    Benutzer Stammmitglied
    Registriert seit
    07.11.2008
    Alter
    22
    Beiträge
    47
    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?
    Ich war´s nicht!!


  7. #7
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    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!

  8. #8
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    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:
    Code:
    /*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);
    }
    .. aber eben, es funktioniert nicht

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  9. #9
    Erfahrener Benutzer Roboter Genie Avatar von m.a.r.v.i.n
    Registriert seit
    24.07.2005
    Ort
    Berlin
    Beiträge
    1.247
    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:
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken mausbild2.jpg  

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    22.04.2008
    Ort
    Frankfurt
    Alter
    35
    Beiträge
    68
    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 interessiert

    ö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

Seite 1 von 4 123 ... LetzteLetzte

Berechtigungen

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