Forum: Mikrocontroller und Digitale Elektronik Tiny13 ADC freerunning


von Valentin B. (nitnelav) Benutzerseite


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

Da du ADLAR nicht gesetzt hast, kriegst du in ADCH die Werte 0, 1, 2, 3 
je nach Potistellung. Ich denke nicht, dass du das groß an der 
Blinkfrequenz der LED sehen wirst.

Die ADC Einstellung hab ich jetzt nicht groß kontrolliert.

von Valentin B. (nitnelav) Benutzerseite


Lesenswert?

Ahh, jetzt funktionierts!
Danke!!!
Valentin Buck

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.