Turorial AVR
Turorial AVR
Turorial AVR
FISEI
FISEI - UTA
TABLA DE CONTENIDOS
INSTALACIN Instalacin de Bascom ... 1 INTRODUCCIN 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 PROGRAMACIN Obtener TWinAVR. . 9 Obtener Userport . 11 Configurar TWinAVR Bascom . 12 Como usar Bascom .. 13 Programa bsico para hacer parpadear un led con intervalos de 1 segundo .. 18 Un semforo de dos intersecciones 19 Juego de luces para discoteca 21 Ejercicio con la instruccin FOR NEXT .. 23 LAS VARIABLES BIT, BYTE Y WORD 23 Luces del auto fantstico 24 Ejercicios con pulsadores .. 25 La declaracin IF THEN .. 25 Contador binario con pulsador antirrebote 27
FISEI
FISEI - UTA
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 Declaracin 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 (rotulacin) 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 Generacin de sonido . 49 Una sirena policial .. 50 Generacin de un timbre de telfono celular .. 51 Llamada telefnica DTMF 51 La declaracin DTMFOUT ... 52 Lectura de un teclado de 16 pulsadores con display ded 7 segmentos . 54 Cerradura electrnica con clave en memoria flash .. 57 Cerradura electrnica con clave en memoria ram y cambio de clave 60 Cerradura electrnica con clave en memoria eeprom y cambio de clave .. 62 La declaracin WRITEEEPROM y READEEPROM ... 62 MOTORES PASO A PASO Que es un motor Paso a paso 65 Motores paso a paso bipolares . 65
FISEI
FISEI - UTA
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 COMUNICACIN Que es la comunicacin serial? .. 72
FISEI
FISEI - UTA
FISEI
FISEI - UTA
FISEI
FISEI - UTA
INSTALACIN
INSTALACIN DE BASCOM Despus de que usted ha descargado el archivo ZIP que usted necesita, debe ABRIR el archivo. En Windows XP, para la versin de la DEMOSTRACIN, corra los setupdemo.exe. (http://www.atmel.com : (http://www.ckuehnel.ch)
Click en el botn Next para seguir la instalacin. Aparecer la ventana de informacin de la licencia.
FISEI
FISEI - UTA
Leer las instrucciones, selecciones 'I accept the agreement' y presione el botn NEXT. La ventana siguiente se mostrar
Usted puede seleccionar la direccion y camino dnde le gusta que BASCOM sea instalado. Usted puede tambin acepte el valor predefinido que es
FISEI
FISEI - UTA
Cuando el directorio existe, porque usted instala una ms nueva versin, usted conseguir una advertencia.
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 despus de que usted ha hecho su opcin
FISEI
Despus de que los archivos principales se instalan, algunos archivos adicionales se instalarn.
FISEI
FISEI - UTA
Usted puede ver los "Raed me" y archivos de la Licencia y usted puede empezar BASCOMAVR.
FISEI
FISEI - UTA
FISEI
FISEI - UTA
FISEI
AVR:
AVR es una familia de microcontroladores de 8 bits con una amplia gama de variantes diferentes en: Tamao del programa de la memoria (flash) Tamao de la memoria EEPROM Nmero de pines I / O Nmero de servicios tales como caractersticas de los chips UART y ADC Paquete de formularios El ms pequeo 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 ms grande es la ATMEGA256x con 256K flash, 54 pines I / O y muchas de las caractersticas del chip. Todos los controladores tienen el AVR RISC mismo como conjunto de instrucciones, que permite portar bastante fcil de los programas de Bascom entre los tipos de microcontroladores. Que ejecutar una instruccin por ciclo de reloj hacindolas sensiblemente ms rpido que el 8 bits comparables 4 ciclos de reloj por cada instruccin de los controladores de Microchip PIC.
SU PC
Su PC debe ejecutar W95 o superior, consulte la pgina Bascom AVR para ms 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 pequeo programa independiente. Detalles de seguir adelante.
FISEI
FISEI - UTA
Instalar Bascom
Comience con la descarga de la versin libre Bascom. Se limitar el tamao de cdigo que puede compilar (traducir de base a cdigo de mquina AVR) de 2k, pero le ayudar a empezar con casi todos los aspectos importantes de Bascom y controladores AVR. Ir a la Electrnica MCS, sitio web a continuacin, seleccione Descargas y, a continuacin Bascom, a continuacin, Bascom-AVR, y descargar el Bascom-AVR Demo archivo ZIP. Descomprimir en un directorio temporal. A continuacin, inicie el programa de instalacin ejecutable, que ahora debera estar en este directorio temporal. Instale Bascom, usted puede elegir el directorio de instalacin. 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 cdigo Bascom compilado en la memoria flash del microcontrolador AVR. La forma ms fcil sera comprar un programador. i elige la STK500 Atmel, se obtiene un programmerboard con un controlador de AVR y algunos perifricos, tales como LED's. Esto le permite ponerse en marcha inmediatamente. Sin embargo, la construccin de su propio programador es fcil y barato. Un programador muy bsico es el basado en el SP12 trabajado por Roland Walter. Su hardware del programador es controlado a travs del puerto paralelo del PC con un pequeo programa llamado TWinAVR. Usted debe descargarlo tambin. Descomprimir TWinAVR a una ubicacin conveniente en su PC. No se necesita configuracin, puede ejecutar TWinAVR.exe directamente desde el directorio de descarga La versin de Roland es un programador en el que tienes que poner el microcontrolador AVR en un zcalo, el programa, quite el microcontrolador y colocarlo en la configuracin del circuito. Lo hice un par de veces y consider que sera posible modificar su hardware de programacin para que en la Programacin del Sistema (ISP). Para ello ISP, usted simplemente puede reservarse el microcontrolador pines que se trate con la programacin para este fin. Sin embargo, mientras est conectado el programador, estos pines no se puede utilizar para cualquier otro fin, puesto que podra producirse un conflicto entre el programador, el microcontrolador y cualquier otra cosa adjunta a estos pines. Esto no sera tanto un problema con microcontroladores grandes con gran cantidad de pines I / O, pero en el AVR pequeos, sacrificando esos pines para la programacin externa a menudo no es posible. La solucin es modificar el programador de tal manera que las clavijas de programacin slo se conecta al microcontrolador mientras que la programacin est lugar. Para un buffer, he intentado un 74HCT244 y 74HCT541. Los resultados de estos bferes 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 programacin. Este programador simple puede ser construido sobre un trozo de Vakelita..
FISEI
FISEI - UTA
El software de programacin
Obtener TWinAVR. Este es el software que se comunica a travs del hardware de programacin se realiz con el controlador de AVR. Les recomendamos que usen el TWinAVR hecho por Ronald Walter. Ir a su pgina web, en la columna de la izquierda, seleccione microcontrolador, seleccione Programador, lea el texto (que usted aprender algunas TWinAVR alemn!) Y descargar. TWinAVR de instalacin TWinAVR tiene que ser configurado para usar el Vcc generados por algunos pines del puerto paralelo para cambiar el buffer.
FISEI
FISEI - UTA
Iniciar TWinAVR, haga clic en el logo de TWinAVR en la esquina superior izquierda, haga clic en el Ajuste.
En esta ventana desactive la casilla Vcc. Esto significa que slo se genera Vcc TWinAVR mientras est activo. Si a continuacin, utilizar esta Vcc para cambiar el buffer 74HCT244, el bufferports ser aislado TWinAVR cuando no est activo, dando lugar a "En la programacin del sistema. Aproveche esta oportunidad para comprobar la configuracin en paralelo: si el puerto no est en el estndar de la direccin "y 378", (comprobarlo en la BIOS del PC si es necesario) cambiar la configuracin LPT en consecuencia.
FISEI
FISEI - UTA
10
Obtener Userport si es necesario Si est utilizando Windows NT, 2000 o XP, TWinAVR no tendrn acceso directo al puerto paralelo. Una solucin es usar un programa piloto especial que proporciona acceso directo. Uno de ellos es un programa de Userport. Debe ser instalado y la configuracin 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 configuracin predeterminada. Asumiendo que su puerto paralelo est en "y 378", slo 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.
FISEI
FISEI - UTA
11
Lo que queda es 200-37F en la ventana izquierda. Click on Start. Haga clic en Iniciar. Userport ahora activa la direccin seleccionada gama para usted y lo harn 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 cdigo bsico en un "Bin'-archivo. Esta caja-archivo contiene las instrucciones de AVR en el llamado cdigo de mquina, 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 travs de un programa separado como TWinAvr. TWinAvr le permite seleccionar el archivo HEX que debe enviar al AVR. Sin embargo, es mucho ms fcil si Bascom directamente TWinAvr podra comenzar despus de la compilacin est terminada y decirle que TWinAvr hex-archivo para su uso. Esto se puede hacer en Bascom como sigue: Inicio Bascom, seleccione Opciones / Programador
FISEI
Externo Seleccione 'programador' de la lista de los programadores Seleccione la pestaa "Otros" Entrar en el "programa" campo de la localizacin de su software de programacin, TWinAvr.exe en nuestro caso. Utilice el. Introduzca en el campo "Parmetro ': (archivo)
FISEI - UTA
12
Esto le dice a Bascom para iniciar TWinAvr con el nombre de la bandeja de archivo, se produce despus de que la compilacin fue exitosa:
PROGRAMACIN BSICA 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 enseara 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 despus de una compilacin exitosa. A continuacin, proceder como sigue Inicio Bascom Seleccione Archivo / Nuevo
FISEI
FISEI - UTA
13
El atmega8 posee 8kb de memoria flash, 512 bytes ede EEPOM, y 1KB de SRAM, posee 2 timers, 2 de 8 bits y uno de 16 bitsPosee un reloj de tiempo real (RTC) con oscilador externo.. y 6 canales de ADC y por supuesto comunicacin 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 slo la parte inferior de siete bits estn 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. Despus de esperar durante 1000 milisegundos, PORTB se
FISEI
FISEI - UTA
14
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. Despus de esperar otros 1000 milisegundos, se repite el ciclo. El resultado es que el LED encenderse y apagarse. Despus de introducir el texto del programa, seleccione Archivo / Guardar como y seleccione una ubicacin y un nombre para el archivo. Supongamos que usted seleccione 'ledflasher.bas' como un nombre de archivo. Como Bascom genera gran cantidad de archivos despus de una compilacin, es una buena idea crear directorios separados para cada proyecto Bascom que trabajar. Bascom ahora se puede contar acerca de su configuracin del controlador de AVR. Seleccione Opciones / Compiler / Chip
FISEI
FISEI - UTA
15
Por defecto, la velocidad de reloj es de 4MHz, pero como usamos un cristal de 1MHz, seleccione 1000000 de la lista de frecuencia
FISEI
FISEI - UTA
16
A continuacin les dejo el circuito simulado, con el cual pueden ver funcionamiento de nuestro primer programa creado. Para simular necesitamos cualquier software dedicado a la electrnica que posea las libreras 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.
FISEI
FISEI - UTA
17
FISEI
FISEI - UTA
' 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 ACOMPAADO 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
FISEI
FISEI - UTA
18
Una vez escrito el programa compilamos y grabamos el AVR, si no sabe como hacerlo recordamos leer las pginas 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 pequeos debe usar Waitms, este se mide en milisegundos.
FISEI
FISEI - UTA
19
Bien es momento de escribir el programa, empecemos de la forma que se maneja el puerto completo, para esto debemos entender como trabaja los semforos. Primero nunca se encienden las luces del mismo color, es decir no puede estar en el un semforo verde y en el otro verde tambin existe un cambio de verde a amarillo mientras en el otro semforo sigue en rojo, en el momento que se pone en rojo el primer semforo 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
FISEI
FISEI - UTA
20
Es esta otra manera de escribir el programa, noten que es ms largo que el primer programa, y adems colocamos Alias a los diferentes bits del puerto B. Rojo1 = 1 Verde1 = 1 Podemos escribirlo asi: Rojo1 = 1 : Verde1 = 1
A continuacin, en el siguiente programa veremos una declaracin nueva el GOSUB y el RETURN, estos sirven para cuando tenemos muchas repeticiones de una lnea o grupo de lneas 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 declaracin RETURN lo enva de regreso a continuar despus 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 escribiramos 30 Wait, deberamos cambiarlo a los 30 Wait por el de otro valor, un ejemplo sera:
FISEI
FISEI - UTA
21
$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
Nota: La ubicacin de la subrutina Pause, es importante, fjense que se encuentra despus y fuera de las lneas principales de programacin, si esta misma subrutina lo colocremos 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 an.
FISEI
FISEI - UTA
22
; Primero se crea y asigna un tamao para la variable peter ; Ejecuta las siguientes instrucciones 5 veces hasta donde dice ; una vez concluido las repeticiones contina con la declaracin ; despus del NEXT, peter debe ser creado como variable, es decir ; 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 tamao de un bit, es decir 0 o 1 Dim Repe As Byte ; crea una variable y asigna un tamao de 8 bits, es decir 0 a 255 Dim Repe As Word ; crea una variable y asigna un tamao 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 nmero 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
FISEI
FISEI - UTA
23
$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
FISEI
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 veramos el desplazamiento. Octavo Electrnica 2009 2010 FISEI - UTA 24
LA DECLARACION IF THEN. Esta sirve de condicionante, si es verdadera ejecuta la operacin que sigue al THEN, y si es falsa a la siguiente lnea despus del THEN, existen varias formas de aplicacin. IF porb.0 = 0 THEN Michu ; ir a Michu si la entrada Portb.0 es cero lgico
; Si la comparacin es verdadera ejecuta todo el ; contenido que se encuentra entre el THEN y el ; END IF
FISEI
FISEI - UTA
25
; Si la comparacin es verdadera ejecuta todo el ; contenido que se encuentra entre el THEN y el ; ELSE y si es falsa ejecuta el contenido entre ; ELSE y END IF
Diagrama de conexin de un pulsador conectado en el puerto B0, de estado 1 lgico, en el momento que es presionado este desva la tensin hacia tierra, por lo que el AVR detecta un cambio de estado a cero lgico, en ese instante se enciende el led. A continuacin el programa en Basic para leer el estado de un pulsador:
FISEI
FISEI - UTA
26
' 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 ACOMPAADO 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
FISEI
FISEI - UTA
27
$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
Si tuvo la oportunidad de ver funcionando este proyecto, se dar cuenta que cada que se pulsa el botn el contador aumenta demasiado, esto es como se dijo antes por el AVR trabaja a gran velocidad cada instruccin y cuando una persona presione el botn, 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 botn, este enva a un programa que lo mantiene encerrado, nicamente sale de esta subrutina en el momento que el pulsador deja de ser presionado, a continuacin incluimos un WAITMS 200, que es necesario para que en el momento de soltar la tecla se estabilice la seal.
$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
FISEI
Para conocer ms sobre los operadores matemticos disponible como: resta multiplicacin, divisin, etc. Existentes en el Software BASCOM, se recomienda ver la ayuda del software.
FISEI - UTA
28
FISEI
FISEI - UTA
29
$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
FISEI
FISEI - UTA
30
$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
FISEI
FISEI - UTA
31
DECLARACIN LOOKUP
Sirve para obtener un valor constante de una tabla, esto lo hace segn el nmero de veces que repita el FORNEXT, 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.
$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
FISEI
FISEI - UTA
32
activado cada transistor no puede ser mayor que 5 mili segundos, es decir que los cambios son tan rpidos 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 nmero 8 en las centenas debemos sacar (176 + 8), es decir el nmero 184 porque si analizamos en cdigo 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
FISEI
FISEI - UTA
33
Es hora de hacer un proyecto de considerable tamao, 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 botn A, si pulsamos el botn 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
FISEI
FISEI - UTA
34
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
FISEI
FISEI - UTA
35
$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
' %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
FISEI
FISEI - UTA
36
$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
FISEI
FISEI - UTA
37
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
FISEI
FISEI - UTA
38
Pin 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Descripcin Tierra de alimentacin GND Alimentacin de +5V CC Ajuste de contraste del cristal liquido (0 a +5V) Seleccin del registro control/datos RS=0 reg. Control RS=1 reg. Datos Lectura/Escritura en LCD R/W = 0 escritura (write) R/W = 1 lectura (read) Habilitacin E = 0 mdulo desconectado E = 1 mdulo conectado Bit menos significativo (bus de datos bidireccional)
Bit masmenos significativo (bus de datos bidireccional) Alimentacin del backlight +3.5V o +5 Vcc (segn especificaciones tcnicas) Tierra GND del backlight
Bascom puede manejar los dos tipos principales de pantallas de cristal lquido: alfanumricos y grficos. Por el momento, vamos a preocuparnos por el tipo ms comn alfanumricos. Este tipo de pantalla LCD puede mostrar los caracteres, nmeros y caracteres especiales. El tipo ms comn de LCD alfanumrico utiliza un Hitachi HD44780 como controlador de pantalla. Cuando usted no est seguro acerca de qu tipo de pantalla que estn sosteniendo en sus manos, slo tiene que mirar a las denominaciones de chips en la espalda. Si uno de estos dice HD44780 ests a salvo. Bascom tiene una configuracin por defecto para la conexin de la pantalla LCD. Options / Compiler / LCD
FISEI
FISEI - UTA
39
FISEI
Afortunadamente, el predeterminado es de tipo LCD de 16 * 2. Esta es la pantalla LCD ms comn con dos lneas y 16 caracteres por lnea. HD44780 tipo LCD tienen ocho datalines, pero pueden ser controlados de una manera ms econmica mediante el uso de los cuatro lneas. Esto ahorra cuatro Pins I / O en el controlador. Esta es la predeterminada (modo de 4 bit bus) en la ventana de opciones. El envo 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 ms rpido 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 opcin proporciona la mayor flexibilidad en la eleccin de la i / o de configuracin de su controlador. La opcin de bus se puede utilizar en la clsica configuracin de microprocesador de autobuses donde un montn de I / O est conectado a un bus y la decodificacin de direccin debe ser utilizado para hacer frente a cada dispositivo por separado en el autobs. En el 'pin' opcin, puede especificar cmo las clavijas de seis LCD est conectado a su controlador. El pin de activacin es usada por la pantalla LCD para ver si tiene para leer / escribir datos en las cuatro I / O Pins. Mientras el pin de activacin es bajo, la pantalla no "escuchar" a los cambios en los cuatro pines de datos (lo que tambin puede ser utilizado para otros fines, por el AT90S2313 que tambin se utilizan para el MOSI, miso y CLK). El pin RS se utiliza para que la pantalla LCD sepa si los datos que estn en los pines de datos tienen que ver con una presentacin en la pantalla o con un comando, como un restablecimiento de pantalla o un cambio del cursor La pantalla LCD tiene un sptimo sptimo 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 ocupacin. Esto implicara el envo de un comando de verificacin de ocupado, cambiar la pantalla a modo de escritura, la lectura del valor de un byte del registro del pabelln ocupado y se determina el valor del bit de ocupado. Como no podemos hacer eso, Bascom debe utilizar bucles de espera despus de cada escritura. Los bucles de espera son determinados por la velocidad de reloj. Esto es entre otras cosas por la especificacin de la velocidad de reloj en las opciones / Compilador / ventana de comunicacin 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 ms rpido, pero los circuitos de espera del cristal lquido son probablemente demasiado corto. Esto puede resultar en que la pantalla LCD no funciona en absoluto o acte de manera extraa. Al igual que con la especificacin 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:
FISEI - UTA
40
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
La pantalla LCD alfanumrico estndar tiene 14 pins. Pin nmero 1 es la tierra. Pin nmero 5 es R / W y tambin est conectado a tierra. Pin nmero 2 es Vcc, va a +5 V. Algunos LCD no tolerar una fuente de alimentacin con tensin de salida de un lento aumento. Pin nmero 3 es para el contraste del LCD. Con la mayora de las pantallas se puede conectar el pin de contraste a tierra. Por un contraste ptimo, en algunas pantallas se necesita una tensin ligeramente positiva en este pin. Uso de un potencimetro entre +5 V y tierra debe dar una configuracin ptima para la mayora de las pantallas. Los nmeros de PIN 4 (RS), 6 (E) y 11, 12, 13 y 14 estn conectados a la controladora como se muestra en el esquema. PIN nmeros 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 alimentacin de +5 V con un resistor limitador de corriente de unos pocos cientos de ohmios para averiguar cul es el ctodo y el nodo. A veces la luz de fondo LED tiene un conector separado de los otros 14 pines.
FISEI
FISEI - UTA
41
$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
LCD de carcter conjunto. El conjunto de LCD de caracteres estndar se muestra en la siguiente tabla:
FISEI
FISEI - UTA
42
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 smbolo . (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 podrn aprender ms 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.
FISEI
FISEI - UTA
43
$regfile = "m8def.dat" $crystal = 1000000 ' proporcin 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
FISEI
FISEI - UTA
44
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 smbolo 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)
FISEI
Cambiar el "?" por el nmero "0" y eliminar el comentario despus del carcter ' Deflcdchar 0 , 32 , 4 , 4 , 31 , 4 , 4 , 32 , 32
FISEI - UTA
45
Mover el cursor de texto a la siguiente lnea vaca, 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 nmero "1" y eliminar el comentario despus del carcter ' Deflcdchar 1 , 32 , 2 , 20 , 14 , 5 , 8 , 32 , 32 Repita este proceso otras cuatro veces (usa tu imaginacin) hasta que su programa es el siguiente:
$regfile = "m8def.dat" $crystal = 1000000 ' proporcin 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
FISEI
Compilar y Simulacin. El resultado es una estrella de rotacin rpida en la posicin ms a la derecha de la lnea de LCD de la primera fila.
FISEI - UTA
46
FISEI
FISEI - UTA
47
$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
FISEI
FISEI - UTA
48
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
GENERACIN DE SONIDO
El software Bascom es capaz de sacar las frecuencias especificadas por un pin del AVR, para esto aprenderemos la declaracin SOUND. LA DECLARACIN SOUND. Saca lo o las frecuencias especificadas por un pin del micro, estas pueden ser de 0 a 32767 Hz, su utilizacin es de la siguiente forma.
SOUND pin, pulsos, duracin Sound Portb.0 ,65635 , 10000 Quiere decir sacar una frecuencia de 65635 ciclos durante 10 segundos por el puerto B.0. En esta prctica lo utilizaremos para generar un sonido a travs de un piezoelctrico o por medio de un parlante.
FISEI
FISEI - UTA
49
$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
FISEI
FISEI - UTA
50
Esto quiere decir sacar dos tonos por el puerto C.0, el primer tono es 100 que equivale a (7874 Hz) con una duracin de 10 milisegundos y luego un tono de 50 (3937 Hz) con una duracin de 10 milisegundos tambin. En cuanto al diagrama y materiales son los mismos de la prctica anterior.
$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
Pruebe con algunas combinaciones de tonos, as como tambin con diferentes tiempos y ver que bien pude componer una meloda.
FISEI
FISEI - UTA
51
LA DECLARACIN DTMFOUT Esta genera automticamente los tonos duales correspondientes a cada tecla y los enva cada una con intervalos de 50 milisegundos, aunque estos los podemos cambiar. Para nuestro caso, para saber que puerto es el que enva la seal DTMF, debemos acudir a la hoja de dados del ATMEGA8 y buscamos el puerto con caractersticas OC1, para nuestro AVR es el pin B.1.
FISEI
FISEI - UTA
52
$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
En la figura siguiente se muestra el diagrama bsico de conexin para poder hacer una llamada telefnica: La resistencia de 560Ohm a 1 vatio paralela a la red telefnica, sirve para simular la carga de un telfono normal, y con esto podremos tener el tono de marcado necesario para hacer la llamada, adems notarn que esta resistencia empieza a disipar calor en el momento que se une a la red telefnica, esto debido a la cantidad de voltaje que circula (60 voltios). El rel hace la conexin y desconexin de la red telefnica, que en este caso sera como el auricular que cuelga y descuelga el telfono. El filtro de 1 uF a 100 voltios, sirve para poder mejorar la onda que sale del AVR y adems como proteccin para el AVR. Es importante indicar que la red telefnica suministra alrededor de 60 voltios en DC, por lo que el capacitor debe pasar de 60 voltios y adems el lado positivo de la red telefnica debe ir a tierra del AVR y el negativo haca el pin del AVR, por lo que necesitaremos la ayuda de un voltmetro para poder identificar la polaridad de la red.
FISEI
FISEI - UTA
53
Para solucionar este inconveniente se propone el diagrama de la figura, este es un diagrama ms completo en el que la polaridad de la lnea 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 travs 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 automticamente una llamada al propietario, el propietario en el momento de contestar escuchar una sirena, seal 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 enva datos en forma serial como: Zona de apertura, hora, estado de batera, etc.
FISEI
FISEI - UTA
54
La matriz se utiliza, ya que minimiza el nmero de conexiones desde el teclado al controlador. Un teclado 4x4 tiene 16 keyswitches. Usted podra cablear los 16 keyswitches al controlador, pero una solucin ms 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 elctrica, 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 nmero de la tecla presionado.
FISEI
FISEI - UTA
55
$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
FISEI
Como se puede ver este programa es un poco largo pero el uso de memoria es mnima 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 algn 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 Octavo Electrnica 2009 2010
FISEI - UTA
56
Debemos considerar que un persona requiere como mnimo 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 lneas 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 quedara un teclado con pulsadores del 0 al 9 y dos teclas de propsito especial, la tecla asterisco (*) y la tecla numeral (#).
FISEI
FISEI - UTA
57
$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
FISEI
FISEI - UTA
58
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
FISEI
FISEI - UTA
59
FISEI
FISEI - UTA
60
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
FISEI
FISEI - UTA
61
FISEI
FISEI - UTA
62
$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
FISEI
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 :
FISEI - UTA
63
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
FISEI
FISEI - UTA
64
QU ES UN MOTOR PASO A PASO? Como todo motor, es en esencia un conversor electromecnico, que transforma la energa elctrica en mecnica; pero de un modo tan peculiar que constituye en la actualidad una categora aparte. En efecto, mientras que un motor convencional gira libremente al aplicar una tensin comprendida dentro de ciertos lmites (que se corresponden de un lado al par mnimo capaz de vencer su propia inercia mecnica, 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 "codificacin" de tensiones aplicadas a sus entradas (4, 6, etc.). La posibilidad de controlar en todo momento esta codificacin permite realizar desplazamientos angulares lo suficientemente precisos, dependiendo el ngulo de paso (o resolucin angular) del tipo de motor (puede ser tan pequeo como 1,80 hasta unos 15). De este modo, si por ejemplo el nmero de grados por paso es de 1,80, para completar una vuelta sern 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 funcin directa de la frecuencia de variacin de las codificaciones en las entradas. De ello se deduce que el motor paso a paso presenta una precisin y repetitividad que lo habilita para trabajar en sistemas abiertos sin realimentacin. 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 ms adelante, podrn ser sustituidos por las lneas de entrada y salida de nuestro ordenador debidamente programadas. Como las bobinas se encuentran distribuidas simtricamente en torno al estator, el campo magntico creado depender en magnitud de la intensidad de corriente por cada fase, y en polaridad magntica, del sentido de la corriente que circule por cada bobina. De este modo el estator adquiere la magnetizacin correspondiente, orientndose el rotor segn ella (fig. 4a). Si el interruptor 1.1 se Octavo Electrnica 2009 2010 FISEI - UTA 65
FISEI
conmuta a su segunda posicin (fig. 4b), se invierte el sentido de la corriente que circula por T y por tanto la polaridad magntica, volvindose a reorientar el rotor (el campo ha sufrido una rotacin de 90 en sentido antihorario, haciendo girar el rotor 90 en ese mismo sentido). Con esto se llega a la conclusin de que para dar una vuelta completa seran 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 tambin puede funcionar de un modo menos "ortodoxo", pero que nos va a permitir doblar el nmero 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 magnetizacin correspondiente y por lo tanto el rotor se orienta segn ella. Ahora bien, al contrario que en el caso anterior, antes de conmutar el interruptor I.1 a su segunda posicin, se desconectar el devanado T, reorientndose por consiguiente el rotor, pero la mitad de un paso (45).
FISEI
FISEI - UTA
66
Los motores paso a paso unipolares, en cuanto a construccin 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 derivacin central conectada a un terminal de alimentacin. De este modo, el sentido de la corriente que circula a travs de la bobina y por consiguiente la polaridad magntica del estator viene determinada por el terminal al que se conecta la otra lnea de la alimentacin, a travs de un dispositivo de conmutacin. Por consiguiente las medias bobinas de conmutacin hacen que se inviertan los polos magnticos del estator, en la forma apropiada. Ntese que en vez de invertir la polaridad de la corriente como se haca en los M.P.P. bipolares se conmuta la bobina por donde circula dicha corriente.
FISEI
FISEI - UTA
67
Al igual que los M.P.P. bipolares, es posible tener resoluciones de giro correspondientes a un semipaso. Ahora bien, dado que las caractersticas constructivas de estos motores unipolares son idnticas a las de los bipolares, se puede deducir que los devanados tanto en uno como otro caso ocuparn el mismo espacio, y por tanto es evidente que por cada fase tendremos menos vueltas o bien el hilo de cobre ser de una seccin menor. En cualquiera de los dos casos se deduce la disminucin de la relacin de amperios/vuelta. Por tanto, a igualdad de tamao los motores bipolares ofrecen un mayor par.
FISEI
FISEI - UTA
68
SECUENCIA DEL CIRCUITO DE CONTROL Existen dos formas bsicas de hacer funcional los motores paso a paso atendiendo al avance del rotor bajo cada impulso de excitacin: Paso completo (full step): El rotor avanza un paso completo por cada pulso de excitacin 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 excitacin, presentando como principal ventaja una mayor resolucin de paso, ya que disminuye el avance angular (la mitad que en el modo de paso completo). Para conseguir tal cometido, el modo de excitacin consiste en hacerlo alternativamente sobre dos bobinas y sobre una sola de ellas, segn se muestra en la Tabla siguiente para ambos sentidos de giro.
FISEI
FISEI - UTA
69
$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
FISEI
FISEI - UTA
FISEI
$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
FISEI - UTA
70
COMUNICACIN
QUE ES LA COMUNICACIN SERIAL? RS-232 es hoy en da un estndar de comunicacin antiguo. Es sorprendente que una norma, definida en los aos sesenta, es an ampliamente utilizado hoy en da. Formalmente no obstante, el nombre de RS-232 no es aplicable a una norma. Una organizacin estadounidense, ahora conocida como la Asociacin de Industrias Electrnicas, propuso una forma de comunicacin entre grandes ordenadores centrales y perifricos tales como terminales La propuesta se llama un nivel recomendado y 232 no era ms que un nmero de identificacin. Mucho ms tarde esto se convirti en una norma oficial, la EIA-232. En 1991, la versin ms reciente, la EIA-232E fue publicado. Sin embargo, el nombre de RS-232 es an ampliamente utilizado. Una tensin entre -3 y -25 voltios es una lgica de un (1) Una tensin entre 3 y 25 voltios es una lgica de cero (0) UART UART medio receptor asncrono de transmisor universal. Es el final de hardware en ambos lados de un puerto RS-232 enlace de comunicacin. 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 pequea rea en el chip dedicada a esta funcin. En el ATMEGA8 el UART est conectado al pin 2 (RXD) y 3 (TXD). Como estos pines tambin funcionan como de propsito 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 cundo se muestra el RxD PIN para determinar si se recibe cero o uno. Cuando se transmite, la UART lee un byte del bfer de transmisin y enva los bits que corresponden con el momento apropiado para el RS232 de velocidad seleccionada.
FISEI
FISEI - UTA
71 72
Un convertidor de nivel genera las tensiones necesarias para cumplir con los niveles Del RS-232. Tambin se invierte la lgica de los niveles. El MAX232 usa interiormente, convertidores de conmutacin 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 TRANSMISIN DE DATOS Simplex: se dice a la transmisin que puede ocurrir en un solo sentido, sea slo para recibir o slo para transmitir. Una ubicacin pude ser un transmisor o un receptor, pero no ambos a la vez, un ejemplo claro es la radiodifusin, en donde la estacin es el transmisor y los radios son los receptores. Half-duplex: se refiere a la transmisin que puede ocurrir en ambos sentidos, pero no al mismo tiempo, en donde una ubicacin 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 botn y habla, luego suelta el botn y el otro usuario presiona el botn para contestar. Full-duplex: se dice a la transmisin que puede ocurrir en ambos sentidos y al mismo tiempo, tambin se lo conoce con el nombre de lneas simultaneas de doble sentido, una ubicacin puede transmitir y recibir simultneamente, siempre y cuando la estacin a la que est transmitiendo tambin sea la estacin de la cual est recibiendo, un ejemplo es la telefona mvil.
FISEI
FISEI - UTA
73
Full/full-duplex: con este modo de transmisin es posible transmitir y recibir simultneamente, pero no necesariamente entre las dos ubicaciones, es decir una estacin puede transmitir a una segunda estacin y recibir ded una tercera estacin al mismo tiempo. Esta transmisin se utiliza exclusivamente con circuitos de comunicacin de datos.
$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
FISEI
FISEI - UTA
74
BASCOM nos ofrece una herramienta para poder simular la comunicacin 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 configuracin. Terminal / Setting
FISEI
FISEI - UTA
75
FISEI
FISEI - UTA
76
$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
COMUNICACIN IC
IC significa Inter-IC. e trata de un desarrollo de Philips, que comenz en los aos ochenta. En aquellos das la electrnica de consumo, como televisores y la radio pas por una fase rpida de conseguir ms y ms usuarios. Lotes de circuitos integrados se han aadido a estos productos como consecuencia de cableado ms complicado en un circuito impreso de hacinamiento. Philips considera que un bus serie simple era una solucin 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 estndar IC utiliza un esquema de siete bits para el direccionamiento, permitiendo 128 CI a ser conectados a un bs.
FISEI
FISEI - UTA
77
Direccion IC El nmero de CI en un bus IC est limitado a 128, ya que cada IC necesita nicos siete bits de direccin.
Estndar IC La norma original especifica una velocidad mxima en el bus de 100 kHz. En 1992, se aadi un modo rpido con una velocidad mxima de 400 kHz. En 1998, una versin 2 fue lanzado. Esta versin tiene un modo de alta velocidad con un mximo de 3.4Mbit/s. Mas sobre IC Philips tiene la patente en la IC eso significa que otros fabricantes de chips que quieren hacer IC IC tienen que pagar regalas y deben firmar un acuerdo que indique que se adhieren a los estndares IC. La mayora de los controladores de AVR de Atmel tiene una interfaz de dos hilos, por lo menos eso es lo que dice la documentacin. Esto es por supuesto una interfaz IC. La norma IC prescribe resistencias en SDA y la lnea SCL. Este es uno de los errores ms comunes de la primera vez que utiliza una interfaz de IC. Olvdese de los "pushpull y su interfaz no funcionar.
FISEI
FISEI - UTA
78
La longitud mxima de los cables de bus IC no est en la norma. Slo dice que para la variante de 100 kHz, la capacidad total del cableado de bus y los dispositivos conectados no debe exceder 400pF.
COMUNICACIN IC CON UNA MEMORIA SERIAL 24L04B Esta es una practica muy bsica para aprender sobre la interfaz IC, 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 ms 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 Direccin Cantidad de disposit. En el bus Voltaje de operacin
A0 1-0 1-0 x x x
1 1 2 4 8
8 8 4 2 1
FISEI
El principio de funcionamiento es el siguiente: primero se enva el star (bit de arranque) cada palabra puesta en el bus SDA debe tener 8 bits, la primera palabra transferida debe contener la direccin del esclavo seleccionado, en este caso se enva el cdigo de la memoria 1010 (este dato lo suministra el fabricante), luego la direccin 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 informacin, este acuse de recibo se denomina ACK (acknowledge).
FISEI - UTA
79
Luego el master lee el ACK, si vale 0 (enviado por el esclavo), el proceso de transferencia contina. Si vale 1, esto indica que el circuito direccionado no valida la comunicacin, entonces es Master genera un bit de stop para liberar el bus IC, en la cual las lneas SDA y SCL pasan a un estado alto, vamos a suponer que el ACK es 0, entonces el microcontrolador enva los 8 bits correspondientes a la posicin de memoria que se desea escribir a leer, nuevamente la memoria enva un reconocimiento, finalmente se enva 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.
DECLARACIN I2CSTART genera una condicin de inicio. I2CSTOP genera una condicin de parada I2CRBYTE recibe un byte de un dispositivo. I2CWBYTE enva un byte a un dispositivo.
FISEI
FISEI - UTA
80
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 alimentacin 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
FISEI
FISEI - UTA
81
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 ms. La solucin de hardware obvia es aadir un botn STOP para su AVR.
FISEI
FISEI - UTA
82
El problema fundamental de este ejemplo es que podemos pasar tanto tiempo haciendo la tarea complicada, que al pulsar el botn STOP a menudo no se detecta cuando se pulso el Boton de stop. Obviamente necesitamos otro mecanismo para reaccionar a pulsar el botn 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
FISEI
FISEI - UTA
83
$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
FISEI
Despus de parpadear el LED y escribir un mensaje a la pantalla LCD, Desmantelamiento "se utiliza para detener el reloj del controlado. Al pulsar el botn se despierta el controlador
FISEI - UTA
84
WATCHDOG
Bascom puede proporcionar una funcin 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 crticas 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 situacin muy grave, tal vez causada por un error de diseo de hardware o de software. En cualquier caso, cuando se utilizan perros guardianes, siempre incluyen algn tipo de mecanismo de informacin, o bien nunca se sabr acerca de estos posibles errores. Un organismo de control tiene que estar configurado para un tiempo de espera especficas:
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
FISEI
FISEI - UTA
85
Despus de que el perro guardin 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 despus de app dos segundos.
FISEI
FISEI - UTA
86
Seleccione el programador en Opciones de men del Programador, o clic derecho en el botn o en las opciones del programa en el men.
EJEMPLO DEL CABLE DE PROGRAMACIN 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 numeracin del pin MCU son para los 8535 y 8515. Usted puede usar una resistencia pequea 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 ningn problema ocurri. El siguiente grafico muestra las conexiones a realizar:
FISEI
FISEI - UTA
87
FISEI
FISEI - UTA
88
FISEI
FISEI - UTA
AT86RF401 Se muestra el entorno de distribucin de pines, si desea informacin adicional se debe buscar los Datasheet de los Chips en www.datasheetcatalog.com
AT90S1200
FISEI
FISEI - UTA
89
AT90S2313
AT90S2323
FISEI
FISEI - UTA
90
AT90S2333
AT90S2343
Cuando usas el AT90S2343 con Bascom-AVR y el STK200, el jumper del programador debe estar en ext-clk.
FISEI
FISEI - UTA
91
AT90S4414
AT90S4433
FISEI
FISEI - UTA
92
AT90S4434
AT90S8515
FISEI
FISEI - UTA
93
AT90S8535
AT90PWM2-3
FISEI
FISEI - UTA
94
AT90CAN128
FISEI
FISEI - UTA
95
AT90USB162
ATtiny12
ATtiny13
FISEI
FISEI - UTA
96
ATtiny15
ATtiny22
ATtiny24
ATtiny25
FISEI
FISEI - UTA
97
ATtiny26
ATtiny44
ATtiny45
FISEI
FISEI - UTA
98
ATtiny48
ATtiny84
ATtiny85
FISEI
FISEI - UTA
99
ATtiny88
ATtiny261
FISEI
FISEI - UTA
100
ATtiny861
ATtiny2313
ATMEGA8
FISEI
FISEI - UTA
101
ATMEGA16
ATMEGA32
FISEI
FISEI - UTA
102
ATMEGA32U
ATMEGA48
FISEI
FISEI - UTA
103
ATMEGA48P
ATMEGA88
FISEI
FISEI - UTA
104
ATMEGA88P
FISEI
FISEI - UTA
105
ATMEGA64
FISEI
FISEI - UTA
106
ATMEGA103
FISEI
FISEI - UTA
107
ATMEGA128
ATMEGA1284P
FISEI
FISEI - UTA
108
ATMEGA161
ATMEGA162
FISEI
FISEI - UTA
109
ATMEGA163
ATMEGA164P
FISEI
FISEI - UTA
110
ATMEGA165
ATMEGA168
FISEI
FISEI - UTA
111
ATMEGA168P
ATMEGA169
FISEI
FISEI - UTA
112
ATMEGA323
ATMEGA324P
FISEI
FISEI - UTA
113
ATMEGA325
ATMEGA328P
FISEI
FISEI - UTA
114
ATMEGA329
ATMEGA406
FISEI
FISEI - UTA
115
ATMEGA603
FISEI
FISEI - UTA
116
ATMEGA640
FISEI
FISEI - UTA
117
ATMEGA644P
ATMEGA645
FISEI
FISEI - UTA
118
ATMEGA649
FISEI
FISEI - UTA
119
ATMEGA2560
FISEI
FISEI - UTA
120
ATMEGA2561
FISEI
FISEI - UTA
121
ATMEGA8515
ATMEGA8535
FISEI
FISEI - UTA
122
ATXMEGA128A1
FISEI
FISEI - UTA
123
FISEI
FISEI - UTA