http://www.elektronika.ba/forum/viewtop ... 49#p145445
http://www.elektronika.ba/forum/viewtop ... =1&t=16210
http://www.elektronika.ba/forum/viewtop ... =3&t=16225
Započeh i ja nešto za svoje potrebe (kamin na pelet) a i za širu publiku i korisnike.
U prilogu je pločica koju je uradio Feko i HEX za PIC16F628.
Posebno se podešavaju temperature palenja i gašenja relea (režim grijanja), a pošto postoje dva relea drugi bi mogao biti za režim hlađenja (nije implementirano u HEX-u), a takođe se može i programski uraditi da se bira režim.
Pisao sam već da ću u budućnosti probati uraditi bežičnu komunikaciju.
Evo trenutnog kod-a:
Code: Select all
#CONFIG
__config _INTRC_OSC_NOCLKOUT & _WDTE_ON & _PWRTE_ON & _MCLRE_OFF & _LVP_OFF
#ENDCONFIG
CMCON=7 'iskljuceni analogni komparatori - DIGITALNI I/O
DEFINE OSC 4
include "modedefs.bas" ' za serin i serout naredbu
'konfiguracija LCD
DEFINE LCD_BITS 4 'LCD radi u 4-bitnom modu
DEFINE LCD_DREG PORTB 'port na koji su zakaceni data biti displeja d4-d7
DEFINE LCD_DBIT 4 'pocetni bit data porta na koji se veze d4 displeja
DEFINE LCD_RSREG PORTA 'port na koji je zakacena linija RS
DEFINE LCD_RSBIT 1 'bit porta na kome je zakacena linija RS
DEFINE LCD_EREG PORTA 'port na kome je zakacena E linija displeja
DEFINE LCD_EBIT 0 'bit porta na kome je zakacena E linija
DEFINE LCD_LINES 2 'LCD sa dva reda
TRISB=%00000111
TRISA=%11010000
symbol TastUP=portb.0
symbol TastDN=portb.1
symbol TastSET=portb.2
symbol PozOs=portb.3'pozadinsko osvjetlenje
symbol Out1=porta.2 'ili TX ili rele
symbol Out2=porta.3'samo rele
symbol DQ=porta.4'temp sonda
'promjenjive za izracun temperature
Deg CON 223 'konstanta za iscrtavanje oznake stepena
Temperature Var Word
TempC Var Word
Float Var Word
Twist Var Bit
sST var bit
nST var bit
SetON var word
SetOF var word
seton=220:setof=235'default zadanih vrijednosti u slucaju da ne procita eeprom
'citanje zadatih vrijednosti iz internog eeproma
read 1,seton.lowbyte
pause 10
read 2,seton.highbyte
pause 10
read 3,setof.lowbyte
pause 10
read 4,setof.highbyte
pause 10
LCDOUT $FE, 1 ;briše sve sa LCD-a i inicijelizira ga
LCDOUT $FE, 2,"Termostat by:"
LCDOUT $FE, $C0, "ELEKTRONIKA.BA"
pause 2000' ostavi natpis 2 sekunde
Out2=0:PozOS=0
Main:
gosub mjerenje'izmjeri temperaturu
'prikaz
LCDOUT $FE, 1
LcdOut $FE,$80,"Temp: ",DEC (Temperature / 10),".",dec1 (Temperature),deg,"C"
lcdout $fe,$c0, "ON=",dec seton/10,".",dec1 seton," ","OFF=",dec setof/10,".",dec1 setof
PAUSE 500
if Out2=1 then PozOS=1 'ako je ugasen izlaz onda je i pozadinsko osvjetlenje
if temperature<=seton then 'uslov za palenje
out2=1
pozos=1
endif
if temperature>=setof then 'uslov za gasenje
out2=0
pozos=0
endif
if TastSET=0 then
pozos=1'upali pozadinsko
goto set1 'idi na podesavanje
endif
goto Main ' Ponovi sve
'---------------------------------------------------------------------
SeT1: 'podesavanje temp palenja
nst=tastset
if nst<sst then ' prije izlaza iz funkcije upisi u interni eeprom
write 1,seton.lowbyte
pause 12
write 2, seton.highbyte
pause 12
sst=nst
goto set2'ide na podesavanje temp gasenja
endif
Lcdout $FE, 1, "Podesavanje:"
LcdOut $FE, $C0,"Temp. ON=",dec seton/10,".",dec1 seton,deg,"C "
PAUSE 100
if TASTup = 0 then 'dodavanje u promenjivu setON
seton = seton + 1
ENDIF
if tastdn = 0 then 'oduzimanje iz promenjive setON
seton = seton - 1
endif
'granicne vrijednosti temperature
if seton > 600 then SetON = 600
if seton < 150 then seton = 150
pause 50
sst=nst
goto set1
'----------------------------------------------------------------------
SeT2:'podesavanje temperature gasenja
nst=tastset
if nst<sst then ' prije izlaza iz funkcije upisi u interni eeprom
write 3,setof.lowbyte
pause 12
write 4, setof.highbyte
pause 12
sst=nst
pozos=0'pozadinsko
goto main'ponovo na program
endif
Lcdout $FE, 1, "Podesavanje:"
LcdOut $FE, $C0,"Temp. OFF=",dec setof/10,".",dec1 setof,deg,"C "
PAUSE 100
if TASTup = 0 then 'dodavanje u promenjivu set_temp
setof = setof + 1
ENDIF
if tastdn = 0 then 'oduzimanje iz promenjive set_temp
setof = setof - 1
endif
'granicne vrijednosti temperature
if setof > 600 then setof = 600
if setof < 150 then setof = 150
pause 50
sst=nst
GOTO Set2
'---------------------------------------------------------------------
Mjerenje: 'mjerenje temperature s jednom decimalom
OWOut DQ, 1, [$CC, $44 ]
OWOUT DQ, 1, [$CC, $BE ]
pause 100
OWIN DQ, 2, [Temperature.Lowbyte, Temperature.Highbyte]
TempC = ( Temperature & $7FF ) >> 4
Float = ((Temperature.Lowbyte & $0F ) * 25/10 )>> 2
Temperature = TempC*10 + Float
return
End ' Kraj programa
Ako nekom treba skraćena verzija za 16F84 neka zatraži HEX, čini mi se da je dovoljno izbaciti početni natpis.
p.s.
Uradio sam i ja svoju verziju pločice, ali ne bih da je stavljam dok ne sastavim sklop i probam...