RF Devresinde iki bilgi aynı anda gönderilebilir mi?

Başlatan veliusta, 06 Haziran 2012, 23:59:03

veliusta

Merhaba. Uzaktan Kumandalı araba yapmak istiyorum. Kumanda da aynı anda iki butona veya daha fazla butona basmak gerekiyor.(örnek: yön tuşları ve gaz ).Malesef devrede Bastığımızda ise sırası ile ilerliyor. bunun çözümü var mıdır? Örnek:2 veya daha fazla butona bastığımızda (aynı anda) . çıkışların hemen vermesi gerekiyor.
Picbasic bilgim olmadığı için burada bilen kişilerin yardımlarını bekliyorum. İnternette aradığım çoğu rf devrelerine baktım ama o devreler ile olmayacak gibi görünüyor.
Elimde iki adet PIC 16 F 84 A - 20 P var. Devrede Frekans 4Mhz bunu 20Mhz ile çalıştırsam sorun olur mu?(Hızlı Çalışması için.)


Elimdeki Devre: http://www.mediafire.com/?w131ad3if9xseg2 (Rar Password: picproje.org)
Alternatif: http://s2.dosya.tc/server15/jLFmmf/8KanalRF.rar.html

Resim: http://b1206.hizliresim.com/y/6/7kxbt.png
ALICI PBP KODLARI
'****************************************************************
'*  Name    : alıcı.BAS                                         *
'*  Author  : [iskender]                                        *
'*  Notice  : teknokit                                          *
'*          :                                                   *
'*  Date    : 10.08.2008                                        *
'*  Version : 1.0                                               *
'*  Notes   :1200 baund hızında iletişim                        *
'*          :                                                   *
'****************************************************************
DEFINE OSC 4
TRISA=11011
TRISB=0
PORTA=0
PORTB=0

PORTA.2=1
PAUSE 150
PORTA.2=0
PAUSE 150
PORTA.2=1
PAUSE 150
PORTA.2=0
PAUSE 150
PORTA.2=1
PAUSE 150
PORTA.2=0
PAUSE 150
PORTA.2=1

ALICI VAR BYTE
ALICI=0
PAUSE 200

BASLA:

SERIN2 PORTA.0,813,[WAIT("ISKO"),ALICI] 

IF PORTA.1=1 THEN BASLA1
IF PORTA.1=0 THEN BASLA2

GOTO BASLA
    
    BASLA1:
   
    IF ALICI=10 THEN
	TOGGLE PORTB.0
	ENDIF
	
	IF ALICI=20 THEN
	TOGGLE PORTB.1
	ENDIF

	IF ALICI=30 THEN
	TOGGLE PORTB.2
	ENDIF

	IF ALICI=40 THEN
	TOGGLE PORTB.3
	ENDIF

	IF ALICI=50 THEN
	TOGGLE PORTB.4
	ENDIF

	IF ALICI=60 THEN
	TOGGLE PORTB.5
	ENDIF
	
	IF ALICI=70 THEN
	TOGGLE PORTB.6
	ENDIF

	IF ALICI=80 THEN
	TOGGLE PORTB.7
	ENDIF
	
	 GOTO BASLA
	
	BASLA2:
	IF ALICI=10 THEN
	PORTB.0=1
	PAUSE 200
	PORTB.0=0
	ENDIF
	
	IF ALICI=20 THEN
	PORTB.1=1
	PAUSE 200
	PORTB.1=0
	ENDIF

	IF ALICI=30 THEN
	PORTB.2=1
	PAUSE 200
	PORTB.2=0
	ENDIF

	IF ALICI=40 THEN
	PORTB.3=1
	PAUSE 200
	PORTB.3=0
	ENDIF

	IF ALICI=50 THEN
	PORTB.4=1
	PAUSE 200
	PORTB.4=0
	ENDIF

	IF ALICI=60 THEN
	PORTB.5=1
	PAUSE 200
	PORTB.5=0
	ENDIF
	
	IF ALICI=70 THEN
	PORTB.6=1
	PAUSE 200
	PORTB.6=0
	ENDIF

	IF ALICI=80 THEN
	PORTB.7=1
	PAUSE 200
	PORTB.7=0
	ENDIF
	
	GOTO BASLA
	END

