Hola queria abrir un nuevo tema de esto porque me parece q los que ya tenia estan bastante desprolijos y no van a lo que realmente necesito
anteriores=
SPI -nRF24l01nRF24L01 - assemblerGUIA=
https://sites.google.com/site/proyectosroboticos/nrf24l01/nrf24l01-18f4550https://sites.google.com/site/proyectosroboticos/nrf24l01/16f876-nrf24l01la idea seria tener un emisor y un receptor de primera mano con estos pics (16f88) por lo cual el precio para una comunicacion inalabrica buena , la cual tiene muchisima utilidad en todos los campos de la electronica , seria muy bajo , (en argentina serian 60 pesos el modulo nrf24l01 y 40 pesos el pic16f88 ademas de todos los componentes restantes no pasarian los 260 pesos)
Hasta ahora he utilizado los enlaces que deje como guia para poder realizar la comunicacion pero cambie un poco los programas junto a la libreria para hacer compatibles las mismas con el pic16f88 .
Emisor = Como se puede ver mas abajo , use una rutina como debug por lo tanto cuando monto el circuito el led ubicado temporalmente en RB5 indicara como fue la comunicacion , 1 pitido -comunicacion correcta , 2 pitidos enviado pero no recibido , 3 pitidos no se pudo enviar
Este codigo funciona ya que estoy teniendo problemas con el receptor y el emisor me da 2 pitidos por lotanto oviamente no va a recibir el receptor pero estamos seguros de que el emisor funciona
#include <16F88.h>
#fuses XT //Oscilador a cristal standar
#fuses NOWDT //sin WatchDog Timer
#fuses NOPROTECT //sin proteccion de memoria de programa
#fuses PUT //sin PowerUp Timer
#fuses NOBROWNOUT //sin brownout
#fuses NOLVP //sin programación en baja tensión
#use delay(clock=4000000)
#include "PIC16F88E.h" // Librería modificada para el el nRF24L01 con el PIC 18F4550.
#byte porta=0x05 // Dirección de los puertos A, B, C, D y E.
#byte portb=0x06
int8 cont=0XFF;
int8 ret2;
void main()
{
RF_CONFIG_SPI(); // Configurar módulo SPI del PIC.
RF_CONFIG(0x40,0x01); // Configurar módulo RF canal y dirección de recepción de datos para este PIC.
RF_ON(); // Activar el módulo RF.
delay_ms(5); // Dejamos como mínimo 2.5ms antes de comenzar a enviar.
set_tris_a(0b101011); // Dejo RA5 como salida para evitar poner la resistencia de polarización.
set_tris_b(0b00000011);
while(true)
{
delay_ms(2000);
#asm
btfss PORTA,0
bcf cont,0
BTFSC PORTA,0
BSF cont,0
btfss PORTA,1
bcf cont,1
BTFSC PORTA,1
BSF cont,1
btfss PORTA,3
bcf cont,2
BTFSC PORTA,3
BSF cont,2
#endasm
RF_DATA[0] = cont; // El contenido del contador lo cargo en RF_DATA[0] para ser enviado., se pueden enviar hasta 8 bytes desde data 0 hasta data 7
RF_DATA[1] = cont;
RF_DATA[2] = cont;
RF_DATA[3] = cont;
RF_DATA[4] = cont;
RF_DATA[5] = cont;
RF_DATA[6] = cont;
RF_DATA[7] = cont;
RF_DIR=0x08; // Dirección del receptor.
ret2=RF_SEND(); // Envía el dato.Ret 2 nos devuelve el estado del proceso (envio)
delay_ms(50); // Una pausa en cada incremento.
if(ret2==0) //se ha enviado y ha recibido ACK
{
#asm
bsf PORTB,5
#ENDASM
delay_ms(100);
#ASM
BCF PORTB,5
#ENDASM
delay_ms(100);
}
else if(ret2==1) // se ha enviado pero no ha recibido el ACK
{
#asm
bsf PORTB,5
#ENDASM
delay_ms(100);
#ASM
BCF PORTB,5
#ENDASM
delay_ms(100);
#asm
bsf PORTB,5
#ENDASM
delay_ms(100);
#ASM
BCF PORTB,5
#ENDASM
delay_ms(100);
}
else // no ha podido ser enviado
{
#asm
bsf PORTB,5
#ENDASM
delay_ms(100);
#ASM
BCF PORTB,5
#ENDASM
delay_ms(100);
#asm
bsf PORTB,5
#ENDASM
delay_ms(100);
#ASM
BCF PORTB,5
#ENDASM
delay_ms(100);
#asm
bsf PORTB,5
#ENDASM
delay_ms(100);
#ASM
BCF PORTB,5
#ENDASM
delay_ms(100);
}
}
}
Esquematico=
Receptor=
con esto les queria pedir ayuda el receptor configura el modulo y se queda esperando a que lleguen los datos pero nunca mas reacciona ademas los lugares por donde deverian de salir los datos se mantienen en high sin motivo aparente alguien ha trabajado con esta libreria y portandola ha tenido problemas ? #include <16F88.h>
#fuses XT //Oscilador a cristal standar
#fuses NOWDT //sin WatchDog Timer
#fuses NOPROTECT //sin proteccion de memoria de programa
#fuses PUT //sin PowerUp Timer
#fuses NOBROWNOUT //sin brownout
#fuses NOLVP //sin programación en baja tensión
#use delay(clock=4000000)
#include "PIC16F88R.h" // Librería para manejar el módulo SPI con el nRF24L01.
#byte porta=0x05 // Dirección del puerto A.
#byte portb=0x06 // Dirección del puerto B.
int8 ret1;
int8 data1;
#int_ext // Interrupción RB0/INT del módulo RF.
void int_RB0()
{
ret1 = RF_RECEIVE();
if ( (ret1 == 0) || (ret1 == 1) )
{
do
{
data1=RF_DATA[0]; // Data1 contendrá el valor que le llege del emisor, a través de RF_DATA[0].
data1=RF_DATA[1];
data1=RF_DATA[2];
data1=RF_DATA[3];
data1=RF_DATA[4];
data1=RF_DATA[5];
data1=RF_DATA[6];
data1=RF_DATA[7];
#asm
BTFSS data1,0
BCF PORTA,4
BTFSC data1,0
BSF PORTA,4
BTFSS data1,1
BCF PORTA,2
BTFSC data1,1
BSF PORTA,2
BTFSS data1,2
BCF PORTB,3
BTFSC data1,2
BSF PORTB,3
#endasm
ret1 = RF_RECEIVE();
} while ( (ret1 == 0) || (ret1 == 1) ); // Tanto si existe entrada múltiple o simple de datos los lee.
}
}
void main() //Programa principal
{
set_tris_a(0b100000); // RA0 sustituye a RB0 y se pone un LED en RA0.
set_tris_b(0b00000011); // RB0 es para la interrupción, el resto son LEDs.
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.
}
Esquematico =
Datos , programa , libreria , todo completoProyecto