OpenDCC LightControl 1

Überblick, Entstehung

    Bild der Platine
    Dieses Projekt entstand in Zusammenarbeit mit Christoph Schörner von fichtelbahn.de, auf seiner Seite finden sich auch weitere Hinweise zur Anwendung und Aufbau. Der vorzugsweise Einsatzzweck ist Beleuchtungssteuerungen, Kirmes und Modellbahnzubehör. Selbstredend lassen sich auch servoangetreibene Weichen damit steuern. LightControl 1 ist ein BiDiB- und DCC-Dekoder der Extraklasse, perfekte LED-Ansteuerung und hochgenaue Servobewegung wird durch entsprechend spezialisierte Hardware erreicht. Und der integrierte, leistungsfähige Schaltregler sowie die Abschaltmöglichkeit von angesteckten Servos reduzieren auch den Stromverbrauch und die Abwärme deutlich.
    LightControl 1 ergänzt und erweitert die mit dem Animat begonnene Linie intelligenter Dekoder.

    Ebenso wie Animat kann LightControl über die DCC-Schnittstelle, über indivuelle Eingänge oder über eine Fernsteuerschnittstelle kontrolliert werden. Darüber hinaus ist auf LightControl auch eine BiDiB-Schnittstelle vorhanden, mit welcher sich die Funktionsvielfalt am Besten ausschöpfen läßt. Somit kann LightControl nicht nur als Dekoder eingesetzt werden, sondern für jede Art von kleiner Ablaufsteuerung oder als Mini-SPS für die Modellbahn verwendet werden.


    Diese Hardware hat folgende Eigenschaften:
      Daten LightControl 1
      16 frei programmierbare Schaltausgänge mit je 300mA
      32 LED-Ausgänge mit einstellbarer Stromquelle und Helligkeitssteuerung über PWM, keine Vorwiderstände erforderlich.
      4 Servoausgänge, Stromversorgung der Servo schaltbar
      8 universelle Eingänge (für Lagesensoren / lokale Taster / Optokoppler)
      1 DCC-Eingang, railcom®
      1 BiDiBus-Anschluß
      Integrierter 3A-Schaltwandler
      1 Universalansteuerport für USB
    Natürlich kann man auch nur einzelnen Teile der Hardware verwenden, aus LightControl 1 wird dann z.B. nur ein LED-Dekoder, ein 4-fach Servodekoder oder ein BiDiB-Sniffer.

Einsatzbeispiele

Download

      LightControl1   Version Erläuterung
      Firmware 
    Bootloader 

      V0.04.01  
    16.01.2014

      V0.01.03  
    24.07.2013

      V0.00.05  
    13.05.2013
    Der Bootloader ermöglicht das Erneuern der Firmware im eigenbauten Zustand und das permanente Speichern von Makros. Muß einmal mit einem Atmel-Programmer geladen werden und bleibt dann immer drin.
    Der Programmer ist anschließend nicht mehr erforderlich.
      Firmware 
    Applikation LightControl 

      V1.04.05 beta  
    30.06.2021

      V1.04.03  
    16.07.2020

      V1.03.05  
    08.04.2019
    Die eigentliche Applikationsfirmware. Sie besteht aus zwei Teilen:
    LightControl_version.000.hex für den Flashspeicher der LightControl
    LightControl_version.001.hex für den EEPROM-Speicher der Lightcontrol.
      Firmware 
    Applikation BiDiB-Logger 

      V0.04.00  
    17.10.2017

      V0.03.06  
    23.01.2017

      V0.03.05  
    12.10.2016
    Sonderversion: macht aus der LightControl einen Protokollanalysator.
    Nur für Entwickler interessant.
      Firmware 
    Applikation Bootloader Update 

      V0.04.01  
    16.01.2014
        Sonderapplikation: damit kann man den Bootloader auf eine neue Version bringen.
    Nach dem Erneuern des Bootloaders wird diese Applikation wieder durch die normale Firmware ersetzt.
      Bauanleitung   
      V1.00  
         
    Hinweise:
  • Ab allen Versionen 2014 ist das modifizierte Bustiming berücksichtigt. Es ist unbedingt erforderlich, daß alle Knoten eines Systems auf das neue Bustiming gebracht werden, bevor der Busmaster umgestellt wird. Das gilt auch für den Bootloader.
  • Update des Bootloaders: Hierzu wird beim Firmware-Update die Applikation Bootloader Update ausgewählt und an den Knoten übertragen, anschließend der Knoten neu gestartet. Der Knoten meldet sich ab, knotenintern wird dann der Bootloader erneuert (keinesfalls die Stromversorgung unterbrechen), anschließend meldet sich der neue Bootloader neu am System an.
  • Ab Version 0.14.00 sind verschiedene Macro-Größen möglich. Jede Makrogröße ist mit einem Namen gekennzeichnet. Es sind immer nur jeweils namentlich zusammengehörigen Dateien zu verwenden.
  • wenn die Firmware BiDiB-Logger eingespielt ist, dann ist kein Firmware-Update über BiDiB möglich. Auch meldet sich der Logger nicht am Bus an - das würde der Logger-Funktion widersprechen.
    Man kann jedoch das Starten des Bootloader erzwingen, dieser meldet sich dann am BiDiB an. Hierzu betätigt man den ID-Taster vor dem Einschalten (und hält ihn gedrückt), schaltet dann ein und läßt dann erst den ID-Taster los.

Das Steuerungskonzept der LightControl mit Makros

    Die LightControl ist extrem flexibel im Einsatz. Das grundlegende Konzept der LightControl sieht folgende Ebenen vor:
  • Es gibt verschiedene Arten von Port, wie z.B. direkte Schaltausgänge, Licht, Servos. Dort kann man Aktionen machen. Ein Aktion ist z.B. Einschalten, Blinken, Bewegen, usw.
  • Darüber steht eine Makromaschine, dort kann man Aktionen zu Schrittfolgen zusammenfassen und mit Verzögerungszeiten versehen. Auf dieser Ebene baut man sich z.B. alle Aktionen zusammen, die notwendig sind, um eine bestimmte Wirkung zu erzielen, z.B. eine Weiche in eine bestimmte Lage zu bringen oder ein Haus zu beleuchten.
  • Als Überbau über dem Ganzen gibt es dann die Accessory, welches die eigentliches Objekte einer Modellbahn sind: also Weichen, Signale usw.
    Accessory besitzen einen 'Begriff' (eine Weiche steht irgendwie, ein Signal zeigt was, usw). Meist sind es zwei Begriffe (Signal Fahrt oder Halt), es können aber durchaus mehr sein: Hp0, Hp1, Hp2, Sh0, usw. Bei der LightControl kann man zu jedem Begriff eines Accessory ein Makro ausführen lassen.

  • Dieses Steuerungskonzept ist für simple Weichen links/rechts mit Kanonen auf Spatzen geschossen (natürlich kann man einfache Weichen auch damit ansteuern), aber es eröffnet eine wirklich tolle Welt, wenn es über einfache zweibegriffige Accessory hinausgeht.

Firmware-Varianten

    Je nach Anwendungsgebiet können unterschiedliche Makrolängen und Zahl an Makros wünschenswert sein. Die mögliche Länge und Zahl an Makros ist durch den internen Speicher des Prozessors beschränkt. Um hier möglichst allen Benutzerwünschen gerecht zu werden, gibt es unterschiedliche Firmwareversionen:
    FirmwareMakrosLängeAccessoryBesonders geeignet für:
    STANDARD40 38 20 allgemeine Anwendung
    SIGNALS64 20 24 Signale (viele kurze Makros)
    Wichtig:
  • Wenn man eine andere Firmwarevariante nutzen will, so muß man diese komplett neu aufspielen. Z.B. muß man LightControl_STANDARD_0.14.00.000.hex in den Flash-Speicher und LightControl_STANDARD_0.14.00.001.hex in das eeprom laden. Dabei werden gespeicherte Makros gelöscht.
  • Innerhalb einer Variante kann man beim Update nur die jeweilige LightControl_..._update_....hex einspielen, dann bleiben die Makros beim Update erhalten.

Versions-History

  • Bootloader:
      16.01.2014 V0.04.01 Angepaßt für BiDiBus Spezifikation 2014. Update zwingend erforderlich, wenn ein Master mit Bus-Spec 2014 verwendet wird. Update vor den Update des Masters durchführen.
      24.07.2013 V0.01.03 bugfix: im BiDiBus werden fälschlich Nachrichten an einen Subknoten hinter einen Hub auf einer anderen Adresse interpretiert. Update empfohlen.
      13.05.2013 V0.05 bugfix: im BiDiBus Mode konnte es passieren, dass der Bootloader nach dem Ladevorgang den Bus blockierte - andere Knoten verloren dadurch den Kontakt zum Interface.
      07.10.2012 V0.04 zusätzliches Kommando '?' zum Verbindungstest
      29.07.2012 V0.03 beim Exit wird noch eine Meldung gesendet - Update notwendig.
  • LightControl:
    Achtung: vor dem Update die Servos abstecken, um ungewollte Bewegungen zu vermeiden! Servos erst wieder nach kompletten Update und Restaurierung anstecken!
    16.07.2020: V1.04.03Der direkt update der Helligkeit hatte als Nebenwirkung die Neon-Simulation überfahren, das wurde behoben.
    24.05.2020: V1.04.02Bei Inputs als Belegtmelder kann nun SECACK in einem Bereich von 100ms bis 1000ms eingestellt werden.
    25.01.2020: V1.04.00 Added: Inputs kann man alternativ als Belegtmelder melden lassen. Sie werden dann nicht mehr als Portevent gemeldet. Achtung: es wird eine Belegtmelderklasse mit angemeldet, ev. muß nach Update die Baugruppe neu im PC angemeldet werden.
    08.04.2019: V1.03.05 Bugfix: Verbesserter Anmeldeprozess am Bus. (Update nur erforderlich, wenn es Anmeldeproblem gibt)
    03.11.2016: V1.03.03 Bugfix: when Makro repeat = unendlich gewählt wurde, wurde im Umlauf ein falscher Portbefehl erzeugt. (Fehler kam erst mit 1.03.02)
    08.10.2016: V1.03.02 Servobewegung, auch wenn Ziel gleich Start ist.
    26.08.2016: V1.03.01 autodetect LC_KEY / LC_PORT, Helligkeit direkt stellbar
    27.04.2016: V1.03.00 CONFIGX, STATE_GETALL, GET_ALL
    24.11.2014: V1.00.00 hinzu: Fähigkeit zu langsamen Dimmübergängen. Das erfordert eine aktuelle Version der Konfigurationstools (wizard) sowie eine geänderte interne Datenstruktur. Deshalb wurde auch ein Versionänderung im Hauptindex vorgenommen - Es ist ein Update von *.001 und *.000 erforderlich. Es wird empfohlen, den Knoten vorher mit dem Wizard zu sichern und anschließend wieder zu restaurieren.
    26.06.2014: V0.15.07 hinzu: Weiterer Makrobefehl 'Warte auf Servobewegung', damit werden kombinierte Bewegung leichter erstellt. Erfordert auch eine Wizard-Version mind. diesen Datums.
    22.03.2014: V0.15.06 Bugfix: Initialiserungsproblem konnte zu falsch Startwert des Servos führen.
    13.01.2014: V0.15.05 Neue Servoumlaufkurve, verbessertes Einschalttiming zur Unterdrückung von Rucklern, BiDiBus 2014 Spezifikation. Update zwingend erforderlich, wenn ein Master mit Bus-Spec 2014 verwendet wird.
      28.07.2013: V0.14.03 In der FW-Variante 'SIGNALS' die Zahl der Accessory auf 24 erhöht.
      23.10.2013: V0.14.03 Neue FW-Variante mit 64 Makro zu je 20 Plätzen.
      28.07.2013: V0.14.03 Bugfix: wenn ein Hub im System vorhanden ist, werden Meldungen falsch interpretiert.
      07.05.2013: V0.13.03 Bugfix: bei der CV-Abfrage per BiDiB konnte sporadisch eine falsche CV zurückgeliefert werden.
      10.04.2013: V0.13.02 Servos haben jetzt in der default einen erweiterten Bereich 0,5ms bis 2,5ms. Bitte beachten: Anschläge verschieben sich. Altes Verhalten kann durch Löschen von Bit7 im der CV Servo_Mode des jeweiligen Servos erhalten werden.
      09.03.2013: V0.13.00 Servos sind optional nach Bewegung abschaltbar. Bugfixes im BiDiB-Interface. Ein Update ist empfohlen.
      17.11.2012 V0.12.03 bugfix: Servoruckler bei erstem Power Up - falsche Pulsbreite wurde ausgegeben.
      13.10.2012 V0.12.02 hinzu: Accessory Mapper und Einzelaufruf von ACCESSORY aus dem Debug-IF heraus möglich.
      16.10.2012 V0.12.00 neu: BiDiB MSG_ACCESSORY_* für 'begriffsgesteuertes' Zubehör. Wird bei der LC auf Macros abgebildet.
      27.09.2012 V0.10.05 hinzu: BiDiB MSG_LC_WAIT bei Servobefehlen, damit der Host weiß, wann eine Aktion fertig ist.
      29.07.2012 V0.09.02 hinzu: Möglichkeit, auch bei partiellem FW-Update (und entsprechender Fehleranzeige) per Taster in den Bootloader zu kommen.
  • Logger:
      24.11.2014 V0.09 added MSG_LOCAL_ACC*, added MSG_CONFIGX*, added MSG_STRING
      12.08.2014 V0.07 added full feature decoding
      11.10.2013 V0.06 added booster
      10.05.2013 V0.05 added accessory commands, bugfix at vendor commands
      29.07.2012 V0.03 added fw-update commands

Schaltplan




    Kern der LightControl1 ist ein ATXmega128A1. Dieser Prozessor bietet hinreichend viel Speicher und mit seinen 100 Pins auch hinreichend viel I/O, um die Funktionen der LightControl1 realisieren zu können. Versorgt wird der Prozessor mit 3,3V.

    Stromversorgung:
    Die Platine kann mit einer Spannung von 7 bis 20V versorgt werden, auf der Platine selbst ist ein Schaltregler vorgesehen, welcher aus dieser Spannung eine stabilisierte 5V-Versorgung mit 3A erzeugt. Damit ist der Betrieb von mehreren Servos und Beleuchtungseinrichtungen gleichzeitig möglich, ohne dass zu einer Überhitzung der der Spannungsversorgung oder zum gefürchteten Servo-Chaos kommt. Dieses entsteht, wenn nach dem Einschalten die Spannung ansteigt und bedingt durch die Anfangsbewegung der Servomotoren sofort wieder einbricht: alle Servos fahren dann wild umher.

    Eingespeist wird entweder über einen Gleichrichter, oder wenn eine bereits eine stabilisierte Gleichspannung zur Verfügung steht, kann der Gleichrichter überbrückt werden.
    Als Schaltregler kann alternativ LM2596 oder P3596 verwendet werden, jeweils SMD oder stehende Ausführung ist bestückbar. Wenn ein 5V-Festspannungsregler verwendet wird, dann ist R38 zu schließen und R37 / R37A offen zu lassen. (die Pads für R38 sind als Lötbrücke ausgeführt und mit 'c' gekennzeichnet, die Pads für R37 sind mit 'o' gekennzeichnet). Kritisch bei Schaltregler sind die Bauteile im Leistungskreis, also Diode, Spule und Kondensatoren. Die Spule sollte etwa das 1,2 bis 1,5fache des Ausgangsstromes I(out) können, sonst geht sie vorzeitig in die Sättigung und der Wirkungsgrad sinkt und es entsteht Verlustwärme. Wichtig ist auch das ESR und der zulässige I(ripple) der Abblock-Kondensatoren, besonders auf der Ausgangsseite. Hier wenn möglich keramischen Kondensator mit Elko kombinieren bzw. einen Polymerelko verbauen. Als Diode wird eine schnelle Schottky (z.B. Vishay SSA33L) verwendet.
    Beim 3,3V Regler für den Prozessor ist der preiswerte LE33 im TO39 oder LM3480-3v3 in SOT23 bestückbar.
    Über Lötbrücken ist wählbar, ob der Dekoder über DCC oder über eine separate Speisung versorgt wird.

    DCC-Eingang:
    DCC ist komplett optogekoppelt (genauer: magnetgekoppelt mittels ADuM1201), es ist sowohl railcom als auch eine separate ACK-Stufe vorhanden, der Dekoder muß daher nicht ausgebaut oder von seiner Stromversorgung getrennt werden, nur weil man eine CV umprogrammieren will. Die ACK-Stufe ist autark, es ist also nicht notwendig, dass irgendwelche Ausgänge als Last beschaltet sind. Railcom ist unterstützt. (Auch bei der ACK-Stufe sind alternative Bauformen bestückbar: SO4-wide und SO4-narrow.)

    BiDiB-Interface:
    BiDiB basiert auf dem RS485-Standard, der verwendet Bustransceiver soll 500kBaud Rate haben und sowohl 'failsafe' als auch 'slew rate limited' sein. Über die 0-Ohm Widerstände R10 und R11 (die PADs sind als Lötbrücken ausgeführt) kann alternativ ein 5V oder 3V3-Typ bestückt werden.
    Für den Fall, dass die Lightcontrol der letzte Knoten in einer RS485-Kette ist, kann der notwendige Abschluß mittels Jumper sowohl auf die DCC als auch auf die Datenleitung geschaltet werden. Es sind immer beide Jumper zu setzen oder zu entfernen.
    Mittels R15 und R16 könnte man DCC aus den BiDiB auskoppeln, diese Widerstände sind jedoch nicht bestückt.
    Hinweis: In der Platineversion 1.1 sind mögliche Schutzdioden SM712 vorgesehen, diese sind allerdings nicht korrekt verdrahtet. Die Schutzdioden sind dann sinnvoll, wenn ein besonders großes Netz mit langen Leitungen betrieben wird. Es ist nur eine Diode erforderlich, .
    LED-Ansteuerung:
    Die 32 LED-Ausgänge werden mittels TLC5941 angesteuert. Das hat den Vorteil, dass keine Vorwiderstände mehr erforderlich sind und die Helligkeit per CV eingestellt werden kann.
    Der TLC bietet 250.000 Helligkeitsstufen, diese setzt sich zusammen aus einstellbarer Stromquelle (64 Stufen) und PWM-Steuerung mit 4096 Stufen. Über die Stromquelle (per CV einstellbar) können die LEDs angepaßt werden, es ist kein Vorwiderstand erforderlich. Die Stromquelle wird über einen Wert von 0..15 anhand einer exponentiellen Stromkennlinie eingestellt.
    Alle LEDs können beliebig über die PWM-Steuerung gedimmt werden, wobei die 4096 Helligkeitsstufen auf eine zweite exponentielle Kennlinie abgebildet werden, diese hat dann 128 Stufen und gibt in etwa den Helligkeitseindruck des Auges wieder.

    Der TLC agiert als Stromquelle, damit ist die Helligkeit der LEDs unabhängig von der Versorgungspannung. Diese ist per Lötbrücke auf 5V (empfohlen) oder 18V zu wählen. Bei 5V sind eine LED (bei jeder Farbe) oder 2 LEDs in Reihe (nur bei rot, gelb und grün) je Ausgang möglich.
    Bei 18V sind entsprechend mehr LEDs in Reihe je Ausgang möglich, allerdings muß man die max. Verlustleistung des TLC von ca. 1.2W beachten: Werden hier Standard-LED mit 20mA betrieben und nur eine LED an jedem Strang, so ergibt sich die Verlustleistung bei 18V zu:

        P = 16 * ( 18V - 2.2V ) * 20 mA = 5W (!)

    D.h. hier muß man entweder immer mehrere LEDs in Reihe schalten, einen Vorwiderstand einfügen oder den Strom entsprechend reduzieren. Faustregel: es sollten nicht mehr als 4V bei 20mA am TLC abfallen, also geht man wie folgt vor: Man mißt die Versorgungsspannung, zieht davon die Durchflußspannung der angeschlossenen LEDs ab (rot,gelb,grün: 2,1V; weiß,blau: 3,3V), der Rest sollte zwischen 0.5V und 4V liegen. Wenn der Rest zu groß ist, dann einfach einen Widerstand in Reihe schalten: für jedes Volt (bei 20mA) 50 Ohm.

    Servo-Ansteuerung:
    Die Ansteuerung erfolgt über einen Buffer (74LVT541), welcher erst nach erfolgter Initialisierung von Prozessor freigeschaltet wird. Der Buffer sorgt auch für die entsprechenden Pegel und Treiberstärke.
    Alle Servo sind über individuelle P-FETs separat zu- und abschaltbar, dadurch ist sowohl Stromverbrauch reduzierbar als auch das Einschaltruckeln wird (weitgehend) unterdrückt. Die P-FETs müssen mit dem Strom der Servos zurechtkommen, NTR1P02LTG oder Si2309 sind verwendbare Typen im SOT23-Gehäuse. Die Servos werden nach einem Power-Up zeitverzögert aktiviert. Hierzu wird ein Zufallsgenerator benutzt, welcher im Bereich 100ms bis 1,2s das erste Servo, dann im Abständen von 100ms bis 600ms die folgenden Servos einschaltet. Der Zufallsgenerator ist von der Unique-ID der Baugruppe abhängig, d.h. auch verschiedene Baugruppen starten anders.
    Diese P-FETs kann man auch weglassen, und an dieser Stelle eine Lötbrücke schließen.

    Schaltausgänge:
    Hier findet der übliche ULN2803 in SMD-Ausführung Verwendung, jeder Ausgang kann kurzzeitig mit max. 500mA belastet werden, die Summe aller Ausgänge darf 1A nicht überschreiten. Für größere Belastungen, wie z.B. Magnetartikel oder Antriebe über 300mA Verbrauch, muss ein stärkerer Transistor oder ein Relais nachgeschaltet werden.

Layout


    Die Platine ist 100 x 80mm groß, alle Ausgänge sind als Steckkontakte im Raster 2,54mm ausgeführt. Bei den LEDs sind 34-polige Stecker verwendet, so dass ein Anschluß einfach mit Floppy-Kabeln und anschließendem paarweisem Aufspleisen des Kabels erfolgen kann. I.d.R. wird kein Vorwiderstand bei den LEDs benötigt, siehe hierzu die Erläuterungen bei der Schaltung.

    Kondensatoren und RJ45-Buchsen können wahlweise als SMD oder THT bestückt werden.

Software

    LED-Ansteuerung:
    Der TLC muß mit einen Clock (GSCLK) und einem Blanksignal versorgt werden. Das Clocksignal wird mit einem Timer erzeugt und dann intern über eine Eventleitung als Taktquelle für einen zweiten Timer verwendet, welcher dann davon abgeleitet das BLANK erzeugt.
    Dotvalues und Grayscale-Werte werden mittels SPI in den Baustein geschrieben. Der Transfer (=XLAT) in die tatsächlichen Register muß jedoch synchron zum BLANK erfolgen, weil sonst ein Fehler im TLC5941 erfolgen kann.
    Daher wird nach erfolgtem Schreiben der SPI-Kette nur ein Semaphor gesetzt und der Compare-Interrupt des BLANK-Timers freigegeben. Beim Erzeugen des BLANK-Signal wird nun auch synchron ein Compare-Interrupt ausgelöst. Die zugehörige Interruptroutine (ISR) taktet dann mittels XLAT die Information in der SPI-Kette in die Ausgangsregister ein. Da dies in der BLANK-Phase erfolgt, gibt es keine 'durchschlupfenden' Aufblitzer bei den LED-Ausgängen.

    Höhere Software-Schichten bekommen davon nichts mit: diese beschreiben einfach die entsprechenden Helligkeitswerte im Datenarray und setzen anschließend ein Flag für den fälligen Update. Eine zyklisch alle 10ms laufenden Task wertet das Flag aus und führt fallweise einen SPI-Schreibzyklus mit anschließendem 'Scharfschalten' des XLAT aus.

    Der optische Eindruck beim Dimmen ist nicht linear, das Auge hat da eine mehr oder minder logarithmische Kennlinie, deswegen braucht man eine Gammakorrektur auf den Helligkeitswerten (siehe z.B. bei hue). Jetzt wird aber bei einer PWM die Energie gemäß Puls-Pausenverhältnis gesteuert. Damit folgt, dass man bei geringen Helligkeiten eine wesentlich feinere Auflösung als bei hohen Helligkeiten braucht. Die Hardware läuft deshalb immer bei feiner Auflösung, diese wird dann bei größeren Helligkeiten in größerer Schrittweite abgearbeitet.

    Die Helligkeit wird mit einer Auflösung von 4000 Schritten eingestellt. Dabei werden die eingestellten Helligkeitswerte von einer Skala 0..255 mit einer exponentiellen Kennlinie auf die hohe Auflösung umgerechnet - so dass sich ein optisch sehr ansprechender Eindruck beim Dimmen ergibt.

    Servo-Ansteuerung:
    Servos benötigen einen Puls von 1ms bis 2ms Breite (eventuell ja nach Type sogar von 0,5ms bis 2,5ms) mit einer Wiederholrate von 20ms. Auf der LightControl sind 4 Servos, diese werden je um 5ms zeitversetzt angesteuert, das entlastet die Stromversorgung, weil der jeweilige Motorsteuerstrom immer nur von einem Servo aufgenommen wird.
    Besonderer Augenmerk wurde auf das Einschalten der Servostromversorgung gelegt, dies erfolgt synchron zu den Ansteuerpulsen. Dabei kann über eine CV das exakte Timing noch auf das jeweilige Servo feinjustiert wrden. Dadurch kann der unerwünschte Einschaltruckler weitestmöglichst unterdrückt werden.

    Ein Servo hat einen max. Verstellbereich (also z.B. 1ms ... 2ms bzw. 0.5ms bis 2.5ms bei erweitertem Range), dieser wird auf 0..255 abgebildet. Nun kommt der Justierwert (MIN und MAX) ins Spiel: durch den Justierwert wird der Verstellbereich eingeschränkt, also z.B. von 40-180. Das ist dann der Nutzbereich.
    Der Nutzbereich ist wiederum 0..255 unterteilt. Die Servobefehle fahren nun die jeweilige anteilige Stellung im Nutzbereich an. Dabei wird die interne Pulsbreite auf 1us genau berechnet. Weiche, ruckfreie (natürlich entsprechend hochwertige Servos vorausgesetzt) sind die Folge.

    Tipps zum Einstellen:
    - mit dem DebugIF kann man mittels Befehl SD (=Servo Direkt) die Pulsbreite direkt eingeben. Pulsbreite und Justagewert hängen wie folgt zusammen: Justagewert = (Pulsbreite - 500) / 2000 * 256
    BiDiB:
    Der BiDiBus wird über einen RS485-Transceiver empfangen. Der UART ist auf 9 Bit eingestellt. Wenn ein Byte mit gesetzem 9. Bit kommt (d.h. es ist ein Token für die Sendeerlaubnis), wird noch in der ISR überprüft, ob der Token die eigene Knotenadresse adressiert. Falls ja und falls eine abzusendende Nachricht vorliegt, wird direkt in der ISR auf Senden umgeschaltet, die TX-ISR freigegeben und auch gleich das erste Datum in den UART geschrieben.
    Wenn das letzte Byte der Nachricht geschrieben wird, dann wird der TX-Complete Interrupt aktiviert, welcher dann nach dem letzten Byte innerhalb von 2µs - 5µs auf wieder Empfangen umschaltet.

