133
Octavo Electrónica 2009 2010 FISEI - UTA FISEI Octavo Electrónica 2009 2010 Universidad Técnica de Ambato Facultad de Ingeniería en Sistemas Electrónica e Industrial

Turorial avr Bascom

Embed Size (px)

DESCRIPTION

interesting material for learn for spanish people

Citation preview

Page 1: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Octavo Electrónica 2009 – 2010

Universidad Técnica de Ambato

Facultad de Ingeniería en

Sistemas Electrónica e Industrial

Page 2: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

TABLA DE CONTENIDOS

INSTALACIÓN

Instalación de Bascom ……………………………………………………………... 1

INTRODUCCIÓN A BASCOM

Bascom ……………………………………………………………………………... 6

AVR ………………………………………………………………………………… 7

Qué es lo que usted necesita para empezar ……………………………………… 7

Su Pc ………………………………………………………………………………... 7

Construir (o comprar) un "programador" ……………………………………... 8

EL SOFTWARE DE PROGRAMACIÓN

Obtener TWinAVR. ………………………………………………………………. 9

Obtener Userport …………………………………………………………………. 11

Configurar TWinAVR Bascom …………………………………………………. 12

Como usar Bascom ……………………………………………………………….. 13

Programa básico para hacer parpadear un led con intervalos de 1 segundo .. 18

Un semáforo de dos intersecciones ……………………………………………… 19

Juego de luces para discoteca …………………………………………………… 21

Ejercicio con la instrucción FOR NEXT ……………………………………….. 23

LAS VARIABLES BIT, BYTE Y WORD ……………………………………… 23

Luces del auto fantástico ………………………………………………………… 24

Ejercicios con pulsadores ……………………………………………………….. 25

La declaración IF… THEN …………………………………………………….. 25

Contador binario con pulsador antirrebote …………………………………… 27

Led intermitente de velocidad variable ………………………………………… 29

Manejo de un display de 7 segmentos con el ci.7447 ………………………….. 30

Page 3: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Un contador decimal de un digito con el ci 7447 y un pulsador ……………. 30

Manejo de un display de 7 segmentos sin el ci.7447 …………………………. 31

Declaración LOOKUP ………………………………………………………… 32

Manejo de 4 display de7 segmentos con el ci.7447 ………………………….. 33

Contador decimal de 4 digitos con el CI.7447 ………………………………… 34

Manejo de 4 displays de 7 segmentos sin el ci.7447 (rotulación) …………… 36

Manejo de 4 displays con rotulo en movimiento …………………………….. 37

Manejo de un modulo lcd ……………………………………………………… 38

Defina sus propios personajes lcd …………………………………………….. 45

Contador de pulsos con lcd ……………………………………………………. 47

Generación de sonido …………………………………………………………. 49

Una sirena policial …………………………………………………………….. 50

Generación de un timbre de teléfono celular ……………………………….. 51

Llamada telefónica DTMF …………………………………………………… 51

La declaración DTMFOUT …………………………………………………... 52

Lectura de un teclado de 16 pulsadores con display ded 7 segmentos ……. 54

Cerradura electrónica con clave en memoria flash ……………………….. 57

Cerradura electrónica con clave en memoria ram y cambio de clave …… 60

Cerradura electrónica con clave en memoria eeprom y cambio de clave .. 62

La declaración WRITEEEPROM y READEEPROM ……………………... 62

MOTORES PASO A PASO

Que es un motor Paso a paso ………………………………………………… 65

Motores paso a paso bipolares ………………………………………………. 65

Motores paso a paso unipolares ……………………………………………… 67

Secuencia del circuito de control …………………………………………….. 69

Page 4: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Manejo de un motor paso a paso en secuencia wave drive ………….……. 70

Manejo de un motor paso a paso en secuencia full step ……………..……. 71

Manejo de un motor paso a paso en secuencia half step …….………….… 71

COMUNICACIÓN

Que es la comunicación serial? …………………………………………..… 72

Modos de transmisión de datos ……………………………………... 73

Comunicación serial avr a pc …………………………………………..….. 74

Comunicación serial pc a avr …………………….……………………..…. 76

Comunicación i²c ……………..………………………………………….….. 77

Comunicación i²c con una memoria serial 24l04b …………………….…. 79

Interrupciones ………………………………………………………….....…. 82

SLEEP Y WAKE-UP, WATCH DOG …………………………….……….. 84

Circuito programador de AVR ……………………………………….…… 86

Datashteets ……………………………………………………………….. 89 - 123

Page 5: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Page 6: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Page 7: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

INSTALACIÓN

INSTALACIÓN DE BASCOM

Después de que usted ha descargado el archivo ZIP que usted necesita, debe ABRIR el

archivo. En Windows XP, para la versión de la DEMOSTRACIÓN, corra los

setupdemo.exe. (http://www.atmel.com : (http://www.ckuehnel.ch)

Click en el botón Next para seguir la instalación.

Aparecerá la ventana de información de la licencia.

1

Page 8: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Leer las instrucciones, selecciones 'I accept the agreement' y presione el botón NEXT.

La ventana siguiente se mostrará

Lea la información adicional y presiones el botón NEXT

Ahora la próxima pantalla aparecerá:

Usted puede seleccionar la direccion y camino dónde le gusta que BASCOM sea

instalado. Usted puede también acepte el valor predefinido que es

C:\Archivo de programas\MCS Electronics\BASCOM-AVR

Cuando tu termines click en botón NEXT para continuar

2

Page 9: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Cuando el directorio existe, porque usted instala una más nueva versión, usted

conseguirá una advertencia.

En caso de la advertencia, selecciones Yes.

Tú observaras la siguiente ventana.

Usted puede escoger crear en un nuevo Grupo del Programa llamdo 'BASCOM-AVR', o

usted pueda modificar el nombre, o instale en un Grupo del Programa existente,

presione el boton Next después de que usted ha hecho su opción

Ahora el archivo esta siendo instalado.

3

Page 10: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Después de que los archivos principales se instalan, algunos archivos

adicionales se instalarán.

Cuando la instalación está lista usted verá la última pantalla

Usted tiene que reiniciar su computadora.

4

Page 11: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

La carpeta del programa BASCOM se crea:

Usted puede ver los "Raed me" y archivos de la Licencia y usted puede

empezar BASCOMAVR.

5

Page 12: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Page 13: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

INTRODUCCIÓN: BASCOM Y AVR

BASCOM:

Medios básicos del compilador Bascom.

Bascom es desarrollado y vendido por MCS Electronics.

Bascom viene en tres variantes

Bascom-LT para microcontroladores Atmel AT89Cx051

Bascom-8051 de 8051 microcontroladores.

Bascom-AVR de microcontroladores Atmel AVR

Bascom es una aplicación para PC que le permitirá:

Escribir programas en Basic

Traducir estos programas en el PC para código maquina (un formato que el

controlador puede ejecutar AVR).

Simular el código compilado

El uso de programas externos de flash ("programa"), el código compilado en

microcontrolador de un AVR Atmel.

Lo bueno de Bascom es que se puede empezar con una versión libre Bascom, y

descargar el Bascom-AVR Demo zip-file), cuyo único límite es la 4k tamaño del código

generado (esto fue 2k hasta 2005 ). The obvious choice of AVR microcontroller would

then be one of the (2k flash) ATTiny models or the much-used (but now obsolete)

AT90S2313 which will let you get acquainted with Bascom and AVR microcontrollers.

La elección obvia de microcontrolador AVR sería uno de los flash (2K) modelos

ATTINY o el tan usado (pero ahora obsoleto) AT90S2313 que le permitirá

familiarizarse con Bascom y microcontroladores AVR.

Bascom permite crear rápidamente prototipos porque se ha incorporado soporte para

casi todos los microcontroladores AVR características tales como:

Contadores / temporizadores

UART

ADC

PWM

I2C

Además de que soporta gran cantidad de periféricos, tales como:

Botones

LCD de alfanuméricos

LCD Gráficos

PS / 2 para teclado

Control remoto por infrarrojos

Es sobre todo este apoyo que hace que el uso de Bascom atractivo en términos de

tiempo ahorrado, mientras que el desarrollo de una aplicación.

6

Page 14: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

AVR:

AVR es una familia de microcontroladores de 8 bits con una amplia gama de variantes

diferentes en:

Tamaño del programa de la memoria (flash)

Tamaño de la memoria EEPROM

Número de pines I / O

Número de servicios tales como características de los chips UART y ADC

Paquete de formularios

El más pequeño es el microcontrolador ATTINY11 con 1k flash y 6 pines I / O. The

largest is the ATMEGA256x with 256k flash, 54 I/O pins and lots of on-chip features.

La más grande es la ATMEGA256x con 256K flash, 54 pines I / O y muchas de las

características del chip.

Todos los controladores tienen el AVR RISC mismo como conjunto de instrucciones,

que permite portar bastante fácil de los programas de Bascom entre los tipos de

microcontroladores. Que ejecutar una instrucción por ciclo de reloj haciéndolas

sensiblemente más rápido que el 8 bits comparables 4 ciclos de reloj por cada

instrucción de los controladores de Microchip PIC.

¿QUÉ ES LO QUE USTED NECESITA PARA EMPEZAR?

La siguiente lista es el mínimo que necesita para empezar con la primera solicitud:

Un PC con un puerto paralelo con Windows (95 y más).

Bascom instalado en su PC.

Un "programador", un dispositivo que carga el código que se compila por

Bascom en la memoria del programa del microcontrolador.

Una configuración de prueba con un microcontrolador.

SU PC

Su PC debe ejecutar W95 o superior, consulte la página Bascom AVR para más

detalles. Si usted quiere construir su propio programador sencillo, el PC debe tener un

puerto paralelo o en serie. Si su PC funciona NT, 2000 o XP, acceso al puerto paralelo

requiere un pequeño programa independiente. Detalles de seguir adelante.

7

Page 15: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Instalar Bascom

Comience con la descarga de la versión libre Bascom. Se limitará el tamaño de código

que puede compilar (traducir de base a código de máquina AVR) de 2k, pero le ayudará

a empezar con casi todos los aspectos importantes de Bascom y controladores AVR.

Ir a la Electrónica MCS, sitio web a continuación, seleccione Descargas y, a

continuación Bascom, a continuación, Bascom-AVR, y descargar el Bascom-AVR

Demo archivo ZIP. Descomprimir en un directorio temporal. A continuación, inicie el

programa de instalación ejecutable, que ahora debería estar en este directorio temporal.

Instale Bascom, usted puede elegir el directorio de instalación.

Cree un directorio Bascom de trabajo, por ejemplo: C: \ Yourname \ Bascom \

Construir (o comprar) un "programador"

Aquí, un programador es un dispositivo para obtener el código Bascom compilado en la

memoria flash del microcontrolador AVR. La forma más fácil sería comprar un

programador. i elige la STK500 Atmel, se obtiene un programmerboard con un

controlador de AVR y algunos periféricos, tales como LED's. Esto le permite ponerse

en marcha inmediatamente. Sin embargo, la construcción de su propio programador es

fácil y barato.

Un programador muy básico es el basado en el SP12 trabajado por Roland Walter. Su

hardware del programador es controlado a través del puerto paralelo del PC con un

pequeño programa llamado TWinAVR. Usted debe descargarlo también. Descomprimir

TWinAVR a una ubicación conveniente en su PC. No se necesita configuración, puede

ejecutar TWinAVR.exe directamente desde el directorio de descarga

La versión de Roland es un programador en el que tienes que poner el microcontrolador

AVR en un zócalo, el programa, quite el microcontrolador y colocarlo en la

configuración del circuito. Lo hice un par de veces y consideró que sería posible

modificar su hardware de programación para que en la Programación del Sistema (ISP).

Para ello ISP, usted simplemente puede reservarse el microcontrolador pines que se

trate con la programación para este fin. Sin embargo, mientras esté conectado el

programador, estos pines no se puede utilizar para cualquier otro fin, puesto que podría

producirse un conflicto entre el programador, el microcontrolador y cualquier otra cosa

adjunta a estos pines. Esto no sería tanto un problema con microcontroladores grandes

con gran cantidad de pines I / O, pero en el AVR pequeños, sacrificando esos pines para

la programación externa a menudo no es posible. La solución es modificar el

programador de tal manera que las clavijas de programación sólo se conecta al

microcontrolador mientras que la programación está lugar. Para un buffer, he intentado

un 74HCT244 y 74HCT541. Los resultados de estos búferes pueden ser tri-dijo, lo que

significa que sus resultados se puede dejar aislados o "flotantes", evitando así problemas

con el hardware conectado a los pines de programación.

Este programador simple puede ser construido sobre un trozo de Vakelita..

8

Page 16: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

El software de programación

Obtener TWinAVR.

Este es el software que se comunica a través del hardware de programación se realizó

con el controlador de AVR. Les recomendamos que usen el TWinAVR hecho por

Ronald Walter. Ir a su página web, en la columna de la izquierda, seleccione

microcontrolador, seleccione Programador, lea el texto (que usted aprenderá algunas

TWinAVR alemán!) Y descargar.

TWinAVR de instalación

TWinAVR tiene que ser configurado para usar el Vcc generados por algunos pines del

puerto paralelo para cambiar el buffer.

9

Page 17: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Iniciar TWinAVR, haga clic en el logo de TWinAVR en la esquina superior izquierda,

haga clic en el Ajuste.

Se aparecerá la siguiente ventana, para configurar el software.

En esta ventana desactive la casilla Vcc. Esto significa que sólo se genera Vcc

TWinAVR mientras está activo. Si a continuación, utilizar esta Vcc para cambiar el

buffer 74HCT244, el bufferports será aislado TWinAVR cuando no está activo, dando

lugar a "En la programación del sistema. Aproveche esta oportunidad para comprobar la

configuración en paralelo: si el puerto no está en el estándar de la dirección "y 378",

(comprobarlo en la BIOS del PC si es necesario) cambiar la configuración LPT en

consecuencia.

10

Page 18: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Obtener Userport si es necesario

Si está utilizando Windows NT, 2000 o XP, TWinAVR no tendrán acceso directo al

puerto paralelo. Una solución es usar un programa piloto especial que proporciona

acceso directo. Uno de ellos es un programa de Userport. Debe ser instalado y la

configuración antes de utilizar TWinAVR. En primer lugar, Userport descarga.

Descomprima en un directorio, y Userport.sys copia de este directorio C: \ Windows \

System32 \ Drivers. Leer Userport.pdf. Userport.exe de inicio.

La ventana principal muestra la configuración predeterminada. Asumiendo que su

puerto paralelo está en "y 378", sólo es necesario la primera entrada en la ventana de la

izquierda para permanecer. En la ventana izquierda, seleccione 3BC-3BF y 3E8-3FF y

haga clic en Eliminar. Repita este paso para todas las entradas en la ventana derecha.

11

Page 19: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Lo que queda es 200-37F en la ventana izquierda. Click on Start. Haga clic en Iniciar.

Userport ahora activa la dirección seleccionada gama para usted y lo harán cada vez que

enciendes tu PC. Si necesita utilizar el puerto paralelo para otros fines, por ejemplo una

impresora, debe iniciar el programa de Userport y haga clic en Detener. El conductor

será cancelada.

Configurar TWinAVR Bascom

Bascom compila código básico en un "Bin'-archivo. Esta caja-archivo contiene las

