Problem med ADC på PIC18F14K50

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Lightsource
Inlägg: 40
Blev medlem: 12 december 2011, 21:52:18
Ort: Stockholm
Kontakt:

Problem med ADC på PIC18F14K50

Inlägg av Lightsource »

Hoppas någon kan hjälpa mig med detta, får inte ADC-läsningen att fungera.

Det som händer är att om jag läser från 2 kanaler så påverkar de varandra, jag får inte 2 separata värden.
Processorn är en PIC18F14K50.

Om jag bara läser vardera för sig så är det inga problem, men försöker jag läsa båda i min reglerloop så påverkar de varandra. Men av de första faktumet kan slutsats dras att kopplingen inte är fel, ingångarna fungerar var för sig.

Min ADC-funktion ser ut såhär:

Kod: Markera allt

unsigned int Read_ADC(u8 ADC_channel){
	unsigned int ADRES;
	ADCON0 = 0b00000001;
	ADCON0 = ADCON0 | (0b00111100 & (ADC_channel << 2));
	GODONE = 1;
	while(GODONE);
	ADRES = ADRESL;
	ADRES += (ADRESH << 8);
	return ADRES;
}
Ena kanalen är en temperatursensor, andra en potentiometer.
När jag försöker läsa in båda i min reglerloop så påverkar potentiometern temperatursensor-värdet.

Jag har prövat att lägga in "ADRESH = 0; och ADRESL = 0;" men det gör ingen skillnad.

I min reglerloop ligger dessa läsningar:

Kod: Markera allt

		temperature.TempC = (Read_ADC(6)*3)/10;
		temperature.ad5 = Read_ADC(5);
Kommenterar jag ut någon av dem så blir den andra OK, men det funkar inte att ha med båda.

Har prövat olika hastigheter på reglerloopen utan resultat...

Tacksam för input!

Här är lite register som kan vara intressanta från min initiering:

Kod: Markera allt

	ADCON0 = 0b00000001; // A/D CONTROL REGISTER 0
	ADCON1 = 0b00000000; //A/D CONTROL REGISTER 1
	ADCON2 = 0b10000110; // A/D CONTROL REGISTER 2
Användarvisningsbild
Icecap
Inlägg: 26651
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Problem med ADC på PIC18F14K50

Inlägg av Icecap »

Har du kondensator som avkoppling på AD-ingångarna? Annars får du just denna påverkan mellan kanalerna.
Lightsource
Inlägg: 40
Blev medlem: 12 december 2011, 21:52:18
Ort: Stockholm
Kontakt:

Re: Problem med ADC på PIC18F14K50

Inlägg av Lightsource »

Nej det har jag inte! Tack för svaret, vilket värde bör jag ha tro?

Vad är det som gör att ingångarna påverkar varandra om man inte har dessa kondensatorer?
Användarvisningsbild
Icecap
Inlägg: 26651
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Problem med ADC på PIC18F14K50

Inlägg av Icecap »

Rekommenderade värden står i databladet men de vanliga 100nF är helt OK.

Orsaken är att AD-omvandlaren använder en kapacitiv spänningsdelare och därför kan det finnas kvar restladdning helt enkelt. Då kan kanalerna "smitta av" på varandra om det inte är ganska lång tid mellan omvandlingarna.
barbarossa
EF Sponsor
Inlägg: 544
Blev medlem: 8 december 2006, 11:18:14
Ort: Tågarp, Svalöv

Re: Problem med ADC på PIC18F14K50

Inlägg av barbarossa »

Jag har för mig att tidiga hårdavarurevisioner av pic18f14k50 hade en del problem i ADC modulen. Kolla errata.

//A
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Problem med ADC på PIC18F14K50

Inlägg av Swech »

På AVR är det så att man inte kan växla kanal hursomhelst eftersom AD värdena då
kan bli "tokiga". Man måste följa en viss timing....
Nu kör du ju C och PIC så det är svårt att veta vad som egentligen händer.

Ett förslag att testa är

Kod: Markera allt

temperature.TempC = Read_ADC(6);           ; dummy read
temperature.TempC = (Read_ADC(6)*3)/10;
temperature.ad5 = Read_ADC(5);               ;dummy read
temperature.ad5 = Read_ADC(5);
swech
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Problem med ADC på PIC18F14K50

Inlägg av sodjan »

Jag vet inte hur denna processor eller verktyget du programmerar fungerar,
men har Read_ADC(n) inbyggt "acquisition time" ? Vissa nyare PICs
har automatik för det. Vad händer om du i koden inför en fördröjning
mellan de två mätningarna? Du har väl redan testat det...
Lightsource
Inlägg: 40
Blev medlem: 12 december 2011, 21:52:18
Ort: Stockholm
Kontakt:

Re: Problem med ADC på PIC18F14K50

Inlägg av Lightsource »

Tack för infon!

Jag tittade återigen i databladet, och i avsnittet för ADC nämns inget om sådana kondensatorer. Det som nämns är att en delay behövs när man byter kanal, innan nästa konvertering kan påbörjas.

Men en liten fråga, om jag förstår rätt så ska jag alltså införa en kondensator för varje kanal kopplad mot jord? Jag förstår inte riktigt hur detta skulle ta bort rest-laddningen i den kapacitiva spänningsdelaren i ADC'n (sample & hold-kretsen)? kondensatorn stabiliserar ju bara spänningen in på ingångarna?

