De 3D DIY kerstboom soldeerset heeft met de vooraf geflasht microcontroller slechts enkele vooraf ingestelde patronen.
In deze blog leert u hoe u de microcontroller zelf kunt programmeren, zodat de afzonderlijke LED's kunnen worden aangestuurd om uw eigen patronen op de boom weer te geven.
De blog heeft uitsluitend betrekking op de 3D DIY kerstboom soldeerset.
1 Achtergrondinformatie Processor
De gebruikte processor is een STC15W408 van de Chinese fabrikant STCmicro.
Deze is gebaseerd op een (8-bit) 8051 CISC (Complex Instruction Set Computing) architectuur. Deze werd al in 1980 door Intel geïntroduceerd. Ter vergelijking wordt een ATmega328 bekeken. Deze is gebaseerd op de AVR RISC (Reduced Instruction Set Computing) architectuur. Het concrete verschil is het aantal rekenoperaties dat in één klokcyclus kan worden uitgevoerd. De 8051-processoren hebben normaal gesproken meerdere klokcycli nodig voor een rekenbewerking, terwijl de AVR-tegenhanger slechts één enkele klok nodig heeft voor een bewerking. De STC15W408 is echter zo ontworpen dat er geen wezenlijk verschil in prestaties tussen de twee processoren is.
Zoals hierboven al vermeld, is de STC15W408 een 8-bits processor, wat betekent dat een enkele rekenbewerking alleen mogelijk is met waarden van 0-255. Bij complexe projecten zou dit een probleem zijn, omdat de snelheid bij hogere getallen hierdoor drastisch zou worden beperkt. Hier zou gebruik moeten worden gemaakt van moderne 32-bits processors, zoals bijvoorbeeld de ESP32.
Misschien vraagt u zich af waarom in deze bouwset een 8-bits processor zoals de STC15W408 wordt gebruikt. De reden hiervoor is dat hier alleen afzonderlijke IO-pinnen worden aangestuurd en hiervoor geen complexe berekeningen nodig zijn.
Deze processor is dus ideaal voor een dergelijke toepassing, omdat hij eenvoudig te programmeren is.
Pinout

Afbeelding 1: Pinout van de chip
Bij het bekijken van de pinout van het circuit valt op dat de IO-pinnen zijn aangeduid met P0.X tot P5.X. De reden hiervoor is dat de processor beschikt over 5 IO-registers P0 tot P5. Het getal achter het registernummer geeft het bitnummer in het register weer.

Afbeelding 2: Pinregister P1 (uittreksel uit het gegevensblad, hoofdstuk 4.7)
2 Aansluiting van de LED
Op de printplaten bevinden zich 37 RGB-effect-LED's, maar niet elke LED kan afzonderlijk worden ingeschakeld. In de volgende afbeelding zijn de verbonden groepen zijn gemarkeerd met nummers om de toewijzing te vergemakkelijken.

Afbeelding 3: Zijaanzicht met genummerde LED's
Aangezien deze nummering van de LED's aan elke kant van de boom hetzelfde is, worden de vier zijden met letters aangeduid om ze bij het pinmapping te kunnen onderscheiden.

Afbeelding 4: Bovenaanzicht met gelabelde zijden
In de volgende tabel staan alle IO-pinnen met de aanduiding van de aangesloten LED. De ontbrekende IO 1.0 tot 1.5 zijn niet verbonden met de LED.
| 1.6 | A2 | 3.0 | B1 |
| 1.7 | A1 | 3.1 | B2 |
| 2.0 | D3 | 3.2 | B3 |
| 2.1 | D4 | 3.3 | B4 |
| 2.2 | D5 + boven | 3.4 | B5 |
| 2.3 | A5 | 3.5 | C5 |
| 2.4 | A4 | 3.6 | C4 |
| 2,5 | A3 | 3,7 | C3 |
| 2.6 | D2 | 5,4 | C2 |
| 2,7 | D1 | 5,5 | C1 |
Reset-schakeling
Om de chip te kunnen flashen, moet deze kortstondig van de stroom worden losgekoppeld en opnieuw worden aangesloten. Daarom moet er een kleine transistorschakeling voor de FT232 worden gebouwd, die met de DTR -pin de stroomtoevoer van de chip kan regelen.
Voor de bouw van de programmeur heeft u nodig:
FT232 seriële converter
Plaat met gaatjesraster min. 8x13 (bijv. uit het PCB-assortiment)
Kabels (bijv. siliconenkabels assortiment)
weerstanden 470Ω, 10kΩ, 100kΩ (bijv. uit het weerstandsassortiment)
Gele LED (bijv. uit het LED-assortiment)
NPN-transistor BC547 (bijv. ->Amazon)
(optioneel: pogopins of F2M-jumper voor de verbinding met de UART-pinnen van de boom)

