EVG mit DSI dimmen

  • Hallo,

    ich habe hier ein Elektronisches Vorschaltgerät von Tridonic rumliegen, welches ich per DSI (Digital Serial Interface) dimmen kann. Leider habe ich nicht die passenden Suchbegriffe gefunden, um eine für mich verständliche Anleitung zu finden, wie ich dieses DSI mit einem Raspberry Pi ansteuern kann. Ich möchte die Steuerung mit Python realisieren.

    Hat hier jemand Lösungsansätze oder Beispiele dafür? Ist es überhaupt möglich, mit dem Pi über das DSI zu kommunizieren?

    Über Hilfestellung würde ich mich sehr freuen!

    LG, Ingo

    • Offizieller Beitrag
    Zitat von wikipedia

    It is a proprietary standard initially exclusive to Tridonic and mainly brands of Tridonic's parent company Zumtobel.

    Ein hoch auf offene Standards :). Da wirst du wohl erst Reverse Engineerenb müssen um dir aus diesen Daten dann ein python modul zu bauen.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

  • Hallo Ingo,

    herzlich Willkommen in unserem Forum!

    Wenn Du auf dieser Seite hier keine Informationen zur Programmierung (Pegel, Zeiten, ...) findest, dann sieht es mit Deinem Vorhaben schlecht aus.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo Ingo,

    das DSI besteht ja, einfach ausgedrückt, aus zwei Teilen. Dem elektrischen Signal und dem Code. Der Code sollte kein Problem sein, 1 Startbit, ein Datenbyte für den Dimmwert und 4 Stopbit, und das bei 1200 Baud. Siehe hier. Fehlt noch das passende elektrische Signal. Vielleicht hilft dieser Thread bei mikrocontroller.net weiter. Aber Achtung, das Thema driftet zu einem großen Teil Richtung DALI ab. Aber weiter unten gibt es einen Link zu einem PDF mit den DSI Spezifikationen. Viel Erfolg!

    Gruß
    Rob

  • Hallo, vielen Dank für die raschen Antworten.

    Leider habe ich bisher noch keine Erfahrungen zum Thema serielle Übertragung. In dem DataSheet zum DSI finde ich lediglich die Info, dass ein 8 Bit Manchester Code übertragen wird, was rob.z ja bereits etwas detaillierter beschrieben hat. Wie ich das aber nun umsetze übersteigt meinen bisherigen Kenntnissen dazu. Vielleicht hat der ein oder andere ja noch ein paar weiterführende Infos dazu...

    LG, Ingo

  • Hallo Ingo,

    ich habe auch keine Erfahrung mit dem Thema, darum setze ich jetzt einfach nur mal zusammen, was ich mit Google gefunden habe. Ich vermute, die DSI-Schnittstelle am EVG sind 2 Anschlüsse? Dann braucht es einfach 2 Leitungen, Signal und GND, zwischen RasPi und EVG. Der Code wird übermittelt, indem auf der Signalleitung der Pegel entsprechend der Codierung und in der richtigen Geschwindigkeit High bzw. Low geschaltet wird. Das erledigt ein Python-Script, das den Code erzeugt und auf einem GPIO ausgibt. Das Script muss natürlich noch geschrieben werden. DSI arbeitet mit einer Spannung von 12V, also 12V für High und 0V für Low. Der GPIO hat eine Spannung von 3,3V. Das Signal muss also noch verstärkt werden. Das kann über einen Transistor (Pegelwandlerstufe) erfolgen. Das müsste es dann schon gewesen sein.

    Im Forum von mikrocontroller.net hat jemand das Problem bereits gelöst, allerdings wahrscheinlich mit einem Mikrocontroller. Leider hat er seinen Lösungsweg dort nicht bekannt gegeben, sondern nur das Stichwort Transistor als Pegelwandlerstufe genannt. Ich denke nicht, dass es für dein spezielles Vorhaben eine fertige Lösung gibt, aber mit den genannten Stichworten sollte eine Umsetzung auch ohne Studium möglich sein.

    Gruß
    Rob

    Einmal editiert, zuletzt von rob.z (17. September 2015 um 15:24)

  • Hi Rob,

    das klingt doch schon alles etwas plausibler für mich, da kann ich schon eher was mit anfangen. Vielen Dank. Ja, das EVG hat 2 Anschlüsse (bzw. 4, 2x GND, 2x DSI Signal für 2 Leuchtstoffröhren)

    Ich habe für mehrere Schnittstellen bereits einen ULN2003 im Einsatz, um von den 3.3V auf 5V bzw. 12V zu kommen, z.B. um einen LED-Strip zu dimmen (softPWM). Das ist ein Darlington-Array mit mehreren Transistoren. Evtl. kann ich es damit dann ja auch umsetzen.

    Es gibt nur sooo viele Alternativen, wie man so etwas umsetzen kann, da bin ich als Einsteiger zur Zeit noch stark überfordert. ;)

    Gruß, Ingo

  • Hi,

    ULN2003 klingt ja schon mal gut, da hast du ja in der Richtung schon Erfahrung. Fehlt also nur noch das Script, das im richtigen Takt den GPIO High und Low schaltet. Als Alternative gibt es ja auch noch EVGs mit analoger Steuerung (0-10V), aber dafür braucht man dann wieder einen D/A-Wandler.

    Gruß

    Einmal editiert, zuletzt von rob.z (17. September 2015 um 16:17)

  • Hi Rob,

    ja, den Gedanken, ein EVG mit analoger Steuerung zu verwenden, hatte ich auch bereits, sowas hab ich allerdings gerad nicht hier. Ich könnte mir vorstellen, die 0-10V anstatt mit nem D/A-Wandler auch mit PWM zu realisieren, da ich aber nur 5 und 12V in meinem System habe, müsste ich die auch noch runter ziehen, was wieder zusätzliche Bauteile voraussetzt...

    Also mal weiter mit DSI experimentieren:
    mit wiringpi2 kann ich sehr bequem die seriellen GPIO-Pins ansteuern:

    Code
    serial = wiringpi2.serialOpen('/dev/ttyAMA0',1200) # Requires device/baud and returns an ID
    wiringpi2.serialPuts(serial,manCode)
    wiringpi2.serialClose(serial) # Pass in ID

    Zudem habe ich mal etwas nach Manchester-Code gegooglet und eine Funktion in Python gefunden, welche einen Manchester-Code generieren soll. Verifizieren konnte ich es noch nicht, das ist insgesamt schon hohe Mathematik für mich. :s Da das EVG einen logarithmischen Dimmwert benutzt, um von 0 bis 100% gleichmäßig heller zu werden, habe ich die Funktion umgeschrieben, um anschließend 1-100% gleichmäßig dimmen kann.

    Code
    #im Sekundentakt von 0 auf 100% dimmen
    for i in range(0,101):
       codes=EncodeToMan(i)
       for manCode in codes:
          wiringpi2.serialPuts(serial,manCode)
       time.sleep(1)

    Ich schließe also den UART-TX Pin an einen ULN2003 an (mit einem kleinen Widerstand, zur Strombegrenzung), dieser zieht den Wert dann auf 12V hoch und die kommen dann an den DSI Port vom EVG. Masse vom Steuersignal am EVG kommt an die gemeinsame Masse des ULN2003. Könnte das tatsächlich schon alles sein? Oder habe ich etwas vergessen oder zu einfach gemacht? Über Feedbacks würde ich mich sehr freuen! :huh:

    Testen konnte ich es bisher noch nicht, leider fehlt mir noch das Leuchtmittel und ein paar Widerstände.

    Gruß, Ingo

  • Hallo Ingo,

    ich habe mir mal deine Funktionen angeschaut. In der Funktion LogarDimWert() ist ein Fehler, da taucht einmal STRwert auf, sollte aber wohl INTwert sein. Die Funktion decToBin() ist ok, es gibt aber auch eine eingebaute Funktion dafür. In der Funktion EncodeToMan() stecken ein paar Fehler.

    • Die Dezimalzahl dimwert wird in ihre Ziffern zerlegt, für jede Ziffer der Ascii-Code ermittelt und der dann in eine Binärzahl umgewandelt. Für jede Binärzahl wird der Manchester-Code ermittelt und das Ergebnis als Liste zurückgegeben. Es reicht aber, dimwert direkt in Binär umzuwandeln, daraus den Manchester-Code zu ermitteln und das als Ergebnis zu liefern.
    • Die Schleife zum Anhängen von Nullen (1. i-Schleife) wird einmal zu wenig ausgeführt. Das Ergebnis ist 7-stellig.
    • Alles hinter dieser Schleife ist eingerückt, es sollte aber nur eine Zeile innerhalb dieser Zeile ausgeführt werden.
    • Den Manchester-Code gibt es in 2 Varianten, hier wird die Falsche erzeugt. D.h. 0 und 1 sind vertauscht.


    Ich habe mal die fehlerhaften Teile überarbeitet und noch eine Funktion Frame() hinzugefügt, da an das manchestercodierte Datenbyte noch Start- und Stopbits dran müssen. Das Ergebnis hat dann 21 Bit. Die Funktion LogarDimWert() habe ich so verändert, dass sie eine Integerzahl zurück liefert.

    Zu der Idee, das Ganze über den seriellen Pin zu senden, kann ich nichts sagen. Wenn das Signal so auch der zeitlichen Spezifikation entspricht, wäre das eine einfache Lösung. Ich hätte das wahrscheinlich ein Script machen lassen, weil ich nicht auf die Idee gekommen wäre. Bezüglich der Elektronik überlege ich, ob vielleicht noch eine Strombegrenzung auf die 12V-Seite sollte, die Spezifikation spricht da von 2mA pro EVG.

    Gruß
    Rob

  • Hi Rob,

    vielen Dank für deine Mühen! Bis ich das heraus gefunden hätte, wären sicherlich noch Wochen vergangen...

    Ich habe mir die Spezifikationen gerad auch noch mal durchgelesen, das mit den 2mA ist natürlich noch so ne Sache. Der ULN2003 ist direkt am ein 12V Netzteil mit 3A angeschlossen. Da werd ich besser mal etwas recherchieren, wie ich den Strom begrenzen kann, bevor ich das EVG schrotte. :D

    Nochmals Danke für deine Hilfe.

    Gruß, Ingo

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!