ATMega16 ADC 3 Kanäle

OP #3567368
Lesenswert?

Hallo,

ich habe folgende Probleme mit meinem Programm. Ich will 3 Analoge 
Kanäle messen das funktioniert für die ersten beinden Kanäle auch super. 
Jedoch der 3. Kanal bereitet mir sorgen. Egal was ich für eine Spannung 
anliegen habe, gibt er mir am Ausgang 5V. Bin an dem Punkt mit meinem 
Latain am ende und hoffe auf Hilfe.

Hier das Programm:
1
#include <avr/io.h>
2

3
void ADC_int(void)
4
{
5
    ADMUX=(1<<REFS0);            // externe Referenzspannung
6
    ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1); // Teiler auf 64 setzen
7
    
8
    //Dummykonvertierung
9
    ADCSRA|=(1<<ADSC);            // starte Konvertierung
10
    while (ADCSRA & (1<<ADSC) );  // auf Abschluss der Konvertierung warten
11
    ADCSRA &= ~(1<<ADEN);          // ADC wieder deaktivieren
12
}
13

14
uint16_t ADC_Read (uint8_t channel)
15
{
16
  ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
17
  ADCSRA|=(1<<ADSC);              // starte Konvertierung
18
  while (ADCSRA & (1<<ADSC) );    // auf Abschluss der Konvertierung warten
19
  ADCSRA &= ~(1<<ADEN);           // ADC wieder deaktivieren
20
    
21
  return ADCW;                   // Rückgabe Ergebnis 10bit (1023)
22
  
23
}
24
  
25
int main()
26
{
27
  uint16_t Helligkeit1;
28
  uint16_t Helligkeit2;
29
  uint16_t Helligkeit3;
30
  uint16_t i;
31

32
  DDRC = 255;    //PortC = Ausgang
33

34
  
35
  ADC_int();
36

37
  while(1)
38

39
  {
40
    Helligkeit1 = ADC_Read(0);  //Messwert 0-1023 bei U=0-5V
41
    Helligkeit2 = ADC_Read(1);  //Messwert 0-1023 bei U=0-5V
42
    Helligkeit3 = ADC_Read(2);  //Messwert 0-1023 bei U=0-5V
43
    
44
    
45
    
46
    
47
    for( i = 0; i < 1022; i++)
48
    {
49
      
50
      if (Helligkeit1>1)
51
      {
52
        Helligkeit1 = Helligkeit1 - 1;
53
        PORTC |= (1<<PC0);
54
      } 
55
      else
56
      {
57
        PORTC &= ~(1<<PC0);
58
      }
59

60

61
      if (Helligkeit2>1)
62
      {
63
        Helligkeit2 = Helligkeit2 - 1;
64
        PORTC |= (1<<PC1);
65
      } 
66
      else
67
      {
68
        PORTC &= ~(1<<PC1);
69
      }
70

71
      if (Helligkeit3>1)
72
      {
73
        Helligkeit3 = Helligkeit3 - 1;
74
        PORTC |= (1<<PC2);
75
      }
76
      else
77
      {
78
        PORTC &= ~(1<<PC2);
79
      }
80

81
      
82
    }
83
    
84
  }
85
  
86
  return 0;
87
}

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