thanks for your reply s. here is a piece of software I'm using just to see if I can get it working without the flicker of when temp hits 5000 and 10000, so far failed, I'm using a moc 3021 and a bt137 and bridge with a 1k feeding porta.0 and a 10k holding it low. I have been able to make a simple dimming program so I know this hardware works, I also have an lcd so I need a few more io that a 12f675
Code:
Define LCD_DREG PORTB
'Set starting data bit
Define LCD_DBIT 4 'rb4,rb5,rb6,rb7
'Set LCD RS Port
DEFINE LCD_RSREG portb
'Set LCD RS Bit
define LCD_RSBIT 3
'Set LCD Enable Port
Define LCD_EREG portb
'Set LCD Enable Bit
Define LCD_EBIT 2
'Set number of LCD Lines
Define LCD_LINES 2
'Set Command Delay time in uS
define LCD_COMMANUS 2000
'Set Data delay time in uS
define LCD_DATAUS 50
temp var word
temp = 0
temp2 var word
target var word
target = 3000
symbol fire = portb.1
symbol ac = portb.0
maxdelay var word
maxdelay = 8000
delay var word
delay = 4000
trisa = %00000011
trisb = %00000001
DQ VAR PORTa.0 ' One-wire data pin
temperature VAR WORD ' Temperature storage
count_remain VAR BYTE ' Count remaining
count_per_c VAR BYTE
DS18B20_9bit CON %00011111 ; 93.75ms, 0.5°C
DS18B20_10bit CON %00111111 ; 187.5ms, 0.25°C <-- My favorite
DS18B20_11bit CON %01011111 ; 375ms, 0.125°C
DS18B20_12bit CON %01111111 ; 750ms, 0.0625°C (default)
OWOUT DQ, 1, [$CC, $4E, 0, 0, DS18B20_11bit]
lcdout 254,1
pause 100
on interrupt goto firetriac
intcon = %10010000
mainloop:
for temp = 0 to 10000
if temp = 5000 then
gosub startcon
endif
if temp = 10000 then
gosub readtemp
endif
next temp
goto mainloop
disable
firetriac:
pauseus delay
fire = 1
pauseus 10
fire = 0
intcon.1 = 0
resume
enable
startcon:
OWOut DQ, 1, [$CC, $44] ' Start temperature conversion
return
readtemp:
waitloop: OWIn DQ, 4, [count_remain] ' Check for still busy converting
IF count_remain = 0 Then mainloop 'was this what you ment about no waiting in the 'loop
OWOut DQ, 1, [$CC, $BE] ' Read the temperature
OWIn DQ, 0, [temperature.LOWBYTE, temperature.HIGHBYTE, Skip 4, count_remain, count_per_c]
' Calculate temperature in degrees C to 2 decimal places (not valid for negative temperature)
temperature = (temperature >> 1)
lcdout 254,1, dec temperature / 10 ,".", dec1 temperature , " c"
lcdout 254,192, dec delay
return
Bookmarks