12F675 ve 12LF1501 RF Haberleşme Sorunu

Başlatan oguztkn, 22 Haziran 2023, 22:17:50

oguztkn

Merhabalar,

Bu iki entegreyi 433 mhz rf modül kullanarak haberleştirmek istiyorum. Aradan rf alıcı ve vericiyi çıkarıp direk kablo ile birbirlerine bağlayarak test ediyorum ama atladığım bir kısım var sanırım çalışmıyor. Rica etsem yol gösterebilir misiniz ?

Alıcı 5v adaptör ile verici ise 2 adet aaa pil ile çalışmakta.

Alıcı Kodu :

#CONFIG
  __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _BODEN_OFF & _CPD_ON & _CP_OFF
#ENDCONFIG

define osc 4
INCLUDE "modedefs.bas"

gelen var byte
TRISIO=%00010000
GPIO=%00000000

ANSEL=%00000000
ADCON0.0=0
CMCON=7
INTCON=0
IOC=0
IOCB=0
OPTION_REG.7=1
PIE1=0
PIR1=0
WPU=1
VRCON.7=0
pause 500
GPIO.5=1
pauseus 100
GPIO.5=0

BASLA:
    SERIN2 GPIO.4,396,[WAIT("T"),gelen]
    if gelen=112 then
       GPIO.5=1
    EndIf

    
 goto basla
    
end



Verici Kodu:


#CONFIG 
        __config _CONFIG1, _FOSC_INTOSC & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_ON & _BOREN_OFF	& _CLKOUTEN_OFF  
        __config _CONFIG2, _WRT_OFF & _STVREN_ON & _BORV_LO & _LPBOR_OFF & _LVP_OFF  	 

#ENDCONFIG

INCLUDE "modedefs.bas"
define Osc 4

kilit var bit
gonder var byte

OSCCON=%01101010
INTCON=0
PIE1=0
PIE2=0
PIE3=0
PIR1=0
PIR2=0
PIR3=0
WDTCON.0=0
TRISA=%00010100
PORTA=0
LATA=0
ANSELA=0
WPUA=0
IOCAP=0
IOCAN=0
IOCAF=0
FVRCON.7=0
ADCON0.0=0
DACCON0.7=0
CM1CON0.7=0
OPTION_REG.7=0
PWM1CON.7=0
CLC1CON.7=0
NCO1CON.7=0
NCO1CON.6=0
CWG1CON0.7=0

pause 500


BASLA:
     if PORTA.4=1 and kilit=0  then
     LATA.1=1 ; Bildirim Ledi yandı
     gonder=112
     serout2 PORTA.5,396,[REP$AA\5,REP$00\5,REP$FF\5] 
     serout2 PORTA.5,396,["T",gonder]   
     kilit=1
     endif


     if PORTA.4=0 and kilit=1 then
     kilit=0
     LATA.1=0 ; Bildirim ledi söndü
     endif

goto BASLA
end

ete

Olaya Alıcı ve Verici taraf olarak bakmak isterim.
Önce Verici tarafına bakalım.
Bir şema koymadığınız için kimi nasıl bağladığınızı kestiremiyorum ve bağlantıları doğru yaptığınızı düşünüyorum. Bu düşünce doğrultusunda Verici tarafında Buton (veya anahtar her neyse) RA.4 pininde bağlı ve PULL_DOWN yani GND ye çekili şekilde bekliyor olması gerekir. Buton diğer ucu +5V ta bağlı olacak. Bu şekilde butona basınca RA.4 pinine HIGH vermiş olacaksınız.
Verici kısmında sorun gözükmüyor. Ancak program mantığı biraz daha değişik olabilirdi.
Burada Kilit bit'i kullanmışsınız amaç sürekli gönderme işini engelleyip tek gönderim yapmak ise butonu kontrol etmek daha uygun olacak idi. Şekli şöyle;

	     if PORTA.4=1 and kilit=0  then
	     LATA.1=1 ; Bildirim Ledi yandı
	     gonder=112
	     serout2 PORTA.5,396,[REP$AA\5,REP$00\5,REP$FF\5] 
	     serout2 PORTA.5,396,["T",gonder]   
	     while porta.4=1:wend
             pause 100
	     endif
bu değişiklik ile birlikte altta yer alan ve kilit bitini sıfırlayan kısmı silmeniz gerekir.

Gelelim Alıcı kısma. Alıcıda 12F675 işlemci kullanılıyor ve önemli bir özelliği bulunuyor bu işlemcinin. Dahili OSC için OSCAL yani OSC kalibrasyon değeri fabrikası tarafından program hafızası son adresine yazılmıştır. Bu değerin kesinlikle silinmemesi gerekir. Aksi taktirde işlemci ya çalışmayacak yada son derece yavaş çalışıp işini yapmayacaktır. Şayet tedbir almazsanız program hafızasındaki bu değer sıfırlanır ve üzerine program kodu yazılır. Böylece işlemci çalışmaz hale gelir. Tedbir denilen şey ise programa aşağıdaki kod satırının eklenmesi şeklinde alınır. Bu komut program hafızasındaki cal değerini alıp programı yazar ve üzerine bu kodu tekrar yerine yazar. Böylece sorun ortadan kalkar.
DEFINE OSCCAL_1K 1  'bu komut mutlaka olacak OSCCAL değerini yeniden pice yazdırıyor
Bu komut programınızda yer almıyor. Bu durumda 12F675'in doğru çalışmadığını düşünüyorum.
Şimdi bu kod satırını programa ekleseniz bile o işlemci CAL değeri olmadan çalışamayacaktır.
Çözüm iki tane. Ya yeni bir işlemci daha kullanacaksınız yada mevcut işlemciyi yeniden kalibre edeceksiniz. PicKit2 ve PicKit3 programlayıcılarında yeniden kalibrasyon seçeneği mevcut.
Zaten bu işlemciyi programlamaya kalktığınızda size ikaz verecektir. OSCAL değeri yok şeklinde.
Bu sorunu hallederseniz programınız çalışacaktır.

Ete

Powered by EzPortal