Guía Paso a Paso para la Programación de Microcontroladores
Esta es una guía paso a paso para aquellos que desean comenzar con la Programación de Microcontroladores. El artículo comienza con la introducción de algunos términos básicos que se utilizarán en la guía, una lista de herramientas, lenguajes de programación y, al final, un ejemplo de código descargable con una guía paso a paso que podría usar para practicar la programación de microcontroladores.
Pero antes de sumergirse en la Programación de Microcontroladores. Definamos los dos primeros términos básicos: Hardware y Software.
El hardware consiste en los componentes físicos del sistema, como chips, teclado, ratón, monitor, memorias, dispositivos de E/S. El hardware es más difícil de desarrollar en comparación con el software, debe diseñarse para aplicaciones muy específicas y es una solución muy eficiente y perfecta en sistemas de alta velocidad.
El software es los componentes no físicos o las aplicaciones que se ejecutan en el hardware, como sistemas operativos, juegos de computadora y aplicaciones de red. El software es altamente configurable, fácil y rápido de desarrollar, también muy barato en comparación con el hardware.
Qué es un Microcontrolador
Para entender qué es un microcontrolador, necesitamos entender primero qué es un microprocesador o una CPU (Unidad Central de Procesamiento). Una CPU es el corazón de cualquier sistema informático, es como el cerebro humano al realizar una tarea. Básicamente podemos dividirlo en dos partes esenciales:
Unidad de control: Esta unidad se utiliza para obtener los datos de la memoria.
Unidad de ejecución: Esta unidad se utiliza para ejecutar o ejecutar los datos.
Tipos de procesadores
Hay muchas categorías de procesadores, como procesadores de uso general, procesadores de sistema específicos de aplicación y sistemas de múltiples procesadores. El procesador de propósito general tiene muchos tipos:
▪ Microprocesador
▪ Microcontrolador
▪ Procesador integrado
▪ Procesador de señal digital
El microprocesador es un dispositivo semiconductor o una computadora en un chip, pero no una computadora completamente funcional. Su unidad de procesador central contiene
▪ ALU
▪ Contadores de programas
▪ Registros
▪ Otros circuitos (tiempo de reloj, interrupción)
Un microcontrolador es un IC que contiene un microprocesador y algunos periféricos para ser una computadora funcional completa, periféricos, por ejemplo, ADC, RAM, ROM, DAC.
Historia del Microcontrolador
Originalmente, Intel Corporation fue la primera fabricación de microcontroladores. El primer microcontrolador se produjo en 1971 en los Estados Unidos. Era un microcontrolador de 4 bits con el nombre i4004. Más tarde, Intel produjo modelos más sofisticados en ese tiempo con un microcontrolador de 8 bits y después de eso un microcontrolador de 12 bits fue desarrollado por Toshiba.
Aplicaciones de microcontroladores
Los microcontroladores tienen muchas aplicaciones en muchas industrias, por ejemplo, automotriz, médica, automatización industrial, aeroespacial, robótica.
En la industria automotriz, por ejemplo, los automóviles modernos hoy en día tienen más de 100 microprocesadores para sistemas como aire acondicionado, ABS, EBD y también ADAS o sistemas avanzados de asistencia a la conducción como el controlador curies adaptativo y el asistente de carril, la siguiente es una imagen de una ECU o unidad de control electrónico.
En el ámbito médico, hay dispositivos médicos que incluyen microcontroladores, como una resonancia magnética, un equipo de prueba de glucosa, un electrocardiograma portátil. La siguiente imagen es un dispositivo de prueba de glucosa.
En el sector aeroespacial, la mayoría de los aviones han sido diseñados con nuevos sistemas de aviónica que utilizan microcontroladores. Además, hay un sistema de control de vuelo, un sistema de control de tráfico aéreo, sistemas de navegación y meteorología que se basan en microcontroladores.
Microcontroladores populares
Hay muchos tipos y plataformas de microcontroladores, pero la selección de un microcontrolador depende de muchos factores:
▪ Aplicación
▪ Presupuesto
▪ Rendimiento
▪ Número de pines GPIO
▪ Tamaño de memoria
▪ Temperatura del entorno operativo
▪ Consumo de energía
Microcontrolador AVR
La siguiente imagen contiene un diagrama de bloques de AVE12DA, una de las familias de microcontroladores más populares: el microcontrolador AVR:
Los microcontroladores AVR son producidos por Atmel corporation (hoy: Microchip), Atmel tiene 6 familias de microcontroladores AVR, 4 familias como microcontroladores de propósito general y 2 como microcontroladores de propósito específico. Propósito General microcontroladores son:
▪ 8 bits mega AVR
▪ 8 bits EN la Pequeña
▪ 8 & 16 bit – AVR Xmega
▪ 32 bits – AVR
propósito Específico microcontroladores son:
▪ Automotriz AVR
▪ Gestión de la Batería
Automoción AVR, a partir de su nombre, ha sido desarrollado para aplicaciones de automoción. Puede funcionar a temperaturas muy altas de hasta 150 grados centígrados e incluye sistemas de protección para problemas de cortocircuito.
El microcontrolador de gestión de baterías está desarrollado para que los sistemas de gestión de baterías aseguren las operaciones de carga y descarga.
Ejemplos de plataformas AVR
▪ Arduino UNO
▪ Adafruit Blue fruit Micro
▪ Raspduino
▪ Digispark Pro
Microprocesador/microcontrolador ARM
El microprocesador ARM es el procesador más popular en el mundo, especialmente, en las aplicaciones de consumo. Es posible que tenga un dispositivo basado en un procesador ARM, ¡pero no lo sabe! ARM es principalmente un componente clave de cualquier sistema embebido de 32 bits exitoso. El primer BRAZO se desarrolló en 1985.
Tecnología RISC
ARM se utiliza la tecnología RISC, RISC significa computadora con conjunto de instrucciones reducido, es una filosofía de diseño para entregar instrucciones simples en un solo ciclo. Se basa más en el software. Por otro lado, la tecnología CISC se basa más en el hardware.
La tecnología RISC se centra en reducir el conjunto de instrucciones del procesador. Por otro lado, el procesador CISC tiene un número no fijo del conjunto de instrucciones.Características de
ARM
Arm tiene muchas características para cada diseñador de sistemas integrados que esté buscando, por ejemplo, bajo consumo de energía debido a su tamaño compacto, también la alta densidad de código es otra característica ya que estamos desarrollando sistemas integrados, tendremos recursos limitados en la mayoría de los casos.
Estructura interna del microcontrolador basado en ARM
Esta figura muestra la estructura interna de la mayoría de los dispositivos basados en ARM:
Las cajas representan funciones, las líneas representan buses. Hablemos más sobre cada componente en detalles:
▪ El procesador ARM es el componente principal que es responsable de las operaciones de procesamiento
▪ Los controladores se utilizan para coordinar las funciones del sistema como controladores de memoria e interrupción
▪ Los periféricos se utilizan para proporcionar las entradas y salidas del sistema
▪ Se utiliza un bus para intercambiar datos entre los diferentes componentes del sistema
Ejemplos de plataformas ARM
Hay muchos dispositivos y plataformas integradas que tienen microprocesador arm, p. ej.
▪ Arduino Due
▪ Raspberry Pi
▪ STM32F103C8T6
▪ NXP LPC1768
Otros microcontroladores y plataformas
Como dijimos antes de seleccionar un microcontrolador o una plataforma depende de muchos factores (presupuesto, número de pines, etc.…). Hay también otro de los microcontroladores y plataformas, por ejemplo,
▪ Microcontroladores PIC
▪ 8051
▪ ESP32
▪ Microcontroladores Motorola
Herramientas de software y hardware para microcontroladores
Desde la creación del microcontrolador, ha habido muchos tipos de herramientas de desarrollo de software y hardware. Por supuesto, algunas de las herramientas se pueden usar en varios tipos de microcontroladores, pero algunas son muy específicas por microcontrolador. Antes de comenzar con la programación de microcontroladores, es posible que desee familiarizarse con las herramientas de programación de microcontroladores y, por último, pero no menos importante, el proceso de desarrollo.
Usando herramientas de desarrollo integradas, es posible que necesitemos las siguientes herramientas:
Ensamblador
Es una herramienta de software que convierte su código fuente en ensamblador en código máquina, por ejemplo (ensamblador GNU).
Compilador
Es un programa de software que cubre su código fuente en un lenguaje de programación de alto nivel en lenguaje ensamblador o código máquina. La compilación puede ser:
▪ Nativo: esto significa que ejecuta el compilador y el código generado en la misma máquina
▪ Cruz: Esto significa que ejecuta el compilador en una máquina y el código generado se ejecuta en una máquina diferente (arquitectura de procesador).
Enlazador y Localizador
Un enlazador es un programa que recopila y vincula las compilaciones y ensambla las operaciones y produce un solo exe.
Un localizador es una herramienta de programa que se puede utilizar para cambiar el mapa de memoria de la salida del enlazador.
Simulador
Es un programa que imita el escenario real, produce una aproximación de los sistemas en tiempo real. Se utiliza un simulador:
▪ si el hardware real no está disponible
▪ en entornos y escenarios de prueba peligrosos
Depurador
Es un programa de software y un dispositivo de hardware que se puede interconectar con mi PC a mi destino incrustado. Se utiliza un depurador:
▪ para establecer puntos de interrupción
▪ para rastrear la ejecución
▪ para volcar la memoria
El depurador de hardware puede ser
▪ depurador en circuito
▪ software de agente de depuración a bordo
Cargador de flash
Es un programa y dispositivo de hardware que se puede utilizar para:
▪ ROM/Flash de programa
▪ Ver variables
▪ Borrar ROM/Flash
Profiler
Profiler es una herramienta para monitorear el rendimiento del código de software
Entorno de desarrollo integrado
Es un programa de software que tiene la mayoría de las herramientas uno. Se pueden incluir
▪ editores de Texto
▪ Compiladores
▪ Depuradores
▪ Perfiladores
▪ Simuladores
▪ Enlazadores
Microcontrolador Idiomas del Software
podemos clasificarlos en dos tipos:
De alto nivel
▪ C/C++
▪ Java
▪ Ada
El uso de este tipo proporcionará una abstracción del nivel de hardware
De bajo nivel
Código de máquina
0’s y 1s y difícil de escribir por humanos, pero fácil de entender para las computadoras
Ensamblado
Es un código mnemotécnico y seudo instrucciones para mejorar la legibilidad
Ejemplos:
Una instrucción consiste en mnemotécnico ( opcode) + operandos
El Opcode es una operación tomada por un procesador de máquina
Los operandos son el objetivo final; el opcode tiene que tomar una operación para.
El lenguaje ensamblador es más legible y comprensible que el código máquina, pero necesita usarlo en un procesador específico y tener conocimiento de su arquitectura.
Lenguajes de programación C/C++
Los lenguajes de alto nivel tienen las siguientes características
▪ Fácil de escribir
▪ Flexible
▪ Independiente del procesador
▪ De alta productividad
Ejemplo de programación de microcontroladores Utilizando AVR ATMEGA16
ATmega 16 tiene las siguientes características:
▪ 16 Kb de memoria flash auto programable en el sistema
▪ 512 Bytes EEPROM
▪ 1 Kbyte de Memoria interna SRAM
▪ Bloqueo de programación para seguridad
Características Periféricas
▪ Contador en tiempo Real con Oscilador Separado
▪ USART en serie programable
▪ Cuatro canales PWM
▪ ADC de 8 canales y 10 bits
▪ Oscilador en chip
▪ Reposo de encendido y Detección de apagón
▪ Oscilador RC Interno y Fuentes de interrupción
▪ Voltajes (de 2,7 v a 5.5v)
Ejemplo de programa de parpadeo LED usando ATmeg16 y Proteus
Programa de parpadeo LED en sistemas embebidos como el programa «hola mundo» en desarrollo de aplicaciones. En el siguiente ejemplo, aprenderá y utilizará el simulador Proteus para ejecutar su primer programa. Para descargar los archivos de origen, vaya a esta carpeta.
Escriba su programa usando Atmel studio
Después de descargar su IDE,
ábralo y elija un nuevo proyecto y elija la ubicación del archivo hexadecimal como en la siguiente imagen
El siguiente paso es elegir la familia de microcontroladores
Después de eso, obtendrá la siguiente ventana con código de inicio
Y ahora escriba siguiente código
El siguiente paso es crear su programa presionando F7
Después de eso encontrará el archivo hexadecimal en la ubicación elegida
El siguiente paso es usar el simulador Proteus
Y ahora cree un esquema a partir de la plantilla a seleccionada
Y elija No crear un diseño de PCB
Finalmente, hemos terminado, pero necesitamos agregar el archivo hexadecimal como en la siguiente imagen
Ahora edite fusibles CKSEL
Guardar y hacer clic en reproducir
Y puede ver que el LED está apagado para 500 ms (lado izquierdo) y encendido para 500 ms (lado derecho)
Explicación del programa línea por línea
Para descargar los archivos fuente, vaya a esta carpeta.
#define f_CPU 100000UL // para crear una constante y elegir la velocidad del procesador
#include <avr/io.h> / / para recuperar algunos archivos de entradas y salidas
# incluye < avr / delay.h> // recuperar este archivo para usar las funciones de retardo
int main(void){ // la función de inicio y el programa principal
DDRA = 0b0000001; // para configurar el pin a como salida / dirección
Mientras(1){ // para bucle para siempre
PORTA = 0b00000001; // para hacer el PA0 = 1 y la salida 5v (el LED está encendido)
_delay_ms(500); // retardo de medio segundo
PORTA = 0b0000000; / / para hacer el PA0 = 0 y la salida 0v (el LED está apagado)
_delay_ms (500); / / retardo de medio segundo
}
retorno 0;
} //fin del programa
Conclusión
Hoy en día, los sistemas integrados se utilizan en productos vitales y se pueden usar para proteger y salvar a muchas personas, como en el dominio médico y otras aplicaciones. Debe seguir aprendiendo después de obtener una descripción general e introducción sobre la programación de microcontroladores. El siguiente paso debe ser aprender diseño de software integrado y sistemas activados en tiempo real.
https://www.faa.gov/regulations_policies/handbooks_manuals/aviation/phak/
Microcontrolador AVR y Sistemas Embebidos: Nueva Edición Internacional de Pearson: Uso de Ensamblado y C, Muhammad Ali Mazidi, Universidad de DeVry
Guía para Desarrolladores de Sistemas ARM Diseño y Optimización de Software de Sistema Un volumen de la Serie Morgan Kaufmann en Arquitectura y Diseño de Computadoras * 2004