hi,

ich habe ein emg30 motor und dazu md25 platine welche über I2C mit dem Atmel NGW100 board verbunden ist.

Wenn ich die 4 Encoder register lese (z.b. alle 100ms) kriege beispielsweise alle 20 werte einen falschen zähler wert geliefert, der nächste ist dann wieder ok.

Ich sende mit setspeed z.b. 128 (also motor stop), lese dann die encoder register, der zu lesende wert müsste ja insgesamt 0 sein, jedoch auf die einzelnen register gesehen steht in einem der wert 0xff.

Beispiel für was ich meine:

reg1 : 0 reg2: 0 reg3:0 reg4:0
reg1 : 0 reg2: 0 reg3:255 reg4:0
reg1 : 0 reg2: 0 reg3:0 reg4:0
reg1 : 0 reg2: 0 reg3:0 reg4:0
...
reg1 : 255 reg2: 0 reg3:0 reg4:0
reg1 : 0 reg2: 0 reg3:0 reg4:0



Code:
long MD25_getTicks(int address,int motor){
//	printf("MD25_getTicks\n");
	long speed=0;

	if (ioctl(device_file,I2C_SLAVE,address) < 0) {
		printf("I2C_SLAVE Error!\n");
		return -1;
	}

	if(motor==0)buf[0]=MD25_ENC_1A;
	else buf[0]=MD25_ENC_2A;
	if(read(device_file,buf,1)!=1){
		printf("I2C Read Error!\n");
		return -1;
	}
	speed=buf[0]<<24;
//	printf("0x%x ",buf[0]);
	if(motor==0)buf[0]=MD25_ENC_1B;
	else buf[0]=MD25_ENC_2B;
	if(read(device_file,buf,1)!=1){
		printf("I2C Read Error!\n");
		return -1;
	}
	speed+=buf[0]<<16;
//	printf("0x%x ",buf[0]);
	if(motor==0)buf[0]=MD25_ENC_1C;
	else buf[0]=MD25_ENC_2C;
	if(read(device_file,buf,1)!=1){
		printf("I2C Read Error!\n");
		return -1;
	}
	speed+=buf[0]<<8;
//	printf("0x%x ",buf[0]);
	if(motor==0)buf[0]=MD25_ENC_1D;
	else buf[0]=MD25_ENC_2D;
	if(read(device_file,buf,1)!=1){
		printf("I2C Read Error!\n");
		return -1;
	}
	speed+=buf[0];

	return speed;
}

kann jemand bitte helfen, oder hat erfahrung damit.