Hallo,
ich hab ein kleines Problem mit meinem AccSensor.
Source Code, zum lesen vom AccWert:
long adc_read(char axis)
{
long adc_value=0;
long volt_value=0;
long g_value=0;
if(axis=='x')
{
ADMUX = (0<<MUX4) | (0<<MUX3) | (1<<MUX2) | (1<<MUX1) | (0<<MUX0);
}
if(axis=='y')
{
ADMUX = (0<<MUX4) | (0<<MUX3) | (1<<MUX2) | (1<<MUX1) | (1<<MUX0);
}
if(axis=='z')
{
ADMUX = (0<<MUX4) | (0<<MUX3) | (1<<MUX2) | (0<<MUX1) | (1<<MUX0);
}
ADCSRA |= (1<<ADSC);
adc_value = ADCL;
adc_value += (ADCH<<8);
volt_value=(3000*adc_value)/1024;
g_value=((1000*(volt_value-1494))/600);
return(g_value);
}
Im Hauptprogramm hab ich eine Schleife:
while(1)
{
g_value=adc_read('x');
itoa(g_value,value_string,10);
usart_puts("(x: ");
usart_puts(value_string);
usart_puts("mg|");
g_value=adc_read('y');
itoa(g_value,value_string,10);
usart_puts("y: ");
usart_puts(value_string);
usart_puts("mg|");
g_value=adc_read('z');
itoa(g_value,value_string,10);
usart_puts("z: ");
usart_puts(value_string);
usart_puts("mg)");
usart_puts(" ");
_delay_ms(800);
}
Das Problem ist: Wenn ich immer nur eine Achse lese, also:
while(1)
{
g_value=adc_read('x');
itoa(g_value,value_string,10);
usart_puts("(x: ");
usart_puts(value_string);
usart_puts("mg|");
}
funktionierts, aber wen ich alle zusammen hintereinander lese und
ausgebe, mischt er die Werte, zuerst z, dann x und dann y.
Warum?
MfG
Gast
#2221306
Fabian K. schrieb: > ADCSRA |= (1<<ADSC); > adc_value = ADCL; > adc_value += (ADCH<<8); Du startest die Messung und willst direkt den Wert auslesen. Das geht so nicht, das Teil ist lahm und deshalb musst du warten. Daher funktioniert das bei einer Achse, da du immer den Wert der VORHERIGEN Messung ausliest. Bei mehreren Achsen passen dann die Werte nicht mehr, da du ja den Kanal umschaltest. :-)
Danke. Immer solche blöden Fehler, wo ich einfach nicht draufkomm. Danke, Danke, Danke. MfG
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.