Documentos de Académico
Documentos de Profesional
Documentos de Cultura
MICROCONTROLADORES PIC
Prlogo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1
3.4.3. El Opto-acoplador. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.2.- Subrutinas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
i
4.3.1.- Define. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.3.3.- Arrays. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.3.4.- Constantes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.2.- Proyecto #2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.4.- Proyecto #4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
ii
5.8.- Proyecto #8. Implementacin de la instruccin Branch . . . . . . . . . . . . 91
iii
Capitulo VIII. Memoria de Datos.
8.1.- Memoria de Datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .157
iv
10.3.- Proyecto #29. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .196
v
Capitulo XIV. Mdulos RF para comunicaciones.
14.1.- Mdulos RF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .293
@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
ADCin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Branch. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .312
Button. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Call. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .315
ClearWDT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .316
Count . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
DTMFout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
EEPROM. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .321
End. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
FreqOut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .321
Gosub. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
vi
Goto. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .324
High. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .324
I2Cread. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
I2Cwrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .326
IF-Then-Else. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
Input. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .328
LCDin. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .329
LCDout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .330
Low. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .331
NAP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
Output. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
Pause. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .333
PauseUs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .333
Pot. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
PulsIn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
PulsOut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
PWM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336
Random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .337
Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
Return . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
Reverse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .340
SerIn. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .342
vii
SerOut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .343
Sleep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .344
Swap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .344
Toggle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .345
While-Wend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .347
Apndice A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .348
Apndice B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .358
Apndice C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .360
Bibliografa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .362
viii
Prlogo
2
Herramientas de Diseo Capitulo I
Figura 1.1.
(Fuente: http://www.microengineeringlabs.com)
3
Programador de Microcontroladores PIC: es una herramienta
indispensable con la cual podemos grabar el cdigo generado por el
compilador PicBasic para poner en funcionamiento cada uno de los
proyectos propuestos en cada captulo. Existen en internet una gran
cantidad de modelos de programadores para microcontroladores PIC,
de muy bajo costo y fcil construccin. Consideramos una buena
experiencia realizar el montaje de cualquiera de estos diseos, aunque
en esta oportunidad nuestra recomendacin es el programador
P16Pro/Picallw. Los detalles para la construccin de este programador
estn contenidos en el apndice A.
Figura 1.2.
4
Placa de prototipos: proporciona al diseador conexiones sin
soldaduras, con lo cual se hace ms prctico el desarrollo de los
proyectos electrnicos propuestos a lo largo de cada captulo.
Figura 1.3.
Figura 1.4.
5
Fuente de poder regulada con salida de voltaje variable. En el captulo
III se propone la construccin de una fuente de poder regulada a 5 Vdc
y 3.3 Vdc.
Figura 1.5.
Figura 1.6.
6
Osciloscopio: este instrumento se requiere para el desarrollo de
algunas prcticas en las cuales se hace necesario medir las seales
generadas desde el microcontrolador.
Figura 1.7.
Figura 1.7.
7
Microcode Studio Capitulo II
Figura 2.1.
(Fuente: http://www.microengineeringlabs.com)
http://www.microengineeringlabs.com/resources/win_ide.htm
8
Figura 2.2.
(Fuente: http://www.microengineeringlabs.com)
http://www.melabs.com/products/index.htm
Figura 2.3.
(Fuente: http://www.microengineeringlabs.com)
Es posible descargar una versin DEMO del compilador PIC Basic, con la
cual se pueden compilar programas con un mximo de 31 lneas de cdigo, a
travs de la direccin: http://www.melabs.com/pbpdemo.htm
9
Haga clic en el Link aqu
sealado, para descargar la
versin Demo de PicBasic.
Pro
Figura 2.4.
(Fuente: http://www.melabs.com)
Para empezar la descarga del archivo de instalacin del compilador, solo hay
que hacer clic en el link sealado en la figura 2.4, e indicar la ruta en la cual
se desea que el archivo de instalacin sea almacenado.
10
El proceso de instalacin es muy sencillo. El primer paso ser ejecutar el
archivo mcsinstall.exe, el cual es el responsable de iniciar el proceso de
instalacin de Microcode Studio:
Figura 2.7.
Figura 2.8.
11
Haga clic en el botn Next y podr ver en la siguiente ventana el acuerdo de
licencia para Microcode Studio:
Figura 2.9.
Figura 2.10.
12
Pulse Next para iniciar la copia de archivos (figura 2.11), y finalmente espere
que se complete la instalacin (figura 2.12).
Figura 2.11.
Figura 2.12.
13
Una vez instalado Microcode Studio, es importante tomar en cuenta que antes
de iniciar este software, es necesario instalar el compilador Basic, el cual es
indispensable para la generacin del cdigo que ser cargado en el
microcontrolador PIC.
Para dar inicio a la instalacin del compilador Pic Basic, ser necesario
ejecutar el archivo denominado pbpdemo.exe para el caso de la versin de
demostracin. La figura 2.13 muestra la ventana de inicio del proceso de
instalacin, en la cual se da la bienvenida al usuario y le invita a cerrar
cualquier otra aplicacin que se encuentre en uso en ese momento.
Figura 2.13.
14
Figura 2.14.
Figura 2.15.
15
Una vez seleccionadas las rutas de instalacin del compilador, se debe hacer
clic en el botn Install (figura 2.16), para dar inicio a la copia de archivos.
Figura 2.16.
Figura 2.17.
16
Figura 2.18.
17
Integracin de Microcode Studio y Pic Basic Pro:
Figura 2.19.
Figura 2.20.
18
3. En la pestaa Compiler haga clic en el botn Find Automatically
para una ubicacin automtica del compilador, o si lo prefiere haga clic
en Find Manually para ubicar el compilador manualmente.
Figura 2.21.
Figura 2.22.
19
Se debe ubicar en la lista el programador PICALL Programmer, haciendo
clic en el botn denominado Add New Programmer (Figura 2.22), y
seguidamente se debe seleccionar de la lista de opciones, como se puede
observar en la figura 2.23:
Figura 2.23.
20
Microcontroladores PIC Capitulo III
Con todas estas caractersticas es lgico pensar que este dispositivo pasa a
ser el corazn del circuito a ser controlado. Esto significa que el
microcontrolador es el encargado de dirigir todos los procesos de un circuito
electrnico, en base a las instrucciones de programa o rutinas que definen
funciones especficas de control, donde las mismas sern realizadas en
lenguaje Basic para microcontroladores PIC. Es por esta razn que
consideramos muy importante estudiar la arquitectura interna del
microcontrolador que se desea programar y aunque esta tarea pueda parecer
difcil, el Lenguaje Basic para microcontroladores PIC la hace sumamente
sencilla.
21
del microcontrolador para el control de dispositivos perifricos como pantallas
LCD, teclados, motores paso a paso, leds, servomotores entre otros. De ah la
importancia de establecer cual ser la funcin de cada puerto del
microcontrolador PIC elegido para nuestros proyectos.
Figura 3.1.
22
PIC18F4XX, estos microcontroladores resultan muy tiles cuando
deseamos disear proyectos ms avanzados.
http://www.microchip.com
Microcontrolador de 8 Bits.
Memoria de programa tipo Flash de 1024 palabras de 14 bits.
Memoria RAM de 68 bytes.
Memoria EEPROM de datos de 64 bytes.
Velocidad de operacin de hasta 20 Mhz.
Cuatro fuentes de interrupcin.
Posee 13 pines I/O (pines de entrada o salida).
23
Diagrama de pines del PIC16F84:
Figura 3.2.
Tabla 3.1
24
El microcontrolador PIC16F84 cuenta con dos puertos I/O, el puerto A, el cual
consta de cinco pines I/O y el puerto B, el cual consta de ocho pines I/O como
se puede observar en la figura 3.3:
Figura 3.3.
En total se cuenta con trece pines I/O, los cuales pueden ser programados
como entrada o salida segn convenga al momento de disear un circuito de
control.
25
Oscilador HS: Oscilador de alta velocidad (High Speed).
Oscilador RC: Resistencia / Condensador.
Figura 3.4.
Los valores de los condensadores cermicos vienen dados segn la tabla que
se muestra a continuacin:
26
Por ejemplo, para un oscilador tipo XT, podemos utilizar un cristal de cuarzo
como el de la figura 3.5.
Figura 3.5.
Voltios/Div: 200mV
Time/Div: 100ns
Figura 3.6.
27
La lectura de la frecuencia y perodo en este caso sera la siguiente:
Cristal de cuarzo TTL: Este tipo de cristal consta de cuatro pines, de los
cuales solo tres estn implementados de la siguiente manera:
Figura 3.7.
Voltios/Div: 2V
Time/Div: 100ns
28
Figura 3.8.
29
Figura 3.9.
30
Figura 3.10.
Una manera muy sencilla de ver el estado lgico de un pin configurado como
salida en cualquiera de los puertos de microcontrolador es a travs del uso de
LEDs, como se observa en los circuitos de la figura 3.11.
31
En el primer circuito, el LED se iluminar solo cuando el estado lgico del pin
de salida del puerto sea igual a 1, es decir, 5 voltios.
Figura 3.11.
32
3.4.2. Lectura de un estado lgico en un pin I/O:
Si deseamos introducir un nivel lgico bajo (0V), o alto (5V), a una de las
entradas de un microcontrolador a travs de un pulsador, podramos
considerar los circuitos de la figura 3.12, los cuales nos proporcionan dos
formas diferentes de hacerlo:
Figura 3.12.
33
El primer circuito en la figura 3.12 mantiene un nivel lgico alto (5V) mientras
el pulsador permanece abierto. Al presionar el pulsador, el nivel lgico en el
pin I/O del puerto pasa a ser bajo (0V).
3.4.3. El Opto-acoplador:
Figura 3.13.
34
En la configuracin de la figura 3.13, cuando en el pin I/O aplicamos un 1
lgico (5V), el LED del opto-acoplador enciende y el fototransistor conduce la
corriente a tierra; por lo tanto, en la salida tendremos un 0 lgico (0V).
Figura 3.14.
35
travs del cual circular la corriente necesaria entre sus contactos, para hacer
funcionar cualquiera de estos dispositivos de potencia.
Figura 3.15.
36
3.4.4. Fuente de poder, 5Vdc / 3.3Vdc:
Figura 3.16.
37
Estructura de un programa.
Componentes y operadores en PicBasic. Capitulo IV
B C D
Figura 4.1.
38
Seccin A: Corresponde al encabezado del programa, en el cual se debe
considerar informacin bsica del mismo, como el nombre, la identificacin
de autor, Copyright, fecha de elaboracin o fecha de los ltimos cambios
realizados, versin del programa que se est realizando, e incluso una breve
descripcin acerca del objetivo del programa y su aplicacin en un
determinado circuito electrnico.
Es importante resaltar que cada lnea del encabezado debe empezar con una
comilla simple, en forma de comentario (ver Seccin D).
39
Los comentarios ayudan al diseador a identificar cada lnea de programa o
cada una de las funciones de cada subrutina, garantizando as una buena
documentacin en cada uno de los programas que realizamos.
Led1:
For Z = 0 To 9
LED = Encendido
Etiqueta Pause 1000
LED = Apagado
Subrutina
Pause 1000
Next Z
GoTo Inicio
End
40
4.3.- Componentes y operadores en PicBasic.
PIC Basic cuenta con una serie de herramientas de programacin entre las
cuales podemos mencionar las etiquetas, variables, identificadores,
constantes, comentarios, smbolos entre otras.
41
Parmetro Descripcin
Nombre de Tipo de
VAR Descripcin
la Variable Variable
A1 Var Bit Toma los valores 0 y 1 unicamente
Temp Var Byte Toma valores entre 0 y 255 (8 bits)
dig1 Var Word Toma valores entre 0 y 65535 (16 bits)
Tabla 4.2.
42
4.3.3.- Arrays: Las variables Arrays tienen un determinado nmero de
elementos, definido segn el tamao de la variable. Las variables Arrays tipo
Bit, pueden almacenar 256 elementos; las variables Arrays tipo Byte pueden
almacenar hasta 96 elementos y las variables Arrays tipo Word hasta 48
elementos, los cuales a su vez pueden ser accesados en cualquiera de los
tres casos a travs de un ndice. Este ndice se especfica entre corchetes
como se muestra en los siguientes ejemplos:
Dato[0] = 200
Dato[1] = 15
Dato[2] = 56
Dato[3] = 75
Dato[4] = 80
Dato[5] = 20
Dato[6] = 33
Dato[7] = 45
43
4.3.4.- Constantes: Ayudan a identificar un valor constante en nuestro
programa, facilitando an ms la comprensin del mismo a la hora de verificar
su funcionamiento. En la tabla 4.3 se puede observar la forma de declarar una
constante.
Nombre de la Valor de la
CON
Constante Constante
Temp_Max CON 150
Temp_Min CON 55
Tabla 4.3.
Entonces,
44
4.3.6.- Operadores Aritmticos: Entre los operadores aritmticos ms
utilizados tenemos los que se muestran en la siguiente tabla:
Tabla 4.4.
Operrador Descripcin
& AND Lgico
| OR Lgico
^ XOR Lgico
NOT Lgico
&/ NAND Lgico
|/ NOR Lgico
^/ NXOR Lgico
Tabla 4.5.
Si aplicamos una AND lgica, donde deseamos filtrar los siete bits ms
significativos del valor almacenado en la siguiente variable:
Var1 = %00101001
Entonces,
45
El resultado de esta operacin es Var1 = %00000001
Operador Descripcin
= Igual
<> Diferente
< Menor que
> Mayor que
<= Menor o igual que
>= Mayor o igual que
Tabla 4.6.
Operador Descripcin
AND AND Lgico
OR OR Lgico
XOR XOR Lgico
NOT NOT Lgico
NOT AND NAND Lgico
NOT OR NOR Lgico
NOT XOR NXOR Lgico
Tabla 4.7.
Ejemplo:
46
Primeros Programas con el PIC16F84 Capitulo V
El primer paso entonces ser realizar el montaje del circuito con base en los
conocimientos adquiridos en las pginas anteriores. Se debe tomar en cuenta
que aunque en los diagramas de los circuitos que se muestran a continuacin,
no estn presentes los pines de alimentacin Vcc y Gnd, stos deben ser
conectados debidamente a la fuente de alimentacin de 5 Voltios.
Figura 5.1.
47
Proyecto # 1
Componentes Cantidad
PIC16F84A 1
Cristal de 4 Mhz 1
Capacitor cermico de 33 pF 2
LED 2
Resistencia de 220 Ohm 2
Fuente regulada de 5 Vdc 1
Tabla 5.1.
Note que el nodo del diodo LED se encuentra conectado al pin de salida del
puerto, por lo tanto para que encienda el LED debemos hacer salir un 1 lgico
por el pin correspondiente.
Como los pines de los puertos pueden ser configurados como entradas o
como salidas, es importante tomar en cuenta los registros de configuracin
de puertos, los cuales para el caso especfico del PIC16F84 son dos:
48
Un ejemplo de configuracin de los pines I/O del puerto A es el siguiente:
Registro TrisA
Bit menos
1 1 1 1 0
RA4 RA3 RA2 RA1 RA0
significativo
Figura 5.2.
1 = Entrada (Al configurar un bit del registro TrisA en 1, ste se comporta como entrada).
0 = Salida (Al configurar un bit del registro TrisA en 0, ste se comporta como salida).
Al ver la figura 5.2, se puede observar que el pin RA0 ha sido configurado
como salida y el resto de los pines como entrada.
Registro TrisB
1 1 1 1 1 1 1 0
Bit menos
RB7 RB6 RB5 RA4 RA3 RA2 RA1 RA0 significativo
Figura 5.3.
1 = Entrada (Al configurar un bit del registro TrisB en 1, ste se comporta como entrada).
0 = Salida (Al configurar un bit del registro TrisB en 0, ste se comporta como salida).
49
Para el caso particular del puerto B, se puede observar que el pin RB0 ha sido
configurado como salida y el resto de los pines como entrada.
HIGH
50
LOW
GOTO
PAUSE
'****************************************
'* Nombre : Proyecto1.pbp *
'* Autor : Nombre del Autor *
'* Copyright : Copyright (Ao) *
'* Fecha : Fecha *
'* Versin : 1.0 *
'****************************************
51
TRISA = %11110 ' Configuracin el Puerto A
TRISB = %11111110 ' Configuracin el Puerto B
52
Al escribir el programa en el editor de texto de Microcode Studio, se debe
grabar el mismo con el nombre de su preferencia para que ste pueda ser
compilado y al mismo tiempo pueda ser enviado al microcontrolador.
Figura 5.4.
53
Modelo
Compilar
Compilar y del uC.
Grabar en
el PIC
Figura 5.5.
Figura 5.6.
54
Antes de programar el microcontrolador, tambin resulta conveniente verificar
los fusibles de programacin, accediendo al botn Config, el cual puede ser
visualizado en la figura 5.6.
Figura 5.7.
55
En la seccin Hardware tambin disponemos de la opcin Power Up
Timer, la cual una vez activada en el microcontrolador, har que ste
no pueda iniciar el programa hasta tanto el voltaje aplicado al circuito
sea estable y seguro (ver figura 5.8).
Voltios 4
0
1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61
Tiempo
Figura 5.8.
Estos pasos se deben aplicar en cada uno de los proyectos aqu planteados,
o cada vez que se desee realizar una modificacin a un programa para
obtener siempre mejores resultados sobre el objetivo propuesto en cada
actividad.
56
5.2.- Proyecto #2: En este ejemplo conectaremos un Led en cada pin del
puerto B, el cual a su vez deber ser configurado como salida para garantizar
el correcto funcionamiento del mismo. En la figura 5.9 podemos observar en
detalle la conexin del circuito elctrico que deber ser montado.
Figura 5.9.
Proyecto # 2
Componente Cantidad
PIC16F84A 1
Cristal de 4 Mhz 1
Capacitor de 33 pF 2
LED 8
Resistencia de 220 Ohm 8
Fuente regulada de 5 Vdc 1
Tabla 5.2.
57
En el proyecto #1 se pudo observar como es posible encender un led
conectado a un pin del puerto A o B en un PIC16F84A, utilizando las
instrucciones High y Low. Tambin existen otras formas de poner un 1 o un
0 lgico en un pin configurado como salida; esto se puede lograr de varias
maneras:
58
Define Osc 4 ' Define el Oscilador para un Cristal
' de 4 Mhz.
PORTB = %01010101 ' Enciente las salidas RB0, RB2, RB4 y RB6, al
' mismo tiempo apaga RB1, RB3, RB5 y RB7.
PORTB = %10101010 ' Enciente las salidas RB1, RB3, RB5 y RB7, al
' mismo tiempo apaga RB0, RB2, RB4 y RB6.
End
Este programa enciende primero las salidas pares del puerto B y apaga las
salidas impares, genera una pausa de 1 segundo (1000 ms) y seguidamente
hace el proceso inverso en las salidas, es decir, enciende las salidas impares
y apaga las salidas pares para generar nuevamente otra pausa de 1 segundo
y as repetir el proceso completo al generar un salto a la etiqueta Inicio.
59
5.3.- Proyecto #3: Los pines en los puertos de un microcontrolador pueden
ser configurados tambin como entradas, como se detalla en el contenido del
proyecto #1, donde se explica claramente que al poner un 1 en un bit de un
registro de configuracin de puerto, ya sea TRISA o TRISB, para el caso del
PIC16F84A, ste se comportar como entrada. Realice el montaje de la figura
5.10 y analice el programa que se muestra a continuacin.
Figura 5.10.
Proyecto # 3
Componente Cantidad
PIC16F84A 1
Cristal de 4 Mhz 1
Capacitor cermico de 33 pF 2
LED 1
Resistencia de 220 Ohm 1
Resistencia de 10K Ohm 1
Pulsador Normalmente Abierto 1
Fuente regulada de 5 Vdc 1
Tabla 5.3.
60
IF THEM ELSE
Inicio:
End
61
En este caso si el pulsador ha sido activado, entonces RA0 = 1, es decir, se
cumple la condicin y por lo tanto RB0 = 1, es decir, el LED enciende.
Figura 5.11.
62
Proyecto # 4
Componente Cantidad
PIC16F877A 1
Cristal de 4 Mhz 1
Capacitor cermico de 33 pF 2
Resistencia de 220 Ohm 8
Resistencia de 10K Ohm 8
Pulsador Normalmente Abierto 8
Display de 7 Segmentos - Ctodo comn 1
Fuente regulada de 5 Vdc 1
Tabla 5.4.
'****************************************
'* Nombre : Proyecto4.pbp *
'* Autor : Nombre del Autor *
'* Copyright : Copyright (Ao) *
'* Fecha : Fecha *
'* Versin : 1.0 *
'****************************************
63
Define Osc 4 ' Define el Oscilador para un Cristal
' de 4 Mhz.
Inicio:
' gfedcba
' |||||||
If PORTB.0 = 1 Then PortD = %00111111 ' Enciende los segmentos correspondientes
' al dgito cero en el display.
End
64
5.5.- Proyecto #5: En el ejemplo a continuacin se realiza un conteo
ascendente desde cero hasta nueve en un display de 7 segmentos conectado
al puerto D de un PIC16F877A.
Figura 5.12.
Proyecto # 5
Componente Cantidad
PIC16F877A 1
Cristal de 4 Mhz 1
Capacitor cermico de 33 pF 2
Resistencia de 220 Ohm 8
Display de 7 Segmentos - Ctodo comn 1
Fuente regulada de 5 Vdc 1
Tabla 5.5.
65
FOR NEXT
' gfedcba
' |||||||
Cero CON %00111111
Uno CON %00000110
Dos CON %01011011
Tres CON %01001111
Cuatro CON %01100110
Cinco CON %01101101
Seis CON %01111101
Siete CON %00000111
66
Ocho CON %01111111
Nueve CON %01100111
Inicio:
Next I
Digito:
Return ' Retorna una lnea despus del salto con retorno (Call)
End
67
For I = 0 To 9 Step 2 ' Repeticin de Instrucciones dentro del Lazo
' For Next con incremento en dos unidades.
Next I
Next I
En este caso en conteo inicia en nueve y decrece en una unidad hasta llegar
a cero.
5.6.- Proyecto #6: PicBasic cuenta con una instruccin capaz de generar
tonos DTMF (Dual Tone Multifrecuency - Multifrecuencia de doble tono), tonos
que se utilizan en telefona para marcar una serie de nmeros y as poder
establecer la comunicacin entre dos o ms personas. Una aplicacin
interesante para esta instruccin podra ser el discado de nmeros telefnicos
en sistemas de alarma cuando ha sido activado un dispositivo de supervisin,
para luego generar un mensaje de voz que nos alerte de dicho evento.
68
Figura 5.13.
Proyecto # 6
Componente Cantidad
PIC16F84A 1
Cristal de 10 Mhz 1
Capacitor cermico de 33 pF 2
Capcitor Electroltico de 10 uF 2
Parlante de 8 Ohm 1
Fuente regulada de 5 Vdc 1
Tabla 5.6.
69
correspondiente al dgito 0 de un teclado telefnico, entonces, segn la tabla
5.7, el dgito a introducir en la instruccin DTMFout deber ser el 10.
Dgito en la Dgito en un
Frecuencias Frecuencias
Instruccin Teclado
Bajas Altas
DTMFout Telefnico
1 1 697 HZ 1209 HZ
2 2 697 HZ 1336 HZ
3 3 697 HZ 1477 HZ
4 4 770 HZ 1209 HZ
5 5 770 HZ 1336 HZ
6 6 770 HZ 1477 HZ
7 7 852 HZ 1209 HZ
8 8 852 HZ 1336 HZ
9 9 852 HZ 1477 HZ
10 0 941 HZ 1209 HZ
11 * 941 HZ 1336 HZ
12 # 941 HZ 1477 HZ
13 A 697 HZ 1633 HZ
14 B 770 HZ 1633 HZ
15 C 852 HZ 1633 HZ
0 D 941 HZ 1633 HZ
Tabla 5.7.
Figura 5.14.
70
Antes de empezar a programar, vamos a verificar la sintaxis de la instruccin
DTMFout:
DTMFout
Pin: especifica el pin del puerto en el cual se emitirn los tonos DTMF.
Tono: puede ser una variable o constante entre 0 y 15, que especifica el tono
que debe ser generado.
71
Programa en Pic Basic:
'****************************************
'* Nombre : Proyecto6.pbp *
'* Autor : Nombre del Autor *
'* Copyright : Copyright (Ao) *
'* Fecha : Fecha *
'* Versin : 1.0 *
'****************************************
Inicio:
End
72
Observe que en la primera instruccin DTMFout, despus de la etiqueta
Inicio, no se especifica la duracin de cada tono y el tiempo en silencio entre
cada tono. Esto significa que el microcontrolador genera cada tono con una
duracin de 200 milisegundos por defecto, y un tiempo en silencio entre cada
tono de 50 milisegundos como se muestra en las figuras 5.15 y 5.16
respectivamente:
Figura 5.15.
73
Figura 5.16.
74
Figura 5.17.
Figura 5.18.
75
5.7.- Proyecto #7: En este proyecto estudiaremos la instruccin Button, la
cual es utilizada para la eliminacin de rebotes en pulsadores o para efectuar
repeticiones en un botn, como sucede en el caso de los teclados de las
computadoras, en las cuales si dejamos presionado un botn o tecla, la
misma se repite indefinidamente a una frecuencia especfica, la cual puede
ser variada fcilmente como lo demostraremos a continuacin.
Button
Estado: indica cual es estado lgico que debe ocurrir cuando el pulsador es
presionado (0 o 1). Si es 0, el pulsador deber ser activo-bajo y si es 1, el
pulsador deber ser activo-alto (Ver figura 5.19).
76
Figura 5.19.
Variable: es una variable auxiliar tipo Byte, definida tambin al inicio del
programa para uso exclusivo de la instruccin Button, por lo cual no deber
ser utilizada con otro fin en el programa. Siempre debe ser inicializada antes
del comando Button.
77
Etiqueta: la instruccin realiza un salto a la etiqueta definida en este campo
cuando el pulsador no ha sido presionado.
PULSout
78
Para este proyecto hemos preparado tres ejemplos los cuales estn basados
en el circuito de la figura 5.20.
Figura 5.20.
Componente Cantidad
PIC16F877A 1
Cristal de 4 Mhz 1
Capacitor cermico de 33 pF 2
Resistencia de 10K Ohm 1
Pulsador Normalmente Abierto 1
Fuente regulada de 5 Vdc 1
Tabla 5.8.
79
Se puede observar en el diagrama esquemtico, que mientras el pulsador
permanece abierto, hay un cero lgico en el pin RB0, el cual debemos
configurar como entrada en el programa. Cuando el pulsador sea presionado,
el estado lgico en el pin RB0 ser un uno lgico.
La salida a travs de la cual se van a generar los pulsos ser el pin RB1, en el
cual hemos conectado un osciloscopio para poder ver el resultado de las
seales generadas a partir de las especificaciones dadas en cada ejemplo a
continuacin.
Inicio:
Button PORTB.0,1,2,1,A,0,Tiempo
80
Ahora analicemos la secuencia del programa:
Button PORTB.0,1,2,1,A,0,Tiempo
Figura 5.21.
81
Al terminar el primer ciclo de programa, han transcurrido los primeros 10
milisegundos. Con el segundo ciclo de programa ocurre nuevamente el salto a
la etiqueta Tiempo, producindose una nueva pausa de 10 milisegundos,
para un tiempo de espera antes de ejecutar la auto-repeticin de 20
milisegundos.
Figura 5.22.
Button PORTB.0,1,2,1,A,0,Tiempo
82
En la figura 5.22 se puede apreciar la lectura de la seal producida por el
programa al activar el pulsador. Observe que el tiempo entre el primer pulso y
la auto-repeticin es de 20 milisegundos, y que el tiempo entre cada auto-
repeticin es de 10 milisegundos (figura 5.23).
Figura 5.23.
83
En la figura 5.24 se puede observar la seal generada al activar el pulsador,
en la cual se ve la auto-repeticin del pulso de 1.5 milisegundos, la cual
permanecer hasta que el pulsador sea liberado.
Figura 5.24.
84
5.7.2.- Proyecto #7.2: Para el siguiente ejemplo se pretende generar el
mismo pulso de 1.5 milisegundos indefinidamente cada 20 milisegundos,
siempre y cuando el pulsador permanezca activado.
Inicio:
Button PORTB.0,1,2,2,A,0,Tiempo
End
Button PORTB.0,1,2,2,A,0,Tiempo
85
pausa de 10 milisegundos y finaliza el primer ciclo con un salto a la
etiqueta Inicio. En el segundo ciclo, la instruccin Button verifica el
conteo de los ciclos, el cual es controlado por la variable A,
determinando que an no se puede empezar la auto-repeticin hasta
tanto no haya culminado el segundo ciclo, de tal manera que ocurre
nuevamente el salto a la etiqueta Tiempo, y se produce una nueva
pausa de 10 milisegundos.
Figura 5.25.
86
5.7.3.- Proyecto #7.3: En este ejemplo se debe generar un pulso de 2.5
milisegundos, con un tiempo para anti-rebotes en el pulsador de 30
milisegundos, y un tiempo entre cada auto-repeticin de 10 milisegundos.
Inicio:
Button PORTB.0,1,3,1,A,0,Tiempo
End
87
es decir, aproximadamente cada 10 milisegundos. La auto-repeticin
se mantiene siempre y cuando el pulsador permanezca activo.
Figura 5.26.
88
En la figura 5.27, se puede apreciar el tiempo de espera generado por la
instruccin Button, igual a 30 milisegundos, para evitar los rebotes en el
pulsador. Tambin se puede observar claramente, que una vez culminado
este tiempo, se genera una auto-repeticin del pulso, la cual se mantiene
siempre que el pulsador se encuentre presionado.
Figura 5.27.
89
Observe en la figura 5.28 la medicin del tiempo entre cada auto-repeticin.
Figura 5.28.
90
5.8.- Proyecto #8: En este proyecto estudiaremos la instruccin Branch, con
un ejemplo sencillo basado en el circuito de la figura 5.29, en el cual se debe
iluminar cada Led en forma consecutiva por cada segundo transcurrido.
Figura 5.29.
Proyecto # 8
Componente Cantidad
PIC16F84A 1
Cristal de 4 Mhz 1
Capacitor cermico de 33 pF 2
LED 3
Resistencia de 220 Ohm 3
Fuente regulada de 5 Vdc 1
Tabla 5.9.
91
Branch
'****************************************
'* Nombre : Proyecto8.pbp *
'* Autor : Nombre del Autor *
'* Copyright : Copyright (Ao) *
'* Fecha : Fecha *
'* Versin : 1.0 *
'****************************************
Inicio:
Branch I,[Led1,Led2,Led3]
Led1:
PORTB = %00000001 ' enciende el led en RB0
Pause 1000 ' pause de 1 segundo
PORTB = %00000000 ' apaga el led
I = I + 1 ' suma 1 a la variable I
GoTo inicio ' salta a inicio
Led2:
PORTB = %00000010 ' enciende el led en RB1
Pause 1000 ' pause de 1 segundo
PORTB = %00000000 ' apaga el Led
I = I + 1 ' suma 1 a la variable I
GoTo inicio ' salta a inicio
92
Led3:
PORTB = %00000100 ' enciende el led en RB2
Pause 1000 ' pause de 1 segundo
PORTB = %00000000 ' apaga el Led
I = 0 ' Inicializa la variable I
93
5.9.- Proyecto #9: La instruccin PWM, puede ser usada para generar
voltajes analgicos implementando el circuito conectado al pin RB0 de la
figura 5.30. A continuacin realizaremos un ejemplo de aplicacin de la
instruccin PWM para generar un voltaje determinado, aplicando una serie de
clculos sencillos.
Figura 5.30.
Proyecto # 9
Componente Cantidad
PIC16F84A 1
Cristal de 4 Mhz 1
Capacitor cermico de 33 pF 2
Resistencia de 10K Ohm 1
Capcitor Electroltico de 10 uF 1
Fuente regulada de 5 Vdc 1
Tabla 5.10.
94
PWM
Vfuente nivel
Vout =
255
donde,
95
Por ejemplo, si deseamos obtener Vout = 3.5V, entonces,
Inicio:
96
Mdulos LCD Capitulo VI
6.1.- Pantallas LCD: Las pantallas LCD alfanumricas, son las ms utilizadas
hoy en da en el desarrollo de proyectos o equipos electrnicos en los cuales
se hace necesario visualizar mensajes de texto cortos, que proporcionen la
informacin adecuada sobre un evento determinado. Las pantallas ms
comunes suelen ser de 1x16, de 2x16 y de 4x16 (Filas x Columnas). Todas
estas configuraciones tambin se encuentran para 20 columnas y hasta para
40 columnas. Aunque en esta edicin solo estudiaremos el uso de pantallas
alfanumricas, tambin resulta interesante mencionar que existen en el
mercado pantallas grficas (GLCD), como la que se observa en la figura 6.3, y
donde se debe aplicar un mtodo de control diferente al de las pantallas
alfanumricas.
97
6.2.- Identificacin de los pines de una pantalla LCD: Veamos a
continuacin la descripcin de cada uno de los pines de una pantalla LCD:
Pin 4: "RS" (trabaja paralelamente al Bus de datos del modulo LCD, Pines 7 al
14, es decir, cuando RS es cero, el dato presente en el bus corresponde a un
registro de control o instruccin, pero cuando RS es uno, el dato presente en
el bus corresponde a un registro de datos o caracter alfanumrico.
Pin 5: "R/W" (Read/Write), este pin es utilizado para leer un dato desde la
pantalla LCD o para escribir un dato en la pantalla LCD. Si R/W = 0, esta
condicin indica que podemos escribir un dato en la pantalla. Si R/W = 1, esta
condicin nos permite leer un dato desde la pantalla LCD.
98
Pin 7 al14: "Bus de Datos, el Pin 7 hasta el Pin 14 representan 8 lneas que
se utilizan para colocar el dato que representa una instruccin para el modulo
LCD o un carcter alfanumrico.
Figura 6.5.
6.3.- Conexin de una pantalla LCD en Pic Basic: Una pantalla LCD puede
ser conectada a un microcontrolador utilizando los ocho bits del bus de datos
(D0 a D7) o solamente los cuatro bits mas significativos del bus de datos (D4
a D7). Al emplear los ocho bits, estos debern estar conectados en un solo
puerto y nunca en puertos diferentes. Si deseamos trabajar solo con los
cuatro bits ms significativos del bus, estos debern ser conectados en los
cuatro bits menos significativos de un puerto o en los cuatro bits ms
significativos del puerto seleccionado.
99
Un dato interesante resulta ser el hecho de que las pantallas LCD pueden ser
controladas utilizando dos configuraciones distintas para el bus de datos:
Nota Importante: PIC Basic asume por defecto que el conexionado entre un
mdulo LCD alfanumrico y un microcontrolador, se ha realizado como se muestra
en el diagrama esquemtico de la figura 6.6. En este caso no ser necesario definir
estas conexiones en el programa; sin embargo, es conveniente saber que el
funcionamiento de un programa para el manejo de una pantalla LCD, no se ver
afectado si decidimos definir cada una de las conexiones como se muestran a
continuacin:
DEFINE LCD_DREG PORTA ' Indica que el Bus de datos estar conectado
' en el Puerto A.
DEFINE LCD_DBIT 0 ' Seleccin del Bit de inicio del puerto en el uC para el
' bus de datos de la LCD
100
Figura 6.6.
Proyecto # 10
Componente Cantidad
PIC16F84A 1
Cristal de 4 Mhz 1
Capacitor cermico de 33 pF 2
Pantalla LCD 16x4 1
Resistencia de 1K Ohm 1
Potencimetro de 5K Ohm 1
Fuente regulada de 5 Vdc 1
Tabla 6.1.
101
Aunque esta configuracin es la que PicBasic asume por defecto, la misma
puede ser cambiada segn convenga, pero siempre tomando en cuenta las
definiciones anteriormente mencionadas; en ellas se especifica la disposicin
de los pines de la pantalla LCD con respecto a su conexin en los puertos del
microcontrolador.
LCDout
Comando Accin
$FE, 1 Limpia la pantalla
$FE, 2 Retorna al inicio de la primera lnea
$FE, $0C Apaga el Cursor
$FE, $0E Cursor bajo (Underline "_") activo
$FE, $0F Cursor intermitente activo
$FE, $10 Mueve el cursor un espacio a la izquierda
$FE, $14 Mueve el cursor un espacio a la derecha
$FE, $C0 Mueve el cursor al inicio de la segunda lnea
$FE, $90 Mueve el cursor al inicio de la tercera lnea
$FE, $D0 Mueve el cursor al inicio de la cuarta lnea
Tabla 6.2.
102
En la figura 6.7 se muestran las direcciones de cada caracter en las lneas 2,
3 y 4:
Pantalla LCD 16x4
Lnea 1 - - - - - - - - - - - - - - - -
Lnea 2 $C0 $C1 $C2 $C3 $C4 $C5 $C6 $C7 $C8 $C9 $CA $CB $CC $CD $CE $CF
Lnea 3 $90 $91 $92 $93 $94 $95 $96 $97 $98 $99 $9A $9B $9C $9D $9E $9F
Lnea 4 $D0 $D1 $D2 $D3 $D4 $D5 $D6 $D7 $D8 $D9 $DA $DB $DC $DD $DE $DF
Figura 6.7.
103
LCDOut $fe,$C0, "* Alfanumerica *"
LCDOut $fe,$90, "* 1234567890 *"
LCDOut $fe,$D0, "* AaBbCcDdEeFf *"
Inicio:
104
6.5.- Proyecto #11. En el diagrama de la figura 6.10 se puede observar que la
conexin entre el modulo LCD y el microcontrolador ha cambiado con
respecto al proyecto #10, con el fin de utilizar en el programa la definicin de
conexiones anteriormente mencionada.
La variable Dato ha sido inicializada con un valor cargado igual a 25. Para
aumentar o disminuir este valor, simplemente se pregunta si en RB0 o en RB1
hay un cambio de estado lgico. Adicionalmente se establecen dos
condiciones que se deben cumplir para que la variable pueda aumentar su
valor o disminuir:
105
Para mostrar el valor decimal cargado en la variable Dato a travs de la
pantalla LCD, se debe utilizar la directiva Dec o el smbolo # antes de la
variable, como se muestra a continuacin:
Lcdout $fe,$C0,"Dato: ",Dec Dato ' Escribe el mensaje en la lnea 2
' seguido del valor cargado en la
' variable "Dato" en Decimal.
,
Lcdout $fe,$C0,"Dato: ",#Dato
Figura 6.10.
106
Proyecto # 11 - 12
Componente Cantidad
PIC16F877A 1
Cristal de 8 Mhz 1
Capacitor cermico de 33 pF 2
Pantalla LCD 16x2 1
Resistencia de 10K Ohm 2
Potencimetro de 5K Ohm 1
Pulsador Normalmente Abierto 2
Fuente regulada de 5 Vdc 1
Tabla 6.3.
'****************************************
'* Nombre : Proyecto11.pbp *
'* Autor : Nombre del Autor *
'* Copyright : Copyright (Ao) *
'* Fecha : Fecha *
'* Versin : 1.0 *
'****************************************
DEFINE LCD_DREG PORTD ' Indica que el Bus estar conectado en el Puerto D
DEFINE LCD_BITS 4 ' El bus ser de cuatro bits.
DEFINE LCD_DBIT 4 ' Seleccin del Bit de inicio del puerto en el uC para el
' bus de datos de la LCD
DEFINE LCD_RSREG PORTD ' Indica al uC que el pin "RS" estar en el Puerto D
DEFINE LCD_RSBIT 2 ' "RS" estar conectado en RD2
DEFINE LCD_EREG PORTD ' Indica al uC que el pin "E" estar en el Puerto D
DEFINE LCD_EBIT 3 ' "E" estar conectado en RD3
Inicio:
107
Lcdout $fe,2 ' Inicio de la primera lnea.
Lcdout $fe,$C0,"Dato: ",Dec Dato," " ' Escribe el mensaje en la 2da lnea
' seguido del valor cargado en la
' variable "Dato" en Decimal.
Suma:
Resta:
108
6.6.- Proyecto #12. En este proyecto nos hemos basado en el diagrama de la
figura 6.10 para efectuar la programacin del microcontrolador.
Figura 6.11.
Figura 6.12.
Al accionar el pulsador P2, se deber mostrar el siguiente sub-men
(figura 6.13), el cual tambin deber permanecer visible durante 5
segundos para luego retornar al men inicial:
Figura 6.13.
Lea detenidamente los comentarios de cada lnea del programa. Observe que
en esta oportunidad hemos utilizado un alias para cada una de las entradas
utilizadas en el puerto B (RB0 se llamar P1, y RB1 se llamar P2).
'****************************************
'* Nombre : Proyecto12.pbp *
'* Autor : Nombre del Autor *
'* Copyright : Copyright (Ao) *
'* Fecha : Fecha *
'* Versin : 1.0 *
'****************************************
109
DEFINE LCD_DREG PORTD ' Indica que el Bus estar conectado en el Puerto D
DEFINE LCD_BITS 4 ' El bus ser de cuatro bits.
DEFINE LCD_DBIT 4 ' Seleccin del Bit de inicio del puerto en el uC para el
' bus de datos de la LCD
DEFINE LCD_RSREG PORTD ' Indica al uC que el pin "RS" estar en el Puerto D
DEFINE LCD_RSBIT 2 ' "RS" estar conectado en RD2
DEFINE LCD_EREG PORTD ' Indica al uC que el pin "E" estar en el Puerto D
DEFINE LCD_EBIT 3 ' "E" estar conectado en RD3
Inicio:
GoTo Inicio
Mensaje1:
Mensaje2:
End
110
6.7.- Proyecto #13. En el siguiente ejemplo explicamos la forma de visualizar
en la pantalla LCD un valor decimal y sus equivalentes en hexadecimal,
binario y el cdigo ASCII correspondiente, de un dato almacenado en una
variable tipo Byte.
111
Figura 6.14.
Proyecto # 13 - 14
Componente Cantidad
PIC16F877A 1
Cristal de 8 Mhz 1
Capacitor cermico de 33 pF 2
Pantalla LCD 16x2 1
Potencimetro de 5K Ohm 1
Fuente regulada de 5 Vdc 1
Tabla 6.4.
112
' Programa en Pic Basic Pro:
'****************************************
'* Nombre : Proyecto13.pbp *
'* Autor : Nombre del Autor *
'* Copyright : Copyright (Ao) *
'* Fecha : Fecha *
'* Versin : 1.0 *
'****************************************
DEFINE LCD_DREG PORTD ' Indica que el Bus estar conectado en el Puerto D
DEFINE LCD_BITS 4 ' El bus ser de cuatro bits.
DEFINE LCD_DBIT 4 ' Seleccin del Bit de inicio del puerto en el uC para el
' bus de datos de la LCD
DEFINE LCD_RSREG PORTD ' Indica al uC que el pin "RS" estar en el Puerto D
DEFINE LCD_RSBIT 2 ' "RS" estar conectado en RD2
DEFINE LCD_EREG PORTD ' Indica al uC que el pin "E" estar en el Puerto D
DEFINE LCD_EBIT 3 ' "E" estar conectado en RD3
Inicio:
End
113
6.8.- Proyecto #14: Analice el programa propuesto a continuacin, el cual
est basado en el diagrama esquemtico de la figura 6.14. En este caso se
desea mostrar en la pantalla LCD los valores entre 33 y 125 en decimal,
adems de sus equivalentes en hexadecimal y cdigo ASCII correspondiente.
' Programa en Pic Basic Pro:
'****************************************
'* Nombre : Proyecto14.pbp *
'* Autor : Nombre del Autor *
'* Copyright : Copyright (Ao) *
'* Fecha : Fecha *
'* Versin : 1.0 *
'****************************************
DEFINE LCD_DREG PORTD ' Indica que el Bus estar conectado en el Puerto D
DEFINE LCD_BITS 4 ' El bus ser de cuatro bits.
DEFINE LCD_DBIT 4 ' Seleccin del Bit de inicio del puerto en el uC para el
' bus de datos de la LCD
DEFINE LCD_RSREG PORTD ' Indica al uC que el pin "RS" estar en el Puerto D
DEFINE LCD_RSBIT 2 ' "RS" estar conectado en RD2
DEFINE LCD_EREG PORTD ' Indica al uC que el pin "E" estar en el Puerto D
DEFINE LCD_EBIT 3 ' "E" estar conectado en RD3
Inicio:
For I = 33 To 125
Lcdout $fe,2
Lcdout "Dec:",#I," Hex:",HEX I," "
Lcdout $fe,$C0,"ASCII: ", I," "
Next I
Fin:
GoTo Fin ' Bucle infinito.
End
114
6.9.- Proyecto #15: Con la ayuda de la instruccin Count, estaremos
realizando un contador de pulsos, el cual se compone bsicamente de un
PIC16F877A y una pantalla LCD 2x16. El tren de pulsos cuadrados de
frecuencia variable, ser generado desde un microcontrolador PIC16F84A
utilizando la instruccin Pulsout, y el cual deber ser programado para que
sea posible aumentar o disminuir la frecuencia a travs de dos pulsadores
conectados a l, P1 para aumentar la frecuencia y P2 para disminuir la
frecuencia, como se muestra en el diagrama de la figura 6.15.
Figura 6.15.
115
Proyecto # 15 - 16
Componente Cantidad
PIC16F877A 1
PIC16F84A 1
Cristal de 4 Mhz 1
Capacitor cermico de 33 pF 2
Pantalla LCD 16x4 1
Resistencia de 10K Ohm 2
Potencimetro de 5K Ohm 1
Pulsador Normalmente Abierto 2
Fuente regulada de 5 Vdc 1
Tabla 6.5.
116
Count
Pin: especifica el pin del puerto en el cual se introducirn los pulsos. Este pin
es designado como entrada automticamente por la instruccin Count.
Inicio:
Count PORTB.1, 1000, Pulsos ' Cuenta los pulsos introducidos a travs
' del pin RB1, durante 1000 milisegundos y el
' resultado del conteo es almacenado en la
117
' variable "Pulsos".
End
Inicio:
118
If PORTB.2 = 1 Then Call Resta ' Si RB2 = 1 llama a la subrutina "Resta"
Suma:
Resta:
End
119
Inicializamos la variable Base con un valor igual a 100 y la variable
Espera con un valor igual a 1.
120
El tren de pulsos generado por el microcontrolador PIC16F84A en el pin RB1,
se puede observar en la siguiente figura:
Figura 6.16.
121
6.10.- Proyecto #16: El siguiente proyecto est basado en el montaje de la
figura 6.15. En esta oportunidad estudiaremos el funcionamiento de la
instruccin Pulsin, con la cual mediremos la duracin de los pulsos
generados por el microcontrolador PIC16F84A, programado en el proyecto
#15.
PULSIN
Pin: especifica el pin del puerto en el cual se introducir el pulso a ser medido.
Variable: es una variable de 8 bits (variable tipo byte) o 16 bits (variable tipo
word) definida por el programador en la cual se grabar el resultado de la
lectura.
122
Inicio:
LCDOut "Lectura: ",#LECTURA," " ' Muestra mensaje y dato por pantalla.
End
123
6.11.- Proyecto #17: Realice el montaje para el circuito la figura 6.17, con el
cual estudiaremos la instruccin POT a travs de un ejemplo de
programacin, con el cual se pretende tomar lectura de un elemento resistivo,
el cual en este caso ser un potencimetro de 10Kohm.
Figura 6.17.
124
Proyecto # 17
Componente Cantidad
PIC16F877A 1
Cristal de 4 Mhz 1
Capacitor cermico de 33 pF 2
Pantalla LCD 16x2 1
Potencimetro de 5K Ohm 1
Potencimetro de 10K Ohm 1
Capacitor cermico de 0,1 uF 1
Fuente regulada de 5 Vdc 1
Tabla 6.6.
POT
125
Variable: es una variable en la cual se almacena el resultado obtenido de la
lectura del potencimetro o componente resistivo.
Inicio:
126
6.12.- Memoria CGRAM en la Pantalla LCD.
C5 C4 C3 C2 C1 C5 C4 C3 C2 C1 C5 C4 C3 C2 C1 C5 C4 C3 C2 C1 C5 C4 C3 C2 C1
Fila 1
Fila 2
Fila 3
Fila 4 .............
Fila 5
Fila 6
Fila 7
Fila 8
Figura 6.18.
Posicin en
la CGRAM Byte 0 Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6 Byte 7
Posicin 0 $40 $41 $42 $43 $44 $45 $46 $47
Posicin 1 $48 $49 $4A $4B $4C $4D $4E $4F
Posicin 2 $50 $51 $52 $53 $54 $55 $56 $57
Posicin 3 $58 $59 $5A $5B $5C $5D $5E $5F
Posicin 4 $60 $61 $62 $63 $64 $65 $66 $67
Posicin 5 $68 $69 $6A $6B $6C $6D $6E $6F
Posicin 6 $70 $71 $72 $73 $74 $75 $76 $77
Posicin 7 $78 $79 $7A $7B $7C $7D $7E $7F
Tabla 6.7.
127
Veamos el siguiente ejemplo en el cual almacenaremos el smbolo de un
parlante en la posicin 0 de la CGRAM.
Tabla 6.8.
LCDOUT $fe,$40,$02,$06,$1A,$1A,$1A,$06,$02,$00
128
En este caso la figura aparece en la primera lnea de la pantalla LCD.
Por ejemplo;
LcdOut $fe,$C0, 0
LcdOut $fe,$C7, 4
Inicio:
129
6.13.- Proyecto #18. A continuacin realizaremos la simulacin de un control
digital de volumen, basados en el diagrama de la figura 6.19. El pulsador P1
ser el encargado de aumentar el nivel de volumen, mientras que el pulsador
P2 ser el encargado de disminuir el nivel.
Figura 6.19.
Proyecto # 18
Componente Cantidad
PIC16F877A 1
Cristal de 8 Mhz 1
Capacitor cermico de 33 pF 2
Pantalla LCD 16x2 1
Resistencia de 10K Ohm 2
Potencimetro de 5K Ohm 1
Pulsador Normalmente Abierto 2
Fuente regulada de 5 Vdc 1
Tabla 6.9.
130
Las pantallas que veremos representadas en este ejemplo son las mostradas
en las figuras 6.20, 6.21, 6.22 y 6.23. Se puede observar en ellas la
representacin de un pequeo parlante y cuatro rectngulos, encargados de
indicar el nivel de volumen.
Figura 6.20.
Figura 6.21.
Figura 6.22.
Figura 6.23.
131
El primer paso en la elaboracin de este ejercicio, es crear las figuras que
deseamos mostrar en la pantalla LCD basados en la explicacin dada
anteriormente:
Figura 1:
Figura 2:
132
Figura 3:
Figura 4:
133
Figura 5:
'****************************************
'* Nombre : Proyecto18.pbp *
'* Autor : Nombre del Autor *
'* Copyright : Copyright (Ao) *
'* Fecha : Fecha *
'* Versin : 1.0 *
'****************************************
DEFINE LCD_DREG PORTD ' Indica que el Bus estar conectado en el Puerto D
DEFINE LCD_BITS 4 ' El bus ser de cuatro bits.
DEFINE LCD_DBIT 4 ' Seleccin del Bit de inicio del puerto en el uC para el
' bus de datos de la LCD
DEFINE LCD_RSREG PORTD ' Indica al uC que el pin "RS" estar en el Puerto D
DEFINE LCD_RSBIT 2 ' "RS" estar conectado en RD2
DEFINE LCD_EREG PORTD ' Indica al uC que el pin "E" estar en el Puerto D
DEFINE LCD_EBIT 3 ' "E" estar conectado en RD3
134
Symbol P1 = PORTB.0 ' Alias para RB0.
Symbol P2 = PORTB.1 ' Alias para RB1.
LCDOut $fe, $40, $02, $06, $1A, $1A, $1A, $06, $02, $00 'Figura 1.
LCDOut $fe, $48, $00, $00, $00, $00, $00, $00, $1F, $1F 'Figura 2.
LCDOut $fe, $50, $00, $00, $00, $00, $1F, $1F, $1F, $1F 'Figura 3.
LCDOut $fe, $58, $00, $00, $1F, $1F, $1F, $1F, $1F, $1F 'Figura 4.
LCDOut $fe, $60, $1F, $1F, $1F, $1F, $1F, $1F, $1F, $1F 'Figura 5.
Inicio:
SubeVol:
Return
Nivel1:
135
Nivel2:
Nivel3:
BajaVol:
Return
Borra1:
Borra2:
Borra3:
End
136
6.14.- Proyecto #19. Realice el siguiente ejercicio en el cual se podr
visualizar un pequeo caballo que corre a lo largo de la pantalla LCD, como
se muestra en las figuras 6.25 y 6.26. El programa ha sido diseado en base
al diagrama esquemtico de la figura 6.24:
Figura 6.24.
Proyecto # 19
Componente Cantidad
PIC16F877A 1
Cristal de 8 Mhz 1
Capacitor cermico de 33 pF 2
Pantalla LCD 16x4 1
Potencimetro de 5K Ohm 1
Fuente regulada de 5 Vdc 1
Tabla 6.10.
137
A continuacin podr ver una secuencia numerada de cada una de las
pantallas que debe generar el programa propuesto:
Figura 6.25.
138
Figura 6.26.
139
Un paso fundamental es hacer el diseo de cada figura en una matriz
cuadriculada de 8 filas por 5 columnas, como se muestra en la figura 6.27.
Figura 6.27.
140
Los datos a ser almacenados en las ocho posiciones de la CGRAM son los
siguientes:
Figura 1:
Palabra 0: $00,$00,$10,$0F,$0F,$0D,$18,$10
Figura 2:
Palabra 1: $04,$0E,$1F,$1C,$1C,$1C,$06,$05
141
Figura 3:
Palabra 2: $00,$00,$10,$0F,$0F,$0D,$04,$06
Figura 4:
Palabra 3: $04,$0E,$1F,$1C,$1C,$1C,$08,$18
142
Figura 5:
Palabra 4: $04,$0E,$1F,$07,$07,$07,$02,$03
Figura 6:
Palabra 5: $00,$00,$01,$1E,$1E,$16,$04,$0C
143
Figura 7:
Palabra 6: $04,$0E,$1F,$07,$07,$07,$0C,$14
Figura 8:
Palabra 7: $00,$00,$01,$1E,$1E,$16,$03,$01
144
En esta oportunidad pondremos a correr nuestro caballo en la segunda lnea
de la pantalla, y lo ubicaremos de la siguiente manera:
Para ver el efecto que deseamos, hacemos una pausa de 300 milisegundos,
borramos la pantalla y mostramos las figuras C y D en las posiciones $C2
y $C3 respectivamente de la pantalla LCD; luego hacemos otra pausa de 300
milisegundos y comenzamos el proceso, solo que esta vez ser partiendo
desde la direccin $C4.
Lnea 1 $80 $81 $82 $83 $84 $85 $86 $87 $88 $89 $8A $8B $8C $8D $8E $8F
Lnea 2 $C0 $C1 $C2 $C3 $C4 $C5 $C6 $C7 $C8 $C9 $CA $CB $CC $CD $CE $CF
Lnea 3 $90 $91 $92 $93 $94 $95 $96 $97 $98 $99 $9A $9B $9C $9D $9E $9F
Lnea 4 $D0 $D1 $D2 $D3 $D4 $D5 $D6 $D7 $D8 $D9 $DA $DB $DC $DD $DE $DF
Figura 6.28.
145
Veamos el programa que hace posible esta representacin:
' Programa en PIC Basic Pro
'****************************************
'* Nombre : Proyecto19.pbp *
'* Autor : Nombre del Autor *
'* Copyright : Copyright (Ao) *
'* Fecha : Fecha *
'* Versin : 1.0 *
'****************************************
DEFINE LCD_DREG PORTD ' Indica que el Bus estar conectado en el Puerto D
DEFINE LCD_BITS 4 ' El bus ser de cuatro bits.
DEFINE LCD_DBIT 4 ' Seleccin del Bit de inicio del puerto en el uC para el
' bus de datos de la LCD
DEFINE LCD_RSREG PORTD ' Indica al uC que el pin "RS" estar en el Puerto D
DEFINE LCD_RSBIT 2 ' "RS" estar conectado en RD2
DEFINE LCD_EREG PORTD ' Indica al uC que el pin "E" estar en el Puerto D
DEFINE LCD_EBIT 3 ' "E" estar conectado en RD3
inicio:
146
LCDOUT $fe, 1 ' Limpia la pantalla LCD
LCDOUT $FE,POS1, 0 ' Muestra Palabra 0 en la LCD
LCDOUT $FE,POS2, 1 ' Muestra Palabra 1 en la LCD
Pause 300
LCDOUT $fe, 1 ' Limpia la pantalla LCD
LCDOUT $FE,POS3, 2 ' Muestra Palabra 2 en la LCD
LCDOUT $FE,POS4, 3 ' Muestra Palabra 3 en la LCD
Pause 300
POS1 = POS1 + 3
POS2 = POS2 + 3
POS3 = POS3 + 3
POS4 = POS4 + 3
If POS4 > $CF Then RETRO ' Pregunta si llega al tope derecho de la LCD
' si POS4 = $CF salta a la etiqueta "RETRO"
GoTo inicio ' Salta a la etiqueta "inicio"
' Antes de retroceder nos aseguramos de que las figuras E,F,G y H tengan una
' posicin inicial en la pantalla LCD:
RETRO:
POS1 = $CF
POS2 = $CE
POS3 = $CD
POS4 = $CC
RETROCEDE:
POS1 = POS1 - 3
POS2 = POS2 - 3
POS3 = POS3 - 3
POS4 = POS4 - 3
If POS4 < $C0 Then REINICIA ' Pregunta si llega al tope Izquierdo de la LCD
GoTo RETROCEDE
' Nos aseguramos de que las figuras A,B,C y D tengan una posicin inicial en la
' pantalla LCD:
147
REINICIA:
POS1 = $C0
POS2 = $C1
POS3 = $C2
POS4 = $C3
148
Teclado Matricial Capitulo VII
Figura 7.1.
Figura 7.2.
149
El principio de funcionamiento de un teclado matricial es muy sencillo.
Bsicamente cuando pulsamos un botn en el teclado, estamos uniendo una
fila con una columna.
Tabla 7.1.
Observe en el diagrama esquemtico que los pines RB3, RB4, RB5 y RB6
tienen una resistencia Pull-up, lo cual significa que si leemos cualquiera de
estas entradas, asumiendo que ninguna tecla ha sido presionada, entonces
siempre habr un uno lgico presente en cada una de ellas.
150
Figura 7.3.
151
3. Enviamos un cero 0 por la columna 2, y enviamos un 1 por las
columnas 1 y 3.
PORTB.0 = 1 ' Columna 1 = 1
PORTB.1 = 0 ' Columna 2 = 0
PORTB.2 = 1 ' Columna 3 = 1
152
Observe que el display de 7 segmentos es de nodo comn, lo cual significa
que para encender un segmento ser necesario enviar un cero 0 a travs
del pin que corresponda a ste, en el puerto D.
' Programa en PIC Basic Pro
Inicio:
Teclado:
Return
End
153
7.2.- Proyecto #20. En el siguiente proyecto utilizaremos una pantalla LCD
16x2, y un teclado matricial 3x4, conectados segn el diagrama esquemtico
de la figura 7.4. El objetivo de este proyecto ser visualizar el valor o smbolo
correspondiente a cada una de las teclas.
Figura 7.4.
Proyecto # 20 - 21 - 22 - 23
Componente Cantidad
PIC16F877A 1
Cristal de 4 Mhz 1
Capacitor cermico de 33 pF 2
Pantalla LCD 16x2 1
Resistencia de 1K Ohm 4
Potencimetro de 5K Ohm 1
Teclado Matricial 3x4 1
Fuente regulada de 5 Vdc 1
Tabla 7.2.
154
Utilizaremos la tcnica de lectura de teclado mostrada anteriormente para la
programacin de este proyecto.
Inicio:
Call Teclado
Teclado:
155
If PORTD.3 = 0 Then VAR1 = 2 ' tecla "2"
If PORTD.4 = 0 Then VAR1 = 5 ' tecla "5"
If PORTD.5 = 0 Then VAR1 = 8 ' tecla "8"
If PORTD.6 = 0 Then VAR1 = 11 ' tecla "0"
156
Memoria de Datos Capitulo VIII
157
En un microcontrolador PIC16F877 la capacidad de almacenamiento aumenta
considerablemente y lo podemos ver en el siguiente mapa:
Tabla 8.2.
158
en PicBasic para grabar datos en la memoria de datos EEPROM es Write y
la estructura de la sentencia es la siguiente:
WRITE
Ejemplo:
Write $00,1 ' graba el dato o valor 1 en la direccin $00
READ
159
Ejemplo:
Figura 8.1.
160
8.2.- Proyecto #21. En este proyecto vamos a almacenar datos en la
memoria EEPROM, para luego ser consultados y mostrados uno por uno en
la pantalla LCD.
TRISA = %00000000
TRISB = %00000000
TRISD = %01111000
161
La siguiente subrutina lee el valor almacenado en la direccin $00 y lo
muestra en la pantalla LCD, espera tres segundos y lee el segundo valor
almacenado en la posicin $01, lo muestra en la pantalla LCD y nuevamente
hace una pausa de tres segundos. Por ltimo se lee el valor almacenado en la
posicin $02 y lo muestra en la pantalla LCD durante tres segundos, para
luego volver a empezar el proceso de lectura.
Inicio:
Read $00,VAR1
Pause 3000
Read $01,VAR1
Lcdout $fe, 2 ' Posiciona el cursor en el inicio
Lcdout "Direccin 01: "
Lcdout $fe,$C0, "Dato: ",#VAR1," "
Pause 3000
Read $02,VAR1
Lcdout $fe, 2 ' Posiciona el cursor en el inicio
Lcdout "Direccin 02: "
Lcdout $fe,$C0, "Dato: ",#VAR1," "
Pause 3000
GoTo inicio
End
Para comprobar que estos datos estn en la memoria de datos EEPROM del
microcontrolador, tambin es posible utilizar el programador P16Pro para este
fin, desde el cual podemos extraer el contenido completo de la memoria de
datos sin problemas, debido a que el software del programador cuenta con
una pequea ventana llamada Data Memory, en la cual se pueden ver los
datos almacenados como se muestra en la figura 8.2:
162
Figura 8.2.
TRISA = %00000000
TRISB = %00000000
TRISD = %01111000
163
' Almacenaremos a continuacin 20 datos en 20 direcciones
' consecutivas; los datos a almacenar sern: 1,3,5,7,9,11,13
' 15,17,19,21,23,25,27,29,31,33,35,37 y 39.
Inicio:
DIRECCION = $00
End
Figura 8.3.
164
8.4.- Proyecto #23. En el siguiente ejemplo vamos a utilizar la rutina para el
control de un teclado matricial, ya que con ella podremos insertar valores que
sern almacenados en la memoria de datos. Analice el siguiente programa, el
cual ha sido desarrollado en base al diagrama de la figura 8.1.
' Programa en Pic Basic Pro
TRISA = %00000000
TRISB = %00000000
TRISD = %01111000
Inicio:
espera1:
Call Teclado
If VAR1 = 0 Then espera1 ' Si ninguna tecla fue pulsada salta a espera1
If VAR1 = 10 Then espera1 ' Si pulsamos la tecla asterisco salta a espera1
If VAR1 = 11 Then VAR1 = 0 ' Si pulsamos la tecla 0, entonces VAR1 = 0
If VAR1 = 12 Then espera1 ' Si pulsamos la tecla numeral salta a espera1
165
Lcdout $fe,$C0, "Dato Almacenado"
If DIRECCION = $0F Then Aviso ' Revisa si llegamos al lmite asignado por
' el programador en la memoria de datos
GoTo inicio
Aviso:
Parada:
GoTo Parada
Teclado:
VAR1 = 0
End
166
Una vez compilado y puesto a prueba el programa, los valores podrn ser
introducidos a la memoria de datos a travs del teclado matricial, y el lmite de
datos a ser grabados ser de 16 registros, ya que hemos fijado como lmite la
direccin $0F en la memoria de datos, para luego mostrar un mensaje en la
pantalla LCD que nos indicar que hemos llenado cada uno de los 16
registros disponibles.
167
8.5.- Proyecto #24: En el siguiente ejemplo hemos desarrollado un sistema
de control de acceso, en el cual el usuario deber introducir una contrasea
previamente almacenada en la memoria de datos. Si la contrasea es
correcta, se genera un mensaje de confirmacin y sonido (Beep). Si la
contrasea es incorrecta, se genera un mensaje de error y un sonido
intermitente (Beep, Beep, Beep).
Figura 8.4.
168
Proyecto # 24
Componente Cantidad
PIC16F877A 1
Cristal de 4 Mhz 1
Capacitor cermico de 33 pF 2
Pantalla LCD 16x2 1
Resistencia de 1K Ohm 4
Potencimetro de 5K Ohm 1
Teclado Matricial 3x4 1
Transistor 2N3904 1
Buzzer 5 Vdc 1
Fuente regulada de 5 Vdc 1
Tabla 8.3.
169
Memoria de Datos PIC16F877
0000: 00 01 02 03 04 05 06 07
0008: 08 09 0A 0B 0C 0D 0E 0F
0010: 10 11 12 13 14 15 16 17
0018: 18 19 1A 1B 1C 1D 1E 1F
0020: 20 21 22 23 24 25 26 27
0028: 28 29 2A 2B 2C 2D 2E 2F
0030: 30 21 32 33 34 35 36 37
0038: 38 39 3A 3B 3C 3D 3E 3F
0040: 40 41 42 43 44 45 46 47
0048: 48 49 4A 4B 4C 4D 4E 4F
0050: 50 51 52 53 54 55 56 57
0058: 58 59 5A 5B 5C 5D 5E 5F
0060: 60 61 62 63 64 65 66 67
0068: 68 69 6A 6B 6C 6D 6E 6F
0070: 70 71 72 73 74 75 76 77
0078: 78 79 7A 7B 7C 7D 7E 7F
0080: 80 81 82 83 84 85 86 87
0088: 88 89 8A 8B 8C 8D 8E 8F
0090: 90 91 92 93 94 95 96 97
0098: 98 99 9A 9B 9C 9D 9E 9F
00A0: A0 A1 A2 A3 A4 A5 A6 A7
00A8: A8 A9 AA AB AC AD AE AF
00B0: B0 B1 B2 B3 B4 B5 B6 B7
00B8: B8 B9 BA BB BC BD BE BF
00C0: C0 C1 C2 C3 C4 C5 C6 C7
00C8: C8 C9 CA CB CC CD CE CF
00D0: D0 D1 D2 D3 D4 D5 D6 D7
00D8: D8 D9 DA DB DC DD DE DF
00E0: E0 E1 E2 E3 E4 E5 E6 E7
00E8: E8 E9 EA EB EC ED EE EF
00F0: F0 F1 F2 F3 F4 F5 F6 F7
00F8: F8 F9 FA FB FC FD FE FF
Tabla 8.4.
Tambin podr notar que seguimos utilizando la misma rutina para el control
del teclado matricial.
170
' Programa en Pic Basic Pro
TRISA = %00000000
TRISB = %00000000
TRISD = %01111000
X VAR Byte
VAR1 VAR Byte
DIGITO VAR Byte[7]
CLV VAR Byte[7]
Inicio:
Clave:
171
Consulta:
If VAR1 = 0 Then consulta ' Si no hay una tecla pulsada vuelve a consultar
' Si VAR1 es diferente de cero, significa que pulsamos una tecla, por lo
' tanto generamos un sonido y continuamos
X = X + 1
Comprobar:
172
Correcto:
Pause 500
GoTo inicio
Error:
Pause 500
Beep:
Teclado:
VAR1 = 0
173
PORTD.0 = 1 ' Columna 1 = 1
PORTD.1 = 0 ' Columna 2 = 0
PORTD.2 = 1 ' Columna 3 = 1
End
174
Interrupciones Capitulo IX
Figura 9.1.
175
GIE:
1 = habilita todas las interrupciones.
0 = deshabilita las interrupciones.
EEIE:
1 = habilita la interrupcin por escritura de la EEPROM.
0 = deshabilita la interrupcin por escritura de la EEPROM.
TOIE:
1 = habilita la interrupcin por temporizador TMR0.
0 = deshabilita la interrupcin por temporizador TMR0.
INTE:
1 = habilita la interrupcin por RB0/INT.
0 = deshabilita la interrupcin por RB0/INT.
RBIE:
1 = habilita la interrupcin por puerto B (RB4-RB7).
0 = deshabilita la interrupcin por puerto B.
176
9.4.- Activacin de interrupcin a travs del pin RB0/INT:
Figura 9.2.
177
Proyecto # 25
Componente Cantidad
PIC16F84A 1
Cristal de 4 Mhz 1
Capacitor cermico de 33 pF 2
LED 2
Resistencia de 220 Ohm 2
Resistencia de 10K Ohm 1
Pulsador Normalmente Abierto 1
Fuente regulada de 5 Vdc 1
Tabla 9.1.
Figura 9.3.
178
TRISA = %00000000 ' Configura el Puerto A como salida
TRISB = %00000000 ' Configura el Puerto B como salida
I VAR Byte
Interrup:
179
9.6.- Interrupcin TMR0:
Figura 9.4.
180
El Bit TOSE del registro OPTION, elige el tipo de flanco activo cuando el
contador TMR0 es incrementado a travs del pin RA4/TOCKI, es decir,
determina si el incremento se har con el flanco de bajada o con el flanco de
subida de la seal aplicada.
FOSC/4 es una seal de reloj interna que genera pulsos que tienen una
frecuencia conocida y la cual depende del oscilador principal. FOSC/4 se
utiliza cuando queremos que el registro TMR0 se comporte como
temporizador, y esto se logra configurando el Bit TOCS del registro OPTION
(TOCS = 0).
Figura 9.5.
RBP0#:
1 = resistencias Pull-Up del puerto B activadas.
0 = resistencias Pull-Up del puerto B desactivadas.
181
INTEDG: (Flanco activo de interrupcin externa)
1 = activacin de la interrupcin con flanco ascendente
0 = activacin de la interrupcin con flanco descendente
TOCS:
1 = seal de reloj introducida a travs de RA4/TOCKI
0 = seal de reloj interno FOSC/4
TOSE:
1 = incrementa TMR0 con flanco descendente de RA4/TOCKI
0 = incrementa TMR0 con flanco ascendente de RA4/TOCKI
PSA:
1 = asigna el divisor de frecuencia a WDT
0 = asigna el divisor de frecuencia a TMR0
PS2,PS1,PS0:
Divisor de Divisor de
PS2 PS1 PS0
TMR0 WDT
0 0 0 1:2 1:1
0 0 1 1:4 1:2
0 1 0 1:8 1:4
0 1 1 1:16 1:8
1 0 0 1:32 1:16
1 0 1 1:64 1:32
1 1 0 1:128 1:64
1 1 1 1:256 1:128
Tabla 9.2.
182
9.8.- Proyecto #26. Para dar un ejemplo de aplicacin del Registro TMR0
como temporizador, crearemos un programa que haga destellar un Led con
una frecuencia de 1 Hz. Este proceso se debe cumplir de la siguiente manera:
1. Encender el Led.
2. Esperar un segundo (1000 milisegundos).
3. Apagar el Led.
4. Esperar un segundo (1000 milisegundos).
5. Repetir todo el proceso.
Prescaler: segn la tabla 9.2, el valor mximo para el divisor del TMR0 es
256.
Entonces;
183
Entonces, aplicando la formula tenemos:
Figura 9.6.
184
Proyecto # 26
Componente Cantidad
PIC16F84A 1
Cristal de 4 Mhz 1
Capacitor cermico de 33 pF 2
LED 1
Resistencia de 220 Ohm 1
Fuente regulada de 5 Vdc 1
Tabla 9.3.
Symbol TOIF = INTCON.2 ' Alias para el bit 2 del registro INTCON.
Symbol GIE = INTCON.7 ' Alias para el bit 7 del registro INTCON.
Symbol LED = PORTA.0 ' Alias para el pin RA0
Disable
Inicio:
High LED ' Enciende el Led
Call Retardo ' Llama a la rutina de retardo
Low LED ' Apaga el Led
Call Retardo ' Llama a la rutina de retardo
GoTo Inicio ' Salta a la etiqueta inicio.
Retardo:
For I = 1 To 20 ' Repetimos la interrupcin 20 veces para
' obtener un retardo de 1 segundo.
Call Retardo1
Next I
Return
185
' TMR0 = 256 - (0.050/0.000256) = 60,68 = 61
Espera:
If TOIF = 1 Then Reseteo ' pregunta si TOIF es igual a 1, es decir,
' pregunta si TMR0 se desbordo.
GoTo Espera ' Salta a la etiqueta Espera.
Reseteo:
End
Activar la interrupcin por cambio de estado en los pines RB4, RB5, RB6 y
RB7 es muy sencillo, y lo podemos hacer a travs del registro INTCON,
donde contamos con un bit llamado RBIE, que activa o desactiva este tipo de
interrupcin, es decir, podemos configurar este registro de la siguiente
manera:
Figura 9.7.
INTCON = %10001000
RBIE = 1, con este bit en estado lgico 1, habilitamos las interrupciones por
cambio de estado en el puerto B.
186
Es importante tomar en cuenta el registro de configuracin del puerto B
(TrisB), en el cual debemos configurar los bits ms significativos como
entrada.
Figura 9.8.
187
Proyecto # 27
Componente Cantidad
PIC16F84A 1
Cristal de 4 Mhz 1
Capacitor cermico de 33 pF 2
LED 2
Resistencia de 220 Ohm 2
Resistencia de 10K Ohm 4
Pulsador Normalmente Abierto 4
Fuente regulada de 5 Vdc 1
Tabla 9.4.
En este circuito las entradas RB4, RB5, RB6 y RB7 estn normalmente en 0;
para producir una interrupcin bastar con activar cualquiera de los
pulsadores, para poner un 1 en la entrada correspondiente.
Inicio:
188
Interrup:
Disable
For I = 1 To 6
End
189
Memoria Serial I2C Capitulo X
La tasa de transferencia de datos llega a niveles que van desde los 100 Khz
para un oscilador de 4 Mhz, hasta 400 khz para un oscilador de 20 Mhz. Si
deseamos utilizar una taza de transferencia inferior a 100 Khz la siguiente
directiva deber ser definida al inicio del programa:
DEFINE I2C_SLOW 1
Cada dispositivo I2C cuenta con una nica direccin de 7 bits, de tal manera
que el microcontrolador podr saber exactamente a cual de ellos transferir
informacin y a cual de ellos solicitar informacin en cualquier momento. Los
cuatro bits ms significativos de esta direccin regularmente siempre estarn
fijos y su estado depende del tipo de dispositivo a ser conectado. Por ejemplo,
para una memoria EEPROM serial, los cuatro bits mas significativos en la
direccin siempre ser 1010.
190
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
1 0 1 0 A2 A1 A0 R/W
Figura 10.1.
Figura 10.2.
Figura 10.3.
Las instrucciones de programa en PicBasic para el control del bus I2C son
I2Cread e I2CWrite, con las cuales realizaremos los siguientes proyectos, y
191
en los cuales podremos almacenar datos y extraer datos de una memoria
serial 24LC256.
Figura 10.4.
192
Proyecto # 28 - 29
Componente Cantidad
PIC16F877A 1
Cristal de 4 Mhz 1
Capacitor cermico de 22 pF 2
Pantalla LCD 16x2 1
Resistencia de 4,7K Ohm 2
Potencimetro de 5K Ohm 1
Memoria EEPROM 24LC256 1
Fuente regulada de 5 Vdc 1
Tabla 10.1.
I2CWRITE
Sintaxis:
193
Direc VAR Word ' Declaracin de variable "Direc"
Control VAR Byte ' Declaracin de variable "Control"
Dato VAR Byte ' Declaracin de variable "Dato"
Inicio:
Control = $A0 ' Dato de Control
Direc = $10 ' Direccin en la memoria externa
Dato = $23 ' Dato a ser cargado en la direccin
' especificada ($23 = 35 Decimal)
Recuerde que estos tres pines definen la direccin del dispositivo; entonces,
debemos tomar en cuenta que para una memoria serial, los cuatro bits ms
significativos estn configurados como 1010xxxx; los tres bits A2, A1 y A0
estn conectados a tierra en este proyecto; y el bit R/W debe estar en 0 para
poder escribir un dato en la memoria (ver figura 10.5).
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 (A2) Bit 2 (A1) Bit 1 (A0) Bit 0 (R/W)
1 0 1 0 0 0 0 0
A 0
Figura 10.5.
194
Para enviar el dato a la memoria en la direccin especificada, utilizamos la
instruccin I2CWrite de la siguiente manera:
I2CREAD
Sintaxis:
195
LCDOut $fe, 1 ' Limpia la LCD
Inicio:
Direc = $10 ' Direccin en la memoria externa
Control = $A0 ' Dato de Control
Escribir:
196
Leer:
LCDOUT $fe, 2,"Dato ",#I,": ",#A1," " ' Muestra el dato leido
Pause 1000 ' Pausa de 1 segundo
If I = 50 Then final ' Condicional
Direc = Direc + 1 ' Suma 1 a la variable "Direc"
Next I
Final:
End
197
10.4.- Proyecto #30: Veamos el siguiente programa en el cual se almacenan
datos en dos memorias conectadas al bus I2C, para luego ser extrados y
verificados.
Figura 10.6.
Proyecto # 30
Componente Cantidad
PIC16F877A 1
Cristal de 4 Mhz 1
Capacitor cermico de 22 pF 2
Pantalla LCD 16x2 1
Resistencia de 4,7K Ohm 2
Potencimetro de 5K Ohm 1
Memoria EEPROM 24LC256 2
Fuente regulada de 5 Vdc 1
Tabla 10.2.
198
Analice el siguente programa, prestando atencin a los comentarios de cada
lnea:
memoria1:
' xxxxAAAx
' xxxx210x
Control = %10100000 ' Dato de Control
confirma1:
memoria2:
' xxxxAAAx
' xxxx210x
Control = %10100010 ' Dato de Control
199
Direc = $00 ' Direccin en la memoria externa
Dato = 150 ' Dato inicial a ser grabado
confirma2:
lectura1:
' xxxxAAAx
' xxxx210x
Control = %10100000 ' Dato de Control
Direc = $00 ' Direccin en la memoria externa
LCDOUT $fe, 2,"Dato ",#I,": ",#A1," " ' Muestra el dato leido
Pause 1000 ' Pausa de 1 segundo
If I = 20 Then lectura2 ' Condicional
Direc = Direc + 1 ' Suma 1 a la variable "Direc"
Next I
lectura2:
' xxxxAAAx
' xxxx210x
Control = %10100010 ' Dato de Control
Direc = $00 ' Direccin en la memoria externa
200
LCDOUT $fe, 2,"Dato ",#I,": ",#A1," " ' Muestra el dato leido
Pause 1000 ' Pausa de 1 segundo
If I = 20 Then final ' Condicional
Direc = Direc + 1 ' Suma 1 a la variable "Direc"
Next I
final:
201
Conversor A/D en el PIC16F877 Capitulo XI
Figura 11.1.
202
En el microcontrolador PIC16F877, cada canal de conversin A/D est
conectado a un pin ubicado en el puerto A y en el puerto E. Por ejemplo, el
canal AN0 corresponde al pin # 2 del microcontrolador, o expresado de otra
manera, al pin RA0 del puerto A. El canal AN1 corresponde al pin # 3; el canal
AN2 corresponde al pin # 4 y as sucesivamente; entonces se puede ver
claramente que el puerto A cuenta con cinco de los ocho canales del
conversor A/D, y los otros tres canales estn ubicados en los pines
correspondientes al puerto E del microcontrolador.
250 1 1 1 1 1 0 1 0
251 1 1 1 1 1 0 1 1
252 1 1 1 1 1 1 0 0
253 1 1 1 1 1 1 0 1
254 1 1 1 1 1 1 1 0
255 1 1 1 1 1 1 1 1
Tabla 11.1.
203
Cuando la conversin se hace a 10 bits, la resolucin aumenta
considerablemente en relacin a la de 8 bits, ya que tenemos 210 = 1024
datos de conversin, como se puede observar en la tabla 11.2:
0 0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 1
2 0 0 0 0 0 0 0 0 1 0
3 0 0 0 0 0 0 0 0 1 1
4 0 0 0 0 0 0 0 1 0 0
.
.
1018 1 1 1 1 1 1 1 0 1 0
1019 1 1 1 1 1 1 1 0 1 1
1020 1 1 1 1 1 1 1 1 0 0
1021 1 1 1 1 1 1 1 1 0 1
1022 1 1 1 1 1 1 1 1 1 0
1023 1 1 1 1 1 1 1 1 1 1
Tabla 11.2.
Vimax
Resolucin =
2n
5V
Resolucin =
28
204
5V
Resolucin =
256
Vimax
Resolucin =
2n
5V
Resolucin =
210
5V
Resolucin =
1024
205
Veamos el diagrama de bloques del conversor A/D (figura 11.2):
Figura 11.2.
Vimax
Resolucin =
2n
206
2.5V
Resolucin =
210
2.5V
Resolucin =
1024
La resolucin del conversor A/D sera de 2.5 mV por cada paso entre 0 y
1023. Hay una serie de pasos que debemos tomar en cuenta para llevar a
cabo una conversin A/D, basados en el diagrama de bloques de la figura
11.2:
Figura 11.3.
207
PCFG3 PCFG2 PCFG1 PCFG0 AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0 Vref+ Vref-
0 0 0 0 A A A A A A A A Vdd Vss
0 0 0 1 A A A A Vref+ A A A RA3 Vss
0 0 1 0 D D D A A A A A Vdd Vss
0 0 1 1 D D D A Vref+ A A A RA3 Vss
0 1 0 0 D D D D A D A A Vdd Vss
0 1 0 1 D D D D Vref+ D A A RA3 Vss
0 1 1 x D D D D D D D D Vdd Vss
1 0 0 0 A A A A Vref+ Vref- A A RA3 RA2
1 0 0 1 D D A A A A A A Vdd Vss
1 0 1 0 D D A A Vref+ A A A RA3 Vss
1 0 1 1 D D A A Vref+ Vref- A A RA3 RA2
1 1 0 0 D D D A Vref+ Vref- A A RA3 RA2
1 1 0 1 D D D D Vref+ Vref- A A RA3 RA2
1 1 1 0 D D D D D D D A Vdd Vss
1 1 1 1 D D D D Vref+ Vref- D A RA3 RA2
Tabla 11.3.
Figura 11.4.
Tabla 11.4.
208
Tambin es posible seleccionar el canal que deseamos utilizar, con la
instruccin de programa ADCin, en la cual slo se especifica cual ser el
canal de entrada de la seal a ser convertida y la variable en la cual se
almacenar el resultado de la conversin.
Figura 11.5.
Tabla 11.5.
209
Bit 5, Bit 4 y Bit 3: Seleccin del canal de entrada.
Tabla 11.6.
Figura 11.6.
210
1 = Justifica a la derecha.
0 = Justifica a la Izquierda.
PCFG3 PCFG2 PCFG1 PCFG0 AN7 AN6 AN5 AN4 AN3 AN2 AN1 AN0 Vref+ Vref-
0 0 0 0 A A A A A A A A Vdd Vss
0 0 0 1 A A A A Vref+ A A A RA3 Vss
0 0 1 0 D D D A A A A A Vdd Vss
0 0 1 1 D D D A Vref+ A A A RA3 Vss
0 1 0 0 D D D D A D A A Vdd Vss
0 1 0 1 D D D D Vref+ D A A RA3 Vss
0 1 1 x D D D D D D D D Vdd Vss
1 0 0 0 A A A A Vref+ Vref- A A RA3 RA2
1 0 0 1 D D A A A A A A Vdd Vss
1 0 1 0 D D A A Vref+ A A A RA3 Vss
1 0 1 1 D D A A Vref+ Vref- A A RA3 RA2
1 1 0 0 D D D A Vref+ Vref- A A RA3 RA2
1 1 0 1 D D D D Vref+ Vref- A A RA3 RA2
1 1 1 0 D D D D D D D A Vdd Vss
1 1 1 1 D D D D Vref+ Vref- D A RA3 RA2
Tabla 11.7.
A = Entrada Analgica
D = I/O Digital
Conversin a 8 Bits:
Define ADC_BITS 8
211
Esta directiva define que el resultado de la conversin A/D de una seal,
aplicada a cualquiera de los canales, ser de 8 bits. Este resultado ser
almacenado en un registro definido por el fabricante denominado ADRESL.
Figura 11.7.
Conversin a 10 Bits:
Define ADC_BITS 10
212
REGISTRO ALTO (ADRESH) REGISTRO BAJO (ADRESL)
BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0 BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0
0 0 0 0 0 0
Figura 11.9.
Ejemplo:
Define ADC_SAMPLEUS 50
213
11.4.- Proyecto #31: A continuacin presentamos un ejemplo de conversin
A/D a 8 bits, el cual consta bsicamente de un microcontrolador PIC16F877,
un oscilador externo de 10 Mhz, una pantalla LCD para visualizar los
resultados, y un potencimetro de 5Kohm para introducir un voltaje variable
en un canal de entrada al conversor A/D.
Figura 11.11.
214
Proyecto # 31
Componente Cantidad
PIC16F877A 1
Cristal de 10 Mhz 1
Capacitor cermico de 22 pF 2
Pantalla LCD 16x2 1
Resistencia de 220 Ohm 2
Potencimetro de 5K Ohm 2
Fuente regulada de 5 Vdc 1
Tabla 11.8.
ADCin
DEFINE LCD_DREG PORTD ' Indica que el Bus estar conectado en el Puerto D
DEFINE LCD_BITS 4 ' El bus ser de cuatro bits.
DEFINE LCD_DBIT 4 ' Seleccin del Bit de inicio del puerto (0 o 4) en caso
' de utilizar los cuatro Bits mas significativos de la LCD
DEFINE LCD_RSREG PORTB ' Indica al uC que el pin "RS" estar en el Puerto B
DEFINE LCD_RSBIT 1 ' "RS" estar conectado en RB1
DEFINE LCD_EREG PORTB ' Indica al uC que el pin "E" estar en el Puerto B
DEFINE LCD_EBIT 0 ' "E" estar conectado en RB0
DEFINE LCD_LINES 2 ' Define el nmero de lneas de la pantalla
215
DEFINE ADC_BITS 8 ' Define la conversin A/D a 8 Bits
DEFINE ADC_SAMPLEUS 50 ' Tiempo de muestreo en el conversor A/D es 50 uS
Inicio:
End
216
Esto significa que podemos configurar el conversor A/D a 10 Bits, lo cual nos
lleva a considerar los siguientes cambios:
C-AD a 10 Bit:.
DEFINE LCD_DREG PORTD ' Indica que el Bus estar conectado en el Puerto D
DEFINE LCD_BITS 4 ' El bus ser de cuatro bits.
DEFINE LCD_DBIT 4 ' Seleccin del Bit de inicio del puerto (0 o 4) en caso
' de utilizar los cuatro Bits mas significativos de la LCD
DEFINE LCD_RSREG PORTB ' Indica al uC que el pin "RS" estar en el Puerto B
DEFINE LCD_RSBIT 1 ' "RS" estar conectado en RB1
DEFINE LCD_EREG PORTB ' Indica al uC que el pin "E" estar en el Puerto B
DEFINE LCD_EBIT 0 ' "E" estar conectado en RB0
DEFINE LCD_LINES 2 ' Define el nmero de lneas de la pantalla
A VAR Word ' Declaracin de una variable tipo word (16 bits)
Inicio:
217
LCDOut $fe, 2 ' Posiciona el cursor en el inicio
LCDOUT "C-AD a 10 Bit: " ' Muestra mensaje en la lnea 1
LCDOUT $fe,$C0," ",Dec A," " ' Muestra dato en la lnea 2
PAUSE 100 ' Pausa de 100 milisegundos
End
218
Comunicacin Serial
Transmisin y Recepcin de Datos Capitulo XII
219
tener una transferencia de datos segura con otros osciladores de mayor valor,
ser necesario utilizar la directiva Define Osc al inicio del programa.
Pin: en este campo definiremos cual ser el pin de entrada entre los puertos
disponibles del microcontrolador. Ejemplo: PortB.1
Ejemplo:
220
Symbol T2400 = 0 ' Dato verdadero (Driven True)
Symbol T1200 = 1 ' Dato verdadero (Driven True)
Symbol T9600 = 2 ' Dato verdadero (Driven True)
Symbol T300 = 3 ' Dato verdadero (Driven True)
Symbol N2400 = 4 ' Dato invertido (Driven inverted)
Symbol N1200 = 5 ' Dato invertido (Driven inverted)
Symbol N9600 = 6 ' Dato invertido (Driven inverted)
Symbol N300 = 7 ' Dato invertido (Driven inverted)
221
condensadores de 1 uF, ya que una polaridad invertida afectar
negativamente el funcionamiento del MAX232 (Observe la polaridad de cada
condensador en la figura 12.2).
Figura 12.1.
222
Proyecto # 32
Componente Cantidad
PIC16F877A 1
Cristal de 4 Mhz 1
Capacitor cermico de 22 pF 2
Pantalla LCD 16x2 1
Resistencia de 220 Ohm 1
Capacitor Electroltico de uF 5
Conector DB-9M 1
IC MAX232 1
Fuente regulada de 5 Vdc 1
Tabla 12.2.
Figura 12.2.
223
' Programa en Pic Basic Pro
inicio:
Como velocidad de transmisin, hemos elegido utilizar 9600 bps, por lo cual
debemos definir este valor en nuestro programa.
Las seales con las que acta el puerto del PC son digitales y la tensin con
la cual trabaja es +12V y -12V; adicionalmente resulta importante saber que la
lgica es invertida, es decir:
+12 V Lgica = 0
-12 V Lgica = 1
224
Programa en Visual Basic 6.0:
Figura 12.3.
Figura 12.4.
225
Figura 12.5.
Figura 12.6.
226
Al hacer clic en el botn Aceptar veremos que en la barra de herramientas
aparece un nuevo icono representado por un telfono.
Figura 12.7.
Figura 12.8.
227
Figura 12.9. Figura 12.10.
Figura 12.11.
228
Utilice el icono CommandButton en la barra de herramientas para agregar
botones en el formulario:
Figura 12.12.
Figura 12.13.
229
Este procedimiento se repite hasta lograr obtener un formulario con 12
botones debidamente identificados como se observa en la figura 12.14:
Figura 12.14.
MSComm1.Output = Chr$(1)
Figura 12.15.
230
Se repite el paso anterior para el resto de los botones:
Por ltimo, haga clic en el botn Iniciar (ver figura 12.16), para hacer
funcionar el teclado 3x4 desde el cual se enviarn datos hacia el
microcontrolador.
231
Figura 12.16.
232
12.4.- Instruccin SerOut: La instruccin SerOut en PicBasic se encarga de
enviar uno o mas valores a travs de un pin especfico, usando el formato
asncrono estndar 8N1, que significa 8 bits de datos, sin revisin de paridad
y 1 bit de parada (stop).
Pin: en este campo definiremos cual ser el pin de salida entre los puertos
disponibles del microcontrolador. Ejemplo: PortB.5
Variable: En este campo se especifica la variable que contiene los datos que
sern enviados a travs de pin especificado. Ejemplo:
inicio:
SerOut PORTC.6, T9600, [#I] ' Enva los datos a travs del pin RC6
Next I
233
GoTo inicio ' Salta a inicio
End
Figura 12.17.
234
Proyecto # 33
Componente Cantidad
PIC16F877A 1
Cristal de 4 Mhz 1
Capacitor cermico de 22 pF 2
Capacitor Electroltico de uF 5
Conector DB-9M 1
IC MAX232 1
Fuente regulada de 5 Vdc 1
Tabla 12.3.
Figura 12.18.
235
Deber tomar en cuenta entonces, que los parmetros de comunicacin
cambian, debido a que los datos ya no pasarn a travs del inversor integrado
en el MAX232.
Inicio:
SerOut PORTC.6, N9600, [#I] ' enva los datos a travs del pin RC6
Next I
236
Figura 12.19.
237
Figura 12.20.
Figura 12.21.
238
Tambin es conveniente tomar en cuenta en la configuracin de la conexin,
el tipo de emulacin (figura 12.22).
Figura 12.22.
239
Figura 12.23.
240
La pantalla LCD estar conectada en el puerto D, por lo cual ser
necesario definir los pines de la misma al inicio del programa.
Figura 12.24.
241
Proyecto # 34
Componente Cantidad
PIC16F877A 1
Cristal de 4 Mhz 1
Capacitor cermico de 33 pF 2
Pantalla LCD 16x2 1
Resistencia de 220 Ohm 1
Capacitor Electroltico de uF 5
Conector DB-9M 1
IC MAX232 1
Potencimetro de 5K Ohm 1
Fuente regulada de 5 Vdc 1
Tabla 12.4.
DEFINE LCD_DREG PORTD ' Indica que el Bus estar conectado en el Puerto D
DEFINE LCD_BITS 4 ' El bus ser de cuatro bits.
DEFINE LCD_DBIT 4 ' Seleccin del Bit de inicio del puerto (0 o 4) en caso
' de utilizar los cuatro Bits mas significativos de la LCD
DEFINE LCD_RSREG PORTD ' Indica al uC que el pin "RS" estar en el Puerto B
DEFINE LCD_RSBIT 2 ' "RS" estar conectado en RB1
DEFINE LCD_EREG PORTD ' Indica al uC que el pin "E" estar en el Puerto B
DEFINE LCD_EBIT 3 ' "E" estar conectado en RB0
DEFINE LCD_LINES 2 ' Define el nmero de lneas de la pantalla
A VAR Word ' Declaracin de una variable tipo word (16 bits)
242
ADCON1 = %10000000 ' Configura el registro ADCON1
inicio:
End
243
Para esto debemos conectar el cable serial entre el circuito y el PC, desde la
cual realizaremos una nueva conexin con el HyperTerminal, como se
muestra en figura 12.25:
Figura 12.25.
244
Figura 12.26.
Figura 12.27.
245
anteriormente en el programa que hemos cargado en el microcontrolador PIC
(figura 12.28).
Figura 12.28.
La idea principal de esta prctica, ser llevar estos datos a una hoja de Excel,
en la cual podamos realizar los clculos para expresar estos valores en sus
equivalentes en voltios para luego tomar una muestra significativa y
graficarlos como se observa en la figura 12.29.
246
Figura 12.29.
El primer paso para configurar la hoja de Excel, ser ubicar las herramientas
de Visual Basic y agregar a la hoja de clculo el control Microsoft
communications control, Version 6.0. Para esto debemos seguir los
siguientes pasos:
247
1.- Al abrir la hoja de clculo, podemos ver un men de opciones en la parte
superior de la ventana denominado Herramientas. Haga clic en el men
Herramientas y seleccione la opcin Personalizar.
Figura 12.30.
248
Figura 12.31.
249
Figura 12.32.
250
Figura 12.33.
251
Figura 12.34.
252
puntero hasta que aparezca un pequeo recuadro. Al soltar el botn izquierdo
el control aparece sobre la hoja. La figura de un Telfono sobre un MODEM
lo identifica claramente, como se muestra en la figura 12.35.
Figura 12.35.
253
Figura 12.36.
Al hacer doble clic sobre el nuevo botn, estamos entrando al editor de Visual
Basic, en el cual podemos agregar las siguientes lneas de programa, las
cuales permitirn abrir el puerto al hacer clic sobre el botn que hemos
agregado para tal fin:
254
Figura 12.37.
255
Figura 12.38.
Figura 12.39.
256
Veremos a continuacin la ventana del editor de Visual Basic (Figura 12.40):
Figura 12.40.
257
paso en la configuracin del control de comunicaciones ha sido la declaracin
de dos variables, las cuales hemos denominado Apuntador y datainput.
datainput = MSComm1.Input
Hoja1.Cells(Fila, Columna)
Ejemplo:
Si datainput = 643645650681701718745776
Para extraer los tres primeros caracteres y llevarlos por ejemplo a la celda
(40,2) debemos hacer el siguiente arreglo:
258
Hoja1.Cells(40, 2) = Mid(datainput, 1, 3)
'Declara variable
datainput = MSComm1.Input
For Apuntador = 30 To 40
Hoja1.Cells(Apuntador, 2) = Hoja1.Cells(Apuntador + 1, 2)
Next
Hoja1.Cells(40, 2) = Mid(datainput, 1, 4)
End Sub
259
Figura 12.41.
260
Figura 12.42.
261
=(B36*5)/1024 para la celda C36
=(B35*5)/1024 para la celda C35
=(B34*5)/1024 para la celda C34
=(B33*5)/1024 para la celda C33
=(B32*5)/1024 para la celda C32
=(B31*5)/1024 para la celda C31
=(B30*5)/1024 para la celda C30
Figura 12.43.
262
Figura 12.44.
Para graficar esta serie de datos, seleccionamos las diez celdas (desde la
celda C30 hasta la celda C40) y hacemos clic en el icono Asistente para
Grficos (Figura 12.45), donde aparecer una ventana en la cual podremos
elegir el tipo de grfico que deseamos utilizar. Seleccione la ficha Tipos
personalizados y haga clic en la opcin Lneas suavizadas de la lista
(Figura 12.46).
263
Figura 12.45.
Figura 12.46.
264
En la siguiente ventana podemos ver el rango de datos que ser graficado
(Figura 12.47):
Figura 12.47.
265
Figura 12.48.
Figura 12.49.
266
Figura 12.50.
267
Servomotores Capitulo XIII
13.1.- Qu es un Servomotor?
268
Torque (4.8V): 3.0 kg/cm (42 oz/in)
Torque (6.0V): 4.5 kg/cm (48.60 oz/in)
Rango de Temperatura Operacional: -20 a +60 C.
Velocidad (4.8V): 0.19sec/60 grados.
Velocidad (6.0V): 0.15sec/60 grados.
Corriente (4.8V): 7.4mA activo y 160mA al aplicar fuerza.
Corriente (6.0V): 7.7mA activo y 180mA al aplicar fuerza.
Figura 13.1.
Para controlar la posicin del eje de un servomotor, hace falta enviar un tren
de pulsos, donde el ancho de cada pulso determina el punto en el cual el eje
mantiene su posicin, siempre y cuando est presente el tren de pulsos. El
recorrido ser en la mayora de los modelos de 180 y los tiempos
correspondientes al pulso en la seal para las posiciones principales (0, 90 y
269
180) se especifican en la tabla 13.1. (Estos tiempos pueden variar de
acuerdo al modelo y marca del servomotor).
Tabla 13.1.
Figura 13.3.
270
A medida que aumentamos gradualmente el tiempo T1, el eje del servomotor
se ir moviendo en sentido horario. Cuando T1 = 1.5 ms podremos ver que el
eje forma un ngulo de 90 con respecto al punto de inicio (0). En la figura
13.4 se puede observar la seal correspondiente a esta posicin (90), donde
T2 se mantiene en 20 milisegundos.
Figura 13.4.
Figura 13.5.
271
13.2.- Proyecto #35: Se puede crear un programa en PicBasic que cumpla
con estas caractersticas, en el cual variando solo una variable, podemos
modificar el ngulo de giro de un servomotor. Veamos el siguiente ejemplo:
Figura 13.6.
Proyecto # 35
Componente Cantidad
PIC16F84A 1
Cristal de 4 Mhz 1
Capacitor cermico de 22 pF 2
Servomotor 1
Fuente regulada de 5 Vdc 1
Tabla 13.2.
272
PAUSEUS
Inicio:
End
273
Figura 13.7.
Volt/Div: 2V
Time/Div: 5ms
Perodo: 21,55 ms
T1: 1,55 ms (Ancho de pulso positivo).
T2: 20 ms
Vpp: 5,44 Voltios.
Ciclo de trabajo: 8,16%
Tiempo de subida: 160,0 us
Tiempo de bajada: 160,0 us
274
Entonces, si deseramos modificar el ngulo de giro, podemos cambiar el
valor de la variable Pulso, siempre y cuando el valor est dentro del rango
de tiempo permitido (0,65 ms T1 2.6 ms), es decir, 650 PauseUs 2600.
Inicio:
End
275
13.3.- Proyecto #36: Para hacer un poco ms interesante la prctica, en la
cual el objetivo ha sido controlar el ngulo de giro de un servomotor,
proponemos incorporar al circuito dos pulsadores para aumentar y disminuir el
ngulo y una pantalla LCD para visualizar el valor en microsegundos de cada
pulso enviado al servomotor (Figura 13.8).
Figura 13.8.
276
Proyecto # 36
Componente Cantidad
PIC16F84A 1
Cristal de 4 Mhz 1
Capacitor cermico de 22 pF 2
Pantalla LCD 16x2 1
Resistencia de 10K Ohm 3
Potencimetro de 5K Ohm 1
Servomotor 1
Pulsador Normalmente Abierto 2
Fuente regulada de 5 Vdc 1
Tabla 13.3.
Programa en PBP:
DEFINE OSC 4 ' Define el oscilador en 4 Mhz
TRISB = %11110110 ' Configuracin del puerto B
Inicio:
277
' conectado a l. La condicin se cumple slo si el pulsador
' est activado y la variable "Pulso" es mayor a 650.
SUMA:
RESTA:
End
Inicio:
278
' est activado y la variable "Pulso" es menor a 260.
SUMA:
PULSO = PULSO + 10 ' Suma 10 a la variable "Pulso"
Pause 40 ' Pausa de 40 milisegundos
Return ' Retorno
RESTA:
PULSO = PULSO - 10 ' Resta 10 a la variable "Pulso"
Pause 40 ' Pausa de 40 milisegundos
Return ' Retorno
End
279
13.4.- Proyecto #37: En la siguiente actividad se desea controlar un
servomotor y visualizar el tiempo de cada pulso en una pantalla LCD,
conectados a un microcontrolador principal. Desde un microcontrolador
secundario se enviar el dato correspondiente al ngulo del eje, estableciendo
una comunicacin serial con el microcontrolador principal, de tal manera que
cuando se requiera aumentar o disminuir el ngulo, sean utilizados dos
pulsadores conectados en cualquiera de los puertos disponibles del
microcontrolador secundario.
Figura 13.9.
280
Proyecto # 37
Componente Cantidad
PIC16F84A 2
Cristal de 4 Mhz 2
Capacitor cermico de 22 pF 4
Pantalla LCD 16x2 1
Resistencia de 10K Ohm 3
Potencimetro de 5K Ohm 1
Pulsador Normalmente Abierto 2
Fuente regulada de 5 Vdc 1
Tabla 13.4.
Inicio:
End
281
Programa para el microcontrolador secundario U2:
DEFINE OSC 4
inicio:
suma:
SerOut PORTA.2, T9600, [PULSO] ' Enva dato serial por RA2
PAUSE 40 ' Pausa de 40 milisegundos
Return ' Retorno
resta:
End
282
13.5.- Proyecto #38: En la siguiente actividad se controlar un servomotor
desde el puerto serial de un PC, desde donde enviaremos el dato a ser
cargado en la instruccin PulsOut en el cdigo de programa del
microcontrolador, y el cual definir el ancho de pulso a ser introducido en el
servomotor cada 20 milisegundos. El circuito consta de un microcontrolador
PIC16F84A con oscilador de 4 Mhz y un servomotor, donde la lnea de control
estar conectada al Pin RB1. Para la comunicacin entre el PC y el circuito,
emplearemos un circuito integrado MAX-232 (Figura 13.10).
Figura 13.10.
283
Proyecto # 38
Componente Cantidad
PIC16F84A 1
Cristal de 4 Mhz 1
Capacitor cermico de 22 pF 2
IC MAX232 1
Capacitor electroltico de 0,1 uF 5
Potencimetro de 5K Ohm 1
Conector DB-9M 1
Fuente regulada de 5 Vdc 1
Tabla 13.5.
inicio:
SerIn PORTB.7, T9600, 18, sigue, PULSO ' Espera dato
' durante 18 ms
sigue:
End
284
Para la comunicacin serial, se ha definido el modo de dato verdadero a 9600
bps (T9600). A partir de la etiqueta inicio, el primer paso ser esperar un
dato serial durante 18 milisegundos antes de saltar a la etiqueta sigue, para
generar el pulso correspondiente y donde su duracin se calcula en decenas
de microsegundos. Seguidamente se genera un salto a la etiqueta inicio
para repetir el proceso.
Adems hemos agregado tres botones con valores fijos para las tres
posiciones principales (0, 90 y 180). Veamos a continuacin el desarrollo de
la interfaz grfica paso a paso:
Figura 13.11.
285
Paso 1: creamos un nuevo proyecto EXE estndar (Figura 13.12):
Figura 13.12.
Figura 13.13.
286
Figura 13.14.
Figura 13.15.
287
Figura 13.16. Figura 13.17.
288
Figura 13.20.
289
Figura 13.21.
End Sub
______________________________________________________________________________
290
Private Sub Boton1_Click() ' Boton 0
Servo = 70 ' Carga el valor para 0
Text1.Text = Servo * 10 ' Muestra dato * 10 en la caja de texto
MSComm1.Output = Chr$(Servo) ' Enva dato al puerto Comm1
End Sub
______________________________________________________________________________
291
Nota Importante:
Esto significa que el tiempo del pulso generado ser de 100 decenas de
microsegundos:
Por lo tanto, los datos que enviamos al microcontrolador a travs del puerto
serial desde la aplicacin que hemos creado en Visual Basic, deben ser
considerados como la cantidad de decenas de microsegundos que deseamos
que dure cada pulso enviado al servomotor.
Esta es la razn por la cual hemos multiplicado por diez el dato a ser
mostrado en la caja de texto, especificando adems la unidad de tiempo
correspondiente, que en este caso se expresa con la palabra
Microsegundos.
292
Mdulos RF para comunicaciones Captulo XIV
Figura 14.1.
El voltaje de alimentacin no debe exceder los 3.3 Vdc, por lo cual se debe
considerar el uso de una regulador de voltaje para el transmisor y receptor,
considerando que el voltaje estndar en nuestros circuitos ha sido de 5 Vdc.
293
Transmisor: TXM-418-LR-S
Figura 14.2.
Receptor: RXM-418-LR-S
Figura 14.3.
294
Figura 14.4.
295
14.2.- Proyecto #39: En el siguiente proyecto se requiere la construccin de
dos circuitos, figura 14.5 y figura 14.6. En el transmisor hemos empleado un
microcontrolador PIC16F877 debido a que en los siguientes proyectos iremos
incorporando ms dispositivos externos a dems de la pantalla LCD. El
circuito receptor estar controlado por un PIC16F84 al cual le hemos
conectado una pantalla LCD para visualizar los datos recibidos.
Circuito Transmisor:
Figura 14.5.
296
Circuito Receptor:
Figura 14.6.
297
Proyecto # 39
Componente Cantidad
PIC16F877A 1
PIC16F84A 1
Cristal de 4 Mhz 2
Capacitor cermico de 22 pF 4
TXM-418-LR-S con antena 1
RXM-418-LR-S con antena 1
Pantalla LCD 16x2 2
Potencimetro de 5K Ohm 2
Resistencia de 390 Ohm 2
Resistencia de 750 Ohm 1
Resistencia de 10K Ohm 1
Fuente regulada de 3.3 Vdc / 5 Vdc 2
Tabla 14.1.
inicio:
298
For I = 0 To 9 ' Repeticin de 0 a 9
SerOut PORTB.0, T9600, [I] ' Enva los datos por RB0
Next I
End
inicio:
End
Como podemos observar en los diagramas de los circuitos, los mdulos TXM-
418-LR-S y RXM-418-LR-S conforman el medio a travs del cual viajan los
datos, sustituyendo al cable, cuyas limitaciones son de apenas unos pocos
metros cuando se requiere de comunicacin serial RS-232.
299
14.3.- Proyecto #40: Incorporando un teclado matricial al proyecto anterior,
podemos enviar datos asignados a cada tecla.
Circuito transmisor:
Figura 14.7.
300
Circuito Receptor:
Figura 14.8.
301
Proyecto # 40
Componente Cantidad
PIC16F877A 1
PIC16F84A 1
Cristal de 4 Mhz 2
Capacitor cermico de 22 pF 4
Pantalla LCD 16x2 2
TXM-418-LR-S con antena 1
RXM-418-LR-S con antena 1
Resistencia de 1K Ohm 4
Resistencia de 390 Ohm 2
Resistencia de 750 Ohm 1
Resistencia de 10K Ohm 1
Potencimetro de 5K Ohm 2
Teclado Matricial 3x4 1
Fuente regulada de 3.3 Vdc / 5 Vdc 2
Tabla 14.2.
302
GoTo inicio ' Salto a inicio
teclado:
303
Cada vez que presionamos una tecla, el dato correspondiente a la misma es
cargado y enviado al receptor el cual a su vez almacena este dato en una
variable, e inmediatamente lo muestra en la pantalla LCD. Esta accin se
puede apreciar en el cdigo de programa que se muestra a continuacin.
inicio:
End
304
14.4.- Proyecto #41: En este proyecto se plantea realizar un sistema de
control a distancia que maneje ocho salidas de potencia en el circuito
receptor, de tal manera que pueda ser encendida o apagada cualquiera de
ellas al presionar el botn correspondiente en el teclado del circuito
transmisor. Esto significa que al pulsar la tecla 1, el estado de la salida
correspondiente a esta tecla en el circuito receptor debe cambiar. Si la salida
se encuentra en estado lgico cero, la misma debe cambiar a estado lgico
uno y viceversa. Lo mismo debe aplicar para el resto de las salidas de
potencia del circuito receptor.
Circuito transmisor:
Figura 14.9.
305
Diagrama del circuito receptor:
Figura 14.10.
306
Programa para el circuito transmisor con teclado matricial:
Symbol T9600 = 2 ' Dato verdadero (Driven True)
inicio:
LCDOUT $fe, 2,"Dato: ",#TECLA," " ' Muestra dato por la LCD
GoTo inicio ' Salto a inicio
teclado:
tecla = 0
307
If PORTD.6 = 0 Then TECLA = 11 ' tecla "0"
Return
End
TRISD = %00000000
inicio:
308
' si se recibe el cdigo correcto
' que hemos elegido (10011001)
sigue:
End
309
Instrucciones de programa de PicBasic Captulo XV
Sintaxis:
Esta instruccin es utilizada para insertar dentro del cdigo PicBasic, lneas
de programa en lenguaje ensamblador. En este caso, cada lnea en lenguaje
ensamblador debe llevar el smbolo @ al inicio.
Ejemplo:
Inicio:
End
310
ADCin
Sintaxis:
Asm EndAsm
Sintaxis:
Asm
*
*
Instrucciones en lenguaje ensamblador
*
*
EndAsm
311
Branch
Sintaxis:
Ejemplo:
inicio:
Branch I,[Led1,Led2,Led3]
Led1:
PORTB = %00000001 ' enciende el led en RB0
pause 1000 ' pause de 1 segundo
PORTB = %00000000 ' apaga el led
I = I + 1 ' suma 1 a la variable I
GoTo inicio ' salta a inicio
Led2:
PORTB = %00000010 ' enciende el led en RB1
pause 1000 ' pause de 1 segundo
PORTB = %00000000 ' apaga el Led
I = I + 1 ' suma 1 a la variable I
GoTo inicio ' salta a inicio
Led3:
PORTB = %00000100 ' enciende el led en RB2
pause 1000 ' pause de 1 segundo
PORTB = %00000000 ' apaga el Led
I = 0 ' Inicializa la variable I
GoTo inicio ' salta a inicio
End
312
Button
Estado: indica cual es estado lgico que debe ocurrir cuando el pulsador es
presionado (0 o 1). Si es 0, el pulsador deber ser activo-bajo y si es 1, el
pulsador deber ser activo-alto (Ver figura 15.1).
+5V +5V
R1
10 Kohm S1
Pulsador
Al Pin
Al Pin
S1
Pulsador R1
10 Kohm
Activo-Bajo Activo-Alto
Figura 15.1.
313
Variable: es una variable auxiliar tipo Byte, definida tambin al inicio del
programa para uso exclusivo de la instruccin Button, por lo cual no deber
ser utilizada con otro fin en el programa. Siempre debe ser inicializada antes
del comando Button.
Ejemplo:
TRISB = %11111101 ' Configuracin del puerto B
Lcdout $fe,1
A0 = 0 ' inicializa la variable A0
inicio:
Button PORTB.0,1,2,2,A0,0,NoPres
PulsOut PORTB.1,150
NoPres:
Pause 10
GoTo inicio ' Salta a inicio
End
314
Call
Sintaxis:
Call etiqueta
La instruccin Call, llama a una subrutina la cual est identificada con una
etiqueta, y una vez culminada la subrutina la cual contiene al final la
instruccin Return, vuelve a la siguiente lnea despus del llamado.
Ejemplo:
inicio:
Call Teclado
If A0 = 1 Then led1
.
.
.
Teclado:
.
.
.
.
Return
End
Clear
Sintaxis:
Clear
315
ClearWDT
Sintaxis:
ClearWDT
Count
Sintaxis:
Pin: especifica el pin del puerto en el cual se introducirn los impulsos. Este
pin es designado como entrada automticamente por la instruccin Count.
316
Data
Sintaxis:
Ejemplo:
Data @10,1,3,5,7,9
DTMFout
Sintaxis:
Pin: especifica el pin del puerto en el cual se emitirn los tonos DTMF.
317
Off-ms: es una variable o constante que especifica el tiempo en milisegundos
del silencio que hay entre cada tono. En caso de no utilizar este parmetro, el
tiempo por defecto ser de 50 ms.
Tono: puede ser una variable o constante (entre 0 15), que especifica el
tono que debe ser generado.
Dgito en la Dgito en un
Frecuencias Frecuencias
Instruccin Teclado
Bajas Altas
DTMFout Telefnico
1 1 697 HZ 1209 HZ
2 2 697 HZ 1336 HZ
3 3 697 HZ 1477 HZ
4 4 770 HZ 1209 HZ
5 5 770 HZ 1336 HZ
6 6 770 HZ 1477 HZ
7 7 852 HZ 1209 HZ
8 8 852 HZ 1336 HZ
9 9 852 HZ 1477 HZ
10 0 941 HZ 1209 HZ
11 * 941 HZ 1336 HZ
12 # 941 HZ 1477 HZ
13 A 697 HZ 1633 HZ
14 B 770 HZ 1633 HZ
15 C 852 HZ 1633 HZ
0 D 941 HZ 1633 HZ
Tabla 15.1.
318
Figura 15.2.
Ejemplo:
Ejemplo:
319
Los tonos tendrn una duracin de 400 milisegundos cada uno y un tiempo en
silencio entre ellos de 150 milisegundos.
R1 R2
1K 1K
Al Pin Al amplif icador de Audio
C1 C2
0.1 uF 0.1 uF
GND GND
C1
Al Pin
10 uF
C2
10 uF
Parlante
GND
Figura 15.3.
320
EEPROM
Sintaxis:
END
Sintaxis:
End
FREQOUT
Sintaxis:
321
Pin: especifica el pin del puerto en el cual se va a generar la seal.
En cuanto al oscilador tambin se recomienda usar del tipo HS (20 Mhz) para
obtener mejores resultados en la generacin de tonos, as como tambin se
recomienda utilizar un circuito de acople entre el microcontrolador y el
dispositivo externo al cual enviaremos los tonos (ver figura 15.3).
Ejemplo:
322
FOR NEXT
Sintaxis:
Ejemplo:
Inicio:
For Z = 0 To 10
Next Z
End
323
Gosub
Sintaxis:
Gosub etiqueta
GOTO
Sintaxis:
GOTO etiqueta
HIGH
Sintaxis:
HIGH pin
Ejemplo:
Inicio:
324
GoTo inicio
End
I2CREAD
Sintaxis:
Ejemplo:
SDA VAR PORTB.0
SCL VAR PORTB.1
A1 VAR Byte
Direc VAR Word
Control VAR Byte
inicio:
' memoria
325
I2CWRITE
Sintaxis:
Ejemplo:
inicio:
Direc = $10 ' Direccin en la memoria externa
Control = $A0 ' Dato de Control
IF THEM ELSE
Sintaxis:
326
Ejemplo 1: Si pulsamos un botn conectado al pin RA0 se cumple la condicin
y salta a la etiqueta Espera.
inicio:
Espera:
GoTo Espera
End
Ejemplo 2:
inicio:
Espera:
GoTo Espera
End
327
Ejemplo 3:
A VAR Byte
inicio:
If PORTA.0 = 1 Then
A = A + 1
EndIf
GoTo inicio ' Salta a "inicio"
Espera:
GoTo Espera
End
INPUT
Sintaxis:
INPUT PIN
Ejemplo:
inicio:
Espera:
GoTo Espera
End
328
LCDIN
Sintaxis:
Ejemplo:
A VAR Byte
inicio:
Espera:
GoTo Espera
End
329
LCDout
Sintaxis:
Comando Accin
$FE, 1 Limpia la pantalla
$FE, 2 Retorna al inicio de la primera lnea
$FE, $0C Apaga el Cursor
$FE, $0E Cursor bajo (Underline "_") activo
$FE, $0F Cursor intermitente activo
$FE, $10 Mueve el cursor un espacio a la izquierda
$FE, $14 Mueve el cursor un espacio a la derecha
$FE, $C0 Mueve el cursor al inicio de la segunda lnea
$FE, $90 Mueve el cursor al inicio de la tercera lnea
$FE, $D0 Mueve el cursor al inicio de la cuarta lnea
Tabla 15.2.
Ejemplo:
Pause 200
Inicio:
GoTo Inicio
End
330
LOW
Sintaxis:
LOW pin
Ejemplo:
inicio:
espera:
GoTo espera
End
NAP
Sintaxis:
NAP periodo
331
Periodo Retardo (ms)
0 18
1 36
2 72
3 144
4 288
5 576
6 1152
7 2304
Tabla 15.3.
Ejemplo:
inicio:
espera:
GoTo espera
End
OUTPUT
Sintaxis:
OUTPUT pin
Ejemplo:
inicio:
espera:
GoTo espera
End
332
PAUSE
Sintaxis:
PAUSE periodo
Ejemplo:
inicio:
End
PAUSEUS
Sintaxis:
PAUSEUS periodo
Ejemplo:
333
inicio:
End
POT
Sintaxis:
334
PULSIN
Sintaxis:
Variable: es una variable de 8 bits (variable tipo byte) o 16 bits (variable tipo
word) definida por el programador en la cual se grabar el resultado de la
lectura.
Ejemplo:
Inicio:
PulsIn PORTB.0,1,LECTURA
335
PULSOUT
Sintaxis:
Ejemplo:
Inicio:
PWM
Sintaxis:
336
aproximadamente 100%. Cuando nivel = 0 la salida se mantiene en cero
lgico; cuando nivel = 255 la salida se mantiene en uno lgico.
Ejemplo:
Inicio:
End
RANDOM
Sintaxis:
RANDOM variable
Ejemplo:
Inicio:
337
LCDOut $fe, 2 ' Posiciona el cursor en el inicio
LCDOut "RANDOM: ",#A0," " ' Muestra mensaje y
' dato por pantalla
End
READ
Sintaxis:
Ejemplo:
I VAR Byte
DIRECCION VAR Byte
DATO VAR Byte
Inicio:
338
Read DIRECCION,DATO ' Lee la direccin especificada y la
' guarda en la variable "Dato".
RETURN
Sintaxis:
RETURN
Retorno de una subrutina desde donde se ha generado un salto del tipo Call o
Gosub.
Ejemplo:
inicio:
Call Teclado
If A0 = 1 Then led1
.
.
.
Teclado:
.
.
.
.
Return
End
339
REVERSE
Sintaxis:
REVERSE pin
Ejemplo:
SELECT CASE
Sintaxis:
Ejemplo:
' Declaracin de Variables
I VAR Byte
Z VAR Byte
340
Z = 0 ' Inicializa la variable Z
Inicio:
Case 1
Case 2
Case 3
End Select
Final:
GoTo Final
End
341
SERIN
Sintaxis:
Pin: en este campo definiremos cual ser el pin de entrada entre los puertos
disponibles del microcontrolador. Ejemplo: PortB.1
Ejemplo:
Inicio:
342
LCDOUT $fe, 2,"Dato: "
LCDOut $fe,$C0,#dato," "
End
SEROUT
Sintaxis:
Pin: en este campo definiremos cual ser el pin de salida entre los puertos
disponibles del microcontrolador.
Variable: en este campo se especifica la variable que contiene los datos que
sern enviados a travs de pin especificado.
Ejemplo:
Symbol T9600 = 2 ' Dato verdadero (Driven True)
Inicio:
Next I
343
GoTo Inicio ' Salta a inicio
End
SLEEP
Sintaxis:
SLEEP perodo
Ejemplo:
Inicio:
Espera:
End
SWAP
Sintaxis:
Ejemplo:
A1 VAR Byte ' Define la variable "A1" como Byte
B1 VAR Byte ' Define la variable "B1" como Byte
344
A1 = 10
B1 = 15
Inicio:
Espera:
GoTo Espera ' Salta a la etiqueta "Espera"
End
TOGGLE
Sintaxis:
TOGGLE pin
Ejemplo:
Inicio:
345
GoTo Inicio ' Salto a inicio
End
WHILE-WEND
Sintaxis:
WHILE condicin
...instrucciones...
WEND
Ejemplo:
Inicio:
Wend
346
LCDOUT $fe, 2, "While - Wend" ' Muestra mensaje
LCDOut $fe,$C0,"ha terminado!" ' Muestra mensaje
Espera:
GoTo Espera ' Salta a la etiqueta "espera"
End
WRITE
Sintaxis:
Ejemplo:
Inicio:
espera:
GoTo espera
End
347
Apndice A
Figura A.1.
348
Software:
Figura A.2.
349
Figura A.3.
Figura A.4.
350
Figura A.5.
Figura A.6.
351
Figura A.7.
Figura A.8.
352
Figura A.9.
353
Tipo de programador:
Figura A.10.
354
Modelo del microcontrolador:
Figura A.11.
355
Figura A.12.
El software tambin cuenta con ayuda visual para saber la posicin exacta del
microcontrolador en la base del programador, como se muestra en la figura
A.13. Notar que al cambiar el modelo de microcontrolador a ser programado,
la figura cambia indicando la posicin adecuada para evitar daos
irreversibles en el dispositivo.
356
Figura A.13.
357
Apndice B Tabla ASCII
Tabla B.1.
Fuente: http://www.melabs.com/resources/pbpmanual/
358
Caracteres ASCII Standard
Decimal Hex Display / Key Decimal Hex Display / Key Decimal Hex Display / Key
32 20 Space 64 40 @ 96 60 `
33 21 ! 65 41 A 97 61 a
34 22 " 66 42 B 98 62 b
35 23 # 67 43 C 99 63 c
36 24 $ 68 44 D 100 64 d
37 25 % 69 45 E 101 65 e
38 26 & 70 46 F 102 66 f
39 27 ' 71 47 G 103 67 g
40 28 ( 72 48 H 104 68 h
41 29 ) 73 49 I 105 69 i
42 2A * 74 4A J 106 6A j
43 2B + 75 4B K 107 6B k
44 2C , 76 4C L 108 6C l
45 2D - 77 4D M 109 6D m
46 2E . 78 4E N 110 6E n
47 2F / 79 4F O 111 6F o
48 30 0 80 50 P 112 70 p
49 31 1 81 51 Q 113 71 q
50 32 2 82 52 R 114 72 r
51 33 3 83 53 S 115 73 s
52 34 4 84 54 T 116 74 t
53 35 5 85 55 U 117 75 u
54 36 6 86 56 V 118 76 v
55 37 7 87 57 W 119 77 w
56 38 8 88 58 X 120 78 x
57 39 9 89 59 Y 121 79 y
58 3A : 90 5A Z 122 7A z
59 3B ; 91 5B [ 123 7B {
60 3C < 92 5C \ 124 7C |
61 3D = 93 5D ] 125 7D }
62 3E > 94 5E ^ 126 7E ~
63 3F ? 95 5F _ 127 7F DEL
Tabla B.2.
Fuente: http://www.melabs.com/resources/pbpmanual/
359
Apndice C Software y Practicas en Formato Digital
360
Se pueden obtener los archivos digitales de cada uno de los proyectos
planteados en esta obra (archivo fuente en pbp de cada proyecto y
archivo compilado .hex), ingresando al sitio Web:
http://www.conexionelectronica.com
361
Bibliografa
INTERNET:
Empresas:
Mecanique
85 Marine Parade
SaltBurn by the Sea
TS12 1BZ
United Kingdom
Tel. +44 1287 622382
Fax. +44 8700 520279
http://www.mecanique.co.uk
362