Dmx input, shift register output

hi all,
question i need to build a circuit where an arduino (nano) can read dmx channels using the max485 ic.

The arduino needs to output 100 channels using 13 74hc595 shift registers.
for this example lets assume only leds are connected to the shift registers.

is a nano capable (in speed) to achieve this?
both reading the dmx information and outputting to all shift registers without losing frames?

If not.. what would be a recommended way to achieve this ?

With kind regards
Robbert

Welcome!
I can not accurately answer that question as you are missing a lot of information. How fast are you updating the LEDs. How fast is the data coming in from the channels? How efficient is your code? For example reading, decoding and displaying 100 channels i an hour would be easy, in a millisecond no way.

A lot also depends on how the hardware is configured. Posting an annotated schematic as you understand it will we wired will help us help you a lot.

That's a good one. I will draw a schematic and code tonight.

It should be. It does depend a bit on the library used for DMX reception, but i think with Conceptinetics.h you will have at least non-blocking continuous reception.

Shifting out 100 bits should be easy and fast enough to complete within the frame time even if every received byte is triggering the reception interrupt.

a complete DMX frame takes a bit over 20ms to transmit and therefore also to receive, but using the UART most of this will happen in the background. In fact there is no need to even wait for a complete received frame, but you can update the LEDs from the last received value.

There is also the option of first receiving a set of values, sending out the result and hoping that the transmission is complete before you start waiting for the (DMX) break again. ( DMX sends a frame and then a 88us minimum break resets the channel counter.) If you are receiving on the first 100 channels, that could be more efficient, since now you would have 15ms of undivided processing time at you disposal for shifting out the bits.

Anyway enough to start with, create a function that shifts out 100 bits from 100 bytes input and experiment with conceptinetics first i'd say.

Thank you that's some great timing information.

The target is a pc send out the full 512 channels.

Every module reads 100 channels

I aim to keep it arround 20 fps.
So every 50ms the module needs to update the 100 channels (only high or low)

Little background information.
The modules will be used to add effects on a timeline synchronized on music.
20fps won't be a noticeable delay between music and show.
10fps would be possible but I think it's a visible delay.

I would say that would be the 'source'

DMX is transmitting above 40fps, so capturing every 2nd frame would suffice ?

Anyway i don't see any problem with what you want to do. Have you made an attempt at shifting out those received bytes, because that is going to be the same for both approaches.

The advantage of using conceptinetics.h is that there won't be a difference between the update rate as a result of the start address. You just let the shift-out run continuously.

The other method will just wait until the required bytes have arrived and process them. If the start address is closer to the end, chance are it will miss the next break (and therefore the frame) and your framerate will be halved (20fps) from the transmitted rate, while if the start address is more towards the beginning of the frame, the processor will be done in time to catch the next break.

Conceptinetics uses a method which is running in the background all the time.

What have you got setup to experiment ?

Thank you very much.
I dont have a test setup yet.
But start on it this weekend.

That's why I'm glad with this kind of information. I need to dig a little deeper before setup up a test platform.
I work with arduino for a few years. But not a code wizard haha.

I formulated something wrong indeed. I meant to the the target (to achieve) is a pc sending out the dmx signal. Like you rightfully state the source.