Hi, ich habe ein Problem mit einem DMX Sendecode von Radig Ulrich. Kann mir jemand sagen woher diese Fehler kommen?
1 | #include <avr/interrupt.h> |
2 | #include <avr/io.h> |
3 | #include <stdio.h> |
4 | |
5 | #define F_CPU 8000000
|
6 | #include <util/delay.h> |
7 | |
8 | #define DMX_BAUD 250000
|
9 | #define DMX_BAUD_BREAK 80000
|
10 | |
11 | volatile unsigned char dmx_buffer[400]; |
12 | |
13 | //############################################################################
|
14 | //DMX Senderoutine
|
15 | ISR (USART_TX_vect) |
16 | //############################################################################
|
17 | {
|
18 | static unsigned int dmx_channel_tx_count = 0; |
19 | static unsigned char dmx_tx_state = 0; |
20 | |
21 | switch (dmx_tx_state) |
22 | {
|
23 | case (0): |
24 | UBRR0 = (F_CPU / (DMX_BAUD_BREAK * 16L) - 1); |
25 | UDR0 = 0; //RESET Frame |
26 | dmx_tx_state = 1; |
27 | break; |
28 | |
29 | case (1): |
30 | UBRR0 = (F_CPU / (DMX_BAUD * 16L) - 1); |
31 | UDR0 = 0; //Start Byte |
32 | dmx_tx_state = 2; |
33 | break; |
34 | |
35 | case (2): |
36 | _delay_us(10); |
37 | //Ausgabe des Zeichens
|
38 | UDR0 = dmx_buffer[dmx_channel_tx_count]; |
39 | dmx_channel_tx_count++; |
40 | |
41 | if(dmx_channel_tx_count == 400) |
42 | {
|
43 | dmx_channel_tx_count = 0; |
44 | dmx_tx_state = 0; |
45 | }
|
46 | break; |
47 | }
|
48 | }
|
49 | |
50 | //############################################################################
|
51 | //Hauptprogramm
|
52 | int main (void) |
53 | //############################################################################
|
54 | {
|
55 | //Init usart DMX-BUS
|
56 | UBRR0 = (F_CPU / (DMX_BAUD * 16L) - 1); |
57 | DDRD |= (1<<PD1); //Output TXD Pin ATmega88 |
58 | UCSR0B|=(1<<TXEN0)|(1<<TXCIE0); // TXEN0 Transmitter enable / TXCIE0 TX complete interrupt enable |
59 | UCSR0C|=(1<<USBS0); //USBS0 2 Stop bits |
60 | sei();//Globale Interrupts Enable |
61 | UDR0 = 0;//Start DMX |
62 | |
63 | //Endlosschleife
|
64 | while(1) |
65 | {
|
66 | dmx_buffer[0]=255; |
67 | dmx_buffer[1]=255; |
68 | dmx_buffer[2]=255; |
69 | dmx_buffer[3]=255; |
70 | dmx_buffer[4]=255; |
71 | dmx_buffer[6]=255; |
72 | dmx_buffer[5]=255; |
73 | }
|
74 | }
|
Danke im vorraus