Anda di halaman 1dari 49

UNIVERSIDAD GRUPO CEDIP A.C.

PROGRAMA DE CAPACITACION EN: AUTOMATIZACION Y CONTROL

TEMA:

MICROCONTROLADORES AVR Y AUTOMATIZACION INDUSTRIAL

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

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:

LAS COMPUTADORAS LOS AUTOMATAS PROGRAMABLES COMPUTADORAS INDUSTRIALES MICROCONTROLADORES

Estos dispositivos tienen la capacidad de almacenar instrucciones para posteriormente ejecutar una accin. El elemento mas simple es el Microcontrolador.

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

Sistema de Numeracin Binario y Hexadecimal: EL LENGUAJE DE LAS COMPUTADORAS


Los Microcontroladores, como las Computadoras, utilizan el sistema de numeracion binaria, esto es 1s y 0s, para procesar informacion. Electricamente, un 1 = 5 Volts y un 0 = 0 volts. (modo ideal). Dentro del Microcontrolador hay cientos de circuitos electricos de muchos tipos tales como multivibradores astables , monoestables, filtros, osciladores, etc; que estan conformados logicamente por transistores, capacitores, resistencias, y son capaces de retener, enviar y recibir seales electricas (1s y 0s) en milesimas de segundo. De esa forma se constituyen los llamados REGISTROS que sirven para manipular el funcionamiento del PIC. Los REGISTROS del PIC casi siempre son de 8 bits, es decir, 8 localidades de memoria listas para almacenar 1s o 0s. Para facilitarnos la tarea de edicion o escritura de las instrucciones de un PIC (Programa), normalmente los valores BINARIOS son representados en forma HEXADECIMAL.

DECIMAL BINARIO HEXADECIMAL 1 00000001 1 2 00000010 2 3 00000011 3


LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

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

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

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

Procedimiento: Resolver cada una de las siguientes conversiones:


Convertir los siguientes nmeros Hexadecimales a Binario: 5F ______ ___ AA _____ ___ 19 _____________ __ 90 _______________ 11 ____________ C4 ____________ 1A ____________ C7 ____________ E1 ____________ C4 ____________ 1B ____________ E4 ____________ F1 ________ 10 ______________ F2 ______________ 13 ______________ A1 ______________ BD ______________ FD ______________ 7A ______________

5D _____ ___ 39 _____________ __ AF _____ ___ 2F _____ ___ AA _____ ___ 5B _____ ___ AB _____ ___ 9A _______________ E9 _____________ __ B0 _______________ B9 _____________ __ 9E _______________

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

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

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

UNA TABLILLA DE EXPERIMENTOS (PROTOBOARD)

COMPUTADORA PERSONAL CON PUERTOS USB, PARA EDICION DE PROGRAMAS Y PROGRAMACION DEL MICROCONTROLADOR

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

INTRODUCCION A LOS MICROCONTROLADORES AVR DE ATMEL


Informacin bsica sobre la Familia de Microcontroladores AVR de Atmel. La familia de Microcontroladores AVR contiene una Moderna arquitectura. Hay 3 grupos principales dentro de la familia AVR: TinyAVR AVR (Classic AVR) megaAVR

( Modelos: ATmega48, ATmega8535, etc.)

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.

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

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

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

SE TIENE ALGO ASI EN LA MEMORIA DE DATOS DEL ATtiny2313. APLICA LA MISMA IDEA PARA LOS DEMAS AVRS, SIMPLEMENTE CAMBIA SU CAPACIDAD.

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

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

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

SE TIENE ALGO ASI EN LA MEMORIA DE DATOS DEL ATmega48. APLICA LA MISMA IDEA PARA LOS DEMAS AVRS, SIMPLEMENTE CAMBIA SU CAPACIDAD.

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

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

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

REGISTROS DE TRABAJO

Registros I/O y SRAM

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

ALGUNOS MICROCONTROLADORES Y SUS MEMORIAS


(PROGRAMA) MICROCONTROLADOR FLASH(Kbytes)

DATOS
RAM(BYTES)
EEPROM(BYTES)

AVR8535 ATINNY2313 ATMEGA48 PIC16F84 PI16F628 PIC16F716 12F675 18F4550

8 2 4 1 2 2 1 32

700 (aprox.) 224 700 (aprox.) 68 224 128 64 2064

512 128 256 64 128 * * 256

En los AVR, RAM = SRAM + Registros de I/O + Registros de Trabajo

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.

Espacio para editar el programa en ASM:


LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

