PIC12F675 A / D-problem

H

hhhsssmmm

Guest
Hallo

Im benytter PIC12F675 med intern OSC kjører @ 4MHz.Im benytter MikroC kompilatoren versjon 8.2.

Jeg ønsker å gjøre en enkel ADC eksperiment.Vennligst se vedlagte diagram.

Før PIC er plassert i kretsen, er 10K potten er først trimmet for å få jevn 5.03V MAX utgang fra 15V DC forsyning som er en jevn variabel DC strømforsyning.Det 5V forsyning for PIC gis fra 78L05 regulator IC.Den første referansen er den samme for hele kretsen.

Nå når 15V DC forsyning er på 15V MAX, den 10K potten utgang leser på volt meter som 5.03V.Tilsvarende hvis 15V DC forsyning senkes til 10V, så 10k potten output leser på volt meter som 3.4V.Jeg antar at disse spenningene er også sett av PIC ADC pin (an1) som vist i diagrammet.

Min programmet nedenfor bare sjekker for å se at hvis ADC spenning er lik eller over 3.4V, så PIC slår på LED.Dersom spenningen faller under 3.4V, deretter LED forblir utenfor.

Dessverre er dette ikke skjer og LED forblir på selv om DC forsyning senkes ned til 6V.Da den tilsvarende spenningen ut fra POT leser 2V.Jeg har prøvd å variere "ADC_Result" variabel verdi til en mye høyere Vaule (800), men selv dette ikke hjelper, og det samme problemet gjenstår.

I mikroC kompilatoren, jeg har konfigurert prosjektet mitt som ....

CPD_OFF
CP_OFF
BODEN_OFF
MCLRE_OFF
PWRTE_OFF
WDT_OFF
INTRC_OSC_NOCLKOUT = ON

Nedenfor er mitt program.Behage kanne noen hjelpe meg å løse dette problemet.

Takk
Haseeb

Code:unsigned int ADC_Result; / ADC resultat holding variabelvoid main (void)

(OSCCAL = 0x80; / trimming intern 4MHz OSC ned til 'Midtstilt'GPIO = 0; / intiallize porten/ / intillize den Comparitor pins (GP0 til GP1) til Digital I / O pinner

CMCON = 7;ADCON0.ADFM = 1; / / Result Høyre begrunnet

ADCON0.VCFG = 1; / / Voltage Reference is Vref/ / 01 Channel (an1) VALGT

ADCON0.CHS1 = 0;

ADCON0.CHS0 = 1;ADCON0.GO_DONE = 0; / / Stopp ADC konvertering

ADCON0.ADON = 0; / ADC funksjonshemmede/ / A / D-konvertering Clock er FOSC / 8

ANSEL.ADCS2 = 0;

ANSEL.ADCS1 = 0;

ANSEL.ADCS0 = 1;/ / An1 er Analog .....
Resten er alt Digital

ANSEL.ANS0 = 0;

ANSEL.ANS1 = 1;

ANSEL.ANS2 = 0;

ANSEL.ANS3 = 0;TRISIO.GP5 = 0; / / LED-utgang

TRISIO.GP1 = 1; / / Channel an1 inngangINTCON = 0; / deaktivere alle avbrudd

PIE1 = 0; / deaktivere alle perifere avbruddADCON0.ADON = 1; / / ADC Enabledmens 1 () / / løkke for alltid

(ADCON0.GO_DONE = 1; / / Start ADC konverteringmens ADCON0.GO_DONE (== 1); / / Vent til konvertering ferdigADC_Result = (ADRESH * 256) ADRESL; / Flette High byte med lav byteif (ADC_Result> = 696) / / hvis vi får 3.4VGPIO.GP5 = 1; / / LED påellersGPIO.GP5 = 0; / LED off)) / / End of main ()

 
Hei,

Kan ikke hjelpe med C-kode, men mens du tester hvorfor ikke koble 10K trimmeren til 5 V rail av Pic, slik at du er på samme strøm og reduserer risikoen for å blåse deg pic up.

 
Kjære Haseeb,
Jeg har grundig lese koden din, ifølge meg er det ingenting galt, men jeg foreslår at du skal erstatte 3 linjer: --
ADCON0.GO_DONE = 1; / / Start ADC konvertering
mens ADCON0.GO_DONE (== 1); / / Vent til konvertering ferdig
ADC_Result = (ADRESH * 256) ADRESL; / Flette High byte med lav byte
by:
ADC_Result = ADC_Read (1);

Jeg tror dette vil løse problemet ditt.Siden det ikke er noe galt med koden, noen ganger kompilatoren gjør noen feil mens du forbereder HEX-fil, nå er det svært vanskelig å identifisere disse feilene.inside void main()
in the middle of the program, according to the compiler there was an error within this line, but when i shifted this line to outside void main()
OR

even inside void main()
after {
, compiler compiled the program and BUILD SUCCESSFULLY.

Når jeg skrev int i;
innsiden void main ()
midt i programmet, ifølge kompilatoren det var en feil i denne linjen, men når jeg skiftet denne linjen utenfor void main () eller
innsiden void main ()
etter (,
compiler kompilert programmet og bygge riktig.
Håper det fungerer for deg,
Hilsen,
Babar KHAN

 
GPIO.GP5 = 1; / / LED påGPIO.GP5 = 0;er feil

det skal være

GPIO.f5 = 1; / / LED påGPIO.f5 = 0;f er ikke små bokstaver, slik at du kan bruke enten f eller F & husk dette er bare for MikroC.
Når du bruker en kompilator bør du lese HJELP filen & utvalg programmer, hjelper det mye.

 

Welcome to EDABoard.com

Sponsor

Back
Top