P01 uC ATMEGA32 Control Luces Automovil 6 Mar 2013

12
Diseño con microcontroladores AVR en lenguajes MikroCPro for AVR Docente: Ing. Roger Guachalla Narváez [email protected] PRACTICA 01: Puertos de Entrada/Salida en el Microcontrolador ATMega16/32 1.Objetivos: Conocer las características principales de los microntroladores AVR ATMEGA16/32 Utilizar los puertos digitales de Entrada y Salida en del ATMEGA 16/32 Simular el control de luces de un automóvil por medio de pulsadores, interruptores y leds 2.TEORIA Microcontroladores AVR a) LA FAMILIA AVR DE ATMEL La familia de Microcontroladores AVR son fabricados por la empresa ATMEL. Estos microcontroladores están divididos en tres grupos: TinyAVR, AVR Clasico y MegaAVR. Se muestran en la tabla los dispositivos de la serie AVR: Todos los dispositivos AVR tienen la misma organización de la memoria y conjunto de instrucciones. De esta forma el migrar de un dispositivo AVR a otro es fácil. El núcleo es el mismo para todos los dispositivos AVR. La diferencia entre estos grupos es la complejidad del dispositivo. Así, el que posee más características es el megaAVR y que tiene menos es el tinyAVR. b) CARACTERÍSTICAS DEL ATMEGA16/32/64 Microcontrolador AVR de 8 bits de alto rendimiento y bajo consumo. Arquitectura Avanzada RISC 131 instrucciones. La mayoría de un solo ciclo de reloj de ejecución. 32 registros de trabajo de 8 bits para propósito general. Funcionamiento estático total. Capacidad de procesamiento de unos 20 MIPS a 20 MHz. Multiplicador por hardware de 2 ciclos Memorias de programa y de datos no volátiles de alta duración 16/32/44 K bytes de FLASH auto programable en sistema 512B/1K/2K bytes de EEPROM 1/2/4K bytes de SRAM Interna Ciclos de escritura/borrado: 10.000 en Flash / 100.000 en EEPROM Retención de Datos: 20 años a 85ºC / 100 años a 25ºC Sección opcional de código Boot con bits de bloqueo independientes. Programación en sistema del programa Boot que se encuentra dentro del mismo chip. Operación de lectura durante la escritura. Bloqueo programable para la seguridad del software. Interface JTAG Capacidades de Boundary Scan de acuerdo con el estándar JTAG Soporte Extendido Debug dentro del chip Programación de FLASH, EEPROM, fusibles y bits de bloqueo a través de la interface JTAG. Características de los periféricos Dos Timer/Contadores de 8 bits con prescalamiento separado y modo comparación. Un Timer/Contador de 16 bits con prescalamiento separado, modo comparación y modo de captura. Contador en Tiempo Real con Oscilador separado 6 Canales para PWM

Transcript of P01 uC ATMEGA32 Control Luces Automovil 6 Mar 2013

Diseño con microcontroladores AVR en lenguajes MikroCPro for AVR Docente: Ing. Roger Guachalla Narvá[email protected]

PRACTICA 01: Puertos de Entrada/Salida en el Microcontrolador ATMega16/32

1.Objetivos: Conocer las características principales de los microntroladores AVR ATMEGA16/32 Utilizar los puertos digitales de Entrada y Salida en del ATMEGA 16/32 Simular el control de luces de un automóvil por medio de pulsadores, interruptores y leds

2.TEORIA Microcontroladores AVRa) LA FAMILIA AVR DE ATMEL

La familia de Microcontroladores AVR son fabricados por la empresa ATMEL. Estos microcontroladores estándivididos en tres grupos: TinyAVR, AVR Clasico y MegaAVR. Se muestran en la tabla los dispositivos de la serie AVR:

Todos los dispositivos AVR tienen la misma organización de la memoria y conjunto de instrucciones. De esta forma elmigrar de un dispositivo AVR a otro es fácil. El núcleo es el mismo para todos los dispositivos AVR. La diferencia entreestos grupos es la complejidad del dispositivo. Así, el que posee más características es el megaAVR y que tiene menoses el tinyAVR.

b) CARACTERÍSTICAS DEL ATMEGA16/32/64

Microcontrolador AVR de 8 bits de alto rendimiento y bajo consumo. Arquitectura Avanzada RISC

• 131 instrucciones. La mayoría de un solo ciclo de reloj de ejecución.• 32 registros de trabajo de 8 bits para propósito general.• Funcionamiento estático total.• Capacidad de procesamiento de unos 20 MIPS a 20 MHz.• Multiplicador por hardware de 2 ciclos

