RF ile ilgili

Başlatan sahinler64, 11 Şubat 2016, 20:00:31

sahinler64

merhabalar.
Vincimiz İçin Uzaktan Kumanda Yapalım Dedik ve Yaptık.
Alıcı ve Verici ile İletişim Tamam.
SEROUT2 ve HSERIN ile İletişim Yapıyoruz.
Ama Şöyle Bir Problem var.
Butondan Elimizi Çektiğimizde Role 0 Olsun İstiyoruz.
Ama Elimizi Çektiğimizde Role Devam Ediyor, Taki Diğer Butona Basıp Diğer Role Çekene Kadar.
Bilgi Gelmediğinde Roleler 0 Olsun İstiyorum Yapamadım. Yardım Edebilirmisiniz.
alıcı:

PORTA=0:PORTB=0
TRISB=%00000010
TRISA=%00000000
INCLUDE "modedefs.bas"
'-----------------------------------------------------------------
@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF &_MCLRE_OFF & _BODEN_OFF & _LVP_OFF & _CP_OFF

LED     VAR PORTA.1 
LED1    VAR PORTA.2
VERI    VAR BYTE
DEFINE HSER_RCSTA   90h ' Enable serial port & continuous receive
DEFINE HSER_TXSTA   20h ' Enable transmit, BRGH = 1
DEFINE HSER_SPBRG   25  ' 2400 Baud @ 4MHz, 0,16%
DEFINE HSER_CLROERR 1   ' Clear overflow automatically
   
CMCON=7    '16F628 de komparatör pinleri iptal hepsi giriş çıkış

HIGH LED
PAUSE 500
LOW LED

BASLA:
HSERIN[WAIT("E","T","E"),VERI]
    IF VERI=3 THEN
       LED1=0:LED=1
       GOTO BASLA
    ENDIF   
    IF VERI=6 THEN
       LED=0:LED1=1
       GOTO BASLA
    ENDIF
    led1=0:led=0   
GOTO BASLA
    END



verici:
PORTA=0:PORTB=0
TRISB=%00000000
TRISA=%00000110
INCLUDE "modedefs.bas"
'-----------------------------------------------------------------

@ __config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF &_MCLRE_OFF & _BODEN_OFF & _LVP_OFF & _CP_OFF

CMCON=7    '16F628 de komparatör pinleri iptal hepsi giriş çıkış
YUKARI  var PORTA.1    'YUKARI TUSU
ASAGI   VAR PORTA.2
BUZER   VAR PORTA.3
LED     VAR PORTB.7
VERI    VAR BYTE

HIGH BUZER
PAUSE 500
PORTA=0:PORTB=0:VERI=0 

BASLA:
    IF ASAGI=0 THEN
      VERI=3:GOSUB GONDER
      goto BASLA
    endIF
     
    IF YUKARI=0 THEN
      VERI=6:GOSUB GONDER
      GOTO BASLA
    ENDIF
   
    VERI=0:GOSUB GONDER 
   
GOTO BASLA

GONDER:
        SEROUT2 CIKIS,396,["E","T","E",verI]
        SEROUT2 CIKIS,396,["E","T","E",verI]
PAUSE 50
      TOGGLE LED
RETURN
END


ete

Kod vereceğiniz zaman lütfen KOD TAG içine alınız.

Hem mesajını düzenledim hemde istediğini yapmaya çalıştım. Programa bak ve dene bakalım oluyormu?

Ete

sahinler64

Hocam Ellerinize Sağlık Denedim Çalışıyor. Fakat Pilli Uygulama Olduğundan Ben Devamlı Veri Göndermek İstemiyorum. Yada Şöyle Söyleyim Hocam; Elimiz Butonda İken Olaki İletişim Birşekilde Kesildi LED Yanmaya Devam Ediyor Hocam.
Verinin Gelmemesi Durumunda nasıl Bir Yol İzleyebilirim....

ete

