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.
Code:
/*
*
*/
#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;
}
mfg
Lesezeichen