desktop

Comunicación por Radiofrecuencia entre PICs y nRF24L01

Hola.

ante todo, muchas gracias por todo lo compartido.

en los primeros posts hay algunas orientaciones sobre la distancias. Yo aún no recibí mis módulos pero ya quiero empezar a armar los PCB.

Me gustaría saber en que posición de los módulos se tiene la mejor recepción. paralelos o perpendiculares al piso?

Gracias por los comentarios que puedan compartir.

Saluds.
 
Hola.

ante todo, muchas gracias por todo lo compartido.

en los primeros posts hay algunas orientaciones sobre la distancias. Yo aún no recibí mis módulos pero ya quiero empezar a armar los PCB.

Me gustaría saber en que posición de los módulos se tiene la mejor recepción. paralelos o perpendiculares al piso?

Gracias por los comentarios que puedan compartir.

Saluds.

Hola, a mi experiencia la posición del modulo no es algo que importe realmente mi amigo.



buenas tardes luvhines, e visto todos los comentarios que se han dicho es te foro con respecto al modulo nfr NRF24L01 y su funcionamiento es muy bueno, pero tengo una pregunta es posible enviar una cadena de texto "String" o un "hola mundo ", que el maestro envíe el hola mundo y que el esclavo lo reciba y cuando lo reciba enviarlo por serial para verlo en pc.
muchas gracias podría aclarar me esa duda.

como dice el compañero más abajo, puedes ver que el modulo envía cada vez un paquete de 8bits que en en el emisor es el estado de un puerto, y el receptor refleja el estado de ese puerto, pero no deja de ser un simple paquete de 8bits, bien puedes usar la tabla ascii para tu propósito, en lugar del estado de un puerto envías un carácter que por naturaleza es un hexadesimal y lo recibes en el receptor.
 
Última edición:
Hola a todos. Estuve probando el ejemplo expuesto aquí y no me funciona. Grabe los 2 pics sin modificarle nada y estoy alimentado mis pics con un regulador (mas o menos 4v) y los nrf con unas bases que traen regulador incluido. Cuando lo pruebo siempre obtengo que el ack no fue recibido..... ayuda D@rkbytes por favor!!!!!!!
 
D@rkbytes
Es tu ejemplo con el pic 16f690 sin cambio alguno. Lo que hace es que el transmisor me marca que no recibe ack y el receptor no hace nada. Probé las antenas con módulos usb y si funcionan. Lo único que no he probado es alimentar todo a 3.3 ya que los pics los tengo a 4v y las antenas con una base que incluyen regulador.

Mañana subo fotos, por cierto está en protoboard
 
Última edición:
Ese proyecto está probado físicamente y funciona al 100%
Realiza todo tal cual y debe funcionar.
Principalmente, usa los reguladores de 3.3 V que usa el proyecto. (L78L33)
 
