Hack-a-tree - AZ-Delivery

El juego de soldadura de árbol de Navidad 3D DIY solo tiene unos pocos patrones preestablecidos con el microcontrolador preinstalado.
En este blog aprenderá a programar el microcontrolador usted mismo para que los LED individuales puedan controlarse para mostrar sus propios patrones en el árbol.

 

El blog se refiere exclusivamente a eso. Kit de soldadura de árbol de Navidad DIY 3D.

1 procesador de información de fondo

El procesador utilizado es un STC15W408 del fabricante chino STCmicro.
Esto se basa en un CISC 8051 (8 bits) (complejo yoinstrucción Conjunto Cinformática) arquitectura. Este fue introducido por Intel en 1980. A modo de comparación, se considera un ATmega328. Esto se basa en ARM RISC (Reducado yoinstrucción Sy cinformática) arquitectura. La diferencia concreta es el número de operaciones aritméticas que se pueden realizar en un ciclo. Los procesadores 8051 normalmente requieren múltiples ciclos de reloj para una operación aritmética, mientras que la contraparte ARM solo requiere un único 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 mencionó anteriormente, el STC15W408 es un procesador de 8 bits, lo que significa que una única operación aritmética sólo es posible con valores de 0 a 255. Esto sería un problema para proyectos complejos, ya que la velocidad se reduciría drásticamente para números más altos. Aquí conviene utilizar procesadores modernos de 32 bits, como el ESP32.

Quizás se pregunte por qué en este kit se utiliza un procesador de 8 bits como el STC15W408. Esto se debe a que aquí solo se controlan pines IO individuales y no se necesitan cálculos complejos.

Por lo tanto, este procesador es ideal para dicha aplicación, ya que es fácil de programar.

 

Configuración de pines

Figura 1: Distribución de pines del chip

 

Al observar la distribución de pines del circuito, notará que los pines IO están etiquetados como P0.X a P5.X. Esto se debe a que el procesador tiene 5 registros IO P0 a P5. El número después del número de registro representa el número de bit en el registro.

Figura 2: Registro de pin P1 (extracto de la hoja de datos del capítulo 4.7)

 

2 Conexión del LED

Hay 37 LED de efecto RGB en las placas, pero no cada LED se puede encender individualmente. En la imagen siguiente, los grupos conectados están marcados con números para facilitar la asignación.

Figura 3: Vista lateral con LED numerados

 

Dado que esta numeración del LED es la misma en cada lado del árbol, los cuatro lados están etiquetados con letras para poder distinguirlos durante el mapeo de pines.

Figura 4: Vista superior con páginas etiquetadas

 

La siguiente tabla muestra todos los pines IO con el nombre del LED conectado. Los IO 1.0 a 1.5 que faltan no están conectados a 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

 

 

Reiniciar circuito

Para que el chip se flashee, se debe desconectar brevemente de la alimentación y luego volver a conectarlo. Por lo tanto, se debe construir un pequeño circuito de transistores para el FT232, que está conectado al DTR El pin puede controlar la fuente de alimentación del chip.

 

Para construir el programador necesitarás:

Convertidor serie FT232
Panel de rejilla con agujeros mín. 8x13 (por ejemplo, del Surtido de PCB)

Regletas de enchufes

Cable (por ej. Surtido de cables de silicona)

Resistencias 470Ω, 10kΩ, 100kΩ (por ejemplo, del Surtido de resistencias)

LED amarillo (p. ej. del Gama de LED)

Transistor NPN BC547 (p. ej. ->Amazonía)

 

(opcional: pogopins o Jersey F2M para la conexión a los pines UART del árbol)

 

Figura 5: Circuito del programador en la placa de pruebas

 

Construya el circuito como se muestra arriba. Se recomienda no soldar la regleta de enchufes correcta directamente a la PCB si no se utilizan pines pogo, ya que el programador no se puede enchufar de esta manera. Como alternativa, recomendamos conectar la regleta de enchufes a la placa de circuito impreso mediante un cable.

 

Si el programador está configurado correctamente de acuerdo con el diagrama del circuito, puede conectar el kit al kit mediante pines pogo o una regleta de pines. Para hacer esto, conecte la placa de circuito a las cuatro conexiones debajo del chip de la siguiente manera.

 

P31 (TX) = RX (FT232)

P30 (RX) = Transmisión (FT232)

3V3          = VCC (FT232)

Tierra        = transistor emisor

 

Asegúrese de que el puente FT232 esté configurado en 3V3, ya que un nivel lógico demasiado alto podría dañar el chip.

programas

El STC15W408 no es compatible con el IDE de Arduino. El complemento PlatformIO para VS Code es una buena alternativa al IDE habitual de Arduino. Aquí ya se incluyen más de 1000 placas diferentes, incluidos los chips STC.

 