Despues de teclear el PROGRAMA en ASM, dar click en BUILD para compilarlo: Checar el STATUS de compilacin en la ventana de mensajes.

Si todo va bien, el archivo compilado *.HEX deber estar en:

C:\Archivos de programa\Atmel\AVR Tools\AvrStudio4\carpeta_del_proyeccto\ archivo.HEX


Junto con los archivos *.ASM y otros relacionados con el proyecto. El archivo *.HEX ya est listo para ser transferido al Microcontrolador AVR utilizando su respectivo PROGRAMADOR.

EL PROGRAMADOR
www.comunidadatmel.com
LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

INSTALACION DEL PROGRAMADOR AVR (HARDWARE Y SOFTWARE)

Como conectar el HARWARE del programador a un Microcontrolador AVR para su programacin.


El HARDWARE del programador tiene 6 terminales y deben conectarse al AVR como se indica, durante el proceso de programacin: 1) 2) 3) 4) 5) 6) 5V - se conecta al VCC del AVR (terminal 7 del ATmega48) durante su programacin. GND - se conecta al GMD del AVR (terminal 22 del ATmega48) SCK - se conecta al SCK del AVR MISO se conecta al MISO del AVR MOSI se conecta al MOSI del AVR RST - se conecta al RESET del AVR.

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.

OUT PORTD, TEMP

;PROG. TERMINA CON TODOS LOS LEDS PRENDIDOS EN PORTD.

Diagrama elctrico del circuito para practica 2

PRACTICA 3
CONTROLANDO EL TIEMPO: LOS RETARDOS
LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

Procedimiento: Escribir el siguiente programa en el editor AVR Studio 4 y grabarlo en el AVR.


PRIMER RETARDO PARA ENCENDER Y APAGAR EL PUERTO D ;************************************ ;PROGRAMA 1 ;DESCRIPCION: "PRIMER PROGRAMA, UN PRIMER RETARDO ;WRITTEN BY: RAFAEL ESPINOSA ;FECHA: JUNIO 2011 ;AVR: ATmega8535 ;************************************ .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 DDRD,TEMP LDI TEMP, 0B00000000 OUT PORTD, TEMP CICLO:

;PORTD ES SALIDA ;PORTD INICIA EN CEROS!

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

Diagrama elctrico del circuito para LA PRTACTICA 3.

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

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:

;PORTD ES SALIDA ;PORTD INICIA EN CEROS!

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

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

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

LEDOFF: CBI PORTD,6 RJMP START

"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

LEDOFF: SBI PORTD,6 RJMP START

Diagrama elctrico del circuito para la practica 5 LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

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

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

OUT PORTC,TEMP RCALL DELAY LDI TEMP,0b01000000 OUT PORTC,TEMP RCALL DELAY

;ESPERA UN DELAY ;PORTC.6 ;ESPERA UN DELAY

LDI TEMP,0b10000000 OUT PORTC,TEMP RCALL DELAY RJMP CICLO

;PORTC.7 ;ESPERA UN DELAY ;SE REPITE EL CICLO

;************************************************* 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

Diagrama electrico parta la practica 5

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

PROGRAMACION EN C PARA MICROCONTROLADORES AVR


C, es un poderoso lenguaje de programacin, que ahora se ha introducido exitosamente en el desarrollo de aplicaciones con Microcontroladores. Al igual que con los Microcontroladores PIC, la Empresa MicroEngineering (UK) ha desarrollado un compilador para AVR. El MicroC PRO para AVR, que es un poderoso ambiente de desarrollo para la programacion de Microcontroladores AVR. Est diseado para proporcionar al usuario las herramientas de trabajo que necesita para cualquier proyecto con estos dispositivos. Pasos a seguir para realizar un programa en C para AVRs usando MickroC
1)

Primero, en el men, ir a PROJECT, --- NEW PROJECT. Y aparecer la ventana de bienvenida.

2) Seleccionar el Microcontrolador a utilizar en el proyecto,

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

3) Luego, seleccionar la FRECUENCIA de TRABAJO del Microcontrolador,

4)

Nos pide el directorio donde vamos a grabar el proyecto, podemos especificarlo,

5) Nos pide agregar algunos archivos extras, NEXT si no es necesario hacerlo,

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

6) Seleccionar que libreras incluir, (Include ALL),

7) Se ha creado un Nuevo Proyecto.

8)

Aparece el editor de programa:

Compilar (CTRL+F9)

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

Editor de programa

Mensajes de compilacion CompilacionCompilaciondit or de programa


