pic 16f628A kablosuz kombi oda termostatı açma kapama butonu hk.

Başlatan ozkbilgi, 30 Kasım 2016, 10:20:51

ozkbilgi

merhaba arkadaşlar,
bu işe yeni başlayanlardanım henüz yeni yeni devre yapıp kodlama kısmına girmeye çalışıyorum, rahmetli abim kablosuz oda termostatı yapmıştı (internetten bulduğumuz değerli hocalarımız çalışmalarını kendine göre tasarladı) bende o devreleri ve kodları kullanarak ikinci oda termostatımı yapayım dedim ve yeni bir kaç özellik ekleyeyim istedim. ancak yazımın başında belirttiğim gibi henüz merdivenin en alt basamağında olduğumdan bir türlü beceremedim,
sorum şu şekilde bir tuşa bastığımda devre kombiye kapatma sinyali gönderecek ve kombi kapatılmış olacak ve gönderici devre bekleme moduna alacak, tekrar basıldığında ise devre normal çalışma vaziyetine gelip kombiye açıl diyecek yani her seferinde kombiye gidip manuel aç kapa yapmak yerine oda termostatı üzerinden aç kapa yapacak. ben devreye symbol katap=porta.0 ekledim zaten yapabildiğim yeğane şeyde oyudu , kesme işlemlerine baktım ete hocamızın anlatımlarına baktım inetrnet te araştırdım ancak kafam bir türlü basmadı bana yardımcı olacak arkadaşlara şimdiden teşekkür ederim sonsuz saygılarımı sunarım.

'@ DEVICE pic16F628A                      'işlemci 16F628                               
'@ DEVICE pic16F628A, WDT_ON              'Watch Dog timer açık
'@ DEVICE pic16F628A, PWRT_ON             'Power on timer açık
'@ DEVICE pic16F628A, PROTECT_OFF         'Kod Protek kapalı
'@ DEVICE pic16F628A, MCLR_off            'MCLR pini kullanılMIYOR.
'@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
@ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_OFF & _LVP_OFF & _CP_OFF
TRISA=%10111001
TRISB=%00000000
PORTA=0:PORTB=0
CMCON=7  
ON INTERRUPT GoTo KESME   
OPTION_REG=%00000000  'Pull up dirençleri İPTAL- Bölme oranı 1/2
INTCON=%10100000  'Kesmeler aktif ve TMR0 (bit5) kesmesi aktif 
DEFINE LCD_DREG		PORTB	
DEFINE LCD_DBIT		4		
DEFINE LCD_EREG		PORTB	
DEFINE LCD_EBIT		3	
DEFINE LCD_RSREG	PORTB	
DEFINE LCD_RSBIT	2		
DEFINE LCD_BITS		4		
DEFINE LCD_LINES	2 
'---------------------------PIN TANIMLAMALARI-----------------------------------
SYMBOL    SET=PORTA.5
SYMBOL YUKARI=PORTA.4
SYMBOL  ASAGI=PORTA.3
SYMBOL  CIKIS=PORTA.6
SYMBOL   ISIK=PORTA.1
SYMBOL  KAPAT=PORTA.0
'-----------------------------DEĞİŞKENLER---------------------------------------
LCDOUT $FE,$40, 6, 9, 9, 6, 0, 0, 0, 0    ;DERECE İŞARETİ
TERM   VAR  WORD
ISIS   VAR  WORD
TERMM  VAR  BYTE 
T_ONDA VAR  BYTE
H_BIR  VAR  BYTE
H_ONDA VAR  BYTE
ONDA   VAR  BYTE
SNS    VAR  BYTE
ISIH   VAR  BYTE
ISIL   VAR  BYTE
TUS    VAR  BIT
I      VAR  WORD
VERI   VAR  BYTE
ACIK    VAR BYTE
ESKI    VAR BYTE
ESKI=0
PAUSE 200
LCDOUT $FE,1
'---------------------------------ISI TANIMLAMALARI-----------------------------
Busy        VAR BIT         ' Busy Status-Bit
HAM         VAR	WORD
ISI         VAR BYTE
Float       VAR WORD        ' Holds remainder for + temp C display       
ISARET_BITI VAR HAM.11'Bit11   '   +/- sıcaklık İşaret biti,  1 = olursa eksi sıcaklık
EKSI_ISI    CON 1           ' Negatif_Cold = 1
ISARET      VAR BYTE        
Comm_Pin    VAR	PORTA.7
;****************BAŞLANGIC*********************************************
BASLANGIC:
gosub SENSORYAZ
GOSUB SENSOROKU
read $0,ISIL
READ $1,ISIH
READ $2,SNS
IF ISIL>99 THEN ISIL=0
IF ISIH>9 THEN ISIH=0
IF SNS>50 THEN SNS=0
TERM=(ISIL*10)+ISIH
ISIS=TERM-SNS
GOSUB DELAY1
;*******************************kombi açık veya kapalı kontrolü
ESKI=1:ACIK=1:GOSUB KONTROL_BIR
;*******************************kombi açık veya kapalı kontrolü

