Práctica Uno
Tecnológico Nacional de México
Instituto Tecnológico de Toluca
Ingeniería Mecatrónica
Comunicación Serial
Microcontroladores entre un
José Manuel García Hernández
microcontrolador y
Marzo de 2021
una Computadora
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Comunicación Serial entre un
microcontrolador y una Computadora
La comunicación serial juega un papel muy importante
para comunicar los microcontroladores con
computadoras, PLCs, sensores de proceso y diversos
dispositivos industriales. El adecuado entendimiento de
este tipo de comunicación permitirá sentar las bases
para los temas de buses I2C, SPI y redes de
comunicación. En esta práctica se pretende que el
alumno comprenda y ejercite los conocimientos sobre
UARTs y los aplique sobre la plataforma de ARDUINO.
Es importante también recordar que, de acuerdo con la
filosofía del curso en la parte práctica, esta práctica será
la base para la práctica siguiente.
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
OBJETIVOS DE LA PRÁCTICA
Objetivo general
Comunicar de forma serial una computadora y un microcontrolador, ejecutando
diversas acciones en el microcontrolador desde el teclado de la computadora.
Objetivos particulares
❑ Comprender los principios básicos de la comunicación serial entre una
tarjeta ARDUINO y una computadora
❑ Implementar un protocolo SOFTWARE, para que utilizando la UART del
microcontrolador, se realice la comunicación con la computadora
❑ Implementar un menú de opciones en el microcontrolador, para la ejecución
de diferentes acciones desde la computadora
❑ Ejercitar el uso de algunas funciones relacionadas con el puerto serial de la
plataforma ARDUINO
❑ Aplicar el uso de información codificada en ASCII para la transferencia de
datos seriales entre dispositivos digitales, así como información codificada
en IEE754.
❑ Aplicar algunos de los mejores hábitos de la programación en lenguaje C,
ORIENTADOS a microcontroladores
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
DESARROLLO
Para el desarrollo de esta práctica solamente es necesario contar con
una tarjeta ARDUINO (UNO, MEGA, etc.), los conceptos teóricos
necesarios acerca de comunicación serial y manejo de datos ASCII.
Funcionamiento
❑ El microcontrolador tendrá grabado en su memoria de programa el
código necesario para implementar un menú serial.
❑ El menú serial implementado en el microcontrolador se despliega en
la pantalla de la computadora.
❑ La computadora a través del monitor serial enviará al
microcontrolador las opciones correspondientes al menú
implementado.
❑ De acuerdo a las opciones seleccionadas desde la computadora, el
microcontrolador realizará diferentes acciones .
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
DESARROLLO
Acciones a realizar por el microcontrolador (opciones del
menú):
1. El microcontrolador enviará a la computadora una figura
implementada mediante códigos ASCII, la cual estará
almacenada en la memoria del propio microcontrolador.
2. El microcontrolador pedirá DOS números flotantes.
3. El microcontrolador desplegará la suma de los dos números
ingresados mediante la opción 2.
4. El microcontrolador desplegará la resta de los dos números
ingresados mediante la opción 2.
5. El microcontrolador desplegará la multiplicación de los dos
números ingresados mediante la opción 2.
6. El microcontrolador desplegará la división de los dos números
ingresados mediante la opción 2.
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
DESARROLLO
Let me
choose an
option
CABLE
USB 2.3 + 5.5
2.3 * 5.5
2.3 / 5.5
2.3 - 5.5
ARDUINO
MEGA
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
DESARROLLO ASCII TABLE
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
DESARROLLO
Conversión de imágenes a código ASCII
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
DESARROLLO
Para convertir imágenes a código ASCII, se pueden utilizar diversas herramientas
WEB, como por ejemplo:
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
DESARROLLO
Para realizar de la manera más adecuada las siguientes
opciones del menú serial, es necesario comprender algunos
aspectos teóricos que se desarrollarán a continuación :
❑ Cómo se programa un microcontrolador
❑ Breve descripción de la plataforma ARDUINO
❑ Instalación de la plataforma ARDUINO
❑ Comunicación serial mediante la plataforma ARDUINO
❑ Funciones de comunicación serial en la plataforma
ARDUINO
❑ Implementación por software de puertos seriales en la
plataforma ARDUINO
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Pasos para programar un microcontrolador
❑ Realizar el programa de usuario en un editor de texto
❑ Utilizando un compilador o un programa ensamblador, generar el archivo
en código máquina del programa de usuario para “grabar” la memoria
ROM
❑ Transferir el archivo en código máquina a un dispositivo programador
❑ Realizar la programación o “grabado de la memoria”
❑ Realizar pruebas funcionales
FORMA CLÁSICA DE PROGRAMAR UN MICROCONTROLADOR
El programador comercial “graba” la
Programador comercial memoria FLASH (ROM) del
(dispositivo programador) microcontrolador
Para transferir el archivo en código máquina desde el programador al
microcontrolador se utiliza un puerto serial (SPI) disponible en casi
todos los microcontroladores
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Programando un AVR
Para programar la memoria del uC AVR de una tarjeta ARDUINO con los
programas de usuario (en código máquina), una opción es mediante un
programador comercial (como el STK-500) y el puerto ICSP (In Chip
Serial Programmer), el cual corresponde a un puerto SPI del mismo uC.
≈38
USD
Programando una tarjeta ARDUINO (SPI)
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Entorno de Desarrollo Integrado
ARDUINO
Para NO utilizar una herramienta especial de programación, la plataforma
ARDUINO realiza la programación del AVR mediante una interfase USB
incluida en la misma tarjeta ARDUINO y el programa ARDUINO boot-loader
(pre-grabado en el mismo AVR). Esto permite que la aplicación del lado de la
PC transfiera sus programas al dispositivo y también le permite programar el
AVR a través del puerto serie, lo que significa que todo lo que se necesita para
programar la tarjeta ARDUINO es un cable USB y una computadora.
ARDUINO IDE BOOT
LOADER
USB SERIAL
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Tarjetas para la plataforma Arduino
Una tarjeta ARDUINO es básicamente un microcontrolador Atmel AVR
con los circuitos electrónicos necesarios para operar adecuadamente
SIN interfaces adicionales, excepto la interface con la PC.
Convertidor USB a serial
Tarjeta ARDUINO UNO [Link]
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
ARDUINO UNO
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
ARDUINO UNO
Esquema de conexión serial en la tarjeta ARDUINO UNO
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
ARDUINO UNO
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Arduino IDE
Estructura de un Sketch
La función setup() es la parte encargada de REALIZAR la
configuración yla función loop() es la que contiene el programa que se
ejecuta cíclicamente (de ahí el término loop –bucle). Ambas funciones
son necesarias para que el programa FUNCIONE.
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Instalación de la IDE ARDUINO
❑ Instalar el IDE de ARDUINO C
❑ Conectar y configurar la tarjeta ARDUINO
❑ Elegir el puerto COM adecuado
❑ Probar el ejemplo “BLINK”
❑ Verificar lo recursos utilizados por las
variables definidas por el usuario
[Link]
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Configurar tarjeta a utilizar en ARDUINO
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Configurar puerto (COM) a utilizar en ARDUINO
Puerto COM virtual
asignado por el
Sistema Operativo
a la tarjeta
ARDUINO (FTDI)
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Emulador de terminal de arduino CC
La IDE de ARDUINO ofrece al usuario un emulador de terminal muy
básico, el cual se conoce en el entorno como “Monitor Serial”, con esta
aplicación integrada en la IDE es posible interaccionar con el programa
grabado en el microcontrolador a través de su puerto serial y el FTDI
incluido en la tarjeta ARDUINO.
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Algunas funciones a utilizar en la
IDE de ARDUINO
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Arduino IDE
Algunas funciones a utilizar
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Algunas
funciones a
utilizar
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Algunas funciones a utilizar
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Algunas funciones a utilizar
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Ejercicio 5
Funciones del
[Link]
puerto Serial
SerialEvent
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Comunicación
Serial
Arduino
[Link]
Ejemplo:
Programa para
prueba del
puerto Serial
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Comunicación Serial con Arduino
Cuando los recursos HARDWARE de un microcontrolador NO cuentan
con un Puerto Serial (UART), es posible la implementación por
SOFTWARE del mismo. Existen ventajas y desventajas asociadas a
este tipo de implementación:
Ventajas:
❑ Las terminales de TX y RX pueden ser definidas a conveniencia del usuario
❑ El tiempo de respuesta dependerá de la sobrecarga de sotware de la CPU
Desventajas:
❑ Se consume tiempo de la CPU
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Comunicación Serial con Arduino
Programa Prueba
puerto Serial
implementado por
Software
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Técnicas de Optimización de la memoria RAM
La memoria RAM del microcontrolador es tal vez la parte que más
debe cuidarse durante la fase de programación, también, debido a la
filosofía de operación de ARDUINO, es la fuente más común de
problemas durante la ejecución de un programa y la más dificil de
diagnosticar. Por ejemplo, ante un comportamiento inexplicable, la
causa más probable podría estar relacionada con la pila. Ante esto,
existen algunas acciones que se pueden realizar durante la fase de
desarrollo del programa.
Cuando se definen variables en
el programa de usuario, si no se
especifica otra cosa, las
mismas ocupan espacio en
memoria RAM
¿alguna recomendación inicial
para minimizar esto?
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Técnicas de Optimización de la memoria RAM
Para evitar problemas relacionados con la memoria RAM, se sugiere la
implementación de las siguientes técnicas:
❑ Evitar en la medida de los posible la utilización de variables globales y estáticas
❑ Utilización de la macro (F)
❑ Utilización del modificador de variable PROGMEM
❑ Reutilización de variables
❑ Si no se va a utilizar comunicación serial (USART), disminuir el tamaño del
buffer de recepción/transmisión.
Uso de la pila (uP)
Variables de
usuario
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Técnicas de Optimización de la memoria RAM
Utilización de la macro F()
En la IDE de ARDUINO, la macro F() se puede usar para liberar memoria
RAM, por ejemplo, en las instrucciones “[Link]”, de forma que todo el
texto a imprimir (ya sea en Serial, Ethernet u otra librería), se lea de la Flash
y no ocupe espacio en la SRAM. Esta macro está incluida en el “core” de
Arduino. Cuando en un “sketch” se tienen problemas de memoria SRAM, el
primer y más sencillo paso a aplicar es utilizar la macro F() en todos los
“[Link]” del “sketch”.
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Técnicas de Optimización de la memoria RAM
El modificador de variable PROGMEM
En muchos casos, una gran cantidad de RAM se ocupa por el uso de variables
globales (tales como cadenas, arreglos o números constantes). Si estos datos
no cambian durante la ejecución del programa, pueden ser almacenados en la
memoria de programa o flash (algunas veces llamada PROGMEM ). Esto
ocuparía un SEGMENTO de la memoria flash, que es mucho más grande que
la memoria RAM (por ejemplo, Atmega2560 tiene 8 KB de RAM y flash de 256
KB). Una desventaja de usar PROGMEM podría ser la velocidad de lectura,
que es más lenta en comparación con la lectura de los mismos datos de la
RAM, aunque dependiendo de la aplicación, esta diferencia no es significativa.
La verdadera utilidad de PROGMEM es en bloques de datos grandes que
necesitan ser almacenados. La utilización de PROGMEM se hace en dos
pasos, después de hacer que la variable se guarde en la flash, se necesitan
algunas funciones definidas en la librería <pgmspace.h>, para leer los datos de
la flash y cargarlos en la SRAM (no es sencillo utilizar la FLASH).
IMPORTANTE: para el uso de PROGMEM:
1) Las variables deben ser o bien definidas de forma global o definidas como “static”
2) Deben tener el calificador “const”
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Técnicas de Optimización de la memoria RAM
El modificador de variable PROGMEM
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Técnicas de Optimización de la
memoria RAM
El modificador de variable PROGMEM
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
Ejemplo
Utilización del
modificador de
variable
PROGMEM
Microcontroladores José Manuel García Hernández Marzo - Julio 2021
RECOMENDACIONES Y CONSIDERACIONES
Recomendaciones a seguir:
❑ Implementar el menú serial utilizando la función de ARDUINO
SerialEvent().
❑ Utilizar la función de lenguaje C switch() – case
❑ Utilizar las funciones relacionadas con la clase STRING de ARDUINO
❑ Utilizar un carácter ASCII terminador.
❑ Al enviar los números flotantes al microcontrolador desde el monitor
serial, utilizar el formato IEEE754, para esto se recomienda convertir
antes mediante una calculadora HEXADECIMAL A IEEE754.
❑ Realizar la programación para que al menú se le pueda agregar
fácilmente más opciones.
Consideraciones
❑ El microcontrolador ATMEGA328 ARDUINO UNO tiene solamente un
puerto serial hardware (UART)
❑ El microcontrolador ATMEGA2560 (ARDUINO MEGA) tiene CUATRO
puertos seriales hardware (UARTs)
Microcontroladores José Manuel García Hernández Marzo - Julio 2021