ır alıcı verici arası mesafe

Başlatan Emre MERMİ, 28 Ekim 2014, 02:20:39

Emre MERMİ

@CLR hocam teşekkürler yanıtınız için,

İnanır mısınız hiç metal müzik dinlemem. Lisenin ilk yıllarından kalma bir nick. Arkadaşın bir tanesi gelip "boşta elimde güzel bir nick var kullanır mısın ?" demişti benimde hoşuma gitmişti ondan kullanıyorum hala . Yani alışkanlık olmuş bizimkisi   :)

dediğiniz gibi önce bir kumanda alıp nedir ne değildir diye inceleyeceğim. ayrıca elimdeki modüller de dandik olabilir onları da değiştirip yeniden deniyeceğim. sonra ver elini haberleşme protokolleri. Yapıcağım şey  çok gerekli olduğundan da değil işte ama daldan dala atlayarak birşeyler öğreniyorum birşeyler araştırıyorum

HexfeT

Verdiğiniz dokümana bakılırsa kullandığınız alıcı modülün 38khz olmama ihtimali var. 30-33-36-38-40-56khz lik farklı modelleri var. Sizdeki acaba hangisi? Ayrıca taşıyıcı frekansla kesintisiz gelen sinyal ile çalışmayacağı da anlaşılıyor. Uyulması gereken zamanlama kuralları var.

Emre MERMİ

#17
verici ;
#include <16F628A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOMCLR

#use delay(int=4000000)
#use rs232(baud=2400, xmit=PIN_b2, stop=1, parity=n)

void main() {
   setup_timer_2(T2_DIV_BY_1,25,1);      //26.0 us overflow, 26.0 us interrupt

   setup_ccp1(CCP_PWM);
   set_pwm1_duty((int16)50);
   setup_comparator(NC_NC_NC_NC);
    setup_oscillator(osc_4mhz);

   while(TRUE){
  printf("a");  
      delay_ms(100); 
   }

}


alıcı

#include <16F628A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#use delay(clock=4000000)


int i=0;

#int_RDA
void  RDA_isr(void) {
disable_interrupts(int_rda);
i=0;
}



void main() {
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);

   while(TRUE){
      enable_interrupts(INT_RDA);
  i=i+1;
  delay_ms(50);
 if(i==30){
output_toggle(pin_a1);
delay_ms(100);
   }
   }
}


burada yapmaya çalıştığım verici belli 50 ms aralıklarla veri yollayacak alıcı eğer veriyi alırda haberleşme kesmesine giderse sorun yok ama belli bir süre haberleşme kesmesine gidemezse toggle yapacak.

mesaj birleştirme:: 28 Ekim 2014, 15:16:06

veya veriyi alamadığında toggle yapacak aldığında sorun yok :) bekleme süresi olarak böyle birşey yapmaya çalıştım aklıma ilk bu geldi. boardda çalıştıramadım ama. zaten hiçbir devrem ilk seferinde çalışmadı boardda. akşama doğru çalışır. :)


mesaj birleştirme:: 28 Ekim 2014, 15:16:43

yeni farkettim osilatör bağlamamışım ama yine de çalışmadı :) vardır yine biryerde hata

abstruse

Cevapların hepsini okuyamadım ama piyasadan aldığın ir alıcılarla ( bu üç pinli olanlardan bahsediyorum ) sürekli 38 khz bombardımanı şeklinde çalışamazsın kullandığın ürünün datasheetine bakarsan orada da bu detay yazmaktadır. Bu sebepten ötürü bir haberleşme protokolü kullanıp veri yollamalısın. Böyle yapmak sistemin içinde en doğrusu olur çünkü sadece 38 khz ye odaklı bir devre ortamda başka bir 38 khz yayan cihazdan etkilenebilir.
2. bir konuda led üzerinden fazla fazla akım basmak bence takılacağın son nokta olsun neden dersen evlerimizde ofisimizde vs. o kadar kumanda kullanıyoruz üzerine basit bir pil takıp aylarca kullanıyoruz bence bu cihazlar hiçte yüksek akım basmıyor zaten absulute maximum rating tablosunda 100ma genelde ledlerin forward akımı bu değere yaklaşmak ne üreticinin nede tasarımcının isteyeceği bir durum değil. Eğer o değerle sürekli kullanırsak led ömrü çok kısa sürde tükenir(evdeki amatör uygulamalarda bunu farketmezsinde ticari bir cihazının 3 sene sonra hepsinin geri döndüğünü düşünsene). Eğer kuralına uygun oynuyorsan 10ma akım basarak istediğin mesafelerin üzerine çıkabirsin. 10mA değerini sinyalinin lojik 1 olduğu andaki akım olarak söyledim.
İyi çalışmalar.

Emre MERMİ

@aliemren hocam cevabınız için teşekkür ederim ortak olarak verilen cevap sürekli 38 khz de çalıştırmamam sorun bundan kaynaklanıyor olabilir. Birde alıcı ve ya vericim çok kalitesi olabilir. hepsini deneyip bir sonuca vardığımda bunu yazacağım.

algos

1. sinyalini değiştireceksin (mesela, 30ms boyunca 10ms 38KHz gönder)
2. IR verici ledini BD135 gibi bir tr ile sür ve lede seri düşük değerli bir direnç bağlayıp verici beslemesine de 100uF-470uF bağlayacaksın.Bu kondansatör tuşa bastığında anlık yüksek akımlar almanı sağlayacaktır.

1956

PIC sız bir devre var 10m (33 feet) den bahsediyor.işinize yararmı bilmiyorum.
http://www.pcbheaven.com/circuitpages/Long_Range_IR_Beam_Break_Detector/