PDA

View Full Version : Can't get POT work on P12f675 - Newbie



berslan
- 26th March 2008, 09:36
Hi Guys,

First I must thank you all, since this forum is great, and I managed to find solutions without posting untill now.
I am working on an imitation of the interactive led table by evilmadscientist, with slight variances. For those who don't what it is, basically set of leds blinking in a wavy fashion in response to varying ambient light.

I managed to get the leds do the wave thing by PWM on the 16f675. My problem starts at detecting the ambient light. I have never used analog digital conversion till now and after a brief try, decided POT command would be sufficient too, ansd switched to it(will use it with a photoresistor). I managed to get it work on 16f84A with a 22K potentiometer, grounded after a 0,1 uf capacitor. But want to do it on 16f675. So far it does not read the potentiometer at all and acts erratic. tried connecting the 3rd pin to 5V, but no change. After this circuit works, I will swap the potentiometer with the photoresistor and that will be the light sensor.

There are two things I suspect.
1-internal OSC is not good for this.
2-I just noticed that I activated the weak pullup on all pins, I am at work now and can't wait until the evening to see if this is the problem.

The simple code I wrote to isolate the problem is given below:

---------------------------

define OSC 4 'define osc speed
define OSCCAL_1K 1 'write internal osc value
CMCON = 7 'disconnect comparator
ANSEL = 0 'disable a/d converter
TRISIO = %00001000 'set ports
WPU = %11111111 'weak pullup
GPIO = 0

potval0 var byte

loop:
Pot 3, 255, potval0 'write pot reading to potval

if potval0>127 then 'if reading is bigger than 127
high 0 'blink led on 0
pause 1000
low 0
else
high 1 'else blink led on 1
pause 1000
low 1
endif

goto loop
---------------------------
and the include file is below as I have modified it to work with internal OSC

---------------------------

NOLIST
ifdef PM_USED
LIST
include 'M12F675.INC' ; PM header
device pic12F675, intrc_osc, wdt_on, mclr_off, protect_off
XALL
NOLIST
else
LIST
LIST p = 12F675, r = dec, w = -302
INCLUDE "P12F675.INC" ; MPASM Header
__config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_OFF & _CP_OFF
NOLIST
endif
LIST


----------------------

Please gusy help me get out of this. I have been stuck here for 5 desk hours now. After this, my question about interrupts comes, but I havent given up on search for that yet.

Thanks to responders in advance.

Oh, one last thing. Since it is my first post, I am not sure if my message is good as a thread here, so please let me know if you have any suggestions, on how and what else to include.

berslan
- 26th March 2008, 12:01
Come on guys, did I ask such a stupid question that has to be ignored?

Acetronics2
- 26th March 2008, 12:31
Come on guys, did I ask such a stupid question that has to be ignored?

Hi,

Yes and No ...

If you had read your Datasheet ...you could have noticed that GP3 is not a pin like the others ...

BUT, in your favour, you are not to know how "POT" works ...

So, just remember POT needs the pin to turn from time to time into an OUTPUT ...

And this is written nowhere in the manual ...

The Proof :



POTT movwf RM1 ; Save bit mask
call HIGHT ; Set pin high to charge cap
movlw 10 ; Charge cap for 10ms
call PAUSE
movf RM1, W ; Get bit mask
iorwf INDF, F ; Set pin to input
bcf FSR, 7 ; Point to port
xorwf INDF, F ; Flip bit to low
clrf R0 ; Zero counter
clrf R0 + 1
potloop bsf FSR, 7 ; Point to TRIS
movf RM1, W ; Get bit mask
xorwf INDF, F ; Set pin to output
CLRWDT?NOP ; Discharge a little (& clear Watchdog timer)


Alain

Change pin used ... no other solution ( ... RCTime won't work either )

mister_e
- 26th March 2008, 13:17
To add to Alain's explanation, GP3/MCLR is an input only. But huh... why using POT while your PIC have an ADC converter? Check in your manual and on this forum for ADCIN.

Make sure your pot impedance meet the datasheet requirement (<2.2K if my memory serves me well)

If you're using a Photoresistor, you will need to use a buffer (op-Amp, transistor or else) in between to match the impedance.

berslan
- 26th March 2008, 13:52
Thanks Alain. Now I get it. In fact I already knew that GP3 is input only and without thinking about how pot works, I used GP3 intentionally, since I could not use it as an output if I needed one later. Smart huh?
And mister_e, I will give a try to ADCIN. And will make sure to use a analog available pin. thanks for the guidance.

berslan
- 26th March 2008, 19:56
Just changed the pin, and it works.
Thanks a lot guys, you are good.

mister_e
- 26th March 2008, 21:22
Usually we don't accept anything under "You're the best"... but :D :D Just kidding.

Enjoy!