Bauanleitung

    Der Aufbau ist ausführlich auf fichtelbahn.de beschrieben.
    Die Fuses des Prozessors sind wie folgt zu setzen:
    Fuses ATXmega128A1, LightControl
    FUSEBYTE00xFFJTAG User ID
    FUSEBYTE10x00Watchdog (8 cycles)
    FUSEBYTE20xBABoot-Reset (BOD enabled cont)
    FUSEBYTE30xFFStartup (no JTAG)
    FUSEBYTE40xF5Config (2,1V, EESAVE on)
    Neben dem Bootloader und Files im Download muß man auch eine Seriennummer einspielen, diese kann man sich hier generieren. Die generierte Seriennummer bitte auf der Baugruppe vermerken. Seriennummer sind vierstellige Hexzahlen, im hier dargestellten Beispiel (eep-file) fett markiert:
    :0207fe000001f8
    Bitte beachten: Im AVR-Studio 4 gibt es ein Häkchen 'erase chip before programming', das muß man nach dem Einspielen des Bootloaders rausnehmen, sonst löscht man den Bootloader beim Einspielen des Flashes wieder weg. In AVR Studio 6 erreicht man das durch Wahl von 'incremental programming'. Wenn direkt in die Applikation gesprungen werden soll, dann ist FUSEBYTE2 = 0xFA.

Inbetriebnahme

    Nach dem Bestücken der 5V und 3,3V-Regler überprüft man die Spannungspegel.
    Die Software hat verschiedene Selbsttestroutinen:
  • Wenn nur das Flash bespielt wird und EEPROM noch leer ist, dann blinken alle 4 LEDs parallel, Timing ist 50ms on, 150ms off.
  • Wenn Flash und EEPROM bespielt sind, jedoch die Seriennummer noch fehlt, wird und EEPROM noch leer ist, dann blinken 2 LEDs parallel (STATUS und POWER), Timing ist 100ms on, 100ms off.
  • Wenn die Software komplett eingespielt ist, dann blinkt die PROG_LED 6x - kurze Pause - 6x (Dauer eines Durchlaufs ca. 2s). Das ist eine Fehlermeldung aus dem DCC-Interface, weil die DCC-Adresse noch nicht programmiert ist und somit noch keine DCC-Befehlsausführung möglich ist.
    Im BiDiB-Betrieb oder mit dem Debug-IF ist das ohne Belang - es betrifft nur den DCC-Teil.
  • Im Regelbetrieb leuchtet die Power-LED mit halber Helligkeit (10ms on, 30ms off)
  • Wenn die LightControl mit BiDiB verbunden ist, dann leuchtet zusätzlich die LED_MSG auf.

Makros

    Kern der Ansteuerung ist eine Makromaschine, diese umfaßt Level 2 gemäß BiDiB-Spezifikation. Nachfolgend sind die wesentlichen Eigenschaften aus technischer Sicht zusammengefaßt:
  • Makros bestehen aus einer Folge von Punkten, diese Punkte definieren Aktionen und den Zeitpunkt zu dem diese Aktion stattfindet. Jeder Punkt besteht aus 4 Parameter: DELAY, TYPE, PORT, VALUE.
  • DELAY gibt die Verzögerung des Punktes bezogen auf den Vorgängerpunkt an, DELAY agiert in Einheiten von MAKRO_TICKS und kann einen Wertebereich von 0..250 haben. 251..254 ist reserviert, ein DELAY-Wert von 255 weist dem aktuellen Punkt eine Sonderfunktion zu - TYPE und PORT werden dann anders interpretiert.
  • Bei Standardpunkten gibt es drei Parameter: TYPE, PORT, VALUE.

    TYPE beschreibt den Porttyp (also Schaltausgang, Lichtausgang oder Servo).
    PORT bezeichnet die Ausgangsnummer (welcher Ausgang betroffen ist), es wird ab 0 gezählt.
    VALUE bezeichnet die Art der Operation auf diesem Ausgang (also Einschalten, Dimmen, usw.), bei Servos die anzufahrende Zielposition.
  • Bei Systempunkten (wenn DELAY = 255 ist), bezeichnet TYPE die Systemfunktion:
    Systemfunktionen (Makro Level 2)
    TYPEWertFunktion
    END_OF_MACRO 255Das Makro wird beendet.
    START_MACRO 254Das in PORT angegebene Makro wird gestartet. Dies kann auch das aktuelle Makro sein, es beginnt dann wieder von vorn.
    STOP_MACRO 253Das in PORT angegebene Makro wird gestoppt. Sollte sich das Zielmakro in einem kritischen Abschnitt befinden, so wird die Stopanforderung nach dem kritischen Abschnitt ausgeführt.
    BEGIN_CRITCAL 252Das Makro darf nicht durch eine Stopanforderung angehalten werden, der momentan Ablauf soll fertiggestellt werden (bis END_CRITICAL).
    END_CRITCAL 251Das Makro darf durch eine Stopanforderung angehalten werden (default)
    FLAG_QUERY1 250Das in PORT angegebene Flag wird abgefragt. Sofern es nicht gesetzt ist, wird die Makroausführung pausiert.
    FLAG_SET 249Das in PORT angegebene Flag wird gesetzt. Wertebereich: 0..15
    FLAG_CLEAR 248Das in PORT angegebene Flag wird gelöscht. Wertebereich: 0..15
    INPUT_QUERY1 247Der in PORT angegebene Eingang bzw. Schalter wird abgefragt. Sofern der Schalter offen ist, wird die Makroausführung pausiert, sofern er geschlossen ist, wird die Macroausführung fortgesetzt. (Üblicherwiese werden Schalter gegen Masse eingesetzt, diese ziehen den Prozessoreingang auf Low, wenn der Schalter geschlossen ist. (=Active Low))
    INPUT_QUERY0 246Der in PORT angegebene Eingang / Schalter wird abgefragt. Sofern der Schalter geschlossen ist, wird die Makroausführung pausiert. Wenn der Schalter offen ist, wird das Makro fortgesetzt.
    DELAY_RANDOM 245Die Makroausführung wird um eine zufällige Zeit von 1..250 MAKRO_TICKS verzögert.
    DELAY_FIXED 244Die Makroausführung wird um eine definierte Zeit von 1..250 MAKRO_TICKS verzögert.
    ACC_OKAY_QUERY1243Dem rufenden Accessory wird eine Bestätigung geschickt. OK wenn Eingang = 1, NOK wenn 0
    ACC_OKAY_QUERY0242Dem rufenden Accessory wird eine Bestätigung geschickt. OK wenn Eingang = 0, NOK wenn 1
    ACC_OKAY_NF241Dem rufenden Accessory wird eine Bestätigung (ohne Feedback) geschickt.
    SERVOMOVE_QUERY0240Das in PORT angegebene Servo wird abgefragt. Sofern es in Bewegung ist, wird die Makroausführung pausiert.
    FLAG_QUERY0 239Das in PORT angegebene Flag wird abgefragt. Sofern es gesetzt ist, wird die Makroausführung pausiert.

Debugschnittstelle

    Light Control verfügt über einen seriellen Debugport, dieser paßt für die FDTI-RS232-TTL-Kabel mit 6-poliger Stiftbuchse im Raster 100mil (2,54mm). Das Kabel wird so angesteckt, dass die schwarze Ader (GND) zur Platinenmitte zeigt. Die Debugschnittstelle kann über eine Terminalprogramm wie hterm angesprochen werden und wird mit 115200, 8N1 betrieben.

    Mit dem Befehl ?<cr> kann man sich eine Übersicht der Funktionsaufrufe ausgeben lassen. Bedienungsbespiele finden sich auf fichtelbahn.de.

Demo-Mode

    Mit dem Demo-Jumper kann ein Satz vordefinierter Makros geladen werden, und das Makro 0 wird auch automatisch gestartet. Wenn der Jumper wieder gezogen wird, kommt wieder der normale Userbereich für Makros zum Einsatz. Der Demo-Mode wird durch hektisches Blinken der Status-LED angezeigt.
    Bitte beachten: durch Stecken des Demo-Jumper werden aktuell laufende Makros 'hart' abgebrochen (auch wenn diese gerade in einer 'critical section' sind) und alle Ausgänge abgeschaltet. Der Demo-Jumper wechselt den 'Workspace', d.h. im Demo-Mode funktioniert alles wie sonst auch: auch das Makro speichern, in diesem Fall wird die Demo überschrieben.