BASLA:'----------------------------ANA DONGÜ------------------------------------
IF ACIK=0 THEN
WHILE ACIK=0
GOSUB EKRAN5
GOSUB KONTROL_BIR
WEND
ENDIF
GOSUB EKRAN
GOSUB SENSOROKU
GOSUB KONTROL
IF ACIK=0 THEN BASLA 
IF TUS=1 THEN GOTO AYAR
IF ASAGI=0 OR YUKARI=0 THEN GOTO ISIK0
GOTO BASLA
'--------------------------------ALT PROGRAMLAR---------------------------------  
SENSOROKU:
OWOUT   Comm_Pin, 1, [$CC, $44]' ISI değerini oku
Bekle:
OWIN    Comm_Pin, 4, [Busy]    ' Busy değerini oku
IF      Busy = 0 THEN Bekle    ' hala meşgulmü? , evet ise goto Bekle..!
OWOUT   Comm_Pin, 1, [$CC, $BE]' scratchpad memory oku
OWIN    Comm_Pin, 2, [HAM.Lowbyte, HAM.Highbyte]' İki byte oku ve okumayı bitir.
GOSUB   Hesapla
RETURN
SENSORYAZ: 'okumaya hazırlan..          
OWOUT   Comm_Pin, 1, [$CC,$4E, $FF, $FF, $7F]
OWOUT   Comm_Pin, 1, [$CC,$48]          
OWOUT   Comm_Pin, 1, [$CC,$B8]          
OWOUT   Comm_Pin, 1, [$CC,$BE]          
return    
Hesapla:  ' Ham değerden Santigrat derece hesabı
ISARET  = "+"
IF ISARET_BITI = EKSI_ISI THEN
ISARET   = "-"  
ham=~ham+2
endif
float = ((HAM*10)/16 ) 
ISI=FLOAT/10
ONDA=(FLOAT //10)
    
RETURN 
;************role kontrol******************************************
KONTROL: 
IF ISIS=>FLOAT THEN 
VERI=120
LCDOUT $FE,$8D,"(A)" :gosub delay4: LCDOUT $FE,$8D,"( )" :gosub delay4:LCDOUT $FE,$8D,"(A)"
portb.0=1   :portb.1=0 
ENDIF
IF FLOAT=>TERM THEN 
VERI=150
LCDOUT $FE,$8D,"(K)" ':gosub delay1: LCDOUT $FE,$8D,"( )" :gosub delay3:LCDOUT $FE,$8D,"(K)"
portb.1=1  :portb.0=0
ENDIF
KONTROL_BIR:
 'SEROUT2 CIKIS,396,["BLG",VERI,ACIK]
INTCON.7=0
SEROUT2 CIKIS,396,["BLG",VERI,ACIK]
SEROUT2 CIKIS,396,["BLG",VERI,ACIK]
SEROUT2 CIKIS,396,["BLG",VERI,ACIK]
SEROUT2 CIKIS,396,["BLG",VERI,ACIK]
SEROUT2 CIKIS,396,["BLG",VERI,ACIK]
INTCON.7=1
RETURN

;*************gecikmeler*9******************************************
DELAY: FOR I=0 TO 150:NEXT
RETURN
DELAY1:FOR I=0 TO 10000:NEXT
RETURN
DELAY2:FOR I=0 TO 125:NEXT
RETURN
DELAY3:FOR I=0 TO 2000:NEXT
RETURN
DELAY4:FOR I=0 TO 10000:NEXT
RETURN
DELAY5:FOR I=0 TO 50000:NEXT
RETURN
;************Sıcaklık gösteriliyor**********************************
EKRAN:'
LCDOUT $FE,2,"ISI:",ISARET,DEC2 ISI,".",DEC1 ONDA,0,"C"
TERMM=TERM/10
T_ONDA=(TERM//10)
'LCDOUT $FE,2," SICAKLIK AYARI"
LCDOUT $FE,$C0,"SET:",DEC2 TERMM,".",DEC1 T_ONDA',0,"C"
H_BIR=SNS/10
H_ONDA=(SNS//10)
'LCDOUT $FE,2,"   HASSASiYET"
LCDOUT $FE,$C9,"HSS:",DEC1 H_BIR,".",DEC1 H_ONDA',0,"C" 
RETURN
;************ayarlar giriş ekranı***********************************
EKRAN1:
LCDOUT $FE,1,"    AYARLAR"
gosub delay1
LCDOUT $FE,1
RETURN
;***********Set değeri gösteriliyor*********************************
EKRAN2:
IF TERM>850 THEN TERM=250 
TERMM=TERM/10
T_ONDA=(TERM//10)
LCDOUT $FE,2," SICAKLIK AYARI"
LCDOUT $FE,$C5,DEC2 TERMM,".",DEC1 T_ONDA,0,"C"
RETURN  
;**********Hassasiyet ekranı****************************************
EKRAN4:
IF SNS =0 THEN SNS=5
H_BIR=SNS/10
H_ONDA=(SNS//10)
LCDOUT $FE,2,"   HASSASiYET"
LCDOUT $FE,$C6,DEC1 H_BIR,".",DEC1 H_ONDA,0,"C" 
RETURN
;**********kapalı ekranı****************************************
EKRAN5:
  LCDOUT $FE,1,"    KOMBi KAPALI"
gosub delay1
LCDOUT $FE,1
RETURN
;**********açık ekranı****************************************
EKRAN6:
  LCDOUT $FE,1,"    KOMBi ACIK"
gosub delay1
LCDOUT $FE,1
RETURN
;**********Değerler eproom'a kaydediliyor..************************* 
KAYDET:
WHILE TUS=1:WEND
ISIL=TERM/10
ISIH=TERM//10
WRITE $0,ISIL:PAUSEUS 2
WRITE $1,ISIH:PAUSEUS 2
WRITE $2,SNS:PAUSEUS 2
GOTO BASLANGIC
;**********Menuye gırıs ********************************************
AYAR: 
WHILE TUS=1:WEND
GOSUB EKRAN1
GOSUB DELAY1
ISIK=1
READ $0,ISIL
READ $1,ISIH
TERM=(ISIL*10)+ISIH

MENU:
;***********YUKARI************************************************
IF YUKARI=0 THEN TERM=TERM+1
GOSUB DELAY3
GOSUB EKRAN2
IF TERM=>990 THEN TERM=990
;**********AŞAGI**************************************************
IF ASAGI=0 THEN TERM=TERM-1
GOSUB DELAY3
GOSUB EKRAN2
IF TERM=65535 THEN TERM=0

IF TUS=1 THEN
LCDOUT $FE,1
GOTO HASSASIYET
ENDIF
GOSUB EKRAN2

GOTO MENU

;************hassasiyet ayarları**********************************
HASSASIYET: 
WHILE TUS=1:WEND
read $2,sns
IF SNS=>50 THEN SNS=0 
;************yukarı***********************************************
SENS:
ISIK=1
GOSUB EKRAN4
IF YUKARI=0 THEN SNS=SNS+1
GOSUB DELAY3
GOSUB EKRAN4
IF SNS=>50 THEN SNS=50 :GOSUB ISIK0
;***********aşagı*************************************************        
IF ASAGI=0 THEN SNS=SNS-1
GOSUB DELAY3
GOSUB EKRAN4
IF SNS=255 THEN SNS=0  :GOSUB ISIK0

IF TUS=1 THEN 
lcdout $fe,1,"    AYARLAR"
LCDOUT $FE,$C3,"KAYDEDiLDi"
GOSUB DELAY1
ISIK=0
lcdout $fe,1
GOTO KAYDET
ENDIF
GOTO SENS 
;*****************************ISIK SONDUR
ISIK0:
ISIK=1
FOR I=0 TO 500
 gOSUB DELAY5
 NEXT
  ISIK=0
  GOTO BASLA

;***********kapat alt programı*****************************************
KAPATMA: 
ESKI=ACIK
IF KAPAT=0 THEN
TOGGLE ACIK
WHILE KAPAT=0:WEND
 ENDIF
 IF ESKI=ACIK THEN RETURN
 GOTO KONTROL_BIR   
;***********kesme alt programı*****************************************
Disable 
KESME:  
IF SET=0 THEN 
TUS=1
ELSE
TUS=0
ENDIF
INTCON.2=0
Resume		
Enable	
end
           

Melih1802

Alternatif bir önerim var değerlendirirsin.
Şematik çizimini ve çalışma senaryosunu yazarsan programını yazarım.

ozkbilgi

merhaba,
dosyalar ektedir. http://dosya.co/y71aedn39l3h/VERICI_v2.rar.html
çalışma sistemine gelecek olursak şuanda voltaj verildiği anda ayarlanan hassasiyetlik ve istenilen oda sıcaklığını kontrol edip alıcı'ya veri göndermektedir. gönderilen veriler kapat için veri=150 açmak için ise veri=120 komutu gönderiyor kablosuz olarak . benim yapmak istediğim ise kapat düğmesine bastığımda kombi alıcısına veri=150 komutunu gönderecek ve verici kısmındaki devrenin ekranına kombi kapatıldı yazacak ve artık alıcıya hiçbir sinyal göndermeyecek taki ben birdaha düğmeye basana kadar tekrar basıldığında ise verici kısmı normal çalışma sistemine dönecek yani ısı iyise kapat değil se aç gibi zati benim şuanda devrem çalışıyor ben sadece bu ek olarak düğmeyi koyamadım. yardım edersen sevinirim. iyi günler

Melih1802

Dosyayı bana mail atarmısın. NOD32 uyarı veriyor. melih@elkoser.com
Bu arada umarım çok acelen yoktur. Bir proje aldım bitirmem lazım.