DMX-Receiver 12-Kanal mit ATtiny2313

  • Edit:
    Hier geht direkt zur Vorstellung der Software (und von da zum DL der Software ;) )


    _________________________________



    Hi!


    Im 30-Kanal-Dimmer-Thread ist von Pesi kurz das Angebot aufgetaucht, den 3-Kanal-Receiver auf 12 Kanäle umzuschreiben.
    Post mit Schaltplan: Auftragsarbeit: 512 Kanal Dimmer
    Zitat dazu:

    Sobald das erste Panel komplett fertig ist (Foto), mache ich Dir die SW dazu...


    Da für mich 12 Kanäle bei mindestens einer der geplanten Lampen optimal wären hab ich mir gedacht, ich mach einfach mal nen Prototyp, in der Hoffnung, dass das mit der SW für mich auch gilt oder ich hier irgendjemanden finde, der mir die schreiben kann :)


    Hier mal nen Foto von dem Ding:


    Top und Bottom:


    Viel sieht man natürlich nicht, auf der Front liegen noch Drahtbrücken unter allen Sockeln (so hab ich unter 4x4cm² hinbekommen, glaube kaum, dass das mit ner geätzten Platine noch deutlich kleiner geht), die Rückseite ist halt Streifenraster. Den Plan hab per Hand gezeichnet (bei Interesse einfach posten), jetzt weiß ich jedenfalls, warum alle auf geätzte Platinen stehen :D
    Der ISP ist nachträglich hinzugefügt worden ("jetzt muss ich das nur noch irgendwie programmieren"), daher die extra Kabel. Statt der Transistoren hab ich (wie man sieht) zwei ULN2803A benutzt, von jedem werden 6 Ports genutzt.


    Beim Versuch, die Software von Pesis 3-Kanal-Receiver auf den uC zu flashen hab ich wohl die Fuses falsch gesetzt (ja, ich hab das Datasheet genutzt, aber irgendwas hab ich trotzdem falsch gemacht ^^ ). Ich hab mir mittlerweile einen neuen besorgt, aber es wäre super, wenn mir wer die richtigen Werte (optimal wäre als Hex) gibt, damit ich schonmal testen kann, ob meine Schaltung funktioniert!



    Dann hoffe ich nur noch, dass sich wer erbarmt und mir die SW vom 3-Kanal auf den hier umschreibt :)
    (Der Schaltplan ist übrigens exakt wie in dem ganz oben verlinkten Thread umgesetzt)


    Falls es nicht zuviel Aufwand macht wäre was zum Adresse einstellen natürlich noch praktischer:

    theoretisch könnte man an PD1 und PD2 noch Taster anschliessen zum einstellen der DMX-Adresse - würde dann so funktionieren (da man ja keine Anzeige hat): man stellt in der Lichtsteuer-SW das Panel auf "weiß" (und zwar nur dieses eine Panel) und drückt dann solange Taste 1 (die zählt einfach immer die Adresse höher) oder 2 (runter) bis das komplette Panel weiß leuchtet, dann stimmt die Adresse... und dann beide Tasten gleichzeitig drücken zum Speichern in's Eprom....


    Von der Idee her nicht schlecht, mein Vorschlag wäre: Nur ein Taster an PD1, und wenn der gedrückt wird wird die Adresse des ersten Kanals dessen Wert ungleich null ist als Adresse des Empfängers gesetzt (sonst Adresse 1), und an PD2 kann dann noch ne Status-LED.


    Schonmal vielen Dank!

  • Zu den Fuses:


    Hier auf der Seite, kannst du dir die Fuses kalkulieren lassen. das funktioniert wunderbar und man kann eigentlich nicht viel falsch machen.
    http://www.engbedded.com/fusecalc/


    Ich habe jetzt mal schnell das zeug zusammen geklickt. Ich komme auf:
    H: DF , L: FF , E: FF


    Hab einfach nur die Frequenz geänder und den achterteiler rausgemacht. Wenn du noch nen Brown-out detection haben willst musst einfach noch anklicken.


    Viel spass damit


    MfG

  • Vielen Dank, das mit den Fuses hat schonmal geholfen :)


    Nach nen paar Schönheitskorrekturen (verbundene Leiterbahnen trennen und so :whistling: ) hab ich jetzt schonmal nen funktionierenden 3-Kanal-Receiver (der allerdings standartmäßig auf Kanal 255 eingestellt ist).


    Grundlagen Assembler haben wir in der Uni schon durchgenommen (so ne Handvoll Befehle in MIPS) und das AVR-Studio hab ich installiert, wie hoch ist die Chance, dass ich den Receiver ohne AVR-Vorwissen selbst auf 12 Kanäle modifiziert kriege? Kann mich da evtl. wer nen bisschen anleiten? ^^


    Und noch zwei Fragen zum Fusecalc: Woher weiß ich, welche start-up time ich wählen muss und wo ist der Unterschied zwischen z.B. "CKSEL=1111 SUT=00" und "CKSEL=1111 SUT=11", also zwischen Einträgen mit dem gleichen Text?

  • Ist als Anfänger alles etwas verwirrend ^^


    Hab mich grade mal in der Software umgeguckt... gibt leider nicht genug Register um den Teil für die 3 Leds einfach mit Copy&Paste auf 12 zu erweitern :D


    Edit 21.10.2009, 00:17:
    Die Startadresse ist jetzt oben in einer Konstante definiert, die Dip-Schalter werden nicht mehr geladen (oder wie man das auch immer nennt - kein Pullup mehr? - jedenfalls liegt keine Spannung mehr an den Pins), der gesamt-Dimmer ist raus. Morgen kommt der "interessante" Teil mit den 12 Kanälen, mal gucken, ob das was wird ^^


    Hab noch so nen bisschen das Problem, dass die ganze Schaltung an unserem Büro-Rechner hängt (der ist der einzige mit ner RS232-Schnittstelle), ich aber auf einem anderen Rechner programmiere. Ich brauche dringend einen USB-Programmer :rolleyes:

  • Es gibt zumindest beim ATtiny2313 keinen.

    Also k.A. was nun mit "Einträgen mit dem gleichen Text" gemeint ist, aber SUT=00 und SUT11 bewirken auch beim Tiny2313 nicht das selbe - siehe Datenblatt ab Seite 27, da steht auch drin, wann man was nimmt (hängt vom Quarz ab und wie schnell die Betriebsspannung stabil wird) - Datenblatt ist generell immer eine gute Quelle für sowas...


    Willst Du das nun eigentlich mit Gesamt-Dimmer und Strobo, oder einfach nur ein Kanal = eine PWM...? - weil den 3-Kanal-Receiver mit Gesamt-Dimmer und Strobo kann man nicht so ohne weiteres erweitern, da ich damals noch keine Routine zum Multiplizieren hatte, hatte ich einfach die RGB-Werte in ner Schleife aufaddiert für den Gesamt-Dimmer, eben im X,Y und Z-Register, das meinst Du wohl damit, dass es nicht genug Register gibt...?


    da wäre es besser, wenn Du die 30-Kanal-SW nimmst (ist in oben verlinktem Thread drin), und die auf 12 Kanäle "kürzt" - hat der Runner2k auch schon erfolgreich für 15 Kanäle gemacht...


    schau' Dir die mal an, ist etwas einfacher durchzusteigen - da passiert in der Hauptschleife *gar nix*, DMX wird in ner ISR empfangen, und PWM in ner Timer-ISR erzeugt - da musst Du nur oben den Eintrag für die Startadresse (ist hier fest) und Zahl der Kanäle ändern, und in der PWM-Routine dann die 30 Kanal-Blöcke auf 12 kürzen, in diesen dann die entsprechenden Bits löschen, je nachdem welcher Kanal wo bei Dir angeschlossen ist - kannst gerne noch mal nachfragen bei Problemen


    die DMX-Adresse steht in den Registern DMX_Base_L und DMX_Base_H - man könnte nun z.B. in der Hauptschleife 2 Taster abfragen und diese Adresse damit rauf- und runterzählen, das wäre sehr einfach - die Status-LED dazu natürlich deaktivieren (ganz unten in der PWM-Routine).


    Das mit einer Taste drücken zum Adresse finden hatte ich mir auch schon überlegt - das ist aber nicht ganz so einfach, weil man dazu ja in dem Moment auf allen Kanälen empfangen muss - das müsste man also in die DMX-ISR mit rein basteln, im Prinzip zwar kein Problem, aber etwas mehr Gefummel/Überlegung wie man das nun genau macht...


    und: das ist nicht nur für Anfänger verwirrend, das ist immer schwer, fremden Code zu verstehen, egal in welcher Sprache.. ;)

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Also k.A. was nun mit "Einträgen mit dem gleichen Text" gemeint ist, aber SUT=00 und SUT11 bewirken auch beim Tiny2313 nicht das selbe - siehe Datenblatt ab Seite 27, da steht auch drin, wann man was nimmt (hängt vom Quarz ab und wie schnell die Betriebsspannung stabil wird) - Datenblatt ist generell immer eine gute Quelle für sowas...

    Ich hatte mich da nun auch auf den Fuse Calculator verlassen, dort steht nämlich bei CKSEL=1111 und SUT=00 exakt das selbe wie bei CKSEL=1111 und SUT=11. Nämlich sinngemäß "Externer Quarz ab 8MHz und Startupzeit 14 Takte + 65ms".

  • Ach so, jetzt hab' ich's verstanden was gemeint ist - das Teil hatte ich ganz am Anfang auch mal benutzt, schon lange aber nur noch das Datenblatt - da steht auch der Unterschied: bei SUT=00 1.000 Takte Startup-Zeit ab "Saft da", bei SUT=11 sind's 16.000 Takte - die "14 Takte + 65ms" sind dann noch zusätzlich nach dem Reset, die sind allerdings bei beiden gleich...


    das ist aber schon auch etwas verwirrend, weil CKSEL3-1 für die Frequenz zuständig sind, und SUT0 und SUT1 *zusammen mit* CKSEL0 für die Startzeit - logischer wäre es, wenn die Fuses CKSEL0-2 für die Frequenz, und dann SUT0-2 für die Verzögerung heissen würden, nicht so ein Mischmasch... ;)

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Willst Du das nun eigentlich mit Gesamt-Dimmer und Strobo, oder einfach nur ein Kanal = eine PWM...?


    Gesamt-Dimmer hab ich bereits rausgenommen (der macht IMO nur Sinn, wenn man den von allen Geräten auf den gleichen Kanal legen kann), ich werde wohl in meiner Steuersoftware mit Helligkeit, Farbe und Sättigung arbeiten, da kann ich dann auch direkt die Gesamthelligkeit vor der Umwandelung zu RGB berechnen. Das Strobo ist auch nur ne lustige Spielerei für die Zimmerbeleuchtung, also nicht zwingend notwendig. Würden mehrere Empfänger eigentlich genau gleich blitzen?


    eben im X,Y und Z-Register, das meinst Du wohl damit, dass es nicht genug Register gibt...?


    Genauer gesagt heißen die R, G und B (was mich im ersten Moment etwas verwirrt hat, weil ich immer von 3 Kanälen, aber nicht von RGB ausgegangen bin ^^ ), aber ja, mein erster Gedanke war, alle Stellen an denen sie auftauchen zu erweitern (auf LED1R bis LED4B).
    Mittlerweile kommt das Assemblerwissen nach und nach zurück und ich werde wohl nur noch ein Register nehmen und die da der Reihe nach für die PWM reinladen.



    Das mit einer Taste drücken zum Adresse finden hatte ich mir auch schon überlegt - das ist aber nicht ganz so einfach, weil man dazu ja in dem Moment auf allen Kanälen empfangen muss - das müsste man also in die DMX-ISR mit rein basteln, im Prinzip zwar kein Problem, aber etwas mehr Gefummel/Überlegung wie man das nun genau macht...


    Wenn es da noch mehr Interesse dran gibt kann ich das ja noch als weiterführende Übung umsetzen ;)


    und: das ist nicht nur für Anfänger verwirrend, das ist immer schwer, fremden Code zu verstehen, egal in welcher Sprache..


    Code lesen & verstehen hab ich relativ wenig Probleme mit (gut, in C# ist das natürlich weit einfacher als in Assembler, aber wenn der Code gut strukturiert und passend kommentiert ist geht das auch - deinen kann ich jedenfalls gut lesen ;) ). Das war primär auf z.B. die Fuses bezogen, ähnlich verwirrend sind aber auch die Mechaniken um z.B. Pins als In- oder Output zu verwenden. Wie man den EEPROM liest und schreibt muss ich für die Adresse auch noch rausfinden :whistling:


    Ich werde mir dann morgen mal den Code vom 30er angucken, mal schauen, ob das (mit meinem Wissen) ohne Probleme auf den ATTiny änderbar ist. Und keine Sorge, hier tauchen bestimmt noch mehr Fragen auf :P

  • Gesamt-Dimmer hab ich bereits rausgenommen (der macht IMO nur Sinn, wenn man den von allen Geräten auf den gleichen Kanal legen kann),

    *Könnte* man natürlich auch machen - halt den dann bei allen Geräten auf einen festen Kanal... bei mir (Konzert- und Partybeleuchtung) macht's halt Sinn, pro RGB-Gruppe noch mal nen Gesamt-Dimmer zu haben, weil ich dann Farbprogramme und Helligkeiten/Lauflichter getrennt programmieren und kombinieren kann...


    ich werde wohl in meiner Steuersoftware mit Helligkeit, Farbe und Sättigung arbeiten, da kann ich dann auch direkt die Gesamthelligkeit vor der Umwandelung zu RGB berechnen.

    Was ist das denn für ne SW...? selbst geschrieben..?


    Das Strobo ist auch nur ne lustige Spielerei für die Zimmerbeleuchtung, also nicht zwingend notwendig. Würden mehrere Empfänger eigentlich genau gleich blitzen?

    Bei mir ist das Strobo sehr nötig 8o - Anfangs blitzen auch alle genau gleich, das läuft dann aber bald (nach ca. 10-20 Sek.) auseinander, weil ja jeder Empfänger gerade woanders im Programm unterbrochen wird mit PWM und DMX-Empfang... könnte man auch so machen, dass das Strobo von dem 2. Timer gesteuert wird, dann sollten die eigentlich für längere Zeit synchron blitzen...


    Genauer gesagt heißen die R, G und B (was mich im ersten Moment etwas verwirrt hat, weil ich immer von 3 Kanälen, aber nicht von RGB ausgegangen bin ^^ ),

    Ich hab' die halt mal so genannt, weil ich das Teil immer für RGB benutze :D - hätte man natürlich genauso LED1-LED3 oder Kanal1-Kanal3 oder wieauchimmer nennen können... ;)


    Mittlerweile kommt das Assemblerwissen nach und nach zurück und ich werde wohl nur noch ein Register nehmen und die da der Reihe nach für die PWM reinladen.

    Ja, so ist das in dem 30-Kanal-Dimmer gemacht - einfach immer Byte aus dem Ram in ein Register laden, mit dem PWM-Zähler vergleichen, LED an oder aus, dann das nächste Byte...


    Wenn es da noch mehr Interesse dran gibt kann ich das ja noch als weiterführende Übung umsetzen ;)

    Keine schlechte Idee - im Prinzip sollte das so gehen: die DMX-ISR wird ja jedes Mal aufgerufen, wenn ein Byte (oder Fehler) reinkommt - erst kommt ein Frame Error (="Reset"), dann das Startbyte (Null), und dann wird pro Byte ein Zähler runtergezählt, bis die Startadresse erreicht ist, ab da die 12 Byte in's RAM geschrieben...


    man müsste nun ein Flag setzen wenn die Taste gedrückt wird, in der DMX-ISR geht's dann (wenn das Flag gesetzt ist) nach dem Startbyte andersrum weiter: ein Zähler wird hochgezählt, sobald ein Byte >128 empfangen wird*, wird der Zähler als Adresse übernommen und auch gleich ins EEPROM gespeichert, das Flag gelöscht und DMX_State um eins erhöht, d.h. auf den nächsten Block gewartet...


    *ich würde an dieser Schwelle unterscheiden, nicht "den ersten Kanal, der 255 hat" nehmen - bei Lichtpulten "zappeln" manchmal die Fader etwas, da kann es gut sein, dass man 255 gar nicht zuverlässig einstellen kann - so ist es halt der erste Kanal, der über 50% Helligkeit ist, dann kann man die Adresse auch einfach mit nem "normalen Lichtpult" einstellen....


    und das dann evtl. gleich so machen, dass das Flag erst dann gesetzt wird, wenn man den Taster für länger drückt, damit man sich nicht versehentlich die Adresse verstellt, wenn man mal kurz auf die Taste kommt... in der PWM-ISR ist ja eh' unten dieser Teil für's Status-LED-Blinken drin, der wird nur 244 mal pro Sekunde abgearbeitet. da könnte man einfach - wenn die Taste gedrückt ist - ein Byte runterzählen (wenn sie losgelassen ist, wird es wieder auf 255 gesetzt) - und wenn das Byte dann 0 erreicht hat (nach ca. 1 Sekunde) ist das das Signal für die DMX-ISR, auf "Adresse suchen" umzuschalten...


    Das war primär auf z.B. die Fuses bezogen, ähnlich verwirrend sind aber auch die Mechaniken um z.B. Pins als In- oder Output zu verwenden. Wie man den EEPROM liest und schreibt muss ich für die Adresse auch noch rausfinden :whistling:

    Ja, wegen den Fuses muss ich auch immer erst nachgucken, das ist leider nicht so, dass man sich das einfach mal merken könnte :D - Pin als Aus- oder Eingang ist aber doch einfach, einfach Bit im DDR setzen oder nicht... mit dem EEPROM setze ich mich auch gerade auseinander, da ist's leider nicht so, dass man einfach "ein Byte wohin speichern" kann...


    Ich werde mir dann morgen mal den Code vom 30er angucken, mal schauen, ob das (mit meinem Wissen) ohne Probleme auf den ATTiny änderbar ist.

    Ist eigentlich 1:1 übernehmbar (also die DMX- und PWM-Routine) - da ist (ausser oben im Header die Interruptvektor-Tabelle und die mega16.def-Datei) nix drin, was für nen speziellen Typ spezifisch wäre... die Timer- und USART-Einstellung halt dann aus der anderen SW nehmen, der für den Tiny (wobei - glaubich - sogar da die Register gleich heissen und gleich funktionieren..)

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • bei mir (Konzert- und Partybeleuchtung) macht's halt Sinn, pro RGB-Gruppe noch mal nen Gesamt-Dimmer zu haben


    Klar, mit nem Lichtpult macht das tatsächlich Sinn, grade wenn es um eine RGB-Gruppe geht. Aber bei vier Gruppen ein gemeinsamer Dimmer? Nimmt doch eigentlich nen großen Teil der möglichen Effekte weg, wenn man die nur alle zusammen Dimmen kann.


    Was ist das denn für ne SW...? selbst geschrieben..?


    Joah... Wie schon irgendwo geschrieben baue ich mir grade ne neue Zimmerbeleuchtung. Da wir nen Server haben, der eh immer an ist hab ich mich entschieden, den die Lichtsteuerung übernehmen zu lassen. Aktuell geplant sind:
    - Steuerung per FB (hab hier noch eine X10 rumliegen, da kommt jeder dran, die Reichweite geht dank RF auch ins Stockwerk drunter - da steht der Server - und das Abfangen der Tasten ist auch nicht schwer)
    - Steuerung per Steuerkonsole (vmtl. Pollin-Net-IO, vllt. auch Eigenentwicklung), daran angeschlossen z.B. der Lichtschalter und nen Poti zum dimmen.
    - Steuerung per Webinterface (-> Iphone) und API (-> Software am Rechner)
    - Lichtszenen (normales Licht, Abends, Leselicht), Effekte beim Einschalten (ich möchte z.B., dass das Licht beim Anschalten nicht einfach angeht, sondern die Lampen der Reihe nach angehen, dass das Licht sich "im Raum ausbreitet")
    - Moodlight mit HSB-Steuerung
    - Kontrollierte, automatische Abgabe der Steuerung an einen anderen Rechner (ich will umbedingt mal nen Ambilight testen, und das Licht soll dann beim Start des Films natürlich schön runterdimmen)
    - Ansteuerung per ArtNet (zumindest auf "ArtDMX-Package an festen Empfänger senden"-Ebene funktioniert die schon :) )
    - Konfiguration komplett per Webinterface oder Software (hier wohl erstmal ein exklusives oder)
    - Selbstgeschrieben in C#


    Aktueller Status: ich kann meinen ArtNet-Empfänger ansprechen ;)


    könnte man auch so machen, dass das Strobo von dem 2. Timer gesteuert wird, dann sollten die eigentlich für längere Zeit synchron blitzen...


    Beim DMX-Transceiver von Hendrik Hölscher gibt es ja auch ein Strobe:
    0-29 = Dimmer
    30-244= Strobe (0,5Hz - 30Hz)
    245-255= SYNC
    Was bewirkt das SYNC?
    "Brauche" ich überhaupt ein Strobe? Im Grunde kann ich das ja auch in der SW machen (wenn denn, wie gesagt, überhaupt gewünscht), schnell genug sollte DMX ja sein, oder?


    Ich hab' die halt mal so genannt, weil ich das Teil immer für RGB benutze


    Ich hab recht wenig Interesse an einem einzelnem RGB-Kanal ^^ Deinen 3er wollte ich für drei weiße Spots verwenden, bei RGB hab ich immer direkt an größere Empfänger gedacht - warum alle zusammen, wenn man jeden SuFlu-Stripe einzeln ansteuern kann :D
    Aber das sind ja alles nur Namen, ist ja völlig egal.


    da kann es gut sein, dass man 255 gar nicht zuverlässig einstellen kann


    Mein Gedanke war auch >0, und nicht 255. Aber wie gesagt, ich stelle halt digital ein. Auf "nicht-null" vergleichen geht in Assembler so schön schnell ;)
    Aber das auf 128 zu ändern sollte auch kein Problem sein.


    und das dann evtl. gleich so machen, dass das Flag erst dann gesetzt wird, wenn man den Taster für länger drückt, damit man sich nicht versehentlich die Adresse verstellt, wenn man mal kurz auf die Taste kommt


    Vielleicht wäre es noch besser, wenn man den Knopf beim Start des Controllers halten muss. Oder gleich nen Jumper dafür nimmt. Wenn der Knopf gedrückt / der Jumper gesetzt ist bleiben die Lampen aus, er wartet auf DMX-Empfang, und sobald er einen Kanal >0 / >128 hat speichert er den, macht die Statusled an und hängt sich auf.
    Vorteile: kein unabsichtliches Programmieren im laufenden Betrieb, der EEPROM wird nur ein einziges mal beschrieben, selbst wenn man den Knopf länger gedrückt hält.


    mit dem EEPROM setze ich mich auch gerade auseinander, da ist's leider nicht so, dass man einfach "ein Byte wohin speichern" kann...


    Meld dich, wenn du das rausgefunden hast. Ich setze mich dann mal daran, den 30er zu kürzen (ist tatsächlich die deutlich bessere Idee).

  • Sehr schön :thumbup: - wie gesagt, das ist ja auch ein ganz simples Stück SW, und ich habe ja echt in fast jeder Zeile nen Kommentar dazu geschrieben...


    Klar, auch das mit dem EEPROM ist nicht "schlimm", man muss es halt mal geschrieben haben...


    Klar, mit nem Lichtpult macht das tatsächlich Sinn, grade wenn es um eine RGB-Gruppe geht.

    Nicht nur mit nem Lichtpult - ich benutze meist E:Cue, auch da vereinfachen der extra Dimmer- und Strobo-Kanal das Programmieren erheblich - wie gesagt, für Live-Anwendungen... kann ja mal ein kleines Video reinstellen zur besseren Verdeutlichung, wenn Interesse


    Aber bei vier Gruppen ein gemeinsamer Dimmer? Nimmt doch eigentlich nen großen Teil der möglichen Effekte weg, wenn man die nur alle zusammen Dimmen kann.

    So war's auch nicht gemeint - schon ein Gesamtdimmer pro 3 Kanäle, halt so, wie wenn 4 von den anderen Receivern in ein Gerät gebaut wären...


    (...)
    Aktueller Status: ich kann meinen ArtNet-Empfänger ansprechen ;)

    Klingt alles sehr interessant - mit Artnet muss ich mich auch mal näher beschäftigen bei Gelegenheit...


    Beim DMX-Transceiver von Hendrik Hölscher gibt es ja auch ein Strobe:
    0-29 = Dimmer
    30-244= Strobe (0,5Hz - 30Hz)
    245-255= SYNC
    Was bewirkt das SYNC?

    Hm, k.A....? - Das solltest Du wohl eher den Hendrik fragen... :D - ich finde so nen kombinierten Kanal (entweder Strobo oder Dimmen) aber auch nicht gut, ich will ja auch das Strobo runterdimmen können... meine billigen "Lightmaxx"-PARs hatten das auch so, da hab' ich dann meine SW rein gemacht... ;)


    "Brauche" ich überhaupt ein Strobe?

    Das musst Du wissen - ich selbst würde es *daheim im Wohnzimmer* nicht brauchen... wie gesagt, sind ja 2 verschiedene Sachen...


    Im Grunde kann ich das ja auch in der SW machen (wenn denn, wie gesagt, überhaupt gewünscht), schnell genug sollte DMX ja sein, oder?

    im Prinzip ja - aber der Datenstrom ist oft auch nicht ganz konstant, also bei "richtigem" Strobo (nicht nur ein schnelles Blinken) kann's dann schon rumflackern/"stolpern"...


    Ich hab recht wenig Interesse an einem einzelnem RGB-Kanal ^^ Deinen 3er wollte ich für drei weiße Spots verwenden, bei RGB hab ich immer direkt an größere Empfänger gedacht - warum alle zusammen, wenn man jeden SuFlu-Stripe einzeln ansteuern kann :D

    Auch hier: *daheim* würde ich ebenfalls einen Dimmer mit mehreren Kanälen pro Zimmer oder gleich für die ganze Bude bauen - *Auf der Bühne* brauche ich halt auch einzelne RGB-Leuchten...


    Mein Gedanke war auch >0, und nicht 255. Aber wie gesagt, ich stelle halt digital ein.

    Ich meistens auch - aber es kann auch mal mit Pult passieren, und das kann bei "Null" auch mal rumflackern, wenn die Fader schon älter sind... darum würde ich halt (wie Du es machst, ist ja Deine Sache) diese 50%-Schwelle nehmen...


    Auf "nicht-null" vergleichen geht in Assembler so schön schnell ;)

    Nur aus Neugier: wie würdest Du das schreiben..? - ich jetzt z.B. für die 50%-Schwelle:

    k.A., wie das *noch* schneller/kürzer gehen sollte... ?( - da hilft z.B. der "Compare, Skip if Equal" (wäre ein Befehl statt den zweien) auch nix, weil man damit nur eine Anweisung überspringen kann...


    Vielleicht wäre es noch besser, wenn man den Knopf beim Start des Controllers halten muss. Oder gleich nen Jumper dafür nimmt. Wenn der Knopf gedrückt / der Jumper gesetzt ist bleiben die Lampen aus, er wartet auf DMX-Empfang, und sobald er einen Kanal >0 / >128 hat speichert er den, macht die Statusled an und hängt sich auf.

    Hm, würde ich persönlich jetzt etwas umständlich finden - v.a. mit Jumper, noch dazu, wenn da noch ein Gehäuse rum ist... ;)


    Vorteile: kein unabsichtliches Programmieren im laufenden Betrieb,

    Wäre bei der anderen Methode auch nicht - muss man halt nur sicherstellen, dass niemand/nichts länger als 1 Sek. den Knopf drückt, das sollte zu machen sein (an anderen Geräten darf ja auch nicht rumgedrückt werden)... Kacke ist nur, wenn der Knopf sofort reagiert - musste heute erst wieder in ne Disco fahren weil "Die Nebelmaschine geht nicht mehr" - ist halt einer beim nachfüllen auf den Adresse up/down-Knopf gekommen...


    der EEPROM wird nur ein einziges mal beschrieben, selbst wenn man den Knopf länger gedrückt hält.

    Wäre bei mir auch so - sobald er die Adresse hat, schaltet er auf laufenden Betrieb, man sieht also den Erfolg - und lässt den Knopf los... dazu hat man über ne Sekunde Zeit (weil der "Knopf-Timer" ja von vorne losgeht) - und selbst, wenn man aus Versehen 2x hintereinander einstellt, in der Praxis wird man kaum öfter als 2.000 - 3.000 mal die Adresse an so nem Gerät umstellen, da bleibt noch Luft für die Lebensdauer...


    Könnte man aber auch ganz einfach so machen, dass der "Knopf-Timer" erst bei zwischenzeitlichem Loslassen neu gestartet wird, dann findet das Einstellen auch dann nur genau einmal statt, wenn man den Knopf länger gedrückt *hält*

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • So war's auch nicht gemeint - schon ein Gesamtdimmer pro 3 Kanäle, halt so, wie wenn 4 von den anderen Receivern in ein Gerät gebaut wären...


    Ok, das macht dann deutlich mehr Sinn - ich bin mal wieder von Hendriks Transceiver ausgegangen, der hat einen Gesamt-Dimmer für 9 Kanäle. (Übrigens zusätzlich zum Strobe, 0-29=Dimmer heißt nur, dass der Dimmer aktiv ist)


    Zitat von »jens_n«
    "Brauche" ich überhaupt ein Strobe?
    Das musst Du wissen - ich selbst würde es *daheim im Wohnzimmer* nicht brauchen...


    Natürlich "brauche" ich in dem Sinne kein Strobe :D
    Das gehörte schon zu der nächsten Frage, sollte besser "brauche ich überhaupt einen Strobe-Kanal" heißen. Aber naja, da kümmere ich mich später drum. Ist auch nur richtig interessant, wenn es zwischen den Geräten gesynct ist, heißt man müsste eh nochmal eine neue, einheitliche Lösung dafür schreiben.


    Nur aus Neugier: wie würdest Du das schreiben..?


    Ja, genau an das "Compare, Skip if Equal" hatte ich gedacht :P
    Und es ist im "Normalfall" (=kein Knopfdruck) immer noch schneller, weil ja nur eine Anweisung statt zweien ausgeführt werden. Aber nen Sinn machts nicht, das einen Prozessortakt schneller zu kriegen - ich mache dann den Vergleich mit 128 ^^


    Zitat von »jens_n«
    Vorteile: kein unabsichtliches Programmieren im laufenden Betrieb,
    Wäre bei der anderen Methode auch nicht - muss man halt nur sicherstellen, dass niemand/nichts länger als 1 Sek. den Knopf drückt, das sollte zu machen sein (an anderen Geräten darf ja auch nicht rumgedrückt werden)...


    Hmm... stimmt schon - ich finde die Lösung "Kanal einstellen"-"Knopf drücken"-"Stecker rein" aber eigentlich zum Einstellen völlig ausreichend und glaube, dass die weniger Aufwand zu schreiben ist :D
    Ist auch "Idiotensicherer", grade wenn man die Lampen im Haus verteilt. Aber ich schreibe erstmal den EEPROM-Teil, der Rest ist dann ja kein Aufwand mehr.

  • Hier mal ein kleines Video:


    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.


    Da sind halt Farben und Helligkeiten extra programmiert - z.B. wechselt Anfangs rot blau und weiß durch, dazu das Helligkeitsprogramm "springen" - später mal grün, dazu "Lauflicht" und "pulsieren", zwischendrin sind auch mal alle einfach nur an - ich habe hier ein paar Farbprogramme (Rot/Blau, Rainbow, einzelne Farben), für die Helligkeit "alle an", "Springen", Lauflicht und Pulsieren, dazu kann man auf das Ganze noch Strobo geben oder nicht, also x Kombinationen mit ein paar Programmen - hätten die Leuchten keine extra Kanäle für Gesamtdimmer und Strobo, müsste ich *jede* dieser ca. 100 Kobinationen *einzeln* programmieren...


    gut, wenn man seine Lichtsteuer-SW selbst schreibt (wie jens), dann kann man das *da* ja schon integrieren, dass die versch. Programme dort "zusammengerechnet" werden - eine Funktion, die ich am E:Cue vermisse, weil die Haus-LEDs haben keinen Gesamtdimmer, da musste ich also lauter Einzelprogramme machen (Rot an, Grün an, Blau an, Orange an - dann Rot pulsen, Grün Pulsen usw., Rot Strobo, usw.), insg. 24 Programme statt einfach 6 für die Farben und 4 für die Helligkeit, die dann kombiniert werden...


    bei 0:26 ist z.B. ein langsames Strobo, das schon aus dem Takt gelaufen ist, daher dieses seltsame "Lauflicht" - das Strobo einfach an bleibt ziemlich lange synchron, es läuft erst wirklich auseinander, wenn man die Geschwindigkeit verstellt, weil jeder Receiver das an ner anderen Stelle updatet...


    EDIT: man sieht's nicht wirklich - drecks Youtube-"Qualität" :cursing: - ich versteh' das echt nicht, dass meine Videos da immer so pixelig und dunkel und rucklig werden - die Originale sehen weit besser aus, und ich liefer' das da ja so ab, wie sie's haben wollen... ?(


    jens: bin schon gespannt auf Deine SW! - und lass' Dich von mir nicht rausbringen, sind ja nur Anmerkungen/Vorschläge... ;) - ich selbst werde das mit dem Taster dann wohl gar nicht mehr machen, wir bauen hier ja auch nen 12-Kanal-Dimmer mit Einstellung per Display, da hängt's nur grad bei mir fest bei der Audio-Beat-Auswertung (Analogschaltung) :D


    mit dem besser synchronisierten Strobo werde ich mich aber auch noch beschäftigen, da stelle ich mal was rein, sobald ich was habe... wird wohl drauf rauslaufen, da auch nen Timer zu benutzen, wenn alle Strobos gleichzeitig starten, sollte das dank Quarz dann doch ne ziemliche Weile dauern, bis die auseinanderlaufen...

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Hihi, bin grade auf der suche nach dem "12-Kanal-Dimmer" über einen Post von dgoersch gestolpert ^^

    Man müsste ne Art Auto-Adressierung machen.... gibts sowas bei DMX schon, oder hab ich grad ne heiße Idee, die ich besser ned im Forum verbreite? *gg*


    Einfachste Möglichkeit: Einen "Adressier"-Taster am Panel/Interface. Wenn der gedrückt gehalten ist, stellt sich der Empfänger auf die erste Adresse die über den Bus kommt. Das einmal bei allen Panels/Interfaces machen und dabei an der Software oder am Pult den passenden Regler hochziehen. Fertig.


    Bin anscheinend nicht der erste mit der Idee, das ist doch schonmal nen gutes Zeichen bzgl. der Brauchbarkeit ^^


    Den 12-Kanal-Dimmer würde ich gerne mal sehen - aber nur aus Interesse, dass ich sowas hier verbauen will ist unwahrscheinlich. Effektiv zählt bei so einer Wohnraumbeleuchtung dann doch nur der Preis (darum verzichte ich ja auch auf so einen Schnickschnack wie DIP-Schalter :D )
    Wobei ich die Sache mit dem Knopf tatsächlich sogar praktikabler als den DIP-Schalter finde, grade wenn man das ganze bei Endbenutzern einrichtet. Kriegt die Software halt nen Knopf "Gerät anschließen", dann wird der passende an der Lampe gedrückt und (hoffentlich) funktioniert einfach alles.


    Aktueller Status:
    Adresse wird aus dem EEPROM ausgelesen (aber noch per ISP gesetzt).


    Edit:
    Ach ja, und das Video sieht ziemlich cool aus, so bekommt man wenigstens mal ne Ahnung, was du etwa machst. Die Röhren sind ja riesig! Bei "Veranstaltungen" hatte ich irgendwie immer eher an nen kleineren Rahmen gedacht, warum auch immer ^^
    Und dass man da Dimmer+Strobo pro Röhre braucht ist natürlich klar!

  • Ja, das hatte ich schon wieder vergessen, dass Domi das schon mal vorgeschlagen hatte... ich schreibe wohl einfach zu viel hier... :whistling:


    Klar, für daheim braucht man einiges nicht, ich selbst würde da ja wohl sogar einfach die Adressen fest "einbrennen" und fertig - wenn das wie bei Dir "aus einem Guss" kommt (Dimmer + Steuer-SW), dann ist's natürlich ne super Idee, da so ne Art Setup-Routine zu machen, dass jeder ganz einfach damit zurecht kommt - also einfach so: PC sagt "drücken sie bitte den Taster an Lampe 1", dann macht man das, bestätigen, dann Taster an Lampe 2 usw. - wäre ne sehr einfache und gute Methode...


    bei mir ist halt DIP oder Display doch besser, normal stelle ich ja im Lager schon die ganzen Adressen ein, da ist beim Aufbau keine Zeit, erst recht nicht, wenn ich am Pult Kanal so&so hochziehen und dann zu der Leuchte laufen und Taste drücken müsste, dann wieder zum Pult, dann wieder zur nächsten Leuchte usw... habe ich glaubich auch schon geschrieben...


    natürlich bekommst Du das Teil dann zu sehen, das wird dann hier vorgestellt - kann aber noch dauern, wie gesagt, die Sound2Light-HW macht mir noch Kopfzerbrechen, und dann geht's erst los mit der ganzen Programmiererei (Menue, Display)


    P.S.: womit ich mich irgendwann auch noch mal auseinandersetzen will, ist DMX RDM - da geht das Adressieren etc. dann *wirklich* "automatisch" - ich kenne nur noch kein (bezahlbares) Pult/Lichtsteuer-SW, das das unterstützt...

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!

  • Ach, Assembler ist doof *g*
    Mir fehlt hier dermaßen ein Debugger... EEPROM-Lesen geht, der Knopf "geht", heißt, wenn ich den beim Start gedrückt halte (damit fange ich erstmal an, während dem Betrieb drücken kommt später) springe ich auch in meinen Autoconfig-Bereich der DMX-Empfang-Routine. Er erkennt weiterhin, ob DMX anliegt oder nicht (->Status-LED), aber die Adresse wird trotzdem nicht übernommen.


    Könnt ihr bitte mal über den Code gucken? Meiner Meinung nach müsste es klappen - entweder ich hab nen Flüchtigkeitsfehler (/was übersehen) oder ich habe irgendeinen Assemblerbefehl falsch verstanden. Bin es jetzt so oft durchgegangen, aber ich finde nix mehr.



    Nochmal fürs Archiv, wenn alle durch den Thread scrollen und nur den DL-Link sehen :D
    Achtung: Download enthält eine fehlerhafte und nicht fertige Version des Receiver-Quellcodes

  • der Knopf "geht", heißt, wenn ich den beim Start gedrückt halte (damit fange ich erstmal an, während dem Betrieb drücken kommt später) springe ich auch in meinen Autoconfig-Bereich der DMX-Empfang-Routine.

    Nur aus Neugier: woher weisst Du das...? - also wie kannst Du im Betrieb überprüfen, dass er wirklich an die Stelle springt..? (sowas bräuchte ich ab&zu auch mal, aber eben ohne HW-Debugger o.ä.)


    hier ist mir was aufgefallen:


    Code
    DMX_Start_H:
    		.db		high(DMX_Start)
    DMX_Start_L:
    		.db		low(DMX_Start)


    der AVR-Assembler erwartet immer eine gerade Anzahl Bytes in einer Zeile, den Rest füllt er auf - ist da keine entsprechende Meldung gekommen...? - jedenfalls sollte es heissen:


    .dw DMX_Start, also einfach gleich das Word gespeichert...


    der Fehler liegt aber wohl hier:


    Code
    tst		temp1, 128					; Aktuellen Kanal testen
    		brne	dmx_autoconfig_found


    d.h., er erkennt den Kanal, wenn er *nicht 128 ist* - er soll aber doch bei *über 128* den Kanal als Startkanal nehmen, also müsste es heissen:


    Code
    cpi		temp1, 128					; Aktuellen Kanal testen
    		brsh	dmx_autoconfig_found            ; wenn größer oder gleich 128, dann Startkanal gefunden


    btw.: gab's da keine Fehlermeldung bei "tst temp1, 128"...? - normal gibt man bei tst nur ein Register an, dann schaut er, ob der Inhalt negativ oder 0 ist und setzt die entsprechenden Flags... also eigentlich, bei


    Code
    tst		temp1				; Aktuellen Kanal testen
    		brne	dmx_autoconfig_found      ; wenn != 0, dann Startkanal gefunden


    sollte das dann so sein, dass er bei allen Kanälen über 0 diesen als Startkanal erkennnt...?!? - so wie Du es ja zuerst wolltest... evtl. bringt ihn da das temp1, 128 "durcheinander"...?

    It's only light - but we like it!


    Da es sich in letzter Zeit häuft: Ich beantworte keine PNs mit Fragen, die sich auch im Forum beantworten lassen!
    Insbesondere solche von Mitgliedern mit 0 Beiträgen, die dann meist auch noch Sachen fragen, die bereits im entsprechenden Thread beantwortet wurden.
    Ich bin keine private Bastler-Hotline, technische Tipps etc. sollen möglichst vielen Lesern im Forum helfen!