avatar_ete

IR_HABERLEŞME PROJESİ

Başlatan ete, 21 Haziran 2015, 18:44:10

ete

Sayfanın yukarısında senin TUSGIR yok dediğin yerde

Ete

blueboard

Ete Hocam, bu sefer hiç bir led yanmadı. Dosyanın son halini ekliyorum.
['****************************************************************
'*  Prog.Adı: IR_ALICI.BAS                                      *
'*  Yazan   : [*****ETE*********]                               *
'*  Notice  : Copyright (c) 2015                                *
'*          : Program hakları ETE'ye aittir izinsiz kopyalanmaz *
'*  Tarih   : 20.06.2015                                        *
'*  Versiyon: 1.0                                               *
'*  Açıklama:                                                   *
'*          :                                                   *
'****************************************************************
@ DEVICE pic16F628
@ DEVICE PIC16F628, WDT_Off
@ DEVICE PIC16F628, LVP_Off
@ DEVICE PIC16F628, PWRT_ON             'Power on timer açık
@ DEVICE PIC16F628, MCLR_Off
@ DEVICE PIC16F628, PROTECT_OFF         'Kod Protek kapalı
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT
'@ __config _BODEN_ON & _BOREN_ON & _CP_ON & _DATA_CP_ON & _PWRTE_ON & _WDT_ON & _LVP_OFF & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT
DEFINE OSC 4

CMCON = 7
PortA=0:TRISA=%00000001
PORTB=0:TRISB=%00000000

Paket var word 56
TAMAM VAR WORD 58
Tus   Var Byte 60
Cihaz Var Byte 61
IR_AL var BYTE(32)62

I     var Byte 100
Z     var BYTE
Led   var bit
symbol IR_Goz=Porta.0

PAUSE 300

'---------------------------------------------------------------------------
'Tus Kodları:


BASLA:

      gosub TUSGIR
      IF TUS=64 THEN  'ses +    01000000       
        PORTB.0=1
        GOTO BEKLE
      endif
     
      if tus=25 THEN     'ses- 00011001
         PORTB.1=1
         GOTO BEKLE
      ENDIF
     
      IF TUS=9 THEN   ' seek+ 000001001
         PORTB.2=1
         GOTO BEKLE
      ENDIF             
           
      IF TUS=7 THEN   'seek-  00000111
         PORTB.3=1
         GOTO BEKLE
      ENDIF
             
      PORTB=0
     
      GOTO BASLA
     
     
     
BEKLE:
      TUS=0:CIHAZ=0
      I=0:TAMAM=0:PAKET=0
       
       while I<30  'EN AZ 30 DEFA HEADER SİNYALİ ARAYACAĞIZ. BULURSAK NE ALA BULAMAZ İSE DÖNGÜDEN ÇIKACAĞIZ
         PULSIN IR_GOZ,0,PAKET
'         IF PAKET >200 AND PAKET <250 THEN BEKLE '2,25ms arada bir değer olacaktır
         IF paket>12000 then
           portb=0
           goto basla
         endIF   
         I=I+1
       WEND
       PORTB=0
       GOTO BASLA

     
TUSGIR:
       TUS=0:CIHAZ=0
       I=0:TAMAM=0:PAKET=0
       
       while I<30  'EN AZ 30 DEFA HEADER SİNYALİ ARAYACAĞIZ. BULURSAK NE ALA BULAMAZ İSE DÖNGÜDEN ÇIKACAĞIZ
         PULSIN IR_GOZ,0,PAKET
         IF PAKET >400 AND PAKET <500 THEN CIK '4,5ms arada bir değer olacaktır
         I=I+1
       WEND 

       IF PAKET<400 THEN RETURN
CIK:       
       PAUSEUS 10     'BURADA HEADER YAKALANMIŞ OLCAK ARDINDAN GELEN 32 BİT ALINACAK
       for I=0 to 31
         pulsin IR_Goz,0,IR_AL(I)   'YALNZCA HIGH BİTLERİNİ ALIP SÜRESİNİ KAYIT EDİYORUZ
       next
       
       CIHAZ=0 'ŞİMDİ ADRES (CİHAZ) KODUNU AYIKLIYORUZ İLK 8 BİT ADRES KODU OLACAK
AYIKLA:
       For I=0 to 7
         if IR_AL(I)>70 then CIHAZ.0[I]=1 '700us den büyük ise bu bit 1 dir (1=1690 us dir 0=560us dir)
       next

       TUS=0
       for I=0 to 7
         IF IR_AL(16+I)>70 then TUS.0[I]=1 '16 bit den itibaren gelen 8 bit ise komut bitleri oluyor
       next                                'benzer şekilde 700us den büyük olanı "1" dir kabul ediyoruz
       RETURN
       
END /code]

ete

Bu sefer hiç led yanmaması enteresan. Demekki çıkışta transistör yok bence.
Bu durumda yapacak fazla bir şeyim yok maalesef. Uzaktan bu kadar oluyor. Zor bir protokol.
Özellikle tuşa basıldığı anda yalnızca bir kere tuş ve cihaz kodunun verilmeside tuhaf. Bu şekilde kod yakalamak çok zor.
Ete

