Introducción a los microcontroladores M.C. David Ricardo López Flores Panorama Este tipo de dispositivos en la actualidad se encuentran en los supermercados, artículos electrodomésticos, instrumentos musicales, juguetes, equipo automotriz e industrial, etc. Su finalidad principal es la de interaccionar con el mundo real mediante funciones de control y monitoreo de las condiciones de un proceso. Los antecesores de los microcontroladores fueron y son los microprocesadores. Los primeros microprocesadores fueron introducidos por INTEL familia (8080) y ZILOG ( familia Z80). M.C. David Ricardo López Flores Microcontrolador V.S. Procesador Los microcontroladores difieren de los microprocesadores en muchas maneras. La primera y más importante es su funcionalidad. Un microprocesador para ser usado debe estar acompañado por memoria y componentes que reciben y envían información; esto hace de un µP el corazón de una PC. Los microcontroladores están diseñados de tal forma que todo lo anterior se encuentra en un solo CI, no necesita* componentes externos para su funcionamiento. M.C. David Ricardo López Flores Microcontrolador V.S. Procesador M.C. David Ricardo López Flores M.C. David Ricardo López Flores M.C. David Ricardo López Flores La arquitectura de John Von Neumann se caracteriza por los procesadores que poseen el mismo dispositivo de almacenamiento tanto para los datos como para las instrucciones. Al ser almacenados en el mismo formato dentro de la misma memoria, utilizan un único bus de datos para comunicarse con la CPU. Esto hace que este tipo sea eficiente en la utilización de memoria, pero que requiera una ambigüedad para reconocer los datos. Los ordenadores de este tipo se componen de la unidad aritmético-lógica o "ALU", la unidad de control, una memoria, un dispositivo de entrada y salida y un bus de datos que los comunica. la arquitectura de Harvard, que proviene del Harvard Mark I se diferencia por la separación de los datos y las instrucciones que se comunican con la unidad central de proceso en dos memorias separadas, con lo que también se usan distintos buses de información. Aunque es común un único bus de direcciones, con un control que diferencie entre ambas memorias. Al contrario que la arquitectura de Von Neumann, esta no requiere de la ambigüedad pero no es tan eficiente en la utilización de la memoria. Estos ordenadores se componen por los mismos elementos que los del modelo de Von Neumann, excepto por que tienen dos memorias, una para datos y otra para instrucciones, y no una única memoria como el otro modelo. M.C. David Ricardo López Flores Familias mC51 - Intel, Phillips, ATMEL AVR’s – ATMEL PIC – Microchip MC68HCxx - Motorola, Freescale COPS - National Semiconductors M.C. David Ricardo López Flores Arquitectura de un microcontrolador M.C. David Ricardo López Flores Arquitectura de un microcontrolador AVR M.C. David Ricardo López Flores Encapsulados M.C. David Ricardo López Flores Lenguajes de Programación El lenguaje puede ser Ensamblador es el lenguaje de programación utilizado para escribir programas informáticos de bajo nivel, y constituye la representación más directa del Código máquina específico para cada arquitectura de computadoras legible por un programador. Aun hoy se utiliza en la programación de handler o manipuladores de dispositivos de hardware. El siguiente es un ejemplo del programa clásico Hola mundo escrito para la arquitectura de procesador x86 (bajo el sistema operativo DOS) en modo texto (por defecto). M.C. David Ricardo López Flores Lenguajes de Programación C es un lenguaje de programación de propósito general que ofrece economía sintáctica, control de flujo y estructuras sencillas y un buen conjunto de operadores. No es un lenguaje de muy alto nivel y más bien un lenguaje pequeño, sencillo y no está especializado en ningún tipo de aplicación. Esto lo hace un lenguaje potente, con un campo de aplicación ilimitado y sobre todo, se aprende rápidamente. En poco tiempo, un programador puede utilizar la totalidad del lenguaje. M.C. David Ricardo López Flores Compilador Un compilador es un programa informático, que se encarga de traducir el código fuente de una aplicación que este en desarrollo, es decir convierte un programa hecho en lenguaje de programación de alto nivel a un lenguaje de máquina , el cual es conocido como de bajo nivel, de tal forma que sea más entendible y mucho más fácil de procesar en el equipo en el que se esta ejecutando. De igual manera un traductor es el que toma como entrada un texto escrito y da como salida otro texto en un lenguaje llamado objeto. M.C. David Ricardo López Flores Arduino Uno (ATMEGA 328P) M.C. David Ricardo López Flores Mapeo de Pines M.C. David Ricardo López Flores Compilador M.C. David Ricardo López Flores Ejemplo 1 en ATMEGA328P (Blink LED) M.C. David Ricardo López Flores Ejemplo 2 en ATMEGA328P (Puerta AND) /* Boole Función AND con 2 variables */ int var1 = 7; //Pin de entrada del pulsador 1 int var2 = 2; //Pin de entrada del pulsador 1 int led = 5; //Pin de salida para el led(rojo) int estado1 = 0; //Para almacenar el estado de la variable1 int estado2 = 0; //Para almacenar el estado de la variable2 int resultado = 0; //Para almacenar el resultado void setup() { pinMode(var1, INPUT); //Iniciliza el pin de entrada 1 como salida pinMode(var2, INPUT); //Iniciliza el pin de entrada 2 como salida pinMode(led, OUTPUT); //Iniciliza el pin del led como salida } M.C. David Ricardo López Flores void loop(){ estado1 = digitalRead(var1); //Lee el estado del botón y lo almacena estado2 = digitalRead(var2); //Lee el estado del botón y lo almacena resultado = (estado1 && estado2); //Función AND con los dos estados digitalWrite(led, resultado); //Escribimos el resultado en el led } M.C. David Ricardo López Flores Ejemplo 2 en ATMEGA328P (Función Lógica) Función Canónica: M(FC1) = NOT(A) * B + A * NOT(B) /* Implementación de Función lógica */ int var1 = 1; //Pin de entrada del pulsador 1 int var2 = 2; //Pin de entrada del pulsador 1 int led = 5; //Pin de salida para el led(rojo) int A = 0; //Para almacenar el estado de la variable1 int B = 0; //Para almacenar el estado de la variable2 int resultado = 0; //Para almacenar el resultado void setup() { pinMode(var1, INPUT); //Init pin de entrada 1 como salida pinMode(var2, INPUT); //Init pin de entrada 2 como salida pinMode(led, OUTPUT); //Iniciliza el pin del led como salida } void loop(){ A = digitalRead(var1); //Lee el estado 1 y lo almacena B = digitalRead(var2); //Lee el estado 2 y lo almacena //Función Lógica ------ R=(â*b)+(a*^b) resultado = (!A && B) || (A && !B); digitalWrite(led, resultado); //Escribimos el resultado en el led } La presente información es un resumen basado en información disponible por internet, por lo tanto se han empleado figuras, textos, ejemplos de otros autores. M.C. David Ricardo López Flores