COMUNICACIÓN INFRARROJA



Este programa que pueda realizar una comunicación infrarroja empleando la codificación Manchester.

Además de que se requiere de haya un emisor y un receptor. En esta ocación yo seré el receptor y un compañero será el emisor. Se emplearán un LED infrarrojo y un módulo receptor que pueda modular la señal.
  • Código del receptor:
#include <receptor.h>
//recibe
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include <lcd.c>
int tecla,i;
#INT_EXT
void  EXT_isr(void) //interrupt service request
{
   delay_us(300); //para estar a la mitad del dato
   output_toggle(Pin_B5);//ve muestreo
   output_toggle(Pin_B5);
   if(!input(PIN_B0))
   {  delay_us(1200);
      for(i=0;i<=7;i++)
      {
         if(!input(PIN_B0))  
            bit_clear(tecla,i); //el 0 de la tecla lo pone en 0
         else 
            bit_set(tecla,i); //el 1 de la tecla lo pone en 1
         output_toggle(Pin_B5);
         output_toggle(Pin_B5);
         delay_us(1200);
        
      }
      if(input(Pin_B0)) tecla='N';//de que no es numero, si es basura muestra N
      lcd_gotoxy(10,2);
      lcd_putc(tecla);
   }
}
void main()
{
   enable_interrupts(INT_EXT);
   ext_int_edge( H_TO_L ); // detecta flancos de bajada
   enable_interrupts(GLOBAL);
   lcd_init();
   lcd_gotoxy(1,1);
   lcd_putc("SUSANA");
   lcd_gotoxy(1,2);
   lcd_putc("Tecla RX= ");
   while(TRUE)
   {
      output_toggle(Pin_B7);//para dejar espacio a la interrupción
   }
}
  • Código del emisor:
#include <clase11.h>
//transmite
#include <KBD.C>
#define LCD_ENABLE_PIN PIN_D0
#define LCD_RS_PIN PIN_D1
#define LCD_RW_PIN PIN_D2
#define LCD_DATA4 PIN_D4
#define LCD_DATA5 PIN_D5
#define LCD_DATA6 PIN_D6
#define LCD_DATA7 PIN_D7
#include <lcd.c>
int tecla, i, j;
void cero()
{
   //se modula a 600 us, entonces si fsk=38KHz, 600/26 = 23 pulsos
   for (i=0;i<=23;i++)
   {
      output_high(Pin_B0);
      delay_us(10);
      output_low(Pin_B0);
      delay_us(7);
   }
   delay_us(580);
}
void main()
{
   kbd_init();
   lcd_init();
   lcd_gotoxy(1,1);
   lcd_putc("SUSANA");
   lcd_gotoxy(1,2);
   lcd_putc("Dato TX= ");
   while(TRUE)
   {
      while (tecla=='\0')
         tecla= kbd_getc();
        
      lcd_gotoxy(1,2);
      lcd_putc("Dato TX= ");
      lcd_putc(tecla);
      cero();
     
      for(j=0;j<=7;j++)
      {
         if(bit_test(tecla,j))//ve que bit hay TRUE si es 1, FALSE si es 0
            delay_us(1200);
         else
            cero();
      }  
         cero();
         tecla='\0';
      }  
}

  • Simulación en Proteus:
  • Armado y ejecución:


No hay comentarios:

Publicar un comentario

Ultima entrada ingresada

SISTEMA DE RIEGO AUTOMÁTICO CON MÚSICA

El objetivo era hacer un programa que pueda activar una bomba de agua en la noche, y que por las mañanas reproduzca música para las plantas....