RF ALICI-VERİCİ

Başlatan muyat, 24 Mayıs 2023, 22:59:26

muyat

merhabalar.
İlk kez bu yıl alıcı ve vericilerle ugraşmaya başladım.
16f628a ,433 mhz alıcı-verici kullanarak 6 adet anahtar yardımıyla 6 adet ledi yakıp söndürmek istiyorum.
Öncelikle bu sitede bu konuyla ilgili açılan konularda kod yapılarını inceleyerek aşagıdaki kodları yazdım.Proteus 8 için alıcı ve vericinin kütüphanelerini bulup ekledim.
Fakat basicde derlerken " WARNING Line 17: Bad token " ". " hatası veriyor.Diger satırlarda da bu hatayı veriyor.
Bir diger husus netteki bazı kod örneklerinde kodların arasında  INCLUDE "modedefs.bas" satırı yok.Bu satır olmadan da çalışır mı?
Programın simulasyon dosyasını ve kodlarını ek kısmına zipleyip koydum.Derleme kısmında sorun yaşadıgım için diger kısımlara geçemedim.Yardımcı olur musunuz

alıcı:
'****************************************************************
@ __config _BODEN_OFF  & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _CP_OFF
Define OSC 4
INCLUDE "modedefs.bas"

 


CMCON=7                 'KOMPARATÖR PİNLERİ DİJİTAL GİRİŞ VEYA ÇIKIŞ
OPTION_REG=7  

TRISA=%00000001  
TRISB=%00000000  



    
    SIFRE1 VAR BYTE
    SIFRE2 VAR BYTE
    SIFRE3 VAR BYTE
    SIFRE4 VAR BYTE
    OKU VAR BYTE
    SIFRE1=0
    SIFRE2=0
    SIFRE3=0 
    SIFRE4=0
    OKU=0
    
BASLA:
SERIN2 PORTA.0,396,BASLA,100,[WAIT("1984"),SIFRE1,SIFRE2,SIFRE3,SIFRE4,OKU]

    IF SIFRE1=1 AND SIFRE2=9 AND SIFRE3=8 AND SIFRE4=4  THEN
    GOTO ATLA
    ELSE
    OKU=0
    GOTO BASLA
    ENDIF
ATLA:
    IF  OKU=10 THEN
    HIGH PORTB.0
 	ELSE
	LOW PORTB.0
    ENDIF

    IF  OKU=20 THEN
    HIGH PORTB.1
    ELSE
    LOW PORTB.1
    ENDIF 

    IF OKU=30 THEN
    HIGH PORTB.2
    ELSE
    LOW PORTB.2
    ENDIF 

    IF OKU=40  THEN
    HIGH PORTB.3
    ELSE
    LOW PORTB.3
    ENDIF


    IF  OKU=50  THEN
    HIGH PORTB .4
    ELSE
    LOW  PORTB.4
    ENDIF

    IF OKU=60 THEN
    HIGH     PORTB.5
    ELSE
    LOW      PORTB.5
    ENDIF




    GOTO    BASLA  
    END


Verici:
@ __config _BODEN_OFF  & _PWRTE_ON & _WDT_OFF & _LVP_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF & _CP_OFF
Define OSC 4
INCLUDE "modedefs.bas"

 


CMCON=7                 'KOMPARATÖR PİNLERİ DİJİTAL GİRİŞ VEYA ÇIKIŞ
OPTION_REG=7  
SIFRE1 VAR BYTE
SIFRE2 VAR BYTE
SIFRE3 VAR BYTE
SIFRE4 VAR BYTE
 
SIFRE1=1
SIFRE2=9
SIFRE3=8 
SIFRE4=4
TRISA=%00011111  
TRISB=%00000011  
 
BIR var portA.1
IKI var portA.2
UC var portA.3
DORT var portA.4
BES var portB.0
ALTI VAR PORTB.1
 
 
GON VAR BYTE
GON=0
PORTA=0 
 
BASLA:

IF BIR=1 THEN
GON=10
SEROUT PORTA.0,N2400,["1984",SIFRE1,SIFRE2,SIFRE3,SIFRE4,GON]
ENDIF
 
IF iki=1 THEN
GON=20
SEROUT PORTA.0,N2400,["1984",SIFRE1,SIFRE2,SIFRE3,SIFRE4,GON]
ENDIF
 
if UC=1 Then
gon=30
SEROUT PORTA.0,N2400,["1984",SIFRE1,SIFRE2,SIFRE3,SIFRE4,GON]
endif
 
 
IF DORT=1 then
gon=40
SEROUT PORTA.0,N2400,["1984",SIFRE1,SIFRE2,SIFRE3,SIFRE4,GON]
endif
 
 
if BES=1 then
gon=50
SEROUT PORTA.0,N2400,["1984",SIFRE1,SIFRE2,SIFRE3,SIFRE4,GON]
endif