instrucciones de AVR en el llamado código de máquina, lo que el controlador de AVR

puede ejecutar directamente. Usted puede utilizar un programador externo para escribir

esta caja de archivo en la memoria flash del AVR. El programador externo, a su vez, es

controlado a través de un programa separado como TWinAvr. TWinAvr le permite

seleccionar el archivo HEX que debe enviar al AVR. Sin embargo, es mucho más fácil

si Bascom directamente TWinAvr podría comenzar después de la compilación está

terminada y decirle que TWinAvr hex-archivo para su uso.

Esto se puede hacer en Bascom como sigue:

Inicio Bascom, seleccione Opciones / Programador

Externo Seleccione 'programador' de la lista de los programadores

Seleccione la pestaña "Otros"

Entrar en el "programa" campo de la localización de su software de

programación, TWinAvr.exe en nuestro caso. Utilice el.

Introduzca en el campo "Parámetro ': (archivo)

12

Page 20: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Esto le dice a Bascom para iniciar TWinAvr con el nombre de la bandeja de archivo, se

produce después de que la compilación fue exitosa:

A continuación, haga clic en Aceptar.

PROGRAMACIÓN BÁSICA PARA HACER PARPADEAR LEDs CON

INTERVALOS DE 1 SEGUNDO POR MEDIO DE TODO EL PUERTO B.

Este es el programa con el cual iniciaremos nuestro primeros pasos en el mundo de los

AVR, este programa te enseñara a configura los puertos de nuestro microcontrolador.

En primer lugar, configurar Bascom para iniciar TWinAvr con el nombre correcto de la

bandeja de archivo se produce después de una compilación exitosa.

A continuación, proceder como sigue

Inicio Bascom

Seleccione Archivo / Nuevo

13

Page 21: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

En el textwindow que aparece, entrar en el programa de bases siguientes:

“El atmega8 posee 8kb de memoria flash, 512 bytes eçde EEPOM, y 1KB de

SRAM, posee 2 timers, 2 de 8 bits y uno de 16 bits…Posee un reloj de tiempo real

(RTC) con oscilador externo.. y 6 canales de ADC… y por supuesto comunicación

serial…”

(A medida que escribe Bascom va a cambiar el texto del programa de color de acuerdo a

las palabras clave que reconoce).

En este simple de los programas, PORTB del AVR ATMEGA8 por primera vez

configurado para funcionar como una salida. PORTB Entonces se establece en el valor

decimal 255. Los ocho bits de PORTB se establece ahora en valor binario "uno". Tenga

en cuenta que sólo la parte inferior de siete bits están disponibles en el exterior como

alfileres PB0 hasta PB6. Si se conecta cualquiera de estos pines a un LED con un

resistor limitador de corriente a tierra, la corriente fluirá desde el AVR a los LED. El

LED está encendido. Después de esperar durante 1000 milisegundos, PORTB se

14

Page 22: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

establece en el valor decimal 0. Ahora, todos los pines se establecen en el valor binario

de "cero" y no pasará corriente del AVR a los LED. El LED está apagado. Después de

esperar otros 1000 milisegundos, se repite el ciclo. El resultado es que el LED

encenderse y apagarse.

Después de introducir el texto del programa, seleccione Archivo / Guardar como y

seleccione una ubicación y un nombre para el archivo. Supongamos que usted

seleccione 'ledflasher.bas' como un nombre de archivo. Como Bascom genera gran

cantidad de archivos después de una compilación, es una buena idea crear directorios

separados para cada proyecto Bascom que trabajar.

Bascom ahora se puede contar acerca de su configuración del controlador de AVR.

Seleccione Opciones / Compiler / Chip

El chip está predeterminado a ATMEGA 8:

15

Page 23: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Ahora, seleccione la pestaña de Comunicación:

Por defecto, la velocidad de reloj es de 4MHz, pero como usamos un cristal de 1MHz,

seleccione 1000000 de la lista de «frecuencia»

Después se guarda el archivo, seleccione Program / Compile (F7).

16

Page 24: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

A continuación les dejo el circuito simulado, con el cual pueden ver funcionamiento de

nuestro primer programa creado.

Para simular necesitamos cualquier software dedicado a la electrónica que posea las

librerías de AVR, yo use el software Proteus, lo puedes bajar de www.4shared.com.

Ahora vamos a aprender como configurar cada bit de los diferentes puertos como salida

o entrada, para ello vamos a realizar el siguiente ejemplo.

17

Page 25: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Page 26: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

PROGRAMA BÁSICO PARA HACER PARPADEAR UN

LED CON INTERVALOS DE 1 SEGUNDO.

Este proyecto es muy parecido al que lo vimos anteriormente, si usted no ha leído todo

el folleto, hágalo.

' Indico al compilador que micro voy a usar $regfile = "m8def.dat"

' Cristal interno de 1MHz

$crystal = 1000000 '*******************************************************************

'*ENE STE EJEMPLO VAMOS A REALIZAR EL PARPADEO DE LOS LEDS... PERO VAMOS

'*VAMOS A VER COMO SE PUEDE CONFIGURAR BIT A BIT EL I/O DE UN PUERTO....

'*PARA ESTO VAMOS A USAR EL COMANDO DDR.... EL CUAL DEBE IR ACOMPAÑADO DEL

'*COMANDO PORT......

'*ACA UNA BREVE DESCRIPCION DE ESTOS COMANDOS..

'*** DDBn PORTBn E/S Pull up Comment

'*** 0 0 Entrada No Tercer estado (Alta impedancia) '*** 0 1 Entrada Yes PBn

'*** 1 0 Salida No Push-Pull Salida en Cero

'*** 1 1 Salida No Push-Pull Salida en Uno

'* DECIR BREVEMENTO QUE DEPENDIENDO DE LOS VALORES QUE DEMOS A ESTOS

PARAMETROS

'* OBTENDREMOS SALIDAS O ENTRADAS EN UN PUERTO... '* PARA ESTE EJEMPLO VAMOS A CONFIGURAR BIT A BIT EL PORTB PARA QUE SEAN

SALIDAS EN 0 '* LOGICO

'* POR LO QUE LOS VALORES DEBEN SER DDRn 1 Y PORTn 0.. '* Configuro todo el puerto B.0 como salida

Ddrb.0 = 1

Portb.0 = 0

' Nombre de subrutina Parpadear:

' Activar el puerto B.0

Portb.0 = 1 ' Espero 1 segundo

Wait 1

' Apagar el puerto B.0

Portb.0 = 0 ' Espero 1 segundo

Wait 1

' ir a la subrutina parpadear Goto Parpadear

End

18

Page 27: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Una vez escrito el programa compilamos y grabamos el AVR, si no sabe como hacerlo

recordamos leer las páginas anteriores, no olvide dejar conectado como ilustra la figura

siguiente:

Una vez realizado este proyecto siga intentando con diferentes tiempos de Wait,

recuerde que son en segundos, pruebe Wait 3 verá que el parpadeo es mas lento, así

mismo ponga diferentes valores entre los 2 Wait, vera diferentes efectos. Si desea

tiempos mas pequeños debe usar Waitms, este se mide en milisegundos.

UN SEMAFORO DE DOS INTERSECCIONES.

Este es el ejemplo ideal para entender como asignar nombres a los diferentes bits de los

puertos, para ello usaremos un grupo de leds y manejaremos todo el puerto, existe otra

forma de realizar este proyecto, es controlando el puerto como un todo, para que

entiendan lo que digo, voy a realizar de las dos formas el programa.

' Indico al compilador que micro voy a usar

$regfile = "m8def.dat"

' Cristal interno de 1MHz

$crystal = 1000000

' Configuro todo el puerto B.0 como salida

Config Portb = Output

' Nombre de subrutina Semaforo:

Portb = 33

Wait 9

Portb = 34

Wait 3

Portb = 12

Wait 9

Portb = 20

Wait 3

Goto Semaforo

End

19

Page 28: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Bien es momento de escribir el programa, empecemos de la forma que se maneja el

puerto completo, para esto debemos entender como trabaja los semáforos. Primero

nunca se encienden las luces del mismo color, es decir no puede estar en el un semáforo

verde y en el otro verde también existe un cambio de verde a amarillo mientras en el

otro semáforo sigue en rojo, en el momento que se pone en rojo el primer semáforo el

segundo salta de rojo a verde.

Por considerar que esta es una practica, pondremos tiempos estimados de cambio de

color, de verde a amarillo durante 9 segundos, de amarillo a rojo solo 3 segundos.

' Indico al compilador que micro voy a usar

$regfile = "m8def.dat"

' Cristal interno de 1MHz

$crystal = 1000000

' Configuro todo el puerto B.0 como salida

Config Portb = Output

' asigno nombres a los bit del puertoB Verde2 Alias Pinb.0

Amarillo2 Alias Pinb.1

Rojo2 Alias Pinb.2

Verde1 Alias Pinb.3

Amarillo1 Alias Pinb.4

Rojo1 Alias Pinb.5

' Nombre de subrutina

Semaforo:

Rojo1 = 1 : Verde2 = 1

Wait 9

Verde2 = 0 : Amarillo2 = 1 Wait 3

Amarillo2 = 0

Rojo1 = 0

Verde1 = 1

Rojo2 = 1

Wait 9

Verde1 = 0 : Amarillo1 = 1

Wait 3

Goto Semaforo

End

20

Page 29: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Es esta otra manera de escribir el programa, noten que es más largo que el primer

programa, y además colocamos Alias a los diferentes bits del puerto B.

Rojo1 = 1

Verde1 = 1

Podemos escribirlo asi:

Rojo1 = 1 : Verde1 = 1

JUEGO DE LUCES PARA DISCOTECA

Este proyecto propone familiarizar aún más con el manejo de los puertos, esta vez

vamos a utilizar las 8 salidas del puerto B, se trata de una secuencia de luces que deben

encender de izquierda a derecha una tras otra con un intervalo de 200 mili segundos.

En la figura siguiente se muestra como conectar cada uno de los leds.

A continuación, en el siguiente programa veremos una declaración nueva el GOSUB y

el RETURN, estos sirven para cuando tenemos muchas repeticiones de una línea o

grupo de líneas de programa, en nuestro caso el Wait, en vez de poner en cada cambio

de estado de las luces, lo agrupamos en una sola subrutina y lo llamaremos las veces

que queramos, la declaración RETURN lo envía de regreso a continuar después del

GOSUB que lo envió. Una de las ventajas mas importantes que tenemos es que ahorra

espacio en el AVR, y otra que si queremos cambiar el Wait por el de otro valor, basta

con cambiar una sola vez y el cambio se ejecuta para todos, lo que al contrario si no lo

utilizaremos el GOSUB y escribiríamos 30 Wait, deberíamos cambiarlo a los 30 Wait

por el de otro valor, un ejemplo sería:

21

Page 30: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Nota: La ubicación de la subrutina Pause, es importante, fíjense que se encuentra

después y fuera de las líneas principales de programación, si esta misma subrutina lo

colocáremos al principio del programa, de seguro se nos cuelga por que al encontrar el

RETURN simplemente no sabe a donde retornar ya que nadie lo ha enviado aún.

EJERCICIO CON LA INSTRUCCIÓN FOR NEXT

Este proyecto es muy importante encenderlo, ya que el siguiente proyecto de luces de

auto fantástico utilizando la declaración FOR NEXT.

Esa declaración sirve para ejecutar un número n de veces una línea de programa o grupo

de líneas de programa, el siguiente proyecto pretende encender un led en el puerto B.0 5

veces con intervalo de medio segundo segundo, después debe detenerse por 2 segundos

y luego parpadear 3 veces mas, detenerse por 3 segundos y luego repetir nuevamente el

proceso, se puede utilizar el proto que se armo para las luces de discoteca ya que el

mismo nos servirá después para el siguiente proyecto el de las luces del auto fantástico,

FOR NEXT se utiliza de la siguiente manera:

$regfile = "m8def.dat" $crystal = 1000000

Config Portb = Output

Discoteca:

Portb = 1

Gosub Pause

Portb = 2

Gosub Pause

Portb = 4

Gosub Pause

Portb = 8 Gosub Pause

Portb = 16

Gosub Pause

Portb = 32

Gosub Pause

Portb = 64

Gosub Pause

Portb = 128

Gosub Pause

Goto Discoteca

Pause: Waitms 300

Return

End

22

Page 31: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Dim Peter As Byte ; Primero se crea y asigna un tamaño para la variable peter

FOR Peter = 1 to 5 ; Ejecuta las siguientes instrucciones 5 veces hasta donde dice

NEXT

…….. ; una vez concluido las repeticiones continúa con la declaración

que está

…….. ; después del NEXT, peter debe ser creado como variable, es decir

NEXT ; asignarle un espacio en la memoria en este caso para 5.

LAS VARIABLES BIT, BYTE Y WORD.

Estas son creadas para guardar datos en la memoria RAM (Random Access Memory) o

memoria de acceso casual, esta memoria trabaja únicamente mientras esté alimentado

el AVR, una vez que el AV R es desconectado, los datos de la memoria RAM se borran.

Dim Repe As Bit ; crea una variable y asigna un tamaño de un bit, es decir 0 o 1

Dim Repe As Byte ; crea una variable y asigna un tamaño de 8 bits, es decir 0 a 255

Dim Repe As Word ; crea una variable y asigna un tamaño de 2 bytes, es decir 0 a

65535

Para nuestro caso como queremos hacer 5 repeticiones, nos corresponde crear un BYTE

que nos permite almacenar un número hasta 255.

$regfile = "m8def.dat"

$crystal = 1000000

Config Portb = Output

Led1 Alias Pinb.0

' creo una variable llamada Repe con

' longitud BYTE

Dim Repe As Byte

Programa: ' ciclo FOR

For Repe = 1 To 5

Led1 = 1

Waitms 500

Led1 = 0

Waitms 500

Next

Wait 2

For Repe = 1 To 5

Led1 = 1

Waitms 500 Led1 = 0

Waitms 500

Next

Wait 3

Goto Programa

End

23

Page 32: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

LUCES DEL AUTO FANTÁSTICO (DESPLAZAMIENTOS)

Este proyecto es muy similar al de las luces para discoteca, con la diferencia de que este

se enciende de izquierda a derecha y luego de derecha a izquierda, pensaríamos que el

programa será el doble del tamaño que el que hicimos paira las luces de discoteca, pero

no es así, recuerde que existen varios caminos para llegar a un mismo objetivo, y este es

uno de ellos, esta vez utilizaremos los desplazamientos, que no son nada más que

recorrer un uno lógico a la izquierda o - Derecha de la salida de los puertos.

Los desplazamientos utiliza la multiplicación y la división, como sabemos el AVR

trabaja con el sistema binario, si tenemos una variable X con un valor inicial de 1

(%00000001) y lo Multiplicáramos por 2 . el resultado sería 2 (%00000010),y este a su

vez lo volveríamos a multiplicar por 2 el resultado sería 4 (%00000100), y así

sucesivamente hasta llegar a 128, en le en binario sería (% 10000000), veríamos que los

leds se enciende de la misma forma que las luces para discoteca, para hacer que las

luces se regresen hasta el puerto B.0 debemos dividir para 2, entonces 128 / 2 es igual a

64 (%01000000), como podemos ver ahora está regresando a su lugar de origen, los

desplazamientos se escribe de la siguiente manera:

Rotate Portb , Left ;desplaza a la izquierda un bit en el puerto

Rotate Portb , Right ;desplaza a la derecha un bit en el puerto

Entendido como funcionan los desplazamientos desarrollamos el siguiente programa:

Nota: No olvide cargar al Puerto con 1, porque si no lo hace significa que vale cero (0)

y esto multiplicado por 2 siempre dará cero, en consecuencia nunca veríamos el

desplazamiento.

$regfile = "m8def.dat"

$crystal = 1000000

Config Portb = Output

' creo una variable llamada I con ' longitud BYTE

Dim I As Byte

Portb = 1

Programa:

' ciclo FOR

For I = 1 To 7

Rotate Portb , Left

Waitms 150

Next

For I = 1 To 7

Rotate Portb , Right Waitms 150

Next

Return

Goto Programa

End

24

Page 33: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

EJERCICIOS CON PULSADORES

Para esta practica debemos entender como funciona los pulsadores con el AVR, existe

básicamente 2 tipos de conexión para los pulsadores, el que siempre está en 1 lógico

(5V) y cuando es pulsado cambia a cero lógico (0V), y el que está en cero lógico y

cuando pulsamos para a uno lógico, los siguientes son los diagramas de conexión.

LA DECLARACION IF… THEN.

Esta sirve de condicionante, si es verdadera ejecuta la operación que sigue al THEN, y

si es falsa a la siguiente línea después del THEN, existen varias formas de aplicación.

IF porb.0 = 0 THEN Michu ; ir a Michu si la entrada Portb.0 es cero lógico

IF porb.0 = 1 THEN Gato ; ir a Gato si la entrada Portb.0 es uno lógico

IF porb.0 = 0 THEN ; Si la comparación es verdadera ejecuta todo el

Porta.0 = 1 ; contenido que se encuentra entre el THEN y el

Wait 1 ; END IF

Porta.0 = 0

ENDIF

25

Page 34: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

El siguiente es el diagrama de conexión para esta práctica del pulsador:

Diagrama de conexión de un pulsador conectado en el puerto B0, de estado 1 lógico, en

el momento que es presionado este desvía la tensión hacia tierra, por lo que el AVR

detecta un cambio de estado a cero lógico, en ese instante se enciende el led.

A continuación el programa en Basic para leer el estado de un pulsador:

IF porb.0 = 0 THEN ; Si la comparación es verdadera ejecuta todo el

………. ; contenido que se encuentra entre el THEN y el

ELSE ; ELSE y si es falsa ejecuta el contenido entre

………. ; ELSE y END IF

ENDIF

IF pato > 10 THEN Majo ; si la variable pato es mayor que 35 ejecuta Majo

26

Page 35: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

CONTADOR BINARIO CON PULSADOR ANTIRREBOTE

En esta práctica haremos un contador binario, el resultado lo veremos en código binario

a través de 8 leds conectados al puerto B. Para esta practica necesita poner un

antirrobote al pulsador, ya que si presiona por un instante, dada la velocidad que procesa

el AVR el programa se ejecutara varias veces hasta que suelte el pulsador, para aprender

de los errores haga el programa sin antirrobote y luego con antirrobote.

' Indico al compilador que micro voy a usar

$regfile = "m8def.dat"

' Cristal interno de 1MHz

$crystal = 1000000 '*******************************************************************

'*** ENE STE EJEMPLO VAMOS A REALIZAR EL PARPADEO DE LOS LEDS... PERO VAMOS

'*** VAMOS A VER COMO SE PUEDE CONFIGURAR BIT A BIT EL I/O DE UN PUERTO....

'*** PARA ESTO VAMOS A USAR EL COMANDO DDR.... EL CUAL DEBE IR ACOMPAÑADO DEL

'*** COMANDO PORT......

'*** ACA UNA BREVE DESCRIPCION DE ESTOS COMANDOS..

'*** DDBn PORTBn E/S Pull up Comment '*** 0 0 Entrada No Tercer estado (Alta impedancia)

'*** 0 1 Entrada Yes PBn

'*** 1 0 Salida No Push-Pull Salida en Cero

'*** 1 1 Salida No Push-Pull Salida en Uno

'*** DECIR BREVEMENTO QUE DEPENDIENDO DE LOS VALORES QUE DEMOS A ESTOS

'*** PARAMETROS OBTENDREMOS SALIDAS O ENTRADAS EN UN PUERTO...

'*** PARA ESTE EJEMPLO VAMOS A CONFIGURAR BIT A BIT EL PORTB PARA QUE

'*** SEAN SALIDAS EN 0 LOGICO

'*** POR LO QUE LOS VALORES DEBEN SER DDRn 1 Y PORTn 0..

' Configuro todo el puerto B.0 como entrada, con resistencia push pull

Ddrb.0 = 0 Portb.0 = 0

' Configuro todo el puerto C.0 como salida

Ddrc.0 = 1

Portc.0 = 0

Programa:

If Pinb.0 = 0 Then Goto Encender

Goto Programa

Encender:

Portc.0 = 1 Wait 3

Portc.0 = 0

Goto Programa

End

27

Page 36: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Si tuvo la oportunidad de ver funcionando este proyecto, se dará cuenta que cada que se

pulsa el botón el contador aumenta demasiado, esto es como se dijo antes por el AVR

trabaja a gran velocidad cada instrucción y cuando una persona presione el botón, por lo

menos necesita de 100ms de tiempo para soltarlo, en este tiempo el AVR ya sumo

alrededor de 25000 veces. Para solucionar este problema proponemos hacer un

programa de antirrobote de tecla, en el cual si presionamos el botón, este envía a un

programa que lo mantiene encerrado, únicamente sale de esta subrutina en el momento

que el pulsador deja de ser presionado, a continuación incluimos un WAITMS 200, que

es necesario para que en el momento de soltar la tecla se estabilice la señal.

Para conocer más sobre los operadores matemáticos disponible como: resta

multiplicación, división, etc. Existentes en el Software BASCOM, se recomienda ver la

ayuda del software.

$regfile = "m8def.dat"

$crystal = 1000000

Ddrc.0 = 0

Portc.0 = 1

Config Portb = Output

Dim Num As Byte

Num = 0

Pulsar:

Portb = Num

If Pinc.0 = 0 Then Goto Contar

Goto Pulsar

Contar:

If Pinc.0 = 0 Then Goto Contar

Waitms 200

Num = Num + 1

Goto Pulsar

End

$regfile = "m8def.dat"

$crystal = 1000000

Ddrc.0 = 0

Portc.0 = 1

Config Portb = Output

Dim Num As Byte

Num = 0

Pulsar:

Portb = Num

If Pinc.0 = 0 Then Goto Contar

Goto Pulsar

Contar:

Num = Num + 1

Goto Pulsar

End

28

Page 37: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

LED INTERMITENTE DE VELOCIDAD VARIABLE

Este proyecto se basa en dos pulsadores, el primero para aumentar la frecuencia del

parpadeo del led, y el segundo para disminuir la frecuencia de parpadeo. Para esto

utilizaremos dos operadores matemáticos, la suma y la resta, la suma incrementa las

repeticiones de una instrucción FOR…NEXT, que contiene un WAITMS 5, mientras

que la resta disminuirá las repeticiones del mismo wait. Debemos tener en cuenta que

una variable BYTE no puede exceder su contenido a mas de 255. ni tampoco pasar a

valores negativos al ser restado consecutivamente, si excediera el valor a mas de 255, el

mismo se carga con valor de cero, y viceversa si el resultado de la resta pasara a

negativo, la variable se carga con 255.

$regfile = "m8def.dat"

$crystal = 1000000

Ddrb.0 = 0

Portb.0 = 1

Ddrb.1 = 0

Portb.1 = 1

Ddrc.0 = 1 Portc.0 = 0

Led Alias Portc.0

' Pbaja Portb.1

' Psube Portb.0

Dim Xy As Byte

Dim Veces As Byte

Veces = 100

Inicio:

Led = 1

Gosub Tim Led = 0

Gosub Tim

Goto Inicio

Tim:

If Pinb.0 = 0 Then Gosub Restar

If Pinb.1 = 0 Then Gosub Sumar

For Xy = 1 To Veces

Waitms 5

Next

Return

Sumar:

If Veces > 150 Then Return Veces = Veces + 5

Return

Restar:

If Veces < 10 Then Return

Veces = Veces - 5

Return

End

29

Page 38: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

PROYECTO CON DISPLAYS

MANEJO DE UN DISPLAY DE 7 SEGMENTOS CON EL

CI.7447

Los display son muy utilizados para visualizar datos. Para esta práctica se utiliza como

periférico de salida un display tipo ánodo común, para lo cual se facilita el diagrama en

la figura siguiente. El proyecto consiste en hacer un contador decimal (0,…,9), con

intervalos de 0.5 segundos.

El programa es muy similar al contador binario, con la diferencia que solo se necesita 4

bits del puerto, el decodificador binario a 7 segmentos (7447), es encargado de

transformar el número binario que ingresa al número decimal.

UN CONTADOR DECIMAL DE UN DIGITO CON EL CI

7447 Y UN PULSADOR

Adicionando al proyecto anterior un pulsador se hace un contador manual de un digito.

No se olvide hacer un programa antirrobote de tecla, por el caso expuesto

anteriormente.

El diagrama de este proyecto es el mismo de la figura anterior, pero adicionando un

pulsador de estado uno lógico en el puerto B.0.

$regfile = "m8def.dat"

$crystal = 1000000 Config Portc = Output

Dim Numero As Byte

Encerar:

Numero = 0

Visualizar:

Portc = Numero

Waitms 500

If Numero = 9 Then Goto

Encerar

Numero = Numero + 1 Goto Visualizar

End

30

Page 39: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

MANEJO DE UN DISPLAY DE 7 SEGMENTOS SIN EL

CI.7447

Como se sabemos, al AVR se le puede programar para reemplazar a casi cualquier

circuito integrado, en esta ocasión haremos que le propio AVR sea como el CI.7447,

para esto debemos saber que para sacar el numero 3 por ejemplo, debemos calcular el

numero decimal que hace que se enciendan los segmentos correctos del display, esto se

hace de la siguiente forma.

Como debemos encender los segmentos a, b, c, d y g. revisamos los pintes del AVR que

les corresponde y estos son: B0, B1, B2, B3 y B6, respectivamente, estos debemos

ponerlos en cero lógicos para que los segmentos se enciendan (recuerde que el display

es ánodo común), y los demás 1 lógico para que permanezcan apagados:

$regfile = "m8def.dat"

$crystal = 1000000

Config Portc = Output

Ddrb.0 = 0

Portb.0 = 1

Dim Numero As Byte

Encerar:

Numero = 0

Visualizar: Portc = Numero

If Pinb.0 = 0 Then Goto

Aumentar

Goto Visualizar

Aumentar:

If Pinb.0 = 0 Then Goto

Aumentar

Waitms 200

If Numero = 9 Then Goto Encerar

Numero = Numero + 1 Goto Visualizar

End

31

Page 40: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

DECLARACIÓN LOOKUP

Sirve para obtener un valor constante de una tabla, esto lo hace según el número de

veces que repita el FOR…NEXT, por ejemplo la primera vez toma el dato que se

encuentra en el lugar 0, la segunda vez, toma el dato del lugar 1 y así sucesivamente.

MANEJO DE 4 DISPLAY DE7 SEGMENTOS CON EL

CI.7447

El siguiente proyecto debe encender 4 display para poder mostrar cualquier numero de 0

hasta el 9999, esto lo conseguimos gracias al transistor tipo PNP, que nos ayudara a

multiplexar cada uno de los displays, el funcionamiento es bastante sencillo, debemos

conectar los 4 bits mas altos a cada transistor y los cuatro bits mas bajos al CI 7447, si

por ejemplo queremos sacar el numero 6874, primero habilitamos el cuarto transistor, el

de la derecha y enviamos el número 4, el CI 7447 se encargara de formar el numero 4

en el display, luego pasamos a cero lógico el segundo transistor y los demás los

mantenemos en nivel alto, al mismo tiempo sacamos el numero 7 por los bits menos

significativos del puerto B, y así consecutivamente, el tiempo que debemos mantener

$regfile = "m8def.dat"

$crystal = 1000000

Config Portd = Output

Dim I As Byte

Prog:

For I = 0 To 5

Portd = Lookup(i , Secuencia)

Waitms 500

Next

Goto Prog

End Secuencia:

Data &B1000000 , &B1111001 , &B0100100 , &B0110000 , &B0011001 , &B0010010

32

Page 41: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

activado cada transistor no puede ser mayor que 5 mili segundos, es decir que los

cambios son tan rápidos que el ojo humano ve todos los display encendidos al mismo

tiempo, cuando en realidad solo se encienden uno a la vez.

Ejemplo: para sacar el número 8 en las centenas debemos sacar (176 + 8), es decir el

número 184 porque si analizamos en código binario, tenemos que los bits mas bajos

entran al CI 7447, y los bits mas altos, son los encargados de encender el display que le

corresponden a las centenas.

$regfile = "m8def.dat"

$crystal = 1000000

Config Portd = Output

Visualizar:

' activo transistor de unidades y presento el 1

Portd = 224 + 1

Waitms 5

' activo transistor de decenas y presento el 2 Portd = 208 + 2

Waitms 5

' activo transistor de centenas y presento el 3

Portd = 176 + 3

Waitms 5

' activo transistor de miles y presento el 4

Portd = 112 + 4

Waitms 5

Goto Visualizar

End

33

Page 42: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

CONTADOR DECIMAL DE 4 DIGITOS CON EL CI.7447

Es hora de hacer un proyecto de considerable tamaño, una vez entendido como

multiplexar 4 displays, y entendido el ejercicio del contador, pues el siguiente proyecto

consta en hacer un contador decimal que incremente su valor cada vez que se pulsa el

botón A, si pulsamos el botón B se encera y se apaga la chicharra, y si pulsamos la tecla

C, presenta el numero al cual va a comparar, si el numero a contar es igual a 24, activa

un aviso auditivo, este buzzer trabaja a 12 Voltios, lo que diferencia de los parlantes

comunes es que no necesita ser activado con una frecuencia, sino basta con alimentarle

con 12 voltios para que suene.

$regfile = "m8def.dat"

$crystal = 1000000

Config Portd = Output

Ddrc.0 = 1

Portc.0 = 0

Ddrc.1 = 0

Portc.1 = 1

Ddrc.2 = 0

Portc.2 = 1

Ddrc.3 = 0

Portc.3 = 1

Dim Unid As Byte

Dim Dece As Byte

Dim Cent As Byte

Dim Mile As Byte

34

Page 43: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Dim Setunid As Byte

Dim SetDece As Byte Dim SetCent As Byte

Dim Setmile As Byte Setunid = 4

Setdece = 2

Setcent = 0

Setmile = 0

Dim Activar As Bit

' chicha Portc.0

' Contar Portc.1

' Encerar Portc.2

' visualizar Portc.3

Portc.0 = 1

Waitms 200

Encerar:

Unid = 0

Dece = 0

Cent = 0

Mile = 0

Portc.0 = 0

Visualizar:

Portd = 224 + Unid

Waitms 5

Portd = 208 + Dece

Waitms 5

Portd = 176 + Cent

Waitms 5

Portd = 112 + Mile

Waitms 5

Gosub Teclas

Goto Visualizar

Teclas:

If Pinc.1 = 0 Then Gosub Sumar

If Pinc.2 = 0 Then Gosub Encerar

If Pinc.3 = 0 Then Gosub Visualizar2

Activar = 1

Return

Sumar:

If Activar = 0 Then Return

Activar = 0

Unid = Unid + 1

If Unid < 10 Then Goto Comparar

Unid = 0

Dece = Dece + 1

If Dece < 10 Then Goto Comparar

Dece = 0

Cent = Cent + 1

If Cent < 10 Then Goto Comparar

Cent = 0

Mile = Mile + 1

If Mile < 10 Then Goto Comparar

Mile = 0

Return

Visualizar2:

Portd = 224 + Setunid

Waitms 5

Portd = 208 + setDece

Waitms 5

Portd = 176 + setCent

Waitms 5

Portd = 112 + setMile

Waitms 5

Return

Comparar:

If Unid = Setunid And Dece = Setdece And Cent = Setcent And Mile = Setmile Then

Portc.0 = 1

Else

Return

End If End

35

Page 44: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

MANEJO DE 4 DISPLAYS DE 7 SEGMENTOS SIN EL

CI.7447 (ROTULACIÓN)

Es posible hacer un contador decimal igual que el del proyecto anterior y sin ayuda del

CI, 7447, pero en esta ocasión haremos mas que eso, como vieron la ventaja de conectar

el display directamente al AVR es la de poder sacar casi la mayoría de las letras del

alfabeto, pues bien este proyecto consiste en sacar la palabra HOLA a través de los 4

displays.

$regfile = "m8def.dat" $crystal = 1000000

Config Portd = Output

Config Portb = Output

Texto:

' %1110 activa el display de la derecha

Portd = 14

' forma la letra A

Portb = 8

Waitms 5

' %1101 activa el siguiente display

Portd = 13

' forma la letra L Portb = 71

Waitms 5

36

' %1011 activa el siguiente display Portd = 11

' forma la letra O

Portb = 64

Waitms 5

' %0111 activa el siguiente display

Portd = 7

' forma la letra H

Portb = 9

Waitms 5

Goto Texto

End

Page 45: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

MANEJO DE 4 DISPLAYS CON ROTULO EN

MOVIMIENTO

Para hacerlo mas interesante el proyecto anterior, le añadiremos movimiento, con esto

podemos ingresar frases completas como “HOLA LUIS”, pero para no alargar mucho el

programa solo utilizaremos la palabra HOLA, moviéndose continuamente de derecha a

izquierda y con un espacio por palabra.

La variable x es la que regula la velocidad con que se desplazan las letras, para

comprobarlo modifique el valor de todas las repeticiones de 1 TO 20 al doble 1 TO 40,

y vera como se desplaza las letras mas lentamente.

$regfile = "m8def.dat"

$crystal = 1000000

Config Portd = Output

Config Portb = Output

Dim X As Byte

Texto:

For X = 1 To 20

Portd = 14 : Portb = 8

Waitms 5

Portd = 13 : Portb = 71 Waitms 5

Portd = 11 : Portb = 64

Waitms 5

Portd = 7 : Portb = 9

Waitms 5

Next

For X = 1 To 20

Portd = 14 : Portb = 127

Waitms 5

Portd = 13 : Portb = 8 Waitms 5

Portd = 11 : Portb = 71

Waitms 5

Portd = 7 : Portb = 64

Waitms 5

Next

For X = 1 To 20

Portd = 14 : Portb = 9

Waitms 5

Portd = 13 : Portb = 127

Waitms 5 Portd = 11 : Portb = 8

Waitms 5

Portd = 7 : Portb = 71

Waitms 5

Next

37

Page 46: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

MANEJO DE UN MODULO LCD

Los módulos LCD (Display de Cristal Líquidos), son utilizados para mostrar mensajes

que indican al operario es estado de la maquina, o para dar instrucciones de manejo,

Mostar valores, etc. El LCD permite la comunicación entre las maquinas y los humanos,

este puede mostrar cualquier carácter ASCII, y consume mucho menos que los display

de 7 segmentos, existe de varias presentaciones por ejemplo de 2 líneas por 8 caracteres,

2x16, 2x20, 4x20, 4x40, etc. Sin backlight (14 pines) o con backlight (16 pines,

iluminado de pantalla), el LCD más popular es el 2x16, 2 líneas de 16 caracteres cada

una.

Fotografía de un LCD 2x16

For X = 1 To 20

Portd = 14 : Portb = 64

Waitms 5

Portd = 13 : Portb = 9 Waitms 5

Portd = 11 : Portb = 127

Waitms 5

Portd = 7 : Portb = 8

Waitms 5

Next

For X = 1 To 20

Portd = 14 : Portb = 71

Waitms 5

Portd = 13 : Portb = 64 Waitms 5

Portd = 11 : Portb = 9

Waitms 5

Portd = 7 : Portb = 127

Waitms 5

Next

Goto Texto

End

38

Page 47: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Pin Simb Descripción

1 Vss Tierra de alimentación GND

2 Vdd Alimentación de +5V CC

3 Vo Ajuste de contraste del cristal liquido (0 a +5V)

4 RS Selección del registro control/datos RS=0 reg. Control RS=1 reg. Datos

5 R/W Lectura/Escritura en LCD R/W = 0 escritura (write) R/W = 1 lectura (read)

6 E Habilitación E = 0 módulo desconectado E = 1 módulo conectado

7 D0 Bit menos significativo (bus de datos bidireccional)

8 D1

9 D2

10 D3

11 D4

12 D5

13 D6

14 D7 Bit masmenos significativo (bus de datos bidireccional)

15 A Alimentación del backlight +3.5V o +5 Vcc (según especificaciones técnicas)

16 K Tierra GND del backlight

Bascom puede manejar los dos tipos principales de pantallas de cristal líquido:

alfanuméricos y gráficos. Por el momento, vamos a preocuparnos por el tipo más común

alfanuméricos. Este tipo de pantalla LCD puede mostrar los caracteres, números y

caracteres especiales. El tipo más común de LCD alfanumérico utiliza un Hitachi

HD44780 como controlador de pantalla. Cuando usted no está seguro acerca de qué tipo

de pantalla que están sosteniendo en sus manos, sólo tiene que mirar a las

denominaciones de chips en la espalda. Si uno de estos dice HD44780 estás a salvo.

Bascom tiene una configuración por defecto para la conexión de la pantalla LCD.

Options / Compiler / LCD

39

Page 48: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Afortunadamente, el predeterminado es de tipo LCD de 16 * 2. Esta es la pantalla LCD

más común con dos líneas y 16 caracteres por línea. HD44780 tipo LCD tienen ocho

datalines, pero pueden ser controlados de una manera más económica mediante el uso

de los cuatro líneas. Esto ahorra cuatro Pins I / O en el controlador. Esta es la

predeterminada (modo de 4 bit bus) en la ventana de opciones. El envío de datos se lo

hace en modo 4-bit bus de curso tiene dos escrituras de cada 8-bits a enviar Si realmente

necesitas la pantalla LCD para ser lo más rápido posible (y rara vez lo hacen), tendrá

que elegir el modo 8-bit bus.

El modo de datos es el pin por defecto. Esto significa que los pines individuales se

pueden seleccionar para cada pin LCD. Esta opción proporciona la mayor flexibilidad

en la elección de la i / o de configuración de su controlador. La opción de «bus» se

puede utilizar en la clásica configuración de microprocesador de autobuses donde un

montón de I / O está conectado a un bus y la decodificación de dirección debe ser

utilizado para hacer frente a cada dispositivo por separado en el autobús.

En el 'pin' opción, puede especificar cómo las clavijas de seis LCD está conectado a su

controlador. El pin de activación es usada por la pantalla LCD para ver si tiene para leer

/ escribir datos en las cuatro I / O Pins. Mientras el pin de activación es bajo, la pantalla

no "escuchar" a los cambios en los cuatro pines de datos (lo que también puede ser

utilizado para otros fines, por el AT90S2313 que también se utilizan para el MOSI,

miso y CLK). El pin RS se utiliza para que la pantalla LCD sepa si los datos que están

en los pines de datos tienen que ver con una presentación en la pantalla o con un

comando, como un restablecimiento de pantalla o un cambio del cursor

La pantalla LCD tiene un séptimo séptimo pin llamado R / W para contar la pantalla

LCD si queremos leer los datos, o escribir en la pantalla LCD. Bascom supone que este

pin está permanentemente conectado a tierra, de modo que la pantalla LCD siempre está

en modo de lectura. Sin embargo, para ver si la pantalla LCD está preparada para recibir

datos, se debe leer la memoria de ocupación.

Esto implicaría el envío de un comando de verificación de ocupado, cambiar la pantalla

a modo de escritura, la lectura del valor de un byte del registro del pabellón ocupado y

se determina el valor del bit de ocupado. Como no podemos hacer eso, Bascom debe

utilizar bucles de espera después de cada escritura. Los bucles de espera son

determinados por la velocidad de reloj. Esto es entre otras cosas por la especificación de

la velocidad de reloj en las opciones / Compilador / ventana de comunicación o con la

palabra clave de cristal $ es importante. Tenga en cuenta que si ha especificado un reloj

de 4 MHz y luego cambiar el cristal en un modelo de 10MHz, el controlador se

ejecutará 2,5 veces más rápido, pero los circuitos de espera del cristal líquido son

probablemente demasiado corto. Esto puede resultar en que la pantalla LCD no

funciona en absoluto o actúe de manera extraña.

Al igual que con la especificación del tipo de controlador y de cristal, las conexiones de

pin LCD se puede especificar en el origen de Bascom en lugar de utilizar Opciones /

Compiler / LCD:

La pantalla LCD está conectada al controlador de la siguiente manera

40

Page 49: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

La pantalla LCD alfanumérico estándar tiene 14 pins. Pin número 1 es la tierra. Pin

número 5 es R / W y también está conectado a tierra. Pin número 2 es Vcc, va a +5 V.

Algunos LCD no tolerará una fuente de alimentación con tensión de salida de un lento

aumento. Pin número 3 es para el contraste del LCD. Con la mayoría de las pantallas se

puede conectar el pin de contraste a tierra. Por un contraste óptimo, en algunas pantallas

se necesita una tensión ligeramente positiva en este pin. Uso de un potenciómetro entre

+5 V y tierra debe dar una configuración óptima para la mayoría de las pantallas. Los

números de PIN 4 (RS), 6 (E) y 11, 12, 13 y 14 están conectados a la controladora como

se muestra en el esquema. PIN números 7, 8, 9 y 10 se puede quedar desconectados.

Tenga en cuenta que D5, D6 y D7 son compartidos con MOSI, miso y SCK. Si usted

tiene una pantalla LCD con backlight LED que puede tener un 16 pines en el PCB del

LCD. Pins 15 y 16 son para la luz de fondo. Si estos pines no tienen otras indicaciones,

intente una alimentación de +5 V con un resistor limitador de corriente de unos pocos

cientos de ohmios para averiguar cuál es el cátodo y el ánodo. A veces la luz de fondo

LED tiene un conector separado de los otros 14 pines.

Config Lcd = 16 * 2

Config lcdpin = PIN, DB4 = PORTB.1, DB5 = PORTB.2, DB6 = PORTB.3,

DB7 = PORTB.4, E = PORTB.5, RS = PORTB.6

Lcd Mode Config = Puerto

41

Page 50: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Compile el programa, y luego Program / Simulate

LCD de carácter conjunto.

El conjunto de LCD de caracteres estándar se muestra en la siguiente tabla:

$regfile = "m8def.dat"

$crystal = 1000000

Dim Count As Integer

$sim

Config Lcd = 16 * 2

Config lcdpin = PIN, DB4 = PORTB.1, DB5 = PORTB.2, DB6 = PORTB.3,

DB7 = PORTB.4, E = PORTB.5, RS = PORTB.6

Config Lcdmode = Port

Do ' borrar la pantalla

Cls

' Presento en la lcd HELLO

Lcd "Hello " ; Count

Count = Count + 1

Wait 1

Loop

End

42

Page 51: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Los caracteres especiales en esta tabla se pueden enviar a la pantalla utilizando el

charactercode decimal. Por ejemplo, utilice:

LCD chr (228)

Para enviar el símbolo μ. (1110.0100 binario es 228 en decimal)

Se debe entender que existe un cursor que aunque no lo vemos, pues es este el que

indica donde aparecerá la siguiente letra, para poder entender haremos un ejercicio

completo, así podrán aprender más del LCD y las funciones de cada uno de los

comandos. Primero que nada haremos visible el cursor y luego pondremos Wait para

poder ver el funcionamiento.

El siguiente programa muestra algunos de los comandos que pueden ser utilizados con

la pantalla LCD.

43

Page 52: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

$regfile = "m8def.dat" $crystal = 1000000

' proporción del baud

$baud = 19200

' uso 32 predefinido para la pila del hardware

$hwstack = 32

' so 10 predefinido para la pila de SW

$swstack = 10

' uso 40 predefinido para el espacio del marco

$framesize = 40

Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2 Config Lcdpin = Pin , Db6 = Portb.3 , Db7 = Portb.4

Config Lcdpin = Pin , E = Portb.5 , Rs = Portb.6

Dim A As Byte

Config Lcd = 16 * 2

Programa:

Cls

Lcd "Hola mundo"

Wait 1

Lowerline

Wait 1

Lcd "Como estas"

Wait 1 For A = 1 To 10

Shiftlcd Right

Wait 1

Next

For A = 1 To 10

'cambio el texto a la izquierda

Shiftlcd Left

Wait 1

Next

Cls

' fijar posicion del cursor Locate 2 , 1

Lcd "*"

Wait 1

Cls

'cambio el texto a la derecha

Shiftcursor Right

Lcd "@"

Wait 1

Cls

' seleccionar linea 1 y retornar a casa

Home Upper

Lcd "Remplazar." Wait 1

Cls

'esconda el cursor

Cursor Off Noblink

Wait 1

' mostar el cursor

Cursor On Blink

Wait 1 Cls

'apaga el despliegue

Display Off

Wait 1

'encender el despliegue

Display On

Wait 1

Goto Programa

End

44

Page 53: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

DEFINA SUS PROPIOS PERSONAJES LCD

La LCD con el controlador HD44780 tiene espacio para ocho caracteres adicionales que

se pueden definir. Usted podría utilizar caracteres especiales que de origen a:

Hacer una pantalla de barras de un metro o S-VU-meter

Una pelota para pasar el tiempo del usuario, mientras que el controlador está

haciendo algo mucho tiempo.

Un objeto en rotación o saltar al hombre para que el usuario sepa que el

controlador está aún en marcha.

Situé el cursor en Tools / LCD designer

Dar el un clic en cualquier cuadro para que este se haga negro, o clic en un cuadro negra

para que se haga blanco. Hacer un símbolo de la cruz

Haga clic en Aceptar. Colocar el cursor en el origen del programa y aparecerá el

siguiente texto.

Deflcdchar ?,32,4,4,31,4,4,32,32' replace ? with number (0-7)

Cambiar el "?" por el número "0" y eliminar el comentario después del carácter '

Deflcdchar 0 , 32 , 4 , 4 , 31 , 4 , 4 , 32 , 32

45

Page 54: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Mover el cursor de texto a la siguiente línea vacía, rehacer Tools / LCD designer,

