Autor |
DMX-Dimmer: DMX auslesen und Phasenanschnitt zu gleich? Suche nach: dmx (396) dimmer (2671) dmx (396) |
|
|
|
|
BID = 340127
strohmas Gelegenheitsposter
  Beiträge: 66 Wohnort: Dresden
|
|
Hallo
ich habe vor einen 4-kanal-dmx-dimmer zu bauen. jedoch stehe ich zur zeit noch vor einem problem:
wie ist es möglich den spannungsnulldurchgang/ verzögerung um phasenanschnittwinkel und das abfragen des dmx-signals gleichzeitig durchzuführen.
Das DMX-Signal in voller Länge (512 Kanäle) brauch ja schon 22 ms um überhaupt komplett übertragen zu werden. Das bedeutet ja, dass 2-3 nulldurchgänge ausgelassen werden, welches sich dann ja wieder in der falschen Dimmstufe der Lampen wiederspiegelt.
mit zwei µC wäre es ja einfach, jedoch wie sieht es mit einem aus, wie kann man denn gleichzeitig irgendwas machen. ich habe mir schon überlegt, das ganze mit interruptbetrieb zu machen, aber wie genau weiss ich nicht?
bitte helft mir!
danke strohmas
_________________
|
|
BID = 340135
photonic Schreibmaschine
    
Beiträge: 1301 Wohnort: Zürich, Schweiz
|
|
Ich würde die Zündung der vier Triacs komplett Interruptgesteuert mit einem einzelnen 16-bit Timer machen. Bei einem Nulldurchgang der Netzspannung resettest du jeweils den Timer per pin-change Interrupt. Dabei kannst du auch jeweils gleich den maximalen Timerwert speichern der einem halben Zyklus der Netzfrequenz entspricht.
Die Zündwinkel der Triacs arbeitest du mit dem Timer sequentiell ab, angefangen mit dem kürzesten. Du setzt jeweils den Timerwert für den nächsten kommenden Zündwinkel in ein timer compare register das dir einen Interrupt gibt wenn es so weit ist, in der Interruptroutine zündest du den(die) entsprechenden Triac(s) und schreibst den nächsten kommenden Wert ins timer compare register und so weiter. Beim nächsten Nulldurchgang wieder den Timer resetten und das Spiel geht von neuem los.
So verbrauchst du nur einen 16 bit Timer und kannst im Hauptprogram irgend etwas anderes machen wie z.B DMX-signale analysieren ohne Timingprobleme zu bekommen.
[ Diese Nachricht wurde geändert von: photonic am 12 Jun 2006 16:58 ] |
|
BID = 340140
strohmas Gelegenheitsposter
  Beiträge: 66 Wohnort: Dresden
|
dankeschön
hast du vielleicht noch ein tutorial dafür parat, wo ich das alles noch in ruhe durchlesen kann?
danke strohmas
_________________
|
BID = 340144
photonic Schreibmaschine
    
Beiträge: 1301 Wohnort: Zürich, Schweiz
|
Ein Tutorial für deinen Anwendungsfall habe ich natürlich nicht, aber allgemeine Programmiertutorials finden sich im Netz viele.
Ich weiss hat nicht welchen Controller und welche Programmiersprache du verwenden möchtest, ich arbeite mit AVR, programmiert in C (mit WinAVR Link ).
Dazu findest du hier ein gutes Tutorial: Link
[ Diese Nachricht wurde geändert von: photonic am 12 Jun 2006 17:09 ]
|
BID = 340160
strohmas Gelegenheitsposter
  Beiträge: 66 Wohnort: Dresden
|
also AVRs möchte ich auch verwenden, jedoch möchte ich das ganze mit Assembler programmieren
naja, mit dem tutorial meinte ich ja zum beispiel die interruptsteuerung. ich weiss da garnicht, wie ich das mit dem timer machen soll, so dass dort eben ein unterprogramm nach ablauf aufgerufen werden soll.
danke strohmas
[ Diese Nachricht wurde geändert von: strohmas am 12 Jun 2006 17:45 ]
|
BID = 340190
clembra Inventar
     
Beiträge: 5402 Wohnort: Weeze / Niederrhein
|
http://www.hoelscher-hi.de/hendrik/light/ressources.htm
Guck dir da mal die AN012 an.
Du musst ja auch nicht alle 512 Kanäle bearbeiten, sondern nach jedem Byte ein Interrupt, der einen Counter hochzählt und wenn du beim Startwert bist 4 Bytes speichern und auf das nächste Break warten...
_________________
Reboot oder be root, das ist hier die Frage.
|
BID = 340193
strohmas Gelegenheitsposter
  Beiträge: 66 Wohnort: Dresden
|
so ist es natürlich auch ne möglichkeit, nur wie mache ich das mit diesen timer hochzählen und resetten genau, hat da jemand für mich vielleicht ein kleines beispiel in assembler, was die funktiionsweise deutlich macht?
danke strohmas
_________________
|
BID = 340207
clembra Inventar
     
