RF KUMANDA YARDIM

Başlatan designer.21, 07 Nisan 2020, 11:56:19

designer.21

Merhabalar;
Sayın hocalarım sizler için çok basit bir konu hakkında yardıma ihtiyacım var. Ete hocamın daha önce yayınlamış olduğu bir projesinde küçük bir değişiklik yapmak istedim ve bir yandan microcode studio diğer yandan proteus açık bir şekilde defalarca yaz-boz yapmama rağmen bir türlü yapamadım maalesef.

yapmak istediğim şu;
mevcut projede TUSA ve TUSB lere basıldığında alıcıdaki pinleri TOGGLE'uyor. ama benim yapmak istediğim basıldığı sürecde çıkış versin aksi halde vermesin. yardım ederseniz çok sevinirim.


@ __config _CP_OFF & _PWRTE_ON & _WDT_ON & _LVP_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT

CMCON=7
OPTION_REG.7=0


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

SYMBOL CIKIS=PORTA.0
SYMBOL TUSA=PORTB.0
SYMBOL TUSB=PORTB.1

VERICI    var  byte
'------------------------------------------------------------------------------
PAUSE 200
VERICI=0
'------------------------------------------------------------------------------
BASLA: VERICI=0
       IF TUSA=0 THEN
          VERICI=88
          gosub gonder
          WHILE TUSA=0 
          WEND
       endIF
          
       IF TUSB=0 THEN 
           VERICI=66
           gosub gonder
           WHILE TUSB=0
           WEND
        endif    
           
       PAUSE 100
       GOTO BASLA
'-------------------------ALT PROGRAMLAR---------------------------------------
GONDER:
        SEROUT2 CIKIS,396,["E","T","E",VERICI]
        SEROUT2 CIKIS,396,["E","T","E",VERICI]
        return
END




@ __config _CP_OFF & _PWRTE_ON & _WDT_ON & _LVP_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT

PORTA=0 
PORTB=0 
TRISA=%00000001   'A portu A.0 giriş diğerleri çıkış yapıldı.
TRISB=%00000000   'B portu tamamı çıkış yapıldı.

ALICI     VAR  BYTE
 GIRIS  VAR  PORTA.0
 ROLEA  VAR  PORTB.0
 ROLEB  VAR  PORTB.1
 LEDA   VAR  PORTB.6
 LEDB   VAR  PORTB.7

'-----------------------------B A Ş L A N G I Ç ---------------------------    
CMCON=7
CLEAR                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
PAUSE 500
PORTB=0  'tüm çıkışlar low seviyesinde
'-------------------------------------------------------------------------------    
BASLA:                
       SerIn2 GIRIS,396,[WAIT ("ETE"),ALICI]
      
       IF ALICI=88 THEN 
          TOGGLE LEDA
          TOGGLE ROLEA
       ENDIF
           
       IF ALICI=66 THEN
          TOGGLE LEDB
          TOGGLE ROLEB
       ENDIF   
       pause 200
       GOTO BASLA

END
 



designer.21

kodları basitleştirerek bişeyler denedim olur gibi oldu ama yarım kaldı

VERICI kısmını bu şekilde:
BASLA: 
    VERICI=0
        
    IF TUSA=0 THEN
      VERICI=88
      gosub gonder
                  
      ELSE
      VERICI=0
      gosub gonder
      WHILE TUSA=0 
      WEND
    endIF
                      
    IF TUSB=0 THEN 
      VERICI=66
      gosub gonder
      
      ELSE
      VERICI=0
      gosub gonder
      WHILE TUSB=0
      WEND
    endif    
          
      PAUSE 100
      GOTO BASLA

ALICI kısmını ise bu şeklide değiştirdim
BASLA:                
      SerIn2 GIRIS,396,[WAIT ("ETE"),ALICI]
      
          IF ALICI=88 THEN 
          PORTB=%00000001
          ELSE
          PORTB=%00000000
          ENDIF
              
          'IF ALICI=66 THEN
          'PORTB=%00000010
          ' ELSE
          'PORTB=%00000000
          'ENDIF 
      pause 200
      GOTO BASLA

bu ALICI kısmındaki birinci IF bölümünde sıkıntı yok çalışıyor ama alttaki ikinci IF bölümünü eklediğimde çalışmıyor

ete

#2
RF konusundaki yardımları askıya aldığımı söylemiş idim.
Ancak fikir yardımı yaparım.
RF konusunda bir çıkışın iki türlü çalıştırıldığını biliyoruz.
Birincisi rf tuşuna bastım bıraktım (yada basılı tutuyorum) çıkış toggle olarak konum değiştirir.
İkincisinde ise tusa bastım ve basılı tutuyorum çıkış aktif oldu ve tus bırakılıncaya kadar aktif olarak bekleyecek ve tusu bırakır bırakmaz çıkıs da pasif olacak.
İstediğin ikinci yöntem. Bunu yapmak için,
önce tusa basıldımı RF üzerinden kontrol yapacaksın.
Diyelimki tusa basılmış. Çıkışı aktif edeceksin. İşte bu noktadan sonrası önemli
ÇIKIŞ aktif iken (WHILE CIKIS=AKTIF) sürekli RF üzerinden TUS bırakılmışmı bakman gerekir. Bunu anlayabilmek için hem verici tus bırakıldığında boş bir sinyal yollamalı yada farklı bir sinyal yollamalı. Gelen TUS sinyali yada değeri Basılmış tuşdan farklı ise ÇIKIŞ pasif yapılıp o while döngüsünden çıkmalısın.
Daha farklı anlatmak gerekirse.
1. GOSUB RF_BAK
2. IF TUS=XXX THEN
3.  CIKIS=AKTIF
4. WHILE CIKIS=AKTIF  (YADA WHILE TUS=XXX)
    GOSUB RF_BAK
    IF TUS=0 THEN
      CIKIS=PASIF
      GOTO BASLA
      ENDIF
    WEND
    ENDIF
