PIC16F690 AD problem
PIC16F690 AD problem
Jag har kopplat in AD0 på 16F690 till utgången av en spänningsföljare byggd med CA3130AE via ett 1 k motstånd. Detta resulterar i att den avlästa spänningen flukturerar väldigt mycket.
Om jag däremot kopplar in spänningen direkt till AD0 erhålles normalt stabila mätvärden dock verkar mätvärdena i sig bli lite felaktiga. Därför försöker jag mata AD ingången via en spänningsföljare. Märkte också ett märkbart spänningsfall över 1 k motståndet ca 0.3 V.
Om jag däremot kopplar in spänningen direkt till AD0 erhålles normalt stabila mätvärden dock verkar mätvärdena i sig bli lite felaktiga. Därför försöker jag mata AD ingången via en spänningsföljare. Märkte också ett märkbart spänningsfall över 1 k motståndet ca 0.3 V.
Re: PIC16F690 AD problem
Sannolikt har du gjort något fel. Fixa det så fungerar det säkert...
-
- Inlägg: 2436
- Blev medlem: 28 januari 2007, 18:45:40
- Ort: Kungsbacka
Re: PIC16F690 AD problem
Ja, eftersom det saknas nästan allt om hur det hela är kopplat (inkl ett demo program
som visar problemet) så är det inte mycket mer man kan säga om det.
Spänningsfallet över 1k motstånden säger mycket. En AD ingång drar nästan ingen ström
(om den är korrekt konfigurerad). Om det är det som är problemet går inte att säga
eftersom det inte framgår av den information som vi har.
som visar problemet) så är det inte mycket mer man kan säga om det.
Spänningsfallet över 1k motstånden säger mycket. En AD ingång drar nästan ingen ström
(om den är korrekt konfigurerad). Om det är det som är problemet går inte att säga
eftersom det inte framgår av den information som vi har.
Re: PIC16F690 AD problem
Det elektriska schemat ser ut så här
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: PIC16F690 AD problem
OK, men det intressanta är hur AN0 är konfigurerad.
Du ska inte få 0.3V spänningsfall över 1k motståndet.
Sen är den en annan sak att du sannolikt kan köra
helt utan 3130, men den kanske sitter där av någon
annan anledning.
Du ska inte få 0.3V spänningsfall över 1k motståndet.
Sen är den en annan sak att du sannolikt kan köra
helt utan 3130, men den kanske sitter där av någon
annan anledning.
Re: PIC16F690 AD problem
Som tidigare föreslagits så hade jag gjort något fel genom löd bryggor som nu fixats. Men jag har fortfarande spänningsfall över 1 k motståndet och själva värdet verkar vara lite för mycket fel (t.ex ADC=454 istället för teoretiskt förväntat 424). Och nej 3130 sitter inte där av någon annan anledning än att jag trodde att den behövdes. Hoppades att den skulle fixa felen i erhållet mätvärde.
Min konfigureringskod ser ut så här
Min konfigureringskod ser ut så här
Kod: Markera allt
void init(void)
{
// port directions: 1=input, 0=output
TRISA = 0b11111111;
TRISC = 0b10010000;
IOCA = 0b00100000;
PIE1 = 0b00000001;
INTCON = 0b01001000;
OPTION = 0b10000000;
T1CON = 0b00110101;
ANSEL= 0b00011111;
ANSELH= 0b11110111;
ADCON0 =0b10000001; //result right adj ADC on (CH=0)
ADCON1 = 0b01010000; //fosc/16 X101XXXX
init_comms();
}
Re: PIC16F690 AD problem
Fixa minsta möjliga kod som uppvisar problemet och posta det i sin *helhet*.
Bör inte bli mer än 20-30 rader. Det du postade skapar bara fler frågor än vad
det besvarde (t.ex vad sitter på alla andra PORTA-pinnar som är ingångar ?).
Och att skala ner det hela till att enbart testa ADC'n måste du ju i alla fall
göra, eller hur ? D.v.s för att felsöka på ett normalt sätt.
> Och nej 3130 sitter inte där av någon annan anledning än att jag trodde att den behövdes.
Den behövs inte om inte poten har ett stort värde.
Men är det säg en 10k pot så kan koppla punkten mellan R3 och R4 direkt till AN0.
Är det någon speciell anledning till att poten sitter mot 12V ?
Om den satt mot 5V så behövs inte R3 och R4 alls. De sitter väl där
(bara ?) som en spänningsdelare från 12V till 5V !?
> (t.ex ADC=454 istället för teoretiskt förväntat 424)
Hur har du kommit fram till det förväntade värdet (424) ?
Och hur vet du vilket värde du får (454) ?
Bör inte bli mer än 20-30 rader. Det du postade skapar bara fler frågor än vad
det besvarde (t.ex vad sitter på alla andra PORTA-pinnar som är ingångar ?).
Och att skala ner det hela till att enbart testa ADC'n måste du ju i alla fall
göra, eller hur ? D.v.s för att felsöka på ett normalt sätt.
> Och nej 3130 sitter inte där av någon annan anledning än att jag trodde att den behövdes.
Den behövs inte om inte poten har ett stort värde.
Men är det säg en 10k pot så kan koppla punkten mellan R3 och R4 direkt till AN0.
Är det någon speciell anledning till att poten sitter mot 12V ?
Om den satt mot 5V så behövs inte R3 och R4 alls. De sitter väl där
(bara ?) som en spänningsdelare från 12V till 5V !?
> (t.ex ADC=454 istället för teoretiskt förväntat 424)
Hur har du kommit fram till det förväntade värdet (424) ?
Och hur vet du vilket värde du får (454) ?
Re: PIC16F690 AD problem
En annan liten sak...
> Hoppades att den [3130 opamp] skulle fixa felen i erhållet mätvärde.
OK, så du har kört utan den innan alltså ?
Men impedansen i spänningsdelaren och sannolikt poten (men vi saknar
värdet på den för att vara säkra) är inom specen för ADC ingången i alla fall.
Så du har sannolikt något annat fundamentalt fel. Fixa det så fungera det nog.
Eller ge oss hela bilden så kanske det går att se vad det är. Som jag sa,
du måste ju i alla fall göra ett testprogram för att felsöka...
> Hoppades att den [3130 opamp] skulle fixa felen i erhållet mätvärde.
OK, så du har kört utan den innan alltså ?
Men impedansen i spänningsdelaren och sannolikt poten (men vi saknar
värdet på den för att vara säkra) är inom specen för ADC ingången i alla fall.
Så du har sannolikt något annat fundamentalt fel. Fixa det så fungera det nog.
Eller ge oss hela bilden så kanske det går att se vad det är. Som jag sa,
du måste ju i alla fall göra ett testprogram för att felsöka...
Re: PIC16F690 AD problem
Förs ett kort svar. Jag har nu gjort ett annat test. Då jag har en PICkit 2 med ett demo kort (Low Pin Count Demo) som använder AN0 och som också har ett bifogat demo exempel för att visa ADC.
Jag körde helt enkelt detta demo program som läser AD0 och även här sker ett signifikant spänningsfall över 1 k resistorn. Demo kortet har en pot kopplad till Vcc och dess mitt uttag kopplas till AD0 via ett 1 k motstånd. Ett kommersiellt demo kort med tillhörande demo program borde väl rimligen inte innehålla fel särskilt inte fundamentala? Så är verkligen spänningsfallet över motståndet som kopplas till ADC onormalt?
Mitt eget C program diskuterat här kördes också på demo kortet och även nu blir mätvärdena avvikande från det beräknade (Uadc/Vcc*1023)
Jag körde helt enkelt detta demo program som läser AD0 och även här sker ett signifikant spänningsfall över 1 k resistorn. Demo kortet har en pot kopplad till Vcc och dess mitt uttag kopplas till AD0 via ett 1 k motstånd. Ett kommersiellt demo kort med tillhörande demo program borde väl rimligen inte innehålla fel särskilt inte fundamentala? Så är verkligen spänningsfallet över motståndet som kopplas till ADC onormalt?
Mitt eget C program diskuterat här kördes också på demo kortet och även nu blir mätvärdena avvikande från det beräknade (Uadc/Vcc*1023)
Re: PIC16F690 AD problem
Lite svar på frågorsodjan skrev:Fixa minsta möjliga kod som uppvisar problemet och posta det i sin *helhet*.
Bör inte bli mer än 20-30 rader. Det du postade skapar bara fler frågor än vad
det besvarde (t.ex vad sitter på alla andra PORTA-pinnar som är ingångar ?).
Och att skala ner det hela till att enbart testa ADC'n måste du ju i alla fall
göra, eller hur ? D.v.s för att felsöka på ett normalt sätt.
> Och nej 3130 sitter inte där av någon annan anledning än att jag trodde att den behövdes.
Den behövs inte om inte poten har ett stort värde.
Men är det säg en 10k pot så kan koppla punkten mellan R3 och R4 direkt till AN0.
Är det någon speciell anledning till att poten sitter mot 12V ?
Om den satt mot 5V så behövs inte R3 och R4 alls. De sitter väl där
(bara ?) som en spänningsdelare från 12V till 5V !?
> (t.ex ADC=454 istället för teoretiskt förväntat 424)
Hur har du kommit fram till det förväntade värdet (424) ?
Och hur vet du vilket värde du får (454) ?
Förutom AD0 (RA0) så har jag en annan OP kopplad till AD1(RA1) inga andra pinnar förutom Vcc och GND används
Poten är på 100 k men AD ser väl 2.2K motståndet så spelar dess värde någon roll?
Exemplet är tänkt att mäta en extern spänning Uin som potyen leverar nu. Så +5V och +12V är helt separata. PICkit2 ger +5V och ett eget kort matat med en batterieliminator ger +12V. Dena spänning ät tänkt att senare kunna ökas ännu mer. Därav spänningsdelaren R3 R4
Förväntat värde =Uadc/Vcc*1023
Mitt program skriver ut erhållet ADC värde i till serieporten på min dator och läses med ett terminal program. Spänningar mätes med multimeter.
Re: PIC16F690 AD problem
> inga andra pinnar förutom Vcc och GND används
OK. Du bör genrellt inte ha oanslutna pinnar som ingångar.
Inte säkert (eller end sannolikt) att det är problemet, men
gör det til en vana. "Open CMOS inputs" är en no-no.
> Poten är på 100 k men AD ser väl 2.2K motståndet så spelar dess värde någon roll?
Osäker på hur impedanser beräknas i det fallet. Men jag tror inte att det är det.
> Så +5V och +12V är helt separata.
Men med gemensan GND hoppas jag.
> Då jag har en PICkit 2 med ett demo kort (Low Pin Count Demo) som använder AN0 och
> som också har ett bifogat demo exempel för att visa ADC. Jag körde helt enkelt detta
> demo program som läser AD0 och även här sker ett signifikant spänningsfall över 1 k resistorn.
OK. Nu börjar det likna något!
Vilket av demo programmen var det ?
Jag kan köra samma på kontoret så får vi se...
> Så är verkligen spänningsfallet över motståndet som kopplas till ADC onormalt?
Ja, jag tycker nog det. ADC-ingången ska inte dra någon större ström. Och om det
sitter ett 1 k motstånd även på PICkit2 kortet så, tja...
En fråga, är det samma 16F690 som du kör både i din egen koppling
och på PICkit2 kortet ? Och i så fall, har du någon extra 16F690 ?
OK. Du bör genrellt inte ha oanslutna pinnar som ingångar.
Inte säkert (eller end sannolikt) att det är problemet, men
gör det til en vana. "Open CMOS inputs" är en no-no.
> Poten är på 100 k men AD ser väl 2.2K motståndet så spelar dess värde någon roll?
Osäker på hur impedanser beräknas i det fallet. Men jag tror inte att det är det.
> Så +5V och +12V är helt separata.
Men med gemensan GND hoppas jag.