Beiträge: 5402 Wohnort: Weeze / Niederrhein
|
ICH hab ihn mir noch nicht angeschaut, aber Digital Enlightenment hat einen Open-Source Dimmer auf der Website. Ist zwar ein 6K mit LCD und allem drum und dran, aber evtl. kann man sich da einiges an Code rauskopieren.
_________________
Reboot oder be root, das ist hier die Frage.
|
BID = 340212
photonic Schreibmaschine
    
Beiträge: 1301 Wohnort: Zürich, Schweiz
|
Die Timer-counter laufen von selbst, haben entweder 8 oder 16 bit und werden vom Prozessortakt über einen programmierbaren Vorteiler oder extern übner einen Eingang getaktet. Wenn du nichts resettest überläuft der Zähler einfach beim Maximalwert und beginnt wieder von 0. Resetten heisst ganz einfach das Zählerregister mit irgendeinem Startwert überschreiben.
Damit die Timer so laufen wie man es braucht müssen sie passend initialisiert werden. Welche Register genau welche Daten bekommen sollen steht ausführlich im Datenblatt das gerne vollständig gelesen werden möchte.
Interruptroutinen sind kleine Programmteile die aufgrund vordefinierter Ereignisse sofort ausgeführt werden wenn ebendieses Ereignis auftritt. Die Ausführung des restlichen Programms wird dabei so lange unterbrochen. In einem AVR gibt es eine Vielzahl von Interruptquellen, wie z.B. Timer overflow(Timer überläuft Maximalwert), timer compare match (timer-zähler erreicht vordefinierten Wert), Pin change interrupt(Zustand eines I/O- Pins ändert sich) und noch sehr viele mehr. Interrupts sind immer dann sehr nützlich wenn man zu einem bestimmten Zeitpunkt oder nach einem bestimmten Ereignis etwas tun muss, aber nicht dauernd durch Statusabfragen Zeit Rechenzeit verheizen möchte/darf.
|
BID = 340279
clembra Inventar
     
Beiträge: 5402 Wohnort: Weeze / Niederrhein
|
Das ein Nachteil an PICs, die haben meines Wissens nur eine Interrupt-Routine und man muss extra nachfragen, was denn passiert ist.
Ergänzend: und auch wenn ein Byte fertig empfangen wurde bzw. (der gleiche) wenn etwas empfangen wurde, was zu lang ist, also ein Stoppbit erwartet wurde aber nicht gekommen ist (das ist dann wahrscheinlich das Break) wird ein Interrupt ausgelöst.
Mit anderen Worten der DMX-Empfang wird kurz initialisiert und immer wenn etwas fertiges oder kaputtes empfangen wurde wird der Programmablauf kurz interruptet ( ) und anschließend fortgefahren.
PS: Wenn größere Lampen (300W (PAR56)) und aufwärts würd ich gleich ne Vorheizungsmöglichkeit einbauen, zur Lebenszeitverlängerung der Leuchtmittel
Die Registernamen stehen aber auch im AVR-Studio und Beschreibungen (in deutsch) findest du auf mikrocontroller.net (GCC-Tutorial)
_________________
Reboot oder be root, das ist hier die Frage.
|
BID = 340287
Jornbyte Moderator
      
Beiträge: 7289
|
Da mir die Zeit fehlt, mach ich mal für Henne Werbung: Link
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|
BID = 340302
clembra Inventar
     
Beiträge: 5402 Wohnort: Weeze / Niederrhein
|
Zitat : Jornbyte hat am 12 Jun 2006 22:46 geschrieben :
|
Da mir die Zeit fehlt, mach ich mal für Henne Werbung: |
Da war ich schneller, siehe oben
_________________
Reboot oder be root, das ist hier die Frage.
|
BID = 340312
Jornbyte Moderator
      
Beiträge: 7289
|
Wobei strohmas einige Fragen beantwortet bekommt, wenn die Suchfunktion benuzt wird.
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|
BID = 349895
strohmas Gelegenheitsposter
  Beiträge: 66 Wohnort: Dresden
|
hallo,
mal ne andere Frage, aber auch zur gleichen Sache:
hat jemand ein Tutorial oder sowas für den DMX-Empfang in C,
mit dem asm komme ich ni so klar mitn phasenanschnitt
_________________
|
BID = 350200
photonic Schreibmaschine
    
Beiträge: 1301 Wohnort: Zürich, Schweiz
|
schau mal hier: http://www.hoelscher-hi.de/hendrik/english/dimmer.htm
ich weiss nicht ob die source in C oder asm ist, musst mal ins Zipfile schauen das man da herunterladen kann.
edit:
der Link steht ja weiter oben schon...
[ Diese Nachricht wurde geändert von: photonic am 14 Jul 2006 17:54 ]
|