Wie spricht man die ADC-Kanäle 8-13 an?

Gast #2944805
Lesenswert?

Hallo Leute,

Wie werden die ADC-Kanäle 8-13 bei einem ATmega16u4 angesprochen laut 
Datenblatt (Seite 309) soll 1<<ADLAR und die MUX bit 0 bis 4 z.B. für 
Kanal ADC13 00101.

Über UART kommt bei mir immer 0 raus, an dem uC-Pin liegt aber schon 
eine Spannung von ca. 2V!!!(nachgemessen) weisst jemand voran das liegen 
könnte?
1
/* ADC initialisieren */
2
void ADC_Init(void) {
3
 
4
  uint16_t result;
5
 
6
  // Referenzspannung fuer den ADC waehlen:
7
  ADMUX = (0<<REFS1) | (0<<REFS0) | (1<<ADLAR);
8
  
9
  // Bit ADFR ("free running") in ADCSRA steht beim Einschalten
10
  // schon auf 0, also single conversion
11
  ADCSRA =  (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0);     // Frequenzvorteiler 
12
                                                      //16MHz Frequenz
13
  ADCSRA |= (1<<ADEN);                  // ADC aktivieren
14
 
15
 
16
  ADCSRA |= (1<<ADSC);                  // eine ADC-Wandlung 
17
  while (ADCSRA & (1<<ADSC) ) {}        // auf Abschluss der Konvertierung warten
18
  /* ADCW muss einmal gelesen werden, sonst wird Ergebnis der naechsten
19
     Wandlung nicht uebernommen. */
20
  result = ADCW;
21
}
22
 
23
/* ADC Einzelmessung */
24
uint16_t ADC_Read(int8_t channel)
25
{
26
  // Kanal waehlen, ohne andere Bits zu beeinflussen
27
  ADMUX = (ADMUX & ~(0x1F)) | (channel & 0x1F);
28
  ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
29
  while (ADCSRA & (1<<ADSC) ) {}  // auf Abschluss der Konvertierung warten
30
  return ADCW;                    // ADC auslesen und zurueckgeben
31
}
32

33

34
...
35

36

37
int main()
38
{
39
  uint16_t adcval;
40
  InitUART(9600);
41
  ADC_Init();
42

43

44
  while(1){  
45
  
46
     adcval = ADC_Read(5);
47

48
...

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