ARQUITECTURAS EMBESTIDAS O MICROCONTROLADORES (MCUs)
QUE ES UN MICROCONTROLADOR
Un microcontrolador es un componente electrónico que a simple vista
parece un circuito integrado como cualquier otro, pero en realidad este tiene
algunas características especiales que lo hacen ser diferente. En términos
generales, los microcontroladores fueron diseñados para poder programar su
interior y poder cambiar su funcionamiento dependiendo de la tarea que va a
desempeñar. Es decir que, son circuitos integrados programables.
Partes de un microcontrolador
Los microcontroladores son
componentes complejos, ya que están llenos de un sin fin de circuitos internos
que trabajan en conjunto para lograr el tipo de funcionamiento para el que fue
programado. Todos estos circuitos se agrupan en módulos diferentes que sirven
para una causa en común. Dentro de los módulos más comunes que encontramos en
un microcontrolador nos encontramos con:
· Procesador
Es el
elemento más importante y el que determina las características del
microcontrolador, ya que se encarga de ejecutar las instrucciones del programa,
hacer cálculos para ejecutar las operaciones y controlar los dispositivos
conectados a las salidas del microcontrolador.
· Memorias
memoria
es volátil de tipo RAM y se utiliza para guardar información temporal como; el
valor de las variables, resultados de algunos cálculos y la mayoría de los
datos que pueden cambiar durante la ejecución del programa.
· Entradas
y salidas
Los
módulos de salida y entrada son los que le permiten la interacción con el mundo
exterior al microcontrolador, aun que es importante mencionar que cada módulo
está definido para diferentes operaciones. Es decir, los módulos de entrada
sirven para obtener la información a través de sensores, interruptores,
botones, etc. para poder procesarla con las instrucciones que se programaron,
mientras que el módulo de salida, sirve para mandar señales de funcionamiento o
paro a los actuadores como lo son, cualquier tipo de motores, leds, lamparás,
relevadores, etc.
· Reloj
principal
Todos
los microcontroladores necesitan de una señal de referencia para poder ejecutar
el programa y tener en cuenta la contabilización de los tiempos y contadores.
Para generar dicha señal, normalmente se utiliza un circuito oscilador que
produce una onda cuadrada de alta frecuencia que sirve como referencia. Es
importante mencionar que esta señal es la que dicta la velocidad de
procesamiento del microcontrolador, ya que no puede procesar señales más
rápidas de las que se generan en el reloj principal.
· Módulos
especiales
Cada
fabricante y cada modelo de microcontrolador esta pensando para diferentes
aplicaciones, algunos se diseñan para las más sencillas y otros para tareas más
complicadas. Dependiendo de los módulos que se integren se pueden mejorar las funciones,
pero también los costos, es por eso que existen diferentes tipos de
microcontroladores con más o menos recursos. Dentro de los módulos más
conocidos que podemos encontrar tenemos:
ü Temporizadores
ü Watchdog
o perro guardián
ü Brownout
ü Sleep
mode
ü Convertidores
analógico-digital y digital-analógico
ü Comparadores
analógicos
ü PWM’s
ü Puertos
de entradas y salidas
Como funciona un
microcontrolador
A grandes rasgos el
funcionamiento de un microcontrolador es el de ejecutar las instrucciones que
se le programaron. Pero para hacer esta tarea, existen diferentes formas de
lograrlo. A estas formas también se les conoce como arquitecturas, donde las
más comunes que podemos encontrar son la arquitectura Von Neumann y la Harvard.
·
Arquitectura Von Neumann: En
esta arquitectura se utiliza una memoria donde se guardan todos los datos, por
lo que solo tiene un bus de comunicación para leer los datos y las
instrucciones. Debido a que solo existe una línea de comunicación el procesador
solo puede acceder a los datos de manera secuencial, es decir, primero busca
una instrucción y luego accede a los datos. Este tipo de arquitectura es más
simple, pero también es más lenta.
·
Arquitectura Harvard: Este
tipo tiene dos memorias diferentes, una donde se guardan las instrucciones y
otra donde se guardan los datos. Por lo que tiene dos buses de comunicación y
el procesador puede acceder a ellos de forma simultánea. Es decir, se puede
buscar una instrucción mientras se está ejecutando otra.
También es importante
mencionar que, los procesadores que utilizan los microcontroladores basan su
funcionamiento en diferentes tipos de arquitecturas. Estas también definen el
funcionamiento de los microcontroladores, donde la CISC y la RISC son las más
populares.
·
Arquitectura CISC (complex instrucción set
competer): Este tipo se caracteriza por que las instrucciones que necesitan son
más básicas, pero sus circuitos más complejos y grandes. Por lo que se consume
más energía y se genera más calor.
·
Arquitectura RISC (reduced instruction set
computer): En esta se necesitan instrucciones más detallas, pero a comparación
sus circuitos son más pequeños. Por lo que consumen una menor cantidad de
energía, se calientan menos y son más baratos.
¿Qué
tipos de microcontroladores existen?
Debido a que hoy en día todos
los componentes electrónicos y los sistemas son más complicados, se puede decir
que casi en cualquier componente moderno podemos encontrar un microcontrolador.
Es por eso que existe una gran variedad de tipos diferentes que podemos
clasificar por categorías. Ya sea por su fabricante, gama, arquitectura,
familia, numero de bits etc.
· Microcontroladores
por fabricantes
En
esta clasificación vamos a mencionar algunos de los fabricantes más conocidos
como Microchip, Texas instruments, STMicroelectronics, NPX, etc.
· Microcontroladores
por su gama
Cuando
hablamos de la gama de un microcontrolador nos referimos al rendimiento en
general que tiene un microcontrolador para ejecutar las tareas y las
aplicaciones. Normalmente se utiliza gama «baja», «media» y «alta», para
diferenciarlos por sus características, ya sea en costos, memoria, capacidad de
procesamiento, módulos especiales, etc. Esta categoría nos ayuda para encontrar
más fácilmente el microcontrolador más adecuado según nuestras necesidades de
aplicación.
· Microcontroladores
por su arquitectura
Como
ya se mencionó antes, los microcontroladores pueden funcionar bajo diferentes
tipos de arquitecturas. Cada una de ellas cambia la estructura de la forma en
que se basa su funcionamiento. Dentro que las más utilizadas por los
microcontroladores nos encontramos con la Harvard y la Von Neumann. Y en cuanto
al procesador encontramos la CISC y la RISC.
Microcontroladores por su
familia
Todos los fabricantes
clasifican a sus microcontroladores en grupos que comparten una arquitectura
del procesador en común y en algunas ocasiones una plataforma de desarrollo
para toda la familia. A pesar de que comparten una característica tan
importante, también es importante mencionar que, pueden variar sus otras
cualidades como el rendimiento, la memoria, sus módulos, etc. Algunos de los
ejemplos más comunes para los diferentes fabricantes son:
v Microchip:
Dentro de esta marca podemos encontrar dos familias: los PIC 8, 16 o 32 bits y
los AVR antes conocidos como ATMEL.
v STMicroelectronics: estos
ofrecen microcontroladores de la familia STM32 que se basan en la arquitectura
ARM Cortex-M de 32 bits.
v Texas
instruments: Este fabricante se caracteriza por su familia
MSP430 y sus microcontroladores de baja potencia.
v NPX
semiconductors: Tienen la familia LCP que basan en la
arquitectura ARM Cortex-M.
Microcontroladores por su el número
de bits
Una de las formas más
prácticas para agrupar a los diferentes tipos de microcontroladores es
clasificarla por la capacidad de procesamiento. Es decir por la cantidad de
bits que pueden procesar en una sola operación.
v 8
bits: Es la capacidad más baja, por lo que son los más simples y
económicos. Normalmente se utilizan en aplicaciones basicas como el control de
electrodomésticos, iluminación, juguetes, etc.
v 16
bits: Prácticamente pueden manejar el doble de procesamiento que
los anteriores, por lo que ofrecen un mayor rendimiento y más módulos. Estos
tipos se utilizan en aplicaciones como sistemas de control industrial, sistemas
automatices y dispositivos médicos.
v 32
bits: Los microcontroladores de 32 bits son considerados de alto
rendimiento, gracias a su gran capacidad de procesamiento. Por lo que se pueden
utilizar en aplicaciones complejas como sistemas embebidos avanzados, sistemas
de automatización avanzados y sistemas de precisión.
Como elegir un
microcontrolador
Debido a que existen muchos
tipos en el mercado, elegir un microcontrolador puede ser una tarea difícil.
Pero a continuación te daremos algunos de los puntos más importantes que tienes
que tomar en cuenta para escoger el que más adapte a tus necesidades.
ü Definir
los requisitos del proyecto: Comprende cuales son los requisitos de tu
proyecto. ¿Qué funciona va a desempeñar el microcontrolador, ¿Qué tareas va a
realizar?, ¿Existen limitaciones en cuanto a tamaño, energía o costo?, etc.
ü Evaluar
la complejidad de las tareas: Dependiendo de las tareas que se vayan a realizar
debemos elegir si necesitamos utilizar, 8, 16 o 32 bits.
ü Verificar
el rendimiento: Es importante analizar algunas características de
funcionamiento del microcontrolador, como por ejemplo la velocidad de
respuesta, memoria disponible, capacidad de cálculo, etc.
ü Analizar
los módulos a utilizar: Identifica que utilidades extra vas a utilizar. Debido
a que los microcontroladores pueden utilizar diferentes módulos, es importante
saber cuales vamos a utilizar. Estas pueden ser convertidores analógico-
digital, temporizadores, comparadores, PWM’s, etc.
ü Analizar
el consumo de energía: Es importante saber un consumo aproximado de la energía
para saber si el microcontrolador es capaz de proporcionar dicha energía.
ü Considerar
la disponibilidad a largo plazo: Aunque la mayoría de los microcontroladores
pueden ser remplazados por otros. Es importante verificar si podemos
encontrarlos a largo plazo.
ü Verificar
la compatibilidad con otros componentes a utilizar: Es importante tener en
cuenta si el microcontrolador es compatible con algunos componentes o
dispositivos a utilizar
ü Tomar
en cuenta si el sistema tendrá mejoras a futuro: Es importante verificar si
existen posibles mejoras en nuestro sistema. Ya que, si es así, siempre es
bueno tenerlas en cuenta para elegir un microcontrolador que tenga el
rendimiento suficiente para estos incrementos de código y componentes.
QUE ES
EL LENGUAJE ENSAMBLADOR Y PARA QUÉ SIRVE
¿QUE ES EL LENGUAJE
ENSAMBLADOR?
El lenguaje ensamblador es un
lenguaje de programación de bajo nivel que se utiliza para escribir programas
directamente en la arquitectura de la computadora. Es un lenguaje muy cercano
al lenguaje de la máquina, que está compuesto por códigos binarios y
hexadecimales que la computadora es capaz de entender y ejecutar.
En el lenguaje ensamblador,
cada instrucción representa una operación específica que la computadora puede
realizar, como sumar o restar números, mover datos de un lugar a otro o
realizar operaciones de entrada y salida. Estas instrucciones se escriben utilizando
una sintaxis específica que es fácilmente comprensible para los programadores y
que se traduce directamente a código de máquina.
CARACTERISTICAS
DEL LENGUAJE ENSAMBLADOR
El lenguaje ensamblador
presenta varias características importantes que lo distinguen de otros
lenguajes de programación:
·
Bajo nivel: el
lenguaje ensamblador es un lenguaje de bajo nivel que se ubica muy cerca del
lenguaje de la máquina. Esto significa que las instrucciones escritas en este
lenguaje se traducen directamente en códigos binarios o hexadecimales que la
computadora es capaz de entender y ejecutar.
·
Flexibilidad y control: el
lenguaje ensamblador ofrece un alto nivel de control sobre el hardware de la
computadora, lo que lo hace ideal para programar aplicaciones que requieren un
control preciso del hardware, como sistemas operativos, controladores de
dispositivos o firmware.
·
Eficiencia: el
lenguaje ensamblador es muy eficiente y rápido, ya que las instrucciones se
traducen directamente a código de máquina y se ejecutan directamente por la
CPU.
·
Sintaxis específica: el
lenguaje ensamblador tiene una sintaxis específica que es fácilmente
comprensible para los programadores, pero puede ser difícil para aquellos que
no están familiarizados con él.
·
Tamaño de los programas: los
programas escritos en lenguaje ensamblador tienden a ser mucho más pequeños que
los programas escritos en otros lenguajes de programación de alto nivel, debido
a su bajo nivel de abstracción.
·
Dificultad: el
lenguaje ensamblador puede ser más difícil de aprender y de escribir que otros
lenguajes de programación, debido a su baja abstracción y su complejidad en la
escritura de programas.
Elementos
básicos del lenguaje ensamblador
El lenguaje ensamblador consta
de varios elementos básicos que se utilizan para escribir programas que pueden
ejecutarse en una computadora. A continuación, se detallan algunos de estos
elementos:
·
Instrucciones: Las
instrucciones son la base del lenguaje ensamblador y representan las
operaciones que la computadora debe realizar. Estas instrucciones pueden
incluir operaciones matemáticas, de entrada/salida, de comparación, de
transferencia de datos, entre otras.
·
Directivas: Las
directivas son comandos especiales que se utilizan para controlar el
ensamblador y el programa resultante. Estas directivas pueden incluir la
definición de variables, la asignación de espacio de memoria, la inclusión de
archivos externos, entre otras.
·
Etiquetas: Las
etiquetas se utilizan para identificar y nombrar secciones de código en un
programa. Las etiquetas se colocan al principio de una línea y se utilizan para
indicar el comienzo o el final de una sección de código.
·
Registros: Los
registros son áreas especiales de memoria dentro de la CPU que se utilizan para
almacenar datos temporalmente. Los registros se utilizan para realizar
operaciones matemáticas y de transferencia de datos, y pueden variar según la
arquitectura de la CPU.
·
Modos de direccionamiento: Los
modos de direccionamiento son los métodos utilizados para especificar la
ubicación de los datos en memoria. Estos modos incluyen la dirección directa,
la dirección indirecta, la dirección indexada y la dirección basada en
registro.
VENTAJAS DEL LENGUAJE EMSABLADOR
El lenguaje ensamblador, a
pesar de ser un lenguaje de programación de bajo nivel, presenta una serie de
ventajas que lo hacen útil en determinadas situaciones. Algunas de estas
ventajas son:
Control de bajo nivel: El
lenguaje ensamblador permite al programador tener un control preciso sobre el
hardware de la computadora, ya que las instrucciones se ejecutan directamente
en la CPU.
Eficiencia: El
código ensamblador es muy eficiente y rápido, ya que no hay capas de
abstracción que ralenticen la ejecución del programa. Esto hace que el lenguaje
ensamblador sea ideal para programar aplicaciones que requieren un alto
rendimiento, como juegos o sistemas operativos.
Tamaño del programa: El
código ensamblador es muy compacto, ya que no tiene capas de abstracción que
aumenten el tamaño del programa. Esto hace que los programas escritos en
lenguaje ensamblador sean mucho más pequeños que los escritos en lenguajes de
programación de alto nivel, lo que puede ser útil en sistemas con limitaciones
de memoria o espacio en disco.
Acceso directo a los registros
y memoria: El lenguaje ensamblador permite acceder directamente a los
registros de la CPU y a la memoria, lo que lo hace útil para programar
dispositivos de hardware y controladores de dispositivos.
Capacidad de depuración: Al
trabajar con un lenguaje de bajo nivel, el programador puede detectar y
solucionar problemas con mayor facilidad y precisión. Esto es especialmente
útil cuando se depuran problemas en código crítico o cuando se buscan errores
en el hardware del sistema.
¿De
qué nivel es el lenguaje ensamblador?
El lenguaje ensamblador es
considerado un lenguaje de programación de bajo nivel, ya que se encuentra más
cerca del lenguaje máquina que del lenguaje humano. El lenguaje máquina es el
lenguaje que la CPU utiliza para ejecutar las instrucciones que se le envían,
mientras que el lenguaje ensamblador es un lenguaje simbólico que representa
esas mismas instrucciones de manera más legible para los programadores.
Ensamblador se encuentra en un
nivel de abstracción más bajo que los lenguajes de programación de alto nivel,
como C++, Python o Java, ya que las instrucciones que se escriben en lenguaje
ensamblador son directamente traducidas a instrucciones en lenguaje máquina,
sin que haya una capa de abstracción que se interponga.
Debido a que el lenguaje
ensamblador es de bajo nivel, es necesario tener conocimientos de la
arquitectura de la CPU y de la forma en que esta procesa las instrucciones. Por
esta razón, aunque el lenguaje ensamblador puede ser muy poderoso y eficiente,
su uso se limita en gran medida a programadores especializados y a situaciones
en las que se requiere un control preciso del hardware y un alto rendimiento.
¿Por
qué es necesario el lenguaje ensamblador?
El lenguaje ensamblador es
necesario en ciertas situaciones debido a que ofrece un control más preciso y
directo sobre el hardware de la computadora, lo que puede resultar crítico en
aplicaciones que requieren un alto rendimiento o que interactúan directamente
con dispositivos de hardware.
Aunque los lenguajes de
programación de alto nivel como Python o Java son más fáciles de aprender y
utilizan una sintaxis más legible para los programadores, estos lenguajes
introducen una capa de abstracción que oculta gran parte de los detalles del
hardware y del funcionamiento interno de la computadora. Esto puede resultar en
un código menos eficiente y más lento que el código ensamblador, especialmente
en aplicaciones que necesitan un alto rendimiento, como los juegos o los
sistemas operativos.
Además, en situaciones donde
el control directo del hardware es crítico, el lenguaje ensamblador es una
herramienta indispensable. Esto puede incluir el desarrollo de controladores de
dispositivos, el manejo de interrupciones de hardware y el desarrollo de
software de bajo nivel para sistemas embebidos o de tiempo real.
APLICACIONES
DEL LENGUAJE ENSAMBLADOR
El lenguaje ensamblador es un
lenguaje de bajo nivel que permite a los programadores interactuar directamente
con la arquitectura del hardware de la computadora. A continuación, se
presentan algunas de las aplicaciones del lenguaje ensamblador:
· Desarrollo
de sistemas operativos: Los sistemas operativos son complejos y
críticos para el funcionamiento de la computadora. El lenguaje ensamblador se
utiliza en el desarrollo de sistemas operativos debido a su capacidad para
acceder directamente al hardware y al bajo nivel de abstracción.
·
Programación de controladores de
dispositivos: Los controladores de dispositivos son programas
que permiten que el sistema operativo interactúe con dispositivos de hardware
como impresoras, escáneres, tarjetas de sonido, etc. El lenguaje ensamblador se
utiliza en la programación de controladores debido a su capacidad para
interactuar directamente con el hardware.
·
Programación de sistemas embebidos: Los
sistemas embebidos son sistemas de computadora diseñados para realizar tareas
específicas y limitadas. El lenguaje ensamblador se utiliza en la programación
de sistemas embebidos debido a su eficiencia y a su capacidad para acceder
directamente al hardware.
·
Programación de juegos: Los
juegos a menudo requieren un alto rendimiento y una alta velocidad de
procesamiento. El lenguaje ensamblador se utiliza en la programación de juegos
para optimizar el rendimiento y mejorar la velocidad de procesamiento.
·
Análisis de malware y seguridad
informática: Los expertos en seguridad informática utilizan
el lenguaje ensamblador para analizar el código malicioso y descubrir
vulnerabilidades en el software. El lenguaje ensamblador es útil en el análisis
de malware debido a su capacidad para acceder directamente a la memoria y a
otros recursos del sistema.
¿Cuál
es la estructura básica de un programa escrito en lenguaje ensamblador?
La estructura básica de un
programa en lenguaje ensamblador consta de tres secciones principales: la
sección de datos, la sección de texto y la sección de ensamblador. La sección
de datos se utiliza para definir las variables y las constantes que se utilizarán
en el programa.
¿Cómo se traduce el lenguaje ensamblador a
lenguaje de máquina?
El lenguaje ensamblador se
traduce a lenguaje de máquina utilizando un programa llamado ensamblador. El
ensamblador toma el código escrito en lenguaje ensamblador y lo convierte en
código de máquina que la computadora puede entender.
APLICACIONES
DEL LENGUAJE ENSAMBLADOR
El lenguaje ensamblador es un
lenguaje de bajo nivel que permite a los programadores interactuar directamente
con la arquitectura del hardware de la computadora. A continuación, se
presentan algunas de las aplicaciones del lenguaje ensamblador:
· Desarrollo
de sistemas operativos: Los sistemas operativos son complejos y
críticos para el funcionamiento de la computadora. El lenguaje ensamblador se
utiliza en el desarrollo de sistemas operativos debido a su capacidad para
acceder directamente al hardware y al bajo nivel de abstracción.
·
Programación de controladores de
dispositivos: Los controladores de dispositivos son programas
que permiten que el sistema operativo interactúe con dispositivos de hardware
como impresoras, escáneres, tarjetas de sonido, etc. El lenguaje ensamblador se
utiliza en la programación de controladores debido a su capacidad para
interactuar directamente con el hardware.
·
Programación de sistemas embebidos: Los
sistemas embebidos son sistemas de computadora diseñados para realizar tareas
específicas y limitadas. El lenguaje ensamblador se utiliza en la programación
de sistemas embebidos debido a su eficiencia y a su capacidad para acceder
directamente al hardware.
·
Programación de juegos: Los
juegos a menudo requieren un alto rendimiento y una alta velocidad de
procesamiento. El lenguaje ensamblador se utiliza en la programación de juegos
para optimizar el rendimiento y mejorar la velocidad de procesamiento.
·
Análisis de malware y seguridad
informática: Los expertos en seguridad informática utilizan
el lenguaje ensamblador para analizar el código malicioso y descubrir
vulnerabilidades en el software. El lenguaje ensamblador es útil en el análisis
de malware debido a su capacidad para acceder directamente a la memoria y a
otros recursos del sistema.
¿Cuál
es la estructura básica de un programa escrito en lenguaje ensamblador?
La estructura básica de un
programa en lenguaje ensamblador consta de tres secciones principales: la
sección de datos, la sección de texto y la sección de ensamblador. La sección
de datos se utiliza para definir las variables y las constantes que se utilizarán
en el programa.
¿Cómo se traduce el lenguaje ensamblador a
lenguaje de máquina?
El lenguaje ensamblador se
traduce a lenguaje de máquina utilizando un programa llamado ensamblador. El
ensamblador toma el código escrito en lenguaje ensamblador y lo convierte en
código de máquina que la computadora puede entender.
PARA
QUE SIRVE UN TEMPORIZADOR EN UN MICROCONTROLADOR
Temporizadores y contadores
Son circuitos sincrónicos para
el conteo de los pulsos que llegan a su entrada de reloj. Si la fuente de
conteo es el oscilador interno del microcontrolador es común que no tengan un
pin asociado, y en este caso trabajan como temporizadores. Por otra parte,
cuando la fuente de conteo es externa, entonces tienen asociado un pin
configurado como entrada, este es el modo contador.
Los temporizadores son uno de
los periféricos más habituales en los microcontroladores y se utilizan para
muchas tareas, como por ejemplo, la medición de frecuencia, implementación de
relojes, para el trabajo de conjunto con otros periféricos que requieren una
base estable de tiempo entre otras funcionalidades. Es frecuente que un
microcontrolador típico incorpore más de un temporizador/contador e incluso
algunos tienen arreglos de contadores. Como veremos más adelante este
periférico es un elemento casi imprescindible y es habitual que tengan asociada
alguna interrupción. Los tamaños típicos de los registros de conteo son 8 y 16
bits, pudiendo encontrar dispositivos que solo tienen temporizadores de un
tamaño o con más frecuencia con ambos tipos de registro de conteo.







No hay comentarios.:
Publicar un comentario