AVR und Optische Maus

AVR und Optische Maus

ADNS-2610 Optical Mouse Sensor http://www.avagotech.com/docs/AV02-1184EN

PS2

Onboard Kabel

Onboard Stecker

1 DATA

schwarz

4

2 NC

NC


3 GND

rot

2

4 VDD

orange

3

5 CLK

gelb

5

6 NC

NC


Schirm

Schwarz dick

1



Umbau der Maus

Die Maus soll so umgebaut werden, dass über das PS2-Kabel das Arduino-Board angesteckt werden kann

  1. IC entfernen

  2. den PS2-Bus wie oben beschrieben verdrahten (VDD, DATA, CLK)

Beispielprogramm

/*******************************/

/* OptiMouse, Benoît ROUSSEAU */

/* - dialoguer avec un ADS2051 */

/* récupérer sur une souris */

/* optique */

/*******************************/



#define BROCHE_HORLOGE 10

#define BROCHE_DONNEES 11

#define _BV(bit) (1 << (bit))



byte LectureRegistre (byte adresse)

{

int i = 7;

byte retour = 0;



pinMode (BROCHE_DONNEES, OUTPUT);

for (; i>=0; i--)

{



digitalWrite (BROCHE_HORLOGE, LOW);

digitalWrite (BROCHE_DONNEES, adresse & (1 << i));

digitalWrite (BROCHE_HORLOGE, HIGH);

}



pinMode (BROCHE_DONNEES, INPUT);

delayMicroseconds(100);



for (i=7; i>=0; i--)

{

digitalWrite (BROCHE_HORLOGE, LOW);

digitalWrite (BROCHE_HORLOGE, HIGH);

retour |= (digitalRead (BROCHE_DONNEES) << i);

}

delayMicroseconds(100);



return retour;

}



void EcritureRegistre (byte adresse, byte donnee)

{

int i = 7;



adresse |= 0x80;



pinMode (BROCHE_DONNEES, OUTPUT);

for (; i>=0; i--)

{



digitalWrite (BROCHE_HORLOGE, LOW);

digitalWrite (BROCHE_DONNEES, adresse & (1 << i));

digitalWrite (BROCHE_HORLOGE, HIGH);

}



for (i=7; i>=0; i--)

{

digitalWrite (BROCHE_HORLOGE, LOW);

digitalWrite (BROCHE_DONNEES, donnee & (1 << i));

digitalWrite (BROCHE_HORLOGE, HIGH);

}



}



void EnvoiImage()

{

byte val;

byte adr;

Serial.print (">IMG:");



EcritureRegistre (0x0a, 0x09);

for (int i=0; i<256; i++)

{

do {

adr = LectureRegistre (0x0d);

val = LectureRegistre (0x0c);

} while (val & 0x80);

// Serial.print (adr, HEX);

// Serial.print ('>', BYTE);

Serial.print (val, HEX);

// Serial.print (13, BYTE);

}



Serial.println ();

EcritureRegistre (0x0a, 0x00);

}



void setup()

{

pinMode (BROCHE_HORLOGE, OUTPUT);

pinMode (BROCHE_DONNEES, INPUT);

Serial.begin(19200);

EcritureRegistre (0x0, 0x01); //Always awake

}



void loop ()

{

if (LectureRegistre (0x02))

{

Serial.print ('>');

Serial.print (LectureRegistre (0x00), DEC);

Serial.print ('-');

Serial.print (LectureRegistre (0x01), DEC);

Serial.print ('-');

Serial.print (LectureRegistre (0x03), DEC);

Serial.print ('-');

Serial.print (LectureRegistre (0x04), DEC);

Serial.println ();

}

if (Serial.available())

{

Serial.read();

EnvoiImage();

}

}

Kner 2011 /home/roland/Dropbox/home/news.avr.maus.odt 2/4