Hallo
Ich benutze diesen Code um den ADC auszulesen
Aufgerufen wird er so:
Hier noch send int
Als test bedingung hab ich den ADC pin abwechselnd mal auf GND und mal in der luft gehabt
wenn ich nun den Channel 0 auslese, steht auf dem Display 1023 egal ob ich den Pin auf GND hab oder nicht
beim kanal 1 auch
bei kanal 2 verändert sich der wert ständig. auch unabhängig davon das der pin auf GND ist oder nicht
was ist hier schief gelaufen?
Danke schonmal
Ich benutze diesen Code um den ADC auszulesen
Code:
uint16_t ReadChannel(uint8_t mux)
{
uint8_t i;
uint16_t result;
ADMUX = mux; // Kanal waehlen
ADMUX |= (1<<REFS1) | (1<<REFS0); // interne Referenzspannung nutzen
ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0); // Frequenzvorteiler
// setzen auf 8 (1) und ADC aktivieren (1)
/* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
ADCSRA |= (1<<ADSC); // eine ADC-Wandlung
while ( ADCSRA & (1<<ADSC) ) {
; // auf Abschluss der Konvertierung warten
}
result = ADCW; // ADCW muss einmal gelesen werden,
// sonst wird Ergebnis der nächsten Wandlung
// nicht übernommen.
/* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden Wandlungen */
result = 0;
for( i=0; i<4; i++ )
{
ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion"
while ( ADCSRA & (1<<ADSC) ) {
; // auf Abschluss der Konvertierung warten
}
result += ADCW; // Wandlungsergebnisse aufaddieren
}
ADCSRA &= ~(1<<ADEN); // ADC deaktivieren (2)
result /= 4; // Summe durch vier teilen = arithm. Mittelwert
return result;
}
Aufgerufen wird er so:
Code:
int main(void){
lcd_init();
uint16_t adcval;
while(1)
{
set_cursor(0,1);
lcd_string("ADC0: ");
set_cursor(0,2);
adcval = ReadChannel(1);
send_int(adcval);
}
}
Hier noch send int
Code:
void send_int(uint16_t zahl){
char Buffer[20]; //umwandlung von Dezimal in ASCII
itoa(zahl, Buffer, 10 );
lcd_string(Buffer);
}
Als test bedingung hab ich den ADC pin abwechselnd mal auf GND und mal in der luft gehabt
wenn ich nun den Channel 0 auslese, steht auf dem Display 1023 egal ob ich den Pin auf GND hab oder nicht
beim kanal 1 auch
bei kanal 2 verändert sich der wert ständig. auch unabhängig davon das der pin auf GND ist oder nicht
was ist hier schief gelaufen?
Danke schonmal