jostlowe / Pico-DMX

A library for inputting and outputting the DMX512-A lighting control protocol from a Raspberry Pi Pico
BSD 3-Clause "New" or "Revised" License
191 stars 22 forks source link

Interrupt version of input with SDK not working #30

Closed goran-mahovlic closed 2 years ago

goran-mahovlic commented 2 years ago

I did some tests and did not managed to get async version to generate interrupts, so I do not know if someone did test it with SDK?

Normal read function if working nicely. This is simple receiver test with WS leds.

https://www.youtube.com/watch?v=sD5nIOLsvXA&feature=youtu.be

I hope that I can port my firefly board to RP2040, as initial Atmega chip is not available for a long time...

https://kitspace.org/boards/github.com/intergalaktik/firefly/

kripton commented 2 years ago

By "with the SDK" you mean without the Arduino framework? Yes, I did that :) However, the current Pico-DMX code only works if "full" DMX frames are sent. That means there is one start byte + 512 data bytes. Some DMX senders tend to send "short frames" when the rest of the universe is zero. Can you try setting DMX channel 512 (the last one) to some value other than 0 in your sending software to avoid short frames?

Nice LED-boards by the way ;)

goran-mahovlic commented 2 years ago

By "with the SDK" you mean without the Arduino framework?

Well yes, that was my question, and tnx for answer :)

Can you try setting DMX channel 512 (the last one) to some value other than 0 in your sending software to avoid short frames?

Sure I can try, I did not use full 512 bytes as I have 100 RGB leds on bigger panel so it could be that. And I am using QLC+ with one board that just have FTDI to RS485 at some point I would like to replace that with RP2040 USB to RS485

Nice LED-boards by the way ;)

Tnx!

Unfortunately chip shortages kills all the fun :)

My next evil plan is to make new version more modular so I can just change module if some chip starts to be unavailable.

kripton commented 2 years ago

Sure I can try, I did not use full 512 bytes as I have 100 RGB leds on bigger panel so it could be that. And I am using QLC+ with one board that just have FTDI to RS485 at some point I would like to replace that with RP2040 USB to RS485

Yeah, with QLC+ it's easy, just go to "Simple Desk", "scroll" to the side and pull the last slider up ;)

If you want RP2040 USB to RS485 you might want to check out https://github.com/OpenLightingProject/rp2040-dmxsun. It always generates full DMX frames on all universes / RS485 outputs.

Unfortunately chip shortages kills all the fun :)

Very true. Fortunately, the RP2040, ESP32 and nRF24 are still easily available :)

goran-mahovlic commented 2 years ago

I now have two pico boards, one is loaded with OUTPUT, second with LEDs is loaded as INPUT

I have now more then 512 values and they should all be filled with value 20

When I use blocking dmxInput.read(buffer); function everything is working.

And when I set async I am still not able to get any interrupts, and nothing changes on INPUT device.

https://gist.github.com/goran-mahovlic/6f173cfc83d0db7202b8254fd14a96da

If you want RP2040 USB to RS485 you might want to check out https://github.com/OpenLightingProject/rp2040-dmxsun. It always generates full DMX frames on all universes / RS485 outputs.

I did find that project but did not test, maybe it is right time to do so :)

goran-mahovlic commented 2 years ago

Ups, I was missing function pointer - https://gist.github.com/goran-mahovlic/6f173cfc83d0db7202b8254fd14a96da#file-dmx_in_out-cpp-L86 It is working now, thank you! Will close this issue...