Update:
Um Fehler durch die Konvertierung zwischen uint und char auszuschliessen, habe ich eine kleine Routine geschrieben, die 1B in zwei Nibbles (4Bit) zerlegt, und diese dann entsprechend der Hexa-Charakter umwandelt (also 0-9 u. A-F). Leider erhalte ich auch so Werte zwischen 0x80 (=12 und 0xFF (=255). Es lag also nicht an der Konvertierung. Hat noch jemand Ideen?
(Das PWM Signal konnte ich noch nicht vermessen, da ich kein Oszi habe, und an der Uni alles überlastet ist...)
Code:
Code:
int main (void){
uint8_t twidata;
//char s[3];
uint8_t i;
uart_init();
i2c_init();
twidata='I';
uart_putc(twidata);
while(1){
uint8_t twidata2;
twidata='R';
if(twidata==uart_getc_wait()){
twidata=read_compass(1);
//utoa(twidata,s,10);
//uart_puts(s);
twidata2=twidata;
twidata&=0xF0;
twidata=swap(twidata);
twidata2&=0x0F;
uart_putc('0');
uart_putc('x');
uart_putc(convert(twidata));
uart_putc(convert(twidata2));
uart_putc(10);
uart_putc(13);
i=0;
while(i!=10){
_delay_ms(200);
i++;}
}
}
return 0;
}
uint8_t convert(uint8_t data){
if(data<10){
data+=48; //kleiner 10, +48, damit man bei ASCII 0 ist
}
else{
data+=55;//größer 9, +55, damit man bei 10 bei ASCII A ist
}
return data;
Lesezeichen