8 kanaals RGB controller – auto kerstverlichting
1.
Inleiding
Dit apparaat is een 8-kanaals RGB controller uitgevoerd als kerstverlichting
voor een kleine kerstboom (bv. voor gebruik in een auto of motorhome). Het
voorziet in volledige controle over 8 RGB LED strips (elk bestaande uit maximum
9 RGB LEDs) d.w.z. kleur en intensiteit. Dit wordt mogelijk gemaakt dankzij 24
softwarematige PWM kanalen.
Deze schakeling is gebaseerd op de PIC24HJ128GP504
microcontroller.
Deze chip is eigenlijk een kleine computer die in één enkele chip bevat is,
inclusief RAM geheugen, EEPROM, I/O poorten, centrale verwerkingseenheid enz.
Als je deze chip koopt, is hij uiteraard leeg en bevat geen enkel programma. Je
moet de broncode (zie link onderaan) compileren en de resulterende machinecode
naar de chip downloaden. Hierbij kun je gebruik maken van een kleine
"programmer" die verbonden wordt met de PC en de chip. Voor meer in
detail uitleg van dit soort dingen, kun je best eens naar volgende plaats
surfen: Getting
started with microcontrollers.
2.
Beschrijving
Om 8 RGB kanalen te besturen op intensiteit en kleur, heb je 24 PWM
kanalen nodig. De PIC24HJ128GP504 heeft niet zoveel PWM kanalen. Daarom zullen
we gewone I/O poorten gebruiken en de PWM functionaliteit voorzien door ze
softwarematig te implementeren, gebruik makend van de Timer1 interrupt.
Het apparaat heeft 32 programma’s om het RGB patroon mee te selecteren
3.
Gebruik
Het apparaat wordt bediend met een enkele drukknop, om het programma te
kiezen. Het gekozen programma nummer wordt getoond op een simpele binaire
display bestaande uit 5 LEDs.
Bij inschakeling wordt programma 0 uitgevoerd. Druk op de knop om naar
het volgende programma te gaan. Programma 31 is een willekeurige combinatie van
programma 0 tot programma 30.
Dit is wat op het “display” getoond wordt:
_ _ _ _ _ programma 0
_ _ _ _ X programma 1
_ _ _ X _ programma 2
_ _ _ X X programma 3
_ _ X _ _ programma 4
_ _ X _ X programma 5
_ _ X X _ programma 6
_ _ X X X programma 7
_ X _ _ _ programma 8
_ X _ _ X programma 9
_ X _ X _ programma 10
_ X _ X X programma 11
_ X X _ _ programma 12
_ X X _ X programma 13
_ X X X _ programma 14
_ X X X X programma 15
X _ _ _ _ programma 16
X _ _ _ X programma 17
X _ _ X _ programma 18
X _ _ X X programma 19
X _ X _ _ programma 20
X _ X _ X programma 21
X _ X X _ programma 22
X _ X X X programma 23
X X _ _ _ programma 24
X X _ _ X programma 25
X X _ X _ programma 26
X X _ X X programma 27
X X X _ _ programma 28
X X X _ X programma 29
X X X X _ programma 30
X X X X X programma 31
4.
Aansluiting
Verbind de 8 RGB LED strips met de print, en verbind een 12V DC voiding
met de DC-in connector:
Hieronder een foto van 1 LED strip, als spiraal gewikkeld rond een
stukje PVC pijp van 16mm diameter:
Merk op dat voor het verbinden van een LED strip met de print ik mijn
eigen type connector gemaakt heb. Langs LED zijde is dit een L-vormige
combinatie van 3 mannelijke en één vrouwelijke header, langs printzijde is dit
een L-vormige combinatie van 3 vrouwelijke en één mannelijke header.
5.
Schema
Het hoofdschema:
Onderstaand schema is een blokschema dat toont hoe de 8 RGB LED strips,
de drukknop, 5-LED display en voiding worden verbonden:
Onderstaand schema is de user interface (drukknop en LED display,
slechts 1 van de 2 knoppen is nodig):
6.
Uitleg
van het schema
(Zie het hoofdschema hierboven).
Two voltage regulators are used: one to produce a
stable 12V for the LED strips, the other to produce 3.3V for the PIC.
The schematic shows 24 resistors and 24 transistors
which drive the LEDs (8 channels x 3 for red, green, blue = 24 ports in total).
An ICSP (In Circuit Serial Programming) interface is
provided by means of PAD35-36-37.
The 5-LED binary display connects to PAD40-41-42-44-45.
PAD39 is for future extension.
PAD43 connects to the pushbutton.
7.
De
gedrukte schakeling
Hoofd print
De print is ontworpen voor SMD componenten.
Ze is dubbelzijdig uitgevoerd en ontworpen met Eagle (van Cadsoft).
De PADs voor de LED strips kunnen gebruikt worden om headers op te
solderen (er kan al dan niet een gaatje worden geboord).
Merk op dat er geen plaats is voor de ICSP connector, deze moet los van
de print voorzien worden (header) en met 5 draden met de correcte PADs op de
print verbonden worden.
PDF bestand (bovenkant, gespiegeld) om aft e drukken op een transparant:
Print-layout
PDF bestand (onderkant) om aft e drukken op een transparant: Print-layout
Link naar Eagle bestand brd bestand met de print.
LED display print
Dit is een kleine print om de 5 LEDs voor de binaire display en de
drukknop onder te brengen. Ze is ontworpen voor SMD componenten en enkelzijdig
uitgevoerd.
PDF bestand (gespiegeld) om aft e drukken op een transparant: Print-layout
Link naar Eagle bestand brd bestand met de print.
Connectoren
print
Dit is een hulpje om de connectoren voor de LED strips meet e maken, het
bevat 8x 4 paden die geboord moeten worden en voorzien worden van headers. Deze
print is enkelzijdig, niet-SMD.
PDF bestand om af te drukken op een transparant: Print-layout
Link naar Eagle bestand brd bestand met de print.
8.
Het uiteindelijke apparaat
Hieronder enkele foto’s van het uiteindelijke apparaat.
De eerste versie van de print bevatte een paar fouten, en er moesten
verbeteringen op worden aangebracht. Vandaar het wat slordige uitzicht:
De print wordt in de bloempot geplaatst die bij de kerstboom hoort:
De gebruikers interface, voor de behuizing heb ik gebruik gemaakt van
een plastic SD-kaart doosje:
De kerstboom met de LED strips:
9.
Programmeren
De software is volledig in C geschreven (gebruik makend van de C30
compiler van Microchip).
De functies voor de LED programma’s noemen “program0()” tot
“program31()”. Je kunt je eigen versies van deze functies schrijven om aan je
eigen noden te voldoen.
Een “programXX()” functie beschrijft één iteratie van een LED programma.
De hoofdlus zorgt voor herhaling dus dat moet je niet zelf doen.
Als je je eigen “programXX()” functies wil schrijven heb je volgende
functies nodig:
-
SetPwm(poort, intensiteit) – stelt de intensiteit in
van een poort (0..23 waar 0 = LED1 rood, 1 = LED1 groen, 2 = LED1 blauw, 3 =
LED2 rood enz.) op een bepaalde waarde (0..63 waar 0 = 0% en 63 = 100%)
-
SetColor(ledNummer, kleur) – stelt de kleur in van een
LED (1..8) op een bepaalde RGB waarde (0xRRGGBB waar RR, GG en BB hexadecimale
waardes zijn tussen 0..0xff)
Je hebt ook de delay_ms() functie nodig. Gebruik deze functie om een
bepaald aantal milliseconden te wachten. Deze functie keert onmiddellijk terug
als de knop ingedrukt wordt. Het is aan te raden regelmatig te controleren of
de knop wordt ingedrukt binnen je “programXX()” functie, zeker na een
delay_ms(), zodat onmiddellijk kan teruggekeerd worden naar de hoofdlus voor
knopverwerking. Dit kan gedaan worden met “if (PUSHBUTTON == 0) return 0;”.
Voor het programmeren heb je de Microchip MPLAB X IDE en de C30 compiler
nodig. Beide kunnen gratis gedownload worden van de MPLAB X IDE site. Je hebt
ook een stuk hardware nodig: de Microchip PICkit3 programmer.
Zip bestand dat alle source code, header bestanden en project bestanden
bevat: Link naar MPLAB project.
Verbinding met een PIC programmer.
PADen 35-36-37, massa en +3V3 moeten
(tijdens het programmeren) verbonden worden met de PICkit3 programmer (zie de
datasheets van de PICkit3 en de PIC24HJ128GP504 voor de juiste
aansluitgegevens).
Home Terug naar
Electronica projecten