Powered By Blogger

ARQUITECTURA DE COMPUTADORA

                   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

En los microcontroladores se utilizan dos tipos de memorias, pero es importante mencionar que, estas están incorporadas en el mismo circuito. Una es una memoria no volátil de tipo ROM, es decir que mantiene la información aun cuando se queda sin alimentación, generalmente se utiliza para guardar y ejecutar las instrucciones que se programaron.

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.

Aunque el lenguaje ensamblador puede resultar más complejo y difícil de aprender que otros lenguajes de programación de alto nivel, ofrece una gran flexibilidad y control sobre el hardware de la computadora. Por esta razón, es utilizado en áreas como la programación de sistemas, el desarrollo de controladores de dispositivos, la seguridad informática y la ingeniería inversa, entre otras aplicaciones

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.

Operandos: Los operandos son los valores que se utilizan en las operaciones. Estos operandos pueden ser números, variables, registros, direcciones de memoria, entre otro








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

ARQUITECTURA DE COMPUTADORAS

ARQUITECTURA DE COMPUTADORA

                    ARQUITECTURAS EMBESTIDAS O MICROCONTROLADORES (MCUs)                                   QUE ES UN MICROCONTROLADOR   Un m...