DMX senden und einstellungen

Gast #1894438
Lesenswert?
• ▲
▼
Ich versuche gerade ein Programm zum senden über DMX zu schreiben. 
Hierzu habe ich versucht den Quellcode von 
http://www.hoelscher-hi.de/hendrik/light/ressources.htm meinen 
Controller anzupassen.

Ich benutze einen ATMega 644P mit einem externen 20Mhz Oszillator.

Jedoch funktioniert das Programm noch nicht so ganz und ich weis nicht 
genau woran es liegt. Die Daten werden irgendwie noch nicht richtig 
gesendet. Wäre super wen jemand eine lösung hat.
1
#include <avr/io.h>
2
#include <stdint.h>
3
#include <avr/interrupt.h>
4
#include <util/delay.h>
5

6
// ********************* Definitionen *********************
7
uint16_t     gDmxChannel;        
8
uint8_t        gDmxState;
9

10
enum {BREAK, STARTB, DATA};
11

12
#define F_OSC        (20000)       //oszi 20 MHz
13
#define IBG           (10)        // 10 µs pause
14

15
volatile uint8_t     DmxField[50];        //array DMX 
16
extern void init_DMX(void);
17

18

19
int main(void)
20
{
21
init_DMX();
22

23
DmxField[1]= 1;                //Ausgaben
24
DmxField[2]= 20;        
25
DmxField[3]= 30;
26
DmxField[4]= 0;
27
DmxField[5]= 40;
28
DmxField[6]= 0;
29
DmxField[7]= 50;
30
DmxField[8]= 0;
31
DmxField[9]= 60;
32
DmxField[10]=0;
33

34

35
sei();
36
while(1);
37
}
38

39

40
void init_DMX(void)
41
{
42
//Ports zum senden TXEN
43
DDRD |= (1<<PD3);
44
PORTD |= (1<<PD3);                //Senden einschalten
45

46
//USART 250kbaud
47
UBRR1H  = 9;
48
UBRR1L  = 4;                    
49

50
//asynchron wenn UMSEL Bits = 0 
51
//USBS = STOP bit
52
//UCSZ10 8 Datenbits
53
UCSR1C = (1<<USBS1)|(3<<UCSZ10);                                            
54
UCSR1B |= (1<<TXEN1)|(1<<TXCIE1);        //TXCIE interrupt 
55
UDR1    = 0;
56

57
gDmxState= BREAK;                            //start USART
58
}
59

60
// ****************** DMX Transmission ISR ********************
61

62
ISR(USART1_TX_vect)
63
{
64
uint8_t DmxState= gDmxState;
65

66
if (DmxState == BREAK)
67
    {
68
    UBRR1H  = 0;
69
    UBRR1L  = (F_OSC/1600);                    //90.9kbaud    
70
    
71
    UDR1    = 0;                                //break senden
72
    gDmxState= STARTB;
73
    }
74

75
else if (DmxState == STARTB)
76
    {
77
    ////250kbaud, für erneutes Start bit
78
    UBRR1H  = 9;
79
    UBRR1L  = 4;            
80

81

82
    UDR1    = 0;            //start byte senden
83
    gDmxState= DATA;
84
    gDmxChannel= 0;
85
    }
86

87
else
88
    {
89
    _delay_us(IBG);
90
    uint16_t DmxChannel= gDmxChannel;
91
    UDR1 = DmxField[DmxChannel++];                //data senden
92
    if (DmxChannel == sizeof(DmxField)) gDmxState= BREAK; //neuer break wenn alle daten gesendet sind
93
    else gDmxChannel= DmxChannel;
94
    }
95
}
#1894509
Lesenswert?
• ▲
▼
Ich hoffe ich lehne mich nicht zuweit aus dem Fenster da ich doch auch 
noch Anfänger bin, aber
a) brauch delay.h nicht F_CPU (kann sein das F_OSC auch geht, weiß ich 
nicht Klärung wäre nett )Also bei mir kommt ne warnung wenn ich mit 
F_OSC Compiliere. Außerdem sollte F_CPU vor der delay.h definiert werden 
(sonst meckert mein compiler immernoch)

b) 20MHZ = 20000000Hz nicht 20000Hz(das sind 20KHz)

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.