blueboard

Sizi çok yordum Hakkınızı helal edin.

ete

#64
Bu sistem de birden çok sorun var. En büyük sorunda tuş ve cihaz kodunun tek seferlik verilmesi ardından da repeat kodunun tuşa basıldığı müddetçe verilmesi. Düşündümde kesme ile belkide daha iyi sonuç alırız dedim. Verdiğin sinyal bilgilerine bakarak verici programı yeniden düzenledim. Kesmeye uygun yeniden simulasyon şeması hazırladım ve alıcı için iki ayrı program yazdım. Birisi sinyali IR_GÖZ çıkışından ters çevrilerek alıyor, diğeri ise IR_GÖZ çıkışına eklenen transistör ile yeniden tersi düze çevrilmiş olarak alıyor.
Yalnızca ters çevrilmişi denedim. Sorunsuz çalışıyor. IR_göz girişi PORTB.0 dan olacak röle veya led çıkışları PORTB.4-PORTB.7 arasında bağlı.

Sende dene bakalım gerçek devrede nasıl çalışacak?.

Ete


Edit: Düz olanı da simulede denedim oda çalışıyor. şemasınıda ekledim dosyaya

blueboard

#65
Ete Hocam, NEC_TERS_KES adlı program ile artık mükemmel bir şekilde çalışıyor. Sanırım IR göz çıkışı konusunda bir yanlış anlaşmamız olmuş. IR göz çıkışına transistörü PicKit2'ye bağlarken kullanmıştım. Gerçek alıcı devresinde göz direkt olarak Pic'e giriyordu.Bununla ilgili bir dosya ekliyorum.Ne kadar teşekkür etsem azdır. Elinize kolunuza sağlık.Dilerseniz RC5 ile çalışan bir uzaktan kumanda bulmaya çalışır,RC5 kodunu test edebilirim.Tabi isterseniz. Sonsuz teşekkürler.

ete

Bazı IR projelerinde göz çıkışı yeniden bir transistör ile terslenmektedir. Böylece göz çıkışı bire bir sinyalin kendisini verir. Aksi halde göz çıkışı gerçek sinyali tersleyerek vermektedir. Bu nedenle iki program hazırlamıştım. Kim ne kullanıyor ise kendi devresine göre tercih etsin. Şemalarıda mevcut. Madem sorunsuz çalışıyor o zaman bu projeyide Ete Projelerine ekleyeyim bari. Birinin işine yarar.

RC5 kondlarını zaten kendim de denemiştim. Evde çalışan devrelerim var. Onlar üzerinde bir şey yapmaya gerek yok. Belki benzer mantık ile daha kullanışlı bir program yazılabilir ama şu anda işlerim var uğraşamam.

Ete


blueboard


muyat

Hocam
Ben 16f628a'da a5 pinini giriş olarak kullanıp alıcı gözü bu pine bagladım.Diger pinler tamamen çıkış yaptım diyelim.
Bu durumda NEC protokolünü kullanırken TMR0 kesmesi mi kullanacağız?

ete

Bazen çok basit cevapları sorarak öğrenmek istediğinize hayret ediyorum.
Yukarıda programı vermişim. Az çok programdan da anlıyorsun . Açıp baksan o programa şu satırdan olayı çözeceksin;
INTCON=%10010000  'Kesmeler aktif ve RB0/INT kesmesi aktif
Bu satır şimdi TMR0 kesmesinimi işaret ediyor.? Elbette hayır.  O halde demekki program TMR0 kesmesi ile değil PORTB.0 kesmesi ile çalışıyormuş. Bu durumda söylediklerinin hiçbirisi mümkün değil demektir.
Bu sistemde alıcı göz PORTB.0 pinine bağlanmalıdır. Başka alternatifi yok maalesef.

Ete

ete

Sonunda elime bir NEC protokol ile çalışan IR - Elcik geçti. Yazdığım programları bu elcik ile denediğimde gördümkü bir çok aksaklık var. Brinci aksaklık ki en önemlisi sistem uzun gelen HIGH (normalde bu LOW dur ancak göz bunu ters çevirerek dışarı HIGH vermektedir) bir türlü uygun yerden yakalanamıyor. Onu yakalıyor belki program ama hemen ardından REPEAT kısmında benzer uzun HIGH sinyalleri mevcut ve butona bastıkça bunlar tekrarlanıyor.
İkinci aksaklık ise 4Mhz çalışma frekansı bu sinyalleri yakalamakta zorlanıyor yada yetersiz kalıyor. Bu nedenle en ufak bir komut gecikmesine bile tahammülü yok sistemin.
Bütün bunları göz önüne alarak taktik değiştirmek zorunda kaldım. Öncelikle Düşen kenar kesmesi kullanmak akıllıca olacak idi. Zaten öyle yapmıştık. Bu bize 9,4ms lik ilk low palsini yakalama fırsatı veriyor. Böylece kesmeye girdikten sonra orada başka bir şey yapmayıp sadece bir sonraki gelecek olan HIGH pulsinin süresini ölçmek gerekiyor. Zira ipucu muz bu sinyal. Sonraki tekrarlama sinyallerinden kaçınmak için bu sinyalin 4,5 ms lik süresinin yakalanması gerekiyor. Bu nedenle Pulsin değeri 450 civarında değilse yada en azından 400 den küçük ise kesmeden çıkmak ve yeniden sinyal beklemek gerekiyor.
Bu şekilde çok stabil bir düzen tutturdum.
Çalışan bir örnek ilişiktedir. Başka işlemcilere uygulayabilirsiniz. Bunu 12F683 ile yapmış idim. Benim örnek de kullandığım verici piyasadaki digital radyoları çalıştırmakta kullanılan veya bazı RGB led sürücülerine komut vermede kullanılan basit küçük bir verici. Maalesef tuşlar üzerinde yazan bilgi ile standart nec tuş kodları bir biri ile bağdaşmıyor. Benimkileri lojik analizör ile bakarak tespit ettim.  Buda bana enteresan geldi. Daha sonra bir Goldmaster cihazın kumandası elime geçti. Üerinde bu yazıyor ama neye kumanda ediyor bilemiyorum. Baktım tuş yerleri değişmiyor ama tuşun üzerindeki ifade değişiyor. Anlaşılan NEC protokolü kullananlar tuşlara kafalarına göre isim veriyorlar.
Ete