sodjan & Swech; Jo jag tror detta har med timing att göra främst. Jag ska labba lite mer med tiderna och se hur det påverkar. Jag har ju ingen automatik för hur lång tid det skall gå från att en mätning är avslutad till att jag påbörjar nästa, bara under själva mätningen då jag pollar "GODONE".
Edit: Den där extra "dummy-mätningen" är ju en bra idé, den skall testas ikväll!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Problem med ADC på PIC18F14K50

Inlägg av sodjan »

Nej, kondingen stabiliserar bara varje enskild kanal för sig ifall
spänningen är väldigt brusig (eller impedansen lite för låg).
Jag tror att det är ett timing problem vid bytet av kanal.

Blir det någon skillnad mellan

temperature.TempC = (Read_ADC(6)*3)/10;
temperature.ad5 = Read_ADC(5);

och

temperature.ad5 = Read_ADC(5);
temperature.TempC = (Read_ADC(6)*3)/10;

D.v.s får du t.ex konsekvent den första mätta kanalens värde på båda?

Läs på om "acquisition time". Och om ACQT och ADCS bitarna i ADCON2.

Beräkningsexempel är lite väl röriga kanjag tycka, men om du kör med
saäg 10-20 us så borde det fugera bättre.
Lightsource
Inlägg: 40
Blev medlem: 12 december 2011, 21:52:18
Ort: Stockholm
Kontakt:

Re: Problem med ADC på PIC18F14K50

Inlägg av Lightsource »

Ok.

Det blir inte någon skillnad om jag kastar om dem, det är som om kanal 5 smittar av sig på kanal 6 om jag kör dem för tätt inpå. Men jag ska göra en djupdykning i timingen så får vi se vad det ger, jag ska även mäta exakt vad jag har för tider.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Problem med ADC på PIC18F14K50

Inlägg av sodjan »

OK.

Det beror ju även på hur snabbt du loopar tillbaka till avläsningen.
Jag antog att det var en paus innan. Om du loopar ganska
snabbt så spelar ju ordningen ingen roll. Däremot är det lite konstigt
att det alltid är just kanal 5 som "styr".

Vad menar du med "smittar av sig". Exakta mätvärden är alltid
bättre än luddiga tolkningar och konstiga otekniska ordval.

> om jag kör dem för tätt inpå.

Vad menar du med det mer exakt ?
Vad är "för tätt inpå" ??
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Problem med ADC på PIC18F14K50

Inlägg av jesse »

Har du väldigt hög impedans på temperaturingången?
Påverkas värdet på pot-ingången också när du läser av båda?

Men jag gissar att Swech är något på spåren. Det är något som processorn inte hinner med att nollställa vid kanalbyte och så blir nästa läsvärde fel.

Annars, om det är kapacitansen som spökar: ADC:ns interna kapacitans brukar vara på några tiotal pF. Om du klämmer på en 100nF på ingången kommer laddningen från 100nF att gå över till den interna på nolltid och du får rätt värde. Vad som händer om du inte har en kondensator, är att den interna laddningen påverkar spänningen så det blir en liten spik på ingången - denna räknas med i resultatet.
Lightsource
Inlägg: 40
Blev medlem: 12 december 2011, 21:52:18
Ort: Stockholm
Kontakt:

Re: Problem med ADC på PIC18F14K50

Inlägg av Lightsource »

Ok, jag trodde det var att den interna kapacitansen i sample & hold-kretsen inte hann laddas ur?

Det verkar som båda kanalerna påverkar varandra, som om värdena adderas. Men jag har inte gjort så väldigt många tester, jag ville först veta om jag missat något uppenbart. jag vet t.ex. inte om den går på det högre värdet av de 2, så kan det ju vara.

sodjan; om jag var ute efter en exakt bedömning hade jag mätt upp mer först.
Jag ville i första hand veta om jag missat något simpelt.
Nu har jag fått många bra svar om principerna och ska labba. Men får jag inte till det så kommer jag givetvis mäta upp allt och precisera mer än dessa "luddigheter". :)
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Problem med ADC på PIC18F14K50

Inlägg av sodjan »

> ...inte hann laddas ur?

Inte hinner laddas till rätt värde.
Inte "ur".

> Det verkar som båda kanalerna påverkar varandra, som om värdena adderas.

Vad saker och ting "verkar som" är ointressant. Tala om vilka värden då får!

> jag ville först veta om jag missat något uppenbart.

Hur ska vi kunna veta det? :-)
Lightsource
Inlägg: 40
Blev medlem: 12 december 2011, 21:52:18
Ort: Stockholm
Kontakt:

Re: Problem med ADC på PIC18F14K50

Inlägg av Lightsource »

Men snälla, nu är du lite väl gnällig tycker jag. :)

Jag la upp min kod, och ville veta om det var något uppenbart fel på den.
Nej jag kan inte testa när jag sitter på jobbet, lugn i stormen.

Och med att laddas ur, enligt databladet så ska "sample & hold"-kretsen laddas ur efter varje mätning, min tanke var att om den inte hann laddas ur så kunde nästkommande värde påverkas av en spänning som ligger kvar där.

Dessutom, jag har ju redan fått de svar jag behöver, vilket jag skrev i tidigare inlägg, och oavsett hur mycket exakta värden vi diskuterat så tycker jag inputen jag fått av både dig och övriga är både matnyttig och intressant, så nu släpper vi detta tills jag testat, OK?
Skriv svar