Hatte gerade etwas Langeweile. Habe aber den Prescaler nicht und eine interne Referenzspannung scheint es beim tiny10 nicht zu geben.
Habe es auch nicht getestet oder sonstige Änderungen vorgenommen, nur 1:1 in C.
mfgCode:/* * */ #include <avr/io.h> #include <util/delay.h> void Init(void); uint8_t Read_Adc(uint8_t channel); void TimerOn(void); void TimerOff(void); int main(void) { uint8_t ret = 0; Init(); while(1) { ret = Read_Adc(3); if(ret > 120 && ret < 250) { TimerOn(); } else { TimerOff(); _delay_ms(1000); TimerOn(); } _delay_ms(1000); } return 0; } void Init(void) { // PB1 out DDRB |= (1<<PB3); // Enable ADC ADCSRA |= (1<<ADEN); // Prescaler ? ADCSRA |= (1<<) | (1<<); // no internal ref on tiny10 } uint8_t Read_Adc(uint8_t channel) { ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F); ADCSRA |= (1<<ADSC); // eine Wandlung "single conversion" while(ADCSRA & (1<<ADSC)); // auf Abschluss der Konvertierung warten return ADCL; } void TimerOn(void) { TCCR0A = 0x42; TCCR0B = 0x09; OCR0A = 0x40; } void TimerOff(void) { TCCR0A = 0x02; }






Zitieren

Lesezeichen