No TCP/IP link,without pressing the reset button

Well, I have constructed a workaround to this issue, and it appears to be resolved. It's not exactly pretty... basically I took a little SPST, normally open relay and hooked the coil pins to ground and digital pin 02, and the switched pins to ground and the reset pin.

You can probably guess what comes next... before initializing the ethernet library, I look for a flag at an address in eeprom. If the flag is 0, we set it to 1 and then trigger the relay, and the unit resets. If the flag is 1, we assume that we just did a warm reset and set the flag back to 0, for next time we power up.

The pastie below is the code snippet I wrote if anyone is interested (let me know if there is a better way to accomplish this sort of thing, I'm new).

http://pastie.org/314577

There is a flag somewhere that you can figure out if the atmega was power cycled or reset, don't recall where though.

I've also had problems initializing the Ethernet shield after a cold reset/powerup.

My solution was to disconnect the shield's reset pin* so it could be reset independently of the arduino main board. I then ran a jumper from a digital output pin to the shield's reset line.

Before calling the Ethernet library, I enable that output pin, pull it low for 100ms, and then switch the port back to input mode with pullups disabled.

(* actually, my original Arduino USB board doesn't have a socket for the reset pin, so the line wasn't connected in the first place. If you have a newer board, you'd need to clip the shield's reset pin or cut a trace on the shield PCB.)

agt--

Very nice, I like this solution. I'm a little nervous about cutting up my precious ethernet shield, but it does seem more elegant than self-resetting with a relay.

Is there any possibility to solve this problem inside the ethernet library?

Hmm... Ethernet.begin() calls iinchip_init() and sysinit() which supposedly resets the W5100. Maybe the network / router doesn't expect the device to reset in that way? What if you use a random mac address each time (note that you'll need to call randomSeed() with something like the value of analog input before using random())? Or a random ip?

It does not work even if there is no network connected during the cold start.

What if you call Ethernet.begin() twice?

There's basically no code in the constructors of Client or Server, so it may be that the W5100 just doesn't work properly when powered up without a reset. We may need to allow for a reset of the W5100 from an Arduino pin.

No success.

I tried it also with delays, like this:

delay(5000); Ethernet.begin(mac,ip,gateway,subnet); delay(5000); Ethernet.begin(mac,ip,gateway,subnet); delay(5000);

Also no success.

Are you able to reproduce this problem?

Is there anyone who can supply the arduino and ethernet shield with external power and network connection is up without having to push the reset button?

Hi all,

I think the normal reset time is to short for the Ethernet-Shield. So I soldered a 100nF cap between the Reset-Pin and GND and then the Ethernet-Shield works without pressing the reset button. (a good position for a 100nF SMD cap is between the pins from the reset switch)

Best regards Stephan


Watterott electronic Germany

I soldered a 100nF cap between the Reset-Pin and GND and you were right, the external power up is now working without having to reset the ethernet shield.

But it's not possible to download sketches anymore when the ethernet shield is pluged on the arduino. I get the following error message: avrdude: stk500_getsync(): not in sync: resp=0x00 avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x1e

It seems that the auto reset doesn't work anymore. I've got an Arduino Duemilanove. Do you have the same problem or any idea to solve it?

Can you solder a smaller Cap 20 - 47 nF between the switch. I can not test it today, because I have no board in stock.

Best regards Stephan Watterott


Watterott electronic www.watterott.com

I tried it with 50nF (two 100nF capacitors in series) and it works. Now I can power the arduino external and the ethernet shield starts operating without a reset and the sketch upload is possible, too.

Add me to the list of people running into this problem, I'm pretty disappointed considering I just bought it, I thought perhaps they would have fixed it by now.

Can somebody post a picture (or diagram) of the cap workaround? I tried soldering a 22nf cap between the legs of the reset switch on the ethernet shield and that doesn't seem to do it.

This is the last step to making my project complete, so I'd love any help! Thanks!

Instead of soldering a SMD cap between the button's pins you can also plug a normal cap between the Reset and Ground pin. I used two 100nF in series (together 50nF). Maybe 22nF is too small.

By the way I ended up just ‘working around’ this problem by instead using the LadyAda ethernet shield, which has the additional advantages of having the wiznet module on a daughterboard and allowing you to very easily independently reset it.

Plus you get to solder it together, which is always fun.

I would recommend that route for anybody who doesn’t want the headache of mucking with the current ‘official’ ethernet shield. Sad but true. :frowning:

Thanks all –

  1. To keep that reset line low for a while, you can stick pretty much any capacitor there. I tried it with 22uF in the reset and ground lines of the stacking header. Worked immediately. (Thanks Stephan).

  2. AGT’s technique of using an output pin is theoretically do-able with the hardware as it stands: the Atmega 168 can have the reset pin configured as an output (by changing the hfuse value). Then you can use the power-on reset of the Atmega (or watchdog) and drive the reset line from the CPU to reset any other circuitry – very nice. BUT the reset line is used by all the ISP programmers, so unless you have a non-ISP programmer you won’t be able to modify the bootloader code. (Unless you get it right first time, you won’t be able to reprogram the atmega. Thankfully I have a few spare CPUs.)

Conclusion: do it with the capacitor.

J.

I have tried tow 100 nf capacitors in sires and ti doesn't seem to work by the way i am using NKC Ethernet Shield and Freeduino Serial v2.0

Hello all, I had 14 Arduinos, each equipped with ethernet shield and ID-12 RFID integrated reader and ONLY 6 of them experienced the "reset issue". Before reading this post I tried with 100nF cap (I had a lot of BAD RESET experience with Z80 and PICs) and it didn't work. I increased to 470nF and it was OK! I suggest to add a 1N4148 or similar diode from reset line (anode) to +5V (cathode) to fast discharge the capacitor when power goes off, otherwise it will discharge via the ESD diode inside the ATMEL and this is not really safe. Hope this helps, have fun with the ETH shield + Arduino and HAPPY NEW YEAR. Rino

I did not manage to bring Ethernet Shield into stable operation. I always have to press reset. There must be a design problem. If Ethernet Shield needs a different Reset timing then it should have its own reset cuircit.