How did you do the 'heartbeat' pulse - with an interrupt or in the main loop. If the UART isn't quite initialised correctly then the wait for transmission to finish - may never return.
I did get output with the FC component - but that was with a PIC32 and checking the output on the oscilloscope - the UART decoder didn't make great sense of the values sent...
As per the chart, straight after setting the oscillator I pulsed the heartbeat, then held the pin high after DMX initialising. As the pin goes high, then we returned from initialising.
I replaced Martin's "initialisation" with the FC component.
I then got a trace on C7 (hardware pin).
Screenshot 2025-06-07 104733.jpg (54.67 KiB) Viewed 125 times
However I notice in the decoded results that there is a warning that the MAB is too short (Mark After Break). I would need to read up on DMX protocol but this could possibly be accounting for the errors, as perhaps it is knocking timings out?
I've not went further but may get a chance to look further later.
Whilst waiting for a 16F18877 to arrive in the post - I tried a different MCU.
So with a PIC16F887 (which is rather a lower specced beast) - I got a simple DMX output running (I think)
Here outputting 24 channels (set to 0..23) My logic analyser reads the 'start' pulse as 0.
I'm using '0' as the control byte too (this could be set as data[0] or passed as a parameter depending on requirements but at present SendDMXPacket has it hardcoded as 0.
LabNation_Screenshot33.png (187.13 KiB) Viewed 125 times
From memory you don't need a reply from your DMX receiver (I could be wrong) so in theory a decoder built into your scope/analyser may help, but of course any actual DMX receiver would be best.