Gast
#5135950
Hallo liebe Community, ich habe bereits kleine Programme in C geschrieben, aber hier komme ich einfach nicht weiter; ich möchte den Umgang mit dem ADC des Attiny45 lernen und habe dazu ein Testprogramm geschrieben. Der ADC soll im Freerunning Mode laufen und in der ISR eine Variable mit dem Wert des Registers ADCH besetzt werden. Bei Sannungen über 2,5V soll eine LED an PB0 ein-, unter 2,5V ausgeschaltet werden. Im fertigen Steckbrett bleibt die LED aber einfach aus; ich habe bereits die LED an Vcc gehängt, sie funktioniert, auch die an PB2 vom Poti abgegriffene Spannung stimmt. Der Reset Pin liegt auf Vcc. Ich gehe daher von einem Fehler im Code aus, finde ihn aber nicht. Könnt ihr mir helfen? [c] #include <avr/io.h> #include <avr/interrupt.h> volatile int i = 0; int main(void) { ADMUX |= (0<<REFS0) | (0<<REFS1) | (1<<ADLAR) | (1<<MUX0); //Vcc as Vref, Value shifted to the left, PinB2 as ADC ADCSRA |= (1<<ADEN) | (1<<ADATE) | (1<<ADIE) | (1<<ADPS1); //enable ADC, auto trigger mode, enable ADC interrupts, prescaler = 4 ADCSRA |= (1<<ADSC); //start Conversion sei(); //allow global interrupts DDRB = 0x01; PORTB = 0x00; while (1) { if(i < 128) { PORTB = 0x00; } else { PORTB = 0x01; } } } ISR(ADC_vect) { i = ADCH; } [c/]