Bootloader

    Der Xmega128a1 verfügt über eine separate Bootloader-Section mit 8k Speicherplatz. In diesem Speicher habe ich einen doppelten Bootloader implementiert. Dieser wird aktiviert, wenn während des Einschaltens der LightControl der Identify-Taster (ID) gedrückt gehalten wird. Die Firmware startet dann den Bootloader, wobei der Demo-Jumper festlegt, welche Schnittstelle Verwendung findet:
  • Demo-Jumper gesteckt, Boot über die FTDI-Schnittstelle:
    Hier findet die gleiche Schnittstelle wie für das Debuginterface Verwendung, allerdings ist die Baudrate auf 19200 (8N1) eingestellt. Die Befehle sind sehr einfach gehalten, auch kann das Ausgangsfile (Hex-Datei) des Compilers direkt verwendet werden, auf Hostseite ist also nur ein Standardterminalprogramm wie z.B. hterm erforderlich.
    Wenn man die ID-Taste wieder loslöst, meldet sich der Bootloader mit 'LC_Bootloader V?.??' über die FTDI-Schnittstelle. Nun kann man Befehl an den Bootloader senden, wobei jede Eingabe mit <cr> (Enter-Taste) abegescdhlossen wird.
    Befehle Bootloader
    ?Abfrage Version (diese Kommando kann verwendet werden, um die Verbindung zum Bootloader zu kontrollieren.
    fDie nachfolgenden Datenblöcke sollen in den Flash-Speicher geschrieben werden. Diese Zielangabe bleibt gültig, bis ein anderer Bereich adressiert wird.
    eDie nachfolgenden Datenblöcke sollen in den EEPROM-Speicher geschrieben werden. Diese Zielangabe bleibt gültig, bis ein anderer Bereich adressiert wird.
    :Datenblock: es folgen weitere Zeichen im Intel-Hexformat.
    xBootloader wird verlassen und die Applikation wird gestartet.
    Damit geht der FW-Update recht einfach:
    1. Aufruf des Bootloaders (Programmiertaste gedrückt halten, dann Einschalten). Der Bootloader meldet sich mit der Version
    2. f <cr+lf> an den Bootloader senden. Antwort: '.'
    3. Im Terminalprogramm 'Datei senden' wählen, dann die Hexdatei für den Programmcode auswählen und bestätigen. Antwort: eine Reihe von Punkten, wobei jede Zeile der Hexdatei einen '.' erzeugt.
    4. e <cr+lf> an den Bootloader senden. Antwort: '.'
    5. Im Terminalprogramm 'Datei senden' wählen, dann die Hexdatei für das EEPROM (oder auch die Seriennummer) auswählen und bestätigen. Antwort: eine Reihe von Punkten, wobei jede Zeile der Hexdatei einen '.' erzeugt.
    6. x <cr+lf> an den Bootloader senden. Antwort: 'exit'; es wird die Anwendung gestartet.
    Durch die geringe Baudrate (kombiniert mit dem Empfangsfifo im Bootloader) sind keine Quittungsleitungen oder Pausen erforderlich und man kann die Hexdatei einfach mit voller Rate auf die Schnittstelle kopieren.
  • Demo-Jumper offen, Boot über die BiDiBus-Schnittstelle:
    Der Bootloader meldet sich selbständig am BiDiBus an: er verwendet dafür eine eigene Kennung, und in den Eigenschaften dieses (Minimal-)Knotens ist keine Funktion aktiviert (alle Class-Bits sind 0). Das einzige vorhandene Feature ist die Fähigkeit zum Firmware-Update. Dieser kann dann über die BiDiBus-Schnittstelle durchgeführt werden.
  • Des weiteren kann der Bootloader über die Applikation aktiviert werden, hierzu muß von Steuerprogramm eine entsprechende Aufforderung an den Knoten geschickt werden. Dieser wechselt dann in den Bootloader-Mode, wobei die Anmeldung erhalten bleibt, d.h. der Knoten behält die aktuell zugewiesene Kennung. Zu beachten ist, dass in dieser Phase nur FW_UPDATE-Befehle zugelassen sind, andere Befehle werden nicht beantwortet. Damit kann man einen Firmwareupdate im eingebauten Zustand durchführen (Fernwartung).
    Nach Beendigung des FW-Updates wird der Knoten kurz angehalten (um damit automatisch abgemeldet) und anschließend neu angemeldet.
    Dieser Update läßt sich komfortabel mit dem BiDiB-Wizard durchführen. Dort wird in der Knotenliste der Knoten mit der der rechten Maus angeklickt und der Menupunkt FW-Update gewählt.
    Namensregeln: Eine Firmware besteht aus einer Datei für den Flashspeicher (Beispiel: lightcontrol_v0.09.02.000.hex) und aus einer Datei für das EEPROM (lightcontrol_v0.09.02.001.hex). Dieses Beispiel ist also die Version 0.9.2, 000 bezeichnet den Flashteil, 001 den EEROM-Teil.

    Infos für Programmierer: Um den Code in den Bootloaderbereich zu verschieben, sind folgende Einstellungen in AVR-Studio6 erforderlich:

    Im Bereich Linker - Memory Setting wird das .text Segment auf 0x10000 zugewiesen (das ist eine word-Adresse, der Code landet dann bei 0x20000 (als Byte-Adresse) und damit im Bootloader. Des weiteren habe ich noch eine Section .BOOT angelegt, diese ist dann bei 0x10FE0. In dieser Section erfolgend die SPM-Zugriffe, welche nur aus der Bootloader-Area heraus zulässig sind. Das ist deshalb getrennt zugeweisen, damit man aus der Applikation ein feste Einsprungadresse für die SPM-Zugriffe hat. Die Applikation ist ja gezwungen, hier die Routinen des Bootloaders mitzubenutzen, weil diese Befehle nur aus der Bootarea zulässig sind.
    Die Parameterübergabe der aktuellen Node-Adresse erfolgt über die CPU-Register GPIO6 und GPIO7, damit ist der Bootloader in der Lage, die aktuelle Session mit dem Interface fortzusetzen.
    Hinweise zur Toolchain und AVR-Studio:
    • Im Abschnitt Preprocessor / Symbols muß man F_CPU=32000000UL eintragen, damit allen Modulen die Taktrate des Prozessors bekannt ist (gleiches Verhalten wie unter Studio 4.1x)
    • Optimization muß man von -O1 auf -Os umstellen
    • Flashen des Chips: beim AVR-Studio ist die Voreinstellung 'erase chip before programming'. Wenn man nun die Applikation einprogrammiert und diese Einstellung ist noch gesetzt, dann wird der Bootloader wieder gelöscht - also Vorsicht und Option 'erase' abwählen. Man löscht besser vor dem Programmieren individuell den gewünschten Zielbereich.
    • Zur Kontrolle kann man sich das Makefile ansehen:
      LDFLAGS += -Wl,-section-start=.BOOT=0x21fc0 (Das ist der Code für die SPM Zugriffe)
      LDFLAGS += -Wl,-section-start=.MacroStorage=0x10000 (Mit dieser Anweisung wird der Platz für Makros festgelegt)

DCC-Betrieb

    LightControl ist auch ein vollständiger DCC-Dekoder mit Railcom®. Es werden folgende Modi (CV33) unterstützt:
  • Mode 0:
    Direktes Ansteuern der Schaltausgänge.
  • Mode 1:
    Ansteuerung eines 4-fach Servodekoders.
  • Mode 17: (default)
    Der empfangene DCC-Schaltbefehl startet ein Makro. Die Zuordnung ist wie folgt:
       Basisadresse, rot, coil on: Starten von Makro 0.
       Basisadresse, grün, coil on: Starten von Makro 1.
       Basisadresse+1, rot, coil on: Starten von Makro 2.
       Basisadresse+1, grün, coil on: Starten von Makro 3.
       usw.

    Bitte beachten, diese Eigenschaft (Makrostart per DCC) kann man mittels einer feature-Einstellung im BiDiB an/abwählen.

CV-Einstellungen

    Viele Eigenschaften der LightControl sind per CV einstellbar. CVs lassen sich per Debug-Interface, per DCC und teilweise als feature per BiDiB einstellen. BiDiB-Features werden aus dem CV-Speicher geladen und auch dort bei einem feature_set automatisch gespeichert.

    Es gibt in der LightControl 5 CV-Blöcke, diese sind wie folgt angeordnet:
    CVs der LightControl
    CV-BereichVerwendung
    1 ... 40Allgemeine Einstellungen, wie z.B. DCC-Adresse, Operation-Mode
    41 ... 60Feature-Einstellung der LightControl.
    61 ... 124Einstellungen für Servos - 4 Blöcke zu 16 CVs, jeder Servo hat einen eigenen Block
    125 ... 284Einstellungen für LED-Ausgänge - 32 Blöcke zu 5 CVs, jede LED hat einen eigenen Block

Allgemeine CVs

    text fehlt noch ...

    CV für Features

      Achtung, Featureeinstellungen dürfen nur mittels BiDiB verändert werden, keinesfalls direkt via CV-Programmierung. Einige Features wie z.B. Anzahl der Makros und Makrolänge dürfen nur im Sourcecode verändert werden.
    Allgemeine CVs der LightControl
    CVNamedefaultKommentar
    36restore_accessory11: beim Power-Up werden bei allen Accessory Dekodern die jeweils zum aktuellen Begriff verlinkten Makros gestartet.
    Feature-Einstellung der LightControl
    CVFeaturedefaultKommentar
    41FEATURE_CTRL_INPUT_COUNT8Anzahl Eingänge
    42FEATURE_CTRL_INPUT_NOTIFY1Eingänge werden automatisch gemeldet
    43FEATURE_CTRL_SPORT_COUNT16Anzahl Schaltkanäle
    44FEATURE_CTRL_LPORT_COUNT32Anzahl Lichtkanäle
    45FEATURE_CTRL_SERVO_COUNT4Anzahl Servokanäle
    46FEATURE_CTRL_MAC_LEVEL2Makor Level (hier 2)
    47FEATURE_CTRL_MAC_SAVE40Anzahl speicherbarer Makros
    48FEATURE_CTRL_MAC_COUNT40Anzahl an Makros
    49FEATURE_CTRL_MAC_SIZE38Einträge je Makro
    50FEATURE_CTRL_MAC_START_MAN0Makrostart durch Eingang nicht erlaubt.
    51FEATURE_CTRL_MAC_START_DCC1Makrostart per DCC (CV33 muß auch auf 17 stehen)
    52FEATURE_FW_UPDATE_MODE1Update möglich
    53FEATURE_ACCESSORY_COUNT20max. Anzahl an Zubehörobjekten
    54FEATURE_ACCESSORY_SURVEILLED0keine Lageüberwachung
    55FEATURE_ACCESSORY_MACROMAPPED1Accessory sind auf Makros abgebildet

CV für Servos

    Die Grundeinstellungen für jeden Servo sind in 16 CVs abgelegt (siehe Tabelle), diese CVs sind ab Adresse 61 fortfolgend angeordnet. Die CV-Adresse für ein bestimmtes Servo und eine bestimmte Einstellung erhält man, indem man folgende Rechnung durchführt: CV = 61 + servo_num * 16 + Offset.
    Beispiel:
    CV-Adressen der Einstellung für die Stromabschaltung
    CV75 Servo[0].PowOFF
    CV91 Servo[1].PowOFF
    CV107 Servo[2].PowOFF
    CV123 Servo[3].PowOFF

    Wichtig: Manche der folgenden Werte dienem zum Speichern von Servozuständen und werden von der Firmware der Lightcontrol im Betrieb verändert. Zur Einstellung der Servos wenn möglich die Tools (BiDiB-Wizard usw.) oder das Debug-IF verwenden.
    CV für Servo-Ansteuerung
    OffsetNamedefaultKommentar
    0minL0Operating Range Min low
    1minH20Operating Range Min high
    2maxL0Operating Range Max low
    3maxH250Operating Range Max high
    4Mode0x30Mode: see Mode bit *)
    5Repeat5Repeat: 0=forever
    6Loc0Location: 0 = pre Move A; 1=pre move B
    7CurveA7Curve Movement A
    8TimeA6Curve Time stretch A
    9CurveB8Curve Movement B
    10TimeB6Curve Time stretch B
    11PosMode2Position Mode (smooth, linear) (for macro)
    12PosTime4Time stretch value for Position Mode (for macro)
    13Last_Pos128Saved Last Position (for macro)
    14PowOFF0Abschaltung der Stromversorgung des Servos:
    0: es wird nie abgeschaltet.
    1...250: es wird nach einer Zeit PowOFF * 20ms nach dem letzten Befehl an das Servo abgeschaltet. Beipiel: 100 (entspricht 2s), erst nachdem für 2s keine Stellbewegungen an das Servo geschickt wurden, wird die Stromversorgung abgeschaltet. Das Servo wird automatisch bei einer weiteren Bewegung wieder eingeschaltet.
    Hinweis: je nach Stellung und Servoelektronik kann es bei Wiedereinschalten zu einem kleinem Servoruckler kommen.
    15PowPRE0Voreilung der Stromversorgung beim Einschalten des Servos:
    0: Power wird zugleich mit dem ersten Servopuls eingeschaltet. (exakt: einschalten 5ms vor Pulsende).
    1...127: Die Stromversorgung wird n * 5ms vor dem ersten Puls an das Servo eingeschaltet.
    Hinweis: Messreihen haben gezeigt, dass viele Servos am besten mit der Voreinstellung 0 laufen und dort geringestes Einschaltruckeln zeigen. Manche Servos verhalten sich besser bei PowPRE = 2 bis 5.
    PowPRE ist ab Firmware 0.15.0 enthalten.

CV für LED-Konfiguration

    Die Grundeinstellungen für jede LED sind in 5 CVs abgelegt (siehe Tabelle), diese CVs sind ab Adresse 125 fortfolgend angeordnet. für LED0 ist der Bereich CV125 ... CV129, für LED1 ist der Bereich CV130 ... CV134, usw. Allgemein ergibt sich der CV-Bereich für die LED[i] nach folgender Formel: CV125+5*i ... CV129+5*i. Beispiel: LED16: Damit ist 5*i = 80, die CV für current der LED16 ist also: 125 + 80 => CV205.
    Die CVs für Helligkeit und Dimmzeit werden am einfachsten über den BiDiB-Wizard eingestellt, dort kann man je LED komfortabel die Einstellung mittels Schiebereglern vornehmen.
    CV für LED-Kontrolle
    OffsetNamedefaultKommentar
    0current255Einstellung der Stromquelle, Wertebereich 0..255 *)
    1brightness_off0Helligkeit für den Zustand AUS, Wertebereich 0..255
    2brightness_on255Helligkeit für den Zustand EIN, Wertebereich 0..255
    3dimm_off2Dimmzeit in Richtung AUS einstellen 0=schnell ... 255=langsam
    4dimm_on6Dimmzeit in Richtung EIN einstellen 0=schnell ... 255=langsam
    *) Hinweis zur Einstellung der Stromquelle:
    Der Strom in der LED wird durch 2 Einstellungen definiert:
  • Referenzwiderstand: R33, R34 (bzw. R35 und R36) an Eingang IREF. Damit stellt man den Maximalstrom des TLC ein. Im Schaltplan sind Widerstandswerte und der sich ergebende Strom angegeben. Empfohlen ist eine Einstellung auf 10mA.
  • Einstellung der Konstantstromquelle im TLC: Hierfür gibt es ein Einstellregister ('dot correction'), welches aus der CV current geladen wird. Diese Stromquelle wird dabei auf einen Anteil am Maximalstrom gestellt, d.h. die Werte in der Tabelle skalieren sich bei anderer Einstellung des Maximalstromes. Es gilt folgender Zusammenhang zwischen CV und Strom (bei einer Einstellung des Maximalstromes auf 10mA):
    CV-WertTLC-WertStrom
    0 00.00mA
    16 10.15mA
    32 20.31mA
    48 40.63mA
    64 60.95mA
    80 81.27mA
    96 111.75mA
    112 152.38mA
    128 193.01mA
    144 243.80mA
    160 294.60mA
    176 355.55mA
    192 416.50mA
    208 487.61mA
    224 558.73mA
    240 6310mA

