Սարքը իրենից ներկայացնում է հզորության կարգավորիչ, որը ղեկավարվում է միկրոկոնտրոլլերի միջոցով: Ի տարբերություն ռելեային ջերմակարգավորիչների , որոնք աշխատում են ջեռուցիչի պարբերաբար միացման-անջատման սկզբմունքով , այս սարքը միավոր ժամանակում ջեռուցիչից վերցնում է այնքան ջերմաքանակ որը համեմատական է կարգավորված և ռեալ ջերմաստիճանների տարբերությանը: օրինակ երբ ջերմաստիճանների տարբերությունը հավասար է 5-ի ,սարքը ջեռուցիչը միացնում է իր հզորության 50 տոկոսի չափով, 3-ի դեպքում՝ 30 տոկոսի չափով : Այս հատկության շնորհիվ հնարավոր է դառնում ապահովել ջերմաստիճանի ավելի մեծ ճշտություն:
Տրված և ռեալ ջերմաստիճանների տարբերություն | Ջեռուցիչի հզորություն % |
0 | 0% |
1 | 10% |
2 | 20% |
3 | 30% |
4 | 40% |
5 | 50% |
6 | 60% |
7 | 70% |
8 | 80% |
9 | 90% |
10 | 100% |
10-ից մեծ | 100% |
ՍԱՐՔԻ ԱՇԽԱՏԱՆՔԻ ՍԿԶԲՄՒՆՔԸ Հոսանքը միացնելուց հետո միկրկոնտրոլլոերը 1 անգամ կատարելով իր ներքին մոդուլների ինիցիլիզացիան ,անցնում է անվերջ ցիկլի որտեղ 1. ընդունում և մշակում է ջերմատվիչի LM35-ի ազդակը, և ստացված տվյալը ջերմաստիճանի տեսքով տպում է էկրանին: 2.Էկրանին տպում է տրված կարգավորված ջերմաստիճանը 3 SET կոճակի սեղման դեպքում ցիկլիկ կերպով փոփոխում է տրված կարգավորվելիք ջերմաստիճանը 4.Էկրանին տպում է ջերմաստիճանների տարբերությունը ,որը փաստացի հզորության չափն է տոկոսներով Փոփոխական հոսանքի 0-ով անցման ժամանակ միկրոկոնտրոլլերը անցնում է ընդհատման ,որտեղ էլ վերը նշված տվյալների հիման վրա ձևավորում է սիմիստորի ղեկավարման ազդանշան: որպես էկրան օգտագործվել է Motorola 115 հեռախոսի էկրանը (Տես նկարը): ՋԵՐՄ բառի դիմաց տպվում է ռեալ ջերմաստիճանը,իսկ ԿԱՐԳ նշանակւմ է Կարգավոված ջերմաստիճան: Վերջին թիվը նշված ջերմաստիճանների տարբերությունն է, փաստացի ջեռուցիչից վերցրած հզորության չափը: Ստորև բերված է միկրոկոնտրոլլերի ծրագիրը ,գրված Basic ծրագրավորման լեզվով, հուսով եմ որ ծրագրի առանձին մոդուլներ ձեզ պետք կգան սեփական նախագծերում:
************************************************************
program TERMOSTAT
include “out8”
include “tarer”
SYMBOL kn= gpio.3
symbol vix=gpio.0
dim cnt as word
dim cc,pz,t1,t2,set_temp,term,kk as byte
dim per,k as short
‘*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*–*-*-*-*-*-*–*-*-**
‘*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-
‘*********************LCD-INIT*****************************
‘**********************************************************
sub procedure initlcd ‘C115
soft_i2c_config(gpio,4,5)
soft_i2c_start
soft_i2c_write(0x78)
soft_i2c_write(0x00)
soft_i2c_write(0x2e)
soft_i2c_write(0x21)
soft_i2c_write(0x12)
soft_i2c_write(0xc0)
soft_i2c_write(0x0b)
soft_i2c_write(0x20)
soft_i2c_write(0x11)
soft_i2c_write(0x0c)
soft_i2c_write(0x40)
soft_i2c_write(0x80)
soft_i2c_stop
end sub
‘***************************************
‘***************************************
‘************GOTO (X,Y)*****************
sub procedure xy(dim x,y as byte)
dim x1 as byte
dim y1 as byte
x1=x
y1=y
soft_i2c_start
soft_i2c_write(0x78)
soft_i2c_write(0x00)
soft_i2c_write(0x20)
soft_i2c_write(x1+0x80)
soft_i2c_write(y1+0x40)
soft_i2c_stop()
end sub
sub procedure dataa(dim dat as byte)
soft_i2c_start()
soft_i2c_write(0x78)
soft_i2c_write(0x40)
soft_i2c_write(dat)
soft_i2c_stop()
end sub
sub procedure lcdclr
for cnt=0 to 912
dataa(0)
next cnt
end sub
‘************************************************************************************************************
‘*********——PRint_TIV———-**X,Y KETUM TPUM E TIVY*************************
sub procedure print_tiv(dim x as byte,dim y as byte,dim tiv as byte)
intcon.inte=0
intcon.inte=0
xy(x,y)
for cc=0 to 7
dataa(outx8[8*tiv+cc])
next cc
intcon.inte=1
intcon.inte=1
end sub
””””””””””””””””””””””””’
‘******************************************************
sub procedure bcdd(dim num as byte)
intcon.inte=0
intcon.inte=0
t2=num mod 10
t1=num div 10
intcon.inte=1
intcon.inte=1
end sub
‘******************INTRRUPT*************
sub procedure interrupt
if intcon.intf=1 then
intcon.inte=0
intcon.inte=0
if k>=0 then
k=k-1
vix=1
end if
if k<0 then
if pz>0 then
pz=pz-1
vix=0
end if
end if
if pz=0 then
k=per
if k>10 then k=10
end if
pz=10-k
end if
”———————————–
”———————————–
intcon.inte=1
intcon.inte=1
intcon.intf=0
end if
end sub
””””””””MAIN PROGRAM””””””””””””””””””””””””””””
‘***************CPU_INIT+DEFAULT set_temp,K,PZ*****************
main:
delay_ms(100)
osccal=30
set_temp=20
k=10
pz=10-k
trisio=%00000110
option_reg.intedg=1
cmcon=7
ansel=%01010010
initlcd
lcdclr()
‘==========================================================
‘==========================================================
for mm=1 to 100
xy(0,0)
for kk=0 to 100
dataa(%00000101)
next kk
xy(0,7)
for kk=0 to 100
dataa(%00010101)
next kk
‘*******************************************************************************************
‘*****************PRINT TEMPERATURE*****************************************
xy(3,1)
for kk=0 to 3
for cc=0 to 7
dataa(tarerx8[8*kk+cc])
next cc
dataa(0)
dataa(0)
next kk
‘*******************************************************************************************
‘*****************PRINT SET_TEMPERATURE**********************************
xy(3,3)
for kk=4 to 7
for cc=0 to 7
dataa(tarerx8[8*kk+cc])
next cc
dataa(0)
dataa(0)
next kk
‘***************MAIN CYCLE***************
‘*************************************************
while true
‘*************TEMPERATURE READ/KORREKT***
term=adc_read(1)/2
if term>30 then
term=30
end if
if term<5 then
term=5
end if
‘***************************************
‘********KOCHAKI SEXMMAN STWUGWUM (set_temp)************
if kn=0 then
set_temp=set_temp+1
if set_temp>30 then’ maximum 75%
set_temp=5
end if
if set_temp<5 then
set_temp=5
end if
end if
‘***************************************
‘***********HZORUTJAN CHAPI STACUM(PER)*
per=set_temp-term
if per<0 then per=0
end if
if per>10 then
per=10
end if
‘************************************************************
‘*****LCD-TO TEMPERATURE REAL***********
bcdd(term)
print_tiv(50,1,t1)
print_tiv(60,1,t2)
‘***************************************
‘*****LCD-TO TEMPERATURE SET*************
bcdd(set_temp)
print_tiv(50,3,t1)
print_tiv(60,3,t2)
‘***************************************
‘*****LCD-TO PERIOD(POWER-%)************
bcdd(per)
print_tiv(50,5,t1)
print_tiv(60,5,t2)
‘***************************************
‘***************************************
‘————————————————————————
intcon.inte=1
intcon.gie=1
delay_ms(200)
next mm
wend
end
Comments: no replies