realizar el siguiente grafico.

Deflcdchar ?,32,2,20,14,5,8,32,32' replace ? with number (0-7)

Cambiar el "?" por el número "1" y eliminar el comentario después del carácter '

Deflcdchar 1 , 32 , 2 , 20 , 14 , 5 , 8 , 32 , 32

Repita este proceso otras cuatro veces (usa tu imaginación) hasta que su programa es el

siguiente:

Compilar y Simulación. El resultado es una estrella de rotación rápida en la posición

más a la derecha de la línea de LCD de la primera fila.

$regfile = "m8def.dat"

$crystal = 1000000

' proporción del baud

$baud = 19200

' uso 32 predefinido para la pila del hardware

$hwstack = 32

' so 10 predefinido para la pila de SW

$swstack = 10

' uso 40 predefinido para el espacio del marco

$framesize = 40

Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2

Config Lcdpin = Pin , Db6 = Portb.3 , Db7 = Portb.4

Config Lcdpin = Pin , E = Portb.5 , Rs = Portb.6

Dim Star As Byte

Config Lcd = 16 * 2

Deflcdchar 0 , 32 , 4 , 4 , 31 , 4 , 4 , 32 , 32

Deflcdchar 1 , 32 , 2 , 20 , 14 , 5 , 8 , 32 , 32

Deflcdchar 2 , 32 , 2 , 26 , 4 , 11 , 8 , 32 , 32

Deflcdchar 3 , 32 , 17 , 10 , 4 , 10 , 17 , 32 , 32

Deflcdchar 4 , 32 , 8 , 11 , 4 , 26 , 2 , 32 , 32

Deflcdchar 5 , 32 , 8 , 5 , 14 , 20 , 2 , 32 , 32

Cls

Do

For Star = 0 To 5 Step 1

Locate 1 , 16

Lcd Chr(star)

Next Star

Loop End

46

Page 55: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

CONTADOR DE PULSOS CON LCD

Este proyecto, consiste en contar el numero de pulsos que ingresan por un pin en un

determinado periodo, este a su vez visualiza en un LCD, si la cantidad de este supera a

los 120 pulsos por segundo es decir 120Hz, se encenderá una alarma visual (un led

rojo), y si la cantidad de pulsos baja a menos de 100Hz, este encenderá un led Verde, si

la frecuencia se mantiene entre estos 2 rangos, no se encenderá ningún led.

Para esta practica utilizaremos el C.I 555 que nos ayuda a generar un tren de pulsos

variable, el cual lo conectamos al AVR para su posterior conteo.

DECLARACIÓN PULSEIN. Sirve para contar el número de pulsos que ingresan por

un pin en un determinado tiempo, este a su vez lo guarda en una variable para su

posterior procesamiento, la manera de utilizarlo es la siguiente.

var Una palabra variable que se asigna con el resultado

PINX Puero a usar

PIN Pin del Puerto con el que se contar

STATE Podria ser 0 or 1.

0 Medio de muestreo. Transición 0 to 1.

1 Medio de muestreo. Transición 1 to 0.

Algo muy importante de conocer, es como conocer verdaderamente la cantidad de

pulsos que el AVR esta detectando en la entrada, para ello debemos primeramente

tomar en cuenta que clase de variable es la que esta almacenado el conteo. La cantidad

de pulsos del conteo obtengo dividiendo la cantidad máxima que puede almacenar dicha

variable para el dato almacenado de conteo.

Pulsos = 26315 / Variable

Uso variable Word = 26315 = 2 bytes

47

Page 56: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

$regfile = "m8def.dat"

$crystal = 1000000

$baud = 19200 $hwstack = 32

$swstack = 10

$framesize = 40

' Configuro todo el puerto D.2, D.3 como salida

Ddrd.2 = 1

' led rojo

Portd.2 = 0

Ddrd.3 = 1

' led verde

Portd.3 = 0

Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2

Config Lcdpin = Pin , Db6 = Portb.3 , Db7 = Portb.4

Config Lcdpin = Pin , E = Portb.5 , Rs = Portb.6

Dim Puls As Word

Config Lcd = 16 * 2

Prog:

' escondo el cursor

Cursor Off Noblink

Pulsein Puls , Pind , 0 , 1

Puls = 26315 / Puls

Cls

Lcd " Frecuencia" ' localizo al cursos fila 2 columna 6

Locate 2 , 6

48

Page 57: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

GENERACIÓN DE SONIDO

El software Bascom es capaz de sacar las frecuencias especificadas por un pin del AVR,

para esto aprenderemos la declaración SOUND.

LA DECLARACIÓN SOUND. Saca lo o las frecuencias especificadas por un pin del

micro, estas pueden ser de 0 a 32767 Hz, su utilización es de la siguiente forma.

Quiere decir sacar una frecuencia de 65635 ciclos durante 10 segundos por el puerto

B.0.

En esta práctica lo utilizaremos para generar un sonido a través de un piezoeléctrico o

por medio de un parlante.

Lcd Puls

Locate 2 , 10

Lcd "Hz"

If Puls > 120 Then Goto Alarmah

If Puls < 100 Then Goto Alarmal Pind.2 = 0 : Pind.3 = 0

Goto Prog

Alarmah:

Pind.2 = 1 : Pind.3 = 0

Goto Prog

Alarmal:

Pind.3 = 1 : Pind.2 = 0

Goto Prog

End

SOUND pin, pulsos, duración Sound Portb.0 ,65635 , 10000

49

Page 58: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

UNA SIRENA POLICIAL

Esta practica consiste en sacar por un parlante el sonido característico de una sirena

policial, para esto emplearemos la ayuda de la declaración vista anteriormente.

$regfile = "m8def.dat"

$crystal = 1000000

$baud = 19200

$hwstack = 32 $swstack = 10

$framesize = 40

' Configuro todo el puerto C.0 como salida

Ddrc.0 = 1

' led rojo

Portc.0 = 0

Speaker Alias Portc.0

Do

Sound Speaker , 1000 , 2

Wait 2

Loop

end

' Configuro todo el puerto C.0 como salida

Ddrc.0 = 1

' led rojo

Portc.0 = 0

Speaker Alias Portc.0

Do

Sound Speaker , 100 , 10

Sound Speaker , 50 , 10

Wait 2

Loop

50

Page 59: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Esto quiere decir sacar dos tonos por el puerto C.0, el primer tono es 100 que equivale a

(7874 Hz) con una duración de 10 milisegundos y luego un tono de 50 (3937 Hz) con

una duración de 10 milisegundos también.

En cuanto al diagrama y materiales son los mismos de la práctica anterior.

GENERACIÓN DE UN TIMBRE DE TELÉFONO

CELULAR

Esta practica consiste en sacar por un parlante el sonido característico de un teléfono

celular, para esto emplearemos la ayuda de la declaración SOUND.

En cuando al diagrama de conexión y materiales, podemos utilizar el mismo de la

práctica anterior.

Pruebe con algunas combinaciones de tonos, así como también con diferentes tiempos y

verá que bien pude componer una melodía.

LLAMADA TELEFÓNICA DTMF

Esta practica tiene como objetivo generar tonos DTMF (Dual tono Multifrecuency) a

través de un AVR, como los que genera cualquier teléfono fijo o celular, estos tonos no

son nada mas que el envió de dos frecuencias especificas asignadas a cada tecla, estas

frecuencias podemos ver en la figura siguiente, lo que sucede cuando pulsamos una

tecla, es que envía una frecuencia baja y luego una segunda frecuencia del grupo alto,

esto podríamos hacerlo con la declaración PULSEOUT.

$regfile = "m8def.dat"

$crystal = 1000000

$baud = 19200

$hwstack = 32

$swstack = 10 $framesize = 40

' Configuro todo el puerto C.0 como salida

Ddrc.0 = 1

' led rojo

Portc.0 = 0

Speaker Alias Portc.0

Do

Sound Speaker , 125 , 4

Sound Speaker , 123 , 5

Wait 2

Loop

51

Page 60: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

LA DECLARACIÓN DTMFOUT

Esta genera automáticamente los tonos duales correspondientes a cada tecla y los envía

cada una con intervalos de 50 milisegundos, aunque estos los podemos cambiar.

Para nuestro caso, para saber que puerto es el que envía la señal DTMF, debemos acudir

a la hoja de dados del ATMEGA8 y buscamos el puerto con características OC1, para

nuestro AVR es el pin B.1.

52

Page 61: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

En la figura siguiente se muestra el diagrama básico de conexión para poder hacer una

llamada telefónica:

La resistencia de 560Ohm a 1 vatio paralela a la red telefónica, sirve para simular la

carga de un teléfono normal, y con esto podremos tener el tono de marcado necesario

para hacer la llamada, además notarán que esta resistencia empieza a disipar calor en

el momento que se une a la red telefónica, esto debido a la cantidad de voltaje que

circula (60 voltios).

El relé hace la conexión y desconexión de la red telefónica, que en este caso sería

como el auricular que cuelga y descuelga el teléfono.

El filtro de 1 uF a 100 voltios, sirve para poder mejorar la onda que sale del AVR y

además como protección para el AVR. Es importante indicar que la red telefónica

suministra alrededor de 60 voltios en DC, por lo que el capacitor debe pasar de 60

voltios y además el lado positivo de la red telefónica debe ir a tierra del AVR y el

negativo hacía el pin del AVR, por lo que necesitaremos la ayuda de un voltímetro

para poder identificar la polaridad de la red.

$regfile = "m8def.dat"

$crystal = 1000000

$baud = 19200

$hwstack = 32 $swstack = 10

$framesize = 40

Config Portb = Output

' creo una cadenan de caracteres

Dim Numero As String * 9

' numero a marcar

Numero = "123456789"

Do

' duracion de 50ms por cada digito

Dtmfout Numero , 50

Waitms 500

Loop

53

Page 62: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Para solucionar este inconveniente se propone el diagrama de la figura, este es un

diagrama más completo en el que la polaridad de la línea no es un problema, puesto que

dispone un puente de diodos en donde el lado positivo ya está unido a tierra y el lado

negativo va a través del filtro hacia el AVR.

Este proyecto es muy utilizado en sistemas de seguridad, se puede hacer una alarma, la

cual en el momento de violar su seguridad, este realice automáticamente una llamada al

propietario, el propietario en el momento de contestar escuchará una sirena, señal

suficiente para saber que alguien ha activado la alarma, este mismo principio utilizan las

centrales de monitoreo, con la diferencia que en vez de generar un sonido de sirena, se

envía datos en forma serial como: Zona de apertura, hora, estado de batería, etc.

LECTURA DE UN TECLADO DE 16 PULSADORES CON

DISPLAY DED 7 SEGMENTOS

La mayoría de las aplicaciones de Controlador pequeñas utilizar uno o más botones o

interruptores de entrada del usuario. Cuando las cosas van un poco más complicadas, un

pequeño teclado puede ser una buena solución. Estos teclados vienen en 3x4 o 4x4

variantes, más a menudo el keyswitches están dispuestos en una matriz.

54

Page 63: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

La matriz se utiliza, ya que minimiza el número de conexiones desde el teclado al

controlador. Un teclado 4x4 tiene 16 keyswitches. Usted podría cablear los 16

keyswitches al controlador, pero una solución más inteligente es el de organizar las

claves en una matriz y luego conectar las cuatro columnas y filas al controlador.

Los teclados matriciales son muy útiles para ingresar datos, un ejemplo es el teclado del

computador, el teclado de una alarma que nos permite armar y desarmar un sistema de

seguridad, el teclado de una caja fuerte, el de una cerradura eléctrica, etc. Para

introducirnos en el manejo de un teclado, haremos un proyecto para aprender a

identificar filas y columnas que lo componen un teclado hexadecimal de 16 pulsadores,

y su correspondiente barrido de teclas, luego se visualizara en un display de 7

segmentos el número de la tecla presionado.

55

Page 64: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Como se puede ver este programa es un poco largo pero el uso de memoria es mínima

en el AVR.

El funcionamiento es sencillo, solo debemos fijarnos cual fila es la que esta en nivel

bajo y esta es la fila que se esta barriendo, si una de las condiciones encuentra la

igualdad, pues esta es la tecla pulsada.

Ejemplo: Si pulsamos la tecla 6, en algún momento se pondrá en bajo la fila B y

detectara un cambio de estado de 1 a 0 en la columna 3, por lo que:

A = 0

If Tres = 0 Then Portc = 3

$regfile = "m8def.dat"

$crystal = 1000000

' configuro puertos como salida

Ddrb = &B00001111

Portb = &B00001111

Config Portc = Output

A Alias Portb.0

B Alias Portb.1 C Alias Portb.2

D Alias Portb.3

Uno Alias Pinb.4

Dos Alias Pinb.5

Tres Alias Pinb.6

Cuatro Alias Pinb.7

Barrido:

A = 0

If Uno = 0 Then Portc = 1

If Dos = 0 Then Portc = 2

If Tres = 0 Then Portc = 3 If Cuatro = 0 Then Portc = 10

A = 1

B = 0

If Uno = 0 Then Portc = 4

If Dos = 0 Then Portc = 5

If Tres = 0 Then Portc = 6

If Cuatro = 0 Then Portc = 11

B = 1

C = 0

If Uno = 0 Then Portc = 7

If Dos = 0 Then Portc = 8

If Tres = 0 Then Portc = 9 If Cuatro = 0 Then Portc = 12

C = 1

D = 0

If Uno = 0 Then Portc = 14

If Dos = 0 Then Portc = 0

If Tres = 0 Then Portc = 15

If Cuatro = 0 Then Portc = 13

D = 1

Waitms 10

Goto Barrido

End

56

Page 65: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Debemos considerar que un persona requiere como mínimo 100 milisegundos para

presionar una tecla, en este tiempo el AVR realiza 10 barridos, por lo que de seguro

detectara inmediatamente la tecla pulsada.

Para el caso de utilizar un teclado de 12 pulsadores, debemos eliminar una columna, las

que corresponden a la tecla A, B, C y D, es decir eliminar las siguientes líneas de

programa.

If Cuatro = 0 Then Portc = 10

If Cuatro = 0 Then Portc = 11

If Cuatro = 0 Then Portc = 12

If Cuatro = 0 Then Portc = 13

En este caso quedaría un teclado con pulsadores del 0 al 9 y dos teclas de propósito

