INSTITUTO POLITÉCNICO NACIONAL UNIDAD PROFESIONAL INTERDISCIPLINARIA EN INGENIERÍA Y TECNOLOGÍAS AVANZADAS
MICROCONTROLADORES AVANZADOS Práctica 1
Alumnos
Cadena Díaz Daniel Alberto Calleja Tamez Moises Sánchez Cortés Luis Gerardo
Profesor: Méndez Martínez Mauricio
Grupo: 4MM5
21/02/2014
Introducción Un microcontrolador es un circuito integrado programable, abreviado como (uC, UC o MCU), es capaz de ejecutar las instrucciones grabadas en su memoria. Está compuesto de varios bloques funcionales, los cuales requieren cumplir una tarea específica. Dentro de su interior, se compone principalmente de tres unidades funcionales, las cuales son: unidad central de procesamiento, memoria y periféricos de entrada/salida. Un AVR es una familia de los Microcontroladores RISC, de Atmel, donde se dividen en varios grupos, de los cuales utilizaremos el ATmega, donde sus características principales son las siguientes:
Microcontroladores grandes con 4 a 256 kB de memoria flash programable.
Encapsulados de 28 a 100 pines
Conjunto de instrucciones extendido (multiplicación y direccionamiento de programas mayores) Amplio conjunto de periféricos.
Para programar se pueden utilizar lenguajes de alto nivel, como pueden ser C, C++, Pascal, etc., como de bajo nivel como es el ensamblador.
Objetivos Conocer la arquitectura de los Microcontroladores AVR, su configuración, apertura de puertos como entradas y salidas y una operación matemática donde las entradas están en el puerto A y B, y su salida correspondiente estará en el puerto C, además mientras tanto, se estará realizando un corrimiento de bits en el puerto D simultáneamente.
Desarrollo Se realizó el código para mostrar el resultado de una suma y el corrimiento de un bit a lo largo de un arreglo de 8 LEDs utilizando el microprocesador ATmega16, ocupamos resistencias de 10k Ohms para reducir el voltaje en los LEDs, para la programación se empleó el programa ATMEL Studio. #define F_CPU 4000000UL #include
#include #include int main(void) { DDRA = 0; //al configurar un puerto en 0 estamos indicando que se usará de entrada DDRC = 0XFF;//El puerto configurado completamente en 1 se usará de salida DDRC = 0XFF; while(1) { int a=128; //Variable para el corrimiento del bit.
DDRB = 0; //
while(a>=1) { PORTC = PINA + PINB; //Realización de la suma de puertos. PORTD=a; //Al asignar el valor de a en decimal el _delay_ms(100); //programa lo convierte a binario y los a = a/2; //1 resultantes del vector prenderán los } //leds. } }
Para la suma solo se utilizó el operador “+” y el programa lo detecta inmediatamente, si al sumar dos números muy grandes y el resultado no puede expresarse con los 8 bits del puerto C los bits más
significativos que quedan desbordados son ignorados y solo se presentan los 8 bits menos significativos; Para el corrimiento del bit a lo largo del vector tomamos ventaja de los valores que se pueden expresar, para que el bit más significativo este prendido el vector debe ser “10000000” pero en decimal esto se traduce como 128, si este es dividido a la mitad, el resultado 64 al ser expresado en binario (“01000000”) por lo que se realizó el corrimiento del bit anterior, al seguir dividiendo entre 2; cuando a es menor a 1 el ciclo while termina su operación y regresa al programa principal y este a su vez vuelve a cargar el valor de 128 a nuestra variable de control; utilizamos un delay de 1 segundo para cada operación para poder apreciar los valores mostrados, la suma la realizamos dentro del mismo while que el corrimiento para que ambas se actualicen de manera constante y se puedan apreciar simultáneamente. Físicamente conectamos los puertos de entrada a DIP Switch, para realizar la suma, los puertos de salida los conectamos a barras de LEDs, al microprocesador le conectamos un reloj externo de 4kH.
Conclusiones Cadena Díaz Daniel Alberto: La práctica resultó sencilla, puesto que era retomar lo que aprendimos en nuestro curso anterior, la única diferencia fue el lenguaje que se utilizó además de conocer la manera de declarar los
pies tanto de entrada como salida y los 4 puertos disponibles que utilizamos. Calleja Tamez Moises: La manera en la que realizamos el corrimiento me pareció bastante practica aunque hay maneras en las que se puede omitir el segundo ciclo while del programa lo que consumiría menos energía del
microprocesador, tuvimos unos problemas al realizar las conexiones del circuito ya que la primera vez no encontramos la falla y el circuito no respondía, posteriormente el corrimiento de LEDs mandaba muy poca corriente lo que ocasionaba que no brillaran con mucha intensidad, no encontramos la razón, pero se logró el aprendizaje del manejo de los puertos y o peraciones simples. Sánchez Cortés Luis Gerardo: Se utilizaron los puertos de entrada y de salida del micro controlador en donde los puertos A y B se utilizaron los registros de entrada para realizar un incremento en cada registro de salida
donde se direcciono en el puerto c y d en este puerto opera sobre números hexadecimales a nivel de sus bits individuales para así poder desplazar el corrimiento y que este regrese a su estado inicial con esto pudimos visualizar un corrimiento de leds o se podría usar para variar la tensión de algún motor.