Comunicación por RF con microcontrolador

download Comunicación por RF con microcontrolador

of 12

description

Comunicación RF, microcontroladores atmega

Transcript of Comunicación por RF con microcontrolador

  • PROYECTO #3: COMUNICACION RF.

    Flores Ch. Fernando Ramirez G. Oscar,Tola A, Jaird

    Escuela Militar de Ingeniera, Ingeniera en sistemas electronicosLa Paz - Bolivia

    fer-flores [email protected]

    [email protected]

    [email protected]

    20 de junio de 2014

    Resumen

    En el presente artculo se realizara la implementa-cion de comunicacion inalambrica, en radiofrecuen-cia, con modulos RF disponibles en cualquier tiendade electronica, para activar circuitos a distancia.

    Terminos clave:Comunicacion por radiofrecuen-cia.

    1. INTRODUCCION.

    Un modulo RF es un circuito preconstruido y pro-bado; viniendo en pares, uno de recepcion (Rx) y otrode transmision (Tx) con bajo costo. Con rango consi-derable longitud de onda, variando la distancia a unmaximo de 200 metros. Con capacidad de 1000 bitspor segundo.

    Figura 1: Modulos RF

    2. OBJETIVOS.

    2.1. OBJETIVO GENERAL.

    Realizar comunicacion a distancia entre circuitosmediante modulos de radio frecuencia.

    2.2. OBJETIVOS ESPECIFICOS.

    Realizar la comunicacion con protocolo serial en-tre AVRs con un transmisor y tres receptores.

    Implementar y corregir errores de transmision enla comunicacion RF.

    Desplegar la informacion del protocolo de mane-ra clara al usuario.

    3. MARCO TEORICO.

    3.1. MODULOS RF.

    Como se detallo anteriormente, los modulos RF sondispositivos que facilitan la comunicacion inalambri-ca, de bajo costo, con un alcance de 20 a 200 metros.

    Ademas, para su comunicacion de datos, decodifi-can y codifican la informacion con modulacion AM,ASK.

    1

  • 3.1.1. COMUNICACION RF.

    Se refiere a la transmision de datos y energa atraves de radiofrecuencias con longitudes de onda deltipo de microondas. Entre las caracterstias remarca-bles tenemos:

    Las comunicaciones inalambricas don muy usa-das, como ser las radios, bluetooh, celulares,satelites.

    Rango de distancia variable desde pocos metroshasta millones de kilmetros.

    No necesita que los dos dispositivos tengan lneade vista, capaz de pasar varios obstaculos

    3.1.2. RECEPTOR RLP434A

    Receptor de radio frecuencia, capaz de trabajar a315.418, 418 y 433.92 M[Hz], utilizando modulacionASK.

    CARACTERISTICAS

    Voltaje de 3.3 a 6.0 [V].

    Salida digital y linea.

    CONFIGURACION DE PINES

    1. Gnd.

    2. Salida de datos digital.

    3. Salida lineal de prueba.

    4. Vcc.

    5. Vcc.

    6. Gnd.

    7. Gnd.

    8. Gnd.

    3.1.3. TRANSMISOR TLP434A

    Transmisor de radio frecuencia que trabaja en lasfrecuencias de 315, 418 y 433.92 M[Hz].

    Figura 2: Receptor RLP434A

    CARACTERISTICAS

    Voltaje de 2 a 12 [V].

    Modulacion ASK.

    CONFIGURACION DE PINES

    1. Gnd.

    2. Datos a enviar.

    3. Vcc.

    4. Antena (salida de RF).

    Figura 3: Transmisor TLP434A

    2

  • 4. PANTALLA T6963c

    Pantalla grafica capaz de desplegar cualquier infor-macion dependiente del programa, monocromAticay con brillo de fondo.

    4.0.4. CONFIGURACION DE PINES.

    Dependienco del modelo de pantalla se puede te-ner:

    FG Frame groundVSS 0V Power GNDVDD +5V Power supply for logicV0 Volaje de operacion

    /WR L Senal de grabar/RD L Senal de lectura/CE L activador del chipC/D H/L H/L codeRST L Solo se activa con LDB[i] H/L Bus da datosFSS H/L Escoger fuenteVEE -10V Voltaje del LCDBLA +5V fuente para ledBLK 0V fuente para led

    Figura 4: Pantalla grafica T6963c

    4.1. ATMEGA 32

    Es un microcontrolador de la familia ATMEL deque cuenta con procesador de 8bit,m memoria de pro-

    grama 32K, 32 pines de entrada/salida, 8 conversoresADC de 10 bit. Con cristal externo funciona desde 16M[Hz].

    Figura 5: AVR ATEMGA 32

    5. PROGRAMA

    El programa fue desarrollado en e entorno WI-NAVR con la ayuda de aAVRLib. Diagrama de flujopara el transmisor: Diagrama de flujo para el recep-tor 1: Diagrama de flujo para el receptor 2: Diagramade flujo para el receptor 3:

    3

  • 6. CAPTURAS DE PANTA-LLA DEL SIMULADOR

    El circuito a implementar es:

    7. CODIGO

    Para la transmision:

    #include

    #include

    #include

    #include "global.h"

    #include "uart.h"

    #include "rprintf.h"

    #include "timer.h"

    #include "a2d.h"

    //----- Begin Code --------------------------

    int main(void) //Receptor 1

    {

    u08 caso;

    uartInit();

    timerInit();

    a2dInit();

    DDRB = 0xFF;

    PORTB=0x00;

    a2dSetPrescaler(ADC_PRESCALE_DIV32);

    a2dSetReference(ADC_REFERENCE_AVCC);

    while(1)

    {

    caso=uartGetByte();

    switch(caso)

    {

    case 0x01:

    {

    sbi(DDRB,0);

    break;

    }

    case 0x02:

    {

    sbi(DDRB,1);

    break;

    }

    case 0x03:

    {

    sbi(DDRB,2);

    break;

    }

    case 0x04:

    {

    4

  • sbi(DDRB,3);

    break;

    }

    case 0x05:

    {

    break;

    }

    case 0x06:

    {

    break;

    }

    case 0x07:

    {

    break;

    }

    }

    }

    }

    Para la recepcion 1:

    #include

    #include

    Figura 6: Captura del simulador

    #include

    #include

    #include

    #include

    #include

    #include "global.h"

    #include "uart.h"

    #include "rprintf.h"

    #include "timer.h"

    #include "a2d.h"

    //----- Begin Code --------------------------

    #include

    #include

    #include

    5

  • #include "global.h"

    #include "uart.h"

    #include "rprintf.h"

    #include "timer.h"

    #include "a2d.h"

    //----- Begin Code -------------------------------

    int main(void) //Master

    {

    u08 dato;

    uartInit();

    timerInit();

    a2dInit();

    rprintfInit(uartSendByte);

    a2dSetPrescaler(ADC_PRESCALE_DIV32);

    a2dSetReference(ADC_REFERENCE_AVCC);

    DDRB = 0x00;

    PORTB=0xFF;

    while(1)

    {

    uartSendByte(PINB);

    }

    }

    Para la recepcion 2:

    include

    #include

    #include

    #include "global.h"

    #include "uart.h"

    #include "rprintf.h"

    #include "timer.h"

    #include "a2d.h"

    //----- Begin Code -------------------------------

    int main(void)//LCD GRAFICA

    {

    u08 caso;

    uartInit();

    timerInit();

    a2dInit();

    DDRB = 0xFF;

    PORTB=0x00;

    a2dSetPrescaler(ADC_PRESCALE_DIV32);

    a2dSetReference(ADC_REFERENCE_AVCC);

    while(1)

    {

    caso=uartGetByte();

    switch(caso)

    {

    case 0x01:

    {

    break;

    }

    case 0x02:

    {

    break;

    }

    case 0x03:

    {

    break;

    }

    case 0x04:

    {

    break;

    }

    case 0x05:

    {

    break;

    }

    case 0x06:

    {

    break;

    }

    case 0x07:

    {

    break;

    }

    }

    }

    }

    6

  • 8. DTMF

    /* includes */

    #include // access to controller I/O

    #include

    #include

    #include

    #include

    #include

    #include

    #include "global.h"

    // include our global settings

    #include "rprintf.h"

    // include printf function library

    #include

    u08 memo,hhh=0,mm;

    int main(void)

    {

    u08 Caso;

    DDRB=0xFF;

    DDRC=0x00; //entradas

    DDRD=0x00; //entradas

    PORTC=0x00;

    PORTD=0xFF;

    MCUCR=0x0a; // int0 e int1 como flanco de bajada

    cbi(MCUCSR,6); // Int2 como flanco de bajada por defecto

    sbi(GICR,5); //activado int 2

    sbi(GICR,6); //activado int 0

    sbi(GICR,7); //activado int 1

    sei(); // Habilitador de interrupciones

    a2dInit();

    a2dSetPrescaler(ADC_PRESCALE_DIV32);

    a2dSetReference(ADC_REFERENCE_AVCC);

    while (1)

    {

    mm=PORTC;

    //PORTB=memo;

    if(hhh==1)

    {

    PORTB=mm;

    hhh=0;

    }

    }

    }

    SIGNAL (SIG_INTERRUPT0)

    {

    hhh=1;

    }

    SIGNAL (SIG_INTERRUPT1)

    {

    }

    SIGNAL (SIG_INTERRUPT2)

    {

    }

    9. PANTALLA

    * includes */

    #include // access to controller I/O

    #include

    #include

    #include

    #include // integer types

    #include

    #include // access to program memory

    #include "global.h"

    #include "uart.h" // include uart function library

    #include "rprintf.h"

    // include printf function library

    #include "a2d.h" // include A/D converter function library

    #include "timer.h" // include timer function library (timing, PWM, etc)

    #include "t6963c.h"

    // definitions and prototypes

    //#include "prueba1.h"

    #include "foto.h"

    #include "mmm.h"

    #include

    /* Global Variables */

    void lcd_printbitmap1 (void) ;

    void lector(void);

    7

  • void retardo(void);

    u08 Caso,i,var,bbb;

    void mostrar(void) ;

    void lcd_printIcono8x8(int xp,int yp,int fil,int col,char tipo);

    void lcd_printIcono16x16(int xp,int yp,int fil,int col,char tipo);

    void lcd_printIcono16x24(int xp,int yp,int fil,int col,char tipo);

    void lcd_printIcono24x24(int xp,int yp,int fil,int col,char tipo);

    void lcd_clearIcono8x8(int xp,int yp);

    void lcd_clearIcono16x24(int xp,int yp);

    int main(void)

    {

    DDRC=0x00;

    DDRD=0xF0;

    var=bbb=0;

    PORTC=0x00;

    PORTD=0x00;

    MCUCR=0x0a; // int0 e int1 como flanco de bajada

    cbi(MCUCSR,6); // Int2 como flanco de bajada por defecto

    sbi(GICR,5); //activado int 2

    sbi(GICR,6); //activado int 0

    sbi(GICR,7); //activado int 1

    sei(); // Habilitador de interrupciones

    timerInit();

    lcd_initialise();

    lcd_clear_graphics();

    lcd_clear_text();

    a2dInit();

    a2dSetPrescaler(ADC_PRESCALE_DIV32);

    a2dSetReference(ADC_REFERENCE_AVCC);

    lcd_write_command(LCD_DISPLAY_MODES_GRAPHICS_ON | LCD_DISPLAY_MODES_TEXT_ON);

    mostrar();

    retardo();

    lcd_clear_graphics();

    //lcd_gotoxy(2,0);

    //rprintf("Bienvenido");

    //retardo();

    //lcd_clear_text();

    //lcd_printbitmap1();

    lcd_printIcono16x24(5,0,0,0,1); //1

    lcd_printIcono16x24(35,0,0,2,1); //2

    lcd_printIcono16x24(65,0,0,4,1); //3

    lcd_printIcono16x24(95,0,0,6,1); //4

    lcd_printIcono16x24(5,33,0,8,1); //5

    lcd_printIcono16x24(35,33,0,10,1); //6

    lcd_printIcono16x24(65,33,0,12,1); //7

    lcd_printIcono16x24(95,33,0,14,1); //8

    while (1)

    {

    lector();

    }

    }

    void retardo (void)

    {

    for(i=0;i

  • xi= i*8;

    xf= (i+1)*8-1;

    for(y=yi;y1;

    }

    }

    }

    yi=yi+8;

    yf=yf+8;

    }

    }

    void lector(void)

    {

    switch(Caso)

    {

    case 0x01:

    {

    sbi(PORTD,4);//prende 1

    if(var!=bbb)

    {

    lcd_clearIcono16x24(5,0);

    var=bbb;

    lcd_printIcono16x24(5,0,4,0,1);

    }

    break;

    }

    case 0x02:

    {

    cbi(PORTD,4);//apaga 2

    if(var!=bbb)

    {

    lcd_clearIcono16x24(5,0);

    var=bbb;

    lcd_printIcono16x24(5,0,0,0,1);

    }

    break;

    }

    case 0x03:

    {

    sbi(PORTD,5);//prende 2

    if(var!=bbb)

    {

    lcd_clearIcono16x24(35,0);

    var=bbb;

    lcd_printIcono16x24(35,0,4,2,1);

    }

    break;

    }

    case 0x04:

    {

    cbi(PORTD,5);

    if(var!=bbb)

    {

    lcd_clearIcono16x24(35,0);

    var=bbb;

    lcd_printIcono16x24(35,0,0,2,1);

    }

    break;

    }

    case 0x05:

    {

    sbi(PORTD,6);

    if(var!=bbb)

    {

    lcd_clearIcono16x24(65,0);

    var=bbb;

    lcd_printIcono16x24(65,0,4,4,1);

    }

    //lcd_clearIcono16x24(5,33);

    break;

    }

    case 0x06:

    {

    cbi(PORTD,6);

    if(var!=bbb)

    {

    lcd_clearIcono16x24(65,0);

    var=bbb;

    lcd_printIcono16x24(65,0,0,4,1);

    }

    break;

    }

    case 0x07:

    {

    sbi(PORTD,7);

    9

  • if(var!=bbb)

    {

    lcd_clearIcono16x24(95,0);

    var=bbb;

    lcd_printIcono16x24(95,0,4,6,1);

    }

    break;

    }

    case 0x08:

    {

    cbi(PORTD,7);

    if(var!=bbb)

    {

    lcd_clearIcono16x24(95,0);

    var=bbb;

    lcd_printIcono16x24(95,0,0,6,1);

    }

    break;

    }

    case 0x09:

    {

    sbi(PORTD,8);

    if(var!=bbb)

    {

    lcd_clearIcono16x24(5,33);

    var=bbb;

    lcd_printIcono16x24(5,33,4,8,1);

    }

    break;

    }

    case 0x10:

    {

    cbi(PORTD,8);

    if(var!=bbb)

    {

    lcd_clearIcono16x24(5,33);

    var=bbb;

    lcd_printIcono16x24(5,33,0,8,1);

    }

    break;

    }

    case 0x11:

    {

    sbi(PORTD,9);

    if(var!=bbb)

    {

    lcd_clearIcono16x24(35,33);

    var=bbb;

    lcd_printIcono16x24(35,33,4,10,1);

    }

    break;

    }

    case 0x12:

    {

    cbi(PORTD,9);

    if(var!=bbb)

    {

    lcd_clearIcono16x24(35,33);

    var=bbb;

    lcd_printIcono16x24(35,33,0,10,1);

    }

    break;

    }

    case 0x13:

    {

    sbi(PORTD,10);

    if(var!=bbb)

    {

    lcd_clearIcono16x24(65,33);

    var=bbb;

    lcd_printIcono16x24(65,33,4,12,1);

    }

    break;

    }

    case 0x14:

    {

    cbi(PORTD,10);

    if(var!=bbb)

    {

    lcd_clearIcono16x24(65,33);

    var=bbb;

    lcd_printIcono16x24(65,33,0,12,1);

    }

    break;

    }

    case 0x15:

    {

    sbi(PORTD,11);

    if(var!=bbb)

    10

  • {lcd_clearIcono16x24(95,33);

    var=bbb;

    lcd_printIcono16x24(95,33,4,14,1);

    }

    break;

    }

    case 0x00:

    {

    cbi(PORTD,11);

    if(var!=bbb)

    {

    lcd_clearIcono16x24(95,33);

    var=bbb;

    lcd_printIcono16x24(95,33,0,14,1);

    }

    break;

    }

    }

    }

    void mostrar(void)

    {

    uint8_t x,xi,xf,y,yi,yf,c,ccc;

    uint8_t bitmap;

    uint8_t i;

    uint16_t cbitmap=0;

    yi=0;

    yf=7;

    for(ccc=0; ccc < 8; ccc++)

    {

    for(i=0; i < 16; i++)

    {

    xi= i*8;

    xf= (i+1)*8-1;

    for(y=yi;y1;

    }

    }

    }

    yi=yi+8;

    yf=yf+8;

    }

    }

    void lcd_printIcono16x16(int xp,int yp,int fil,int col,char tipo)

    {

    lcd_printIcono8x8(xp,yp,fil,col,tipo);

    lcd_printIcono8x8(xp,yp+8,fil+1,col,tipo);

    lcd_printIcono8x8(xp+8,yp,fil,col+1,tipo);

    lcd_printIcono8x8(xp+8,yp+8,fil+1,col+1,tipo);

    }

    void lcd_printIcono16x24(int xp,int yp,int fil,int col,char tipo)

    {

    lcd_printIcono8x8(xp,yp,fil,col,tipo);

    lcd_printIcono8x8(xp,yp+8,fil+1,col,tipo);

    lcd_printIcono8x8(xp,yp+16,fil+2,col,tipo);

    lcd_printIcono8x8(xp,yp+24,fil+3,col,tipo);

    lcd_printIcono8x8(xp+8,yp,fil,col+1,tipo);

    lcd_printIcono8x8(xp+8,yp+8,fil+1,col+1,tipo);

    lcd_printIcono8x8(xp+8,yp+16,fil+2,col+1,tipo);

    lcd_printIcono8x8(xp+8,yp+24,fil+3,col+1,tipo);

    }

    void lcd_printIcono24x24(int xp,int yp,int fil,int col,char tipo)

    {

    lcd_printIcono8x8(xp,yp,fil,col,tipo);

    lcd_printIcono8x8(xp,yp+8,fil+1,col,tipo);

    lcd_printIcono8x8(xp,yp+16,fil+2,col,tipo);

    lcd_printIcono8x8(xp+8,yp,fil,col+1,tipo);

    lcd_printIcono8x8(xp+8,yp+8,fil+1,col+1,tipo);

    lcd_printIcono8x8(xp+8,yp+16,fil+2,col+1,tipo);

    lcd_printIcono8x8(xp+16,yp,fil,col+2,tipo);

    lcd_printIcono8x8(xp+16,yp+8,fil+1,col+2,tipo);

    lcd_printIcono8x8(xp+16,yp+16,fil+2,col+2,tipo);

    }

    void lcd_printIcono8x8(int xp,int yp,int fil,int col,char tipo)

    11

  • {uint8_t x,xi,xf,y,yi,yf,c;

    uint8_t bitmap;

    uint8_t i;

    uint16_t cbitmap=0;

    cbitmap=fil*16*8+8*col;

    yi=0;

    yf=7;

    i=fil*8*16;

    xi= i*8;

    xf= (i+1)*8-1;

    for(y=yi;y1;

    }

    }

    }

    void lcd_clearIcono8x8(int xp,int yp)

    {

    FillRect(xp,yp,xp+8,yp+8,0);

    }

    void lcd_clearIcono16x24(int xp,int yp)

    {

    FillRect(xp,yp,xp+16,yp+32,0);

    }

    10. CONCLUSIONES.

    La comunicacion RF es complicada debido a lasinterferencias, ademas que la sintonizacion y elfiltrado de ruido pero evita el uso de cables, ha-ciendo los circuitos portatiles.

    12