10 UART Module with Protocol Support – Setting up a DMX Master (Controller)
The UART module with built-in protocol support can be configured for DMX communication, which is an industry standard for stage lighting and other theatrical effects. The module manages the timing requirements and generates the correct sequence of individual events required as a DMX master, effectively reducing the amount of firmware needed for communication. Example 10-1 demonstrates how a device that has this UART module can be configured as a DMX Controller. Note that the PPS settings might not be the same for different devices, so minor changes to the code snippet may be required. The key configuration settings needed to configure the UART module as a DMX controller are:
- MODE[3:0] =
1010
- selects the DMX mode - TXEN =
1
- enables the transmitter - RXEN =
0
- disables the receiver - TXPOL =
0
- selects regular polarity - STP[1:0] =
10
- for two Stop bits - UxP1 = one less than the number of bytes to transmit (excluding the start code)
- UxBRGH:L = value to achieve 250K baud rate
- RxyPPS = TX pin output code
- ON =
1
Setting up a DMX Master (Controller) using the UART with Protocol Support
void UART_Initialize(){
UxCON0bits.MODE = 0b1010; //Select DMX mode
UxCON0bits.TXEN = 1; //Enable transmitter
UxCON0bits.RXEN = 0; //Disable receiver
UxCON2bits.TXPOL = 0; //Standard polarity, TX pin will idle high
UxCON2bits.STP = 0b10; //2 stop bits
//DMX data packet settings
UxP1 = MAXCHANNELS-1; //Total number of data bytes - 1
UxP2 = 0x00; //Not used in DMX controller
UxP3 = 0x00; //Not used in DMX controller
//Baud rate generator settings
UxCON0bits.UxBRGS = 1; //High speed baud generation
UxBRG = 0x3F; //Value for UxBRG for Fosc = 64MHz
//PPS settings for TX functionality (May vary device to device)
ANSELxbits.ANSELxy = 0; //Make Rxy a digital I/O
TRISxbits.TRISxy = 0; //Make Rxy an output
RxyPPS = 0b010011; //Assign TX functionality to Rxy
UxON = 0x01; //Turn on UART module
}