Need help to troubleshoot

Status
Not open for further replies.

ssocs45

New Member
Hi everyone, I would like some help to solve a problem with a project that I’m working on. Hope someone can point out what I’m doing wrong and help correct the mistake. Basically I’m doing a project using PIC12F675 which blinks one of the two LEDs depending on how much voltage is fed in the ADC pin (Analog to Digital Conversion pin). I have used a LDR ( Light Dependent Resistor ) in series with a resistor as in a voltage divider concept and taking the voltage from the center of the LDR and resistor as the input for the ADC pin. The function of this whole circuit is to tell if the light ambience in the room is below or above a predetermined amount. It should blink Green for above and Red for below the predetermined amount. (I have attached a schematic for a clearer picture)

This is how I have programmed the PIC12F675 using PIC Basic Pro. Thanks in advance for the help

LED1 con 4
LED2 CON 5

CMCON=7
ANSEL=%00001000
TRISIO=%10000000
ADVAL VAR BYTE
K VAR WORD
ROCK VAR WORD
ROCK=%01010101

CHECK:

ADCIN 0, ADVAL

notdone:

IF ADVAL > ROCK THEN
GOTO MMM
ELSE
GOTO MM2
ENDIF

MMM: FOR K = 1 TO 2
HIGH LED1
HIGH LED2
PAUSE 250
LOW LED2
LOW LED1
PAUSE 250
NEXT K
GOTO CHECK

MM2: HIGH LED1
PAUSE 250
LOW LED1
PAUSE 250

GOTO CHECK

END
 

Attachments

  • schematic_515.jpg
    9.6 KB · Views: 543
Well for a start you need series resistors for the LED's, and you haven't mentioned what happens when you run the program.
 
I have not checked throughly the datasheet on the PIC so I am not familiar with the name of its registers. But here are some things I want to point out.

First..... MAke sure that you put a limiting resistor on those LED, you may damage your PIC and burn the LED if not.

Second.... You are comaparing a WORD size variable to a BYTE size variabel when you are doing the IF ADVAL > ROCK THEN

Third...... According to the datasheet the maximum impedance recomended for analog sources is 2.5kOhms

Fourth..... YOu have not set the ADCON0 register. You need to do this and justify left the A-D conversion. And set your voltage reference pin.

Fifth....... Yout TRISIO is a 6-bit wide register. You must declare those pins with the LEDS outputs, and the one with the Analoge Voltage INPUT, like TRISIO = %110000

Sixth.... Make sure you have configured the PIC to run on internal oscilator.

Seventh..... Your ROCK variable is set to 85. That is your threshold voltage will be 0.415V (that is (5V/2^10)*85). When the voltage divider made by the LDR and resistor is 0.415V the condition IF ADVAL > ROCK THEN will be true. Is this the threshold voltage you really want?

Eight....... When you use the command ADCIN will use the ADC and not as a comparator. So you don't have to set the CMCON register.

Good Luck

Ivancho
 
Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…