Geçen gün infared iletişim protokollerininin ne demek olduğunu ve nasıl geliştirildiğini anlatmıştım.  Şimdi bununla ilgili olan basit bir uygulamayı anlatmaya çalışacağım.  Bunu yine bir microcontroller  ile yapmamız gerekecek.    Siz isterseniz 16f628a yı ya da ccp modülü olan herhangi bir controllerı seçebilirsiniz.

İletişim için ayriyeten bir protokol oluşturmaya gerek yok. Zaten hazır protokoller mevcut. Seri iletişim için hazır olan bu protokolleri kullanabiliriz.  Bu yüzden 16f877 nin RS232 iletişim protokolünü kullanıyoruz.  RS232 protokolü asenkron seri haberleşme protokolüdür.  Şimdi bu protokolü kullanarak ınfrared led ile bilgileri kablosuz olarak aktarmamız gerekiyor. Bunun için geçenki yazımda da değindiğim gibi ilk olarak taşıyıcı sinyale ihtiyacım var.   RS232 protokolü ile elde ettiğim bilgi sinyalini bu  taşıyıcı sinyale modüle etmem gerekiyor.

Taşıyıcı sinyali controller ın CCP modülü ile elde edebilirim.  Yahut herhangi bir osilatör kaynağı da kullanabilirim. Ama şimdilik taşıyıcı sinyalini, kullandığım denetleyicin CCP modülünün pwm sinyali ile elde edeceğim.

Sinyali şu şekilde modüle ediyoruz;

nasıl

Şimdi bu devreyi göz önünde bulundurduğunuzda,  bilgi sinyalimin logic-0 olduğu durumlara bakar isek ledin yanıp sönmesi taşıyıcı sinyalin logic durumuna bağlı olacaktır. Yani eğer bilgi sinyali, logic-0 durumunda ise IR-led taşıyıcı sinyalin durumuna göre yanıp sönecektir. Fakat bilgi sinyalinin logic-1 olduğu durumda, taşıyıcı sinyali hangi durumda olursa olsun led yanmaz çünkü ters polarlanmış olur.

Doğal olarak ben sinyali modüle ederken  aynı zaman da ters de çevirmiş oluyorum. Yani bilgi sinyalinin logic-1 durumlarını logic-0 olarak, logic-0 durumlarını ise logic-1 olarak göndermiş oluyorum. Bunun sebebi; alıcı ile alakalıdır. Geçenki yazımda alıcının yapısından bahsetmiştim. Alıcı sinyal almadığı zamanlarda çıkışına  logic-1 bilgisi gönderirken sinyal aldığında logic-0 bilgisi gönderdiği için vericiden sinyali ters çevirip yollamamız gerekiyor. Yani aslında biz sinyali ters yolluyoruz ama alıcı o ters sinyali tekrar düze çevirip alıcı denetleyiciye  yolluyor.

Uygulamada şunu yapacağım;  vericiden RS232 protokolünü kullanarak alıcıya text bilgisi göndereceğim ve alıcı bu bilgiyi alarak 300 ms aralıklarla “Yusuf Bulbul”, “Infrared Iletisim” yazılarını basacak.

Doğal olarak iki tane devremiz olacak. Birisi alıcı birisi verici.

Alıcı Devresi;

alıcı

Verici Devre;

Verici

Taşıyıcı sinyalim şu şekilde;

taşıyıcı

Bu sinyal denetlyicinin CCP1 modülünü kullanarak ve  setup_timer_2(T2_DIV_BY_1,25,1); komutu ile oluşturulmuştur. 38khz dir.

Bilgi sinyalim;

bilgi

Bu sinyal rs232 protokolünün printf(“…../r”) protokolü kullanılarak oluşturuluyor ve alıcıya text bilgileri yollanıyor.

Bu da modüle edilmiş sinyal;

modüleli

Alıcı programı;

#include<16f877>

#Fuses<XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD #use_delay(clock=4000000) #define use_portb_lcd #include<lcd.c>

#use_rs232(baud=2400,rcv=pin_C1,stop=1,parity=n)

char data[16];

void main()
{
setup_psp(PSP_DISABLED);

setup_timer_1(T1_DISABLED);

setup_timer_2(T2_DISABLED,0,1);

setup_adc_ports(NO_ANALOGS);

setup_adc(ADC_OFF);

setup_CCP1(CCP_OFF);

setup_CCP2(CCP_OFF);

lcd_init();

delay_ms(2000);

while(1)

 {
 if(input(pin_c1)==0)
 {
gets(data);

printf(lcd_putc,"\f%s",data);

delay_ms(1200);

printf(lcd_putc,"\f");

 delay_ms(500);
}

 

 

Verici Programı;

#include<16f877.h>

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD

#use delay(clock=4000000

#use rs232(baud=2400,xmit=PIN_C6,stop=1, parity=n) 

void main<()
{

setup_psp(PSP_DISABLED);

setup_timer_1(T1_DISABLED);

setup_adc_ports(NO_ANALOGS);

setup_adc(ADC_OFF);

setup_CCP2(CCP_OFF);

setup_timer_2(T2_DIV_BY_1,25,1);

set_pwm1_duty(12);

setup_CCP1(CCP_PWM);

while(1)

{
 printf("Yusuf Bulbul\r");

 delay_ms(300);

}

Dökümanlar için; Kızıl Ötesi İletişim Uygulaması

3 YORUMLAR

CEVAP VER

Please enter your comment!
Please enter your name here