Forum: Mikrocontroller und Digitale Elektronik DMX Sender Fragen


von Tim (Gast)


Lesenswert?

Hi,

ich möchte mir gerne einen DMX Sender bauen. Als Prozessor setze ich 
einen LPC2114 ein. Ich hab ein paar grundsätzliche Fragen zur 
Software-Realisierung:


1) wie erzeugt man am Besten die Break und die MAB Time? Mittels 
Software soll es möglich sein, die Refrehs,Break und MAB Time ggf. an 
die Bedürfnisse anpassen zu können. Sprich der User soll die Möglichkeit 
hier variabel zu sein. Laut DMX Spezifikation kann die MAB [8µs - 1s] 
genauso wie die Break [88µs - 1s] sein.

Setzt man hier zur Realisierung von jeglicher Kombination einen Timer 
ein mit einem Intervall von 1µs? So dass man mit einem Timer sowohl 
Break als auch MAB realisieren kann? Oder verändert man ständig das 
Timerintervall (also TimerInit für Break Time -> dann TMR reset -> 
TimerInit für MAB Time)?

2) Die DMX-Daten an sich wollte ich mittels dem THER Interrupt vom UART 
übertragen. Ist hier die Vorgehensweise richtig, dass man auf den ersten 
THER Interrupt nach enablen des USARTs wartet und dann alle Daten (513 
Byte) in der ISR überträgt?
1
void UART0_IRQ()
2
{
3
   unsigned int i=0;
4
 
5
   if(THER)
6
   {
7
       while(i<514)
8
           sendregister = DMX_BUF[i++]   
9
   }
10
}
Soll nur schematisch zeigen, wie ich das meine mit dem THER Bit.

Oder ist es sinnvoller immer nur einen DMX-Wert pro THER Interrupt zu 
versenden und den nächsten DMX-Wert erst im nächsten THER-Interrupt? Vor 
allem wenn man vielleicht die Option haben möchte, zwei DMX-Sender-Uarts 
zu installieren (in diesem Fall dann UART1_IRQ())?


3) Schaltet man den Timer aus, während man die DMX-Daten überträgt?

Gruß
Tim

von Falk B. (falk)


Lesenswert?

@  Tim (Gast)

>1) wie erzeugt man am Besten die Break

Entweder per direkter IO-Steuerung und kleinem Delay, oder einfach durch 
Senden von 0x00 mit einer niedrigeren Bitrate.

> und die MAB Time? Mittels

MAB?

>Software soll es möglich sein, die Refrehs,Break und MAB Time ggf. an
>die Bedürfnisse anpassen zu können. Sprich der User soll die Möglichkeit
>hier variabel zu sein. Laut DMX Spezifikation kann die MAB [8µs - 1s]
>genauso wie die Break [88µs - 1s] sein.

Naja, ich würde die Kirche im Dorf lassen. Den Break auf eine Sekunde 
auszudehnen mag ja theoretisch machber sein, praktisch aber nicht 
wirklich sinnvoll.

>Setzt man hier zur Realisierung von jeglicher Kombination einen Timer
>ein mit einem Intervall von 1µs?

Wenn du deine CPU mit Interrupts zumüllen willst. . .

>TimerInit für MAB Time)?

MAB?

>übertragen. Ist hier die Vorgehensweise richtig, dass man auf den ersten
>THER Interrupt nach enablen des USARTs wartet und dann alle Daten (513
>Byte) in der ISR überträgt?

Ja.

>Oder ist es sinnvoller immer nur einen DMX-Wert pro THER Interrupt zu
>versenden

Ja, wieviel denn sonst?

> und den nächsten DMX-Wert erst im nächsten THER-Interrupt? Vor
>allem wenn man vielleicht die Option haben möchte, zwei DMX-Sender-Uarts
>zu installieren (in diesem Fall dann UART1_IRQ())?

Da ist das das Gleiche.

>3) Schaltet man den Timer aus, während man die DMX-Daten überträgt?

Kommt drauf an.

MFG
Falk

von Tim (Gast)


Lesenswert?

Hallo Falk,

d.h. du würdest einen festen Wert für den Break und die Mark-After-Break 
Zeit (MAB) verwenden? Viele Produkte im DMX-Bereich besitzen halt die 
Möglichkeit diese bieden Zeiten in einem entsprechenden Bereich durch 
den User anpassen lassen zu können.

Falk Brunner schrieb:
>>Oder ist es sinnvoller immer nur einen DMX-Wert pro THER Interrupt zu
>>versenden
> Ja, wieviel denn sonst?

Hab schon Beispiele gesehen, in denen wie oben im C-Beispiel, alle 513 
DMX-Werte in einem THER Interrupt abgesendet werden und nicht im ersten 
THER Interrupt DMX-Wert0, im zweiten THER Interrupt den DMX-Wert1 usw.

Falk Brunner schrieb:
>> und den nächsten DMX-Wert erst im nächsten THER-Interrupt? Vor
>>allem wenn man vielleicht die Option haben möchte, zwei DMX-Sender-Uarts
>>zu installieren (in diesem Fall dann UART1_IRQ())?
> Da ist das das Gleiche.

Wenn man immer nur einen der 513-Werte pro THER Interrupt los-sendet, 
dann werden mehrere THERs ausgerufen - ansonstnen nicht.

Beim letzten DMX-Wert 513 - schaltet man hier den THER Interrupt aus, 
damit dieser nicht weiter ausschlägt (während der Break-time)?

von Tim (Gast)


Lesenswert?

oder verwendet man den Timer nur für die DMX-Refreshrate? Und ändert das 
Timerintervall in Abhängigkeit von der jeweiligen Refreshrate ab

von Falk B. (falk)


Lesenswert?

@Tim (Gast)

>d.h. du würdest einen festen Wert für den Break und die Mark-After-Break
>Zeit (MAB) verwenden?

Ja. Wenn die DMX-Geräte nicht vollkommen vermurkst sind, kommen die mit 
einem großzügig dimensionierten Wert aus.

>Hab schon Beispiele gesehen, in denen wie oben im C-Beispiel, alle 513
>DMX-Werte in einem THER Interrupt abgesendet werden

Es gibt genügend schlechte Beispiele im Internet ;-)

>Beim letzten DMX-Wert 513 - schaltet man hier den THER Interrupt aus,
>damit dieser nicht weiter ausschlägt (während der Break-time)?

Ja.

>oder verwendet man den Timer nur für die DMX-Refreshrate?

Sinnvoll.

> Und ändert das Timerintervall in Abhängigkeit von der jeweiligen
> Refreshrate ab

Ja.

Wenn du das alles schon richtig durchdacht hast, warum dann die vielen 
Fragen? Probier es aus.

MFG
Falk

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.