VERİCİ PBP KODLARI
'****************************************************************
'*  Name    : VERICI.BAS                                        *
'*  Author  : [EGITIM AMACLIDIR.]                   	        *
'*  Notice  : İSKENDER 						*
'*          : TEKNOKİT EED/KARAKÖY                              *
'*  Date    : 01.08.2008                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
TRISA=%00010
TRISB=%11111111
PORTA=0
PORTB=0
OPTION_REG.7=0

BILGI VAR BYTE
	BILGI=0
	PAUSE 200

BASLA:


    IF PORTB.0=0 THEN
	BILGI=10
	GOSUB GONDER
PAUSE 100
	ENDIF
	

IF PORTB.1=0 THEN
	BILGI=20
	GOSUB GONDER
PAUSE 100
	ENDIF

IF PORTB.2=0 THEN
	BILGI=30
	GOSUB GONDER
PAUSE 100
	ENDIF

IF PORTB.3=0 THEN
	BILGI=40
	GOSUB GONDER
PAUSE 100
	ENDIF

IF PORTB.4=0 THEN
	BILGI=50
	GOSUB GONDER
PAUSE 100
	ENDIF

IF PORTB.5=0 THEN
	BILGI=60
	GOSUB GONDER
PAUSE 100
	ENDIF
	
	IF PORTB.6=0 THEN
	BILGI=70
	GOSUB GONDER
PAUSE 100
	ENDIF

IF PORTB.7=0 THEN
	BILGI=80
	GOSUB GONDER
PAUSE 100
	ENDIF

	
    GOTO basla
	
	
GONDER:
serout2 PORTA.0,813,[REP$AA\5,REP$00\5,REP$FF\5]
SEROUT2 PORTA.0,813,["I","S","K","O",BILGI]


RETURN
end


Not:Alıcı Kısmındaki Jumper ile Devreki iki modda tasarlamak mümkün olur mu gene?
Birde Alıcı Kısmından devrenin sinyal gittiğini görmek için RA1(18.uç) a led bağladım.(Herhangibi bir tuşa bastığında led yanarsa süper olur.)

Devreyi Yapınca Siteye Resimlerini yüklerim.

Şimdiden Yardım eden arkadaşlara teşekkürlerimi sunarım.iyi günler.

Kabil ATICI

Gördüğüm kadarı ile vericide (portb butonları) her bir butonu tek tek okutup öyle gönderiyorsun. Bunun yerine veri olarak portb verisini gönder. Alıcıda gelen veriyi bitlerine ayır ve çıkışa ver. Böylece 1'den fazla basılan tüm buton bilgileri aynı anda gönderilir.
ambar7

birkan

20 mhz ile çalıştırsanız bir faydası olmaz çünkü zaten RF vericiniz maksimum 9.600 baud bilgi gönderen cinsten olacaktır diye tahmin ediyorum.

veliusta

#3
delete

serhat1990

Port'u okuyup tüm port bilgisini gönder . Sırayla okuyacam dersende verilerin hepsini topla öyle gönder yüksek mhz'de kristal kullanırsan bu işlemleri çok hızlı yapabilirsin...

veliusta

nasıl yapılıyor yardım edermisiniz? nasıl tüm portları okuturum?

serhat1990

Pic basic bilmiyorum ama c ' de bu işlem basit ..

Örneğin

x diye bir değişkenin olsun...

unsigned char x=0;   x adında bir bytelik işaretsiz değişken oluşturduk...

x=PORTB;

putc(x);
               
  bu komutlarla c 'de işini görebilirsin...

veliusta


veliusta

Alıntı yapılan: ambar7 - 07 Haziran 2012, 09:12:04
Gördüğüm kadarı ile vericide (portb butonları) her bir butonu tek tek okutup öyle gönderiyorsun. Bunun yerine veri olarak portb verisini gönder. Alıcıda gelen veriyi bitlerine ayır ve çıkışa ver. Böylece 1'den fazla basılan tüm buton bilgileri aynı anda gönderilir.

ilk üç tane için örnek yazabilir misiniz? Gerisini ben tamamlarım.

veliusta


adoka

trıs ve port tanımlamalarını yaptıktan sonra byte tipinde bir degisken ata (ornek:a var byte)
daha sonra portu komple degiskene yaz :a=portb
sonrada bu degiskeni alıcıya gonder lakin her dongude degiskeni sıfırlaman gerekir...
Bir mum diğer bir mumu tutuşturmakla, ışığından bir şey kaybetmez. (Mevlana)

