2 modda çalışabilen verici devre

Başlatan yolcu27, 12 Haziran 2016, 18:58:14

yolcu27

RF alıcı verici devresi
başlıkta belirttiğim 2 mod  istenildiğinde butona basılı tutulduğu sürece calısacak istenildiğinde sadece bas açsın bas kapatsın şeklinde çalışacak bir verici devre yapmayı planlıyorum .

kodlar aşağıdadır


ALICI DEVRE KODLARI
'****************************************************************
'*  Name    : alıcı.BAS                                       *
'*  Author  : [Mustafa CAN ]                                    *
'*  Notice  : Copyright (c) 06,06,2006                          *
'*          : All Rights Reserved                               *
'*  Date    : 28.03.2007                                        *
'*  Version : 1.0                                               *
'*  Notes   : PICLE ALICI bas dosyası                            *
'*          :                                                   *
'****************************************************************
DEFINE OSC 4
PORTA=0
TRISA=%00000001
TRISB=0 

BILGI var BYTE
SYMBOL VERIIN=PORTA.0
 PORTB=0
 porta=0
MAIN:  
   BILGI=0             
   serIN2 VERIIN,813,[WAIT ("ETE"),BILGI] 
   SELECT CASE BILGI
   CASE 255
   GOTO MAIN
   CASE 254
   TOGGLE PORTB.0
   CASE 253
   TOGGLE PORTB.1
   CASE 251
   TOGGLE PORTB.2
   CASE 247
   TOGGLE PORTB.3
   CASE 239
   TOGGLE PORTB.4
   CASE 223
   TOGGLE PORTB.5
   CASE 191
   TOGGLE PORTB.6
   CASE 127
   toggle portb.7
   case 28
   toggle porta.1
   case 26
   toggle porta.2
   case 22
   toggle porta.3
   case 14
   PORTA.4=1-PORTA.4
   
   END SELECT

   PAUSE 200
GOTO MAIN        
            
           
             
END
               
                         



VERİCİ DEVRE KODLARI ( bas açsın bas kapatsın şeklinde)

'****************************************************************
'*  Name    : verici.BAS                                       *
'*  Author  : [Mustafa CAN ]                                    *
'*  Notice  : Copyright (c) 06,06,2006                          *
'*          : All Rights Reserved                               *
'*  Date    : 28.03.2007                                        *
'*  Version : 1.0                                               *
'*  Notes   : PICLE VERICI bas dosyası                            *
'*          :                                                   *
'****************************************************************
DEFINE OSC 4
TRISA=%00011110
TRISB=%11111111 
OPTION_REG.7=0 
BILGI VAR BYTE


SYMBOL VERIOUT=PORTA.0 

MAIN:      BILGI=255
           GOSUB PORTA_BAK
           IF PORTB<255 THEN 
             BILGI=PORTB
               GOSUB VER
               while portb<255:wend
             ENDIF

            pause 10
            GOTO MAIN            
       

VER:
      serout2 VERIOUT,813,[REP$AA\5,REP$00\5,REP$FF\5] 
      serout2 VERIOUT,813,["E","T","E",BILGI]
      serout2 VERIOUT,813,["E","T","E",BILGI]
      serout2 VERIOUT,813,["E","T","E",BILGI]
      serout2 VERIOUT,813,["E","T","E",BILGI]
      RETURN
      
PORTA_BAK:
       BILGI=PORTA & %00011110
       IF BILGI<30 THEN
         GOSUB VER
'         PAUSE 100
       ENDIF
       WHILE PORTA<30 : WEND
       RETURN  
END
               
                         




Verici devre kodları basılı tutulduğu sürece çalışan

'****************************************************************
'*  Name    : verici.BAS                                       *
'*  Author  : [Mustafa CAN ]                                    *
'*  Notice  : Copyright (c) 06,06,2006                          *
'*          : All Rights Reserved                               *
'*  Date    : 28.03.2007                                        *
'*  Version : 1.0                                               *
'*  Notes   : PICLE VERICI bas dosyası                            *
'*          :                                                   *
'****************************************************************
DEFINE OSC 4
TRISA=%00011110
TRISB=%11111111 
OPTION_REG.7=0 
BILGI VAR BYTE


SYMBOL VERIOUT=PORTA.0 

MAIN:      BILGI=255
           GOSUB PORTA_BAK
           IF PORTB<255 THEN 
             BILGI=PORTB
               GOSUB VER
               WHILE PORTB<255:WEND
			   ' EDIT : Veri tekrar yollaniyor, 
			   ' bu sekilde toggle islemi gerceklesiyor.
               GOSUB VER
             ENDIF

            PAUSE 10
            GOTO MAIN            
       

