DMX-Receiver 12-Kanal mit ATtiny2313

  • Ach, übrigens, da Du ja eh' ein ganzes Byte für das Taster-Flag nimmst, wäre das mit dem Abfragen unter dem Betrieb auch ganz leicht gemacht: Wenn der Taster gedrückt ist, zählst Du das Byte hoch, bei 254 (nach ca. ner Sekunde) wird dann der Autoconfig durchgeführt, das Byte auf 255 gesetzt (heisst, Autoconfig wurde durchgeführt), und bei 255 bleibt's dann eben, solange der Taster gedrückt ist - dann gibt's auch keine Mehrfachabfragen, wenn man den Taster nicht zwischendurch loslässt...


    Du müsstest dann nur hier:

    Code
    tst		Autoconfig					; Überprüfen, ob Autoconfig-Mode aktiv ist
    brne	dmx_autoconfig


    statt dessen schreiben:

    Code
    cpi		Autoconfig, 254					; Überprüfen, ob Autoconfig-Mode aktiv ist
    breq	dmx_autoconfig


    und bei durchgeführtem Autoconfig eben das Register nicht löschen

    Code
    clr		Autoconfig					; Zurück zum normalen Betrieb


    sondern auf 255 setzen:

    Code
    ser Autoconfig     ; auf "Taste loslassen" warten


    die Taster-Abfrage dann in die PWM-Routine mit rein, an dieser Stelle:


    dann wird sie 244x in der Sekunde durchgeführt - sieht dann so aus:


    das entprellen ist da "automatisch" mit dabei - wenn der Taster prellt, dann zählt Autoconfig meinetwegen bis 27, dann macht der Taster wieder auf (prellen), also Autoconfig wieder auf 0 - usw. bis der Taster zu bleibt, erst dann wird weiter gezählt bis 254, und da dann der Autoconfig durchgeführt...


    wegen dem "cpi" musst Du aber dann für "Autoconfig" eines der Register 16-27 nehmen (geht bei R7 nicht)... und nur als Tipp: es bietet sich an, statt sbis PinD, 1 lieber sbis Taster_Pin, Taster zu schreiben, und das dann oben anzugeben (so wie bei der Status-LED auch), das erleichtert die Portierung, falls man mal den Taster woanders hat...

    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!

  • 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.ä.)


    Ob er an die richtige Stelle springt kann ich natürlich nicht absolut sicher sagen - aber da die Status-Led noch funktioniert (=Startbyte wird noch erkannt), aber die Lampen nicht mehr leuchten (=der "normale" Receive-Teil wird nicht ausgeführt) bin ich mir recht sicher, dass er in meinen Autoconfig-Block springt.


    Zitat


    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 DMX-Empfang funktioniert aber (wenn ich den Taster nicht drücke) noch wunderbar - mein Programmer sagt mir als Inhalt des EEPROMS "0 00 0F", wenn ich 15 als Adresse einstelle, und die wird dann auch benutzt.

    Zitat


    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:


    uuuuuups, die eigentliche lösung war nen "cpi temp1, 128" - "brsh ..." (hat nicht funktioniert) - das wollte ich dann ändern (verzweifelt was anderes probieren und so ^^ ), und da hab ich wohl vergessen, die 128 zu löschen. Wie gesagt, ging vorher auch nicht.

    Zitat


    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


    Jepp, die letzte Änderung hatte ich noch gar nicht getestet - war wohl schon zu spät :whistling:


    Ich hole das mal schnell nach - aber große Hoffnungen mache ich mir nicht.

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


    Hab das grade mal gemacht, und plötzlich funktioniert es :huh: Ich weiß einfach nicht, was da vorher falsch war (nicht die Version, die ich Hochgeladen hab - die davor meine ich :P ). Aber egal, es geht, vielen Dank!
    Das mit dem hochzählen baue ich ein, sobald das EEPROM-Schreiben geht. Vielen Dank für den Code, erspart mir die Arbeit das selber zu schreiben ;)


    Edit 22:01 Uhr:

    wegen dem "cpi" musst Du aber dann für "Autoconfig" eines der Register 16-27 nehmen (geht bei R7 nicht)...


    Zwischenzeitlich lag das schon in R24 - während der Fehlersuche wurde das geändert, darum musste ich dann auch die Subroutine für das setzen des Bits einfügen ^^

  • Ich präsentiere - *tadaaaa* - Version 1.0 meines 12-Kanal DMX-Receivers!


    Features:

    • Ansteuerung von 12 LEDs über Treiberstufe an PortB7-0 und PortD6-3
    • Automatische Konfiguration der DMX-Adresse durch drücken eines Tasters an PortD1 für eine Sekunde (wird direkt ausgelöst, wenn der Taster beim Reset/Einschalten gedrückt ist). Es wird der erste Kanal mit einem Wert größer/gleich 128 als Startadresse gewählt. Wird der Taster losgelassen, bevor ein Kanal einen entsprechenden Wert erhält wird die automatische Konfiguration abgebrochen.
    • Statusled an PortD2 - Leuchtet im Normalbetrieb, Blinkt mit ca. 2Hz bei fehlendem DMX-Signal, Blinkt mit ca. 8Hz nach erfolgreicher Addresskonfiguration (bis der Taster losgelassen wird)


    Der Schaltplan:

    Ist mein erster (am PC erstellter) Schaltplan, und ob es nun an mir oder am Programm liegt, ich finde das Ergebnis (bzw. die Optik) grausam ^^
    Hat Target eigentlich ne Exportfunktion für den Schaltplan?


    Hier ist die Zip mit Quellcode, hex und eep (beim flashen nicht vergessen!):
    DMX-Receiver-12Channel_Version-1.0.zip
    Post mit Version 1.1
    Extra nochmal kompiliert, auf den Attiny gespielt und getestet, damit nicht das gleiche wie letztes mal passiert ;)

  • In der Tat ein merkwürdiges Layout vom Schaltplan. Allein die Größenverhältnisse zwischen µC und ULN2803A... bzw. das unterschiedliche Raster der Pins. Sehr gewöhnungsbedürftig.
    Hier habe ich gestern/heute Nacht auch einen Plan mit ULN2803A und µC erstellt. Obwohl er sich von der Anordnung kaum unterscheidet, wirkt er irgendwie "aufgeräumter" finde ich. Womit hast du den Plan denn erstellt? Die Footprints/Symbole alle aus der selben Quelle?

  • Target 3001


    Probiere aktuell noch nen bisschen mit den Programmen rum ^^
    Der Vorteil, den ich bei Target sehe: Die Libary hat wirklich *alles* an Bauteilen drin. Aber für Schaltpläne scheint es nicht gedacht zu sein, wie gesagt, ich hab nichtmal ne Export-Funktion gefunden (das ist nen Screenshot).


    sPlan würde ich gerne mal ausprobieren, aber 40€ schrecken mich doch nen bisschen ab :S

  • Freut mich, dass alles geht! :thumbup: - die EEprom-Routinen "klaue" ich Dir dann einfach :D - aber etwas umgeschrieben, dass z.B. die Adresse in temp0 liegt und der Wert in temp1 zurückgegeben wird, dann kann man auch mehrere in einer Schleife lesen/speichern...


    gleich mal ansehen, Du hast meinen Taster-Code dann noch erweitert/umgebaut, nehme ich an...? - weil das mit dem Abbrechen der Konfiguration wenn man den Taster wieder loslässt, ist gar nicht mal blöd*, das war bei mir nicht drin... und wie Du das mit dem schnelleren Blinken gelöst hast bin ich auch neugierig... ;)


    *wobei man's in der Praxis ja eh' so machen wird, dass man erst am Sender den Kanal hochzieht, also wirklich abbrechen kann man dann eigentlich auch nicht mehr...


    Der DMX-Empfang funktioniert aber (wenn ich den Taster nicht drücke) noch wunderbar - mein Programmer sagt mir als Inhalt des EEPROMS "0 00 0F", wenn ich 15 als Adresse einstelle, und die wird dann auch benutzt.

    Ja, da hatte ich nen Denkfehler - das ist nur im Flash so, dass immer 2 Bytes geschrieben werden müssen, weil der ja eigentlich in Wörtern organisiert ist...


    P.S.: ich habe die Demo von sPlan, da ist halt speichern und drucken deaktiviert - wenn man das (den Schaltplan als sPlan-Datei) nicht aufheben will/muss, kann man ja den Plan zeichnen und dann nen Screenshot davon machen... ;)

    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!

  • Klau die EEPROM-Routinen lieber von mikrocontroller.net, da sind sie her. Im Original wird für die Adressierung der Z-Pointer verwendet (muss man ja auch überall, wo >256 Byte EEPROM vorhanden ist, oder?), ich hab das dann für meine Zwecke auf die vorhandenen Registerdefinitionen umgeschrieben.


    Den Taster-Code hab ich mir angeguckt, verstanden, und dann selber umgesetzt ;)
    Die Idee mit dem "abbrechen" kam mir zwischendurch: Was z.B. wenn die Konfiguration fehlschlägt (z.B.: Sender nicht angeschlossen) und der Empfänger aber länger im Autoconfig-Modus bleibt (ohne, dass das jemand merkt, da hatte ich noch kein schnelles Blinken ^^). Beim Start des Senders geht das dann evtl. ziemlich schief.


    Die Idee mit der Demo von sPlan ist schonmal ganz gut. Nur der Gedanke, alles neu machen zu müssen, wenn ich mal ne Änderung hab gefällt mir noch nicht so.

  • Hi


    cool super! 8o
    Ich habe mich gerade mal durch alle Posts durchgeschaut/gelesen und hab nun rieeesen Interesse an deinem/eurem Projekt :thumbup:
    (wenn es denn so funktionieren sollte wie ich mir es erhoffe :rolleyes: ). Und zwar habe ich mir gedacht das ich den Controller als Empfänger für Benklys Eiwomisa benutzte und somit dann auch RGBW ausgeben kann. ( ?( )
    Ich hab dazu allerdings noch ein Paar fragen:

    Hier ist die Zip mit Quellcode, hex und eep (beim flashen nicht vergessen!)


    .hex ist mir klar das ich damit den µC flaschen muss - aber was ist die .eep?


    Laut Schaltplan benutzt du denULN2803A, wo bekommt man den her? (reichelt und conrad hab ich den nicht gefunden) und kann der auf allen Eingängen gleichzeitig 500mA ab?



    gruß

  • .hex ist mir klar das ich damit den µC flaschen muss - aber was ist die .eep?

    Die muss in's EEPROM, damit der Receiver schon mal ne Startadresse hat - muss man im Pony Prog z.B. extra laden und dann in's Eeprom schreiben...

    Laut Schaltplan benutzt du denULN2803A, wo bekommt man den her? (reichelt und conrad hab ich den nicht gefunden)

    hier bitte

    und kann der auf allen Eingängen gleichzeitig 500mA ab?

    Das hatten wir neulich erst - wären dann also 4 A für das Ganze Teil, bei 500 mA hast Du gut 1,6 Volt über der Kollektor-Emitter-Strecke, macht dann also 6,4 Watt Verlustleistung für das Teil - es kann aber nur 2,25 Watt vertragen...


    Also: ich finde den ULN2803A ne tolle Sache, wenn man 8x 100 mA braucht oder so - aber wenn Du wirklich aus jedem Kanal 500 mA rausholen willst, dann würde ich doch lieber einzelne Transistoren nehmen, z.B. BC337

    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!

  • Zitat

    Die muss in's EEPROM, damit der Receiver schon mal ne Startadresse hat - muss man im Pony Prog z.B. extra laden und dann in's Eeprom schreiben...

    Oh.. wusst ich garnicht das das auch geht... mal gucken ob das mit dem myAVR_ProgTool auch klappt (wenns denn soweit ist)


    Danke für den Hinweis... ich glaub vorhin hatte ich nach dem "ULN2805A" gesucht... warum auch immer :D .
    Das mit der Gesamtleistung ist ja sch****- dann werde ich "deine" 2-Transistor-Ksq benutzten (im moment zumindest geplant ^^)


    Also sollte es keine probleme geben? einfach die kanäle "reindrücken" und schon passt mit rgbw? :)


    gruß

  • Ja, also ich weiß ja nicht, wie der Ewodingsda die Kanäle ausgibt, aber das hier ist ein 12-Kanal-Receiver - der Eiw,... hat 4 Kanäle... d.h. Du kannst mit ihm wohl auch 4 Kanäle steuern - k.A., ob man das dann "mal drei" machen kann, also hier Kanal 1 = Kanal 5 = Kanal 9, Kanal 2 = Kanal 6 = Kanal 10 usw...


    ist mir nur nicht ganz klar, wozu Du das zum dem Eiw... dazu brauchst, an den kannst Du ja selbst schon LEDs anschließen - also irgendwie relativ sinnlos, das was der macht, noch mal auf nen anderen Dimmer zu geben...??! - noch dazu einen, der mehr Kanäle hat...

    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!

  • Ja, das geht natürlich auch - Du musst ja nicht alle 12 Kanäle benutzen, kannst ja auch nur die ersten 4 nehmen, und einen Receiver pro Leuchte bauen...


    wenn der Ei... die Kanäle nacheinander ausgibt (R, G, B, W), dann kommen sie da auch so an - das .hex ist für Adresse 1 assembliert, also wenn der eiwo die Kanäle ab Adresse 1 ausgibt (sollte wohl Default-Einstellung sein..?), dann kannst Du das einfach zamstöpseln, ohne irgendwas einstellen zu müssen...


    ich weiß nur nicht, ob das Teil auch die ganzen normalen Programme parallel per DMX ausgibt, das müsstest Du mal den Benny fragen... weil *wenn* das so ist (wie ich das in Erinnerung habe), dass man nur in einem extra Programm die Werte einstellen kann die er per DMX ausgibt, dann ist das ein "etwas" teures und umständliches "Lichtpult"...


    P.S.: Strom brauchst Du ja auch noch zu den Leuchten hin, bei vernünftiger Trennung also auch 5 Leitungen - unterm Strich also eigentlich Arsch wie Hose...


    ich selbst würde einfach einen zentralen Mehrkanal-Dimmer für die Beleuchtung nehmen... und das dann vom PC oder normalem Lichtpult aus steuern - dann kannst Du auch noch mehr machen als nur alle Leuchten die selbe Farbe...

    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!

  • Ich möchte noch anmerken, dass der ULN2803 optional auch durch beliebige LED-Leistungsstufen ersetzt werden kann. Beim 3-Kanal-Receiver hat Pesi z.B. FETs verbaut (ignorier die grauen Teile :whistling: ) - damit kannst du dann wirklich viel schalten - kp wie viel genau, sollte bei mehreren Ampere liegen.


    ich weiß nur nicht, ob das Teil auch die ganzen normalen Programme parallel per DMX ausgibt, das müsstest Du mal den Benny fragen... weil *wenn* das so ist (wie ich das in Erinnerung habe), dass man nur in einem extra Programm die Werte einstellen kann die er per DMX ausgibt, dann ist das ein "etwas" teures und umständliches "Lichtpult"...


    Man kann da alle möglichen Kombinationen einstellen - Kanäle 1-4 mit den aktuellen Werten der Ausgänge belegen ist auch dabei. (Optional kann man zusätzlich noch per RS232 Kanal 5 - 512 ansteuern)


    Hab mir die dann auch mal angeguckt, aber effektiv waren mir dann 4 Kanäle doch zu wenig ^^
    Jetzt hat selbst mein Ambilight 21 einzelne Kanäle (=7xRGB) - aber auch nur, weil ich nicht mehr SuFlus + Platinen bestellt habe, geplant sind mittlerweile 3x9 oder 3x13 - je nachdem, was die ersten Tests ergeben :D

  • So ich habe mir diesen DMX Dimmer heute aufn Steckbrett zusammen gesteckt und geprogt. Geht auch alles nur soweit nur findet der kein DMX Signal unterschiedliche Polungen habe ich auch schon Probiert. Ich habe nur 4LEDs drann die Status LED die immer nur Blinkt und an den ersten 3 Ausgängen welche die immer nur Leuchten.


    Fluxi


    Edit: Hier nochmal ein Bild vom aufbau die Drähte die am SN rausgehen sind die DMX Leitungen.


    [gallery]2329[/gallery]