Tutorial de introducción a PSoC 6
El nuevo kit PSoC 6 BLE Pioneer (136-7817), la última oferta en semiconductores de Cypress para el mundo de los microcontroladores de 32 bits, es una de esas cosas que me recuerdan cuánto ha cambiado todo en el mundo del desarrollo de sistemas integrados. Puedes ver una introducción a PSoC 6 en este vídeo:
El primer kit de desarrollo fabricado para este propósito que tuve la oportunidad de utilizar cuando era estudiante a finales de los 80, se fabricó a partir de un microcontrolador Intel 8501 que incluía la friolera de 4 KiB de ROM y 128 bytes de RAM interna (sí, jovencitos: bytes, sin "K").
Incluso en aquel momento, el kit era bastante primitivo, puesto que había sido diseñado por uno de nuestros profesores para forzar al usuario a nivel de la máquina. Programarlo significaba utilizar un teclado hexadecimal para introducir manualmente los valores de los códigos del 8051 y los operandos con los que querías trabajar.
Después del purgatorio que suponía introducir estos datos, había que configurar los LED de la placa como proxies para cualquier punto de conexión E/S que estuvieras simulando en los cuatro puertos de entrada/salida bidireccionales de 8 bits. En mi caso, estaba simulando actuadores y motores en una lavadora a través de un conjunto de ciclos de lavado sencillos.
A pesar de esta desconcertante introducción, me gustó mucho el 8051 y lo utilicé en un par de diseños propios posteriormente. La ventaja de este kit de desarrollo primitivo era que la posterior programación en ensamblador parecía un gran paso hacia delante y el descubrimiento de C incrustrado, como el néctar de los dioses.
Por el contrario, al observar la lista de características del semiconductor PSoC6 de Cypress, es difícil no sorprenderse con todo lo que se puede incorporar en una pequeña dispositivo de silicio y, quizás aún más importante, lo fácil que es configurar y programarlo todo.
No obstante, si no conoces bien Cypress y sus herramientas de desarrollo PSoC Creator, todas las funciones y soporte de software de la API que incluye este entorno de desarrollo integrado (IDE) pueden ser abrumadoras. En este artículo, intentaré reducir el factor intimidatorio haciendo un recorrido a través de la herramienta para la versión incrustada de un programa "Hello World!": la configuración y conmutación de un LED de la placa.
Inicio
Cuando inicies PSoC Creator por primera vez, aparecerá una ventana similar a la que aparece a continuación. Para abrir un nuevo espacio de trabajo, debemos hacer clic en File (Archivo) >New (Nuevo) > Project... (Proyecto)
Ahora necesitamos seleccionar el dispositivo de destino de los menús desplegables (PSoC 6, en nuestro caso) y hacer clic en "Next" (Siguiente):
A continuación, selecciona un esquema vacío para nuestra plantilla de proyecto y haz clic en "Next" (Siguiente):
Simplemente haz clic en "Next" (Siguiente) para los IDE de terceros:
Por último, podemos darle a nuestro proyecto un nombre que sea un poco más descriptivo que el predeterminado "Design01" y hacer clic en "Finish" (Finalizar):
Ahora ya nos aparece un espacio de trabajo bonito y despejado:
Nota: si tienes problemas para ver los detalles de cualquiera de estas capturas de imágenes, haz clic en la imagen y selecciona "ViewImage" (Ver imagen) en la parte superior del menú contextual para ver la imagen a tamaño completo.
De todos modos, en el lado izquierdo de este espacio de trabajo encontrarás el "Workspace Explorer" (Explorador de espacio de trabajo), que realiza un seguimiento de todos los archivos relacionados con el proyecto.
En el lado derecho del espacio de trabajo encontrarás el "catálogo de componentes". Este catálogo contiene un gran número de componentes configurables (más de 100) que están incorporados en la infraestructura del PSoC 6 y que se pueden usar en sus diseños de sistema.
La ventana central, denominada 'TopDesign.cysch' de forma predeterminada, muestra el editor de esquemas en los que podemos colocar, configurar y conectar los componentes desde el catálogo de componentes.
La ventana central inferior es donde PSoC Creator le permite saber lo que está haciendo. Es la salida del compilador y el ensamblador de sistemas.
Bien, ahora que ya lo tenemos en funcionamiento, empecemos…
Nuestro primer sistema
Vamos a empezar con el sistema más sencillo posible para una placa PSoC, ya que esto nos ofrece la oportunidad de repasar la herramienta sin distraernos con las complicaciones.
Ve al catálogo de componentes y selecciona "Ports and Pins" (Puertos y pines). A continuación, puedes arrastrar y soltar un pin de salida digital en el esquema de la ventana Editor:
Es probable que observes que el pin que arrastramos es bastante pequeño. Podemos hacer zoom con la lupa en la que aparece el signo '+' (en la parte superior izquierda) varias veces, o (yo prefiero esta opción) pulsar la tecla [Ctrl] y utilizar el botón izquierdo del ratón para arrastrar un cuadro alrededor del área que desees ampliar.
Ahora tenemos un pin que realmente podemos ver. Si hacemos un único clic en el componente, se resaltará en verde:
Haz doble clic en la pieza para abrir la ventana de configuración de la pieza. También puedes hacer clic con el botón derecho y seleccionar "Configure" (Configurar) en el menú de contexto:
Ahora podemos configurar este pin para accionar el LED azul en la placa de desarrollo PSoC 6. En primer lugar, cambiamos el nombre del pin a "LED_blue". Vamos a utilizar la infraestructura del firmware de PSoC para accionar el LED en lugar de una conexión directa del hardware, de modo que necesitamos anular esa casilla de verificación:
Al hacer clic en "OK", podemos ver que el nombre del pin (y su forma) habrá cambiado.
Ahora, si volvemos al catálogo de componentes, verás que hay una segunda pestaña denominada "Off-Chip". Estos componentes no tienen efecto físico en el sistema que estamos diseñando. En cambio, nos permiten saber a qué se están conectando nuestros pines externos, como si se tratara de una versión de hardware de comentarios en el código fuente del software. Esto es, por supuesto, totalmente opcional pero, como ocurre con los comentarios del código fuente, puede ser muy útil cuando vuelvas a modificar tu diseño seis meses después.
Así que vamos a añadir estos componentes externos a nuestro sistema arrastrando y colocando una resistencia desde el menú Passives (Pasivos), un LED desde el menú Diodes (Diodos) y una conexión a masa desde el menú Power (Encendido):
Ahora podemos usar la herramienta de cableado (que muestra la flecha hacia abajo o la tecla [W]) para conectar los componentes entre sí.
Una vez hecho, tendremos libertad para indicar al sistema a qué pin está realmente conectado nuestro LED azul en el mundo físico. Si tienes una vista increíble o una lupa, puedes obtener la información de la pegatina de la placa, junto al LED RGB mismo:
Es posible que puedas deducir a partir de la imagen que B (azul) es 11.1 (puerto 11, pin 1). Experimenta con los LED rojo (puerto 0, pin 3) o verde (puerto 1, pin 1) conforme avancemos en este tutorial. Puedes, por supuesto, obtener esta información sobre los pines en la documentación de PSoC 6.
Para asignar este pin a nuestro diseño, ve al Explorador del espacio de trabajo y haz doble clic en "Pins", en "Design Wide Resources". Esto hará que aparezca el mapa de pines del dispositivo PSoC 6:
Verás que nuestro pin (LED_blue) ya está en la lista para que lo asignemos. Utiliza el menú desplegable "Port" (Puerto) para buscar P11[1] en la lista y serleccionarlo. Nuestro pin ahora está resaltado en el mapa BGA y podemos ver que está asignado a la clavija física E5 de la BGA:
Ahora estamos listos para crear nuestro sistema. Haz click en Build (Crear) > Build Hello World
Se producirán unos zumbidos y algunos resultados en la ventana de salida. Lo que queremos ver al final de estos resultados es ---- "Build Succeeded" (Creación correcta): date time----- en donde "date" y "time" se sustituyen por la fecha y hora actuales.
Programación de PSoC 6
Ahora que hemos definido nuestro sistema, es el momento de darle algo que hacer.
Esto requiere un poco programación C. Cuando digo "un poco", realmente me refiero a una pequeña cantidad de código, debido al amplio soporte de software subyacente en la interfaz de programación de aplicaciones (API) de PSoC 6.
Para nuestros propósitos, vamos a utilizar el ARM de baja potencia®Cortex®núcleo M0+. También podríamos utilizar el núcleo M4, pero sea cual sea el núcleo que utilicemos, no tendremos que preocuparnos por el resto de núcleos que no estemos utilizando. Podemos dejarlo solo, sin código.
Para comenzar, ve al explorador del espacio de trabajo y haz doble clic enmain_cm0p.c. Se abrirá en nuestra ventana central e incluirá un esqueleto básico para nuestro programa:
A continuación, podemos añadir nuestro programa a este esqueleto:
Profundizaremos en las funciones de API un poco más tarde, pero por ahora verás que nuestro programa simplemente utiliza una función de escritura GPIO para escribir los valores ON y OFF a nuestro pin LED. Añadimos un retraso de 500 (milisegundos) entre cada interruptor de modo que la conmutación del LED sea lo suficientemente lenta como para poder verlo.
Bien, ¡vamos a por todas! Si todavía no tienes tu PSoC 6 conectada al PC mediante el cable USB suministrado en el kit, conéctalo ahora.
Todo lo que tenemos que hacer ahora es ir a Debag (Depurar) > Program (Programa), o pulsar Ctrl+F5 o utilizar el icono del programa, lo que desees. Espera a que el programa se compile y descargue. La primera vez puede tardar un tiempo en compilarse porque hay una buena cantidad de "código generado" subyacente que unir. Una vez hecho, sigamos:
¡Vamos!
Profundizando en las funciones
Vale, igual crees que hacer que un LED parpadee es indigno de un MCU de la envergadura de ARM Cortex. Bien, vamos a hacerlo de una forma diferente y, con suerte, aprender algunas cosas nuevas.
Vuelve a la pestaña TopDesign.cysch en la ventana central. Para hacer que nuestro LED parpadee, vamos a utilizar una PWM en lugar del núcleo del procesador. Podemos encontrar uno escribiendo "pwm" en el cuadro de búsqueda (donde dice "Search for..." o Buscar), en la parte superior de la ventana del catálogo de componentes. Esto nos dirige a Digital > Functions (Funciones) > (TCPWM)[v1.0]
Arrastra la PWM al diseño. También necesitaremos un reloj, así que arrastra uno de ellos también:
Volcado de información:
Ahora es un buen momento para centrarnos en otras cosas durante unos instantes. Puede que te hayas preguntado cómo averiguar qué funciones de API hay disponibles para los componentes en el catálogo de componentes. La forma más sencilla está justo delante de nosotros.
Con la PWM seleccionada, puedes ver un cuadro de descripción, en la parte inferior derecha, debajo de la ventana del catálogo de componentes. Este cuadro también contiene un enlace a la hoja de datos en PDF del componente. Esta hoja de datos contiene todo lo habitual, como las descripciones de la conexión de E/S, los parámetros funcionales y las características de los componentes. También dispone de una sección en la interfaz de programación de aplicaciones que describe las funciones contenedoras de los componentes disponibles para la pieza. Podemos usar esta información como ayuda para controlar la funcionalidad de nuestras piezas en el software.
Configuración de nuestros componentes
Antes de poder utilizar las piezas nuevas que acabamos de colocar en el esquema de diseño, tendremos que configurarlas. El primer componente que necesitamos cambiar es nuestro pin de salida digital. Haz doble clic en él para abrir la ventana de configuración.
Tenemos que volver a activar la casilla "HW connection" para permitir la conexión de otros componentes internos al pin. Cuando lo hagas, haz clic en OK y verás que nuestro pin ha cambiado y ahora tiene un cuadro de entrada en el que podemos conectar cosas.
Lo que queremos configurar a continuación es nuestro PWM. Haz doble clic en él que para que aparezca su cuadro de configuración. Como solo tenemos un PWM, podemos llamarlo sencillamente "PWM". En la pestaña "Basic", baje la barra de desplazamiento hasta la parte inferior y ajuste el periodo a 1000 (ms). Para que sea un poco más interesante, le di a nuestros LED un ciclo de trabajo muy corto 50 (ms), que producirá un efecto estroboscópico cuando parpadeen y que puede resultar un poco más notable para la visión periférica del ojo humano.
A continuación, vamos a configurar nuestro reloj a 1 kHz:
Por último, debemos cablear nuestro pequeño esquema con la herramienta de cableado. Nuestro reloj está conectado a la entrada de reloj y pwm_n se conecta a nuestro pin de salida. Ten en cuenta que en este caso nuestros cables son verdes. Si conectas cualquier señal analógica en tus diseños, serán de color naranja.
Ya estamos preparados para crear nuestro proyecto. Puede utilizar Build >Build Hello World o solo pulsar [Mayús]+[F6] (o utilizar el icono "Build"). Generalmente, hay muchas formas de llevar a cabo cada trabajo. Mientras el proyecto se está creando, verás que las API de cada uno de nuestros componentes comienzan a ensamblarse en la carpeta "Generated Source" del explorador del espacio de trabajo.
Todo lo que queda ahora es programar nuestro dispositivo. Debido a todo el trabajo de software subyacente que Cypress ya ha hecho por nosotros, nuestro programa es una línea de código C, una llamada a la función PWM_start():
Utiliza Debug > Program (o las teclas [Ctrl] + [F5], o el icono "programa") para compilar y cargar nuestro programa en el PSoC 6.
¡Eso es! ¡Tenemos un LED azul intermitente diferente!
Ahora que el IDE de PSoC Creator es un poco menos aterrador, puedes empezar a apartar el software de ejemplo que Cypress ha creado para la placa. En estos momentos, hay tres ejemplos bastante exhaustivos:
- CE218133 - Pantalla EINK con CapSense®: muestra cómo crear una interfaz de usuario mediante la pantalla EINK y el control deslizante y los botones de sensor de capacitancia de la placa.
- CE218134 - BLE con CapSense®: demuestra la transferencia de CapSense y los datos de control a través de Bluetooth Low Energy con el PSoC 6 como periférico BLE y servidor GATT.
- CE218135 – BLE con proximidad: PSoC 6 actúa como un periférico BLE y servidor GATT para un servicio personalizado de transferencia de la información del sensor de proximidad CapSense.
Una gran parte de la funcionalidad de estos ejemplos de software pueden utilizarse fácilmente para formar la base de muchos otros proyectos.
Reflexiones finales
Tiene sentido utilizar la herramienta adecuada cuando se quiere hacer bien el trabajo. Los microcontroladores son la herramienta adecuada para las aplicaciones de control digital integrado. Sí, seguro que puede ser muy divertido hacer un apaño con una Raspberry Pi u otra pequeña placa de desarrollo del mercado, pero para diseños comercialmente viables en los que el tamaño, el coste, el consumo de energía y los tiempos de espera por interrupción predecibles (y bajos) son factores importantes, los microcontroladores siguen siendo la solución.
Los fabricantes como Cypress están facilitando más que nunca la creación rápida de diseños de sistema que requieren una mínima cantidad de componentes externos, a la vez que suministran kits de desarrollo completos (pero de bajo coste) y entornos de software para acelerar el ciclo de desarrollo. Los obstáculos para la entrada en el mercado de los sistemas integrados nunca han sido tan pocos.
¿A qué estás esperando? ¡Empieza ya a integrar microcontroladores por doquier!
Redstone 5 de septiembre de 2017, 14:41
Mark finalizó su licenciatura en ingeniería electrónica en 1991, y se dedicó a trabajar en el desarrollo de aplicaciones de procesamiento de señal digital en tiempo real, para dedicarse posteriormente al marketing técnico.