DMX-Signal mit ATMega162 manipulieren

Gast #2922860
Lesenswert?

Hallo,

ich möchte mit einem µC (Atmel) ein DMX-Signal manipulieren:

DMX IN -> jeden Wert beliebig manipulieren -> DMX OUT


Dafür habe ich mir den ATMega162 (mit 2 USARTs) ausgesucht und möchte 
die DMX-Routinen von Hendrik Hölscher 
(http://www.hoelscher-hi.de/hendrik/light/ressources.htm) einsetzen.

Im Prinzip müssen bei den Routinen doch nur die Vektorenbezeichnungen 
geändert und die Registernamen um 0 bzw 1 für den jeweiligen USART 
ergänzt werden, oder?
Ist es mit dem ATMega162 überhaupt möglich, da die Routinen von Hendrik 
die Baudrate ständig umschalten. Arbeiten die beiden USARTs des µC 
komplett autark?

Zu dem Schaltplan:

ATMega162 als µC
2x SN75176 (RS485) für DMX_IN und DMX_OUT,
ein 2x16 Zeichen LCD,
ein Drehpoti,
eine ISP-Schnittstelle,
eine LED und
eine 5V Spannungsversorgung.

Es werden wohl noch drei oder vier Taster zur Menüführung folgen.

Ich hatte bislang bei der Anpassung der DMX-Routinen einige 
Schwierigkeiten, werde mich jedoch in den kommenden Tagen damit genauer 
auseinandersetzen. Programmieren möchte ich in C.

Haltet ihr dieses Projekt mit dme ATMega162 für realisierbar?
Habt ihr so etwas schon einmal gebaut?


Vielen Dank für Eure Unterstützung
Benni
Angehängte Dateien:
Gast #2922914
Lesenswert?

Hallo,

machbar ist das sicherlich. Ich kenne die von dir angesprochenen 
Routinen nicht, aber DMX funktioniert immer mit 250kBaud - also nix mit 
Umschalten!

Du musst hald auf den FE warten, dann kannst du auch nen FE ausgeben, 
anschliessend das Startbyte durchleiten (evtl. mit Manipulation - wenn 
du das willst) und anschliessend kannst du die Bytes mitzählen und 
manipuliert wieder ausgeben.

Interessant wäre der Sinn deiner Aufgabe!

Gruss
Gast #2922938
Lesenswert?

Vielen Dank für deine Antwort.

Christoph schrieb:
> machbar ist das sicherlich. Ich kenne die von dir angesprochenen
> Routinen nicht, aber DMX funktioniert immer mit 250kBaud - also nix mit
> Umschalten!

Hier einmal ein Auszug aus der oben genannten Routine (DMX-Senden):
1
// ****************** DMX Transmission ISR ********************
2

3
ISR (UART_TX_vect)
4
{
5
uint8_t DmxState= gDmxState;
6

7
if (DmxState == BREAK)
8
  {
9
  UBRRH  = 0;
10
  UBRRL  = (F_OSC/1600);    //90.9kbaud
11
  UDR    = 0;      //send break
12
  gDmxState= STARTB;
13
  }
14
else if (DmxState == STARTB)
15
  {
16
  UBRRH  = 0;
17
  UBRRL  = ((F_OSC/4000)-1);  //250kbaud
18
  UDR    = 0;      //send start byte
19
  gDmxState= DATA;
20
  gCurDmxCh= 0;
21
  }
22
else
23
  {
24
  _delay_us(IBG);
25
  uint16_t CurDmxCh= gCurDmxCh;
26
  UDR= DmxField[CurDmxCh++];  //send data
27
  if (CurDmxCh == sizeof(DmxField)) gDmxState= BREAK; //new break if all ch sent
28
  else gCurDmxCh= CurDmxCh;
29
  }
30
}

Dort wird doch je nach "DmxState" die Baudrate variiert.

Christoph schrieb:
> Interessant wäre der Sinn deiner Aufgabe!

Der Sinn liegt darin, dass es in der Veranstaltungstechnik vielfach 
LED-Pulte gibt, die keinen Masterdimmer haben. Da die neuen LED-Kannen 
jedoch enorm an Lichtstrom zunehmen ist der oft notwendig. Also möchte 
ich den µC dahinter schalten und  per LCD die zu dimmenden Kanäle 
auswählen, damit das Gerät universell einsetzbar ist.

Christoph schrieb:
> Btw. deine Schaltung wird nicht funktionieren! Ausser den beiden am
> Quarz ist kein einziger Kondensator zu finden...

Wofür brauche ich weitere Kondensatoren? Ich versorge die Schaltung 
derzeit über ein stabilisiertes Labornetzteil mit ausreichend geringer 
Ausgangswelligkeit.
Gast #2922954
Lesenswert?

Benni P. schrieb:
> Wofür brauche ich weitere Kondensatoren? Ich versorge die Schaltung
> derzeit über ein stabilisiertes Labornetzteil mit ausreichend geringer
> Ausgangswelligkeit.

Wofür die da sind, sollte sich doch so langsam mal rumgesprochen haben. 
Da kann dein Netzteil noch so stabilisiert sein, bei digitalen 
Schaltungen wirst du ohne Abblockkondensator immer Störungen auf den 
Versorgungsleitungen haben.
Siehe:
http://www.rn-wissen.de/index.php/Abblockkondensator
Persönliche Seite #2923268
Lesenswert?

Hallo,

Benni P. schrieb:
> 100nF Kondensator ist hinzugefügt und somit eine Fehlerquelle vermieden.

Am Reset-Pin und am Display wuerd ich da auch noch was vorsehen...

Benni P. schrieb:
> Dort wird doch je nach "DmxState" die Baudrate variiert.

Ja, ist eine Moeglichkeit den Frame-Error zu erzeugen. Du kannst aber 
auch den Pin einfach kurz als Ausgang umfunktionieren und den 
Frame-Error ohne UART erzeugen.

Gruss Christoph

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren