Hallo zusammen,
leider habe ich ein Problem beim Auslesen des ADC mit meinem mega32:
Der returnwert von read_sensor ist immer null, egal, was am Port
anliegt.
- Spannung direkt am Pin überprüft, liegt was an
- unterschiedliche Spannungen ausprobiert
- porta0 - porta7 durchprobiert
- Nur lesen von ADCH ausprobiert
- Takt 10 MHz
Code habe ich angehängt:
1 | extern void init_sensor()
|
2 | {
|
3 |
|
4 | // adc freischalten
|
5 | ADCSRA = (1 << ADEN);
|
6 |
|
7 |
|
8 | // Frequenzteilerverhältnis auf 1/128
|
9 | ADCSRA |= (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
|
10 |
|
11 |
|
12 | /* Kanal einstellen */
|
13 | ADMUX = SENSOR; // SENSOR == 7
|
14 |
|
15 |
|
16 | /* Interne Referenzspannung 2.56 V */
|
17 | ADMUX |= (1 << REFS1) | (1 << REFS0);
|
18 |
|
19 |
|
20 | }
|
21 |
|
22 |
|
23 | extern uint16_t read_sensor()
|
24 | {
|
25 | uint16_t result;
|
26 |
|
27 |
|
28 |
|
29 |
|
30 | init_sensor();
|
31 |
|
32 | // Messung anstoßen
|
33 | ADCSRA = (1 << ADSC);
|
34 |
|
35 |
|
36 | // warten, bis Messung komplett
|
37 | while (ADCSRA & (1 << ADSC)) ;
|
38 |
|
39 |
|
40 | result = ADCL;
|
41 | result += (ADCH << 8);
|
42 |
|
43 |
|
44 | return result;
|
45 |
|
46 | }
|
Tja, ich hoffe, jemanden von Euch ist das Problem bekannt, ich
weiss langsam wirklich nichte mehr weiter ... (adc kaputt??)