Cuadernillo Automatizacion AVR 1
Cuadernillo Automatizacion AVR 1
Cuadernillo Automatizacion AVR 1
TEMA:
En la actualidad, la mayor parte de los procesos industriales deben automatizarse para poder ser competitivos y entregar productos de Calidad. La Automatizacion la podemos encontar en las industrias:
MANUFACTURA INDUSTRIA AUTOMOTRIZ TEXTIL PETROQUIMICA INDUSTRIA PETROLERA EDIFICIOS INTELIGENTES INDUSTRIA MINERA INDUSTRIA NAVIERA INDUSTRIA REFRESQUERA INDUSTRIA DE ALIMENTOS INDUSTRIA AERONAUTICA
Es de suma importancia que el Estudiante de Ingenieria Industrial, Petrolera, Mecatronica, De Sistemas, Electrnica,
LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.
y muchas otras especialidades, conozcan la estructura bsica de un sistema de control automatico, debido a que seguramente estarn trabajando con algunos de estos dispositivos en el area laboral. El corazn de todo sistema automatico radica en dispositivos inteligentes los cuales pueden ser:
Estos dispositivos tienen la capacidad de almacenar instrucciones para posteriormente ejecutar una accin. El elemento mas simple es el Microcontrolador.
4 5 6 7 8 9 10 11 12 13 14 15
00000100 00000101 00000110 00000111 00001000 00001001 00001010 00001011 00001100 00001101 00001110 00001111
4 5 6 7 8 9 A B C D E F
Es muy importante saber convertir de una numeracin a otra. Binario a Hexadecimal: Ejemplo: Convertir 10001010 en Hexadecimal. Se forman grupos de 4 de izquierda a derecha y se busca el equivalente hexadecimal en la Tabla. Asi: 1000 1010 = 8A Hexadecimal a Binario: Ejemplo: Convertir E9 a binario. Se separa cada digito y se busca el equivalente en tabla: E = 1110 9 = 1001 E9 = 11101001 Ejercicios: Convertir los siguientes numeros Hexadecimales a Binario: 5F ___________ ___ 19 _____________ __ 11 ____________ ______________
F1
AA ___________ ___ 90 _______________ C4 ____________ 10 ______________ Convertir los siguientes numeros Binarios a Hexadecimal: 01001100 _________ 00001100 ________ _ 10110001_________ 00001010 _______ 10100101 _________ 11001100 ________ _ 11110011_________ 00010001 _______ En la practica, es comun representar un numero Binario mediante Diodos LED que son conectados a las terminales o Puertos de un PIC. Un LED encendido = 1 y un LED Apagado = 0 Practica 2: Arme un circuito basico con un PIC16F84A y sus requerimientos minimos, y conecte 8 diodos LED a su puerto B, como se muestra en la siguiente figura:
PRACTICA 1
SISTEMAS NUMERICOS
5D _____ ___ 39 _____________ __ AF _____ ___ 2F _____ ___ AA _____ ___ 5B _____ ___ AB _____ ___ 9A _______________ E9 _____________ __ B0 _______________ B9 _____________ __ 9E _______________
Convertir los siguientes numeros Binarios a Hexadecimal: 01001100 _____ 00001100 ________ _ 10100101 _____ 11001100 ________ _ 01001100 _____ 00001100 ________ _ 10100101 _____ 11001100 ________ _ 01001100 _____ 00001100 ________ _ 10100101 _____ 11001111 ________ _ 01001100 _____ 00001110 ________ _ 10101101 _____ 11101110 ________ _ 10110001_________ 11110011_________ 10110001_________ 11110011_________ 10110001_________ 11110000_________ 10110001_________ 11100011_________ 00001010 _______ 00010001 _______ 00001010 _______ 00010001 _______ 00000010 _______ 00000001 _______ 00011010 _______ 00010111 _______
HERRAMIENTA DE TRABAJO
COMPONENTES ELECTRONICOS
EL MICROCONTROLADOR
COMPUTADORA PERSONAL CON PUERTOS USB, PARA EDICION DE PROGRAMAS Y PROGRAMACION DEL MICROCONTROLADOR
La diferencia entre cada grupo radica en sus presentaciones y funciones internas. Que pueden ser tipos de memorias (EEPROM, SRAM, etc), ADC, USART, UART, PWM, TIMERS, y mucho mas. Los AVR son Microcontroladores que consisten de un CPU y varios tipos de espacio de memorias para almacenar datos y el Programa a ejecutar. Hay 3 tipos de Memorias: 1) Memoria Datos Uno de los aspectos ms importantes en la programacin de AVRs y microcontroladores en general son los REGISTROS., que es donde se almacenan datos en binario que controlador utiliza para ejecutar acciones. En el caso de los AVR, la SRAM contiene GPR (Registros de Trabajo, lo que en los PIC es los GPR y el registro W) y los Registros de I/O (I/O Registers) donde se almacena los datos de control de los AVRs.
LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.
Los Working Registers forman parte de la RAM pero estn independientes de los I/O Registers. Los registros de trabajo y registros de entrada y salida tienen direcciones independientes en la memoria RAM. Registros de entrada y salida (I/O): llevan el control del micro controlador y sus parmetros (contadores, puertos, temporizadores. ( El registro STATUS del PIC es un registro de I/O). Y su tamao vara dependiendo el Modelo de AVR. Registros de trabajo: sirven para almacenar informacin temporal, y que despus se transfiere a los registros de entrada y salida. (Pueden ser 32 o ms, segn el Modelo de AVR). Memoria SRAM (Static RAM) Es un tipo de Memoria que sirve para memorizar datos en el momento de la ejecucin de un programa. Suele llamarse ACUMULADOR. Cuando variables dentro de un programa, aqu se almacenan.
R0 --------. . R31 --------
registros de trabajo
oooo
registros de entrada y salida
3ffff 2) Memoria EEPROM Donde se almacenan datos que se pueden acceder mediante software y borrar de la misma manera.
3) Memoria de Programa Flash Es donde se almacena el programa desde el Programador, en muchos Microcontroladores es de tipo FLASH regrabable.
Modelo ATtiny2313
Contiene 2K Bytes de Memoria de Programa. (Memoria FLASH de programa) Una RAM que tiene 0 a 31 Registros de Trabajo R0 a R31, 64 I/O Registros de Entrada /Salida. 128 bytes de memoria SRAM. Una memoria EEPROM de 256 bytes. (acceso va instrucciones de programa)
ATtiny2313
Registros de Trabajo
SE TIENE ALGO ASI EN LA MEMORIA DE DATOS DEL ATtiny2313. APLICA LA MISMA IDEA PARA LOS DEMAS AVRS, SIMPLEMENTE CAMBIA SU CAPACIDAD.
Modelo ATmega48
Contiene 4K Bytes de Memoria de Programa. (Memoria FLASH de programa) Una RAM que tiene 32 Registros de Trabajo, R0 a R31 64 I/O Registros de Entrada /Salida. Una memoria EEPROM de 256 bytes. (acceso va instrucciones de programa)
ATmega48
REGISTROS DE TRABAJO
SE TIENE ALGO ASI EN LA MEMORIA DE DATOS DEL ATmega48. APLICA LA MISMA IDEA PARA LOS DEMAS AVRS, SIMPLEMENTE CAMBIA SU CAPACIDAD.
MODELO ATmega8535
Contiene 8K Bytes de Memoria de Programa. (Memoria FLASH de programa) Una RAM con 32 Registros de Trabajo R0 a R31, 64 Registros de I/O. - Una memoria EEPROM de 512 bytes. (acceso va instrucciones de programa). ATmega8535
REGISTROS DE TRABAJO
DATOS
RAM(BYTES)
EEPROM(BYTES)
8 2 4 1 2 2 1 32
PROGRAMACION EN ASM
LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.
EL AVR STUDIO 4
EDITOR PARA PROGRAMAR AVR EN ENSAMBLADOR (ASM)
Los AVR pueden ser programados en ASM, C, u otro lenguaje de alto nivel. Comenzaremos con el ASM. El ambiente de trabajo que utilizaremos para la programacin en ASM es el AVR Studio. Con el AVR studio tambin se puede programar en C, pero para esto se necesita agregarle un programa de aplicacin. Por el momento usaremos el editor de ASM. Como comenzar a trabajar en la programacin ASM de un AVR usando AVR Studio: Dar click en Create New Project y NEXT:
Ponerle un nombre, seleccionar GENERAR CARPETA para que ah se almacenen los archivos del proyecto, y luego NEXT:
Escoger que AVR se usara: (la carpeta ICE50 contiene los AVR ATmega48, ATmega8535, etc. Y al terminar, FINISH.
Despues de teclear el PROGRAMA en ASM, dar click en BUILD para compilarlo: Checar el STATUS de compilacin en la ventana de mensajes.
EL PROGRAMADOR
www.comunidadatmel.com
LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.
PRACTICA 2
CARGA DEL PRIMER PROGRAMA EN MICROCONTROLADOR
LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.
ATMega 8535 Procedimiento: Editar y grabar el SIGUIENTE programa en el Micro controlador AVR ATMega8535.
Programa de prueba y configuracin de Puertos de Entrada y Salida A continuacin se muestra un programa que ejemplifica como configurar puertos de entrada y salida de un AVR atmega8535. Ntese que cuando se configuran las ENTRADAS de un AVR, tenemos la opcin de conectar PULL UPS Resistor o bien utilizar las que trae el AVR integradas. El oscilador que toma el AVR es el de fabrica: INTOSC a 1 MHZ.
;************************************ ;PROGRAMA 0 ;written by: RAFAEL ESPINOSA E. * ;fecha: 04/jun/2011 * ;avr: ATmega8535 * ;**************************************** ;DESCRIPCION DEL PROGRAMA: ; -------------------------; "PRIMER PROGRAMA" ; HACER UN PROGRAMA USANDO UN ATMEGA48. ; LOS PINES PB0, PB4 Y PB7 SE CONECTAN A PUSH BUTTONS. PB4 Y PB7 SON PULL-UPS ; YA NO ES NECESARIO CONECTAR RESISTENCIAS PULL UPS A RB4 Y RB7. ; PD0 A PD7 SON SALIDAS A 8 LEDS. ; EL PROGRAMA SOLO CONFIGURA LAS ENTRADAS MENCIONADAS Y ; LAS SALIDAS DEL PUERTO D DEBEN ESTAR EN "CEROS" AL INICIO. ; ; ---------; DIRECTIVAS: .device ATmega8535 .INCLUDE "m8535def.inc" ; DESCRIBE EL MICRO A USAR ; DIRECTIVA PARA LLAMAR POR SU NOMBRE A REGISTROS ; PARA CHECAR SI EXISTE ESTE ARCHIVO CHECAR EN: ;C:\Archivos de programa\Atmel\AVR Tools\AvrAssembler\Appnotes ;--------------------------;DECLARACIONES DEL PROGRAMA: .def TEMP =R16 ; DECLARA GPR R16 (REGISTRO DE PROP.GRAL 16) CON EL NOMBRE:"TEMP" ; ; COMO EL "W" EN PICS ;EQU DDRB =$17 ; SE COMENTA X QUE YA NO ES NECESARIO DARLE NOMBRE A LOS REGISTROS ;EQU DDRD =$12 ; SE COMENTA X QUE YA NO ES NECESARIO DARLE NOMBRE A LOS REGISTROS ;------------------------------------------------------------; *** INICIO DEL PROGRAMA *** .ORG 0X0000
; EN AVR, LOS "1" SON SALIDAS, Y LOS "0" ENTRADAS, ASI: LDI OUT LDI OUT TEMP,0b11111111 DDRD,TEMP TEMP, 0B01101110 DDRB, TEMP ; CONFIGURA PORTB COMO SALIDAS ; RB0,RB4,RB7 SON ENTRADAS, (EL RESTO SALIDAS)
; DESPUES DE CONFIGURAR LAS ENTRADAS, TENEMOS LA OPCION DE DECIDIR ; CUALES CONTIENE RESISTENCIAS PULL UPS, DE ESTA FORMA NOS EVITA INCLUIRLAS ; EN EL CIRCUITO: LDI OUT LDI OUT TEMP,0b10010000 PORTB,TEMP TEMP, 0B00000000 PORTD, TEMP ; RB4 Y RB7 = HIGH = 1, SON PULL UPS. ; PORTD INICIA EN CEROS
LDI TEMP,0B11111111 LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.
PRACTICA 3
CONTROLANDO EL TIEMPO: LOS RETARDOS
LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.
.DEF TEMP1=R24 .def TEMP =R16 ;***************** LDI R16,0X02 OUT SPH,R16 LDI R16,0X5F OUT SPL,R16 ;***************** LDI TEMP,0b11111111 OUT DDRD,TEMP LDI TEMP, 0B00000000 OUT PORTD, TEMP CICLO:
LDI TEMP,0b11111111 ;PRENDE TODO PORTD OUT PORTD,TEMP RCALL DELAY ;ESPERA UN DELAY LDI TEMP1,0b00000000 ;APAGA TODO PORTD OUT PORTD,TEMP1 RCALL DELAY ;ESPERA OTRO DELAY RJMP CICLO ;SE REPITE EL CICLO ;************************************************* DELAY: LDI R17,0X91 ; SUBRUTINA DE DELAY A3: LDI R18,0X7E A2: LDI R19,0X41 A1: DEC R19 BRNE A1 DEC R18 BRNE A2 DEC R17 BRNE A3 NOP RET
PRACTICA 4
LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.
ENCENDIENDO UNA SALIDA DE FORMA INDEPENDIENTE DEL AVR Procedimiento: Editar y grabar el primer programa en el Micro controlador AVR ATMega8535.
"ENCIENDE Y APAGA UN BIT DEL PORTD USANDO: SBI Y CBI"
C:\Archivos de programa\Atmel\AVR Tools\AvrStudio4\AVR8535_2\avr8535_2.asm
;************************************ ;PROGRAMA 2 ;DESCRIPCION: "ENCIENDE Y APAGA UN BIT DEL PORTD USANDO: SBI Y CBI" ;WRITTEN BY: RAFAEL ESPINOSA ;FECHA: JUNIO 2011 ;AVR: ATmega8535 ;************************************ .device ATmega8535 .INCLUDE "m8535def.inc" .ORG 0x0000 ;EL REGISTRO R16 SE LLAMA "TEMP" ;???? ;DIRECTIVA INDICA EL AVR A UTILIZAR ;INCLUIR LAS ETIQUETAS STANDARD DEL AVR
.def TEMP =R16 ;***************** LDI R16,0X02 OUT SPH,R16 LDI R16,0X5F OUT SPL,R16 ;***************** LDI TEMP,0b11111111 OUT DDRD,TEMP LDI TEMP,0B00000000 OUT PORTD,TEMP CICLO:
SBI PORTD,6 ;PRENDE PORTD.0 RCALL DELAY ;ESPERA UN DELAY CBI PORTD,6 ;APAGA PORTD.0 RCALL DELAY ;ESPERA OTRO DELAY RJMP CICLO ;SE REPITE EL CICLO ;************************************************* DELAY: LDI R17,0X91 ; SUBRUTINA DE DELAY A3: LDI R18,0X7E A2: LDI R19,0X41 A1: DEC R19 BRNE A1 DEC R18 BRNE A2 DEC R17 BRNE A3 NOP RET
PRACTICA 5
INTERRUPTORES EN LAS ENTRADAS DEL AVR Procedimiento: Editar y grabar los siguientes programas en el Micro controlador AVR ATMega8535.
"PUSH BUTTON ;************************** ; PROGRAMA: "PUSH BUTTON" ; FECHA: JUNIO 2011 ; PROGRAMADOR: REE ; AVR: ATMEGA8535 ; ************************* ; FUNCIONAMIENTO: ; ; ; ; ; UN LED CONECTADO AL PUERTO PORTD.6 SE ENCIENDE CUANDO SE OPRIME UN BOTON CONECTADO AL PUERTO PORTC.3 SE APAGA CUANDO NO SE OPRIME BOTON PRESIONADO: PORTC.3=0 BOTON SIN PRESIONAR: PORTC.3=1
.device ATmega8535 .INCLUDE "m8535def.inc" ;**************************** ; Inicio del Programa: .DEF RJMP INIT: LDI OUT LDI TEMP = R16 INIT ; CONFIGURAMOS PORTD COMO SALIDA PRIMERO ; TODAS SALIDAS, INCLUYENDO PORTD.6 ; PORTC.3 COMO ENTRADAS, LAS DEMAS N/C
START:
TEMP, 0B11111111 DDRD, TEMP TEMP, 0B11110111 OUT DDRC,TEMP LDI TEMP, 0B00001000 OUT PORTC,TEMP SBIC PINC, 3 RJMP LEDOFF SBI PORTD,6 RJMP START
; PORTC.3 PULL UP, LAS DEMAS NO ; VERIFICA SI BOTON EN PORTC.3 ES OPRIMIDO ; SI NO, BRINCA A "LEDOFF", LED APAGADO ; SI BOTON ES OPRIMIDO, ENCIENDE EL LED ; VUELVE A LEER EL BOTON EN PORTC.3 ; APAGA EL LED ; VUELVE A LEER EL BOTON EN PORTC.3
"PUSH BUTTON II
LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.
;************************** ; PROGRAMA: "PUSH BUTTON II" ; FECHA: JUNIO 2011 ; PROGRAMADOR: REE ; AVR: ATMEGA8535 ; ************************* ; FUNCIONAMIENTO: ; ; ; ; ; UN LED CONECTADO AL PUERTO PORTD.6 SE APAGA CUANDO SE OPRIME UN BOTON CONECTADO AL PUERTO PORTC.3 ENCIENDE CUANDO NO SE OPRIME BOTON PRESIONADO: PORTC.3=0 BOTON SIN PRESIONAR: PORTC.3=1
.device ATmega8535 .INCLUDE "m8535def.inc" ;**************************** ; Inicio del Programa: .DEF RJMP INIT: LDI OUT LDI TEMP = R16 INIT
START:
TEMP,0B11111111 ; CONFIGURAMOS PORTD COMO SALIDA PRIMERO DDRD,TEMP ; TODAS SALIDAS, INCLUYENDO PORTD.6 TEMP,0B11110111 OUT DDRC,TEMP ; PORTC.3 COMO ENTRADAS, LAS DEMAS N/C LDI TEMP,0B00001000 OUT PORTC,TEMP ; PORTC.3 PULL UP, LAS DEMAS NO SBIC PINC,3 ; VERIFICA SI BOTON EN PORTC.3 ES OPRIMIDO RJMP LEDOFF ; SI |NO, BRINCA A "LEDOFF", LED APAGADO CBI PORTD,6 ; SI BOTON ES OPRIMIDO, APAGA EL LED RJMP START ; VUELVE A LEER EL BOTON EN PORTC.3 ; ENCIENDE LED ; VUELVE A LEER EL BOTON EN PORTC.3
Diagrama elctrico del circuito para la practica 5 LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.
PRACTICA 6
SECUENCIA DE LEDS Procedimiento: Editar y grabar los siguientes programas en el Micro controlador AVR ATMega8535.
"SECUENCIA DE 8 LEDS ;************************************ ;PROGRAMA: "SECUENCIA DE LEDS" ;WRITTEN BY: RAFAEL ESPINOSA ;FECHA: JUNIO 2011 ;AVR: ATmega8535 ;************************************ ; DESCRIPCION: ; 8 LEDS CONECTASDOS AL PUERTO C DEL AVR 8535 ; ENCIENDEN EN SECUENCIA. .device ATmega8535 .INCLUDE "m8535def.inc" .ORG 0x0000 ;EL REGISTRO R24 SE LLAMA "TEMP1" ;EL REGISTRO R16 SE LLAMA "TEMP" ;???? ;DIRECTIVA INDICA EL AVR A UTILIZAR ;INCLUIR LAS ETIQUETAS STANDARD DEL AVR
.DEF TEMP1=R24 .def TEMP =R16 ;***************** LDI R16,0X02 OUT SPH,R16 LDI R16,0X5F OUT SPL,R16 ;***************** LDI TEMP,0b11111111 OUT DDRC,TEMP LDI TEMP,0B00000000 OUT PORTD,TEMP CICLO: LDI TEMP,0b00000001 OUT PORTC,TEMP RCALL DELAY LDI TEMP,0b00000010 OUT PORTC,TEMP RCALL DELAY LDI TEMP,0b00000100 OUT PORTC,TEMP RCALL DELAY LDI TEMP,0b00001000 OUT PORTC,TEMP RCALL DELAY LDI TEMP,0b00010000 OUT PORTC,TEMP RCALL DELAY LDI TEMP,0b00100000
;PORTC ES SALIDA ;PORTD INICIA EN CEROS! ;PORTC.0 ;ESPERA UN DELAY ;PORTC.1 ;ESPERA UN DELAY ;PORTC.2 ;ESPERA UN DELAY ;PORTC.3 ;ESPERA UN DELAY ;PORTC.4 ;ESPERA UN DELAY ;PORTC.5
OUT PORTC,TEMP RCALL DELAY LDI TEMP,0b01000000 OUT PORTC,TEMP RCALL DELAY
;************************************************* DELAY: LDI R17,0X11 ; SUBRUTINA DE DELAY A3: LDI R18,0X3E A2: LDI R19,0X41 A1: DEC R19 BRNE A1 DEC R18 BRNE A2 DEC R17 BRNE A3 NOP RET
4)
8)
Compilar (CTRL+F9)
Editor de programa
PRACTICA 7
PRIMER PROGRAMA EN C
Procedimiento: Editar y grabar el siguiente programa en el Micro controlador AVR ATMega8535 usando el compilador MikroC.
Puerto C enciende y apaga cada segundo /***************************** programa: "PORTC ON y OFF cada segundo" programador: ree avr: ATMEGA8535 osc: INT RC OSC 8MHZ (LA FUNCION DELAY_MS ESTA CALCULADA PARA TRABAJAR A 8 MHZ.) fecha: JULIO 2011 ********************************* FUNCIONAMIENTO: 8 LEDS DEL PUERTO C ENCIENDEN Y SE APAGAN CADA SEGUNDO *********************************/ void main() { DDRC=0XFF; // PORTC AS OUTPUT while (1) { PORTC = 0; DELAY_MS(1000); PORTC = 0XFF; DELAY_MS(1000); } }
Programas ejemplos
8 leds encienden y apagan en secuencia c/seg. /***************************** Programa: "secuencia de 8 leds en PORTC" Programador: ree AVR: ATMEGA8535 Osc: INT RC OSC 8MHZ Fecha: JULIO 2011 ********************************* FUNCIONAMIENTO: 8 LEDS se conectan al PUERTO C. CADA LED HACE UN CICLO DE ENCENDIDO Y APAGADO EN SECUENCIA. EN INTERVALOS ESPECIFICADOS POR EL DELAY. *********************************/ void main() { unsigned int valor,conteo; DDRC=0XFF; // PORTC AS OUTPUT while (1) { valor=1; conteo=1; for (conteo=0; conteo<=6; conteo++) { PORTC = valor; DELAY_MS(50); PORTC = 0X00; DELAY_MS(100); valor = valor * 2; } valor=128; for (conteo=7; conteo>0; conteo--) {
LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.
secuencia de 8 leds bsica /***************************** Programa: "secuencia de 8 leds en PORTC un solo sentido." Programador: ree AVR: ATMEGA8535 Osc: INT RC OSC 8MHZ Fecha: JULIO 2011 ********************************* FUNCIONAMIENTO: 8 LEDS se conectan al PUERTO C. SECUENCIA NORMAL. Y SENCILLA. *********************************/ void main() { unsigned int valor,conteo; DDRC=0XFF; // PORTC AS OUTPUT while (1) { valor=1; conteo=1; for (conteo=0; conteo<=7; conteo++) { PORTC = valor; DELAY_MS(250); PORTC = 0X00; DELAY_MS(250); valor = valor * 2; } } }
ENTRADAS DIGITALES
Si ha manejado otros microcontroladores habr notado que nicamente tienen asociados un slo registro al puerto de entrada/salida, pero en este microcontrolador tiene asociados dos registros al puerto de entrada/salida, si quiere escribir al puerto B deber hacerlo as PORTB=dato; pero, POR EJEMPLO, si desea leer el estado del PIN2 del PORTC, quedara asi: dato= PINC2_bit. es decir deber usar PORTB, PORTC o PORTD para escribir al puerto, y deber usar variable=PINB, variable=PINC o variable=PIND para leer el valor de algn puerto de entrada. Tambin debemos elegir si usaremos las resistencias PULL UP integradas en el AVR. Al activarlas, ya no es necesario incluirlas externamente.
Por ejemplo para activar el puerto D como salida, el puerto C como entrada, con Pull Ups activadas, tenemos:
DDRD DDRC = = 0XFF; 0x00; // Set PORTD as outputs (INLUYENDO PORTD.B6) // todAS ENTRADAS Set PORTC.B3 as input
PORTC = 0Xff;
Tambin podemos usar configuraciones independientes para cada Bit, aqu se configura el pin 3 del puerto C como entrada y se activa su resistencia Pull up:
DDC3_bit = 0; PORTC.B3=1; // Set PORTC.B3 as input // O BIEN SE PUEDE HACER DE FORMA INDIVIDUAL
PRACTICA 8
ENTRADAS DIGITALES
Procedimiento: Editar y grabar el siguiente programa en el Micro controlador AVR ATMega8535 usando el compilador MikroC.
PROBANDO LAS ENTRADAS DEL AVR (1), "PULL UPS" ACTIVADAS /****************************************************** Programa: "PROBANDO LAS ENTRADAS DEL AVR (1), "PULL UPS" ACTIVADAS" Programador: RAFAEL ESPINOSA AVR: ATMEGA8535 Osc: INT RC OSC 8MHZ Fecha: 31 JULIO 2011 ****************************************************** FUNCIONAMIENTO: SE CONECTA UN INTERRUPTOR A PORTC.B3, Y UN LED AL PORTD.B6. CUANDO SE PESIONE EL INTERRUPTOR EL LED DEBE ENCENDER CUANDO NO SE PRESIONE, EL LED DEBE PERMANECER APAGADO. PORTC.B3 SE CONFIGURA CON RESISTENCIA "PULL UP", ES DECIR EL INTERRUPTOR SIRVE PARA PONER A "0" PORTC.B3, SI NO SE PRESIONA, PORTC.B3 YA ESTA EN "1" POR MEDIO DE LAS RESISTENCIAS "PULL UP" *******************************************************/ void main() { unsigned char variable; DDRD = 0XFF; // Set PORTD as outputs (INLUYENDO PORTD.B6) // DDD6_BIT = 1; DDC3_bit = 0; PORTC = 0XFF; // PORTC.B3=1; // // // // // O TAMBIEN PODEMOS CONFIGURAR SOLO PORTD.B6 // Set PORTC.B3 as input // TODAS PULL UPS ACTIVADAS (INCLUYENDO PORTC.B3) // O BIEN SE PUEDE HACER DE FORMA INDIVIDUAL
AL CONFIGURAR "PULL UP" EN PORTC.B3, EL INTERRUPTOR ENVIA UN "0" SI ES PRESIONADO, Y SE MANTIENE "1" EN PORTC.B3, SI EL SW NO ES PRESIONADO. EL SIGUIENTE BUCLE INFINITO WHILE, PREGUNTA ESTADO DEL DE LA ENTRADA Y EJECUTA UNA ACCION AL RESPECTO
while (1) { if (PINC3_bit) // If PORTC.3 = 1, (SI SW1 NO ESTA PRESIONADO) PORTD.B6=0; // APAGA EL LED (ESTADO NORMAL) while (PINC3_BIT); // SI SW1 SE PRESIONA, SALE DE ESTE BUCLE WHILE
LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.
DELAY_MS(10); PORTD.B6=1; }
// DELAY PARA EVITAR REBOTES // SW1 ES PRESIONADO Y PORTC.B3 = 0, POR LO TANTO, // SE ENCIENDE EL LED EN PORTD.B6 } // SE REPITE EL CICLO
Resistencias Pull Ups Como se ve en este ejemplo, los AVR nos dan la opcin de configurar las resistencias PULL UP que se incluyen dentro del Micro. Por ejemplo, para configurar la resistencia PULL UP del PORTC.b3, queda asi: DDC3_bit = 0; PORTC = 0XFF; // Set PORTC.B3 as input // TODAS LAS PULL UPS ACTIVADAS (INCLUYENDO PORTC.B3)
EJERCICIOS:
PROBANDO LAS ENTRADAS DEL AVR (2), "PULL UPS" EXTERNAS
/****************************************************** Programa: "PROBANDO LAS ENTRADAS DEL AVR (2), "PULL UPS" EXTERNAS" Programador: RAFAEL ESPINOSA AVR: ATMEGA8535 Osc: INT RC OSC 8MHZ Fecha: 31 JULIO 2011 ****************************************************** FUNCIONAMIENTO: SE CONECTA UN INTERRUPTOR A PORTC.B3, Y UN LED AL PORTD.B6. CUANDO SE PESIONE EL INTERRUPTOR EL LED DEBE ENCENDER CUANDO NO SE PRESIONE, EL LED DEBE PERMANECER APAGADO. PORTC.B3 SE CONFIGURA CON RESISTENCIA "PULL UP", ES DECIR EL INTERRUPTOR SIRVE PARA PONER A "0" PORTC.B3, SI NO SE PRESIONA, PORTC.B3 YA ESTA EN "1" POR MEDIO DE LAS RESISTENCIAS "PULL UP" *******************************************************/ void main() { unsigned char variable; DDRD = 0XFF; // Set PORTD as outputs (INLUYENDO PORTD.B6) // DDD6_BIT = 1; // O TAMBIEN PODEMOS CONFIGURAR SOLO PORTD.B6 DDC3_bit = 0; // Set PORTC.B3 as input PORTC = 0X00; // SE DESACTIVAN LAS PULL UPS DEL MICRO // PUESTO QUE USAREMOS "PULL UP" EXTERNA // PORTC.B3=0; // O BIEN SE PUEDE DESACTIVAR DE FORMA INDIVIDUAL // // // // // AL USAR "PULL UP" EXTERNA EN PORTC.B3, EL SW1 ENVIA UN "1" SI ES PRESIONADO, Y SE MANTIENE "0" EN PORTC.B3 POR MEDIO DE LA RESISTENCIA DE 10 KOHMS, SI EL SW NO ES PRESIONADO. EL SIGUIENTE BUCLE INFINITO WHILE, PREGUNTA EL ESTADO DEL DE ENTRADA Y EJECUTA UNA ACCION AL RESPECTO
while (1) { if (PINC3_bit) // If PORTC.3 = 1, (SI SW1 ESTA PRESIONADO) PORTD.B6=1; // ENCIENDE EL LED while (PINC3_BIT); // SI SW1 NO SE PRESIONA, SALE DE ESTE BUCLE WHILE DELAY_MS(10); PORTD.B6=0; // // // // DELAY PARA EVITAR REBOTES EL SW NO ES PRESIONADO Y PORTC.B3 = 0 POR MEDIO DE LA RESISTENCIA DE 10KOHMS, POR LO TANTO, NO SE ENCIENDE EL LED EN PORTD.B6
} }
// SE REPITE EL CICLO
00
PULL UP EXTERNA.
PULL UP EXTERNA Por medio de programacin desactivamos las resistencias PULL UP del AVR y agregamos las necesarias para nuestro circuito. En este caso, se conecta
LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.
una resistencia de 10 k del PORTC.B3 a tierra, teniendo un estado lgico 0 permanente; y hasta que no se oprima el SW1 habra un estado lgico 1 en la entrada PORTC.B3.
PRACTICA 9
CONVERTIDOR ANALOGO DIGITAL
Procedimiento: Editar y grabar el siguiente programa en el Micro controlador AVR ATMega8535 usando el compilador MikroC.
"Convertidor Aanalogo Digital del AVR8535" /****************************************************** Programa: "Usando el Convertidor Analogo Digital del AVR8535" Programador: RAFAEL ESPINOSA AVR: ATMEGA8535 Osc: INT RC OSC 8MHZ, Fecha: 4 agosto 2011 ****************************************************** FUNCIONAMIENTO: Se usa la entrada ADC2 del AVR8535 para leer el voltaje variable de un potenciomentro. Se lee el DATO y seallmacena en la variable "adc_rd". Puesto que los ADC del AVR8535 son de 10 bits, los primeros 8 bits del valor leido se almacenan en adc_rd y los ultimos 2 restantes en hi(adc_rd). El maximo numero que se puede erepresentar en 10 bits es HEX= 3FF y Dec=1023. Hay 3 modos para obtener el voltaje de referencia. 1) AREF y voltaje de referencia interno apagado 2) Vref - voltaje auxiliar con capacitor externo en AREF pin. 3) 2.56v Referencia interna En este ejemplo usamos la primer opcion. AREF sera VCC, es decir usamos de referencia el voltaje de alimentacion.(5 volts). (Nota: al usar ADC en 8535,hay un AVCC y un GND extras, estos deben conectarse tambien para que ADC funcione ok). De ese modo, si voltaje de referencia es 5 volts, cuando tengamos "0" voltios, el valor en ADC_rd=0. Si tenemos 5 volts a la entrada, el valor en adc_rd=1023. En este programa si nuestro AVCC=5, se conectan un LED a PORTD.B5 y otro a PORTD.B6. Si el voltaje de entrada en ADC2 es menor o igual a 1.83Volts (<=380), enciende el LED en PORTD.B5 y si es mayor a 1.83 Volts (>380) se enciende el LEDP en PORTD.B6. Nota Importante: Puesto que los modulos de ADC pueden variar entre cada AVR, se recomienda consultar el Datasheet espcifica de cada. *******************************************************/ #include <built_in.h> unsigned int adc_rd; void main() { DDRD = 0xFF; DDRA = 0x00; ADMUX =0x00; ADC_Init(); while (1){ // directive se debe incluir
adc_rd = ADC_Read(2); if (adc_rd <= 380) {PORTD.B5=1; PORTD.B6=0;} if (adc_rd > 380) {PORTD.B6=1; PORTD.B5=0;} delay_ms(100); } }
// get ADC value from 2nd channel // adc_rd <= 1.83 Volts. // adc_rd > 1.83 volts