Har tre kanaler som jag försöker läsa ADc med. Läser jag bara en kanal så får jag ut rätt värde på displayen med om jag läser 2 eller tre kanaler så får jag ut konstiga värden.
Läser jag tex endast Vfused så får jag ut 12.15V med 12.15Vin och läsningen förljer värdet fint.
Men om jag aktivarar fler kanaler får jag
Vfused=7.8V, Batt_con_adc=6.6V, Temp=0V. I verkligheten är kanalerna Vfused=12.15V, Batt_con_adc=0V, Temp=2.8V. De är nerdelada för rätt spänning
Känns som det är ngt register eller så som inte blir nollat eller ngn spänning som hänger kvar men jag hittar banne mig inte problemet.
Fra databladet: "when changing channels, a delay is required before starting the next conversion".
Enkel feilsøking: forsøk å legge inn et delay (feks. 1 sek) mellom de forskjellige avlesningen, og se om det blir noen forskjell.
Ser ut som att det är ADCC_StartConversion() som först väljer kanal och sen startar en sampling.
Fördröjningen som (eventuellt) behövs är då inuti den funktionen, mellan kanalval och sampling.
Om det där är en biblioteksfunktion du inte kan påverka kan du testa att köra den två gånger i rad på samma kanal och kasta bort det första mätvärdet.
Fördröjning i main mellan de olika anropen till ADCC_StartConversion() gör ingen nytta.
Efter att den funktionen körts första gången så är en kanal vald, och ingången kommer att laddas upp till spänningen som kommer från den valda ingången.
Sen nästa gång du anropar ADCC_StartConversion() med en ny kanal så växlar den kanal och bara ett par instruktioner senare startas samplingen. Då finns det inte tid från kanalväxling till sampling, för AD-omvandlarens interna kapacitans att laddas om till den nya ingångens spänning.
Hur lång tid detta tar beror mycket på hur ingången är kopplad, vad för impedans du har till spänningen du försöker mäta. Högre impedans => Längre tid krävs.
Så det behövs en fördröjning inne i ADCC_StartConversion() mellan ADPCH = channel; och ADCON0bits.ADGO = 1;.
Alternativt som jag föreslog tidigare, anropa ADCC_StartConversion() två eller fler gånger för varje kanal med lite fördröjning emellan och kasta bort första värdet.
Vill helst inte in o rota i filen som MPlab skapat och läser bara in det fler ggr och det funkar klockrent ... misstänkte det var ngt som hängde kvar på systemet men fattade inte hur det skulle fixas
for(int nbr=0; nbr<=3; nbr++){
convertedValueTemp=0;
ADCC_StartConversion(Temp);
while(!ADCC_IsConversionDone())
convertedValueTemp=ADCC_GetConversionResult();
voltageTemp=(convertedValueTemp*5)/4096;
voltageTemp=voltageTemp*1.69; //Compensate for voltage divider kontrollore!!!!!!!!!!!!
}