ınfrared verici

Başlatan hasanb, 01 Kasım 2011, 21:55:58

ete

Yazdıklarıma pek dikkat etmediğin anlaşılıyor.
Ne demiştim.?  Verici de yollanan bilgi terslenerek yollanacak demiştim.
Peki sen ne yapmışsın yollananı düz alınanı terslemişsin.
Vericideki ;
SerOUT2 CIKIS,396,["E","T","E",VERI]
satırını
SerOUT2 CIKIS,16780,["E","T","E",VERI]
şeklinde değiştir.

Alıcıdaki;
SerIn2 GIRIS,16780,[WAIT ("ETE"),AL]
satırını ise,
SerIn2 GIRIS,396,[WAIT ("ETE"),AL]
şeklinde değiştir.

Ete


pwm3434

ETE  hocam dediklerinizi yapmaya çalıştım  sorun  yine  aynı  data olarak  200'ü gönderiyorum alıcı 200'den farklı rakamlar  alıyor.nerden çıkıyor  bu rakamlar anlıyamadım hocam :) şu sorunu çözseydik  tekrar kodu  ve kurduğum devreyi yükledim
verıcı
@ DEVICE pic16F628                      'işlemci 16F628A                               
@ DEVICE pic16F628, WDT_on              'Watch Dog timer açık
@ DEVICE pic16F628, PWRT_ON             'Power on timer açık
@ DEVICE pic16F628, PROTECT_OFF         'Kod Koruma kapalı
@ DEVICE pic16F628, MCLR_OFF             'MCLR pini kullanılıyor.
@ DEVICE pic16F628, INTRC_OSC_NOCLKOUT  'Dahili osilatör kullanılacak
    PORTA=0:PORTB=0
    TRISA=0:TRISB=0
    VERI     VAR BYTE
    CIKIS    VAR PORTA.0
    OPTION_REG.7=0
    TRISB.3 = 0
    CMCON=7
    '38 khz pwm band üretimi
    PR2 = 25     
    CCPR1L = 13 
    CCP1CON = %00001100 
    T2CON = %00000100
    prescale
    VERI=0
BASLA:
    VERI=200 
    SerOUT2 CIKIS,16780,["B","B","B",VERI]
    SerOUT2 CIKIS,16780,["B","B","B",VERI]
    pause 20
GOTO BASLA
----------------------------------------------------------------------------------
alıcı
INCLUDE"tanım_16f628A"
INCLUDE"tanım_LCD"
PORTA=0:PORTB=0
TRISA=%00000001   'A portu A.0 giriş diğerleri çıkış yapıldı.
TRISB=%00000000   'B portu tamamı çıkış yapıldı.
AL     VAR  byte
GIRIS  VAR  PORTA.0
OPTION_REG.7=0   
CMCON=7
CLEAR     
PORTB=0:AL=0:GIRIS=0
LCDOUT $FE,1              'Önce Ekranı siliyoruz.
LOW PORTB.2          'RW bacağı ekrana yazmaya imkan vermek için LOW yapıldı.
PAUSE 200       
LCDOUT "RRRRRRRRRRRRRR"
BASLA:
SerIn2 GIRIS,396,[WAIT ("BBB"),AL]                                             
LCDOUT $FE,$C0,#AL,"   ALINDI"
GOTO BASLA


nurim

İstediğin gibi data değeri ne ise alıcıda o değeri ( "200" ) görürsün.Yapılan değişiklikleri iyice incelemelisin.
Kolay Gelsin
nurim

ete

#48
Sorun senin devrende olsa gerek. Birde kullandığın IR göz 38Khz lik olmayabilir. Bunları kontrol etmen gerekiyor.
Her IR göz bir birinin yerine kullanılmaz. Alman gereken göz 38Khz lik olması gerekiyor.
Senin programlarınıda denedim isis de çalışıyor. Sorun yok yani.
Bak Nurim de benzer şekilde yapmış oda aynı şekilde çalışıyor sorunsuz olarak.
Devreni ve özellikle IR göz'ü kontrol etmelisin.
Ete

