Problema con Nrf24L01+ y arduino mega

Tengo dos arduinos un mega y un nano y dos nRF24L01+ para comunicar ambos arduinos.

La conexion la he realizado de la siguiente forma (segun pone en la libreria y usando los pines SPI segun el modelo de arduino).

NANO 328:
MISO -> 12
MOSI -> 11
SCK -> 13
CE -> 8
CSN -> 7
GND -> GND
VCC -> 3.3v

MEGA 2560:
MISO -> 50
MOSI -> 51
SCK -> 52
CE -> 8
CSN -> 7
GND -> GND
VCC -> 3.3v

Para la comunicacion uso la libreria mirf que se encuentra en el playground (Arduino Playground - Nrf24L01) y los ejemplos ping_client y ping_server (sin modificar nada)

El problema esta en que la comunicacion no se realiza correctamente. Si conecto el nano como servidor y el mega como cliente; el mega manda el mensaje al nano, lo recibe y manda el replay aunque el mega no lo recibe y muestra un timeout.

Si lo hago al contrario, el mega como servidor y el nano como cliente, el nano manda el mensaje y el mega no hace nada de nada.

En su momento pense en que alguno de los Nrf24L01+ estaba mal pero los he intercambiado y error sigue siendo el mismo por lo que esta claro que el problema tiene que estar en el arduino mega que no es capaz de recibir ningun mensaje.

Y despues de esto resumo, alguien ha conseguido usar un Nrf24L01+ con un arduino mega, ya sea con la libreria mirf o con cualquier otra.

Un saludo

¿Podria ser que haga falta decirle a la libreria en algun archivo de configuracion o algo que los pines del mega son otros numeros, no sea que busque en los pines por defecto del arduino?

No se si las definiciones de mosi y demas las tiene por el nombre o por el numero de pin... es una idea...

Quizas en el archivo mirf.cpp o el nrf24....

he estado buscando, para la ethernet he tenido que cambarlo yo tambien.

hay esta linea en la libreria SPI, yo tengo un directorio distinto para cada arduino que utilizo y modifico las librerias de MEGA cuando es necesario, cuando tienen SPI al tener que conectarlo con distintos pines, no te vale la misma libreria para ambos.

un saludo

Explico un poco mejor además

buscando en esa libreria resulta que usa la librería SPI

a su vez la libreria SPI hace alusion pins_arduino.h que esta en SPI.cpp en la linea #include "pins_arduino.h"

si vamos a pins_arduino.h, vemos

ojú ¡¡

#if defined(AVR_ATmega1280) || defined(AVR_ATmega2560)
const static uint8_t SS = 53;
const static uint8_t MOSI = 51;
const static uint8_t MISO = 50;
const static uint8_t SCK = 52;
#else
const static uint8_t SS = 10;
const static uint8_t MOSI = 11;
const static uint8_t MISO = 12;
const static uint8_t SCK = 13;

que quiere decir esto ? pues que me voy a ahorrar modificar libreria el directorio del mega :slight_smile:

haciendo un
#define AVR_ATmega2560

compilará con lospines adecuados para MEGA, si no lo definimos, para los demas que tengan SS,MOSI,MISO y SCK como UNO.

esto será lo unico que tengas que hacer, pon esa linea en el programa que le cargas al MEGA.

Al menos no me acuesto sin saber algo nuevo :smiley:

Un saludo

SrDonGato, ese define se mete automáticamente según la placa que hayas elegido, por lo que no es muy recomendable usarlo en el código

los pines SPI del mega son sin duda los 50,51,52 ya que con esto si funciona en parte

solo cuando se conectan corretamente todos los pines en el monitor del puerto serie aparece "Beginning ..." y comienza a mandar los mensajes al servidor; si no en mi caso no me reconoce el COM del puerto serie o como mucho se responde a si mismo en los mensajes que manda, con el que hace de servidor apagado, el cliente recibe respuesta del mas alla y muestra un ping que se va incrementando

pienso que puede ser algun fallo del que porto la libreria desde avr

Lo dicho ... no me acuesto sin saber algo nuevo :D, seguiré entonces con las librerias modificadas para el mega, en otras librerias si que he tenido que modificarlo.
Gracias Chiva

Despues de multitud de pruebas con codigos que he ido encontrando por internet estoy aun mas perdido.

Ahora cuando le da la gana se comunican (solo por un segundo), pero no entiendo porque. Con los ejemplos del ping, uno de cada 30 envios se convierte en una recepcion.

Por lo he que leido (o he entendido) debe ser de algun problema con los terminales de los COM ya que un codigo que localice de hace unos años con un arduino mega funcionaba perfectamente, eso si era la 1280 y no la 2560 que es la que tengo.

Probablemente no sea eso pero bueno, igual a alguien se le ocurre algo.

PD. no me creo que nadie haya usado este modulo con un arduino mega