Ese proyecto está probado físicamente y funciona al 100%
Realiza todo tal cual y debe funcionar.
Principalmente, usa los reguladores de 3.3 V que usa el proyecto. (

Hola de nuevo, pues según yo todo esta bien cableado. lo revise como 3 veces.
adjunto una foto de como lo tengo.

Saludos y gracias por la ayuda
 

Adjuntos

  • DSC_0047[1].jpg
    DSC_0047[1].jpg
    56.3 KB · Visitas: 30
Sí. Por ese motivo diseñé los footprints para los módulos. Jamás me pasó por la mente conectarlos con cables.
También es muy importante la calidad del protoboard.
Yo he tirado varios que con el uso van presentando fallas, e incluso también he comprado algunos que desde nuevos se van directamente al bote de la basura.

El sistema que desarrollé con esos módulos sigue funcionando actualmente y no ha tenido problemas.
 
Saludos a todos, utilice el código del post #30 ,para utilizarlo con PIC16F628A, pero el programa no me hace la copilación, ya que, me sale un error de librería en el Transmisión y el Receptor.
Los pines en ambos datasheet salen iguales solo cambie el include.

16F628A Tx.JPG16F628A Rx.JPG16F628A Tx.JPG16F628A Rx.JPG
 
Saludos a todos. Utilicé el código del post #30 para utilizarlo con un PIC16F628A, pero el programa no me hace la compilación, ya que me sale un error en la librería del Transmisor y el Receptor.
Los pines en ambos datasheet salen iguales solo cambie el include.
El PIC16F628A no tiene módulo SSP para poder usar SPI por hardware.
Por eso es que el compilador muestra el error "Undefided Identifier -- spi_write"
Usa SPI por software con: #USE SPI (options)
 
Buenas tardes...

Me pueden ayudar como conseguir la librería del modulo NRF24L01 para Proteus, para poder simularlo. Muchas gracias.
Saludos
 
Última edición:
Hola d@rkbytes, felicitarte por tu aporte muy bueno, soy algo nuevo en esto de la radiofrecuencia por pic, hice uno con el pic 16f876a funcionan de maravilla el TX y RX, pero a medida que pasa el tiempo porque debe estar encendido 24/7 todo el año, a veces se queda congelado o no responde,a que se deberia ese problema? . Porfavor cual es tu opinion? Y solo vuelve a funcionar si lo apago y vuelvo a encender.
 
Este es el código del emisor
#Include <16F876A.h>
#fuses NOWDT, XT, PUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#include "lib_rf2gh4_10.h"
#byte porta=0x05
#byte portb=0x06
#int_ext // Esta rutina está para un futuro si haces comunicaciones bidireccionales.


void int_RB0() // Si te da error esta línea, sustituir por: void int_ext_isr(void).
{ // Se encargaría de la recepción de datos.
int8 ret1;

ret1 = RF_RECEIVE();
if ( (ret1 == 0) || (ret1 == 1) )
{
do
{
ret1 = RF_RECEIVE();
}while ( (ret1 == 0) || (ret1 == 1) );
}
}


void main()
{
int8 ret2;
RF_INT_EN(); // Habilitar interrupción RB0/INT.
RF_CONFIG_SPI(); // Configurar módulo SPI del PIC.
RF_CONFIG(0x40,0x01); // Configurar módulo RF canal y dirección de recepción. Para recibir datos tiene la dirección 0x01.
RF_ON(); // Activar el módulo RF.

delay_ms(5); // Le damos un mínimo de 2.5 milisegundos para que se ponga en marcha.

set_tris_a(0b111111); // Todo el puerto A como entradas.

while(true) // Bucle infinito.
{
RF_DATA[0]=porta; // Cargamos el dato en RF_DATA[0].
RF_DIR=0x08; // Dirección del receptor.
ret2=RF_SEND(); // Enviar datos.
}
}
Código del receptor
#include <16F876A.h>
#FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#include "lib_rf2gh4_10.h"
#byte porta=0x05 // Dirección del puerto A.
#int_ext // Interrupción del módulo RF.


void int_RB0() // Si te da error esta línea, sustituir por: void int_ext_isr(void).
{
int8 ret1;
ret1 = RF_RECEIVE();
if ( (ret1 == 0) || (ret1 == 1) ) // Tanto si hay recepción simple o múltiple, leer datos.
{
do
{
porta=RF_DATA[0]; // El puerto A contendrá el valor que le llegue del emisor, a través de RF_DATA[0].
ret1 = RF_RECEIVE(); // "ret1" nos dirá si hay recepción simple, múltiple o no hay datos para leer.
}while ( (ret1 == 0) || (ret1 == 1) ); // Mientras haya datos para leer, seguir leyendo.
}
}


void main() // Programa principal.
{
set_tris_a(0b000000); // Todo el puerto A como salida.
porta=0; // Inicialmente lo ponemos a cero.

RF_INT_EN(); // Habilitar interrupción RB0/INT.
RF_CONFIG_SPI(); // Configurar módulos SPI del PIC.
RF_CONFIG(0x40,0x08); // Configurar módulo RF (canal y dirección).
RF_ON(); // Activar el módulo RF.

while(true); // Bucle infinito.

}
Ambos estan compilados en ccs
Porfavor si alguien sabe el Motivo de porque podria colgarse esporadicamente
 
Personalmente no veo nada extraño.
No se si algo de fuses, o alguna configuracion que se me escape.
Podrias decir bien en qué situaciones se da el cuelgue y cual de los dos pic?
Aparte del pic y el modulo rf, tenes conectado algo mas?
Como los alimentas?

PD: Para la proxima adjunta el codigo dentro de una etiqueta, aca cómo se hace [TUTO] ¿Cómo subir archivos? (XenForo)
 
¿Podrias decir bien en qué situaciones se da el cuelgue y cuál de los dos PIC?
Exactamente eso es lo que hace falta saber.
Viendo los códigos lo único que puede causar dudas es el "while ( (ret1 == 0) || (ret1 == 1) ); "
O sea que eso genera un bucle infinito sin hacer otra cosa que esperar un 1 o un 0
Habrá que ver si la librería responde con otra cosa para que se pueda salir del bucle.
 
Atrás
Arriba