coco

#71
Merhaba
Sony tv kumandasıyla Alıcı uygulamasını kurdum kumandanın  2,3,4,5 buttonlarıyla ilgili ledleri yakıp söndürebiliyorum



2.butonuna bastığımda ledin yanık kalmasını diğer 3. butonuna bastığımda ilk ledin sönüp diğerinin yanık kalmasını 4. ve 5'ci butonların görevlerinin aynı kalmalasını nasıl sağlarım.


ete

Keşke tuş numaralarına göre konuşsa idin.
1 nolu tuşdan hiç bahsetmemişsin ama programda 1 nolu tuş kontrolü var. Ben ilk led diye onu kabul ederim sen ise ilk led demişsin ama hangisi ilk led?
2 nolu butonda sadece ledin yanık kalması sağlanıyor zaten başka bir komut yok o halde bunu pas geçmek lazım.
4 ve 5 butonlarıda 4-5 ledelrini yakıyor sadece söndüren yok.

Sen 2-3-4-5 butonları demişsin programda 1-2-3-4 butonları var. Bir sürü çelişki var bu işte doğru bilgi verirsen ilgilenirim.
Her bir buton numarası ile ve sırası ile ne iş yapacak tek tek belirt istersen.

Ete

coco

#73
Benim elimdeki Sony kumandasında 2,3,4,5 butonlarıyla program çalıştığı için bu şekilde yazdım
O zaman şöyle yazayım
1.butona basıp bıraktığımda PortB.0 yanık kalsın
2.butona bastıp bıraktığımda PortB0 sönüp Portb1 yanık kalsın
3 ve 4  butonlarından herhangi birine basılıp bırakıldığında PortB0 ve PortB1 Ledlerinden bağımsız Çalışsın  Sönmesin
3.butona basıp bıraktığımda PortB.2 yansın bırakıldığında sönsün
4.butonda aynı şekilde

Ben bu yapmak isteğimi iki ayrı pic ve iki ayrı alıcı  göz ile yapabiliyorum Tek picle yapabilirsem daha iyi

ete

Sen istediğini anlatmakta zorlanmıyorsun ben anlamakta zorlanıyorum.
Şu yazdıkların ne anlama geliyor?
"3 ve 4  butonlarından herhangi birine basılıp bırakıldığında PortB0 ve PortB1 Ledlerinden bağımsız Çalışsın  Sönmesin
3.butona basıp bıraktığımda PortB.2 yansın bırakıldığında sönsün
4.butonda aynı şekilde"
Bir yandan 3-4 butonları bağımsız çalışsın ve onlara bağlı sırlaı ledler sönmesin diyorsun bir yandan da
3. butona BASIP BIRAKTIĞIMDA PortB.2 yansın BIRAKILDIĞINDA sönsün.
Sence bu bir çelişki değilde nedir? Cümlenin başında basıp bırakıldığında yansın sonunda bırkıldığında sönsün demekle benimkafamı karıştırıyorsun yalnızca.
Çok mu zor şunu tane tane dikkatlice anlatmak.

Bu yazdıklarından çıkardığım sonuca göre bir şeyler yazdım. Artık gerisini sen hallet ne diyeyim !!!.
 gosub TUSGIR
      IF TUS=1 THEN  'AÇMA - KAPAMA       
        PORTB.0=1
        GOTO BASLA
      endif
     
      if tus=2 THEN           
         WHILE TUS=2
           GOSUB TUSGIR
         WEND
         PORTB.0=0
         PORTB.1=1           
         GOTO BASLA
      ENDIF
     
      IF TUS=3 THEN
         PORTB.2=1
         GOTO BASLA
      ELSE
         PORTB.2=0   
      ENDIF             
           
      IF TUS=4 THEN
         PORTB.3=1
         GOTO BASLA
      ELSE
         PORTB.3=0   
      ENDIF             
   
      GOTO BASLA

Powered by EzPortal