VER:
      serout2 VERIOUT,813,[REP$AA\5,REP$00\5,REP$FF\5] 
      serout2 VERIOUT,813,["E","T","E",BILGI]
      serout2 VERIOUT,813,["E","T","E",BILGI]
      serout2 VERIOUT,813,["E","T","E",BILGI]
      serout2 VERIOUT,813,["E","T","E",BILGI]
      RETURN
      
PORTA_BAK:
       BILGI=PORTA & %00011110
       IF BILGI<30 THEN
         GOSUB VER
		 ' Gecikme buraya tasindi.
		 WHILE PORTA<30 : WEND
		 ' EDIT : Veri tekrar yollaniyor, 
		 ' bu sekilde toggle islemi gerceklesiyor.
		 GOSUB VER
       ENDIF
       RETURN  
END
               
                         



bu iki verici kodu birleştirmek istiyorum. mesela pic16f628a ile kullanmak istiyorum bu kodları

aklıma şöyle bir fikir geldi.

8 kanal olarak çalışmak için portb yi çıkış yapıyoruz alıcı devrede
verici devrede yine butonlar portb ye bağlı olacak
porta.0 alıcı vericidede data pini olacak

vericide porta.1 i de giriş olarak tanımlayacağız  pull down ile gnd ye çekeceğiz ve 5v ile de arasına bir anahtar koyacağız mini switch şeklinde

amacım şu  porta.1=0 iken bas caşıstır bas durdur şeklinde olacak kodlar işleyecek
porta.1=1 ilen basılı olduğu sürece çalışacak butonlar .

anahtarı 5v ye çektiğimizde porta.1=1 oacak


birinci moddaki çalışma kodlarını etiket olaran Birinci
ikininci moddaki çalışma kodlarını etiket olarak İkinci

yapalım.

SWKONTROL adında bir etiketimiz olsun bu etiket içinde porta.1 in sıfır mı bir mi olduğunu kontrol edelim

SWKONTROL:
if porta.1=0 then Birinci
if porta.1=0 then İkinci
RETURN


şeklinde kod yazsak ve  bu Birinci ve İkinci çalışma kodlarının içerisinde bu SWKONTROL etiketine gidip gelmesini sağlasak ( mesela VER etiketi içersinde GOSUB SWKONTROL yazsak)

dediğim şekilde iki moddada çalıştırabilir miyim?

Eğer bu şekilde olabilecek ise kodları  birleştirip gerekli yerleri silip eklemeler yapacağım .
Bu yöntem belkide bu şekilde randıman vermez diyorsanız bunu başka şekilde nasıl yapabilirim?
Umarım kendimi ifade edebilmişimdir.




omereliusuk

MAIN:      
WHILE porta.1=0 

BILGI=255
           GOSUB PORTA_BAK
           IF PORTB<255 THEN 
             BILGI=PORTB
               GOSUB VER
               while portb<255:wend
             ENDIF

            pause 10
WEND

              
WHILE porta.1=1 
  BILGI=255
           GOSUB PORTA_BAK
           IF PORTB<255 THEN 
             BILGI=PORTB
               GOSUB VER
               WHILE PORTB<255:WEND
			   ' EDIT : Veri tekrar yollaniyor, 
			   ' bu sekilde toggle islemi gerceklesiyor.
               GOSUB VER
             ENDIF
WEND

GOTO MAIN

yolcu27

olabilir mi yani sizce kodu evet güzelce düzenlemişsiniz. yani uygulamada aksilik çıkartabilir mi ?

en kısa zamanda bir kumanda tasarlayıp yeniden denemek istiyorum teşekkür ederim.

yolcu27

'****************************************************************
'*  Name    : verici.BAS                                       *
'*  Author  : [Mustafa CAN ]                                    *
'*  Notice  : Copyright (c) 06,06,2006                          *
'*          : All Rights Reserved                               *
'*  Date    : 28.03.2007                                        *
'*  Version : 1.0                                               *
'*  Notes   : PICLE VERICI bas dosyası                            *
'*          :                                                   *
'****************************************************************
DEFINE OSC 4
TRISA=%00011110
TRISB=%11111111 
OPTION_REG.7=0 
BILGI VAR BYTE


SYMBOL VERIOUT=PORTA.0 

MAIN:      
WHILE porta.1=0 

BILGI=255
           GOSUB PORTA_BAK
           IF PORTB<255 THEN 
             BILGI=PORTB
               GOSUB VER
               while portb<255:wend
             ENDIF

            pause 10
