Forum: Mikrocontroller und Digitale Elektronik ADC meines PIC24 misst nicht richtig


von PT (Gast)


Lesenswert?

Liebe MC-Gemeinde,

leider habe ich Probleme mit der ADC-Auswertung meines PIC24. Sicher 
kein seltenes Thema aber ich hoffe ihr könnt mir helfen.
1
ANSELA = ANSELB = ANSELC = 0x0000;  
2
ANSELAbits.ANSA1 = 1;
1
void InitADC(){
2
   
3
    AD1CON1 = 0x00E0;
4
    AD1CON2 = 0x0000;
5
    AD1CON3 = 0x0A02;
6
    AD1CON1bits.ADON = 1;
7
    
8
    Delay_us(20);
9
}
1
void readADC(){
2
    
3
    AD1CHS0 = 1;               
4
    AD1CON1bits.DONE = 0;
5
    AD1CON1bits.SAMP = 1;       
6
    while (!AD1CON1bits.DONE);   
7
    ADCValue = ADC1BUF0;            
8
    ADCValue = (ADCValue*3.375)/1024;
9
}

Am ADC-Pin liegen 1,69 V an und ich messe angeblich 0,5 V.

Viele Grüße und Danke!

von Kastanie (Gast)


Lesenswert?

Du misst in diesem Fall die Hälfte des Maximalwertes.
Also nicht 0,5V sondern 0,5V*Vref.
In ADCON1 gibts du "right-shiftet und 10 Bit Auflösung vor.
Und in ADCON" wählst Du Vcc als Vref
D.h. der Maximalwert von ADC1BUF ist 1024.
Legst du 1,69V an, dann ist das Bei VCC=3,375 in etwa die Hälfte. also 
ist dein ADCBUF-Wert ca. 512.
Verifiziere das mal und schau genau diesen Wert an.

von PT (Gast)


Lesenswert?

Kastanie schrieb:
> Du misst in diesem Fall die Hälfte des Maximalwertes.
> Also nicht 0,5V sondern 0,5V*Vref.
> In ADCON1 gibts du "right-shiftet und 10 Bit Auflösung vor.
> Und in ADCON" wählst Du Vcc als Vref
> D.h. der Maximalwert von ADC1BUF ist 1024.
> Legst du 1,69V an, dann ist das Bei VCC=3,375 in etwa die Hälfte. also
> ist dein ADCBUF-Wert ca. 512.
> Verifiziere das mal und schau genau diesen Wert an.

Absolut richtig! Vielen Dank! Die Werte passen genau.

Dann scheint auch meine Berechnung nicht zu funktionieren. Angelegte 
Spannung  ist gerade 1,16 V und ich erhalte dafür einen Wert 0x0161 was 
Dezimal 353 entspricht. 353/1024*3,375 entsprechen genau 1,16 V. Leider 
steht das nicht in meiner Variable. Auch wenn ich eine eigene Variable 
verwende und diese als floa deklariere.

von PT (Gast)


Lesenswert?

> Absolut richtig! Vielen Dank! Die Werte passen genau.
>
> Dann scheint auch meine Berechnung nicht zu funktionieren. Angelegte
> Spannung  ist gerade 1,16 V und ich erhalte dafür einen Wert 0x0161 was
> Dezimal 353 entspricht. 353/1024*3,375 entsprechen genau 1,16 V. Leider
> steht das nicht in meiner Variable. Auch wenn ich eine eigene Variable
> verwende und diese als floa deklariere.

Funktioniert! Musste (float) vor den Variablen schreiben! Danke!

von Kastanie (Gast)


Lesenswert?

Top!

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.