Afbeelding 5: Programmeerschakeling op breadboard

Bouw het circuit zoals hierboven weergegeven. Het is raadzaam om de rechterbusstrip niet rechtstreeks op de printplaat te solderen als u geen pogo-pinnen gebruikt, omdat de programmeur dan niet kan worden aangesloten. Als alternatief is het raadzaam om de busstrip via kabels met de printplaat te verbinden.
Als de programmeur volgens het schakelschema correct is opgebouwd, kunt u de bouwdoos via pogo-pinnen of een pennenstrook op de bouwdoos aansluiten. Sluit hiervoor de printplaat als volgt aan op de vier aansluitingen onder de chip.
P31 (TX) = RX (FT232)
P30 (RX) = TX (FT232)
3V3 = VCC (FT232)
GND = emittertransistor
Zorg ervoor dat de jumper van de FT232 is ingesteld op 3V3, omdat een te hoog logisch niveau de chip kan beschadigen.
Software
De STC15W408 is niet compatibel met de Arduino IDE. Een goed alternatief voor de gebruikelijke Arduino IDE is de PlatformIO-plugin voor VS-Code. Hierin zijn al meer dan 1000 verschillende boards opgenomen, waaronder ook de STC-chips.
Installeer eerst de Visual Studio Code IDE. Het installatiebestand kunt u hier downloaden.
Nadat de IDE met succes is geïnstalleerd en geopend, gaat u naar de extensies. U kunt deze openen via de linkerzijbalk (zie rode markering in de afbeelding) of via de sneltoetscombinatie Ctrl+Shift+X.

Afbeelding 6: Uitbreidingsmenu in de linkerzijbalk
Zoek hier naar de Platform IO-plug-in en installeer deze.

Afbeelding 7: Weergave in het uitbreidingsbeheer
Open vervolgens de startpagina van PlatformIO (zijbalk > Platform IO > Quick Access > PIO Home > Open) en klik op "New Project".

Afbeelding 8: Projectconfiguratie
In dit venster kunt u nu een naam voor het project en het bord kiezen. Hier moet u, zoals hierboven afgebeeld, de STC15W408AS selecteren. Bevestig ten slotte de projectconfiguratie via de Finish .
Nadat u het project hebt aangemaakt, hoeft u alleen nog maar de code toe te voegen. Om het bestand met de relevante code zo overzichtelijk mogelijk te houden, wordt een extern headerbestand (.h) gebruikt met alle benodigde registerdeclaraties van de chip.
Een bestand dat geschikt is voor de chip kunt u hier van Vincent Defert op GitHub downloaden.
Zodra het bestand is gedownload, kunt u het in VSCode in de map src . Maak daar ook een nieuw bestand aan met de naam main.c, waarin later het uit te voeren programma komt te staan.
Testcode
Als eerste test moeten alle lichtdioden worden ingeschakeld en na een vertraging weer worden uitgeschakeld.
Laad nu het volgende programma op de microcontroller:
| #include |
Als alternatief is het bestand hier beschikbaar om te downloaden.
Uitleg:
(1) Aan het begin wordt het headerbestand met de registerdefinities geïntegreerd.
(2) Vervolgens worden macro's voor de twee LED-toestanden gedefinieerd. Hierdoor wordt het routine-gedeelte overzichtelijker. Normaal gesproken wordt een aangesloten LED ingeschakeld door een IO in de HIGH-toestand. De reden hiervoor is dat de anode (+) van de LED meestal is verbonden met de IO. Op de printplaat is echter de kathode (-) van de LED verbonden met de IO, waardoor deze alleen wordt ingeschakeld in een LOW-toestand.
Aangezien een LED (light emitting diode) zoals de naam al zegt een diode is, wordt deze geblokkeerd in een HIGH-toestand van de IO en brandt dus niet.
(3) Aangezien bij de STC15W408 geen Arduino-standaardmethoden zoals delay() automatisch zijn geïntegreerd, wordt hier de delay()-functie geïmplementeerd.
(4) De interne telcyclus heeft ongeveer een milliseconde nodig om te doorlopen. Deze cyclus wordt dan precies doorlopen met het aantal milliseconden dat als parameter aan de functie is doorgegeven. Zo kan een eenvoudige vertraging worden gerealiseerd, maar deze is afhankelijk van de frequentie van de processorkloksnelheid en kan ook bij langere vertragingen afwijkingen vertonen.
(5) Met de volgende registertoewijzing worden de IO-pinnen in de push-pull-modus gezet. Hierdoor is een werking met hoge stroom op de IO-pin mogelijk. Meer informatie vindt u in het gegevensblad van de chip in hoofdstuk 4.9.2 & 4.7 .
(6) Hier worden de IO-registers op de waarde HIGH gezet, zodat alle LED's in het begin zijn uitgeschakeld.
(7) In de lus worden de IO-pinnen/LED's met een pauze van twee seconden in- en uitgeschakeld.
(8) Naast het instellen van een volledig IO-register kunnen ook afzonderlijke bits in het register worden ingesteld, deze komen overeen met de afzonderlijke IO-pinnen.
Het uploaden gebeurt eenvoudig door op de pijl in de onderste balk te klikken.
Na het succesvol uploaden zou het volgende in de terminal moeten worden weergegeven:

