Hallo,
Ich bin grad dabei den MSP430f169 zu programmieren leider krieg ich
meine ADC Funktionen nicht vernünftig hin und ich sehe grad echt nicht
den Fehler.
Ich kann von einem Channel die Daten lesen wenn ich allerdings von zwei
channels lesen will bekomme ich anscheinend trotzdem Daten von dem
selben Channel wie vorher.
Hier der wesentliche Codeausschnitt:
1 | void main(void)
|
2 | {
|
3 | int adc_value=0;
|
4 | char buffer[5];
|
5 | STOP_WATCHDOG;
|
6 | initClock();
|
7 | initUSART0();
|
8 | initADC();
|
9 | while(1)
|
10 | {
|
11 | adc_value = readADC(8);
|
12 | itoa(buffer,adc_value,10);
|
13 | sendString(buffer);
|
14 | sendString(";");
|
15 | adc_value = readADC(0);
|
16 | itoa(buffer,adc_value,10);
|
17 | sendString(buffer);
|
18 | sendString(";\n");
|
19 | }
|
20 |
|
21 | }
|
22 | void initADC(void)
|
23 | {
|
24 | P6SEL |= 0xFF; // select the hole port as ADC
|
25 | ADC12CTL0 |= ADC12ON+SHT00+SHT01+SHT02; // Set sample and hold time
|
26 | ADC12CTL1 |= ADC12SSEL1+SHP;// Select MCLK, enable sample and hold timer
|
27 | }
|
28 | unsigned int readADC(unsigned int channel)
|
29 | {
|
30 | ADC12MCTL0 = channel; // select channel for mem0
|
31 | ADC12CTL0 |= ADC12SC + ENC; // Start sampling
|
32 | ADC12CTL0 &= ~ADC12SC; // End sampling start conversion
|
33 | while ((ADC12CTL1 & ADC12BUSY) == 1);// while ADC busy
|
34 | return ADC12MEM0;
|
35 | }
|
An AVcc sind 3.3V angeschlossen an AVss GND.
MCLK läuft mit 8 MHz.
Am ADC0 ist ein Poti, welches einzeln ausgelesen kann erst wenn ich
ADC10 für interne VCC messung hinzufüge bekomme ich auch für ADC0 immer
die selben Werte wie für ADC10.
Weiß jemand was hier falsch läuft ?
Gruß TM