
Zitat von
Sternthaler
Aus der Doku von PRobot kann man entnehmen:
Werte von -128 bis 127 finden sich in 3 Register-Paaren:
delta_X: 0x03 0x17 0x43
delta_Y: 0x02 0x18 0x42
Und für die Overflow-Bits gibt es nur das Register 0x16
Bei der Beschreibung zu 0x16 steht, dass dann die Register 0x17 und 0x18 zu lesen sind.
Nutzt du diese 3 Register? Wie initialisiert du den Sensor?
Hi!
Code:
/*!
* Uebertraegt ein write-Kommando an den Sensor
* @param adr Adresse
* @param data zu schreibendes byte
*/
void pan_write(unsigned char adr, unsigned char data){...}
Initialisierung:
Code:
//Reset PAN3101
pan_write(0x00,0x80); //Full chip reset
// kein Sleep modus
pan_write(0x00,0x01);
Code:
/*Liest die Daten aus dem PAN3101
Wird true zurückgegeben, haben sich die Koordinaten seit dem letzten Abruf
geändert, ansonsten nicht.*/
int pan_readPos(void){
unsigned char ino;
signed char buf_x,buf_y;
int ret;
//Endlosschleife
ino=pan_read(0x16);
//wenn 7tes bit vom Register 0x16 gesetzt ist wurde die Maus bewegt => Bewegungsdaten abfragen
if(ino&(1<<7)){
//Deltax Register auslesen
buf_x=pan_read(0x17);
//und zu der Positionvariable addieren
pan_posx += buf_x;
/* Nachschaun ob das Überlauf-Bit im Register 0x16 gesetzt ist
wenn das der Fall ist muss je nach Vorzeichen der Deltax Variable x
noch 128 (überlauf nach oben) dazugezählt oder eben 128 abgezogen werden
*/
if(ino&(1<<3)){
if(buf_x<0){
pan_posx-=128;
}else{
pan_posx+=128;
}
}
//ab hier nochmal das Gleiche für die yRichtung
buf_y=pan_read(0x18);
pan_posy += buf_y;
if(ino&(1<<4)){
if(buf_y<0){
pan_posy-=128;
}else{
pan_posy+=128;
}
}
ret= 1;
} else
ret = 0;
//hier kann jeder seine Ausgabevariante selber wählen ;)
//(*x) = pan_posx;
//(*y) = pan_posy;
return ret;
}

Zitat von
jeffrey
hoi,
ich denke nicht, dass die y-werte nur durch die falsche einbaulage kommen, dazu sind die 6° fehler viel zu wenig, da wären das dann um die 200, bei 2000 schritten in x-richtung.
Ich bin auch definitiv davon Überzeugt, dass sich der Y-Wert bei einer Drehung genau um den Mittelpunkt nicht ändern darf (laut Mathematischer logik).
Lesezeichen