Servtes1426459984 0 Posted June 6, 2015 Share Posted June 6, 2015 Hi good day ... I'm doing a project that consists of a network of RF sensors that communicate to a station connected to the Ethernet network, the target station that read the sensors and update the variables shown in the IP address configured. I have connected the module NRF24L01 SPI port 2. I am using Enrf24 library. I have the enc28j60 SPI3 module connected to the port. I am using the library UIPEthernet, configure the module to use port 3 Enc28J60Network modifying the file that is included in the same library. I have the following problem: -The NRF24L01 module works well alone. (Although this module connected and energized enc28j60). -The Enc28j60 module works well alone. (Although this module connected and energized NRF24L01). In my code, if I comment the line Ethernet.begin (mac, ip); NRF24L01 module operates but does not work enc28j60 module. If I uncommented the same line opposite happens. attached files of my project, I add my code. What could be my problem? Regards #include <SPI.h> //Libreria para habilitar el puerto de perifericos serie #include <UIPEthernet.h> //Micro IP adaptado a LMF120H5QR #include <Enrf24.h> //Manejador para envio de mensajes RF #include <nRF24L01.h> //Controlador del modulo RF #include <string.h> //Libreria para el manejo de cadenas de texto void nodoEthernet(); void nodoRF(); void printIndex(); /*Valores de los sensores*/ float temperatura1 = 0; float temperatura2 = 0; float temperatura3 = 0; int humedad2 = 0; int humedad3 = 0; /*Mapeo de pines SPI del Stellaris LMF120H5QR*/ #define P2_0 PA_5 // CE #define P2_1 PA_6 // CSN #define P2_2 PA_7 // IRQ /*Configuracion de nodo RF*/ Enrf24 radio(P2_0, P2_1, P2_2); const uint8_t rxaddr[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0x01 }; //Direccion MAC del nodo RF principal void dump_radio_status_to_serialport(uint8_t); /*Configuracion del puerto Ethernet*/ EthernetServer server(80); //Iniciar servidor en el puerto 80 int statusConfig = 0; //codigo de configuracion void setup() { Serial.begin(9600); //Puerto Serie para depuracion SPI.begin(); //Iniciar el puerto SPI SPI.setDataMode(SPI_MODE0); SPI.setBitOrder(MSBFIRST); /*Configuracion de arranque del nodo RF*/ radio.begin(25000); // Velocidad 250kbps, canal 0, max TX power radio.setRXaddress((void*)rxaddr); radio.enableRX(); // Iniciar Escucha RF canal 0 /*Configuracion de Arranque del puerto Ethernet*/ //Serial.println("Estableciendo conexion Ethernet...."); byte mac[] = {0x00, 0x4f, 0x49, 0x00, 0x00, 0x03}; //Direccion MAC IPAddress ip = IPAddress(192, 168, 1, 100); //Direccion IP //Ethernet.begin(mac, ip); //Iniciar el puerto con los parametros MAC y IP server.begin(); } EthernetClient client; void loop() { nodoEthernet(); nodoRF(); } void nodoEthernet() { client = server.available(); if (client) { String cadenaEntrante = ""; //Cadena para guardar las peticiones del cliente while (client.connected()) //Mientras un cliente este conectado { if (client.available()) //Si hay bytes para leer del cliente { char c = client.read(); //Leer un byte Serial.print(c); //Mostrar el byte en el puerto serie if (c == '\n') //Si es un retorno de carro { //Si la linea actual esta en blanco se tienen dos retornos de carro. //Lo cual seria el final de la peticion HTTP y se puede proceder a responder. if (cadenaEntrante.length() == 0) { break; } else { cadenaEntrante = ""; } } else if (c != '\r') { cadenaEntrante += c; } if (cadenaEntrante.endsWith("GET / ")) { statusConfig = 0; printIndex(); } //Leer peticiones del cliente if (cadenaEntrante.endsWith("GET /temperatura1")) {EnviarDatos(1);} if (cadenaEntrante.endsWith("GET /temperatura2")) {EnviarDatos(2);} if (cadenaEntrante.endsWith("GET /temperatura3")) {EnviarDatos(3);} if (cadenaEntrante.endsWith("GET /humedad2")) {EnviarDatos(4);} if (cadenaEntrante.endsWith("GET /humedad3")) {EnviarDatos(5);} } } //Cerrar la conexion client.stop(); //Serial.println("cliente desconectado"); } } int EnviarDatos(int dato) { switch(dato) { case 1: client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println(); client.println("<html>"); client.println(temperatura1); client.println("</html>"); break; case 2: client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println(); client.println("<html>"); client.println(temperatura2); client.println("</html>"); break; case 3: client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println(); client.println("<html>"); client.println(temperatura3); client.println("</html>"); break; case 4: client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println(); client.println("<html>"); client.println(humedad2); client.println("</html>"); break; case 5: client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println(); client.println("<html>"); client.println(humedad2); client.println("</html>"); break; default: break; } } void printIndex() { client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println(); client.println("<html>"); client.println("<head><title>Fancy Sensors</title>"); client.println("<style>"); client.println("body{ background: whitesmoke; color:black; font-family:Consolas, monospace; font-size: 16px; }"); client.println("article{ background: #f0f8ff; border - style: solid; border-color: #008080;"); client.println("border-width: 8px; border-radius: 0.5em; margin: 1em auto; padding: 1em 0;"); client.println("width: 80 % ; text-align: center; box-shadow: 10px 10px 5px #888888; }"); client.println("input{ width: 100 % ; font-size: 24px; text-align: center; }"); client.println("table{ font-size: 24px; } td{ text-align: center; }label{ display: block; margin: .5em 0 0 0; }</style>"); client.println("</head>"); client.println("<body>"); client.println("<article>"); client.println("<header style=\"font-size: 24px;\"><h1>Fancy Sensors</h1></header>"); client.println("<table border = 0, align = \"center\", cellspacing = \"30\">"); client.println("<tr>"); client.println("<td><label>Temperatura Zona 1</label><input type = \"text\" value =\" "); client.print(temperatura1); client.print("\""); client.print("readonly /></td>"); client.println("<td><label>Humedad Zona 2 % </label><input type = \"text\" value =\" "); client.print(humedad2); client.print("\""); client.print("readonly/></td>"); client.println("</tr><tr>"); client.println("<td><label>Temperatura Zona 2</label><input type = \"text\" value =\" "); client.print(temperatura2); client.print("\""); client.print("readonly/></td>"); client.println("<td><label>Humedad Zona 3 % </label><input type =\"text\" value =\" "); client.print(humedad3); client.print("\""); client.print("readonly/></td>"); client.println("</tr>"); client.println("<tr><td><label>Temperatura Zona 3 </label ><input type =\"text\" value =\" "); client.print(temperatura3); client.print("\""); client.print("readonly/></td>"); client.println("<td>"); client.println("</td>"); client.println("</tr>"); client.println("</table>"); client.println("</article>"); client.println("</body>"); client.println("</html>"); } void nodoRF() { char inbuf[33]; dump_radio_status_to_serialport(radio.radioState()); while (!radio.available(true)) ; if (radio.read(inbuf)) { Serial.println("**************************************************************"); Serial.print("Paquete Recibido: "); Serial.println(inbuf); String cadenaRecibida = inbuf; if(cadenaRecibida.startsWith("TMP1")) { String temp = cadenaRecibida.substring(4); int temperatura = temp.toInt(); float fTemp = ((3.0 * temperatura * 100.0)/1023.0); } else if(cadenaRecibida.startsWith("TMP2")) { String temp2 = cadenaRecibida.substring(4); int temperatura2 = temp2.toInt(); //float fTemp = ((3.0 * temperatura * 100.0)/1023.0); } else if(cadenaRecibida.startsWith("HUM2")) { String hum2 = cadenaRecibida.substring(4); int humedad2 = hum2.toInt(); // float fTemp = ((3.0 * temperatura * 100.0)/1023.0); } else if(cadenaRecibida.startsWith("TMP3")) { String temp2 = cadenaRecibida.substring(4); int temperatura2 = temp2.toInt(); //float fTemp = ((3.0 * temperatura * 100.0)/1023.0); } else if(cadenaRecibida.startsWith("HUM3")) { String hum2 = cadenaRecibida.substring(4); int humedad2 = hum2.toInt(); // float fTemp = ((3.0 * temperatura * 100.0)/1023.0); } } } void dump_radio_status_to_serialport(uint8_t status) { Serial.print("Estado del tranceptor principal: "); switch (status) { case ENRF24_STATE_NOTPRESENT: Serial.println("No hay un tranceptor instalado"); break; case ENRF24_STATE_DEEPSLEEP: Serial.println("Modo de ultra bajo consumo <1uA "); break; case ENRF24_STATE_IDLE: Serial.println("Modulo de inactividad ON||Fucionando con oscilador"); break; case ENRF24_STATE_PTX: Serial.println("Transmitiendo de forma activa"); break; case ENRF24_STATE_PRX: Serial.println("Modo de Recepcion de Datos"); break; default: Serial.println("Codigo de estado desconocido"); } } Quote Link to post Share on other sites
RROMANO001 6 Posted June 6, 2015 Share Posted June 6, 2015 Hi good day ......... In my code, if I comment the line Ethernet.begin (mac, ip); NRF24L01 module operates but does not work enc28j60 module. If I uncommented the same line opposite happens. attached files of my project, I add my code. What could be my problem? Impossible to say something about your problem but we can say about our: How are both device connected to microcontroller? I assume you are using an LP Stellaris HQ120 or a new TIVA 123, are pin used for SPI devices separated? are you sure no collision between channel? Is IRQ service updated? More detail are needed before to say just try something. Why not use LP connected instead of a slow device like enc28j60? Quote Link to post Share on other sites
BRey 22 Posted June 7, 2015 Share Posted June 7, 2015 I think the UIPEthernet/enc28j60 library is very time sensitive and the wireless module interrupt processing causes problems. I think the LP Connected Ethernet is DMA driven and probably more interrupt friendly. Quote Link to post Share on other sites
Servtes1426459984 0 Posted June 7, 2015 Author Share Posted June 7, 2015 Impossible to say something about your problem but we can say about our: How are both device connected to microcontroller? I assume you are using an LP Stellaris HQ120 or a new TIVA 123, are pin used for SPI devices separated? are you sure no collision between channel? Is IRQ service updated? More detail are needed before to say just try something. Why not use LP connected instead of a slow device like enc28j60? Both devices connect them following pin mapping documentation energy Yes, I am using a Stellaris Launchpad LMF120 Yes, SPI port 2 if for nrf20l01 and SPI port 3 for enc28j60. I have two modules connected and energized, runin the same code, the ethernet part always work, but the RF part only works if I disable the Ethernet side. Where I live I have like getting a connected I think the UIPEthernet/enc28j60 library is very time sensitive and the wireless module interrupt processing causes problems. I think the LP Connected Ethernet is DMA driven and probably more interrupt friendly. I will be reviewing the code =) launchpad, I'm doing what I have on hand. thanks Quote Link to post Share on other sites
RROMANO001 6 Posted June 7, 2015 Share Posted June 7, 2015 Both devices connect them following pin mapping documentation energy thanks Documentation say where SPI channel are mapped but nothing about additional pin, so for NRF module I see this: /*Mapeo de pines SPI del Stellaris LMF120H5QR*/ #define P2_0 PA_5 // CE #define P2_1 PA_6 // CSN #define P2_2 PA_7 // IRQ these pin refer to SPI1 What about SPI of enc module? is as original wired to SPI3? this case all is ok Are all NRF pin connected the right way? Just do an inspection to NRF library too. Servtes1426459984 1 Quote Link to post Share on other sites
RROMANO001 6 Posted June 7, 2015 Share Posted June 7, 2015 Yes, SPI port 2 if for nrf20l01 and SPI port 3 for enc28j60. I have two modules connected and energized, runin the same code, the ethernet part always work, but the RF part only works if I disable the Ethernet side. and from SPI NRF library released by Spirillis, if this is the one are you using: Enrf24 radio(P2_0, P2_1, P2_2); // CE, CSN, IRQ pins this case both devices use the same pins for CS and CSN, this is a conflict, please can you post as I requested: - which pin are connected to NRF - which pin are connected to ENC -*** SETUP of SPI and pin assignment for NRF -*** SETUP of SPI and pin assignment for ENC - Which library are you using, please point where you got them to have reference at hand. If both library use same additional pin conflict can garbage communication on devices, so also ENC seems working but can be it behave bad too. Servtes1426459984 1 Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.