Hallo,
ich kann dir mit einem Code-Ausschnitt aus einem Tiny25-Programm von mir weiterhelfen. Dort frage ich den ADC regelmäßig via Interrupt ab. Alles weitere wirst du schon schaffen.
Zunächst brauchst du aber in Hardware erst mal einen Spannungsteiler, der dir die 9V am ADC-Eingang runterrteilt auf < Aref. Ich verwende in meinem Code die 1,1V interene Aref. Wenn du das übernimmst solltest du die 9V auf ca. 1V teilen.
Hier der Code:
Viel Spaß beim einarbeiten und lernen!Code:volatile U16 ADC_value = 0; ISR(ADC_vect) // ADC-Wert fertig umgewandelt: { ADC_value = ADCW; ADCSRA = (1<<ADSC) | (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0)| (1<<ADIE); // ADC-Umwandlung erneut starten } int main(void) { DDRB = 0b00000001; // IOs konfigurieren PORTB = 0b00000000; ADMUX = (1<<REFS1) | (1<<MUX1) | (1<<MUX0); // ADC konfigurieren: interne Referenz 1,1V und Eingang ADC3 ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0) | (1<<ADIE); // Prescaller FCPU : 8 und Interrupt bei fertiger Umwandlung sei (); // Interrupts aktivieren ADCSRA = (1<<ADSC) | (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0)| (1<<ADIE); // ADC-Umwandlung starten while (1) { // dein Programm... // z.B.: if (ADV_value > xxx) } }
Viele Grüße
Andreas
- - - Aktualisiert - - -
...was vielleicht noch als Info fehlt: ADC_value ist die Spannung in 1/1024el von Aref. Also 0V = 0 und 1,1V bzw. Aref = 1023.






Zitieren

Lesezeichen