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