Hey all.
I'm currently working on a project using the Conceptinetics DMX shield and their library for using it to control a strip of LEDs. The DMX shield is in slave mode and for the most part it all works great.
However, to upload a sketch to the Arduino you have to remove the RX-UART jumper to allow the upload. Then when the RX-UART jumper is replaced while the sketch is running then it starts receiving DMX and it works fine.
But when the Arduino is reset/powered up with the RX-UART jumper in place then it doesn't receive the DMX. This means that every time i power the arduino up i have to first remove this RX-UART jumper, power up, then replace the RX-UART jumper.
Anyone got any ideas as to why this happens or any good ideas of how to get round the problem? Stuck for ideas and it renders my lighting fixture near useless...
As there are at least two different versions of the shield please provide a link to the one you're using. Please also specify which type of Arduino you're connecting to the shield as this may be relevant in this case.
Apologies, the board is the non-isolated version described here : http://dmxshield.blogspot.co.uk/
The Arduino is a Mega2560 with the Atmega 16U2 usb-serial adapter.
I have made it work by putting a relay on the RX-Uart jumper and this does solve the problem. However i would like to know why the issue occurs. I'm sure that there is a software solution to this that doesn't require the relay.
The Mega2560 uses the stk500v2 bootloader code. With the current configuration it waits for about 1 second on the serial interface for any input to arrive. If something is received during this second it changes to bootloader mode where it wait for a correct program upload for infinity if necessary.
So you have several choices:
continue to use the relay
change to bootloader to have a timeout in waiting for the program upload
rewire the shield (you can use the Jumpers for that) to use a different serial interface (the Mega2560 has 4 of them)
The last one involves changing your application code but often that's just one line or a find/replace run.