Memorias de programa y de datos no volátiles de alta duración• 16/32/44 K bytes de FLASH auto programable en sistema• 512B/1K/2K bytes de EEPROM• 1/2/4K bytes de SRAM Interna• Ciclos de escritura/borrado: 10.000 en Flash / 100.000 en EEPROM• Retención de Datos: 20 años a 85ºC / 100 años a 25ºC• Sección opcional de código Boot con bits de bloqueo independientes.• Programación en sistema del programa Boot que se encuentra dentro del mismo chip.• Operación de lectura durante la escritura.• Bloqueo programable para la seguridad del software.

Interface JTAG• Capacidades de Boundary Scan de acuerdo con el estándar JTAG• Soporte Extendido Debug dentro del chip• Programación de FLASH, EEPROM, fusibles y bits de bloqueo a través de la interface JTAG.

Características de los periféricos• Dos Timer/Contadores de 8 bits con prescalamiento separado y modo comparación.• Un Timer/Contador de 16 bits con prescalamiento separado, modo comparación y modo de captura.• Contador en Tiempo Real con Oscilador separado• 6 Canales para PWM

• ADC de 10 bits y 8 canales (Modo Diferencial con ganancia seleccionable a x1, x10 o x200).• Interface serie de dos hilos TWI orientado a byte.• Dos puertos Seriales USART Programables• Interfaz Serial SPI maestro-esclavo• Watchdog Timer programable con oscilador independiente, dentro del mismo chip.• Comparador Analógico dentro del mismo Chip• Interrupt and Wake-up on Pin Change

Características especiales del microcontrolador• Power-on Reset (en el encendido) y detección de Brown-out (reset por caída de voltaje) programable.• Oscilador RC interno calibrado.• Fuentes de interrupción externas e internas.• 6 modos de ahorro: Idle, Reducción de Ruido ADC, Power-save, Power-down, Standby y Standby

extendido. Encapsulados para Entradas/Salidas (E/S)

• 32 líneas de E/S programables.• PDIP de 40 pines, TQFP y QFN/MLF de 44 pines.

Voltajes de Operación• 2.7 a 5.5V para el ATMEGA 16/32

Frecuencia de Funcionamiento• ATMEGA 16/32P: 0 – 10MHz @ 2.7 – 5.5V - 20MHz @ 4.5– 5.5V

Consumo de energía a 1MHz, 1.8V, 25ºC para el ATMEGA 164P/324P/644P• Activo: 0.4mA• Modo Power-down: 0.1uA• Modo Power-Save: 0.6uA (Incluye RTC de 32 Khz)

c) PATILLAJES DEL ATMEGA 16/32

A continuación se detallan las terminales del ATmega32:

VCC Fuente de voltaje de alimentación GND Tierra. Puertos I/O

Los puertos A, B, C, y D son de 8 bits bidireccionales con resistores internos pull-up (seleccionados por cada bit). Elbuffer de salida de cada puerto tiene la capacidad de abastecer y drenar corriente. Cuando los pines Px0 a Px7 decada puerto son usados como entrada y externamente jalados hacia tierra, ellos abastecen corriente si las resistenciasinternas pull-up se activan. Los pines de cada puerto se encuentran en tri-state cuando la condición de Reset seactiva.

Puerto A (PA7..PA0)Además el puerto A sirve como entradas analógicas al convertidor ADC.

Puerto B (PB7..PB0)El puerto B también alberga funciones de registros de especiales, como se enlistan en la siguiente Tabla:

Puerto C (PC7..PC0) Puerto D (PD7..PD0)

El puerto D también alberga funciones de registros de especiales, como se enlistan en la siguiente Tabla:

RESET Entrada de reinicio (RESET)Un nivel bajo en este pin aplicado por más de un tiempo del mínimo pulso (1.5 μs) generará un reset, aún si el relojno está corriendo.

XTAL1 Entrada para el amplificador del oscilador invertido y entrada para el circuito de operación del reloj interno.. XTAL2 Salida del Oscilador amplificador de salida. AVCC Fuente de voltaje para el Puerto A del Convertidor A/D

Deberá ser conectada a Vcc, aún si el ADC no se utiliza. Si el ADC se utiliza se conecta a Vcc a través de un filtropasa bajo.

AREF Pin de referencia analógica para el convertidor A/D.

d) CONJUNTO DE INSTRUCCIONES ASSEMBLER

NOMENCLATURA DEL CONJUNTO DE INSTRUCCIONES Registros y operandosRd Registro destino (y fuente) del bloque de registros de trabajoRr Registro fuente del bloque de registros de trabajoR Resultado después de que una instrucción es ejecutadaK Dato inmediato (constante)k Dirección de memoriab Bit de un registro I/O (7-0)s Bit en el registro de estado (SREG)X,Y,Z Registros de direccionamiento indirecto o registros de palabra (X=R27:R26 Y=R29:R28 Z=R31:R30)P Registros del bloque I/Oq Desplazamiento (6-bit) por direccionamiento directo

Banderas del registros de estado (SREG)C: Bandera de acarreo S: N⊕V para pruebas de signoZ: Bandera de resultado cero H: Bandera de medio acarreoN: Bandera de resultado negativo T: Bit transferido por la instrucción BLD o BSTV: Indicador de complemento a dos desbordado I: Bandera de interrupciones globales

RESUMEN DEL CONJUNTO DE INSTRUCCIONES

Instrucciones Aritméticas y LógicasMnemónico Operandos DescripciónADD Rd,Rr Suma sin acarreoADC Rd,Rr Suma sin acarreoADIW Rd, K Suma un inmediato a un registro de palabraSUB Rd,Rr Resta sin acarreoSUBI Rd,K Resta un inmediatoSBC Rd,Rr Resta con acarreoSBCI Rd,K Resta un inmediato con acarreoAND Rd,Rr AND lógicoANDI Rd,K AND lógico con inmediatoOR Rd,Rr OR lógicoORI Rd,K OR lógico con inmediatoEOR Rd,Rr OR exclusivoCOM Rd Complemento a unoNEG Rd Complemento a dosSBR Rd,K Pon a uno los bits de un registroCBR Rd,K Pon a cero los bits de un registroINC Rd Incrementa al registroDEC Rd Decrementa al registroTST Rd Revisa si es cero o menorCLR Rd Borra el registroSER Rd Carga los bits de un registroADIW Rd+1:Rd,K Suma un inmediato a un registro de palabraSBIW Rd+1:Rd,K Resta un inmediato a un registro de palabraMUL Rd,Rr Multiplica sin signoMULS Rd,Rr Multiplica con signoMULSU Rd,Rr Multiplica signado con no signado

Instrucciones de desvío (salto)Mnemónicos Operandos DescripciónRJMP k Salto relativoIJMP Ninguno Salto indirectoEIJMP Ninguno Salto indirecto extendidoJMP k SaltoRCALL k Llamada relativa a subrutinaICALL Ninguno Llamada indirecta a subrutinaEICALL Ninguno Llamada indirecta a subrutina extendidaCALL k Llamada a subrutinaRET Ninguno Regreso de subrutinaRETI Ninguno Regreso de interrupciónCPSE Rd,Rr Compare y salta si es igualCP Rd,Rr ComparaCPC Rd,Rr Compara con acarreoCPI Rd,K Compara con inmediatoSBRC Rr,b Salta si el bit del registro es ceroSBRS Rr,b Salta si el bit del registro es unoSBIC P,b Salta si el bit del registro I/O es ceroSBIS P,b Salta si el bit del registro I/O es unoBRBC s,k Salta si el bit de SREG es ceroBRBS s,k Salta si el bit de SREG es unoBREQ k Salta si es igualBRNE k Salta si es diferenteBRCS k Salta si C está a unoBRCC k Salta si C está a ceroBRSH k Salta si es mayor o igualBRLO k Salta si es menorBRMI k Salta si es negativoBRPL k Salta si es mayorBRGE k Salta si es mayor o igual (con signo)BRLT k Salta si es menor (con signo)BRHS k Salta si H está a unoBRHC k Salta si H está a ceroBRTS k Salta si T está a unoBRTC k Salta si T está a ceroBRVS k Salta si V esta a unoBRVC k Salta si V está a ceroBRIE k Salta si I está a unoBRID k Salta si I está a cero

Instrucciones de Transferencia de DatosMnemónicos Operandos DescripciónMOV Rd,Rr Copia de registrosMOVW Rd,Rr Copia registros de palabraLDI Rd,K Carga de un inmediatoLDS Rd,k Carga directaLD Rd,X Carga indirectaLD Rd,X+ Carga indirecta con Post-IncrementoLD Rd,-X Carga indirecta con Pre-DecrementoLD Rd,Y Carga indirectaLD Rd,Y+ Carga indirecta con Post-IncrementoLD Rd,-Y Carga indirecta con Pre-DecrementoLDD Rd,Y+q Carga indirecta con desplazamientoLD Rd,Z Carga indirecta conLD Rd,Z+ Carga indirecta con Post-IncrementoLD Rd,-Z Carga indirecta con Pre-DecrementoLDD Rd,Z+q Carga indirecta con desplazamientoSTS k,Rr Almacena directamenteST X,Rr Almacena indirectamenteST X+,Rr Almacena indirectamente con Post-IncrementoST -X,Rr Almacena indirectamente con Pre-DecrementoST Y,Rr Almacena indirectamenteST Y+,Rr Almacena indirectamente con Post-IncrementoST -Y,Rr Almacena indirectamente con Pre-DecrementoST Y+q,Rr Almacena indirectamente con desplazamientoST Z,Rr Almacena indirectamenteST Z+,Rr Almacena indirectamente con Post-IncrementoST -Z,Rr Almacena indirectamente con Pre-DecrementoST Z+q,Rr Almacena indirectamente con desplazamientoLPM Ninguno Carga memoria de programaSPM Ninguno Almacena memoria de programaIN Rd,P Cargar un registro con un I/OOUT P,Rr Cargar un I/O con un registroPUSH Rr Cargar registro en la pilaPOP Rd Sacar dato de la pila

Instrucciones de Bit y prueba de BitMnemónicos Operandos DescripciónLSL Rd Desplazamiento a la izquierdaLSR Rd Desplazamiento a la derechaROL Rd Rotación a la izquierda con acarreoROR Rd Rotación a la derecha con acarreoASR Rd Desplazamiento aritméticoSWAP Rd Intercambio de nibblesBSET s Poner a uno la banderaBCLR s Poner a cero la banderaSBI P,b Poner a uno el bit de un registro I/OCBI P,b Poner a cero el bit de un registro I/OBST Rr,b Guarda en T el bit de un registroBLD Rd,b Carga T en el bit de un registroSEC Ninguno Poner a uno la bandera CCLC Ninguno Poner a cero la bandera CSEN Ninguno Poner a uno la bandera NCLN Ninguno Poner a cero la bandera NSEZ Ninguno Poner a uno la bandera ZCLZ Ninguno Poner a cero la bandera ZSEI Ninguno Poner a uno la bandera ICLI Ninguno Poner a cero la bandera ISES Ninguno Poner a uno la bandera SCLN Ninguno Poner a cero la bandera SSEV Ninguno Poner a uno la bandera VCLV Ninguno Poner a cero la bandera VSET Ninguno Poner a uno la bandera TCLT Ninguno Poner a cero la bandera TSEH Ninguno Poner a uno la bandera HCLH Ninguno Poner a cero la bandera HNOP Ninguno No operaciónSLEEP Ninguno Modo SleepWDR Ninguno Reiniciar el Watchdog

e) FUSIBLES ATMEGA32

Los fusibles de los microcontroladores megaAVR, controlan características como la fuente de reloj a trabajar, activación dela protección por bajo voltaje de alimentación, habilitación del JTAG, selección del bootloader, entre otros. Estos fusiblesson modificados usando un programador y normalmente son modificados cuando se programa la memoria flash delmicrocontrolador.Cuando los fusibles son programados, el valor leído es "0". En el caso del ATmega16/32, existen dos bytes para los fusiblesconocidos como el byte alto y byte bajo de los fusibles.

Parte alta de los fusibles (Fuse High Byte)

Nombre No. de Bit Descripción Valor por defectoOCDEN 7 Habilitación OCD 1 (OCD deshabilitado)JTAGEN 6 Habilitación JTAG 0 (JTAG deshabilitado)SPIEN 5 Habilitación de programación serial SPI 0 (prog. SPI habilitado)CKOPT 4 Opciones del oscilador 1

EESAVE 3 Los datos en la memoria EEPROM sonpreservados cuando se borra el chip

1 (EEPROM no preservado)

BOOTSZ1 2 Selección del tamaño del Bootloader 0BOOTSZ0 1 Selección del tamaño del Bootloader 0BOOTRST 0 Selección del vector de reset 1

Parte baja de los fusibles (Fuse Low Byte)

Nombre No. de Bit Descripción Valor por defectoBODLEVEL 7 Nivel de detección bajo voltaje alim. 1BODEN 6 Habilitación detector bajo voltaje alim. 1 (BOD deshabilitado)SUT1 5 Selección de tiempo de arranque 1SUT0 4 Selección de tiempo de arranque 0CKSEL3 3 Selección fuente de reloj 0CKSEL2 2 Selección fuente de reloj 0CKSEL1 1 Selección fuente de reloj 0CKSEL0 0 Selección fuente de reloj 1

OCDEN: Este fusible habilita o deshabilita la depuración On-Chip del microcontrolador.

JTAGEN: Este fusible habilita o deshabilita la interfaz JTAG que se encuentra en el Puerto C del ATmega16. Esimportante que cuando no se vaya a usar esta interfaz se garantice que este deshabilitada para que haya unfuncionamiento normal del Puerto C.

SPIEN: Este fusible habilita o deshabilita la programación serial SPI. Si se está usando este modo de programación,no es posible cambiar este bit.

CKOPT: Este fusible selecciona entre dos modos de amplificador del oscilador. Cuando está programado el reloj esmás inmune al ruido y se pueden manejar un rango amplio de frecuencias, aunque con un consumo mayor depotencia.

EESAVE: La habilitación de este fusible genera que los datos en la memoria EEPROM no sean borrados cuando serealice una operación de borrado del microcontrolador.

BOOTSZ1:0: Estos fusibles establecen el tamaño del Bootloader:

BOOTSZ1 BOOTSZ0Tamaño del

BootPáginas

Sección deAplicación en

la Flash

Sección delBootloader en

la flash

Dirección de Reset(Inicio de la sección

del Bootlader

1 1 128 words 2 $0000 -$1F7F $1F80 -$1FFF $1F80

1 0 256 words 4 $0000 -$1EFF $1F00 -$1FFF $1F000 1 512 words 8 $0000 -$1DFF $1E00 -$1FFF $1E000 0 1024 words 16 $0000 -$1BFF $1C00 -$1FFF $1C00

BOOTRST: Cuando este fusible es programado, el dispositivo salta a la dirección de reset asignada con los fusiblesBOOTSZ1:0. Si no es programado, iniciara en la posición cero.

BODLEVEL: Este fusible es usado para seleccionar entre los dos niveles de voltaje en el cual el microcontroladorse reinicia cuando la alimentación está por debajo del nivel seleccionado. Sino está programado este fusible, el nivelde voltaje es de 2.7V y si está programado el nivel de voltaje es de 4.0V.

BODEN: Este fusible habilita la protección por bajo voltaje. Si este fusible es programado, el microcontrolador sereiniciará de acuerdo al nivel seleccionado con el fusible BODLEVEL.

SUT1:0: Estos fusibles seleccionan entre diferentes retardos para el funcionamiento inicial del dispositivo. El valorseleccionado depende del reloj seleccionado.

CKSEL3:0: Estos fusibles permiten seleccionar entre diferentes fuentes de reloj para el dispositivo:

Fuente de reloj CKSEL3:0Resonador de cristal/cerámico externo 1111-1010Cristal externo de baja frecuencia 1001Oscilador externo RC 1000-0101Oscilador interno RC calibrado 0100-0001Reloj externo 0000

Al seleccionar el resonador de cristal/cerámico externo se pueden seleccionar diferentes retardos de inicio, deacuerdo al valor asignado a los fusibles SUT1:0. Cuando se trabaja con el oscilador externo RC se pueden alcanzarfrecuencias hasta los 12MHz con un circuito RC. Y finalmente, cuando se trabaja con el oscilador interno RC sepueden obtener frecuencias de 1, 2, 4 y 8 MHz con los fusibles en "0001", "0010", "0011" y "0100" respectivamente.

3.EJEMPLO DE APLICACIÓN: CONTROL DE LUCES DE UN AUTOMOVIL

A.DIAGRAMA ESQUEMÁTICO

Componentes Proteus:

B.CODIGO FUENTE MIKROBASIC PRO FOR AVR

4.Informe

I. Realizar un RESUMEN (a mano) de por lo menos 4 páginas del fundamento teórico del ATMEGA32

II. Convertir el código en MikroBasicPro de ‘Control de Luces del Automovil’ al lenguaje MikroCPro for AVR

III. Realilzar un progama en lenguaje Assembler AVR que realice la siguiente tarea:

Se obtiene un dato X de los 4 bits inferiores del puerto D de (bits 0 al 3) y un dato Y de los 4 bits superiores delpuerto D (bits 4 al 7). Se multiplica X*Y, el resultado se muestra en los 8 bits del puerto C

IV. Investigar el Código en lenguaje Ensamblador AVR para realizar el algoritmo para calcular la funcióntrigonomética SENO. Incluir la teoría escrita a mano y el código en Assembler comentado

V. Conclusiones