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
