De 3D DIY-kerstboom-soldeerset heeft slechts enkele vooraf ingestelde patronen met de voorgeflashte microcontroller.
In deze blog leer je zelf de microcontroller programmeren zodat de individuele LED's aangestuurd kunnen worden om je eigen patronen in de boom weer te geven.
De blog verwijst daar uitsluitend naar 3D DIY-soldeerset voor kerstbomen.
1 Achtergrondinformatieverwerker
De gebruikte processor is een STC15W408 van de Chinese fabrikant STCmicro.
Dit is gebaseerd op een (8bit) 8051 CISC (Ccomplex ikinstructie Stel C incomputer) architectuur. Deze werd in 1980 door Intel geïntroduceerd. Ter vergelijking wordt een ATmega328 overwogen. Dit is gebaseerd op de ARM RISC (Ropgeleid ikinstructie Senz Ccomputer)architectuur. Het concrete verschil is het aantal rekenkundige bewerkingen dat in één cyclus kan worden uitgevoerd. De 8051-processors vereisen doorgaans meerdere klokcycli voor een rekenkundige bewerking, terwijl de ARM-tegenhanger slechts één enkele klok nodig heeft voor een bewerking. De STC15W408 is echter zo ontworpen dat er geen significant prestatieverschil is tussen de twee processors.
Zoals hierboven al vermeld is de STC15W408 een 8 bit processor, wat betekent dat een enkele rekenkundige bewerking alleen mogelijk is met waarden van 0-255. Bij complexe projecten zou dit een probleem zijn, omdat bij grotere aantallen de snelheid drastisch omlaag zou gaan. Hier moeten moderne 32-bits processors worden gebruikt, zoals de ESP32.
Je vraagt je misschien af waarom een 8-bits processor zoals de STC15W408 in deze kit wordt gebruikt. Dit komt omdat hier alleen individuele IO-pinnen worden aangestuurd en er geen complexe berekeningen nodig zijn.
Deze processor is daarom ideaal voor een dergelijke toepassing omdat hij eenvoudig te programmeren is.
Pin-out

Figuur 1: Pin-out van de chip
Als je naar de pin-out van het circuit kijkt, zul je merken dat de IO-pinnen het label P0.X tot P5.X hebben. Dit komt omdat de processor 5 IO-registers P0 tot en met P5 heeft. Het getal na het registernummer vertegenwoordigt het bitnummer in het register.

Afbeelding 2: Pinregister P1 (uittreksel uit het gegevensblad hoofdstuk 4.7)
2 Aansluiting van de LED
Er zijn 37 RGB-effect-LED's op de borden, maar niet elke LED kan afzonderlijk worden ingeschakeld. In de onderstaande afbeelding zijn de verbonden groepen gemarkeerd met cijfers, zodat ze gemakkelijker kunnen worden toegewezen.

Figuur 3: Zijaanzicht met genummerde LED's
Omdat deze nummering van de LED aan elke kant van de boom hetzelfde is, zijn de vier zijden gelabeld met letters om ze tijdens het in kaart brengen van de pins van elkaar te kunnen onderscheiden.

Figuur 4: Bovenaanzicht met gelabelde pagina's
De volgende tabel toont alle IO-pinnen met de naam van de aangesloten LED. De ontbrekende IO 1.0 tot 1.5 zijn niet op de LED's aangesloten.
|
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 + hierboven |
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 |
Circuit resetten
Om de chip te laten flitsen, moet deze kort van de stroom worden losgekoppeld en vervolgens opnieuw worden aangesloten. Daarom moet er voor de FT232 een klein transistorcircuit worden gebouwd, dat op de FT232 wordt aangesloten DTR Pin kan de voeding van de chip regelen.
Om de programmeur te bouwen heb je nodig:
FT232 seriële converter
Gatenrasterbord min. 8x13 (bijvoorbeeld van de PCB-assortiment)
Kabel (bijv. Assortiment siliconenkabels)
Weerstanden 470Ω, 10kΩ, 100kΩ (bijv. van de Weerstand assortiment)
LED geel (bijv. van de LED-bereik)
NPN-transistor BC547 (bijv. ->Amazone)
(optioneel: Pogopinen of F2M-jumper voor de verbinding met de UART-pinnen van de boom)

Figuur 5: Programmeercircuit op breadboard-bord
Bouw het circuit zoals hierboven weergegeven. Als u geen gebruik maakt van pogo-pins, is het raadzaam om de rechter stekkerdoos niet rechtstreeks op de printplaat te solderen, omdat de programmer op deze manier niet kan worden aangesloten. Als alternatief raden wij aan om de stekkerdoos via een kabel op de printplaat aan te sluiten.
Als de programmeur volgens het schakelschema correct is ingesteld, kunt u de kit via pogo-pinnen of een pinstrip op de kit 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 FT232-jumper op 3V3 staat, omdat een te hoog logisch niveau de chip kan beschadigen.
Software
De STC15W408 is niet compatibel in de Arduino IDE. De PlatformIO-plug-in voor VS Code is een goed alternatief voor de gebruikelijke Arduino IDE. Hier zijn al meer dan 1000 verschillende borden inbegrepen, inclusief de STC-chips.
Installeer eerst de Visual Studio Code IDE. U kunt het installatiebestand downloaden hier downloaden.
Nadat de IDE succesvol is geïnstalleerd en geopend, gaat u naar Extensies. U kunt deze openen via de linkerzijbalk (zie rode markering in de afbeelding) of via de sneltoets Ctrl+Shift+X.