9 ) Compilamos el Programa con la Opcion BUILD (CTRL+F9) 10) Si todo va bien, en el directorio especificado anteriormente, se han generado los archivos de trabajo, inluido el archivo *.HEX. Si existen errores, aparecern en el espacio especificado. 11) Ya podemos cargar el programa *.HEX en el AVR.

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); } }

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

CIRCUITO ELECTRICO PARA LA PRACTICA 7.

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.

PORTC = valor; DELAY_MS(50); PORTC = 0X00; DELAY_MS(100); valor = valor / 2; } } }

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; } } }

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

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

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

PORTC = 0Xff;

// SE ACTIVAN LAS PULL UPS DEL MICRO

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

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

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

DIAGRAMA ELECTRICO PARA practica 8

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)

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

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

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

} }

// 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.

"PROBANDO 2 ENTRADAS DEL AVR" CON "PULL UPS" EXTERNAS


/****************************************************** Programa: "PROBANDO 2 ENTRADAS DEL AVR" Programador: RAFAEL ESPINOSA AVR: ATMEGA8535 Osc: INT RC OSC 8MHZ Fecha: 31 JULIO 2011 ****************************************************** FUNCIONAMIENTO: SE CONECTA UN INTERRUPTOR A PORTC.B3, Y OTRO A PORTC.B2 EN SALIDAS PORTD.B5 Y PORTD.B6 SE CONECTAN LEDS. CUANDO NO SE PRESIONEN, LOS LEDS DEBE PERMANECER APAGADO. SE DESACTIVAN LAS RESISTENCIAS "PULL UP" INTERNAS DEL AVR, SE CONECTAN EXTERNAS SI SE PRESIONA PORTC.B3 - ENCIENDE LED EN PORTD.B6 SI SE PRESIONA PORTC.B2 - ENCIENDE LED EN PORTD.B5 NOTA: ESTE PROGRAMA SOLO PUEDE SELECCIONAR UNA SOLA OPCION A LA VEZ. BASADO EN EL EJEMPLO DE LIBRERIA "SOUND" DE EJEMPLOS MIKROC PARA AVR. *******************************************************/ void main() { unsigned char variable; DDRD = 0XFF; // Set PORTD as outputs (INLUYENDO PORTD.B6) DDRC = 0x00; // todAS ENTRADAS Set PORTC.B3 as input PORTC = 0X00; // SE DESACTIVAN LAS PULL UPS DEL MICRO // PUESTO QUE USAREMOS "PULL UP" EXTERNA // AL USAR "PULL UP" EXTERNAS EN PORTC.B3 Y PORTC.B2, LOS SWS ENVIAN UN "1" // SI SON PRESIONADOS. PORTC.B2 Y PORTC.B3 SE MANTIENEN "0" POR MEDIO DE LAS // RESISTENCIAS DE 10 KOHMS, SI LOS SWS NO ESTAN PRESIONADOS. // EL SIGUIENTE BUCLE INFINITO WHILE, PREGUNTA EL ESTADO DEL DE LAS ENTRADAS Y // EJECUTA LAS ACCIONES AL RESPECTO while (1) { if (PINC3_bit) PORTD.B6=1; while (PINC3_bit) ; if (PINC2_bit) PORTD.B5=1; while (PINC2_bit) ; DELAY_MS(19); PORTD.B5=0; PORTD.B6=0; }// SE REPITE EL CICLO } // endless loop // OPCION 1: // If PORTB.3 is pressed ENCIENDE PORTD.B6 // // // // // // // // // Wait for button to be released OPCION 2: If PORTB.2 is pressed ENCIENDE PORTD.B5 ESPERA A QUE BOTION SEA LIBERADO SI NO DELAY SI NO TODOS SE CUMPLE NINGUNA OPCION.. ANTIREBOTES HAY NINGUN BOPTON OPRIMIDO, APAGADOS.

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

"PROBANDO 2 ENTRADAS DEL AVR, CON "PULL UPS" EXTERNAS (2)


/****************************************************** Programa: "PROBANDO 2 ENTRADAS DEL AVR (2)" Programador: RAFAEL ESPINOSA AVR: ATMEGA8535 Osc: INT RC OSC 8MHZ Fecha: 31 JULIO 2011 ****************************************************** FUNCIONAMIENTO: SE CONECTA UN INTERRUPTOR A PORTC.B3, Y OTRO A PORTC.B2 EN SALIDAS PORTD.B5 Y PORTD.B6 SE CONECTAN LEDS. CUANDO NO SE PRESIONEN, LOS LEDS DEBE PERMANECER APAGADOS. SE DESACTIVAN LAS RESISTENCIAS "PULL UP" INTERNAS DEL AVR, SE CONECTAN EXTERNAS SI SE PRESIONA SW EN PORTC.B3 - ENCIENDE LED EN PORTD.B6 SI SE PRESIONA SW EN PORTC.B2 - ENCIENDE LED EN PORTD.B5 SI SE PRESIONAN LOS DOS SWS AL MIMO TIEMPO, SE ENCIENDEN LOS 2 LEDS. SE ELIMINA EL PROBLEMA DEL PROGRAMA 5, SOLO UNA OPCION A LA VEZ.(AVRC8535_5.C) *******************************************************/ void main() { unsigned char variable1, variable; DDRD = 0XFF; // Set PORTD as outputs (INLUYENDO PORTD.B6) DDRC = 0x00; // todAS ENTRADAS Set PORTC.B3 as input PORTC = 0X00; // SE DESACTIVAN LAS PULL UPS DEL MICRO // PUESTO QUE USAREMOS "PULL UP" EXTERNA // AL USAR "PULL UP" EXTERNAS EN PORTC.B3 Y PORTC.B2, LOS SWS ENVIAN UN "1" // SI SON PRESIONADOS. // SI NINGUN SW ES PRESIONADO, PORTC.B2 Y PORTC.B3 SE MANTIENEN "0" POR MEDIO // DE LAS RESISTENCIAS DE 10 KOHMS. while (1) { variable1 = PINC2_bit; variable = PINC3_bit; if (variable1==1) PORTD.B6=1; if (variable==1) PORTD.B5=1; else delay_ms(19); PORTD.B5=0; PORTD.B6=0; }// SE REPITE EL CICLO } // endless loop // LOS ESTADOS DE LAS ENTRADAS, SE GUARDAN // EN UNAS VARIABLES. // If PORTB.3 is pressed ENCIENDE PORTD.B6 // If PORTB.2 is pressed ENCIENDE PORTD.B5 // DELAY ANTIREBOTES // SI NO HAY NINGUN BOPTON OPRIMIDO, // TODOS APAGADOS.

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

DIAGRAMA ELECTRICO CON DOS ENTRADAS Y RESISTENCIAS PULL UPS EXTERNAS

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

"PROBANDO 2 ENTRADAS DEL AVR, "PULL UPS" internas


/****************************************************** Programa: "Lectura de Entradas usando condicional "IF" Programador: RAFAEL ESPINOSA AVR: ATMEGA8535 Osc: INT RC OSC 8MHZ Fecha: 31 JULIO 2011 ****************************************************** FUNCIONAMIENTO: SE CONECTA UN INTERRUPTOR A PORTC.B3, Y OTRO A PORTC.B2 EN SALIDAS PORTD.B5 Y PORTD.B6 SE CONECTAN LEDS. SI SE PRESIONA SW EN PORTC.B3 - ENCIENDE LED EN PORTD.B6 SI SE PRESIONA SW EN PORTC.B2 - ENCIENDE LED EN PORTD.B5 SI SE PRESIONAN LOS DOS SWS AL MIMO TIEMPO, SE ENCIENDEN LOS 2 LEDS. *******************************************************/ void main() { unsigned char variable1, variable; DDRD = 0XFF; // Set PORTD as outputs (INLUYENDO PORTD.B6) DDRC = 0x00; // todAS ENTRADAS Set PORTC.B3 as input PORTC = 0Xff; // SE ACTIVAN LAS PULL UPS DEL MICRO // no hay pull ups externas! while (1) { variable1 = PINC2_bit; variable = PINC3_bit; if (variable1==0) PORTD.B6=1; if (variable==0) PORTD.B5=1; else delay_ms(19); PORTD.B5=0; PORTD.B6=0; }// SE REPITE EL CICLO } // endless loop // LOS ESTADOS DE LAS ENTRADAS, SE GUARDAN // EN UNAS VARIABLES. // If PORTB.3 is pressed ENCIENDE PORTD.B6 // If PORTB.2 is pressed ENCIENDE PORTD.B5 // DELAY ANTIREBOTES // SI NO HAY NINGUN BOPTON OPRIMIDO, // TODOS APAGADOS.

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

Diagrama elctrico para el ejemplo.

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

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

// Set PORTD as output // entrada // AREF

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

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

// delay para evitar intermitencias en LEDS.

Diagrama elctrico para la practica 9.

LOS MICROCONTROLADORES AVR EN LA AUTOMATIZACION INDUSTRIAL | Ing. Rafael Espinosa E.

Anda mungkin juga menyukai