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

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.