1

Donnerstag, 11. Dezember 2008, 00:17

Der universelle (oder ultimative?) Lichtcontroller

Servus,

hier ist mein universeller Controller für Modellbeleuchtungs-Effekte.
Manche werden sagen: ganz schön viel Programm-Aufwand für ein paar LEDs blinken zu lassen!
Recht haben sie! ;)

Aber es gibt auch Vorteile:
- es gibt nicht nur "an" und "aus", sondern eine Helligkeitssteuerung über PWM, und das Ganze für bis zu 8 Licht-Kanäle.
- beliebige Lichtmuster ("Pattern") lassen sich leicht implementieren, da ihr Ablauf nicht mühsam als "Algorithmus" für den PIC programmiert werden muß, sondern mit einem speziellem Steuercode erstellt wird. Im Wesentlichen besteht der aus Helligkeits-Angaben und deren Zeitdauer (z.B. in 10ms Schritten). Das "Programm" für einen Doppelblitz, wobei der 2. Blitz nur halb so hell sein soll, besteht dann z.B. nur aus 9 Bytes:

Quellcode

1
2
3
4
5
6
7
8
9
128 = volle Helligkeit
     3 = 3 x 10ms = 30 ms lang
     0 = Helligkeit 0 (aus)
   10 = 100 ms Pause zwischen den Blitzen
   64 = halbe Helligkeit
     3 = wieder 30 ms
     0 = Helligkeit 0 (aus) 
   84 = 840 ms lang
0xC0 = Steuercode: Reset (das Ganze von Anfang...)

Wird der "smooth"-Mode aktiviert, erfolgt die Helligkeits-Änderung zwischen den Werten kontinuierlich, z.B. bei der Steuersequenz wird die LED langsam innerhalb einer Sekunde von 0 auf 100% gefahren, um dann noch langsamer in 2 Sekunden von 100% auf 10% Helligkeit zu gehen:

Quellcode

1
2
3
4
5
6
7
8
0xC3 = Steuerbefehl "smooth mode on"
   0 = aus
100 = 1 Sekunde
128 = volle Helligkeit
200 = zwei Sekunden
  13 = ca. 10% Helligkeit 
    0 = Zeitangabe notwendig, gehört zu Helligkeitswert
0xC0 = von vorn... (gibt Sprung von 10% auf 0)

Für jeden Lichtkanal gibt es so ein "Pattern Control Program"-Datensatz im EEPROM des Prozessors, und natürlich laufen die i.d.R. unabhängig voneinander parallel.

Soviel erstmal zur Einführung, worum es geht. Der Code ist im Anhang.

