Hallo,
ich bräuchte Hilfe beim Konfigurieren des AD-Wandlers. Ich verwende
folgenden uC: PIC24FJ128GB204. Ich schaffe es leider nicht, dass ich den
12-Bit-ADC zum laufen bringe, obwohl ich sogar den größten Teil des
Codes aus dem Datenblatt kopiert habe.
Beim Debuggen habe ich festgestellt, dass ich jedesmal in folgender
Zeile hängen bleibe: while (!IFS0bits.AD1IF){}
Das bedeutet, dass das AD1IF nie gesetzt wird.
Aber warum nicht?
Hier der Code:
1 | void adc()
|
2 |
|
3 | int ADCValue, count;
|
4 | int *ADC16Ptr;
|
5 |
|
6 | //Pin 15 soll eingelesen werden
|
7 | ANSBbits.ANSB15 = 1;
|
8 | TRISBbits.TRISB15 = 1;
|
9 |
|
10 | AD1CON1 = 0x00E0;
|
11 | AD1CHSbits.CH0SB = 0b01001;
|
12 | AD1CHSbits.CH0NB = 0;
|
13 | AD1CHSbits.CH0NA = 0;
|
14 | AD1CHSbits.CH0SA = 0b01001;
|
15 | AD1CSSL = 0;
|
16 | AD1CON3 = 0x0F00;
|
17 | AD1CON2 = 0x003C;
|
18 | AD1CON1bits.ADON = 1;
|
19 | while(1)
|
20 | {
|
21 | ADCValue = 0;
|
22 | ADC16Ptr = &ADC1BUF0;
|
23 | IFS0bits.AD1IF = 0;
|
24 | AD1CON1bits.ASAM = 1;
|
25 |
|
26 | while (!IFS0bits.AD1IF){};
|
27 | AD1CON1bits.ASAM = 0;
|
28 | for (count = 0; count < 16; count++)
|
29 | {
|
30 | ADCValue = ADCValue + *ADC16Ptr++;
|
31 | }
|
32 | ADCValue = ADCValue >> 4;
|
33 | // repeat
|
34 | }
|
35 | }
|