BIG PROMLEM!!! After adding on all the extra's (relay code, leds...etc), the pic is operating at snails pace!!! What do i do about this now??
BIG PROMLEM!!! After adding on all the extra's (relay code, leds...etc), the pic is operating at snails pace!!! What do i do about this now??
im using a 4mhz crystal oscillator. I did define it in ADCON0. Bit 6-7 as 11. i would also like to know what difference would there be if i had to amplify the output signal from the LM35. and if i did, please explain to me whether i'd be getting more accurate results? N.B. 16F873
Define LCD_DREG PORTB
Define LCD_DBIT 0
Define LCD_RSREG PORTB
Define LCD_RSBIT 5
Define LCD_EREG PORTB
Define LCD_EBIT 4
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
mode var byte
keyin var byte
adval var word
tempc var word
highpt var byte
lowpt var byte
highled var porta.1
lowled var porta.2
relayhigh var porta.3
relaylow var porta.4
buzzer var porta.5
up var portc.0
down var portc.1
sethighp var portc.2
setlowp var portc.3
maindisp var portc.4
highpt = 100
lowpt = 0
trisc= %00011111
trisa=%00000001
adcon1=%11110010
adcon0=%11000001
pause 100
lcdout $fe , 1
mode = 1
goto main
getkey:
pause 50
keyin = portc
return
gettemp:
adcon0.2=1
pause 1
checkdone:
if adcon0.2=1 then checkdone
adval.highbyte=adresh
adval.lowbyte=adresl
tempc=50*adval
tempc=tempc/100
If tempc>=highpt then
gosub high_flash
SOUND buzzer, [60, 100, 23, 200]
relayhigh = 1
else
relaylow = 0
lowled = 0
buzzer = 0
endif
If tempc<=lowpt then
gosub low_flash
SOUND buzzer, [20, 100, 23, 200]
relaylow = 1
else
relayhigh = 0
highled = 0
buzzer = 0
endif
return
main:
gosub gettemp
gosub getkey
if maindisp = 0 then mode = 1
pause 50
if sethighp = 0 then mode = 2
pause 50
if setlowp = 0 then mode = 3
pause 50
select case mode
case 1
write 0 , sethighp
pause 10
write 1 , setlowp
lcdout $fe , 1
Lcdout "TEMP = ",DEC tempc,$DF,"C"
case 2
lcdout $fe , 1
lcdout $fe , $80 , "High Setpoint:" , $fe , $c0 , dec highpt, $DF , "C"
if up = 0 then highpt = highpt + 1
if down = 0 then highpt = highpt - 1
if highpt>100 then highpt=0
case 3
lcdout $fe , 1
lcdout $fe , $80 , "Low Setpoint:" , $fe , $c0 , dec lowpt, $DF , "C"
if up = 0 then lowpt = lowpt + 1
if down = 0 then lowpt = lowpt - 1
if lowpt>100 then lowpt=0
end select
goto main
high_flash:
HIGH highled
PAUSE 350
LOW highled
PAUSE 350
RETURN
low_flash:
HIGH lowled
PAUSE 350
LOW lowled
PAUSE 350
RETURN
Last edited by Kalind; - 23rd October 2008 at 10:40.
You define the oscillator
but PB defauts to 4 so you should be good there.Code:DEFINE OSC 4
The LM35 does not need amplification. If it is giving a fluctuation on the reading a capacitor between the signal and 0 volts (ground) will fix that.
Still looking through you code...
When it gets to the LED blinking, do they blink at the correct speed? Or are you seeing slow running some place else?
Dave
Always wear safety glasses while programming.
there entire device has slowed down. temperature changes used to be instantaneous. going into the different menu's were instantaneous. for some odd reason every has slowed down.
About the amplification, wouldnt it affect the resolution of the measurement?
So when you press a button it takes a bit for anything to happen?
I do not see anything obvious in you code other than it is doing a lot of things now that take time. Takes a little time to get back to the button. To make the buttons react faster you will want to explore interrupts.
No.About the amplification, wouldnt it affect the resolution of the measurement?
The resolution is controlled by the ADC, 8 or 10 bit, and the VREF (voltage reference)
This link goes to a volt meter
http://rentron.com/serial.htm
but that is all a LM35 is (sort of)
Bruce has a good explanation about how to read a voltage and display it.
Dave
Always wear safety glasses while programming.
yeah it takes abit longer than before to do stuff. im really concerned as to why this is happening bcause it kinda defeats the purpose of intantaneous measurement. Is there anything you would recommend? Should i maybe try change the oscilator to fosc/32? would that help?
Bookmarks