El kit de soldadura 3D DIY para árboles de Navidad solo dispone de unos pocos patrones preestablecidos con el microcontrolador preprogramado.
En este blog aprenderá a programar usted mismo el microcontrolador para poder controlar cada uno de los LED y mostrar sus propios patrones en el árbol.
El blog se refiere exclusivamente al kit de soldadura para árbol de Navidad 3D DIY.
1 Información general Procesador
El procesador utilizado es un STC15W408 del fabricante chino STCmicro.
Se basa en una arquitectura (8 bits) 8051 CISC (Complex Instruction Set Computing). Esta fue introducida por Intel ya en 1980. A modo de comparación, se considera un ATmega328. Este se basa en la arquitectura AVR RISC (Reduced Instruction Set Computing). La diferencia concreta es el número de operaciones aritméticas que se pueden realizar en un ciclo. Los procesadores 8051 suelen necesitar varios ciclos de reloj para una operación aritmética, mientras que su homólogo AVR solo necesita un ciclo de reloj para una operación. Sin embargo, el STC15W408 está diseñado de tal manera que no hay una diferencia significativa en el rendimiento entre los dos procesadores.
Como ya se ha mencionado anteriormente, el STC15W408 es un procesador de 8 bits, lo que significa que solo es posible realizar una única operación aritmética con valores de 0 a 255. En proyectos complejos, esto supondría un problema, ya que la velocidad se vería drásticamente limitada con números más altos. En este caso, se debería recurrir a procesadores modernos de 32 bits, como el ESP32.
Quizás se pregunte por qué se utiliza un procesador de 8 bits como el STC15W408 en este kit. La razón es que aquí solo se controlan pines IO individuales y no se necesitan cálculos complejos para ello.
Por lo tanto, este procesador es ideal para este tipo de aplicaciones, ya que es fácil de programar.
Pinout

Figura 1: Pinout del chip
Al observar la disposición de los pines del circuito, llama la atención que los pines IO estén designados con P0.X hasta P5.X. Esto se debe a que el procesador dispone de 5 registros IO, de P0 a P5. El número que sigue al número de registro representa el número de bits en el registro.

Figura 2: Registro de pines P1 (extracto de la hoja de datos, capítulo 4.7)
2 Conexión de los LED
En las placas hay 37 LED de efecto RGB, pero no todos los LED se pueden encender individualmente. En la siguiente imagen se muestran Los grupos relacionados se han marcado con números para facilitar su asignación.

Figura 3: Vista lateral con LED numerados
Dado que esta numeración de los LED es la misma en cada lado del árbol, los cuatro lados se designan con letras para poder distinguirlos en la asignación de pines.

Figura 4: Vista desde arriba con los lados etiquetados
En la siguiente tabla se encuentran todos los pines IO con la denominación del LED conectado. Los IO 1.0 a 1.5 que faltan no están conectados con los 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 + arriba | 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 de reinicio
Para poder flashear el chip, este debe se desconecte temporalmente de la corriente y se vuelva a conectar. Por lo tanto, es necesario construir un pequeño circuito transistorizado para el FT232, que se conecte al DTR .
Para construir el programador, necesitará:
Convertidor serie FT232
Placa de prototipos de al menos 8x13 (por ejemplo, de la gama de PCB)
Cables (p. ej., Cables de silicona Surtido)
Resistencias de 470 Ω, 10 kΩ, 100 kΩ (por ejemplo, de la gama de resistencias)
LED amarillo (por ejemplo, de la gama de LED)
Transistor NPN BC547 (por ejemplo, ->Amazon)
(opcional: pogopins o puentes F2M para la conexión a los pines UART del árbol)

Figura 5: Circuito del programador en placa de prototipos

Construya el circuito como se muestra arriba. Se recomienda no soldar la regleta de conectores hembra derecha directamente a la placa de circuito impreso si no utiliza pines pogo, ya que de lo contrario no se podrá conectar el programador. Como alternativa, se recomienda conectar la regleta de conectores hembra a la placa de circuito impreso mediante cables.
Si el programador está montado correctamente según el esquema eléctrico, puede conectar el kit mediante pines pogo o una regleta de pines. Para ello, conecte la placa a las cuatro conexiones situadas debajo del chip de la siguiente manera.
P31 (TX) = RX (FT232)
P30 (RX) = TX (FT232)
3V3 = VCC (FT232)
GND = Emisor del transistor
Asegúrese de que el puente del FT232 esté ajustado a 3V3, ya que un nivel lógico demasiado alto podría dañar el chip.
Software
El STC15W408 no es compatible con el IDE de Arduino. Una buena alternativa al IDE de Arduino habitual es el complemento PlatformIO para VS-Code. Aquí ya se incluyen más de 1000 placas diferentes, entre ellas los chips STC.
En primer lugar, instale el IDE Visual Studio Code. Puede descargar el archivo de instalación aquí .
Una vez que el IDE se haya instalado y abierto correctamente, vaya a las extensiones. Puede abrirlas desde la barra lateral izquierda (véase la marca roja en la imagen) o mediante la combinación de teclas Ctrl+Mayús+X.

Figura 6: Menú de extensiones en la barra lateral izquierda
Busque aquí el complemento Platform IO e instálelo.

Figura 7: Vista en la gestión de extensiones
A continuación, abra la página de inicio de PlatformIO (barra lateral > Platform IO > Acceso rápido > Inicio de PIO > Abrir) y haga clic en «Nuevo proyecto».

Figura 8: Configuración del proyecto
En esta ventana puede seleccionar un nombre para el proyecto y la placa. Aquí debe introducir, tal y como se muestra arriba, el STC15W408AS . Por último, confirme la configuración del proyecto mediante el botón botón Finish .
Una vez creado el proyecto, solo queda añadir el código. Para que el archivo con el código relevante sea lo más claro posible, se utiliza un archivo de encabezado externo (.h) con todas las declaraciones de registro necesarias del chip.
Puede descargar un archivo adecuado para el chip aquí de Vincent Defert en GitHub.
Una vez descargado el archivo, puede colocarlo en VSCode en el directorio src . Cree allí también un nuevo archivo con el nombre main.c, en el que más adelante se encontrará el programa que se va a ejecutar.
Código de prueba
Como primera prueba, todos los diodos luminosos deben encenderse y, tras un retraso, volver a apagarse.
Ahora cargue el siguiente programa en el microcontrolador:
| #include |
Como alternativa, está disponible el archivo aquí disponible para su descarga.
Explicación:
(1) Al principio se integra el archivo de encabezado con las definiciones de registro.
(2) A continuación, se definen macros para los dos estados del LED. De este modo, se mejora la claridad en la parte de rutina. Normalmente, un LED conectado se enciende mediante un IO en estado HIGH, ya que, en la mayoría de los casos, el ánodo (+) del LED está conectado al IO. Sin embargo, en la placa de circuito impreso, el cátodo (-) del LED está conectado al IO, por lo que solo se enciende cuando está en estado LOW.
Dado que un LED (diodo emisor de luz), como su nombre indica, es un diodo, se bloquea cuando el IO está en estado HIGH y, por lo tanto, no se ilumina.
(3) Dado que el STC15W408 no integra automáticamente métodos estándar de Arduino como delay(), aquí se implementa la función delay().
(4) El bucle de conteo interno tarda aproximadamente un milisegundo en completarse. Este bucle se ejecuta exactamente con el número de milisegundos que se han pasado como parámetro a la función. De este modo se puede realizar un simple retraso, pero este depende de la frecuencia del reloj del procesador y puede presentar desviaciones en caso de retrasos prolongados.
(5) Con la siguiente asignación de registros, los pines IO se ponen en modo push-pull. Esto permite un funcionamiento con alta corriente en el pin IO. Encontrará más información en la hoja de datos del chip, en los capítulos 4.9.2 y 4.7 .
(6) Aquí se establecen los registros IO en el valor HIGH para que todos los LED estén apagados al principio.
(7) En el bucle, los pines IO/LED se encienden y apagan con una pausa de dos segundos.
(8) Además de configurar todo un registro IO, también se pueden configurar bits individuales en el registro, que corresponden a los pines IO individuales.
La carga se realiza simplemente haciendo clic en la flecha de la barra inferior.
Una vez completada la carga, debería aparecer lo siguiente en el terminal:

Figura 9: Salida en el terminal VS Code
Nota: En la primera carga, primero se muestra el stcgal herramienta instalada automáticamente, necesaria para flashear el chip.
Conclusión
Después de leer esta entrada del blog, ya puede programar usted mismo el STC15W408, que se utiliza en el kit 3D Christmas Tree, y mostrar sus propios patrones en él.
Experimente con los innumerables patrones que ahora son posibles con el kit.
Disfrute reconstruyéndolo :)
Para la creación del blog se han utilizado las siguientes fuentes relevantes:
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
Si está interesado, puede leerlos para profundizar en los fundamentos. También son interesantes los repositorios GitHub de los dos proyectos de código abierto stcgal y stc-mcu-open-source.







6 comentarios
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.