Anmerkungen:
In der vorliegenden Form läuft der Code auf einem PIC16F636 (8 MHz interner Clock) und hat eine PWM Helligkeits-Auflösung von 200 Schritten bei 100Hz. Die feine Auflösung ist besonders für Helligkeitsverläufe nahe 0 wichtig (z.B. bei Simulation vom Ausglimmen eines Halogen-Scheinwerfers), damit die Stufen nicht zu sehr auffallen.
Es sind 6 Kanäle eingestellt (#define NCHAN).
Die Patterns sind von meinem Learjet (R.I.P.): 2 x rotating Beacon-Simulation, ACL-doppel-Blitzer an Flächen und einfach-Blitzer am Heck, Positionslichter und Landescheinwerfer (letztere Glühbirnen-simuliert. RC-Steuerung über einen Schieber: Stufe 0 (ganz unten): alles aus, Stufe 1: Blitzer u.ACL an, Stufe 2: Positionslichter an, Stufe 3 (ganz oben): Landscheinwerfer an.

Bei 4MHz Prozessortakt sollte PWMTU auf 100 µs erhöht werden, da die Interrupt-Routine sonst zu lang läuft. PWMCYC (= Helligkeits-Schritte) dann ggf. verringern, da sonst die LEDs nur noch mit 50 Hz getaktet werden.
Die Intensitäts-Werte im Steuercode sind unabhängig von der PWM-Auflösung, d.h. 128 ist immer 100% Helligkeit, egal, welcher Wert für die tatsächliche Auflösung (PWMCYC) gewählt wird. Mit weniger Auflösung erhöht sich automatisch die PWM-Taktfrequenz.

Grüße,

Thomas
»Ottili« hat folgende Datei angehängt:
  • ulc.zip (9,85 kB - 67 mal heruntergeladen - zuletzt: 11. Mai 2016, 15:35)

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »Ottili« (11. Dezember 2008, 00:46)


2

Sonntag, 14. Dezember 2008, 01:22

RE: Der universelle (oder ultimative?) Lichtcontroller

Hier ist eine Version mit einer modifizierten RC-Steuerung, die über einen Steuerknüppel oder Schalter mit 3 Stellungen (unten-mitte-oben) vier Schaltfunktionen unabhängig voneinander als Memory-Switch schaltet. Wird der Schalter kurz (hier: unter 1 Sekunde, Zeitschwelle = Parameter MS_LONG) aus der Mitte und wieder zurück bewegt, wird die Funktion 1 bzw. 2 umgeschaltet, wird die Endstellung länger als 1 Sekunde gehalten, wird beim Zurückstellen auf Mitte die Funktion 3 bzw. 4 umgeschaltet.
Zu kurz sollte der Knüppel/Schalter aber nicht betätigt werden, da das RC-Signal einige Impulse lang stabil sein muß, sonst wird es als Störung ausgefiltert.

Grüße,

Thomas
»Ottili« hat folgende Datei angehängt:
  • ULC_MS.zip (9,02 kB - 39 mal heruntergeladen - zuletzt: 9. Oktober 2017, 19:07)

3

Samstag, 3. Januar 2009, 02:58

RE: Der universelle (oder ultimative?) Lichtcontroller

Servus,

hier ist eine aktualisierte Version.

Änderungen:
  • Assemblierung auch für PIC12F675 oder 12F629 möglich (für beide den 12F675 einstellen, der HEX-code läuft dann auch auf dem 12F629)
  • Nur noch eine ASM-Datei. Die Art der RC-Signalverarbeitung (Schieber oder Memory-Switch) kann über #DEFINE gewählt werden.

Grüße,

Thomas
»Ottili« hat folgende Datei angehängt:
  • ulc.zip (11,15 kB - 36 mal heruntergeladen - zuletzt: 9. Oktober 2017, 19:07)

ommes

RCLine Neu User

Wohnort: Kreis Koblenz

  • Nachricht senden

4

Montag, 16. Februar 2009, 21:14

Lichtcontroller

Hallo Thomas,
gibt es hierzu auch einen Schaltplan, damit man erkennen kann welche
Ein und Ausgänge belegt werden. ???

Nett wäre auch ein Hex-File, denn wir können noch nicht so richtig mit
MPLAB. (Üben noch) :wall:

Gruß Ommes

5

Dienstag, 17. Februar 2009, 01:51

RE: Lichtcontroller

Hallo Ommes,

den Controller gibt es bald in einer ausgereifteren Version, wo der EEPROM-Code dem "ALCIC"-Standard entspricht (siehe Thread: http://www.rclineforum.de/forum/thread.p…did=224718&sid=

Dazu habe ich auch angefangen, eine Webseite mit etwas ausführlicherer Doku zusammenzustellen: http://home.arcor.de/otti59/alc/about.html
Dort soll künftig auch der Code herunterladbar sein, da ich nicht wegen jeder kleinen Aktualisierung hier einen weiteren Beitrag anhängen möchte...

Natürlich kannst Du bis dahin den "alten" Code verwenden (der funktioniert ja auch). Assemblierung mit MPLAB ist eigentlich ganz einfach:
Menü "Configure/Select Decice..." -> PIC-Typ einstellen
Menü "File/Open..." ASM-Datei öffnen,
Menü "Project/Quickbuild ulc.asm"

Die Hex-Datei steht dann im selben Verzeichnis, wie ulc.asm

Pinbelegung 16F63x: (ggf. Zeile 50: "#define NCHAN 6", damit alle 6 Ausgänge aktiv sind)
Ch.1 = ACL Doppelblitz = RC0 = Pin 10
Ch.2 = ACL Einfachblitz = RC1 = Pin 9
Ch.3 = Landescheinwerfer = RC2 = Pin 8
Ch.4 = Positionslichter = RC3 = Pin 7
Ch.5 = Rot.Beacon #1 = RC4 = Pin 6
Ch.6 = Rot.Beacon #2 = RC5 = Pin 5
RC-Impuls (Eingang) = RA0 = Pin 13

Pinbelegung 12F6xx: (max. 5 Ausgänge möglich, Zeile 50 "#define NCHAN 5")
Ch.1 = ACL Doppelblitz = GP0 = Pin 7
Ch.2 = ACL Einfachblitz = GP1 = Pin 6
Ch.3 = Landescheinwerfer = GP2 = Pin 5
Ch.4 = Positionslichter = GP4 = Pin 3
Ch.5 = Rot.Beacon = GP5 = Pin 2
RC-Impuls (Eingang) = GP3 = Pin 4

Die Ausgänge sind High-aktiv, d.h. Anschluß an Gate eines N-Kanal FETs oder Basis eines NPN-Transistors (natürlich über Widerstand).

Grüße,

Thomas

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Ottili« (17. Februar 2009, 01:54)


omweb

RCLine User

Wohnort: Kiel

Beruf: Physiker

  • Nachricht senden

6

Dienstag, 17. Februar 2009, 16:44

Hallo, tolle Idee! Habe das gerade mal zusammengelötet und es funktionierte alles auf Anhieb. Die kleinen PIC liefern pro Pin 25mA Strom - das reicht für LEDs schon fast, man muss nicht unbedingt Transistoren verwenden.
Ole
"Wie Absturz? So lange die Trümmerteile in Pistenachse liegen, gilt die Landung als perfekt!"

Alles für RC Flieger: www.rc-flieger.net
Kostenlose Baupläne: depronworld.de

7

Dienstag, 17. Februar 2009, 23:54

Servus Ole,

das ist sehr grenzwertig - die 25 mA stehen bei den "Absolute maximum ratings", ist also nicht unbedingt zu empfehlen, soviel zu ziehen. Ruhigen Gewissens würde ich die Ausgänge mit maximal 10-15 mA belasten, bei viel mehr dürfte die Spannung auch schon ganz schön einbrechen. Wenn man LEDs direkt anschließen will, sollte man ggf. die Polarität der Ausgänge ändern (Programm ändern auf Aktiv-Low), denn nach VSS können ein paar mA mehr geschaltet werden, als nach VDD.
Aber meistens wird man sowieso größere Ströme und/oder höhere Spannungen schalten, da kommt man um einen Treiber nicht herum (kostet auch nur ein paar Cent).

Grüße,

Thomas

omweb

RCLine User

Wohnort: Kiel

Beruf: Physiker

  • Nachricht senden

8

Mittwoch, 18. Februar 2009, 10:08

Hatte überlegt ein paar BC 327 oder sowas zu nehmen, gibt es die auch mehrfach in ein IC-Gehäuse integriert? Oder was meinst du mit "Treiber für ein paar Cent" (Geld spielt doch bei uns Modellbauern keine Rolle :-) aber Gewicht!!)
Ole
"Wie Absturz? So lange die Trümmerteile in Pistenachse liegen, gilt die Landung als perfekt!"

Alles für RC Flieger: www.rc-flieger.net
Kostenlose Baupläne: depronworld.de

9

Mittwoch, 18. Februar 2009, 12:31

Hallo Ole,

bei "High-aktiven" Ausgängen müßte es schon der BC337 sein (NPN), da der 327 ein PNP-Typ ist. Natürlich gehen auch Transistor-Arrays oder für höhere Ströme MOSFETs (N-Kanal). Da gibt es auch zwei Stück in einem kleinen SO8-Gehäuse. Sowas wäre dann gut für High-Power LEDs mit >1A Strom, z.B. für Blitzer.
Bei meiner Hercules damals hatte ich auch BC337 genommen (s. http://home.arcor.de/otti59/lightcontrol/lc.html), wobei der Transistor dabei als Konstantstromqelle geschaltet wurde. So konnten die LEDs direkt vom Flugakku versorgt werden, trotzdem war die Helligkeit unabhängig vom Lade- und Belastungszustand des Akkus.

Als kompakte Lösung würde sich ein ULN2003 anbieten.

Grüße,

Thomas

ro.heg

RCLine User

Wohnort: Quickborn

  • Nachricht senden

10

Freitag, 20. Februar 2009, 13:01

Treiber

Hallo Ihr LED Spezis,
was haltet Ihr denn vom ULN2803 im 18 pol. DIL- Gehäuse. (invertierent)
8 Treiber in einem Gehäuse, Pin 9 liegt an GND
Damit treibe ich die Motoren des Krahn´s mit ca. 50 mA.

Euer Thema muß ich mir nochmal in Ruhe reinziehen.

Grüße

Rolf

11

Samstag, 21. Februar 2009, 00:30

RE: Treiber

Hallo Rolf,

der 2803 ist wohl im Prinzip das Gleiche, wie der 2003, nur mit 8 statt 7 Treibern. Entsprechend hat er zwei Pins mehr. Sonst sehe ich keine Unterschiede.

Grüße,

Thomas

12

Sonntag, 1. März 2009, 14:07

RE: Lichtcontroller

Servus,

der Lichtcontroller incl. Doku (zumindest für die Software) ist nun soweit, daß evtl. auch jemand etwas damit anfangen kann: http://home.arcor.de/otti59/alc/pic-alic.html

Grüße,

Thomas

ommes

RCLine Neu User

Wohnort: Kreis Koblenz

  • Nachricht senden

13

Freitag, 13. März 2009, 22:16

Alic Lichtcontroller

Hallo Thomas,
zunächst einmal vielen Dank für Deine schnelle Antwort hier.
Ich habe mich einmal ein wenig in Dein Kochbuch eingelesen,
tolle Sache und möchte es jetzt auch umsetzen.
MPLAB geht dank Deiner Hilfe auch immer besser.
Meine Fragen nun:
1. Ist es sehr kompliziert das ganze in einen 16F628A
zu brennen (zur Zeit vorhanden und auch eine Testplatine da).? ???

2. Kann man in MPLAB (Stimuli) das RC-Signal zum austesten
simulieren? ???

freundliche Grüße aus dem Rheinland :w
Ommes

14

Freitag, 13. März 2009, 23:45

RE: Alic Lichtcontroller

Hallo Ommes,

es ist sicher mit relativ geringem Aufwand möglich, auch den 16F628 einzubinden. Allerdings werden dafür schon ein paar kleine Änderungen am Quelltext nötig sein - das müßte man mal durchgehen...
(kann ich aber nicht testen, dafür müßte ich mir erst einen 16F628 besorgen)

Ein RC-Signal kann man einfach als "Clock" -Stimulus eingeben, z.B. 1500 Zyklen high für 1,5ms Impulslänge. Low muß man nicht so lang machen, wie in der Realität (20ms), sondern z.B. nur 2ms.
Den Lichtcontroller würde ich aber nicht noch mit MPLAB-SIM simulieren, da der Code ja schon "gedebugt" ist, und die Abarbeitung des ALIC-Codes per Simulator zu überwachen, dürfte verhältnismäßig umständlich sein.

Grüße,

Thomas

15

Samstag, 14. März 2009, 15:39

RE: Alic Lichtcontroller

So, hab das mal auch auf den 16F628 und dessen unmittelbare Verwandschaft ausgeweitet. Die Version hat bei einem kurzen Test im Simulator funktioniert, ist aber nicht in der Praxis getestet, daher habe ich sie als "Beta-Version" deklariert.
Da die Port-Change Interrupts (für RC-Signale) nicht 1:1 übernommen werden konnten, gibt's beim 16F628 erstmal nur maximal einen RC-Eingang.

http://home.arcor.de/otti59/alc/picalic/…eta16f648a.html

Grüße,

Thomas

ommes

RCLine Neu User

Wohnort: Kreis Koblenz

  • Nachricht senden

16

Samstag, 21. März 2009, 13:32

Alic Lichtcontroller

Hallo Thomas,
Deine Bemühungen um den 628A waren erfolgreich, vielen Dank dafür.
Es läuft auch in der Praxis.
Wenn der zweite RC-Kanal auch noch funktionieren würde wäre das super.
Hab aber jetzt auch einen 630 (dank Fa.Reichelt) und werde damit mal ein wenig
experimentieren. Bei der Zuordnung der Schalter und Switches steige ich noch nicht so recht durch, auch die Abarbeitung im Alic-File ist für mich noch nicht so recht verständlich. Na ja wenn man bald in Rente geht, dann fällt das lernen doch schon etwas schwerer.
Wenn man 2 RC-Kanäle über 2 Momentschalter abfragt müssten doch eigentlich noch 4 Funktionen mehr drin sein.?
beide Schalter vorne --- oder hinten
einer vor und einer zurück --- und umgekehrt
dann wäre der Lichtcontroller wirklich "ultimativ"!

Meine Frage zum Stimulus bezog sich auf einen fünffach Schalter über einen Schieber an der Fernsteuerung. Den Code dazu habe ich und möchte damit ein wenig testen. Hab aber jetzt auch einen 12F508 wo der Code hoffentlich drauf läuft. Geschrieben wurde er für einen 12C509.
Ich brauche den Lichtcontroller und die mehrfach Schalter für meine Schiffsmodelle und Vereinskameraden.
Wenn der Controller mal so richtig läuft wie wir das wollen, werden wir auch eine schöne Platine mit Ausgangsstufen dafür bauen, aber gut Ding braucht Weile.
Für Deine Beiträge hier im Forum vielen Dank und mach weiter so, wir verfolgen das sehr aufmerksam, auch wenn die Resonanz nicht so groß ist. Ich denke die sind alle nur schreibfaul. Die meisten Bastler sind halt von der AVR-Abteilung.

viele Grüße
Ommes

17

Montag, 23. März 2009, 14:58

RE: Alic Lichtcontroller

Hi Ommes,

Zitat

Original von ommes
Hallo Thomas,
Deine Bemühungen um den 628A waren erfolgreich, vielen Dank dafür.
Es läuft auch in der Praxis.


Prima, dann werde ich das bei Gelegenheit mal zur "offiziellen" Version befördern!

Zitat


Wenn der zweite RC-Kanal auch noch funktionieren würde wäre das super.

Muß mal sehen, ob/wie das evtl gehen könnte. Das Problem ist, daß beim 628 keine individuell pro Portleitung ein/ausschaltbare Port-Change Interrupts vorhanden sind.

Zitat


Hab aber jetzt auch einen 630 (dank Fa.Reichelt) und werde damit mal ein wenig
experimentieren. Bei der Zuordnung der Schalter und Switches steige ich noch nicht so recht durch, auch die Abarbeitung im Alic-File ist für mich noch nicht so recht verständlich. Na ja wenn man bald in Rente geht, dann fällt das lernen doch schon etwas schwerer.

Da wollte ich ja auch noch ein Kapitel auf der Webseite machen, wo die Grundlagen etwas anwendergerechter (möglichst sogar für Leute ohne Kenntnisse von Assembler-Programmierung) erläutert werden. Allerdings fehlt mir dazu im Moment die Freizeit, so daß vermutlich über einen längeren Zeitraum nur kleckerweise Inhalte dazukommen.
Ein gewisses Feedback, was ggf. unklar oder schwer verständlich ist, ist natürlich immer hilfreich. Wenn man sich etwas selbst ausgedacht hat, ist es für einen selbst ja naturgemäß alles sonnenklar, und wenn man dann eine Seite mit Erklärung der Funktion verfasst, setzt man leicht die falschen Schwerpunkte.

Grüße,

Thomas

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Ottili« (23. März 2009, 15:00)


18

Montag, 23. März 2009, 15:07

RE: Alic Lichtcontroller

Zitat

Original von ommes
Wenn man 2 RC-Kanäle über 2 Momentschalter abfragt müssten doch eigentlich noch 4 Funktionen mehr drin sein.?
beide Schalter vorne --- oder hinten
einer vor und einer zurück --- und umgekehrt
dann wäre der Lichtcontroller wirklich "ultimativ"!


stimmt - allerdings machen mehr als 8 Funktionen (die jetzt schon mit 2 RC-Schaltern gehen) ja vermutlich nur Sinn, wenn der Controller über mehr als 8 Ausgangs-Kanäle verfügt.

ommes

RCLine Neu User

Wohnort: Kreis Koblenz

  • Nachricht senden

19

Donnerstag, 2. April 2009, 13:43

Lichtcontroller

Hallo Thomas,
die Experimente mit dem PIC 16F630 waren überaus erfolgreich, einige Ausgangsstufen mit FET-Transistoren und großer Last wurden getestet.
Auch eine kleine Platine ist schon in Arbeit.
Bevor wir nun ätzen und bestücken habe ich noch eine Frage.
Wenn beide RC-Eingänge 8 Kanäle belegen, kann man dann noch die übrigen
2 Anschlüsse RA1 und RA2 mit Blinker oder Blitzer belegen????
Wenn ich das probiere meckert MPLAB mir das an.
Wie müsste das Alic-File aussehen um das zu erreichen, und brauche ich den Einsprung mit "entry_ch8?
Noch ein paar Beispiele über die Zuordnung der vielen Schalter wäre sicher sehr hilfreich.
Spricht etwas dagegen auf die Platine einen ICSP-Anschluss zu bauen, bei herausgezogenem Empfänger müsste doch dann ein Brennen möglich sein.?

viele Grüße Ommes

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »ommes« (2. April 2009, 13:54)


20

Sonntag, 5. April 2009, 13:47

RE: Lichtcontroller

Hallo Ommes,

Zitat

Original von ommes
Wenn beide RC-Eingänge 8 Kanäle belegen, kann man dann noch die übrigen
2 Anschlüsse RA1 und RA2 mit Blinker oder Blitzer belegen????
Wenn ich das probiere meckert MPLAB mir das an.

Ist zwar im Prinzip richtig gedacht, allerdings ist die Software nur bis maximal 8 Ausgangskanäle ausgelegt. Trotzdem kannst Du ggf. die freien Ausgänge nutzen, wenn Du die Pins mit "SETSWX" oder "CLEARSWX" ansprichst (Schalternummern 17 und 18 ). Nur gibt es für diese Kanäle eben keinen eigenen Steuer-Programmteil, d.h. es bietet sich an, diese Ausgänge jeweils in ALIC-Programmteilen anzusprechen, die funktionsmäßig damit zusammenhängen, wie z.B. für einen Wechselblinker: LED A wird durch ein Programm für Channel X gesteuert, LED B wird innerhalb derselben Programmschleife über SETSWX/CLWSWX ein- und ausgeschaltet.

Zitat


Wie müsste das Alic-File aussehen um das zu erreichen, und brauche ich den Einsprung mit "entry_ch8?

Beispiel Wechselblinker (0,5s leuchtet LED A, 0,5s leuchtet LED B, dann wieder LED A):

Quellcode

1
2
3
4
5
6
entry_chX
  LIGHTON 50  ;LED A einschalten (0,5s)
  SETSWX 17   ;LED B einschalten
  LIGHTOFF 50    ;LED A aus (0,5s)
  CLRSWX 17    ;LED B aus
  JUMP entry_chX

Damit die entsprechenden Portleitungen als Augänge verwendet werden, muß es bei den Defines z.B. heißen:
#define AUXOUTA B'00000110'
um RA1und RA2 als Ausgang zu schalten.

Zitat


Spricht etwas dagegen auf die Platine einen ICSP-Anschluss zu bauen, bei herausgezogenem Empfänger müsste doch dann ein Brennen möglich sein.?

Das sollte gehen!

Grüße,

Thomas