TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: MA_BLACK1 en 26 de Diciembre de 2006, 19:48:04
-
Alguien me puede hechar una mano para comunicar dos pic por RF mediante los modulos de aurel, un receptor y un emisor, que protocolo puedo utilizar y como?
-
Hola MA_BLACK1!
Bienvenido al foro. Mira esto que seguro que te ayuda un montón.
http://www.todopic.com.ar/foros/index.php?topic=14601.0
Un saludo desde Alicante.
-
muchas gracias la verdad esque si me ha sido de ayuda a ver si pongo que tal me han ido las pruebas.
-
hola buenas, lo cirto es que he estado comunicando dos pics por usart en rs232, y con el cable va perfecto pero cuando intento comunicarlos por RF no recibo nada, os pongo el programa y los modulos que he utilizado por si alguien me puede hechar una mano.
-los modulos son el emisor y receptor de aurel el BC-NBK a 433Mhz y TX-SAW 433 s-Z a 433Mhz, y el programa es el siguiente:
---------------------------------------------------------------------------------------------------------------------------
emisor.
// emisor por puerto serie usart
//para recibir otro pic
#include <16f874A.h>
//Ajusta los valores de la palabra de configuración durante el ensamblaje:
//Protección de código y datos=OFF, LVP=OFF, WDT=OFF y OSC=XT
#fuses NOPROTECT,NOCPD,NOLVP,NOWDT,XT
// Con estas directivas las funciones "input" y "output_bit" no reprograman
// el pin de la puerta cada vez que son utilizadas. Si no se indica el
// modo fast_io se asume por defecto standard_io el cual reprograma el pin
// siempre antes de ser utilizadas estas funciones.
#use fast_io (C)
#use delay(clock=4000000)
//Habilita las funciones RS232, velocidad a 9600 baudios
#use rs232(baud=300, xmit=PIN_C6, rcv=PIN_C7)
//#use RS232(BAUD=100, BITS=8, PARITY=N, XMIT=PIN_B0, RCV=PIN_B5)
main()
{
set_tris_c(0b10111111); //RC7/Rx entrada, RC6/Tx salida
set_tris_b(0b11111111); //RC7/Rx entrada, RC6/Tx salida
while(1)
{
putc('A'); //Transmite el caracter
delay_ms(1000); //Temporiza 1 segundo
}
}
---------------------------------------------------------------------------------------------------------
receptor.
//recibe un dato por medio de la usart a la muestra en lcd
#include <16f876A.h>
//Ajusta los valores de la palabra de configuración durante el ensamblaje:
//Protección de código y datos=OFF, LVP=OFF, WDT=OFF y OSC=XT
#fuses NOPROTECT,NOCPD,NOLVP,NOWDT,XT
// Con estas directivas las funciones "input" y "output_bit" no reprograman
// el pin de la puerta cada vez que son utilizadas. Si no se indica el
// modo fast_io se asume por defecto standard_io el cual reprograma el pin
// siempre antes de ser utilizadas estas funciones.
#use fast_io (B)
#use fast_io (C)
#use delay(clock=4000000)
#include <lcd2.c>
//Habilita las funciones RS232, velocidad a 9600 baudios
#use rs232(baud=300, xmit=PIN_C6, rcv=PIN_C7)
#int_rda //Vector de interrupción al recibir por el UART
//Función de tratamiento de la interrupción al recibir
tratamiento()
{
int dato; //Variable para almacena el dato recibido
dato=getc(); //Lee el dato recibido
//output_b(dato); //Lo saca por la puerta B
//putc(dato); //Lo transmite vía RS232
delay_ms(100);
lcd_gotoxy(1,2);
lcd_putc(dato); //muestra dato recibido en lcd
}
main()
{
//output_b(0x00); //Borra las salidas
SETUP_ADC_PORTS(NO_ANALOGS);
set_tris_a(0x00); //Puerta A salida
set_tris_b(0x00); //Puerta B salida
set_tris_c(0b10111111); //RC7/Rx entrada, RC6/Tx salida
lcd_init(); //habilita lcd
printf(lcd_putc,"se ha pulsado: "); //mensaje
enable_interrupts(INT_RDA); //Activa interrupción en la recepción
enable_interrupts(global); //Habilita interrupciones
while(1)
{
}
}
gracias y un saludo
-
Hola
En primer lugar utilizas encoders o decoders para tu transmición, porque si lo haces te recoiendo que leas las caracteristicas del encoders o decoders, estos generalmente se comen bastante velocidad, yo programe un pic con modulos rf y los comunique en modo serie a unos 2400b, y me funcionó bien, conectando el pic directamente al modulo.