pwm3434

#49
ETE  hocam teşekkür ederim
dediğin gibi tk19  lar sorunlu  sanırım çalışma frekansları farklı. nerden bileyim hocam satıcının denen insan bana bu tk19ları verdi 38 khz olarak allahtan ki başka bir firmadan aldığım tk19 ları deneyince sorun  kalmadı.   hocam tk19'un vdd ce gnd'sine paralel filtre eden 1uf'luk kondansatör atmadığım zaman çalışmıyor  sayenizde şimdilik bu kadar   bir şeyler yapabildim.

ete

Satıcılarda dahil çoğu kişi TK19 varmı deyince size bir göz veriyorlar. Ama TK19 ların 36Khz lik olanı, 38Khz lik olanı ve 40 Khzlik olanları mevcut. Bu nedenle alırken bana kalırsa TK19 diye değil 38Khz lik göz vermı diyerek sorup almak daha doğru olur. Bu elemanların bazılarının direk isimleri içinde 38 rakamı bulunmaktadır 1738 gibi mesela.

Ete

Burak

#51
Merhaba ;

Benim bir sorum olacaktı ...

Telefunken'in ürettiği TK19 veya VISHAY tarafından üretilen TSOP4838 gibi alıcı gözlerin datasheet'lerine baktığımızda sürekli olarak bir kaynaktan gelen örneğin 38KHZ bir sinyalin suppressed edildiğini , bastırıldığını söylüyor , bir gap time , boşluk süresi bırakılması gerekliliği formüllerle açıklanmış ... Fakat yazılanları incelediğim kadarıyla PIC16F628A'nın programdan bağımsız bir pinden sürekli olarak ürettiği 38KHZ'lik bir sinyal ile data bindirimi aracılığı ile iletişim sağlanıyor ? Anlamadığım şey cihaz belirttiğim gibi bir GAP time'a ihtiyaç duyarken alıcı göz nasıl oluyorda sürekli olarak 38KHZ'lik sürekli bir sinyali noise olarak görmüyor ... hatta işliyor ve çalıştırıyor ? Bu soru gerçekten günlerdir kafamı çok kurcalıyor ... Yardımcı olursanız sevinirim ...

Şimdiden teşekkürler ..
Ω Gens Una Sumus Ω

ete

Anlamadığın şey bir data sinyalinin oluşturulma şeklidir. Bu sinyal iki kısımdan oluşuyor. Birisi taşıyıcı sinyal diğeride asıl kullanacağın data sinyalidir. Data sinyali taşıyıcı olan 38 khz üzerine bindirilir. Alıcı göz taşıyıcı kısmını ayıklar böylece elinde net sinyalin kalır. Örnekle açıklayayım.
%01001010 şeklinde bir data sinyalin olsun bunu IR yolu ile yollayacaksın  elinde birde 38 khz lik kare dalga kaynağın olması gerekiyor. Data sinyalini 7 bitten itibaren 38 khz lik sinyale bindireceğiz.
Bit7=0 olduğundan sinyal çıkışı bit süresi kadar low dur.
Bit6=1 olduğundan sinyal çıkışın bit süresi kadar 38 khz dir.
Bit5=....
Bu şekilde bir sinyal şekli oluşturulur. Uzaktan bakınca bununda bir nevi kare dalga olduğunu görebilirsiniz. Tek farkı high kısımları düz high olmayıp 38 khzlik bir sinyalden oluşur. İşte bu özellik sinyale parazit ve özellikle IR sistemlerde gün ışığı etkisi bu yöntemle ortadan kaldırılır.
Alıcı göz  gelen sinyali ters çevirip low geldiğinde high ve 38 khz lik kısmı süzerek o kısmın düz low olrak çıkmasını sağlar. Sonuçta yolladığının tersini göz çıkışından almış olursun.
Ete

Burak

