2.1 Setup for DMX Controller
The UART with protocol module can be configured as a DMX controller with the following
settings:
- 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 2 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
Tip: Complete working demo for
the DMX controller can be found on the MPLAB® Xpress Cloud-Based IDE platform. See the
MPLAB Xpress Code Examples.
Code snippet for setup as DMX Controller
Note: This code example is written for
PIC18F25K42. The PPS setting might vary for different devices.
void UART_Initialize(){
//UART module settings
U1CON0bits.MODE = 0b1010; //Select DMX mode
U1CON0bits.TXEN = 1; //Enable transmitter
U1CON0bits.RXEN = 0; //Disable receiver
U1CON2bits.TXPOL = 0; //Standard polarity, TX pin will idle high
U1CON2bits.STP = 0b10; //2 stop bits
//DMX data packet settings
U1P1 = MAXCHANNELS-1; //Total number of data bytes - 1
U1P2 = 0x00; //Not used in DMX controller
U1P3 = 0x00; //Not used in DMX controller
// Baud rate generator settings
U1CON0bits.U1BRGS = 1; //High speed baud generation
U1BRG = 0x3F; //Value for U1BRG for Fosc = 64MHz
//PPS settings for TX functionality on pin RC6
ANSELCbits.ANSELC6 = 0; //Make RC6 a digital I/O
TRISCbits.TRISC6 = 0; //Make RC6 an output
RC6PPS = 0b010011; //Assign TX functionality to RC6
U1ON = 0x01; //Turn on UART module
}