Hack-a-tree - AZ-Delivery

Il kit di saldatura 3D fai da te per albero di Natale dispone solo di pochi modelli preimpostati grazie al microcontrollore pre-flashato.
In questo blog imparerete a programmare voi stessi il microcontrollore in modo da poter controllare i singoli LED e visualizzare i vostri modelli sull'albero.

 

Il blog si riferisce esclusivamente al kit di saldatura per albero di Natale 3D fai da te.

1 Informazioni di base sul processore

Il processore utilizzato è un STC15W408 del produttore cinese STCmicro.
Si basa su un'architettura (8 bit) 8051 CISC (Complex Instruction Set Computing). Questa è stata introdotta già nel 1980 da Intel. A titolo di confronto, si prende in considerazione un ATmega328. Questo si basa sull'architettura AVR RISC (Reduced Instruction Set Computing). La differenza concreta è il numero di operazioni aritmetiche che possono essere eseguite in un ciclo. I processori 8051 richiedono normalmente più cicli di clock per un'operazione di calcolo, mentre la controparte AVR richiede un solo ciclo di clock per un'operazione. Tuttavia, l'STC15W408 è progettato in modo tale che non vi sia alcuna differenza significativa in termini di prestazioni tra i due processori.

 

Come già accennato in precedenza, l'STC15W408 è un processore a 8 bit, il che significa che una singola operazione di calcolo è possibile solo con valori compresi tra 0 e 255. Ciò rappresenterebbe un problema per progetti complessi, poiché la velocità risulterebbe drasticamente limitata con numeri più elevati. In questo caso è opportuno ricorrere a moderni processori a 32 bit, come ad esempio l'ESP32.

Forse vi chiederete perché in questo kit viene utilizzato un processore a 8 bit come l'STC15W408. Il motivo è che qui vengono controllati solo singoli pin IO e non sono necessari calcoli complessi.

Questo processore è quindi ideale per tale applicazione, poiché è facile da programmare.

 

Pinout

Figura 1: Pinout del chip

 

Osservando la piedinatura del circuito, si nota che i pin IO sono contrassegnati con P0.X fino a P5.X. Ciò è dovuto al fatto che il processore dispone di 5 registri IO da P0 a P5. Il numero dopo il numero di registro rappresenta il numero di bit nel registro.

Figura 2: Pin registro P1 (estratto dal foglio dati capitolo 4.7)

 

2 Collegamento dei LED

Sulle schede sono presenti 37 LED RGB ad effetto, ma non tutti i LED possono essere accesi singolarmente. Nell'immagine seguente sono i gruppi collegati sono contrassegnati con numeri per facilitarne l'assegnazione.

Figura 3: Vista laterale con LED numerati

 

Poiché questa numerazione dei LED è uguale su ogni lato dell'albero, i quattro lati sono contrassegnati con lettere per poterli distinguere durante il pin mapping.

Figura 4: Vista dall'alto con i lati contrassegnati

 

Nella tabella seguente sono riportati tutti i pin IO con la denominazione dei LED collegati. Gli IO da 1.0 a 1.5 mancanti non sono collegati ai 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 + sopra

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

 

 

Circuito di reset

Affinché il chip possa essere flashato, è necessario che questo essere scollegato temporaneamente dall'alimentazione e ricollegato. È quindi necessario costruire un piccolo circuito a transistor per l'FT232, che deve essere collegato al DTR .

 

Per costruire il programmatore occorre:

Convertitore seriale FT232
Scheda perforata min. 8x13 (ad es. dalla assortimento PCB)

Connettori femmina

Cavi (ad es. Assortimento di cavi in silicone)

Resistenze 470Ω, 10kΩ, 100kΩ (ad es. dall' assortimento di resistenze)

LED giallo (ad es. dalla gamma LED)

Transistor NPN BC547 (ad es. ->Amazon)

 

(opzionale: pogopin o jumper F2M per il collegamento ai pin UART dell'albero)

 

Figura 5: Circuito del programmatore su scheda a fori

 

Costruite il circuito come mostrato sopra. Si consiglia di non saldare la barra di connessione destra direttamente sul PCB se non si utilizzano pogo pin, poiché in tal caso il programmatore non può essere collegato. In alternativa, si consiglia di collegare la barra di connessione al PCB tramite cavi.

 

Se il programmatore è stato assemblato correttamente secondo lo schema elettrico, è possibile collegare il kit tramite pogo pin o una striscia di pin. A tal fine, collegare la scheda ai quattro connettori sotto il chip come segue.

 

P31 (TX) = RX (FT232)

P30 (RX) = TX (FT232)

3V3 = VCC (FT232)

GND = Emettitore transistor

 

Assicurarsi che il jumper dell'FT232 sia impostato su 3V3, poiché un livello logico troppo alto potrebbe danneggiare il chip.

Software

L'STC15W408 non è compatibile con l'IDE Arduino. Una valida alternativa al consueto IDE Arduino è rappresentata dal plugin PlatformIO per VS-Code. Qui sono già incluse oltre 1000 schede diverse, tra cui anche i chip STC.

 

Per prima cosa, installare Visual Studio Code IDE. Il file di installazione è disponibile qui .

Dopo aver installato e aperto l'IDE, vai alle estensioni. Puoi aprirle dalla barra laterale sinistra (vedi indicazione in rosso nella figura) o con la combinazione di tasti Ctrl+Maiusc+X.

Figura 6: Menu delle estensioni nella barra laterale sinistra

 

Cerca qui il plugin Platform IO e installalo.

 

Figura 7: Vista nella gestione delle estensioni

 

Quindi, apri la pagina iniziale di PlatformIO (barra laterale > Platform IO > Accesso rapido > Home PIO > Apri) e fai clic su "Nuovo progetto".

 

Figura 8: Configurazione del progetto

 

In questa finestra è possibile selezionare un nome per il progetto e la scheda. Come mostrato sopra, è necessario inserire il nome STC15W408AS . Infine, confermare la configurazione del progetto tramite il pulsante Finish .

 

Dopo aver creato il progetto, non resta che aggiungere il codice. Per mantenere il file con il codice pertinente il più chiaro possibile, viene utilizzato un file di intestazione esterno (.h) con tutte le dichiarazioni di registro necessarie del chip.

È possibile scaricare un file adatto al chip qui da Vincent Defert su GitHub.

 

Una volta scaricato il file, è possibile salvarlo in VSCode nella directory src . Crea anche un nuovo file con il nome main.c, in cui in seguito sarà contenuto il programma da eseguire.

 

Codice di prova

Come primo test, tutti i LED devono essere accesi e, dopo un ritardo, spenti nuovamente.
Caricare ora il seguente programma sul microcontrollore:

#include //(1)

#define ON
0x00 //(2)
#define OFF
0xff

void delay(unsigned int mils){
//(3)
unsigned char i, j;

while (mils--){
//(4)
i=
16;
j=40;
do { while (--j); } while(--i);

}
}

void main(void) {
//(5)

P5M1 =
0x00; //imposta il registro delle impostazioni della porta 5 su 0
P5M0 =
0xff;      //imposta il registro delle impostazioni della porta 5 su 1

P3M1 =
0x00;
P3M0 = <
span lang="de" style="font-family: Consolas; mso-fareast-font-family: Consolas; mso-bidi-font-family: Consolas; color: #8a7b52; background: white; mso-highlight: white;">0xff;

P2M1 =
0x00;
P2M0 =
0xff;

P1M1 =
0x00;
P1M0 =
0xff;

P5 = OFF; //(6)
P3 = OFF;
P2 = OFF;
P1 = OFF;

while (
1) //(7)
{
P1_6= ON; //(8)
P1_7 = ON;
P2 = ON;
P3 = ON;
P5 = ON;
delay (
2000);
        P1_6 = OFF;
P1_7 = OFF;
P2 = OFF;
P3 = OFF;
P5 = OFF;
delay (
2000);
}
}

 

In alternativa è disponibile il file qui .

 

Spiegazione:
(1) All'inizio viene integrato il file header con le definizioni dei registri.

(2) Successivamente vengono definite le macro per i due stati del LED. In questo modo si ottiene una maggiore chiarezza nella parte relativa alla routine. Normalmente, un LED collegato viene acceso da un IO in stato HIGH, poiché solitamente l'anodo (+) del LED è collegato all'IO. Sul PCB del circuito stampato, tuttavia, il catodo (-) del LED è collegato all'IO, quindi questo si accende solo quando è in stato LOW.
Poiché un LED (light emitting diode), come suggerisce il nome, è un diodo, quando l'IO è in stato HIGH viene bloccato e quindi non si accende.

(3) Poiché l'STC15W408 non integra automaticamente metodi standard Arduino come delay(), in questo caso viene implementata la funzione delay().

(4) Il ciclo di conteggio interno richiede circa un millisecondo per essere completato. Questo ciclo viene quindi eseguito esattamente con il numero di millisecondi che è stato passato come parametro alla funzione. In questo modo è possibile realizzare un semplice ritardo, che tuttavia dipende dalla frequenza del clock del processore e può presentare deviazioni anche in caso di ritardi più lunghi.

(5) Con la seguente assegnazione dei registri, i pin IO vengono impostati in modalità push-pull. Ciò consente il funzionamento con corrente elevata sul pin IO. Ulteriori informazioni sono disponibili nella scheda tecnica del chip nei capitoli 4.9.2 e 4.7 .

(6) Qui i registri IO vengono impostati sul valore HIGH, in modo che tutti i LED siano spenti all'inizio.

(7) Nel ciclo, i pin IO/LED vengono accesi e spenti con una pausa di due secondi.

(8) Oltre a impostare un intero registro IO, è possibile impostare anche singoli bit nel registro, che corrispondono ai singoli pin IO.

 

Il caricamento avviene semplicemente cliccando sulla freccia nella barra inferiore.

 

Una volta completato il caricamento, nel terminale dovrebbe apparire quanto segue:

 

Figura 9: Output nel terminale VS Code

 

Nota: al primo caricamento, viene prima eseguito il comando stcgal tool installato automaticamente, necessario per il flashing del chip.

 

Conclusione

Dopo aver letto questo articolo del blog, ora potete programmare autonomamente l'STC15W408, utilizzato nel kit 3D Christmas Tree, e visualizzarvi i vostri modelli personalizzati.

Divertitevi a sperimentare con gli innumerevoli modelli che ora sono possibili con il kit.

Buon divertimento con la ricostruzione :)

Per la creazione del blog sono state utilizzate le seguenti fonti rilevanti:
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

 

Se interessati, è possibile leggerli per approfondire le nozioni di base. Sono interessanti anche i repository GitHub dei due progetti open source stcgal e stc-mcu-open-source.

Grundlagen elektronikGrundlagen softwareProjekte für anfängerSpecials

6 commenti

Bastian Brumbi

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

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

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

Bernd-Steffen

Hallo, in dem Weihnachtsbaum befindet sich auch ein Lautsprecher. Wie kann der zum Einsatz gebracht werden?
Mfg

Bernd-Steffen Großmann

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

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.

Lascia un commento

Tutti i commenti vengono moderati prima della pubblicazione