if ALTI=1 then
gon=60
SEROUT PORTA.0,N2400,["1984",SIFRE1,SIFRE2,SIFRE3,SIFRE4,GON]
endif


 
GOTO BASLA
END
 

modedefs:
'**************************************************************** 
  '*  MODEDEFS.BAS                                                * 
  '*                                                              * 
  '*  By        : Leonard Zerman, Jeffrey Schmoyer                * 
  '*  Notice    : Copyright (c) 2001 microEngineering Labs, Inc.  * 
  '*              All Rights Reserved                             * 
  '*  Date      : 04/17/01                                        * 
  '*  Version   : 2.40                                            * 
  '*  Notes     : Mode definitions for Debug, Serin/out,          * 
  '*              Shiftin/out, Xin/out                            * 
  '**************************************************************** 
   
  ' Serin / Serout Modes (Do not use with Serin2 / Serout2) 
  Symbol T2400  = 0       ' Driven True 
  Symbol T1200  = 1       ' Driven True 
  Symbol T9600  = 2       ' Driven True 
  Symbol T300   = 3       ' Driven True 
   
  Symbol N2400  = 4       ' Driven Inverted 
  Symbol N1200  = 5       ' Driven Inverted 
  Symbol N9600  = 6       ' Driven Inverted 
  Symbol N300   = 7       ' Driven Inverted 
   
  Symbol OT2400 = 8       ' Open True 
  Symbol OT1200 = 9       ' Open True 
  Symbol OT9600 = 10      ' Open True 
  Symbol OT300  = 11      ' Open True 
   
  Symbol ON2400 = 12      ' Open Inverted 
  Symbol ON1200 = 13      ' Open Inverted 
  Symbol ON9600 = 14      ' Open Inverted 
  Symbol ON300  = 15      ' Open Inverted 
   
   
  ' Shiftin Modes 
  Symbol MSBPRE = 0       ' MSB first, sample before clock 
  Symbol LSBPRE = 1       ' LSB first, sample before clock 
  Symbol MSBPOST = 2      ' MSB first, sample after clock 
  Symbol LSBPOST = 3      ' LSB first, sample after clock 
   
  ' Shiftout Modes 
  Symbol LSBFIRST = 0     ' LSB first 
  Symbol MSBFIRST = 1     ' MSB first 
   
   
  ' Debug / Serial Constants 
  Symbol CLS = 0 
  Symbol HOME = 1 
  Symbol BELL = 7 
  Symbol BKSP = 8 
  Symbol TAB = 9 
  Symbol CR = 13 
   
   
  ' Xout Commands 
  Symbol UnitOn = %10010 
  Symbol UnitOff = %11010 
  Symbol UnitsOff = %11100 
  Symbol LightsOn = %10100 
  Symbol LightsOff = %10000 
  Symbol Dim = %11110 
  Symbol Bright = %10110 
   
   
  '*----------------------* EOF MODEDEFS.BAS *--------------------* 


ete

#1
Bir programı yada program satırlarının bazılarını internet'den bir yerden kopyalayıp programa yapıştırırsanız şayet o kodlar "Code_tag" içinde değil iseler o satırlarda görmediğiniz bir sürü bilgiyide kopyalamış oluyorsunuz. Satıra bakıyorsunuz kod olarak yazılışı doğru ama derleyince hata veriyor. İşte hatanın sebebi o sizin görmediğiniz satır üzerinde bulunana diğer bilgiler. Pek çoğunuz nedir bu diye dediklerimi anlamayacaksınız. Ama code tag içinde yazılmayan kod satırlarının içinde harf tipi, harf boyutu, harf rengi gibi veya buna benzer bilgilerde görünmez olarak kopyalanır ve o satıra eklenir. Sİz bunları göremezsiniz ama orada bir sürü ek bilgi bulunur. İş derlemeye gelince derleyici bu kopyalanan lüzümsuz bilgileride görür ve hata verir.

Senin programda da bu sorun var.
Bu gibi durumlarda hata veren satırı kapatıp onu elinizle tekrardan yazınız. Böylece kod olarak aynı satırı yazmış olmakla birlikte satır üzerinde herhangi bir düzenleyici bilgi olmayacağı için o satırdaki hata sona erecektir.

Ben senin satırlarını düzelttim. Derlemesinide yaptım dosya içindedir.

Ete

muyat

Hocam verici kısmında girişler pullup edilmiş oldugundan verici kısmının yazılımını değiştirdim.

"rf module library "isimli klasorden de alıcı ve vericinin simulasyonda çalışması için gerekli dosyaları aşagıdaki youtube  linkini açıp izleyerek gibi yükledim.
FAkat simulasyonu açtıgımda çalışmıyor ve bazı ledler kendiliğinden yanık kalıyor.Sönmüyor.
Tekrar bakabilir misiniz

Rf alıcı-verici dosyaları
https://dosya.co/cu9iz4cqlqot/rf_module_library.rar.html

