Hallo,
ich versuche ein DMX-Signal zu erzeugen.
Da ich es mit dem Timer nicht geschafft habe, versuche ich es nun mit
der USART-Schnittstelle des ATMega8.
Nun ist mein Problem, dass es nicht wirklich Funktioniert.
Laut einigen Beiträgen in verschiedenen Foren reicht es, wenn ich für
das Break-Signal die Baudrate auf 62500 Baud stelle.
Nun funktioniert diese Methode entweder bei mir nicht, oder ich mache
irgendetwas falsch.
Hier mein Code:
1 | #define F_CPU = 16000000
|
2 |
|
3 | #include <avr/io.h>
|
4 |
|
5 | void initBaud(int load)
|
6 | {
|
7 | UCSRB = (1<<TXEN);
|
8 | UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
|
9 | UBRRH = 0;
|
10 | UBRRL = load;
|
11 |
|
12 | }
|
13 |
|
14 | int main()
|
15 | {
|
16 | unsigned char daten[256];
|
17 | int x;
|
18 |
|
19 | for(x = 0; x < 256; x++)
|
20 | daten[x] = 255;
|
21 |
|
22 |
|
23 | while(1)
|
24 | {
|
25 | initBaud(15); //baudrate: 62500
|
26 | UDR = 0;
|
27 | while(!(UCSRA & (1<<UDRE)));
|
28 | initBaud(3); //baudrate: 250k
|
29 | UDR = 0;
|
30 | while(!(UCSRA & (1<<UDRE)));
|
31 | for(x = 0; x < 256; x++)
|
32 | {
|
33 | UDR = daten[x];
|
34 | while(!(UCSRA & (1<<UDRE)));
|
35 | }
|
36 | }
|
37 | }
|
Wäre nett, falls mit jemand helfen könnte.
Vielen Dank
Florian