> Då jag har en PICkit 2 med ett demo kort (Low Pin Count Demo) som använder AN0 och
> som också har ett bifogat demo exempel för att visa ADC. Jag körde helt enkelt detta
> demo program som läser AD0 och även här sker ett signifikant spänningsfall över 1 k resistorn.
OK. Nu börjar det likna något!

Vilket av demo programmen var det ?
Jag kan köra samma på kontoret så får vi se...
> Så är verkligen spänningsfallet över motståndet som kopplas till ADC onormalt?
Ja, jag tycker nog det. ADC-ingången ska inte dra någon större ström. Och om det
sitter ett 1 k motstånd även på PICkit2 kortet så, tja...
En fråga, är det samma 16F690 som du kör både i din egen koppling
och på PICkit2 kortet ? Och i så fall, har du någon extra 16F690 ?
-
- Inlägg: 9
- Blev medlem: 21 december 2008, 06:09:32
- Ort: Huddinge
Re: PIC16F690 AD problem
Utimpedansen på källan till AD-signalen skall inte vara större än 10k för korrekt mätvärde. Om du använder potten på 100K direkt på ingången kommer det inte att fungera. Värdet skall vara 10K eller mindre. Resultatregisten är de samma för alla AD ingångar. Värdet måste sparas undan efter varje mätning.
Re: PIC16F690 AD problem
> Om du använder potten på 100K direkt på ingången kommer det inte att fungera.
Naj, det kommer att "fungera", man kanske med lite fel värde, dock sannolikt
inte så mycekt som det blir här. Och det ska fortfrande inte bli något större
spänningsfall över 1k motståndet.
Det finns flera tänkbara felkällor som jfri bara kan kolla.
- Det kanske är ett 1M motstånd istället för 1k.
- AN0/RA0 kanske har fått en "kyss" direkt från 12V.
O.s.v o.s.v...
Naj, det kommer att "fungera", man kanske med lite fel värde, dock sannolikt
inte så mycekt som det blir här. Och det ska fortfrande inte bli något större
spänningsfall över 1k motståndet.
Det finns flera tänkbara felkällor som jfri bara kan kolla.
- Det kanske är ett 1M motstånd istället för 1k.
- AN0/RA0 kanske har fått en "kyss" direkt från 12V.
O.s.v o.s.v...