Este es un facinante, repotenciado y bien dotado MCU de 8-bit de muy bajo coste, diseñado y fabricado en china por Jiangsu Heng Qin Ltd. (WCH). De momento nos vamos a centrar en el CH552G que está basado en la arquitectura E8051 CISC y su núcleo es especificamente E8051, lo más atractivo de este MCU es su puerto USB y un oscilador interno de 24Mhz entre otras cosas. Para programarlo nos debemos basar bastante en el MCS51 / C51. Existen diferentes empaquetados y versiones del MCU cómo; CH551, CH552, CH554 y CH559.
Puedes conseguir los MCU en la tienda oficial de AliExpress o en LCSC.
El 8051 pertenece a una familia MCS-51, y es tan popular que se ha hecho abierto para que cualquiera pueda conocerlo en OpenCores y ver los diseños del MCU.
Por ejemplo, un MCU de la familia AT89LP51 que tiene menos prestaciones tiene un coste x3 en comparación a la familia CH55X. Obviamente la comunidad para el soporte de Microchip es muy grande y varoable a comparación a la de WCH, lo importante es que la documentación oficial sea buena y la arquitectura la misma, y con algo de paciencia se pueden lograr cosas.
Estas son las especificaciones más relevantes del MCU, para más detalles vea la documentación oficial.
- Trabaja entre 5V y 3.3v.
- Incorpora 16KB Code Flash, 1KB XRAM, 256B iRAM, 128B DataFlash.
- Soporta los protocolos de comunicación USB 2.0, UART, SPI, ISP.
- Tiene 3 timer, 2 signal capture, 2 PWM, y 4 ADC.
- Incorpora BootLoader.
- Incorpora un reloj interno de 24MHz.
- Incorpora un identificador numerico único.
- Encapsulados disponibles: TSSOP-20, SOP-16, MSOP-10.
El pinout que mostramos es básico para hacerse una idea, hay más funcionalidades en los puertos. Revisar el datasheet para mayor detalle.
IMPORTANTE: Se debe destacar que hay una limitación con la ROM o el Code Flash es un proceso iFlash™, el cual puede ser programado unas 200 veces. No es tan malo, pero debe tenerlo en cuenta.
Use los siguientes componentes para construir el circuito mínimo:
- Un IC CH552G.
- Condensador de 100nF x2.
- Resistencia de 10K x2.
- Resistencia de 1K x2.
- Dos pulsadores. Uno para el boot y otro para el reset.
En el protoboard nos queda de la siguiente forma:
En este repositorio tiene una colección de códigos fuentes de ejemplos escrito en C para empezar. Todos los códigos fuentes han sido previamente verificados para garantizar su correcto funcionamiento.
- blink Usa un puerto de salida para encender y apaga un LED.
- button Usa un puerto de una entrada para un pulsador y otro puerto de salida para el LED.
- fade Hace uso del PWM para endencer y apagar un LED con atenuación.
- cdc Envia y recibe mensajes por el protocolo UART.
- adc Captura la variación de voltaje por un puerto de entrada.
- USB/cdc Envia mensajes a través del puerto USB.