Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tutorial Pic
Tutorial Pic
FISEI
FISEI - UTA
Instalacin del software microcode studio 2 Instalacin de pbp244 (PicBasic Pro) .. 6 Configuracin de microcode studio ... 7 Manejo de microcode studio .... 12
Programa bsico para hacer parpadear un led con intervalos de 1 segundo .... 15 Un semforo de dos intersecciones .. 16 Juego de luces para discoteca .. 19 Ejercicio con la instruccin FOR NEXT .... 21 LAS VARIABLES BIT, BYTE Y WORD .. 22 Luces del auto fantstico ... 23 Ejercicios con pulsadores .... 24 La declaracin IF THEN ..... 25 Contador binario con pulsador antirrebote ... 26 Led intermitente de velocidad variable ... 28 Utilizando el mclr ...... 29 Manejo de un display de 7 segmentos con el ci.7447 ..... 30 Un contador decimal de un digito con el ci 7447 y un pulsador ........ 31
FISEI
Manejo de un display de 7 segmentos sin el ci.7447 ... 33 Declaracin LOOKUP ..... 33 Manejo de 4 display de7 segmentos con el ci.7447 .... 34 Octavo Electrnica 2009 2010 FISEI - UTA
Contador decimal de 4 dgitos con el CI.7447 .. 36 Manejo de 4 displays de 7 segmentos sin el ci.7447 (rotulacin) ... 38 Manejo de 4 displays con rotulo en movimiento .... 39 Manejo de un modulo lcd .. 41 Declaracin LCDOUT ...... 42 Presentacin de carcter por carcter en lcd .. 46 Desplazamiento de un texto lcd . 47 Contador de pulsos con lcd ... 48 Lectura de un potencimetro con lcd .. 50 Generacin de sonido .... 51 Una sirena policial .. 52 Utilizando un cristal de mayor velocidad .... 53 Generacin de un timbre de telfono celular .. 54 Llamada telefnica DTMF .... 55 La declaracin DTMFOUT ...... 56 Lectura de un teclado de 16 pulsadores con display de 7 segmentos .... 59 Cerradura electrnica con clave en memoria flash .... 63 Cerradura electrnica con clave en memoria ram y cambio de clave ..... 66 Cerradura electrnica con clave en memoria eeprom y cambio de clave .... 69 La declaracin EEPROM, READ Y WRITE .. 69 MOTORES PASO A PASO Manejo del pwm como variador de velocidad de un motor dc ..... 72
FISEI
Un conversor d/a con el ci lm358 ... 75 Qu es un motor paso a paso? . 76 Octavo Electrnica 2009 2010 FISEI - UTA
Motores paso a paso bipolares .. 77 Motores paso a paso unipolares 79 Secuencia del circuito de control ... 81 Manejo de un motor paso a paso en secuencia wave drive .... 82 Manejo de un motor paso a paso en secuencia full step ..... 83 Manejo de un motor paso a paso en secuencia half step . 83 COMUNICACIN Que es la comunicacin serial? .. 84 Modos de transmisin de datos ... ................ 84 Comunicacin serial rs232 85 Comunicacin serial pi a pc ......... 86 Comunicacin serial pc a pic .... 90 Comunicacin serial con el max 232 92 Comunicacin serial pic a pic .. 94 Comunicacin ic ........ 96 Comunicacin ic con una memoria serial 24l04b ..... 96 La declaracin i2cwrite e i2cread . 97 Comunicacin i2c con el reloj calendario ds1307 ... 100 Utilizando la interrupcin del puerto b.0 .... 103 Utilizando la interrupcin del puerto b.4 al b.7 ............. 105 Reloj digital utilizando la interrupcin del tmr0 ....... 106
FISEI
Conversor anlogo digital del pic 16f87x .... 109 Termmetro digital con el pic 16f877a .... 111
FISEI - UTA
Circuito programador Pic serial ... 115 Circuito programador Pic paralelo.. 118
FISEI
FISEI - UTA
FISEI
FISEI - UTA
FISEI
FISEI - UTA
En este manual se enseara a descargar el software necesario para poder disear, editar y compilar proyectos con micro controladores PIC. DESCARGA DE PROGRAMA MICROCODE STUDIO
Este es el primer software que vamos a descargar desde Internet, primero accedemos a la magina www.mecanique.co.uk y realizamos los siguientes pasos: a) Ya abierta la pagina web, nos deslizamos a la pestaa Microcode Studio, y acedemos dando un clic. Ver figura siguiente. b) Se ejecutara una nueva pagina, deslizamos la barra de desplazamiento que se encuentra a la derecha de la pantalla, hasta visualizar el siguiente grafico. c) En esta pantalla damos un clip en USA versin 2.1.0.6, y esperamos un instante hasta que se ejecute la descarga. d) Se presentara una pantalla similar, en donde se leccionamos Guardar este programa en disco, damos un clic en aceptar. El mensaje varia dependiendo del
explorador que usamos.
En pequeos instantes, se presenta una pantalla similar al siguiente grafico, indicndonos la direccin en la que deseamos guardar el archivo descargado. f) En seguida veremos una pantalla de descarga, aqu podemos Cancelar la descarga u otras opciones que depende del explorador de internet usado.
e)
DESCARGA DE pbp2.44 (PicBasic Pro versin 2.44) Este es el compilador que nos facilitara la programacin, ya que se dispone del editor de texto MicroCode Studio, solo nos falta un programa compilador que nos genere los archivos (.Hex) necesarios para poder grabar en un micro controlador PIC. Para ello necesitamos adquirir el programa mencionado. En internet se nos facilita la versin Demo de este software en la pagina www.mecanique.co.uk haciendo un clic en Compilers, y luego en PicBasic Professional, a continuacin proceda a descargarlo como se aprendi en los casos anteriores.
FISEI
FISEI - UTA
1
El archivo a descargar se llama PBP_demo_install.exe, este archivo ejecutable contiene en una carpeta mcs otro instalador de Microcode Studio versin 2.1.0.7, el cual ya no hace falta porque ya descargo anteriormente la ultima versin del mismo, esto se explicara mas adelante en la instalacin. INSTALACION DEL SOFTWARE MicroCode Studio Para instalar nuestro edito debemos buscar el archivo mcstudio.exe que terminamos de descargar y lo ejecutamos, veremos una nueva pantalla en la que presionamos next, luego yes.
FISEI
FISEI - UTA
2
A continuacin nos indicara la carpeta en donde se instalar C:\Archivos de Programa\Mecanique si deseamos lo dejamos ah o cambiamos la direccin, presionamos Next
FISEI
FISEI - UTA
En el caso que se desee cambiar la ubicacin de destino de la carpeta damos un clic en Browse,.
FISEI
FISEI - UTA
4
FISEI
FISEI - UTA
5
FISEI
FISEI - UTA
INSTALACION DE pbp244 (PicBasic Pro) Para instalar nuestro compelador debemos buscar el archivo pbp244 que ya lo descargamos y lo ejecutamos, veremos una nueva pantalla en la que presionamos Next.
Instantemente aparecer una pantalla definiendo la ubicacin donde se instalara el compilador, para mayor comodidad, se recomienda instalar en la misma carpeta en la cual se instala el editor MicroCode estudi , y presionamos Next. La carpeta pbp se debe crear
manualmente.
FISEI
FISEI - UTA
6
CONFIGURACIN DE MicroCode Studio Como se recomend anteriormente, el compilador y el editor de texto deberan estar dentro de la misma carpeta.
Ejecute el programa MicroCode Studio, la primera vez el programa buscara el compilador disponible, en este caso el Pbp, y aparecer una pantalla similar al siguiente grafico:
FISEI
En esta pantalla acceda a View y haga clic en Editor Options, luego Show line numbers in left gutter, que sirve para que aparezca el nmero de lnea que esta programando, esto es muy til al momento de determinar errores de compilacin.
FISEI - UTA
7
Si desea tambin puede indicar la carpeta predefinida en los que desee guardar los archivos .pbp, luego de personalizar presione Ok.
Ahora aparecen nmeros al lado izquierdo del editor de texto, esto ser muy til en lo posterior.
FISEI
FISEI - UTA
8
En esta pantalla, nuevemente acceda a View y haga clic en Compile and Program Option.
Aparecer una nueva pantalla mas pequea, en donde se vera que ya esta predefinido la ubicacin del compilador en el disco duro.
En la pestaa Programmer, se puede aadir el software del programador de los microcontroladores Pic. Para aadir un programador damos un clic en Add New Programmer
FISEI
FISEI - UTA
Inmediatamente aparece otra pantalla, en donde debemos marcar create a custon programmer entry, luego presionamos Next. En la siguiente pantalla escriba el nombre que desea darle al programador, en este caso ser usb 110a1 y lego presione la tecla Next.
En esta pantalla se pedir que se ponga el nombre del archivo ejecutable, escriba el nombre del software programador en mi caso usb110a1.exe y luego presione Next. Se mostrara otra pantalla con dos botones, el uno localiza automticamente la carpeta que contiene al ejecutable, y el otro es para localizar manualmente, si esta seguro que es el nico archivo usb110a1.exe puede presionar la tecla Find Automatically.
FISEI
FISEI - UTA
10
En esta pantalla le pedir parmetros de programacin, como para usb110a1 no hace falta, no escriba nada y solo presione la tecla Finished, luego desaparece esta pantalla y solo queda la pantalla del PICbasic Options, en donde debe asegurarse de los cambios presionado Ok.
FISEI
FISEI - UTA
11
MANEJO DE MicroCode Studio MicroCode Studio es un programa editor de texto como Bloc de notas de Windows, pero con la diferencia de que este esta hecho exclusivamente para facilitar la programacin de los microcontroladores PIC, los procedimientos para programar son muy sencillos, primero seleccionamos el modelos del PIC 16F628A, PIC16F877 entre otros, escriba el programa y gurdelo bajo un nombre, de preferencia relacionado con la aplicacin y presione el botn Compile que se encuentre dentro de la pestaa Project, la tecla F9 realiza la misma funcin. Si el programa esta bien hecho y sin fallas compilara y mostrara en la parte inferior izquierda el espacio requerido en el PIC, en seguida se creara automticamente tres archivos con el mismo nombre pero diferentes extensiones ( *.mac, *.asm, *.hex), este ultimo es el mas importante para nosotros, por que es este el que se debe grabar en el PIC. A continuacin las partes mas importantes de la pantalla de MicroCode Studio.
FISEI
FISEI - UTA
12
Modelo de MicroPIC.Es lo primero que se debe seleccionar antes de empezar a programar, seleccionamos de acuerdo al modelo de Pic que vamos a programar. Compilador.Estos dos botones sirven bsicamente para compilar nuestros programas y crear los archivos .ASM, .MAC, :HEX. El archivo .HEX sirve para grabar en el micro, el .MAC solo sirve para el PicBasic y el .ASM para los interesados en ver como lo hizo el compilador en assembler ya que podemos abrirlo en MPLAB.
Compile Only F9 Este primer botn sirve para compilar, es decir nuestro programa lo cambia a assembler y crea el .HEX.
Compile and Program F10 Este botn tiene doble funcin, a parte de hacer lo mismo que el botn anterior, tambin puede llamar al programador, con la finalidad de ahorrarnos tiempo y no tener que abrir por separado. Buscador de Cdigos.Aqu se van adicionando cada que se crea un variable, incluimos un define, o creamos algunos nombres de lnea, sirve para saber que componentes incluyen ene el programa y tambin como buscador de lneas, para esto basta con dar un clic en el nombre de la lnea que deseamos encontrar, y automticamente nos indicara donde esta dicha lnea. Nmero de lnea del programa.Esto por defecto se encuentra deshabilitado, debemos habilitarlo previamente, y es muy til a la hora de encontrar errores, porque nos dice el nmero de la lnea en donde se halla un error. Espacio que ocupa el PIC.Este es el espacio de memoria que requiere el programa en el PIC y aparece una vez que se copila el programa, debemos fijarnos si alcanza en el PIC que disponemos o debemos remplazar por otro de mayor capacidad.
FISEI
Nota: Para saber la capacidad de informacin que soporta los Pic, debemos verificar en las hojas de datos del dispositivo.
FISEI - UTA
13
Programa del microcontrolador.En esta parte es donde empezamos a escribir nuestro programa, Microcode reconoce varias palabras claves como VAR, LOW, HIGH, y los pinta con maysculas y negrillas, por lo que no debemos utilizar estas palabras como nombre de subrutinas o variables. Nota: 1. Los variables, etiquetas de lnea, constantes.., no deben empezar con nmeros y tampoco debe contener espacios: 2. Los PAUSE que podemos utilizar es de 1 a 65535, es decir que PAUSE 65535, equivale a mas de 1 minuto y 5.5 segundos, y PAUSE 1 equivale a 0.001 segundos. Comentarios.Es recomendable usar comentarios todo el tiempo, aunque sea obvio para usted, alguien podra necesitarlo, y porque no para usted mismo, dentro de un tiempo no recordara ni como lo hizo ni como funciona, ni para que serbia tal instruccin. Nota: Los comentarios se crean anteponiendo un punto y como (;), noten que el texto cambia de color de negro a azul y de tipo cursiva.
Encabezado del programa: No son nada mas que comentarios en los que podemos incluir nombre, fecha, autor y una explicacin en breves palabras de cmo y para que sirve el programa. Tambin podemos hacerlo modificando en View Editor Option Program header, aqu colocamos el autor y la empresa para que se coloque automticamente cada que abrimos una pagina nueva.
Barra de tareas.En este segmento del la pantalla principal de nuestro editor de texto para microcontroladores PIC, podemos acceder a varias funciones que nos permite el editor. Varias funciones ya se detallaron anteriormente durante la configuracin de nuestro editor, compilador y programador de PIC.
FISEI
FISEI - UTA
14
FISEI
FISEI - UTA
PROYECTOS DE APLICACIN Este capitulo es el ms extenso y el mas importante de este libro, los microcontroladores se aprende desarrollando prcticas reales, no hay nada ms emocionante y satisfactorio que ver funcionando un proyecto realizado por uno mismo. Al igual que otras carreras la prctica es lo que nos hace mejores. Es importante seguir en orden el avance de los proyectos ya que existen proyectos que requieren de una secuencia de aprendizaje. Como materiales bsicos necesitamos un PIC16F62X, un protoboard preferible de 4 regletas, un regulador de voltaje 7805, una fuente de energa y por supuesto tener un grabador de PICS como el que se incluir mas adelante, este es un grabador tipo JMD (Jens Dyekjaer Madesn), muy fcil de utilizar ya que solo requiere la energa del puerto COM. Para construir este grabador ser necesario que primero lea el capitulo dedicado a esto. Si desea utilizar otro modelo de PIC que no sea el PIC16F62X, debe considerar los cambios necesarios para su correcto funcionamiento.
Este proyecto genera un tren de pulsos visible por medio de un LED con intervalos de tiempo de 1 segundo.
FISEI
led var portb.0 octavio: high led pause 1000 low led pause 1000 goto octavio end
' etiqueta para el puerto B.0 ' nombre sub rutina ' enciendo led ' espero 1 segundo ' apago led ' ir a octavio
FISEI - UTA
15
Una vez realizado este proyecto siga intentando con diferentes tiempos de Pause, recuerde que son en milisegundos y sus valores son desde 1 hasta 65535, pruebe Pause 3 ver que el parpadeo es mas lento, as mismo ponga diferentes valores entre los 2 Pause, vera diferentes efectos. Si desea tiempos mas pequeos debe usar Pauseus, este se mide en microsegundos.
FISEI
FISEI - UTA
16
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
Trisb = 0 semaf: portb =%100001 pause 9000 portb =%100010 pause 3000 portb =%001100 pause 9000 portb =%010100 pause 3000 goto semaf end
'encender rojo del 1er semforo y verde del 2do semforo 'esperar 9 segundos 'cambiar el 2do semforo de verde a amarillo 'esperar 3 segundos 'cambiar a verde el 1er semforo y rojo el 2do semforo 'esperar 9 segundos 'cambiar el 1er semforo de verdee a amarillo 'esperar 3 segundos 'ir a semforo
FISEI
FISEI - UTA
17
Rojo1 var portb.5 Amarillo1 var portb.4 Verde1 var portb.3 Rojo2 var portb.2 Amarillo2 var portb.1 Verde2 var portb.0 semaf: high rojo1 : high verde2 pause 9000 low verde2 : high amarillo2 pause 3000 low amarillo2 : low rojo1 high verde1 : high rojo2 pause 9000 low verde1 : high amarillo1 pause 3000 goto semaf end
En esta otra manera de escribir el programa, noten que es mas largo que el primer programa, y adems no escribimos trisb = 0 al inicio, porque HIGH ya los convierte en salida, tambin aqu se ve algo nuevo los 2 puntos (:), estos sirven para declaraciones mltiples en una sola lnea, para ambos casos el tamao de cdigo generado es el mismo. Ejemplo, si queremos expresar en una sola lnea las 2 siguientes declaraciones: HIGH Rojo1 HIGH Verde2 Quedara as: HIGH Rojo1 : HIGH Verde2
Si se desea aplicar este proyecto con focos de 110V, debemos utilizar perifricos de salida como los rels, el siguiente es el diagrama de conexin de un rel.
FISEI
FISEI - UTA
18
FISEI
FISEI - UTA
19
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 PAUSE, 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 PIC, y otra que si queremos cambiar el PAUSE 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 PAUSE, deberamos cambiarlo a los 30 PAUSE por el de otro valor, un ejemplo sera trisb = 0 prueba1: portb =%00000001 pause 1000 portb =%00000010 pause 1000 portb =%00000100 pause 1000 goto prueba1 end
trisb = 0 prueba2: portb =%00000001 gosub esperar portb =%00000010 gosub esperar portb =%00000100 gosub esperar goto prueba2 esperar: pause 1000 return end
FISEI
FISEI - UTA
20
trisb = %00000000 discoteca: portb = %00000001 gosub tiempo portb = %00000010 gosub tiempo portb = %00000100 gosub tiempo portb = %00001000 gosub tiempo portb = %00010000 gosub tiempo portb = %00100000 gosub tiempo portb = %01000000 gosub tiempo portb = %10000000 gosub tiempo goto discoteca tiempo: pause 200 return
' convioerte todos los pines del puerto B en salida ' enciende el puerto B.0 y los demas los apaga ' ir a sub rutina tiempo y volver cuando diga RETURN ' enciende el puerto B.1 y los demas los apaga ' ir a sub rutina tiempo y volver cuando diga RETURN ' enciende el puerto B.2 y los demas los apaga ' ir a sub rutina tiempo y volver cuando diga RETURN ' enciende el puerto B.3 y los demas los apaga ' ir a sub rutina tiempo y volver cuando diga RETURN ' enciende el puerto B.4 y los demas los apaga ' ir a sub rutina tiempo y volver cuando diga RETURN ' enciende el puerto B.5 y los demas los apaga ' ir a sub rutina tiempo y volver cuando diga RETURN ' enciende el puerto B.6 y los demas los apaga ' ir a sub rutina tiempo y volver cuando diga RETURN ' enciende el puerto B.7 y los demas los apaga ' ir a sub rutina tiempo y volver cuando diga RETURN
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
21
; Primero se crea y asigna un tamao para la variable peter ; Ejecuta las siguientes instrucciones 5 veces hasta donde dice NEXT ; una vez concluido las repeticiones contina con la declaracin que ; 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 PIC, una vez que el AV R es desconectado, los datos de la memoria RAM se borran. Repe VAR Bit ; crea una variable y asigna un tamao de un bit, es decir 0 o 1 Repe VAR Byte Repe VAR Word ; crea una variable y asigna un tamao de 8 bits, es decir 0 a 255 ; 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.
repe var byte led var portb.0 programa: for repe = 1 to 5 ' para repeticiones de 1 a 5 high led pause 500 low led pause 500 next pause 2000 for repe = 1 to 3 ' para repeticiones de 1 a 3 high led pause 500 low led pause 500 next pause 3000 goto programa end
FISEI
FISEI - UTA
22
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, pensaramos que el programa ser el doble del tamao 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 ms que recorrer un uno lgico a la izquierda o - Derecha de la salida de los puertos. Los desplazamientos utiliza la multiplicacin y la divisin, como sabemos el PIC trabaja con el sistema binario, si tenemos una variable X con un valor inicial de 1 (%00000001) y lo Multiplicramos por 2 . el resultado sera 2 (%00000010),y este a su vez lo volveramos a multiplicar por 2 el resultado sera 4 (%00000100), y as sucesivamente hasta llegar a 128, en le en binario sera (% 10000000), veramos 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: LEDS = LEDS << 1 Equivale a multiplicar por 2 y se desplaza uno a uno, tambin podemos LEDS = LEDS << 2 equivalente a multiplicar por 4 y se desplaza de dos en dos LEDS = LEDS >> 1 equivale a dividir por 2 y se desplaza uno a uno hacia la derecha Entendido como funciona los desplazamientos desarrollamos el siguiente programa:
x var byte leds var portb trisb = 0 'hacemos salida todo el puerto B leds = 1 'cargamos la variable LEDS con 1 (%00000001) prog: for x = 1 to 7 leds = leds << 1 'desplazamos uno a uno a la izquierda pause 200 next
FISEI
FISEI - UTA
23
for x = 1 to 7 leds = leds >> 1 'desplazamos uno a uno a la derecha pause 200 next goto prog end
Nota: No olviden cargar a LEDS = 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.
FISEI
Diagrama de conexin de dos pulsadores, el primero es 1 Lgico, es decir siempre permite el ingreso de 5V al PIC, cuando es presionado, el voltaje se desva a tierra y en este caso el PIC detecta un cambio de estado de 1L a 0L, el funcionamiento del segundo pulsador es totalmente lo contrario.
FISEI - UTA
24
IF porb.0 = 0 THEN Michu ; ir a Michu si la entrada Portb.0 es cero lgico IF porb.0 = 1 THEN Gato ; ir a Gato si la entrada Portb.0 es uno lgico
; Si la comparacin es verdadera ejecuta todo el ; contenido que se encuentra entre el THEN y el ; END IF
; 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
FISEI
FISEI - UTA
25
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 PIC 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
cmcon = 7 'convierte todo el puerto A en digital prog: if portb.3 = 0 then encen ' si portb.3 = 0 ir a encen goto prog encen: high porta.1 pause 1000 low porta.1 goto prog end
FISEI
FISEI - UTA
26
cmcon = 7 'convierte todo el puerto A en digital trisb = 0 boton var porta.1 num var byte num = 0 pulsar: portb = num 'indica sacar el valor de num a travs del puerto B if boton = 0 then contar goto pulsar contar: num = num + 1 'suma 1 a la variable num 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 PIC 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 PIC 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 PAUSE 200, que es necesario para que en el momento de soltar la tecla se estabilice la seal
cmcon = 7 'convierte todo el puerto A en digital trisb = 0 boton var porta.1 num var byte num = 0 pulsar: portb = num 'indica sacar el valor de num a travs del puerto B if boton = 0 then contar goto pulsar contar: IF boton = 0 then contar Pause 200 num = num + 1 'suma 1 a la variable num goto pulsar end
FISEI
FISEI - UTA
27
Para conocer ms sobre los operadores matemticos disponibles como: resta, multiplicacin, divisin, etc., existentes en el compilador PICBasic PRO, recomendamos ver la ayuda de microcode en Help Topics/math operators/introduccin o visite las webs www.frino.com.ar, www.todopic.com.ar y descargue un manual de pbp en espaol.
FISEI
FISEI - UTA
28
Pbaja var portb.5 ' el portb.5 se llama Pbaja Psube var portb.4 led var portb.3 xy var byte veces var byte veces = 100 inicio: high led gosub timer low led gosub timer goto inicio timer: if psube = 0 then gosub restar if pbaja = 0 then gosub sumar for xy = 1 to veces pause 5 next return sumar: if veces > 150 then return veces = veces + 5 return restar: if veces < 10 then return veces = veces - 5 return end
FISEI
FISEI - UTA
29
@ device mclr_on 'activo MCLR iniciar: high portb.4 pause 200 low portb.4 pause 200 goto iniciar
FISEI
FISEI - UTA
30
@ device mclr_off 'apago MCLR trisb = %11110000 ' hace salidas solo los bits mas bajos nmero var byte encerar: nmero = 0 display: portb = nmero pause 500 if nmero = 9 then encerar nmero = nmero + 1 goto display end
FISEI
FISEI - UTA
31
@ device mclr_off 'apago MCLR trisb = %11110000 ' hace salidas solo los bits mas bajos nmero var byte bot var portb.4 encerar: nmero = 0 display: portb = nmero if bot = 0 then aumentar goto display aumentar: if bot = 0 then aumentar pause 200 if nmero = 0 then encerar nmero = nmero + 1 goto display end
Ustedes se preguntaran como hacer para que el nmero se incremente apenas pulsamos la tecla y no cuando soltamos como actualmente sucede, pues bien para esto utilizamos banderas que no son nada ms que una variable de 1 bit, esta nos indica cuando ha sido pulsada. El siguiente es un ejercicio adicional aplicando la bandera.
FISEI
@ device mclr_off 'apago MCLR trisb = %11110000 ' hace salidas solo los bits mas bajos nmero var byte bot var portb.4 flag var bit encerar: nmero = 0 display: portb = nmero if bot = 0 then aumentar pause 80 flag = 0 goto display aumentar: if flag = 1 then goto display flag = 1 if nmero = 0 then encerar nmero = nmero + 1 goto display end
FISEI - UTA
32
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
FISEI
FISEI - UTA
33
@ device mclr_off 'apago MCLR di var byte dat var byte trisb = 0 prog: for di = 0 to 15 lookup di,[64,121,36,48,25,18,2,120,0,120,16,8,3,70,33,6,4],dat 'toma uno por uno cada valor de la tabla contante y lo guarda en 'la variable dat portb = dat pause 500 next di goto prog end
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.
FISEI
FISEI - UTA
34
FISEI
@ device mclr_off 'apago MCLR trisb = 0 display: portb = 224 + 8 '%11100000, activa el transistor de las unidades y presenta el 8 pause 5 portb = 208 + 7 '%11100000, activa el transistor de las decenas y presenta el 7 pause 5 portb = 176 + 6 '%11100000, activa el transistor de las centenas y presenta el 6 pause 5 portb = 112 + 5 '%11100000, activa el transistor de los miles y presenta el 5 pause 5 goto display end
FISEI - UTA
35
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 nmero al cual va a comparar, si el nmero 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 El siguiente es el programa para controlar los 4 displays, contar, encerar, comparar y visualizar el nmero almacenado en la memoria.
FISEI
FISEI - UTA
36
@ device mclr_off 'apago MCLR Unid vAr Byte Dece vAr Byte Cent vAr Byte Mile vAr Byte Setunid vAr Byte Setdece vAr Byte Setcent vAr Byte Setmile vAr Byte Setunid = 4 Setdece = 2 Setcent = 0 Setmile = 0 chicha vAr Porta.0 Contar vAr Porta.1 Encera vAr Porta.2 visual vAr Porta.3 activar var bit trisb = 0 cmcon = 7 high chicha pause 200 Encerar: Unid = 0 Dece = 0 Cent = 0 Mile = 0 low chicha display: Portb = 224 + Unid pause 5 Portb = 208 + Dece pause 5 Portb = 176 + Cent pause 5 Portb = 112 + Mile pause 5' Gosub Teclas Goto display
Teclas: If contar = 0 Then Gosub Sumar If encera = 0 Then Gosub Encerar If visual = 0 Then Gosub Visualizar Activar = 1 Return Sumar: If Activar = 0 Then Return Activar = 0 Unid = Unid + 1 If Unid < 10 Then Comparar Unid = 0 Dece = Dece + 1 If Dece < 10 Then Comparar Dece = 0 Cent = Cent + 1 If Cent < 10 Then Comparar Cent = 0 Mile = Mile + 1 If Mile < 10 Then Comparar Mile = 0 Return Visualizar: Portb = 224 + Setunid pause 5 Portb = 208 + Setdece pause 5 Portb = 176 + Setcent pause 5 Portb = 112 + Setmile pause 5 Return Comparar: If unid != setunid then return If dece != setdece then return If cent != setcent then return If mile != setmile then return high chicha return end
FISEI
FISEI - UTA
37
Esquema de conexin para manejar 4 displays directamente desde el PIC y multiplexado por el puerto A.
FISEI
FISEI - UTA
38
@ device mclr_off 'apago MCLR cmcon = 7 'convierte todo el puerto A en digital trisb = 0 'convierte todos los pines del puerto B en salidas trisa = 0 'convierte todos los pines del puerto A en salidas texto: porta = 14 '%1110 activa el display de la derecha portb = 8 '%0001000 forma letra A pause 5 porta = 13 '%1101 activa el siguiente display portb = 71 '%1000111 forma letra L pause 5 porta = 11 '%1011 activa el siguiente display portb = 64 '%1000000 forma letra O pause 5 porta = 7 '%0111 activa el siguiente display portb = 9 '%0001001 forma letra H pause 5 goto texto end
FISEI
FISEI - UTA
39
@ device mclr_off 'apago MCLR cmcon = 7 'convierte todo el puerto A en digital trisb = 0 'convierte todos los pines del puerto B en salidas trisa = 0 'convierte todos los pines del puerto A en salidas x var byte texto: for x = 1 to 20 porta = 14 : portb = 8 pause 5 porta = 13 : portb = 71 pause 5 porta = 11 : portb = 64 pause 5 porta = 7 : portb = 9 pause 5 next for x = 1 to 20 porta = 14 : portb = 127 pause 5 porta = 13 : portb = 8 pause 5 porta = 11 : portb = 71 pause 5 porta = 7 : portb = 64 pause 5 next for x = 1 to 20 porta = 14 : portb = 9 pause 5 porta = 13 : portb = 127 pause 5 porta = 11 : portb = 8 pause 5 porta = 7 : portb = 71 pause 5 next
for x = 1 to 20 porta = 14 : portb = 64 pause 5 porta = 13 : portb = 9 pause 5 porta = 11 : portb = 127 pause 5 porta = 7 : portb = 8 pause 5 next for x = 1 to 20 porta = 14 : portb = 71 pause 5 porta = 13 : portb = 64 pause 5 porta = 11 : portb = 9 pause 5 porta = 7 : portb = 127 pause 5 next goto texto end
FISEI
FISEI - UTA
40
FISEI
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 menos significativo (bus de datos bidireccional) Alimentacin del backlight +3.5V o +5 Vcc (segn especificaciones tcnicas) Tierra GND del backlight
FISEI - UTA
41
Los LCD se puede conectar con el PIC con un bus de 4 u 8 bits, la diferencia est en el tiempo que se demora, pues la comunicacin a 4 bits, primero enva los 4 bits ms altos y luego los 4 bits mas bajos, mientras que la de 8 bits enva todo al mismo tiempo, esto no es un inconveniente si consideramos que el LCD trabaja en microsegundos. Pero la gran ventaja de hacer conexin a 4 bits, son los pocos cables que se deben conectar, como podemos ver en la figura siguiente solo debemos conectar el bit de Registro, el Enable y los 4 bits ms altos del LCD, con esto es suficiente para enviar mensajes. El compilador PBP soporta mdulos LCDS con controlador Hitachi 44780 o equivalentes y por defecto, asume que se conecto en el pin A4 el bit de registro, en el pin B3 el bit Enable y en el puerto A empezando desde A0 hasta A3, los bits ms altos del LCD. Esta configuracin predefinida, se lo puede cambiar de acuerdo a la necesidad, como lo veremos mas adelante.
FISEI
FISEI - UTA
42
@ device mclr_off 'apago MCLR pause 200 lcdout $FE, 1, "Hola" 'limpiar pantalla y sacar el tecto hola lcdout $FE, $C0, "micro PIC" 'pasar al comienzo ded la segunda linea 'y escribir micro PIC end
Nota: algunos LCD no requieren de ninguna PAUSE al inicio, pero existen otros modelos que necesita unos pocos milisegundos para estar listos, por eso colocamos un PAUSE 200 al comienzo del programa. Bien una vez listo el texto notaremos que las dos palabras estn al lado izquierdo, si queremos que salgan centrados en nuestro LCD, tenemos 2 maneras de hacerlo, la primera es dando espacio antes de cada palabra, ejemplo: LCDOUT $FE,1, Hola y LCDOUT $FE, $C0, Micro PIC
FISEI
FISEI - UTA
43
Lo cual es sencillo pero no es muy recomendable porque ocupa mas espacio en el PIC, la segunda manera es asignando el lugar donde se requiere que aparezca cada palabra.
LCDOUT $FE, 1 LCDOUT $FE, $86, "Hola" LCDOUT $FE, $C4, "micro PIC"
'pasar el cursor a la 7ma casilla de 1ra lnea y escribe 'pasar a la casilla 5ta de la 2da lnea y escribe micro PIC
Se debe entender que existe un cursor que aunque no lo vemos, pues este es el que indica donde aparecer la siguiente letra, para poder entender haremos un ejercicio completo, as podrn aprender ms de LCD y las funciones de cada uno de los comandos. Primero que nada haremos visible el cursor y luego pondremos PAUSE para poder ver el funcionamiento.
FISEI
@ device mclr_off 'apago MCLR x var byte pepa con $FE pause 2000 lcdout pepa, 1 pause 2000 lcdout pepa, $0F 'muestra el cursor en casilla negra pause 2000 lcdout pepa, $0E 'subraya el cursor pause 2000 lcdout pepa, $14 'desplaza el cursor una casilla a la derecha pause 2000 lcdout, "TABIN" pause 2000 for x = 1 to 3 lcdout pepa, $10 'desplaza el cursos una casilla a la izquierda pause 1000 next lcdout, "V" 'enviar caracter ASCII "V" para corregir TAVIN pause 2000 lcdout pepa, $C0+12, "8Vo" pause 2000 lcdout pepa,2,"1" 'vuelve al inicio de la 1era fila y escribe 1 end
FISEI - UTA
44
Observen que la constante $FE se le cambio por pepa, as mismo si se les dificulta memorizar como pasar a la segunda lnea, puede definir la constante: lin2 CON $C0, y cuando desee escribir en la segunda lnea pondran: LCDOUT pepa, lin2, Hola, o lo que es lo mismo utilizando nmeros decimales: LCDOUT 254, 192, Hola. Tambin cave recalcar que el LCD tiene una memoria RAM (Random Access Memory) que lo explicaremos ms adelante, por lo que una vez que se enva el texto, este permanecer ah y el PIC se lo puede utilizar para otras tareas o podemos desconectarlo si lo deseamos. En ocasiones especiales se debe cambiar la configuracin de los pines del PIC hacia el LCD, por ejemplo para utilizar los comparadores de voltaje que se encuentran en el puerto A, necesitamos dejar disponibles estos pines, esto se logra adicionando al principio lo siguiente:
PORTB 4
define pines del LCD B4 a B7 empezando desde el puerto B4 hasta el B7 define pin para conectar el bit RS en el puerto B3 define el pin par conectar el bit Enable en el puerto B2
Una vez que se define la nueva configuracin de pines para el LCD, programamos de la misma forma que las ocasiones anteriores, es importante adems saber que los 4 bits de datos solo se pueden configurar en los 4 bits ms bajos (B.0 al B.3) o los 4 bits ms altos (B.4 al B.7) de un puerto del PIC, y si deseamos hacer una comunicacin a 8 bits con el LCD, estos deben estar en un solo puerto, adems debemos definir en el PBP que vamos a utilizar un bus de 8 bits, esto es de la siguiente manera: DEFINE LCD_BITS 8 Define comunicacin a 8 bits con el LCD Y si nuestro LCD posee 4 lneas, tambin debemos definirlo de la siguiente forma DEFINE LCD_BITS 4 Define comunicacin 4 8 bits con el LCD
FISEI
FISEI - UTA
45
Nunca debes olvidarte de colocar el potencimetro en el display y las alimentaciones, en nuestras simulaciones vamos a obviar esto.
Configuracin de un LCD a 4 bits con una configuracin diferente a la predefinida por el PBP, esta vez utilizando el puerto B.3 para el bit R/S al B2 pare el Enable y desde el B.4 al B.7 para los bits de comunicacin .
FISEI
FISEI - UTA
46
@ device mclr_off 'apago MCLR DEFINE LCD_DREG PORTB DEFINE LCD_DBIT 4 DEFINE LCD_RSREG PORTB DEFINE LCD_RSBIT 3 DEFINE LCD_EREG PORTB DEFINE LCD_EBIT 2 x var byte abc var byte pause 200 ini: lcdout $FE,1 for x = 0 to 15 lookup x,["Microcontrolador"],abc lcdout ,abc pause 400 next pause 2000 goto ini end
FISEI
FISEI - UTA
47
@ device mclr_off 'apago MCLR DEFINE LCD_DREG PORTB DEFINE LCD_DBIT 4 DEFINE LCD_RSREG PORTB DEFINE LCD_RSBIT 3 DEFINE LCD_EREG PORTB DEFINE LCD_EBIT 2 x var byte abc var byte lcdout $FE, $7 lcdout $FE, 1 pause 200 ini: lcdout $FE,$90 for x = 0 to 23 lookup x,["Microcontroladores-PIC-"],abc lcdout ,abc pause 400 next goto ini end
DECLARACIN PULSEIN. Sirve para contar el nmero 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. COUNT portb.0, 1000, abc
FISEI
FISEI - UTA
48
El cual se interpreta as: cuenta pulsos a travs del puerto B0 en un periodo de 1000 milisegundos y lo guarda en la variable previamente creada llamada abc, el periodo podemos variarlo de 1 a 65535.
@ device mclr_off 'apago MCLR cmcon = 7 ledred var portb.2 ledver var portb.1 puls var word prog: count portb.0, 1000, puls ' contar pulsos en el puerto B.0 lcdout $FE,1 LCDOut $FE,$82,"Frecuencia" lcdout $FE,$C5, dec puls, "Hz" if puls > 120 then alarmah if puls < 100 then alarmal low ledred : low ledver goto prog alarmah: high ledred : low ledver goto prog alarmal: low ledred : high ledver goto prog end
LA PALABRA DEC. Sirve para mostrar el nmero de la variable en decimal, tambin se lo puede representar por el signo (#), adems existe las palabras BIN y HEX, el siguiente es un ejemplo de cmo mostrara el LCD si puls = 105: LCDOUT $FE,$C5, DEC puls, Hz ;muestra en el LCD as: 105Hz
Tambin se lo puede utilizar el signo # que equivale a DEC LCDOUT $FE,$C5, # puls, Hz ;muestra en el LCD as: 105Hz Si deseamos ver la variable en hexadecimal pondramos as: LCDOUT $FE,$C5, HEX puls, Hz ;muestra en el LCD as: 69Hz
FISEI
FISEI - UTA
49
FISEI
FISEI - UTA
50
@ device mclr_off 'apago MCLR DEFINE LCD_DREG PORTB DEFINE LCD_DBIT 4 DEFINE LCD_RSREG PORTB DEFINE LCD_RSBIT 3 DEFINE LCD_EREG PORTB DEFINE LCD_EBIT 2 dato var byte medir pot portb.0,255,dato 'leer el potenciometro y guardar en dato lcdout $FE,1," Rango= " lcdout ,#dato pause 100 goto medir end
SONIDO
GENERACIN DE SONIDO
El software Microcode es capaz de sacar las frecuencias especificadas por un pin del PIC, para esto aprenderemos la declaracin FREQOUT. LA DECLARACIN FREQOUT. 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. FREQOUT pin, duracin, pulsos FREQOUT Portb.0 ,2000 , 1000
Quiere decir sacar una frecuencia de 1000 ciclos durante 2 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
51
freqout portb.0, 2000,7200 ;dacar una frecuencia dee 7.2KHz ;durante 2 segundos por el puerto B.0 end
FISEI
FISEI - UTA
52
programa: sound portb.0, [100, 10, 50,10] ; genera tonos por el puerto B.0 goto programa end
Con un oscilador de 20MHz, el micro trabaja 5 veces ms rpido que antes, es decir con un oscilador interno de 4Mhz, el PIC ejecutaba cada instruccin en 1uS, con un oscilador de 20MHz lo har en 0.2 uS (0.0000002 S). Para esta prctica necesitaremos estos elementos 1 cristal de 20MHz u otro de menor velocidad. 2 capacitores de 22pF
FISEI
FISEI - UTA
53
define OSC 20 ;especifica que se va a utilizar un oscilador de 20MHz programa: sound portb.0, [100, 10, 50,10] ; genera tonos por el puerto B.0 goto programa end
Para que este proyecto funcione se debe especificar al compilador que usaremos un cristal externo, para ello debemos aumentar la siguiente lnea de cdigo al inicio del programa. @ DEVICE HS_OSC Frecuencia 4 MHz 32 KHz 200 KHz 100 KHz 2 MHz 4 MHz 8 MHz 10 MHz 12 MHz 16 MHz 20 MHz OSC1/C1 ------------68 100 pF 15 30 pF 68 150 pF 15 30 pF 15 30 pF 15 30 pF 15 30 pF 15 30 pF 15 30 pF 15 30 pF OSC1/C1 -----------68 100 pF 15 30 pF 68 150 pF 15 30 Pf 15 30 pF 15 30 pF 15 30 pF 15 30 pF 15 30 pF 15 30 pF Tipo IntRC I/O LP LP XT XT XT HS HS HS HS HS
Esta practica consiste en sacar por un parlante el sonido caracterstico de un telfono celular, para esto emplearemos la ayuda de la declaracin SOUND. En cuando al diagrama de conexin y materiales, podemos utilizar el mismo de la prctica anterior
FISEI
FISEI - UTA
54
@ device HS_OSC ;cambiar a oscilador de alta velocidad HS define OSC 20 ;especifica que se va a utilizar un oscilador de 20MHz x var byte prog: for x = 1 to 15 sound portb.0, [125,4,123,5] pause 2500 next goto prog end
Pruebe con algunas combinaciones de tonos, as como tambin con diferentes tiempos y ver que bien pude componer una meloda.
@ device HS_OSC ;cambiar a oscilador de alta velocidad HS define OSC 20 ;especifica que se va a utilizar un oscilador de 20MHz inicio: freqout portb.0,200,941,1336 ;equivale a presionar la tecla 0 de DTMF pause 50 freqout portb.0,200,852,1477 ;equivale a presionar la tecla 9 de DTMF pause 50 goto inicio
Esto deberamos hacerlo por cada tecla que desearemos que marque, pero para facilitarnos las cosas el compilador PBP tiene una declaracin especfica para este trabajo.
FISEI
FISEI - UTA
55
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 si lo deseamos, su manera de utilizar es la siguiente: DTMFOUT portb.0, [0,9,8,7,6,7,2,5,1] ; equivale a presionar las teclas 098767251
En la figura siguiente se muestra el diagrama bsico de conexin para poder hacer una llamada telefnica, debido a que el oscilador interno que posee el PIC es un RC, esto no es muy preciso, por lo que experimentalmente no es muy confiable el marcado. Para que los tonos DTMF que generan el PIC sean validos al 100%, es necesario utilizar un cristal externo, sea este desde 4 a 20 MHz, con sus debidos capacitores. 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).
FISEI
FISEI - UTA
56
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 PIC y adems como proteccin para el PIC. 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 PIC y el negativo haca el pin del PIC, por lo que necesitaremos la ayuda de un voltmetro para poder identificar la polaridad de la red.
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 PIC
FISEI
FISEI - UTA
57
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
@ device HS_OSC ;cambiar a oscilador de alta velocidad HS define OSC 20 ;especifica que se va a utilizar un oscilador de 20MHz rele var portb.1 x var byte iniciar: pause 2000 high rele pause 1000 dtmfout portb.0,[0,9,8,7,6,7,2,5,1] 'nmero al cual el PIC va a llamar pause 3000 for x = 1 to 25 sound portb.0,[100,10,50,10] next low rele end
FISEI - UTA
58
FISEI
FISEI - UTA
59
@ device INTRC_OSC ;cambiar a oscilador interno cmcon = 7 fila var byte colu var byte tecla var byte trisa = 0 prog1: portb = 0 trisb = %11110000 ' si la tecla es presionada mantngalo en prog1 if ((portb >> 4)!=%1111) then prog1 prog2: for fila = 0 to 3 portb = 0 trisb = (dcd fila)^%11111111 ' setea una fila a una y los ' invierte a todos los demas colu = portb >> 4 'desplaza los 4 bits altos al inicio if colu !=%1111 then numtecla 'si una tecla es pulsada ir numtecla next fila goto prog2 numtecla: 'calcula el valor de la tecla multiplicando por 4 la fila 'a la que pertenece y sumando a la posicin que se encuentra 'para un teclado de 12 pulsdores, deebemos cambiar (fila*3) tecla = (fila*4) + (NCD (colu^%1111)) porta = tecla goto prog1 end
Debe considerarse que el lugar de las teclas no se pueden cambiar, puesto que este sistema de programacin, utiliza operaciones matemticas para calcular la tecla pulsada, pero debemos reconocer lo que es el programa, por eso se propone otro modo de programar, en donde los valores se le puede asignar en cualquier lugar, as como tambin se le puede poner letras.
FISEI
FISEI - UTA
60
@ device INTRC_OSC cmcon = 7 TRISA = 0 A var portb.0 B var portb.1 C var portb.2 D var portb.3 uno var portb.4 dos var portb.5 tres var portb.6 cuatro var portb.7 barrido: low a if uno = 0 then porta = 1 if dos = 0 then porta = 2 if tres = 0 then porta = 3 if cuatro = 0 then porta = 10 high a low B if uno = 0 then porta = 4 if dos = 0 then porta = 5 if tres = 0 then porta = 6 if cuatro = 0 then porta = 11 high B low c
if uno = 0 then porta =7 if dos = 0 then porta = 8 if tres = 0 then porta = 9 if cuatro = 0 then porta = 12 high c low D if uno = 0 then porta = 14 if dos = 0 then porta = 0 if tres = 0 then porta = 15 if cuatro = 0 then porta = 13 high D pause 10 goto barrido end
FISEI
FISEI - UTA
61
Como se puede ver este programa es un poco ms largo, pero ocupa menos espacio en la memoria del PIC que el ejercicio anterior, adems tiene la ventaja de poder en cualquier lugar el valor de las teclas y es ms fcil de entender, as que este ser la forma que utilizaremos en adelante. Su funcionamiento es sencillo solo debemos fijarnos cual fila es la que est en LOW y esta es la fila que se est 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: LOW B If Tres = 0 Then Porta = 6 HIGH B Debemos considerar que una persona requiere como mnimo 100 milisegundos para presionar una tecla, en este tiempo el PIC 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
62
Este es un proyecto aplicable en seguridad, se trata de una cerradura electrnica en la cual al ingresar los 4 dgitos correctamente en su teclado, el PIC energiza un rel, pero si la clave es incorrecta el PIC emite 3 pitos indicando que ingreso una clave errnea 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 PIC reconoci la pulsacin, tambin 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 nmero de la combinacin (1, 2, 3, 4) se la grab en el programa del PIC por lo que reside en la memoria FLASH, mas adelante en los prximos 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 PIC.
FISEI
FISEI - UTA
63
@ device INTRC_OSC Nmero var Byte R var Byte BIP var porta.0 LED var porta.1 DOOR var porta.2 A var Portb.0 B var Portb.1 C var Portb.2 D var Portb.3 Uno var Portb.4 Dos var Portb.5 Tres var Portb.6 Cuatro var Portb.7 Iniciando: high Led : high Bip pause 500 low Led : low Bip Goto Teclauno Barrido: low a If Uno = 0 Then Nmero = 1 : Return If Dos = 0 Then Nmero = 2 : Return If Tres = 0 Then Nmero = 3 : Return If Cuatro = 0 Then Nmero = 10 : Return high a low b If Uno = 0 Then Nmero = 4 : Return If Dos = 0 Then Nmero = 5 : Return If Tres = 0 Then Nmero = 6 : Return If Cuatro = 0 Then Nmero = 11 : Return high b low c If Uno = 0 Then Nmero = 7 : Return If Dos = 0 Then Nmero = 8 : Return If Tres = 0 Then Nmero = 9 : Return If Cuatro = 0 Then Nmero = 12 : Return high c low d If Uno = 0 Then Nmero = 14 : Return If Dos = 0 Then Nmero = 0 : Return If Tres = 0 Then Nmero = 15 : Return If Cuatro = 0 Then Nmero = 13 : Return
high d pause 10 Goto Barrido Ptecla: high Led : high Bip pause 100 low Led : low Bip Espacio: If Uno = 0 Then Espacio If Dos = 0 Then Espacio If Tres = 0 Then Espacio If Cuatro = 0 Then Espacio pause 25 Return Teclauno: Gosub Barrido Gosub Ptecla If Nmero = 1 Then Teclados Goto Falso Teclados: Gosub Barrido : Gosub Ptecla If Nmero = 2 Then Teclatres Goto Falso1 Teclatres: Gosub Barrido : Gosub Ptecla If Nmero = 3 Then Teclacuatro Goto Falso2 Teclacuatro: Gosub Barrido : Gosub Ptecla If Nmero = 4 Then Openge Goto Falso3 Openge: For R = 1 To 2 pause 100 high Led : high Bip pause 100 low Led : low Bip Next
FISEI
FISEI - UTA
64
high Door pause 1000 low Door Goto Teclauno Falso: Gosub Barrido : Gosub Ptecla Falso1: Gosub Barrido : Gosub Ptecla Falso2: Gosub Barrido : Gosub Ptecla Falso3: For R = 1 To 3 pause 1000 high Led : high Bip pause 100 low Led : low Bip Next Goto Teclauno End
FISEI
FISEI - UTA
65
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 combinacin 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: despus de haber colocado la clave original, debemos mantener presionado la tecla D durante 2 segundos, para ser ms exactos en el momento que el rel se conecta despus 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 dgitos. 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 estn activadas mientras el PIC se encuentra alimentado, una vez que se corta la alimentacin al PIC esta memoria de borra, por consiguiente al momento de volver a prender el micro PIC, 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 conexin, son los mismos que se utilizaron en el ejercicio anterior.
FISEI
FISEI - UTA
66
@ device INTRC_OSC Nmero var Byte R var Byte BIP var porta.0 LED var porta.1 DOOR var porta.2 A var Portb.0 B var Portb.1 C var Portb.2 D var Portb.3 Uno var Portb.4 Dos var Portb.5 Tres var Portb.6 Cuatro var Portb.7 setprime var byte setsegu var byte setercer var byte setcuart var byte setprime = 1 setsegu = 2 setercer = 3 setcuart = 4 Iniciando: high Led : high Bip pause 500 low Led : low Bip Goto Teclauno grabauno: gosub ptecla : high led gosub barrido : gosub ptecla high led setprime = nmero grabados: gosub barrido : gosub ptecla high led setsegu = nmero grabatres: gosub barrido : gosub ptecla high led setercer = nmero grabacuatro: gosub barrido : gosub ptecla high led setcuart = nmero goto iniciando
Barrido: low a If Uno = 0 Then Nmero = 1 : Return If Dos = 0 Then Nmero = 2 : Return If Tres = 0 Then Nmero = 3 : Return If Cuatro = 0 Then Nmero = 10 : Return high a low b If Uno = 0 Then Nmero = 4 : Return If Dos = 0 Then Nmero = 5 : Return If Tres = 0 Then Nmero = 6 : Return If Cuatro = 0 Then Nmero = 11 : Return high b low c If Uno = 0 Then Nmero = 7 : Return If Dos = 0 Then Nmero = 8 : Return If Tres = 0 Then Nmero = 9 : Return If Cuatro = 0 Then Nmero = 12 : Return high c low d If Uno = 0 Then Nmero = 14 : Return If Dos = 0 Then Nmero = 0 : Return If Tres = 0 Then Nmero = 15 : Return If Cuatro = 0 Then Nmero = 13 : Return high d pause 10 Goto Barrido Ptecla: high Led : high Bip pause 100 low Led : low Bip Espacio: If Uno = 0 Then Espacio If Dos = 0 Then Espacio If Tres = 0 Then Espacio If Cuatro = 0 Then Espacio pause 25 Return
FISEI
FISEI - UTA
67
Teclauno: Gosub Barrido Gosub Ptecla If Nmero = 1 Then Teclados Goto Falso Teclados: Gosub Barrido : Gosub Ptecla If Nmero = 2 Then Teclatres Goto Falso1 Teclatres: Gosub Barrido : Gosub Ptecla If Nmero = 3 Then Teclacuatro Goto Falso2 Teclacuatro: Gosub Barrido : Gosub Ptecla If Nmero = 4 Then Openge Goto Falso3 Openge: For R = 1 To 2 pause 100 high Led : high Bip pause 100 low Led : low Bip Next high Door pause 1000 low Door Goto Teclauno Falso: Gosub Barrido : Gosub Ptecla Falso1: Gosub Barrido : Gosub Ptecla Falso2: Gosub Barrido : Gosub Ptecla Falso3: For R = 1 To 3 pause 1000 high Led : high Bip pause 100 low Led : low Bip Next Goto Teclauno End
FISEI
FISEI - UTA
68
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 programacin y borrado elctrico, que a diferencia de la memoria RAM, esta no es voltil y tiene capacidad para 128 Bytes, lo que quiere decir que si al PIC se le corta la alimentacin, los datos almacenados en la memoria EEPROM, permanecen segn su fabricante por un periodo de 40 aos a 100 aos. 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 errnea 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 PIC a travs de un programador. En cuanto a los materiales y el diagrama de conexin, son los mismos que se utilizaron en el proyecto anterior. LA DECLARACIN EEPROM, READ Y WRITE Estas declaraciones las explicaremos con un ejercicio. EEPROM 5,[3,K,9,12] ; quiere decir colocar en la memoria EEPROM, direccin 5 el nmero 3, en la direccin 6 el carcter ASCII de K, es decir el nmero 75, en la direccin 7 se guardara el nmero 9 y as sucesivamente, recuerde que el PIC16F628 tiene 128 espacios de memoria EEPROM de 1 BYTE cada una lo que quiere decir que el nmero ms alto que podemos guardar es el 255. READ 5, pepa ; quiere decir leer la direccin 5 de la memoria EEPROM y guardar en la variable pepa, por consiguiente pepa se carga con el nmero 3. WRITE 8, 137 ; quiere decir guardar en la direccin 8 de la memoria EEPROM el nmero 137, el dato anterior en este caso el 12 automticamente se borra y se escribe el nmero 137.
Nota: Estas declaraciones ya incluyen las pausas necesarias para realizar la grabacin.
FISEI
FISEI - UTA
69
@ device INTRC_OSC Numero var Byte R var Byte BIP var porta.0 LED var porta.1 DOOR var porta.2 A var Portb.0 B var Portb.1 C var Portb.2 D var Portb.3 Uno var Portb.4 Dos var Portb.5 Tres var Portb.6 Cuatro var Portb.7 setprime var byte setsegu var byte setercer var byte setcuart var byte setprime = 1 setsegu = 2 setercer = 3 setcuart = 4 Iniciando: for r = 1 to 2 high Led : high Bip pause 1000 low Led : low Bip next ; cargar la memoria EEPROM desde la direccin 0 en adelante eeprom 0,[1,2,3,4] reset: for r = 1 to 3 high Led : high Bip pause 50 low Led : low Bip pause 50 if (cuatro = 0) and (uno = 0) then reset next read 0, setprime read 1, setsegu read 2, setercer read 3, setcuart goto teclauno
FISEI
grabauno: gosub ptecla : high led gosub barrido : gosub ptecla high led write 0, numero grabados: gosub barrido : gosub ptecla high led write 1, numero grabatres: gosub barrido : gosub ptecla high led write 2, numero grabacuatro: gosub barrido : gosub ptecla high led write 3, numero goto reset Barrido: low a 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 high a low b 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 high b low c 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 high c low d 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 high d pause 10 Goto Barrido
FISEI - UTA
70
Ptecla: high Led : high Bip pause 100 low Led : low Bip Espacio: If Uno = 0 Then Espacio If Dos = 0 Then Espacio If Tres = 0 Then Espacio If Cuatro = 0 Then Espacio pause 25 Return Teclauno: Gosub Barrido Gosub Ptecla If Numero = 1 Then Teclados Goto Falso Teclados: Gosub Barrido : Gosub Ptecla If Numero = 2 Then Teclatres Goto Falso1 Teclatres: Gosub Barrido : Gosub Ptecla If Numero = 3 Then Teclacuatro Goto Falso2 Teclacuatro: Gosub Barrido : Gosub Ptecla If Numero = 4 Then Openge Goto Falso3 Openge: For R = 1 To 2 pause 100 high Led : high Bip pause 100 low Led : low Bip Next high Door pause 1000 low Door high a : high b : high c : high D if cuatro = 0 then grabauno Goto Teclauno
Falso: Gosub Barrido : Gosub Ptecla Falso1: Gosub Barrido : Gosub Ptecla Falso2: Gosub Barrido : Gosub Ptecla Falso3: For R = 1 To 30 pause 150 high Led : high Bip pause 150 low Led : low Bip high a : high b : high c : high D if (cuatro = 0) and (uno = 0) then reset Next panico: high led pause 500 low led pause 500 if (cuatro = 0) and (uno = 0) then reset goto panico End
FISEI
FISEI - UTA
71
La forma de la seal que sale por el PIC es similar a los siguientes grficos: Genera 3 ciclos al 90% alto y 10% bajo, el motor trabaja a alta velocidad
FISEI
FISEI - UTA
72
Genera 3 ciclos al 50% alto y 50% bajo, el motor trabaja a velocidad media
Genera 3 ciclos al 10% alto y 90% bajo, el motor trabaja a baja velocidad
Por consiguiente 0 representa 0% del ciclo til y 255 el 100% de nivel alto, el largo de cada ciclo para un oscilador de 5 milisegundos y para un oscilador de 20MHz es de 1 milisegundos.
FISEI
FISEI - UTA
73
@ device INTRC_OSC botsubir var portb.1 botbajar var portb.2 Led var portb.3 Frec var byte Bandera var bit frec = 125 high led pause 500 low led Prog: pwm portb.0, frec, 30 ' sacar PWM 30 ciclos de 125 seal til low led if botsubir = 0 then subir if botbajar = 0 then bajar bandera = 0 goto prog Subir: if frec > 249 then aviso if bandera = 1 then prog high led bandera = 1 frec = frec + 25 goto prog Bajar: if frec < 26 then Aviso if bandera = 1 then Prog high led bandera = 1 frec = frec - 25 goto prog Aviso: high led goto prog end
FISEI
FISEI - UTA
74
Conexin de un LM358 como conversor D/A para convertir el PWM en seal anloga de 0 a 5V.
Se necesita un voltmetro para medir los niveles de voltaje en la salida, en cuanto al programa podemos utilizar el mismo del ejercicio anterior. A la salida del LM358 podemos colocar un LED con su resistencia de 330 Ohm para poder observar su atenuacin, tambin podemos colocar el circuito del motor DC, con su capacitor y diodo de proteccin.
FISEI
FISEI - UTA
75
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.
FISEI
FISEI - UTA
76
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 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
77
FISEI
FISEI - UTA
78
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 co-rriente.
FISEI
FISEI - UTA
79
FISEI
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 - UTA
80
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
81
FISEI
@ device INTRC_OSC trisb = 0 X var byte antihorario: for x = 1 to 12 portb =%0001 gosub timer portb =%0010 gosub timer portb =%0100 gosub timer portb =%1000 gosub timer next pause 1000
for x = 1 to 12 portb =%1000 gosub timer portb =%0100 gosub timer portb =%0010 gosub timer portb =%0001 gosub timer next pause 1000 goto antihorario timer: pause 5 return end
FISEI - UTA
82
FISEI
FISEI - UTA
83
COMUNICACIN
QUE ES LA COMUNICACIN SERIAL? Existen dos formas de realizar una comunicacin binaria, la paralela y la serial. La comunicacin paralela como por ejemplo la comunicacin del PIC con el CI. 7447 de los ejercicios anteriores, en donde los datos viajan simultneamente a travs de los 4 hilos, tiene la ventaja de que la transferencia de datos es ms rpida, pero el inconveniente es que necesitamos un cable por cada bit de dato, lo que encarece y dificulta el diseo de las placas, otro inconveniente es la capacitancia que genera los conductores por lo que la transmisin se vuelve defectuosa a partir de unos pocos metros. La comunicacin serial en cambio es mucho ms lenta debido a que transmite bit por bit pero tiene la ventaja de necesitar menor cantidad de hilos, y adems se puede extender la comunicacin a mayor distancia, por ejemplo; en la norma RS232 a 15 mts., en la norma RS422/485 a 1200 mts y utilizando un MODEM, pues a cualquier parte del mundo. Existen dos formas de realizar la comunicacin serial: la sincrnica y la asincrnica, la diferencia entre estas dos formas de comunicacin es que la comunicacin sincrnica adems de la lnea para la transmisin de datos, necesita otra lnea que contenga los pulsos de reloj, estos a su vez indican cuando un dato es vlido. Por otra parte la comunicacin serial asincrnica no necesita pulsos de reloj, en su lugar utiliza mecanismo como referencia tierra (RS232) o voltajes diferenciales (RS422/485), en donde la duracin de cada bit es determinada por la velocidad de transmisin de datos que se debe definir previamente entre ambos equipos. MODOS DE TRANSMISIN DE DATOS Se incluye este literal para poder entender mejor las practicas que ms adelante realizaremos, pues mencionaremos algunas palabras que podra encontrar su significado en este literal. Los modos de transmisin de datos se dividen en cuatro tipos y estos son: 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. Octavo Electrnica 2009 2010 FISEI - UTA
FISEI
84
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. 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 de una tercera estacin al mismo tiempo. Esta transmisin se utiliza exclusivamente con circuitos de comunicacin de datos.
COMUNICACIN SERIAL RS232 La norma RS232 se incluye actualmente en los computadores, conocido como puerto serial y sirve para comunicarse con otras computadoras adems del mouse, programadores, impresoras, stc. A continuacin veremos un grfico que muestra la forma de comunicacin serial.
Estructura de un dato que se enva serialmente a 2400,8N1, (2400bits/seg, sin paridad. 8 bits de dato y 1 bit de parada), correspondiente al nmero 68 carcter ASCII de "D" (%01000100), al tiempo de un bit es de 416 us. , por lo que el receptor revisa el bit de arranque despus de 208 us., y luego cada 416 us
FISEI
Como podemos ver la seal permanece en un nivel lgico alto mientras no realiza ninguna transferencia de datos. Para empezar a transmitir datos el transmisor coloca la lnea en nivel bajo durante el tiempo de un bit (416 us para 2400bits/s), este se llama el bit de arranque, a continuacin empieza a transmitir con el mismo intervalo de tiempo los bits de datos, que pueden ser de 7 u 8 bits, comenzando por los bits menos significativos y terminando por los ms significativos. Al final de la transmisin de datos se enva el bit de paridad, si estuviera activa esta opcin y por ltimo los bits de parada,
FISEI - UTA
85
que pueden ser 1 o 2, despus de esto la linea vuelve a un estado lgico alto, y el transmisor est listo para enviar el siguiente dato. Como el receptor no est sincronizado con el transmisor desconoce el momento en que empieza la transmisin, por lo que siempre debe estar en espera del cambio de estado o sea el bit de arranque, una vez que se da este bit, medio bit despus vuelve a verificar si est en bajo, si no lo est no lo recibe ya que pudo ser ocasionado por un ruido en la lnea, caso contrario si el estado sigue siendo bajo, empieza a recibir la transmisin hasta el bit de parada. Para que la lectura de los datos sea correcta, ambos equipos deben estar configurados a la misma velocidad y dems parmetros y no exceder ms all de los 2 metros, pasado esta distancia los datos recibidos pueden no ser los correctos debido a la prdida de voltaje en el cable, ruido, etc. Para distancias mayores existe el protocolo RS232, cuyos niveles de voltaje estn establecidos de la siguiente manera: para seal 1 lgica (-5V a -15V) en el transmisor y (-3V a -25V) en el receptor, para seal O lgica (+5V a +15 V) en el transmisor y (+3V a +25V) en el receptor, es decir una lgica inversa.
Comunicacin serial con la norma RS232, el dato enviado es el mismo que el de la figura anterior, con la diferencia que la lgica es inversa, 1 equivale a -10 y 0 a +10.
FISEI
Una vez comprendido la teora de la comunicacin serial y su protocolo RS232, haremos un ejercicio de comunicacin serial asincrnica modo simplex, que consiste en enviar datos, ms especficamente los caracteres ASCII de la palabra "DOG", a travs de un cable y directamente desde el PIC al PC, a 2400 bits/seg., a 8 bits de datos, sin paridad, y 1 bit de parada.
FISEI - UTA
86
Como sabemos el computador tiene al menos un puerto serial, con la norma RS232, por lo tanto debemos simular esos voltajes desde el PIC, esto lo conseguimos enviando O para representar el 1 lgico y 5V, para representar el 0 lgico, para esto existe la declaracin SEROUT. LA DECLARACIN SEROUT. Esta declaracin sirve para enviar datos seriales en un formato standard asincrnico usando 8 bits de dato, sin paridad y 1 stop bit, (8N1), y para poder utilizarlo SEROUT puerto B.l, N2400,["D"] 24008N1, en dato invertido. ;enviar el carcter ASCII "D"por el puerto Bl a
Esquema del dato enviado por el PIC simulando la norma RS232, noten que es muy similar al esquema anterior, pero con diferentes niveles de voltaje.
Debemos incluir al comienzo del programa la siguiente lnea: INCLUDE Modedefs.bas ; incluir el programa modedefs.bas (modos de comunicacin) Esto significa incluir el programa modedefs.bas en esta lnea, aqu se encuentran algunos de los parmetros para las comunicaciones, por ejemplo en nuestro caso la velocidad de transmisin que son: para dato invertido N300, N1200, N2400, N9600 y para dato verdadero: T300, T1200, T2400, T9600. Los datos invertidos por ejemplo el N2400, quiere decir que 1 lgico vale 0V, y un 0 lgico vale 5V, en cambio para dato verdadero por ejemplo el T2400 el 1gico vale 5V y el 0 lgico vale 0V y este es el que se utiliza para manejar con el CI. MAX232, el cual ya se vara mas adelante.
FISEI
Este comando INCLUDE podemos utilizarlo para nuestros propios programas por ejemplo si ponemos INCLUDE electronica.bas, se incluir el sonido para un parlante por el puerto B.0 que durara 2 segundos.
FISEI - UTA
87
include "modedefs.bas" ; incluyo los modos de comunicacin inicio: high portb.2 pause 1000 low portb.2 pause 500 serout portb.1,N2400,["DOG"] ;envia serialmente a 2400N1 los caracteres "DOG" goto inicio end
Una vez que tenemos listo el proyecto necesitamos una ventana de comunicacin serial como el Hyper terminal o la misma ventana de comunicacin serial que dispone microcode, para esto presionamos en la ventana de microcode F4 y configuramos los parmetros que necesitamos.
FISEI
FISEI - UTA
88
Para este ejercicio debemos primero seleccionar el puerto con que vamos a utilizar, luego la velocidad que se transmite el dato, en este caso a 2400 baud, luego paridad ninguna, 8 bits de datos y 1 stop bit, una vez que estemos listos para iniciar la comunicacin presionamos el botn connect, notaran en la parte inferior izquierda que deca disconnected cambiar como lo demuestra la siguiente figura.
FISEI
FISEI - UTA
89
Cuando la ventana esta activa sale un mensaje en la parte inferior izquierda connected, el com que se esta utilizando y los parmetros de comunicacin (2400N81), encienda el micro PIC y despus de apagarse el Led del puerto B.2 deber salir el texto enviado en el cuadro que dice Receive, como el programa esta en un lazo sin fin el texto DOG seguir saliendo continuamente, si deseamos limpiar el texto presionamos la hoja en blanco que esta justo encima la palabra Receive. Nota: Es importante dejar cerrado esta ventana presionando donde dice Disconnect, ya que si se la deja abierto este com no se puede utilizar para grabar micros o cualquier otra aplicacin.
DECLARACIN SERIN: esta declaracin sirve para recibir datos seriales en un formato estndar asncrono usando 8 bits de dato, sin paridad y 1 stop bit, (8N1), y poder utilizarlo, debemos incluirlo igualmente que para el SEROUT la lnea INCLUDE modedefs.bas al inicio del programa, su forma de utilizar es la siguiente: SERIN port.0, N2400, letra ; Esperar un dato serial y guardarlo en la ; variable previamente creada llamada letra. Es importante saber que esta declaracin detiene el programa esperando a que ingrese un dato, y solamente cuando haya recibido un dato, continua con la siguiente lnea de programa, para hacer que solo espere un determinado tiempo y luego contine con la siguiente lnea debe utilizar TIMEOUT. Nota: El PIC16F628A, obligadamente necesita oscilador externo de 4MHz a 16Mhz para poder comunicarse en forma serial.
FISEI
El presente proyecto consiste en enviar un texto desde la ventana de comunicacin serial de microcode hacia el PIC y este a su vez mostrara el texto en un LCD 2x16.
FISEI - UTA
90
include "modedefs.bas" ; incluir modos de comunicacin dat var byte lcdout $FE, 1, "LCD listo" pause 1000 lcdout $FE, 1 inicio: serin portb.0, N2400, dat ; esperar dato y guardarlo en dat lcdout, dat goto inicio end
FISEI
Una vez que arranca el PIC saldr un texto que dice LCD listo, un segundo despus se borrara y quedara en un lazo de espera del dato serial, si el texto inicial no sale, revise las conexiones al LCD, caso contrario si todo esta bien, abrimos la ventana de comunicacin serial de microcode de la forma que aprendimos anteriormente y escribimos en la ventana que dice Send: micro PIC, luego pulsamos la tecla Send Text, inmediatamente dedbemos ver el mismo en el LCD.
FISEI - UTA
91
FISEI
; quiere decir enviar el dato serial D por el pin B.1 a ; 2400 bits/s 8N1 en dato verdadero.
FISEI - UTA
92
El presente proyecto trabaja de la siguiente manera, una vez listo y conectado todo, cuando el Pic arranca debe encender el led y luego apagarlo, esto para asegurarnos que todo esta funcionando bien, ahora desde el computador enviaremos una letra cualquiera que no sea la C, observaran que el led parpadea cada que se le envi una letra, ahora si enviamos la C mayscula el led se quedara encendido permanentemente e inmediatamente el PIC empezara a enviar un contador separado por el signo menos (-) empezando desde el 0 hasta el 255, como podemos observar esto es un ejemplo de la transmisin half-duplex.
include "modedefs.bas" ; incluir modos de comunicacin led var portb.7 dat var byte num var byte gosub ledr inicio: serin portb.0, T2400, dat if dat = "C" then contar gosub ledr goto inicio contar: high led
serout portb.1, T2400, [#num,"-"] num = num + 1 pause 1000 goto contar ledr: high led pause 200 low led return end
FISEI
FISEI - UTA
93
FISEI
FISEI - UTA
94
Para este proyecto podemos utilizar una o dos fuentes de 5 voltios, pero seria recomendable utilizar dos fuentes para que la comunicacin se vea mas real, como es de suponerse se necesitar de 2 programas diferentes una para cada microcontrolador, por lo que empezaremos con el programa del transmisor.
;TRANSMISOR include "modedefs.bas botonA var portb.1 botonB var portb.2 botonC var portb.3 transmitir: if botona = 0 then envio1 if botonb = 0 then envio2 if botonc = 0 then envio3 goto transmitir envio1: serout portb.0, N2400,["A"] pause 500 goto transmitir envio2: serout portb.0, N2400,["B"] pause 500 goto transmitir envio3: serout portb.0, N2400,["C"] pause 500 goto transmitir end
;RECEPTOR include "modedefs.bas" ledr var portb.1 leda var portb.2 ledv var portb.3 datos var byte high ledr pause 500 low ledr recibir: serin portb.0, N2400, datos if datos = "A" then high ledr : pause 1000 if datos = "B" then high leda : pause 1000 if datos = "C" then high ledv : pause 1000 low ledr : low leda : low ledv goto recibir end
Una vez que concluya con esta practica pruebe con el MAX232 a mayor distancia o el receptor cambie los leds por un LCD y escriba desde el transmisor agregando un teclado de 16 pulsadores.
FISEI
FISEI - UTA
95
Referencia
Capacida d
Ciclos de E/W
Bloques Internos
Direccin
A0 1-0 1-0 x x x
Voltaje de operacin
1 1 2 4 8
8 8 4 2 1
FISEI
24LC08B 24LC016B
FISEI - UTA
96
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). 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.
Estas declaraciones sirven para escribir y leer datos en un chip EEPROM serial usando interfaz I2C de 2 hilos, funcionan en modo I2C Master y tambin puede ser utilizado para comunicarse con otros dispositivos de interfaz I2C como sensores de temperatura, reloj calendarios, conversores A/D, etc. Los 7 hilos de control contienen el cdigo de fabrica del chip y la seleccin del chip A2, A1, A0, el ultimo bit es una bandera interna que indica que si es un comando de lectura o escritura y no se debe usar. Por lo tanto el control para nuestro caso en lectura o escritura es %10100000. Debido a que los pines SDA y SCL de la memoria 24LC04B son de colector abierto, estas deben ir conectadas con resistencias de 4,7K Ohm pull-up, sin embargo existe una lnea de comando que hace que no se necesite la resistencia Pull-up del SCL, esta se debe agregar al comienzo del programa: DEFINE I2C_SCLOUT 1 ; No es necesario resistencia pull-up en SCL (RELOJ)
FISEI
Tambin cabe indicar que existe algunas memorias que necesitan de un periodo de tiempo para poder ser grabadas, por lo que se adiciona un PAUSE 10 despus de cada grabacin.
FISEI - UTA
97
Su escritura es de la siguiente manera I2CWRITE portb.6, portb.7, %10100000, 0, [65] ; almacenar en la direccin 0 el dato 65 PAUSE 10 ; pausa necesaria para completar la grabacin
En nuestro caso 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 alta para proteger la memoria de futuras escrituras, los datos almacenados en esta memoria permanecen an 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.
FISEI
FISEI - UTA
98
define I2C_SCLOUT 1 contro con %10100000 ; contro contiene valor constante PinSCL var portb.7 PinSDA var portb.6 dato var byte inicio: lcdout $FE,1,"Grabando..." pause 1000 i2cwrite pinsda, pinscl, contro, 0, ["H"] pause 10 i2cwrite pinsda, pinscl, contro, 1, ["O"] pause 10 i2cwrite pinsda, pinscl, contro, 2, ["L"] pause 10 i2cwrite pinsda, pinscl, contro, 3, ["A"] pause 10 lcdout $FE,1, "Leer memoria" pause 1000 lcdout $FE,1 leer: i2cread pinsda, pinscl, contro, 0, [dato] lcdout dato pause 10 i2cread pinsda, pinscl, contro, 1, [dato] lcdout dato pause 10 i2cread pinsda, pinscl, contro, 2, [dato] lcdout dato pause 10 i2cread pinsda, pinscl, contro, 3, [dato] lcdout dato pause 10 end
FISEI
FISEI - UTA
99
FISEI
FISEI - UTA
100
define i2c_sclout 1 cpin var portb.7 dpin var portb.6 segu var byte minu var byte hora var byte diaS var byte diaF var byte mes var byte anio var byte dato var byte actualizado var bit eeprom 0,[0] read 0, actualizado if actualizado = 0 then grabarRTC inicio: i2cread dpin,cpin,%11010000,0,[segu] i2cread dpin,cpin,%11010000,1,[minu] i2cread dpin,cpin,%11010000,2,[hora] i2cread dpin,cpin,%11010000,3,[dias] i2cread dpin,cpin,%11010000,4,[diaf] i2cread dpin,cpin,%11010000,5,[mes] i2cread dpin,cpin,%11010000,6,[anio] lcdout $fe,1,hex2 hora,":",hex2 minu,":",hex2 segu lcdout $fe,$C0 if dias =$1 then lcdout "Dom" if dias =$2 then lcdout "Lun" if dias =$3 then lcdout "Mar" if dias =$4 then lcdout "Mie" if dias =$5 then lcdout "Jue" if dias =$6 then lcdout "Vie" if dias =$7 then lcdout "Sab" lcdout $fe,$c5,hex2 diaf,"/" lcdout $fe,$cb,"/20", hex2 anio lcdout $fe,$c8 if mes=$1 then lcdout "Ene" if mes=$2 then lcdout "Feb" if mes=$3 then lcdout "Mar" if mes=$4 then lcdout "Abr" if mes=$5 then lcdout "May" if mes=$6 then lcdout "Jun"
FISEI
FISEI - UTA
101
if mes=$7 then lcdout "Jul" if mes=$8 then lcdout "Ago" if mes=$9 then lcdout "Sep" if mes=$10 then lcdout "Oct" if mes=$11 then lcdout "Nov" if mes=$12 then lcdout "Dic" pause 500 goto inicio grabarRTC: i2cwrite dpin,cpin,%11010000,0,[$00] pause 10 i2cwrite dpin,cpin,%11010000,1,[$01] pause 10 i2cwrite dpin,cpin,%11010000,2,[$09] pause 10 i2cwrite dpin,cpin,%11010000,3,[$4] pause 10 i2cwrite dpin,cpin,%11010000,4,[$13] pause 10 i2cwrite dpin,cpin,%11010000,5,[$1] pause 10 i2cwrite dpin,cpin,%11010000,6,[$10] pause 10 i2cwrite dpin,cpin,%11010000,7,[$10] pause 10 write 0,1 goto inicio end
; segundos ; minutos ; horas ; dias Miercoles D=1, L=2 ; Dia del mes ; Mes ; ao ; cotrol para encender el led cada 1 segundo
FISEI
Como podrn observar la batera es la que mantiene en funcionamiento al RTC cuando no hay alimentacin DC, por tal razn cuando apagamos todo el circuito, y luego lo volvemos a prender, notamos que el reloj no se ha desigualado, pero si retiramos la batera, el reloj se detiene cuando lo cortamos la alimentacin del circuito, y cuando se lo vuelve a conectar, sigue corriendo el tiempo pero continua en el segundo que se quedo en el instante que se le cort la alimentacin. El transistor sirve para encender el led con la fuente que alimenta el circuito y se apaga cuando deja de alimentarse el circuito, por lo que la batera solo alimenta al CI DS1307 mientras no hay alimentacin en el pin VCC. Se debe entender que el PIC esta leyendo los datos del RTC cada 0,5 segundos, cuando en realidad debera leer cada segundo. Para mejorar este programa podemos utilizar una interrupcin por cambio de estado en el pin B.0, aqu conectamos la seal SQW del RTC
FISEI - UTA
102
para que el PIC ejecute una subrutina de interrupcin y lea los datos del RTC exactamente cuando el RTC le diga que transcurrido un segundo, con esto tenemos al PIC disponible para otras aplicaciones y no se quedara esclavizado al RTC leyendo datos 2 veces por segundo.
FISEI
FISEI - UTA
103
FISEI
; programa para manejar una ; interrupcion por el puerto B.0 led var portb.1 led2 var portb.2 ; en caso de existir una interrupcion ai a verde on interrupt goto verde intcon = %10010000 prog: high led pause 200 low led pause 200 goto prog disable verde: high led2 pause 2000 low led2 ; habilita la interrupcion B.0 intcon =%10010000 ; retorna al programa principal resume ; habilita las interrupciones enable end
FISEI - UTA
104
como pudieron observar, en el momento que se presiona el pulsador, automticamente sale del programa y atiende el handler de interrupcin llamado verde, finalizado esto el RESUME lo retorna al lugar en donde ocurri la interrupcin, sin embargo se puede poner RESUME prog3, esta vez va a la subrutina prog3 e ignora el retorno al lugar de la interrupcin, otra recomendacin importante es que si queremos atender rpidamente una interrupcin, no debemos poner PAUSES muy largos como por ejemplo PAUSE 10000, equivalente a 10 segundos, si se da la interrupcin en la mitad del pause (5 segundos), deber esperar a que termine el pause para ir al handler de interrupcin, es decir 5 segundos restantes, lo mejor para estos casos es encerrar el pause en lazos FORNEXT, de la siguiente manera: FOR x=1 TO 100 PAUSE 100 NEXT Por lo que la atencin al handler de interrupcin ser en 100mls despus de la interrupcin. Cabe tambin indicar que en esta practica la interrupcin se da solo cuando existe un cambio de estado de 0 a 1 en el puerto B.0, por lo que se habr dado cuenta que si se mantiene pulsado la tecla, no se genera la interrupcin, sino cuando soltamos, para que la interrupcin se genere en el flanco de bajada, es decir cambio de estado de 1 a 0, debemos adicionar despus de INTCON =%10010000, la siguiente lnea para modificar el bit INTEDG del registro OPTION. OPTION_REG.6 = 0 bajada a B.0 ; Modifica el bit 6 del registro OPTION, activa en flanco de
UTILIZANDO LA INTERRUPCIN DEL PUERTO B.4 AL B.7 Para trabajar con la interrupcin por cambio de estado del puerto B.4 al B.7, podemos utilizar el programa anterior, solamente cambiando las 2 lineas que dicen INTCON =%10010000 por INTCON =%10001000, que quiere decir habilitar la interrupcin de los puertos B.4 al B.7, para mayor informacin revise en los data sheets el registro INTCON. Para el diagrama de conexin debemos colocar 4 pulsadores en los puertos B.4 al B.7, no se debe dejar sueltos estos pines ya que produce errores y salta al handler de interrupcin en cualquier momento. Se puede desconectar el pulsador del puerto B.0, ya que no se est atendiendo esta interrupcin.
FISEI
FISEI - UTA
105
RELOJ DIGITAL UTILIZANDO LA INTERRUPCIN DEL TMR0 El TMR0, es una valiosa herramienta que disponen los PIC, para el caso del PIC16F628A, dispone de 3 TIMERS, 1 de 16 bits (TMR1) y 2 de 8 bits, los TMR0 y TMR2, la calibracin para estos contadores, se dan en el registro OPTION, aqu se puede seleccionar si el incremento es con flanco de subida o de bajada y si la fuente es externa (PIN A4/TOCK1) o interna (Oscilador), en nuestro caso ser interna. Cuando el conteo del temporizador TMR0, llega a 256 y pasa a 0, se genera una interrupcin, para que esto suceda se debe habilitar el registro INTCON bit 7 (GIE = 1), y tambin el bit 5 (TOIE = 1), quedando as: INTCON =%10100000 En el registro OPTION se debe definir la rata del preescalador, se debe poner: OPTION_REG =%01010110 reloj interno. ; preescalador 1:128, asignando al TMR0 y ciclo de
Para poder entender mejor estos registros y sus funciones tenga a la mano la hoja de datos. La practica a realizarse consiste en ejecutar una interrupcin, cada que el contador del TMR0, llega a 256, pero no empieza desde 0 ya que se le asigno un valor inicial de 4, por lo que el tiempo seria 128 x 252 = 32256 Us y esto repito 31 veces, consiguiendo acercarnos mas al tiempo de 1 segundo (32256 Us x 31 = 999936 Us), luego de esto se incrementa la variable segn = segn + 1 y se actualiza el LCD. El proyecto dispone de dos pulsadores para poder igualar la hora, uno aumenta los minutos y otro aumenta las horas, la gran desventaja de este proyecto es que si se corta la alimentacin del circuito, se resetea la hora (12:00:00), lo que no sucede con un RTC.
FISEI
FISEI - UTA
106
FISEI
; uso cristal externo @ device XT_OSC hora var byte minut var byte segun var byte cuenta var byte actual var byte x var byte hora = 12 minut = 0 segun = 0 cuenta = 0 actual = 1 option_reg =%1010110 intcon =%10100000 on interrupt goto interrup inicio: if portb.7 = 0 then incmin if portb.6 = 0 then inchr actualiza : if actual = 1 then lcdout $FE,1, " ", dec2 hora, ":", dec2 minut, ":" ,dec2 segun actual = 0 endif
FISEI - UTA
107
goto inicio ;**************** para igualar la hora ************* incmin : minut = minut + 1 if minut >=60 then minut = 0 goto pausa inchr : hora = hora + 1 if hora >=24 then hora = 0 goto pausa pausa: for x = 1 to 20 pause 10 next x actual = 1 goto actualiza ;**** Handler de interrupciones para incrementar contador **** disable interrup: cuenta = cuenta + 1 tmr0 = 4 if cuenta < 31 then reset cuenta = 0 segun = segun + 1 if segun >= 60 then segun = 0 minut = minut + 1 if minut >=60 then minut = 0 hora = hora + 1 if hora >=24 then hora = 0 endif endif endif actual = 1 reset: ; resetea la bandera de interrupcin del TMR0 intcon.2 = 0 resume end
FISEI
FISEI - UTA
108
FISEI
Tabla de configuracin para el registro ADCON1 del PIC16F877A, noten que ADCON1 = 7 convierte el pines digitales todos los pines del puerto A y puerto E.
FISEI - UTA
109
Esquema de conexin de un PIC16F877A para medir los 3 voltajes que ingresan por el divisor de voltaje de cada potencimetro.
FISEI
define lcd_dreg portb define lcd_dbit 0 define lcd_rsreg portb define lcd_rsbit 5 define lcd_ereg portb define lcd_ebit 4 p1 var byte p2 var byte p3 var byte ; convierte porta.0,1,3 en conversores A/D adcon1 =%100 inicio: pause 300 poten1: ; activa canal 0 a Fosc/8 adcon0 =%1000001 gosub medir p1 = adresh poten2: ; activa canal 1 a Fosc/8 adcon0 =%1001001 gosub medir
p1 = adresh poten2: ; activa canal 1 a Fosc/8 adcon0 =%1001001 gosub medir p2 = adresh poten3: ; activa canal 3 a Fosc/8 adcon0 =%1011001 gosub medir p3 = adresh lcdout $fe,1,"Pot1 Pot2 Pot3" lcdout $fe,$c1,#p1 lcdout $fe,$c6,#p2 lcdout $fe,$cb,#p3 goto inicio medir: pauseus 50 adcon0.2 = 1 ; INICIAR CONVERSIN pauseus 50 RETURN END
FISEI - UTA
110
FISEI
FISEI - UTA
111
FISEI
FISEI - UTA
112
FISEI
define lcd_dreg portb define lcd_dbit 0 define lcd_rsreg portb define lcd_rsbit 5 define lcd_ereg portb define lcd_ebit 4 ; fije numero de bits del resulta define ADC_BITS 8 ; fije el CLOCK (rc = 3) define ADC_CLOCK 3 ; fije el tiempo de muestreo en U define ADC_SAMPLEUS 60 trisa = %1 adcon1 =%00001110 dato var byte tempbaj var byte tempalt var byte x var byte releF var portd.2 releC var portd.3 led var portd.4 enter var portd.5 bsubir var portd.6 bbajar var portd.7 eeprom 0,[22,26] inicio: for x = 1 to 3 high led pause 200 low led pause 200 next read 0, tempbaj read 1, tempalt sensar: ; leer el canal 0 (A0) y guardar adcin 0, dato lcdout $fe,1,"T.mi T.actu T.ma" dato = dato/2 lcdout $fe,$c6,dec dato, "oC" lcdout $fe,$c0,dec tempbaj, "oC" lcdout $fe,$cc,dec tempalt, "oC" for x = 1 to 50 if enter = 0 then grabar1a pause 10 next
next if dato < tempbaj then calentar if dato > tempalt then enfriar low relec : low relef goto sensar calentar: high relec : low relef goto sensar enfriar: high relef : low relec goto sensar grabar1a: gosub soltar grabar1: lcdout $fe,1,"Programar Temp" lcdout $fe,$c0,"baja=",dec tempba pause 100 if bbajar = 0 then restar1 if bsubir = 0 then sumar1 if enter = 0 then grabarA goto grabar1 restar1: gosub soltar if tempbaj < 1 then grabar1 tempbaj = tempbaj - 1 goto grabar1 sumar1: gosub soltar if tempbaj > 40 then grabar1 tempbaj = tempbaj + 1 goto grabar1 grabarA: gosub soltar write 0, tempbaj grabar2: lcdout $fe,1,"Programar Temp" lcdout $fe,$c0,"alta=",dec tempal pause 100 if bbajar = 0 then restar2 if bsubir = 0 then sumar2 if enter = 0 then grabarB goto grabar2 restar2: gosub soltar if tempbaj < 5 then grabar2 tempbaj = tempbaj + 1
FISEI - UTA
113
goto grabar2 q sumar2: gosub soltar if tempbaj > 50 then grabar2 tempalt = tempalt + 1 goto grabar2 grabarB: gosub soltar write 1, tempalt goto inicio soltar: high led pause 150 low led soltar2: if bbajar = 0 then soltar2 if bsubir = 0 then soltar2 if enter = 0 then soltar2 pause 100 return end
FISEI
FISEI - UTA
114
FISEI
FISEI - UTA
FISEI
FISEI - UTA
115
1 diodo zener de 5.1 voltios 1 vatio 1 diodo zener de 8,2 voltios 1 vatio 2 transistores 2N3904 1 metro cable de 4 hilos multifilar 1 conector db9 hembra con su respectivo cajetn 2 capacitores de 100 uF a 25 v. 1 resistencia de 470 ohm a w 1 resistencia de 10K a w 1 resistencia de 1K a w 1 resistencia de 2,2K a w para el conector db9 (ver diagrama db9 serial res) Opcional para el ICSP (programacin serial en circuito) 5 pines de espadines para placa 8ver fotografa).
Impreso
Pictrico
FISEI
FISEI - UTA
116
FISEI
FISEI - UTA
117
FISEI
FISEI - UTA
118
1 metro cable de 7 hilos multifilar 1 conector db9 hembra con su respectivo cajetn 1 conector db25 macho con su respectivo cajetn 1 resistencia de 220 Ohm a w 1 resistencia de 470 Ohm a w 1 resistencia de 470 ohm a w 2 resistencias de 1K a w 9 resistencias de 4,7K a w 1 adaptador de 14 a 18 voltios (medir con voltmetro) y mnimo de 500 mA. Impreso El impreso no esta en tamao real
FISEI
FISEI - UTA
119
Pictrico
FISEI
FISEI - UTA
120
Zcalos
Proyecto final
FISEI
FISEI - UTA
121
PROGRAMADOR DE PICS P. PARALELO Para instalar este grabador de PICS, nicamente coloque el conector DB25 en un puerto paralelo disponible del computador, alimente el circuito con una fuente de 14 a 18 voltios DC. INSTALACIN DEL SOFTWARE: En la pgina de internet WWW.IC-PROG.COM (Figura 1) se puede descargar gratuitamente el software programador de PICS, Icprog 1.05D, este software funciona muy bien con este tipo de grabadores y dispone adems de una gran variedad de microcontroladores. Una vez conseguido el programa descomprmalo y ejecute icprog.exe. En la primera vez le pedir que ajuste el grabador, Seleccione el programador PROPIC 2 (Figura 2), y marque MCLR y VCC invertidos, marque el puerto disponible LPT1 o LPT2. Luego abra sus archivos .hex y programe sus PICS, despus de que los 2 LEDS indicadores se apaguen, ya est grabado el microcontrolador. NOTA:Si usted es usuario de Windows XP, es necesario habilitar un driver para su correcto funcionamiento, para esto es necesario descargar de la pgina WWW.ICPROG.COM el archivo IC-prog NT/2000.driver, una vez descomprimido el archivo, tendr un archivo icprog.sys, el cual se debe mover dentro de la carpeta Icprog105D, junto al archivo ejecutable icprog.exe, ahora que ya se tiene el driver se lo debe activar en Settings/Options, (ver Figura 3 y 4).
FISEI
Figura 1
Figura 2
FISEI - UTA
122
En esta nueva pantalla, se puede cambiar el lenguaje, lo cual es aconsejable realizarlo, luego se presiona OK, y en ese mismo instante observarn que todo cambia a espaol (Figura 3), bien ahora vuelvan a abrir Ajustes (antes llamado Settings) y luego den un clic en Opciones, esta vez de un clic en miscelnea para habilitar el driver de Windows NT/2000/XP, una vez que se marque el casillero se presiona OK y listo.
Figura 3
Figura 4
UBICACIONES:
Ms informacin escribir a: automasis@yahoo.es o llamar a los telfs. 2611 447 Quito - Ecuador
09613 6564
FISEI
FISEI - UTA
123
FISEI
FISEI - UTA
AGRADECIMIENTOS
Este manual, esta basado en el libro del SEOR CARLOS REYES, una gran persona, que como dice en su libro, ya planto un arbolito y colaboro con el conocimiento de aquellos que somos electrnicos o de muchos que por hobby realizan proyectos con microcontroladores PIC. Todos los proyectos fueron probados por el autor principal y tambin nosotros hemos armado y probado estos circuitos, los puedo decir que funcionan sper bien. Muchas gracias seor Carlos Reyes por dar a los estudiantes este gran libro, dos o tres veces estuve en contacto con usted cuando me iniciaba en el mundo de los PIC, gracias al libro he aprendido mucho, con mi curso vamos a formar el primer club de robtica de la Facultad de Ingeniera en Sistemas Electrnica e Industrial de la Universidad Tcnica de Ambato, esto no seria posible sin la enseanza de este gran MAESTRO. Este pequeo manual al igual que el manual de AVR, se realizo para cumplir un deber de una materia, por ende el material no es de nuestra tutora, todo el intelecto es del seor antes mencionado.
Un ingeniero no es una copia, es original y se atreve a cambiar una realidad, no importa el tiempo o el espacio, todo es posible mientras crea que es as Anonimo
FISEI
FISEI - UTA
FISEI
FISEI - UTA