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
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
Btw. deine Schaltung wird nicht funktionieren! Ausser den beiden am Quarz ist kein einziger Kondensator zu finden...
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.
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
Vielen Dank! 100nF Kondensator ist hinzugefügt und somit eine Fehlerquelle vermieden. (Eine galvanische Trennung der DMX-Leitungen soll bei vollständiger Funktion folgen.)
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
Hi
>100nF Kondensator ist hinzugefügt und somit eine Fehlerquelle vermieden.
Die Kondensatoren vom Quarz gehören übrigens nach GND und nicht nach
VCC.
MfG Spess
Spess53 schrieb: > Die Kondensatoren vom Quarz gehören übrigens nach GND und nicht nach > VCC. Ist richtig, Sorry.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.