You are on page 1of 6

Comunicación bidireccional inalámbrica con módulos RF

controlada por Microcontroladores PIC16F84A


El siguiente trabajo es una memoria de una práctica de comunicación inalámbrica con
sistemas de RF controlados por un microcontrolador PIC16f84 programado en CCS.
Material y equipo:

 2 Pic16f84a  2 resistencias de 1.1MΩ


 2 cristal de cuarzo 4Mhz  2 resistencias de 56kΩ
 4 Capacitores 22pF  1 pulsador
 Programador para PIC´s  Modulo RF 315Mhz
 Compilador CCS  Modulo RF 433Mhz
 8 LED´s  2 HT12-D
 8 resistencias 330Ω  2 HT12-E
 8 resistencias 1kΩ  Fuente de 5v
Cada circuito está en modo de espera hasta que se presiona el pulsador, se manda una
señal que activa la transmisión de datos inicialmente el dato 1 (0001) hasta el 7 (0111), en
este caso solo utilizamos tres bits, pero se pueden utilizar los cuatro de requerir más
datos. Cada vez que se presiona el pulsador se aumenta el dato, es decir, transmite el
dato 1, después el 2, 3, 4, 5, 6, 7, 1 y se cicla en ese orden.

Los pines A0 hasta A7 tanto del HT12E como del HT12D deben de estar en el mismo
orden, es decir, si se tiene conectados todos estos pines a tierra en el HT12E, en el
HT12D también se deben conectar todos a tierra, estos definen la dirección del canal con
el que se va a trabajar por eso deben de estar sincronizados.

En el diagrama no se incluye los componentes adicionales al microcontrolador estos se


pueden encontrar en la hoja técnica, los leds se pueden conectar por medio de una
resistencia de 300Ω a los pines de datos AD8 hasta AD11 para poder visualizar los datos
que llegan.

El siguiente programa esta compilado en CCS y es el correspondiente a la lógica que se


explicó anteriormente.
#include <16f84a.h>

#FUSES NOWDT
#FUSES XT
#FUSES NOPUT
#FUSES NOPROTECT
#use delay(clock=4000000)
#BYTE PORTB=6
#BYTE PORTA=5

/////////////////////////////////////////////////////
//Comunicación Inálambrica con RF
////////////////////////////////////////////////////
VOID MAIN ()
{
set_tris_a(0xFF);
set_tris_b(0x00);

//Todo el puerto B a cero


output_b(0x00);
//enable trasmisor off se deshabilita la transmisión
output_high(PIN_B4);
delay_ms(500);
int x=0;

While (TRUE)
{
//Sí el pulsador es presionado
If(input(PIN_A4)==1)
{
//Se aumenta una unidad a x
x++;
//Cada vez que se presiona el pulsador "x" cambia de valor
//y entra en cada "If" a cada valor que toma en ese momento
If(x==1)
{
//enable trasmisor on se habilita la transmisión
output_low(PIN_B4);
//1
output_high(PIN_B0),output_low(PIN_B1), output_low(PIN_B2);
delay_ms(1000);
output_low(PIN_B0),output_low(PIN_B1), output_low(PIN_B2);
delay_ms(200);
output_high(PIN_B4);
//enable trasmisor off se deshabilita la transmisión
delay_ms(200);
}

If(x==2)
{
//enable trasmisor on
output_low(PIN_B4);
//2
output_low(PIN_B0),output_high(PIN_B1), output_low(PIN_B2);
delay_ms(1000);
output_low(PIN_B0),output_low(PIN_B1), output_low(PIN_B2);
delay_ms(200);
//enable trasmisor off
output_high(PIN_B4);
delay_ms(200);
}

If(x==3)
{
//enable trasmisor on
output_low(PIN_B4);
//3
output_high(PIN_B0),output_high(PIN_B1), output_low(PIN_B2);
delay_ms(1000);
output_low(PIN_B0),output_low(PIN_B1), output_low(PIN_B2);
delay_ms(200);
//enable trasmisor off
output_high(PIN_B4);
delay_ms(200);
}

If(x==4)
{
output_low(PIN_B4);
//enable trasmisor on
//4
output_low(PIN_B0),output_low(PIN_B1), output_high(PIN_B2);
delay_ms(1000);
output_low(PIN_B0),output_low(PIN_B1), output_low(PIN_B2);
delay_ms(200);
//enable trasmisor off
output_high(PIN_B4);
delay_ms(200);
}

If(x==5)
{
//enable trasmisor on
output_low(PIN_B4);
//5
output_high(PIN_B0),output_low(PIN_B1), output_high(PIN_B2);
delay_ms(1000);
output_low(PIN_B0),output_low(PIN_B1), output_low(PIN_B2);
delay_ms(200);
output_high(PIN_B4);
//enable trasmisor off
delay_ms(200);
}

If(x==6)
{
//enable trasmisor on
output_low(PIN_B4);
//6
output_low(PIN_B0),output_high(PIN_B1), output_high(PIN_B2);
delay_ms(1000);
output_low(PIN_B0),output_low(PIN_B1), output_low(PIN_B2);
delay_ms(200);
output_high(PIN_B4);
//enable trasmisor off
delay_ms(200);
}

If(x==7)
{
//enable trasmisor on
output_low(PIN_B4);
//7
output_high(PIN_B0),output_high(PIN_B1), output_high(PIN_B2);
delay_ms(1000);
output_low(PIN_B0),output_low(PIN_B1), output_low(PIN_B2);
delay_ms(200);
//enable trasmisor off
output_high(PIN_B4);
delay_ms(200);
x=0;
}
}

Else

{
output_low(PIN_B0),output_low(PIN_B1), output_low(PIN_B2);
}
}
}

You might also like