Figuur 6: Menu Extensies in de linkerzijbalk
Zoek hier naar de Platform IO-plug-in en installeer deze.

Figuur 7: Weergave in het extensiebeheer
Open vervolgens de PlatformIO-startpagina (Zijbalk> Platform IO> Snelle toegang> PIO Home> Openen) en klik op "Nieuw project".

Figuur 8: Projectconfiguratie
In dit venster kunt u nu een naam voor het project en het bord selecteren. Hier moet je doen zoals hierboven weergegeven STC15W408AS selecteren. Bevestig ten slotte de projectconfiguratie via de afwerking knop.
Nadat u het project hebt gemaakt, hoeft u alleen nog maar de code toe te voegen. Om het bestand met de betreffende code zo overzichtelijk mogelijk te houden, wordt gebruik gemaakt van een extern headerbestand (.h) met alle benodigde registerdeclaraties van de chip.
U kunt een bestand maken dat geschikt is voor de chip hier door Vincent Defert op GitHub.
Nadat het bestand is gedownload, kunt u het in de map in VSCode plaatsen src kopiëren. Maak daar een nieuw bestand met de naam hoofd.c, die later het uit te voeren programma zal bevatten.
Testcode
Als eerste test moeten alle LED's worden ingeschakeld en na een vertraging weer worden uitgeschakeld.
Laad nu het volgende programma op de microcontroller:
|
#include <stc15.h> //(1) |
Als alternatief is het bestand beschikbaar hier beschikbaar om te downloaden.
Uitleg:
(1) In het begin is het headerbestand met de registerdefinities geïntegreerd.
(2) Vervolgens worden macro's gedefinieerd voor de twee LED-statussen. Dit verbetert de duidelijkheid in het routinegedeelte. Normaal gesproken schakelt een IO in de HIGH-status een aangesloten LED in. Dit komt omdat de anode (+) van de LED meestal op de IO is aangesloten. Op de printplaat van de printplaat is echter de kathode (-) van de LED verbonden met de IO, waardoor deze alleen in een LOW-toestand wordt ingeschakeld.
Omdat een LED (light emitting diode) zoals de naam al doet vermoeden een diode is, wordt deze geblokkeerd wanneer de IO zich in een HIGH-toestand bevindt en licht dus niet op.
(3) Omdat er geen Arduino-standaardmethoden zoals delay() automatisch in de STC15W408 zijn geïntegreerd, is hier de functie delay() geïmplementeerd.
(4) Het duurt ongeveer één milliseconde om de binnenste tellus te voltooien. Deze lus wordt vervolgens uitgevoerd met exact het aantal milliseconden dat als parameter aan de functie is doorgegeven. Op deze manier kan een eenvoudige vertraging worden gerealiseerd, maar deze is afhankelijk van de frequentie van de processorklok en kan bij langere vertragingen ook afwijkingen vertonen.
(5) Met de volgende registertoewijzing worden de IO-pinnen in de push-pull-modus gezet. Dit maakt werking met hoge stroom op de IO-pin mogelijk. Meer informatie vindt u in het chipgegevensblad in de hoofdstukken 4.9.2 en 4.7.
(6) Hier worden de IO-registers op de waarde HIGH ingesteld, zodat alle LED's in het begin uitgeschakeld zijn.
(7) In de lus worden de IO-pinnen/LED met een pauze van twee seconden in- en uitgeschakeld.
(8) Naast het instellen van een volledig IO-register kunnen ook individuele bits in het register worden ingesteld; deze komen overeen met de individuele IO-pinnen.
Uploaden doe je eenvoudig door op het pijltje in de onderste balk te klikken.
Nadat het uploaden is gelukt, zou het volgende in de terminal moeten verschijnen:

Figuur 9: Uitvoer in VS Code Terminal
Opmerking: wanneer u voor de eerste keer uploadt, is dit het eerste wat u moet doen stcgal gereedschap automatisch geïnstalleerd, wat nodig is voor het flashen van de chip.
Conclusie
Na deze blogpost kun je nu de STC15W408, die gebruikt wordt in het 3D Kerstboompakket, zelf programmeren en er je eigen patronen op weergeven.
Experimenteer gerust met de talloze patronen die nu mogelijk zijn met het bouwpakket.
Veel plezier met het repliceren :)
Bij het maken van de 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
Als je geïnteresseerd bent, kun je deze lezen om de basisprincipes te verdiepen. De GitHub-repository's van de twee open source-projecten stcgal en stc-mcu-open-source zijn ook interessant.







1 Reactie
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.