WEND

              
WHILE porta.1=1 
  BILGI=255
           GOSUB PORTA_BAK1
           IF PORTB<255 THEN 
             BILGI=PORTB
               GOSUB VER
               WHILE PORTB<255:WEND
			   ' EDIT : Veri tekrar yollaniyor, 
			   ' bu sekilde toggle islemi gerceklesiyor.
               GOSUB VER
             ENDIF
WEND

GOTO MAIN     

VER:
      serout2 VERIOUT,813,[REP$AA\5,REP$00\5,REP$FF\5] 
      serout2 VERIOUT,813,["E","T","E",BILGI]
      serout2 VERIOUT,813,["E","T","E",BILGI]
      serout2 VERIOUT,813,["E","T","E",BILGI]
      serout2 VERIOUT,813,["E","T","E",BILGI]
      RETURN
      
 PORTA_BAK1:
       BILGI=PORTA & %00011110
       IF BILGI<30 THEN
         GOSUB VER
		 ' Gecikme buraya tasindi.
		 WHILE PORTA<30 : WEND
		 ' EDIT : Veri tekrar yollaniyor, 
		 ' bu sekilde toggle islemi gerceklesiyor.
		 GOSUB VER
       ENDIF
       RETURN  
       
 PORTA_BAK:
       BILGI=PORTA & %00011110
       IF BILGI<30 THEN
         GOSUB VER
'         PAUSE 100
       ENDIF
       WHILE PORTA<30 : WEND
       RETURN       
       


END
               
                         



şu şekilde derledim çizimini yapacağım şimdi dediğim gibi porta.1 ile +5 arasına bir anahtar koyacağım direnç ile de gnd ye çekeceğim.  Ama son bir soru daha sorayım

Şimdi   

OPTION_REG.7=0
  ile dahili pull-up dirençlerini aktif ettikten sonra porta.1 i gnd ye direnç ile pull-down yapmak istiyorum nasıl bir direnç ile yapmam gerekir ki dahili pull-up yerine dışarıdan direnç ile gnd ye çekilsin bu bacak. Dahili pull-up direncinden daha küçük olacak şekilde kaç ohm yada kaç kohm direnç koymalıyım gnd ile porta.1 arasına?

RaMu

#4
En fazla PortA.1 i bozmadan çekebileceğin,
maksimum akımı sağlayan,
direnç değeri kadar küçük bir direnç kullanabilirsin.
Pic pinlerinden 20 mA max çekebilirsin,
5V da 20mA çeken direnç değeri .... :)

Aslında butona basıldığında pinin input olacağını garanti edebiliyorsan
hiç direnç koymadanda yapabilirsin.

Genelde 470ohm~1k arası kullanılır.

Kullanabileceğin en büyük pull-down direnç değeride
doğal olarak pull-up direncinin değerine bağlıdır,
dahili pull up direnç değerinide
kullanacağın picin datasheet inden öğrenebilirsin.



mesaj birleştirme:: 15 Haziran 2016, 07:50:43

  Aslında hesap pull down direnci üzerinde düşecek gerilim ve
picin ilgili pininin LOW olarak kabul ettiği gerilim seviyesi ne
üzerinden yapılır,
yukarıda anlattığım kısım akım limiti oluyor.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

yolcu27

ayrıntı için teşekkürler
ben 16f628a da iki porttada pull up var diye biliyordum yanlışmış sadece portb de varmış datasheete bakarken gördüm .
bu şekilde ozaman direk pull down yaparak +5 e de anahtar bağlayarak istediğim olmuş olacak.

merak ettiğim son yazmış olduğum kodda sorun olur mu acaba?

yolcu27



Arkadaşlar bu kumandayı yapacağım fakat birde şu şekilde bir kumanda yapmak istiyorum bunu nasıl yapabilirm?


""  kumanda üzerinde 2 buton oalcak birisi on birisi off yapacak toogle şeklinde değilde iki butonlu on off anahtarı mantıgı ile çalışacak ve 4 röleyi  misal portb.0.1.2.3  leri aç kapat yapacak  """

yolcu27

#7
arkadaşlar ekte devreyi ve php kodlarını veriyorum . isiste azda olsa istediğimi yapabildim fakat devreyi çizdim ve denedim porta.1 pull down da iken sorun yok toogle şeklinde çalışmakta.
ama jumper ile +5 v ye çekiyorum butonları algılamıyor kablo ile kısa devre edince algılıyor ancak o şekildede yine butona basılı tuttugum sürece çalışmasını istiyorum olmuyor. Bu isiste azda olsa oluyor.  Aklım dondu açıkcası nerede hata yapıyorum bir bakarsanız sevinirim.

iyi bayramlar



ikimod calısma.rar -  39 KB