Ethernet gateway troubleshooting advice
-
My "option 4" attempt is progressing well.
True-to-the-topic a good troubleshooting advice is to lower the speed of the SPI bus. When working on a breadboard, and having multiple devices on the SPI bus, the capacitive load starts to affect the clock and data lines.
PatchingSPI.setClockDivider(SPI_CLOCK_DIV2);to
SPI.setClockDivider(SPI_CLOCK_DIV4);lowers the clock speed and provides a more reliable signalling (confirmed with logic analyzer).
I do not think the change is needed on "sharp" boards, but it seem indeed to help when having a bread-board that resembles something from greek mythology :) -
My fix for W5100 is now available on the development branch.
-
I do not know if the W5200 or W5500 chips have the same problem.
Checked the W5500 datasheet and read:
TCHZ - SCSn High to Output Hi-Z - 2.1 ns
So it looks like the W5500 does not have this problem.
since the W5100 does not tristate the MISO line when deselected but SPI_EN is still high
If this is true then even using SPI_EN instead or in combination with /SCS does not really enable using another SPI slave in combination with the W5100 ...
-
I do not know if the W5200 or W5500 chips have the same problem.
Checked the W5500 datasheet and read:
TCHZ - SCSn High to Output Hi-Z - 2.1 ns
So it looks like the W5500 does not have this problem.
since the W5100 does not tristate the MISO line when deselected but SPI_EN is still high
If this is true then even using SPI_EN instead or in combination with /SCS does not really enable using another SPI slave in combination with the W5100 ...
@daulagari said:
So it looks like the W5500 does not have this problem.
since the W5100 does not tristate the MISO line when deselected but SPI_EN is still high
If this is true then even using SPI_EN instead or in combination with /SCS does not really enable using another SPI slave in combination with the W5100 ...
Yes it does, since driving SPI_EN low makes W5100 release MISO.
SPI_EN is not a signal to be used "instead of" SCS. It is a completly independent signal that enables or disables the use of the SPI bus on the W5100. SCS is used "in" the SPI bus for selecting W5100 as sender/receiver.So a solution to the problem is to make sure SPI_EN is driven low, every time another SPI slave is being used.
-
Some designs fix this issue for the W5100 by driving SPI_EN from SCS via an inverter - I've seen circuits with a nand gate and with a FET and resistor. I believe the WizNet folks suggested that option. It could also be handled with a modified library by driving SPI_EN from another uC pin and disabling SPI_EN (low) whenever driving SCS high.(say if you were using a WIZ810 which has both W5100 pins exposed). Most shield tie SPI_EN to Vcc tho, so you'd have to cut a trace to fix them.
-
Anticimex, thanks, your fix works. I am using uno R3 with Wiznet5100 shield. I am able to control relays and receive sensors data. I can also ping ethernet gateway.
There seems to be just a minor glitch. though. When I connect uno via usb cable to computer to monitor serial messages I never get "0;0;4;11;Arduino startup complete" message.Has this been removed? It doesn't seem to affect functionality anyway.
-
Anticimex, thanks, your fix works. I am using uno R3 with Wiznet5100 shield. I am able to control relays and receive sensors data. I can also ping ethernet gateway.
There seems to be just a minor glitch. though. When I connect uno via usb cable to computer to monitor serial messages I never get "0;0;4;11;Arduino startup complete" message.Has this been removed? It doesn't seem to affect functionality anyway.
@niccodemi nice to hear. DEBUG might be switched of in MyConfig.h
-
This post is deleted!
-
Howdy. Been trying to follow/implement the Soft SPI fix for this. I appreciate everything so far. I'm not a coder, so try to follow instructions closely, but seem to have messed this up. I'm using a R3 Uno with Ethernet Shield. There seems to be several parts to this fix, but I'm getting error messages now. Did get the original to work, but it would freeze up as described.
First what I did to fix, perhaps I missed something. This is all I did, so please don't assume I would know to do something:
- Installed Arduino 1.5.8 IDE
- Installed Anticimex's "fix for W5100" from the "development branch" into my Arduino folder on computer
- Opened RF24_config.h in a text editor. Uncommented the line #define SOFTSPI
- In Gateway sketch, added #include <DigitalIO.h>
- Disabled the debug feature in MyConfig.h
- Moved the gw.begin after the delay(1000) (not sure if I got this right since I don't code. Here is snippet of what I have now in sketch:
// give the Ethernet interface a second to initialize
delay(1000);// Initialize gateway at maximum PA level, channel 70 and callback for write operationsgw.begin(incomingMessage, 0, true, 0);
w5100_spi_en(true);However, I now get the following errors:
Arduino: 1.5.8 (Windows 7), Board: "Arduino Uno"
In file included from C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:12:0:
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.h:39:28: error: 'DEFAULT_CE_PIN' was not declared in this scope
MyGateway(uint8_t _cepin=DEFAULT_CE_PIN, uint8_t _cspin=DEFAULT_CS_PIN, uint8_t _inclusion_time = 1, uint8_t _inclusion_pin = 3, uint8_t _rx=6, uint8_t _tx=5, uint8_t _er=4);
^
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.h:39:59: error: 'DEFAULT_CS_PIN' was not declared in this scope
MyGateway(uint8_t _cepin=DEFAULT_CE_PIN, uint8_t _cspin=DEFAULT_CS_PIN, uint8_t _inclusion_time = 1, uint8_t _inclusion_pin = 3, uint8_t _rx=6, uint8_t _tx=5, uint8_t _er=4);
^
In file included from C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:12:0:
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.h:42:36: error: 'RF24_PA_LEVEL_GW' was not declared in this scope
void begin(rf24_pa_dbm_e paLevel=RF24_PA_LEVEL_GW, uint8_t channel=RF24_CHANNEL, rf24_datarate_e dataRate=RF24_DATARATE, void (dataCallback)(char )=NULL);
^
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp: In constructor 'MyGateway::MyGateway(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t)':
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:27:167: error: no matching function for call to 'MySensor::MySensor(uint8_t&, uint8_t&)'
MyGateway::MyGateway(uint8_t _cepin, uint8_t _cspin, uint8_t _inclusion_time, uint8_t _inclusion_pin, uint8_t _rx, uint8_t _tx, uint8_t _er) : MySensor(_cepin, _cspin) {
^
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:27:167: note: candidates are:
In file included from C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.h:15:0,
from C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:12:
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MySensor.h:79:2: note: MySensor::MySensor()
MySensor();
^
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MySensor.h:79:2: note: candidate expects 0 arguments, 2 provided
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MySensor.h:70:7: note: MySensor::MySensor(const MySensor&)
class MySensor
^
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MySensor.h:70:7: note: candidate expects 1 argument, 2 provided
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp: In member function 'void MyGateway::begin(rf24_pa_dbm_e, uint8_t, rf24_datarate_e, void ()(char))':
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:76:39: error: no matching function for call to 'MyGateway::setupRadio(rf24_pa_dbm_e&, uint8_t&, rf24_datarate_e&)'
setupRadio(paLevel, channel, dataRate);
^
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:76:39: note: candidate is:
In file included from C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.h:15:0,
from C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:12:
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MySensor.h:238:7: note: void MySensor::setupRadio()
void setupRadio();
^
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MySensor.h:238:7: note: candidate expects 0 arguments, 3 provided
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:77:36: error: 'BASE_RADIO_ID' was not declared in this scope
RF24::openReadingPipe(WRITE_PIPE, BASE_RADIO_ID);
^
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:79:23: error: cannot call member function 'void RF24::startListening()' without object
RF24::startListening();
^
Error compiling.Welcome any help. Thanks much.
-
Howdy. Been trying to follow/implement the Soft SPI fix for this. I appreciate everything so far. I'm not a coder, so try to follow instructions closely, but seem to have messed this up. I'm using a R3 Uno with Ethernet Shield. There seems to be several parts to this fix, but I'm getting error messages now. Did get the original to work, but it would freeze up as described.
First what I did to fix, perhaps I missed something. This is all I did, so please don't assume I would know to do something:
- Installed Arduino 1.5.8 IDE
- Installed Anticimex's "fix for W5100" from the "development branch" into my Arduino folder on computer
- Opened RF24_config.h in a text editor. Uncommented the line #define SOFTSPI
- In Gateway sketch, added #include <DigitalIO.h>
- Disabled the debug feature in MyConfig.h
- Moved the gw.begin after the delay(1000) (not sure if I got this right since I don't code. Here is snippet of what I have now in sketch:
// give the Ethernet interface a second to initialize
delay(1000);// Initialize gateway at maximum PA level, channel 70 and callback for write operationsgw.begin(incomingMessage, 0, true, 0);
w5100_spi_en(true);However, I now get the following errors:
Arduino: 1.5.8 (Windows 7), Board: "Arduino Uno"
In file included from C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:12:0:
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.h:39:28: error: 'DEFAULT_CE_PIN' was not declared in this scope
MyGateway(uint8_t _cepin=DEFAULT_CE_PIN, uint8_t _cspin=DEFAULT_CS_PIN, uint8_t _inclusion_time = 1, uint8_t _inclusion_pin = 3, uint8_t _rx=6, uint8_t _tx=5, uint8_t _er=4);
^
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.h:39:59: error: 'DEFAULT_CS_PIN' was not declared in this scope
MyGateway(uint8_t _cepin=DEFAULT_CE_PIN, uint8_t _cspin=DEFAULT_CS_PIN, uint8_t _inclusion_time = 1, uint8_t _inclusion_pin = 3, uint8_t _rx=6, uint8_t _tx=5, uint8_t _er=4);
^
In file included from C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:12:0:
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.h:42:36: error: 'RF24_PA_LEVEL_GW' was not declared in this scope
void begin(rf24_pa_dbm_e paLevel=RF24_PA_LEVEL_GW, uint8_t channel=RF24_CHANNEL, rf24_datarate_e dataRate=RF24_DATARATE, void (dataCallback)(char )=NULL);
^
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp: In constructor 'MyGateway::MyGateway(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t)':
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:27:167: error: no matching function for call to 'MySensor::MySensor(uint8_t&, uint8_t&)'
MyGateway::MyGateway(uint8_t _cepin, uint8_t _cspin, uint8_t _inclusion_time, uint8_t _inclusion_pin, uint8_t _rx, uint8_t _tx, uint8_t _er) : MySensor(_cepin, _cspin) {
^
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:27:167: note: candidates are:
In file included from C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.h:15:0,
from C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:12:
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MySensor.h:79:2: note: MySensor::MySensor()
MySensor();
^
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MySensor.h:79:2: note: candidate expects 0 arguments, 2 provided
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MySensor.h:70:7: note: MySensor::MySensor(const MySensor&)
class MySensor
^
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MySensor.h:70:7: note: candidate expects 1 argument, 2 provided
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp: In member function 'void MyGateway::begin(rf24_pa_dbm_e, uint8_t, rf24_datarate_e, void ()(char))':
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:76:39: error: no matching function for call to 'MyGateway::setupRadio(rf24_pa_dbm_e&, uint8_t&, rf24_datarate_e&)'
setupRadio(paLevel, channel, dataRate);
^
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:76:39: note: candidate is:
In file included from C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.h:15:0,
from C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:12:
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MySensor.h:238:7: note: void MySensor::setupRadio()
void setupRadio();
^
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MySensor.h:238:7: note: candidate expects 0 arguments, 3 provided
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:77:36: error: 'BASE_RADIO_ID' was not declared in this scope
RF24::openReadingPipe(WRITE_PIPE, BASE_RADIO_ID);
^
C:\Users\Robert\Documents\Arduino\libraries\MySensors\MyGateway.cpp:79:23: error: cannot call member function 'void RF24::startListening()' without object
RF24::startListening();
^
Error compiling.Welcome any help. Thanks much.
@karenbobiv When I redid my gateway, I just downloaded the latest version of the regular my sensors library which already includes all that is need for soft spi and used the ehternet gateway sketch from the library. Did not use the "fix for W5100." Did not move the gw.begin. Need to include Digital.IO in gateway sketch as you did. Also make sure you define the include statement for using the W5100 version of the ethernet (if I remember right the other one is the default). Also note that the some of the wiring of the radio to the UNO is different in soft spi--see anticmex's directions which include some numbers that need to be changed in the radio file plus defining soft spi as you did.
-
At any rate, those are library errors so that's why suggested you download and use the latest basic library.
-
Thanks for the help Dan. I've been at this for almost 12 solid hrs. I reloaded the IDE environment and the mysensors library, so all that is fresh. I've got the sketch loading without error, but don't think I'm getting the wiring of the radio and the radio file right at all. Can't get to ping either. I'm using the Uno R3 and the shield. Could you provide more detail please on how you did it? Thanks.
-
I used these instructions from anticimex:
Patch RF24_config.h to enable softspi, uncomment
//#define SOFTSPI
and select pins to use with
const uint8_t SOFT_SPI_MISO_PIN = 15;
const uint8_t SOFT_SPI_MOSI_PIN = 14;
const uint8_t SOFT_SPI_SCK_PIN = 16;
The setting above mean MOSI on A0, MISO on A1 and SCK on A2 on an Arduino Nano.So when you use soft spi and and change the statements in RF24_config.h as above, the wires for mosi, miso and sck as shown in the ethernet radio diagram are changed and go to A0, A1 and A2 respectively on the UNO (be careful not getting miso and mosi mixed). you need to get the gateway started message from the serial monitor rather than the check wires message to proceed. Recommend you take a break and hit it tomorrow--I know how I got when going though this. Mine is still working going on over 3 days now without a hitch. Also make sure you have the ip and port address entered in the advanced tab of the plugin on the vera when you are ready to finally hook it up, otherwise vera will give you a luup error.
-
I noticed something was different. About 8 days ago I was able to get Uno r3 and w5100 shield work using development library, which has just been updated by anticimex. gateway ran for a week without issues except i was not able to control relay nodes. Yesterday I downloaded master and development libraries. With Master i can get gateway to communicate with vera but when I press include button radio comms stop. i also tried development library. modified as per dan and anticimex instructions and not modified. in both cases i can upload sketch but then i do not get any serial communication and also pinging gateway does not work.
-
I noticed something was different. About 8 days ago I was able to get Uno r3 and w5100 shield work using development library, which has just been updated by anticimex. gateway ran for a week without issues except i was not able to control relay nodes. Yesterday I downloaded master and development libraries. With Master i can get gateway to communicate with vera but when I press include button radio comms stop. i also tried development library. modified as per dan and anticimex instructions and not modified. in both cases i can upload sketch but then i do not get any serial communication and also pinging gateway does not work.
@niccodemi I should mention that in the new master there is a comment in the gateway code that says:
"Remove UIPEthernet include below and include Ethernet.h." In other words the default is not Wiznet. If you don't change the default (which I didn't at first) then you will have a commo problem since it is for ENC28J60 shield.
-
@Dan-S. thanks but I have been aware of that. I will try to patch Master library as per your advice. Btw do you use any sensor node with your gateway? Do you use w5100 module or shield? Mine is same as
on this site@niccodemi I am using a genuine arduino uno and arduino ethernet shield which is similar to the one you reference, but don't think that should make any difference if you are using soft spi. Currently I have a light sensor and a temp/humidity sensor reporting to the gateway and all are working fine. Plan to expand more now that it is working so dependably.
-
I used these instructions from anticimex:
Patch RF24_config.h to enable softspi, uncomment
//#define SOFTSPI
and select pins to use with
const uint8_t SOFT_SPI_MISO_PIN = 15;
const uint8_t SOFT_SPI_MOSI_PIN = 14;
const uint8_t SOFT_SPI_SCK_PIN = 16;
The setting above mean MOSI on A0, MISO on A1 and SCK on A2 on an Arduino Nano.So when you use soft spi and and change the statements in RF24_config.h as above, the wires for mosi, miso and sck as shown in the ethernet radio diagram are changed and go to A0, A1 and A2 respectively on the UNO (be careful not getting miso and mosi mixed). you need to get the gateway started message from the serial monitor rather than the check wires message to proceed. Recommend you take a break and hit it tomorrow--I know how I got when going though this. Mine is still working going on over 3 days now without a hitch. Also make sure you have the ip and port address entered in the advanced tab of the plugin on the vera when you are ready to finally hook it up, otherwise vera will give you a luup error.
@Dan-S. Thanks much. After a good night sleep I gave it another try. Made changes, reloaded script, and got the Gateway started message in the serial monitor. I can also ping the GW. However, in the "nothing is ever easy" category, now it won't include my temperature sensors. I attached the temperature sensors to the serial monitor and get the following:
sensor started, id 1
send: 1-1-0-0 s=255,c=0,t=17,pt=0,l=3,st=fail:1.4
send: 1-1-0-0 s=255,c=3,t=6,pt=1,l=1,st=fail:0
send: 1-1-0-0 s=255,c=3,t=11,pt=0,l=18,st=fail:Temperature Sensor
send: 1-1-0-0 s=255,c=3,t=12,pt=0,l=3,st=fail:1.0
send: 1-1-0-0 s=0,c=0,t=6,pt=0,l=3,st=fail:1.4
send: 1-1-0-0 s=1,c=0,t=6,pt=0,l=3,st=fail:1.4
send: 1-1-0-0 s=2,c=0,t=6,pt=0,l=3,st=fail:1.4
send: 1-1-255-255 s=255,c=3,t=7,pt=0,l=0,st=fail:
send: 1-1-0-0 s=0,c=1,t=0,pt=7,l=5,st=fail:74.3
send: 1-1-0-0 s=1,c=1,t=0,pt=7,l=5,st=fail:83.7
send: 1-1-0-0 s=2,c=1,t=0,pt=7,l=5,st=fail:73.0Tried inclusion lots of times. Unplugged and plugged in power for sensor network when I did that to try to get the "handshake." Likely a comedy of errors on my part, but I can't see what's wrong now. Thanks.