Probleme bei ADC mit dem Attiny85

Gast #3516498
Lesenswert?
• ▲
▼
Hallo,
ich versuche seit mehreren Stunden eine ADC mit dem Attiny85 zum Laufen 
zu bekommen.
Da ich ein Codebeispiel im Internet gefunden habe, dachte ich das dürfte 
kein Problem sein. Ich habe nur das ADMUX Register geändert, damit die 
ADC an PB2 durchgeführt wird.
Abhängig vom ermittelten Spannungswert sollen verschiedene Ausgänge 
geschaltet werden, als Referenz dient VCC.
Allerdings reagiert der uC nicht, egal welche Spannung ich an PB2 
anlege.
Hier mein Code:
1
#include <avr/io.h>
2

3
void init(void);
4
void initADC(void);
5
void adcmeasure(void);
6

7
void main(void)
8
{
9
  init();
10
  initADC();
11
    while(1)
12
    {
13
       adcstart();
14
       if(ADCH > 50)
15
       {
16
          PORTB |= 0b00001;
17
       }
18

19
       if(ADCH > 100)
20
       {
21
          PORTB |= 0b00011;
22
       }
23
    
24
       if(ADCH > 150)
25
       {
26
          PORTB |= 0b01011;
27
       }  
28
    
29
       if(ADCH > 200)
30
       {
31
          PORTB |= 0b11011;
32
       }
33
    }
34
}
35

36
void init(void)
37
{
38
  DDRB |= ((1 << DDB0) | (1 << DDB1) | (1 << DDB3) | (1 << DDB4)); //Set PB0,1,3,4 as output
39
}
40

41
void initADC(void)
42
{
43
  /* this function initialises the ADC 
44

45
        ADC Notes
46
  
47
  Prescaler
48
  
49
  ADC Prescaler needs to be set so that the ADC input frequency is between 50 - 200kHz.
50
  
51
  Example prescaler values for various frequencies
52
  
53
  Clock   Available prescaler values
54
   ---------------------------------------
55
   1 MHz   8 (125kHz), 16 (62.5kHz)
56
   4 MHz   32 (125kHz), 64 (62.5kHz)
57
   8 MHz   64 (125kHz), 128 (62.5kHz)
58
  16 MHz   128 (125kHz)
59

60
   below example set prescaler to 128 for mcu running at 8MHz
61

62

63
  */
64

65
  ADMUX =
66
            (1 << ADLAR) |     // left shift result
67
            (0 << REFS1) |     // Sets ref. voltage to VCC, bit 1
68
            (0 << REFS0) |     // Sets ref. voltage to VCC, bit 0
69
            (0 << MUX3)  |     // use ADC1 for input (PB2), MUX bit 3
70
            (1 << MUX2)  |     // use ADC1 for input (PB2), MUX bit 2
71
            (0 << MUX1)  |     // use ADC1 for input (PB2), MUX bit 1
72
            (1 << MUX0);       // use ADC1 for input (PB2), MUX bit 0
73

74
  ADCSRA = 
75
            (1 << ADEN)  |     // Enable ADC 
76
            (1 << ADPS2) |     // set prescaler to 64, bit 2 
77
            (1 << ADPS1) |     // set prescaler to 64, bit 1 
78
            (0 << ADPS0);      // set prescaler to 64, bit 0  
79
}
80

81
void adcstart(void)
82
{
83
   ADCSRA |= (1 << ADSC);// start ADC measurement
84
   while (ADCSRA & (1 << ADSC) ); // wait till conversion complete
85
}
Stimmt vielleicht etwas mit der Frequenz nicht? Eigentlich müsste der 
Attiny mit 8MHZ laufen.
Wäre super, wenn mir jemand weiterhelfen könnte :)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.