Afbeelding 9: Uitvoer in de VS Code-terminal
Opmerking: bij de eerste upload wordt eerst nog het stcgal tool automatisch geïnstalleerd, wat nodig is voor het flashen van de chip.
Conclusie
Na het lezen van deze blogpost kunt u nu zelf de STC15W408 programmeren, die wordt gebruikt in de 3D Christmas Tree-bouwset, en er uw eigen patronen op weergeven.
Experimenteer gerust met de talloze patronen die nu met de bouwset mogelijk zijn.
Veel plezier met het namaken :)
Voor het maken van deze blog zijn de volgende relevante bronnen gebruikt:
https://www.stcmicro.com/datasheet/STC15F2K60S2-en.pdf
https://de.wikipedia.org/wiki/Intel_MCS-51
https://de.wikipedia.org/wiki/Reduced_Instruction_Set_Computer
https://de.wikipedia.org/wiki/Complex_Instruction_Set_Computer
Deze kunnen worden gelezen om de basisprincipes te verdiepen. Ook interessant zijn de GitHub-repositories van de twee open source-projecten stcgal en stc-mcu-open-source.







6 Reacties
Bastian Brumbi
Hallo zusammen!
Das Fritzing Diagramm habe ich um einen technischen Schaltplan ergänzt.
Der Lautsprecher kann leider aufgrund eines Layout-Fehlers nicht in Betrieb genommen werden. Bei Bedarf können Sie einen passiven Piezo über einen IO anschließen.
@BirgerT Die Leuchtdioden verfügen über einen internen Chip, welcher die Farbabfolge regelt. Dieser kann nicht angesteuert werden!
Birger T
Und wie bekommt man wieder den ursprünglichen Code auf den Controller?
Wie funktionieren die 2-Draht RGB-LEDs – Datenblatt, Type?
Wie (wenn überhaupt) werden die Melodien erzeugt?
Bernd-Steffen Großmann
Ich wiederhole meine Frage nach einem Schaltplan für den Programmerzusatz, da ich das ( fehlerhafte?) Realschaltbild nicht verstehe. Außerdem die Frage wie man den eingebauten Lautsprecher aktivieren kann?
Bernd-Steffen
Hallo, in dem Weihnachtsbaum befindet sich auch ein Lautsprecher. Wie kann der zum Einsatz gebracht werden?
Mfg
Bernd-Steffen Großmann
Hallo Bastian, aus der Fritzing-Anordnung werde ich nicht schlau, wie die Transisorschaltung mit dem Programmer verbunden wird! Wäre es möglich, einen ordinären Schaltplan dazu zu veröffentlichen, damit es auch Old-School-Hobbyisten verstehen?
Peter
The Description is wrong! The ATmega328 is NOT based on the ARM Architecture! It has its own proprietary CPU Architecture named AVR! However it is also an RISC architecture as arm but that is the only common part.