z

Verici programinda ornek olarak asagidaki kodlarina bakalim.


    IF PORTB.0=0 THEN
    BILGI=10
    GOSUB GONDER
PAUSE 100
    ENDIF
   

IF PORTB.1=0 THEN
    BILGI=20
    GOSUB GONDER
PAUSE 100
    ENDIF

Bunu boyle yapmak yerine

BILGI=PORTB
GOSUB GONDER
PAUSE 100

yazarsan bir kerede PORTB nin 8 bitini de gondermis olursun.

ALICI da yapman gereken

    IF ALICI=10 THEN
    TOGGLE PORTB.0
    ENDIF
   
    IF ALICI=20 THEN
    TOGGLE PORTB.1
    ENDIF

yerine

     IF ALICI AND 1=0 THEN   TOGGLE PORTB.0
     IF ALICI AND 2=0 THEN   TOGGLE PORTB.1
     IF ALICI AND 4=0 THEN   TOGGLE PORTB.2
     IF ALICI AND 8=0 THEN   TOGGLE PORTB.2
.....
.....

benzeri bir kod yazman yeterli olacaktir.



Bana e^st de diyebilirsiniz.   www.cncdesigner.com

OG

;;;;;;;;;;;;;;  TX

define OSC 20                       '' 20 MHz ile çalışma ( OSC Config HS olmalı)
'define OSC 4                        ''  4 MHz ile çalışma ( OSC Config XT olmalı)

TRISA = %00000010
TRISB = %11111111
PORTA = 0
PORTB = 0
OPTION_REG.7 = 0

BILGI VAR BYTE

deger var byte                      '' yeni değer
eski_deger var byte                 '' Son gönderilen

    eski_deger = 0

    PORTA.0 = 1                     '' Datanın düzgün başlaması için
    PAUSE 200

'''''''''''''' 
BASLA:
    deger = ~PORTB                  '' PORTB deki tuşlar değillendi
    
    if eski_deger <> deger then 
        GOSUB GONDER
        eski_deger = deger
    endif 
    
goto BASLA
''''''''''''''  
    
    
GONDER:
    serout2 PORTA.0,813,[REP$AA\5,REP$00\5,REP$FF\5]
    SEROUT2 PORTA.0,813,["I","S","K","O",deger,deger]   '' sağlama yapmak için data degeri 2 defa gönderiyoruz
    SEROUT2 PORTA.0,813,["I","S","K","O",deger,deger]   '' işlemi 2 defa yapıyoruz RF sağlığı açısından
RETURN


;;;;;;;;;;;;;;  RX 

DEFINE OSC 4
TRISA = %11111011
TRISB = 0

PORTA = 0
PORTB = 0



x var byte
alinan_1 var byte
alinan_2 var byte

ALICI VAR BYTE
ALICI=0


for x = 1 to 3
    PORTA.2 = 1
    PAUSE 150
    PORTA.2 = 0
    PAUSE 150
next

    PORTA.2 = 1
    PAUSE 200
    
''''''''''''''''

BASLA:

    SERIN2 PORTA.0,813,[WAIT("ISKO"),alinan_1,alinan_2]
    
    if alinan_1 <> alinan_2 then BASLA
    
PORTB = alinan_1    ''' Vericinin PORTB si nasıl ise Alıcının PORTB si de aynı değeri alır.