especial, la tecla asterisco (*) y la tecla numeral (#).

CERRADURA ELECTRÓNICA CON CLAVE EN

MEMORIA FLASH

Este es un proyecto aplicable en seguridad, se trata de una cerradura electrónica en la

cual al ingresar los 4 dígitos correctamente en su teclado, el AVR energiza un relé, pero

si la clave es incorrecta el AVR emite 3 pitos indicando que ingreso una clave errónea y

por supuesto que el relé no se conectara, para hacerlo mas interesante se le agregado

sonido a las teclas en el momento de ser pulsadas, esto sirve para que el usuario sepa

que el AVR reconoció la pulsación, también tiene un programa antirrebote de tecla para

asegurarse que ingrese una sola tecla a la vez.

El único inconveniente es que la clave no puede ser cambiada, ya que el numero de la

combinación (1, 2, 3, 4) se la grabó en el programa del AVR por lo que reside en la

memoria FLASH, mas adelante en los próximos proyectos la memoria podrá ser

cambiada a gusto del usuario, en tal caso este proyecto sirve para poder identificar y

diferenciar las 3 memorias que dispone el AVR.

57

Page 66: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

$regfile = "m8def.dat" $crystal = 4000000

' configuro puertos como salida

Dim Numero As Byte

Dim R As Byte

Config Portc = Output

Ddrb = &B00001111

Portb = &B00001111

Config Portc = Output

A Alias Portb.0

B Alias Portb.1

C Alias Portb.2 D Alias Portb.3

Uno Alias Pinb.4

Dos Alias Pinb.5

Tres Alias Pinb.6

Cuatro Alias Pinb.7

Bip Alias Portc.0

Led Alias Portc.1

Door Alias Portc.2

Iniciando:

Led = 1 : Bip = 1

Waitms 500 Led = 0 : Bip = 0

Goto Teclauno

Barrido:

A = 0

If Uno = 0 Then Numero = 1 : Return

If Dos = 0 Then Numero = 2 : Return

If Tres = 0 Then Numero = 3 : Return

If Cuatro = 0 Then Numero = 10 :

Return

A = 1 B = 0

If Uno = 0 Then Numero = 4 : Return

If Dos = 0 Then Numero = 5 : Return

If Tres = 0 Then Numero = 6 : Return

If Cuatro = 0 Then Numero = 11 :

Return

B = 1

C = 0

If Uno = 0 Then Numero = 7 : Return If Dos = 0 Then Numero = 8 : Return

If Tres = 0 Then Numero = 9 : Return

If Cuatro = 0 Then Numero = 12 :

Return

C = 1

D = 0

If Uno = 0 Then Numero = 14 :

Return

If Dos = 0 Then Numero = 0 : Return

If Tres = 0 Then Numero = 15 :

Return If Cuatro = 0 Then Numero = 13 :

Return

D = 1

Waitms 10

Goto Barrido

Ptecla:

Led = 1 : Bip = 1

Waitms 100

Led = 0 : Bip = 0

Espacio: If Uno = 0 Then Goto Espacio

If Dos = 0 Then Goto Espacio

If Tres = 0 Then Goto Espacio

If Cuatro = 0 Then Goto Espacio

Waitms 25

Return

58

Page 67: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Teclauno:

Gosub Barrido

Gosub Ptecla If Numero = 1 Then Goto Teclados

Goto Falso

Teclados:

Gosub Barrido : Gosub Ptecla

If Numero = 2 Then Goto Teclatres

Goto Falso1

Teclatres:

Gosub Barrido : Gosub Ptecla

If Numero = 3 Then Goto Teclacuatro Goto Falso2

Teclacuatro:

Gosub Barrido : Gosub Ptecla

If Numero = 4 Then Goto Openge

Goto Falso3

Openge:

For R = 1 To 2

Waitms 100

Led = 1 : Bip = 1

Waitms 100 Led = 0 : Bip = 0

Next

Door = 1

Wait 1

Door = 0

Goto Teclauno

Falso:

Gosub Barrido : Gosub Ptecla

Falso1:

Gosub Barrido : Gosub Ptecla Falso2:

Gosub Barrido : Gosub Ptecla

Falso3:

For R = 1 To 3

Wait 1

Led = 1 : Bip = 1

Wait 1

Led = 0 : Bip = 0

Next

Goto Teclauno

End

59

Page 68: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

CERRADURA ELECTRÓNICA CON CLAVE EN

MEMORIA RAM Y CAMBIO DE CLAVE

Este proyecto es muy similar al anterior con la diferencia que este se le puede cambiar

la clave predefinida (1, 2, 3, 4) por cualquier otra combinación de teclas, la clave

original será cargada en cuatro variables y existirá una manera de cambiar los valores de

estas variables lo cual se lo hace de la siguiente manera: después de haber colocado la

clave original, debemos mantener presionado la tecla D durante 2 segundos, para ser

más exactos en el momento que el relé se conecta después de 1 segundo hay una

pregunta si la tecla D es presionada ir a grabar, si no presionamos la tecla D a tiempo,

perderemos la oportunidad de cambiar la clave y tendremos que volver a repetir el

proceso, en el momento que ingresa al programa de cambio de clave se encenderá el led

y permanecerá encendido esperando a que ingresemos los 4 nuevos dígitos.

Es importante saber que la nueva clave se almacenara en las variables SETPRIME,

SETSEGUN, SETERCER y SETCUART, estas variables ocupan espacio de 224

BYTES, por lo tanto solo están activadas mientras el AVR se encuentra alimentado, una

vez que se corta la alimentación al AVR esta memoria de borra, por consiguiente al

momento de volver a prender el micro AVR, la nueva clave se nos habrá perdido y en

su lugar se encontrara la clave original (1, 2, 3, 4), esto debido a que esta clave se

encuentra en la memoria FLASH y en el momento de correr el programa lo carga

nuevamente en la memoria RAM para desde aquí poder ser modificada.

En cuanto a los materiales y el diagrama de conexión, son los mismos que se utilizaron

en el ejercicio anterior.

$regfile = "m8def.dat"

$crystal = 4000000

' configuro puertos como salida

Dim Numero As Byte Dim R As Byte

Config Portc = Output

Ddrb = &B00001111

Portb = &B00001111

Config Portc = Output

A Alias Portb.0

B Alias Portb.1

C Alias Portb.2

D Alias Portb.3

Uno Alias Pinb.4

Dos Alias Pinb.5

Tres Alias Pinb.6 Cuatro Alias Pinb.7

Bip Alias Portc.0

Led Alias Portc.1

Door Alias Portc.2

Dim Setprime As Byte

Dim Setsegu As Byte

Dim Setercer As Byte

Dim Setcuart As Byte

Setprime = 1

Setsegu = 2

Setercer = 3

Setcuart = 4

niciando:

Led = 1 : Bip = 1 Waitms 500

Led = 0 : Bip = 0

Goto Teclauno

Grabauno:

Gosub Ptecla : Led = 1

Gosub Barrido : Gosub Ptecla

Led = 1

Setprime = Numero

Grabados:

Gosub Barrido : Gosub Ptecla Led = 1

Setsegu = Numero

Grabatres:

Gosub Barrido : Gosub Ptecla

Led = 1

Setercer = Numero

60

Page 69: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Grabacuatro:

Gosub Barrido : Gosub Ptecla

Led = 1

Setcuart = Numero

Goto Iniciando

Barrido:

A = 0

If Uno = 0 Then Numero = 1 : Return

If Dos = 0 Then Numero = 2 : Return

If Tres = 0 Then Numero = 3 : Return

If Cuatro = 0 Then Numero = 10 :

Return

A = 1

B = 0

If Uno = 0 Then Numero = 4 : Return

If Dos = 0 Then Numero = 5 : Return

If Tres = 0 Then Numero = 6 : Return If Cuatro = 0 Then Numero = 11 :

Return

B = 1

C = 0

If Uno = 0 Then Numero = 7 : Return

If Dos = 0 Then Numero = 8 : Return

If Tres = 0 Then Numero = 9 : Return

If Cuatro = 0 Then Numero = 12 :

Return

C = 1

D = 0 If Uno = 0 Then Numero = 14 :

Return

If Dos = 0 Then Numero = 0 : Return

If Tres = 0 Then Numero = 15 :

Return

If Cuatro = 0 Then Numero = 13 :

Return

D = 1

Waitms 10

Goto Barrido

Ptecla: Led = 1 : Bip = 1

Waitms 100

Led = 0 : Bip = 0

Espacio:

If Uno = 0 Then Goto Espacio

If Dos = 0 Then Goto Espacio

If Tres = 0 Then Goto Espacio

If Cuatro = 0 Then Goto Espacio

Waitms 25

Return

Teclauno:

Gosub Barrido

Gosub Ptecla

If Numero = Setprime Then Goto

Teclados

Goto Falso

Teclados:

Gosub Barrido : Gosub Ptecla If Numero = Setsegu Then Goto

Teclatres

Goto Falso1

Teclatres:

Gosub Barrido : Gosub Ptecla

If Numero = Setercer Then Goto

Teclacuatro

Goto Falso2

Teclacuatro:

Gosub Barrido : Gosub Ptecla If Numero = Setcuart Then Goto

Openge

Goto Falso3

Openge:

For R = 1 To 2

Waitms 100

Led = 1 : Bip = 1

Waitms 100

Led = 0 : Bip = 0

Next Door = 1

Wait 1

Door = 0

A = 1 : B = 1 : C = 1 : D = 1

If Cuatro = 0 Then Goto Grabauno

Goto Teclauno

Falso:

Gosub Barrido : Gosub Ptecla

Falso1:

Gosub Barrido : Gosub Ptecla Falso2:

Gosub Barrido : Gosub Ptecla

Falso3:

For R = 1 To 3

Wait 1

Led = 1 : Bip = 1

Wait 1

Led = 0 : Bip = 0

Next

Goto Teclauno

End

61

Page 70: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

CERRADURA ELECTRÓNICA CON CLAVE EN

MEMORIA EEPROM Y CAMBIO DE CLAVE

Una vez aprendido acerca de las 2 memoria anteriores, es el momento de aprender a

utilizar la memoria EEPROM (Electrical Erasable Programable Read Only Memory), o

memoria de lectura de programación y borrado eléctrico, que a diferencia de la memoria

RAM, esta no es volátil y tiene capacidad para 128 Bytes, lo que quiere decir que si al

AVR se le corta la alimentación, los datos almacenados en la memoria EEPROM,

permanecen según su fabricante por un periodo de 40 años a 100 años.

Este proyecto cumple todas las expectativas de un estudiante de micros, tiene la

posibilidad de cambiar la clave y no borrarse, si se digita una clave errónea el teclado se

bloquea y únicamente lo desbloqueamos presionando al mismo tiempo las teclas 7 y C

por 2 segundos, así mismo para cambiar la clave procedemos como en el proyecto

anterior, presionando la tecla D.

Algo importante es que si nos olvidamos la clave, la única manera de recuperarlo es

leyendo el contenido del AVR a través de un programador.

En cuanto a los materiales y el diagrama de conexión, son los mismos que se utilizaron

en el proyecto anterior.

LA DECLARACIÓN WRITEEEPROM Y READEEPROM

WRITEEEPROM: escribe un contenido variable en DATA EEPROM.

SINTAXIS: WRITEEEPROM variable, dirección

WRITEEEPROM 137, 8 quiere decir guardar en la dirección 8 de la memoria

EEPROM el número 137, si existiera un dato anterior en esta dirección, se borrara.

READEEPROM: lee el contenido de la EEPROM y lo almacena en una variable

SINTAXIS: READEEPROM variable, dirección

READEEPROM pepe, 5 quiere decir leer la dirección 5 de la memoria EEPROM y

guardar en la variable pepe, por consiguiente pepe se carga con el dato que esta

almacenado en la dirección.

62

Page 71: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

$regfile = "m8def.dat" $crystal = 4000000

$eeprom

' configuro puertos como salida

Dim Numero As Byte

Dim R As Byte

Config Portc = Output

Ddrb = &B00001111

Portb = &B00001111

Config Portc = Output

A Alias Portb.0

B Alias Portb.1

C Alias Portb.2 D Alias Portb.3

Uno Alias Pinb.4

Dos Alias Pinb.5

Tres Alias Pinb.6

Cuatro Alias Pinb.7

Bip Alias Portc.0

Led Alias Portc.1

Door Alias Portc.2

Dim Setprime As Byte

Dim Setsegu As Byte

Dim Setercer As Byte Dim Setcuart As Byte

Setprime = 1

Setsegu = 2

Setercer = 3

Setcuart = 4

Dim Eeprom1 As Byte

Dim Eeprom2 As Byte

Dim Eeprom3 As Byte

Dim Eeprom4 As Byte

Eeprom1 = 1

Eeprom2 = 2

Eeprom3 = 3 Eeprom4 = 4

Iniciando:

For R = 1 To 2

Led = 1 : Bip = 1

Waitms 500

Led = 0 : Bip = 0

Waitms 150

Next

Writeeeprom Eeprom1 , 0

Writeeeprom Eeprom2 , 1 Writeeeprom Eeprom3 , 2

Writeeeprom Eeprom4 , 3

Reseteo:

For R = 1 To 3

Led = 1 : Bip = 1

Waitms 50

Led = 0 : Bip = 0

Waitms 50

If Cuatro = 0 And Uno = 0 Then Goto

Reseteo

Next

Readeeprom Setprime , 0

Readeeprom Setsegu , 1 Readeeprom Setercer , 2

Readeeprom Setcuart , 3

Goto Teclauno

Grabauno:

Gosub Ptecla : Led = 1

Gosub Barrido : Gosub Ptecla

Led = 1

Writeeeprom Numero , 0

Grabados:

Gosub Barrido : Gosub Ptecla Led = 1

Writeeeprom Numero , 1

Grabatres:

Gosub Barrido : Gosub Ptecla

Led = 1

Writeeeprom Numero , 2

Grabacuatro:

Gosub Barrido : Gosub Ptecla

Led = 1 Writeeeprom Numero , 3

Goto Reseteo

Barrido:

A = 0

If Uno = 0 Then Numero = 1 : Return

If Dos = 0 Then Numero = 2 : Return

If Tres = 0 Then Numero = 3 : Return

If Cuatro = 0 Then Numero = 10 :

Return

A = 1 B = 0

If Uno = 0 Then Numero = 4 : Return

If Dos = 0 Then Numero = 5 : Return

If Tres = 0 Then Numero = 6 : Return

If Cuatro = 0 Then Numero = 11 :

Return

B = 1

C = 0

If Uno = 0 Then Numero = 7 : Return

If Dos = 0 Then Numero = 8 : Return

If Tres = 0 Then Numero = 9 : Return If Cuatro = 0 Then Numero = 12 :

Return

C = 1

D = 0

If Uno = 0 Then Numero = 14 :

Return

If Dos = 0 Then Numero = 0 : Return

If Tres = 0 Then Numero = 15 :

Return

If Cuatro = 0 Then Numero = 13 :

63

Page 72: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Return D = 1

Waitms 10

Goto Barrido

Ptecla:

Led = 1 : Bip = 1

Waitms 100

Led = 0 : Bip = 0

Espacio:

If Uno = 0 Then Goto Espacio

If Dos = 0 Then Goto Espacio If Tres = 0 Then Goto Espacio

If Cuatro = 0 Then Goto Espacio

Waitms 25

Return

Teclauno:

Gosub Barrido

Gosub Ptecla

If Numero = Setprime Then Goto

Teclados

Goto Falso

Teclados:

Gosub Barrido : Gosub Ptecla

If Numero = Setsegu Then Goto

Teclatres

Goto Falso1

Teclatres:

Gosub Barrido : Gosub Ptecla

If Numero = Setercer Then Goto

Teclacuatro

Goto Falso2

Teclacuatro:

Gosub Barrido : Gosub Ptecla

If Numero = Setcuart Then Goto

Openge

Goto Falso3

Openge:

For R = 1 To 2

Waitms 100

Led = 1 : Bip = 1 Waitms 100

Led = 0 : Bip = 0

Next

Door = 1

Wait 1

Door = 0

A = 1 : B = 1 : C = 1 : D = 1

If Cuatro = 0 Then Goto Grabauno

Goto Teclauno

Falso:

Gosub Barrido : Gosub Ptecla Falso1:

Gosub Barrido : Gosub Ptecla

Falso2:

Gosub Barrido : Gosub Ptecla

Falso3:

For R = 1 To 3

Waitms 150

Led = 1 : Bip = 1

Waitms 15

Led = 0 : Bip = 0

A = 1 : B = 1 : C = 1 : D = 1

If Cuatro = 0 And Uno = 0 Then Goto Reseteo

Next

Panico:

Led = 1

Waitms 500

Led = 0

Waitms 500

A = 1 : B = 1 : C = 1 : D = 1

If Cuatro = 0 And Uno = 0 Then Goto

Reseteo Goto Panico

End

64

Page 73: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

MOTORES PASO A PASO

¿QUÉ ES UN MOTOR PASO A PASO?

Como todo motor, es en esencia un conversor electromecánico, que transforma la

energía eléctrica en mecánica; pero de un modo tan peculiar que constituye en la

actualidad una categoría aparte. En efecto, mientras que un motor convencional gira

libremente al aplicar una tensión comprendida dentro de ciertos límites (que se

corresponden de un lado al par mínimo capaz de vencer su propia inercia mecánica, y de

otro a sus propias limitaciones de potencia); el motor paso a paso está concebido de tal

manera que gira un determinado ángulo proporcional a la "codificación" de tensiones

aplicadas a sus entradas (4, 6, etc.). La posibilidad de controlar en todo momento esta

codificación permite realizar desplazamientos angulares lo suficientemente precisos,

dependiendo el ángulo de paso (o resolución angular) del tipo de motor (puede ser tan

pequeño como 1,80º hasta unos 15º). De este modo, si por ejemplo el número de grados

por paso es de 1,80º, para completar una vuelta serán necesarios 200 pasos.

De la misma manera que se puede posicionar el eje del motor, es posible controlar la

velocidad del mismo, la cual será función directa de la frecuencia de variación de las

codificaciones en las entradas. De ello se deduce que el motor paso a paso presenta una

precisión y repetitividad que lo habilita para trabajar en sistemas abiertos sin

realimentación.

MOTORES PASO A PASO BIPOLARES

En el esquema de la figura 4 aparece uno de estos motores con dos estatores, sobre cada

uno de los cuales se ha devanado una bobina (1 y U), las cuales se encuentran

conectadas directamente a unos conmutadores de control que, como se verá más

adelante, podrán ser sustituidos por las líneas de entrada y salida de nuestro ordenador

debidamente programadas. Como las bobinas se encuentran distribuidas simétricamente

en torno al estator, el campo magnético creado dependerá en magnitud de la intensidad

de corriente por cada fase, y en polaridad magnética, del sentido de la corriente que

circule por cada bobina. De este modo el estator adquiere la magnetización

correspondiente, orientándose el rotor según ella (fig. 4a). Si el interruptor 1.1 se

65

Page 74: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

conmuta a su segunda posición (fig. 4b), se invierte el sentido de la corriente que circula

por T y por tanto la polaridad magnética, volviéndose a reorientar el rotor (el campo ha

sufrido una rotación de 90º en sentido antihorario, haciendo girar el rotor 90º en ese

mismo sentido). Con esto se llega a la conclusión de que para dar una vuelta completa

serían necesarios cuatro pasos de 90º cada uno (el ciclo completo se puede seguir en la

figura 4a,b,c,d).Ahora bien, este tipo de motores también puede funcionar de un modo

menos "ortodoxo", pero que nos va a permitir doblar el número de pasos, si bien a costa

de la regularidad del par. Esto se consigue de la siguiente manera: en principio, al igual

que en el anterior fondo de funcionamiento, por los devanados T y U se hace circular

una corriente, de tal modo que el estator adquiere la magnetización correspondiente y

por lo tanto el rotor se orienta según ella. Ahora bien, al contrario que en el caso

anterior, antes de conmutar el interruptor I.1 a su segunda posición, se desconectará el

devanado T, reorientándose por consiguiente el rotor, pero la mitad de un paso (45º).

66

Page 75: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

MOTORES PASO A PASO UNIPOLARES

Los motores paso a paso unipolares, en cuanto a construcción son muy similares a los

anteriormente descritos excepto en el devanado de su estator (fig. 5). En efecto, cada

bobina del estator se encuentra dividida en dos mediante una derivación central

conectada a un terminal de alimentación. De este modo, el sentido de la corriente que

circula a través de la bobina y por consiguiente la polaridad magnética del estator viene

determinada por el terminal al que se conecta la otra línea de la alimentación, a través

de un dispositivo de conmutación. Por consiguiente las medias bobinas de conmutación

hacen que se inviertan los polos magnéticos del estator, en la forma apropiada. Nótese

que en vez de invertir la polaridad de la corriente como se hacía en los M.P.P. bipolares

se conmuta la bobina por donde circula dicha corriente.

67

Page 76: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Al igual que los M.P.P. bipolares, es posible tener resoluciones de giro correspondientes

a un semipaso. Ahora bien, dado que las características constructivas de estos motores

unipolares son idénticas a las de los bipolares, se puede deducir que los devanados tanto

en uno como otro caso ocuparán el mismo espacio, y por tanto es evidente que por cada

fase tendremos menos vueltas o bien el hilo de cobre será de una sección menor. En

cualquiera de los dos casos se deduce la disminución de la relación de amperios/vuelta.

Por tanto, a igualdad de tamaño los motores bipolares ofrecen un mayor par.

68

Page 77: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

SECUENCIA DEL CIRCUITO DE CONTROL

Existen dos formas básicas de hacer funcional los motores paso a paso atendiendo al

avance del rotor bajo cada impulso de excitación:

Paso completo (full step): El rotor avanza un paso completo por cada pulso de

excitación y para ello su secuencia ha de ser la correspondiente a la expuesta

anteriormente, para un motor como el de la Figura 2, y que se presentada de forma

resumida en la Tabla 1 para ambos sentidos de giro, las X indican los interruptores que

deben estar cerrados (interruptores en ON), mientras que la ausencia de X indica

interruptor abierto (interruptores en OFF).

Medio paso (Half step): Con este modo de funcionamiento el rotor avanza medio paso

por cada pulso de excitación, presentando como principal ventaja una mayor resolución

de paso, ya que disminuye el avance angular (la mitad que en el modo de paso

completo). Para conseguir tal cometido, el modo de excitación consiste en hacerlo

alternativamente sobre dos bobinas y sobre una sola de ellas, según se muestra en la

Tabla siguiente para ambos sentidos de giro.

69

Page 78: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

MANEJO DE UN MOTOR PASO A PASO EN SECUENCIA

WAVE DRIVE

$regfile = "m8def.dat"

$crystal = 4000000

$eeprom

Dim X As Byte

Config Portc = Output

Antihorario:

For X = 1 To 12

Portc = &B0001

Gosub Pausa Portc = &B0010

Gosub Pausa

Portc = &B0100

Gosub Pausa

Portc = &B1000

Gosub Pausa

Next

Wait 1

For X = 1 To 12

Portc = &B1000

Gosub Pausa

Portc = &B0100

Gosub Pausa

Portc = &B0010

Gosub Pausa

Portc = &B0010

Gosub Pausa Next

Wait 1

Goto Antihorario

Pausa:

Waitms 100

Return

End

Page 79: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

MANEJO DE UN MOTOR PASO A PASO EN SECUENCIA

FULL STEP

MANEJO DE UN MOTOR PASO A PASO EN SECUENCIA

HALF STEP

$regfile = "m8def.dat"

$crystal = 4000000

$eeprom

Dim X As Byte

Config Portc = Output

Antihorario:

For X = 1 To 12

Portc = &B0011

Gosub Pausa

Portc = &B0110

Gosub Pausa Portc = &B1100

Gosub Pausa

Portc = &B1001

Gosub Pausa

Next

Goto Antihorario

Pausa:

Waitms 100

Return

End

$regfile = "m8def.dat"

$crystal = 4000000

$eeprom

Dim X As Byte

Config Portc = Output

Antihorario:

For X = 1 To 12 Portc = &B0001

Gosub Pausa

Portc = &B0011

Gosub Pausa

Portc = &B0010

Gosub Pausa

Portc = &B0110

Gosub Pausa

Portc = &B0100

Gosub Pausa

Portc = &B1100

Gosub Pausa

Portc = &B1000

Gosub Pausa

Portc = &B1100

Gosub Pausa

Portc = &B1000

Gosub Pausa Portc = &B1001

Gosub Pausa

Next

Goto Antihorario

Pausa:

Waitms 100

Return

End

70

Page 80: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

COMUNICACIÓN

QUE ES LA COMUNICACIÓN SERIAL?

RS-232 es hoy en día un estándar de comunicación antiguo. Es sorprendente que una

norma, definida en los años sesenta, es aún ampliamente utilizado hoy en día.

Formalmente no obstante, el nombre de RS-232 no es aplicable a una norma. Una

organización estadounidense, ahora conocida como la Asociación de Industrias

Electrónicas, propuso una forma de comunicación entre grandes ordenadores centrales y

periféricos tales como terminales La propuesta se llama un nivel recomendado y 232 no

era más que un número de identificación. Mucho más tarde esto se convirtió en una

norma oficial, la EIA-232. En 1991, la versión más reciente, la EIA-232E fue publicado.

Sin embargo, el nombre de RS-232 es aún ampliamente utilizado.

Una tensión entre -3 y -25 voltios es una lógica de un (1)

Una tensión entre 3 y 25 voltios es una lógica de cero (0)

UART

UART medio receptor asíncrono de transmisor universal. Es el final de hardware en

ambos lados de un puerto RS-232 enlace de comunicación. En el PC o cualquier otro

equipo que es un chip en la placa base, bajo el control de la CPU. En el controlador de

AVR es una pequeña área en el chip dedicada a esta función.

En el ATMEGA8 el UART está conectado al pin 2 (RXD) y 3 (TXD). Como estos

pines también funcionan como de propósito general de E / S PortD.0 y PortD.1, tendrá

que sacrificar algunas de E / S si usted necesita el UART. Un UART se encarga de

enviar y recibir bits. Cuando se recibe, se determina cuándo se muestra el RxD PIN para

determinar si se recibe cero o uno. Cuando se transmite, la UART lee un byte del búfer

de transmisión y envía los bits que corresponden con el momento apropiado para el RS-

232 de velocidad seleccionada.

71 72

Page 81: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Un convertidor de nivel genera las tensiones necesarias para cumplir con los niveles Del

RS-232. También se invierte la lógica de los niveles. El MAX232 usa interiormente,

convertidores de conmutación y dobladores de voltaje para generar niveles de alrededor

de -9 y 9 voltios. Estas tensiones se encuentran claramente dentro del rango requerido.

MODOS DE TRANSMISIÓN DE DATOS

Simplex: se dice a la transmisión que puede ocurrir en un solo sentido, sea sólo para

recibir o sólo para transmitir. Una ubicación pude ser un transmisor o un receptor, pero

no ambos a la vez, un ejemplo claro es la radiodifusión, en donde la estación es el

transmisor y los radios son los receptores.

Half-duplex: se refiere a la transmisión que puede ocurrir en ambos sentidos, pero no al

mismo tiempo, en donde una ubicación puede ser transmisor o un receptor, pero no los

dos al mismo tiempo, un ejemplo son los llamados radios WALKING TALKING, en

donde un operador presiona el botón y habla, luego suelta el botón y el otro usuario

presiona el botón para contestar.

Full-duplex: se dice a la transmisión que puede ocurrir en ambos sentidos y al mismo

tiempo, también se lo conoce con el nombre de líneas simultaneas de doble sentido, una

ubicación puede transmitir y recibir simultáneamente, siempre y cuando la estación a la

que está transmitiendo también sea la estación de la cual está recibiendo, un ejemplo es

la telefonía móvil.

73

Page 82: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Full/full-duplex: con este modo de transmisión es posible transmitir y recibir

simultáneamente, pero no necesariamente entre las dos ubicaciones, es decir una

estación puede transmitir a una segunda estación y recibir ded una tercera estación al

mismo tiempo. Esta transmisión se utiliza exclusivamente con circuitos de

comunicación de datos.

COMUNICACIÓN SERIAL AVR A PC

Una vez comprendido la teoría de la comunicación serial y su protocolo RS232,

haremos un ejercicio de comunicación serial asincrónico modo simplex, que consiste en

enviar datos, mas específicamente los caracteres ASCII de la palabra “DOG”, a través

de un cable y directamente desde el AVR al PC, a 2400 bits/seg, a 8 bits de datos, sin

paridad, y 1 bit de parada. Como sabemos el computador tiene al menos un puerto

serial, como la norma RS232, por lo tanto debemos simular esos voltajes desde el AVR,

esto lo conseguimos enviando 0 para representar el 1 lógico y 5V para representar el 0

lógico, para esto existe la declaración PRINT.

Print “D” envía el carácter ASCII “D” por el puerto de comunicación serial del AVR.

$baud = 19200 Digo que trabajare a 19200 bits/segundo.

$regfile = "m8def.dat"

$crystal = 1000000

$baud = 96000

Config Portb = Output

Inicio:

Portb.0 = 1

Wait 1 Portb.0 = 0

Waitms 500

' envio datos en forma serial

Print "DOG"

Goto Inicio

End

74

Page 83: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

BASCOM nos ofrece una herramienta para poder simular la comunicación serial, para

ello nos vamos a Tools / Terminal Emulator

Debemos configurar el terminal, para ello damos un clic en Terminal y se presentara la

siguiente ventana de configuración. Terminal / Setting

75

Page 84: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

COMUNICACIÓN SERIAL PC A AVR

Si usted tubo problemas con el envió de datos del AVR al PC, este proyecto de seguro

le funcionara, se trata de enviar datos desde el PC al AVR, por lo que es de suponerse

los voltajes serán desde -10V hasta +10V y la distancia podemos extenderlo hasta 15

metros sin ningún problema, como la conexión es directamente al AVR debemos

colocar una resistencia de 22K para no dañar el puerto del AVR. En este caso el AVR es

un receptor por lo que debemos permanecer en espera del bit de inicio, para esto

tenemos la declaración SERIN.

DECLARACIÓN SERIN: esta declaración sirve para recibir datos seriales en un

formato estándar asíncrono.

Mybaud = 19200

Serin S , 0 , D , 0 , Mybaud , 0 , 8 , 1

' ^ 1 stop bit

' ^---- 8 data bits

' ^------ even parity (0=N, 1 = E, 2=O)

' ^-------------- baud rate

' ^-------------------- pin number

' ^----------------------- port so PORTd.0 and PORTd.1 son usados

' ^--------------------------- for strings pass 0

' ^-------------------------------- variable

76

Page 85: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

COMUNICACIÓN I²C

I²C significa Inter-IC. e trata de un desarrollo de Philips, que comenzó en los años

ochenta. En aquellos días la electrónica de consumo, como televisores y la radio pasó

por una fase rápida de conseguir más y más usuarios. Lotes de circuitos integrados se

han añadido a estos productos como consecuencia de cableado más complicado en un

circuito impreso de hacinamiento. Philips considera que un bus serie simple era una

solución posible. En lugar de buses de acoplamiento en paralelo IC, todos estos LED's

se conectan a un bus de dos hilos. El bus de dos hilos tiene un cable de datos y de un

reloj, llaman SDA y SCL, respectivamente.

En 1992, el estándar I²C utiliza un esquema de siete bits para el direccionamiento,

permitiendo 128 CI a ser conectados a un bús.

$regfile = "m8def.dat"

$crystal = 1000000

Dim Dat As Byte

Dim Mybaud As Integer

Mybaud = 9600

Config Lcd = 16 * 2

Config Lcdpin = Pin , Db4 = Portb.1 ,

Db5 = Portb.2

Config Lcdpin = Pin , Db6 = Portb.3 , Db7 = Portb.4

Config Lcdpin = Pin , E = Portb.5 ,

Rs = Portb.6

Config Lcdmode = Port

' borrar la pantalla

Cls

' Presento en la lcd

Lcd " LCD listo"

Wait 1

Cls

Inicio:

Serin Dat , 0 , D , 0 , Mybaud , 0 , 8 ,

1

Lcd "Dat"

Goto Inicio

77

Page 86: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Direccion I²C

El número de CI en un bus I²C está limitado a 128, ya que cada IC necesita únicos siete

bits de dirección.

Estándar I²C

La norma original especifica una velocidad máxima en el bus de 100 kHz. En 1992, se

añadió un modo rápido con una velocidad máxima de 400 kHz. En 1998, una versión 2

fue lanzado. Esta versión tiene un modo de alta velocidad con un máximo de 3.4Mbit/s.

Mas sobre I²C

Philips tiene la patente en la I²C eso significa que otros fabricantes de chips que quieren

hacer IC I²C tienen que pagar regalías y deben firmar un acuerdo que indique que se

adhieren a los estándares I²C.

La mayoría de los controladores de AVR de Atmel tiene una interfaz de dos hilos, por

lo menos eso es lo que dice la documentación. Esto es por supuesto una interfaz I²C.

La norma I²C prescribe resistencias en SDA y la línea SCL. Este es uno de los errores

más comunes de la primera vez que utiliza una interfaz de I²C. Olvídese de los "push-

pull y su interfaz no funcionará.

78

Page 87: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

La longitud máxima de los cables de bus I²C no está en la norma. Sólo dice que para la

variante de 100 kHz, la capacidad total del cableado de bus y los dispositivos

conectados no debe exceder 400pF.

COMUNICACIÓN I²C CON UNA MEMORIA SERIAL 24L04B

Esta es una practica muy básica para aprender sobre la interfaz I²C, consiste en guardar

datos es las cuatro primeras direcciones de la memoria serial, estas son utilizadas para el

almacenamiento de datos que pueden ser necesitados más adelante. Para el caso de la

memoria 24LC04B tiene un espacio de memoria de 4Kbytes, luego de almacenarlos los

volveremos a leer y mostrar en la pantalla LCD.

Referencia Capacida

d

Ciclos de

E/W

Bloques

Internos

Dirección Cantidad

de

disposit.

En el bus

Voltaje de

operación A0 A1 A2

24LC01B 1K bits 1000000 1 1-0 1-0 1-0 8 2.5-5.5V

24LC02B 2 K bits 1000000 1 1-0 1-0 1-0 8 2.5-5.5V

24LC04B 4 K bits 1000000 2 x 1-0 1-0 4 2.5-5.5V

24LC08B 8 K bits 1000000 4 x x 1-0 2 2.5-5.5V

24LC016B 16 K bits 1000000 8 x x x 1 2.5-5.5V

El principio de funcionamiento es el siguiente: primero se envía el star (bit de arranque)

cada palabra puesta en el bus SDA debe tener 8 bits, la primera palabra transferida debe

contener la dirección del esclavo seleccionado, en este caso se envía el código de la

memoria 1010 (este dato lo suministra el fabricante), luego la dirección del dispositivo

(A2, A1, A0), y un bit 0 indicando que se debe escribir en la memoria (1 = lectura),

luego de todo esto la memoria, debe enviar un reconocimiento para informar al

microcontrolador que recibió la información, este acuse de recibo se denomina ACK

(acknowledge).

79

Page 88: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Luego el master lee el ACK, si vale 0 (enviado por el esclavo), el proceso de

transferencia continúa. Si vale 1, esto indica que el circuito direccionado no valida la

comunicación, entonces es Master genera un bit de stop para liberar el bus I²C, en la

cual las líneas SDA y SCL pasan a un estado alto, vamos a suponer que el ACK es 0,

entonces el microcontrolador envía los 8 bits correspondientes a la posición de memoria

que se desea escribir a leer, nuevamente la memoria envía un reconocimiento,

finalmente se envía el dato a ser almacenado y se espera la respuesta de la memoria

indicando que el dato llegó correctamente, finalmente se debe enviar el bit de parada.

DECLARACIÓN

I2CSTART genera una condición de inicio.

I2CSTOP genera una condición de parada

I2CRBYTE recibe un byte de un dispositivo.

I2CWBYTE envía un byte a un dispositivo.

80

Page 89: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

En este casi vamos a escribir y leer en la memoria, por lo que el pin WP debe estar

colocado en estado bajo, una vez que se haya grabado se podrá colocar este pin en

estado alto para proteger la memoria de futuras escrituras, los datos almacenados en esta

memoria permanece aun si se le corta la alimentación al CI, el acceso a estos datos se lo

realiza las veces deseadas, recuerde que la memoria serial soporta 1000000 de ciclos de

borrado y escritura, por lo tanto se debe tener cuidado de no ejecutar un programa que

almacene una y otra vez el mismo dato.

Config Sda = Portb.5

Dim Dato As Byte

Dim Dato1 As Byte

Dato = 2

Dato1 = 0

Wait 5

Do

Cursor Off Noblink

' escribo en la memoria

' genere inicio

I2cstart ' direccion del esclavo

I2cwbyte &B10100000

' direccion de eeprom

I2cwbyte 0

' valor a escribir

I2cwbyte Dato

' genere parada

I2cstop

Waitms 10

' leo la memoria

I2cstart

I2cwbyte &B1010_0000 I2crbyte Dato1 , Nack

I2cstop

Cls

Lcd " DATO " ; Dato1

Wait 2

Cls

Loop

81

Page 90: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

INTERRUPCIONES

Suponga que tiene un programa de Bascom que se encuentra en un bucle haciendo algo

complicado y requiere mucho tiempo. Usted quiere ser capaz de detener esta tarea y

cambiar el programa para hacer algo más. La solución de hardware obvia es añadir un

botón STOP para su AVR.

Normalmente, se pulsa el botón con el siguiente fragmento de programa:

...

Config Pind.2 as Input

... ...

Do

... ...

...someting complicated... ...

... ...

If Pind.2 = 0 Then

Lcd "Stop!"

Goto Othertask

End If

Loop

... ...

OtherTask:

... ...

82

Page 91: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

El problema fundamental de este ejemplo es que podemos pasar tanto tiempo haciendo

la tarea complicada, que al pulsar el botón STOP a menudo no se detecta cuando se

pulso el Boton de stop. Obviamente necesitamos otro mecanismo para reaccionar a

pulsar el botón STOP de manera independiente del programa principal. Las

interrupciones son para cambiar el flujo del programa para responder a externos, así

como eventos de controlador interno

$regfile = "m8def.dat"

$crystal = 1000000

$hwstack = 32

$swstack = 10

$framesize = 40 Config Lcd = 16 * 2

Config Lcdpin = Pin , Db4 = Portb.1 , Db5 = Portb.2

Config Lcdpin = Pin , Db6 = Portb.3 , Db7 = Portb.4

Config Lcdpin = Pin , E = Portb.5 , Rs = Portb.6

Config Lcdmode = Port

Config Pind.6 = Output

Config Pind.2 = Input

Config Int0 = Falling

Dim Wtime As Byte

On Int0 Stopbutton

Cls

Wtime = 255 Enable Interrupts

Enable Int0

Do

Set Portd.6

Waitms Wtime

Reset Portd.6

Waitms Wtime

Loop

Stopbutton:

Lcd "stop!" Wait 1

Cls

Return

End

83

Page 92: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

SLEEP Y WAKE-UP, WATCH DOG

Se utilizan normalmente en aplicaciones de batería cuando el controlador no tiene nada

que hacer y desea ahorrar energía.

El ATMEGA8 puede hacer el SLEEP de dos maneras:

La declaración de inactividad se detiene el reloj del controlador, pero la UART,

las interrupciones externas y el temporizador / contador de interrupciones seguir

funcionando. Todas estas interrupciones pueden despertar el controlador.

Wake-up detiene el reloj del controlador, pero las interrupciones externas se

mantienen funcionando y puede despertar el controlador,

Después de parpadear el LED y escribir un mensaje a la pantalla LCD,

Desmantelamiento "se utiliza para detener el reloj del controlado. Al pulsar el botón se

despierta el controlador

$regfile = "m8def.dat"

$crystal = 1000000

Config Lcd = 16 * 2

Config Lcdpin = Pin , Db4 = Portb.1 ,

Db5 = Portb.2

Config Lcdpin = Pin , Db6 = Portb.3 ,

Db7 = Portb.4

Config Lcdpin = Pin , E = Portb.5 ,

Rs = Portb.6

Config Lcdmode = Port Config Pind.6 = Output

Config Int0 = Low Level

On Int0 Button

Enable Interrupts

Enable Int0

Do

Set Portd.6

Wait 1

Reset Portd.6

Cls Lcd "power apagado"

Lowerline

Lcd "push boton"

Powerdown

Loop

Button:

Cls

Lcd "despierta!"

Wait 1

Return

End

84

Page 93: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

WATCHDOG

Bascom puede proporcionar una función de vigilancia. n vigilante es un truco para

restablecer su control si el programa de alguna manera se atasca o "cuelga". Un

vigilante es un contador de tiempo que tendrá que ponerse a cero de vez en cuando. Si

se bloquea el programa, no será capaz de restablecer la vigilancia y cuando los tiempos

de vigilancia a cabo, se restablecerá el controlador. Esto a menudo se utiliza en

aplicaciones críticas donde tiene que estar seguro de que el controlador se reiniciará

pase lo que pase. Un programa decente debe lidiar con un tiempo de vigilancia en una

forma sensata. El tiempo de espera vigilante es una situación muy grave, tal vez causada

por un error de diseño de hardware o de software. En cualquier caso, cuando se utilizan

perros guardianes, siempre incluyen algún tipo de mecanismo de información, o bien

nunca se sabrá acerca de estos posibles errores.

Un organismo de control tiene que estar configurado para un tiempo de espera

específicas:

Config Watchdog 16 | 32 | 64 | 128 | 256 | 512 | 1024 | 2048

que van desde 16 hasta 2048 milisegundos.

El organismo de control tiene que ponerse a cero antes del tiempo de espera.

Reset Watchdog

Para evitar un reinicio del controlador.

El organismo de control puede ser iniciado y se detuvo con un

Start Watchdog

Stop Watchdog

$regfile = "m8def.dat"

$crystal = 1000000

Config Lcd = 16 * 2

Config Lcdpin = Pin , Db4 = Portb.1 ,

Db5 = Portb.2

Config Lcdpin = Pin , Db6 = Portb.3 , Db7 = Portb.4

Config Lcdpin = Pin , E = Portb.5 ,

Rs = Portb.6

Config Lcdmode = Port

Config Pind.6 = Output

Config Watchdog = 2048

Do

Cls

Set Portd.6

Wait 2

Reset Portd.6 Lcd "WD correr"

Lowerline

Lcd "wait 2 secs..."

Start Watchdog

Idle

Loop

End

85

Page 94: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

Después de que el perro guardián de inicio, el controlador se pone en Idle, detener el

reloj del controlador. Como el organismo de control se ejecuta en un reloj

independiente, se puede y se restablecerá el controlador después de app dos segundos.

CIRCUITO PROGRAMADOR DE AVR

PROGRAMADOR ISP

BASCOM soporta al STK200, STK200+ y STK300 programador ISP de Atmel.

Éste es un programador de puerto de impresora paralelo muy fiable. La mayoría de los

programas se probó con el STK200.

Para aquéllos que no tienen este equipo programador les muestro el esquema siguiente

de cómo hacer su propio programador.

86

Page 95: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

El PG302 es un programador serial. Funciona y se visualiza exactamente como el

software PG302.

Seleccione el programador en Opciones de menú del Programador, o clic derecho en el

botón o en las opciones del programa en el menú.

EJEMPLO DEL CABLE DE PROGRAMACIÓN

Este programador es muy simple y usted puede hacer dentro de 30 minutos. Lo que

necesitas es un terminal DB25 (conector macho), cable, conectores.

Las conexiones que se debe realizar son las siguientes.

La numeración del pin MCU son para los 8535 y 8515.

Usted puede usar una resistencia pequeña de 100-220 ohm en serie con la linea D0, D2

y D3 evitando un corto circuito que sus LPT ponen a babor en el evento cuando los

pines de MCU son altos. Se probó sin estas resistencias y ningún problema ocurrió.

El siguiente grafico muestra las conexiones a realizar:

87

Page 96: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

88

Page 97: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

CHIPS

Page 98: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

AT86RF401 Se muestra el entorno de distribución de pines, si desea información adicional se debe

buscar los Datasheet de los Chips en www.datasheetcatalog.com

AT90S1200

89

Page 99: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

AT90S2313

AT90S2323

90

Page 100: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

AT90S2333

AT90S2343

Cuando usas el AT90S2343 con Bascom-AVR y el STK200, el jumper del programador debe estar en ext-clk.

91

Page 101: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

AT90S4414

AT90S4433

92

Page 102: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

AT90S4434

AT90S8515

93

Page 103: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

AT90S8535

AT90PWM2-3

94

Page 104: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

AT90CAN128

95

Page 105: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

AT90USB162

ATtiny12

ATtiny13

96

Page 106: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATtiny15

ATtiny22

ATtiny24

ATtiny25

97

Page 107: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATtiny26

ATtiny44

ATtiny45

98

Page 108: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATtiny48

ATtiny84

ATtiny85

99

Page 109: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATtiny88

ATtiny261

100

Page 110: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATtiny861

ATtiny2313

ATMEGA8

101

Page 111: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATMEGA16

ATMEGA32

102

Page 112: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATMEGA32U

ATMEGA48

103

Page 113: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATMEGA48P

ATMEGA88

104

Page 114: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATMEGA88P

105

Page 115: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATMEGA64

106

Page 116: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATMEGA103

107

Page 117: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATMEGA128

ATMEGA1284P

108

Page 118: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATMEGA161

ATMEGA162

109

Page 119: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATMEGA163

ATMEGA164P

110

Page 120: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATMEGA165

ATMEGA168

111

Page 121: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATMEGA168P

ATMEGA169

112

Page 122: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATMEGA323

ATMEGA324P

113

Page 123: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATMEGA325

ATMEGA328P

114

Page 124: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATMEGA329

ATMEGA406

115

Page 125: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATMEGA603

116

Page 126: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATMEGA640

117

Page 127: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATMEGA644P

ATMEGA645

118

Page 128: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATMEGA649

119

Page 129: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATMEGA2560

120

Page 130: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATMEGA2561

121

Page 131: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATMEGA8515

ATMEGA8535

122

Page 132: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I

ATXMEGA128A1

123

Page 133: Turorial avr Bascom

Octavo Electrónica 2009 – 2010 FISEI - UTA

FI

SE

I