A/D Converter uC

Gast #4722597
Lesenswert?
• ▲
▼
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
}
Gast #4722898
Lesenswert?
• ▲
▼
Stimi schrieb:
> Das bedeutet, dass das AD1IF nie gesetzt wird.
> Aber warum nicht?

Du erwartest sicherlich nicht, daß hier irgendwer durch deine Quelle 
sich durcharbeitet, das RefMan sich zieht und alle Hex-Zahlen einzeln 
aufdröselt - oder?

Wenn AD1IF nicht gesetzt wird, dann ist vermutlich der ADC nie fertig 
geworden, was darauf hindeuten könnte, daß er nie gestartet worden ist.

W.S.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren