16F628 ile RF Kombi Oda termostatı yardım

Başlatan obilgi, 14 Aralık 2014, 21:48:13

obilgi

Mrb,

Henüz picbasic kodlarına yeni başladım. Bazı arkadaşların yayınladığı Kablosuz RF alıcı verici ile oda termostatını yapmaya karar verdim. Devre simulasyonda çalışmasına rağmen gerçekte alıcı kısmını bir türlü iletime geçiremedim. RF uçlarını kablo ile bağladığımda bile alıcı kısım hiç hareket göstermiyor. RF modülleri başka bir kablosuz oda termostatı projesinde gayet güzel çalışıyor. Önerilerinize bekliyorum.


ALICI:
@ 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
CMCON=7
DEFINE OSC 4
TRISA=%00000001   
TRISB=%00000000 
PORTA=0
PORTB=0
VERI VAR BYTE
VERI=0
PAUSE 100
BASLA:
SerIn2 PORTA.0,396,[WAIT("BLG"),VERI]           
IF VERI=120 THEn  PORTB=%00000001
IF VERI=150 THEN  PORTB=%00000010
GOTO BASLA

VERİCİ:
@ 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
TRISA=%10111000
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
'-----------------------------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
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

BASLA:'----------------------------ANA DONGÜ------------------------------------
GOSUB EKRAN
GOSUB SENSOROKU
GOSUB KONTROL
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
'SEROUT2 CIKIS,396,[REP$AA\5,REP$00\5,REP$FF\5]
SEROUT2 CIKIS,396,["BLG",VERI]
SEROUT2 CIKIS,396,["BLG",VERI]
SEROUT2 CIKIS,396,["BLG",VERI]
SEROUT2 CIKIS,396,["BLG",VERI]
SEROUT2 CIKIS,396,["BLG",VERI]
RETURN

;*************gecikmeler*9******************************************
DELAY: FOR I=0 TO 150:NEXT
RETURN
DELAY1:FOR I=0 TO 15000: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
;************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
;**********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 100
gOSUB DELAY4
NEXT
  ISIK=0
  GOTO BASLA
;RETURN            
;***********kesme alt programı*****************************************
Disable
KESME: 
IF SET=0 THEN
TUS=1
ELSE
TUS=0
'GOSUB ISIK0
ENDIF
INTCON.2=0
Resume      
Enable   
end           


Teşekkürler,
obilgi

serkan


ete

Bu programda sorun vericide olsa gerek. Tam gönderme anına kesme denk gelirse verme başarılı olmaz. Serout komtlarından önceki satıra intcon.7=0 ekleyip serout satırlarından sonrasına intcon.7=1 ekleyip deneyin.
Ete

obilgi

Teşekkür ederim. Akşam deneyeceğim.

obilgi

gogoce

Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

gogoce

SEROUT2 CIKIS,396,[REP$AA\5,REP$00\5,REP$FF\5]
SEROUT2 CIKIS,396,["BLG",VERI]
SEROUT2 CIKIS,396,["BLG",VERI]
SEROUT2 CIKIS,396,["BLG",VERI]
SEROUT2 CIKIS,396,["BLG",VERI]
SEROUT2 CIKIS,396,["BLG",VERI]
RETURN


varmış pardon farketmedim
Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

Powered by EzPortal