Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Basic para Microcontroladores Pic (Christian Bodington Esteva)
Basic para Microcontroladores Pic (Christian Bodington Esteva)
WWW.CONEXIONELECTRONICA.COM
CONTENIDO
Prologo.
Capitulo I.
1.6.1.- Subrutinas.
1.6.2.- Variables.
1.6.3.- Arrays.
1.6.4.- Constantes.
1.6.5.- Alias.
1.6.6.- Operadores Aritméticos.
1.6.7.- Operadores Bit a Bit.
1.6.8.- Operadores de Comparación.
Capitulo II.
i
Capitulo III. Pantallas LCD y GLCD.
5.1.1.- Ejemplo #34. Reproduce las notas de la escala musical en la octava A4,
y muestra las frecuencias a través de la pantalla LCD.
5.1.2.- Ejemplo #35. Elaboración de un piano de una octava musical.
iv
Capítulo VII. Memoria de Datos EEPROM.
8.2.- El Acelerómetro.
8.3.- Termocupla.
10.2.1.- Ejemplo #56. Lectura del registro CID en una memoria SD.
10.3.1.- Ejemplo #57. Lectura del registro CSD en una memoria SD.
vi
10.4.- WinHex.
vii
Capítulo XI. Servomotores.
12.1.- PWM.
Bibliografía.
viii
Prólogo
La segunda edición del libro “Basic para Microcontroladores PIC” esta basado en el estudio
del compilador mikroBasic Pro, de la empresa MikroElektronika. El contenido de esta obra
facilita un verdadero inicio rápido en la programación de microcontroladores PIC gracias a
una completa librería diseñada para el control de una gran variedad de periféricos,
facilitando el desarrollo de proyectos electrónicos a través de 72 ejemplos prácticos,
analizados y comentados detalladamente en base a los microcontroladores PIC16F877,
PIC18F442, PIC18F452 y PIC18F458.
La mayoría de los proyectos han sido desarrollados con la ayuda del entrenador de
microcontroladores “EasyPic5” de mikroElektronika, además de una serie de componentes
adicionales de fácil adquisición y bajo costo.
Al igual que en la primera edición, la metodología empleada ha sido orientada para que el
lector pueda expandir sus conocimientos para generar nuevas ideas en la implimentación de
este compilador sobre esta tecnología ya anteriormente estudiada. Esta obra es la primera
parte de un extenso estudio de mikroBasic, adaptado a nuestro idioma y pensado para
aquellas personas con conocimientos básicos en la programación de estos componentes.
Los puntos de estudios más importantes han sido el control de puertos, pantallas LCD y
GLCD, sonido, funciones trigonométricas, teclado matricial y PS/2, memoria de datos
EEPROM, conversor A/D, control de dispositivos como potenciómetros, acelerómetro 3D,
termocupla, comunicación serial RS-232, BlueTooth, módulos GPS, programación en Visual
Basic para control de puertos, multimedia card (MMC y SD), almacenamiento masivo de
datos, creación de archivos en formato FAT desde el microcontrolador PIC, servomotores y
PWM.
MikroBasic hace posible el desarrollo de nuevas ideas en muy poco tiempo, haciendo del
estudio de los microcontroladores un tema sencillo y accesible.
2
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
• Programador de Microcontroladores PIC de MikroElektronika: es un programador de
la familia Flash de Microchip, de conexión universal USB, el cual puede ser acoplado
a una placa de circuito impreso la cual contiene todas las bases disponibles del tipo
DIP como lo demuestra la figura 1.2. También es posible hacer arreglos en nuestros
circuitos para dejar un puerto de conexión para el programador, y así poder realizar
cambios en nuestros programas sin retirar el microcontrolador de nuestros diseños.
Esta opción, denominada ICSP (In-Circuit Serial Programming), simplifica el trabajo a
la hora de reprogramar nuestros diseños.
3
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
• Placa entrenadora de Mikroelektronika: una herramienta diseñada para trabajar en
conjunto con los compiladores de mikroElektronika, proporcionan diferentes módulos
interconectados entre ellos, facilitando la elaboración de prácticas con
microcontroladores. Estos entrenadores de microcontroladores además incorporan su
propio programador de microcontroladores PIC de conexión USB 2.0. El entrenador
recomendado en esta edición es el EasyPIC5.
Figura 1.4
4
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
• Osciloscopio: este instrumento se requiere para el desarrollo de algunas prácticas en
las cuales se hace necesario medir las señales generadas desde el microcontrolador.
Figura 1.5
Figura 1.6
5
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
1.2.- Entorno de Desarrollo Integrado de mikroBasic.
http://www.mikroe.com/en/download/
Figura 1.7
Figura 1.8
6
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Haciendo doble clic sobre el mismo, iniciamos el proceso de instalación del programa.
Figura 1.9
Figura 1.10
7
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 1.11
• El compilador.
8
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 1.12
Al hacer clic en el botón “Next”, veremos la ruta de instalación por defecto del compilador en
nuestro PC.
Figura 1.13
9
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Podemos dejar la ruta sugerida o podemos cambiarla según convenga. Al haber
seleccionado anteriormente todos los componentes en la instalación, podemos observar que
el espacio requerido se acerca a los 75 MB.
Ahora para iniciar la instalación, hacemos clic en el botón “Install”, acción con la cual
veremos el progreso de la instalación en nuestro disco, como lo demuestran las siguientes
imágenes:
Figura 1.14
Figura 1.15
10
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 1.16
Figura 1.17
11
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Al hacer clic en el botón “Finish”, el programa de instalación nos preguntará si deseamos
instalar el soporte ICD (In-Circuit Debugger) de mikroBasic:
Figura 1.18
Figura 1.19
12
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 1.20
Este programador viene integrado en las tarjetas entrenadoras, e incluso se vende por
separado en su versión USB.
13
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 1.21
Haciendo clic en el botón “Next”, estaremos viendo la ruta de instalación por defecto o ruta
sugerida por el programa de instalación. Esta ruta se puede mantener igual o ser cambiada
según convenga al usuario.
Una vez seleccionada la ruta, hacemos clic en el botón “Install” y esperamos a que termine
el proceso de instalación como se muestra en las siguientes imágenes:
Figura 1.22
14
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 1.23
Figura 1.24
15
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 1.25
Figura 1.26
16
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 1.27
Figura 1.28
17
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 1.29
Figura 1.30
18
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 1.31
Figura 1.32
19
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 1.33
Figura 1.34
20
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
1.3.- Estructura de un programa: Para que nuestros programas tengan una apariencia
ordenada y se facilite la comprensión del mismo ante otros programadores que deseen
realizar mejoras a éste, es necesario establecer una estructura que nos permita identificar
fácilmente cada una de las partes que lo componen.
B C D
Figura 1.35
Sección B: Esta sección empieza en la columna cero del editor de texto de mikroBasic, y en
ella se pueden declarar variables, sub-funciones, configuraciones de dispositivos periféricos
y etiquetas de cada una de las subrutinas que serán programadas.
Sección D: Esta destinada para realizar comentarios acerca de la función que estará
cumpliendo una instrucción específica en nuestro programa. Cada comentario debe
empezar siempre con una comilla simple como se muestra a continuación:
Los comentarios ayudan al diseñador a identificar cada línea de programa o cada una de las
funciones de cada subrutina, garantizando así una buena documentación en cada uno de
los programas que realizamos.
22
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
1.4.- Crear un nuevo proyecto en mikroBasic:
Saber como crear un proyecto en mikroBasic es un paso sencillo pero muy importante, ya
que de ello depende que nuestros programas sean compilados correctamente.
Figura 1.36
23
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 1.37
• En el paso 2 debemos seleccionar el valor exacto del cristal que estaremos utilizando
como oscilador externo de nuestro microcontrolador PIC.
Figura 1.38
24
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
• En el paso 3, debemos seleccionar la ruta sobre la cual deseamos grabar el proyecto,
al igual que el nombre del proyecto. Para esto, simplemente seleccionamos la carpeta
señalada en la figura 1.39, a través de la cual podremos acceder a cualquiera de las
unidades de almacenamiento en nuestro PC.
Figura 1.39
Figura 1.40
25
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 1.41
Figura 1.42
26
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
• En el paso 5 tenemos la opción de incluir todas las librerías disponibles para el
microcontrolador anteriormente seleccionado en nuestro proyecto. También tenemos
la opción de no incluir ninguna de ellas. Esto se debe a que mikroBasic cuenta con
una amplia selección de librerías para el control de dispositivos periféricos o procesos
de cálculo o conversión de datos que nos permitirán hacer de la programación algo
fácil y rápida a la hora de diseñar un programa, pero no necesariamente
necesitaremos de todas las librerías en un solo proyecto. Si elegimos la opción
“Include All” podremos estar seguros de que cada librería empleada en nuestro
programa funcionará correctamente. Si elegimos la opción “Include None (Advance)”
tendremos que realizar la selección de las librerías que deseamos utilizar desde el
administrador de librerías de mikroBasic, el cual veremos mas adelante.
Figura 1.43
27
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 1.44
Figura 1.45
28
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
1.5.- Conociendo el entorno de desarrollo integrado.
B
D C
E
Figura 1.46
En la sección A, podemos encontrar las opciones del menú principal, además de todos los
accesos directos a cada funcion del software a través de pequeños botones ordenados y de
fácil acceso.
La sección B es el editor en el cual se escribirán los programas de cada proyecto bajo las
recomendaciones realizadas en punto 1.3 de este capítulo.
29
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
En la sección C se puede observar el administrador de librerías, el cual deberá ser tomado
en cuenta siempre que nuestros proyectos incluyan el uso de cualquiera de las librerías
disponibles en mikroBasic.
Menú “File”:
Figura 1.47
• New Unit: Abre una nueva ventana de edición de programas para mikroBasic. En
esta ventana escribiremos el código de programa de nuestros proyectos.
• Recent Files: Al seleccionar esta opción, podremos ver una lista de nombres de los
archivos mas recientes en los cuales hemos estado trabajando.
30
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
• Save: Salva o guarda los cambios realizados en la ventana de programación.
Menú “Edit”:
Figura 1.48
31
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
• Cut: Corta el texto seleccionado y lo coloca en el portapapeles.
Sub-Menú “Advanced”:
Figura 1.49
32
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
• Comment: Convierte líneas de código de programa previamente seleccionadas en
comentarios. Si no hemos seleccionado ninguna línea de código, simplemente
aparece una comilla simple, asignando el resto de la línea como un espacio
disponible para realizar comentarios.
Menú “View”:
Figura 1.50
33
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 1.51
Figura 1.52
34
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 1.53
Figura 1.54
35
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
• Code Explorer o Explorador de Código: Despliega la ventana del explorador de
código de mikroBasic.
Figura 1.55
Figura 1.56
Esta ventana posee además botones de acceso rápido a algunas funciones importantes:
36
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
siguiente figura se muestra un ejemplo de un grupo de proyectos disponibles
en la ventana de administración de proyectos.
Figura 1.57
• Cerrar un Proyecto.
• Compilar un proyecto.
37
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
• Library Manager o Administrador de Librerías: El administrador de librerías de
mikroBasic contiene todas las librerías disponibles para un microcontrolador
previamente seleccionado.
Figura 1.58
38
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 1.59
Figura 1.60
39
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
• Permite ejecutar una Macro previamente grabada.
• Windows o Ventanas: A través de esta opción podremos ver un listado de todas las
ventanas desplegables en el entorno de desarrollo integrado de mikroBasic.
Menú “Project”:
Figura 1.61
40
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
• Build: Compila el proyecto activo en el entorno de desarrollo de integrado.
• Clean Project Folder: Esta opción limpia o borra de la carpeta de proyecto los
archivos generados cuando se realiza la compilación del mismo.
• Edit Project: Despliega una ventana a través de la cual podemos configurar los
fusibles de programación del microcontrolador.
41
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 1.62
Menú “Run”: Contiene todos los comandos relacionados con el depurador de mikroBasic.
Figura 1.63
42
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Menú “Tools”: Contiene todas las herramientas disponibles en mikroBasic.
Figura 1.64
Menú “Help”: A través de este menú podremos acceder a toda la ayuda disponible acerca
del compilador, accesos directos al foro de discusión, página Web oficial de
mikroElektronika, formulario de registro del compilador e información de registro actual.
Figura 1.65
43
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Nota Importante: En la versión DEMO del compilador mikroBasic, el archivo de salida .HEX
generado cuando compilamos un programa esta limitado a 2K bytes.
Es muy importante que adquiera la licencia correspondiente para la versión completa del
compilador, para poder llevar a cabo todos los ejemplos propuestos en esta edición.
Figura 1.66
44
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
1.6.- Componentes y operadores en mikroBasic.
1.6.1.- Subrutinas: Una subrutina se presenta como un algoritmo separado del algoritmo
principal, y estará destinado a resolver una tarea específica. Las subrutinas pueden ser
referidas cada vez que sea necesario, llamando a la etiqueta que corresponde a ésta, la cual
debe ir siempre al inicio de la misma.
Led1:
For Z = 0 To 9
LED = Encendido
Etiqueta Delay_ms(1000)
LED = Apagado
Subrutina
Delay_ms(1000)
Next Z
GoTo Inicio
End.
MikroBasic cuenta con una serie de herramientas de programación entre las cuales
podemos mencionar las etiquetas, variables, identificadores, constantes, comentarios y
símbolos entre otras.
1.6.2.- Variables: En las variables podemos almacenar datos temporalmente, los cuales
podrán ser consultados o modificados cada vez que sea necesario. Normalmente la
definición de variables se hace al inicio de un programa y para ello se utiliza el formato:
Figura 1.67
45
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
1.6.3.- Arrays: Las variables Arrays tienen un determinado número de “elementos”, definido
según el tamaño 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 se pueden accesar en cualquiera
de los tres casos a través de un índice. Este índice se específica entre corchetes como se
muestra en los siguientes ejemplos:
Ejemplo: Almacenar en cada elemento de la variable “Dato” los valores 200, 15, 56, 75, 80,
20, 33, 45.
Dato[0] = 200
Dato[1] = 15
Dato[2] = 56
Dato[3] = 75
Dato[4] = 80
Dato[5] = 20
Dato[6] = 33
Dato[7] = 45
En algunos casos se debe verificar la hoja de datos del microcontrolador, ya que la cantidad
de elementos que se pueden almacenar en variables Arrays tipo Byte o Word puede variar
según el modelo del mismo.
Ejemplo:
46
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
1.6.5.- Alias: Proveen un nombre único y específico a elementos o variables dentro de
nuestro programa. Para definir un símbolo, utilizamos la palabra “Symbol”, seguida del alias
del elemento, el símbolo de igualdad “=”, y por último el elemento en cuestión:
Por ejemplo, si deseamos controlar un motor DC a través de uno de los pines del puerto A
de un microcontrolador, resultaría mucho mas sencillo referirse a este pin como “Motor”, en
vez de referirse a él como “PortA.0”.
Entonces,
1.6.6.- Operadores Aritméticos: Entre los operadores aritméticos más utilizados tenemos
los que se muestran en la siguiente tabla:
Figura 1.68
47
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
1.6.7.- Operadores Bit a Bit: En la siguiente tabla veremos los operadores binarios
proporcionados para el lenguaje Basic:
Operador Operación
and AND Lógico
or OR Lógico
xor OR Exclusiva (XOR)
not NOT Lógico
Figura 1.69
Con estos operadores resulta muy sencillo realizar operaciones binarias, como lo demuestra
el siguiente ejemplo:
Si aplicamos una AND lógica, donde deseamos filtrar los siete bits más significativos del
valor almacenado en la siguiente variable:
Var1 = %00101001
Entonces,
Operador Operación
= Igual
<> Diferente
> Mayor que
< Menor que
>= Mayor o Igual que
<= Menor o Igual que
Figura 1.70
48
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Capitulo II
• Bajo consumo de potencia: < 0.6 mA typical @ 3V, 4 Mhz / 20 μA typical @ 3V, 32
kHz.
49
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
• Puerto Serial Universal (USART/SCI).
Figura 2.1
50
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Descripción de los pines del microcontrolador PIC16F877:
Figura 2.2
51
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
2.2.- El Oscilador externo.
Figura 2.3
En los modos de oscilador LP, XT y HS el cristal debe ser conectado a los pines 13 y 14,
Osc2/CLKin y Osc1/CLKout respectivamente, como se muestra en la figura 2.4.
52
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Los valores de los condensadores cerámicos vienen dados según la tabla que se muestra a
continuación:
Figura 2.4
Por ejemplo, para un oscilador tipo XT, podemos utilizar un cristal de cuarzo como el de la
figura 2.5.
Figura 2.5
• Voltios/Div: 200mV
• Time/Div: 100ns
Figura 2.6
53
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
La lectura de la frecuencia y período en este caso sería la siguiente:
Cristal de cuarzo TTL: Este tipo de cristal consta de cuatro pines, de los cuales solo tres
están implementados de la siguiente manera:
Figura 2.7
En su salida se obtiene un tren de pulsos como se puede observar en la figura 2.8, bajo los
siguientes parámetros de medición seleccionados en un osciloscopio:
• Voltios/Div: 2V
• Time/Div: 100ns
Figura 2.8
54
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
La lectura de la frecuencia y período en este caso sería la siguiente:
• Período: 250,013 ns
El oscilador externo en modo RC resulta ser el más sencillo de todos y por ende el más
económico. Su configuración lo hace menos preciso debido a que existe una tolerancia de
error en sus componentes, sin olvidar también que la temperatura puede afectar la
operación de este tipo de oscilador.
• C1 > 20 pF
Figura 2.9
55
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
2.3.- Circuito de Reset: El Pin denominado MCLR (Master Clear), siempre debe ser tomado
en cuenta cuando se diseña un circuito con microcontroladores PIC. A través de este Pin se
podrá reiniciar el dispositivo, si a éste se le aplica un nivel lógico bajo (0V), por lo tanto
resulta importante destacar que para que un programa cargado en un microcontrolador se
mantenga en ejecución, el Pin MCLR debe estar siempre en un nivel lógico alto (5V).
Figura 2.10
Este circuito permite reiniciar el microcontrolador cada vez que el pulsador de “Reset” es
presionado.
56
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
2.4.- Consideraciones técnicas de diseño.
A continuación veremos algunos circuitos básicos que deben ser tomados en cuenta para el
desarrollo de prácticas con microcontroladores PIC. Estos circuitos son muy útiles cuando
deseamos visualizar el resultado de una acción programada en el microcontrolador.
Una manera muy sencilla de ver el estado lógico de un pin configurado como salida en
cualquiera de los puertos de microcontrolador es a través del uso de Leds, como se observa
en los circuitos de la figura 3.11.
En el circuito, el Led “D1” se iluminará solo cuando el estado lógico del pin de salida del
puerto (RB1) sea igual a “1”, es decir, 5 voltios.
El Led “D2” se iluminará solo cuando el estado lógico de la salida del puerto (RB0) sea igual
a “0”, es decir, 0 voltios.
Figura 2.11
El microcontrolador también nos permite capturar datos o señales externas para luego ser
procesadas y convertidas en respuestas que pueden definir una acción específica en
nuestros circuitos de prueba. Un ejemplo común podría ser el uso de un pulsador para hacer
destellar un led cada vez que éste sea presionado.
Si deseamos introducir un nivel lógico bajo (0V), o alto (5V), a una de las entradas de un
microcontrolador a través de un pulsador, podríamos considerar los circuitos de la figura
2.12, los cuales nos proporcionan dos formas diferentes de hacerlo:
Figura 2.12
El primer circuito en la figura 2.12 mantiene un nivel lógico alto (5V) mientras el pulsador
permanece abierto. Al presionar el pulsador, el nivel lógico en el pin I/O del puerto pasa a
ser bajo (0V).
El segundo circuito de la figura 2.12 mantiene un nivel lógico bajo (0V) mientras el pulsador
permanece abierto. Al presionar el pulsador, el nivel lógico en el pin I/O del puerto pasa a
ser alto (5V).
58
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
2.4.3.- El Opto-acoplador como dispositivo de enlace:
Figura 2.13
En la configuración de la figura 2.13, cuando en el pin I/O aplicamos un 1 lógico (5V), el LED
del opto-acoplador enciende y el fototransistor conduce la corriente a tierra; por lo tanto, en
la salida tendremos un 0 lógico (0V).
En la configuración de la figura 2.14, cuando en el pin I/O aplicamos un 1 lógico (5V), el LED
del opto-acoplador enciende y el fototransistor conduce para poner en la salida un 1 lógico
(5V). Mientras haya un 0 lógico en la entrada, el fototransistor permanecerá abierto entre el
emisor y colector, dando como resultado un 0 lógico (0V) en la salida.
59
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 2.14
Una configuración muy común para el control de dispositivos de potencia como motores
eléctricos, luces incandescentes, solenoides, etc., se puede ver en la figura 2.15, la cual se
basa en cualquiera de los dos circuitos antes mencionados (figura 2.13 y figura2.14), en la
cual se ha incluido un relé a través del cual circulará la corriente necesaria entre sus
contactos, para hacer funcionar cualquiera de estos dispositivos de potencia.
Figura 2.15
60
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
2.4.4.- Fuente de poder, 5Vdc / 3.3Vdc:
Figura 2.16
61
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
2.5.- Configuración de Puertos como Entrada o Salida en un microcontrolador PIC.
Como los pines de los puertos pueden ser configurados como “entradas” o como “salidas”,
es importante tomar en cuenta los registros de configuración de puertos, los cuales para el
caso específico del PIC16F877 son cinco:
TrisA (registro de configuración I/O del puerto A), es un registro de 8 bits, encargado de
determinar cual de los pines del puerto “A” será “entrada” o “salida”. Los tres Bits más
significativos de este registro no se encuentran implementados para este modelo de
microcontrolador, como se puede observar en el diagrama de pines del dispositivo (figura
2.17). En este caso, el puerto “A” solo cuenta con 5 pines I/O (RA0, RA1, RA2, RA3 y RA4).
Para determinar si uno de los pines de un puerto será “entrada” o “salida”, es importante
conocer la siguiente regla, la cual aplica para todos los modelos de microcontroladores PIC
en los cuales estaremos trabajando:
Esto significa que si deseáramos configurar el Pin RA0 del puerto “A” como una “salida”,
tendremos entonces que poner un “0” en el Bit 0 del registro “TRISA”
Figura 2.17
Al ver la figura 2.17, se puede observar que el pin RA0 ha sido configurado como salida y el
resto de los pines como entrada.
62
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Esto significa que el puerto A se comportará de la siguiente forma:
• RA0 = salida.
• RA1 a RA4 = entradas.
TrisB, es un registro de 8 bits en el cual se configuran los pines del puerto B, ya sea como
entrada o como salida, por ejemplo:
Registro TrisB
Bit menos
1 1 1 1 1 1 1 0
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
significativo
Figura 2.18
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).
Para el caso particular del puerto B, se puede observar que el pin RB0 ha sido configurado
como salida en este ejemplo, y el resto de los pines como entrada.
“Consideramos importante configurar los pines que no estarán en uso como entrada, ya que
de esta forma podemos evitar daños en el hardware interno del microcontrolador en caso de
una conexión errónea al experimentar con éste en un tablero de pruebas.”
En este caso podemos determinar que el puerto “B” se comportará de la siguiente forma:
• RB0 = Salida.
El mismo caso aplica para los registros de configuración de los puertos C, D y E. Sus
registros de configuración TRISC, TRISD y TRISE deberán ser siempre configurados para
determinar su función dentro de un proyecto electrónico.
63
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
2.6.- Primeros ejemplos de programación en mikroBasic:
2.6.1.- Ejemplo de programación #1: Un ejemplo sencillo para determinar que hemos
iniciado de forma correcta todo lo referente a la configuración de un nuevo proyecto en
mikroBasic, es intentar realizar el encendido de uno o dos Leds a través de uno de los
puertos disponibles en el microcontrolador. Normalmente los pasos que vamos a realizar
para lograr este objetivo son los pasos básicos para realizar el resto de nuestros proyectos.
Estos pasos serán descritos a continuación y el programa para el encendido de dos Leds
estará basado en el diagrama esquemático de la figura 2.19.
Figura 2.19
• El Led “D1” tiene su “ánodo” conectado al pin RB1 del puerto “B”, por lo tanto el Led
sólo encenderá cuando RB1 = 1.
• El Led “D2” tiene su “cátodo” conectado al pin RB0 del puerto “B”, por lo tanto el Led
sólo encenderá cuando RB0 = 0
64
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Empecemos con la creación de un nuevo proyecto, siguiendo los pasos comentados en la
sección “Crear un nuevo proyecto en mikroBasic”.
Figura 2.20
Registro TrisB
1 1 1 1 1 1 0 0
RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
Figura 2.21
65
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
TRISB = %11111100
program Ejemplo1
End.
Figura 2.22
El siguiente paso será hacer que los Leds enciendan. Para esto es posible especificar el
estado de un pin determinado del puerto “B” de la siguiente forma:
66
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Veamos:
program Ejemplo1
End.
Figura 2.23
Por último y para verificar que todo funciona según lo esperado, compilamos el programa a
través del acceso directo “Build” en la barra de herramientas:
Build
67
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 2.24
Este resultado significa que el compilador ha creado además el archivo de extensión .hex el
cual utilizaremos para grabar el microcontrolador y de esta forma poder verificar el correcto
funcionamiento del programa sobre el circuito.
68
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
2.6.2.- Ejemplo de programación #2: En este ejemplo hemos cambiado el conexionado de
los Leds y hemos incluido dos pulsadores. P1 está conectado entre Vcc y una resistencia
“Pull Down” al igual que P2. El estado de los pulsadores será medido a través de los pines
RD0 y RD1 del puerto “D”.
Esto significa que debemos configurar los pines RD0 y RD1 como entradas a través de
registro TRISD, para poder tomar lectura del estado en el cual se encuentran, de tal forma
que podamos tomar una decisión y generar una salida en los pines RB0 y RB1.
• RD0 = 0
• RD1 = 0
• RD0 = 1
• RD1 = 1
Figura 2.25
69
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
El objetivo del programa que haremos a continuación será encender los Leds de forma
individual asignando a cada uno de ellos un pulsador. Al encender uno de estos Leds, éste
deberá permanecer encendido durante 2 segundos.
Pulsadores:
Led1:
Led2:
End.
70
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Si todo ha funcionado correctamente, pasaremos ahora a mejorar la estructura del programa
haciendo uso de “Alias”, a través de los cuales daremos nombres a los pines de los puertos
que estamos utilizando en el circuito. Es decir, en vez de dirigirnos a ellos como PortB.0,
PortB.1, PortD.0 y PortD.1, sustituiremos estos por los siguientes Alias:
Pulsadores:
Led1:
Led2:
End.
71
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
2.6.3.- Ejemplo de programación #3: En este ejemplo haremos uso de la librería “Button”
de mikroBasic.
• Pin: Este campo representa un pin específico del puerto que estaremos utilizando
para tomar lectura de un pulsador o interruptor.
• Estado Activo: Este parámetro puede ser cero (0) ó uno (1). A través de este campo
podemos definir si el pulsador o interruptor estará activo con un 0 lógico o con un 1
lógico.
Esta rutina también devuelve un resultado (255), si el pulsador o interruptor han estado en
un estado activo durante el tiempo especificado. En caso contrario, devuelve un cero (0).
program Ejemplo3
72
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Estado = Button(PortD, 1, 255, 1) ' Verificamos si P2 fue presionado, estado activo = 1.
Led2:
End.
En la siguiente imagen, hemos representado el estado del pulsador P1 en el canal “Rojo” del
osciloscopio, y el Led D1 en el canal “Verde” del osciloscopio.
73
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 2.26
Figura 2.27
74
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
El canal verde de la figura 2.27 muestra un pulso de 1 segundo de duración, generado
desde la subrutina “Led1” del programa.
Tiempo Anti-rebote
Figura 2.28
Este tiempo es medido desde que inicia el pulso en el canal rojo del osciloscopio, hasta el
inicio del pulso del canal verde. En este ejemplo, el tiempo medido en el osciloscopio ha
dado como resultado un tiempo de antirrobote igual a 250 milisegundos.
75
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
GoSub Led1 ' Si P1 es presionado, llama a la subrutina "Led1".
End If
Led2:
End.
76
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Capitulo III. Pantallas LCD y GLCD
A continuación estudiaremos las librerías encargadas del control de pantallas LCD y GLCD
de mikroBasic PRO a través de ejemplos claros y de fácil entendimiento.
El primer paso siempre será tener un diagrama de pines de la pantalla LCD y a su vez definir
de una vez el conexionado con los puertos del microcontrolador, incluso antes de realizar
cualquier programación. Al hacer esto, entonces tendremos una base sobre la cual trabajar
el programa, en el cual debemos definir los pines de conexión de la misma, de manera que
el microcontrolador sepa donde dirigir la información y las instrucciones que controlarán
estos módulos.
Pin 1, 2 y 3: como se puede observar en la figura 6.4, en la mayoría de las pantallas LCD, el
Pin No. 1 y 2 corresponden a la alimentación de la pantalla, GND y Vcc, donde el voltaje
77
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
máximo comúnmente soportado es de 5 Vdc. El Pin No.3 corresponde al control de
contraste de la pantalla.
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
instrucción, pero cuando RS es uno, el dato presente en el bus corresponde a un registro de
datos o caracter alfanumérico.
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 condición indica que podemos
escribir un dato en la pantalla. Si R/W = 1, esta condición nos permite leer un dato desde la
pantalla LCD.
Pin 7 al14: "Bus de Datos”, el Pin 7 hasta el Pin 14 representan 8 líneas que se utilizan para
colocar el dato que representa una instrucción para el modulo LCD o un carácter
alfanumérico.
Pin 15-16: "BackLight", en muchos modelos de LCD, los pines 15 y 16 son respectivamente
el “Ánodo” y el “Cátodo”, aunque se pueden encontrar en el mercado modelos de pantallas
LCD donde esta condición es configurable desde la parte posterior del circuito impreso a
través de “Jumpers”, o conexiones donde podemos invertir los Pines, de manera tal que el
Pin 15 sea el “Cátodo” y el Pin 16 el “Ánodo”, como se muestra en la figura 3.2.
Figura 3.2
3.1.2.- Conexión y configuración de una pantalla LCD: 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 deberán estar conectados en un solo puerto y nunca en puertos diferentes. Si
deseamos trabajar solo con los cuatro bits más significativos del bus, estos deberán ser
conectados en los cuatro bits menos significativos de un puerto o en los cuatro bits más
significativos del puerto seleccionado.
78
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Los pines E (Pin 6) y RS (Pin 4) pueden estar conectados en cualquier puerto del
microcontrolador. Por último, el Pin R/W deberá estar conectado a tierra (GND) para indicar
a la pantalla LCD que estaremos escribiendo en ella.
Un dato interesante resulta ser el hecho de que las pantallas LCD pueden ser controladas
utilizando dos configuraciones distintas para el bus de datos:
Figura 3.3
79
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
El primer punto importante será aprender a inicializar una pantalla LCD con mikroBasic. El
primer paso que debemos realizar será especificar en el programa de que manera han sido
conectados los pines de control y datos de la pantalla LCD en el puerto elegido del
microcontrolador.
3.1.3.- LCD_Init()
Esta rutina es necesaria para inicializar un módulo LCD. Normalmente se ubica al inicio del
programa, después de la etiqueta de inicio y no en la zona de declaración de variables o
configuración de pines de la pantalla.
Ejemplo:
LCD_Init()
80
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
3.1.4.- Lcd_Cmd(comando)
Esta rutina es importante para el control de una pantalla LCD, la cual puede facilitar la
programación de ciertas funciones importantes.
Figura 3.4
Tal y como esta especificado en la tabla anterior, es posible realizar fácilmente acciones
como mover el cursor o limpiar la pantalla entre otras como se demuestra en el próximo
ejercicio, pero antes veamos otras rutinas importantes.
La rutina Lcd_Out() nos permite escribir en una posición específica de la pantalla LCD, su
estructura es muy sencilla y se ve como sigue a continuación:
Ejemplo:
Lcd_Out(1, 4, “mikroBasic”)
Este ejemplo se interpreta de la siguiente forma: Escribir la palabra “mikroBasic” (sin incluir
las comillas) en la línea 1 de la pantalla, empezando en la columna 4.
Lcd_Out(2, 1, “mikroBasic”)
81
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
3.1.5.1.- Ejemplo de programación #4: Veamos a continuación un ejemplo de
programación, basados en el diagrama esquemático 3.3, y utilizando las rutinas hasta ahora
comentadas:
program Proyecto_LCD_1
LCD_Init()
End.
Figura 3.5
82
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 3.6
Observe que cuando la librería correspondiente no ha sido incluida, las rutinas de nuestros
programas son subrayadas por una línea roja ondulada indicando que no han sido
reconocidas las rutinas en el programa.
83
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
La siguiente imagen demuestra como se debe ver nuestro programa para que no se generen
errores al compilar:
Figura 3.7
Si observamos cada línea de programación, y analizamos cada una de ellas, tenemos que:
• El primer paso ha sido configurar los pines de control y datos de la pantalla LCD en el
formato anteriormente especificado con respecto al puerto elegido en el
microcontrolador.
program Proyecto_LCD_2
Dim I As Byte
LCD_Init()
LCD_Cmd(_LCD_CLEAR) ' Limpia la pantalla LCD
LCD_Cmd(_LCD_CURSOR_OFF) ' Apaga el cursor en la pantalla
Delay_ms(1000) ' Retardo de 1 segundo
LCD_Out(1,4,"mikroBasic") ' Imprime en la linea 1 y columna 4
Next I
Next I
End.
A diferencia del programa en el primer ejercicio, ahora hemos activado el cursor en modo
intermitente, para luego hacer una pausa de tres segundos y empezar a desplazar el mismo
diez posiciones hacia la izquierda y luego diez posiciones a la derecha. Para poder ver el
movimiento del cursor se ha incluido una pequeña pausa de 300 milisegundos. Por último
85
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
apagamos la pantalla LCD a través del comando _Lcd_Turn_Off, esperamos 2 segundos y
comenzamos el proceso haciendo un salto a la etiqueta “main”.
• _Lcd_Shift_Left
• _Lcd_Shift_Right
program Proyecto_LCD_3
Dim I As Byte
main:
Next I
86
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Next I
End.
3.1.6.- Lcd_Out_Cp(“caracteres”)
Esta es otra rutina útil en el manejo de la pantalla LCD. La función de esta rutina es escribir
en la pantalla LCD los caracteres especificados en la posición en la cual ha quedado el
cursor.
program Proyecto_LCD_4
main:
End.
87
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 3.8
Otras dos rutinas de mikroBasic para el manejo de pantallas LCD son las que se muestran a
continuación:
3.1.7.- Lcd_Chr()
Lcd_Chr(fila, columna, “caracter”): Esta rutina imprime un solo caracter en la fila y columna
especificada.
3.1.8.- Lcd_Chr_Cp()
main:
End.
88
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
El resultado será el siguiente:
Figura 3.9
Los parámetros de las rutinas son los campos que debemos completar dentro de ellas, para
obtener un resultado específico según la función para la cual ha sido creada. Por ejemplo,
los parámetros dentro de la rutina Lcd_Out(fila, columna, texto) los cuales hemos
estudiado anteriormente, pueden ser cargados en forma de “variables”, y el tipo de variable
a definir dependerá de sus funciones específicas dentro de la misma. Para visualizar este
concepto de forma clara, supongamos que deseamos imprimir en la primera línea de la
pantalla e iniciando en la primera columna la palabra “mikro”. La forma más directa y sencilla
de hacer esto sería:
Pero en algunos casos, será necesario controlar estos parámetros a través de variables las
cuales pueden cambiar su valor o contenido según sea necesario para la aplicación que
estemos desarrollando.
main:
fila = 1
columna = 1
texto = “mikro Basic”
.
.
89
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
3.2.1.- Ejemplo de programación #8:
program Proyecto_LCD_6
main:
Se puede observar en el programa anterior que hemos sustituido los valores en la rutina
LCD_Out(1, 3, “mikro Basic”) por sus respectivas variables, declaradas al inicio del
programa, y a las cuales les dimos el nombre de “fila” y “columna”.
Veamos otro ejemplo de programación en el cual se carga el texto que se desea imprimir en
dos variables separadas:
90
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
3.2.2.- Ejemplo de programación #9:
program Proyecto_LCD_7
main:
End.
Figura 3.10
91
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
3.3.- Imprimir el contenido de una variable numérica en una pantalla LCD:
Es muy importante tomar en cuenta que para visualizar el contenido de una variable
numérica a través de la pantalla LCD, debemos seguir un procedimiento sencillo el cual
involucra una de las librerías de mikroBasic denominada “Conversions”.
Esta librería contiene varias rutinas a través de las cuales podremos convertir el contenido
de una variable en un string de datos, los cuales podrán ser presentados en la pantalla con
la ayuda de la rutina Lcd_Out(), tal y como lo estudiamos en el ejemplo de programación #9.
Para comprender de forma clara este punto, supongamos que se desea visualizar el
contenido numérico de las siguientes variables en la pantalla LCD:
Var_1 = 127
Var_2 = 15000
Var_3 = 3.1416
.
.
End.
Observe que la primera variable (numero_1) es del tipo “Byte” y tiene un valor cargado igual
a 127. Si intentamos imprimir en la pantalla LCD el contenido de esta variable a través del
campo “texto” de la rutina Lcd_out(), el resultado será un error de sintaxis a la hora de
compilar el programa:
Esto debido a que la rutina Lcd_Out() sólo es capáz de imprimir variables tipo “cadena” o
“string”. En este caso, la solución se extrae de la librería “Conversions” de mikroBasic, la
cual posee una rutina específica para cada caso de conversión de variables según su tipo de
declaración:
program Proyecto_LCD_8
main:
Variables:
93
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Lcd_Out(1, 1, "Variable Float: ") ' Imprime mensaje en la pantalla LCD.
FloatToStr(Var_3, Txt) ' Convierte el contenido de la variable.
LCD_Out(2, 5, Txt) ' Imprime en la fila 1, columna 1.
End.
Para hacer un poco más interesante la tarea de mostrar datos en la pantalla LCD, vamos a
agregar un par de pulsadores normalmente abiertos en el puerto D del microcontrolador.
Específicamente en los puertos RD0 y RD1, los cuales debemos de configurar como
entrada, y los cuales cuentan además con una resistencia Pull Down de 10 kohm, como se
demuestra en el siguiente diagrama esquemático:
Figura 3.11
Para este ejemplo se ha realizado un programa que muestra el valor cargado en una
variable a la cual hemos denominado “Dato”, y la cual podrá ser incrementada al accionar el
pulsador “P1” conectado en RD0; el valor de esta variable también se podrá decrementar al
accionar el pulsador “P2” conectado en RD1.
• Puerto D: se configura como entrada ya que en los pines RD0 y RD1 estarán
conectados los pulsadores P1 y P2.
94
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
• Puerto B: se inicializa según la configuración de la pantalla LCD, la cual en este caso
se mantiene con respecto al diagrama esquemático 3.11.
La variable “dato” ha sido inicializada con un valor cargado igual a 25. Para aumentar o
disminuir este valor, simplemente se pregunta si en RD0 o en RD1 hay un cambio de estado
lógico. Debemos considerar que el estado lógico presente en ambos pines es cero (0)
cuando el pulsador está normalmente abierto, esto gracias a las resistencias Pull Down de
10kohm. Al presionar cualquiera de los dos pulsadores, el estado lógico de los pines pasa a
ser uno (1).
• La primera condición al pulsar P1 para el incremento es: cuando la variable “dato” sea
igual a 51, actualizamos su valor a 50, de tal manera que el valor máximo a ser
mostrado en la pantalla sea igual a cincuenta, el cual es el límite superior fijado
propuesto en el planteamiento anterior.
program Proyecto_LCD_8
main:
dato = 25
texto1 = "P1 Suma P2 Resta" ' cargamos el texto en la variable
texto2 = "Dato = " ' cargamos el texto en la variable
95
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
LCD_Init() ' Inicializamos la pantalla LCD
LCD_Cmd(_LCD_Clear) ' Limpia la pantalla LCD
LCD_Cmd(_LCD_Cursor_Off) ' Apaga el cursor en la pantalla
While true
Wend
Wend
End.
96
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Al compilar y grabar este ejemplo en el microcontrolador, el resultado inicial será el que
vemos en la siguiente figura:
Figura 3.12
Se puede observar que no es necesario presionar ningún pulsador para que el dato inicial
de la variable (25) aparezca en pantalla. Este dato se presenta al iniciar el programa gracias
a que hemos programado las dos siguientes líneas de código justo antes de empezar a
preguntar por el estado de los pulsadores:
main:
.
.
.
While true
97
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Es por esto que damos uso a la librería “Conversions” la cual deberá estar seleccionada en
la pestaña de librerías, como se muestra en la siguiente figura:
Figura 3.13
98
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
If dato = 51 Then ' Fijamos un límite superior (50) a la variable dato y se
' se interpreta asi: si dato es igual a 51, entonces
' volvemos a hacer a "dato" igual a 50:
dato = 50
End If
Wend
En esta parte, debemos observar que todas estas instrucciones será ejecutadas sólo si
PortD.0 = 1. Entonces, al presionar P1, la condición en la instrucción “while” se cumple y el
microcontrolador pasa a ejecutar la siguiente línea en la cual incrementamos el valor de la
variable “dato” en una unidad.
El mismo procedimiento se cumple para el análisis del pulsador P2, el cual decrementa el
valor de la variable “dato”
En el siguiente proyecto nos hemos basado en el diagrama de la figura 3.11 para efectuar la
programación del microcontrolador.
La idea principal en este ejemplo, será mostrar un menú inicial en la pantalla LCD, tal y
como se observa a continuación:
Figura 3.14
99
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
• Al accionar el pulsador “P1”, se deberá mostrar el siguiente submenú (figura 3.15), el
cual deberá permanecer visible durante 5 segundos para luego retornar al menú
inicial:
Figura 3.15
Figura 3.16
Lea detenidamente los comentarios de cada línea del programa. Observe que en esta
oportunidad hemos utilizado un alias para cada una de las entradas utilizadas en el puerto D
(RD0 se llamará Pulsador_1, y RD1 se llamará Pulsador_2).
program Proyecto_LCD_9
100
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
LCD_D6_Direction As sbit At TRISB2_bit
LCD_D7_Direction As sbit At TRISB3_bit
main:
menu:
menu1:
menu2:
End.
101
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Analizando el programa tenemos que:
• El primer paso ha sido crear un Alias a los pines de entrada RD0 y RD1. En este
caso, como el pulsador P1 lo hemos conectado en el pin RD0, entonces le hemos
dado el nombre o alias de “pulsador_1”. Para el pulsador P2, el cual está conectado
en el pin RD1 hemos designado el alias de “pulsador_2”. Los alias son muy útiles a la
hora de realizar programas relativamente extensos, ya que de esta forma no es
necesario tener que estar recordando en cual pin hemos conectado un pulsador, Led,
relé o cualquier otro dispositivo de entrada o salida. Bastará entonces con recordar el
nombre del mismo previamente asignado a través de un alias.
• Cargamos el mensaje del menú principal en las variables designadas para cada línea
de la pantalla LCD.
102
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
3.4.- Pantalla Gráfica o GLCD (Graphic Liquid Crystal Display).
MikroBasic cuenta con librerías para el control de pantallas GLCD, facilitando la tarea y
haciendo que nuestros proyectos se vean mejor, ofreciendo además funciones que no
podríamos tener con una pantalla alfanumérica convencional.
Por su puesto, el uso de una pantalla gráfica se justifica cuando es necesario incluir en
nuestros proyectos mas espacio para la visualización de datos, sin dejar atrás el hecho de
que podremos realizar gráficos o dibujos que complementen dicha información, y los cuales
nunca podremos realizar en una pantalla alfanumérica convencional.
Figura 3.17
103
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
3.5.- Configuración de pines de control y datos en mikroBasic.
Al igual que para una pantalla LCD, el primer paso siempre será establecer la configuración
de pines entre el módulo GLCD y el microcontrolador. Sin este paso el módulo nunca
arrancará, evitando que podamos avanzar en la programación de nuestros proyectos.
Para inicializar la pantalla GLCD según la configuración de pines del diagrama de la figura
3.17, usaremos el siguiente arreglo:
Los pines CS1 y CS2 son importantes, debido a que la pantalla Glcd está dividida en dos
partes iguales, similar a un libro abierto con dos páginas en blanco en las cuales podremos
escribir. Llamemos a estas dos páginas CS1 (primera página) y CS2 (segunda página).
104
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 3.18
Figura 3.19
105
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
También por hardware, invirtiendo el conexionado de pines entre el microcontrolador y la
pantalla, y manteniendo la ubicación de la palabra “mikroBasic” en la pantalla, es decir, línea
4 y columna 0, el resultado sería que la palabra “mikroBasic” sigue estando en la primera
página, solo que esta vez se encontrará a la derecha de la pantalla, tal y como se muestra a
continuación:
Figura 3.20
La librería GLCD nos ofrece un repertorio de rutinas muy útiles que nos permiten hacer de la
programación para el control de estos dispositivos una tarea sencilla y de fácil comprensión.
Para inicializar la pantalla Glcd se debe usar la rutina Glcd_Init(), como lo demostraremos
mas adelante con un programa de ejemplo. Una vez inicializada la pantalla, podremos
escribir o a dibujar en ella, utilizando algunas rutinas disponibles en la librería Glcd de
mikroBasic.
El tamaño de la fuente por defecto, cuando utilizamos la rutina para escribir texto es de 5 x 7
pixeles. Esto significa que podremos escribir texto en la pantalla en una ubicación
específica, sin necesidad de llamar a un archivo de fuentes en el programa.
106
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
3.5.2.1.- Ejemplo de programación #13:
program pantalla_glcd_01
main:
End.
Figura 3.21
107
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Sin embargo, es importante saber que los caracteres que vamos a escribir también pueden
estar asociados a un módulo de fuentes adicional, el cual define la forma o estilo de cada
carácter de una manera personalizada.
Este módulo de fuentes es un archivo de extensión .mbas el cual podemos crear para definir
el estilo de caracteres que deseamos mostrar en la pantalla LCD.
Para crear este archivo de fuentes, es importante saber como crear la fuente para cada
caracter.
Al igual que en la primera edición del libro “Basic para microcontroladores PIC”, vamos a
apoyarnos en una pequeña tabla cuadriculada para generar un caracter de estilo
personalizado. Los caracteres que a continuación vamos a definir serán de 5 columnas por 8
filas. Empecemos creando un “font” para la letra A:
Figura 3.22
En la figura anterior, cada cuadro estará asociado a un píxel en la pantalla. Cada caracter
estará asociado a su vez a un valor que representaremos en hexadecimal, para cada una de
las columnas de la figura anterior. Es decir, si observamos la siguiente figura, podremos ver
que hemos identificado cada fila y cada columna. La primera columna “c1”, tendrá un valor
asociado que dependerá directamente de los píxeles que deseamos activar para formar una
figura. Entonces, basados en la columna 1 de la figura 3.22, podríamos decir que solo
activaremos los píxeles correspondientes a las filas 2, 3, 4, 5, 6 y 7 (marcados por una “x”).
108
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
c1 c2 c3 c4 c5
f1
f2 x
f3 x
f4 x
f5 x
f6 x
f7 x
f8
Figura 3.23
c1 c2 c3 c4 c5
f1 1
f2 2
f3 4
f4 8
f5 16
f6 32
f7 64
f8 128
Figura 3.24
2 7 = 128 2 6 = 64 2 5 = 32 2 4 = 16 23 = 8 22 = 4 21 = 2 20 = 1
F8
F7
F6
F5
F4
F3
F2
F1
Figura 3.25
109
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Byte = 01111110
7 E
x x x x x x
F8
F7
F6
F5
F4
F3
F2
F1
Figura 3.26
c1 c2 c3 c4 c5
f1 x x x
f2 x x
f3 x x
f4 x x
f5 x x x x x
f6 x x
f7 x x
f8
Figura 3.27
111
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
$20,$54,$54,$54,$78, '* a */
$7F,$44,$44,$44,$38, '* b */
$38,$44,$44,$44,$44, '* c */
$38,$44,$44,$44,$7f, '* d */
$38,$54,$54,$54,$18, '* e */
$04,$04,$7e,$05,$05, '* f */
$08,$54,$54,$54,$3c, '* g */
$7f,$08,$04,$04,$78, '* h */
$00,$44,$7d,$40,$00, '* i */
$20,$40,$44,$3d,$00, '* j */
$7f,$10,$28,$44,$00, '* k */
$00,$41,$7f,$40,$00, '* l */
$7c,$04,$7c,$04,$78, '* m */
$7c,$08,$04,$04,$78, '* n */
$38,$44,$44,$44,$38, '* o */
$7c,$14,$14,$14,$08, '* p $70 */
$08,$14,$14,$14,$7c, '* q */
$7c,$08,$04,$04,$00, '* r */
$48,$54,$54,$54,$24, '* s */
$04,$04,$3f,$44,$44, '* t */
$3c,$40,$40,$20,$7c, '* u */
$1c,$20,$40,$20,$1c, '* v */
$3c,$40,$30,$40,$3c, '* w */
$44,$28,$10,$28,$44, '* x */
$0c,$50,$50,$50,$3c, '* y */
$44,$64,$54,$4c,$44, '* z */
$08,$36,$41,$41,$00, '* { */
$00,$00,$77,$00,$00, '* | */
$00,$41,$41,$36,$08, '* } */
$08,$08,$2a,$1c,$08, '* <- */
$08,$1c,$2a,$08,$08, '* -> */
$ff,$ff,$ff,$ff,$ff, '* $80 */
$06,$09,$09,$06,$00 ' oC $81
)
implements
End.
Esta tabla posee el código para crear 98 caracteres personalizados, donde cada caracter
tiene asignado 5 bytes, dando como resultado la declaración de 490 variables tipo byte,
como se observa en la cabecera de la tabla:
const Fuentes5x8 As Byte[490] = (
Se puede observar claramente que el caracter “A” tiene asignado los 5 bytes,
correspondientes a los cálculos que hemos efectuado anteriormente. De igual forma
deberán existir los bytes calculados para cada uno de los caracteres que deseamos mostrar
en la pantalla Glcd.
Una vez que hemos realizado todos los cálculos para cada uno de los caracteres,
procedemos a dar el formato adecuado al archivo de “fonts” que hemos creado. Este
archivo, el cual llevará el nombre de “mis_fuentes.mbas” (este nombre puede ser también
personalizado), deberá ser grabado en una ruta conocida, por ejemplo, en la misma carpeta
en la cual crearemos el proyecto para visualizar caracteres en la pantalla.
Hagamos el ejercicio tomando como punto de partida la creación del archivo de fuentes
personalizadas mostrado anteriormente:
112
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
1.- Abrimos mikroBasic:
Figura 3.28
Figura 3.29
113
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
2.- Copiamos el código del archivo de fuentes personalizadas que hemos creado con
anterioridad, y lo guardamos en una ruta conocida con el nombre de mis_fuentes.mbas
como se muestra a continuación:
Figura 3.30
114
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Este archivo es importante porque contiene el código responsable de dar forma a cada
número, letra, o caracter especial que deseamos mostrar en la pantalla Glcd. Además, este
archivo deberá estar en la misma ruta o carpeta en la cual está el proyecto en el cual
realizaremos el código correspondiente para escribir en la pantalla.
Figura 3.31
115
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Veamos ahora el programa de ejemplo que nos permitirá finalmente escribir en la pantalla
Glcd en base al módulo de fuentes descrito anteriormente.
Dim texto As String[20] ' Declaramos una variable tipo String en la cual
' cargaremos un mensaje de un máximo de 20 caracteres.
main:
Glcd_Init()
Glcd_Fill(0x00) ' Limpiamos la pantalla
Figura 3.32
116
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Analicemos el programa:
• Declaramos una variable tipo string, en cual almacenaremos el contenido del mensaje
que deseamos mostrar en la pantalla.
• Limpiamos la pantalla Glcd, llenando cada píxel con un cero lógico a través de la
rutina Glcd_Fill(), la cual detallaremos a continuación.
3.5.4.- Glcd_Fill().
3.5.5.- Glcd_Set_Font().
Por ejemplo:
module mis_fuentes
117
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
const Fuentes5x8 As Byte[490] = (
implements
End.
Observe que en el módulo “mis_fuentes”, ahora tenemos fuentes para caracteres de 5x8
pixeles llamado “Fuentes5x8”, y fuentes para caracteres de 3x6 pixeles llamado
“Fuentes3x6”.
Glcd_Set_Font(@fuentes5x8, 5, 8, 32)
El primer campo de la rutina define que fuentes debe tomar el modulo Glcd. Se accede al
nombre de la fuente “fuentes5x8” a través de operador “@”.
El segundo campo (ancho ó font_width) define la cantidad de columnas que tiene la fuente
especificada.
El tercer campo (alto ó font_height) define la cantidad de filas que tiene la fuente
especificada.
El cuarto campo (font_offset) define el carácter inicial en la tabla ASCII a partir del cual la
pantalla Glcd asociará los caracteres cargados en la variable “texto” con la tabla de fuentes
que hemos creado en nuestro archivo “mis_fuentes.mbas”.
118
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
3.5.6.- Glcd_Write_Text().
El campo “Posición en x”, indica a partir de que píxel en el eje X de la pantalla empezaremos
a escribir nuestro mensaje. En nuestro ejemplo hemos utilizado una pantalla de 128 x 64
pixeles, siendo 128 la cantidad de pixeles del eje X. Entonces, si observamos el programa,
podremos observar que el punto de partida de nuestro mensaje con respecto al eje X de la
pantalla será el píxel número 35.
El campo “línea”, indica el número de línea en la cual vamos a escribir, a partir de la línea 0
hasta la línea 7. La cantidad de líneas en este tipo de pantallas al escribir texto, depende
sólo del tamaño de la fuente que hemos creado. En nuestro caso, tendremos un total de 8
líneas para una fuente de 5x8 pixeles.
En el campo color, escribimos “1” cuando deseamos que los caracteres tengan sus pixeles
encendidos y el fondo apagado, y escribimos “0” cuando deseamos que el fondo de los
caracteres tengan sus pixeles encendidos y los pixeles del los caracteres apagados.
Figura 3.33
119
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Es decir, si el campo “color” es igual a 0, el resultado será el siguiente:
Figura 3.34
120
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Para una variable tipo float:
Veamos a continuación un ejemplo en el cual se imprime el valor de una variable tipo Word
en una posición predeterminada de la pantalla Glcd.
Dim texto As String[20] ' Declaramos una variable tipo String en la cual
' cargaremos un mensaje de un máximo de 20 caracteres.
main:
121
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
El resultado será el siguiente:
Figura 3.35
MikroBasic cuenta con algunas otras rutinas para graficar en una pantalla Glcd que
seguramente nos ayudaran a desarrollar nuevas ideas para nuestros proyectos.
Veamos a continuación cuales son las rutinas para crear gráficos de una forma simple y
rápida.
Esta rutina nos permite encender o apagar un píxel específico en la pantalla, a través de sus
coordenadas (x, y).
122
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
GLCD_RS As sbit At RB2_bit
GLCD_RW As sbit At RB3_bit
GLCD_EN As sbit At RB4_bit
GLCD_RST As sbit At RB5_bit
main:
End.
El resultado es el siguiente:
Figura 3.36
Para poder observar el efecto opuesto, en vez de limpiar la pantalla a través de la rutina
Glcd_Fill(0), llenaremos con un 1 lógico en cada píxel, utilizando la rutina Glcd_Fill($FF), y
seguidamente apagaremos un píxel específico de coordenada (64, 32).
program Proyecto_Glcd_05
main:
End.
Para ver el efecto de cambio de estado de un Píxel cuando el campo “color” es igual a 2,
hacemos una pequeña modificación al programa anterior, de tal manera que el píxel
especificado cambie de estado cada 1 segundo.
program Proyecto_Glcd_06
main:
intermitencia:
End.
124
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
3.5.8.- Glcd_Line(x1, y1, x2, y2, color).
Esta rutina dibuja una línea entre dos coordenadas específicas, (x1, y1) y (x2, y2). El estado
de los píxeles de la línea, al igual que en la rutina anterior está definido por el campo “color”.
main:
End.
125
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
El resultado será el siguiente:
Figura 3.37
program Proyecto_Glcd_08
main:
End.
126
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
El resultado será el siguiente:
Figura 3.38
Esta rutina nos permite dibujar una línea vertical en la pantalla Glcd. Para esto, solo será
necesario indicar los dos valores entre los cuales se dibujará la línea, y el valor
correspondiente al eje x, en el cual estará ubicada dicha línea.
program Proyecto_Glcd_09
main:
End.
Figura 3.39
Esta rutina nos permite dibujar una línea horizontal en la pantalla Glcd. Para esto, solo será
necesario indicar los dos valores entre los cuales se dibujará la línea, y el valor
correspondiente al eje y, en el cual estará ubicada dicha línea.
program Proyecto_Glcd_10
128
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Dim GLCD_DataPort As Byte At PORTD
main:
End.
Figura 3.40
129
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
3.5.11.- Glcd_Rectangle(x1, y1, x2, y2, color).
Esta rutina nos permite dibujar un cuadrado o rectángulo especificando tan solo dos
esquinas opuestas diagonales, Las coordenadas de estas dos esquinas determinarán el
tamaño en píxeles, y el campo “color” aplica las mismas reglas de las rutinas anteriores:
main:
Figura 3.41
130
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Analice cuidadosamente el siguiente ejemplo.
main:
rectangulo:
inicializa:
End.
131
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
El resultado será el siguiente:
Cada 500 milisegundos se formará un rectángulo de menor tamaño que el anterior hasta
llegar al límite especificado en el programa para luego limpiar la pantalla y repetir el proceso
ilimitadamente.
Figura 3.42
Al igual que en la rutina anterior, con esta rutina podemos dibujar un cuadrado o rectángulo.
La diferencia radica en que esta vez se activaran todos los píxeles internos.
Veamos un ejemplo.
program pantalla_glcd_13
132
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
main:
Figura 3.43
main:
133
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
El resultado será el siguiente:
Figura 3.44
Esta rutina genera un circulo en la pantalla Glcd, siendo (x, y) la coordenada del centro del
circulo, de radio definido en píxeles en el campo del mismo nombre, y al igual que en las
rutinas anteriores, de color activo específico.
Veamos un ejemplo.
program pantalla_glcd_15
main:
End.
134
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
El resultado será el siguiente:
Figura 3.45
(Como ejercicio adicional a este ejemplo, se podría aumentar el tamaño del radio, sobrepasando el límite
permitido por el número de píxeles de la pantalla. El resultado es muy interesante).
program pantalla_glcd_16
main:
End.
135
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
El resultado será el siguiente:
Figura 3.46
Otro ejemplo interesante podría ser dibujar una secuencia de círculos utilizando la
instrucción For – Next:
Dim Radio As Byte ' Declaramos la variable "Radio" para poder modificar
' el tamaño de los circulos consecutivos.
I As Byte ' Variable para generar repeticiones a través de la
' instrucción For-Next.
main:
Next I
End.
El resultado es el siguiente:
Figura 3.47
137
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Capítulo IV. Librería Trigon – Funciones Trigonométricas
• sin(x): calcula el seno del valor de “x”. Retorna un valor en radianes entre -1 y 1.
e x − e−x
• sinh(x): calcula el seno hiperbólico de “x”, definido matemáticamente como .
2
• cos(x): calcula el coseno del valor de “x”. Retorna un valor en radianes entre -1 y 1.
e x + e−x
• cosh(x): calcula el coseno hiperbólico de “x”, definido matemáticamente como .
2
• Asin(x): calcula el arco seno del valor de “x” en el intervalo de -1 a 1. Retorna un valor
en radianes entre – π/2 y π/2.
• Atan(x): Calcula el arco tangente del valor de “x”, es decir, el valor cuya tangente es
“x”. Retorna un valor en radianes entre – π/2 y π/2.
138
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
• pow(x, y): devuelve el valor de “x” elevado a la potencia “y”, es decir, x y .
Figura 4.1
139
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
LCD_D4_Direction As sbit At TRISB0_bit
LCD_D5_Direction As sbit At TRISB1_bit
LCD_D6_Direction As sbit At TRISB2_bit
LCD_D7_Direction As sbit At TRISB3_bit
End.
El resultado:
Figura 4.2
140
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
4.1.2.- Ejemplo de programación #31: Ejemplo para el calculo del cos(x), donde x = 1.
program Trigon
End.
El resultado:
Figura 4.3
141
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
4.1.3.- Ejemplo de programación #32: Ejemplo para el calculo de la tan(x), donde x = 0.6.
program Trigon
End.
El resultado:
Figura 4.4
142
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
4.1.4.- Ejemplo de programación #33: En el siguiente ejemplo de programación
realizaremos un programa para el control de una calculadora sencilla, cuya función principal
será realizar las siguientes operaciones en base a dos valores introducidos desde un
teclado:
• Suma.
• Resta.
• Multiplicación.
• División.
• Raíz Cuadrada de un valor.
Si deseamos realizar una nueva operación, se deberá pulsar el botón de “Reset” del circuito
para inicializar todo el programa.
Analice y lea detenidamente los comentarios realizados en cada línea del programa, ya que
la explicación del procedimiento de cálculo se encuentra a lo largo de todo el cuerpo del
programa.
143
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 4.5
program calculadora
Digito As Byte[15] ' Arreglo para almacenar los digitos introducidos desde
' cada pulsador.
Valor As Float[3] ' Variable tipo punto flotante para almacenar cada valor
' de una operación, ejemplo, si la operación es una suma:
' 5485 + 3654 = Resultado, entonces almacenaremos 5485 en
' la variable "Valor[1]" y 3654 en la variable "Valor[2]"
Operacion As Byte ' Para determinar que tipo de operación vamos a hacer
' con los valores, es decir, si Operación = 1 será una
' suma; si Operación = 2 será una resta; si Operación = 3
' será una multiplicación; si Operación = 4 será una
' división.
Resultado As Float ' Variable tipo punto flotante para almacenar el Resultado
144
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
' de una operación matemática. Es Punto Flotante ya que en
' algunos operaciones vamos a obtener un resultado con no
' entero, o con decimales. Ejemplo: 45 / 2 = 22.50
inicio:
' Cada dígito que introducimos desde el Teclado para un Valor de la operación
' matemática que deseamos realizar, es almacenado en el arreglo Digito[n],
' iniciando desde Digito[1], es decir, si quisieramos hacer una suma:
'
' 1521 + 50 = Resultado.
'
' los dígitos del primer valor (1500) se almacenarán en las variables:
' Digito[1] = 1, Digito[2] = 5, Digito[3] = 2 y Digito[4] = 1
'
' Es muy importante recordar que el procedimiento para realizar una operación en
' una calculadora común, es el siguiente:
'
' 1ro.- Ingresamos el primer valor de la operación.
' 2do.- Pulsamos el botón correspondiente al tipo de operación: + - * /
' 3ro.- Ingresamos el segundo valor de la operación.
' 4to.- Pulsamos el botón de "Igualdad" para obtener el resultado.
'
' Cada vez que introducimos un nuevo dígito, incrementamos el indice de referencia
' del arreglo Digito[I], es decir, I = I + 1. De esta forma nos aseguramos que
' cada dígito de un valor de la operación queda almacenado en su propia variable.
'
' Luego para llevar este valor (1500) a una sola variable de tipo punto flotante,
145
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
' realizamos la siguiente operación:
'
' Si I = 1, osea, si solo hemos introducido un digito, entonces:
' Valor[1] = Digito[1] = 1
'
' Si I = 2, entonces hemos introducido un segundo digito:
' Valor[1] = (Digito[1] * 10) + Digito[2]), con valores sería:
' Valor[1] = ( 1 * 10) + 5 ) = 15
'
' Si I = 3, entonces hemos introducido un tercer digito:
' Valor[1] = ((Digito[1] * 100) + (Digito[2] * 10) + Digito[3]), con valores sería:
' Valor[1] = (( 1 * 100) + ( 5 * 10) + 2 ) = 152
'
' Si I = 4, entonces hemos introducido un cuarto digito:
' Valor[1] = ((Digito[1] * 1000) + (Digito[2] * 100) + (Digito[3] * 10) + Digito[4])
' Valor[1] = (( 1 * 1000) + ( 5 * 100) + ( 2 * 10) + 1)
' Valor[1] = 1521
' La siguiente subrutina, realiza este cálculo hasta el dígito numero nueve de un
' valor, y los cálculos de la explicación que acabamos de ver se realizan diferente
' pero generan el mismo resultado. Analice cómo se realiza el cálculo del valor[1] a
' continuación:
sigue:
' A medida que vamos introduciendo dígitos al valor deseado para la operación
146
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
' matemática, es bueno ir mostrando los mismos en la pantalla LCD:
Suma: ' Esta subrutina se ejecuta cuando pulsamos la tecla "Suma" conectada al
' pin RD2 del puerto "D" del microcontrolador. Cuando llegamos a esta
' subrutina, significa que ya hemos terminado de introducir los dígitos
' de la variable "Valor[1]", por lo tanto, lo que hacemos en adelante es
' mantener en memoria qué tipo de operación deseamos realizar a través
' de la asignación de un valor cargado en la variable "Operación" el cual
' se corresponderá al tipo de operación asignada.
GoTo inicio ' Salta a la etiqueta "inicio" para recibir los digitos del
' segundo valor de la operación matemática.
Resta: ' Esta subrutina se ejecuta cuando pulsamos la tecla "Resta" conectada al
' pin RD3 del puerto "D" del microcontrolador.
I = 1
X = 2
GoTo inicio
Multiplica: ' Esta subrutina se ejecuta cuando pulsamos la tecla "Mult." conectada
' al pin RD4 del puerto "D" del microcontrolador.
GoTo inicio
Divide: ' Esta subrutina se ejecuta cuando pulsamos la tecla "Div." conectada al
' pin RD5 del puerto "D" del microcontrolador.
I = 1
X = 2
GoTo inicio
147
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Resultado = Sqrt(Valor[1]) ' Calcula la raiz cuadrada de Valor[1] y almacena
' el resultado en la variable.
If Operacion = 1 Then
Resultado = Valor[1] + Valor[2]
End If
If Operacion = 2 Then
Resultado = Valor[1] - Valor[2]
End If
If Operacion = 3 Then
Resultado = Valor[1] * Valor[2]
End If
If Operacion = 4 Then
Resultado = Valor[1] / Valor[2]
End If
Fin: GoTo Fin ' Lazo Infinito. Si deseamos realizar una nueva operación matemática
' entoces debemos reiniciar el microcontrolador a través del pulsador
' "Reset" del circuito.
Teclado:
148
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
If Button(PortC, 3, 150, 1) Then
Digito[I] = 4
GoTo sigue
End If
' Los siguientes pulsadores están asignados para realizar un salto a las
' subrutinas correspondientes a la operación matemática deseada:
149
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
GoTo inicio ' Salta a la etiqueta incio.
End.
Figura 4.6
En este punto, el programa está listo para recibir los dígitos del primer valor. Veamos un
ejemplo de una operación matemática:
1521 + 50 = 1571.00000
Figura 4.7
150
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Seguidamente elegimos en el teclado el tipo de operación:
Figura 4.8
Figura 4.9
Figura 4.10
151
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Capítulo V. Librería Sound
• Sound_Init(Puerto, Pin).
• Sound_Play(Frecuencia, Duración).
Estas dos rutinas son muy intuitivas por lo cual será muy sencillo visualizar un diseño que
genere tonos audibles para el oído humano.
Un ejemplo práctico y útil para demostrar el uso de esta librería, será crear un programa
capaz de generar las frecuencias correspondientes a la escala de notas musicales universal:
Figura 5.1
152
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Acerca de las notas musicales, existe un convenio mundial en el cual se toma la nota “LA”
como nota de referencia o como nota para afinar instrumentos musicales, y cuya frecuencia
es de 440 Hz. Este convenio ha determinado el uso de frecuencias específicas
denominadas “notas”, y este arreglo de frecuencias a su vez ha sido dividido en intervalos
denominados “octavas”. Cada “octava” se compone de 12 notas musicales. Las notas que
tienen el símbolo # en la figura 5.1 se denominan semitonos o bemoles.
Una formula matemática para obtener las frecuencias de las notas musicales a partir de una
nota de referencia, ha sido la de multiplicar la frecuencia de dicho tono por la raíz duodécima
de 2, es decir, por 1,05945454545.
Esto significa que si deseamos hallar la frecuencia para la nota inmediatamente superior a la
nota de referencia “La”, la formula matemática correspondiente para calcular este valor seria
la siguiente:
La # = 440 Hz × 12 2 = 440 × 1.059454545 = 466.15 Hz
440 Hz 440 Hz
La # = 12
= = 415.30 Hz
2 1.059454545
Entonces, realizando los cálculos para todas las notas de la “octava” A4, tenemos que:
Nota Frecuencia
Do 261.64 Hz
Do# 277.20 Hz
Re 293.68 Hz
Re# 311.14 Hz
Mi 329.64 Hz
Fa 349.24 Hz
Fa# 370.00 Hz
Sol 392.00 Hz
Sol# 415.30 Hz
La 440.00 Hz
La# 466.15 Hz
Si 493.86 Hz
Figura 5.2
153
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Veamos como reproducir el sonido que cada nota de la figura 5.1 a través de un programa
en mikroBasic, el cual esta diseñado en base al diagrama esquemático de la figura 5.3:
Figura 5.3
program Sound1
154
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
LCD_RS_Direction As sbit At TRISB4_bit
LCD_EN_Direction As sbit At TRISB5_bit
LCD_D4_Direction As sbit At TRISB0_bit
LCD_D5_Direction As sbit At TRISB1_bit
LCD_D6_Direction As sbit At TRISB2_bit
LCD_D7_Direction As sbit At TRISB3_bit
main:
LCD_Init()
LCD_Cmd(_LCD_CLEAR) ' Limpia la pantalla LCD
LCD_Cmd(_LCD_CURSOR_OFF) ' Apaga el cursor en la pantalla
155
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
FloatToStr(nota_Si, txt) ' Convertimos la constante "nota_Si" en un "string"
Lcd_Out(1, 1, "Nota Si: ") ' Visualizamos el mensaje correspondiente en la LCD.
Lcd_Out(1, 10, txt) ' Se imprime el contenido de la variable "txt"
Sound_Play(nota_Si, 500) ' Se reproduce el sonido correspondiente a la nota
' durante 500 milisegundos.
End.
Para reproducir una octava superior a esta (A4), bastará con multiplicar por 2 el valor de las
frecuencias de ésta, entonces estaremos reproduciendo los tonos correspondientes a una
quinta octava. Esto infiere que si deseamos oír los tonos correspondientes a una sexta
octava, entonces podríamos multiplicar la octava A4 por 3, o la quinta octava por 2.
156
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
5.1.2.- Ejemplo de programación #35:
Figura 5.4
157
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Analice el siguiente programa, leyendo detenidamente los comentarios en cada línea.
program Piano
main:
If Button(PortC, 0, 50, 1) Then ' Verificamos si "Do" fue presionado, estado activo = 1.
Sound_Play(nota_Do, 200) ' Se reproduce el sonido correspondiente a la nota
' durante 200 milisegundos.
End If
If Button(PortC, 1, 50, 1) Then ' Verificamos si "Do#" fue presionado, estado activo = 1.
Sound_Play(nota_DoB, 200) ' Se reproduce el sonido correspondiente a la nota
' durante 200 milisegundos.
End If
If Button(PortC, 2, 50, 1) Then ' Verificamos si "Re" fue presionado, estado activo = 1.
Sound_Play(nota_Re, 200) ' Se reproduce el sonido correspondiente a la nota
' durante 200 milisegundos.
End If
If Button(PortC, 3, 50, 1) Then ' Verificamos si "Re#" fue presionado, estado activo = 1.
Sound_Play(nota_ReB, 200) ' Se reproduce el sonido correspondiente a la nota
' durante 200 milisegundos.
End If
If Button(PortC, 4, 50, 1) Then ' Verificamos si "Mi" fue presionado, estado activo = 1.
Sound_Play(nota_Mi, 200) ' Se reproduce el sonido correspondiente a la nota
' durante 200 milisegundos.
End If
If Button(PortC, 5, 50, 1) Then ' Verificamos si "Fa" fue presionado, estado activo = 1.
Sound_Play(nota_Fa, 200) ' Se reproduce el sonido correspondiente a la nota
' durante 200 milisegundos.
End If
If Button(PortC, 6, 50, 1) Then ' Verificamos si "Fa#" fue presionado, estado activo = 1.
Sound_Play(nota_FaB, 200) ' Se reproduce el sonido correspondiente a la nota
' durante 200 milisegundos.
End If
If Button(PortC, 7, 50, 1) Then ' Verificamos si "Sol" fue presionado, estado activo = 1.
Sound_Play(nota_Sol, 200) ' Se reproduce el sonido correspondiente a la nota
' durante 200 milisegundos.
158
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
End If
If Button(PortD, 0, 50, 1) Then ' Verificamos si "Sol#" fue presionado, estado activo =
1.
Sound_Play(nota_SolB, 200) ' Se reproduce el sonido correspondiente a la nota
' durante 200 milisegundos.
End If
If Button(PortD, 1, 50, 1) Then ' Verificamos si "La" fue presionado, estado activo = 1.
Sound_Play(nota_La, 200) ' Se reproduce el sonido correspondiente a la nota
' durante 200 milisegundos.
End If
If Button(PortD, 2, 50, 1) Then ' Verificamos si "La#" fue presionado, estado activo = 1.
Sound_Play(nota_LaB, 200) ' Se reproduce el sonido correspondiente a la nota
' durante 200 milisegundos.
End If
If Button(PortD, 3, 50, 1) Then ' Verificamos si "Si" fue presionado, estado activo = 1.
Sound_Play(nota_Si, 200) ' Se reproduce el sonido correspondiente a la nota
' durante 200 milisegundos.
End If
GoTo main
End.
159
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Capítulo VI. Teclado Matricial y Teclado PS/2
Para introducir datos de forma manual en un microcontrolador, nada mejor que un teclado
matricial para este fin. Los teclados matriciales más comunes son de 3 columnas por 4 filas,
y de 4 columnas por 4 filas, como los mostrados en la figura 6.1:
Figura 6.1
Figura 6.2
160
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Por ejemplo, al presionar la tecla “1”, estaremos conectando la columna 1 con la fila 1; si
pulsamos la tecla “4”, estaremos conectando nuevamente la columna 1, esta ves con la fila
2; si pulsamos la tecla “9”, entonces estaremos conectando la columna 3 con la fila 3.
Figura 6.3
Los pines RD0, RD1, RD2 y RD3 correspondientes a las columnas se comportan como
entradas, y los pines RD4, RD5, RD6 y RD7 correspondientes a las filas se comportan como
salidas.
Observe en el diagrama esquemático, que los pines RD0, RD1, RD2 y RD3 tienen una
resistencia “Pull-Down” de 10 Kohm, lo cual significa que si leemos cualquiera de estas
entradas, asumiendo que ninguna tecla ha sido presionada, entonces siempre habrá un cero
lógico (0) presente en cada una de ellas.
161
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 6.4
En la primera edición del libro “Basic para microcontroladores PIC”, analizar un teclado
matricial para saber cual de las teclas había sido presionada, requería de una serie de pasos
en los cuales debíamos enviar un pulso a través de cada salida del puerto en el cual se
encontraba conectado el teclado matricial y seguidamente preguntar en cada una de las
entradas si el estado lógico presente había cambiado, de tal manera que pudiésemos
reconocer cual de las teclas en ese instante había sido presionada.
Con mikroBasic, la tarea del análisis de un teclado matricial ha sido simplificada de tal
manera a través de su librería “KeyPad”, que tan solo requerimos de una sola rutina para
capturar el dato que identificará a la tecla presionada en un determinado momento. Por
supuesto, antes de utilizar esta rutina, siempre es importante inicializar el puerto en el cual
estaremos conectando el teclado.
162
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Los primeros ejercicios los estaremos programando en base al diagrama esquemático de la
figura 6.4, por lo tanto el puerto de conexión del teclado será el puerto D del
microcontrolador PIC16F877.
Antes de empezar, debemos recordar verificar que hemos seleccionado las librerías
correspondientes a los periféricos que tenemos conectados al microcontrolador. En este
caso, la pestaña de librerías del proyecto se debería ver de la siguiente forma:
Figura 6.5
163
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
6.2.- Librería KeyPad.
Como en otros capítulos, esta línea de programación se hace al inicio del programa, en la
sección de declaración de variables. Esta línea es muy importante, ya que sin ella el
compilador no podrá determinar en cual de los puertos del microcontrolador estará ubicado
el teclado matricial.
Lo siguiente a tomar en cuenta será la rutina de inicialización para el teclado matricial. Esta
rutina inicializa el puerto elegido para que sea capaz de trabajar con el teclado.
6.2.1.- Keypad_Init().
Una vez inicializado el puerto, solo nos queda preguntar en el programa si alguna de las
teclas ha sido presionada, y si ese fuese el caso, cual es el valor correspondiente de ésta
para cargarlo en una variable y poder visualizarlo en la pantalla LCD.
6.2.2.- Keypad_Key_Press().
Pulsador = Keypad_Key_Press()
Cuando el microcontrolador procesa esta línea (asumiendo que hemos conectado un teclado
matricial de 4 filas por 4 columnas), un valor entre 1 y 16 es cargado en la variable
“Pulsador”.
164
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 6.6
Figura 6.7
Un dato importante a considerar sobre esta rutina, es que el valor es cargado en la variable
justo cuando presionamos la tecla, a diferencia de la siguiente rutina, que carga el valor en
la variable cuando liberamos la tecla:
Pulsador = Keypad_Key_Click()
165
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Veamos a continuación el programa que captura el valor correspondiente a una tecla
presionada. El resultado cargado en la variable se verá en la pantalla LCD.
inicio:
Teclado:
End.
166
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Al compilar y grabar el programa en el microcontrolador, el resultado mientras ninguna tecla
haya sido presionada será el siguiente:
Figura 6.8
A presionar cada una de las teclas, el resultado deberá corresponder a la tabla de la figura
6.7.
Analizando el programa, podemos observar que primero hemos hecho lo necesario para
configurar los puertos de conexión entre el microcontrolador y los periféricos, además de la
declaración de dos variables, una para almacenar el dato obtenido desde el teclado matricial
y la otra para realizar la conversión del contenido de la primera variable de “byte” a “string”,
de tal manera que podamos mostrar en resultado en la pantalla LCD.
Es de esta manera que podremos ver un valor en la pantalla LCD entre 1 y 16, cada uno de
ellos correspondientes a un pulsador en un teclado matricial 4 x 4. Pero estos valores que
estamos mostrando en pantalla no necesariamente se corresponden con los valores o letras
impresas sobre cada tecla. Veamos de nuevo la figura del teclado y cómo está identificada
cada tecla:
167
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 6.9
La asociación de valores versus teclas de la tabla de la figura 6.7 pudiera ser confusa a la
hora de realizar un programa, ya que sólo la identificación en las tres primeras teclas se
corresponde con el valor que vamos a obtener de la rutina “Keypad”, ya que cuando
presionamos la cuarta tecla, en vez de ver una “A” en la pantalla, estaremos viendo un “4”
como valor correspondiente a esta tecla.
Lo mismo ocurre para el resto de las teclas, por ejemplo, la siguiente tecla en el orden que
corresponde a los valores capturados por la rutina “Keypad” sería la tecla identificada con el
número “4” sobre ella, pero el valor correspondiente a ella cargado en la variable es el
número “5”, y esto continúa igual para el resto de las teclas hasta la última, identificada en
este caso con la letra “D” y cuyo valor correspondiente a ser cargado en la variable es igual
a “16”.
Para evitar confusiones al respecto a la hora de querer mostrar en pantalla cual de las teclas
ha sido presionada, lo que haremos será enmascarar en valor obtenido por la rutina
“Keypad”, de manera tal que podamos ver la identificación sobre la tecla y no el valor
capturado correspondiente a cada una de ellas.
168
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
6.2.2.2.- Ejemplo de programación #37:
program Proyecto_KeyPad_02
inicio:
' Enmascaramos los valores de las teclas con el equivalente ASCII del valor
' o letra impresa sobre cada tecla:
' Abra la tabla Ascii Chart desde el menú "Tools" para comparar.
If pulsador = 0 Then
pulsador = 160 ' 49 en Ascii es " "
End If
If pulsador = 1 Then
pulsador = 49 ' 49 en Ascii es "1"
End If
If pulsador = 2 Then
pulsador = 50 ' 50 en Ascii es "2"
End If
If pulsador = 3 Then
pulsador = 51 ' 51 en Ascii es "3"
End If
If pulsador = 4 Then
pulsador = 65 ' 65 en Ascii es "A"
End If
If pulsador = 5 Then
169
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
pulsador = 52 ' 52 en Ascii es "4"
End If
If pulsador = 6 Then
pulsador = 53 ' 53 en Ascii es "5"
End If
If pulsador = 7 Then
pulsador = 54 ' 54 en Ascii es "6"
End If
If pulsador = 8 Then
pulsador = 66 ' 66 en Ascii es "B"
End If
If pulsador = 9 Then
pulsador = 55 ' 55 en Ascii es "7"
End If
If pulsador = 10 Then
pulsador = 56 ' 56 en Ascii es "8"
End If
If pulsador = 11 Then
pulsador = 57 ' 57 en Ascii es "9"
End If
If pulsador = 12 Then
pulsador = 67 ' 67 en Ascii es "C"
End If
If pulsador = 13 Then
pulsador = 42 ' 42 en Ascii es "*"
End If
If pulsador = 14 Then
pulsador = 48 ' 48 en Ascii es "0"
End If
If pulsador = 15 Then
pulsador = 35 ' 35 en Ascii es "#"
End If
If pulsador = 16 Then
pulsador = 68 ' 68 en Ascii es "D"
End If
Teclado:
End.
170
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
De esta forma podremos ver el valor o letra impresa sobre cada tecla, es decir, si
presionamos la tecla “A”, veremos esta misma en la pantalla:
Figura 6.10
Figura 6.11
Figura 6.12
171
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
6.3.- Teclado PS/2.
MikroBasic posee una librería para el control de un teclado QWERTY - PS/2, a través del
cual podremos introducir datos a nuestros proyectos. Al igual que muchas de las librerías
anteriormente estudiadas, posee una rutina de inicialización y una rutina de captura de datos
para el teclado.
Figura 6.13
Un teclado qwerty consta por lo regular de 101 teclas entre letras, números, símbolos o
teclas de funciones especiales. Cuando hacemos uso de esta librería, la rutina encargada de
realizar la comunicación y extracción de datos del teclado nos devuelve un valor numérico
que corresponderá a la tecla presionada, o dicho de otra manera, nos devolverá el valor
ASCII del símbolo correspondiente en la tecla; incluso es capaz de detectar mas de un
símbolo en una misma tecla, cuando hacemos uso de las funciones “Shift” o “Alt”.
172
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Una configuración común de un teclado Qwerty la podemos observar en la siguiente figura:
Figura 6.14
Los valores correspondientes a cada uno de los símbolos en un teclado estándar han sido
escritos en color rojo en la siguiente figura al lado derecho de cada símbolo, para tener una
referencia del valor ASCII en cada tecla.
Figura 6.15
173
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Los valores para las teclas de funciones especiales los podemos observar en la siguiente
tabla:
Tecla Valor
Retornado
F1 1
F2 2
F3 3
F4 4
F5 5
F6 6
F7 7
F8 8
F9 9
F10 10
F11 11
F12 12
Enter 13
Page Up 14
Page Down 15
Backspace 16
Insert 17
Delete 18
Windows 19
Ctrl 20
Shift 21
Alt 22
Print Screen 23
Pause 24
Caps Lock 25
End 26
Home 27
Scroll Lock 28
Num Lock 29
Left Arrow 30
Right Arrow 31
Up Arrow 32
Down Arrow 33
Escape 34
Tab 35
Figura 6.17
La identificación de los pines en un conector PS/2 con respecto al símbolo del mismo en el
diagrama esquemático se puede observar en la siguiente figura:
175
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
6.4.- Librería PS/2.
Se puede ver que en estas líneas han sido definidos los pines del puerto en el cual han sido
conectados los pines de comunicación del teclado, “Data” y Clk”. Esta definición se realizó
en base al diagrama esquemático propuesto anteriormente.
Adicionalmente a esto, la librería PS/2 cuenta con dos rutinas a través de las cuales
inicializamos el teclado y extraemos los datos:
• Ps2_Config()
• Ps2_Key_Read()
6.4.1.- Ps2_Config().
Esta rutina se encarga de inicializar el microcontrolador para trabajar con el teclado PS/2.
Esta rutina tiene tres campos que hemos denominado “valor”, “especial” y “estado”.
• Función: Es una bandera cuyo estado cambia entre 1 y 0, y nos indica si una tecla de
función especial ha sido presionada o no. Si una tecla de función especial ha sido
presionada, el estado de este campo será igual a 1.
• Estado: Este campo será igual a 1 si una tecla ha sido presionada. Si no hay teclas
presionadas, este campo será igual a 0.
Para entender como funcionan estas dos rutinas, realizaremos un ejemplo de un programa
capaz de mostrar el valor ASCII de cada símbolo sobre el teclado en la pantalla LCD,
exceptuando los valores de las teclas de funciones especiales.
176
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Antes de empezar a programar, recordemos que cuando creamos un nuevo proyecto en
mikroBasic, siempre es importante verificar hemos seleccionado las librerías
correspondientes a los periféricos que estaremos utilizando en la práctica. En este caso, las
librerías a seleccionar deberán ser las siguientes:
Figura 6.19
program PS2_01
177
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
LCD_D4_Direction As sbit At TRISB0_bit
LCD_D5_Direction As sbit At TRISB1_bit
LCD_D6_Direction As sbit At TRISB2_bit
LCD_D7_Direction As sbit At TRISB3_bit
main:
While TRUE
' si el campo o variable "estado" es diferente de cero (lo cual significa que ha sido
' presionada una tecla), y...
' si el campo o variable "funcion" es igual a cero (lo cual significa que ninguna
' tecla de función especial ha sido presionada) y...
End If
Wend
End.
Analizando el programa detenidamente, podemos observar que gran parte del mismo solo
define la configuración de los dispositivos periféricos conectados al microcontrolador.
• En primer lugar, se realizó la definición de pines para el conexionado del teclado PS/2
y la pantalla LCD. Luego hemos definido las variables necesarias para cargar los
datos capturados desde el teclado.
Figura 6.20
Figura 6.21
179
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Pero si presionamos la tecla “Shift” o “Mayúscula” y luego la misma tecla señalada,
entonces el resultado cambia:
Figura 6.22
Lo mismo ocurrirá si presionamos cualquier otra tecla, siempre y cuando no sea una tecla de
función especial, ya que en este primer ejemplo no hemos contemplado el uso de las
mismas.
180
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
6.4.2.2.- Ejemplo de programación #39:
program PS2_02
main:
Lcd_Out(1, 1, "Tecla Func.: ") ' Escribimos la palabra "Caracter:" en la primera línea.
While TRUE
' si el campo o variable "estado" es diferente de cero (lo cual significa que ha sido
' presionada una tecla), y...
' si el campo o variable "funcion" es igual a uno (lo cual significa que una de las
' teclas de función especial ha sido presionada) y...
End If
Wend
End.
181
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
De este ejemplo podremos ver en la pantalla LCD solamente los valores correspondientes a
las teclas de funciones especiales, especificados en la tabla de la figura 6.16.
Esto significa que si presionamos la tecla “ESC”, deberíamos poder ver su valor
correspondiente “34” en la pantalla LCD como se muestra a continuación:
Figura 6.23
Figura 6.24
182
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
6.4.2.3.- Ejemplo de programación #40:
program PS2_03
main:
While TRUE
' si el campo o variable "estado" es diferente de cero (lo cual significa que ha sido
' presionada una tecla), y...
' si el campo o variable "funcion" es igual a cero (lo cual significa que ninguna
' tecla de función especial ha sido presionada) y...
183
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
End If
End If
Wend
End.
184
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Capítulo VII. Memoria de Datos EEPROM
Por ejemplo, un PIC16F877 cuenta con una memoria de datos de 256 bytes al igual que la
serie de la familia PIC18FXX2 y la serie de la familia PIC18FXX8. Esta es una información
puede ser verificada directamente en la hoja de características técnicas de cada
microcontrolador. Sin embargo, haremos un mapa de memoria de datos para el
microcontrolador PIC16F877, a través del cual explicaremos la forma de almacenar
información en posiciones predeterminadas en la programación de cada ejemplo propuesto.
Figura 7.1
185
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
7.2.- Librería EEPROM.
Guardar y leer datos resulta muy sencillo al trabajar en mikroBasic. Este compilador cuenta
con una librería para el control de la memoria EEPROM, la cual tiene una rutina para la
lectura de datos y otra para la escritura de datos en posiciones específicas dentro del mapa
de memoria.
7.2.1.- EEPROM_Read(Dirección).
El campo “Dirección” se refiere a la posición dentro del mapa de memoria que deseamos
leer.
Ejemplo:
El campo “Dirección” se refiere a la posición dentro del mapa de memoria que deseamos
escribir o re-escribir.
El campo “Dato” se refiere a la información que deseamos almacenar, la cual podrá estar
cargada en una variable tipo Byte previamente definida.
Ejemplo:
La idea principal en cada proyecto será familiarizarse con el uso de la memoria de datos,
almacenando en ella información que deberá poder ser consultada aunque el circuito sea
reiniciado o apagado.
Como se puede observar en la figura 7.2, se requiere el uso de un teclado matricial 4x4
para el ingreso de datos y una pantalla LCD, con la cual se podrá visualizar toda la
información a ser consultada.
186
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 7.2
En este ejercicio vamos a almacenar datos en la memoria EEPROM, para luego ser
consultados y verificados.
Vamos a desarrollar a continuación un sistema de control de acceso, en el cual el usuario
deberá introducir una contraseña previamente almacenada en la memoria de datos. Si la
contraseña es correcta, se genera un mensaje de confirmación en la pantalla. Si la
contraseña es incorrecta, se genera un mensaje de error.
Antes de empezar a programar, es importante tomar en cuenta cuales serán las posiciones
en la memoria de datos para guardar la contraseña.
Para un sistema de control de acceso donde la contraseña será de seis dígitos, y donde
cada dígito deberá ser almacenado en una posición específica, convenientemente podemos
tomar las posiciones en el mapa de la memoria de datos a partir de la dirección “$10” por
ejemplo, hasta la dirección “$15”, como se puede apreciar en la siguiente tabla:
187
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
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 7.3
188
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
LCD_D7 As sbit At RB3_bit
Sound_Init(PORTE, 0) ' Asignamos el pin RE0 para generar los tonos de confirmación
' cuando se introduce un dígito en el teclado.
inicio:
espera:
189
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Digito[Contador] = pulsador ' El valor cargado desde el teclado es almacenado
' en la variable de indice igual a "Contador", para
' luego ser comparada con el digito correspondiente
' a la clave almacenada en la EEPROM.
Comprobar:
pase1:
pase2:
pase3:
pase4:
pase5:
ErrorClave:
190
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
' en mensaje en la pantalla LCD.
ClaveCorrecta:
Final:
GoTo Final ' Lazo infinito.
Teclado:
End.
Para verificar el funcionamiento de este ejercicio, es muy importante recordar que un teclado
de 4 filas por 4 columnas nos devuelve valores consecutivos partiendo de la primera tecla,
entre 1 y 16. Esto significa que los valores impresos en cada tecla no van a coincidir con los
valores entregados por la rutina del teclado matricial.
Figura 7.4
Entonces, si la clave del sistema que hemos elegido como ejemplo es 123456, observando
la figura 7.4 nos daremos cuenta que las teclas que debemos presionar consecutivamente
serán: 1, 2, 3, A, 4 y 5.
191
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Para lograr que la clave a introducir desde el teclado sea la que hemos propuesto, entonces
los valores a cargar en la memoria EEPROM de datos deberán ser: 1, 2, 3, 5, 6 y 7. Esta es
una forma de relacionar los dígitos impresos en las teclas y los dígitos reales de la clave
elegida.
• Cada vez que introducimos un digito para almacenar la nueva clave, se deberá
generar un sonido de confirmación de cada tecla pulsada. El sonido es sumamente
importante en este proyecto, ya que permite al usuario saber que un dígito ha sido
introducido en el sistema.
• Por último, para comprobar que la nueva clave efectivamente ha sido almacenada
con éxito, será necesario reiniciar el sistema para que éste solicite el ingreso con
clave nuevamente. También es posible verificar estos cambios en la memoria
EEPROM de datos a través del programador de microcontroladores PIC, tomando
una lectura de la memoria EEPROM como se muestra en la figura 7.5.
192
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 7.5
Cuando hacemos el primer cambio de clave, por ejemplo, 456789, cuyos valores
relacionados a la rutina del teclado serán 5, 6, 7, 9, 10 (“A” en Hexadecimal) y 11 (“B” en
Hexadecimal), este mapa se verá de la siguiente manera:
Figura 7.6
Observe además que la bandera en la posición cero la ha sido cambiada con un nuevo
valor, “1” en nuestro ejemplo.
193
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Analice detenidamente el siguiente programa, siga paso a paso los comentarios y saltos de
línea para una mejor comprensión:
program Control_Acceso
inicio:
' Al leer la posición “0” y compararla con un valor que va a definir que la clave ha
' sido cambiada, entonces sabremos si debemos saltar la rutina que almacena la
' clave de fábrica cada vez que se reinicia el microcontrolador.
' El valor para definir que la clave fue cambiada será “1”. Mas adelante, en la
' rutina respectiva al cambio de clave, este valor se almacenará en la posición
' “0” de la EEPROM de datos.
194
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
' Si la bandera o valor de la posición 0 de la EEPROM no ha sido modificada,
' almacenamos los digitos de la contraseña en la memoria EEPROM, en las
' posiciones asignadas por el diseñador del programa.
Bienvenido:
espera:
Comprobar:
195
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
End If
pase1:
pase2:
pase3:
pase4:
pase5:
ErrorClave:
ClaveCorrecta:
Menu:
196
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Opcion_1:
CambiodeClave:
espera_2:
GrabarClave:
delay_ms(1000)
197
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Fin: GoTo Fin ' Lazo infinito.
Teclado:
End.
Al iniciar el programa, veremos una pantalla de bienvenida durante dos segundos y luego la
pantalla que nos indica cuando podremos ingresar la clave.
Figura 7.7
Figura 7.8
198
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Si al ingresar la clave cometemos un error, el mensaje será el siguiente:
Figura 7.9
Figura 7.10
Figura 7.11
199
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Para esto debemos presionar la tecla “C” en el teclado matricial del circuito. Este mensaje se
quedará en la pantalla hasta que se introduzca esta orden.
Figura 7.12
Seguidamente será necesario ingresar los nuevos dígitos de la clave, recordando que cada
vez que presionamos una tecla debemos esperar el tono de confirmación del sistema:
Figura 7.13
Al terminar de ingresar la clave, podremos ver un mensaje indicando que la misma esta
siendo almacenada en la memoria EEPROM de datos del microcontrolador. También
escucharemos un sonido de dos segundos de duración. Recuerde que el propósito de este
tiempo es dejar al usuario la oportunidad de poder leer el contenido del mensaje publicado
en la pantalla.
200
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 7.14
Por último, el sistema muestra un mensaje que indica que el sistema deberá ser reiniciado
para poder verificar la nueva clave.
Figura 7.15
201
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Capítulo VIII. Conversor A/D.
Figura 8.1
202
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
El conversor A/D de estos microcontroladores es de 10 bits, lo cual significa que tenemos
210 = 1024 datos de conversión, como se puede observar en la tabla de la figura 8.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
Figura 8.2
Si se configura el conversor A/D a 8 bits e introducimos una señal cuya amplitud varía entre
0 y 5 voltios, y donde el voltaje de referencia del conversor es 5 voltios, entonces la
resolución que obtendremos en la conversión sería la siguiente:
Vimax
Resolución =
2n
5V
Resolución =
28
5V
Resolución =
256
Esto significa que la resolución a 8 bits para el ejemplo planteado es de 20 mV por cada
paso que da el conversor A/D entre 0 y 255.
203
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Si configuramos el conversor A/D a 10 bits, entonces tenemos que 210 = 1024, y por lo tanto
obtenemos una resolución mayor, lo cual podemos demostrar realizando los cálculos
correspondientes:
Vimax
Resolución =
2n
5V
Resolución =
210
5V
Resolución =
1024
Entonces la resolución a 10 Bits es de 4.9 mV por cada paso que da el conversor A/D entre
0 y 1023.
Figura 8.3
204
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Resulta interesante saber que se puede obtener más resolución en términos de voltios por
paso, si utilizamos un voltaje de referencia menor al de la alimentación del microcontrolador
a través de los pines “Ref+” o “Ref-“ según sea el caso.
Por ejemplo, si aplicamos un voltaje de referencia positivo igual a 2.5 voltios en el pin
RA3/AN3/Ref+ del puerto A, el cual ha sido previamente configurado para esto, entonces:
Vimax
Resolución =
2n
2.5V
Resolución =
210
2.5V
Resolución =
1024
La resolución del conversor A/D sería 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 conversión A/D,
basados en el diagrama de bloques de la figura 8.3:
Lo primero, será configurar los canales de entrada que utilizaremos para introducir la señal
analógica al conversor A/D y los canales para voltajes de referencia, en el caso de ser
necesario. Esto se hace seleccionando la combinación correspondiente en los bits PCFG3,
PCFG2 PCFG1 y PCFG0 del registro de control ADCON1 (figura 8.4).
Figura 8.4
205
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
En este punto es muy conveniente detenerse a analizar la tabla de la figura 8.5, que define
cuales pines del puerto A y E serán entradas al conversor A/D, según la combinación
elegida.
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
Figura 8.5
El segundo paso será activar el canal en el cual se encuentra presente la señal analógica
para que pase a la etapa de muestreo. La selección de las entradas analógicas se realiza
configurando los bits CHS2 (bit 5), CHS1 (bit 4) y CHS0 (bit 3) del registro ADCON0 (figura
8.6):
Figura 8.6
Figura 8.7
206
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Debemos saber que es posible seleccionar el canal que deseamos utilizar, con la rutina
correspondiente en la librería, Adc_Read(canal), en la cual sólo se especifica cual será el
canal de entrada de la señal a ser convertida. El resultado de la lectura del canal
especificado podrá ser almacenado en una variable previamente declarada, tal y como se
muestra en el siguiente ejemplo:
humedad = Adc_Read(2)
Significa que el resultado de la conversión de una señal presente en la entrada “AN0” será
almacenado en la variable “humedad”, la cual ha sido previamente definida en el programa,
tipo Word, debido a que el conversor está configurado a 10 bits.
Figura 8.8
Figura 8.9
Figura 8.10
207
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Bit 2: Estado de la conversión.
Figura 8.11
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
Figura 8.12
208
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
A = Entrada Analógica
D = I/O Digital
Figura 8.13
En la conversión a 10 bits también es muy importante considerar el bit 7 (ADFM) del registro
de control ADCON1, ya que este bit mantiene el resultado de la conversión de 10 bits
justificado, ya sea a la derecha si ADFM = 1, como lo demuestra la figura 8.14, o a la
izquierda si ADFM = 0 como lo demuestra la figura 8.15:
Figura 8.14
Figura 8.15
Para realizar los siguientes ejemplos de programación, hemos propuesto un circuito inicial
en el cual tendremos conectado al microcontrolador una pantalla Glcd para visualizar los
resultados de la conversión, y un potenciómetro con el cual estaremos variando el nivel de
voltaje entre 0 voltios y 5 voltios en una de las entradas del conversor, específicamente en
RA2.
209
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
8.1.3.- Ejemplo de programación #43:
Figura 8.16
1. Ya que vamos a imprimir texto en la pantalla Glcd, lo primero será invocar al archivo
de fuentes creado anteriormente, en el capítulo de Pantallas LCD y GLCD.
210
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
5. Inicializamos la pantalla Glcd e invocamos el módulo de fuentes deseado, pues
recordemos que en un archivo de fuentes, podemos tener más de un módulo.
Dim texto As String[20] ' Declaramos una variable tipo String en la cual
' cargaremos un mensaje de un máximo de 20 caracteres.
Dim dato As Word ' Variable de 16 bits para cargar el valor de la
' conversión A/D.
Dim DatoStr As string[4] ' Variable para conversión datos.
main:
While (TRUE)
Wend
End.
211
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
El resultado de este programa será la pantalla que vemos en la figura 8.17, en la cual
podremos observar el valor de la variable “dato” convertida en un string de uno a cuatro
dígitos, la cual puede variar su valor entre 0 y 1023 al modificar la posición del
potenciómetro conectado en la entrada del conversor A/D:
!
!
!
!
Figura 8.17
212
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
8.1.4.- Ejemplo de programación #44:
Veamos ahora como podríamos configurar este ejemplo, para hacer uso de un voltaje de
referencia en el conversor A/D, de tal manera que podamos variar la resolución de la
conversión de datos.
Para esto, será necesario tomar en cuenta nuevamente el registro ADCON1 y la tabla de
configuración de pines del conversor:
Figura 8.18
Recordemos entonces que para configurar los pines de entrada del conversor, debemos
hacer uso de los bits 0 al 3 del registro ADCON1, basados en la siguiente tabla de
configuración de pines del mismo.
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
Figura 8.19
213
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Pero antes de continuar con el ejercicio, veamos como debería quedar el circuito propuesto:
Figura 8.20
Observe que hemos puesto un potenciómetro de 5 kohm adicional con respecto al circuito
anterior y conectado al pin RA3, de tal manera que podamos variar el voltaje de referencia
aplicado al mismo.
En base a lo estudiado anteriormente, podríamos deducir que para este nuevo circuito, si
giramos el potenciómetro REF hasta obtener un voltaje de referencia de 5 Voltios, al variar la
entrada en RA2 el resultado en la pantalla debería ser el mismo en comparación con el
ejemplo anterior, es decir, al variar el recorrido del potenciómetro POT de extremo a
extremo, la lectura debe variar entre 0 y 1023.
214
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
El cálculo de la resolución se vería así:
Vimax
Resolución =
2n
5V
Resolución =
210
5V
Resolución =
1024
Resolución = 4.9 mV
¿Pero que sucede si ponemos un voltaje de referencia igual a 2.5 voltios? Fácilmente
podremos ver el resultado variando el potenciómetro REF hasta obtener el voltaje de
referencia deseado.
Con un voltaje de referencia igual a la mitad del voltaje que aplicamos en RA2, la resolución
en la conversión sería:
Vimax
Resolución =
2n
2.5V
Resolución =
210
2.5V
Resolución =
1024
Resolución = 2.5 mV
En este caso se podrá observar que la conversión entre 0 y 5 voltios en el pin RA2 se hará
en la mitad del recorrido del potenciómetro POT.
215
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Para esto, el único cambio necesario en el programa será con respecto a la configuración
del registro ADCON1:
program ADC_02
Dim texto As String[20] ' Declaramos una variable tipo String en la cual
' cargaremos un mensaje de un máximo de 20 caracteres.
Dim dato As Word ' Variable de 16 bits para cargar el valor de la
' conversión A/D.
Dim DatoStr As string[8] ' Variable para conversión datos.
main:
While (TRUE)
Wend
End.
En vista de que hemos estado convirtiendo el nivel de un voltaje que varía entre 0 y 5 voltios
en datos de de 10 bits a través del conversor A/D, sería interesante agregar mas información
en la pantalla Glcd en base a éstos, como por ejemplo, el valor del voltaje en la entrada
analógica.
Esto también significa que basados en los datos obtenidos en la conversión A/D los cuales
varían entre 0 y 1023, el voltaje de referencia seleccionado a través del potenciómetro POT
216
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
en RA3 y el valor de la resolución calculada, podemos saber cual es el voltaje aplicado en la
entrada RA2, para luego presentar el mismo en la pantalla Glcd.
1. Sabemos que la conversión genera datos entre 0 y 1023 los cuales son almacenados
temporalmente en una variable que hemos llamado “dato”.
Por ejemplo, si tenemos un valor de conversión igual a 512, y el voltaje de referencia del
conversor es de 5 voltios, entonces:
Esto significa que el voltaje en la entrada RA2 cuando la conversión nos ha entregado un
valor igual a 512, debería ser igual o aproximadamente el voltaje calculado.
Dim texto As String[20] ' Declaramos una variable tipo String en la cual
' cargaremos un mensaje de un máximo de 20 caracteres.
Dim dato As Word ' Variable de 16 bits para cargar el valor de la
' conversión A/D.
main:
While (TRUE)
Voltaje = datoflt * 0.0049 ' Calculamos el valor del voltaje, sabiendo que
' la resolución es igual a 0.0049 voltios.
Wend
End.
Se observa en el programa que hemos agregado tres nuevas variables. Considerando que
realizaremos cálculos cuyos resultados generan decimales, dos de estas variables han sido
declaradas como “float” o punto flotante.
En una de estas variables, “Voltaje”, almacenaremos el resultado en el cálculo del valor del
voltaje en RA2, por lo cual esta variable deberá ser tipo “float”.
218
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Veamos a continuación algunos de los resultados de la conversión en la pantalla Glcd:
Figura 8.21
219
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 8.22
220
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
8.2.- El Acelerómetro.
http://www.dimensionengineering.com/DE-ACCM3D2.htm
221
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
En pocas palabras, podríamos medir la dirección hacia la cual se encuentra un objeto con
respecto al espacio tridimensional X, Y, Z.
• El voltaje de operación está entre 3.5V y 15V, debido a que incorpora un regulador de
voltaje de 3.3V.
• El circuito cuenta con un punto de conexión (regulator bypass) a través del cual
podemos alimentar el acelerómetro entre 2.4V y 3.6V, y prescindir del regulador de
voltaje.
• Mide un rango de ±2g en sus tres ejes X, Y, Z, con una sensibilidad de hasta 720 mV/g.
Según los datos proporcionados por su fabricante, los datos de rangos de sensibilidad para
los siguientes voltajes de operación son los siguientes:
En nuestro caso, haremos uso del regulador de voltaje de 3.3V, por lo cual los cálculos se
realizarán en base a la sensibilidad correspondiente, S = 666 mV/g. Los voltajes máximos en
cada salida observando la placa del acelerómetro en sus posiciones extremas, considerando
que la alimentación del acelerómetro es de 3.3V son los siguientes:
222
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 8.24 (Fuente: http://www.dimensionengineering.com/DE-ACCM3D2.htm)
Datos conocidos:
Entonces,
Si sabemos que la sensibilidad a 3.3V es 666 mV/g, 0.29V ÷ 0.666 V/g = 0.435 g
223
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Calculemos ahora la inclinación del circuito en el eje Y, con respecto al voltaje en la salida
correspondiente. Para este cálculo utilizaremos un voltaje de ejemplo, igual a 1.85 V.
Datos conocidos:
Figura 8.25
Figura 8.26
Entonces,
224
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Este resultado expresado en radianes pude ser convertido en grados de la siguiente forma:
La inclinación del circuito de la figura 8.26 es igual a 16.5 º con respecto al suelo.
Figura 8.27
En este caso, podemos ver que las salidas del acelerómetro han sido conectadas en el
puerto A, incluyendo el pin denominado “bypass” o “BP” en el acelerómetro, del cual
tomaremos el voltaje de referencia para el conversor A/D.
225
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
8.2.1.- Ejemplo de programación #46:
program ADC_04
Dim texto As String[20] ' Declaramos una variable tipo String en la cual
' cargaremos un mensaje de un máximo de 20 caracteres.
main:
While (TRUE)
226
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
wordtostr(Eje_Y, DatoStr) ' Conversión de word a string
Wend
End.
Analizando el programa, nos podremos dar cuenta que hemos agregado tres nuevas
variables para almacenar el resultado de la conversión A/D de cada una de las salidas del
acelerómetro.
Estas tres variables llamadas “Eje_X”, “Eje_Y” y “Eje_Z” han sido declaradas tipo “word”, ya
que la conversión A/D está configurada por defecto a 10 bits, por lo cual una variable de 8
bits (byte), no funcionaría en este caso.
Otra de las cosas importantes a resaltar es que el registro ADCON1 esta configurado para
que los pines del puerto “A” que deseamos utilizar en la conversión, RA0, RA1 y RA2 sean
entradas análogas, y para que el pin RA3 sirva de voltaje de referencia positivo.
ADCON1 = 1 ' Configura el puerto A como analógico,
' RA3 es el voltaje de referencia --> Vref.
También contamos con un título para nuestro proyecto, el cual ha sido ubicado en la primera
línea de la pantalla Glcd, al igual que el título de las dos columnas de datos ubicado en la
segunda línea de la pantalla.
texto = "Acelerometro" ' Cargamos la variable con un titulo.
Glcd_Write_Text(texto, 25, 0, 1) ' Escribimos el contenido en la línea 0
Por último, tenemos las rutinas correspondientes a la captura y conversión de datos del
acelerómetro:
227
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Eje_X = Adc_Read(0) ' Carga el resultado de la conversión de
' de 10 bits en la variable.
Las rutinas para la captura y conversión A/D, son básicamente las mismas. Solo hemos
cambiado las variables en las cuales estamos almacenando el dato correspondiente a cada
salida del acelerómetro, la conversión de datos de “word” a “string” y las posiciones
correspondientes a los mensajes y resultados a ser mostrados en la pantalla Glcd.
Figura 8.28
228
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Como se puede ver en la figura 8.28, nuestro programa ha sido capaz de mostrarnos el valor
de la conversión A/D para cada una de las salidas del acelerómetro. Pero éste sería mas útil
aún si pudiésemos contar con estos valores expresados en términos de voltaje y
aceleración, tal y como lo estudiamos antes de empezar a hacer este ejercicio.
Empecemos calculando el voltaje en cada una de las entradas del conversor A/D. Los datos
que debemos tomar en cuenta para este cálculo serían los siguientes:
Vimax
Resolución =
2n
3.3V
Resolución =
210
3.3V
Resolución =
1024
Resolución = 0,003222 V
Las formulas para el cálculo de voltaje en cada entrada serían las siguientes:
229
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
8.2.3.- Calculo de la aceleración en base al voltaje calculado en cada eje.
Datos conocidos:
Entonces,
230
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
8.2.4.- Ejemplo de programación #47:
program ADC_05
Dim texto As String[20] ' Declaramos una variable tipo String en la cual
' cargaremos un mensaje de un máximo de 20 caracteres.
Volt_Eje_X As Float
Volt_Acell_X As Float
Acell_X As Float
Volt_Eje_Y As Float
Volt_Acell_Y As Float
Acell_Y As Float
Volt_Eje_Z As Float
Volt_Acell_Z As Float
Acell_Z As Float
Dato_Temp As Float
main:
Acelerometro:
231
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Glcd_Write_Text(texto, 25, 0, 1) ' Escribimos el contenido en la línea 0
'*************************************************************************
'*************************************************************************
'*************************************************************************
232
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
' Calculamos el Voltaje en RA2:
GoTo Acelerometro
End.
Figura 8.29
233
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
8.3.- Termocupla.
A continuación haremos una breve introducción al estudio de un dispositivo que resulta ser
muy utilizado en la industria para el control de niveles de temperaturas de rangos muy
amplios, entre -200ºC y 1700ºC.
Hoy en día se fabrican diferentes tipos de termocuplas, las cuales han sido clasificadas
según ciertas características propias de cada metal. Podemos conseguir en el mercado
termocuplas tipo B, J, K, E, N, R y S. Las termocuplas tipo J y tipo K son las más comunes
debido a que poseen características como una alta sensibilidad, en el rango de 40 uV/ºC a
52 uV/ºC aproximadamente, además de un alto rango de temperaturas que pueden ser
medidas.
Resulta muy importante mencionar que el voltaje generado por la unión de estos metales no
es lineal, con respecto al rango de temperatura medido. Para solucionar este inconveniente,
utilizaremos un amplificador-compensador entre la termocupla y el microcontrolador:
234
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
8.3.1.- AD594/AD595, cálculo de la linealidad.
Para una termocupla tipo J, el voltaje generado por la unión de sus metales es de 51.7
uV/ºC. Si calculamos la ganancia del amplificador en AD594, tenemos que:
10mV /º C
Ganancia = = 193.42
0.0517 mV /º C
Para una termocupla tipo K, el voltaje generado por la unión de sus metales es de 40.44
uV/ºC. Si calculamos la ganancia del amplificador en AD595, tenemos que:
10mV /º C
Ganancia = = 247.27
0.04044mV /º C
El AD594 y el AD595 están calibrados de fábrica para generar un voltaje igual a 250mV en
su salida cuando aplicamos una temperatura de 25ºC en la unión de las termocuplas.
Para compensar este desplazamiento, el AD594 realiza el cálculo del voltaje en su salida en
base a la siguiente formula:
Veamos un ejemplo numérico suponiendo que aplicamos una temperatura ideal de 30ºC en
una termocupla tipo J. El valor correspondiente al voltaje generado por la unión de los
metales en la termocupla tipo J se especifica en una tabla de valores publicada por la norma
IEC 584 (IEC es el acrónimo de International Electrotechnical Commission), Figura 8.31.
1. Según la tabla de la figura 8.31, sabemos que una termocupla tipo J genera 1536 uV
a una temperatura de 30ºC.
Entonces,
235
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Salida en AD594 = 1552 uV * 193.42
Temp
0 1 2 3 4 5 6 7 8 9 10
ºC
-220 -8096
-210 -8096 -8076 -8057 -8037 -8017 -7996 -7976 -7955 -7934 -7912 -7890
-200 -7890 -7868 -7846 -7824 -7801 -7778 -7755 -7731 -7707 -7683 -7659
-190 -7659 -7634 -7609 -7584 -7559 -7533 -7508 -7482 -7455 -7429 -7402
-180 -7402 -7375 -7348 -7321 -7293 -7265 -7237 -7209 -7180 -7151 -7122
-170 -7122 -7093 -7064 -7034 -7004 -6974 -6944 -6914 -6883 -6852 -6821
-160 -6821 -6790 -6758 -6727 -6695 -6663 -6630 -6598 -6565 -6532 -6499
-150 -6499 -6466 -6433 -6399 -6365 -6331 -6297 -6263 -6228 -6194 -6159
-140 -6159 -6124 -6089 -6053 -6018 -5982 -5946 -5910 -5874 -5837 -5801
-130 -5801 -5764 -5727 -5690 -5653 -5615 -5578 -5540 -5502 -5464 -5426
-120 -5426 -5388 -5349 -5311 -5272 -5233 -5194 -5155 -5115 -5076 -5036
-110 -5036 -4996 -4956 -4916 -4876 -4836 -4795 -4755 -4714 -4673 -4632
-100 -4632 -4591 -4550 -4508 -4467 -4425 -4383 -4341 -4299 -4257 -4215
-90 -4215 -4172 -4130 -4087 -4044 -4001 -3958 -3915 -3872 -3829 -3785
-80 -3785 -3742 -3698 -3654 -3610 -3566 -3522 -3478 -3433 -3389 -3344
-70 -3344 -3299 -3255 -3210 -3165 -3120 -3074 -3029 -2984 -2938 -2892
-60 -2892 -2847 -2801 -2755 -2709 -2663 -2617 -2570 -2524 -2478 -2431
-50 -2431 -2384 -2338 -2291 -2244 -2197 -2150 -2102 -2055 -2008 -1960
-40 -1960 -1913 -1865 -1818 -1770 -1722 -1674 -1626 -1578 -1530 -1481
-30 -1481 -1433 -1385 -1336 -1288 -1239 -1190 -1141 -1093 -1044 -995
-20 -995 -945 -896 -847 -798 -748 -699 -650 -600 -550 -501
-10 -501 -451 -401 -351 -301 -251 -201 -151 -101 -50 0
0 0 50 101 151 202 253 303 354 405 456 507
10 507 558 609 660 711 762 813 865 916 967 1019
20 1019 1070 1122 1174 1225 1277 1329 1381 1432 1484 1536
30 1536 1588 1640 1693 1745 1797 1849 1901 1954 2006 2058
40 2058 2111 2163 2216 2268 2321 2374 2426 2479 2532 2585
50 2585 2638 2691 2743 2796 2849 2902 2956 3009 3062 3115
60 3115 3168 3221 3275 3328 3381 3435 3488 3542 3595 369
70 369 3702 3756 3809 3863 3917 3971 4024 4078 4132 4186
80 4186 4239 4293 4347 4401 4455 4509 4563 4617 4671 4725
90 4725 4780 4834 4888 4942 4996 5050 5105 5159 5213 5268
100 5268 5322 5376 5431 5485 5540 5594 5649 5703 5758 5812
110 5812 5867 5921 5976 6031 6085 6140 6195 6249 6304 6359
120 6359 6414 6468 6523 6578 6633 6688 6742 6797 6852 6907
130 6907 6962 7017 7072 7127 7182 7237 7292 7347 7402 7457
140 7457 7512 7567 7622 7677 7732 7787 7843 7898 7953 8008
236
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
150 8008 8063 8118 8174 8229 8284 8339 8394 850 8505 8560
160 8560 8616 8671 8726 8781 8837 8892 8947 9003 9058 9113
170 9113 9169 9224 9279 9335 9390 9446 9501 9556 9612 9667
180 9667 9723 9778 9834 9889 9944 10000 10055 10111 10166 10222
190 10222 10277 10333 10388 10444 10499 10555 10610 10666 10721 10777
200 10777 10832 10888 10943 10999 11054 11110 11165 11221 11276 11332
210 11332 11387 11443 11498 11554 11609 11665 11720 11776 11831 11887
220 11887 11943 11998 12054 12109 12165 12220 12276 12331 12387 12442
230 12442 12498 12553 12609 12664 12720 12776 12831 12887 12942 12998
240 12998 13053 13109 13164 13220 13275 13331 13386 13442 13497 13553
250 13553 13608 13664 13719 13775 13830 13886 13941 13997 14052 14108
260 14108 14163 14219 14274 14330 14385 14441 14496 14552 14607 14663
270 14663 14718 14774 14829 14885 14940 14995 15051 15106 15162 15217
280 15217 15273 15328 15383 15439 15494 15550 15605 15661 15716 15771
290 15771 15827 15882 15938 15993 16048 16104 16159 16214 16270 16325
300 16325 16380 16436 16491 16547 16602 16657 16713 16768 16823 16879
310 16879 16934 16989 17044 17100 17155 17210 17266 17321 17376 17432
320 17432 17487 17542 17597 17653 17708 17763 17818 17874 17929 17984
330 17984 18039 18095 18150 18205 18260 18316 18371 18426 18481 18537
340 18537 18592 18647 18702 18757 18813 18868 18923 18978 19033 19089
350 19089 19144 19199 19254 19309 19364 1920 19475 19530 19585 19640
360 19640 19695 19751 19806 19861 19916 19971 20026 20081 20137 20192
370 20192 20247 20302 20357 20412 20467 20523 20578 20633 20688 20743
380 20743 20798 20853 20909 20964 21019 21074 21129 21184 21239 21295
390 21295 21350 21405 21460 21515 21570 21625 21680 21736 21791 21846
400 21846 21901 21956 22011 22066 22122 22177 22232 22287 22342 22397
410 22397 22453 22508 22563 22618 22673 22728 22784 22839 22894 22949
420 22949 23004 23060 23115 23170 23225 23280 23336 23391 23446 23501
430 23501 23556 23612 23667 23722 23777 23833 23888 23943 23999 24054
440 24054 24109 24164 24220 24275 24330 24386 24441 24496 24552 24607
450 24607 24662 24718 24773 24829 24884 24939 24995 25050 25106 25161
460 25161 25217 25272 25327 25383 25438 25494 25549 25605 25661 25716
470 25716 25772 25827 25883 25938 25994 26050 26105 26161 26216 26272
480 26272 26328 26383 26439 26495 26551 26606 26662 26718 26774 26829
490 26829 26885 26941 26997 27053 27109 27165 27220 27276 27332 27388
500 27388 27444 27500 27556 27612 27668 27724 27780 27836 27893 27949
510 27949 28005 28061 28117 28173 28230 28286 28342 28398 28455 28511
520 28511 28567 28624 28680 28736 28793 28849 28906 28962 29019 29075
530 29075 29132 29188 29245 29301 29358 29415 29471 29528 29585 29642
540 29642 29698 29755 29812 29869 29926 29983 30039 30096 30153 30210
550 30210 30267 30324 30381 30439 30496 30553 30610 30667 30724 30782
560 30782 30839 30896 30954 31011 31068 31126 31183 31241 31298 31356
570 31356 31413 31471 31528 31586 31644 31702 31759 31817 31875 31933
580 31933 31991 32048 32106 32164 32222 32280 32338 32396 32455 32513
590 32513 32571 32629 32687 32746 32804 32862 32921 32979 33038 33096
600 33096 33155 33213 33272 33330 33389 33448 33506 33565 33624 33683
610 33683 33742 33800 33859 33918 33977 34036 34095 34155 34214 34273
620 34273 34332 34391 34451 34510 34569 34629 34688 3478 34807 34867
630 34867 34926 34986 35046 35105 35165 35225 35285 35344 35404 35464
640 35464 35524 35584 35644 35704 35764 35825 35885 35945 36005 36066
237
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
650 36066 36126 36186 36247 36307 36368 36428 36489 36549 36610 36671
660 36671 36732 36792 36853 36914 36975 37036 37097 37158 37219 37280
670 37280 37341 37402 37463 37525 37586 37647 37709 37770 37831 37893
680 37893 37954 38016 38078 38139 38201 38262 38324 38386 38448 38510
690 38510 38572 38633 38695 38757 38819 38882 38944 39006 39068 39130
700 39130 39192 39255 39317 39379 39442 39504 39567 39629 39692 39754
710 39754 39817 39880 39942 40005 40068 40131 40193 40256 40319 40382
720 40382 40445 40508 40571 40634 40697 40760 40823 40886 40950 41013
730 41013 41076 41139 41203 41266 41329 41393 41456 41520 41583 41647
740 41647 41710 41774 41837 41901 41965 42028 42092 42156 42219 42283
750 42283 42347 42411 42475 42538 42602 42666 42730 42794 42858 42922
760 42922 42980 43050 43114 43178 43242 43306 43370 43435 43499 43563
770 43563 43627 43692 43756 43820 43885 43949 44014 44078 44142 44207
780 44207 44271 44336 44400 44465 44529 44594 44658 44723 44788 44852
790 44852 44917 44981 45046 45111 45175 45240 45304 45369 45434 45498
800 45498 45563 45627 45692 45757 45821 45886 45950 46015 46080 46144
810 46144 46209 46273 46338 46403 46467 46532 46596 46661 46725 46790
820 46790 6854 46919 46983 47047 47112 47176 47241 47305 47369 47434
830 47434 47498 47562 47627 47691 47755 47819 47884 47948 48012 48076
840 48076 48140 48204 48269 48333 48397 48461 48525 48589 48653 48716
850 48716 48780 48844 48908 48972 49036 49099 49163 49227 49291 49354
860 49354 49418 49481 49545 49608 49672 49735 49799 49862 49926 49989
870 49989 50052 50116 50179 50242 50305 50369 50432 50495 50558 50621
880 50621 50684 50747 50810 50873 50936 50998 51061 51124 51187 51249
890 51249 51312 51375 51437 51500 51562 51625 51687 51750 51812 51875
900 51875 51937 51999 52061 52124 52186 52248 52310 52372 52434 52496
910 52496 52558 52620 52682 52744 52806 52868 52929 52991 53053 53115
920 53115 53176 53238 53299 53361 53422 53484 53545 53607 53668 53729
930 53729 53791 53852 53913 53974 54035 54096 54157 54219 54280 54341
940 54341 54401 54462 54523 54584 54645 54706 54766 54827 54888 54948
950 54948 55009 55070 55130 55191 55251 55312 55372 55432 55493 55553
960 55553 55613 55674 55734 55794 55854 55914 55974 56035 56095 56155
970 56155 56215 56275 56334 56394 56454 56514 56574 56634 56693 56753
980 56753 56813 56873 56932 56992 57051 57111 57170 57230 57289 57349
990 57349 57408 57468 57527 57586 57646 57705 57764 57824 57883 57942
1000 57942 58001 58060 58120 58179 58238 58297 58356 58415 58474 58533
1010 58533 58592 58651 58710 58769 58827 58886 58945 59004 59063 59121
1020 59121 59180 59239 59298 59356 59415 59474 59532 59591 59650 59708
1030 59708 59767 59825 59884 59942 60001 60059 60118 60176 60235 60293
1040 60293 60351 60410 60468 60527 60585 60643 60702 60760 60818 60876
1050 60876 60935 60993 61051 61109 61168 61226 61284 61342 61400 61459
1060 61459 61517 61575 61633 61691 61749 61807 61865 61923 61981 62039
1070 62039 62097 62156 62214 62272 62330 62388 62446 62504 62562 62619
1080 62619 62677 62735 62793 62851 62909 62967 63025 63083 63141 63199
1090 63199 63257 63314 63372 63430 63488 63546 63604 63662 63719 63777
1100 63777 63835 63893 63951 64009 64066 64124 64182 64240 64298 64355
1110 64355 64413 64471 64529 64586 64644 64702 64760 64817 64875 64933
1120 64933 64991 65048 65106 54164 65222 65279 65337 65395 65453 65510
1130 65510 65568 65626 65683 65741 65799 65856 65914 65972 66029 66087
1140 66087 66145 66202 66260 66318 66375 66433 66491 66548 66606 66664
238
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
1150 66664 66721 66779 66836 66894 66952 67009 67067 67124 67182 67240
1160 67240 67297 67355 67412 67470 67527 67585 67643 67700 67758 67815
1170 67815 67873 67930 67988 68042 68103 68160 68217 68275 68332 68390
1180 68390 68447 68505 68562 68619 68677 68734 68792 68849 68906 68964
1190 68964 69021 69078 69135 69193 69250 69307 69364 69422 69479 69536
1200 69536
Figura 8.31
Veamos un ejemplo numérico suponiendo que aplicamos una temperatura ideal de 160ºC en
una termocupla tipo K. El valor correspondiente al voltaje generado por la unión de los
metales en la termocupla tipo K se especifica en una tabla de valores publicada por la norma
IEC 584 (IEC es el acrónimo de International Electrotechnical Commission), Figura 8.32.
3. Según la tabla de la figura 8.32, sabemos que una termocupla tipo K genera 6539 uV
a una temperatura de 160ºC.
Entonces,
239
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Tabla de valores de voltajes de una termocupla tipo K
Temp
0 1 2 3 4 5 6 7 8 9 10
ºC
-270 -6458 -6457 -6456 -6455 -6453 -6452 -6450 -6448 -6446 -6444 -6461
-260 -6441 -6438 -6435 -6432 -6429 -6425 -6421 -6417 -6413 -6408 -6404
-250 -6404 -6399 -6394 -6388 -6382 -6377 -6371 -6364 -6358 -6351 -6344
-240 -6344 -6337 -6329 -6322 -6314 -6306 -6297 -6289 -6280 -6271 -6262
-230 -6262 -6253 -6243 -6233 -6223 -6213 -6202 -6192 -6181 -6170 -6158
-220 -6158 -6147 -6135 -6123 -6111 -6099 -6087 -6074 -6061 -6048 -6035
-210 -6035 -621 -6007 -5994 -5980 -5965 -5951 -5936 -5922 -5907 -5891
-200 -5891 -5876 -5860 -5845 -5829 -5813 -5796 -5780 -5763 -5747 -5730
-190 -5730 -5712 -5695 -5678 -566 -5642 -5624 -5606 -5587 -5569 -5550
-180 -5550 -5531 -5512 -5493 -5474 -5454 -5434 -5414 -5394 -5374 -5354
-170 -5354 -5333 -5313 -5292 -5271 -5249 -5228 -5207 -5185 -5163 -5141
-160 -5141 -5119 -5097 -5074 -5051 -5029 -5006 -4983 -4959 -4936 -4912
-150 -4912 -4889 -4865 -4841 -4817 -4792 -4768 -4743 -4719 -4694 -4669
-140 -4669 -4644 -4618 -4593 -4567 -4541 -4515 -4489 -4463 -4437 -4410
-130 -4410 -4384 -4357 -4330 -4303 -4276 -4248 -4221 -4193 -4166 -4138
-120 -4138 -4110 -4082 -4053 -4025 -3997 -3968 -3939 -3910 -3881 -3852
-110 -3852 -3823 -3793 -3764 -3734 -3704 -3674 -3644 -3614 -3584 -3553
-100 -3553 -3523 -3492 -3461 -3430 -3399 -3368 -3337 -3305 -3274 -3242
-90 -3242 -3211 -3179 -3147 -3115 -3082 -3050 -3018 -2985 -2953 -2920
-80 -2920 -2887 -2584 -2821 -2788 -2754 -2721 -2687 -2654 -2620 -2586
-70 -2586 -2552 -2518 -2484 -2450 -2416 -2381 -2347 -2312 -2277 -2243
-60 -2243 -2208 -2173 -2137 -2102 -2067 -2032 -1996 -1961 -1925 -1889
-50 -1889 -1853 -1817 -1781 -1745 -1709 -1673 -1636 -1600 -1563 -1527
-40 -1527 -1490 -1453 -1416 -1379 -1342 -135 -1268 -1231 -1193 -1156
-30 -1156 -1118 -1081 -1043 -1005 -968 -930 -892 -854 -816 -777
-20 -777 -739 -701 -6621 -624 -585 -547 -508 -469 -431 -392
-10 -392 -353 -314 -275 -236 -197 -157 -118 -79 -39 0
0 0 39 79 119 158 198 238 277 317 357 397
10 397 437 477 517 557 597 637 677 718 758 798
20 798 838 879 919 960 1000 1041 1081 1122 1162 1203
30 1203 1244 1285 1325 1366 1407 1448 1489 1529 1570 1611
40 1611 1652 1693 1734 1776 1817 1858 1899 1940 1981 2022
50 2022 2064 2105 2146 2188 2229 2270 2312 2353 2394 2436
60 2436 2477 21519 2560 2601 2643 2684 2726 2767 2809 2850
70 2850 2892 2933 2975 3016 3058 3100 3141 3183 3224 3266
80 3266 3307 3349 3390 3432 3473 3515 3556 3598 3639 3681
90 3681 3722 3764 3805 3847 3888 3930 3971 4012 4054 4095
100 4095 4137 4178 4219 4261 4302 4343 4384 4426 4467 4508
110 4508 4549 4590 4632 4673 4714 4755 4796 4837 4878 4919
120 4919 4960 5001 5042 5083 5124 5164 5205 5246 5287 5327
130 5327 5368 5409 5450 5490 5531 5571 5612 5652 5693 5733
140 5733 5774 5814 5855 5895 5936 5976 6016 6057 6097 6137
150 6137 6177 6218 6258 6298 6338 6378 6419 6459 6499 6539
160 6539 6579 6619 6659 6699 6739 6779 6819 6859 6899 6939
170 6939 6979 7019 7059 7099 7139 7179 7219 7259 7299 7338
180 7338 7378 7418 7458 7498 7538 7578 7618 7658 7697 7737
190 7737 7777 7817 7857 7897 7937 7977 8017 8057 8097 8137
240
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
200 8137 8177 8216 8256 8296 8336 7276 8416 8456 8497 8537
210 8537 8577 8617 8657 8697 8737 8777 8817 8857 8898 8938
220 8938 8978 9018 9058 9099 9139 9179 9220 9260 9300 9341
230 9341 9381 9421 9462 9502 9543 9583 9624 9664 9705 9745
240 9745 9786 9826 9867 9907 9948 9989 10029 10070 10111 10151
250 10151 10192 10233 10274 10315 10355 10396 10437 10478 10519 10560
260 10560 10600 10641 10682 10723 10764 10805 10846 10887 10928 10969
270 10969 11010 11051 11093 11134 11175 11216 11257 11298 11339 11381
280 11381 11422 11463 11504 11546 11587 11628 11669 11711 11752 11793
290 11793 11835 11876 11918 11959 12000 12042 12083 12125 12166 12207
300 12207 12249 12290 12332 12373 12415 12456 12498 12539 12581 12623
310 12623 12664 12706 12747 12789 12831 12872 12914 12955 12997 13039
320 13039 13080 13122 13164 13205 13247 13289 13331 13372 13414 13456
330 13456 13497 13539 13581 16623 13665 13706 13748 13790 13832 13874
340 13874 13915 13597 13999 14041 14083 14125 14167 14208 14250 14292
350 14292 14334 14376 14418 14460 1452 14544 14586 14628 14670 14712
360 14712 14754 14796 14838 14880 14922 14964 15006 15048 15090 15132
370 15132 15174 15216 15258 15300 15342 15384 15426 15468 15510 15552
380 15552 15594 15636 15679 15721 15763 15805 15847 15889 15931 15974
390 15974 16016 16058 16100 16142 16184 16227 16269 16311 16353 16395
400 16395 16438 16480 16522 16564 16607 16649 16691 16733 16776 16818
410 16818 16860 1692 16945 16987 17029 17072 17114 17156 17199 17241
420 17241 17283 17326 17368 17410 17453 17495 17537 17580 17622 17664
430 17664 17707 17749 17792 17834 17876 17919 17961 18004 18046 18088
440 18088 18131 18173 18216 18258 18301 18343 18385 18428 18470 18513
450 18513 18555 18598 18640 18683 18725 18768 18810 18853 18895 18938
460 18938 18980 19023 19065 19108 19150 19193 19235 19278 19320 19363
470 19363 19405 19448 19490 19533 19576 19618 19661 19703 19746 19788
480 19788 19831 19873 19916 19959 20001 20044 20086 20129 20172 20214
490 20214 20257 20299 20342 20385 20427 2070 20512 20555 20598 20640
500 20640 20683 20725 2768 20811 20853 20896 20938 20981 21024 21066
510 21066 21109 21152 21194 21237 21280 21322 21365 21407 21450 21493
520 21493 21535 21578 21621 21663 21706 21749 21791 21834 21876 21919
530 21919 21962 22004 22047 22090 22132 22175 22218 22260 22303 22346
540 22346 22388 22431 22473 22516 22559 22601 22644 22687 22729 22772
550 22772 22815 22857 22900 22942 22985 23028 23070 23113 23156 23198
560 23198 23241 23284 23326 23369 23411 23454 23497 23539 23582 23624
570 23624 23667 23710 23752 23795 23837 23880 23923 23965 24008 24050
580 24050 24093 24136 24178 24221 2263 24306 24348 24391 24434 24476
590 24476 24519 24561 24604 24646 24689 24731 24774 24817 24859 2492
600 24902 24944 24987 25029 25072 25114 25157 25199 25242 25284 25327
610 25327 25396 25412 25454 25497 25539 25582 25624 25666 25709 25751
620 25751 25794 25836 25879 25921 25964 26006 26048 2691 26133 26176
630 26176 26218 26260 26303 26345 26387 26430 26472 26515 26557 26599
640 26599 26642 26684 26726 26769 26811 26853 26896 26938 26980 27022
650 27022 27065 27107 27149 27192 27234 27276 27318 27361 27403 27445
660 27445 27487 27529 27572 27614 27656 27698 27740 27783 27825 27867
670 27867 27909 27951 27993 28035 28078 28120 28162 28204 28246 28288
680 28288 28330 28372 28414 28456 28498 28540 28583 28625 28667 28709
690 28709 28751 28793 28835 28877 28919 28961 29002 29044 29086 29128
241
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
700 29128 29170 29212 29254 29296 29338 29380 29422 29464 29505 29547
710 29547 29589 29631 29673 29715 29756 29798 2980 29882 29924 29965
720 29965 30007 30049 30091 30132 30174 30216 30257 30299 30341 30383
730 30383 30424 30466 30508 30549 30591 3632 30674 30716 30757 30799
740 30799 30840 30882 30924 3965 31007 31048 31090 31131 31173 31214
750 31214 31256 31297 31339 3138 31422 31463 31504 31546 31587 31629
760 31629 31670 31712 31753 31794 31836 31877 31918 31960 32001 32042
770 32042 32084 32125 32166 32207 32249 32290 32331 32372 32414 32455
780 32455 32496 32537 32578 329619 32661 32702 32743 32784 32825 32866
790 32866 32907 32948 32990 33031 33072 33113 33154 33195 33236 33277
800 33277 33318 33359 33400 33441 33482 33523 33564 33604 33645 33686
810 33686 33727 33768 33809 33850 33891 33931 33972 34013 34054 34095
820 34095 34136 34176 34217 34258 34299 34339 34380 34421 34461 34502
830 34502 34543 34583 34624 34665 34705 34746 34787 34827 34868 34909
840 34909 34949 34990 35030 35071 35111 35152 35192 35233 35273 35314
850 35314 35354 35395 35435 35476 35516 35557 35597 35637 35678 35718
860 35718 35758 35799 35839 35880 35920 35960 36000 36041 36081 36121
870 36121 36162 36202 36242 36282 36323 36363 36403 36443 36483 36524
880 36524 36564 36604 36644 36684 36724 36764 36804 36844 36885 36925
890 36925 36965 37005 37045 37085 37125 37165 3725 37245 37285 37325
900 37325 37365 27405 37445 37484 37524 37564 37604 37644 37684 37724
910 37724 37764 37803 37843 37883 37923 37963 38002 38042 38082 38122
920 38122 38162 38201 38241 38281 38320 38360 38400 38439 38479 38519
930 38519 38558 38598 38638 38677 38717 38756 38796 38836 38875 38915
940 38915 38954 38994 39033 39073 39112 39152 39191 39231 39270 39310
950 39310 39349 39388 39428 39467 39507 39546 39585 39625 39664 39703
960 39703 39743 39782 39821 39861 39900 39939 39979 40018 40057 40096
970 40096 40136 40175 4021 40253 40292 40332 40371 40410 40449 40488
980 40488 40527 40566 40605 40645 40684 40723 40762 40801 40840 40879
990 40879 40918 40957 40996 41035 41074 41113 41152 41191 41230 41269
1000 41269 41308 41347 41385 41424 41463 41502 41541 41580 41619 41657
1010 41657 41696 41735 41774 41813 41851 41890 41929 41968 42006 42045
1020 42045 42084 42123 42161 42200 42239 42277 42316 42355 42393 42432
1030 42432 42470 42509 42548 42586 42625 42663 42702 42740 42779 42817
1040 42817 42856 42894 42933 42971 43010 43048 43087 43125 43164 43202
1050 43202 43240 43279 43317 43356 43394 43432 43471 43509 43547 43585
1060 43585 43624 43662 43700 43739 43777 43815 43853 43891 43930 43968
1070 43968 44006 44044 44082 44121 44159 44198 44235 44273 44311 44349
1080 44349 44387 44425 44463 44501 44539 44577 44615 44653 44691 44729
1090 44729 44767 44805 44843 44881 44919 44957 44995 45033 45070 45108
1100 45108 45146 45184 45222 45260 45297 45335 45373 45411 45448 45486
1110 45486 45524 45561 45599 45637 45675 45712 45750 45787 45825 45863
1120 45863 45900 45938 45975 46013 46051 46088 46126 46163 46201 46238
1130 46238 46275 46313 46350 46388 46425 46463 46500 46537 46575 46612
1140 46612 46649 46687 46724 46761 46799 46836 46873 46910 46948 46985
1150 46985 47022 47059 47096 47134 47171 47208 47245 47282 47319 47356
1160 47356 47393 47430 47468 47505 47542 47579 47616 47653 47689 47726
1170 47726 47763 47800 47837 47874 47911 47948 47985 48021 48058 48095
1180 48095 48132 48169 48205 48242 48279 48316 48352 48389 48426 48462
1190 48462 48499 48536 48572 48609 48645 48682 48718 48755 48792 48828
242
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
1200 48828 48865 48901 48937 48974 49010 49047 49083 49120 49156 49192
1210 49192 49229 49265 49301 49338 49374 49410 49446 49483 49519 49555
1220 49555 49591 49627 49663 49700 49736 49772 49808 49844 49880 49916
1230 49916 49952 49988 50024 50060 50096 50132 50168 50204 50240 50276
1240 50276 50311 50347 50383 50419 50455 50491 50526 50562 50598 50633
1250 50633 50669 50705 50741 50776 50812 50847 50883 50919 50954 50990
1260 50990 51025 51061 51096 51132 51167 51203 51238 51274 51309 51344
1270 51344 51380 51415 51450 51486 51521 51556 51592 51627 51662 51697
1280 51697 51733 51768 51803 51838 51873 51908 51943 51979 5201 52049
1290 52049 52084 52119 52154 52189 52224 52259 52294 52329 52364 52398
1300 52398 52433 52468 52503 52538 52573 52608 52642 52677 52712 52747
1310 52747 52781 52816 52851 52886 52920 52955 52989 53024 53059 53093
1320 53093 53128 53162 53197 53232 53266 53301 53335 53370 53404 53439
1330 53439 53473 53507 53542 53576 53611 53645 53679 53714 53748 53782
1340 53782 53817 553851 53885 53920 53954 53988 54022 54057 54091 54125
1350 54125 54159 54193 54228 54262 54296 54330 54364 54398 54432 54466
Figura 8.32
Veamos a continuación una tabla la cual refleja los valores calculados en intervalos cortos
de temperaturas para las termocuplas tipo J y tipo K, correspondientes a los dispositivos
AD594 y AD595:
243
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
140 7.457 1445 5.733 1420
160 8.560 1659 6.539 1620
180 9.667 1873 7.338 1817
200 10.777 2087 8.137 2015
220 11.887 2302 8.938 2213
240 12.998 2517 9.745 2413
260 14.108 2732 10.560 2614
280 15.217 2946 11.381 2817
300 16.325 3160 12.207 3022
320 17.432 3374 13.039 3227
340 18.537 3588 13.874 3434
360 19.640 3801 14.712 3641
380 20.743 4015 15.552 3849
400 21.846 4228 16.395 4057
420 22.949 4441 17.241 4266
440 24.054 4655 18.088 4476
460 25.161 4869 18.938 4686
480 26.272 5084 19.788 4896
500 27.388 5300 20.640 5107
520 28.511 5517 21.493 5318
540 29.642 5736 22.346 5529
560 30.782 5956 23.198 5740
580 31.933 6179 24.050 5950
600 33.096 6404 24.902 6161
620 34.273 6632 25.751 6371
640 35.464 6862 26.599 6581
660 36.671 7095 27.445 6790
680 37.893 7332 28.288 6998
700 39.130 7571 29.128 7206
720 40.382 7813 29.965 7413
740 41.647 8058 30.799 7619
750 42.283 8181 31.214 7722
760 – – 31.629 7825
780 – – 32.455 8029
800 – – 33.277 8232
820 – – 34.095 8434
840 – – 34.909 8636
860 – – 35.718 8836
880 – – 36.524 9035
900 – – 37.325 9233
920 – – 38.122 9430
940 – – 38.915 9626
960 – – 39.703 9821
980 – – 40.488 10015
1000 – – 41.269 10209
1020 – – 42.045 10400
1040 – – 42.817 10591
1060 – – 43.585 10781
1080 – – 44.439 10970
1100 – – 45.108 11158
244
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
1120 – – 45.863 11345
1140 – – 46.612 11530
1160 – – 47.356 11714
1180 – – 48.095 11897
1200 – – 48.828 12078
1220 – – 49.555 12258
1240 – – 50.276 12436
1250 – – 50.633 12524
Figura 8.33
De esta forma el problema de la linealidad en el voltaje de salida está resuelto, de modo que
ahora podemos realizar la conversión de la salida analógica de los dispositivos AD594 o
AD595 según sea el caso, a través del conversor A/D del microcontrolador.
245
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
8.3.2.- Ejemplo de programación #48:
Figura 8.34
El pin RC0 del puesto “C” será configurado como entrada para evaluar constantemente la
alarma de fallo de la termocupla del AD594. Los pines 12 y 13 (+ALM y –ALM
respectivamente) son el colector y el emisor de un transistor NPN interno, el cual se activa al
producirse una falla en el circuito.
En el circuito de la figura 8.34, el pin “+ALM” mantiene un estado lógico alto gracias a la
resistencia “Pull Up” de 1K, lo cual significa que se mantiene un estado lógico alto en RC0
mientras la termocupla se encuentra conectada y funcionando. Cuando se produce una falla,
el AD594 activa el transistor y el estado lógico en RC0 pasa a ser bajo o “cero”, debido a
que el emisor en el transistor (pin -ALM) se encuentra conectado a tierra.
246
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
program Termocupla
Dim texto As String[20] ' Declaramos una variable tipo String en la cual
' cargaremos un mensaje de un máximo de 20 caracteres.
Dim dato As Word ' Variable de 16 bits para cargar el valor de la
' conversión A/D.
Dim DatoStr As string[16] ' Variable para conversión datos.
main:
While (TRUE)
Wend
Alarma:
Espera:
247
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
GoTo Espera ' Si la termocupla sigue dañada, vuelve a verificar
' la alarma hasta que la termocupla sea reemplazada.
End.
Debido a que el voltaje de referencia del conversor A/D es igual al voltaje de alimentación
del circuito, es decir, +5 Vdc, la medida de la temperatura en este ejemplo se limita a un
rango aproximado de 0ºC a 460ºC.
Vimax
Resolución =
2n
5V
Resolución =
210
5V
Resolución =
1024
Resolución = 4.9 mV
248
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Recordemos que el AD594 genera en su salida 10mV/ºC, por lo tanto:
303.8mV
Temperatura de TC-J =
10mV /º C
Figura 8.35
Figura 8.36
249
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Capítulo IX. Comunicación Serial Asíncrona RS232.
La librería que a continuación vamos a estudiar nos permite hacer uso del hardware
encargado de las comunicaciones bajo el protocolo RS-232 (UART - Universal
Asynchronous Receiver/Transmitter) de una serie de microcontroladores que disponen de
éste. Para esto debemos siempre verificar que hemos elegido el microcontrolador correcto,
es decir, que tenga en su arquitectura el hardware correspondiente, y el cual se encuentra
comúnmente en microcontroladores de gama alta como por ejemplo, en el PIC16F877,
PIC18F442, PIC18F458 entre otra buena cantidad de microcontroladores disponibles en el
mercado.
La comunicación serial asíncrona resulta muy útil cuando necesitamos transmitir o recibir
datos entre circuitos gobernados por microcontroladores PIC, o inclusive cuando deseamos
establecer una comunicación entre nuestros circuitos y un PC.
Este protocolo define estándares como la velocidad de transmisión en baudios (110, 300,
1200, 2400, 4800, 9600, 14400, 19200, 38400, 56000, 57600, 115200, 128000 y 256000
bps), niveles de voltaje, distancia entre dispositivos, entre otros.
Las señales en el puerto del PC son digitales y la tensión con la cual trabaja, +12V y -12V,
poseen una lógica invertida, la cual es de suma importancia tomar en cuenta a la hora de
realizar el diseño de un circuito.
Acoplar el puerto serial de nuestro PC con estos niveles de voltaje y lógica invertida a
nuestros circuitos digitales de 5 voltios, resulta sencillo cuando utilizamos un circuito
integrado diseñado para solucionar este inconveniente y el cual es posible encontrar en casi
todos los diseños electrónicos actuales.
El circuito integrado MAX232 de MAXIM, es una interfaz que traduce estos niveles de voltaje
y la lógica binaria entre el PC y el microcontrolador.
250
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
La siguiente figura muestra el diagrama de pines del MAX232 y la configuración para la
conexión de cinco condensadores de 1uF necesarios para su funcionamiento:
Figura 9.1
251
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
El microcontrolador elegido para las siguientes prácticas ha sido el PIC16F877, sin embargo
los programas que a continuación vamos a realizar funcionan con cualquier otro modelo de
gama alta de Microchip, siempre y cuando hagamos los ajustes pertinentes en la ficha de
configuración del proyecto que realicemos en mikroBasic.
Como periféricos emplearemos una pantalla LCD, un MAX232 para acoplar nuestro circuito
al puerto serial de PC, un modulo BlueTooth para comunicación serial inalámbrica y un
módulo GPS (OEM) cuyos modelos especificaremos mas adelante.
Figura 9.2
252
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
9.2.- Librería UART.
La velocidad de transmisión de datos puede ser configurada entre 2400 bps y 115000 bps a
través del campo denominado “Velocidad de transmisión de datos” en la rutina de
inicialización.
UART1_Init(2400)
Otro punto importante a considerar sobre la rutina de inicialización, será que ésta deberá
estar siempre antes del uso de cualquier otra rutina correspondiente a la librería UART.
9.2.2.- UART1_Data_Ready()
Una forma sencilla de verificar si hay datos listos en el Buffer en forma de código a través de
esta rutina sería empleando el condicional “If” de la siguiente manera:
End If
253
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
También podríamos hacerlo de la siguiente manera:
End If
Una vez verificado el Buffer de datos de la UART, procedemos a vaciar el mismo en una
variable previamente declarada en nuestro programa, y para verificar su contenido podemos
imprimir el resultado en la pantalla LCD o simplemente enviar el dato de vuelta por el puerto
serial del microcontrolador hacia la terminal de comunicaciones en el PC.
9.2.3.- UART1_Read()
Esta rutina extrae del Buffer un Byte y lo carga en una variable definida:
main:
.
.
.
.
Los datos que enviamos desde una terminal de comunicaciones o desde cualquier otro
dispositivo vía RS232 hacia el microcontrolador PIC16F877, son cargados Byte a Byte a
través de un registro denominado RSR (Receive Shift Register), quien espera a que el Bit de
Stop de la transmisión llegue para pasar el Byte al Buffer o registro RCSTA, el cual tiene una
capacidad máxima de dos Bytes, por lo tanto podríamos decir que podemos contar con tres
Bytes de información disponible en la UART antes de que el Buffer se desborde y perdamos
información en la transmisión.
254
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
El registro RCSTA es FIFO (Firts In, Firts Out), Es decir, el primer dato en entrar es
el primer dato en salir).
De lo anterior podemos deducir que sólo hace falta un cuarto Byte en la transmisión antes
de descargar el Buffer, para que éste se desborde y deje de almacenar datos. Entonces, si
deseamos capturar una serie de datos continuos en la UART para ser procesados, debemos
descargar el buffer cada tres Bytes para no perder información en el proceso de transmisión
de datos.
program RS232
Lcd_Out(1, 1, "Datos: ") ' Se imprime "Datos: " en la primera línea de la pantalla.
Recepcion:
Else
Imprime:
End.
El primer paso en este ejemplo ha sido definir la variable en la cual almacenaremos los
datos enviados desde la terminal de comunicaciones, y los pines de control y datos de la
pantalla LCD. Seguidamente inicializamos la UART a 2400 bps e inicializamos la pantalla
LCD con el mensaje “Datos:“ impreso en la primera línea.
“123456789”
256
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 9.3
Se puede ver en la figura anterior que hemos escrito la cadena en el campo correspondiente
a “Comunicación” o envío de datos. Seguidamente hacemos clic en “Send” para enviar la
cadena al microcontrolador vía RS232.
Observe que cada vez que extraemos un Byte del Buffer, hacemos un salto a la rutina
“Imprimir” para mostrar el mismo en la pantalla LCD. Un segundo después, ocurre el retorno
a la rutina “Recepción” y se evalúa nuevamente el Buffer para ver si aún quedan datos en él.
El proceso se repite hasta que el Buffer queda vacío:
“1 2 3”
257
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Cuando enviamos una cadena de caracteres vía RS232 al microcontrolador con mas de tres
Bytes, el Buffer se llena y se desborda deteniendo la recepción, por lo tanto, en este caso
obtendremos de la cadena de caracteres solamente los tres primeros Bytes.
Para lograr almacenar y visualizar una cadena completa, debemos realizar algunos cambios
sobre el programa.
El primer cambio importante que hemos hecho, ha sido la creación de una sub-función, la
cual deberá ir antes del cuerpo principal del programa, es decir, antes de la etiqueta “main”,
y la cual se encargará de recoger los datos uno a uno, almacenados en el Buffer de la UART
cada vez que ésta sea llamada a cumplir con su tarea.
Asumiendo que en este ejemplo enviaremos una cadena de nueve caracteres, hemos
realizado una pequeña rutina de recolección de datos la cual se ejecutará hasta que se
cumpla una condición conocida. Las instrucciones dentro de un lazo “do-loop
Until(condición)” se repetirán hasta que dicha condición sea verdadera.
Por último, creamos una rutina de visualización de datos a través de un lazo “For-Next”, la
cual imprimirá cada caracter almacenado en el arreglo de variables definidas previamente en
la pantalla LCD.
program RS232
Dim Datos_RX As Byte[10] ' Arreglo de variables para almacenar los datos.
acumulador As Byte ' Variable para condicional "loop Until..."
X As Byte ' Variable para lazo For-Next.
Recepcion:
do
Next X
End.
• Escribimos un mensaje de estado del Buffer; en este caso el mensaje será “Buffer
Vacío” ya que aún no hemos recolectado información del mismo.
259
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
• Aumentamos en una unidad la variable “acumulador”, y verificamos si se cumple la
condición “loop Until(acumulador = 10)”. Si la variable “acumulador” viene con un
valor cargado igual a 1 y la incrementamos en una unidad, es decir, “acumulador = 2”,
entonces podremos ver que la condición no se cumple aún, por lo tanto el programa
vuelve a hacer un llamado a la sub-función “LeerCaracter”, cargando el siguiente Byte
capturado del Buffer en la variable que corresponda en este momento según el valor
del “acumulador”. Esto significa que este segundo Byte será cargado en
“Dato_RX[2]”.
En este punto podemos decir que si enviamos una cadena de nueve Bytes, entonces el
Buffer se habrá vaciado tres veces al terminar el programa.
A través de esta rutina podemos enviar datos almacenados en una variable tipo “Byte” a
través del puerto serial hacia el PC o cualquier otro dispositivo o circuito que soporte
comunicación RS232.
En vista de que estamos recibiendo una cadena de nueve caracteres en este ejemplo,
haremos un lazo “For-Next” adicional, a través del cual enviaremos el contenido almacenado
en el arreglo de variables, “Datos_RX[1] hasta “Datos_RX[9]”. Hacer este lazo simplifica en
gran medida el código de programa, ya que de otra forma tendríamos que escribir una rutina
de envío de datos para cada una de las variables.
Next X
260
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Estas líneas pueden ser agregadas después de la recolección de datos, o incluso después
de presentar los mismos en la pantalla LCD:
program RS232
Dim Datos_RX As Byte[10] ' Arreglo de variables para almacenar los datos.
acumulador As Byte ' Variable para condicional "loop Until..."
X As Byte ' Variable para lazo For-Next.
Recepcion:
do
261
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
UART1_Write(Datos_RX[X]) ' Enviamos el dato cargado en la variable.
Next X
Next X
End.
Figura 9.4
262
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
9.3.- Cómo extraer información específica de una cadena de datos.
En muchos casos podremos también observar que estos dispositivos envían algunos
caracteres dentro de la cadena que identifican cada bloque de información, por ejemplo, en
nuestra cadena de 48 caracteres podremos ver que hemos asignado como caracteres de
cabecera del bloque de información los siguientes:
“XYZ” serán la cabecera y nos ayudarán a identificar la posición del bloque de datos que nos
interesa extraer, entonces, si el la cabecera y el bloque de datos estuviesen en esta posición
u otra diferente de la cadena, seguramente podremos hacer un código de programa para
identificar la cabecera “XYZ” y seguidamente almacenar los siguientes 20 caracteres en un
arreglo de variables:
263
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
• Comparando cada Byte con el primer valor de cabecera “88” o “X”, podremos saber si
debemos continuar con la búsqueda del mismo, o si finalmente algún Byte en la
cadena coincide con éste valor.
• Si este primer valor coincide con un Byte en la cadena, entonces podremos pasar a
comparar el siguiente Byte con el valor “89” o “Y”. Si este valor no coincide,
simplemente debemos reiniciar todo el proceso de búsqueda debido a que los Bytes
de cabecera del bloque de información deseado deberán estar siempre juntos, de otra
forma, estaríamos capturando información errada dentro de la cadena.
• Sólo cuando encontremos los tres Bytes consecutivos de cabecera de la cadena será
cuando procederemos a almacenar los 20 bytes del bloque de información en un
arreglo de variables que definiremos para este fin y que en nuestro ejemplo
llamaremos “Datos_RX[n]”, donde “n” representa el numero de Bytes de información
dentro del bloque deseado.
Este ejemplo podrá ser verificado en base al diagrama esquemático de la figura 9.2. Sin
embargo, no haremos uso de la pantalla LCD debido a que estaremos enviando los datos
extraídos de la cadena de caracteres vía RS232 hacia la terminal de comunicaciones de
mikroBasic.
Adicionalmente a esto, haremos uso de una nueva rutina de la librería UART para transmitir
texto directamente a la terminal y de esta forma poder saber en que estado se encuentra el
proceso de transmisión y recepción de datos:
Esta rutina envía el texto cargado dentro de las comillas, o caracteres almacenados en
variables tipo “string”, vía RS232.
Dim Datos_RX As Byte[23] ' Arreglo de variables para almacenar los datos.
Cadena As Byte[48] ' Arreglo de variables para almacenar la cadena.
acumulador As Byte ' Variable para llevar conteo en condicional "loop Until..."
X As Byte ' Variable para lazo For-Next.
264
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
i As Byte ' Variable auxiliar para conteo en subrutinas.
UART1_Write_Text("Buffer Vacio...!") ' Mensaje de estado del Buffer enviado via RS232.
UART1_Write_Text("Esperando Datos...") ' Mensaje de estado del Buffer enviado via RS232.
Recepcion:
do
verifica_1:
verifica_2:
verifica_3:
265
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Else ' Si no ha sido el dato correcto, verifica si "i"
If i = 48 Then ' es mayor a la cantidad de bytes de la Cadena.
GoTo main ' Si "i" es mayor al numero de bytes de la Cadena,
End If ' entonces reiniciamos todo el proceso desde "main".
For X = 1 To 20
End.
Figura 9.5
266
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
También podremos ver en la figura anterior el mensaje de estado enviado desde el
microcontrolador hacia el PC cuando éste se encuentra a la espera de la cadena de
caracteres.
Figura 9.6
En este momento, resulta importante mencionar que el ejemplo anterior será la base para
establecer las comunicaciones entre el microcontrolador a través de su UART y un módulo
GPS (Global Positioning System), propuesto en uno de los próximos ejemplos de este
capítulo y a través del cual podremos obtener las coordenadas geográficas del dispositivo
las cuales son transmitidas a una frecuencia conocida y bajo el protocolo RS232.
267
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
9.4.- Módulo de comunicaciones BlueTooth.
Haciendo uso de un módulo para comunicaciones inalámbricas Bluetooth, de tal manera que
podamos eliminar la conexión física entre nuestro circuito y nuestro PC la cual por cierto
también deberá contar con un módulo de comunicaciones Bluetooth que por lo regular viene
integrado de fábrica.
Figura 9.7
En caso de con contar con un módulo Bluetooth integrado en nuestro PC, también es
posible utilizar un adaptador Bluetooth USB como el que mostramos a continuación:
Figura 9.8
268
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Empresa: Sparkfun Electronics
Website: http://www.sparkfun.com
Modelo: Bluetooth Modem - BlueSMiRF Gold
Código: WRL-00582
Figura 9.10
Este módulo de fácil conexionado maneja niveles de voltaje en sus pines de comunicaciones
RS232 de 5 voltios, por lo cual también podremos eliminar de nuestro circuito el MAX232
que veníamos utilizando para acoplar el puerto serial del PC. El diagrama esquemático
modificado según los cambios planteados se vería de la siguiente forma:
Figura 9.11
269
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Enlazar el módulo Bluetooth que proporciona Sparkfun con el módulo Bluetooth de nuestro
PC es muy simple, siempre y cuando contemos con el software para la administración de
dispositivos Bluetooth en nuestra PC. A continuación veremos una breve explicación acerca
de la instalación de uno de tantos software disponibles para administrar dispositivos
Bluetooth desde Windows.
Este software nos permitirá escanear dispositivos Bluetooth como el módulo recomendado
para este ejemplo práctico. A través de él podremos administrar algunos servicios
disponibles como transferencia de archivos, servicios de impresión, acceso a Red, pasarela
de audio, auriculares, puerto serial Bluetooth entre otros. Veamos a continuación la
secuencia de instalación del software. Lea los mensajes en las ventanas del software para
seguir correctamente los pasos:
Figura 9.12
270
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 9.13
Figura 9.14
271
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 9.15
Figura 9.16
272
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 9.17
Figura 9.18
273
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Al reiniciar la sesión de Windows, continúa el proceso de configuración del software:
Figura 9.19
Figura 9.20
274
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 9.21
Figura 9.22
275
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
En este punto nos debemos asegurar de seleccionar la opción “Puerto de serie Bluetooth”.
Figura 9.23
Figura 9.24
276
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Cuando se realiza la búsqueda de dispositivos Bluetooth, es probable que aparezcan otros
como nuestros teléfonos móviles, mouse o teclados Bluetooth, auriculares y todo aquel
dispositivo que esté al alcance de nuestro PC. Podremos identificar el nuestro bajo el
nombre de “BlueRadios” como se observa en la siguiente figura. Seleccionamos el
dispositivo y continuamos, haciendo clic en “Siguiente”.
Figura 9.25
277
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 9.26
En la configuración por defecto de este software se solicita que los dispositivos Bluetooth
encontrados sean “emparejados” a través de un código que por lo regular es suministrado
por el fabricante del equipo. En nuestro caso, el código por defecto del módulo Bluetooth
suministrado por Sparkfun es “1234”.
278
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 9.27
Figura 9.28
279
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
También es de suma importancia observar cual ha sido el puerto COM asignado a este
servicio (Ver figura 9.30). En nuestro caso nos ha sido asignado el puerto COM6, el
tomaremos en cuenta a la hora de seleccionar el puerto serial en la terminal de
comunicaciones de mikroBasic.
Figura 9.29
Figura 9.30
280
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Terminado el proceso de configuración, estamos listos para ver nuestro módulo Bluetooth
conectado a nuestro PC, tal y como se observa en la siguiente figura:
Figura 9.31
También es posible ver el estado de la conexión Bluetooth a través de dos Leds en la base
del módulo Bluetooth de nuestro circuito:
• Un LED de color Rojo nos indicará que la conexión ha sido exitosa y que el módulo se
encuentra preparado para transmitir y recibir datos.
281
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
9.4.2.- Comunicación Serial inalámbrica BlueTooth.
Sin realizar ninguna modificación sobre el último programa que hemos cargado en el
microcontrolador, podremos ver en funcionamiento las comunicaciones a través de esta
pasarela inalámbrica, cuando enviamos la cadena de datos desde la terminar de
comunicaciones de mikroBasic hasta el microcontrolador PIC.
En la siguiente figura se puede observar que lo único que hemos cambiado ha sido la
configuración para la conexión del puerto, donde COM6 representa la conexión a través del
módulo Bluetooth del PC.
Figura 9.32
282
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 9.33
283
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
9.5.- Módulo GPS (OEM), comunicación serial RS232.
Los módulos GPS que utilizaremos a continuación tienen una salida de datos Serial
Asíncrona con niveles de voltaje en su salida entre 0 y 5 voltios. Requieren además de una
antena “activa” la cual podremos encontrar en dos modalidades; montada directamente
sobre el módulo GPS, o separada y encapsulada para protegerla del clima cuando
deseamos que la misma esté lejos del circuito principal o circuito de control.
El objetivo principal en los próximos ejemplos será la obtención de los siguientes datos
extraídos del “string” o cadena de datos en la salida del GPS:
Si no está familiarizado con estos conceptos, sería recomendable leer al respecto en algún
libro especializado o a través de Internet, donde podrá encontrar suficiente información útil y
detallada.
Sin embargo estudiemos un poco acerca del protocolo NMEA, coordenadas geográficas y su
representación numérica.
284
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
9.5.1.- Protocolo NMEA.
Esta información la podemos extraer a través una cadena de caracteres ASCII en formato
de comunicación NMEA.
NMEA cuenta con varias sentencias las cuales empiezan con los caracteres “$GP” seguidas
del nombre de la misma, además de los datos capturados por el dispositivo desde la red de
satélites, cada uno de ellos presentados en campos separados por comas. También
podremos encontrar al final de la sentencia el resultado de una operación de dos dígitos
denominada “Checksum” justo después del símbolo “*”.
El “Checksum” se calcula a través de una operación lógica (XOR) realizada tantas veces
como sea necesario según la cantidad de dígitos en la cadena, a través de la cual podemos
determinar si la transmisión de datos desde el modulo GPS hacia el microcontrolador PIC ha
sido correcta. El resultado de esta operación queda expresado a través de dos caracteres
ASCII, los cuales representan un valor Hexadecimal.
Cada vez que el modulo GPS envía una de estas sentencias a través de su salida,
automáticamente termina la misma con <CR> y <LF> (Carrie Return y Line Feed), lo cual
resulta ser muy útil cuando deseamos ver esta información en un terminal de
comunicaciones, ya que cada sentencia será visualizada en una nueva línea en el área de
recepción de datos, y no de forma continua y desordenada.
Uno de los módulos o dispositivos GPS que hemos utilizado como ejemplo ha sido el
Garmin 18-5Hz, de Garmin International Inc., en su versión OEM.
Veamos una de las sentencias NMEA que nos entrega este dispositivo en su salida:
$GPGGA,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,M,<10>,M,<11>,<12>*hh
285
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Veamos:
• El campo <7> almacena el número de satélites en uso, entre 00 y 12. Los ceros
siempre serán representados en la cadena de datos, es decir, si la cantidad de
satélites es igual a “cero”, entonces podremos ver los caracteres “00” en este campo.
(Esta característica aplica para todos los campos de la cadena).
• El campo <9> almacena la altitud del dispositivo sobre el nivel del mar.
$GPGGA,212529.4,5042.52892,N,12238.40770,W,2,09,1.1,9.7,M,-11.4,M,,*61
286
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
• Estado de la sincronización: 2, posición disponible para DGPS.
• Altitud del dispositivo o antena sobre el nivel del mar: 9.7 metros.
Esta sentencia es una de varias sentencias que son entregadas por este dispositivo GPS a
través de su salida digital, a una frecuencia constante de 5 Hz.
Figura 9.34
287
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
La latitud y longitud están calculadas normalmente bajo el sistema centesimal en el sistema
de medidas relativas a ángulos.
Al introducir estos datos bajo este formato en la casilla de búsqueda de Google Earth, el
programa nos llevará a la posición exacta en la cual se encuentra nuestro dispositivo GPS
(Figura 9.36).
Figura 9.35
288
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 9.36
Para realizar esta tarea de extraer ciertos datos de la cadena de caracteres enviada por el
módulo GPS a una frecuencia conocida, a través de un microcontrolador PIC, debemos
analizar la cadena completa y observar cada cuantos caracteres se da una repetición de la
misma.
En la siguiente imagen podemos ver la salida del módulo GPS Garmin 18-5Hz. Si
observamos bien, notaremos que tenemos una larga cadena de datos que se repite
constantemente:
289
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 9.37
Los módulos GPS vienen configurados de fábrica para enviar una cierta cantidad de
sentencias NMEA a través de su salida. Esta configuración podría ser cambiada a través de
un software proporcionado por el fabricante, en caso de que estemos interesados en obtener
una sentencia NMEA específica de todo el repertorio que encontraremos en el manual del
módulo GPS que estemos usando. Pero en nuestro caso, la cadena de caracteres o datos
esta compuesta por tan solo cuatro sentencias NMEA: VTG, RMC, GGA y GSA. Juntas
conforman una solo cadena de caracteres que se repite constantemente, no mayor a 256
bytes, y de la cual sólo deseamos extraer los datos de la sentencia GGA para la próxima
práctica de programación.
290
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
9.5.2.- Ejemplo de programación #53:
do
Lo primero que podemos ver en ella, es la variable “acumulador” inicializada con un valor
igual a 1.
Seguidamente, un lazo dentro del cual se llama a una sub-función, la cual habíamos
denominado “Leercaracter”, encargada de extraer un byte del Buffer de la UART, el cual
será cargado en la variable cadena[acumulador], o cadena[1]. Luego se realiza un
incremento de la variable “acumulador” y se verifica la condición del lazo. Si la condición no
se cumple, se procede a cargar el siguiente byte extraído del Buffer de la UART en la
variable cadena[acumulador], o cadena[2] y así sucesivamente hasta que la condición
“acumulador = 184” se cumpla.
Una vez almacenada la cadena, procedemos a realizar la búsqueda de los caracteres que
conforman la cabecera de la sentencia deseada, es decir, $GPGGA. En el programa de
ejemplo, estos caracteres se comparan uno por uno y en secuencia con los caracteres de la
cadena. Si uno de estos caracteres falla, la búsqueda se reinicia desde el primer caracter “$”
a partir del la posición en la cual se halló la diferencia, esto con la finalidad de terminar de
analizar el resto de la cadena.
291
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Al encontrar la cabecera completa, procedemos entonces a almacenar el resto de los
caracteres de la sentencia GGA, para luego ser mostrados a través de algún periférico
conectado al microcontrolador y el cual en nuestro caso será una pantalla LCD.
Almacena:
Next X
$GPVTG,,T,,M,,N,,K*4E
$GPRMC,004013.0,V,5042.52892,N,12238.40770,W,,,071209,008.4,W*71
$GPGGA,212529.4,5042.52892,N,12238.40770,W,2,09,1.1,9.7,M,-11.4,M,,*61
$GPGSA,A,1,,,,,,,,,,,,,,,*E1
Si por ejemplo quisiéramos extraer tan solo los campos de coordenadas geográficas y
cantidad de satélites en uso de la sentencia GGA para mostrados por la pantalla LCD, lo
apropiado sería mostrar tan sólo el contenido de las variables correspondientes a cada
carácter.
$GPGGA,212529.4,5042.52892,N,12238.40770,W,2,09,1.1,9.7,M,-11.4,M,,*61
Esto significa que según la subrutina de almacenamiento de datos que vimos anteriormente
y según los caracteres correspondientes marcados en “negrilla” en la cadena, la variables
que debemos tomar para extraer estos campos serían las señaladas a continuación dentro
del arreglo “Datos_RX[X]:
292
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Datos_RX[1] , Datos_RX[33] 7
Datos_RX[2] 2 Datos_RX[34] 0
Datos_RX[3] 1 Datos_RX[35] ,
Datos_RX[4] 2 Datos_RX[36] W
Datos_RX[5] 5 Datos_RX[37] ,
Datos_RX[6] 2 Datos_RX[38] 2
Datos_RX[7] 9 Datos_RX[39] ,
Datos_RX[8] . Datos_RX[40] 0
Datos_RX[9] 4 Datos_RX[41] 9
Datos_RX[10] , Datos_RX[42] ,
Datos_RX[11] 5 Datos_RX[43] 1
Datos_RX[12] 0 Datos_RX[44] .
Datos_RX[13] 4 Datos_RX[45] 1
Datos_RX[14] 2 Datos_RX[46] ,
Datos_RX[15] , Datos_RX[47] 9
Datos_RX[16] 5 Datos_RX[48] .
Datos_RX[17] 2 Datos_RX[49] 7
Datos_RX[18] 8 Datos_RX[50] ,
Datos_RX[19] 9 Datos_RX[51] M
Datos_RX[20] 2 Datos_RX[52] ,
Datos_RX[21] , Datos_RX[53] -
Datos_RX[22] N Datos_RX[54] 1
Datos_RX[23] , Datos_RX[55] 1
Datos_RX[24] 1 Datos_RX[56] .
Datos_RX[25] 2 Datos_RX[57] 4
Datos_RX[26] 2 Datos_RX[58] ,
Datos_RX[27] 3 Datos_RX[59] M
Datos_RX[28] 8 Datos_RX[60] ,
Datos_RX[29] . Datos_RX[61] ,
Datos_RX[30] 4 Datos_RX[62] *
Datos_RX[31] 0 Datos_RX[63] 6
Datos_RX[32] 7 Datos_RX[64] 1
Figura 9.38
293
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Toda la programación se hará en base al siguiente diagrama esquemático:
Figura 9.39
Dependiendo de las características técnicas del módulo GPS, es posible que éste pueda ser
alimentado directamente de la fuente de 5 voltios que alimenta nuestro circuito, así como
también es posible que debamos incluir en el diseño de nuestro circuito un MAX232 para
acoplar el módulo al microcontrolador. Algunos otros modelos requerirán de un regulador de
voltaje de 3.3 voltios, he incluso podremos prescindir del MAX232, ya que la salida de datos
puede venir diseñada de diferentes maneras en diferentes modelos o marcas.
Con esto queremos dar a entender que siempre será importante estar seguros de cuales
son los parámetros suministrados por el fabricante para su conexionado, puesto que estos
módulos suelen ser muy sensibles a los errores o niveles de voltaje que apliquemos a ellos.
294
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Analice el siguiente programa que a continuación presentamos y lea detenidamente los
comentarios en cada línea:
program GPS_RS232
Dim Datos_RX As Byte[64] ' Arreglo de variables para almacenar los datos del GPS.
Cadena As Byte[184] ' Arreglo de variables para almacenar los cadena completa del GPS.
LCD_Init()
LCD_Cmd(_LCD_CLEAR) ' Limpia la pantalla LCD
LCD_Cmd(_LCD_CURSOR_OFF) ' Apaga el cursor en la pantalla
Recepcion:
do
295
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
verifica_1:
verifica_2:
verifica_3:
verifica_4:
verifica_5:
296
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
GoTo verifica_1 ' Si "i" no ha superado el valor de la cantidad de
End If ' bytes de la Cadena, entonces continúa verificando
' en busca del caracter "G".
verifica_6:
' Una vez identificada la cabecera completa de la sentencia NMEA, procedemos a cargar
' el resto de la información en el arreglo de variables Datos_RX[X]:
Almacena:
Next X
297
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
For X = 13 To 20 ' Hacemos un For-Next debido a que deseamos imprimir
' los siguientes 8 caracteres de la lalitud seguidos, de
' esta forma ahorramos líneas de programación.
Caracter = Datos_RX[X] ' Carga el contenido de la variable deseada en "Caracter"
Lcd_Chr(1, Y, Caracter) ' Escribimos el contenido de la variable "Caracter"
' en la columna "Y" (valor cargado en Y) de la pantalla LCD.
Y = Y + 1 ' Incrementamos el valor de "Y" en una unidad para la
' nueva posición del próximo digito a imprimir.
Next X
End.
298
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
9.6.- Programación en Visual Basic 6.0 para ejemplos de comunicación serial RS232.
Para esto emplearemos el diagrama esquemático de la figura 9.54, a través del cual
podremos observar los datos enviados desde el PC en la pantalla LCD.
Para crear un nuevo proyecto en Visual Basic, debemos empezar haciendo clic en el menú
Archivo Nuevo Proyecto y seleccionamos la opción “EXE estándar” (figura 9.40).
Figura 9.40
Figura 9.41
299
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 9.42
Una vez creado un nuevo proyecto, será importante activar el componente para manejar la
comunicación serial “Microsoft Comm Control 6.0”. Esto se realiza haciendo clic en el menú
Proyectos Componentes Controles.
Figura 9.43
300
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 9.44
Figura 9.45
301
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Seguidamente haga doble clic sobre el formulario para visualizar la ventana de código en la
cual introduciremos las siguientes líneas de programa, las cuales se encargarán de abrir el
puerto serial del PC (Figura 9.48).
Figura 9.48
Figura 9.49
302
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Para cambiar el nombre del botón, busque la celda “Caption” en la ventana de propiedades
del mismo (ver figura 9.50):
Figura 9.50
Este procedimiento se repite hasta lograr obtener un formulario con 12 botones debidamente
identificados como se observa en la figura 9.51:
Figura 9.51
Figura 9.52
303
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Se repite el paso anterior para el resto de los botones:
Por último, haga clic en el botón “Iniciar” (ver figura 9.53), para hacer funcionar el teclado
3x4 desde el cual se enviarán datos hacia el microcontrolador.
Al hacer clic en cualquiera de los botones del teclado, estará enviando al microcontrolador el
dato correspondiente (Valor equivalente al caracter ASCII en la tecla)b el cual podrá ser
observado en la pantalla LCD de su circuito.
Figura 9.53
304
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Por último, generamos el archivo ejecutable desde el menú Archivo Generar “Nombre del
archivo.exe”
Recepcion:
Else
End If
Imprime:
End.
305
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Básicamente el microcontrolador estará esperando un dato desde el PC el cual será
mostrado en la segunda línea de la pantalla LCD.
Al presionar cualquiera de las teclas del módulo que hemos realizado en Visual Basic, el
caracter correspondiente aparecerá en la pantalla para luego quedar a la espera del
siguiente dato.
Figura 9.54
306
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Del capítulo de conversión A/D podemos extraer el programa base para llegar al objetivo de
este ejercicio. Lo único que tendremos que hacer será agregar una rutina para transmitir vía
RS232 el resultado de la conversión A/D hacia el PC.
Antes de realizar la programación en Excel, vamos a realizar las pruebas de conversión A/D
mostrando los resultados en la pantalla LCD y en el terminal de comunicaciones de
mikroBasic.
program RS232_A/D
Dim texto As String[20] ' Declaramos una variable tipo String en la cual
' cargaremos un mensaje de un máximo de 20 caracteres.
Dim dato As Word ' Variable de 16 bits para cargar el valor de la
' conversión A/D.
Dim DatoStr As string[4] ' Variable para conversión datos.
main:
While (TRUE)
307
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
UART1_Write_Text(DatoStr) ' Enviamos el dato vía RS232.
Wend
End.
Figura 9.55
Un paso importante en este punto, una vez obtenido el resultado de la conversión A/D en la
pantalla LCD, será verificar la transferencia de datos hacia el PC con la ayuda de la terminal
de comunicaciones de mikroBasic.
308
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
En la siguiente imagen podemos ver los datos capturados por el PC desde la ventana de
recepción en la terminal:
Figura 9.56
Pero la idea principal de esta práctica, será llevar estos datos a una hoja de Excel, en la cual
podamos realizar los cálculos para expresar estos valores en unidades de voltaje para
luego tomar una muestra significativa y graficarlos como se observa en la figura 9.57.
309
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 9.57
El primer paso para configurar la hoja de Excel, será ubicar las herramientas de Visual Basic
y agregar a la hoja de cálculo el control “Microsoft communications control, Version 6.0”.
Para esto debemos seguir los siguientes pasos:
1.- Al abrir la hoja de cálculo, podemos ver un menú de opciones en la parte superior de la
ventana denominado “Herramientas”. Haga clic en el menú “Herramientas” y seleccione la
opción “Personalizar”.
310
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 9.58
Al seleccionar esta opción podrá observar que en la ventana “Personalizar” hay tres fichas
de configuración. Seleccione la ficha “Barra de herramientas” como se muestra en la figura
9.59.
Figura 9.59
311
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
En esta ficha encontrará una serie de opciones disponibles, de las cuales deberá
seleccionar “Visual Basic”. Haga clic en al botón “Cerrar” y verá que aparece en la hoja de
cálculo una caja de herramientas nueva llamada “Visual Basic” (Figura 9.60), la cual
podemos trasladar a la parte superior de la hoja de cálculo, la cual contiene el resto de las
herramientas típicas usadas en Excel (Figura 9.61).
Figura 9.60
312
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 9.61
313
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 9.62
En esta serie de botones, podremos encontrar uno denominado “Mas controles” (ver
Figura 12.35), el cual despliega una lista de opciones. Ubique el siguiente control:
“Microsoft communications control, Version 6.0”.
Al hacer doble clic en este control la lista de opciones desaparece y es en este momento en
el cual debemos agregar el mismo sobre la hoja de cálculo. Para esto, debe mantener el
botón izquierdo del mouse activado y arrastrar el puntero hasta que aparezca un pequeño
recuadro. Al soltar el botón izquierdo el control aparece sobre la hoja. La figura de un
Teléfono sobre un “MODEM” lo identifica claramente, como se muestra en la figura 9.63.
314
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 9.63
El siguiente paso será agregar un botón en el cual se configura el código necesario para la
apertura del puerto serial en el PC (Figura 9.64).
Figura 9.64
315
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Al hacer doble clic sobre el nuevo botón, estamos entrando al editor de Visual Basic, en el
cual podemos agregar las siguientes líneas de programa, las cuales permitirán abrir el
puerto al hacer clic sobre el botón que hemos agregado para tal fin:
Figura 9.65
316
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
En figura 9.65 también podemos apreciar las líneas de programación agregadas al botón de
comando, y el icono que nos permitirá regresar a la hoja de cálculo para continuar con la
programación.
Figura 9.66
Ahora solo nos queda configurar el evento OnComm, relativo a la recepción de datos,
haciendo doble clic sobre el control de comunicaciones (figura 9.67):
Figura 9.67
317
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Veremos a continuación la ventana del editor de Visual Basic (Figura 9.68):
Figura 9.68
La variable “Apuntador” será declarada como “Byte” y la variable “datainput” será declarada
como “String”.
datainput = MSComm1.Input
Luego para llevar el dato almacenado en la variable a una celda en la hoja de cálculo,
podemos utilizar el siguiente comando:
Hoja1.Cells(Fila, Columna)
Un punto importante a considerar es que la variable “datainput” por estar declarada como
“String”, almacenará una serie de datos consecutivos uno tras otro. Podemos extraer un
dato de la cadena de caracteres almacenada en la variable “datainput” de la siguiente
manera:
Ejemplo:
Si datainput = 643645650681701718745776
Para extraer los tres primeros caracteres y llevarlos por ejemplo a la celda (40,2) debemos
hacer el siguiente arreglo:
Hoja1.Cells(40, 2) = Mid(datainput, 1, 3)
Para mantener este dato y capturar uno mas actualizado, simplemente debemos hacer un
arreglo para desplazar el contenido de la celda (40,2) a la celda (39,2). Cuando llegue el
próximo dato actualizado, el contenido de esta celda deberá pasar a la celda (38,2) y así
sucesivamente. Al repetir el desplazamiento de celdas diez veces, podremos tomar estos
valores y graficarlos en la hoja de cálculo.
'Declara variable
datainput = MSComm1.Input
For Apuntador = 30 To 40
Hoja1.Cells(Apuntador, 2) = Hoja1.Cells(Apuntador + 1, 2)
Next
319
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Hoja1.Cells(40, 2) = Mid(datainput, 1, 4)
End Sub
Figura 9.69
Completados todos estos pasos, lo siguiente será volver a la hoja de cálculo y salir del modo
de diseño, haciendo clic en el icono señalado en la siguiente figura:
Figura 9.70
320
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Cuando se sale del modo de diseño, el control de comunicaciones desaparece de la hoja de
cálculo. Ahora, haciendo clic en el botón “Abrir Comm1” y activando el circuito, podremos ver
que aparecen los datos de la conversión A/D del microcontrolador en la pantalla LCD y en la
hoja de cálculo, específicamente en las celdas B40, B39, B38, B37, B36, B35, B34, B33,
B32, B31 y B30.
En la figura 9.71 se pueden ver unos datos de prueba almacenados en las celdas
anteriormente mencionadas. Estos datos pueden ser identificados poniendo un nombre o
encabezado en la celda B29, por ejemplo, podemos escribir la palabra “Lecturas: “.
321
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 9.71
Figura 9.72
322
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Observe en la figura 9.72, la formula para la celda C40. Observe también que hemos
ocultado una serie de filas de la hoja de cálculo, las cuales hemos reservado para agregar
un gráfico de líneas suavizadas.
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 Gráficos” (Figura 9.73), donde
aparecerá una ventana en la cual podremos elegir el tipo de gráfico que deseamos utilizar.
Seleccione la ficha “Tipos personalizados” y haga clic en la opción “Líneas suavizadas” de la
lista (Figura 9.74).
Figura 9.73
Figura 9.74
323
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
En la siguiente ventana podemos ver el rango de datos que será graficado (Figura 9.75):
Figura 9.75
Si se desea personalizar aún mas el gráfico, se puede hacer en la ficha “Serie”, en cual es
posible editar el recuadro que contiene la leyenda. En la siguiente ventana encontraremos
una serie de fichas con una gran variedad de opciones que nos permitirán añadir detalles
como el título del gráfico, identificar los ejes, agregar líneas de división, y algunos otros
detalles útiles para mejorar la apariencia del gráfico. (figura 9.76).
Figura 9.76
324
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Seguidamente, podemos seleccionar si el gráfico será colocado en una hoja nueva, o en la
hoja de cálculo en la cual hemos estado trabajando (figura 9.77):
Figura 9.77
Finalmente podremos ver en la hoja de Excel los datos enviados desde el microcontrolador,
los cuales a su vez serán graficados constantemente, como se puede observar en la figura
9.78
Figura 9.78
325
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Capítulo X. Multi Media Card (MMC) y Secure Card (SD) Memory
Por ejemplo, podemos crear archivos de texto, cuya extensión es bien conocida
“.txt”, abrirlos desde el bloc de notas de Windows y extraer los datos que han
sido descargados en él, todo procesado desde un principio por nuestros circuitos
basados en microcontroladores PIC de la familia 18.
Antes de iniciar el estudio del sistema de archivos FAT, veamos como almacenar
datos en sectores específicos de una tarjeta de memoria SD.
10.1.1.- Mmc_Init().
10.1.2.- Mmc_Read_Cid().
Lee los 16 bytes del registro CID de la tarjeta de memoria. Significado del
acrónimo CID: Card IDentification.
10.1.3.- Mmc_Read_Csd().
Lee los 16 bytes del registro CSD de la tarjeta de memoria. Significado del
acrónimo CSD: Card Specific Data.
326
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
10.1.4.- Mmc_Write_Sector().
10.1.5.- Mmc_Read_Sector().
El registro CID posee información que podría ser útil, dependiendo de la aplicación que
vamos a querer dar a nuestros circuitos. Veamos a continuación como sustraer el contenido
del registro CID, con un ejemplo sencillo y muy fácil de entender.
El registro CID esta compuesto por 16 Bytes, significa entonces que tenemos 128 bits los
cuales se descomponen según se especifica en la siguiente tabla:
Figura 10.1
OIM/Application ID (OID): Son dos caracteres ASCII que identifican la tarjeta de memoria. El
OID es asignado a un fabricante de tarjetas por el SD-3C, LLC. Para SanDisk, al leer el
registro CID tenemos que estos dos bytes se corresponden con los caracteres “SD”.
327
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Product Name (PNM): Esta conformado por 5 caracteres ASCII. Los dos primeros identifican
el tipo de memoria (SD), los tres últimos identifican la capacidad de la tarjeta de memoria.
Por ejemplo, para una tarjeta SanDisk de 2 GB de capacidad, el nombre del producto (PNM)
seria: SD02G.
Product Revision (PRV): Representa el número de revisión del producto. Está codificado en
BCD y su formato “n.m” seria el siguiente: Revisión Numero “8.0”, es decir, 1000 0000b
Product Serial Number (PSN): Son 32 bits del registro CID, que expresan el serial del
producto.
CRC7 Checksum: Es una suma de verificación para proteger la integridad de los datos.
Para extraer los datos del registro CID de la memoria MMC, hemos elaborado un sencillo
programa que almacena la cadena de caracteres del mismo, y seguidamente envía el
contenido de cada variable por el puerto serial (RS232) del microcontrolador al
HyperTerminal de MikroBasic.
Para definir el pin “CS” en nuestros programas, siempre será necesario declaras
las siguientes líneas al inicio:
328
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Estas líneas de programa configuran el pin seleccionado para el “CS” o chip
select, que en nuestro caso será RC2. La selección del dispositivo MMC se da
cuando RC2 es igual a “0”.
!
!
La memoria fue encontrada, por lo cual podremos realizar el procedimiento
Correspondiente a la extracción de datos del Registro CID en este espacio.
!
!
Entonces enviamos un mensaje de error, por ejemplo: “Memoria no Encontrada!”
End If
329
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Diagrama Esquemático del Circuito:
Figura 10.2
main:
330
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
' Inicializamos la tarjeta de memoria SD:
For i = 0 To 15
Uart1_Write(dataBuffer[i]) ' Envia el contenido cargado en la variable
Next i ' "dataBuffer" por el puerto serial (USART).
End If
End.
Figura 10.3
331
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Recuerde también establecer los parámetros o ajustes del proyecto haciendo clic
en el botón “Default”, como lo muestra la siguiente imagen:
Figura 10.4
Para ver los datos enviados desde el puerto serial del microcontrolador, utilice el
terminal de comunicaciones de mikroBasic. Esta ventana la podemos desplegar
utilizando el acceso rápido “Ctrl-T”, o a través del menú “Tools”, como se
muestra en la siguiente imagen:
Figura 10.5
332
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Recuerde configurar los parámetros de comunicación del puerto serial que tenga
disponible en su PC, asi como la velocidad de transmisión, la cual deberá ser de
9600 bps, ya que en el ejemplo propuesto la hemos declarado así:
Figura 10.6
333
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Si seleccionamos el formato ASCII, y la tarjeta de memoria SD no se encuentra
insertada en el circuito, podremos ver el mesaje de error definido por nosotros
en nuestro programa, “Memoria no Encontrada”. Este mensaje se repetirá cada
segundo hasta que insertemos la tarjeta de memoria SD.
Figura 10.7
334
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Veamos ahora el mismo mensaje en formato hexadecimal:
Figura 10.8
335
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 10.9
336
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Al hacer la conversión de decimal a hexadecimal, tenemos que: 101 0x65
Figura 10.10
337
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Seguidamente en el segundo recuadro, se observa la cadena de caracteres que
representan los datos extraídos del registro CID, en hexadecimal. Esta cadena de
caracteres se repite cada segundo (tercer recuadro), mientras la tarjeta de
memoria esté presente, tal y como lo habíamos definido en nuestro programa.
0x03 0x53 0x44 0x53 0x44 0x30 0x32 0x47 0x80 0x50 0x19 0xA9 0x59 0x00 0x85 0x13
MID OID OID PNM PNM PNM PNM PNM PRV PSN PSN PSN PSN MDT MDT CRC
SN: 01010000000110011010100101011001
Dec: 1343859033
Hex: 5019A959
338
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Para mayor facilidad en la conversión de datos, puede utilizar la herramienta de
conversión disponible en mikroBasic:
Figura 10.11
En este punto, ya hemos visto como inicializar la tarjeta de memoria SD, y cómo
extraer la cadena de caracteres del registro CID.
339
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
10.3.- Registro CSD Versión 2.0.
Este registro nos ofrece información útil acerca de la tarjeta de memoria que estaremos
utilizando en nuestros proyectos. Los valores cargados en la siguiente tabla corresponden al
registro CSD de la tarjeta de memoria que hemos utilizado para este estudio, y los cuales
obtendremos mas delante de una forma práctica a través de un ejemplo explicado paso a
paso.
Veamos a continuación la siguiente tabla de datos, he interpretemos cada uno de ellos para
saber cual es su función sobre la memoria SD:
Figura 10.12
340
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
• TAAT: Define la parte asíncrona del tiempo de acceso a los datos. En este
caso, el valor obtenido con nuestra tarjeta de memoria SD ha sido 0x26, lo
cual equivale a un tiempo de acceso a los datos de 1.5 ms.
Bit 2 al 0 Unidades:
0=1ns, 1=10ns, 2=100ns, 3=1μs, 4=10μs,
5=100μs, 6=1ms, 7=10ms
Bit 6 al 3 Valores:
0 = reservado, 1=1.0, 2=1.2, 3=1.3, 4=1.5, 5=2.0,
6=2.5, 7=3.0, 8=3.5, 9=4.0, A=4.5, B=5.0, C=5.5,
D=6.0, E=7.0, F=8.0
Bit 7 Reservado
Figura 10.13
Tenemos que el valor TAAT obtenido al leer el registro CSD fue: 26h
NSAC: Este campo es fijado en 00h. NSAC no debería ser usado para calcular
valores de intervalo de espera.
341
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Posición del Bit en TAAT Valor y Unidad
Bit 2 al 0 Unidades:
0=100kbit/s, 1=1Mbit/s, 2=10Mbit/s,
3=100Mbit/s, 4... 7=reserved
Bit 6 al 3 Valores:
0 = reservado, 1=1.0, 2=1.2, 3=1.3, 4=1.5,
5=2.0, 6=2.5, 7=3.0, 8=3.5, 9=4.0, A=4.5,
B=5.0, C=5.5, D=6.0, E=7.0, F=8.0
Bit 7 Reservado
Figura 10.14
READ_BL_LEN
READ_BL_LEN: La longitud máxima de lectura es 2 . Este valor debe
estar siempre entre 512 y 2048 bytes. En una memoria SD, READ_BL_LEN y
WRITE_BL_LEN siempre son iguales.
Figura 10.15
342
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
READ_BL_PARTIAL: Este valor siempre es igual a “1” en una memoria SD.
Esto significa que los bloques mas pequeños (1 byte) también pueden ser
utilizados.
C_SIZE: Este parámetro es usado para calcular la capacidad del área de datos
de usuario en una tarjeta de memoria SD, y no incluye el área protegida. Para
calcular este valor, tenemos la siguiente fórmula:
ERASE_BLK_EN: Este valor siempre es igual a “1”, lo cual significa que puede
borrar bloques múltiples de 512 bytes.
SECTOR_SIZE: Este campo es fijado en 7Fh, es decir, 64K bytes. Este valor no
esta relacionado con la operación de borrado.
WRITE_BL_LEN
WRITE_BL_LEN: Máxima longitud de escritura: 2 .
343
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
TMP_WRITE_PROTECT: Protege temporalmente el contenido de sobre-
escritura o borrado, todos los comandos para escritura o borrado de la tarjeta
son “temporalmente” deshabilitados. Este Bit puede ser seleccionado o
reiniciado. El valor por defecto es “0”, es decir, la No escritura está deshabilitada.
0 3 Otros – Desconocidos.
1 0, 1, 2, 3 Reservado.
Figura 10.16
344
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
10.3.1.- Ejemplo de programación #57:
program RegistroCid
main:
For i = 0 To 15
Uart1_Write(dataBuffer[i]) ' Envia el contenido cargado en la variable
Next i ' "dataBuffer" por el puerto serial (USART).
End If
End.
345
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Este es el resultado con nos ha dado con la tarjeta de memoria SD que hemos
utilizado para la prueba:
Figura 10.17
Los datos dentro del segundo recuadro corresponden al registro CSD, y los datos
en el tercer recuadro son la repetición del mismo:
346
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
0x00 0x26 0x00 0x32 0x5F 0x5A 0x83 0xC9 0x3E 0xFB 0xCF 0xFF 0x92 0x80 0x40 0xCB
Bit 127 Bit 0
00000000 00100110 00000000 00110010 01011111 01011010 10000011 11001001 00111110 11111011 11001111 11111111 10010010 10000000 01000000 11001011
READ_BL_PARTIAL: 79 --> 1
WRITE_BLK_MISALIGN: 78 --> 0
READ_BLK_MISALIGN: 77 --> 0
Reservado: 47 --> 1
ERASE_BLK_EN: 46 --> 1
WP_GRP_ENABLE: 31 --> 1
WRITE_BL_PARTIAL: 21 --> 0
FILE_FORMAT_GRP: 15 --> 0
COPY: 14 --> 1
PERM_WRITE_PROTECT: 13 --> 0
TMP_WRITE_PROTECT: 12 --> 0
347
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
En la descripción anterior, la primera columna corresponde al “nombre” en la
tabla de la figura 10.12. La segunda columna corresponde al número de bit en la
cadena de datos obtenida, y la tercera columna corresponde a los datos
asociados a cada bit.
10.4.- WinHex.
Figura 10.18
348
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Para realizar las siguientes pruebas, debemos contar con una unidad de lectura
de memorias SD en nuestro computador. Normalmente podemos encontrar estas
unidades de lectura en el mercado como una unidad externa USB, cuando de
computadoras tipo “DeskTop” se trata (Figura 10.19).
Figura 10.19
Figura 10.20
349
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Seleccionada esta opción, veremos la siguiente ventana, la cual muestra los
volúmenes disponibles en el sistema:
Figura 10.21
350
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 10.22
En este punto será bueno recordar que el tamaño de un sector puede variar
entre 0,5K bytes y 64K bytes. Comúnmente podremos encontrar que el tamaño
estándar de un sector es de 512 bytes, y este es el caso en este ejemplo.
351
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 10.23
Figura 10.24
Esta herramienta resulta muy útil cuando tenemos una gran cantidad de datos
almacenados en nuestra memoria SD, posiblemente provenientes de dispositivos
periféricos que suministrarán datos importantes para algún propósito específico.
352
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
10.4.1.- Ejemplo de programación #58:
Los datos a cargar son los siguientes, iniciando desde la posición 0 del sector #2:
353
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Las posiciones 24 a la 31 serán igualadas a 0 en el programa.
354
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Analicemos el siguiente programa:
program Mmc_Write_Sector
main:
355
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
dato[48] = 0x77 ' W
dato[49] = 0x72 ' r
dato[50] = 0x69 ' i
dato[51] = 0x74 ' t
dato[52] = 0x65 ' e
For i = 70 To 511
dato[i] = 0
Next i
End If
fin:
GoTo fin ' Lazo infinito.
End.
356
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Analizando el programa anterior, podemos observar que:
• Escribimos los 512 bytes del sector # 2 con los datos cargados en las
variables.
• Enviamos un mensaje final por el puerto serial para saber que el proceso
de grabación de datos ha culminado.
357
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
El resultado de este análisis, al buscar la información directamente en el sector
#2 en WinHex será el siguiente:
Figura 10.25
358
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
10.4.2.- Ejemplo de programación #59:
Mmc_Read_Sector(Sector, Datos)
program Mmc_Read_Sector
main:
Else
359
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
GoTo main ' Salta a la etiqueta "main".
End If
fin:
GoTo fin ' Lazo infinito.
End.
• Re-escribir un archivo.
• Borrar un archivo.
Iniciamos esta interesante parte del libro comentando que cuando vamos a
emplear tarjetas de memoria MMC/SD en nuestros proyectos, existen ciertas
reglas que debemos tener siempre en mente a la hora de realizar nuestros
programas. Una de ellas siempre será la inicialización del módulo SPI y de la
tarjeta de memoria.
360
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Todos los ejemplos a continuación estarán basados en el microcontrolador
PIC18F458, conectado como se muestra en el siguiente diagrama esquemático:
Figura 10.26
En este punto, sabemos como inicializar y re-inicializar el módulo SPI para una
comunicación a alta velocidad entre el microcontrolador y el dispositivo
conectado al bus SPI que en este caso es una tarjeta de memoria SD. Pero
cuando se trata del sistema de archivos FAT16, la inicialización de la tarjeta se
debe hacer con la siguiente rutina de programación:
10.5.1.- Mmc_Fat_Init()
Esta rutina nos devolverá tres posibles estados los cuales describiremos a
continuación:
361
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
• 255, si la tarjeta de memoria no ha sido detectada.
Siempre será conveniente para nuestros diseños incluir un condicional que nos
permita tomar una decisión en caso de presentarse uno de estos tres estados.
Un ejemplo de ello sería determinar a través de un condicional si la tarjeta de
memoria se encuentra conectada e inicializada correctamente:
main:
.
.
If (Mmc_Fat_Init() = 0) Then
.
.
Rutina principal
.
.
Else
.
Mensaje de Error, por ejemplo: “No se ha insertado la Memoria”
.
End If
.
GoTo main
Para dar formato FAT a la tarjeta de memoria MMC/SD desde nuestro circuito y
no desde el computador, contamos una rutina dentro de la librería MMC/SD de
mikroBasic:
10.5.2.- Mmc_Fat_QuickFormat(“Etiqueta”)
Esta rutina es capaz de inicializar y dar formato FAT a una tarjeta de memoria
asignando una etiqueta o nombre a la unidad de memoria. Al igual que la rutina
anterior, no devuelve los tres posibles estados comentados anteriormente:
362
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
El campo “Etiqueta” dentro de la rutina se encarga de dar un nombre o
“Etiqueta” a la unidad de almacenamiento, y el mismo no debe tener más de 11
caracteres.
Figura 10.27
363
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
10.5.3.- Ejemplo de programación #60:
main:
End If
End.
364
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Analizando el programa, podemos observar que:
• Enviamos un mensaje que nos indique que ya esta listo el formato FAT en
la unidad.
Figura 10.28
365
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 10.29
Figura 10.30
366
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
10.5.4.- Cómo crear un Archivo en una tarjeta de memoria SD.
Para lograr que el nombre del archivo obedezca a esta regla, debemos cargar el
campo “nombre del archivo” de la función, con la siguiente cadena de caracteres:
ARCHIVO1TXT
Entonces, si deseamos crear un archivo con un nombre mas corto, pero con la
misma extensión “.TXT”, por ejemplo, “DATOS.TXT”, la cadena de caracteres a
cargar en el campo “nombre del archivo” de la función será:
DATOSTXT
DATOS.TXT
367
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
El campo “Atributos del archivo” de la función es muy importante a la hora de
crear un nuevo archivo. Este define cuales atributos debe tener nuestro archivo,
y se rige bajo la siguiente tabla de datos:
Figura 10.31
Observando la tabla, podemos ver que este campo lo ocupa una palabra de 8
bits, es decir, 1 byte:
Figura 10.32
Bit 5: Este bit corresponde al atributo “Archivo”. Un archivo que no tenga este
atributo activo, nos indica que el mismo nunca ha sido modificado desde su
creación. Una vez modificado el archivo, veremos automáticamente activo este
atributo.
Bit 2: Cuando activamos este bit (“1”), o atributo, podremos ver que el archivo
se convierte en un “archivo de sistema”.
368
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Bit 1: Este bit corresponde a la propiedad o atributo de archivo oculto. Al activar
este bit (“1”), el archivo no podrá ser visualizado en el directorio.
Bit 0: Este atributo protege a un archivo contra escritura. Si el bit está activo
(“1”), el archivo será de “Sólo lectura”.
Figura 10.33
main:
If (Mmc_Fat_Init() = 0) Then
Mmc_Fat_Assign(filename, 0x81)
369
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Else ' Si la tarjeta no esta insertada:
End.
• Declaramos una variable tipo “String” para el nombre del archivo, la cual
hemos llamado “filename”.
370
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Es siguiente paso será explorar la tarjeta de memoria en nuestro PC. Este será el
resultado:
Figura 10.34
371
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 10.35
372
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
10.5.7.- Ejemplo de programación #62:
Ahora cambiemos los atributos del archivo, haciendo que éste sea de “Sólo
lectura” y “Archivo Oculto”.
Figura 10.36
main:
If (Mmc_Fat_Init() = 0) Then
Mmc_Fat_Assign(filename, 0x83)
373
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Uart1_Write_Text("Memoria no Encontrada") ' Mensaje de error.
UART1_Write(13) ' LF = Line Feed, es decir, Salto de Linea.
UART1_Write(10) ' CR = Carriage Return, es decir, mueve el cursor a la
' primera posición de la linea.
delay_ms(1000) ' Retardo de 1 segundo.
End.
Mmc_Fat_Assign(filename, 0x83)
Figura 10.37
374
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
En la imagen anterior, no es posible ver el archivo, aunque sabemos que lo
hemos creado. Sin embargo, la ventana del explorador nos indica que tenemos
un archivo oculto disponible.
Figura 10.38
375
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Al aceptar este cambio y verificar nuevamente el contenido de la tarjeta de
memoria, podremos ver el archivo oculto y sus atributos, como se demuestra en
las dos siguientes imágenes:
Figura 10.39
Figura 10.40
376
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
10.5.8.- Ejemplo de programación #63:
Figura 10.41
program Formato_FAT
main:
If (Mmc_Fat_Init() = 0) Then
Mmc_Fat_Assign(filename, 0x90)
End.
Figura 10.42
378
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
10.5.9.- Ejemplo de programación #64:
Figura 10.43
main:
If (Mmc_Fat_Init() = 0) Then
Mmc_Fat_Assign(filename, 0xA0)
379
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
fin: GoTo fin ' Lazo Infinito
End.
Observe que los cambios realizados, al igual que en ejemplo anterior, han sido el
campo “Atributo” y el mensaje de confirmación.
Figura 10.44
380
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
10.6.- Ingresar datos en un archivo almacenado en la memoria SD.
Por ejemplo:
Para lograr este objetivo, el primer paso será realizar la declaración de algunas
variables adicionales:
End sub
381
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Luego, en la rutina principal del programa agregamos un mensaje de espera, a
ser enviado por el puerto serial del microcontrolador al terminal de
comunicaciones, para saber que el microcontrolador está listo para recibir los
datos desde el PC, y seguidamente agregamos la rutina para recolectar los
mismos en las variables previamente definidas.
do
Mmc_Fat_Write(cadena, 41)
program Mmc_Fat_Write
382
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
' se queda en el lazo esperando.
result = UART1_Read ' Lee el dato en la USART y lo carga en la
' variable "LeerCaracter".
End sub
main:
do
If (Mmc_Fat_Init() = 0) Then
Mmc_Fat_Assign(filename, 0xA0)
Mmc_Fat_Write(cadena, 41)
End.
383
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Al compilar y grabar el programa en el microcontrolador, se podrá observar en el
terminal de comunicaciones de mikroBasic, el mensaje “Esperando Datos…”. Si el
microcontrolador inició antes de abrir el terminal, entonces no podremos ver el
mensaje. Bastará con reiniciar el microcontrolador para poder visualizar el
mensaje en la ventana de recepción de datos del terminal. Recuerde también
seleccionar el modo “ASCII” en esta ventana.
Para realizar esta tarea, contamos con un campo en el terminal para escribir la
cadena que deseamos enviar al microcontrolador, tal y como se muestra es la
siguiente imagen:
Figura 10.45
384
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Reiniciando el microcontrolador, el mensaje a visualizar en el terminal es el
siguiente:
…y finaliza el programa.
Figura 10.46
385
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Para verificar el contenido del archivo, hacemos doble clic sobre el mismo y este
deberá ser el resultado final:
Figura 10.47
Veamos ahora como asignar “Fecha y Hora” al archivo creado. Para esto,
mikroBasic cuenta con la siguiente función:
Los parámetros válidos a cargar en esta función para la fecha y hora son los
siguientes:
Horas: 0 al 23.
Minutos: 0 al 59.
Segundos: 0 al 59.
386
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
En el mismo programa utilizado en el ejemplo anterior, crearemos las variables
correspondientes a cada campo de la función, para cargar los valores de fecha y
hora en el archivo. Las variables serán declaradas de la siguiente manera:
Anio As Word
Mes As Byte
Dia As Byte
Horas As Byte
Minutos As Byte
Segundos As Byte
Luego cargamos los valores en las variables, en la rutina principal del programa:
Anio = 2008
Mes = 1
Dia = 1
Horas = 12
Minutos = 30
Segundos = 0
Por último, agregamos la función para asignar la fecha y la hora al archivo, justo
después de la función “Mmc_Fat_Assign”:
.
.
Mmc_Fat_Assign(filename, 0xA0)
program Mmc_Fat_Fecha_Hora
387
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Anio As Word
Mes As Byte
Dia As Byte
Horas As Byte
Minutos As Byte
Segundos As Byte
main:
Anio = 2008
Mes = 1
Dia = 1
Horas = 12
Minutos = 30
Segundos = 0
do
If (Mmc_Fat_Init() = 0) Then
Mmc_Fat_Assign(filename, 0xA0)
388
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Mmc_Fat_Write(cadena, 41)
End.
Figura 10.48
389
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
10.8.- Verificar si un archivo de nombre específico existe.
Aparte de usar esta función para crear un archivo con ciertos atributos activos,
también puede ser utilizada para verificar si un archivo ya existe en la memoria.
• 0, si el archivo no existe.
• 1, si el archivo existe.
390
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
3. Si el archivo no se encuentra presente en el directorio raíz, recibiremos el
mensaje “Archivo no encontrado…”.
program Formato_FAT_Insertar_Datos
main:
If (Mmc_Fat_Init() = 0) Then
Uart1_Write_Text("Archivo encontrado...")
Uart1_Write(13) ' LF = Line Feed, es decir, Salto de Linea.
Uart1_Write(10) ' CR = Carriage Return, es decir, mueve el cursos a la
' primera posición de la linea.
Else
' El archivo no ha sido encontrado:
Uart1_Write_Text("Archivo no encontrado...!")
Uart1_Write(13) ' LF = Line Feed, es decir, Salto de Linea.
Uart1_Write(10) ' CR = Carriage Return, es decir, mueve el cursos a la
' primera posición de la linea.
End If
391
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
fin: GoTo fin ' Lazo Infinito
End.
Los pasos son básicamente los mismos en la rutina principal del programa:
392
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
10.9.- Insertar datos en un archivo existente.
Mmc_Fat_Append()
Los pasos para añadir más datos a un archivo existente serían los siguientes:
program Mmc_Fat_Append
393
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Anio As Word
Mes As Byte
Dia As Byte
Horas As Byte
Minutos As Byte
Segundos As Byte
espacio_en_blanco As string[1]
main:
Anio = 2008
Mes = 1
Dia = 2
Horas = 19
Minutos = 50
Segundos = 0
do
If (Mmc_Fat_Init() = 0) Then
Uart1_Write_Text("Archivo encontrado...")
Uart1_Write(13) ' LF = Line Feed, es decir, Salto de Linea.
Uart1_Write(10) ' CR = Carriage Return, es decir, mueve el cursos a la
' primera posición de la linea.
394
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
' Asignamos Fecha y Hora al Archivo CADENA.TXT:
Mmc_Fat_Append()
Else
Uart1_Write_Text("Archivo no encontrado...!")
Uart1_Write(13) ' LF = Line Feed, es decir, Salto de Linea.
Uart1_Write(10) ' CR = Carriage Return, es decir, mueve el cursos a la
' primera posición de la linea.
End If
delay_ms(1000)
GoTo main
End.
395
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
• Si la memoria se encuentra insertada y enviamos la cadena de caracteres
(“Cadena de caracteres de prueba número 1”), el mensaje será “Archivo
encontrado” y seguidamente “Datos insertados en el archivo”. Un segundo
después tendremos nuevamente el mensaje “Esperando Datos…”.
Un archivo con datos separados por comas podría ser muy útil para nuestros
proyectos, ya que este formato puede ser asociado a una hoja de cálculo de
Microsoft Excel. En este caso, la extensión del archivo a definir tendría que ser
“.CSV” para que esta aplicación de Microsoft lo reconozca como tal.
396
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Capítulo XI. Servomotores
397
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 11.1
Para controlar la posición 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 posición,
siempre y cuando el tren de pulsos esté presente. El recorrido será en la mayoría de los
modelos de 180º y los tiempos correspondientes al pulso en la señal para las posiciones
principales (0º, 90º y 180º) se especifican en la figura 11.2. (Estos tiempos pueden variar de
acuerdo al modelo y marca del servomotor).
Figura 11.2
398
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Entonces, si deseamos llevar el eje a 0º, se deben introducir al servomotor pulsos de 0.6
milisegundos (T1) aproximadamente, cada 20 milisegundos, como se muestra en la figura
11.3. T2 corresponde por consiguiente al tiempo que debemos esperar para enviar un nuevo
pulso, el cual mantiene actualizada la posición de eje. El tiempo T2 puede estar dentro del
rango 10 ms ≤ T2 ≤ 40 ms.
Figura 11.3
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 11.4 se puede observar la señal
correspondiente a esta posición (90º), donde T2 se mantiene en 20 milisegundos.
Figura 11.4
399
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 11.5
Figura 11.6
400
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
program Servo1
Centro:
End.
Figura 11.7
Volt/Div: 2V
Time/Div: 5ms
Período: 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
Al aplicar el tren de pulsos al servomotor, su eje rotará hasta una posición en el punto medio
de su recorrido total.
401
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Si analizamos el programa, podremos observar que la instrucción “Delay_Us” realiza una
parada durante un tiempo definido, cuyo valor es de 1500, es decir, se está generando una
pausa de 1500 microsegundos, o 1,5 milisegundos.
Entonces, si deseáramos modificar el ángulo de giro, podemos cambiar el valor del tiempo
en T1, siempre y cuando el valor esté dentro del rango de tiempo permitido (0,65 ms≤ T1 ≤
2.6 ms), es decir, 650 ≤ Delay_Us ≤ 2600.
En muchos modelos de servomotores, este rango puede de valores puede ser demasiado
grande. Si este es el caso, sucederá que cuando nos salimos de los límites soportados por
el servomotor, éste no adquiere ninguna posición definida y posiblemente el eje principal del
mismo quede libre.
Por esto es importante que siempre verifiquemos las especificaciones del fabricante.
También podemos hacer un programa en el cual podamos mover el motor en al menos tres
posiciones que consideramos principales:
Figura 11.8
402
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
11.1.2.- Ejemplo de programación #70:
program Servo2
Centro:
Next X
Next X
Next X
End.
403
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Capítulo XII. PWM
12.1.- PWM.
PWM es una abreviación de Pulse Width Modulation, o modulación por ancho de pulso, y es
un método utilizado normalmente para el control de velocidad de motores eléctricos, o para
regular voltajes en fuentes conmutadas entre otras aplicaciones. Este control se lleva a cabo
modificando el ancho de pulso o ciclo de trabajo de la señal generada.
Algunos microcontroladores como los que estamos utilizando en esta edición (PIC16F877,
PIC18F452, entre otros) tienen en su hardware dos módulos CCP (Capture-Compare-PWM).
A través de estos módulos y con la ayuda de la librería PWM de mikroBasic, el trabajo de
generar una señal de modulación por ancho de pulso resulta muy sencillo y rápido.
Figura 12.1
El ciclo de trabajo representa el tiempo que la señal permanece activa. En otras palabras, si
quisiéramos controlar la velocidad en un motor DC, y aplicamos una señal PWM a éste, un
momento o tiempo en alto de la señal significaría que estamos aplicando energía al motor
durante este tiempo, y un momento en bajo significaría que no hay energía aplicada a éste.
404
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
La frecuencia de la señal PWM y el ciclo de trabajo son dos parámetros que pueden ser
controlados a través de las rutinas proporcionadas por la librería PWM de mikroBasic.
También es posible especificar cual de los dos módulos PWM en el hardware del
microcontrolador deseamos utilizar. Cada módulo es independiente, lo cual nos da la libertad
de configurar la frecuencia y ciclo de trabajo de cada uno por separado.
Módulo PWM 1:
12.2.1.- PWM1_Init(“freq”).
Inicializa el módulo PWM1 con un ciclo de trabajo igual a 0. El parámetro “freq” representa la
frecuencia en Hz deseada para la señal de salida PWM. El valor mínimo de la frecuencia
cuando usamos un oscilador externo de 4 Mhz es de 245 Hz. El valor mínimo de la
frecuencia cuando usamos un oscilador externo de 20 Mhz es 1221 Hz. Estos valores se
calculan según las especificaciones de cada microcontrolador en su hoja de datos. En este
caso, hemos tomado la resolución máxima de 10 bits, Timer Prescaler = 16, y el valor del
registro PR2 = 0xFFh.
12.2.3.- PWM1_Start().
Inicia la señal PWM en el módulo PWM1, según su ciclo de trabajo y frecuencia definida.
12.2.4.- PWM1_Stop().
Sólo se debe cambier el indice “n” en las rutinas de la librería “PWMn_” para el control del
módulo PWM2.
• PWM2_Init(“freq”).
• PWM2_Set_Duty(“ciclo de trabajo).
• PWM2_Start().
• PWM2_Stop().
405
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Para calcular el valor que debemos cargar en el parámetro “ciclo de trabajo” en base a un
porcentaje conocido, podemos aplicar la siguiente formula:
255 ∗ Porcentaje
Valor =
100%
255 ∗ 5%
Valor = = 12.75 ≈ 13
100%
Figura 12.2
Si calculamos el valor del ciclo de trabajo para un 50%, la señal se verá de la siguiente
forma:
255 ∗ 50%
Valor = = 127.5 ≈ 128
100%
Figura 12.3
Si calculamos el valor del ciclo de trabajo para un 95%, la señal se verá de la siguiente
forma:
255 ∗ 95%
Valor = = 242.25 ≈ 242
100%
406
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Figura 12.4
Mida el voltaje en la salida PWM del microcontrolador con un multímetro digital. Para
generar un voltaje específico en una de las salidas de un microcontrolador a través de la
instrucción PWM, podemos aplicar la siguiente fórmula:
Vfuente ∗ nivel
Vout =
255
Donde,
407
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
12.2.6.- Ejemplo de programación #71:
Figura 12.5
Verifique el voltaje de salida en el pin RC2 para cada valor calculado del ciclo de trabajo de
la señal PWM.
El siguiente programa genera una señal PWM con un ciclo de trabajo del 50% a través del
pin RC2:
program PWM1
Duty = 127 ' Este valor define el ciclo de trabajo del pulso.
End.
408
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Si deseamos generar dos señales PWM simultáneas, pero con diferentes frecuencias y
ciclos de trabajo, entonces debemos agregar las líneas correspondientes al segundo módulo
PWM:
program PWM2
End.
Las salidas RC2 para PWM1 (Señal Verde), y RC1 para PWM2 (Señal Roja) se verían de la
siguiente forma en un osciloscopio para los valores cargados en las variables Duty1 y Duty2:
Figura 12.6
409
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
12.2.7.- Ejemplo de programación #72:
• P1: Al activar este pulsador, debemos incrementar en una unidad el valor del ciclo de
trabajo de la señal PWM. Esto se traducirá en aumento de la velocidad del motor DC.
• P2: Al activar este pulsador, debemos decrementar en una unidad el valor del ciclo
de trabajo de la señal PWM.
Se deberá inicializar el valor del ciclo de trabajo para que la señal PWM arranque en un 50%
al iniciar el programa.
Figura 12.7
410
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Verifiquemos el siguiente programa, leyendo detenidamente los comentarios en cada línea:
program PWM3
Pulsadores:
If Duty1 > 254 Then ' Fijamos un límite para que la variable no se desborde,
Duty1 = 254 ' es decir, si Duty1 es mayor que el valor límite superior,
End If ' entonces Duty1 deberá permanecer en este valor.
End If
If Duty1 < 1 Then ' Fijamos un límite inferior, es decir, si Duty1 es menor
Duty1 = 1 ' que 1, entonces debe permanecer en este valor.
End If
411
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
End If
GoTo Pulsadores
IniciaPWM:
DetienePWM:
End.
Por último, si pulsamos “P4” el motor deberá parar completamente, debido a que la señal
PWM será interrumpida por el programa.
412
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Apéndice A. Tabla ASCII
413
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Apéndice B Software y prácticas en formato digital.
http://www.conexionelectronica.com/download/Ejemplos.rar
Bibliografía
414
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva
Internet:
• MikroElektronika., http://www.mikroe.com
• Sparkfun., http://www.sparkfun.com
• Wikipedia, http://es.wikipedia.org
Empresas:
MikroElektronika
Višegradska 1A
11000 Belgrade
Address Code: 111701, Europa
http://www.mikroe.com
415
_______________________________________________________________________________________
Contenido - Basic para Microcontroladores PIC – www.conexionelectronica.com – Christian Bodington Esteva