Hallo,
im Augenblick versuche ich mich gerade in den ADC eines Tiny13
einzuarbeiten.
Ich habe da mal ein kleines Programm geschrieben, das eine free running
ADC macht, und den Wert als Comparewert für einen CTC-Timer benutzt, der
dann eine LED blinkend steuert.
Als Hardware: Poti an PB3 und LED an PB0.
Der Vergleichswert für die ADC soll VCC sein.
Leider will der Code nicht so richtig.
1 | #include <avr/io.h>
|
2 |
|
3 | #include <avr/interrupt.h>
|
4 | //Master-freq = 128kHz
|
5 |
|
6 | ISR(TIM0_COMPA_vect){
|
7 | PORTB = PORTB ^ (1<<PB0); //Togglen des Pins
|
8 | OCR0A = ADCH;//Wert vom ADC übernehmen
|
9 | }
|
10 |
|
11 | void init(){
|
12 | TCCR0A = (1<<WGM01); //Count to Compare Modus
|
13 | TCCR0B = (1<<CS02); //Teiler 1024 //Bleiben noch 125Hz
|
14 | OCR0A = 100;//Zweiter Teiler 25 //Bleiben noch 5Hz
|
15 | TIMSK0 = (1<<OCIE0A);//Interrupt setzen
|
16 | ADCSRA = (1<<ADEN) | (1<<ADSC) |(1<<ADATE); //ADC einschalten, aktivieren und auf Free-Running schalten
|
17 | ADMUX = (1<<MUX0) | (1<<MUX1);//ADMUX auf PORTB 3
|
18 | DDRB = (1<<PB0);//PORTB0 als Ausgang
|
19 | sei();//Interrupts einschalten
|
20 | }
|
21 |
|
22 | int main(void){
|
23 | init();
|
24 | while(1){
|
25 | }
|
26 | }
|
Die LED geht an und bleibt an, egal, wie ich am Poti drehe.
Kann mir jemand sagen, wo ich den Fehler gemacht habe?
Mit freundlichen Grüßen,
Valentin Buck