Peki öyleyse yanlış anlamadıysam , %11111111 şeklinde bir bayt bilgisi gönderirsem , gözün bunu algılamaması gerekmektedir , değil mi ?

Ayrıca , serout ile gönderdiğim komutun veri gönderme hızı veya frekansı , 38 KHZ'lik kare dalganın frekansından küçük olması lazım değilmidir , çünkü şöyle düşündüm ,

Sonuçta 38KHZ'lik sinyalin high durumdaki herhangi bir puls'i serout ile gönderdiğimiz tek bir single bitin gönderilme süresi ve uzunluğundan küçük olmalıdır ki onu yeterli uzunlukta bir duty-cycle süresince taşısın ? Acaba yanılıyor muyum , gerçekten kafa karıştırıcı bir teori benim için  ?

Cevabınız için şimdiden teşekkür ederim  ..
Ω Gens Una Sumus Ω

ete

Hiçde öyle değil. Bak bu söylediğine bakarak IR haberleşmede protokolün ne kadar önemli olduğu ortaya çıkmaktadır.
Protokol bir bit süresinin diyelimki 500 us olduğunu söylese ve sende aldığın sinyallerin sürelerine bakarak bunu 8 bitlik bir %11111111 bilgisi olduğunu kolayca anlardın. Ama ortada protokol bilgisi yok ise Göz çıkışından %11111111 sinyali süresince HIGH çıkacaktır. Bunu ister 1 bit ister 8 bit ister 16 bit olarak algıla önem arzetmiyor.
Ama verdiğin gibi almak istiyor isen alıcı senin verdiğin bilginin süresini yada şeklini bilmesi gerekir ki bunada protokol deniyor.
Aşağıdaki linke bakarsan Sony SIRC protokolünün şekli ve sinyal süreleri açıklanmış Orada sinyaliçindeki 38Khz lik kısmıda görebilirsin.

http://www.sbprojects.com/knowledge/ir/sirc.php

Elbette data bir frekansa sahip bir sinyal değildir. Bir bilgidir yalnızca. Ama bilgiyi oluşturan bitlerin süreleri olmalıdır. Ratsgele bir sistemi alıcının çözmesi mümkün değildir. 

Ete

Burak

Çok teşekkür ederim , gerçekten çok faydalı oldu ... !
İyi çalışmalar ..
Ω Gens Una Sumus Ω

Burak

Merhaba ;
Ben sizin ISIS'te yaptığınız verici devresini kurduktan sonra "VE" kapısının ucuna bir frekans ölçer koydum , ve 28 KHZ gibi bir değer ölçtüm ama halbuki bizim o devrede vericimizi 38KHZ'te kullanmamız gerekmiyor mu ? Çünkü alıcı gözümüz 38KHZ'te çalışmıyor mu ? Lütfen beni bilgilendirin ...

Teşekkür ederim ...
Ω Gens Una Sumus Ω

ete

Hangi devreden bahsediyorsun anlamadım. Ama elbette taşıyıcı 38Khz olacak ise ölçüm 38Khz çıkmalıdır.
Frekans ölçümü Ve kapsının 38Khz girişinden ölçülmelidir. Ve kapısı çıkışndan ölçüyosan data sinyaline bağlıolarak sinyalin LOW olduğu durumda kesilme meydana gelcek ve buda frekans ölçümünü aksatacaktır.

Ete

Burak

Alıntı yapılan: ete - 01 Temmuz 2012, 09:15:28
pwm3434,

Verilen programı inceleyenler yanılmasın hem verici hem alıcı programı birlikte vermiş PWM3434.
Verici yi incelerseniz yada çalıştırırsanız,  PortA.0 pininden yalnızca seri iletişim bilgisinin , PortB.3 den ise 38Khz lik kare dalga sinyalinin çıktığını görebilirsiniz.

