Ich hab das so gelöst:
Code:
// Daten senden
void send_data (void)
{
// Resetimpuls Start
      if(tx_counter==0&&(UCSRA & DATA_REGISTER_EMPTY)>0)
        {
        UCSRB&=0b11110111;                 /* Sender ausschalten */
        PORTD.1=0;
        delay_us(90);
        PORTD.1=1;
        UCSRB|=0b00001000;
        putchar(0);
        if(uc_sendmode==0)
            {
            putchar(uc_red);
            putchar(uc_green);
            putchar(uc_blue);
            putchar(uc_dmxsendvalue[3]);
            putchar(uc_dmxsendvalue[4]);
            putchar(uc_dmxsendvalue[5]);
            putchar(uc_dmxsendvalue[6]);
            };
        if(uc_sendmode==1)
            {
            putchar(uc_dmxsendvalue[0]);
            putchar(uc_red);
            putchar(uc_green);
            putchar(uc_blue);
            putchar(uc_dmxsendvalue[4]);
            putchar(uc_dmxsendvalue[5]);
            putchar(uc_dmxsendvalue[6]);
            };
                
        };
}
Der USART wir dabei abgeschaltet und ein festes Potetial auf des Port des USART für mehr als 88µs gegeben.
Danach wird der USART wieder aktiviert und die Werte gesendet.

Der Rest der Sendung läuft dann bei mir über eine fertige .lib ab, die den TxD Interrupt nutzt.
Man könnte auch eine normale Senderoutine verwenden, aber das hat mir nicht gefallen.

Eine andere Möglichkeit der BREAK Erzeugung wäre die Übertragungsgeschwindigkeit des USART auf einen niedrigen Wert ( z.B. 2400 Baud ) einzustellen und das Byte 0x00 zu senden.
Auch das würde ein Break Signal bewirken.
Vor dem Senden der DMX Kanaldaten muss natürlich der USART wieder auf 250kBaud hochgestellt werden.

Beides wird praktiziert und funktioniert.