Esta es otra temática, no quise hacer una página como con la placa de desarrollo de AVR. Además quiero que sepan que abandoné el Eagle, luego de que fue adquirido por AutoDesk y me pasé a KiCad. Me llevé una grata, muy grata, sorpresa, porque la última vez que lo quise usar me pareció una mierda demasiado tosco para el diseño de impresos (PCBs). Y ahora nada que ver, es casi igual de fácil de usar que el Eagle (QEPD), incluso en muchos puntos es muy superior. Dicho esto, pasemos al desarrollo.
Antes que nada, quiero aclarar que es un trabajo en proceso, es decir, que está sujeto a cambios, de ubicación de componentes mayormente. Ya que quise hacerlo didáctico, y fui acomodando los periféricos de forma tal que me quedara cómodo de rutear y agrupados, dentro de lo posible, en los mismos puertos. Además de que busque que quedara fácil de rutear, no quería volverme loco para algo que no es para vender sino para enseñar. Pero al hacer eso me perdí algunos puntos fuertes sobre este micro, por ejemplo para leer el encoder :_)
Básicamente es una placa donde uno puede colocar la BluePill y consta de:
- ENTRADAS:
- 1x Encoder rotatorio de cuadratura (Rotary Encoder)
- 4x TouchSwitch/Push-buttons
- SALIDAS:
- 5x LEDs (1 RGB)
- 1x 4-digits 7 segment
- COM:
- Pines para conectar a la USART1 (3v3-GND-Tx-Rx)
Se que parece poco, pero para arrancar a dar clases es más que suficiente. Si pensamos que se trata de chicos de secundario y su primera experiencia en programación de µCs, o como primera experiencia no-Arduino. Además, podes hacer las siguientes prácticas:
- Manejo básico de Entradas/Salidas.
- Programación de Interrupciones externas.
- Configuración de Timers (temporizar y PWM)
- Manejo del puerto serie.
- Multiplexado con los displays (tema
jodidodifícil de entender para los no iniciados). - Hacer un reloj con el RTC (aunque no puse espacio para una pila ¯\_(ツ)_/¯).
Así que, como ven, a pesar de no haber tantos dispositivos en la placa, las posibilidades son varias, de cada ítem listado anteriormente se pueden pensar varias prácticas. Además es fácil de armar, consta con una sola capa, y gran parte de los componentes son SMD para ahorra todo lo que se pueda el espacio.
Como pueden observar, la placa, es muy sencilla, y la hice con transferencia térmica (con la plancha de ropa) y quedó excelente. Si notan diferencias entre el render y la foto es porque ya hice cambios, como les dije, es un trabajo en proceso y está sujeto a ajustes. Para no olvidarme donde conecte cada cosa y qué lógica tengo que utilizar hice esta imagen:
Y además me hice un .h con definiciones para utilizarlo con libOpenCM3, para los que vienen siguiendo mis tutoriales en este blog.
/**
* @file stm32basicioboard.h
* @author Matías S. Ávalos (Telegram: @tute_avalos)
* @brief Defines para manejar los perifericos de la placa stm32-BasicIO
* @version 0.1
* @date 2020-05-19
*
* This file has defines for using with the STM32-BluePill Digital I/O Board
* <https://github.com/Open-Hardware-Latinoamerica/stm32-bluepill-iomod>.
* An Open Source Hardware PCB for teaching µControllers programming
* designed on KiCad EDA Software.
*
* @copyright Copyright (c) 2020
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*
*/
#ifndef __BASIC_IO_BOARD_H__
#define __BASIC_IO_BOARD_H__
#include <stdint.h>
/*****************************************************************************
* ENTRADAS *
*****************************************************************************/
#define GPIOSWITCHS GPIOB
#define GPIOSWITCH_1 GPIO15 // Active LOW
#define GPIOSWITCH_2 GPIO14 // Active LOW
#define GPIOSWITCH_3 GPIO13 // Active LOW
#define GPIOSWITCH_4 GPIO12 // Active LOW
#define GPIOSWITCH_ALL (GPIOSWITCH_1|GPIOSWITCH_2|GPIOSWITCH_3|GPIOSWITCH_3)
#define GPIOROTARY GPIOA
#define GPIOROTARY_A GPIO15 // Active LOW
#define GPIOROTARY_B GPIO12 // Active LOW
#define GPIOROTARY_SW GPIO11 // Active LOW
#define GPIOROTARY_ALL (GPIOROTARY_A|GPIOROTARY_B|GPIOROTARY_SW)
/*****************************************************************************
* SALIDAS *
*****************************************************************************/
#define GPIOLEDS GPIOB
#define GPIOLED_1R GPIO9 // Active LOW
#define GPIOLED_1G GPIO8 // Active LOW
#define GPIOLED_1B GPIO7 // Active LOW
#define GPIOLED_2 GPIO6 // Active LOW
#define GPIOLED_3 GPIO5 // Active LOW
#define GPIOLED_4 GPIO4 // Active LOW
#define GPIOLED_5 GPIO3 // Active LOW
#define GPIOLED_ALL (GPIOLED_1R|GPIOLED_1G|GPIOLED_1B|GPIOLED_2|GPIOLED_3|GPIOLED_4|GPIOLED_5)
#define GPIOSEGS GPIOA
#define GPIOSEG_A GPIO7 // Active HIGH
#define GPIOSEG_B GPIO5 // Active HIGH
#define GPIOSEG_C GPIO3 // Active HIGH
#define GPIOSEG_D GPIO1 // Active HIGH
#define GPIOSEG_E GPIO0 // Active HIGH
#define GPIOSEG_F GPIO6 // Active HIGH
#define GPIOSEG_G GPIO4 // Active HIGH
#define GPIOSEG_P GPIO2 // Active HIGH
#define GPIOSEG_ALL (GPIOSEG_A|GPIOSEG_B|GPIOSEG_C|GPIOSEG_D|GPIOSEG_E|GPIOSEG_F|GPIOSEG_G|GPIOSEG_P)
#define GPIOSEG_ALL_NOTP (GPIOSEG_A|GPIOSEG_B|GPIOSEG_C|GPIOSEG_D|GPIOSEG_E|GPIOSEG_F|GPIOSEG_G)
#define GPIODIGITS GPIOB
#define GPIODIG_1 GPIO0 // Active LOW
#define GPIODIG_2 GPIO1 // Active LOW
#define GPIODIG_3 GPIO10 // Active LOW
#define GPIODIG_4 GPIO11 // Active LOW
#define GPIODIG_ALL (GPIODIG_1|GPIODIG_2|GPIODIG_3|GPIODIG_4)
// AFBGC.DE
#define SEGMCODE_0 0b11101011
#define SEGMCODE_1 0b00101000
#define SEGMCODE_2 0b10110011
#define SEGMCODE_3 0b10111010
#define SEGMCODE_4 0b01111000
#define SEGMCODE_5 0b11011010
#define SEGMCODE_6 0b11011011
#define SEGMCODE_7 0b10101000
#define SEGMCODE_8 0b11111011
#define SEGMCODE_9 0b11111000
#define SEGMCODE_A 0b11111001
#define SEGMCODE_B 0b01011011
#define SEGMCODE_C 0b11000011
#define SEGMCODE_D 0b00111011
#define SEGMCODE_E 0b11010011
#define SEGMCODE_F 0b11010001
#define SEGMCODE_P 0b00000100
static const uint8_t seg7code[] = {
SEGMCODE_0, SEGMCODE_1, SEGMCODE_2, SEGMCODE_3,
SEGMCODE_4, SEGMCODE_5, SEGMCODE_6, SEGMCODE_7,
SEGMCODE_8, SEGMCODE_9, SEGMCODE_A, SEGMCODE_B,
SEGMCODE_C, SEGMCODE_D, SEGMCODE_E, SEGMCODE_F};
#endif // __BASIC_IO_BOARD_H__
Este proyecto está en el Gihub oficial de Open Hardware Latinoamerica, específicamente, acá: https://github.com/Open-Hardware-Latinoamerica/stm32-bluepill-iomod
Pasen por el gurpo de Telegram de Open Hardware Latinoamerica, es un lugar copado, con buena gente, compartiendo información, tutoriales, anécdotas sobre todo lo que pasa con respecto a la electrónica en esta gran parte del globo. Les dejo esta foto final que me encanta:
1 Pingback