Primero, instale el IDE de Visual Studio Code. Puedes descargar el archivo de instalación. aquí descargar.

Una vez que el IDE se haya instalado y abierto correctamente, vaya a Extensiones. Puede abrirlo a través de la barra lateral izquierda (vea la marca roja en la figura) o usando el método abreviado de teclado Ctrl+Shift+X.

Figura 6: Menú de extensiones en la barra lateral izquierda

 

Busque el complemento Platform IO aquí e instálelo.

 

Figura 7: Ver 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 ahora puede seleccionar un nombre para el proyecto y el tablero. Aquí tienes que hacer lo que se muestra arriba. STC15W408AS seleccione. Finalmente, confirme la configuración del proyecto a través del terminar botón.

 

Una vez que hayas creado el proyecto, solo queda agregar el código. Para mantener el archivo con el código relevante lo más claro posible, se utiliza un archivo de encabezado externo (.h) con todas las declaraciones de registro requeridas por el chip.

Puedes crear un archivo adecuado para el chip. aquí por Vincent Defert en GitHub.

 

Una vez que se haya descargado el archivo, puede colocarlo en el directorio en VSCode src copia.  Crea un nuevo archivo allí con el nombre principal.c, que posteriormente contendrá el programa a ejecutar.

 

código de prueba

Como primera prueba, todos los LED deben encenderse y luego apagarse nuevamente después de un retraso.
Ahora cargue el siguiente programa en el microcontrolador:

#include <stc15.h> //(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;      //set port 5 settings register 2 to 0
    P5M0 = 
0xff;      //set port 5 settings register 1 to 1
                     
    P3M1 = 
0x00;
    P3M0 = 
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);
    }
}

 

Alternativamente, el archivo está disponible aquí disponible para descargar.

 

Explicación:
(1) Al inicio se integra el fichero de cabecera con las definiciones de los registros.

(2) Luego se definen macros para los dos estados del LED. Esto mejora la claridad en la parte de rutina. Normalmente, un IO en estado HIGH enciende un LED conectado. Esto se debe a que el ánodo (+) del LED suele estar conectado al IO. Sin embargo, en la PCB de la placa de circuito, el cátodo (-) del LED está conectado al IO, por lo que solo se enciende en estado BAJO.
Dado que un LED (diodo emisor de luz) es, como su nombre indica, un diodo, se bloquea cuando el IO está en estado ALTO y, por lo tanto, no se enciende.

(3) Dado que ningún método estándar de Arduino, como delay(), se integra automáticamente en el STC15W408, la función delay() se implementa aquí.

(4) El ciclo de conteo interno tarda aproximadamente un milisegundo en completarse. Luego, este bucle se ejecuta exactamente con la cantidad de milisegundos que se pasaron como parámetro a la función. De esta manera se puede implementar un retraso simple, pero esto depende de la frecuencia del reloj del procesador y también puede mostrar desviaciones con retrasos más largos.

(5) Con la siguiente asignación de registros, los pines IO se configuran en modo push-pull. Esto permite el funcionamiento con alta corriente en el pin IO. Puede encontrar más información en la hoja de datos del chip en los capítulos 4.9.2 y 4.7.

(6) Aquí los registros IO se configuran en el valor ALTO para que todos los LED se apaguen al principio.

(7) En el bucle, los pines/LED IO se encienden y apagan con una pausa de dos segundos.

(8) Además de configurar un registro IO completo, también se pueden configurar bits individuales en el registro; estos corresponden a los pines IO individuales.

 

La carga se realiza simplemente haciendo clic en la flecha en la barra inferior.

 

Una vez que la carga se haya realizado correctamente, debería aparecer lo siguiente en la terminal:

 

Figura 9: Salida en VS Code Terminal

 

Nota: Al cargar por primera vez, esto es lo primero stgal herramienta Se instala automáticamente, lo cual es necesario para actualizar el chip.

 

Conclusión

Después de esta publicación de blog, ahora puede programar usted mismo el STC15W408, que se utiliza en el kit del árbol de Navidad 3D, y mostrar sus propios patrones en él.

Siéntete libre de experimentar con los innumerables patrones que ahora son posibles con el kit.

Diviértete replicándolo :)

Se utilizaron las siguientes fuentes relevantes para crear el blog:
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 conceptos básicos. También son interesantes los repositorios de GitHub de los dos proyectos de código abierto stcgal y stc-mcu-open-source.

Grundlagen elektronikGrundlagen softwareProjekte für anfängerSpecials

1 comentario

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.

Deja un comentario

Todos los comentarios son moderados antes de ser publicados