// DMX transmitter for atmega328p // it consumes the USART, so serial transfers cant be used #define SIZE 32 // frame size if you want to do it this way byte dmx_buffer[SIZE]; // allocate buffer space volatile byte dmx_ptr = 0; volatile byte dmx_state = 0; // state tracker void dmx_send(void); // dmx transfer prototype void setup() { // initialize uart for data transfer UBRR0H = ((F_CPU/250000/16) - 1) >> 8; UBRR0L = ((F_CPU/250000/16) - 1); UCSR0A = 1<= SIZE) { dmx_state = 4; // last byte sent } } else if (dmx_state == 1) { // reset baudrate generator UBRR0H = ((F_CPU/250000/16) - 1) >> 8; UBRR0L = ((F_CPU/250000/16) - 1); UDR0 = 0; // send slot0 blank space dmx_state = 2; // set to slot0 transmit mode } else if (dmx_state == 2) { UDR0 = dmx_buffer[0]; // send first data byte dmx_ptr = 1; // set pointer to next data byte dmx_state = 3; // set to data transfer mode } else { UCSR0B &= ~(1<> 8; UBRR0L = ((F_CPU/80000/16) - 1); UCSR0B |= 1<