Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tutorial - de Micontroladores
Tutorial - de Micontroladores
FISEI
FISEI - UTA
TABLA DE CONTENIDOS
INSTALACIN
Descarga de programa microcode studio
... 1
... 1
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
FISEI
FISEI - UTA
FISEI
FISEI - UTA
FISEI
FISEI - UTA
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 seleccionamos Guardar este
programa en disco, damos un clic en aceptar. El mensaje varia dependiendo del
explorador que usamos.
FISEI
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 - UTA
1
FISEI
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 - UTA
2
FISEI
FISEI - UTA
FISEI
FISEI - UTA
4
FISEI
FISEI - UTA
5
FISEI
FISEI - UTA
FISEI
manualmente.
FISEI - UTA
6
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.
FISEI
Ahora aparecen nmeros al lado izquierdo del editor de texto, esto ser muy til en lo
posterior.
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.
FISEI
FISEI - UTA
FISEI
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 - UTA
10
FISEI
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 - UTA
11
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.-
FISEI
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.
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.
Barra de tareas.-
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.
FISEI
Este proyecto genera un tren de pulsos visible por medio de un LED con intervalos de
tiempo de 1 segundo.
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
Este es el ejemplo ideal para entender como asignar nombres a los diferentes bits de los
puertos, para ello usaremos un grupo de leds y manejaremos todo el puerto, existe otra
forma de realizar este proyecto, es controlando el puerto como un todo, para que entiendan
lo que digo, voy a realizar de las dos formas el programa.
FISEI - UTA
16
FISEI
Trisb = 0
semaf:
portb =%100001
pause 9000
portb =%100010
pause 3000
portb =%001100
pause 9000
portb =%010100
pause 3000
goto semaf
end
FISEI - UTA
17
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
FISEI
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 - UTA
18
FISEI
Este proyecto propone familiarizar an ms con el manejo de los puertos, esta vez vamos a
utilizar las 8 salidas del puerto B, se trata de una secuencia de luces que deben encender de
izquierda a derecha una tras otra con un intervalo de 200 mili segundos. En la figura
siguiente se muestra como conectar cada uno de los leds.
FISEI - UTA
19
FISEI
trisb = 0
prueba2:
portb =%00000001
gosub esperar
portb =%00000010
gosub esperar
portb =%00000100
gosub esperar
goto prueba2
esperar:
pause 1000
return
end
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
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
Este proyecto es muy importante encenderlo, ya que el siguiente proyecto de luces de auto
fantstico utilizando la declaracin FOR NEXT.
Esa declaracin sirve para ejecutar un nmero n de veces una lnea de programa o grupo de
lneas de programa, el siguiente proyecto pretende encender un led en el puerto B.0 5 veces
con intervalo de medio segundo segundo, despus debe detenerse por 2 segundos y luego
parpadear 3 veces mas, detenerse por 3 segundos y luego repetir nuevamente el proceso, se
puede utilizar el proto que se armo para las luces de discoteca ya que el mismo nos servir
despus para el siguiente proyecto el de las luces del auto fantstico, FOR NEXT se utiliza
de la siguiente manera:
FISEI - UTA
21
Para nuestro caso como queremos hacer 5 repeticiones, nos corresponde crear un BYTE
que nos permite almacenar un nmero hasta 255.
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:
FISEI
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 - 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
Para esta practica debemos entender como funciona los pulsadores con el PIC, existe
bsicamente 2 tipos de conexin para los pulsadores, el que siempre est en 1 lgico (5V) y
cuando es pulsado cambia a cero lgico (0V), y el que est en cero lgico y cuando
pulsamos para a uno lgico, los siguientes son los diagramas de conexin.
FISEI - UTA
24
IF porb.0 = 0 THEN
Porta.0 = 1
Wait 1
Porta.0 = 0
ENDIF
IF porb.0 = 0 THEN
.
ELSE
.
ENDIF
FISEI
FISEI - UTA
25
FISEI
FISEI - UTA
26
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
FISEI
FISEI - UTA
27
FISEI
La primera se encarga de no permitir que siga restando, para que el tiempo mnimo de
pause sea de 50 milisegundos (10 x PAUSE 5), mientras que la segunda se encarga de no
permitir que siga sumando si el valor de la variable es mayor que 150, este ejecuta en
RETURN, con esto el tiempo mximo de pause sera de 750 milisegundos (150 x PAUSE
5).
FISEI - UTA
28
FISEI
Este es un reset externo que le PIC posee, aparte del reset al encendido que dispone, la
utilizacin del MCLR es muy sencillo, solo debemos instalar un pulsador 1 lgico
(pull_up) en el puerto A.5, cuyo pin es especifico para el MCLR, el proyecto debe
funcionar de la siguiente manera:
Hacemos un programa para que parpadee un led cada 200 milisegundos (PAUSE 200), para
siempre, y al pulsar el botn de MCLR, este parpadeo debe detenerse y al soltarlo debe
continuar con el parpadeo del led, es importante de colocar las lneas de cdigo en el
programa para activar o desactivar el reset externo.
FISEI - UTA
29
FISEI
FISEI - UTA
30
FISEI
FISEI - UTA
31
FISEI
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 - UTA
32
DECLARACIN LOOKUP
FISEI
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 - UTA
33
FISEI
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 - UTA
34
FISEI
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
FISEI
FISEI - UTA
36
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
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
FISEI - UTA
37
FISEI
FISEI - UTA
38
FISEI
Para hacerlo mas interesante el proyecto anterior, le aadiremos movimiento, con esto
podemos ingresar frases completas como HOLA LUIS, pero para no alargar mucho el
programa solo utilizaremos la palabra HOLA, movindose continuamente de derecha a
izquierda y con un espacio por palabra.
La variable x es la que regula la velocidad con que se desplazan las letras, para
comprobarlo modifique el valor de todas las repeticiones de 1 TO 20 al doble 1 TO 40, y
vera como se desplaza las letras mas lentamente
FISEI - UTA
39
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
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
FISEI - UTA
40
FISEI
Los mdulos LCD (Display de Cristal Lquidos), son utilizados para mostrar mensajes que
indican al operario es estado de la maquina, o para dar instrucciones de manejo, Mostar
valores, etc. El LCD permite la comunicacin entre las maquinas y los humanos, este puede
mostrar cualquier carcter ASCII, y consume mucho menos que los display de 7
segmentos, existe de varias presentaciones por ejemplo de 2 lneas por 8 caracteres, 2x16,
2x20, 4x20, 4x40, etc. Sin backlight (14 pines) o con backlight (16 pines, iluminado de
pantalla), el LCD ms popular es el 2x16, 2 lneas de 16 caracteres cada una.
Fotografa de un LCD 2x16
Pin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Simb
Vss
Vdd
Vo
RS
R/W
E
D0
D1
D2
D3
D4
D5
D6
D7
A
K
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)
FISEI - UTA
41
Operacin
Limpia el visor LCD
Vuelve al inicio (comienzo de la primera lnea)
Apagar el cursor
Subrayado el cursor activo (-)
Parpadeo del cursor activo
Mover el cursor una posicin a la izquierda
Mover el cursor una posicin a la derecha
Mueve el cursor al comienzo de la primera lnea
Mueve el cursor al comienzo de la segunda lnea
Mueve el cursor al comienzo de la tercera lnea
Mueve el cursor al comienzo de la cuarta lnea
FISEI
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 - UTA
42
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:
Hola y LCDOUT $FE, $C0, Micro PIC
FISEI
LCDOUT $FE,1,
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"
FISEI
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 - 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:
DEFINE LCD_DREG
DEFINE LCD_DBIT
PORTB
4
DEFINE LCD_RSBIT
en el puerto B3
DEFINE LCD_EBIT
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:
FISEI
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 - UTA
45
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
FISEI
El LCD dispone en cada una de las lneas 40 posiciones de memoria, de los cuales
nicamente 16 son visibles, en el siguiente ejercicio escribiremos un mensaje desde el
casillero 17 ($90), el cual no es visible y luego iremos desplazando a la izquierda, como
resultado tendremos un texto que se mantiene en movimiento, una vez que este termina
recorrer 16 posiciones en blanco y luego volver a parecer los 24 caracteres del texto.
FISEI - UTA
47
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.
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.
FISEI
FISEI - UTA
49
FISEI
FISEI - UTA
50
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.
FISEI
FISEI - UTA
51
FISEI
Esta practica consiste en sacar por un parlante el sonido caracterstico de una sirena
policial, para esto emplearemos la ayuda de la declaracin SOUND.
LA DECLARACIN SOUND. Sirve para generar tonos y/o ruido blanco en un pin del
PIC, y es posible combinar hasta dos frecuencias desde 1 a 127 que son tonos y 128 a 255
ruido blanco, 0 es silencio, 1 equivale a 78,74 Hz y 127 a 10000 Hz, esto se lo utiliza de la
siguiente manera:
SOUND portB.0, [100, 10, 50, 10]
Esto quiere decir sacra dos tonos por el puerto B.0, el primer tono es 100 que equivale a
(7874 Hz) con una duracin de 10 milisegundos y luego un tono de 50 (3937 Hz) con una
duracin de 10 milisegundos tambin.
En cuanto a los materiales y diagrama de conexin son los mismos de la practica anterior.
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
FISEI
FISEI - UTA
53
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
FISEI
FISEI - UTA
54
Pruebe con algunas combinaciones de tonos, as como tambin con diferentes tiempos y
ver que bien pude componer una meloda.
FISEI
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 - 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]
FISEI
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 - 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.
FISEI
FISEI - UTA
57
FISEI
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 - UTA
58
FISEI
Los teclados matriciales son muy tiles para ingresar datos, un ejemplo del computador, el
teclado de una alarma que nos permite armar y desarmar un sistema de seguridad, el teclado
de una caja fuerte, el de una cerradura elctrica, etc. Para introducirnos en el manejo de un
teclado, haremos un proyecto para aprender a identificar filas y columnas que lo componen
un teclado hexadecimal de 16 pulsadores, y su correspondiente barrido de teclas, luego se
visualizar en un display de 7 segmentos el nmero de la tecla presionada.
FISEI - UTA
59
FISEI
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 - UTA
60
FISEI
@ 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
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
FISEI
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 - UTA
62
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
FISEI
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 - UTA
64
high Door
pause 1000
low Door
Goto Teclauno
FISEI
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 - 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.
FISEI
En cuanto a los materiales y el diagrama de conexin, son los mismos que se utilizaron en
el ejercicio anterior.
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
FISEI
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 - 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
FISEI
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 - 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.
FISEI
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 - UTA
69
FISEI
@ 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
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
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
Teclatres:
Gosub Barrido : Gosub Ptecla
If Numero = 3 Then Teclacuatro
Goto Falso2
FISEI
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
FISEI - UTA
71
La forma de la seal que sale por el PIC es similar a los siguientes grficos:
FISEI
Genera 3 ciclos al 90% alto y 10% bajo, el motor trabaja a alta velocidad
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
FISEI
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 - UTA
73
FISEI
@ 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 - UTA
74
Conexin de un LM358 como conversor D/A para convertir el PWM en seal anloga de 0 a 5V.
FISEI
FISEI - UTA
75
FISEI
FISEI - UTA
76
FISEI
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 - UTA
77
FISEI
FISEI - UTA
78
FISEI
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 - 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
FISEI
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 - 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
@ device INTRC_OSC
trisb = 0
Rept var byte
for Rept = 1 to 12
portb =%0001
gosub timer
portb =%0011
gosub timer
portb =%0010
gosub timer
portb =%0110
gosub timer
portb =%0100
gosub timer
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:
FISEI
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
84
FISEI
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
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
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"]
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.
FISEI
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.
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
FISEI
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 - UTA
88
FISEI
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 - 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
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.
FISEI
FISEI - UTA
90
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
El CI MAX 232 es la solucin para transmitir a mayor distancia, ya que incrementa los
niveles de voltaje de 5V a un voltaje simtrico de 10V, gracias a un juego de capacitores
que le ayuda a doblar os voltajes, por lo que para su alimentacin solo requiere una fuente
de 5V que puede ser la misma que utiliza el PIC. El MAX232 dispone de dos juegos de
transmisores y receptores, de los cuales solo ocupamos un par de ellos.
El MAX232 en este caso nos ayudara a convertir los voltajes TTL del PIC en voltajes de la
norma RS232, quiere decir que si enviamos un estado lgico alto (5V), a la salida del Tout
del CI MAX232 tendremos -10V, y si enviamos un 0 lgico desde el PIC (0V), el MAX232
enviara +10V, por lo tanto debemos invertir el dato de salida del PIC y esto lo conseguimos
utilizando T2400 de la siguiente manera:
SEROUT portb.1, T2400, [Y]
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.
FISEI
FISEI - UTA
93
FISEI
Este proyecto consiste en hacer una transmisin simplex entre un PIC transmisor y un PIC
receptor, el primer dispone de tres botones, el botn A enva la letra A el cual el PIC
receptor lo detecta y enciende un LED rojo por un segundo, desde el transmisor
presionamos el botn B y transmite la letra B, el receptor encender un led amarillo,
igualmente despus de 1 segundo lo apagara y por ultimo desde el transmisor presionamos
la tecla C y el receptor encender un led verde. Por tratarse de un practica y no
complicarnos con el MAX232, ya que necesitamos 2, solo realizaremos a una distancia de 2
metros conectando directamente de PIC a PIC utilizando dato invertido.
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
FISEI
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 - UTA
95
FISEI
Referencia
Capacida
d
Ciclos de
E/W
Bloques
Internos
Direccin
A2
Cantidad
de
disposit.
En el bus
Voltaje de
operacin
A0
A1
24LC01B
1K bits
1000000
1-0
1-0
1-0
2.5-5.5V
24LC02B
2 K bits
1000000
1-0
1-0
1-0
2.5-5.5V
24LC04B
4 K bits
1000000
1-0
1-0
2.5-5.5V
24LC08B
8 K bits
1000000
1-0
2.5-5.5V
24LC016B
16 K bits
1000000
2.5-5.5V
FISEI - UTA
96
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:
FISEI
DEFINE I2C_SCLOUT 1
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
FISEI
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 - UTA
98
FISEI
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 - UTA
99
FISEI
Como habamos dicho anteriormente el bus I2C, permite l comunicacin con algunos
dispositivos como las memorias 24CXX, los procesadores de seal, codificadores de video,
sensores de temperatura, RTC, etc. Haremos un proyecto ded lectura y escritura de un RTC
(Real Time Clock), este proyecto es muy similar al anterior, pero con la diferencia que el
byte de control es %11010000, (propio de fabrica), y su modo de grabacin de datos es en
sistema hexadecimal.
Una aclaracin importante es por ser experimento los datos a ser almacenados sern:
Mircoles 13 de enero del 2010 y la hora 09:01:00, pudiendo ser cambiado a gusto del
lector. Estos datos sern grabados una sola vez, ya que se utilizara una condicin de
bandera, esta ser almacenada en la memoria EEPROM del mismo PIC y se llamara
(actualizado = 1), significa que ya corri una vez el programa, por consiguiente si se lo
vuelve a prender el PIC, no guardara nuevamente los datos, esto tienen la finalidad de que
os datos fecha y hora sean una sola vez igualados, para que cuando usted vuelva a encender
el PIC, muestre la hora actual.
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
FISEI
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 - UTA
101
FISEI
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 - 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
FISEI - UTA
104
FISEI
FISEI - UTA
105
Para poder entender mejor estos registros y sus funciones tenga a la mano la hoja de datos.
FISEI
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 - UTA
106
FISEI
FISEI - UTA
107
FISEI
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 - UTA
108
FISEI
En definitiva nos dice que voltaje esta entrando por un pin pero en valores de una variable
de 255.
En esta practica utilizaremos 3 conversores A/D de los 8 que dispone el PIC16F877A, este
PIC se caracteriza por tener 40 pines, de los cuales 33 son puertos de entrada/salida, una
memoria FLASH de 8192 palabras, una RAM de 368 bytes y una EEPROM de 256 bytes,
por lo que este PIC est destinado para proyectos grandes. Esta practica nos servir para
poder familiarizarnos con PICS de mayor capacidad, cabe recalcar que este PIC necesita
oscilador externo, ya que no posee oscilador interno, tambin debemos utilizar en el MCLR
una resistencia Pull-Up, ya que no hay forma de deshabilitar como sucede con el
PIC16F62X.
PCFG3:
PCFG0
0000
0001
0010
0011
0100
0101
011X
1000
1001
1010
1011
1100
1101
1110
1111
AN7
RE2
A
A
D
D
D
D
D
A
D
D
D
D
D
D
D
AN6
RE1
A
A
D
D
D
D
D
A
D
D
D
D
D
D
D
AN5
RE0
A
A
D
D
D
D
D
A
A
A
A
D
D
D
D
AN4
RA5
A
A
A
A
D
D
D
A
A
A
A
A
D
D
D
AN3
RA3
A
VREF+
A
VREF+
A
VREF
D
VREF+
A
VREF+
VREF+
VREF+
VREF+
D
VREF+
AN2
RA2
A
A
A
A
D
D
D
VREFA
A
VREFVREFVREFD
VREF-
AN1
RA1
A
A
A
A
A
A
D
A
A
A
A
A
A
D
D
AN0
RA0
A
A
A
A
A
A
D
A
A
A
A
A
A
A
A
VREF+
VREF-
VDD
RA3
VDD
RA3
VDD
RA3
VDD
RA3
VDD
RA3
RA3
RA3
RA3
VDD
RA3
VSS
VSS
VSS
VSS
VSS
VSS
VSS
RA2
VSS
VSS
RA2
RA2
RA2
VSS
RA2
CHAN/
Refs
8/0
7/1
5/0
4/1
3/0
2/1
0/0
6/2
6/0
5/1
4/2
3/2
2/2
1/0
1/2
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
FISEI
Esquema de conexin de un PIC16F877A para medir los 3 voltajes que ingresan por el divisor de voltaje de cada
potencimetro.
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
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
FISEI
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 - UTA
114
FISEI
FISEI - UTA
FISEI
FISEI - UTA
115
Impreso
FISEI
Pictrico
FISEI - UTA
116
FISEI
FISEI - UTA
117
FISEI
------------------Lista de materiales.
------------------1 placa de baquelita o fibra de vidrio de 71 mm x 66 mm
1 zcalo 14 pines
2 zcalos de 40 pines cortados ver fotografa ( programmer v6)
1 buffer 74LS07
1 conector para adaptador 12 v.
1 conector db9 macho para placa
3 leds 5mm 1 rojo y 2 verdes
2 pines extrados de un zcalo maquinado ver figura (pin de un zcalo maquinado)
1 diodo 1N4007
1 diodo zener de 5.1 voltios 1 vatio
1 diodo zener de 13 voltios 1 vatio
3 transistores 2N3906
FISEI - UTA
118
FISEI
FISEI - UTA
119
Pictrico
FISEI
FISEI - UTA
120
Zcalos
FISEI
Proyecto final
FISEI - UTA
121
FISEI
Figura 1
Figura 2
FISEI - UTA
122
Figura 3
Figura 4
UBICACIONES:
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.
FISEI
FISEI - UTA
FISEI
FISEI - UTA