mathertel / DMXSerial

An Arduino library for sending and receiving DMX packets.
BSD 3-Clause "New" or "Revised" License
336 stars 79 forks source link

Get wrong channel on DMX receive mode #30

Closed heikoxxxx closed 4 years ago

heikoxxxx commented 5 years ago

Hello Matthias, thanks for that great library working very good for me but i have one small thing. I have written an small code to create an multifunctional DMX Box. I opened an task in mikrocontroller.net because sometime the channel 13 instead of channel 12 which is defined get been readed. https://www.mikrocontroller.net/topic/476080#5877510 There it seems that nobody can help me with this issue. The constant flickering is removed by changing the LED libary to WS2801. Hope you can help me. Thanks a lot

mathertel commented 4 years ago

The problem with WS2801 aka NeoPixels is that you need a very specific timing to send information to the LEDs. These libraries often disable interrupts while sending. Especially when there are many LEDs on one line this interferes with the timing needed for DMX.

Please have a look into the example https://github.com/mathertel/DMXSerial/tree/master/examples/DmxSerialNeoPixels that is using the new probe mode. Here the whole DMX is received, the DMX receiving is stopped and the WS2801 data is sent out. Then listening for DMX data is restarted. You may miss a DMX sequence but it will not be corrupted.

Another option that may work is to use hardware DMA based sending of the WS2801 data that seems to be possible with processors supporting DMA like megaavr 4809 (Arduino Every board).