CV für 'Begriffsabbildung' (Accessory-Mapping)

    (Ab Version 0.12.0) Die LightControl kann gewünschte Kombinationen und Abläufe von Ausgängen zu Makros zusammenfassen (Beispiel: 'Signalsteuerung'). Der Aufruf eines solchen Makros erzeugt dann ein bestimmtes Leuchtmuster auf dem Signal, das Signalbild bzw. den Signalbegriff (=Aspect).
    Es wird also eine Reihe solcher Makros geben, welche jeweils einen bestimmten Begriff (z.B. Hp0) erzeugen. Solche Makros können innerhalb der Lightcontrol zu Modellbahn-Zubehör-Objekten (Accessory) zusammengefaßt werden, ein Accessory-Objekt zeigt also einen bestimmten Begriff bzw. stellt eine bestimmte Weichenstellung dar.

    Die LightControl kann 20 solcher Objekte verwalten, von denen jedes max. 8 Begriffe (aspects) haben darf. Die Zuordnung, welcher Begriff welches Macro startet, erfolgt mit den folgenden CVs.
    CV für Accessory-Mapping
    OffsetNamedefaultKommentar
    0current_aspect255Zuletzt aufgerufener Begriff *)
    1aspect 0?Macro, welches für Begriff 0 aufgerufen wird
    2aspect 1?Macro, welches für Begriff 1 aufgerufen wird
    3aspect 2?Macro, welches für Begriff 2 aufgerufen wird
    4aspect 3?Macro, welches für Begriff 3 aufgerufen wird
    5aspect 4?Macro, welches für Begriff 4 aufgerufen wird
    6aspect 5?Macro, welches für Begriff 5 aufgerufen wird
    7aspect 6?Macro, welches für Begriff 6 aufgerufen wird
    8aspect 7?Macro, welches für Begriff 7 aufgerufen wird
    Hinweise
    In >current_aspect speichert die LightControl den Zustand des jeweiligen Objekt, um diesen beim nächsten Start wieder darstellen zu können. Es wird das Macro gestartet, welches mit diesem Objektbegriff verbunden ist.
    Wenn ein aspect nicht benutzt werden soll, so wird 255 für das zugehörige Makro eingetragen. Die möglichen aspects sind vom aspect 0 an beginnend lückenlos anzuordnen.

FAQ

  • Meine LC merkt sich die Makros nicht, nach dem Ausschalten sind sie weg.
    Zum Speichern der Makros braucht die LC einen sog. Read-Write-Zugriff auf das Flash, und dieser geht nur mit Bootloader. Wenn der Bootloader fehlt, dann blinkern die LEDs beim Starten (als Warnung) und auch die Möglichkeit zum FW-Update wird in den Tools nicht angezeigt. Abhilfe: Bootloader mit dem Programmer einspielen.