Forum: Mikrocontroller und Digitale Elektronik A/D Converter uC


von Stimi (Gast)


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
}

von W.S. (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.