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 | ...
|