o işin tek çaresi var. Alıcıda ilk veri geldikten sonra tmr1 sayacını çalışıtıracaksın ve geri planda çalışacak.
sayacı 100 veya 200 ms süreye ayarlayacaksın ve kesme açmadan kesme bayrağı 1 olmuşmu (Pır1.0) diye bakacaksın.
1 olmuş ise Kes=kes+1 deyip bayrağı sıfırlayacak ve yeniden saymaya yollayacaksın. kesme sayısı istediğin zaman denk gelmiş ve hala bir veri gelmemiş ise gidip her yeri sıfırlayacaksın.
veri geldiğinde hem tmr1 hemde kes sayacını sıfırlarsan sayac sıfırlandığı için yeniden saymaya başlayacaktır.

Ete

gogoce

Alıntı yapılan: ete - 12 Şubat 2016, 07:32:10
o işin tek çaresi var. Alıcıda ilk veri geldikten sonra tmr1 sayacını çalışıtıracaksın ve geri planda çalışacak.
sayacı 100 veya 200 ms süreye ayarlayacaksın ve kesme açmadan kesme bayrağı 1 olmuşmu (Pır1.0) diye bakacaksın.
1 olmuş ise Kes=kes+1 deyip bayrağı sıfırlayacak ve yeniden saymaya yollayacaksın. kesme sayısı istediğin zaman denk gelmiş ve hala bir veri gelmemiş ise gidip her yeri sıfırlayacaksın.
veri geldiğinde hem tmr1 hemde kes sayacını sıfırlarsan sayac sıfırlandığı için yeniden saymaya başlayacaktır.

Ete

peki hocam if ler ile bunu sağlayamazmıyız meslela veri 6 then role1=1 else role1=0 gibi
Ne ukalayı affederim nede yapılan haksızlığı ...
Ya sus adam sansınlar , yada adam gibi kouş ilham alsınlar

İlyas KAYA

#5
Bu konu başlı başına bir sorun. Veri gelmediğinde veya yanlış geldiğinde bir sayaç saydırıp roleleri bırakabiliyorsunuz ancak bazen 1 sn bazen 2,3,4 diye gidebiliyor.

Ben bunu çözmek için şöyle bir yöntem kullanıyorum.

- Vericide ilk butona basıldığında diyelim ki giden veri 1 , ikinci buton 2 , 3ncü buton 3  diye gidiyor.
- Butondan elimiz bırakıldığında ise 0 bilgisini gönderiyorum . Peki ama butonu bırakınca devrenin enerjisi kesiliyor nasıl olacak ?
- Devre enerjilendiğinde bir tane darlington transistörü tetikliyorum. Bu darlingto transistör ise PIC beslemesini sağlıyor. Yani butona basıp bıraktık ama PIC artık çalışmaya devam ediyor. İstediğim işlemleri yapıp transistörün tetiklemesini kestiğimde ise artık PIC enerjisi de kesilmiş oluyor.

Böylece algoritma şu şekilde işliyor;
- Butona bastık , PIC enerjilendi
- Transistör enerjilendi. Artık butonu bıraksak bile veri göndermeye devam edebiliriz.
- Hangi butona basıldığı bulundu
- Basılı olan buton için RF den data gönderildi.
- Buton bırakıldı.
- Butonun bırakıldığı için veri "0" olarak devam etti.
- Transistör sinyali kesildi.
- PIC enerjisi ve besleme kapandı.

Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

Burak

#6
Birçok handikap var bu istenilen şeyde .. Kesintisiz iletişim hakikaten imkansız birşey ama en nihayetinde iki iletilmiş data arasındaki timeout süresi motoru bırakmaya durdurmaya yetecek kadarlık bir ideal ssüreden birazcık fazla olmalı .. Bu durumda 433 MHZ'lerde sürekli data iletimi en sonunda senkron kırılmasıyla nihayet bulacak sözde buton basılı kalsa bile ... Bu RF bobini ile alakalı bir durum çünkü endüktans lineer bölgede çalışmaya meğilli değil .. Bu durumda Örneğin 500 Ms'lik bir süre içinde birçok parazit ile aynı zamada asıl verimizde USART bufferlarımıza kaydırılacak ... Ama işte burada PREAMBL sinyali seçimi ve repeat değeri çok dikkatli seçilmeli ..

Pilli çalışma için ekteki devre tasarımını tercih etmen avantajın olur ..

NOT: Butonların bağlı olduğu pinlerde dahili pull-upların kullanıldığı varsayılmıştır ..

Burak
Ω Gens Una Sumus Ω

Powered by EzPortal