bu rf kodunun mantığı nedir ? nasıl işliyor?

Başlatan xcyqp09k2, 23 Temmuz 2013, 23:00:43

xcyqp09k2

Selam kardeşler,

@ DEVICE pic16F628A 'işlemci 16F628
@ DEVICE pic16F628A, WDT_on 'Watch Dog timer kapalı
@ DEVICE pic16F628A, PWRT_ON 'Power on timer açık
@ DEVICE pic16F628A, PROTECT_OFF 'Kod Protek kapalı
@ DEVICE pic16F628A, MCLR_off 'MCLR pini kullanılıyor.
@ DEVICE pic16F628A, INTRC_OSC_NOCLKOUT 'Dahili osilatör kullanılacak

include "modedefs.bas"	'SERİN VE SEROUT KOMUTLARININ ÇALIŞMASI İÇİN GEREKLİ KÜTÜPHANE DOSYASI

VERI var byte		'SERİ İLETİŞİMDE ALINACAK  VERİ
TRISB=0			'PORTB TAMAMI ÇIKIŞ
CMCON=7			'KOMPARATÖR PİNLERİ DİJİTAL GİRİŞ VEYA ÇIKIŞ
TRISA=%00010		'PORTA.1 GİRİŞ
PORTB=0                 'PORTB İÇERİĞİ SIFIR NEDENİ İSE İLK ENERJİ VERİLDİĞİNDE GİRİŞ VEYA ÇIKIŞLAR AKTİF OLMAMASI İÇİN
BASLA:
serin PORTA.1,T300,["320VOLT"],veri 'PORTA.1 320VOLT VERİSİNİ AL
PORTB = veri			'PORTB'DE HANGİ VERİ ALINDIYSA O VERİYE AİT LEDİ YAK (ÇIKIŞ VER)
goto BASLA			'BASLA ETİKETİNE GİT


bileniniz var ise bana bu kodların çalışma mantığının ne olduğunu anlatır mısınız? takıldığım kritik nokta PORTB nin veri ye eşitlenmesi. bunu yapmamızın mantığı nedir?

normalde   VERI adlı bir  değişkene değer atıyorduk, serout gibi komutlarla herhangi bir port dan bu veriyi 433 mhz lik hazır modül ile gönderiyorduk

ama durum bu yazılımda farklı bunun mantığını da öğrenmek istiyorum. çünkü benim diğer bildiğim yöntemle çok fazla if , then komutu oluyor. bu kodlar ise gayet kısa.


diğer dediğim kodlar şöyle


TRISA=%11110
TRISB=%00000011
PORTA=0
PORTB=0

VERICI VAR Byte   
   VERICI=0
PAUSE 500


BASLA:
   If PORTA.1=0 Then
   VERICI=10
      Else
   VERICI=0
   GoSub GONDER
PAUSE 100
   EndIf

If PORTA.2=0 Then
   VERICI=20
      Else
   VERICI=0
   GoSub GONDER
PAUSE 100
   EndIf

If PORTA.3=0 Then
   VERICI=30
      Else
   VERICI=0
   GoSub GONDER
PAUSE 100
   EndIf

If PORTA.4=0 Then
   VERICI=40
      Else
   VERICI=0
   GoSub GONDER
PAUSE 100
   EndIf



bunun çalışma mantığı şöyle

1-)VERI diye bir bilgi oluşturuyoruz. Daha sonra portlara (diyelimki B portları) gelen komutlar ile bu verinin farklı değer almasını kodlar yardımıyla sağlıyoruz. örneğin, B nin 1 portu high ise yani sinyal geliyorsa veri=10(herhangi bir değer) olsun diyoruz.daha sonra bu VERI olarak adlandırdığımız bilgi sistemde 10 olarak kayıtlı kalıyor.

2-)SEROUT gibi komutlar ile de sistemdeki bu bilgiyi belirli aralıklarla 433 mhz lik verici modülden yayınlıyoruz. 

3-)alıcı kısmında da bu verinin değeri gönderilen sinyal ile alıyoruz. örnegin verici VERI bilgisinin değerini 10 yapıp gönderdiyse, alıcımız da bu verinin değerini SERIN gibi komutlarla pic e işliyor. daha sonra bol miktarda if else kullanarak, şarta bağlı komut satırları yazıyoruz. çok kabaca şöyle;

SERIN ------> verimizin değeri 10 geldi diyelim.
VERI=10 oldu

----------------
device 16f628a
vs
vs
vs

if VERI=10 then
high portb.2
else
low portb.2
endif

vs
vs
vs

burada maksat diğer portlardan gelecek bilgilerin ayırt edilmesi- her port için VERI değişkenine ayrı bir sayı atamalıyız ki alıcı herbir sinyali gelen 'o ' farklı bilgiye göre doğru porta göndersin.


mesaj birleştirme:: 23 Temmuz 2013, 23:09:47

kodlara baktıysanız kodu yazan arkadaş açıklama kısmında

PORTB = veri         'PORTB'DE HANGİ VERİ ALINDIYSA O VERİYE AİT LEDİ YAK (ÇIKIŞ VER)

en alttan yukarı 2. satır.

bu satırda hangi veri alındıysa o veriye ait ledi yak diyor. ama biz lede bir değer vermedikki ? ispatı burada :)

include "modedefs.bas"  'SERİN VE SEROUT KOMUTLARININ ÇALIŞMASI İÇİN GEREKLİ KÜTÜPHANE DOSYASI
VERI var  byte          'SERİ İLETİŞİMDE VERİLECEK  VERİ       
TRISB=%11111111         'PORTB TAMAMI GİRİŞ
CMCON=7                 'KOMPARATÖR PİNLERİ DİJİTAL GİRİŞ VEYA ÇIKIŞ
OPTION_REG=7            'PULL UP DİREÇLERİ İPTAL
PORTB=0                 'PORTB İÇERİĞİ SIFIR NEDENİ İSE İLK ENERJİ VERİLDİĞİNDE GİRİŞ VEYA ÇIKIŞLAR AKTİF OLMAMASI İÇİN
BASLA:
VERI = PORTB            'VERİ=PORTB EŞİTLE
serout PORTA.1,T300,["320VOLT",VERI]      'PORTA.1 320VOLT VERİSİNİ GÖNDER
goto BASLA                          'BASLA ETİKETİNE GİT



yani nasıl olur da bu kodlar ile 1. anahtar ile 2. anahtar arasındaki fark algılanıp  gönderilir.? şu kodları bi tümden açıklayı hele yaw :) çoh bunaldım. çok makbule geçecek..