''' Bekleme değerlerini buraya koy
'' PAUSE 200

Goto BASLA
FORUMU İLGİLENDİREN KONULARA ÖM İLE CEVAP VERİLMEZ.

veliusta

#13
Alıntı yapılan: z - 11 Haziran 2012, 05:20:16
Verici programinda ornek olarak asagidaki kodlarina bakalim.


    IF PORTB.0=0 THEN
    BILGI=10
    GOSUB GONDER
PAUSE 100
    ENDIF
   

IF PORTB.1=0 THEN
    BILGI=20
    GOSUB GONDER
PAUSE 100
    ENDIF

Bunu boyle yapmak yerine

BILGI=PORTB
GOSUB GONDER
PAUSE 100

yazarsan bir kerede PORTB nin 8 bitini de gondermis olursun.

ALICI da yapman gereken

    IF ALICI=10 THEN
    TOGGLE PORTB.0
    ENDIF
   
    IF ALICI=20 THEN
    TOGGLE PORTB.1
    ENDIF

yerine

     IF ALICI AND 1=0 THEN   TOGGLE PORTB.0
     IF ALICI AND 2=0 THEN   TOGGLE PORTB.1
     IF ALICI AND 4=0 THEN   TOGGLE PORTB.2
     IF ALICI AND 8=0 THEN   TOGGLE PORTB.2
.....
.....

benzeri bir kod yazman yeterli olacaktir.

Dediğiniz gibi yaptım ama olmadı kodlar aynı bu şekildeydi.
ALICI KODLARI
'****************************************************************
'*  Name    : ALICI.BAS                                         *
'*  Author  : [VELI USTA]                   	                *
'*  Notice  : Copyright (c) 2012                                *
'*          : All Rights Reserved                               *
'*  Date    : 11.06.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
DEFINE OSC 4
TRISA=11011
TRISB=0
PORTA=0
PORTB=0

W VAR BYTE

FOR W = 1 TO 3
    PORTA.2=1
    PAUSE 150
    PORTA.2=0
    PAUSE 150
NEXT
    PORTA.2=1
    PAUSE 200

ALICI VAR BYTE
ALICI=0
PAUSE 200

BASLA:

SERIN2 PORTA.0,813,[WAIT("VELI"),ALICI] 

IF PORTA.1=1 THEN BASLA1
IF PORTA.1=0 THEN BASLA2

GOTO BASLA

BASLA1:

     IF ALICI AND 1=0 THEN   TOGGLE PORTB.0
     IF ALICI AND 2=0 THEN   TOGGLE PORTB.1
     IF ALICI AND 3=0 THEN   TOGGLE PORTB.2
     IF ALICI AND 4=0 THEN   TOGGLE PORTB.3
     IF ALICI AND 5=0 THEN   TOGGLE PORTB.4
     IF ALICI AND 6=0 THEN   TOGGLE PORTB.5
     IF ALICI AND 7=0 THEN   TOGGLE PORTB.6
     IF ALICI AND 8=0 THEN   TOGGLE PORTB.7
	
GOTO BASLA
	
	BASLA2:
	IF ALICI=10 THEN
	PORTB.0=1
	PAUSE 200
	PORTB.0=0
	ENDIF
	
	IF ALICI=20 THEN
	PORTB.1=1
	PAUSE 200
	PORTB.1=0
	ENDIF

	IF ALICI=30 THEN
	PORTB.2=1
	PAUSE 200
	PORTB.2=0
	ENDIF

	IF ALICI=40 THEN
	PORTB.3=1
	PAUSE 200
	PORTB.3=0
	ENDIF

	IF ALICI=50 THEN
	PORTB.4=1
	PAUSE 200
	PORTB.4=0
	ENDIF

	IF ALICI=60 THEN
	PORTB.5=1
	PAUSE 200
	PORTB.5=0
	ENDIF
	
	IF ALICI=70 THEN
	PORTB.6=1
	PAUSE 200
	PORTB.6=0
	ENDIF

	IF ALICI=80 THEN
	PORTB.7=1
	PAUSE 200
	PORTB.7=0
	ENDIF
	
GOTO BASLA
END


VERİCİ KODLARI:
'****************************************************************
'*  Name    : VERICI.BAS                                        *
'*  Author  : [VELI USTA]                   	                *
'*  Notice  : Copyright (c) 2012                                *
'*          : All Rights Reserved                               *
'*  Date    : 11.06.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
TRISA=%00010
TRISB=%11111111
PORTA=0
PORTB=0
OPTION_REG.7=0

BILGI VAR BYTE
BILGI=0
PAUSE 200

BASLA:

BILGI=PORTB
GOSUB GONDER
PAUSE 100

GOTO BASLA
	
GONDER:
SEROUT2 PORTA.0,813,[REP$AA\5,REP$00\5,REP$FF\5]
SEROUT2 PORTA.0,813,["V","E","L","I",BILGI]

RETURN
END


Nerede hata yapmışım?

veliusta

Alıntı yapılan: OG - 11 Haziran 2012, 06:34:31
;;;;;;;;;;;;;;  TX

define OSC 20                       '' 20 MHz ile çalışma ( OSC Config HS olmalı)
'define OSC 4                        ''  4 MHz ile çalışma ( OSC Config XT olmalı)

TRISA = %00000010
TRISB = %11111111
PORTA = 0
PORTB = 0
OPTION_REG.7 = 0

BILGI VAR BYTE

deger var byte                      '' yeni değer
eski_deger var byte                 '' Son gönderilen

    eski_deger = 0

    PORTA.0 = 1                     '' Datanın düzgün başlaması için
    PAUSE 200

'''''''''''''' 
BASLA:
    deger = ~PORTB                  '' PORTB deki tuşlar değillendi
    
    if eski_deger <> deger then 
        GOSUB GONDER
        eski_deger = deger
    endif 
    
goto BASLA
''''''''''''''  
    
    
GONDER:
    serout2 PORTA.0,813,[REP$AA\5,REP$00\5,REP$FF\5]
    SEROUT2 PORTA.0,813,["I","S","K","O",deger,deger]   '' sağlama yapmak için data degeri 2 defa gönderiyoruz
    SEROUT2 PORTA.0,813,["I","S","K","O",deger,deger]   '' işlemi 2 defa yapıyoruz RF sağlığı açısından
RETURN


;;;;;;;;;;;;;;  RX 

DEFINE OSC 4
TRISA = %11111011
TRISB = 0

PORTA = 0
PORTB = 0



x var byte
alinan_1 var byte
alinan_2 var byte

ALICI VAR BYTE
ALICI=0


for x = 1 to 3
    PORTA.2 = 1
    PAUSE 150
    PORTA.2 = 0
    PAUSE 150
next

    PORTA.2 = 1
    PAUSE 200
    
''''''''''''''''