https://www.youtube.com/watch?v=KZFPFeTjO1c
Diger kodlar ve simulasyon ise ektedir.

aRci

merhaba çok incelemedim ama OPTION_REG satırı hatalı gibi doğrusu OPTION_REG.7 = 1 olmalı

deneyip test edersiniz

Alıntı yapılan: muyat - 25 Mayıs 2023, 15:28:46Hocam verici kısmında girişler pullup edilmiş oldugundan verici kısmının yazılımını değiştirdim.

"rf module library "isimli klasorden de alıcı ve vericinin simulasyonda çalışması için gerekli dosyaları aşagıdaki youtube  linkini açıp izleyerek gibi yükledim.
FAkat simulasyonu açtıgımda çalışmıyor ve bazı ledler kendiliğinden yanık kalıyor.Sönmüyor.
Tekrar bakabilir misiniz

Rf alıcı-verici dosyaları
https://dosya.co/cu9iz4cqlqot/rf_module_library.rar.html

https://www.youtube.com/watch?v=KZFPFeTjO1c
Diger kodlar ve simulasyon ise ektedir.


ete

#4
Bu sistemi simule etmek için illaki RF modüllerin model dosyaları gerekmez. Vericin,in PORTA.0 pinini direk Alıcının PORTA.0 pinine bağlayınca da devrenin çalışmasını simule edebilirsin.
Model dosyaları her zaman sorun çıkartıyor. Pek çoğunda virüs yerleştiriliyor. Bu nedenle harici model dosyalarını makinama kurmuyorum.

Gelelim sistemine,
Öncelikle Seri haberleşme komutlarından SEROUT kullanırsan karşısında SERIN kullanman gerekir. SEROUT2 kullanırsan da SERIN2 komutu ile alma yapman gerekir. Sen aksini yaptığın için format uyuşmazlığı oluyor muhtemelen. Hiç denemedim bile yaptıklarını.

Kendime göre kodlarını düzelttim baktım çalışıyor.
Option komutu orada gereksiz zaten Pullup açmadığın için koymaya gerek de yok.

Her zaman söylüyorum. Seri haberleşme bir senkron uyumu gerektirir. Biri veriyor diğeri almak için beklemiyor ise veri alışverişi yapılamaz Yapılsada veri bloğunun ortasından yada bir ucundan giriş yapar alıcı. Hal böyle oluncada beklediğin haberleşme emniyetini sağlayamazsın.

Tekrar ediyorum senkron sağlamanın tek bir yolu var ya verici veri yolladığı zaman alıcı o veriyi bekliyor olmalıdır. Alıcı led yakmakla meşgul iken sen veri yollarsan alıcı o veriyi yakalayamaz. Yakalamasını sağlamak için Preambıl yani uyandırma sinyalini verdiğin bilgiye eklemen gerekir. O bilgi gelirken alıcı başka iş yapıyor olsada bir nevi gereksiz gelen karekterler sayesinde uyanır ve alma işine konsantre olur. Bu nedenle uyandırma sinyali yada bilgiside bu işte önemli.

Senkron uyumu sağlamanın diğer bir yolu da donanımsal seri haberleşme komutlarını kullanmaktır. Böylece veri gelecekmi diye başında beklemen gerekmez. Donanım geri planda çalışarak veri geldiğinde otomatik olarak buffer'a verileri alır. Ama seninde buna uygun kod yazıp veri geldiğinde yaratılan kesmeye bağlı olarak gidip o verileri alman gerekir. Zira buffer yanlızca 1 byte bilgi alır otomatikman. Ama onu alıncaya kadar sende geriden yetişirsen (kesme sayesinde) bilginin tamamı alınmış olur.

Yeri gelmişken hemen belirteyim. Donanımsal seri haberleşme komutları Hserin , Hserout karşılığı kullanılabilecek komut serisi SERIN2 ve SEROUT2 dir. Birisi önceden belirlenmiş TX-RX pini gerektirir. Ama SERIN2 ve SEROUT2 de TX ve RX için istediğiniz pini kullanırsınız.

Ete

ete

Bir tarafta SEROUT diğer tarafta SERIN2 kullanma konusunda ısrar edersen SEROUT komutunu değiştirmen gerekiyor.
Gönderme işi N2400 (driven inverted) değil Driven True yani T2400 ile yapılmalıdır.
Bu durumda gönderme komutu;

SEROUT PORTA.0,T2400,["1984",SIFRE1,SIFRE2,SIFRE3,SIFRE4,GON]
şeklinde olacaktır.

Her tuş kontrolüne bir gönderme komutu eklemek yerine en alta bir tane yazıp oraya gosub ile yollaman daha mantıklı olacak ve daha az kod üretecektir.

Ete

muyat

Hocam çok teşekkürler.
Yarın ütü ile  pcbye basıp test edip sonuçları yazacagım..

Powered by EzPortal