Sistem bu hali ile istenenleri yapmakta uzak tabiiki. Zira TK19 , PortA.0 dan yollanan sinyali alır ise hiç bir şey çözemez.
Yalnızca PortB.3 den yollanan sinyalide alır ise hiç bir şey çözemez. Peki ne yapmak lazım.
Ne lazım olduğunu eklediğim isis devresinde görebilirsiniz.  EKlediğim devrede bir AND kapısı kullanarak iki sinyali birleştirdim.
AND kapsının çıkışından aldığınız sinyali modüle edilmiş sinyaldir. Bu sinyale dikkat ederseniz PortA.0 da sinyal LOW olduğu anda AND kapısı çıkışıda LOW olmaktadır. PortA.0 da sinyal HIGH olunca AND kapısı çıkışı ise 38Khz lik sinyale bindirilmiş HIGH sinyali şekline dönmüş olur.  şimdi bu modüle edilmiş sinyaliTK19'a girerseniz çıkışından aynen PORTA.0 dan çıkan sinyalin tersini alırsınız.
Bu nedenle alıcı programda SERIN komutunda ters çevrilmiş sinyal komutu verilmelidir.

Ete

Edit_1: Isis de IRLINK (IR_Göz) elemanını kullanarak yollanan verinin tersinide oluşturdum. Bu nedenle aşağıdaki RAR dosyasını yeniledim.

Edit_2:
İşi biraz daha ileri götürerek hem alıcı hemde vericiyi aynı devreye kurdum. Birinin verdiğini diğerine aldırdım. Burada dikkate dilecek husus verici devrede yollanan bilginin terslenerek yollanmasıdır. Alıcı normal alacak ama verici veriyi ters çevirerek yollayacaktır.  Buna ait dosylar yine ilişiktedir.

Hocam bu gönderinizde paylaştığınız dökümanlardaki verici devresindeki kapının ucunda IRLINK elemanının girişindeki sinyal 38 KHZ olmadığı zaman bunu alıcı göz nasıl algılayacak , şayet 38KHZ'de çalıştığını biliyoruz ... ?
Ω Gens Una Sumus Ω

ete

#59
Bahsettiğin sistemde 38Khz lik sinyal pic tarafından HPWM olarak üretilmekte ve CCP1 pininden çıkartılmaktadır.
Çıkan sinyalin peryodunu skop ile ölçersen yaklaşık 26us civarında olduğunu kolaylıkla görebilirsin. Buda yaklaşık 38400 hz lik bir sinyale eşdeğerdir.  Aynı yere frekansmetre bağlandığı zaman ölçülen sinyal değeri ise 38461 Hz dir. Bir yanlışlık göremiyorum.
Program kodlarını kontrol edersek. 38Khz lik bir sinyal için ;
PR2=25 olmalı. ve TMR2 bölme oranı ise 1/1 olmalıdır.
Programa bakarsak;
PR2=52  ve T2CON=%00000100  şeklinde istenen değerler verilmiş durumda. Geriye programın da bu komutlara uyması beklenir.

Bir sinyalin frekansını ölçebilmek için o sinyalin sürekli olması gerekir. Arada bir kesilen sinyal frekansının yanlış ölçülmesi kaçınılmazdır. Sanıyorum And kapısı çıkışından sinyal ölçüyorsun. Peki hiç skop ile o çıkışa baktınmı gelen sinyal ne şekilde geliyor. Anlatılanlarıda anlamadığın ortada. And kapısı çıkışında bindirilmiş sinyal yada module eidlmiş sinyal vardır. Data nın LOW olduğu anlarda sinyal çıkışı LOW da bekler. Data High ise sinyal 38khz olarak çıkar. Anlayacağın o sinyal bir gelir bir kesilir. Ölçümlerini CCP1 pininden yaparsan çıkan sinyalin kaç Khz olduğunu kolaylıkla görebilirsin.
And kapısı zaten data sinyalini 38Khz üzerine bindirme işlemini yapmaktadır. Dolayısıyla onun çıkışından frekans ölçmek hatalıdır.

Ete

Powered by EzPortal