BASLA:

    SERIN2 PORTA.0,813,[WAIT("ISKO"),alinan_1,alinan_2]
    
    if alinan_1 <> alinan_2 then BASLA
    
PORTB = alinan_1    ''' Vericinin PORTB si nasıl ise Alıcının PORTB si de aynı değeri alır.

''' Bekleme değerlerini buraya koy
'' PAUSE 200

Goto BASLA


ALICI
;;;;;;;;;;;;;;  RX 

DEFINE OSC 4
TRISA = %11111011
TRISB = 0

PORTA = 0
PORTB = 0



x var byte
alinan_1 var byte
alinan_2 var byte

ALICI VAR BYTE
ALICI=0


for x = 1 to 3
    PORTA.2 = 1
    PAUSE 150
    PORTA.2 = 0
    PAUSE 150
next

    PORTA.2 = 1
    PAUSE 200
    
''''''''''''''''

BASLA:

    SERIN2 PORTA.0,813,[WAIT("ISKO"),alinan_1,alinan_2]
    
    if alinan_1 <> alinan_2 then BASLA
    
PORTB = alinan_1    ''' Vericinin PORTB si nasıl ise Alıcının PORTB si de aynı değeri alır.

''' Bekleme değerlerini buraya koy
'' PAUSE 200

Goto BASLA


VERİCİ
;;;;;;;;;;;;;;  TX

define OSC 20                       '' 20 MHz ile çalışma ( OSC Config HS olmalı)
'define OSC 4                        ''  4 MHz ile çalışma ( OSC Config XT olmalı)

TRISA = %00000010
TRISB = %11111111
PORTA = 0
PORTB = 0
OPTION_REG.7 = 0

BILGI VAR BYTE

deger var byte                      '' yeni değer
eski_deger var byte                 '' Son gönderilen

    eski_deger = 0

    PORTA.0 = 1                     '' Datanın düzgün başlaması için
    PAUSE 200

'''''''''''''' 
BASLA:
    deger = ~PORTB                  '' PORTB deki tuşlar değillendi
    
    if eski_deger <> deger then 
        GOSUB GONDER
        eski_deger = deger
    endif 
    
goto BASLA
''''''''''''''  
    
    
GONDER:
    serout2 PORTA.0,813,[REP$AA\5,REP$00\5,REP$FF\5]
    SEROUT2 PORTA.0,813,["I","S","K","O",deger,deger]   '' sağlama yapmak için data degeri 2 defa gönderiyoruz
    SEROUT2 PORTA.0,813,["I","S","K","O",deger,deger]   '' işlemi 2 defa yapıyoruz RF sağlığı açısından
RETURN


Kodları hiç bozmadan hex'e dönüştürdüm ama hiç bir led yanmadı?