Hallo,
Ich verwende auf meinem Board einen Atxmega32A4 und u.A. den AD-Wandler,
der mir ein paar Probleme bereitet.
Und zwar zeigt dieser mir zuviel an. Wenn ich den AD-Pin auf GND lege,
gibt er mir noch immer über 500 Counts aus.
Hier meine Initialisierung und mein Aufruf:
1 | /***********************************
|
2 | ** AD-Wandler einstellen **
|
3 | ************************************/
|
4 | void adcInit()
|
5 | {
|
6 | ADCA.CTRLA = 0x01; //ADC enable
|
7 | ADCA.CTRLB = 0x00; //unsigned mode,8Bit, Free Running Mode
|
8 | ADCA.REFCTRL = 0x20; //Externe Referenz von PORTA
|
9 | ADCA.PRESCALER = 0x00; // Vorteiler auf 4
|
10 | }
|
11 |
|
12 |
|
13 | /*********************************
|
14 | ** AD-Werte auslesen **
|
15 | **********************************/
|
16 | uint16_t getAdValue(uint8_t adChannel)
|
17 | {
|
18 | uint16_t tmp=0;
|
19 |
|
20 |
|
21 | ADCA.CH0.MUXCTRL = 0x00;
|
22 | ADCA.CH0.MUXCTRL = adChannel<<3;
|
23 |
|
24 | ADCA.CH0.CTRL = 0x81;
|
25 | _delay_ms(5);
|
26 | tmp = (uint16_t)((float)ADCA_CH0RES/4);
|
27 |
|
28 | return tmp;
|
29 | }
|
Am AREF-Pin (A0) habe ich 3,3V (mit C nach GND) angeschlossen. AVCC ist
mit 100nF an GND.
Mache ich was falsch?
Vielen Dank!! lg