Ganz einfach :
Freilauf ADC -> der wert wird ständig ausgelesen
Ich weiß zwar nicht in welcher Sprache Du progst, aber ich mach es so in Assembler:
Code:
ldi tmp,(1<< ADEN) | (1<<ADFR) | (1<<ADIE) | (1<<ADSC) | (1<<ADPS0) | (1<<ADPS1) | (1<<ADPS2)
out ADCSRA,tmp
ldi tmp,(1<<REFS0) | (1<<ADLAR) | (1<<MUX0)
out ADMUX,tmp
Der ADFR bit schaltet Free Run modus ein.
Du mußt Dir auch noch den passenden Interruptvektor einrichten
Code:
.org ADCCaddr
rjmp ADCcomplete ; ADC Interrupt Vector Address
Jetzt Springt er nachdem er jedesmal fertig ist mit ADC nach ADCcomplete
in ADCcomplete routine:
Code:
in tmp,ADCL
in tmp,ADCH
Es wird zwar der LOW Byte überschrieben, das macht aber nichts weil der wert linksgerichtet ist (sehe ADLAR Bit in ADMUX) und die zwei unteren bits kann man ruhig hier weglassen.
Jetzt prüfst Du den Wert in tmp nach Deinen >100 oder <200 und änderst den Zähler entsprechend.
Zum schluß reti und fertig.
Hoffe, daß es verständlich war, wenn Du C benutzt wird es wohl auch kein Problem sein die Assembler schnipsel zu verstehen.
Gruß Sebastian
Lesezeichen