Şeklinde olmalı.
Yazdıklarındaki kusuru da açıklayayım,
     IF ALICI=88 THEN 
          PORTB=%00000001
     ELSE
          PORTB=%00000000
      ENDIF
Burada else kısmı kusur oluşturuyor. Çünki ALICI=88 değil de ALICI=66 olursa else kısmı faaliyete geçer ve PORTB=0 yapar. Halbuki sen 88 gelirse şunu yap 66 gelirse şunu yap ama sıfır gelirse portb=0 yap demen gerekir.


Ete

designer.21

cevabınız için çok teşekkür ederim hocam. fikirlerinizin bana çok yardımı olacaktır.

designer.21

kusura bakmayın ama yine ben : (
iki gündür uğraşıyorum ama butona basılı olduğu sürece çıkış verecek, butona basılı olmadığında da pasif olacak 4 kanallı bir Seri İletişim RF kod yazamadım. tüm yolu deniyorum veya denediğimi sanıyorum, farklı farklı kaynakları birleştirip yapmaya çalışıyorum ama bir türlü beceremedim. sizlerden rica ediyorum bu konuda bana yardımcı olabilir misiniz.

designer.21

#5
uzun bir aradan sonra, yaptığım incelemeler ve çalışmalar sonucu tam istediğim gibi bir kod yazmayı başarabildim çok şükür. sizler için çok  gözü kapalı yapabileceğiniz : ) çok basit bir kod ama beni baya uğraştırdı. yapmak istediğim şuydu. istediğim porta istediğim çıkışı verebilmekti. mesela herhangi bir porta bas-bırak komutu vermek isterken başka herhangi bir butona da TOGGLE komutu verebilmekti. ve bunları

VERI=PORT -------- PORTB=~VERI gibi olarak değil de her buton için birbirinden bağımsız ayrı olarak verebilmekti.


VERICI
@ __config _CP_OFF & _PWRTE_ON & _WDT_ON & _LVP_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT

DEFINE CHAR_PACING 100
CMCON=7
OPTION_REG.7=0


TRISA=%00000000
TRISB=%11111111
PORTA=0
PORTB=0

ALICI VAR BYTE

BASLA: 
        
        
        WHILE PORTB.0=0
        ALICI=9
        GOSUB GONDER
        WEND
        ALICI=0
        GOSUB GONDER
        
        WHILE PORTB.1=0
        ALICI=8
        GOSUB GONDER
        WEND
        ALICI=0
        GOSUB GONDER
        
        WHILE PORTB.2=0
        ALICI=7
        GOSUB GONDER
        WEND
        
        WHILE PORTB.3=0
        ALICI=6
        GOSUB GONDER
        WEND
        
        IF PORTB.4=0 THEN
        ALICI=5
        GOSUB GONDER
        WHILE PORTB.4=0
        WEND
        ENDIF
        
        IF PORTB.5=0 THEN
        ALICI=4
        GOSUB GONDER
        WHILE PORTB.5=0
        WEND
        ENDIF
        
        IF PORTB.6=0 THEN
        ALICI=3
        GOSUB GONDER
        WHILE PORTB.6=0
        WEND
        ENDIF
        


        IF PORTB.7=0 THEN
        ALICI=2
        GOSUB GONDER
        WHILE PORTB.7=0
        WEND
        ENDIF
        
        GOTO BASLA
        
GONDER:
        SEROUT2 PORTA.0,396,["M",ALICI]
        RETURN
        
END


 


ALICI
@ __config _CP_OFF & _PWRTE_ON & _WDT_ON & _LVP_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT

PORTA=0 
PORTB=0 
TRISA=%00000001   
TRISB=%00000000   

ALICI     VAR  BYTE
CMCON=7

  
BASLA:                
       SerIn2 PORTA.0,396,[WAIT ("M"),ALICI]
       
       IF ALICI=9 THEN
       HIGH PORTB.0
       ELSE
       LOW PORTB.0
       ENDIF
       
       IF ALICI=8 THEN
       HIGH PORTB.1
       ELSE
       LOW PORTB.1
       ENDIF
       
       IF ALICI=7 THEN
       HIGH PORTB.2
       ELSE
       LOW PORTB.2
       ENDIF
       
       IF ALICI=6 THEN
       HIGH PORTB.3
       ELSE
       LOW PORTB.3
       ENDIF
       
       IF ALICI=5 THEN
       TOGGLE PORTB.4
       ENDIF
       
       IF ALICI=4 THEN
       TOGGLE PORTB.5
       ENDIF
       
       IF ALICI=3 THEN
       TOGGLE PORTB.6
       ENDIF
       
       IF ALICI=2 THEN
       TOGGLE PORTB.7
       ENDIF
       
       
       GOTO BASLA

END
 
       



kodları proteusta denedim sorunsuz çalışıyor fakat hata ve kusurlarımla ilgili bir geri dönüş yaparsanız çok sevinirim.
Saygılar

designer.21

bu kodu devreyle çalıştırdığımda alıcı ledler butonla beraber yanmasının yanısıra kendi kendilerine de yanıp sönüyorlar. kararsız bir çalışma yapısı var. bunun sorunu nedir acaba. neyden kaynaklı bir durum.

Powered by EzPortal