ADC Messung beim ATtiny13 will einfach nicht klappen

Gast #5004727
Lesenswert?

Hallo,

ich sitze jetzt schon ein paar Stunden daran und versuche den ADC1 
auszulesen. Es will aber einfach nicht klappen. Ich habe schon mehrere 
Beispiele und Tinys durchprobiert. An PB2 (ADC1) lege ich über einen 
einstellbaren Spannungsteiler (10k auf 100k Poti) eine Spannung bereit. 
Diese wird auch noch über einen 47uF Elko stabilisiert. Funktioniert 
laut Multimeter auch. Mit meinem Programm möchte ich unter einer 
Schwelle eine LED einschalten. Das gelingt mir aber nicht. Ansonsten 
funktioniert alles wie gewollt. Der Tiny13 läuft mit 1MHz. Ich habe auch 
mal an das Ende der Lesefunktion ein Aufblinken der LED gesetzt, um zu 
gucken, ob es nach der Warte-Whileschleife weitergeht. Nach meinen 
Beobachtungen bleibt der ATtiny da drin hängen...

Was übersehe ich?

Beste Grüße
1
#include <avr/io.h>
2
#include <util/delay.h>
3

4
int main(void){
5
  
6
  DDRB |= 0b00000001; //PINB0 als Output für LED
7
  
8
  ADCSRA |= (1 << ADEN); //ADC einschalten
9
  ADMUX |= ~(1 << REFS0); //VCC als Referenz nehmen
10
  
11
  ADCSRA |= (1 << ADPS0); //Prescaler auf 8 (125 kHz)
12
  ADCSRA |= (1 << ADPS1);
13
  ADCSRA |= ~(1 << ADPS2);
14
  
15
  ADMUX |= ~(1 << ADLAR); //Ergebnis right-adjusted
16

17
  read(1); // Einmal lesen, um "warmzulaufen"
18
  _delay_ms(10);
19
  
20
  
21
  
22
  while(1){
23
    if(read(1) <= 614){
24
      PORTB = 0b00000001;
25
    }else{
26
      PORTB = 0b00000000;
27
    }
28
    _delay_ms(50);
29
  }
30
  return 0;
31
}
32

33
int read(int ch){
34
  if(ch == 1){ //Logik, um ADC-Eingang auszuwählen
35
    ADMUX |= (1 << MUX0);
36
    ADMUX |= ~(1 << MUX1);
37
  }else if(ch == 2){
38
    ADMUX |= ~(1 << MUX0);
39
    ADMUX |= (1 << MUX1);
40
  } else if(ch == 3){
41
    ADMUX |= (1 << MUX0);
42
    ADMUX |= (1 << MUX1);
43
  }
44
  
45
  ADCSRA |= (1 << ADSC); //Messung starten
46
  
47
  while(ADCSRA & (1 << ADSC)); //Warten bis Messung vorbei ist
48
  return ADC; //Wert zurückgeben
49
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren