PIC12F675 A / D problem

H

hhhsssmmm

Guest
Hej

Im benytter PIC12F675 med intern OSC kører @ 4MHz.Im benytter MikroC compiler version 8.2.

Jeg ønsker at gøre en simpel ADC eksperiment.Se venligst vedlagte diagram.

Før PIC er placeret i kredsløb, de 10K pot er først trimmes for at få støt 5.03V MAX output fra 15V DC forsyning, der er en stabil variabel DC strømforsyning.Den 5V forsyning for PIC leveres fra 78L05 regulator IC.Jordreferenceniveauet er den samme for hele kredsløbet.

Nu når 15V DC forsyning er på 15V MAX,
et 10K pot output lyder på volt meter som 5.03V.Tilsvarende hvis 15V jævnstrømsforsyning sænkes til 10V, så de 10k pot output lyder på volt meter som 3.4V.Jeg formoder, at disse spænding ses også af PIC ADC pin (AN1) som vist på tegningen.

Mit program nedenfor simpelthen kontrol for at se, at hvis ADC spænding er lig med eller over 3.4V, så PIC tændes lysdioden.Hvis spændingen falder til under 3.4V, så
LED'en forbliver slukket.

Desværre er dette ikke sker, og
LED'en forbliver på selvom jævnstrømsforsyning sænkes ned til 6V.Så tilsvarende spænding ud fra POT lyder 2V.Jeg har forsøgt at variere "ADC_Result" variable værdi til en langt højere vaule (800), men selv det ikke hjælper, og det samme problem tilbage.

I mikroC compiler, jeg har konfigureret mit projekt som ....

CPD_OFF
CP_OFF
BODEN_OFF
MCLRE_OFF
PWRTE_OFF
WDT_OFF
INTRC_OSC_NOCLKOUT = ON

Nedenfor er mit program.Please kan nogen hjælpe mig med at løse dette problem.

Tak
Haseeb

Code:usignerede int ADC_Result / / ADC resultat bedrift variablevoid Main (void)

(OSCCAL = 0x80; / / trimning indre 4MHz OSC ned til 'Center'GPIO = 0 / / intiallize havnen/ / intillize de Comparitor knappenåle (GP0 til GP1) til digitale I / O ben

CMCON = 7;ADCON0.ADFM = 1 / / Resultat Højre berettiget

ADCON0.VCFG = 1 / / Spænding Reference er Vref/ / Kanal 01 (AN1) UDVALGT

ADCON0.CHS1 = 0;

ADCON0.CHS0 = 1;ADCON0.GO_DONE = 0; / / Stop ADC Conversion

ADCON0.ADON = 0; / / ADC Deaktiveret/ / A / D Conversion Ur er FOSC / 8

ANSEL.ADCS2 = 0;

ANSEL.ADCS1 = 0;

ANSEL.ADCS0 = 1;/ / AN1 er Analog .....
resten alle er Digital

ANSEL.ANS0 = 0;

ANSEL.ANS1 = 1;

ANSEL.ANS2 = 0;

ANSEL.ANS3 = 0;TRISIO.GP5 = 0; / / LED output

TRISIO.GP1 = 1 / / Kanal AN1 inputINTCON = 0; / / deaktivere alle interrupts

PIE1 = 0; / / deaktivere alle perifere interruptsADCON0.ADON = 1 / / ADC Enabledmens (1) / / loop evigt

(ADCON0.GO_DONE = 1 / / Start ADC Conversionwhile (ADCON0.GO_DONE == 1) / / Vent, indtil Konverteringsfrekvens finishmidlerADC_Result = (ADRESH * 256) ADRESL / / Fusionerende High byte med lav byteif (ADC_Result> = 696) / / hvis vi får 3.4VGPIO.GP5 = 1 / / LED påandenGPIO.GP5 = 0; / / LED slukket)) / / Udgang vigtigste ()

 
Hej,

Kan ikke hjælpe med C-kode, men mens du tester hvorfor ikke slutte 10K trimmer til
5 mod jernbane for PIC, så du er på samme strøm og mindske risikoen for opblæsningsmiddel du pic op.

 
Kære Haseeb,
Jeg
har grundigt læse din kode, ifølge mig der ikke er noget galt, men jeg foreslår, at du skal erstatte de 3 linier: --
ADCON0.GO_DONE = 1 / / Start ADC Conversion
while (ADCON0.GO_DONE == 1) / / Vent, indtil Konverteringsfrekvens finishmidler
ADC_Result = (ADRESH * 256) ADRESL / / Fusionerende High byte med lav byte
ved:
ADC_Result = ADC_Read (1);

Jeg mener, at dette vil løse dit problem.Da der ikke er noget galt med din kode, sommetider er det compileren gør nogle fejl i forbindelse med forberedelsen af HEX fil, nu er det meget vanskeligt at identificere disse fejl.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;
inde void vigtigste ()
i midten af programmet, i henhold til den compiler der opstod en fejl i denne tråd, men når jeg skiftede denne linje til eksterne void vigtigste (),
ja

selv inde void vigtigste ()
efter (,
compiler kompileres programmet og skabe succes.
Håber det virker for dig,
Hilsen,
BABAR Khan

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

det bør være

GPIO.f5 = 1 / / LED påGPIO.f5 = 0;f er ikke store og små bogstaver, så du kan bruge enten f eller F & huske dette er kun for MikroC.
Når du bruger en compiler bør du læse sin HJÆLP fil & prøve-programmer, de hjælper meget.

 

Welcome to EDABoard.com

Sponsor

Back
Top