Escolar Documentos
Profissional Documentos
Cultura Documentos
Angel L. Villegas N.
Sistema de Desarrollo para MC, modelo MDK-B28
www.roso-control.com
Teora y Prctica Utilizando el Microcontrolador BASIC Stamp 2p.
Jos M. Rodrguez
ROSO Electric Supply
Angel L. Villegas
Universidad de Carabobo
Editores:
Jos M. Rodrguez
Angel L. Villegas
Teora y Prctica Utilizando el Microcontrolador BASIC Stamp 2p
Los Editores
Prohibida la reproduccin total o parcial de esta obra, por cualquier medio o mtodo sin la autorizacin
escrita los editores. El uso del contenido o de los cdigos de programacin presentados en la obra slo
est permitido para fines educativos y no comerciales, y est limitado a la utilizacin de los productos de
Parallax.
Los autores no son responsables de ningn dao ocasionado a personas o cosas que resulten de una mala
aplicacin de los programas contenidos en este manual. La responsabilidad de tal utilizacin quedar
entendida y aceptada por el lector o usuario de estos cdigos.
Impreso en Venezuela
Contenido
Este texto busca brindarle a los estudiantes de nivel Tcnico-Universitario, las herramientas necesarias para
el desarrollo de aplicaciones y contribuir al mejoramiento de su formacin en el rea de microcontroladores.
Con este ltimo fin, hemos diseado un sistema de desarrollo de altas prestaciones, que contiene todos los
elementos necesarios para la experimentacin con tecnologas de punta.
El sistema de desarrollo MDK-B28 posee una serie de componentes previamente pre-cableados, que incluye
dispositivos de uso frecuente en aplicaciones reales. Entre sus caractersticas encontramos:
Alimentacin de 6.5 a 18 Vdc. Incluye fusible trmico reseteable para proteccin general de equipo y
supresor de tensiones transitorias para proteccin de los circuitos digitales.
Banco de cuatro (4) pulsadores para ser usados como entradas digitales.
Una (1) entrada analgica mediante potencimetro y otra con fotorresistencia.
Ocho (8) salidas digitales mediante LEDs.
Display de 7 segmentos de 4 dgitos.
Bus de expansin de 20 terminales (16 E/S, GND, +5V y Vdc).
Pantalla LCD Serial (Mdulo SLCD-BD de ROSO Electric Supply).
Dispositivos de tecnologa I2C: Memoria EEPROM de 4 kbits y Reloj de Tiempo Real.
Termmetro/Termostato digital con comunicaciones 3-Wire.
Calentador.
Interfaz para motor de pasos, motor DC o relays protegida por fusible trmico reseteable.
Interfaz para 4 servomotores.
Interfaz para dispositivos 1-Wire protegida contra descargas electrostticas de hasta 27Kv.
Altavoz piezoelctrico.
Dispositivos con tecnologa SPI: Controlador de display de 7-seg y ADC de 2 canales (12 bits).
Dos (2) interfases RS232, una para programacin/depuracin y otra de uso general.
Generador de pulsos de frecuencia y ciclo til variables.
Amplificador operacional utilizado como acoplador de impedancia.
Proteccin para todos los terminales de E/S mediante resistencias de 220.
Amplia rea de protoboard de 2.06 x 6.5 ideal para la experimentacin.
Soporte para los microcontroladores: BASIC Stamp 2 y superiores yJavelin Stamp.
Interconexin de todos los componentes mediante regleta de 54 x 4 contactos
El MDK-B28, fue ideado para explotar las caractersticas del microcontrolador BASIC Stamp 2p. Este
microcontrolador, est compuesto por un conjunto de elementos, entre los cuales se encuentra un
microcontrolador intrprete pre-programado por Parallax y una memoria EEPROM donde se guarda el
programa a ejecutar. El BASIC Stamp se programa utilizando un poderoso lenguaje de alto nivel con un
Este trabajo est inspirado en los textos del programa Stamps in Class de Parallax y se compone de 474
pginas distribuidas en 13 captulos, en los cuales se desarrollan 52 ejercicios prcticos y 73 programas.
Todos los captulos comienzan con una recopilacin de conocimientos tericos relacionados con el tema y en
ella se expone la sintaxis de todos los comandos de PBASIC utilizados, explicando de manera detallada el
uso de sus parmetros. Los captulos estn compuestos de varios ejercicios, que buscan determinados
objetivos. Durante el desarrollo de un ejercicio, se elaboran programas de dificultad creciente que explican
como lograr la meta planteada. Para el cabal desarrollo de los ejercicios, usted deber motar el circuito
(interconectado los componentes ya pre-cableados), verificar su funcionamiento, analizar y comprender los
programas e implementar las modificaciones que considere convenientes.
Al final de cada captulo, se encuentra una seccin de evaluacin que puede ser utilizada como herramienta
de auto-aprendizaje. En sta, hallar una serie de preguntas y ejercicios de programacin destinados a retar
los conocimientos recin aprendidos.
En el primer captulo, se presentan las caractersticas esenciales del microcontrolador BASIC Stamp y se
exploran los elementos bsicos de la programacin del BASIC Stamp, tales como: declaracin de variables y
constantes, manejo de arreglos y el uso del debug terminal. Tambin se experimenta con el encendido/
apagado de diodos LEDs y con temporizaciones simples.
En el captulo No. 2, usted aprender como: declarar terminales de Entrada/Salida, utilizar los modificadores
de variable y de formato, graficar seales con el software StampPlot Pro y manejar pulsadores e
interruptores.
El captulo No. 3 Operaciones Aritmticas y Lgicas. En l usted conocer cuales son los operadores
aritmticos y lgicos soportados por el BASIC Stamp. Adems, emplear las herramientas de la matemtica
entera para el manejo de nmeros con parte decimal.
El cuarto captulo, busca ensearle a medir la frecuencia y ciclo til de seales elctricas, siendo esto de
suma utilidad al momento de conectar al microcontrolador a diversos tipos de sensores. En la parte final del
captulo, aprender a generar tonos audibles que pueden ser empleados en sistemas de sealizacin y
alarma.
En el captulo No. 5, se estudia la comunicacin serial sincrnica bajo el protocolo SPI. Este protocolo es de
particular importancia, por la gran cantidad de dispositivos que lo utilizan. Usted implementar un maestro
SPI con su microcontrolador BASIC Stamp 2p y lo utilizar para encender y manejar un display de 4x7
segmentos mediante un controlador especializado.
Uno de los perifricos ms llamativos, presente en aplicaciones con microcontroladores es la pantalla LCD. El
captulo No. 7, est destinado a estudiar las pantallas LCD de caracteres. En l, usted encender la pantalla,
mostrar mensajes y nmeros e incluso crear sus propios caracteres para generar vistosas animaciones y
otros efectos.
El control de procesos industriales, es uno de los campos donde los microcontroladores han sido mejor
recibidos. Por esta razn, en el dcimo captulo de este texto, se implementan tres algoritmos de control de
mucha utilizacin: el control ON/OFF, el control ON/OFF con banda diferencial y el control Proporcional.
Usted tambin aprender a utilizar herramientas de adquisicin de datos como el StampDAQ y de monitoreo
remoto va TCP/IP.
En el captulo No. 11, se estudian las caractersticas de tres tipos de motores: el motor DC, el servomotor y
el motor de pasos. Durante el desarrollo de los ejercicios, usted encender y apagar los motores, variar su
velocidad, sentido de giro, etc.
Un bus de comunicaciones de gran importancia es, sin lugar a dudas, el I2C. El doceavo captulo le ensear
a utilizar al BASIC Stamp 2p como maestro de un bus I2C, permitindole entre otras cosas: leer y escribir
datos, texto y cualquier tipo de informacin en una memoria EEPROM y construir un avanzado
reloj/calendario digital utilizando un RTC (Reloj de tiempo real).
Para finalizar el texto, incluimos un captulo completo dedicado al estudio de la poderosa tecnologa 1-Wire
de Dallas Semiconductor. En l, usted aprender a detectar la existencia de dispositivos esclavos conectados
al bus, a leer y validar los seriales de identificacin de los dispositivos 1-Wire, construir un sencillo pero
muy seguro sistema de control de acceso y utilizar al BASIC Stamp para buscar e identificar a todos los
dispositivos que se conecten en una RED 1-Wire.
Sin ms que agregar, queremos dedicar este trabajo a todos aquellos lectores cuya motivacin sea el
conocer este nuevo e interesante mundo de los microcontroladores.
Jos M. Rodrguez S.
Angel L. Villegas N.
Captulo No. 01
Introduccin y Comandos Bsicos
Introduccin. Dado que el microcontrolador BASIC Stamp 2p y su lenguaje de programacin pueden ser poco conocidos para usted;
este primer captulo se orienta a iniciarlo en su utilizacin y no profundiza en aspectos relevantes salvo en mostrar la simplicidad y
rapidez con la cual se escribe, depura y verifica la ejecucin de un programa en PBASIC. Si usted ha tenido experiencia previa en
manejo de microcontroladores en lenguaje ensamblador; reconocer de manera inmediata la diferencia. Con el lenguaje PBASIC se
logra minimizar el tiempo de aprendizaje y programacin.
Pero Qu es un BASIC Stamp?. Bien, un BASIC Stamp es un microcontrolador desarrollado en 1992 por
la empresa norteamericana Parallax Inc. Esta conformado por un conjunto de circuitos ensamblados en una
misma placa impresa que incluye: un microcontrolador intrprete, una memoria EEPROM para
almacenamiento de programas, un regulador de 5V, un resonador y un conjunto de terminales de E/S de
uso general con niveles de tensin compatibles TTL/CMOS (0-5 V). El BASIC Stamp se programa utilizando
un grupo de directivas, comandos y funciones para la realizacin de operaciones tanto matemticas, lgicas
y de entrada salida (E/S) que conforman un poderoso lenguaje llamado PBASIC (Parallax BASIC). La figura
No. 1.1 muestra un BASIC Stamp 2p de tamao aproximado.
Tabla No. 1.1: Comparacin entre los diferentes modelos de BASIC Stamps.
Fuente: BASIC Stamp Module Comparison, Parallax.
Para poder utilizar una variable hay que primero declararla, especificando su
nombre y su tipo. En el BS2p existen 4 tipos de variables: bits (unidades
binarias bsicas), nibbles (compuestas de 4 bits), bytes (8 bits) y words Nombre de Variable VAR Tipo
(en este caso de 16 bits) que pueden ser declaradas por el usuario o utilizarse
con sus nombres predefinidos. La tabla No. 1.2. muestra las variables
predefinidas del BS2p. La declaracin de una variable requiere del uso de la directiva VAR. La longitud mxima del nombre de una
variable es de 32 caracteres.
Utilizacin de Etiquetas
Como en todo lenguaje de programacin que
permita la ejecucin de saltos incondicionales Nombre de Etiqueta: Instruccin a ejecutar
y el llamado a procedimientos (subrutinas) en
PBASIC existe una manera de denotar la lnea
del programa a la cual se requiere efectuar el salto. Una etiqueta es un identificador con un mximo de 32
caracteres seguido de dos puntos (:) y puede contener cualquier secuencia de letras, nmeros y el carcter
_. Debe tenerse en consideracin que en PBASIC no existe diferencia entre maysculas y minsculas.
Comentarios
En PBASIC cualquier secuencia de caracteres
precedida de un apstrofe () es considerado como Esto es un comentario
comentario, los comentarios pueden ser de
cualquier dimensin, pues no ocupan espacio
alguno en la memoria del BASIC Stamp, ya que, son ignorados por el compilador y no son transferidos a la
memoria EEPROM del microcontrolador. El uso de comentarios permite documentar los programas en el
momento de su elaboracin, lo cual, facilita su mantenimiento y depuracin.
DO ... LOOP
Esta instruccin permite generar un lazo iterativo que se repetir cierta cantidad de veces. Si se combina con
la opcin WHILE, el lazo se ejecutar mientras se cumpla la condicin; en caso de utilizar el UNTIL, se
realizar hasta que la condicin sea verdadera. Si no se establecen condiciones, se har un lazo infinito.
Pueden concatenarse hasta 16 lazos DO..LOOP.
.
IF ... THEN
Es una estructura de decisin que evala una condicin y si sta es verdadera, se produce un salto
incondicional al punto indicado por Direccin o se ejecuta la instruccin colocada sobre la misma lnea.
Condicin: Es una expresin que puede ser evaluada como verdadera o falsa.
Direccin: Etiqueta que especifica a donde saltar en caso de que se cumpla la condicin.
En la versin 2.5 del PBASIC se ha incluido la funcionalidad de ejecutar la instruccin que se escriba en la
misma lnea del IF..THEN. Para tener acceso a sta caracterstica, recuerde colocar la directiva: $PBASIC 2.5.
El PBASIC permite concatenar en una sola lnea un grupo de instrucciones, ello permite dar una presentacin
ms compacta y lgica de las mismas. El separador entre las instrucciones es el carcter dos puntos (:).
Objetivo: Declarar un grupo de variables y verificar el uso de la memoria RAM del BASIC Stamp.
'Programa 1_1.bsp
'Este programa muestra las diferentes formas de declarar variables y constantes
'===================================================================================
'{$STAMP BS2p} 'Directiva usada para indicar la versin del BASIC Stamp
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
'
Var0 VAR Bit 'Variable tipo Bit cuyo valor puede ser 0 1
Var1 VAR Nib 'Variable tipo Nibble cuyo valor puede ser de 0 a 15
Var2 VAR Byte 'Variable tipo Byte cuyo valor puede ser de 0 a 255
Var3 VAR Word 'Variable tipo Word cuyo valor puede ser de 0 a 65535
Ocho CON 8 'Constante igual a 8 Decimal
Diez CON $A 'Constante igual a $A en Hexadecimal 10 Decimal
Cuatro CON %0100 'Constante igual a %0100 en Binario 4 Decimal
'___________________________________________________________________________________
END 'Indica el fin del Programa
Una vez hecho esto, se procede a presionar el icono de verificacin de sintaxis . Si existe algn
problema se debe a un error de trascripcin. Una vez que aparezca el mensaje Tokenize Successful la
sintaxis ser correcta. Ahora presione sobre el icono del mapa de memoria y debe aparecer lo mostrado
en la figura No. 1.2.
VAR3 ->
VAR2 ->
VAR1 ->
VAR0 ->
Elementos a Utilizar
El sistema de desarrollo MDK-B28 cuenta con un banco de
LEDs conectados a los terminales P8 a P15 del
(1) Sistema de Desarrollo MDK-B28 con un BS2p.
(1) Banco de LEDs del sistema MDK-B28. microcontrolador. La figura No. 1.3 muestra una fotografa
(1) Cable serial DB9. del banco de LEDs, mientras que en la figura No. 1.4, se
(1) Programa Editor para el microcontrolador BASIC observa el diagrama de conexiones para la realizacin de
Stamp StampW (v2.0 beta 2.1 o superior).
ste ejercicio.
La resistencia conectada en serie con cada LED de la barra establece un lmite para la corriente que circula
por el mismo, evitando su destruccin y probablemente la del microcontrolador. En el sistema de desarrollo
MDK-B28 cada terminal de Entrada/Salida del microcontrolador se encuentra conectado en serie con una
resistencia de 220 Ohmios que funciona como medio de proteccin, eliminando la posibilidad de
cortocircuitos y permitiendo, en el caso de activar simultneamente todos los LED de la barra, que el
consumo total de sta no supere los 40mA con lo cual se garantiza la integridad del BASIC Stamp. Proceda
ahora a introducir el programa 1_2.bsp.
'Programa 1_2.bsp
'Este programa muestra como utilizar las instrucciones: OUTPUT, PAUSE y GOTO
'===================================================================================
'{$STAMP BS2p} 'Directiva usada para indicar la versin del BASIC Stamp
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
'
Led0 CON 15 'LED conectado a Pin 15 (P15)
Led1 CON 14 'LED conectado a Pin 14 (P14)
Led2 CON 13 'LED conectado a Pin 13 (P13)
T1 CON 500 'Retardo de 500 milisegundos
'___________________________________________________________________________________
'Programa Principal
El sistema de desarrollo MDK-B28 posee dos conectores DB9, identificados con los nombres
PROGRAMACION y RS232 DB9 respectivamente. El primero de ellos ser utilizado para descargar los
programas en la memoria del BASIC Stamp. Conecte el otro extremo del cable serial DB9 al puerto de
programacin del MDK-01, tal como se muestra en la figura No 1.5.
'Programa 1_3.bsp
'Este programa muestra como utilizar los comandos: HIGH, LOW
'===================================================================================
'{$STAMP BS2p} 'Directiva usada para indicar la versin del BASIC Stamp
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
'
Led0 CON 15 'LED conectado a Pin 15 (P15)
Led1 CON 14 'LED conectado a Pin 14 (P14)
Led2 CON 13 'LED conectado a Pin 13 (P13)
T1 CON 500 'Retardo de 500 milisegundos
'___________________________________________________________________________________
'Programa Principal
La importancia de lograr un cdigo eficiente cuando se trabaja con un microcontrolador se hace impetuosa
dada la capacidad limitada de memoria que estos poseen. Si se hace una revisin de los programas No.
1_2.bsp y No. 1_3.bsp, no tardar en notar que bsicamente hacen lo mismo, la diferencia es como lo
hacen, el programa 1_3.bsp ocupa 24 localidades de la EEPROM mientras que el programa 1_2.bsp ocupa
40, es decir que hay un 70,83 % de incremento en la longitud del programa.
Objetivo: Declarar arreglos de diferentes dimensiones y mostrar su distribucin en memoria la RAM del microcontrolador BASIC
Stamp.
Elementos a Utilizar
Siendo los arreglos estructuras de programacin de uso
(1) Sistema de Desarrollo MDK-B28 con un BS2p. muy comn, es evidente que todos los lenguajes de alto
(1) Cable serial DB9. nivel utilicen formas sencillas para declararlos. En PBASIC
(1) Programa Editor para el microcontrolador BASIC se utiliza la siguiente sintaxis:
Stamp StampW (v2.0 beta 2.1 o superior).
Es de hacer notar que PBASIC no verifica la dimensin del vector, as que sta puede ser excedida durante
el acceso al mismo. Por lo tanto, el programador deber tener en consideracin que el ndice utilizado no
sea mayor que el valor de n-1, siendo n la dimensin del vector.
Otra caracterstica resaltante es que se puede referir al elemento 0 del arreglo utilizando el nombre del
mismo pudiendo prescindir del ndice.
Inicie el programa BASIC Stamp Editor y transcriba el programa que se muestra a continuacin:
'Programa 1_4.bsp
'Este programa muestra como declarar arreglos de variables
'===================================================================================
'{$STAMP BS2p} 'Directiva usada para indicar la versin del BASIC Stamp
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
vector0 VAR Bit (8) 'Declara un arreglo de 8 elementos tipo Bit (01 Bit)
vector1 VAR Nib (5) 'Declara un arreglo de 5 elementos tipo Nib (04 Bits)
vector2 VAR Byte(5) 'Declara un arreglo de 5 elementos tipo Byte (08 Bits)
vector3 VAR Word(5) 'Declara un arreglo de 5 elementos tipo Word (16 Bits)
'___________________________________________________________________________________
'Programa Principal
Inicio:
GOTO Inicio
'___________________________________________________________________________________
La figura No. 1.6 muestra el estado del mapa de memoria del microcontrolador BASIC Stamp 2p al momento
de ejecutarse el programa.
La funcin Mapa de Memoria del BASIC Stamp Editor, es una herramienta que nos permite conocer
exactamente el uso que hemos hecho de la RAM del microcontrolador al momento de declarar las variables
dentro del programa. Sin embargo, no aporta ninguna informacin del contenido de estas variables durante
la ejecucin del programa.
vector2
vector3
vector1
vector0
Figura No. 1.6: Mapa de la memoria del microcontrolador para el programa 1_4.bsp.
Fuente: Elaboracin Propia.
Objetivo: Utilizar el Debug Terminal como medio de visualizacin de variables y/o mensajes de un programa escrito en PBASIC.
Elementos a Utilizar
Un comando poderoso utilizado para la rpida depuracin de
programas en PBASIC es el DEBUG.
(1) Sistema de Desarrollo MDK-B28 con un BS2p.
(1) Cable serial DB9.
(1) Programa Editor para el microcontrolador BASIC DEBUG Datos a mostrar
Stamp StampW (v2.0 beta 2.1 o superior).
Otra forma de tener acceso al DEBUG TERMINAL es mediante el icono RUN, pues el mismo realiza una
serie de acciones que incluyen: la verificacin de la sintaxis del programa, su descarga al microcontrolador y
la apertura del mencionado terminal en caso de ser necesario.
La manera en que la informacin es mostrada puede ser ajustada mediante el uso de modificadores de
formato. Estos se muestran en la tabla No. 1.3.
FORMATO DESCRIPCIN
Muestra x = valor y coloca el cursor en la lnea inmediata inferior. El valor de x ser interpretado como un
?x
nmero. El formato por defecto es decimal, pero puede ser combinado con cualquier modificador.
ASC ? Muestra x = valor y coloca el cursor en la lnea inmediata inferior. x se interpreta como un carcter ASCII
DEC{1..5} Dato en sistema decimal de 1 a 5 dgitos
SDEC{1..5} Dato decimal con signo de 1 a 5 dgitos
HEX{1..4} Dato hexadecimal de 1 a 4 dgitos
SHEX{1..4} Dato hexadecimal con signo, de 1 a 4 dgitos
IHEX{1..4} Dato hexadecimal con el prefijo $ de 1 a 4 dgitos.
ISHEX{1..4} Dato hexadecimal con signo y el prefijo $ de 1 a 4 dgitos
BIN{1..16} Dato en binario de 1 a 16 dgitos
SBIN{1..16} Dato binario con signo de 1 a 16 dgitos
IBIN{1..16} Dato binario con el prefijo %, de 1 a 16 dgitos
ISBIN{1..16} Dato binario con signo y el prefijo % de 1 a 16 dgitos.
STR array Enva el contenido de array como cadena ASCII hasta que encuentre un = 0
STR array\n Enva una cadena ASCII con los n primeros bytes del arreglo array
REP byte\n Muestra el carcter ASCII del contenido de byte n veces
Tabla No. 1.3: Modificadores de formato en PBASIC.
Fuente: BASIC Stamp Manual V2.0.
Para lograr mejoras en el despliegue visual y darle mejor presentacin a los datos en pantalla, la instruccin DEBUG
admite el uso de los caracteres de control mostrados en la tabla No. 1.4. Estos permiten controlar la posicin del cursor
dentro del Debug Terminal.
'Programa 1_5.bsp
'Este programa muestra como :
' 1) Desplegar informacin a travs del Debug Terminal
' 2) Emplear algunos caracteres de control y modificadores de formato
' 3) Usar la funcin DO LOOP
' 4) Usar la funcin DO WHILE..LOOP
'===================================================================================
'{$STAMP BS2p} 'Directiva usada para indicar la versin del BASIC Stamp
'{$PBASIC 2.5} 'Directiva usada para indicar la versin del PBASIC
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
x VAR Word
'___________________________________________________________________________________
'Programa Principal
Inicio:
DO
DEBUG CRSRXY,0,3
Si se requiere romper la ejecucin de un lazo iterativo construido con DO...LOOP, deber colocar EXIT
antes de llegar al punto de verificacin de la variable de control.
DEBUGIN Var
Donde Var es la variable que recibir la informacin que el computador enve al BASIC Stamp.
Introduzca el programa 1_6.bsp en el editor. En este programa usted ha de notar que la ejecucin de la
funcin DEBUGIN:
'Programa 1_6.bsp
'Este programa muestra como:
' 1) Recibir informacin desde el PC hacia el microcontrolador con el Debug Terminal
' 2) Acotar el valor mximo de una entrada
' 3) Usar la funcin DO .. LOOP UNTIL
'====================================================================================
'{$STAMP BS2p} 'Directiva usada para indicar la versin del BASIC Stamp
'{$PBASIC 2.5} 'Directiva usada para indicar la versin del PBASIC
'____________________________________________________________________________________
'Declaracin de Variables y Constantes
x VAR Byte
y VAR Byte
Maximo VAR Word
'____________________________________________________________________________________
'Programa Principal
Inicio:
Ciclo:
x = 0
DO
DEBUG CRSRXY,0,4
DEBUG "? -->",TAB,? x 'x= valor de x
DEBUG "DEC{1..5} -->",TAB,DEC3 x,CR 'como decimal con 3 dgitos
DEBUG "HEX{1..5} -->",TAB,HEX2 x,CR 'como hexadecimal de 2 dgitos
DEBUG "ISHEX{1..4} -->",TAB,ISHEX2 x,CR 'antepone el smbolo $ al valor hex.
DEBUG "BIN{1..16} -->",TAB,BIN8 x,CR 'como binario de 8 bits
DEBUG "ISBIN{1..16} -->",TAB,ISBIN8 x,CR 'antepone el carcter % al valor bin.
PAUSE 50
x = x + 5
LOOP UNTIL x >= Maximo
Fin:
DEBUG CLS,HOME
DEBUG "Desea Repetir (S/N)",CR
DEBUGIN y
DEBUG CLS
IF (y = "N") OR (y = "n") THEN GOTO Inicio
IF NOT ((y="S") OR (y="Y") OR (y="s") OR (y="y")) THEN DEBUG BELL : GOTO Fin
DEBUG "Reiniciando Cuenta"
x = 0
DO WHILE x <= 10
DEBUG "." : PAUSE 250 : x = x + 1
LOOP
GOTO Ciclo
END
Programacin
1. Escriba un programa que trabaje con el circuito de la figura No. 1.3. El mismo deber realizar las siguientes
operaciones:
1.1. Hacer que los tres LEDs se enciendan y apaguen en forma simultnea por 1 segundo.
1.2. Hacer encender y apagar los LEDs alternativamente; en otras palabras, mientas uno esta encendido
los otros estn apagados, y viceversa.
1.3. Hacer lo indicado en el pto. 1.2. e indicar en la pantalla del PC (utilizando el debug terminal), cual
es el LED que esta actualmente encendido.
1.4. Hacer que los LEDs se enciendan y apaguen en forma simultnea cuando el programador se lo
indique desde el debug terminal, utilizando la instruccin DEBUGIN.
1.5. Hacer lo indicado en el pto. 1.4., pero en vez de encender los LEDs en forma simultnea que se
enciendan y apaguen en forma individual.
1.6. Encender y apagar los LEDs en forma simultnea cada 10 ms. Qu Ocurri y Por qu ?.
Programacin Cont.
El siguiente programa tiene errores, por favor indique cuales son y como puede corregirlos. Coloque comentarios.
'Programa Eval_Cap_1_1.bsp
'===================================================================================
'{$STAMP BS2p} 'Directiva usada para indicar la versin del BASIC Stamp
'{$PBASIC 2.5} 'Directiva usada para indicar la versin del PBASIC
___________________________________________________________________________________
'Declaracin de Variables y Constantes
X VAR Bit
Y CON Byte
LED 0 CON 15
LED 1 CON 14
LED 2 CON 13
___________________________________________________________________________________
Programa Principal
Output LED0
Output LED1
Output LED2
Inicio:
DO
DEBUG CLS, "Mi Primer programa",CR
PAUSE 500
DEBUG "CARACTER",CR
PAUSE 250
DEBUG REP "-"\50,CR
PAUSE
X = 0
Captulo No. 02
Entradas y Salidas Digitales
Introduccin. Para poder intercambiar informacin con el mundo exterior, un microcontrolador necesita de un conjunto de perifricos
que sean capaces de traducir un evento en una seal elctrica de niveles lgicos entendibles, es decir, binarias. Este captulo muestra
algunos de los componentes ms simples del sistema de desarrollo, ensendole a trabajar con entradas y salidas digitales por medio
de los perifricos ms utilizados en aplicaciones basadas en microcontroladores.
De acuerdo a la naturaleza de una seal esta puede ser analgica o discreta. El microcontrolador BASIC
Stamp slo es capaz de admitir de estas ltimas, ms especficamente seales digitales binarias.
Es aquella seal que puede tomar infinitos valores posibles Es aquella seal discreta que slo admite dos valores
entre dos lmites, por lo cual, se denominan continuas. lgicos: el Cero (0) y el Uno (1).
Pulsadores e Interruptores
Los perifricos de entrada ms simples y ms utilizados con los Microcontroladores son los pulsadores e
interruptores. Para conectarlos se utilizan las configuraciones mostradas en las figuras No. 2.2 y No. 2.3.
Especificaciones Tcnicas
Figura No. 2.7: Fotografa de Mdulos de entrada Digital (Izquierda) y Mdulos de Salida Digital (Derecha).
Fuente: www.opto22.com
Diodos LEDs
Un LED (Light Emitting Diode) es un perifrico de salida capaz de emitir
un haz de luz visible cuando por l circula una determinada cantidad de
corriente. Constituye el elemento de visualizacin ms comn que se
encuentra en cualquier tipo de aplicacin.
Pantalla LCD
Si bien los LEDs son excelentes como elementos indicadores de salida,
habrn proyectos que requerirn proveer informacin ms completa al
usuario. Por supuesto, nada supera la pantalla de video de un PC, sin
embargo, estas son grandes costosas y casi siempre imprcticas para
realizar un proyecto con microcontroladores. Los mdulos LCD por otro
lado, son ideales para estas aplicaciones. Estos mdulos son en general
econmicos y permiten visualizar texto y variables en forma
alfanumrica. Figura No. 2.11: Fotografa de un LCD.
El registro OUTS, es de lectura-escritura y contiene el estado RAM (Random Access Memory): Utilizada para
almacenar variables del programa y la
de los pines declarados como salidas. En la tabla No. 2.6 configuracin de los pines de E/S de
puede verse la organizacin del registro OUTS. microcontrolador. A diferencia de la EEPROM su
contenido se pierde al desconectarse de su fuente
Mediante la manipulacin de los bits del registro DIRS puede de alimentacin.
modificarse la configuracin de un determinado Pin de E/S.
Colocando en 0 un bit de DIRS, se har que este terminal RAM SCRATCHPAD
sea una entrada. Por ejemplo, si se coloca el bit 15 de DIRS Es empleada para el intercambio de datos entre
(DIR15) en 0, P15 ser una entrada. Al colocar en 1 a un programas que estn ubicados en bloques de
bit de DIRS, el correspondiente terminal ser una salida. En programacin distintos. A diferencia de la RAM
convencional, en sta no existe un nombre
la tabla No .2.7 se detalla la organizacin de este registro. asignado directamente a una direccin de
memoria. El BS2p tiene 128 bytes de RAM
Cuando se energiza al BASIC Stamp, todas las localidades de Scratchpad.
memoria RAM son inicializadas en 0, as que todos los pines
de P0 a P15 quedarn declarados como entradas y al
momento de convertirse en salidas estarn en estado bajo.
INS
INH INL
IN15 IN14 IN13 IN12 IN11 IN10 IN9 IN8 IN7 IN6 IN5 IN4 IN3 IN2 IN1 IN0
OUTS
OUTH OUTL
OUT15 OUT14 OUT13 OUT12 OUT11 OUT10 OUT9 OUT8 OUT7 OUT6 OUT5 OUT4 OUT3 OUT2 OUT1 OUT0
DIRS
DIRH DIRL
DIR15 DIR14 DIR13 DIR12 DIR11 DIR10 DIR9 DIR8 DIR7 DIR6 DIR5 DIR4 DIR3 DIR2 DIR1 DIR0
FORNEXT
Crea un lazo iterativo que se repetir hasta que el Contador sobrepase al Valor Final.
FOR Contador = Valor Inicial TO Valor Final {STEP Incremento} ... NEXT
Si se declara a Valor Final menor que Valor Inicial, la variable de control se disminuir en la cantidad
expresada por el parmetro Incremento, si ste se omite se considera igual a uno (1).
IF THEN ELSE
Esta construccin permite decidir en base a una o varias expresiones condicionales la ejecucin, o no, de
determinados segmentos de cdigo.
Expresin Condicional: Es una expresin cualquiera que puede ser evaluada como verdadera o
falsa. Puede ser una comparacin simple o compleja.
Tambin puede usarse en formato de una lnea, con lo cual, se elimina el uso ENDIF.
IF Expr Cond THEN Inst a Ejecutar { ELSEIF Expr Cond THEN Instr a Ejecutar} { ELSE Instr a Ejecutar}
PIN
Es una definicin de tipo utilizada para simplificar la declaracin de los terminales de Entrada/Salida. El
compilador determinar de acuerdo a la instruccin, si el valor de Pin se debe considerar como una
constante o como una variable de E/S (estado del terminal).
PIN Pin
SELECT... CASE
Es una estructura de decisin que permite evaluar una expresin y dependiendo del resultado obtenido
ejecutar un segmento de cdigo.
SELECT Expresin
CASE Condicin
Instrucciones
{CASE Condicin
Instrucciones
CASE ELSE
Instrucciones }
ENDSELECT
Se puede emplear la palabra TO para hacer referencia a un rango de valores, incluyendo los extremos de
dicho rango. Mltiples condiciones pueden necesitarse en un mismo CASE; stas se escriben una a
continuacin de la otra, separadas por comas (,).
GOSUB
Esta instruccin se utiliza para llamar a una subrutina. En trminos generales, lo que hace es almacenar la
direccin de la instruccin que sigue al GOSUB y saltar a la etiqueta especificada por Direccin. Una vez
que ha ejecutado la subrutina, el retorno al programa se hace mediante la instruccin RETURN.
GOSUB Direccin
Un programa escrito en PBASIC puede contener hasta 256 llamadas a subrutinas. El mximo de GOSUBs
que se pueden concatenar es de cuatro (4).
ON...GOSUB
Efecta el llamado a una subrutina dependiendo del valor de un ndice. El ndice puede ser una variable,
constante o expresin de 0-255; si este valor es excedido o supera la dimensin del listado de rutinas,
PBASIC ignora la instruccin ON...GOSUB y contina con la ejecucin de la instruccin que prosegua a
sta.
RETURN
Permite retornar desde una subrutina, asumiendo que hubo un GOSUB u ON..GOSUB ejecutado
previamente.
RETURN
Este comando enva al programa a ejecutar la instruccin que se encuentra en la direccin que sigue al
GOSUB ms reciente. Si el programa encuentra a un RETURN sin antes haber ejecutado una llamada a
una rutina con GOSUB, el BASIC Stamp retornar a la primera lnea ejecutable del programa.
TOOGLE
Invierte el estado de un Pin de salida. Declara al terminal como salida modificando el registro DIRS y luego
invierte el estado del bit correspondiente en el registro de salidas OUTS.
TOOGLE Pin
COUNT
Cuenta el nmero de ciclos (0-1-0 1-0-1) que ocurren en un terminal durante un perodo de tiempo.
Pin: Variable, constante o expresin de (0 - 15) que indica cual terminal de E/S ser utilizado, el
mismo ser convertido en entrada.
Duracin: Variable, constante o expresin de (0-65535) que especifica el tiempo durante el cual, se
har el conteo. La unidad de tiempo que utiliza el BS2p para este comando es de 287 s.
Conteo: Variable que almacena el resultado de la cuenta.
BUTTON
Esta instruccin es una til herramienta que permite: eliminar el rebote en entradas digitales, ejecutar auto
repeticiones de un segmento de cdigo y saltar a una direccin dependiendo del estado de un pulsador.
Pin: Variable, constante o expresin (0-15) que especifica el terminal de entrada empleado.
Presionado: Variable, constante o expresin (0-1) que especifica el estado lgico que ocurre en caso
de ser oprimido el pulsador.
Retardo: Variable, constante o expresin (0-255) que especifica el tiempo que el pulsador debe
mantenerse presionado para iniciar las auto repeticiones. Si es 0 no se elimina el rebote y no hay
auto repeticin, si es 255 se elimina el rebote pero no hay auto repeticin.
Velocidad: Variable, constante o expresin (0-255) que especifica el numero de ciclos de la
instruccin BUTTON que deben transcurrir antes de comenzar las auto repeticiones.
Espacio de Trabajo: Es una variable tipo byte usada internamente por el comando BUTTON que no
debe ser alterada o modificada por ninguna otra instruccin.
Estado: Variable, constante o expresin (0-1). Especifica el estado del pulsador para que ocurra el
salto (0= no presionado, 1= presionado).
Etiqueta: Especifica el lugar a donde se producir el salto.
Modificadores de Variables
En PBASIC se permite hacer referencia a bits independientes de una variable, a travs, del conjunto de
modificadores que se muestran en la tabla No. 2.8.
Modificador Definicin
LOWBYTE Byte menos significativo (LSByte) de una palabra (word)
HIGHBYTE Byte ms significativo (MSByte) de una palabra (word)
BYTE0 Byte 0 (LSByte) una palabra (word)
BYTE1 Byte 1(MSByte) de una palabra (word)
LOWNIB Nibble inferior de una palabra o de un byte
HIGHNIB Nibble superior de una palabra o de un byte
NIB0 Primer nibble de una palabra o de un byte
NIB1 Segundo nibble de una palabra o de un byte
NIB2 Tercer nibble de una palabra
NIB3 Cuarto nibble de una palabra
LOWBIT LSB BIT de una palabra, byte o nibble
HIGHBIT MSB BIT de una palabra, byte o nibble
BIT0 Primer bit (LSB) de una palabra, byte o nibble
BIT1 Segundo bit de una palabra, byte o nibble
BIT2 Tercer bit de una palabra, byte o nibble
BIT3 Cuarto bit de una palabra, byte o nibble
BIT4BIT7 Bits 4 al 7 de una palabra o byte
BIT8BIT15 Bits 8 al 15 de una palabra
WORD
BYTE1 (HIGH BYTE) BYTE0 (LOW BYTE)
BIT15 BIT14 BIT13 BIT12 BIT11 BIT10 BIT9 BIT8 BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0
El StampPlot Pro V3, es una aplicacin de la casa Selmaware Solutions, que permite construir una interfaz
para la visualizacin de informacin proveniente desde un microcontrolador. Es una herramienta poderosa
que permite construir diversos tipos de grficas y animaciones, almacenar datos e intercambiar informacin
entre el microcontrolador y el PC.
Comando Descripcin
!TITL titulo Ttulo de la ventana.
!USRS mensaje Permite mostrar un mensaje en el recuadro User Status en el PC.
!BELL Permite emitir un sonido por el altavoz del PC.
!AMAX Valor Fija el mximo valor analgico del eje vertical de la grfica.
!AMIN Valor Fija el mnimo valor analgico del eje vertical de la grfica.
!SPAN minValor, maxValor Permite fijar el SPAN o recorrido de la grfica.
!AMUL, Valor Permite fijar un factor de multiplicacin para los datos entrantes.
!TMAX Valor Fija el tiempo mximo en segundos del eje horizontal de la grfica.
!TMIN Valor Fija el tiempo mnimo en segundos del eje horizontal de la grfica.
!PNTS Valor Permite fijar el nmero mximo de datos que se recibirn.
!PLOT ON/OFF Permite habilitar o deshabilitar la graficacin de los datos.
!RSET Reinicia la grfica.
!CLRM Permite limpiar la lista de mensajes.
!CLMM Permite limpiar los valores mximo y mnimo registrados.
!CMMR ON/OFF Permite habilitar o deshabilitar el borrado del registro de valores mnimo y mximo en el reset.
!MAXS Detiene la grfica cuando se alcanza la cantidad mxima de puntos o tiempo.
!MAXR Reinicia la grfica cuando se alcanza la cantidad mxima de puntos o tiempo.
!MAXT Define el tiempo mximo de duracin de la grfica.
!MAXP Define la cantidad mxima de puntos que contendr la grfica.
!SAVD ON/OFF Permite habilitar o deshabilitar el guardar en archivo de los datos digitales y analgicos.
!SAVM ON/OFF Permite guardar los mensajes en un archivo.
!DELD Borra el archivo de datos.
!DELM Borra el archivo de mensajes.
!TBAR OFF Permite habilitar/deshabilitar la barra de herramientas.
!MENU OFF Permite habilitar/deshabilitar el men de opciones del programa.
DIBUJO
Cuenta con una variedad de instrucciones para dibujar
en una grfica o en el fondo de la aplicacin.
Pudindose colocar imgenes, lneas, crculos y textos.
APLICACIONES EXTERNAS.
Con StampPlot Pro, cualquier aplicacin externa (que se
ejecute bajo el sistema operativo Windows) puede ser
ejecutada y recibir los datos provenientes de un
microcontrolador.
Objetivos: Declarar los pines del microcontrolador BASIC Stamp 2p como entradas o salidas. Utilizar modificadores de variable para
referir a una subdivisin de una variable. Usar el programa StampPlot Pro para graficar seales digitales.
Inicie el programa BASIC Stamp Editor. Transcriba y descargue al microcontrolador el programa 2_1.bsp.
Presione el pulsador PB1 y observe que ocurre, repita para el pulsador PB2.
'Programa 2_1.bsp
'Este programa tiene por objetivo mostrar:
'1) La declaracin de entradas y salidas mediante la manipulacin directa del reg.
' de control DIRS
'2) El uso de los modificadores de variable
'3) La configuracin de una grfica con StampPlot desde el microcontrolador
'4) La forma de graficar seales digitales con StampPlot
'=================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'_________________________________________________________________________________
'Declaracin de Entradas/Salidas
'Configuracin de la grfica
PAUSE 500
DEBUG "!NEWP ",CR 'Crea una nueva grfica
DEBUG "!TITL Manejo E/S Digitales", CR 'Ttulo para la ventana del StampPlot
DEBUG "!TMAX 10", CR 'Conf. el tiempo eje X a un mx.10 seg
DEBUG "!AMAX 5",CR 'Limita el valor mximo del eje Y
DEBUG "!AMIN 0", CR 'Limita el valor mnimo del eje Y
DEBUG "!MAXT ",CR 'Mximo de la grfica en tiempo
DEBUG "!USRS Seguimiento de un pulsador",CR 'Mensaje en el cuadro de status
DEBUG "!MAXR ",CR 'Re-inicializar al transcurrir 10 seg.
DEBUG "!COLR B15,A12,D12,S0,G0",CR 'Configuracin de colores
DEBUG "!PLOT ON ",CR 'Empieza a graficar los datos
DEBUG "!RSET ",CR 'Re-inicializar la grfica
'Programa Principal:
DO 'Ciclo infinito
OUT8=IN0 'Asigna a las salidas el estado de los
OUT9=IN1 'pulsadores de entrada
DEBUG IBIN OUT8,BIN OUT9,CR 'Enva los bits al StampPlot
PAUSE 50
LOOP
'___________________________________________________________________________________
A continuacin inicie el programa StampPlot Pro haciendo clic en: Inicio/Programas/StampPlot Pro Versin 3/
StampPlotV3.exe. Para permitir la comunicacin, en la barra de herramientas seleccione del men Plot la
opcin Connected, ver figura No. 2.13.
Presione el pulsador de RESET del sistema de desarrollo MDK-B28. Al hacer esto, ver como se comienza a
dibujar una grfica como la mostrada en la figura No. 2.14. Al finalizar la experiencia presione F6 para
permitir programar al BASIC Stamp. No desconecte los pulsadores PB1 y PB2.
Objetivos: Mostrar la existencia del rebote en interruptores mecnicos. Utilizar la directiva PIN para declarar terminales de E/S.
Descargue al microcontrolador el programa 2_2.bsp. Presione el pulsador PB1 repetidas veces y observe el
valor que aparece en el debug terminal. Debe obtener un resultado similar al de la figura No. 2.15.
'Programa 2_2.bsp
'Este programa tiene por objetivo mostrar:
'1) La existencia del efecto de rebote en una entrada digital
'2) La Declaracin de una entrada mediante INPUT
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
'Programa Principal:
INPUT PB1 'Declara al terminal P0 como entrada
DO
COUNT PB1,70,x 'Cuenta por 70*287 us = 20 ms
IF x<>0 THEN DEBUG CLS, "PULSOS DETECTADOS: ",DEC x,CR : x = 0
LOOP
Sin embargo, cuando se trabaja con un BASIC Stamp el efecto del rebote es poco apreciable, para verificar
esto descargue el programa 2_3.bsp.
'Programa 2_3.bsp
'Este programa tiene por objetivo mostrar:
'1) Que los rebotes en los pulsadores afectan poco al BASIC Stamp
'2) La declaracin de un terminal de E/S mediante PIN
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
PB1 PIN 0 'Terminal donde se conecta a PB1
Conteo VAR Word 'Cuenta que se incrementa cada vez que se oprime a PB1
Pulsos VAR Word 'Cantidad de rebotes que ocurren al liberar a PB1
'___________________________________________________________________________________
'Programa Principal:
DO
DO WHILE PB1 = 1 : LOOP 'Esperar que se presione a PB1
Conteo = Conteo + 1 'Contar el pulso
DO WHILE PB1 = 0 : COUNT PB1,70,Pulsos : LOOP 'Mientras se PB1 est presionado,se
DEBUG CLS,? Conteo,? Pulsos 'cuenta la cantidad de rebotes que
LOOP 'ocurren en P0 y se muestra por el
'debug terminal
'___________________________________________________________________________________
Presione varias veces el pulsador PB1 y observe que ocurre. La variable Conteo almacena el nmero de
veces que el BASIC Stamp detect que el pulsador fue oprimido, mientras que la variable Pulsos cuenta el
nmero de transiciones 0-1-0 que recibi el terminal P0 antes de volver a su estado inicial.
La instruccin de suma de la variable Conteo y el salto que implica el lazo exterior DO...LOOP se pueden
considerar instrucciones simples, por lo cual, todo el programa puede verse como un conjunto de 6 lneas de
cdigo que al ejecutarse demoran al menos 0.5 ms. Esto quiere decir que cualquier cambio que ocurra en el
terminal P0 y que dure menos de 0.5 ms no podr ser apreciado por el BASIC Stamp.
El manejo de entradas digitales no se reduce solamente a eliminar el rebote que pueda existir en los
pulsadores e interruptores. Surgen otros problemas como el lograr que un segmento de cdigo se ejecute
una sola vez al oprimir un pulsador o que se ejecute repetidas veces mientras se encuentra el pulsador
presionado. Tambin puede requerirse que, sin importar el estado del pulsador otras partes del cdigo sean
ejecutadas (por ejemplo el monitoreo de otras entradas). El ejercicio # 3 de ste captulo, presenta las
herramientas a utilizar en estos casos.
Objetivos: Implementar soluciones de software para la eliminacin del rebote que incluyen acciones como la generacin de retardos y
la utilizacin de la instruccin BUTTON, como una herramienta para este fin.
INICIO
A continuacin, inicie el BASIC Stamp Editor y dentro del entorno de trabajo del Stamp, trascriba el
programa 2_4.bsp
'Programa 2_4.bsp
'Este programa tiene como objetivos:
'1) Utilizar la barra de LEDs como dispositivo de salida
'2) Implementar dos contadores simples de 4 bits
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
DIRH = $FF
DO
IF IN0 = 0 THEN C0 = C0 + 1 'Si se presion PB1 incrementar C0
IF IN1 = 0 THEN C1 = C1 + 1 'Si se presion PB1 incrementar C1
OUTH = C0<<4 + C1 'Muestra C0 en parte alta del byte
LOOP
Este programa implementa una solucin al problema planteado, pero incurre en el error de no verificar, que
el pulsador se libere una vez que ste ha sido presionado. El programa 2_5.bsp, implementa una mejora
importante. Ejectelo y vea su comportamiento.
'Programa 2_5.bsp
'Este programa tiene por objetivo mostrar:
'1) El uso de IF...THEN...ELSE para discriminar entre mltiples opciones
'2) Eliminacin del rebote por medio de retardo
'3) Como ejecutar un segmento de cdigo una vez al presionar un pulsador
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
Para lograr que el conteo sea efectuado de unidad en unidad, cada vez que se presionan y liberan PB1 y
PB2, el programa 2_5.bsp utiliza una variable llamada (Sw), en la cual, se almacena el estado de los
pulsadores. La presencia de esta variable permite efectuar la eliminacin de posibles rebotes en ambos
pulsadores de una manera muy simple. El retardo colocado en el lazo que espera un nuevo cambio en el
estado de PB1 y PB2, garantiza que las seales se estabilicen antes de empezar un nuevo ciclo de programa.
La construccin IF...THEN...ELSEIF, permite discriminar entre las posibles combinaciones de valores que
representan el estado de los pulsadores. Al analizar el comportamiento del programa usted ver que al
presionar ambos pulsadores, si uno se mantiene presionado y el otro se oprime varias veces, el programa no
funciona correctamente. Para explicar el por qu de esto, supngase que PB1 se deja presionado y se
comienza a presionar y a liberar alternadamente a PB2. Cuando ambos se encuentren activos (en 0 V), se
cumplir la condicin Sw=0, con lo cual, ambos contadores se incrementarn. Al liberar a PB2, la condicin
Sw=2 se har vlida, entonces el contador C0 se incrementar. El programa 2_6.bsp corrige tal
comportamiento mediante el uso de una bandera, adems se ha empleado la funcin SELECT..CASE. Al ser
la discriminacin del estado de los pulsadores una seleccin de acuerdo al valor de una expresin numrica
(y no condicional o lgica), la funcin SELECT...CASE representa una mejor alternativa de programacin
que una construccin del tipo IF...THEN...ELSEIF.
'Programa 2_6.bsp
'Este programa tiene por objetivo mostrar:
'1) El uso de SELECT..CASE para discriminar entre mltiples opciones
'2) Eliminacin del rebote por medio de retardo
'3) Como ejecutar un segmento de cdigo una vez al presionar un pulsador
'====================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'____________________________________________________________________________________
'Declaracin de Variables y Constantes
Sw VAR Nib 'Variable que contiene el estado de los pulsadores
C0 VAR Nib 'Contador 0
C1 VAR Nib 'Contador 1
Band VAR Bit 'Bandera usada para el manejo de presin simultnea
'____________________________________________________________________________________
'Programa Principal
Finalmente, el programa 2_6.bsp cumple con el enunciado deseado y sus resultados son totalmente
satisfactorios. Pero desde el punto de vista de programacin, resulta ser extremadamente ineficiente. El
programa pierde casi todo el tiempo de ejecucin dentro de un lazo de espera, sin poder ejecutar otras
instrucciones.
Para subsanar todas las dificultades planteadas hasta el momento, PBASIC incluye una poderosa instruccin
llamada BUTTON. BUTTON no slo permite eliminar rebote sino que puede efectuar auto repeticin de un
segmento de cdigo mientras se mantenga el interruptor (o el pulsador) en un estado deseado, trabaja con
conexin de pulsadores en configuracin activa baja o alta, permite seleccionar si se toma un salto segn se
presione o no el pulsador y adems no detiene la ejecucin del resto del programa.
El programa 2_7.bsp, cumple con el enunciado del ejercicio de una manera sencilla y bastante eficiente.
'Programa 2_7.bsp
'Este programa tiene por objetivo mostrar:
'1) El uso de la funcin BUTTON para el manejo de pulsadores e interruptores
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Entradas/Salidas
Objetivos: Implementar un contador UP/DOWN. Graficar la cuenta como una seal analgica con StampPlot Pro.
Elementos a Utilizar
Lo primero que aparecer en pantalla es un pequeo cuadro de dialogo como el de la figura No. 2.19. Este
cuadro junto con la configuracin del grfico, han sido enviados desde el microcontrolador hacia el
computador. El programa 2_8.bsp, implementa un contador ascendente/descendente, la cuenta se efecta
al pulsar PB1. Con el pulsador PB3 se reinicia al contador mientras que por medio PB2 se cambia el sentido
del conteo.
'Programa 2_8.bsp
'Este programa tiene por objetivo mostrar:
'1) Como implementar un contador digital de 8 bits UP/DOWN
'2) Usar la funcin ON..GOSUB
'3) Graficar valores analgicos con el StampPlot Pro
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Entradas/Salidas
Conteo VAR Byte 'Variable que mantiene la cuenta
esp1 VAR Byte 'Espacio de trabajo para PB1
esp2 VAR Byte 'Espacio de trabajo para PB2
esp3 VAR Byte 'Espacio de trabajo para PB3
DO
BUTTON Reset ,0,255,0,esp1,1,Reiniciar 'Si presiona Reset reinicia la cuenta
BUTTON UpDown,0,255,0,esp2,1,ModoSeleccion 'Si se presiona UpDown cambia el modo
BUTTON Contar,0,255,0,esp3,1,Cuenta 'Si se presiona va a Cuenta
Fin:
LOOP
Cuenta:
ON modo GOSUB CuentaArriba,CuentaAbajo 'De acuerdo al modo se ejecuta GOSUB
GOTO Fin
Reiniciar:
Conteo=0
DEBUG "!USRS La cuenta ha reiniciado: ", DEC Conteo,CR 'Mensaje en el User Box
DEBUG DEC Conteo,CR 'Grafica la cuenta
GOTO Fin
ModoSeleccion:
Modo=~Modo
IF Modo=0 THEN
DEBUG "!UMSG 2, Cuenta Ascendente",CR 'Mensajes en cuadro de dialogo
ELSE
DEBUG "!UMSG 2, Cuenta Descendente",CR
ENDIF
GOTO Fin
'===================================================================================
'SUBRUTINAS
CuentaAbajo:
Conteo=Conteo-1
DEBUG "!USRS Cuenta: ",DEC Conteo,CR 'Muestra la cuenta en el User Box
DEBUG DEC Conteo,CR 'Grafica el valor de la cuenta
RETURN
CuentaArriba:
Conteo=Conteo+1
DEBUG "!USRS Cuenta: ",DEC Conteo,CR 'Muestra la cuenta en el User Box
DEBUG DEC Conteo,CR 'Grafica el valor de la cuenta
RETURN
StampPlot:
PAUSE 1000
DEBUG "!NEWP ",CR 'Crea una nueva Grfica
PAUSE 500
DEBUG "!TITL Manejo E/S Digitales", CR 'Ttulo para la ventana
DEBUG "!TMAX 10", CR 'Configura el tiempo eje X, mximo 10
seg.
DEBUG "!AMAX 255",CR 'Limita el valor mximo del eje Y
DEBUG "!AMIN 0", CR 'Limita el valor mnimo del eje Y
DEBUG "!MAXT ",CR 'Define el mximo de la grfica en tiempo
DEBUG "!USRS Contador Up/Down",CR 'Mensaje en el cuadro de status
DEBUG "!MAXR ",CR 'Re-inicializar al transcurrir 10 seg.
DEBUG "!COLR B15,A12,D12,S0,G0",CR 'Configuracin de colores
DEBUG "!PLOT ON ",CR 'Los datos recibidos debern graficarse
DEBUG "!RSET ",CR 'Re-inicializa la grfica
DEBUG "!TBAR OFF",CR 'Esconde la barra de tareas
DEBUG "!MENU OFF",CR 'Esconde el men de opciones
DEBUG "!UMSG 5, Programa 2_8.bsp\n Contador UP/DOWN con el\n BASIC Stamp 2p",CR
'Despliega un mensaje en forma de cuadro de dialogo
RETURN
Para desconectar al StampPlot Pro del puerto serial del computador presione F6 o en el men contextual que
aparece al oprimir el botn derecho del ratn, seleccione la opcin Disconnect. Al concluir no olvide apagar
el sistema. La figura No. 2.20 muestra el resultado de la ejecucin del programa.
Ejercicios Propuestos
Modifique el programa 2_7.bsp para que durante la ejecucin del lazo principal del programa, se efecte
alguna labor y compruebe que tanto el incremento de los contadores como sta tarea se pueden realizar sin
tener que detener la ejecucin del programa en ningn lazo de espera.
Realice los cambios necesarios el programa 2_8.bsp para que en lugar de disponer de un pulsador para
cambiar el sentido de la cuenta, tener un pulsador para que cuente ascendente, otro para que cuente
descendente y finalmente el pulsador para ejecutar una accin de reset.
Programacin
1. Escriba un programa que simule el funcionamiento de un juego de ping-pong para dos jugadores. Cada jugador
utilizar un pulsador como raqueta, y la pelota se debe simular con la barra de LEDs del sistema de desarrollo. El
juego debe presentar la puntuacin de cada jugador en el Debug Terminal. El juego debe finalizar cuando
cualquiera de los jugadores tenga una puntuacin mayor o igual a diez (10) puntos.
Captulo No. 03
Operaciones Aritmticas y Lgicas
Introduccin. Cuando se comienza a trabajar con las operaciones aritmticas y lgicas del microcontrolador BASIC Stamp surgen
numerosas inquietudes cuya resolucin puede demorar un tiempo valioso en hacerse visible. Esto no es motivado a errores en el
lenguaje PBASIC, aunque a veces pudiera esto parecer, sino ms bien, a una incomprensin de la forma en que tales operadores
trabajan, a que tipos de operandos son aplicables, y sobre todo, cual es la interpretacin que debe darse a un resultado no esperado.
Este captulo tiene por objeto descubrir algunas potencialidades y limitaciones del lenguaje PBASIC.
PBASIC es un lenguaje de alto nivel que permite lograr un alto grado de abstraccin, lo cual, es muy positivo
al momento de emprender proyectos de envergadura; sin embargo; trae como desventaja el sobreestimar
las capacidades de cmputo que puede desarrollar este microcontrolador. Es por ello, que resulta comn
desconocer u olvidar las caractersticas bsicas del lenguaje que comprometen el funcionamiento adecuado
de los programas. Al efectuar operaciones aritmticas y lgicas con el BASIC Stamp, se debe tener en
cuenta que:
No existe precedencia entre los operadores binarios, siendo evaluadas las expresiones de izquierda a derecha.
Los operadores unitarios tienen precedencia sobre los binarios.
Se permite el uso de parntesis para cambiar el orden en que se evalan las expresiones.
Al encerrar entre parntesis a una expresin, se le asigna una prioridad superior, por lo cual, ser evaluada antes
que cualquier otra expresin.
Es posible estructurar expresiones complejas de manera ordenada y correcta, incluyendo parntesis dentro de
parntesis, pues estos se evaluarn desde el ms interno hacia el ms externo.
El BASIC Stamp trabaja con matemtica entera, es decir, que no opera con nmeros reales (o en punto flotante);
sino mas bien, con nmeros enteros descartando (truncando) cualquier parte fraccionaria.
Los operadores trabajan en un espacio de 16 bits sin Operador Descripcin
importar la naturaleza de los operandos, esto no implica ABS Clculo del valor absoluto.
que no puedan utilizarse en variables de menor COS Coseno.
dimensin (bytes, nibbles o bits). Sin embargo, para DCD Decodificador de potencias de base 2.
interpretar los resultados debe recordarse que todos los ~ Negado de un nmero.
bits faltantes en los operandos para llegar a los 16 bits - Inverso de un nmero.
habrn sido completados con 0s antes de efectuarse la NCD Codificador de prioridad.
operacin. NOT Retorna el negado de una expresin.
Al momento de efectuar clculos, el BASIC Stamp asume SIN Seno.
que los valores son positivos, esto arroja resultados SQRT Raz cuadrada entera de un nmero.
correctos si los operandos son positivos. Tabla No. 3.1: Operadores Unitarios del BS2p.
Cuando se trabaja con nmeros negativos, en complemento a dos, el bit de signo altera la operacin de divisin
produciendo resultados incorrectos. Para solventar este problema, deben verificarse los bits de signo de cada
operando, efectuar la divisin entre los mdulos de los operandos (usando el operador ABS) y posteriormente
corregir el signo del resultado.
Operador Descripcin
+ Suma en 16 bits entre dos nmeros con o sin signo.
- Resta en 16 bits entre 2 nmeros sin signo.
* Retorna los 16 bits menos significativos de la multiplicacin.
** Retorna los 16 bits ms significativos de la multiplicacin.
*/ Retorna los 16 bits medios de los 32 resultantes de una multiplicacin.
/ Divisin entera sin signo de dos nmeros.
// Retorna el residuo de una divisin.
MIN Acota una variable con un valor mnimo de 16 bits.
MAX Acota una variable con un valor mximo de 16 bits.
DIG Retorna cualquier dgito decimal de un nmero de 16 bits.
REV Retorna una copia de cierta cantidad de bits revertidos de un nmero.
>> Desplaza los bits hacia la derecha una cierta cantidad de veces.
<< Desplaza los bits hacia la izquierda una cierta cantidad de veces.
& Efecta un AND bit por bit entre dos nmeros.
| Efecta un OR bit por bit entre dos nmeros.
^ Efecta un XOR bit por bit entre dos nmeros.
AND Efecta un AND entre dos expresiones. Tabla No. 3.2:
Operadores Binarios del BS2p.
OR Efecta un OR entre dos expresiones.
Fuente: BASIC Stamp Manual
XOR Efecta un XOR entre dos expresiones. v2.0.
ATN Calcula el ngulo que forma un par ordenado con el eje horizontal.
HYP Calcula la hipotenusa de un tringulo rectngulo dados sus lados.
Elementos a Utilizar
'Programa 3_1.bsp
'Este programa tiene por objetivo mostrar el uso de los operadores lgicos: &,|,^,~
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
x VAR Byte 'Variable de uso general
y VAR Byte 'Variable de uso general
'___________________________________________________________________________________
'Programa Principal
DEBUG "Operandos",CR
DEBUG "x=",IBIN16 x, " y=",IBIN16 y,CR 'Muestra el valor de los operandos
DEBUG "Operacin x&y ", IBIN16 x&y,CR 'Resultado de la operacin & (and)
DEBUG "Operacin x|y ",IBIN16 x|y,CR 'Resultado de la operacin | (or)
DEBUG "Operacin x^y ",IBIN16 x^y,CR 'Resultado de la operacin ^ (xor)
DEBUG "Operacin ~x ",IBIN16 ~x,CR 'Resultado de la operacin ~ (not)
'___________________________________________________________________________________
END
Estos operadores lgicos se aplican bit a bit en cualquier variable de cualquier dimensin. Por esta razn,
resultan ser los adecuados para evaluar funciones lgicas, de las que se espera extraer un resultado
numrico. Cuando se requiere evaluar una expresin para tomar una decisin o efectuar operaciones lgicas
sobre expresiones, se pueden utilizar los operadores equivalentes AND, OR, XOR y NOT. Podemos preguntar
entonces: Para qu existen dos tipos de operadores que realizan las mismas funciones lgicas?. Introduzca
el programa 3_2.bsp al BASIC Stamp y ejectelo.
'Programa 3_2.bsp
'Este programa muestra la diferencia existente entre los operadores
'lgicos binarios (&,|,^,~) y los operadores lgicos para expresiones
'(AND,OR,XOR,NOT)
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
x VAR Word 'Variable de uso general
y VAR Word 'Variable de uso general
'___________________________________________________________________________________
'Programa Principal
x=12 'Asignacin del valor a la variable x
y=10 'Asignacin del valor a la variable y
Inicio:
IF ~ x > y THEN DEBUG "Verdadero", CR : GOTO Seguir
DEBUG "Falso",CR
Seguir:
IF NOT x > y THEN DEBUG "Verdadero", CR : END
DEBUG "Falso", CR
'___________________________________________________________________________________
END
A simple vista el programa no tiene nada de especial, slo se ha cambiado el operador ~ por NOT, pero ello
implica un cambio completo en la operacin efectuada antes de decidir con la instruccin IF..THEN. El
debug terminal de su computador debe mostrar en este momento las palabras Verdadero y Falso. Cul de
los dos resultados es el correcto ?.
Ello depender de la intencin con la que se quiera interpretar el resultado. Si se quera saber si el
complemento de x era mayor que y, entonces el primer resultado ser el correcto (Verdadero). Esto se
debe a que ~x cuando x= 12 es 65523 y este nmero es evidentemente mayor que 10. Por otra parte, si su
intencin era saber si el resultado de la expresin NO ES x mayor que y; el resultado correcto es el
segundo (Falso).
AND, OR, XOR y NOT trabajan de manera diferente a todos los dems operadores existentes en PBASIC,
pues posponen la operacin a realizar hasta que todas las expresiones que intervienen sean evaluadas
(tienen una precedencia menor). Esta caracterstica los adecua para ser utilizados en las instrucciones de
decisin, minimizando el uso de parntesis y mostrando un cdigo ms claro y fcil de comprender.
Objetivo: Construir un codificador de prioridad. Graficar una seal sinusoidal segn se presione un banco de pulsadores.
Conecte los pulsadores PB1 a PB4 a los terminales P0 a P3 respectivamente, como lo muestra la figura No.
3.3. Para ello bastar con interconectar los puntos identificados como PB1, PB2, PB3 y PB4 de la regleta de
conexiones con los puntos etiquetados como P0, P1, P2 y P3.
Elementos a Utilizar
'Programa 3_3.bsp
'Este programa tiene por objetivo mostrar el uso de los operadores NCD y SIN
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
La figura No. 3.9, es el diagrama de flujo que corresponde al programa 3_3.bsp. El operador NCD es un
decodificador de prioridad que toma una variable de 16 bits y retorna la posicin del uno (1) ms
significativo que sta contiene. Los operadores SIN y COS calculan el valor en complemento a dos del seno y
el coseno, respectivamente. El ngulo utilizado se expresa como una variable de 8 bits (0 a 255) y equivale
a 1.406 grados (un brad). Estos operadores devuelven un valor comprendido entre -127 y 127.
Antes de avanzar al ejercicio siguiente, recuerde desconectar al Stamp Plot Pro del puerto de
programacin del BASIC Stamp oprimiendo el icono mostrado (Connect To) o presionando F6,
de lo contrario en el BASIC Stamp Editor obtendr un mensaje de error como el mostrado en la
figura No. 3.10.
INICIO
Si
Presionado
PB4
Graficar Seno 4x No
Si
Presionado
PB3
Graficar Seno 3x
No
Si Presionado
PB2
Graficar Seno 2x
No
Si Presionado
PB1
Graficar Seno x No
Objetivo: Implementar las operaciones de multiplicacin y divisin enteras. Obtencin de resultados fraccionarios a partir de nmeros
enteros.
'Programa 3_4.bsp
'Este programa tiene por objetivo mostrar el uso del operador */ para multiplicar
'a un nmero entero por otro con parte decimal.
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
Las lneas 23 y 24 del programa se encargan de hacer esto cada vez que el usuario introduce un
multiplicador. Si an tiene duda de la funcionalidad del operador */ y de que sea correcta su utilizacin
puede mirar en la figura No. 3.13, en la cual, se multiplica el numero 180 por 1.75.
Presione el pulsador de RESET del sistema de desarrollo MDK-B28 para volver a ejecutar el programa.
Cambie el valor del multiplicador y observe los resultados, comente y concluya sobre la exactitud de mismos.
Tal vez la limitacin ms grande que sufren los microcontroladores que operan slo con matemtica entera,
se encuentra al momento de efectuar divisiones, las prdidas de informacin que ocurren pueden acarrear
resultados totalmente impredecibles y errneos que son arrastrados por todo el sistema pudiendo conllevar
al fracaso del mismo. El programa 3_5.bsp, calcula el valor de una divisin con 4 dgitos decimales de
resolucin sin correccin para el ltimo dgito y demuestra ser bastante preciso en un amplio rango de
valores. Introdzcalo al BASIC Stamp y observe los resultados obtenidos al introducir diferentes valores.
'Programa 3_5.bsp
'Este permite utilizar las herramientas de la matemtica entera para obtener
'resultados con 2 o ms dgitos de resolucin en una divisin
'====================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'____________________________________________________________________________________
'Declaracin de Variables y Constantes
Cociente = Dividendo/Divisor
Resto = Dividendo//Divisor
ParteDec = 0 'Inicializa la parte entera en 0
El algoritmo usado para el clculo decimal es muy simple, para ilustrarlo, la figura No. 3.14 desarrolla la
divisin de 535 /14 con 2 decimales de resolucin. El programa 3_6.bsp implementa la correccin por
redondeo a tres (3) dgitos de resolucin.
535 14
Primer Residuo Cocient e
3 38
30 14
Segundo Residuo Primer Decimal
2 2
Segundo Residuo *10 = 20
20 14
Tercer Residuo Segundo Decimal
6 1
Result ado en 2 dgit os = 38.21
Figura No. 3.14: Algoritmo para calcular los decimales en una divisin.
Fuente: Elaboracin Propia.
'Programa 3_6.bsp
'Este permite utilizar las herramientas de la matemtica entera para obtener
'resultados con 3 dgitos de resolucin y correccin del ltimo dgito en la
'divisin de dos nmeros.
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
Cociente = Dividendo/Divisor
Resto = Dividendo//Divisor
ParteDec = 0
FOR i=0 TO 3
Resto = Resto*10
ParteDec = (ParteDec*10)+(Resto/Divisor)
Resto = Resto//Divisor
NEXT
'Para aproximar a 3 dgitos se toma el 4 decimal y se verifica que sea mayor que 5
i = ParteDec DIG (0)
i = i/5
ParteDec = (ParteDec/10)+i 'Elimina el LSDgito y corrige si fuese necesario
IF ParteDec=1000 THEN
Cociente=Cociente+1 'Ajuste para compensar que la correccin se desborde
Partedec=0 'hacia el entero
ENDIF
DEBUG DEC Cociente,".",DEC ParteDec,CR 'Muestra el resultado
'___________________________________________________________________________________
END
Programacin
1. Haga un subprograma que calcule el permetro de un triangulo rectngulo, conociendo en valor de
sus catetos. Utilice el debug terminal para cambiar los valores de cada cateto y visualizar el
resultado. Los catetos pueden variar entre un mnimo valor de 10 unidades y un mximo de 100
unidades.
2. Elabore un programa que permita dividir dos nmeros con signo. Ambos nmeros sern introducido
por el debug terminal.
Captulo No. 04
Medicin de Frecuencias y Generacin de Tonos
Introduccin. Una de las variables de mayor inters que puede ser medida por un microcontrolador es la frecuencia de una seal,
pues muchos sensores entregan una salida de frecuencia proporcional a la magnitud de la medicin efectuada. Por otra parte, suele ser
comn la produccin de tonos audibles para aplicaciones en comunicaciones, control, sealizacin y sistemas de alarma. En este
captulo se estudiarn las herramientas de las que dispone el microcontrolador BASIC Stamp para determinar la frecuencia de un tren
de pulsos y para generar todos audibles.
Figura No. 4.1: Mdulo generador de seales. Tabla No. 4.1: Funcionamiento del generador de seales.
Fuente: Elaboracin Propia. Fuente: Elaboracin Propia.
Objetivo: Utilizar al microcontrolador BASIC Stamp para determinar la cantidad de pulsos que ocurren en un terminal de entrada
durante un cierto intervalo de tiempo.
Elementos a Utilizar Arme el montaje de la figura No. 4.2, para ello slo
tendr que conectar el terminal de salida del generador
(PGEN) con el Pin P0 del Stamp. Introduzca al
(1) BASIC Stamp 2p.
(1) Un cable serial DB9.
microcontrolador el programa 4_1.bsp. Ajuste el
(1) Generador de Pulsos. generador de seales para producir una seal de 50%
(1) StampW (v2.0 beta 2.1 o superior). de ciclo til y 10 Hz.
Ton
CU = 100%
T
El factor de conversin 3484 utilizado en el programa 4_1.bsp, que multiplica a la variable segundos,
equivale al valor 1/287s y corresponde a la cantidad de unidades de tiempo de la funcin COUNT
contenidas en un segundo.
'Programa 4_1.bsp
'Este programa muestra como medir la cantidad de pulsos aplicados a un terminal
'durante un intervalo de tiempo. Se utiliza la instruccin COUNT.
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
Inicio:
DEBUG CLS,"Contador de pulsos",CR 'Ttulo para el Debug Terminal
PAUSE 500
DEBUG REP "*"\50,CR 'Muestra una divisin en la pantalla
PAUSE 150 'mediante el carcter *
Cuenta=0 'Inicializacin del conteo
DEBUG CRSRXY, 0,2,"Introduzca Tiempo de Espera (en segundos)",CR
DEBUGIN DEC Tiempo
'Se le solicita al usuario que introduzca el tiempo de espera
Segundos = Tiempo MAX 18 'Acotamiento adaptado al mximo aceptado por COUNT
DO
COUNT Contador,3484*Segundos,Cuenta 'Cuenta durante la cantidad de segundos deseada
DEBUG CRSRXY, 0,3,"Pulsos detectados en ",DEC Tiempo, " segundos: ", DEC5 Cuenta,CR
LOOP
Cambie el ciclo til de la seal a 25% y luego a 75 %. Observe si ocurre algn cambio en el valor de la
medicin. Proceda a cambiar la frecuencia del generador a 100 Hz, 1K Hz, 10Khz. En cada paso, observe y
anote los resultados de las diferentes mediciones realizadas, luego podr analizar los resultados.
Objetivo: Utilizar al BASIC Stamp para la medicin de la frecuencia de una seal. Determinar el perodo y ciclo til de una seal.
'Programa 4_2.bsp
'Este programa muestra como utilizar la instruccin COUNT para determinar la
'frecuencia de una seal.
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
DO
COUNT Contador,3484,freq
DEBUG CRSRXY, 0,3,"Frecuencia: -- ", DEC5 Freq , " Hz -- "
TOGGLE Led
LOOP
Durante la ejecucin del programa ver parpadear al LED conectado al terminal P0. Con ste programa se
ha implementado un frecuencmetro simple, pero de poca aplicacin en un campo real. El principio usado en
la medicin de frecuencia, es el contar cuantos pulsos ocurren en un segundo y eso es exactamente la
frecuencia en Hertz (Hz). Pero, Cul es el costo de esta simplicidad ?. En la velocidad de parpadeo del LED
est la respuesta. La medicin de la frecuencia es muy lenta y se toma todo un segundo en dar el resultado.
Para un microcontrolador como el BASIC Stamp 2p que puede ejecutar unas 12000 instrucciones por
segundo, este tiempo es toda una eternidad. Si queremos mejorar la eficiencia de ste programa, podemos
realizar algunos cambios, vea y transcriba el programa 4_3.bsp a continuacin mostrado:
'Programa 4_3.bsp
'Este programa mide la frecuencia de una seal mediante el comando COUNT
'=================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'_________________________________________________________________________________
'Declaracin de Variables y Constantes
Contador PIN 0
Led PIN 8
'_________________________________________________________________________________
'Programa Principal
Inicio:
DO
COUNT Contador,67,Freq
Freq = 52*Freq
DEBUG CRSRXY, 0,3,"Frecuencia: -- ", DEC5 Freq ," Hz --"
TOGGLE Led
LOOP
Al ejecutar ste programa, podemos observar que se ha disminuido el tiempo de espera del comando
COUNT de un segundo a tan solo 19,23 ms. Usted ver como el LED ahora parpadea ms rpido.
Observe con cuidado la codificacin y verificar que: 67 * 52 = 3484. Como ahora el programa ejecuta el
comando COUNT por menos tiempo, el resultado almacenado en la variable Freq no es el valor real de la
frecuencia medida; as que, se debe multiplicar por un factor de escalamiento. Este programa ha mejorado
su eficiencia pero a costa de algo: la prdida de resolucin en la medicin. En el programa 4_2.bsp, la
lectura o no de un pulso afectaba al resultado en 1 Hz. Por su parte, en el programa 4_3.bsp la misma
causa produce una variacin en la lectura final de 52 Hz. Es cuestin de compromiso entre rapidez /
calidad de la medicin.
1
Factor escalamien to =
Tespera
3484
Duracin =
Factor Escalamien to
Figura No. 4.3: Operacin del comando COUNT.
Fuente: Elaboracin Propia.
Existe una forma ms eficiente de medir frecuencia con un BASIC Stamp, utilizando el comando PULSIN.
Con PULSIN se puede medir adicionalmente el ciclo til de la seal. En la figura No. 4.4, se representa
mediante un diagrama de flujo, como se puede medir la frecuencia de una seal mediante el comando
PULSIN.
Ajuste el generador de ondas para producir una seal de 1Khz y ciclo til de 50%. A continuacin introduzca
el programa 4_4.bsp y ejectelo, el debug terminal deber verse como el de la figura No. 4.5.
La unidad de medicin del comando PULSIN es 0.75 s, por lo cual, para obtener el perodo en
microsegundos (s) bastar con multiplicar por 0.75. Sin embargo, recuerde que los microcontroladores
BASIC Stamp slo trabajan con matemtica entera, as que se ha empleado el operado */ ampliamente
comentado en el capitulo No. 3.
INICIO
'Programa 4_4.bsp
'Este programa muestra como :
Declarar P0
' 1) Medir la frecuencia de una seal mediante
como entrada
' la instruccin PULSIN
'==========================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'__________________________________________________________ TAlto = Tiempo que
'Declaracin de Variables y Constantes dura en nivel 1
Tbajo VAR Word
Talto VAR Word
Freq VAR Word TBajo = Tiempo que
Periodo VAR Word dura en nivel 0
Fin PIN 0
'__________________________________________________________
'Programa Principal
Inicio: Periodo = TBajo + TAlto
DEBUG CLS,"Medicin de Frecuencia con el BS2p y PULSIN",CR Periodo = Periodo *0.75
PAUSE 500
DEBUG REP "*"\50,CR
PAUSE 150
Frecuencia = 1.000.000 / Periodo
DO
PULSIN Fin,1,Talto 'Medicin de Thigh
PULSIN Fin,0,Tbajo 'Medicin de Tlow
Periodo = Talto + Tbajo 'Perodo en PULSIN Desplegar valor medido
Periodo = Periodo*/$0C0 'Perodo en us
Freq =16*(62500/Periodo) 'Frecuencia en Hz
DEBUG CRSRXY, 0,3,"Frecuencia Medida: ", DEC5 Freq," Hz",CR
LOOP
'Programa 4_5.bsp
'Este programa tiene como objetivo:
' 1) Medir la frecuencia de una seal mediante la instruccin PULSIN
' 2) Calcular el Ciclo til (Duty Cycle) de una seal utilizando las herramientas
' aprendidas en el captulo No. 3
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
Tbajo VAR Word 'Tiempo que dura el nivel alto
Talto VAR Word 'Tiempo que dura el nivel bajo
Freq VAR Word 'Frecuencia de la seal
Periodo VAR Word 'Perodo de la seal
DC VAR Word '% de la seal en estado alto
Resto VAR Word 'Variable auxiliar
i VAR Nib 'Variable auxiliar
Elementos a Utilizar
El BASIC Stamp 2p, permite la generacin de una o dos
(1) Sistema de Desarrollo MDK-B28 con un BS2p.
ondas sinusoidales de frecuencias comprendidas entre
(1) Banco de Pulsadores. (0 y 32.767 Hz). Para aquellas aplicaciones donde se
(1) Altavoz piezoelctrico sistema MDK-B28. requiera la utilizacin de un sistema de sealizacin
(1) Un cable serial DB9. audible, sta capacidad es de especial inters.
(1) StampW (v2.0 beta 2.1 o superior).
En el siguiente programa se utiliza el comando FREQOUT, con la finalidad de generar tonos a distintas
frecuencias. Para ello, se ha establecido que cada pulsador tiene asociado un tono distinto. En caso de
presionar dos pulsadores al mismo tiempo, se mezclarn los dos tonos particulares de cada pulsador. El
diagrama de flujo del programa puede verse en la figura No. 4.7. La figura No. 4.8 es una fotografa del
altavoz piezoelctrico incorporado al sistema MDK-B28.
Con el sistema de desarrollo apagado, conecte los pulsadores como se muestra en la figura No. 4.9 y el
altavoz piezoelctrico segn la ilustracin No. 4.10.
Energice el sistema de desarrollo y descargue al BASIC Stamp el programa 4_6.bsp. Presione el pulsador
PB1 y escuche el sonido que emite el altavoz. Sino escucha ningn sonido, apague el sistema y revise las
conexiones. Presione PB1, PB2 y PB3 de forma aleatoria. Escuche como el BASIC Stamp efecta la mezcla
de las seales superponiendo las dos ondas sinusoidales. El programa 4_6.bsp fue constituido utilizando
bloques bien definidos como se detallas a continuacin:
Un lazo principal que verifica el estado de los pulsadores PB1, PB2 y PB3.
La rutina VerEdo que discrimina cuales sern las frecuencias de los tonos a emitir.
La rutina GenerarTono encargada de producir el o los tonos deseados.
'Programa 4_6.bsp
'Este programa tiene por objetivo mostrar:
'1) El uso del comando FREQOUT para generar un Tono audible
'2) El uso del comando FREQOUT para mezclar Tonos cuando dos
' pulsadores son presionados
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
Tono1 CON 1200 'Frecuencia del primer tono = 4524 Hz
Tono2 CON 1400 'Frecuencia del segundo tono = 5278 Hz
Tono3 CON 1600 'Frecuencia del tercer tono = 6032 Hz
Silencio CON 0 'Tono de silencio
Falso CON 0
'SUBRUTINAS
VerEdo: '----------------------------------
SELECT Estado '| Pulsadores | Sonido |
CASE 1 '---------------------------------|
freq1 = Tono1 : freq2 = Silencio '| OFF OFF OFF | Ninguno |
CASE 2 '| OFF OFF ON | Tono 1 |
freq1 = Silencio : freq2 = Tono2 '| OFF ON OFF | Tono 2 |
CASE 3 '| OFF ON ON | Tono1 + Tono2 |
freq1 = Tono1 : freq2 = Tono2 '| ON OFF OFF | Tono3 |
CASE 4 '| ON OFF ON | Tono3 + Tono1 |
freq1 = Tono3 : freq2 = Silencio '| ON ON OFF | Tono3 + Tono2 |
CASE 5 '| ON ON ON | Tono1 + Tono2 |
freq1 = Tono3 : freq2 = Tono1 '----------------------------------
CASE 6
freq1 = Tono3 : freq2 = Tono2
CASE 7
freq1 = Tono1 : freq2 = Tono2
CASE ELSE
freq1 = Silencio : freq2 = Silencio
ENDSELECT
RETURN
GenerarTono:
DEBUG CLS,"Frecuencia 1: ", DEC freq1,CR,"Frecuencia 2: ", DEC freq2,CR
IF (freq1 | freq2) <> FALSO THEN FREQOUT Buz,1890, freq1, freq2 ELSE PAUSE 150
Objetivo: Utilizar al BASIC Stamp para generar tonos audibles en funcin de la iluminacin presente en un ambiente.
Para obtener la alimentacin de +5v requerida, el MDK-B28 cuenta con una conexin disponible tanto para
esta tensin como para la referencia de 0V (GND). Con ellas se puede alimentar a cualquier dispositivo o
circuito que se coloque en el rea de protoboard. Encienda al sistema de desarrollo MDK-B28 y descargue al
BASIC Stamp el programa 4_7.bsp.
'Programa 4_7.bsp
'Este programa tiene por objetivo mostrar:
'1) El uso del comando RCTIME para determinar el nivel de iluminacin por medio de
' una fotorresistencia
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
Valor VAR Word 'Variable que contiene el resultado del comando RCTIME
Prom VAR Word 'Promedio entre las medidas tomadas
i VAR Nib 'Variable de uso general
P0 PIN 0 'Terminal conectado al circuito RC
'___________________________________________________________________________________
'Programa Principal:
DO
Prom = 0
FOR i=0 TO 3 'El lazo iterativo es empleado para calcular el promedio
HIGH P0 'entre 4 medidas consecutivas antes de proseguir con el
PAUSE 10 'programa, con esto se logra estabilizar la medicin
RCTIME P0,1,Valor 'efectuada y minimizar el error de en la medida
PAUSE 10
Prom = Prom + (Valor/4)
NEXT
PAUSE 1000
DEBUG HOME,"Valor Base: ",DEC5 Prom,CR
LOOP
El resultado obtenido para las condiciones particulares de este experimento fue 2130. Anote el valor que
usted obtuvo:
A continuacin conecte el altavoz piezoelctrico (buzzer) al punto P3 del BASIC Stamp. Si los resultados de
ejecucin no son los esperados, ajuste la instruccin:
'Programa 4_8.bsp
'Este programa tiene por objetivo mostrar:
'1) El uso del comando FREQOUT para generar sonidos en funcin de la iluminacin de
' un ambiente
'2) El empleo del operador ABS
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
Valor VAR Word 'Variable que contiene el resultado del comando RCTIME
Freq VAR Word 'Valor de la frecuencia del tono
Prom VAR Word 'Promedio entre las medidas tomadas
i VAR Nib 'Variable de uso general
P0 PIN 0 'Terminal conectado al circuito RC
Buz PIN 3 'Terminal conectado al Altavoz piezoelctrico
'___________________________________________________________________________________
'Programa Principal:
DO
Prom = 0
FOR i=0 TO 3
HIGH P0 : PAUSE 10 'Carga del condensador
RCTIME P0,1,Valor 'Descarga del condensador
Prom = Prom + (Valor/4) 'Clculo del promedio
NEXT
El valor de la constante que divide la expresin no es arbitrario; ste se ha calculado para que en el
momento en que la resistencia aumente a 20 k el altavoz piezoelctrico (buzzer) emita un sonido cercano
a 12 kHz.
En la grfica que se muestra a continuacin, puede verse la caracterstica de la resistencia (KOhm) vs. nivel
de iluminacin (Lux), para una fotorresistencia marca Photonic Detectors serie 8100.
Las fotorresistencias son usadas en diversas aplicaciones, ya sea para detectar la presencia de objetos
mediante la obstruccin de un haz luminoso, para medir y controlar la intensidad luminosa en ambientes de
baja iluminancia o para el encendido automtico de luces nocturnas, donde superan a otros tipos de
sensores bsicamente por su bajo precio.
PULSIN
Mide el ancho de un pulso aplicado a un terminal.
Pin: Variable, constante o expresin de (0 - 15) que indica cual terminal de E/S ser utilizado, el mismo
ser convertido en entrada.
Estado: Variable, constante o expresin de 1 bit (0 1) que especifica si el pulso a medir es alto (1) o
bajo (0). La medicin comenzar cuando se produzca una transicin beta o alfa segn sea.
Variable: Variable en la cual se almacena un conteo representativo de la duracin del pulso. La unidad
de este parmetro en un BS2p equivale a 0,75 us.
FREQOUT
Genera uno o dos tonos sinusoidales de un periodo de tiempo especfico, usando un algoritmo de modulacin de
ancho de pulso. En caso de ser dos tonos, estos se mezclaran a travs del terminal especificado, para de esta
forma generar un nico tono.
Pin: Variable, constante o expresin de 0 a 15 que especifica el terminal de E/S usado. Este ser
configurado como salida.
Duracin: Variable, constante o expresin de 0 a 65535. Especifica el periodo de tiempo que dura el
tono generado.
Frecuencia1: Variable, constante o expresin de 0 a 32767. Especifica la frecuencia del primer tono.
Frecuencia2: Variable, constante o expresin de 0 a 32767. Especifica la frecuencia del segundo tono.
En un BS2p, la unidad de tiempo de FREQOUT para el parmetro Duracin equivale a 0.265ms y para los
parmetros Frecuencia1 y Frecuencia2 la unidad de frecuencia equivale a 3.77 Hz.
RCTIME
Mide el tiempo que un Pin permanece en un estado especfico, usualmente encuentra su utilidad en
aplicaciones para medir los tiempos de carga y descarga en circuitos RC.
Pin : Variable, constante o expresin (0-15) que indica cual ser el Pin de Entrada/Salida a usar.
Este Pin ser configurado como entrada.
Estado: Variable, constante o expresin (0-1) que especifica el estado en que se encuentra el Pin,
que se desea medir. Cuando el estado cambia, el comando termina y almacena el resultado en una
variable.
Variable: Variable (usualmente tipo word) en la que se guarda el tiempo medido.
El comando RCTIME permite medir la salida de sensores resistivos o capacitivos, tales como
termistores o sensores capacitivos de humedad, presin o nivel. La unidad de tiempo de sta
instruccin en un BS2p es de 0.9 s. El tiempo mximo de medicin es de 58.982 ms. Figura No. 4.14:
Programacin
1. Utilizando como referencia la figura No. 4.13. Construya la curva caracterstica de la fotorresistencia
que viene instalada su sistema de desarrollo MDK-B28. Utilice para ello, un medidor de intensidad
luminosa (Luxmetro) y haga la medicin de la resistencia con el BASIC Stamp 2p utilizando el
comando RCTIME y el debug terminal. Tome al menos 10 puntos o medidas entre 10 Lux y 100 Lux.
Haga una representacin grfica de los puntos, construya una curva caracterstica KOhm vs. Lux
para su fotorresistencia. Con los valores obtenidos, ahora modifique el programa para que en la
pantalla de su PC se observen los valores de intensidad luminosa (Lux) y compare los resultados con
el valor que mide su Luxmetro. Los resultados son iguales o muy diferentes? Comente los
resultados.
Captulo No. 05
Comunicacin Serial Sincrnica (SPI)
Introduccin. El intercambio de informacin digital entre un microcontrolador y los perifricos puede ser de dos formas: de manera
paralela o serial. La primera implica el envo simultneo de la informacin, es decir, de varios bits (incluso de todos) pertenecientes al
dato, esto no slo ocasiona problemas de costo debido a la necesidad de mayor cableado y de conexiones, sino que afecta un aspecto
crtico del microcontrolador: la cantidad de terminales de E/S utilizados. La comunicacin serial plantea justamente lo contrario, en vez
de enviar los bits del dato de manera simultnea, los enva por separado, uno detrs del otro. El receptor deber entonces invertir el
proceso y reconstruir el dato original. En ste captulo se explicar en detalle todo lo relacionado a la comunicacin serial sincrnica
entre un BASIC Stamp 2p y algunos circuitos perifricos existentes en el sistema de desarrollo MDK-B28.
SPI, es un estndar establecido por Motorola que utiliza un bus de 4 lneas para interconectar dispositivos
perifricos de baja y media velocidad. La comunicacin se realiza siguiendo un modelo maestro/esclavo
donde el maestro selecciona al esclavo y comienza el proceso de transmisin/recepcin de informacin. SPI
constituye un bus full duplex, es decir, que se puede enviar y recibir informacin de manera simultnea, lo
cual, eleva la tasa de transferencia de los datos. En este popular estndar no existe ningn medio de
direccionamiento de los dispositivos esclavos y mucho menos reconocimiento (Acknowledgement) de la
recepcin de los datos, as que, no existe forma alguna para que el dispositivo maestro pueda detectar la
presencia de un esclavo o establecer un medio de control del flujo de datos. La figura No. 5.1 muestra la
conexin tpica de un grupo de dispositivos en un bus SPI.
INTERCONEXIN DE COMPONENTES
El sistema de desarrollo MDK-B28, contiene un amplio conjunto de perifricos disponibles para la experimentacin, estos
abarcan los aspectos ms importantes del aprendizaje con microcontroladores para el desarrollo de aplicaciones. La
interconexin entre los dispositivos, se efecta mediante un terminal de distribucin de 54 x 4 puntos en el que se encuentran
disponibles todas las seales elctricas de importancia para el usuario. Ello reduce al mnimo las posibilidades de errores de
cableado, evitando el deterioro de los componentes del sistema y provee de un elegante e ingenioso medio de conexin.
Estas cuatro combinaciones constituyen los cuatro (4) modos de trabajo del bus SPI, para lograr una
comunicacin exitosa cada par maestro-esclavo dentro del bus tiene que operar en el mismo modo, el cual,
est definido generalmente por el dispositivo esclavo.
El estndar SPI no define un protocolo para la transmisin de los datos y aunque especifica que el nmero
de bits que componen cada dato a transmitir sea de ocho (8) bit, existen muchos dispositivos SPI-
compatibles que no emplean exactamente esta definicin. Ante esto, se hace indispensable recurrir a los
diagramas y especificaciones de tiempo propias del circuito integrado dadas por el fabricante.
Para utilizar al BASIC Stamp como maestro en un bus SPI, se dispone de dos instrucciones: SHIFTIN y
SHIFTOUT, que implementan los modos 0 y 1 del bus a una velocidad de unos 42 kbps y en forma half
duplex.
Estos dispositivos pueden utilizarse de manera individual o compartiendo el bus. En los captulos posteriores
se utilizarn cada uno de stos componentes. En ste captulo slo utilizaremos el controlador de displays
de 7 segmentos. El diagrama de conexin de estos dispositivos se muestra en la figura No. 5.4.
DISPLAY 7 SEGMENTOS
El controlador MC14489, puede utilizarse para manejar un mdulo de 5 dgitos o hasta 25 LEDs por
separado. Cuando el mdulo recibe un dato, este puede ser codificado de acuerdo a la tabla No. 5.1,
pudindose elegir entre la codificacin: Hexadecimal, Especial y No Decodificado.
Cuando se elige el modo No Decodificado para algn banco, las salidas correspondientes a los terminales e, f y g del
display se colocan en nivel bajo (0 V).
SHIFTIN
Recibe informacin desde un dispositivo de comunicacin serial sincrnica, esto permite al microcontrolador
interactuar con un gran nmero de dispositivos, conversores A/D, D/A, relojes, memorias, etc.
DPin: Es una variable, constante o expresin (0 - 15) que especifica el terminal de E/S que ser
conectado a la lnea de datos de salida del dispositivo serial. Este terminal ser convertido en entrada
por la instruccin SHIFTIN.
CPin: Variable, constante o expresin (0 - 15) que especifica el terminal de E/S que ser utilizado
como reloj para la recepcin. La generacin de esta seal de reloj es responsabilidad del dispositivo
maestro, es decir, del BASIC Stamp, por lo cual, este Pin ser usado como salida.
Modo: Es una variable, constante o expresin (0 - 3) que especifica el modo de recepcin, a
utilizar por el comando SHIFTIN. Especifica el orden en el que los bits son recibidos y el flanco
correspondiente de la seal de reloj para lograr una correcta recepcin.
Variable: Es la variable donde se almacenan los bits recibidos.
Bits: Parmetro opcional (1 - 16) que indica la cantidad de bits a recibir. Si no se especifica, el
BS2p asume el valor predeterminado de 8 Bits.
La velocidad de recepcin de los datos, est determinada por la frecuencia del reloj en el Pin Cpin y es de
42.37 Khz, la forma de onda de esta seal se muestra en la figura No. 5.5.
5 Volt ->
Tiempo (us)
Como se mencion con anterioridad, la instruccin SHIFTIN convierte al terminal Cpin en salida y lo
coloca en estado bajo, mientras que Dpin es colocado como entrada (en modo de alta impedancia), y a
continuacin opera segn el modo seleccionado como se muestra a continuacin:
Modo PRE: Lee el estado del pin Dpin y genera un pulso de reloj.
Modo POST: Genera un pulso de reloj y posteriormente lee el estado del Pin.
La tabla No. 5.2 muestra los posibles modos de operacin del comando SHIFTIN.
SHIFTOUT
Enva informacin hacia un dispositivo de comunicacin serial sincrnica.
DPin: Es una variable, constante o expresin (0 - 15). Especifica el terminal de E/S que ser
conectado a la lnea de datos de entrada del dispositivo serial. Este terminal ser convertido en
salida por la instruccin SHIFTOUT.
CPin: Variable, constante o expresin (0 - 15) que especifica el terminal de E/S que ser utilizado
como reloj para la transmisin.
Modo: Variable, constante o expresin (0 - 1), que especifica el modo de transmisin.
Dato: Variable, constante o expresin que contiene la informacin a ser enviada.
Bits: Parmetro opcional (1 - 16) que especifica la cantidad de bits a enviar. De no especificarse se
asume el envo de 8 bits.
reloj (por CPin). Esto se repite hasta concluir con la transmisin del ltimo bit. Existen dos modos de
transmisin que dependen de la forma como los bits son enviados, ver tabla No. 5.3.
Objetivos: Utilizar el comando SHITFOUT para enviar informacin a un dispositivo SPI. Inicializar el display de 7 segmentos y mostrar
datos en l. Controlar los modos de operacin y el brillo del display de 7 segmentos.
Deber ver encender los displays 7 segmentos con un conteo en todos sus dgitos, si no es as revise las
conexiones. Se ha logrado mostrar la informacin enviada desde el microcontrolador por medio de los
displays de una forma muy simple pero poco esttica y difcilmente til, observe por ejemplo como los LEDs
L1, L2 y L3 (ver figura No. 5.11) nunca se apagan en forma simultnea. Otra caracterstica que no se ha
utilizado es la manipulacin de los puntos decimales, trate de encender al menos uno de ellos apyese en
las figuras No. 5.10 y No. 5.12.
'Programa 5_1.bsp
'Este programa muestra como :
' 1) Utilizar la instruccin SHIFTOUT para enviar informacin a un disp. serial.
' 2) Manipular el display de 7 segmentos del Sistema de Desarrollo MDK-B28
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
MOSI PIN 0 'Terminal de entrada de datos al MC14489 conectado a P0
SCK PIN 1 'Terminal de reloj conectado a P1
SS0 PIN 5 'Seal de activacin del MC14489 conectada en P5
'===================================================================================
'SUBRUTINAS
'La rutina Inicia_7SEG define la configuracin dada a los bancos de 7 segmentos
'y enciende la pantalla en este caso se ha usado el modo HEXADECIMAL
Inicia_7SEG:
HIGH SS0
LOW SCK
LOW SS0
SHIFTOUT MOSI,SCK,MSBFIRST,[Normal]
HIGH SS0
RETURN
Ahora bien, existen aplicaciones en las cuales no todos los dgitos son nmeros o se requiere del manejo de
cada LED de manera individual, para tal fin es que el controlador MC14489 dispone varios modos de
decodificacin. Descargue el programa 5_2.bsp al BASIC Stamp y observe cuidadosamente su
funcionamiento.
'Programa 5_2.bsp
'Este programa muestra como:
' 1) Utilizar la instruccin SHIFTOUT para enviar inf. a un dispositivo serial
' 2) Manipular la configuracin del display de 7 SEG para lograr representar
' caracteres No-Numricos o controlar LED's en forma individual.
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
MOSI PIN 0 'Terminal de entrada de datos al MC14489 conectado a P0
SCK PIN 1 'Terminal de reloj conectado a P1
SS0 PIN 5 'Seal de activacin del MC14489 conectada en P5
Inicio:
GOSUB Inicia_7SEG
DO
LOW SCK
FOR x=0 TO 15
LOW SS0
SHIFTOUT MOSI,SCK,MSBFIRST,[x\4,x\4,x\4,x\4,x\4,x\4]
'Se enva un valor entre 0 y 15 a todos los bancos de 7 segmentos, a la
'configuracin del brillo y de los puntos decimales
HIGH SS0
PAUSE 1000
NEXT
GOSUB Low_Power_7SEG
PAUSE 1000
GOSUB Inicia_7SEG
LOOP
'===================================================================================
'SUBRUTINAS
'Inicia_7SEG define la configuracin dada a los bancos de 7 segmentos y enciende la
'pantalla. En este caso se han dispuesto los Bancos 3 y 4 como HEXADECIMAL, los
'Bancos 1 y 2 como ESPECIAL y el Banco 5 como No DECODIFICADO.
Inicia_7SEG:
HIGH SS0
LOW SCK
LOW SS0
SHIFTOUT MOSI,SCK,MSBFIRST,[%01100111\8]
HIGH SS0
RETURN
En este programa ver como los dos ltimos dgitos del banco de displays muestran el mismo conteo del
programa anterior. Pero, el comportamiento de los dos primeros dgitos es diferente coincidiendo con lo
indicado en la columna # 3 de la tabla No. 5.1. Esta cualidad de poder disponer de algunos de los
segmentos para representar nmeros y otros para letras permite desarrollar aplicaciones en las cuales se
presenten pequeas indicaciones que faciliten el uso de las mismas. Por ejemplo, si los displays se utilizarn
como elemento de visualizacin de un sistema de medicin de temperatura, pudiera indicarse con nmeros
la magnitud y con letras las unidades utilizadas para la indicacin.
La otra caracterstica resaltante en este programa es la manipulacin de los LEDs L1, L2 y L3 as como de
los 4 puntos decimales, para comprender esto hace falta estudiar un poco el proceso de configuracin del
circuito MC14489 y la conexin de los mencionados LEDs. Para configurar al controlador MC14489 basta con
enviarle un byte de informacin, en el cual, se especifica el modo de codificacin de los datos recibidos para
cada banco y el estado deseado para los mismos segn se explica en la figura No. 5.9.
Para enviar la informacin a cada uno de los bancos (que se corresponder con lo mostrado en los displays),
se enva un grupo de 24 bits como se muestra en la figura No. 5.10. El primer grupo de 4 bits controla el
brillo de los displays y el encendido de los puntos decimales, cuando se coloca el modo de bajo brillo la
intensidad lumnica emitida por cada diodo LED se disminuye en un 50% con respecto al modo de
alto brillo. Esta es la reduccin en igual proporcin del consumo de corriente. Los dems bits corresponden a
cada uno de los datos que se quieren colocar en los bancos del 5 al 1; el envo de informacin se hace
comenzando por el byte mas significativo MSB. El parmetro /4 aadido al comando SHIFTOUT garantiza el
envo de paquetes de 4 bits por vez.
ENABLE
CLOCK
DATA IN C7 C6 C5 C4 C3 C2 C1 C0
ENABLE
CLOCK
23 22 21 20 19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
DATO DEL BCO 5 DATO DEL BCO 4 DATO DEL BCO 3 DATO DEL BCO 2 DATO DEL BCO1
22 21 20
PUNTOS DECIMALES
0 0 0 TODOS APAGADOS
0 0 1 ACTIVADO EN BCO 1
0 1 0 ACTIVADO EN BCO 2
0 1 1 ACTIVADO EN BCO 3
1 0 0 ACTIVADO EN BCO 4
1 0 1 ACTIVADO EN BCO 5
1 1 0 ACTIVADO EN BCOS 1 y 2
1 1 1 ACTIVADO EN TODOS
Objetivos: Implementar un contador UP/DOWN haciendo uso del banco de displays 7 segmentos como elemento de visualizacin.
Elementos a Utilizar Identifique los terminales PB1, PB2 y PB3 del sistema
MDK-B28. Conctelos con P8, P9 y P10 del BASIC
Stamp, respectivamente. Con ello armar el circuito de
(1) Sistema de Desarrollo MDK-B28 con un BS2p.
(1) Controlador de display de 7 seg MC14489. la figura No. 5.13.
(1) Display de 4x7 segmentos LITEON LTC4727JR.
(1) Banco de Pulsadores.
(1) Cable de programacin.
(1) StampW (ver 2.0 o sup).
'Programa 5_3.bsp
'Este programa tiene por objetivos:
'1) Mostrar el valor de una cuenta por medio de 4 displays de 7 segmentos
'2) Utilizar el operador DIG para extraer los dgitos decimales de una variable
'3) Reforzar los conocimientos adquiridos en el Captulo No. 2.
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
Cuenta:
ON Modo GOSUB Cuenta_Arriba,Cuenta_Abajo 'Dependiendo del modo la cuenta
GOTO Fin 'ser ascendente o descendente
Reiniciar: ' Reiniciar la cuenta en cero
Cta = 0
GOTO Fin
'===================================================================================
'SUBRUTINAS
Cuenta_Abajo:
Cta = Cta - 1
RETURN
Cuenta_Arriba:
Cta = Cta+1
RETURN
En la lnea de programacin que contiene a la instruccin SHIFTOUT dentro del lazo DO...LOOP, se
maneja la actualizacin del conteo. El primer nibble enviado indica modo bajo brillo, con todos los puntos
decimales apagados. El segundo nibble apaga los LEDs L1, L2 y L3. A continuacin, se envan uno por uno
los dgitos de la cifra a mostrar comenzando con el menos significativo. Para extraer un dgito de una
variable se utiliza el operador DIG. Observe como los argumentos de la instruccin SHIFTOUT pueden
incluir incluso operaciones matemticas lo que permite presentar un cdigo compacto y sencillo de entender.
Elementos a Utilizar
Identifique los terminales PB0 y PB1 del MDK-B28, y
(1) Sistema de Desarrollo MDK-B28 con un BS2p. conctelos con P8, P9 del BASIC Stamp. Descargue el
(1) Controlador de display de 7 seg MC14489. programa 5_4.bsp al microcontrolador.
(1) Display de 4x7 segmentos LITEON LTC4727JR.
(1) Banco de Pulsadores.
(1) Cable de programacin.
(1) StampW (ver 2.0 Beta 2.1 o sup)
INICIO
'Programa 5_4.bsp
'Este programa tiene por objetivo:
'1) Implementar un reloj digital simple.
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
'===================================================================================
'SUBRUTINAS
'Init configura al display para que los bancos 1,2,3,4 operen en modo HEX y el 5
'en modo No Decodificado para poder manipular directamente a L1,L2,L3
Init:
LOW SS0 : SHIFTOUT MOSI,SCK,MSBFIRST,[%01100001\8] : HIGH SS0
Hora = 12 : Seg =0 : Minu = 0 : AM_PM = Am
'La hora predeterminada durante la inicializacin es 12:00 am
RETURN
'UpDate muestra la hora y hace parpadear los dos puntos del display, adems en ella
'transcurre la mayor parte de la temporizacin de la base de tiempo de 1 segundo
UpDate:
LOW SS0 :
SHIFTOUT MOSI,SCK,MSBFIRST,[$0\4,($8+AM_PM)\4,Minu DIG (0)\4,Minu DIG(1)\4,
Hora DIG(0)\4,Hora DIG(1)\4]
HIGH SS0 : PAUSE 490
LOW SS0
SHIFTOUT MOSI,SCK,MSBFIRST,[$0\4,($3+AM_PM)\4,Minu DIG (0)\4,Minu DIG(1)\4,
Hora DIG(0)\4,Hora DIG(1)\4]
HIGH SS0 : PAUSE 500
RETURN
Check_Segundos:
IF Seg<60 THEN RETURN
Minu = Minu + 1
Seg = 0
GOSUB Check_Minutos
RETURN
Check_Minutos:
IF Minu < 60 THEN RETURN
Hora = Hora+1
Minu = 0
GOSUB Check_Hora
RETURN
Check_Hora:
IF Hora = 12 THEN
IF AM_PM = Am THEN AM_PM = Pm ELSE AM_PM = Am
ELSEIF Hora >12 THEN
Hora = 1
ENDIF
RETURN
Programacin
2. Repita el programa anterior y agregue lneas para que ahora, los dos displays no utilizados indiquen
H-, cuando se est en el modo de alto brillo y L- cuando se trabaje en modo de bajo brillo.
Introduzca una pausa de 250 ms cada vez que se incremente el conteo.
Captulo No. 06
Conversin Analgica a Digital (A/D) y
Digital a Analgica (D/A)
Cuando un ADC convierte una seal DC, sta se deber mantener constante durante todo el tiempo que
demora la conversin; permitiendo as efectuar una correcta digitalizacin del valor de la entrada. Por el
contrario, cuando la seal vara como funcin del tiempo en ms de un LSB (durante la digitalizacin), el
ADC producir un resultado incorrecto (error de la lectura). Para reducir este error suelen aplicarse dos
soluciones: el uso de un filtro pasa bajo que evita que el ADC perciba variaciones mayores a 1 LSB o
mediante el uso de un circuito de muestreo y retencin.
Resolucin de 12 bits.
Velocidad mxima de muestreo de 11.1 ksps.
2-Canales multiplexados de entrada con posibilidad de medicin en modo diferencial.
Interconexin compatible con bus SPI y Microwire, con comunicacin Half Duplex.
Consumo de 1nA mientras no se efecta conversin y de 350 A cuando se convierte.
Circuito de Sample and Hold en el propio integrado.
Conversin por medio de aproximaciones sucesivas.
Encapsulado PDIP de 8 terminales.
m 2 max
Tabla No. 6.1: Seleccin del canal y del modo operacin del LTC1298.
Fuente: Modificado de LTC1298 Micropower Sampling 12-Bit A/D Converters.
Objetivo: Medir una tensin analgica DC de 0-5 Voltios por medio del conversor A/D LTC1298.
Gire la perilla del potencimetro y observe como cambia el valor de la tensin mostrado en la pantalla. Si
esto no ocurre, apague el sistema y revise las conexiones.
'Programa 6_1.bsp
'Este programa muestra como utilizar el conversor A/D LTC1298 para medir una tensin
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
'___________________________________________________________________________________
'Programa Principal
'===================================================================================
'SUBRUTINAS
Conv_A2D:
LOW SS1 'Inicia la transaccin de datos
SHIFTOUT MOSI,SCK,MSBFIRST,[%1101\4] 'Modo No diferencial, MSB primero , Canal 0
SHIFTIN MISO,SCK,MSBPOST,[Conv\12] 'Recibe los datos de la conversin
HIGH SS1
RETURN
Voltios:
Volts = 0
Resto = Conv//4096
FOR i=0 TO 3
Resto = Resto*10
Volts = (Volts*10)+(Resto/4096)
Resto = Resto//4096
NEXT
Volts = Volts * 5
i = Volts DIG (0)
i = i/5
Volts = (Volts/10)+i
RETURN
An cuando en las especificaciones del ADC se observa claramente que existe un null bit (bit nulo), que es
enviado desde el LTC1298 al microcontrolador luego de recibir la configuracin, se ha empleado la
instruccin:
SHIFTIN MISO,SCK,MSBPOST,[Conv\12]
Es decir, que se generaran 12 pulsos de reloj y se leern 12 bits y no 13 como se esperaba (el bit nulo + 12
de la conversin). Esto a primera vista puede parecer un error, pero podemos encontrar la explicacin
observando el diagrama presentado en la figura No. 6.7.
Los primeros cuatro pulsos del reloj corresponden al envo de la configuracin desde el microcontrolador al
LTC1298. Al ocurrir el cuarto flanco de bajada en la seal de reloj, el LTC1298 toma el control de la lnea
Dout y la coloca a 0V. Esto se mantiene hasta el prximo flanco de bajada del reloj. Al utilizar el modo
MSBPOST, resulta evidente que cuando el BASIC Stamp lee el valor del pin Dout (poco antes de generar el
siguiente pulso de reloj) ya no est presente el null bit en l, sino que, en ese pin est el valor del bit 11 de
la conversin A/D, fjese en la parte superior de la figura No. 6.7. Si se usa el modo MSBPRE, la situacin
cambia totalmente y el valor del null bit si es ledo por el BS2p, requiriendo entonces cambiar la instruccin
que recibe los datos por: SHIFTIN MISO,SCK,MSBPRE,[Conv\13].
Objetivos: Implementar con el BASIC Stamp y el LTC1298 un voltmetro DC de 0 a 5 Voltios que muestra el valor del voltaje medido
en un display de 7 segmentos. Utilizar ms de un dispositivo conectado al bus SPI/ 3-Wire del sistema desarrollo MDK-B28 de manera
simultnea.
Elementos a Utilizar
'Programa 6_2.bsp
'Este programa muestra como:
'1) Utilizar el conversor AD LTC1298 para medir una tensin Vdc.
'2) Promediar un conjunto de muestras tomadas de una variable
'3) Manejar mltiples dispositivos sobre el BUS SPI/3-Wire
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
'___________________________________________________________________________________
'Programa Principal
'===================================================================================
'SUBRUTINAS
Obtener_Medida:
FOR i = 0 TO 15
Conv = 0
GOSUB Conv_A2D
PAUSE 10
Prom = Prom + Conv
NEXT
Prom = Prom / 16
RETURN
Conv_A2D:
LOW SS1
SHIFTOUT MOSI,SCK,MSBFIRST,[%1101\4]
SHIFTIN MISO,SCK,MSBPOST,[Conv\12]
HIGH SS1
RETURN
Voltios:
Volts = 0
Resto = Prom//4096
FOR i=0 TO 3
Resto = Resto*10
Volts = (Volts*10)+(Resto/4096)
Resto = Resto//4096
NEXT
Volts = Volts * 5
i = Volts DIG (0)
i = i/5
Volts = (Volts/10) + i
RETURN
En el programa 6_2.bsp, se ha utilizado el BUS SPI/3-Wire del sistema de desarrollo de una manera
diferente a como se hizo en el Captulo No. 5. Esta vez, son dos los dispositivos que se encuentran
conectados al bus, por lo cual, hay que utilizar a dos seales de habilitacin (SS0 y SS1) y mantener un
estricto control sobre stas, a fin de evitar, que un dispositivo reciba informacin que no estaba dirigida a l.
Otra diferencia notable con el programa anterior, es el clculo del promedio antes de mostrar un resultado.
Si no se implementa un ciclo de espera entre cada medicin de la seal, el resultado mostrado en el display
estara variando constantemente (debido a los errores de medicin y al ruido presente en la seal de DC que
estamos midiendo); esto evitara una visualizacin correcta del ltimo dgito en el display. Para solventar
este inconveniente podemos utilizar cualquiera de estos dos procedimientos:
El primero, sera el uso de filtros aplicados en la entrada analgica del convertidor A/D. Ello evitara la
presencia del ruido pero persistira el constante cambio debido al error del ltimo dgito de la conversin,
adems de la evidente necesidad de instalar el filtro y calcular la frecuencia de corte del mismo.
Se minimiza el error de la propia medicin. Este error se especifica como una fraccin del LSB la suma
contendr el promedio de los errores positivos y negativos, lo cual, en el peor de los casos ser igual al
mximo error especificado por el fabricante.
La figura No. 6.9 muestra al programa 6_2.bsp en funcionamiento. Al terminar apague el sistema de
desarrollo MDK-B28.
Objetivos: Utilizar al BASIC Stamp para medir dos variables analgicas y graficar el valor de estas en el computador.
Elementos a Utilizar
'Programa 6_3.bsp
'Este programa muestra como medir dos variables analgicas de manera simultanea con
'el convertidor analgico a digital modelo LTC1298.
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
'___________________________________________________________________________________
'Programa Principal
PAUSE 500
DEBUG "!NEWP",CR 'Nueva grfica
DEBUG "!PLOT ON",CR 'Activar la graficacin
DEBUG "!MAXT",CR 'Mximo basado en tiempo
DEBUG "!TMAX 5",CR 'Tiempo mximo en eje horizontal = 5 seg
DEBUG "!AMAX 4096",CR 'Mximo en el eje vertical
DEBUG "!AMSK 0",CR 'Eje de vertical en escala de enteros
DEBUG "!MENU OFF",CR 'Desactivar Men de opciones
DEBUG "!TBAR OFF",CR 'Desactivar la barra de tareas
DEBUG "!FLSH ON",CR 'Libera un 20% espacio de la memoria utilizada por el SPlot
DEBUG "!FAMT 20",CR 'durante la graficacin al alcanzar el mx. de puntos o tiempo
DEBUG "!REFR",CR 'Actualiza la grfica
PAUSE 500 'Espera de 500 ms
'===================================================================================
'SUBRUTINAS
'La subrutina Conv_A2D Efecta el proceso de conversin
Conv_A2D:
LOW SS1 'Inicia la transaccin de datos
SHIFTOUT MOSI,SCK,MSBFIRST,[Config\4] 'Modo No diferencial, MSB primero , Canal 0
SHIFTIN MISO,SCK,MSBPOST,[Conv\12] 'Recibe los datos de la conversin
HIGH SS1
RETURN
Con el BASIC Stamp 2p, se puede realizar la conversin D/A haciendo uso del comando PWM. Este
comando permite convertir un valor digital a una salida analgica por medio de la modulacin del ancho de
pulso (PWM).
Pin: Es una variable, constante o expresin (0-15) que especifica el Pin de Entrada/Salida usado.
Este terminal es configurado como salida inicialmente y colocado como entrada cuando termina la
ejecucin de la instruccin.
Ciclo til: Es una variable, constante o expresin (0-255) que especifica el ciclo til de la seal,
referido a niveles de tensin analgica de salida (0-5) Volt DC.
Ciclo: Es una variable, constante o expresin (0-255) que especifica los ciclos de la seal PWM que
se van a generar.
Explicacin PWM, la modulacin por ancho de pulsos es capaz de generar un voltaje anlogo. Recuerde
que con los microcontroladores slo podemos obtener dos valores discretos Cero (0 Volt.) y Uno (5 Volt.). Si
usted define un Pin como salida, slo puede obtener un voltaje de 0 voltios o de 5 voltios. Pero, si se logra
cambiar rpidamente la salida de una seal baja a una seal alta, el resultado es un tren de pulsos de modo
que estaran la mitad del tiempo en 0 Voltios y la otra mitad en 5 Voltios, el voltaje promedio en el Pin PWM
sera de 2.5 Voltios y el ciclo til sera 50%. De esta forma, se pueden producir voltajes analgicos
comprendidos entre 0 Volts. y 5 Volts. La relacin entre la cantidad de niveles altos y bajos se denomina
ciclo til. El ciclo til controla el voltaje analgico de una manera directa y proporcional. Mientras ms alto es
el valor del ciclo til, ms alto debe ser el voltaje de salida. En el caso del BS2p, el ciclo til puede
representarse entre (0 - 255) lo que equivaldra a (0% - 100%).
Cunto tiempo mantendr el condensador el voltaje depender de cunta corriente sea consumida por el
circuito externo. Para que el voltaje se mantenga relativamente constante, el programa debe repetir
peridicamente la instruccin de PWM para mantener al condensador cargado. As como toma tiempo el
descargar al condensador, tambin toma el mismo tiempo cargarlo. La instruccin de PWM le permite
especificar el tiempo de carga en trminos de los ciclos de PWM. Cada ciclo es un perodo de
aproximadamente 652 us, para un BASIC Stamp 2p. As que, para cargar un condensador durante 6.52ms,
usted deber utilizar 10 ciclos de (652 s) de la instruccin de PWM. Ahora bien, Cmo usted determina
cuanto tiempo necesita para cargar un condensador?
En un circuito RC, es evidente que la respuesta temporal ante una entrada de tipo escaln viene dada por la
expresin:
t
Vc = Vf * 1 e RC
Por ejemplo, en la figura No. 6.13 una resistencia de 10k y un condensador de 1F. Tiempo de Carga = 4 *
R * C. Tiempo de Carga = 4 * 10,000 (ohmios) * 1E-6 (F) Tiempo de Carga = 40 ms. Puesto que cada ciclo
es aproximadamente de un 652 us, tomara por lo menos 61.35 ciclos para cargar el condensador. Sin
embargo, la instruccin PWM slo acepta operandos enteros, lo que nos lleva a
escoger el entero superior del valor 61.35, o sea 62. Asumiendo que el circuito PWM 0, 127,62
este conectado al Pin 0, para cargar el condensador a 2.5 Volt, la instruccin
completa de PWM ser como la mostrada en el cuadro anexo.
'Programa 6_4.bsp
'Este programa muestra como controlar el brillo de un LED mediante PWM
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
DO
PAUSE 250
FOR CicloUtil = 0 TO 255
PWM LED,CicloUtil,25
NEXT
FOR CicloUtil = 255 TO 0
PWM LED,CicloUtil,25
NEXT
LOOP
Arme el circuito de la figura No. 6.16. Introduzca al microcontrolador el programa 6_5.bsp. Observe la
lectura en el display de 7 segmentos. Cambie el valor de la constante CicloUtil a 100 y descargue
nuevamente el programa.
'Programa 6_5.bsp
'Este programa muestra como generar una tensin analgica con PWM y un circuito RC
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
'___________________________________________________________________________________
'Programa Principal
'===================================================================================
'SUBRUTINAS
Init_7seg:
LOW SS0 : SHIFTOUT MOSI,SCK,MSBFIRST,[$61] : HIGH SS0
RETURN
Obtener_Medida:
FOR i = 0 TO 15
Conv = 0 : GOSUB Conv_A2D : PAUSE 10
Prom = Prom + Conv
NEXT
Prom = Prom / 16
RETURN
Conv_A2D:
LOW SS1
SHIFTOUT MOSI,SCK,MSBFIRST,[%1101\4]
SHIFTIN MISO,SCK,MSBPOST,[Conv\12]
HIGH SS1
RETURN
Voltios:
Volts = 0 : Resto = Prom//4096
FOR i=0 TO 3
Resto = Resto*10 : Volts = (Volts*10)+(Resto/4096) : Resto = Resto//4096
NEXT
Volts = Volts * 5
i = Volts DIG (0)
i = i/5
Volts = (Volts/10)+i
RETURN
Conecte una resistencia de 4.7 Kohms entre el terminal P7 y 0v (tierra) y observe el resultado. Desconecte
esa resistencia y conctela ahora al terminal CH0. El comando PWM del BS2p es una herramienta de suma
utilidad para generar una seal analgica de manera sencilla. Para su correcto funcionamiento la red RC
colocada a la salida del PIN que genera la onda modulada, debe ser bien calculada lograr mantener el valor
de voltaje DC deseado. Cuando se conecta la resistencia de 4.7 Kohms a P7 se altera directamente el
circuito RC, especialmente en el proceso de descarga. La instruccin PWM una vez que han finalizado los
ciclos que efecta, convierte al terminal usado en una entrada (con una resistencia aproximada de 1 Mohm),
por lo cual, el circuito de descarga del condensador al tener un valor resistivo tan elevado, demora un
tiempo considerable en descargarse. Al colocar la resistencia de 4.7 Kohms, este valor se reduce hasta el
orden de varios Kohms descargndose el condensador en un tiempo muy corto (an antes de que se le
refresque la carga con una nueva PWM).
Para solventar este problema y poder efectuar una conversin til que maneje un cierto nivel de carga, es
necesario el uso de un circuito que acte como amplificador y brinde una entrada de muy alta impedancia
que no altere de manera considerable al arreglo RC. Con este fin, el sistema de desarrollo MDK-B28 cuenta
con un circuito seguidor de tensin basado en un amplificador operacional que permite manipular una carga
de hasta 50 mA. El amplificador operacional de ganancia unitaria, se est utilizando como acoplador de
impedancias en este ejercicio. Sin embargo, este amplificador se puede utilizar en cualquier ejercicio futuro,
ya que, sus terminales de entrada y salida estn disponibles en la regleta de conexin principal.
Programacin
1. Utilizando un BASIC Stamp 2p, construya un convertidor de seales. La entrada podr variar de 0 a
5 Volt DC y la salida deber variar entre 4 y 20 mili-amp. Muestre en el display de 7 Segmentos los
valores de corriente en mili-amp. Con una exactitud de 0.01 mili-amp. Utilice los componentes que
se indican a continuacin y explique cual es la funcin cumplen cada uno de ellos.
Captulo No. 07
Pantalla de Caracteres LCD
Introduccin. En captulos anteriores, se han utilizado como dispositivos de visualizacin los diodos LED y la pantalla de LEDs de siete
segmentos. Estos han demostrado ser sencillos, eficientes y econmicos como elementos de visualizacin. Sin embargo, existirn
ocasiones donde se necesite visualizar una gran cantidad de informacin o texto alfanumrico, y es precisamente aqu, donde la
pantalla de cristal lquido (LCD) lo puede hacer mejor que cualquier otro dispositivo. En este captulo, se har una explicacin detallada
acerca del funcionamiento de una pantalla LCD de caracteres, la misma, se utilizar de ahora en adelante en casi la totalidad de los
experimentos.
La Pantalla LCD es uno de los perifricos ms empleados para la presentacin de mensajes, variables y casi
cualquier informacin proveniente de un microcontrolador. Gracias a su flexibilidad, buena visibilidad y
precio reducido se ha introducido de manera determinante en el mercado.
LCD Alfanumrica
Pantalla en la cual, se pueden presentar caracteres y
smbolos especiales en las lneas predefinidas del LCD. Su
especificacin viene dada como cantidad de caracteres por
columna y nmero de filas del display. Por ejemplo: 2 x 16, 4
x 20.
LCD Grfica
Pantalla en la cual, se pueden presentar caracteres, smbolos
especiales y grficos. Su especificacin viene dada en
pxeles. Por ejemplo 128 x 64.
LCD Paralela
Los datos y comandos son enviados a travs de un bus de
datos paralelo, ya sea en modo de 4 o de 8 bits.
LCD Serial
La pantalla es capaz de recibir la informacin de manera
serial asincrnica utilizando slo 2 lneas para este fin. Toda
pantalla paralela puede ser convertida a serial mediante un
circuito especializado, como por ejemplo el Controlador serial
para LCD modelo SLCD-IC.
Las pantallas LCD que incluyen un controlador interno y dedicado como el HITACHI 44780 pueden:
Los terminales de conexin de las pantallas LCD de caracteres han DDRAM (Display Data RAM)
sido estandarizados, siendo generalmente compatibles pin a pin con Memoria voltil de 80 bytes, en la cual,
la tabla No. 7.1. se almacenan los caracteres que se van a
mostrar en la pantalla.
CGROM
Terminal Nombre Funcin Descripcin (Character Generator ROM)
1 Vss Energa Referencia 0 V. GND Memoria no voltil que almacena los
2 Vdd Energa +5 V DC caracteres predefinidos soportados por la
3 Vee Ajuste Contraste Variable de 0 a 5 V pantalla y su controlador.
4 RS Comando Seleccin de Dato/Comando
Ocho Bits
5 R/W Comando Control de Lectura/Escritura Modo de trabajo en el que se utilizan
6 E Comando Habilitacin todos los bits para la transmisin de los
7 D0 E/S DATO LSB datos y los comandos hacia una LCD.
8 D1 E/S DATO
Cuatro Bits
9 D2 E/S DATO
Modo de trabajo en el cual la
10 D3 E/S DATO transferencia de informacin se efecta
11 D4 E/S DATO por medio de los cuatro (4) bits ms
12 D5 E/S DATO significativos.
13 D6 E/S DATO
El modo de trabajo de 4 bits permite
14 D7 E/S DATO MSB
reducir el nmero de terminales del
microcontrolador destinados a la interfaz
Tabla No. 7.1: Terminales de Conexin para una LCD del LCD, pero se obtiene una menor
alfanumrica estndar. velocidad de transferencia de la
Fuente: The Extended Concise LCD Data Sheet for HD44780, informacin.
http://www.beyondlogic.com.
La informacin que se enva a la pantalla LCD puede interpretarse de dos maneras: como un comando,
cuando se coloca al terminal denominado RS en nivel bajo. Y como un carcter, cuando el terminal RS est
en nivel alto. Un comando es un dato numrico de 8 bits que le indica al controlador HITACHI 44780 o
compatible, que debe realizar una cierta operacin.
Valor
Comandos Descripcin
Numrico
No se efecta ninguna
Nulo 0
operacin especial.
Limpia la pantalla y desplaza
Limpiar LCD 1 el cursor a la posicin 0
(Home).
Mueve el cursor a la posicin
Home LCD 2
de inicio.
Incrementar Mueve el cursor a la derecha
6
cursor sin desplazar la pantalla.
Apaga al LCD sin perder los
Off LCD 8
datos que esta tena.
Enciende al LCD sin mostrar
el cursor y con el ltimo
On LCD 12
contenido almacenado en
buffer.
Parpadeo del Enciende el LCD con el
13
cursor cursor parpadeando.
Cursor Enciende el LCD con el
14
subrayado cursor con un subrayado.
Cursor Mueve el cursor un carcter
16
izquierda a la izquierda.
Cursor Mueve el cursor un carcter
20
derecha a la derecha.
Scroll Desplaza la pantalla 1
24
izquierda carcter a la izquierda.
Desplaza la pantalla 1
Scroll derecha 28
carcter a la derecha.
Mueve el apuntador a una
Mover a
64 localidad de la memoria de
direccin
+ direccin generacin de caracteres
CGRAM
(Character Generator RAM).
Mueve el cursor a una
Mover a
128 localidad de la memoria de
direccin
+ direccin visualizacin de caracteres
DDRAM
(Display Data RAM).
Tabla No. 7.2: Comandos de uso comn de un LCD. Tabla No. 7.3: Set de caracteres para un Hitachi 44780.
Fuente: PBASIC Syntax Guide, Parallax 2003. Fuente: Manual del controlador HD44780.
An cuando los comandos de la tabla No. 7.2 son suficientes para manejar la pantalla LCD en la mayora de
las aplicaciones, el programador puede crear sus propios comandos de control, utilizando para ello las
especificaciones que suministra el fabricante. En el caso de las pantallas que utilizan el controlador HITACHI
44780, se puede emplear la tabla No. 7.5.
Lnea 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 39
Lnea 2 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 ... 103
Posiciones Visibles
Lnea 1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
Lnea 2 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
Lnea 3 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
Lnea 4 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103
Tabla No. 7.4: Posiciones en una pantalla LCD de 2x16 y 4x20. Nmeros en Hexadecimal.
Fuente: PBASIC Syntax Guide, Parallax 2003.
Instruccin RS RW D7 D6 D5 D4 D3 D2 D1 D0 Descripcin
Direccin del cursor (I/D).
Modo de entrada 0 0 0 0 0 0 0 1 I/D S
Auto desplazamiento de la pantalla(S)
Encendido/Apagado de la LCD (D) y del
Control de pantalla y del cursor 0 0 0 0 0 0 1 D C B
cursor ( C). Parpadeo del cursor (B).
Desplaza la pantalla o el cursor (S/C) en la
Desplazamiento 0 0 0 0 0 1 S/C R/L x x
direccin especificada por (R/L).
Ancho del bus de datos (DL). Nmero de
Seleccin de Funciones 0 0 0 0 1 DL N F x x
lneas (N). Tamao de la letra (F).
Mueve el apuntador de la CGRAM a la
Mover a direccin CGRAM 0 0 0 1 Direccin
posicin indicada.
Mueve el apuntador de la DDRAM a la
Mover a direccin DDRAM 0 0 1 Direccin
posicin indicada.
Escribir al LCD 1 0 Dato Escribe informacin (CGRAM o DDRAM).
LCDCMD
Enva un comando a una pantalla LCD.
Pin : Es una variable, constante o expresin (0 - 1 8 - 9) que indica cuales de los pines de E/S
sern usados para manipular la pantalla LCD.
Comando: Es una variable, constante o expresin (0 - 255) con el valor del comando a enviar
al LCD, ver tabla No. 7.2.
LCDIN
Recibe informacin proveniente de una pantalla LCD y es empleada para leer el contenido de las memorias
DDRAM y CGRAM.
LCDIN Pin, Direccin, [Datos]
Pin: Es una variable, constante o expresin (0 - 1 8 - 9) que indica cuales de los pines de E/S
sern usados para manipular la pantalla LCD.
Direccin: Es una variable, constante o expresin (0 - 255) que indica la direccin de memoria
RAM de la pantalla LCD que se quiere leer.
Datos: Es un listado de variables con sus respectivos modificadores de formato que definen
como ser interpretada la informacin entrante.
LCDOUT
Enva un comando, seguido de al menos un byte de datos al LCD.
Pin: Es una variable, constante o expresin (0 - 1 8 - 9) que indica cuales de los pines de E/S
sern usados para manipular la pantalla.
Comando: Es una variable, constante, expresin (0 - 255) con el valor del comando a enviar al
LCD.
Datos: Es una lista de variables, constantes o expresiones con sus respectivos modificadores
que indican la forma en que sern transmitidos a la pantalla.
LOOKUP
Efecta la bsqueda de un elemento, dado su ndice, dentro de una lista.
Indice: Es una variable, constante o expresin en el rango de 0 a 255 que indica la posicin
dentro de la lista del elemento que se desea extraer.
Valor0, Valor1 ValorN : Son variables, constantes o expresiones de 0 a 65535, que
componen la lista.
Variable: Es una variable en el rango de 0 a 65535 que contendr el valor del elemento
encontrado en la posicin Indice.
Si Indice excede el tamao de la lista de elementos, Variable no cambiar su valor.
LOOKDOWN
Permite hacer la bsqueda de un elemento dentro de una lista de acuerdo a un criterio y retorna la
ubicacin del primer elemento que satisface la condicin.
DATA
Permite escribir informacin en la EEPROM durante el proceso de descarga del programa al BASIC Stamp.
READ
Lee una o ms localidades de la memoria EEPROM y almacena en una o ms variables el contenido de la(s)
misma(s).
Objetivo: Manipular una pantalla de cristal lquido paralela de 2x16 como elemento de visualizacin.
'Programa 7_1.bsp
'Este programa tiene por objetivo mostrar:
'1) El uso de la pantalla LCD como dispositivo de visualizacin
'2) El uso de LCDCMD y LCDOUT para enviar comandos y mensajes a la pantalla LCD
'3) Ejecutar la rutina de inicializacin de la pantalla LCD
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
LCDPin PIN 0
PB1 PIN 8 'Pulsador PB1
PB2 PIN 9 'Pulsador PB2
PB3 PIN 10 'Pulsador PB3
BZ PIN 11 'Salida al piezoelctrico
LED PIN 12 'Salida al LED
'___________________________________________________________________________________
'Programa Principal:
Inicio:
GOSUB IniLcd 'Inicializacin de la pantalla
LOW LED 'Apagar el LED conectado a P12
Menu:
LCDCMD LCDPin ,BorrarLCD 'Limpiar la pantalla
DO
LCDOUT LCDPin ,MoverCrsr + 3,["***MENU****"] 'Ttulo del Men
LCDOUT LCDPin ,MoverCrsr+64,["1 BZ 2 LED 3 MSG"] 'Items del Men
BUTTON PB1,0,255,0,pulset1,1,PS1 'Si PB1 fue presionado va a PS1
BUTTON PB2,0,255,0,pulset2,1,PS2 'Si PB2 fue presionado va a PS2
BUTTON PB3,0,255,0,pulset3,1,PS3 'Si PB3 fue presionado va a PS3
LOOP
PS1:
LCDCMD LCDPin ,BorrarLCD 'Limpiar pantalla
LCDOUT LCDPin ,MoverCrsr+64,["Sonido..."] 'Enviar mensaje a la posicin
FREQOUT BZ,1500,1200 'Generar el sonido
PAUSE 1000
GOTO Menu
PS2:
LCDCMD LCDPin ,BorrarLCD 'Limpiar la pantalla
LCDOUT LCDPin ,MoverCrsr+2,["OBSERVE COMO"] 'Mostrar mensaje
LCDOUT LCDPin ,MoverCrsr+64+3,["P12 CAMBIA"]
TOGGLE LED 'Cambiar el estado del LED
PAUSE 1000
GOTO Menu
PS3:
FOR x=0 TO 4
LCDCMD LCDPin ,BorrarLCD 'Limpiar pantalla
LCDOUT LCDPin ,MoverCrsr,["PANTALLA LCD"] 'Enviar el mensaje a la lnea 0
PAUSE 300
LCDCMD LCDPin ,BorrarLCD 'Limpiar pantalla
LCDOUT LCDPin ,MoverCrsr+64,["PANTALLA LCD"] 'Enviar el mensaje a la lnea 1
PAUSE 300
NEXT
PAUSE 300
FOR x=0 TO 5 'Genera el efecto de parpadeo
LCDCMD LCDPin ,LCDOFF 'del mensaje en pantalla
PAUSE 200
LCDCMD LCDPin ,LCDON
PAUSE 200
NEXT
GOTO Menu
'===================================================================================
'SUBRUTINAS
El programa 7_1.bsp, muestra como efectuar las operaciones ms simples con una pantalla LCD, es decir,
inicializarla y mostrar en ella una serie de caracteres. Merece especial atencin la rutina de inicializacin,
pues de su correcto funcionamiento depender que la pantalla reconozca los comandos y datos que le sern
enviados posteriormente. Si no puede lograr una visualizacin correcta de la pantalla, ajuste el contraste
mediante el potencimetro RP.
La figura No. 7.5. muestra el diagrama de flujo para inicializar una pantalla LCD en modo de 4 bits. La rutina
IniLcd, hace uso de este diagrama para inicializar al LCD en modo de 4 bits, 2 lneas, fuente 5x8, pantalla
sin cursor y con auto-incremento. IniLcd se inicia con una espera de 1000 ms, tiempo mucho mayor que el
requerido, que garantiza la estabilizacin de la pantalla y de sus circuitos internos.
El programa presenta un men al usuario y ejecuta una cierta accin de acuerdo a la seleccin que se
efecte. Si se selecciona la opcin 1 del men (BZ) se producir un sonido de unos 4.5 Khertz. Al seleccionar
la opcin 2 (LED) se cambiar el estado del pin P12 del BASIC Stamp, encendiendo y apagando
alternadamente al LED conectado a ste. La opcin 3 desencadena un efecto mucho ms llamativo al
mostrar el mensaje PANTALLA LCD en las dos lneas del LCD para luego hacerlo parpadear.
IniLcd
Figura No. 7.5: Diagrama de flujo para la inicializacin de un LCD con el controlador HITACHI 44780.
Fuente: Fuente: Hitachi HD44780, Manual del usuario.
Objetivo: Utilizar el BASIC Stamp 2p para manipular una pantalla de cristal lquido paralela de 2x16 y configurarla en sus distintos
modos de operacin.
'Programa 7_2.bsp
'Este programa tiene por objetivo mostrar como configurar en los distintos modos de
'operacin de la pantalla LCD
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
'___________________________________________________________________________________
'Programa Principal:
Inicio:
GOSUB IniLcd
Menu:
LCDCMD LCDpin,LCDON 'Configuracin Inicial
LCDOUT LCDpin,MoverCrsr,["PROGRAMA 7_2.bsp"]
LCDOUT LCDpin,Linea2,["PB1 = CONTINUAR"]
NPS1:
BUTTON S1,0,255,0,pulset1,0,NPS1 'Espera hasta que PB1 sea presionado
PAUSE 100
LCDCMD LCDpin,BorrarLCD 'Limpiar la pantalla
LCDOUT LCDpin,MoverCrsr,["1-SCur 2-CCur"] 'Permite desplegar el
LCDOUT LCDpin,Linea2,["3-SCurB 4-CCurB"] 'siguiente men de opciones
DO
BUTTON S1,0,255,0,pulset1,1,SinCrsr 'Si PB1 fue presionado => Sin Cursor
BUTTON S2,0,255,0,pulset2,1,ConCrsr 'Si PB2 fue presionado => Con Cursor
BUTTON S3,0,255,0,pulset3,1,SinCrsrPar 'Si PB3 fue presionado => Con Parpadeo
BUTTON S4,0,255,0,pulset3,1,ConCrsrPar 'Si PB4 fue presionado => Sin Parpadeo
LOOP
SinCrsr:
LCDCMD LCDpin,LCDOFF 'Apagar pantalla
LCDCMD LCDpin,LCDON 'Encender la pantalla sin cursor
GOSUB Efectos 'Llamar a la subrutina Efectos
GOTO Menu
ConCrsr:
LCDCMD LCDpin,LCDOFF 'Apagar pantalla
LCDCMD LCDpin,LCDONCrsr 'Encender pantalla con cursor
GOSUB Efectos 'Llamar a la subrutina Efectos
GOTO Menu
SinCrsrPar:
LCDCMD LCDpin,LCDOFF 'Apagar pantalla
LCDCMD LCDpin,LCDONParp 'Encender pantalla con parpadeo activo,
GOSUB Efectos 'sin cursor
GOTO Menu
ConCrsrPar:
LCDCMD LCDpin,LCDOFF 'Apagar pantalla
LCDCMD LCDpin,LCDONCrsrParp 'Encender pantalla con parpadeo activo,
GOSUB Efectos 'con cursor
GOTO Menu
'===================================================================================
'SUBRUTINAS
'La rutina Efectos se encarga de generar un conjunto de mensajes que demuestran la
'diferencia entre las opciones seleccionadas
Efectos:
LCDCMD LCDpin,BorrarLCD 'Limpiar la pantalla
LCDOUT LCDpin,MoverCrsr,["1-Mover Pantalla"] 'Mostrar por pantalla las opciones
LCDOUT LCDpin,Linea2,["2-Mover Cursor"]
DO
BUTTON S1,0,255,0,pulset1,1,MoverPant 'PB1 presionado se desplaza pantalla
BUTTON S2,0,255,0,pulset2,1,MoverCr 'PB2 presionado se desplaza cursor
LOOP
MoverPant:
LCDCMD LCDpin,BorrarLCD 'Limpiar pantalla
LCDOUT LCDpin,MoverCrsr,["Desplazar LCD"]
LCDOUT LCDpin,Linea2,["1-Izq 2-Der 3-Ex"]
DO
BUTTON S1,0,250,100,pulset1,1,Despizq 'PB1 presionado, cursor a la der.
BUTTON S2,0,250,100,pulset2,1,Despder 'PB2 presionado, cursor a la izq.
BUTTON S3,0,255,0,pulset3,1,Salir 'Retornar al programa
LOOP
Despder:
LCDCMD LCDpin,BorrarLCD 'Limpiar pantalla
LCDOUT LCDpin,Linea2+3,["PRUEBA LCD.."] 'Mensaje de prueba
PAUSE 500
FOR x= 0 TO 14 'Ciclo para desplazamiento
LCDCMD LCDpin,Moverpizq 'Desplazar mensaje a la izquierda
PAUSE 300
NEXT
FOR x= 0 TO 14 'Ciclo para desplazamiento
LCDCMD LCDpin,Moverpder 'Desplazar a la derecha el mensaje
PAUSE 300
NEXT
GOTO MoverPant
MoverCr:
LCDCMD LCDpin,BorrarLCD 'Limpiar la pantalla
LCDOUT LCDpin,MoverCrsr,["1-Izq 2-Der 3-Ex"] 'Mostrar el siguiente men de opciones
LCDOUT LCDpin,Linea2+3,["PRUEBA LCD"]
Ciclo:
BUTTON S1,0,250,100,pulset1,1,Crizq 'PB1 presionado mover cursor a la der
BUTTON S2,0,250,100,pulset2,1,Crder 'PB2 presionado mover cursor a la izq
BUTTON S3,0,255,0,pulset3,1,Salir 'PB3 presionado retornar al programa
GOTO Ciclo
Crder:
LCDCMD LCDpin,Movercder 'Desplazar cursor a la derecha
PAUSE 300
GOTO Ciclo
Crizq:
LCDCMD LCDpin,Movercizq 'Desplazar cursor a la izquierda
PAUSE 300
GOTO Ciclo
Salir:
LCDCMD LCDpin,BorrarLCD 'Limpiar la pantalla
RETURN 'Retornar
'===================================================================================
'IniLcd inicializa la pantalla en modo 4 bits, 2 lneas
IniLcd:
PAUSE 1000
LCDCMD LCDpin,Despertar 'Despertar la pantalla
PAUSE 10
LCDCMD LCDpin,Despertar 'Despertar la pantalla
PAUSE 1
LCDCMD LCDpin,Despertar 'Despertar la pantalla
PAUSE 1
LCDCMD LCDpin,Modo4bits 'Configurar el bus de dato en modo de 4 bits
LCDCMD LCDpin,Modo2linea 'Se configura a dos lneas de 5 x 8
LCDCMD LCDpin,LCDOFF 'Apagar la pantalla
LCDCMD LCDpin,LCDON 'Encender la pantalla sin cursor
LCDCMD LCDpin,IncrCrsr 'Ajusta la pantalla para auto incremento
LCDCMD LCDpin,BorrarLCD 'Limpia la pantalla
RETURN
Objetivos: Manipular una pantalla de cristal lquido paralela de 2x16, por medio de los comandos soportados por el microcontrolador
BS2p para implementar un programa que permita editar un mensaje mostrado por la pantalla LCD. Utilizar los comandos LOOKUP y
LOOKDOWN de PBASIC para buscar informacin en arreglos.
Elementos a Utilizar
Mantenga en el protoboard del sistema de desarrollo
MDK-B28 el esquema electrnico que se muestra en la
(1) BASIC Stamp 2p. figura No. 7.6. En el siguiente programa se
(1) LCD alfanumrico 2 x 16 paralelo. implementar un sencillo editor de texto, donde, por
(1) Resistencia de 10 Kohms. medio de cuatro pulsadores, se le permitir al usuario
(1) Potencimetro de 10 Kohms.
(1) Banco de Pulsadores. desplazarse dentro de la pantalla (en la primera fila) y
(1) Un cable serial DB9. modificar un texto de 16 caracteres. El pulsador 4 (PB4),
(1) StampW ( v2 Beta 2.1 o superior). ubicado en el terminal P11 permite mover a la derecha
el cursor. El pulsador 3 (PB3), permite cambiar la letra
en orden ascendente, es decir, A,B,C, etc. El pulsador 2
(PB2), permite cambiar la letra en orden descendente, es decir, C,B,A, ,Z.etc. El pulsador 1 (PB1), permite
mover el cursor a la izquierda. Proceda a descargar en el BASIC Stamp el programa 7_3.bsp.
'Programa 7_3.bsp
'Este programa tiene por objetivo mostrar:
'1) El uso de los comandos LCDCMD y LCDOUT para enviar comandos y mensajes al LCD
'2) El uso del comando LCDIN para leer informacin de la memoria DDRAM
'2) El uso de los comandos LOOKUP Y LOOKDOWN
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
Inicio:
GOSUB IniLcd
GOSUB Mensaje_Inicial
DO
BUTTON PB4,0,255, 0 ,Pulset4,1,Derecha 'Si PB4 fue presionado va a la derecha
BUTTON PB3,0,254,254,Pulset3,1,Arriba 'Si PB3 fue presionado cambiar letra
BUTTON PB2,0,254,254,Pulset2,1,Abajo 'Si PB2 fue presionado cambiar letra
BUTTON PB1,0,255, 0 ,Pulset1,1,Izquierda 'Si PB1 fue presionado va a la izquierda
Salto:
LOOP
Derecha:
IF Pos = 15 THEN 'Si Pos es 15 implica el fin
LCDOUT LCDpin,MoverCrsr+79,[EspBlanco] 'por la derecha, solo mostrar flecha
LCDCMD LCDpin,MoverCrsr+Pos 'flecha a la izq.
ELSE
Pos = Pos+1 'Incrementar posicin a hacia la derecha
GOSUB Mostrar_Flechas 'Mostrar ambas flechas de desplazamiento
ENDIF
GOTO Salto
Arriba:
GOSUB Obtener_LCDChar 'Lee del LCD la letra que se quiere editar
x = (x+1) MAX 26 'Determina cual es la nueva letra a mostrar
GOSUB Mostrar_LCDChar 'Presentar nueva letra en la LCD
GOTO Salto
Abajo:
GOSUB Obtener_LCDChar 'Lee del LCD la letra que se quiere editar
x = (x-1) MIN 0 'Determina cual es la nueva letra a mostrar
GOSUB Mostrar_LCDChar 'Presentar nueva letra en la LCD
GOTO Salto
Izquierda:
IF Pos = 0 THEN 'Si pos es 0, implica que el fin de
LCDOUT LCDpin,MoverCrsr+64,[EspBlanco] 'la pantalla por la izquierda, en
LCDCMD LCDpin,MoverCrsr 'cuyo caso, slo se muestra la flecha
ELSE 'a la derecha
Pos = Pos-1 'Mover una posicin a la izquierda
GOSUB Mostrar_Flechas 'Mostrar las dos flechas
ENDIF
GOTO Salto
'===================================================================================
'SUBRUTINAS
'Inicializacion de la pantalla:
IniLcd:
PAUSE 1000
LCDCMD LCDpin,Despertar 'Despertar la pantalla
PAUSE 10
LCDCMD LCDpin,Despertar 'Despertar la pantalla
PAUSE 1
LCDCMD LCDpin,Despertar 'Despertar la pantalla
PAUSE 1
LCDCMD LCDpin,Modo4bits 'Configurar el bus de dato en modo de 4 bits
LCDCMD LCDpin,Modo2linea 'Se configura a dos lneas de 5x8
LCDCMD LCDpin,LCDOFF 'Apagar la pantalla
LCDCMD LCDpin,LCDONCrsr 'Encender la pantalla con parpadeo activo
LCDCMD LCDpin,IncrCrsr 'Ajusta la pantalla para auto-incremento
LCDCMD LCDpin,BorrarLCD 'Limpia la pantalla
RETURN
'Muestra las flechas que indican en cual sentido se puede seguir avanzando
Mostrar_Flechas:
LCDOUT LCDpin,MoverCrsr+64,[$7F]
LCDOUT LCDpin,MoverCrsr+79,[$7E]
LCDCMD LCDpin,MoverCrsr+Pos
RETURN
Objetivo: Utilizar el Software LCD Character Creador para generar caracteres personalizados y visualizarlos en la pantalla. Construir
una pequea animacin en el LCD.
En los ejercicios anteriores se ha manejado la pantalla LCD de casi todas las formas posibles, pero se ha
hecho uso exclusivo del conjunto de caracteres almacenado en la memoria CGROM propia del controlador de
la pantalla. Ahora bien, en este ejercicio vamos a crear nuestro propio conjunto de caracteres, para de esta
forma ,mejorar del despliegue visual en la pantalla LCD.
La pantalla LCD dispone de un espacio de memoria RAM, en el cual, se pueden almacenar hasta 8 caracteres
personalizados de 5x8 pxeles. Este espacio es llamado CGRAM. El contenido de la CGRAM puede ser
modificado dinmicamente durante la ejecucin del programa, razn por la cual, es ilimitado el nmero de
caracteres que se pueden crear y mostrar, considerando claro que cada uno de ellos ocupa 8 bytes ( en caso
de ser fuente 5x8, si se usa fuente 5x11 sern 11 bytes por carcter) de la memoria del microcontrolador.
La creacin de un carcter es sencilla si utilizamos el programa LCD Character Creador. Tomando como
referencia la figura No. 7.7, podemos darnos cuenta que cada fila de la matriz representa un byte donde
cada columna es un bit del mismo. El valor lgico de cada bit se relaciona con el estado de cada pxel, de
modo que si el correspondiente bit es uno, el pxel se mostrar oscuro (opaco), de lo contrario ser claro
(transparente).
'Programa 7_4.bsp
'Este programa tiene por objetivo:
'1) Utilizar la directiva DATA para almacenar informacin en la EEPROM del BS2p
'2) Visualizar en la pantalla LCD caracteres personalizados
'3) Crear una animacin sencilla
'==================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'__________________________________________________________________________________
Inicio:
PAUSE 500
GOSUB IniLcd 'Inicializa al LCD
LCDCMD LCDpin,BorrarLCD 'Borrar pantalla
LCDCMD LCDpin,CGRam 'Apuntar a CGRAM
FOR Dir = Pack0 TO Pack4+7
READ Dir,Caracter 'Leer caracteres desde EEPROM
LCDOUT LCDpin,0,[Caracter] 'Cargar los 5 caracteres en CGRAM
NEXT
DO
LCDCMD LCDpin,MoverCrsr: LCDOUT LCDpin,Linea1+3,["CARACTERES"]
LCDOUT LCDpin,Linea2+1,["PERSONALIZADOS"]
'Mensaje inicial a ser devorado
FOR Pos=0 TO 15 'Desplazamiento por toda la lnea
FOR Ani=0 TO 2 'Ciclo para producir
LCDOUT LCDpin,Linea1+Pos,[Ani]: PAUSE 100 'animacin en sentido
NEXT 'izquierda a derecha
LCDOUT LCDpin,Linea1+Pos,[" "] 'Borrado de posicin
NEXT
LCDCMD LCDpin,MoverCrsr
FOR Pos=15 TO 0
FOR Ani=2 TO 4 'Ciclo para producir
LCDOUT LCDpin,Linea2+Pos,[Ani]: PAUSE 100 'animacin en sentido
NEXT 'derecha a izquierda
LCDOUT LCDpin,Linea2+Pos,[" "]
NEXT
LOOP
'___________________________________________________________________________________
'SUB-RUTINAS
'Inicializacion de la pantalla:
IniLcd:
PAUSE 500
LCDCMD LCDpin,Despertar : PAUSE 10 'Despertar la pantalla
LCDCMD LCDpin,Despertar : PAUSE 1 'Despertar la pantalla
LCDCMD LCDpin,Despertar : PAUSE 1 'Despertar la pantalla
LCDCMD LCDpin,Modo4bits 'Configurar el bus de dato en modo de 4 bits
LCDCMD LCDpin,Modo2linea 'Se configura a dos lneas de 5x8
LCDCMD LCDpin,LCDOFF 'Apagar la pantalla
LCDCMD LCDpin,LCDON 'Encender la pantalla sin cursor
LCDCMD LCDpin,IncrCrsr 'Ajusta la pantalla para auto-incremento
LCDCMD LCDpin,BorrarLCD 'Limpia la pantalla
RETURN
En la pantalla LCD debe aparecer el mensaje (CARACTERES PERSONALIZADOS) que ser literalmente
devorado por el conocido personaje de video juego (Packman). Para lograr la animacin se utilizan los
caracteres de la figura No. 7.7. (sentido derecha a izquierda), mostrndolos uno a continuacin del otro en
un intervalo de 100 ms para producir la sensacin de movimiento.
Figura 7.8:
Visualizacin del programa 7_4.bsp
visto en una pantalla LCD de 16
caracteres x 4 lneas.
Fuente: Elaboracin Propia.
Para la mayor comprensin del proceso de carga y utilizacin de los caracteres personalizados, se incluye el
diagrama de flujo mostrado en la figura No. 7.9.
IN IC IO
In iLcd
A
B
E scrib ir ca rcter e n la
C G R A M d e la p a n ta lla
M o stra r ca rcte r # i en p o sici n
actu a l d el LC D
No ltim o
C arcter ?
E sp e rar 1 00 m s
Si B o rra r ca rcte r en p os actu a l LC D
M ostrar m en saje
asig n a r i = 0
No
i = i+ 1 i = 4 ?
E sp era r 1 00 m s
B o rra r ca r cte r en p o s actu a l LC D No
In icio d e la
P a n ta lla
No
i = i+ 1 i = 2 ? Si
Si B
In cre m e n ta r p o sici n LC D
i = 0
No Si
F in d e la
A
P a n ta lla
Analizando el programa 7_4.bsp, podemos entender como trabaja la memoria CGRAM y como puede
almacenar los caracteres creados con el programa LCD Character Creator. Al mismo tiempo, se pudo
implementar una animacin con los caracteres personalizados. Si deseamos utilizar la pantalla LCD con otra
animacin, podemos introducir en el BASIC Stamp el programa 7_5.bsp.
EL programa 7_5.bsp, simula una medicin de temperatura con indicacin grfica que activar una alarma
visual y sonora cuando la variable temperatura llegue a valores predeterminados. Este programa deber ser
comprendido y asimilado completamente pues ser la base para un ejercicio posterior.
Por sus dimensiones pudiera parecer que es un programa sumamente complejo, pero al comenzar el
anlisis, resultar evidente que las primeras 63 lneas del programa corresponden a la descarga de las
pantallas en la memoria EEPROM del BASIC Stamp. El cuerpo principal del programa inicializa al LCD y
escala a la variable x, de modo que su recorrido desde 0 hasta 255 sea interpretado como el desplazamiento
a lo largo de las 15 pantallas que componen la animacin. Posteriormente, se efectan las llamadas a las
subrutinas que muestran el valor de una temperatura. La figura No. 7.10 muestra el resultado de la
ejecucin de ste programa, utilizando el sistema de desarrollo MDK-B28 y una pantalla LCD.
'Programa 7_5.bsp
'Este programa tiene por objetivos:
'1) La grabacin y posterior lectura de datos en la EEPROM (DATA y READ)
'2) Descarga y visualizacin de caracteres personalizados
'3) Construccin de una animacin compleja
'4) Actualizar la memoria CGRAM de una LCD dinmicamente
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Las pantallas a mostrar son cargadas en la parte superior de la memoria EEPROM
'Pantalla #0
DATA $03,$02,$02,$02,$02,$02,$02,$02 : DATA $18,$08,$08,$08,$08,$08,$08,$08
DATA $02,$02,$04,$08,$08,$08,$04,$03 : DATA $08,$08,$04,$02,$02,$02,$04,$18
'Pantalla #1
DATA $03,$02,$02,$02,$02,$02,$02,$02 : DATA $18,$08,$08,$08,$08,$08,$08,$08
DATA $02,$02,$04,$08,$08,$08,$07,$03 : DATA $08,$08,$04,$02,$02,$02,$1C,$18
'Pantalla #2
DATA $03,$02,$02,$02,$02,$02,$02,$02 : DATA $18,$08,$08,$08,$08,$08,$08,$08
DATA $02,$02,$04,$08,$08,$0F,$07,$03 : DATA $08,$08,$04,$02,$02,$1E,$1C,$18
'Pantalla #3
DATA $03,$02,$02,$02,$02,$02,$02,$02 : DATA $18,$08,$08,$08,$08,$08,$08,$08
DATA $02,$02,$04,$08,$0F,$0F,$07,$03 : DATA $08,$08,$04,$02,$1E,$1E,$1C,$18
'Pantalla #4
DATA $03,$02,$02,$02,$02,$02,$02,$02 : DATA $18,$08,$08,$08,$08,$08,$08,$08
DATA $02,$02,$04,$0F,$0F,$0F,$07,$03 : DATA $08,$08,$04,$1E,$1E,$1E,$1C,$18
'Pantalla #5
DATA $03,$02,$02,$02,$02,$02,$02,$02 : DATA $18,$08,$08,$08,$08,$08,$08,$08
DATA $02,$02,$07,$0F,$0F,$0F,$07,$03 : DATA $08,$08,$1C,$1E,$1E,$1E,$1C,$18
'Pantalla #6
DATA $03,$02,$02,$02,$02,$02,$02,$02 : DATA $18,$08,$08,$08,$08,$08,$08,$08
DATA $02,$03,$07,$0F,$0F,$0F,$07,$03 : DATA $08,$18,$1C,$1E,$1E,$1E,$1C,$18
'Pantalla #7
DATA $03,$02,$02,$02,$02,$02,$02,$02 : DATA $18,$08,$08,$08,$08,$08,$08,$08
DATA $03,$03,$07,$0F,$0F,$0F,$07,$03 : DATA $18,$18,$1C,$1E,$1E,$1E,$1C,$18
'Pantalla #8
DATA $03,$02,$02,$02,$02,$02,$02,$03 : DATA $18,$08,$08,$08,$08,$08,$08,$18
DATA $03,$03,$07,$0F,$0F,$0F,$07,$03 : DATA $18,$18,$1C,$1E,$1E,$1E,$1C,$18
'Pantalla #9
DATA $03,$02,$02,$02,$02,$02,$03,$03 : DATA $18,$08,$08,$08,$08,$08,$18,$18
DATA $03,$03,$07,$0F,$0F,$0F,$07,$03 : DATA $18,$18,$1C,$1E,$1E,$1E,$1C,$18
'Pantalla #10
DATA $03,$02,$02,$02,$02,$03,$03,$03 : DATA $18,$08,$08,$08,$08,$18,$18,$18
DATA $03,$03,$07,$0F,$0F,$0F,$07,$03 : DATA $18,$18,$1C,$1E,$1E,$1E,$1C,$18
'Pantalla #11
DATA $03,$02,$02,$02,$03,$03,$03,$03 : DATA $18,$08,$08,$08,$18,$18,$18,$18
DATA $03,$03,$07,$0F,$0F,$0F,$07,$03 : DATA $18,$18,$1C,$1E,$1E,$1E,$1C,$18
'Pantalla #12
DATA $03,$02,$02,$03,$03,$03,$03,$03 : DATA $18,$08,$08,$18,$18,$18,$18,$18
DATA $03,$03,$07,$0F,$0F,$0F,$07,$03 : DATA $18,$18,$1C,$1E,$1E,$1E,$1C,$18
'Pantalla #13
DATA $03,$02,$03,$03,$03,$03,$03,$03 : DATA $18,$08,$18,$18,$18,$18,$18,$18
DATA $03,$03,$07,$0F,$0F,$0F,$07,$03 : DATA $18,$18,$1C,$1E,$1E,$1E,$1C,$18
'Pantalla #14
DATA $03,$03,$03,$03,$03,$03,$03,$03 : DATA $18,$18,$18,$18,$18,$18,$18,$18
DATA $03,$03,$07,$0F,$0F,$0F,$07,$03 : DATA $18,$18,$1C,$1E,$1E,$1E,$1C,$18
'Pantalla de Alarma
UltimaP DATA $1C,$1D,$1D,$1D,$1D,$1D,$1D,$1D
DATA $07,$17,$17,$17,$17,$17,$17,$17
DATA $1D,$1D,$1B,$17,$17,$17,$1B,$1C
UltimoC DATA $17,$17,$1B,$1D,$1D,$1D,$1B,$07
'___________________________________________________________________________________
'___________________________________________________________________________________
'___________________________________________________________________________________
'Programa Principal
Inicio:
PAUSE 500
GOSUB InitLCD 'Rutina de inicializacin del LCD
DO
FOR x=0 TO 255 'Simulacin de la medicin de temperatura
Pantalla=x/18 'Equivalencia entre la medicin y el termmetro
GOSUB Cargar_Pantalla 'Carga de la pantalla segn temperatura
GOSUB Actualizar_Pantalla 'Muestra la pantalla adecuada
GOSUB Actualizar_Texto 'Actualizacin de mensajes
PAUSE 250
NEXT
LOOP
'===================================================================================
'SUBRUTINAS
'Inicializacion de la pantalla
InitLCD:
PAUSE 1000
LCDCMD LCDpin,Despertar : PAUSE 10 'Despertar la pantalla
LCDCMD LCDpin,Despertar : PAUSE 1 'Despertar la pantalla
LCDCMD LCDpin,Despertar : PAUSE 1 'Despertar la pantalla
LCDCMD LCDpin,Modo4bits 'Configurar el bus de dato en modo de 4 bits
LCDCMD LCDpin,Modo2linea 'Se configura a dos lneas de 5x8
LCDCMD LCDpin,LCDOFF 'Apagar la pantalla
LCDCMD LCDpin,LCDON 'Encender la pantalla sin cursor
LCDCMD LCDpin,IncrCrsr 'Ajusta la pantalla para auto-incremento
LCDCMD LCDpin,BorrarLCD 'Limpia la pantalla
RETURN
Actualizar_Pantalla:
LCDOUT LCDpin,Linea1+1 ,[0] : LCDOUT LCDpin,Linea1+2 ,[1] 'Termmetro lado Izq
LCDOUT LCDpin,Linea2+1 ,[2] : LCDOUT LCDpin,Linea2+2 ,[3]
LCDOUT LCDpin,Linea1+13 ,[0] : LCDOUT LCDpin,Linea1+14,[1] 'Termmetro lado Der
LCDOUT LCDpin,Linea2+13 ,[2] : LCDOUT LCDpin,Linea2+14,[3]
RETURN
Actualizar_Texto:
LCDOUT LCDpin,Linea2+5,[DEC3 x,$20,$DF,"C"]
SELECT Pantalla
CASE 0 TO 2
LCDOUT LCDpin,Linea1+4,[" Frio "]
CASE 3 TO 6
LCDOUT LCDpin,Linea1+4,[" Tibio "]
CASE 7 TO 10
LCDOUT LCDpin,Linea1+4,["Caliente"]
CASE 11 TO 13
LCDOUT LCDpin,Linea1+4,["Muy Cal"]
CASE ELSE
GOSUB Alarma
ENDSELECT
RETURN
FREQOUT Alarmapin,943,1194
LCDOUT LCDpin,128+4,[" Peligro "]
LCDOUT LCDpin,Linea1+1,[4]: LCDOUT LCDpin,Linea1+13,[4]:
LCDOUT LCDpin,Linea1+2,[5]: LCDOUT LCDpin,Linea1+14,[5]
LCDOUT LCDpin,Linea2+1,[6]: LCDOUT LCDpin,Linea2+13,[6]:
LCDOUT LCDpin,Linea2+2,[7]: LCDOUT LCDpin,Linea2+14,[7]
FREQOUT Alarmapin,943,1061
NEXT
RETURN
Programacin
1. Construya un programa junto a sus subrutinas para colocar en una pantalla LCD de caracteres, tipo
paralela, slo su nombre en la primera lnea. Nota: No deber utilizar ninguno de stos comandos:
LCDIN, LCDOUT. Si puede utilizar el comando LCDCMD. Ahora repita el programa sin utilizar los
comandos LCDIN, LCDOUT ni el comando LCDCMD.
Captulo No. 08
Comunicacin Serial Asincrnica
Introduccin. La forma ms comn de intercambiar informacin equipos electrnicos es la comunicacin serial. Existen dos tipos
de comunicacin serial, sincrnica como hemos visto en el captulo nmero 5 y asincrnica. En este captulo, trataremos la
comunicacin asincrnica que significa sin "reloj" o sin sincrona. En este tipo de comunicacin serial, los datos se transmiten y
reciben sin necesidad de usar una seal de reloj, requiriendo entonces de slo dos cables de comunicacin; uno para la recepcin (Rx)
y otro para la transmisin (Tx), referidos siempre a la tierra o conexin comn. En un computador por ejemplo, se encuentra uno o
varios puertos seriales para la comunicacin asincrnica, son llamados los puertos COM o puertos RS232.
Los niveles de tensin para poder establecer una comunicacin serial asincrnica debern ser los mismos
tanto para el receptor como para el transmisor, pudiendo ser stos niveles de tensin compatibles con la
lgica TTL/CMOS como en el caso del BASIC Stamp y de otros microcontroladores o estar comprendido
entre -25 y 25 Volt DC, siguiendo el estndar RS-232C. Todos estos niveles de tensin estn referidos al
conductor comn de 0 Volt. DC.
Estndar RS232
Protocolo de comunicaciones desarrollado por la EIA (Asociacin de Industrias Electrnicas) a principio de la
dcada de los 60s y que, luego de sufrir varias actualizaciones, constituye uno de los ms empleados para
transmisin en cortas distancias. Parte de su xito y permanencia en el tiempo se debe a la implementacin
en un conector DB9 disponible en todos los computadores personales, donde ha encontrado el medio para
servir como puerto de interfaz entre el PC y cualquier cantidad de dispositivos perifricos como: el ratn,
escneres, mdems, entre otros.
El 0 lgico (llamado Espacio "Space") comprendido entre +3 y +25 Voltios. Preferiblemente +12V.
El 1 lgico (llamado Marca "Mark") comprendido entre -3 y -25 Voltios. Preferiblemente -12V. Este constituye el
estado que ha de tener la lnea de transmisin cuando no se estn enviando datos.
La regin indeterminada comprendida entre -3V y +3V, no deber ser usada, pues est concebida para
absorber el ruido producto de EMI (Interferencia Electro Magntica) en la lnea.
Velocidad de transmisin de hasta 350Kbps.
La distancia mxima entre los equipos est determinada por la capacitancia del cable de conexin
permitindose hasta 2500pf.
Comunicacin Full Duplex, es decir, envo y recepcin simultneo de informacin por canales independientes
(Tx y Rx).
El bit ms significativo del byte es trasmitido primero.
Los niveles lgicos de un puerto RS232 son igualmente un cero (0) y un uno (1). Sin embargo, los voltajes
de trabajo en de estos niveles son totalmente diferentes a los que hemos estados acostumbrados a
utilizar hasta el momento. Para el RS232, un cero (0) lgico equivale a +12 Vdc, mientras que un uno
(1) lgico equivale a -12 Vdc. Muchos circuitos que trabajan con RS232 utilizan un convertidor de
niveles llamado "Line driver/ receiver", el cual, tiene dos funciones: convierte los voltajes de +- 12 Vdc a
niveles TTL compatibles ( 0 a 5 Vdc), invierte los valores lgicos para el voltaje, 0 Volts ser un cero (0)
lgico y 5 Volts ser un uno (1) lgico. Todos los MicroControladores BASIC Stamp, tienen incluido un
"Line driver/ receiver" y por sta razn se pueden conectar directamente al puerto RS232 de la PC. En la
figura No. 8.1, vemos un circuito tpico de conexin serial RS232 de nueve pines denominado DB-9
conectado a un microcontrolador BASIC Stamp.
Figura No. 8.1: Conexiones de un BASIC Stamp al puerto serial (COM) de un PC.
Fuente: BASIC Stamp Manual ver 2.0. Parallax.
La figura No. 8.2 muestra la transmisin del dato binario (11011011) de acuerdo al protocolo RS-232.
Voltios
0 1 1 0 1 1 0 1 1 0 1 1
+12
0 Lgico
Regin
+3 Indeterminada
0
-3
Tiempo (s)
-12
UART
La comunicacin serial asincrnica con el BASIC Siglas que denotan Universal Asynchronous Receiver
Stamp 2p es muy flexible. Puede ser efectuada a Transmitter. Son circuitos integrados seriales cuyo principal
travs de cualquiera de los 16 pines de E/S y propsito durante la transmisin es el de convertir los bytes de
adicionalmente por los pines SIN y SOUT utilizados datos que se desean enviar en un tren de bits seriales (a veces
llamado bit stream). Durante el proceso de recepcin, el UART
para la programacin. La velocidad de la toma los bits que arriban por el terminal de entrada del puerto
comunicacin puede variar desde 608 bps hasta y los convierte en bytes paralelos para reconstruir el dato. En
115 KBps con la posibilidad de utilizar el control de este dispositivo se suele incluir la circuitera necesaria para el
flujo hasta los 19,2 KBps y adems da soporte al cambio de niveles lgicos de los empleados en la transmisin
(tpicamente +12 V y -12V) a TTL/CMOS (0-5V).
uso de los modificadores de formato, tanto para
los datos entrantes como para los de salida. Nota: Otra funcin que le atae es la inclusin de los bits extras de
Debido a que el BASIC Stamp no posee un buffer inicio, paridad y fin.
de transmisin/recepcin de datos, no se Dado que el BASIC Stamp no cuenta con un UART en hardware
recomienda trabajar a una velocidad mayor de debe emular su comportamiento mediante software, de esta
9600 Baudios. labor se encarga el intrprete de PBASIC.
SERIN
Instruccin destinada a la recepcin de datos de manera serial asincrnica.
SERIN RPin {\FPin}, Baudmodo, {Plabel,} {Tiempo de Espera, Tlabel,} [Dato de Entrada]
RPin: Es una variable, constante o expresin (0-16) que especifica el Pin de E/S a travs del cual se
recibir el dato.
FPin: Es una variable, constante o expresin (0-15). Especifica el terminal de E/S que indica el
estado del control de flujo y ser configurado como salida. Su uso implica la especificacin
obligatoria de los parmetros Tiempo de Espera y Tlabel. Es empleado para informarle al equipo
transmisor que el BASIC Stamp est listo para recibir informacin.
Baudmodo: Variable, constante o expresin (0-65535) que especifica la configuracin y la
velocidad de transmisin/recepcin en baudios. La tabla NO .8.1 muestra los valores de uso ms
frecuente.
Plabel: Es una etiqueta opcional que indica donde el programa debe saltar en caso de detectarse
un error de paridad.
Tiempo de Espera: Parmetro opcional de que especifica cuanto tiempo se debe esperar por el
dato de entrada en unidades de 400s para el BS2p. Si el dato no llega en este tiempo, el programa
saltar a la direccin especificada por Tlabel.
Tlabel: Etiqueta opcional que debe emplearse con el argumento Tiempo de Espera. Indica a
donde debe saltar el programa en caso de que el dato no llegue en el tiempo especificado por el por
el argumento Tiempo de Espera.
Dato de Entrada: Es una lista de variables con sus respectivos modificadores de formatos (de
existir) que indican como y donde almacenar los datos recibidos
8N 8N 7E 7E
Baudios
invertido sin invertir invertido sin invertido Tabla No. 8.1: Argumento Baudmodo
1200 18447 2063 26639 10255 para distintas velocidades en el BS2p.
2400 17405 1021 25597 9213 Fuente: BASIC Stamp Manual v2.0.
4800 16884 500 25076 8692
9600 16624 240 24816 8432
En una transmisin/recepcin no invertida (True) el Cero (0) lgico se representa mediante una tensin de 0
Volts. DC y el 1 Uno (1) lgico es representado por 5 Volts. DC, ver figura No. 8.3.
SEROUT
Enva datos de manera serial asincrnica.
SEROUT Tpin {\Fpin}, Baudmodo, {Paso,} {Tiempo de Espera, Tlabel,} [Dato de Salida]
TPin: Variable, constante o expresin (0-16) que especifica el Pin de E/S a travs del cual se
transmitirn los datos.
FPin: Variable, constante o expresin (0-15). Especifica el terminal de E/S que indica el estado del
control de flujo. Este ser configurado como entrada y lo emplear el BS2p para determinar si el
dispositivo con el que se quiere comunicar puede recibir datos.
Baudmodo: Variable, constante o expresin (0-65535) que especifica la configuracin y la
velocidad de la comunicacin.
Paso: Variable, constante o expresin (0-65535) que determina el tiempo a esperar entre los bytes
trasmitidos. Este no puede emplearse simultneamente con el argumento Tiempo de Espera.
Tiempo de Espera: Es una variable, constante o expresin (0-65535) opcional. Especifica cuanto
tiempo se debe esperar por la autorizacin de FPin para enviar los datos. Si la autorizacin no llega
a tiempo, el programa saltar a la direccin especificada por Tlabel.
Tlabel: Etiqueta opcional que indica a donde debe saltar el programa en caso de que el permiso
para enviar los datos no ocurra en el tiempo especificado por el argumento Tiempo de Espera.
Dato de Salida: Lista de variables, constantes, expresiones y modificadores de formato que indican
como deben enviarse los datos.
Figura No. 8.4: Conexin directa entre el BS2p y un Puerto del PC.
Fuente: BASIC Stamp Manual v2.0.
En general una comunicacin de 7 bits/ paridad impar (7E), es utilizada cuando deseamos transmitir - recibir
texto y 8 bits/ sin paridad (8N) para datos. Cuando utilizamos un bit de paridad, podemos tener la ventaja
de detectar errores de transmisin y/o recepcin de los datos, sin embargo, se perder un bit. Por ejemplo,
si usamos el modo (7E) siete bits para los datos y uno de paridad, con siete bits podemos representar
valores desde 0 hasta 127, mientras si utilizamos el modo (8N), podemos representar valores desde 0 a 255.
RUN
Ejecuta un programa ubicado en un bloque de memoria especificado.
Bloque de Memoria: Variable, constante o expresin (0-7). Indica la ubicacin del programa a ejecutar
Cuando el BASIC Stamp se enciende o se hace un reset, se ejecuta el programa
que se encuentre en bloque cero (0) de la EEPROM.
El sistema de desarrollo MDK-B28, incorpora dos puertos seriales RS232. Uno de ellos dedicado para la
programacin del BASIC Stamp y otro para uso general. Este puerto de uso general, est identificado con el
nombre RS232 DB9 y utiliza un "line driver receiver basado en el circuito integrado DS275 de Dallas
Semiconductors (U3). Los terminales para la transmisin y recepcin de datos se encuentran disponibles en
la regleta de conexiones e identificados como TX y RX, respectivamente. En la figura No. 8.5 se muestra el
esquema de conexiones del puerto RS232, mientras que en la figura No. 8.6, se observa su ubicacin dentro
del sistema de desarrollo MDK-B28.
Figura No. 8.5: Puerto RS232 del MDK-B28. Figura No. 8.6: Vista del Puerto RS232.
Fuente: Elaboracin Propia. Fuente: Elaboracin Propia.
Objetivo: Construir un programa que permita al BS2p detectar en forma automtica, la velocidad de transmisin de los datos en una
comunicacin RS232.
Figura No. 8.7: Esquema de conexiones Figura No. 8.8: Determinando la velocidad
para el experimento # 1. de la conexin con un BS2p.
Fuente: Elaboracin Propia. Fuente: Elaboracin Propia.
En el debug terminal que configur anteriormente, posicione el cursor del PC en la casilla de transmisin y
teclee la letra U. En este momento el BASIC Stamp le enviar un mensaje dicindole la velocidad a la cual
se estableci la conexin.
'Programa 8_1.bsp
'Este programa tiene por objetivos:
'1) Mostrar el uso de las instruccin SEROUT
'2) Detectar la velocidad en baudios de una conexin RS232
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de variables y constantes
Baudios VAR Word 'Velocidad de conexin en unidades de SERIN/SEROUT
Talto VAR Word 'Duracin del pulso alto
Baud VAR Word 'Velocidad de conexin en baudios
Index VAR Nib 'Variable de uso general
Rx PIN 9 'Terminal de Recepcin de datos
Tx PIN 10 'Terminal de Transmisin de datos
Buz PIN 11 'Terminal conectado al altavoz piezoelctrico
'___________________________________________________________________________________
'Programa Principal:
DO
DO : PULSIN Rx ,1 , Talto : LOOP UNTIL Talto<>0 'Medir el primer bit que llega
PAUSE 10 'Pausa para medir una sola vez
Talto = Talto*/$C0 'Conversin a us
Index=15
LOOKDOWN Talto, <= [29,58,114,229,458,916], Index
'Compara el bit medido con los tiempos mximos permitidos segn la velocidad
'de la conexin
LOOKUP Index, [45,110,240,500,1021,2063], Baudios
'Obtiene la velocidad en unidades para SERIN /SEROUT
LOOKUP Index,[38400,19200,9600,4800,2400,1200], Baud
'Obtiene la velocidad en baudios de acuerdo a la medicin efectuada
IF Index=15 THEN 'Si el dato es invlido
FREQOUT Buz,4500,1200 'emitir un sonido de alarma
ELSE
SEROUT Tx, Baudios, [HOME, "**Comunicacin Serial Asincrnica RS232**",CR]
SEROUT Tx, Baudios, [" Equipo comunicndose a ", DEC Baud, " Baudios "]
'Envo de un mensaje a la velocidad detectada
FREQOUT Buz,2000,1500 'Emite un Bip
ENDIF
Talto = 0 'Borra el contenido de la medicin anterior
LOOP
La comunicacin RS-232 es utilizada cada vez que se programa al BS2p, cuando se hace una instruccin de
depuracin (DEBUG o DEBUGIN) o cuando se utiliza el StampPlot Pro. Por ello, el resto de este captulo ha
sido enfocado hacia el manejo en forma serial asincrnica de un circuito controlador serial de pantallas LCD
(SLCD-IC).
El SLCD-IC, trabaja con dos tipos de datos: texto e instrucciones. Por defecto, trabaja en modo texto.
Cualquier dato que sea enviado al SLCD-IC es mostrado en la pantalla del LCD. Para distinguir entre un texto
y una instruccin el SLCD-IC verifica si en la comunicacin serial se ha enviado un prefijo de una instruccin,
el cual, debe ser el carcter (ASCII 254) o $FE, si esto ocurre; el byte enviado despus de ste prefijo es
tratado como una instruccin. Despus de ejecutar la instruccin el controlador regresa a modo texto.
INSTRUCCIN CDIGO
LIMPIAR Pantalla 1
Debido a que el SLCD-IC inicializa a la
Cursor al INICIO 2
pantalla LCD despus de ser energizado,
ESCONDER pantalla sin perder datos 8
usted solamente tendr que esperar un (1)
RESTAURAR pantalla sin cursor 12
segundo antes de enviar cualquier dato al
Cursor en modo PARPADEO 13
controlador. Esto garantiza el tiempo
Cursor en modo BAJO LNEA 14 suficiente para que el controlador inicialice
MOVER cursor a la IZQUIERDA 16 correctamente a la pantalla LCD. En la
MOVER cursor a la DERECHA 20 pantalla LCD se mostrar un mensaje como:
DESPLAZAR pantalla a la IZQUIERDA 24 http://roso-control.com, el cual, desaparecer
DESPLAZAR pantalla a la DERECHA 28 una vez que usted enve el primer dato al
Apuntador a la memoria CGRAM 64 + Addr. controlador SLCD-IC.
Posiciona el Cursor en la Pos. DDRAM 128 + Addr.
Tabla No. 8.4: Direcciones de la memoria CGRAM para almacenar caracteres propios.
Fuente: Elaboracin Propia.
Objetivo: Comprender el funcionamiento del mdulo SLCD-BD, ya que, de ahora en adelante se utilizar en la mayora de los
ejercicios.
En el programa 8_2.bsp, se muestra como trabajar con la pantalla LCD en forma serial a travs de la
utilizacin del mdulo SLCD-BD. El programa explota al mximo todas las formas de trabajar con una
pantalla LCD cuyo controlador sea el Hitachi HD44780 o compatible. En el programa 8_3.bsp, se desarrolla
una aplicacin para leer el estado de los seis (6) pulsadores del mdulo SLCD-BD utilizando el Pin de
control de flujo de la instruccin SERIN. Antes de ejecutarlo, conecte el altavoz piezoelctrico del MDK-B28
al terminal P11 del BASIC Stamp.
'Programa 8_2.bsp
'Este programa tiene por objetivo manejar el mdulo SLCD-BD para desplegar
'informacin en una pantalla LCD de 2x16
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de variables y constantes
BorrarLCD CON 1 'Limpiar pantalla
IraHome CON 2 'Mueve el cursor al inicio de la pantalla
Off_LCD CON 8 'Apaga el LCD sin borrar su contenido
On_LCD CON 12 'Enciende el LCD sin cursor
Cursor_Blink CON 13 'Activa el parpadeo
Cursor_Undrl CON 14 'Activa el cursor
Cursor_Izq CON 16 'Desplaza el cursor a la izquierda
Cursor_Der CON 20 'Desplaza el cursor a la derecha
Scroll_Izq CON 24 'Desplaza la pantalla a la izquierda
Scroll_Der CON 28 'Desplaza la pantalla a la derecha
CGRAM_0 CON 64 'Posicin del Carcter Personalizado #1
CGRAM_1 CON 72 'Posicin del Carcter Personalizado #2
CGRAM_2 CON 80 'Posicin del Carcter Personalizado #3
CGRAM_3 CON 88 'Posicin del Carcter Personalizado #4
CGRAM_4 CON 96 'Posicin del Carcter Personalizado #5
CGRAM_5 CON 104 'Posicin del Carcter Personalizado #6
CGRAM_6 CON 112 'Posicin del Carcter Personalizado #7
CGRAM_7 CON 120 'Posicin del Carcter Personalizado #8
Inst CON 254 'Envo de una Instruccin
MoverCrsr CON 128 'Posicionar el cursor
Baudios CON 240 'Velocidad de la Transmisin/Recepcin
Linea_2 CON 64 'Primer carcter de la lnea 2 respecto a posicin Home
Tecla VAR Byte 'Tecla leda (cdigo ASCII)
i VAR Nib
j VAR Nib 'Variables de propsito general
Slcd_Rx PIN 9 'Terminal que enva informacin al controlador
'___________________________________________________________________________________
'Programa Principal
PAUSE 1000 'Pausa para que el SLCD-IC inicialice la pantalla
DO
SEROUT Slcd_Rx,Baudios,[Inst,BorrarLCD] 'Borra el contenido
SEROUT Slcd_Rx,Baudios,[" Pantalla LCD y Controlados por"]
'Escritura en la primera lnea
SEROUT Slcd_Rx,Baudios,[Inst,MoverCrsr+Linea_2]
SEROUT Slcd_Rx,Baudios,[" Teclado Serial el SLCD-IC"]
'Escritura en la segunda lnea
PAUSE 1500
'Posiciona al cursor al inicio de la pantalla y activa el cursor
SEROUT Slcd_Rx,Baudios,[Inst,IraHome]
SEROUT Slcd_Rx,Baudios,[Inst,Cursor_Undrl]
FOR i=0 TO 15 'El cursor recorre el mensaje de izquierda a derecha
PAUSE 300
SEROUT Slcd_Rx,Baudios,[Inst,Cursor_Der]
NEXT
PAUSE 1500
FOR i=0 TO 15
PAUSE 300
SEROUT Slcd_Rx,Baudios,[Inst,Scroll_Der]
NEXT
PAUSE 1500
FOR i=0 TO 4
PAUSE 400
SEROUT Slcd_Rx,Baudios,[Inst,Off_LCD]
PAUSE 400
SEROUT Slcd_Rx,Baudios,[Inst,On_LCD]
NEXT
PAUSE 2500
SEROUT Slcd_Rx,Baudios,[Inst,BorrarLCD]
SEROUT Slcd_Rx,Baudios,["Tambien animarse"]
PAUSE 1500
'Crea una pequea animacin, con lo que se completan las funciones ms usadas
FOR i =0 TO 2
FOR j=0 TO 6
SEROUT Slcd_Rx,Baudios,[Inst,Movercrsr+Linea_2]
SEROUT Slcd_Rx,Baudios,[j]
SEROUT Slcd_Rx,Baudios,[j]
SEROUT Slcd_Rx,Baudios,[Inst,Movercrsr+Linea_2+14]
SEROUT Slcd_Rx,Baudios,[j]
SEROUT Slcd_Rx,Baudios,[j]
PAUSE 250
NEXT
NEXT
PAUSE 1500
LOOP
'Programa 8_3.bsp
'Este programa muestra como:
'1) Leer el estado de los pulsadores conectados al SLCD-BD
'2) Utilizar el control de flujo en la instruccin SERIN
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
BorrarLCD CON 1 'Limpiar pantalla
Inst CON 254 'Envo de una Instruccin
MoverCrsr CON 128 'Posicionar el cursor
Baudios CON 240 'Velocidad de la Transmisin/Recepcin
Linea_2 CON 64 'Primer carcter de la lnea 2 respecto a posicin Home
Buz PIN 11 'Terminal donde se conecta el altavoz piezoelctrico
Slcd_Tx PIN 10 'Terminal que recibe informacin del controlador
Slcd_Rx PIN 9 'Terminal que enva informacin al controlador
Slcd_Enable PIN 8 'Terminal que habilita lectura del teclado
Tecla VAR Byte 'Tecla leda (cdigo ASCII)
'___________________________________________________________________________________
'Programa Principal
'Lectura de las teclas presionadas
DO
Principal:
Tecla = 0
SEROUT Slcd_Rx, Baudios,[Inst,BorrarLCD]
SEROUT Slcd_Rx, Baudios,["Presione 1 tecla"]
'Lectura de carcter con control de flujo
SERIN Slcd_Tx\Slcd_Enable,Baudios,[HEX2 Tecla]
'Pone en bajo la lnea Enable y espera el carcter ASCII correspondiente
'al pulsador presionado.
'presionada, he informa al usuario cual tecla oprimi
SEROUT Slcd_Rx,Baudios,[Inst,MoverCrsr+Linea_2]
SEROUT Slcd_Rx,Baudios,["Ud. Presiono: ",Tecla]
IF Tecla = "0" THEN Principal
'Si se presion una tecla emite un tono cuya frecuencia depende de cual fue
'el pulsador presionado.
FREQOUT Buz,1500,150*(Tecla-49)+800
LOOP
Oprima el pulsador S3 del mdulo SLCD-IC, en la pantalla deber aparecer el texto Ud. Presiono: 3 al
tiempo que se escucha un tono de unos 4147 Hz por el altavoz. Presione los pulsadores en forma aleatoria,
observe y escuche el resultado.
Este programa ilustra la comunicacin bidireccional (half duplex) entre dos dispositivos, pues al controlador
de la pantalla le son enviados los datos y se recibe de l el estado de los pulsadores. Observe que, en el
momento que el BS2p quiere saber el estado de los pulsadores se ejecuta la instruccin:
El uso del control de flujo le indica al equipo que enva los datos (el SLCD-IC) cuando se encuentra listo para
recibir el otro dispositivo (el BS2p).
Objetivo: Implementar un instrumento de medicin capaz de determinar la frecuencia y ciclo til de una seal, el valor de una
resistencia y el valor de la capacitancia de un condensador. Utilizacin de mltiples bancos de programacin.
Elementos a Utilizar
Coloque un condensador de 10F y una resistencia de 1 kOhm en los puntos identificados como Cx y Rx
respectivamente. Introduzca al microcontrolador los programas 8_4.bsp, P8_4a.bsp, P8_4b.bsp y P8_4c.bsp,
en los bancos de programacin 0,1,2,3 del BASIC Stamp 2p. Para ello, deber ubicar a todos los programas
en un mismo directorio y al abrir al programa 8_4.bsp se desplegarn todos los dems. La barra que
contiene los programas abiertos en el BASIC Stamp Editor, lucir como se muestra en la figura No. 8.12.
INICIO
No Algo
Presionado
Si
S1 Otra
S2 S3
Una vez que el programa se encuentra en ejecucin se podr ver el men que se muestra en la figura No.
8.16. Seleccione la opcin Hz para medicin de frecuencia, ver figura No. 8.17. Eleve la frecuencia a 10Khz y
vare el ciclo til, observe los resultados.
Figura No. 8.16: Men Principal Figura No. 8.17: Medicin de Frecuencia,
para el programa 8_4.bsp Para el programa 8_4.bsp.
Fuente: Elaboracin Propia. Fuente: Elaboracin Propia.
'Programa 8_4.bsp
'Este programa tiene por objetivos:
'1) Implementar un instrumento para la medicin de frecuencia, resistencia y
'capacitancia
'2) Utilizar el teclado del mdulo SLCD-BD
'3) Manejo de mltiples bancos de programacin
'===================================================================================
'{$STAMP BS2p,P8_4a.bsp,P8_4b.bsp,P8_4c.bsp}
'La directiva $STAMP se ve modificada con la inclusin de los archivos que contienen
'los programas que estarn ubicados en los bancos 1,2 y 3
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de variables y constantes
BorrarLCD CON 1 'Limpiar pantalla
Off_LCD CON 8 'Apaga el LCD sin borrar su contenido
On_LCD CON 12 'Enciende el LCD sin cursor
CGRAM_0 CON 64 'Posicin del primer carcter en la CGRAM
Baudios CON 240 'Parmetro Baudmode de SERIN/SEROUT
Inst CON 254 'Envo de una Instruccin
Linea1 CON 128 'Posiciona al apuntador de DDRAM al inicio de la lnea 1
Linea2 CON 192 'Posiciona al apuntador de DDRAM al inicio de la lnea 2
DO
SEROUT Slcd_Rx,Baudios,[Inst,Linea1+3,"FUNCIONES"]
SEROUT Slcd_Rx,Baudios,[Inst,Linea2+1,0,3,"Hz ",1,3,$F4," ",2,3,$E4,"F"]
'Menu de seleccin 1= Frecuencmetro , 2=Ohmmetro, 3=Capacmetro
Tecla =" " : LOW Slcd_Enable : PAUSE 1
'Habilita el SLCD-IC para lectura del teclado
SERIN Slcd_Tx,Baudios,250,No_Tecla ,[HEX2 Tecla]
'Espera durante 100ms y si no se presiona ninguna tecla salta a la etiqueta No_Tecla
HIGH Slcd_Enable
SELECT Tecla
CASE "1": SEROUT Slcd_Rx,Baudios,[Inst,BorrarLCD]: RUN 1
'Si se presiona 1,se ejecuta el programa P8_4a.bsp
CASE "2": SEROUT Slcd_Rx,Baudios,[Inst,BorrarLCD]: RUN 2
'Si se presiona 2,se ejecuta el programa P8_4b.bsp
CASE "3": SEROUT Slcd_Rx,Baudios,[Inst,BorrarLCD]: RUN 3
'Si se presiona 3,se ejecuta el programa P8_4c.bsp
CASE ELSE
'Si se presiona cualquier otra tecla es ignorada y se emite un aviso sonoro
FREQOUT Buz,943,1194
ENDSELECT
No_Tecla:
HIGH Slcd_Enable
LOOP
No_Tecla:
HIGH Slcd_Enable 'Deshabilita la transmisin de datos del SLCD-IC
GOSUB Medir 'Efecta la medicin
LOOP
'===================================================================================
'SUBRUTINAS
'Rutina para efectuar medicin de Frecuencia y Ciclo til
Medir:
PULSIN Fin , 1,Talto 'Medicin de Thigh
PULSIN Fin , 0,Tbajo 'Medicin de Tlow
Periodo = Talto + Tbajo 'Perodo en unidades de PULSIN
Periodo = Periodo*/$C0 'Perodo en us
Talto = Talto*/$C0 'Thigh en us
Tbajo = Tbajo*/$C0 'Tlow en us
Freq = 16*(62500/Periodo) 'Frecuencia en Hz
GOSUB CicloUtil 'Rutina de clculo del CU
RETURN
CicloUtil:
Talto = Talto/10 : Periodo = Periodo/10 'Ajuste para evitar desbordamiento
Resto = Talto//Periodo 'No hay parte entera pues Thigh < Periodo
DC = 0 'Inicializacin de variable
FOR i=0 TO 2
Resto = Resto*10
DC = (DC*10) + (Resto/Periodo)
Resto = Resto//Periodo
NEXT
RETURN
Resistencia:
Res = 0
DO
SEROUT Slcd_Rx,Baudios,[INST,Linea1,"RESIST: ",DEC5 Res," ",$F4]
SEROUT Slcd_Rx,Baudios,[INST,Linea2+4,0,3,4,"SALIR"]
'Muestra el resultado de la ltima medicin efectuada
GOSUB Medir
Tecla = " " : LOW Slcd_Enable : PAUSE 1
GOSUB Flecha_ret
SERIN Slcd_Tx,Baudios,250,No_Tecla,[HEX2 Tecla]
HIGH Slcd_Enable
IF Tecla = "1" THEN RUN 0 ELSE FREQOUT Buz,943,1194
'Si se presiona la tecla 1, se retorna al men principal
No_Tecla:
HIGH Slcd_Enable
LOOP
'===================================================================================
'SUBRUTINAS
'Rutina para medir resistencia mediante el comando RCTime con un condensador de 1 uF
Medir:
HIGH Rpin 'Descarga del Capacitor
PAUSE 50 'Tiempo superior a 4*RC para Rx<10000
RCTIME Rpin, 1, Res 'Medicin del tiempo de carga
Res = Res */$BF 'Conversin de unidades de RCTime a Ohmios multiplicando
RETURN 'por 0.747
Capacitancia:
Cap = 0
DO
SEROUT Slcd_Rx,Baudios,[INST,Linea1," CAP: ",DEC3 Cap/1000,".", DEC1 Cap DIG 2 ,
DEC1 Cap DIG 1 ,DEC1 Cap DIG 0 ," ",$E4,"F"]
SEROUT Slcd_Rx,Baudios,[INST,Linea2+4,0,3,4,"SALIR"]
'Muestra el resultado de la ultima medicin efectuada
GOSUB Flecha_Ret
Tecla =" " : LOW Slcd_Enable : PAUSE 1
SERIN Slcd_Tx,Baudios,250,No_Tecla,[HEX2 Tecla]
HIGH Slcd_Enable
IF Tecla="1" THEN RUN 0 ELSE FREQOUT Buz,943,1194
No_Tecla:
HIGH Slcd_Enable
GOSUB Medir
LOOP
'===================================================================================
'SUBRUTINAS
'Rutina para producir el efecto de parpadeo en la flecha de retorno
Flecha_Ret:
Flecha = ~Flecha
IF Flecha THEN
SEROUT 2,Baudios,[INST,Linea2+6,4]
ELSE
SEROUT 2,Baudios,[INST,Linea2+6," "]
ENDIF
RETURN
La instruccin RCTime en un BS2p mide en unidades de 0.9s cada una as que, sustituyendo en la
expresin anterior y evaluando, se obtiene que:
RCtime = 1,338 RC
Donde C est expresado en uF.
Ahora observe, que en el programa P8_4b.bsp se ha utilizado la siguiente instruccin: Res = Res */$BF
De manera similar, resultar evidente que si se fija a R=1 KOhms como se efecto en el programa
P8_4c.bsp el resultado de RCtime tiene que ser ajustado multiplicndolo por 0.747 x10-3, al ser este nmero
muy difcil de manejar por el Stamp, se puede calcular la capacitancia en mF (con lo que se elimina el
termino x10 3) y utilizar los modificadores de formato y el operador DIG para presentar el resultado en la
pantalla de LCD.
Programacin
1. En el esquema de la figura No. 8.13, muestra el circuito utilizado para la medicin de resistencia y
capacitancia en el ejercicio # 3. Notar que el valor de la resistencia de proteccin en los terminales
del BASIC Stamp de (220 Ohms), altera el resultado de la medicin. Tal efecto, puede verse en la
figura No. 8.19. En base al valor de sta resistencia, calcule el factor de correccin que deber ser
utilizado en la medicin de la resistencia para que la lectura de las magnitudes de resistencia y
capacitancias medidas no tengan error. Modifique el programa 8_4.bsp y/o los programas
necesarios para que el equipo de medicin de resistencias y capacitancias compense ese error.
NOTA: No se permite el poner en cortocircuito la resistencia de 220 Ohm.
Captulo No. 09
Medicin de Temperatura
Introduccin. La regulacin de la temperatura representa una de las aplicaciones ms comunes e importantes en ambientes
industriales y domsticos. De acuerdo a la aplicacin, es necesario conocer las limitaciones que tienen los equipos utilizados para su
medicin. Limitaciones que podran ser: la precisin, la velocidad de respuesta, la inmunidad al ruido, la linealidad de la medida, el
rango de operacin y la influencia de los factores ambientales, entre otros. En ste captulo se utilizar el BASIC Stamp para construir
un instrumento de medicin de temperatura por medio del circuito integrado DS1620, fabricado por DALLAS Semiconductor. Sin
embargo, haremos una pequea descripcin de otros elementos utilizados comnmente para la medicin de la temperatura.
En la mayora de los procesos industriales, la temperatura constituye una de las variables ms crticas. De su
correcta medicin y control dependern importantes factores como la calidad del producto y el consumo de
energa. Por esta razn, los captulos No. 9 y No. 10 han sido dedicados al estudio de la medicin y el
control de sta importante variable por medio del microcontrolador BASIC Stamp. Adems, el sistema de
desarrollo MDK-B28 ha sido equipado con todos los componentes necesarios para simular un sistema
trmico, en el cual se puede efectuar una multitud de experimentos.
Para realizar una correcta determinacin de la temperatura, es necesario conocer y seleccionar muy bien los
instrumentos destinados a su medicin, traduccin y procesamiento. La seleccin del dispositivo a utilizar
depender en la mayora de los casos de la propia temperatura de operacin, as como de la precisin
requerida. En ningn caso ser lo mismo efectuar una medicin para mantener agradable la temperatura de
una habitacin que para controlar una reaccin qumica o en el interior de una caldera.
El LM35DZ, proporciona una tensin que vara linealmente con la temperatura a razn de 10mV/C. Opera
en un rango de temperatura que puede ir desde 0C a +100C y su precisin es de 0.9C. Se usa
comnmente en la medicin de la temperatura ambiental. Por su parte, el circuito integrado AD592 opera
como una fuente de corriente controlada por temperatura, con una relacin 1A/K y permite trabajar en un
rango de -25C a 105C. Al ser su salida una seal de corriente, se facilita su utilizacin en ambientes
retirados de la ubicacin del microcontrolador.
TERMISTORES
Los PTC son comnmente empleados en circuitos de disparo y alarma para la deteccin de temperaturas
elevadas en equipos industriales. Los NTC suelen usarse en la medicin y control de la temperatura. En la
figura No. 9.2, se muestran las presentaciones tpicas de estos dispositivos.
Figura No .9.2:
Termistores PTC y NTC.
Fuente:
Modificado de revista Robots,
pg SA 10, Madrid 2000.
Los termistores PTC poseen un coeficiente de temperatura positivo, por lo que la resistencia aumenta con la
temperatura. Por el contrario, los NTC poseen un coeficiente de temperatura negativo; es decir, su resistencia
disminuye con el aumento de la temperatura. Estas variaciones de resistencia pueden ser fcilmente medidas por
el microcontrolador BASIC Stamp. La figura No. 9.3 muestra la caracterstica de Resistencia vs. Temperatura de
ambos tipos de termistores.
PTC
NTC
R R
E E
S S
I I
S S
T T
E E
N N
C C
I I
A A
TERMOPAR
Otro dispositivo de uso frecuente en la medicin de temperatura en ambientes industriales, es el termopar.
Generalmente vienen encapsulados en una sonda de acero inoxidable que protege la junta de medicin. Un
ejemplo de termopar puede verse en la figura No. 9.4.
Existen varios tipos de termopares. Los ms utilizados se muestran en la tabla No. 9.1.
Existen en el mercado dispositivos de alta tecnologa, llamados termmetros digitales, capaces de conectarse
directamente a un microcontrolador y entregarle el valor de la temperatura en forma digital. Un ejemplo de
ello, es el termmetro/termostato DS1620 fabricado por DALLAS Semiconductor. Este dispositivo ha sido
incorporado en el sistema de desarrollo MDK-B28, el mismo servir de base para los experimentos de este
captulo.
Una vez que el DS1620 efecta la medicin, el valor de la temperatura se almacena en un registro interno
utilizando la representacin numrica llamada complemento a dos (en caso de ser negativa). La tabla No.
9.2 muestra la relacin entre la temperatura medida y la salida digital del DS1620.
El DS1620 posee tres terminales de salida (THIGH, TLOW y TCOM) controlados trmicamente por el propio
integrado que le permiten funcionar como un termostato. Estos terminales pueden utilizarse como seales
de control o de alarma.
La salida TALTA (THIGH), se activa en el momento en que la temperatura iguale o exceda el valor contenido en
el registro interno de temperatura alta (TH) del DS1620. THIGH se mantendr activa mientras la condicin
persista. De manera similar, cuando la temperatura es igual o inferior al contenido del registro de
temperatura baja (TL), la salida TBAJA (TLOW), se activar. TLOW se mantendr activa hasta que la temperatura
sea superior al valor de TL. Finalmente, la seal TCOM se dispara si la temperatura es mayor o igual al registro
TH y se mantendr activa hasta que la temperatura sea igual o inferior a TL.
La correcta utilizacin de estos terminales permite que el DS1620 pueda ser empleado en lazos cerrados de
control de temperatura, ya sea activando mecanismos de calefaccin (TLOW) o de enfriamiento (THIGH y TCOM).
Para definir la forma de operacin del DS1620, ste cuenta con un registro de configuracin/estado. Este
registro de 8 bits, contiene 4 bits de slo lectura que indican el estado de las operaciones realizadas por el
DS1620 y 2 bits de lectura/escritura que permiten configurar tanto el modo de funcionamiento (termmetro
o termostato) como la velocidad de repeticin de las mediciones. A continuacin se detalla la funcin de
cada bit del registro de control.
THF: Flag de temperatura alta. Toma el valor uno (1) cuando la temperatura sea mayor o igual a TH.
TLF: Flag de temperatura baja. Toma el valor de un uno (1) lgico si la temperatura es menor o
igual que el valor de TL.
Al activarse, los bits THF y TLF mantendrn su estado hasta que se aplique un reset al DS1620.
1SHOT: Configura al DS1620 en modo "One-Shot" o modo continuo. Este modo de operacin es de
gran utilidad en los casos donde la lectura de la temperatura se realiza en intervalos de tiempos
definidos o cuando se requiera consumir poca energa. El estado de las salidas THIGH, TLOW y TCOM
permanecern en sus valores luego de la ltima conversin.
1SHOT = 0 Se efectuarn mediciones continuamente.
1SHOT = 1 El dispositivo realizar slo una conversin de temperatura despus de recibir una seal de inicio de
conversin.
El microcontrolador puede leer y escribir en los registros internos del DS1620 utilizando una serie de
comandos de configuracin y operacin, stos se describen en la tabla No. 9.3.
Comando Descripcin
Leer Temperatura [AAh] Lee el resultado de la ltima medicin efectuada.
Escribir TH[01h] Permite escribir en el registro de temperatura alta (TH).
Escribir TL[02h] Permite escribir en el registro de temperatura baja (TL).
Leer TH [A1h] Lee el contenido del registro de temperatura alta (TH).
Leer TL [A2h] Lee el contenido del registro de temperatura baja (TL).
Permite iniciar la conversin. En el modo One-Shot la conversin de
Iniciar Conversin [EEh] temperatura se llevar a cabo y luego el dispositivo permanecer en estado
inactivo.
Detiene la conversin. Una vez enviado al DS1620, ser completada la actual
Parar Conversin [22h] medicin de temperatura, posteriormente el dispositivo permanecer en estado
inactivo.
Escribir Configuracin [0Ch] Escribe datos en el registro de configuracin.
Leer Configuracin [ACh] Permite leer el contenido del registro de configuracin.
Todos los terminales del circuito integrado se encuentran disponibles en la regleta general de conexiones.
Los pines de operacin del termostato se encuentran identificados de la siguiente manera: THI (THIGH),
TLOW (TLOW) y TAL (TCOM). Debido a que estos terminales suelen asociarse con alarmas o con otros medios
de visualizacin, en el MDK-B28 se ha dispuesto de diodos LEDs que indican el estado de los mismos. El LED
L0 es del tipo bicolor, encender en color verde cuando la temperatura alcance el lmite inferior (TLOW activo)
y en rojo cuando se dispare THIGH. El LED L1 es de alto brillo y emitir una intensa luz roja mientras se
encuentre activada la salida TCOM del DS1620.
El sistema de desarrollo MDK-B28 tambin posee un circuito manejador de potencia, cuya finalidad es
proporcionar una fuente de calor que pueda ser aplicada al DS1620, con la intencin de elevar su
temperatura. Controlando la seal aplicada al manejador de potencia, podemos entonces realizar un control
de temperatura tanto en lazo abierto como en lazo cerrado dentro del propio sistema de desarrollo. Esto se
har en el captulo No. 10. La figura No. 9.6 muestra los componentes que componen a este calentador. Su
operacin es muy sencilla, el estado del terminal CAL controla el encendido/apagado del calentador.
Nota: Conectando un mecanismo de ventilacin entre los terminales CN5-1 y CN5-2, el driver de potencia controlar su
estado, pudindose construir un sistema de enfriamiento. Este ventilador no podr en ningn caso tener un consumo
mayor de 200 mA.
El protocolo 3-Wire, establece que la informacin ser transmitida en paquetes o bloques de 8 bits (1 byte).
El DS1620 puede trasmitir o recibir la informacin en dos palabras de 8 bits, donde los 7 bits ms
significativos sern ignorados o llevados a cero. Sin embargo, tambin puede transmitir y recibir informacin
en bloques de 9 bits, para lo cual la seal de reset es llevada a cero despus del 9no bit.
La seal de reloj es producida por el dispositivo maestro. Para los esclavos, los bits de entrada son
capturados o validados durante la subida del pulso de reloj. Mientras que los bits de salida estn disponibles
para el dispositivo maestro durante en flanco de bajada del pulso de reloj y permanecen disponibles hasta el
siguiente flanco de subida en el pin CLK. Una vez terminada la transferencia de datos, el terminal de
Entrada/Salida de datos es llevado a alta impedancia.
En toda transmisin sobre el bus 3-Wire, los primeros 8 bits representan un comando o la direccin de un
registro del dispositivo esclavo y son seguidos de uno o ms bytes de datos.
RST
CLK
Data 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
RST
CLK
0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
Data
Byte de Direccin/Comando Dato I/O Dato I/O
El StampPlot Pro (SPP) es una poderosa interfaz entre una PC y un microcontrolador, que permite graficar y
manipular la informacin que recibe a travs del puerto serial de un computador.
En captulos anteriores, se ha utilizado al StampPlot para graficar seales tanto analgicas como digitales;
sin embargo, an no se ha profundizado en el estudio de esta til herramienta.
Debemos recordar que en principio, los comandos y los datos son enviados desde el BASIC Stamp al
StampPlot Pro de manera serial asincrnica utilizando los comandos DEBUG o SEROUT. Toda lnea de
instruccin que se enve desde el microcontrolador hacia el StampPlot, debe concluir con el carcter ASCII
13 conocido como Carrier Return o CR. Una vez que el SPP recibe una informacin puede interpretarla
como alguno de los siguientes tipos de datos:
Analgicos: Cualquier informacin que inicie con un nmero ser interpretada como un valor
analgico y graficada. Si se desean graficar mltiples variables, stas se envan una detrs de la
otra, separadas entre s por una coma ,.
Digitales: Cualquier informacin que inicie con el indicador % ser graficada como una seal
digital.
Instrucciones de control: Se identifican por comenzar con el carcter !. Son utilizadas para el
control y la configuracin de la grfica. Permiten efectuar cualquiera de las operaciones disponibles
en la barra de herramientas del StampPlot Pro.
Instrucciones de dibujo: Comienzan con los caracteres ~,^, y @. Pueden ser utilizadas para
dibujar formas bsicas (crculos, rectngulos o lneas), presentar imgenes en la pantalla y
reproducir archivos de sonido en formato WAV. El carcter ~ significa que la operacin que le sigue
es ejecutada una vez y no se guarda (temporal). El uso del carcter ^ indica que la operacin es
ejecutada y se guarda como un data point para ser reutilizada. Un @ antes de una instruccin de
dibujo, indica que la misma debe almacenarse como una constante, ello permite que el dibujo
permanezca en pantalla an si la grfica es refrescada o re-dibujada.
Mensajes: La informacin que no contenga ninguna de las anteriores estructuras ser tomada
como un mensaje.
Pero, la configuracin del SPP tambin puede ser introducida por medio de la ejecucin de macros. Un
macro puede contener informacin de inicializacin y detalles que definen las caractersticas de la grfica, de
esta manera, se optimiza la ejecucin de los programas y se permite manejar de manera ms eficiente la
memoria del microcontrolador. Adems, el StampPlot Pro incluye una caracterstica llamada matemtica de
macro (Macro Math) que permite efectuar operaciones aritmticas y lgicas sobre los datos entrantes. Estas
operaciones incluyen trigonometra, conversin de formatos, comparaciones, potenciacin, entre otras. La
edicin y la creacin de los macros se puede hacer con cualquier programa para edicin de texto como el
Block de notas de Microsoft Windows o con el BASIC Stamp editor de Parallax,Inc. El archivo debe ser
guardado con extensin .spm en la carpeta Macros del directorio de instalacin del StampPlot Pro V3.
El StampPlot dispone de 100 estructuras denominadas Data Markers . Estos permiten almacenar y utilizar
cualquier tipo de informacin, ya sea numrica, cadenas de texto o fechas. Los data markers tienen
asignados los nombres %m0 a %m99; y pueden ser utilizados como variables internas en el SPP para enviar
informacin hacia el microcontrolador. Cuando se grafican valores analgicos, stos se almacenan en las
variables %m0 a %m9.
En la tabla No. 9.4, se describen algunos comandos del StampPlot que sern utilizados en los siguientes
captulos.
Comando Descripcin
Nueva grfica. Retorna la grfica a valores por defecto. Los objetos no son
!NEWP
borrados.
!POBJ Clear Borrar el contenido del rea de objetos.
!REFR Se refresca o re-dibuja la grfica.
!SHFT ON/OFF Define que al llegar al tiempo mximo, la grfica debe desplazarse.
Define el porcentaje de la ventana que ocupa la grfica analgica. El rea
!PPER X%,Y%
restante se utilizar como rea de objetos.
!RTIM ON/OFF Permite habilitar/deshabilitar el reloj de tiempo real para el eje horizontal.
!STAT mensaje Muestra un mensaje en el recuadro estatus del usuario (idntico a ! USRS).
Captura una imagen en formato JPEG de la grfica y la almacena en un
!SNAP nombre del archivo
archivo.
De uso en Macros
!IFTH val1, comp val2, Es la estructura IF..THEN. Si la comparacin es verdadera se ejecutar la
instruccin instruccin.
!MATH Especifica que operacin matemtica se ejecutar. !MATH %m0=%m0,*,10
!MVAR nombre {= val} Asigna un nombre y opcionalmente un valor a un data marker.
!MREQ val. por defecto , Abre un cuadro de dialogo, donde se solicita al usuario que introduzca un
espera (seg), mensaje, data valor. Este valor es guardado en una de las 100 variables internas del
marker StampPlot Pro .
Interaccin con el microcontrolador
Se utiliza para leer el contenido de los data markers desde el
!READ dato
microcontrolador.
Al inicializar el StampPlot Pro, se carga por defecto una barra de herramientas que provee de una gran
cantidad de opciones de configuracin y control. En las figuras No. 9.9, No. 9.10 y No. 9.11 se describe la
funcin de la mayora de estos conos.
Imprimir:
Imprimir:
Imprime la grfica
Abrir Archivo:
actual.
actual.
Permite
Permiteabrir
abrirmacros
macros
(*.spm)
(*.spm) yy archivos
archivosdede
grficas (*.
grficas (*.plt.)
plt). Snapshot:
Snapshot:
Crea
Creaununarchivo
archivo.jpg
jpg
.
Guardar Grfica:
Guardar Curva:
de la
Guarda
Guardalalagrfica
grfica actual
actu de lagrfica
grficaactual.
actual.
en un
en unarchivo
archivo.plt
plt.
.
Borrar Grfica:
Graficar dato:
Graficar Dato:
La grfica es borrada. La
Permite
Permite iniciar
iniciar lala graficacin
graficacinde delas
las
escala de tiempo es llevada a variables
cero.
variables que
que lleguen
lleguenpor porelelpuerto
puerto
serial.
serial.
Desplazar Grfica
Desplazar Grfica:
:
Desplaza lalagrfica
Desplaza grficaen
enunun
20%,
20%, si el valor de
de los
los datos
datos
alcanzaron
alcanzaronelelmximo
mximode de
Conectar: tiempo.
tiempo.
Se establece la conexin Detener:
Detener:
con el microcontrolador por
el puerto COM del PC. Permite detener
Permite detener oo reiniciar
reiniciarlala
grfica cuando
cuando sta
stallega
llegaalal
mximo nmero
nmero dede valores
valoresen enelel
tiempo oo nmero
nmero dede puntos
puntos aa
graficar.
graficar.
Duplicar span
Duplicar span de X:
Desplazar eje
Desplazar ejeY:
Y:
Permite
Permite desplazar
Permiteduplicar
duplicarel el Desplazar eje
Desplazar ejeX:
X:
Permite desplazar recorrido
recorridodel
delejeejeX.X.
el eje
el ejeYYhacia
hacia Permite
arriba.
arriba. Permitedesplazar
desplazar
el
el eje
ejeXXaalala
izquierda.
izquierda.
Duplicar span
Duplicar spande
deY:
Y
Permite
Desplazar eje
Desplazar ejeX:
X:
Permiteduplicar
duplicarel el Desplaza
recorrido
recorridodel
delejeejeY.Y. Desplazaelelejeeje
X X
a
a lala derecha.
derecha.
Dividir el
Dividir elspan
spandede
Y:Y Desplazar eje
Desplazar ejeY:
Y: Dividir span
Dividir spande
deX:
X
Divide
Divideelelrecorrido deldel
recorrido Permite
Permitedesplazar
desplazar Permite dividir el
eje
eje YYaalalamitad.
mitad. el
el eje
ejeYYhacia
hacia recorrido
recorridodel delejeejeX X
abajo.
abajo. a
a lala mitad.
mitad.
En la parte inferior de la pantalla, aparecer siempre la barra de estado de la conexin, ver figura No. 9.12.
Ella indica si el StampPlot se encuentra o no conectado y recibiendo/transmitiendo datos. Adems, se
muestra el estado de la cola donde se almacena los datos que arriban por el puerto serial.
C (Conexin):
(Conexin): T (Transmisin):
(Transmisin):
de la
Refleja el estado de la conexin
conexin entre
entre Cambia a rojo cuando
cuando se
se estn
estn enviando
enviandodatos.
datos.
microcontrolador yyelelStampPlot.
el microcontrolador StampPlot.ElEl
conexin establecida,
verde indica conexin establecida, el
el
rojodesconexin
desconexiny yelelamarillo
amarillo Barra deprogreso
Barra de progresode
dedatos:
datos:
rojo
intentadoconexin.
intentado conexin. el porcentaje
Indica el porcentajeusado
usadodel
del
total de
total de puntos
puntosdisponibles.
disponibles.
R (Recepcin):
(Recepcin): Barra deprogreso
Barra de progresode del Stack:
la cola:
Cambia a rojo cuando
cuando se
se estn
estn recibiendo
recibiendo Indica el porcentaje
Indica el porcentajeusado
usadodedella Stack porlas
cola por lasinstrucciones
instrucciones
datos. procesadas. Si Si alcanza
alcanza un
un nivel muy alto,
alto,indica
indicaquequeelelcomputad
computador
or
Figura No. 9.11: Descripcin estlarecibiendo
de datos ms
datos ms rpido
barra de herramientas rpido delolodel
de
(Dibujo), que
que estospueden
estos
StampPlot pueden ser
Pro. ser
procesados.
Fuente: Elaboracin propia.
Los datos que llegan del microcontrolador son Los datos que llegan y son graficados se
llevados a El Stack mientras se procesan. Por almacenan en un "Data Point". Esto permite
defecto el tamao de ste Stack o fila es de 3000 guardar las grficas en archivos. Por defecto se
bytes, pero este valor puede ser ajustado. retienen 500 valores, luego de esto se re-inicializa
y se reinicia la grfica. Sin embargo, este valor
El porcentaje en uso del total del Stack se indica en puede ser cambiado. El porcentaje usado del total
barra inferior de la barra de estado que se de estos data points, se indica en la parte ms alta
encuentra en la esquina inferior izquierda de la de la barra de estatus ubicada en la esquina
pantalla, ver figura No. 9.12. inferior izquierda. Los valores analgicos, digitales
y la instrucciones que inicien con ^ son guardadas
en este tipo de estructuras.
Con esto se transforma de un simple programa para Un evento es alguna accin que efecta el usuario
o algn cambio en las condiciones del programa.
graficar datos, en una herramienta para crear
sistemas interactivos de monitoreo y control de La mayora de los objetos permiten definir una
aplicaciones. accin a ejecutar al momento de ocurrir un evento.
Por ejemplo, en un objeto como un botn, se
considera que ha ocurrido un evento al hacer clic
Para crear las interfases, StampPlot incluye una serie sobre el mismo.
de controladores grficos que pueden ser dispuestos
sobre el rea de objetos (ver sintaxis de la Esta caracterstica es de gran utilidad, por medio
instruccin !PPER en la tabla No. 9.4). En una simple de ella se puede conocer si el objeto ha sido
modificado, lo cual se interpreta como una accin
lnea de instruccin se define la posicin del objeto y realiza por el usuario y que debe ser atendida.
su configuracin; posteriormente todas sus
propiedades pueden ser modificadas a travs de
lneas de programacin sencillas.
En general, al momento de crear un objeto se deben definir parmetros tales como: ubicacin horizontal,
ubicacin vertical, altura y ancho. Dependiendo del objeto en particular, a esta lista se aaden ciertos
parmetros. En las figuras No. 9.13 y No. 9.14 se muestran las opciones requeridas para crear un
manmetro (oMeter) y un botn (oButton).
Altura a la cual se
desea crear el objeto.
Indica el tipo de objeto
a crear. En este caso
un Meter (medidor). Ancho
Ancho del objeto. de disco y tornillo
delPTCs
objeto. Altura del objeto.
Alarma por mximo.
Comando para
crear un objeto.
Alarma por mnimo.
Mximo dede
la la
escala.
escala.
Nombre del objeto.
El siguiente programa utiliza un macro del StampPlot Pro con la finalidad de que usted comprenda, a travs
de un ejemplo, el funcionamiento de los macro y de los objetos.
Transcriba el siguiente macro y gurdelo con el nombre de Demo.spm, en la carpeta Macro dentro del
directorio de instalacin del StampPlot Pro.
'Programa Demo.bsp
'Este programa en conjunto con el archivo Demo.spm constituyen un ejemplo de:
'1) El uso de los macros para configurar una grfica en el StampPlot
'2) La creacin y actualizacin de objetos
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
x VAR Byte 'Variable de uso general
Descargue el programa Demo.bsp en el BASIC Stamp 2p y cierre el debug terminal del editor de PBASIC.
Inicie el programa StampPlot Pro y ejecute el macro. Para hacer esto, seleccione la opcin Run Macro, que
se encuentra en el men Macros. Ahora, en el men Plot seleccione Connected.
Aplique una seal de reset al microcontrolador presionando el pulsador de RESET del sistema de desarrollo
MDK-B28.
En el macro se definen los objetos ms comnmente utilizados en el desarrollo de interfaces grficas con el
usuario. Los mismos pueden ser ubicados mediante la figura No. 9.15.
rea de objetos
Barra de estado del usuario
Medidor
Etiqueta
rea de graficacin
Cuadro de texto
Cuadro de dialogo
Banner
Pulsador
Barra de Progreso
GET
Este comando permite leer el contenido de una localidad de la memoria RAM Scratchpad.
Direccin: Es una variable, constante o expresin, por medio de la cual se especifica la direccin la
localidad de la RAM Scratchpad a leer.
Variable: Es una variable para guardar el valor ledo de la RAM Scratchpad. Puede ser un byte o
word segn se utilice o no el modificador de formato Word.
Por defecto, ste comando utiliza variables tipo byte; sin embargo, si utilizamos el modificador de variables
Word, se leern dos bytes contiguos. Cualquier registro de la memoria RAM Scratchpad puede ser ledo
desde cualquiera de los ocho bloques de programacin del BASIC Stamp 2p. La memoria RAM Scrathpad se
puede utilizar como un espacio de trabajo adicional y para el intercambio de variables entre los diferentes
bloques de programacin del BASIC Stamp.
PUT
Esta instruccin permite escribir una variable en la memoria RAM Scratchpad.
Direccin: Es una variable, constante o expresin que apunta al registro o localidad de la memoria
RAM Scratchpad donde se desea escribir.
Valor: Es una variable, constante o expresin a guardar en la RAM Scratchpad.
Este comando escribe un valor tipo byte en una direccin especfica del Scratchpad. Al igual que para
la lectura, el contenido de la RAM Scratchpad puede ser escrito desde cualquiera de los 8 bloques de
programacin. El modificador Word permite almacenar datos de 16 bits en organizacin Little Endian (byte
menos significativo en posicin ms baja de la memoria).
POLLIN
Activa el mecanismo de Entrada/Salida por encuesta, especificando la entrada que ser encuestada y
el estado en que se le considerar activa.
Pin: Es una variable, constante o expresin (0 - 15) que especifica el terminal de E/S que ser
encuestado.
Estado: Es una variable, constante o expresin (0 - 1) que indica cul estado lgico (0 1) ser
considerado como afirmativo al momento de efectuar la encuesta.
Cuando un terminal satisface la condicin indicada por el parmetro Estado, el BASIC Stamp puede hacer
cualquiera de las siguientes cinco acciones:
1. No hacer nada.
2. Colocar los terminales de salida (asignados con POLLOUT) a un estado especfico.
3. Ejecutar el programa contenido en un banco definido por POLLRUN.
4. Esperar, es decir, detener la ejecucin del programa hasta que sea satisfecha la condicin y el
estado del Pin sea el deseado.
5. Cualquier combinacin de los puntos 2, 3 y 4.
Los comandos de E/S por encuesta, le permiten al BASIC Stamp responder ante ciertos eventos en los
terminales de E/S, que por la velocidad con la que ocurren no pueden ser detectados normalmente. El
trmino encuesta (poll), viene del hecho de que el intrprete del BASIC Stamp, chequea constantemente el
estado de los terminales designados como entradas a encuestar. La encuesta se realiza despus de finalizar
la ejecucin de cada instruccin del programa (PBASIC).
POLLOUT
Especifica que una salida tendr un estado determinado cuando se detecte que algn Pin encuestado
satisface la condicin deseada.
Pin: Es una variable, constante o expresin (0 - 15) que especifica el terminal de E/S que ser
utilizado.
Estado: Es una variable, constante o expresin (0 - 1) que indica en cul estado lgico (0 1) ser
colocado al terminal Pin al ocurrir una respuesta afirmativa en la encuesta.
El comando POLLOUT configurar al terminal indicado por Pin como salida y cambiar el estado de ste
segn lo indicado por el parmetro Estado.
POLLMODE
Determina qu accin ocurrir ante una respuesta afirmativa en los terminales encuestados.
POLLMODE Modo
Modo: Es una variable, constante o expresin (0 - 15) que especifica el modo de configuracin de
la encuesta.
1
Luego que ocurre la accin indicada por POLLRUN, queda en modo 1.
2
Luego que ocurre la accin indicada por POLLRUN, queda en modo 2.
3
Estos modos no anulan el modo previo existente. Adicionalmente, el estado de las salidas no cambia.
END
Indica el fin de un programa y coloca al BASIC Stamp en modo de baja potencia por un lapso de tiempo
indefinido.
END
El comando END coloca al microcontrolador BASIC Stamp en estado inactivo, reduciendo su consumo de
corriente a unos 400 A. De este estado slo saldr el aplicarse una seal de reset.
El estado de las salidas del BS2p se mantendr, pero ocurrir en ellas un parpadeo de aproximadamente 18
ms cada 2.3 segundos. Este parpadeo se debe a que el microcontrolador interprete del BASIC Stamp, se re-
inicializar por el desbordamiento de su Watchdog Timer. Durante el reset del microcontrolador UBICON
SX48AC, todos los terminales del BS2p se convertirn en entrada por 18 ms.
WATCHDOG TIMER
El perro guardin o Watchdog Timer de un sistema digital es un mecanismo temporizado que permite re-inicializar al
sistema en caso de que este se cuelgue. Esta situacin puede ocurrir cuando el sistema entre en un estado invlido,
ejecute una operacin incorrecta o simplemente quede atrapado en un ciclo infinito de programacin. Este reset
automtico garantiza que el sistema seguir operando y si la causa del cuelgue fue casual continuar funcionando
como si nada hubiese ocurrido.
Objetivos: Utilizar al sensor digital de temperatura DS1620 para construir un termmetro digital. Emplear el sistema de Entrada/Salida
por encuesta del microcontrolador BS2p para controlar el estado del calentador del sistema de desarrollo MDK-B28.
Elementos a Utilizar
Identifique el driver de potencia del sistema de
(1) BASIC Stamp 2p. desarrollo MDK-B28. Conecte una resistencia de 220
(1) DS1620 Termmetro/Termostato digital. Ohm entre los terminales del conector CN5, segn lo
(1) Driver de potencia del sistema MDK-B28. mostrado en la figura No. 9.16. Es de suma importancia
(1) Banco de pulsadores. que esta resistencia quede al ras del circuito integrado
(1) Resistencia de 220 Ohms 1/4 W.
(1) LED Bicolor. DS1620 para que pueda transferirle calor de manera
(1) Mdulo SLCD-DB. adecuada.
(1) Cable serial DB9.
(1) StampW (v2.0 beta 2.1 o superior). Arme el circuito de la figura No. 9.17.
'Programa 9_1.bsp
'Este programa permite configurar al DS1620 como termmetro y mostrar el valor de
'la temperatura con una resolucin de 0.5C, por medio del SLCD-BD
'===================================================================================
'{$STAMP BS2p,P9_1a.bsp}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
BorrarLCD CON 1 'Limpiar pantalla
Linea_1 CON 128 'Mover cursor a la primera lnea de la pantalla
Linea_2 CON 192 'Mover cursor a la segunda lnea de la pantalla
Baudios CON 240 'Velocidad de la Transmisin/Recepcin
Inst CON 254 'Indica al SLCD-IC la presencia de una instruccin
TempA CON 80 'Temperatura alta = 40 C (Alarmas del DS1620)
TempB CON 60 'Temperatura baja = 30 C
LeerTemp CON $AA 'Comando para leer temperatura
InicioConv CON $EE 'Comando para iniciar conversin
ConfiTerm CON $0A 'Configurar al DS1620 como termmetro
ConfiTalta CON $01 'Comando para configurar temperatura alta
ConfiTbaja CON $02 'Comando para configurar temperatura baja
EscrRegCon CON $0C 'Escribir en el registro de configuracin del DS1620
GOSUB Init_Temp
ENDIF
SEROUT Slcd_Rx,Baudios,[Inst,BorrarLCD] 'Borra el contenido de la pantalla LCD
DO
GOSUB Leer_Temperatura 'Mide la temperatura
SEROUT Slcd_Rx,Baudios,[Inst,Linea_1,"CAL = ",BIN1 CAL]
SEROUT Slcd_Rx,Baudios,[Inst,Linea_2,"TEMP = ",DEC2 (Temp/2),".",DEC(Temp.BIT0*5)]
'El estado del pulsador se muestra en pantalla junto con la temperatura
LOOP
'===================================================================================
'SUBRUTINAS
'Rutina que permite inicializar el DS1620 como termmetro
Init_Temp:
HIGH SS2 'Habilitar al DS1620
SHIFTOUT MOSI,SCK,LSBFIRST,[EscrRegCon,ConfiTerm] 'Enviar el Byte de config.
GOSUB Rset 'Reset luego del 9no Bit
SHIFTOUT MOSI,SCK,LSBFIRST,[ConfiTAlta,TempA\9] 'Enviar alarma por alta temp.
GOSUB Rset 'al registro TH
SHIFTOUT MOSI,SCK,LSBFIRST,[ConfiTbaja,TempB\9] 'Enviar alarma por baja temp.
GOSUB Rset 'al registro TL
SHIFTOUT MOSI,SCK,LSBFIRST,[InicioConv] 'Iniciar la medicin
LOW SS2 'Finalizar la comunicacin
RETURN
'Rutina para colocar en estado bajo la seal SS2 luego de leer o escribir el 9no bit
Rset:
LOW SS2 : PAUSE 5 : HIGH SS2
RETURN
'Programa P9_1a.bsp
'Este programa se ejecuta cada vez que el terminal P5 (conectado al pulsador PB1)
'coincide con el estado indicado por el parmetro Pin de la instruccin POLLIN.
'Permite controlar el estado del calentador "sin interferir" con el programa
'encargado de medir la temperatura
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
CAL PIN 8 'Terminal conectado al calentador
PB1 PIN 5
Temp VAR Word 'Variable que contiene la temperatura
Modo VAR Nib 'Indica el modo operacin
ConfInicial VAR Bit 'Configuracin inicial cuando se produce un reset del BS2p
'___________________________________________________________________________________
POLLMODE 0 'Desactiva el sistema de E/S por encuesta
SELECT Modo 'Selecciona de acuerdo al modo de operacin activo
CASE 0 'El pulsador fue presionado, CAL est encendido y se
POLLIN PB1,1 'programa al sistema de E/S por encuesta para que se
Modo = 1 'ejecute P9_1a cuando se libere al pulsador PB1
CASE 1 'Cuando este modo est activo, CAL est encendido y PB1 se
POLLIN PB1,0 'ha liberado. Cuando se oprima nuevamente a PB1, CAL
deber
POLLOUT CAL,0 'apagarse.
Modo = 2
CASE 2 'Cuando este modo est activo, CAL est apagado y PB1
acaba
POLLIN PB1,1 'de ser presionado. Cuando se libere a PB1 se ejecutar el
Modo = 3 'programa P9_1a.
CASE 3 'El modo 3 configura al sistema de E/S por encuesta para
POLLIN PB1,0 'responder como al principio, esperando que PB1 sea
POLLOUT CAL,1 'presionado para encender al calentador
Modo = 0
ENDSELECT
POLLRUN 1 'Activar la accin a ejecutarse
PAUSE 10 'Pausa para evadir posibles rebotes
En la primera lnea de la pantalla LCD debe mostrarse el texto CAL = , seguido del estado binario (1 0)
del calentador conectado en P8. En la lnea inferior del LCD, debe observarse el valor de la temperatura.
Presione el pulsador PB1 para que encienda el calentador del sistema y observe como aumenta la
temperatura. Al alcanzar los 40C, los diodos LED L0 y L1 se encendern indicando que la temperatura
medida ha alcanzado el valor almacenado en el registro TH. Cuando esto ocurra, presione nuevamente a
PB1 para apagar al calentador.
En este programa se observa la simplicidad de la medicin de temperatura con el DS1620, en los ejercicios
posteriores se utilizarn algunas de las caractersticas adicionales de este verstil componente.
El microcontrolador BASIC Stamp no soporta ningn tipo de interrupciones; sin embargo, los comandos de
entrada/salida por encuesta (poll) ofrecen un mecanismo de E/S mucho ms rpido que el tradicional lazo
iterativo preguntando por el estado de los pines. En este ejercicio, se ha logrado controlar el estado de una
salida sin tener que aadir una sola lnea de cdigo al programa principal que se est ejecutando.
Objetivo: Construir un sistema de medicin de temperatura avanzado utilizando al microcontrolador BS2p y al termmetro digital
DS1620.
'Programa 9_2.bsp
'En este programa se implementa un termmetro digital avanzado con el DS1620
'El programa 9_2.bsp se encarga de medir la temperatura, ajustar los registros TH y
'TL del DS1620 con los mximos valores deseados en la escala del termmetro y de
'ajustar la temperatura de alarma
'===================================================================================
'{$STAMP BS2p,P9_2a.bsp,P9_2b.bsp}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
Leer_Temp CON $AA 'Comando para leer Temperatura
InicioC CON $EE 'Comando para iniciar las conversiones
Config CON $0A 'Configurar como termmetro
Config_Alta CON $01 'Comando para configurar Temperatura Alta
Config_Baja CON $02 'Comando para configurar Temperatura Baja
EscrRegCon CON $0C 'Escribir en el registro de configuracin del DS1620
ConfiTerm CON $0A 'Configurar al DS1620 como termmetro
BorrarLCD CON 1 'Limpiar pantalla
Linea_1 CON 128 'Posiciona al cursor de la LCD al inicio de la lnea 1
Linea_2 CON 192 'Posiciona al cursor de la LCD al inicio de la lnea 2
Baudios CON 240 'Velocidad de la transmisin de SEROUT = 9600 bsp, no inv.
Inst CON 254 'Indica al SLCD-IC que se le enviar una instruccin
CGRAM_0 CON 64 'Posicin del primer carcter de la CGRAM
CGRAM_1 CON 72 'Posicin del segundo carcter de la CGRAM
CGRAM_2 CON 80 'Posicin del tercer carcter de la CGRAM
Temp_Medicion CON 0 'Banco que contiene al programa 9_2.bsp
Animacion CON 1 'Banco que contiene al programa P9_2a.bsp
Cal_Control CON 2 'Banco que contiene al programa P9_2b.bsp
CurProg CON 0 'Localidad de la SCRAM que guarda programa en ejecucin al
'momento de activarse la accin de POLLRUN
'===================================================================================
'SUBRUTINAS
'Rutina para configurar temperatura alta, baja y alarma
Configurar:
SEROUT Slcd_Rx,Baudios,[INST,BorrarLCD] 'Borra el contenido de la LCD
GOSUB Cargar_Flecha 'Carga de caracteres propios
SEROUT Slcd_Rx,Baudios,[INST,Linea_1,"Temp Alta ",DEC3 (TempA/2),$DF,"C"]
SEROUT Slcd_Rx,Baudios,[INST,Linea_2,"PB1",0,$20,"PB2",1,$20,"PB3",2]
'Muestra temp alta y el men de opciones
Aux = TempA : Limit_Sup = 250 : Limit_Inf = TempB+1 'Define las cotas para TH
GOSUB Ajustar 'Rutina para ajustar el valor de TH
TempA = Aux 'Guarda el nuevo valor de TH
SEROUT Slcd_Rx,Baudios,[INST,Linea_1+5,"Baja ",DEC3 (TempB/2),$DF,"C"]
'Muestra la Temp Baja y el men de opciones
Aux = TempB : Limit_Sup = TempA : Limit_Inf = 0 'Define las cotas para TL
GOSUB Ajustar 'Rutina para ajustar el valor de TL
TempB=Aux 'Guarda el nuevo valor de TL
GOSUB Ajustar_DS1620 'Enva los nuevos valores al DS1620
SEROUT Slcd_Rx,Baudios,[INST,Linea_1," Alarma ",DEC3 (TAlarma/2),$DF,"C"]
SEROUT Slcd_Rx,Baudios,[INST,Linea_2+13," Ex"]
'Menu de configuracin de alarma sonora
Limit_Sup = TempA : Limit_Inf = TempB + ((TempA-TempB) */ $C0)
Aux = TAlarma MIN Limit_Inf MAX Limit_Sup
'Ajusta un mx. igual a TH y un mn. igual al 75% del SPAN entre Talta y Tbaja
GOSUB Ajustar '
TAlarma = Aux 'Ajustar Alarma
SEROUT Slcd_Rx,Baudios,[INST,BorrarLCD]
RETURN
'Programa P9_2a.bsp
'Este programa se encarga de presentar un termmetro animado en la pantalla LCD.
'De acuerdo a la temperatura, se ir rellenando el interior del termmetro
'==================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'__________________________________________________________________________________
'Pantalla #0
DATA $03,$02,$02,$02,$02,$02,$02,$02 : DATA $18,$08,$08,$08,$08,$08,$08,$08
DATA $02,$02,$04,$08,$08,$08,$04,$03 : DATA $08,$08,$04,$02,$02,$02,$04,$18
'Pantalla #1
DATA $03,$02,$02,$02,$02,$02,$02,$02 : DATA $18,$08,$08,$08,$08,$08,$08,$08
DATA $02,$02,$04,$08,$08,$08,$07,$03 : DATA $08,$08,$04,$02,$02,$02,$1C,$18
'Pantalla #2
DATA $03,$02,$02,$02,$02,$02,$02,$02 : DATA $18,$08,$08,$08,$08,$08,$08,$08
DATA $02,$02,$04,$08,$08,$0F,$07,$03 : DATA $08,$08,$04,$02,$02,$1E,$1C,$18
'Pantalla #3
DATA $03,$02,$02,$02,$02,$02,$02,$02 : DATA $18,$08,$08,$08,$08,$08,$08,$08
DATA $02,$02,$04,$08,$0F,$0F,$07,$03 : DATA $08,$08,$04,$02,$1E,$1E,$1C,$18
'Pantalla #4
DATA $03,$02,$02,$02,$02,$02,$02,$02 : DATA $18,$08,$08,$08,$08,$08,$08,$08
DATA $02,$02,$04,$0F,$0F,$0F,$07,$03 : DATA $08,$08,$04,$1E,$1E,$1E,$1C,$18
'Pantalla #5
DATA $03,$02,$02,$02,$02,$02,$02,$02 : DATA $18,$08,$08,$08,$08,$08,$08,$08
DATA $02,$02,$07,$0F,$0F,$0F,$07,$03 : DATA $08,$08,$1C,$1E,$1E,$1E,$1C,$18
'Pantalla #6
DATA $03,$02,$02,$02,$02,$02,$02,$02 : DATA $18,$08,$08,$08,$08,$08,$08,$08
DATA $02,$03,$07,$0F,$0F,$0F,$07,$03 : DATA $08,$18,$1C,$1E,$1E,$1E,$1C,$18
'Pantalla #7
DATA $03,$02,$02,$02,$02,$02,$02,$02 : DATA $18,$08,$08,$08,$08,$08,$08,$08
DATA $03,$03,$07,$0F,$0F,$0F,$07,$03 : DATA $18,$18,$1C,$1E,$1E,$1E,$1C,$18
'Pantalla #8
DATA $03,$02,$02,$02,$02,$02,$02,$03 : DATA $18,$08,$08,$08,$08,$08,$08,$18
DATA $03,$03,$07,$0F,$0F,$0F,$07,$03 : DATA $18,$18,$1C,$1E,$1E,$1E,$1C,$18
'Pantalla #9
DATA $03,$02,$02,$02,$02,$02,$03,$03 : DATA $18,$08,$08,$08,$08,$08,$18,$18
DATA $03,$03,$07,$0F,$0F,$0F,$07,$03 : DATA $18,$18,$1C,$1E,$1E,$1E,$1C,$18
'Pantalla #10
DATA $03,$02,$02,$02,$02,$03,$03,$03 : DATA $18,$08,$08,$08,$08,$18,$18,$18
DATA $03,$03,$07,$0F,$0F,$0F,$07,$03 : DATA $18,$18,$1C,$1E,$1E,$1E,$1C,$18
'Pantalla #11
DATA $03,$02,$02,$02,$03,$03,$03,$03 : DATA $18,$08,$08,$08,$18,$18,$18,$18
DATA $03,$03,$07,$0F,$0F,$0F,$07,$03 : DATA $18,$18,$1C,$1E,$1E,$1E,$1C,$18
'Pantalla #12
DATA $03,$02,$02,$03,$03,$03,$03,$03 : DATA $18,$08,$08,$18,$18,$18,$18,$18
DATA $03,$03,$07,$0F,$0F,$0F,$07,$03 : DATA $18,$18,$1C,$1E,$1E,$1E,$1C,$18
'Pantalla #13
DATA $03,$02,$03,$03,$03,$03,$03,$03 : DATA $18,$08,$18,$18,$18,$18,$18,$18
DATA $03,$03,$07,$0F,$0F,$0F,$07,$03 : DATA $18,$18,$1C,$1E,$1E,$1E,$1C,$18
'Pantalla #14
DATA $03,$03,$03,$03,$03,$03,$03,$03 : DATA $18,$18,$18,$18,$18,$18,$18,$18
DATA $03,$03,$07,$0F,$0F,$0F,$07,$03 : DATA $18,$18,$1C,$1E,$1E,$1E,$1C,$18
'Pantalla de Alarma
UltimaP DATA $1C,$1D,$1D,$1D,$1D,$1D,$1D,$1D
DATA $07,$17,$17,$17,$17,$17,$17,$17
DATA $1D,$1D,$1B,$17,$17,$17,$1B,$1C
UltimoC DATA $17,$17,$1B,$1D,$1D,$1D,$1B,$07
'__________________________________________________________________________________
'Declaracin de Variables y Constantes
BorrarLCD CON 1 'Limpiar pantalla
Linea_1 CON 128 'Posiciona al cursor de la LCD al inicio de la lnea 1
Linea_2 CON 192 'Posiciona al cursor de la LCD al inicio de la lnea 2
Baudios CON 240 'Velocidad de la transmisin de SEROUT = 9600bsp, no inv.
Inst CON 254 'Indica al SLCD-IC que se le enviar una instruccin
CGRAM_0 CON 64 'Posicin del primer carcter de la CGRAM
CGRAM_1 CON 72 'Posicin del segundo carcter de la CGRAM
CGRAM_2 CON 80 'Posicin del tercer carcter de la CGRAM
CGRAM_4 CON 96
Temp_Medicion CON 0 'Banco que contiene al programa 9_2.bsp
Animacion CON 1 'Banco que contiene al programa P9_2a.bsp
CurProg CON 0 'Localidad de la SCRAM que guarda programa en ejecucin al
'momento de activarse la accin de POLLRUN
'___________________________________________________________________________________
'Programa Principal:
Inicio:
PUT CurProg,Animacion 'Indica que se esta ejecutando el programa P9_2a.bsp
Pantalla = 0 'Valor por defecto
IF Temp > TempB THEN Pantalla = 14 * (Temp-TempB) / (TempA-TempB)
'Escala la variable pantalla de 0 a 14 de acuerdo a la temperatura
GOSUB Cargar_Pantalla 'Carga de la pantalla correspondiente segn temperatura
GOSUB Actualizar_Pantalla 'Muestra la pantalla adecuada
GOSUB Actualizar_Texto 'Actualizacin de mensajes
RUN Temp_Medicion 'Ejecuta el programa 9_2b.bsp
'===================================================================================
'SUBRUTINAS
'Rutina para guardar en la CGRAM la pantalla a mostrar
Cargar_Pantalla:
SEROUT Slcd_Rx,Baudios,[INST,CGRAM_0]'Iniciar en carcter 0 de CGRAM
FOR Dir = 32*Pantalla TO (32*(Pantalla+1)-1)
READ Dir,Caracter : SEROUT Slcd_Rx,Baudios,[Caracter]
'Buscar en la EEPROM los bytes que componen los 4 caracteres que forman al
'termmetro animado
NEXT
RETURN
'Programa P9_2b.bsp
'Este programa se ejecuta cada vez que el terminal P7 (conectado al pulsador PB4)
'coincide con el estado indicado por el parmetro Pin de la instruccin POLLIN
'Permite controlar el estado del calentador "sin interferir" con los dems programas
'en ejecucin
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
BorrarLCD CON 1 'Limpiar pantalla
Baudios CON 240 'Velocidad de la transmisin de SEROUT = 9600 bsp, no inv.
Inst CON 254 'Indica al SLCD-IC que se le enviar una instruccin
Cal_Control CON 2 'Banco que contiene al programa P9_2b.bsp
CurProg CON 0 'Localidad de la SCRAM que guarda programa en ejecucin al
'momento de activarse la accin de POLLRUN
La lgica de funcionamiento de estos programas se describe a travs de los diagramas de flujo de las figuras
No. 9.19. y No. 9.20.
INICIO (0)
No Si INICIO (1)
Cargar configuracin
No Si
por defecto? Temp > Tmin
Configurar Encuesta
en Modo 0 Apuntar a Determinar pantalla
pantalla inicial a mostrar
InitTemp
Cargar_Pantalla
Leer_Temperatura
Actualizar_Pantalla
No Si
PB3=1
Actualizar_Texto
Configurar
RUN 0
RUN 1
InitTemp Configurar
Leer_Temperatura
Ajustar los valores de
Configurar el DS1620 Leer temperatura
Temp. Alta y baja del
como termmetro e del DS1620
DS1620. Ajustar la
inicializar la conversin
alarma
RETURN
RETURN RETURN
Figura No. 9.20: Diagramas de flujo para los programas del ejercicio # 2.
Fuente: Elaboracin Propia.
RETURN
RETURN RETURN
INICIO (2)
Desactivar sistema de
E/S por encuesta
CASE Modo OF
0 3
1 2
POLLIN PB4, 0 POLLIN PB4, 0
POLLIN PB4,1 POLLIN PB4, 1
POLLOUT CAL, 0 POLLOUT CAL, 1
POLLRUN 2 POLLRUN 2
POLLRUN 2 POLLRUN
Ejecutar programa Ejecuta Cal_Control
Ejecuta Cal_Control Ejecuta Cal_Control
Cal_Control (2) si (2) si PB4 = 1
(2) y apaga calentador (2) y enceder
PB4 = 1 Modo = 3
Modo = 1 si PB4 = 0 calentador si PB4 = 0
Modo = 2 Modo = 0
Activar sistema de
E/S por encuesta
Figura No. 9.20: Diagramas de flujo para los programas del ejercicio # 2.
Fuente: Elaboracin Propia.
Aplique una seal de reset al BASIC Stamp, como resultado, en la LCD se mostrar una pantalla similar a la
de la figura No. 9.21.
Para lograr el funcionamiento segn el enunciado planteado, se dividi este problema en tres partes:
Por lo tanto, en lugar de resolver un problema relativamente complejo, se debern simplemente solventar
tres problemas independientes de un menor grado de dificultad. De esta manera logramos facilitar el trabajo
de programacin, concentrndonos en desarrollar un algoritmo para dar solucin a un problema ms simple.
Estos programas no deben resultar confusos, ya que, los programas 9_2.bsp y P9_2b.bsp, son similares a
los del ejercicio anterior y el programa P9_2a.bsp, es parecido a la animacin del captulo No. 7.
Ya conocida la funcionalidad de cada uno de los programas, presione el pulsador PB3 para entrar al men de
configuracin y as ajustar la temperatura alta. Este ajuste se realizar a travs de los pulsadores PB1 y PB2,
que permiten disminuir o aumentar la variable a configurar. La temperatura alta (contenido del registro TH
del DS1620) est limitada entre TL y 125 C. Luego de ajustar la temperatura alta, presione PB3 para
configurar la temperatura baja (TL). El valor de TL se encuentra acotado entre 0C y la temperatura alta,
para evitar que el usuario pueda definir una temperatura baja superior a la temperatura alta. Finalmente,
configure la alarma presionando PB3, el mnimo valor de temperatura que puede ajustarse corresponde al
75% de la escala del termmetro.
La memoria RAM Scratchpad, representa una va muy til para el intercambio de informacin entre bloques
de programacin distintos. Otra forma de compartir valores es manteniendo la misma definicin de variables
en todos los bloques de programacin, como se evidencia en los programas utilizados en este ejercicio. Sin
embargo, si bien esto representa una solucin muy simple se est desaprovechando la memoria del BASIC
Stamp.
Objetivos: Utilizar el microcontrolador BASIC Stamp 2p y el circuito integrado DS1620 para desarrollar un termmetro digital.
Implementar por medio del StampPlot Pro una interfaz grfica con el usuario.
Elementos a Utilizar
Arme el circuito que se observa en la figura No. 9.22.
(1) BASIC Stamp 2p. Para este ejercicio se dispone del programa 9_3.bsp.
(1) Cable serial DB9. Antes de transcribirlo en el editor del BASIC Stamp,
(1) DS1620. observe cual es su lgica de funcionamiento. Como
(1) LED Bicolor.
(1) StampW (v2.0 beta 2.1 o superior). referencia puede utilizar los diagramas de flujo que se
(1) Programa StampPlot Pro. muestran en la figura No. 9.23 de la pgina siguiente.
INICIO
InitTemp
Inicializar variables
Configura el DS1620 e
inicializar la conversin
InitTemp
No Si
RETURN
Pulsador=1
Apagar Encender
Calentador Calentador
Ajustar
Leer_Temperatura
RETURN
Actualizar
Leer_Temperatura
Actualizar
RETURN RETURN
Transcriba el siguiente macro y gurdelo con el nombre Macro_9_3.spm, en la carpeta Macro del StampPlot.
'Programa 9_3.bsp
'El objetivo de este programa es mostrar la implementacin del DS1620 como
'termmetro digital con un rango de -55C a 125C y desarrollar una interfaz grfica
'a travs del programa StampPlot Pro que sirva para visualizar la temperatura.
'Este programa trabaja conjuntamente con el macro Macro_9_3.spm
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
Leer_Temp CON $AA 'Comando para leer Temperatura
InicioC CON $EE 'Comando para iniciar las conversiones
Config_Alta CON $01 'Comando para configurar Temperatura Alta
Config_Baja CON $02 'Comando para configurar Temperatura Baja
EscrRegCon CON $0C 'Escribir en el registro de configuracin del DS1620
ConfiTerm CON $0A 'Configurar como termmetro
SinPin CON 16 'Terminal SIN (2) del BASIC Stamp
Baudios CON 240 'No-Invertido, 9600 bsp, sin paridad
Tiempo_Espera CON 1250 'Tiempo de espera cuando se piden datos al StampPlot
MOSI PIN 0 'Seal para la transferencia de datos
SCK PIN 1 'Seal de reloj
SS2 PIN 2 'Seal de habilitacin
CAL PIN 8 'Terminal conectado al calentador
DO
DEBUG "!READ %m14",CR 'Lee del StampPlot edo del pulsador
SERIN SinPin, Baudios, Tiempo_Espera , No_Datos, [DEC Pulsador] : PAUSE 250
IF Pulsador=1 THEN HIGH CAL ELSE LOW CAL 'Encender/Apagar calentador
GOSUB Ajustar 'Configurar parmetros del termmetro
GOSUB Leer_Temperatura 'Leer temperatura del DS1620
GOSUB Actualizar 'Actualizar objetos y grafica del PC
No_Datos:
LOOP
'===================================================================================
'SUBRUTINAS
'Rutina para colocar en estado bajo la seal SS2 luego de leer o escribir el 9no bit
Rset:
LOW SS2 : PAUSE 10: HIGH SS2
RETURN
Actualizar:
DEBUG "!POBJ Medidor=",SDEC Temp,",",SDEC TempB,",",SDEC TempA,",",",",CR
DEBUG "!POBJ Medidor=",",",",",",",SDEC Alarma_Baja,",",SDEC Alarma_Alta,CR
'Actualizar los parmetros del medidor
DEBUG "!POBJ Etiqueta6=",SDEC TempA,CR 'Actualiza las etiquetas de
DEBUG "!POBJ Etiqueta7=",SDEC TempB,CR 'Temperatura alta, baja,
DEBUG "!POBJ Etiqueta8=",SDEC Alarma_Alta,CR 'Alarma alta y baja
DEBUG "!POBJ Etiqueta9=",SDEC Alarma_Baja,CR
DEBUG "!POBJ Etiqueta11=",SDEC Temp,CR 'Mostrar la temperatura actual
PAUSE 250
DEBUG SDEC Temp,CR 'Grfica analgica
PAUSE 100
RETURN
Para ejecutar el macro, seleccione la opcin Run Macro del men Macros de la barra de herramientas del
StampPlot. Como resultado, se obtendr una interfaz similar a la de la figura No. 9.24.
Figura No. 9.24: Interfaz grfica elaborada con StampPlot Pro para el ejercicio # 3.
Fuente: Elaboracin Propia.
Para conectar el BASIC Stamp con el StampPlot Pro, presione el botn izquierdo del ratn y seleccione
Connect del men contextual. Como se muestra en la figura No. 9.25. Posteriormente, aplique un reset al
microcontrolador.
Figura No .9.26:
Configuracin de la escala de
medicin del termmetro.
Fuente: Elaboracin Propia.
El BASIC Stamp estar constantemente comunicndose con StampPlot Pro pidiendo los valores de
temperatura alta, temperatura baja, alarma por alta, alarma por baja y el estado del pulsador, contenidos en
las variables %m10, %m11, %m12, %m13 y %m14, respectivamente. Con los valores de temperatura alta
y baja, se ajustarn los registros TH y TL del DS1620, mientras que con los valores de alarmas se ajustan
las alarmas propias del medidor.
Para ajustar cada uno de los parmetros del termmetro, basta con hacer clic sobre el botn
correspondiente. Como resultado se mostrar un cuadro de dialogo, donde se le solicita al usuario el valor
correspondiente, ver figura No. 9.26.
Si se est recibiendo informacin del StampPlot de manera serial por el puerto de programacin, es
necesario colocar una pausa de 100 milisegundos (como mnimo) para permite limpiar el echo del dato
recibido, evitando errores en la comunicacin. Esto se aprecia en las siguientes lneas de cdigo:
El medidor permite activar alarmas por medio de eventos. Las acciones a ejecutar como respuesta a estos,
se realizarn cuando el valor mostrado en el medidor supere los lmites establecidos como mnimo y
mximo. En el Macro_9_3.spm, se ha dispuesto de un objeto tipo image object que simula un interruptor y
permite habilitar o deshabilitar la alarma. Si el interruptor se encuentra en la posicin ON y la temperatura
supera alguna de las alarmas del medidor, se reproduce el archivo de sonido gbell.wav.
El calentador ser encendido o apagado, segn sea el caso, al hacer clic sobre un objeto tipo image
object, que representa un LED. Si el LED se encuentra encendido el calentador estar activado.
Conocido cada uno de elementos que integran la interfaz, ajuste los parmetros del termmetro. Por
ejemplo, coloque una temperatura baja inferior a la temperatura mostrada en el medidor y observe el
estado del LED bicolor del sistema MDK-B28. Ahora, coloque una temperatura alta mayor a la indicada por el
medidor y observe el estado de los LEDs conectados a las seales THIGH, TLOW y TCOM del DS1620. Ajuste
un valor de alarma por alta temperatura cercano al valor de la temperatura actual, active la accin de la
alarma y el calentador. Preste atencin al sonido que se genera cuando la temperatura excede el lmite
superior.
Si se introduce un valor de temperatura que supere los valores limites del DS1620 (-55 C a 125 C), se
mostrar un mensaje como el de la figura No. 9.27 y se mantendr la configuracin anterior.
Figura No .9.27: Respuesta del programa 9_3.bsp ante un valor de configuracin fuera de rango.
Fuente: Elaboracin Propia.
Elementos a Utilizar
El DS1620, puede operar en forma autnoma como
termostato. Esto quiere decir, que despus de ser
(1) BASIC Stamp 2p.
(1) Cable serial DB9. programado adecuadamente por el BASIC Stamp,
(1) DS1620, Termmetro/Termostato digital. puede medir y controlar la temperatura sin necesidad
(1) StampW (v2.0 beta 2.1 o superior). de utilizar el microcontrolador (modo stand alone).
Arme el circuito de la figura No .9.28. Para esta actividad dispondremos del programa 9_4.bsp que permite
ajustar los parmetros de configuracin del DS1620 como termostato. Antes de transcribirlo, observe los
diagramas de flujos que se muestran en la figura No. 9.29.
Figura No. 9.28: Montaje electrnico requerido para programar al DS1620 como termostato.
Fuente: Elaboracin Propia.
INICIO
Solicitar al usuario la
configuracin
Error en la InitTemp
configuracin
No Configurar el DS1620
Valores
como termostato
permitidos?
Si
RETURN
InitTemp
Si
Desea cambiar la
configuracin?
Figura No. 9.29: Diagrama del flujo del programa 9_4.bsp.
No Fuente: Elaboracin Propia.
END
Transcriba y descargue el programa 9_4.bsp en el BASIC Stamp 2p. Como resultado en el debug terminal se
mostrar una pantalla similar a la de la figura No. 9.30.
La configuracin del DS1620 como termostato se realiza por medio de la lnea de cdigo:
SHIFTOUT MOSI,SCK,LSBFIRST,[EscrRegCon,ConfiTerm]
Como se puede observar al enviar la constante ConfiTerm, que es igual a %00001000 en binario, es escrita
en el registro de control del DS1620. El segundo bit de este registro (CPU), define con su estado lgico el
modo de operacin del integrado. Si CPU = 1 el DS1620 ser un termmetro, con CPU = 0 el DS1620 ser
un termostato.
Luego de configurar el DS1620 el BASIC Stamp 2p quedar en estado inactivo por un perodo de tiempo
indefinido, debido al comando END.
Despus de programado, desconecte el BASIC Stamp del DS1620 y realice las siguientes operaciones:
Coloque el terminal CLK/CONV (SCK) en estado alto y el terminal RST (SS2) en estado bajo.
Coloque el terminal CLK/CONV en estado bajo a fin de iniciar las conversiones de la temperatura. El
DS1620 estar continuamente leyendo la temperatura hasta que el terminal CLK/CONV se llevado a
un estado alto de nuevo.
Despus de realizar las operaciones anteriores deber colocar los pines (DQ), (CLK) y (\RST) del DS1620 a
tierra o GND, como es mostrado en la figura No. 9.31.
Programacin
1. Cree una interfaz en el StampPlot Pro que contenga un objeto tipo OsText, en el cual deber
mostrarse texto El valor de x es = , seguido del valor analgico que se est graficando. Ayuda: Si
al nombre de un objeto se le antepone el prefijo DA_, se define que el evento asociado al mismo
es el arribo de datos analgicos.
Captulo No. 10
Control de Procesos
Introduccin. En todos los procesos industriales es absolutamente necesario controlar y mantener estables algunas magnitudes, tales
como la presin, el caudal, el nivel, la temperatura, el PH, la conductividad, la velocidad, la humedad, el punto de roco, entre otras. Los
instrumentos de control y medicin permiten mantener estas variables en condiciones ms idneas de las que cualquier operador podra
lograr en forma manual. Uno de los campos de aplicacin donde los microcontroladores han ganado mayor aceptacin, es precisamente
en la automatizacin y control de procesos industriales. Por ello, en este captulo se introducen y explican los conceptos relacionados
con el control de procesos y se utilizar al BASIC Stamp para implementar tres estrategias de control de uso muy frecuente.
En los inicios de la era industrial, un operario efectuaba de manera manual el control de las variables del
proceso, utilizando para ello instrumentos simples de medicin y control tales como termmetros,
manmetros y vlvulas. Sin embargo, el gradual aumento en la complejidad de los procesos industriales y la
demanda de productos estandarizados a un nivel mayor de calidad, ha exigido de su automatizacin por
medio de instrumentos de medicin y control cada vez mejores y ms sofisticados. El empleo de estos
instrumentos ha liberado al operador de su funcin de actuacin fsica directa sobre el proceso y al mismo
tiempo, le ha permitido realizar labores de supervisin y vigilancia desde centros de control situados en el
propio proceso o en lugares muy distantes con mayor seguridad. Gracias a la existencia de instrumentos
modernos, de alta precisin y gran exactitud, ha sido posible fabricar productos complejos en condiciones
estables de calidad, condiciones que al operario le seran imposibles o muy difciles de conseguir, realizando
exclusivamente un control manual.
Un lazo o bucle de control, es un conjunto de elementos que permiten llevar y mantener una variable en un
valor deseado. En general, existen dos formas de efectuar el control de un proceso: a lazo abierto o a lazo
cerrado. La forma ms simple de controlar un proceso es a lazo abierto. En el sistema de control a lazo
abierto, no se realizan acciones de control de manera automtica. La salida del elemento final de control es
manipulada por el operador para aplicar al proceso la cantidad de energa requerida para lograr una
determinada salida bajo unas ciertas condiciones, ver figura No. 10.1. Si todas las variables que pudieran
perturbar al proceso se mantienen estables, la salida del proceso se debera mantenerse estable en el
valor deseado.
Elemento Final
Punto de Ajuste
de Control
C o m pa rad o r
P u n to d e A jus te
E rro r
C o n trolad o r
E le m en to Fin al M e d ici n y
de C o n trol tran s m isin
En contraste con el ejemplo anterior, para controlar la temperatura del mismo tanque puede usarse un
termostato. Este elemento compara continuamente la temperatura del lquido dentro del recipiente con la
temperatura deseada y en funcin de esta comparacin, encender o no la resistencia de calefaccin.
CONTROL ON/OFF:
Es un esquema de control muy utilizado por su simplicidad y bajo costo de implementacin. En un control
ON/OFF o Todo/Nada la salida del controlador toma slo dos posibles valores, lo que se traduce en el
elemento final de control, como un estado abierto o cerrado No. 10.3. Opera satisfactoriamente en procesos
con una velocidad de reaccin lenta y con tiempo de retardo mnimo. Su principal problema es que la salida
oscila repetidas veces cuando la variable controlada se encuentra cerca del punto de ajuste. La causa
primordial de estas oscilaciones es el ruido que pueda afectar al sensor de medicin, que es interpretado
como una fluctuacin rpida por encima y por debajo del punto de ajuste. Si el elemento final de control no
es un dispositivo de estado slido, sino un relay o una vlvula, la rpida conmutacin que ocurre pudiera
deteriorarlo en poco tiempo.
100%
Salida del
Controlador
0%
Punto de
Ajuste
Variable
Controlada
Tiempo
Figura No. 10.3: Salida del controlador bajo un esquema de control ON/OFF.
Fuente: Elaboracin Propia.
Por el problema mencionado anteriormente, el control ON/OFF suele implementarse con una banda
diferencial o zona muerta. La salida del controlador no cambia de estado mientras la variable de proceso se
encuentre dentro de esta zona, ver figura No. 10.4. Con la presencia de la banda diferencial, se logra un
tiempo de ciclo ON/OFF ms lento y con ello la eliminacin de los efectos generados por el ruido en la
medicin. Debido a que la banda diferencial es ms ancha que el efecto del ruido, la oscilacin de alta
frecuencia en la salida se logra disminuir; sin embargo, con esto se le permite a la variable del proceso
alejarse del punto de ajuste. Cuando el proceso permite esta variacin, el control de banda diferencial
normalmente representa una mejor solucin que el control ON/OFF simple.
100%
Salida del
Controlador
0
Punto de Ajuste
Variable Banda
Controlada Diferencial
Tiempo
Figura No. 10.4: Salida del controlador bajo un esquema de control ON/OFF con banda diferencial.
Fuente: Elaboracin Propia.
CONTROL PROPORCIONAL:
En un esquema de control proporcional, existe una relacin lineal continua entre la salida del controlador y
la variable controlada. Bsicamente, si la diferencia que existe entre la variable del proceso y el punto de
ajuste es muy grande, se debe generar una accin de control mayor; y si es pequea, slo se deber
corregir muy poco, por lo que la salida del controlador es proporcional a la magnitud del error:
La figura No. 10.5, muestra la reaccin del controlador ante un cambio en la variable de proceso. La salida
del controlador aumentar en Kc veces la magnitud del error.
Punto de
Ajuste
Variable error
Controlada
Kc x error
Salida del
controlador
Tiempo
Figura No. 10.5: Salida de un controlador proporcional ante una variacin de la variable de entrada.
Fuente: Elaboracin Propia.
La ganancia del controlador, es la relacin entre un cambio de la variable de salida y el error que lo produce.
Por lo general, se habla de la banda proporcional que se define como la inversa de la ganancia del
controlador:
100%
BP =
KC
La banda proporcional (Bp), es el porcentaje de variacin de la variable controlada que ocasiona una carrera
completa del elemento final de control. En la figura No. 10.6 puede observarse el efecto de aumentar o
disminuir la banda proporcional. Ntese como para una Bp del 500%, al ir la variable controlada de 0% a
100%, el recorrido del EFC es de apenas un 20%; mientras que, para una BP del 20% basta con un cambio
de 20% en la Vp para llevar al EFC desde la mxima apertura hasta estar cerrado completamente.
80 % Bp= 50%
60 % Bp= 20 %
0%
40
20 %
Una ventaja de esta estrategia de control, es que slo requiere del clculo de un parmetro, la ganancia
(KC). Sin embargo, el controlador proporcional posee una caracterstica indeseable que se conoce como error
en estado estacionario u offset. Como se observa en la figura No. 10.6, si una perturbacin es introducida al
sistema, el controlador proporcional no es capaz de colocar la variable controlada en el punto de ajuste
mientras se mantenga dicha perturbacin. Este error se puede eliminar cambiando el punto de ajuste.
Variable
Controlada
Control
Proporcional offset
Carga
Tiempo
Una de las mltiples caractersticas poderosas que presenta el StampPlot Pro es la existencia de macros o
segmentos de cdigo que pueden ser ejecutados en cualquier momento. Un macro puede contener
subrutinas que pueden ser llamadas de forma independiente, su estructura bsica es:
Nombre de la rutina:
Instruccin
Instruccin
Endmac
Si no se especifica el directorio (path) de ubicacin del archivo .spm que contiene al macro, StampPlot Pro
asume que ste se encuentra en la carpeta Macro del StampPlot V3. Para especificar otra direccin se
indica por medio de: !MACR Letra de la Unidad :\ directorio \nombre del macro.
Objetivo: Utilizar al BASIC Stamp para implementar un algoritmo de control ON/OFF de temperatura.
Elementos a Utilizar
Arme el circuito de la figura No. 10.8. Para implementar
el controlador ON/OFF se utilizar el programa
(1) BASIC Stamp 2p. 10_1.bsp, su lgica de funcionamiento se muestra en
(1) Resistencia de 220 Ohms. los diagramas de flujo de las figuras No. 10.9. y No.
(1) DS1620, Termmetro/termostato digital. 10.10.
(1) Driver de Potencia.
(1) Mdulo SLCD-BD.
(1) Un cable serial DB9. Verifique que la resistencia del calentador del MDK-B28
(1) StampW (v2.0 beta 2.1 o superior). se encuentre en contacto con la superficie del DS1620.
Figura No. 10.8: Diagrama electrnico para conectar al termmetro DS1620 con el BASIC Stamp.
Fuente: Elaboracin Propia.
Init_Temp
INICIO
Inicializar el DS1620
Init_Temp Leer_Temperatura
(Inicializar al DS1620)
No Si
Cargar_ Flechas Sp > Temp
Sp < Temp
Borrar contenido de la LCD No Encender el Calentador
Si
Apagar el Calentador
Control
Ajustar temperatura
al formato XXX.X C
Figura No. 10.9: Diagramas de flujo del programa 10_1.bsp.
Fuente: Elaboracin Propia.
RETURN
Leer_Pulsador
No Si
SW1
Sp=125 Sp=0 C Presionado?
Si
No
Sp= Sp - 5
Si SW2
Presionado?
Si
Sp=
Sp= 0 No
125C
No Si
Otro
Pulsador? Emitir Bip
Sp=
= Sp+ 5
No
RETURN
RETURN
Figura No. 10.10: Rutina Leer_Pulsador, utilizada para aumentar o disminuir el punto de ajuste del lazo de control.
Fuente: Elaboracin Propia.
Descargue el programa 10_1.bsp en el BASIC Stamp 2p. En la pantalla LCD deber mostrarse la
temperatura ambiente y el punto de ajuste, que por defecto es de 30 C. Aumente el set point 4.5 C por
encima de la temperatura ambiente y observe la respuesta del sistema.
'Programa 10_1.bsp
'Este programa tiene por objetivo implementar un controlador ON/OFF de temperatura,
'utilizando al DS1620 como elemento de medicin y al driver de potencia del sistema
'MDK-B28 como elemento final de control
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
BorrarLCD CON 1 'Limpiar pantalla
Linea_1 CON 128 'Mover cursor a la primera lnea de la pantalla LCD
Linea_2 CON 192 'Mover cursor a la segunda lnea de la pantalla LCD
Baudios CON 240 'Velocidad de la Transmisin/Recepcin con SEROUT/SERIN
Inst CON 254 'Indica al SLCD-IC la presencia de una instruccin
CGRAM_0 CON 64 'Direccin del primer carcter de CGRAM
TempA CON 250 'Temperatura alta = 125 C (Alarmas del DS1620)
TempB CON 0 'Temperatura baja = 0 C
LeerTemp CON $AA 'Comando para leer temperatura
InicioConv CON $EE 'Comando para iniciar conversin
ConfiTerm CON $0A 'Configurar al DS1620 como termmetro
ConfiTalta CON $01 'Comando para configurar temperatura alta
ConfiTbaja CON $02 'Comando para configurar temperatura baja
EscRegCon CON $0C 'Escribir en el registro de configuracin del DS1620
'___________________________________________________________________________________
'Programa Principal
Inicio:
PAUSE 1000 'Inicializacin de la pantalla LCD por parte del SLCD-IC
Sp = 300 'Inicializar al Set Point en 30C
GOSUB Init_Temp 'Inicializa al DS1620 para medir continuamente la temp.
GOSUB Cargar_Flechas 'Carga de caracteres personalizados en la LCD
SEROUT Slcd_Rx,Baudios,[Inst,BorrarLCD] 'Borra el contenido de la pantalla LCD
DO
GOSUB Control 'Genera accin de control
SEROUT Slcd_Rx,Baudios,[Inst,Linea_1,"T =",DEC (Temp/10),
".",DEC1 Temp DIG 0, $DF,"C "]
'Muestra la temperatura leda con resolucin de 0.5 C
SEROUT Slcd_Rx,Baudios,[Inst,Linea_2,"Sp=",DEC (Sp/10),
".",DEC1 Sp DIG 0,$DF,"C "]
'Muestra la el punto de ajuste con resolucin de 0.5 C
GOSUB Leer_Pulsador
LOOP
'===================================================================================
'SUBRUTINAS
'Rutina que permite inicializar el DS1620 como termmetro, configura las alarmas
'en 0C y 125C
Init_Temp:
HIGH SS2 'Habilitar al DS1620 en el bus
SHIFTOUT MOSI,SCK,LSBFIRST,[EscRegCon,ConfiTerm] 'Enviar el Byte de config.
GOSUB Rset
SHIFTOUT MOSI,SCK,LSBFIRST,[ConfiTAlta,TempA\9] 'Enviar alarma por alta temp.
GOSUB Rset 'Reset luego del 9no Bit
SHIFTOUT MOSI,SCK,LSBFIRST,[ConfiTbaja,TempB\9] 'Enviar alarma por baja temp.
GOSUB Rset 'Reset luego del 9no Bit
SHIFTOUT MOSI,SCK,LSBFIRST,[InicioConv] 'Iniciar la conversin
LOW SS2 'Finalizar la comunicacin
RETURN
'Rutina para colocar en estado bajo la seal SS2 luego de leer o escribir el 9no bit
Rset:
LOW SS2 : PAUSE 5 : HIGH SS2 'Produce un reset del DS1620
RETURN
Cuando se enciende al sistema, si la temperatura medida por el DS1620 es inferior al punto de ajuste, el
BASIC Stamp encender el calentador y se incrementar la temperatura. Esta condicin se mantendr hasta
que la temperatura supere el valor del Set Point.
Luego de apagarse el calentador, es posible que la temperatura contine aumentado por efecto de la inercia
trmica del sistema. Transcurrido un tiempo, cesa el aumento de temperatura y el sistema comienza a
perder energa trmica. Cuando se pasa por debajo de la temperatura deseada, el BASIC Stamp encender
el calentador; sin embargo, la temperatura no aumenta inmediatamente sino que sigue disminuyendo por
algunos instantes.
El ciclo de oscilacin por encima y por debajo del punto de ajuste es tpico de un control ON/OFF y depende
exclusivamente de las caractersticas del proceso.
Esta estrategia o modo de control resulta conveniente cuando el proceso tiene gran capacidad (as se
garantiza que los cambios bruscos (de 0% a 100%) en la salida del controlador no se reflejen de manera
violenta o peligrosa sobre la variable controlada), permite una respuesta lenta y presenta perturbaciones
relativamente constantes. La regulacin de la temperatura suele hacerse con controladores ON/OFF
(termostatos).
El DS1620 posee una resolucin de 0,5 C, por lo tanto, la temperatura estar conformada por un valor
entero ms un decimal. Debido a que el BASIC Stamp slo trabaja con nmeros enteros, se ha utilizado un
pequeo ajuste en la variable Temp al hacer: Temp = 5*Temp.
Para convertir la medicin efectuada por el DS1620 a grados centgrados, basta con dividir entre 2. Ahora
bien, si se multiplica por 10 el resultado de la medicin, se elimina la prdida del valor decimal al efectuar la
mencionada divisin. Con esto, la temperatura leda se almacena en una variable de 16 bits, donde el ltimo
dgito representa la parte decimal. Por ejemplo una medicin de 30.5C se guarda en la variable Temp como
305.
Objetivo: Implementar un algoritmo de control ON/OFF con banda diferencial con el microcontrolador BASIC Stamp 2p y el
termmetro DS1620.
Elementos a Utilizar
(1) BASIC Stamp 2p. Proceda a armar el circuito de la figura No. 10.11. Para
(1) Un cable serial DB9. esta actividad se utilizarn el programa 10_2.bsp y el
(1) Resistencia de 220 Ohms. macro 10_2.spm. La lgica de funcionamiento del
(1) DS1620, Termmetro/Termostato digital
(1) Driver de Potencia del MDK-B28.
programa 10_2.bsp, se describe a travs de los
(1) Programa StampPlot V3 (rev 1.6 o superior) diagramas de flujo de la figura No. 10.12.
(1) StampW (v2.0 beta 2.1 o superior).
INICIO Control
Inicializar Variables
No Si
Inicializar Interfaz Temp>=
Bdinf
Configurar al DS1620 como Temp<= No Encender el Calentador
termmetro Bdsup
Si
Leer Punto de Ajuste y Apagar el Calentador
% de la Banda Diferencial
RETURN
Leer_Temperatura
RETURN
Control
Descargue el programa 10_2.bsp en el BASIC Stamp y cierre el debug terminal del BASIC Stamp Editor.
'Programa 10_2.bsp
'Este programa tiene por objetivo implementar un controlador ON/OFF con banda
'diferencial, utilizando una interfaz grfica desarrollada con el StampPlot Pro para
'visualizar la respuesta del sistema
'Requiere del uso del macro Macro_10_2.spm
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
TempA CON 250 'Temperatura alta = 125 C (Alarmas del DS1620)
TempB CON -110 'Temperatura baja = -55 C
LeerTemp CON $AA 'Comando para leer temperatura
InicioConv CON $EE 'Comando para iniciar conversin
ConfiTerm CON $0A 'Configurar al DS1620 como termmetro
ConfiTalta CON $01 'Comando para configurar temperatura alta
ConfiTbaja CON $02 'Comando para configurar temperatura baja
EscRegCon CON $0C 'Escribir en el registro de configuracin del DS1620
SINPin CON 16 'Terminal SIN (2) del BASIC Stamp
Baudios CON 240 'No-Invertido, 9600 bsp, sin paridad
Tiempo_Espera CON 1250 'Tiempo de espera cuando se piden datos al StampPlot
MOSI PIN 0 'Terminal de Datos del bus 3-Wire conectado a P0
SCK PIN 1 'Seal de reloj
SS2 PIN 2 'Seal de habilitacin del DS1620
CAL PIN 8 'Terminal conectado al calentador
Temp VAR Word 'Temperatura del sistema
Sp VAR Word 'Punto de ajuste
Bd VAR Word 'Banda diferencial en %
Bdsup VAR Word 'Banda diferencial superior en C
Bdinf VAR Word 'Banda diferencial inferior en C
Aux VAR Word 'Variables auxiliares
Aux2 VAR Word
Digito VAR Byte 'Decimal del dato
i VAR Nib 'Variable de uso general
Signo VAR Bit 'Variable de uso general
'___________________________________________________________________________________
'Programa Principal
Inicio:
PAUSE 500
DEBUG "!MACR Macro_10_2.Inicio",CR 'Inicializar la interfaz
DEBUG "!MATH %m10=",DEC 295,CR 'Valores predeterminados
DEBUG "!MATH %m11=",DEC 100,CR 'SP = 32 C BD = 10%
GOSUB Init_Temp 'Inicializar al DS1620
DO
Leer_Sp:
DEBUG "!Read %m10",CR : 'Leer el Sp (%m10)
SERIN SINPin, Baudios, Tiempo_Espera , Leer_Sp, [SDEC Sp] : PAUSE 250
Leer_Vp:
DEBUG "!Read %m11",CR 'Leer la Bd (%m11)
SERIN SINPin, Baudios, Tiempo_Espera , Leer_Vp, [DEC Bd] : PAUSE 250
GOSUB Leer_Temperatura 'Leer temperatura
Aux = Temp 'Ajustar la temperatura leda
GOSUB Actualizar 'para mostrarla en la grfica
DEBUG SDEC Aux,CR 'analgica y en el indicador
DEBUG "!POBJ Medidor=",SDEC Aux,".",DEC Digito,CR 'de aguja
DEBUG IBIN IN8,CR 'Grafica estado de calentador
DEBUG "!MACR .Actualiza,",DEC IN8,CR 'Mostrar estado del calentador
GOSUB Banda_Diferencial 'Calcular la banda diferencial
FOR i = 0 TO 3 'Actualizar las etiquetas
LOOKUP i,[Sp,Bd,Bdsup,Bdinf],Aux
GOSUB Actualizar
DEBUG "!POBJ Etiqueta",DEC (2*i+2),"=",SDEC Aux,".",DEC Digito,CR
NEXT
GOSUB Control 'Generar la accin de control
LOOP
'===================================================================================
'SUBRUTINAS
'La rutina Control, efecta el control ON/OFF con banda diferencial en base a la
'temperatura almacenada en la variable Temp y la banda definida por Bdinf y Bdsup
Control:
Aux = Bdinf - Temp
IF Aux.BIT15 = 0 THEN HIGH CAL
Aux = (Temp - Bdsup)
IF Aux.BIT15 = 0 THEN LOW CAL
'Esta rutina permite separar el valor guardado en Aux en su parte entera y decimal
Actualizar:
Signo = Aux.BIT15 'Determina el signo del nmero para poder efectuar la
GOSUB D_Signo 'correcta extraccin del dgito menos significativo
Digito = Aux DIG(0) 'Extrae el LSD de la variable y lo almacena en dgito
Aux = Aux /10 'Elimina la parte decimal
GOSUB D_Signo 'Ajusta el signo
RETURN
'Rutina de uso general que permite dividir Aux /10, considerando el signo y
'redondeando el dgito decimal del resultado
Dividir:
Signo = Aux.BIT15
Aux = ABS Aux
Aux = ((Aux DIG(0)/5)*10) + Aux
Aux = Aux / 10
GOSUB D_Signo
RETURN
'Rutina para producir un reset en el DS1620
Rset:
LOW SS2 : PAUSE 10 :HIGH SS2
RETURN
Transcriba el Macro_10_2.spm y almacnelo en la carpeta Macro del directorio de instalacin del StampPlot.
'ESTE MACRO ES UTILIZADO CON EL PROGRAMA 10_2.bsp. PARA PROPORCIONAR UNA INTERFAZ
'GRAFICA QUE LE PERMITA AL USUARIO AJUSTAR LOS PARAMETROS DEL CONTROLADOR ON/OFF CON
'BANDA DIFERENCIAL Y REPRESENTAR GRAFICAMENTE LA RESPUESTA DEL SISTEMA
Inicio:
!NEWP 'NUEVA GRAFICA
!POBJ clear
'BORRAR OBJETOS
!RSET 'INICIALIZAR GRAFICA
!PPER 70,100 'DIVIDIR AREA DE OBJETOS Y AREA DE GRAFICA
!TITL Control ON/OFF
!TMAX 200 'TIEMPO MAXIMO DE 200 SEGUNDOS
!MAXT
!STAT CONTROL ON/OFF DE BANDA DIFERENCIAL
!YLBL Temperatura
!XLBL Tiempo
!SPAN -55,125 'RANGO DEL EJE Y
!PLOT ON 'GRAFICAR LOS DATOS
!MENU OFF 'DESHABILITAR MENU
!TBAR OFF 'DESHABILITAR LA BARRA DE HERRAMIENTAS
!POBJ oBACK=7 'DEFINIR EL COLOR DEL AREA DE OBJETOS
!ECHO ON
'MEDIDOR ***************************************************************************
'DEFINIR EL MEDIDOR QUE INDICA EL VALOR DE LA TEMPERATURA
!POBJ oMeter.Medidor=72,97,27,27,-55,125,,
'PULSADORES ************************************************************************
'PULSADORES PARA INTRODUCIR LA CONFIGURACION DEL CONTROLADOR ON/OFF CON BANDA
'DIFERENCIAL, AL PRESIONAR EL PULSADOR CORRESPONDIENTE
!POBJ oButton.Boton1=72,66,12,7,Punto de Ajuste,8
!POBJ Boton1.Font=TAHOMA,8,1,0
!POBJ Boton1.tip=Configurar Set Point
!POBJ oButton.Boton2=87,66,12,7,Banda Diferencial,8
!POBJ Boton2.tip=Configurar Banda Diferencial
!POBJ Boton2.Font=TAHOMA,8,1,0
'LED *******************************************************************************
'DEFINIR UN OBJETO QUE PERMITA MOSTRAR UN LED, PARA INDICAR EL ESTADO DEL CALENTADOR
!POBJ oImgBut.Led1=90,20,7,13,comp\Led_wood_0.jpg,1,comp\Led_wood_1.jpg
!POBJ Led1.Tip=Estado del Calentador
'ETIQUETAS *************************************************************************
'ETIQUETAS PARA MOSTRAR LOS VALORES ACTUALES DE: PUNTO DE AJUSTE, BANDA DIFERENCIAL
'Y LAS BANDAS SUPERIOR E INFERIOR
!POBJ oLabel.Etiqueta1=74,54,30,11,Punto de Ajuste,7,0,9,0
!POBJ Etiqueta1.Font=TAHOMA,9,1,0
!POBJ oLabel.Etiqueta2=92,54,4,4,,7,0,8
!POBJ Etiqueta2.Font=TAHOMA,9,1,0
!POBJ oLabel.Etiqueta3=74,46,30,11,Banda Diferencial (%),7,0,9,0
!POBJ Etiqueta3.Font=TAHOMA,7,1,0
!POBJ oLabel.Etiqueta4=92,46,4,4,,7,0,8
!POBJ Etiqueta4.Font=TAHOMA,9,1,0
!POBJ oLabel.Etiqueta5=74,38,30,11,Banda Superior,7,0,9,0
!POBJ Etiqueta5.Font=TAHOMA,9,1,0
!POBJ oLabel.Etiqueta6=92,38,4,4,,7,0,8
!POBJ Etiqueta6.Font=TAHOMA,9,1,0
!POBJ oLabel.Etiqueta7=74,30,30,11,Banda Inferior,7,0,9,0
!POBJ Etiqueta7.Font=TAHOMA,9,1,0
!POBJ oLabel.Etiqueta8=92,30,4,4,,7,0,8
!POBJ Etiqueta8.Font=TAHOMA,9,1,0
!POBJ oLabel.Etiqueta9=75,20,15,13,\n CALENTADOR,7,0,10,1
!POBJ Etiqueta9.Font=TAHOMA,11,1,0
'EVENTOS ***************************************************************************
'DEFINIR LOS EVENTOS A EJECUTAR
!POBJ Boton1.C=!MREQ 29,10,Punto de Ajuste,10 (;)
!MATH %m10=%m10,Format,0.0(;)
!MATH %m10=%m10,*,10
!POBJ Boton2.C=!MREQ 10,10,Banda Diferencial,11(;)
!MATH %m11=%m11,Format,0.0(;)
!MATH %m11=%m11,*,10
ENDMAC
'RUTINAS ***************************************************************************
Actualiza:
'RUTINA PARA ACTUALIZAR EL LED QUE REFLEJA EL ESTADO DEL CALENTADOR
!IFTH %m0,=,1,!POBJ Led1=1
!IFTH %m0,=,0,!POBJ Led1=0
ENDMAC
La interfaz obtenida con este macro, permite configurar el punto de ajuste (en C) y la banda diferencial (en
porcentaje). El macro se encargar de multiplicar por 10 los valores introducidos por el usuario por medio de
la interfaz, para mantener el formato de datos definidos en el ejercicio anterior (3 dgitos para la parte
entera y uno para los decimales).
Inicie el software StampPlot Pro. Para conectar al microcontrolador con el StampPlot deber seleccionar en
el men Plot de la barra de herramientas, la opcin Connected. Luego aplique un reset al BASIC Stamp
para cargar la configuracin e inicializar la interfaz.
En la figura No. 10.13 se observa el comportamiento del lazo de control al momento de ser inicializado. La
lnea en la parte superior de la grfica es el estado del calentador, mientras que la curva de la parte inferior
es la temperatura alcanzada.
El cdigo del programa 10_2.bsp es un poco extenso, pero dista de ser complicado. El lazo principal del
programa se mantiene leyendo los valores de Set Point y de banda diferencial que el usuario introduce en la
interfaz del StampPlot. Posteriormente, lee la temperatura que mide el DS1620 y calcula la banda
proporcional en grados (observe que en la interfaz se introduce un valor como % del Set Point). Finalmente
actualiza la interfaz grfica y genera la seal de control.
Presione sobre el botn Punto de Ajuste y le aparecer un cuadro de dialogo similar al de la figura No.
10.14. Por medio de este, podr modificar el set point o valor deseado de la temperatura. Seleccione 32 C
y observe la respuesta del sistema.
Debido a que la banda diferencial se expres como un porcentaje del valor del set point, para determinar su
valor en unidades de temperatura, es necesario realizar la siguiente operacin:
Sp Banda
BD =
100
Pero, con la representacin numrica que se est utilizando el operar directamente con los datos ledos del
StampPlot Pro resulta inadecuado, ya que las posibilidades de desbordamiento matemtico son muy claras.
Por ejemplo, si el punto de ajuste es de 60.0C y la banda diferencial vale 10%, al efectuar la operacin
Sp*Banda el resultado ser 60000, nmero que evidentemente sale del rango de -32767 a 32767 utilizado
por el BS2p para representar los nmeros con signo.
Sp Banda
Bd =
10 10
Con ello se garantiza que en todo momento el resultado se mantenga dentro de los 15 bits disponibles para
el mismo.
Objetivo: Implementar una estacin de monitoreo remoto de temperatura, utilizando al BASIC Stamp y el software Serial-TCP
Gateway de SelmaWare.
Elementos a Utilizar
En 1973, la Agencia de Proyectos de Investigacin
Avanzada para la Defensa (DARPA), de los Estados
(1) BASIC Stamp 2p. Unidos, inici un programa para la investigacin de
(1) Resistencia de 220 Ohms. tecnologas que permitieran la transmisin de paquetes
(1) Driver de Potencia del MDK-B28. de informacin entre redes de diferentes tipos y
(1) DS1620, Termmetro/Termostato digital.
(1) Computador adicional con tarjeta Ethernet.
caractersticas. Los protocolos desarrollados se
(1) Cable UTP Categoa 5, denominaron el conjunto de protocolos TCP/IP,
(1) Un cable serial DB9. Protocolos de Control de Transmisin (Transmition
(1) Programa StampPlot V3 (rev 1.6 o superior). Control Protocol) e Internet (Internet Protocol).
(1) StampW (v2.0 beta 2.1 o superior).
Los protocolos de red suelen especificarse mediante capas superpuestas. Cada una de estas capas cumple
un determinado nivel de funcionalidad, por lo que se denominan niveles. Los niveles ms bajos tienen que
ver con el hardware, los superiores con el intercambio de informacin y los niveles centrales constituyen el
ncleo del protocolo.
CONCEPTOS RELACIONADOS
Paquete: Cantidad mnima de datos que se transmiten en una red o entre dispositivos.
Puerto: Es un nmero que identifica a una aplicacin que interviene o va a intervenir en una comunicacin bajo TCP.
Socket: Es la combinacin de la IP de la mquina y del nmero de puerto utilizado por el TCP.
Gateway: Ordenador dispositivo que conecta redes diferentes en protocolo.
Router: Asigna el encabezado del paquete y elige la mejor ruta de acceso para este. De esta manera, se optimiza el
rendimiento de la red.
Proxy: Es bsicamente un software equivalente a un router.
OSI: El modelo OSI (Open Sytem Interconnect) fue introducido por la ISO (Internacional Standars Organization) para
promover la comunicacin entre los diversos sistemas va red. Divide las tareas de la red en 7 capas.
IP: La direccin IP es usada para asegurar que los paquetes lleguen a la direccin correcta. Es una direccin nica que
identifica a un equipo en una red mediante una direccin de 32 bits.
TCP: Rompe los datos en paquetes, en una secuencia tal que puedan ser ordenados en el dispositivo ubicado en el otro
extremo de la comunicacin en el orden en que fueron enviados. Permite la retransmisin de paquetes que han sido perdidos
en las capas inferiores.
El software StampPlot Pro, permite comunicar al microcontrolador a travs del protocolo TCP/IP con un
computador remoto, utilizando el programa TCP-Serial Gateway. De esta manera, se puede implementar
una adquisicin de datos y/o control a travs de Internet.
En este ejercicio, se implementar un control ON/OFF, pero en un computador remoto se mostrar el valor
de la temperatura, del punto de ajuste y del estado del calentador (Encendido/Apagado).
La configuracin del punto de ajuste se realiza por medio de pulsadores. La pantalla LCD servir como
medio de visualizacin en campo; es decir, en la cercana del proceso. La figura No. 10.15 le ayudar a
entender el objetivo buscado.
Comunicacin
TCP/IP
Comunicacin
Serial RS232
Encienda el sistema de desarrollo MDK-B28 y descargue al BASIC Stamp el programa 10_3.bsp. Cierre el
debug terminal que el editor de PBASIC le abrir.
El computador que transmite los datos, se encuentra conectado al microcontrolador por medio de un puerto
RS232; en este PC se debe ejecutar y configurar la aplicacin SelmaWare Serial/TCP Gateway. Para iniciar
este software, seleccione del men de Inicio de Windows, la opcin TCP-Serial Gateway dentro de la
carpeta del programa StampPlot, ver figura No. 10.16.
Inicie el mencionado software y ver aparecer una ventana similar a la mostrada en la figura No. 10.17. Los
elementos que se encuentran a la izquierda configuran la comunicacin entre el BASIC Stamp y el
computador local. Ajuste estos parmetros de la manera usual (como si se conectara con el StampPlot Pro).
Direccin IP Local: la direccin IP
Comunicacin Serial con el Contrasea para
del computador donde se ejecuta el
microcontrolador autentificar la conexin
SelmaWare Serial/TCP
Puerto de
conexin
Establezca la conexin entre el microcontrolador y el computador local haciendo clic sobre el botn
Connect. El software indica que la conexin ha sido establecida, cambiando el botn Connect a
Disconnect y colocando en verde la seal C que se encuentra en la barra de estado de la
comunicacin, ver figura No. 10.18.
El puerto puede ser cualquier valor superior a 900. Por lo general, en los computadores todos los puertos a
partir de ste se encuentran disponibles.
Seleccione el puerto de comunicaciones a utilizar (9001 por ejemplo). A continuacin, se debe hacer clic
sobre el botn Listen y el software indicar que se est intentando establecer la conexin por medio de un
mensaje que se muestra en el cuadro de dialogo, y colocando en amarillo la seal C de la barra de estado
de la comunicacin. Una vez que se establezca la comunicacin, la seal C aparecer en color verde.
Al hacer todo lo mencionado anteriormente, la ventana del gateway serialTCP deber lucir como la figura
No .10.18.
Una vez que se ha configurado al computador remoto, seleccione la opcin Connect del men Plot del
StampPlot Pro.
'MEDIDOR ***************************************************************************
'DEFINIR MEDIDOR QUE MUESTRA EL VALOR DE LA TEMPERATURA
!POBJ oMeter.Medidor=72,90,27,27,-55,125,,
'ETIQUETAS *************************************************************************
'ETIQUETAS PARA MOSTRAR LOS VALORES ACTUALES DE: PUNTO DE AJUSTE, VARIABLE DE
'PROCESO Y EL ESTADO DEL CALENTADOR
!POBJ oLabel.Etiqueta1=71,55,30,10,PUNTO DE AJUSTE,7,0,10
!POBJ Etiqueta1.Font=TAHOMA,10,1,0
!POBJ oLabel.Set_Point=92,55,4,4,0,7,0,10
!POBJ Set_Point.Font=TAHOMA,10,1,0
!POBJ oLabel.Etiqueta3=71,50,30,10,VARIABLE DE PROCESO,7,0,10
!POBJ Etiqueta3.Font=TAHOMA,10,1,0
!POBJ oLabel.Var_Proc=92,50,4,4,0,7,0,10
!POBJ Var_Proc.Font=TAHOMA,10,1,0
!POBJ oLabel.Etiqueta3=75,17,16,14,\n CALENTADOR,7,0,12,1
!POBJ Etiqueta3.Font=TAHOMA,12,1,0
'LED *******************************************************************************
'DEFINIR EL LED QUE INDICA EL ESTADO DEL CALENTADOR
!POBJ oImgBut.Led1=91,17,7,14,comp\Led_wood_0.jpg,1,comp\Led_wood_1.jpg
!POBJ Led1.Tip=Estado del Calentador
ENDMAC
Luego de establecer la comunicacin a travs del protocolo TCP/IP, aumente el punto de ajuste a 35C
presionando el pulsador SW2. Observe que a medida que el valor del Set Point aumenta en la pantalla LCD,
tambin lo hace en la interfaz que se ejecuta en el computador remoto. Permita al controlador actuar y
observe la respuesta del lazo en el computador remoto.
Objetivos: Utilizar al BASIC Stamp para implementar un algoritmo de control proporcional de temperatura. Emplear el macro
StampDAQ como herramienta para la adquisicin de datos.
Elementos a Utilizar
El objetivo de establecer un lazo de control en un
proceso, es mantener constante alguna condicin del
(1) BASIC Stamp 2p. sistema.
(1) Resistencia de 220 Ohms.
(1) DS1620, Termmetro/Termostato digital Para poder efectuar esto, se deber agregar
(1) Driver de Potencia. continuamente la misma cantidad de energa que
(1) Resistencia de 10 KOhms. pierde el proceso. Si las prdidas del sistema fuesen
(1) Un cable serial DB9.
(1) StampW (v2.0 beta 2.1 o superior). constantes, el control del proceso sera tan simple como
(1) StampDAQ (Macro VB para Microsoft Excel ). aplicar un nivel fijo a la salida del controlador (esto es
(1) Programa StampPlot V3 (rev 1.6 o superior). justamente lo que hace un control a lazo abierto).
Sin embargo, los factores que afectan un proceso son cambiantes y deben considerarse las demoras en la
reaccin del sistema (tiempos de retardo). Un cambio en las condiciones energticas del proceso no se
reflejar inmediatamente en la salida, as como tampoco lo har un cambio en la salida del controlador.
Como ejemplo de esto, observe que los controladores ON/OFF con o sin banda diferencial utilizados en
ejercicios anteriores, al momento de encender el calentador siempre inyectan una cantidad superior de
energa (calorfica) a la requerida por el sistema para alcanzar el punto deseado. Al apagarse el calentador,
las prdidas del sistema hacen que la temperatura disminuya hasta alcanzar el punto de disparo del
controlador, repitindose este ciclo indefinidamente.
Ahora bien, imagine que el sistema de control que se ha construido se instale en un equipo de calefaccin
industrial, una caldera por ejemplo. Esta sobreexcitacin del sistema pudiera con facilidad hacer que la
temperatura aumente a niveles insoportables para el mismo, ocasionando terribles daos para la instalacin.
Existen algoritmos de control que permiten regular de una manera adecuada la cantidad de energa que se
aplica al sistema. Uno de los ms utilizados se conoce como Control Proporcional. Este mecanismo de
control permite que, mientras ms alejada se encuentre la variable de proceso del set point, ms cantidad
de energa se agregue o retire del proceso.
Para el desarrollo de este ejercicio, ser necesario aplicar una seal que produzca un calentamiento variable.
Una forma de lograr esto, es por medio del comando PWM del PBASIC. Antes de proseguir con el desarrollo
del controlador proporcional, se explorar el efecto del comando PWM sobre la temperatura del sistema.
En este ejercicio se introduce el uso de una herramienta de software muy verstil y sencilla de usar: el
StampDAQ. StampDAQ es un macro de Visual BASIC desarrollado por Parallax, Inc que permite efectuar la
adquisicin de datos en el microcontrolador y descargarlos directamente en una hoja de clculo del conocido
programa Microsoft Excel. La informacin es enviada y/o recibida por medio del puerto serial del PC. En esta
pequea aplicacin, se ha tomado una hoja de clculo y se han colocado en ella los siguientes datos:
En base a esta informacin, se determinar la ecuacin de una recta de aproximacin para la relacin
Temperatura vs. Porcentaje de Excitacin. A medida que se reciben los datos, se elabora una grfica de la
temperatura obtenida (color rojo) y cuando se ha obtenido la mitad de los puntos experimentales, se
comienza a graficar la recta de aproximacin (color azul).
Arme el montaje de la figura No. 10.8 (puede omitir la conexin del LCD). Encienda el MDK-B28 y descargue
el programa 10_4.bsp.
'Programa 10_4.bsp
'Este programa permite obtener la relacin entre la PWM generada por el BS2p y la
'temperatura alcanzada por el calentador del sistema de desarrollo MDK-B28
'Requiere del uso del archivo 10_4.xls (que contiene al macro StampDAQ)
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
'===================================================================================
'SUBRUTINAS
'Rutina que permite inicializar el DS1620 como termmetro
Init_Temp:
HIGH SS2 'Habilitar al DS1620
SHIFTOUT MOSI,SCK,LSBFIRST,[EscRegCon,ConfiTerm] 'Enviar el byte de configuracin
GOSUB Rset
Cierre el debug terminal y abra el archivo 10_4.xls que contiene al macro StampDAQ.
Haga clic en la casilla Connect y presione el pulsador de RESET del sistema MDK-B28.
En la hoja de clculo se mostrar la temperatura que mide el DS1620, el valor del parmetro Ciclo til de
la instruccin PWM y el porcentaje de excitacin correspondiente. Anote el valor de la temperatura inicial
Tinicial = _________ C.
A medida que el programa se ejecuta, ver como la hoja de datos se llena y la temperatura del sistema
aumenta de manera similar a la mostrada en la figura No. 10.20.
En las dos primeras celdas de la columna llamada PINF, comenzar a aparecer el promedio de la mitad
inferior de las muestras (correspondientes a las temperaturas alcanzadas mientras el ciclo til aumenta de
0% a 50%). De manera similar, debajo de PSUP podr verse como se calcula el promedio de la mitad
superior de las muestras. Estos promedios sern los dos puntos pertenecientes a la recta de aproximacin
utilizados para determinar su ecuacin.
El programa 10_4.bsp permite observar la relacin existente entre la seal aplicada al elemento final de
control (el calentador) y la variable del proceso (la temperatura), es decir, obtiene la respuesta a lazo
abierto del sistema. Para lograr que el sistema trmico se estabilice ante un cambio en la energa aplicada al
mismo (una variacin de la seal de PWM), se debe esperar un tiempo relativamente largo, por ello, cada
vez que se vara el ciclo til de la onda se genera la PWM durante 25 segundos.
Nota: La duracin del tiempo de estabilizacin del lazo fue determinado experimentalmente en unos 6 minutos. Sin embargo, la
pendiente de la ecuacin de aproximacin que se obtiene con el programa 10_4.bsp es bastante fiel al comportamiento del sistema, as
que puede utilizarse obteniendo resultados correctos.
Este rango de temperatura, define la capacidad de operacin mxima que tendr el controlador.
En base a los valores experimentales, obtenga la ecuacin de la recta que aproxima a la relacin
Temperatura vs. Porcentaje de Excitacin.
Figura No. 10.20: Respuesta a lazo abierto del sistema captada con el StampDAQ.
Fuente: Elaboracin Propia.
Calcule la temperatura que alcanzar el lazo cuando la salida del controlador sea 50%. T50% = ____C.
Nota: Si la pendiente obtenida difiere significativamente del valor mostrado, efecte los clculos en base a sus resultados
experimentales.
Ahora bien, la salida del controlador proporcional est determinada por la ecuacin:
m( t) = m + K C e(t )
Con la evaluacin de esta expresin deber tenerse sumo cuidado, al efectuar un simple anlisis
dimensional, se har evidente que el manejo de las unidades en las que se introduce Kc puede provocar
resultados errneos.
Para ejemplificar esto, supngase que la salida del controlador m(t) se expresa como porcentaje (0% a
100%). Esto obliga a que el valor de estado estacionario m sea tambin un porcentaje. Segn la definicin
de error: e(t) = Sp Vp(t) , e(t) tiene las mismas unidades de la variable del proceso (temperatura en C,
por ejemplo). En consecuencia, la ganancia del controlador Kc debe tener, en principio, unidades de:
porcentaje de salida del controlador (%SC) / unidades de la Vp.
Al momento de establecer las ecuaciones para implementar los clculos con el microcontrolador, debe tomar
una decisin entre dos posibles opciones:
Para este ejercicio, se ha decidido implementar la primera solucin mediante el programa 10_5.bsp. Una vez
entendido el funcionamiento de ste, se proponen las modificaciones a efectuar para que usted cree el
programa 10_6.bsp con la implementacin de la segunda solucin.
Guarde el macro que se presenta a continuacin con el nombre Macro_10_5.spm en la carpeta Macro del
StampPlot Pro.
!PPER 70,100 'RELACION ENTRE EL AREA DE GRAFICACION Y LA DE OBJETOS
!NEWP
!POBJ clear
'Borrar objetos
'MEDIDOR ***************************************************************************
'DEFINIR MEDIDOR QUE MUESTRA EL VALOR DE LA TEMPERATURA
!POBJ oMeter.Medidor=72,97,27,27,20,50,,
'PULSADORES ************************************************************************
'PULSADORES PARA INTRODUCIR LA CONFIGURACION DEL CONTROLADOR PROPORCIONAL
!POBJ oButton.Boton1=72,65,12,8,Punto de Ajuste,8
!POBJ Boton1.tip=Configurar Set Point
!POBJ oButton.Boton2=87,65,12,8,Constante Proporcional,8
!POBJ Boton2.tip=Configurar Constante Proporcional
'ETIQUETAS *************************************************************************
'ETIQUETAS PARA MOSTRAR LOS VALORES ACTUALES DE: PUNTO DE AJUSTE, CONSTANTE
'PROPORCIONAL Y LA SALIDA DEL CONTROLADOR PROPORCIONAL
!POBJ oLabel.Etiqueta1=71,50,25,12,Set Point (C),7,0,9,0
!POBJ Etiqueta1.F=Tahoma,9,1,0
!POBJ oLabel.Etiqueta2=93,50,4,4,%m10,7,0,9,0
!POBJ Etiqueta2.Font=Tahoma,9,1,0
!POBJ oLabel.Etiqueta3=71,45,25,12,Ganancia Kc (%/C),7,0,9,0
!POBJ Etiqueta3.Font=Tahoma,9,1,0
!POBJ oLabel.Etiqueta4=93,45,5,4,%m11,7,0,9,0
!POBJ Etiqueta4.Font=Tahoma,9,1,0
!POBJ oLabel.Etiqueta5=71,40,25,12,Salida del Controlador (%),7,0,9,0
!POBJ Etiqueta5.Font=Tahoma,9,1,0
!POBJ oLabel.Etiqueta6=93,40,5,4,0,7,0,9,0
!POBJ Etiqueta6.Font=Tahoma,9,1,0
!POBJ oLabel.Etiqueta7=81,28,12,4,CONTROLAR,7,0,10,0
!POBJ Etiqueta7.Font=TAHOMA,10,1,0
!POBJ oLabel.Etiqueta8=81,20,12,4,AJUSTAR,7,0,10,0
!POBJ Etiqueta8.Font=TAHOMA,10,1,0
'INTERRUPTOR ***********************************************************************
'PARA ACTIVAR O DESACTIVAR LA ACCION DEL CONTROLADOR
!POBJ oImgBut.Switch1=73,28,7,12,comp\switch_0.jpg,1,comp\switch_1.jpg
!POBJ Switch1.Tip=Accionar el Lazo de Control!
'EVENTOS ***************************************************************************
'DEFINIR LOS EVENTOS A EJECUTAR
'AL PRESIONAR A Boton1, SE ABRE UN CUADRO DE DIALOGO POR 10 SEGUNDOS EN EL QUE SE
'DEBE INTRODUCIR EL SET POINT. EL NUEVO SET POINT SE ALMACENA EN LA VARIABLE %m10
'REDONDEANDO A UN DECIMAL EL VALOR INTRODUCIDO Y MULTIPLICANDOLO POR 10 PARA
'AJUSTARLO AL FORMATO USADO EN EL PROGRAMA
!POBJ Boton1.C=!MREQ 0,10,Set Point,10(ER)!MATH %m10=%m10,Format,0.0 (;)
!MATH %m10=%m10,*,10
'LA GANANCIA DEL CONTROLADOR SE SOLICITA Y ALMACENA DE MANERA SIMILAR AL SET POINT
'PERO SE GUARDA EN LA VARIABLE %m11
!POBJ Boton2.C=!MREQ 0,10,Ganancia,11(ER)!MATH %m11=%m11,Format,0.0 (;)
!MATH %m11=%m11,*,10
'Programa 10_5.bsp
'Este programa tiene por objetivo implementar un controlador proporcional
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
TempA CON 250 'Temperatura alta = 125C (Alarmas del DS1620)
TempB CON 0 'Temperatura baja = 0C
LeerTemp CON $AA 'Comando para leer temperatura
InicioConv CON $EE 'Comando para iniciar conversin
ConfiTerm CON $0A 'Configurar al DS1620 como termmetro
ConfiTalta CON $01 'Comando para configurar temperatura alta
ConfiTbaja CON $02 'Comando para configurar temperatura baja
EscRegCon CON $0C 'Escribir en el registro de configuracin del DS1620
Reset_Manual CON 500 'Salida del controlador cuando no existe error
SetPoint CON 310 'Punto de ajuste por defecto
Ganancia CON 074 'Ganancia inicial del controlador (%SC/C)
SINPin CON 16 'Terminal SIN (2) del BASIC Stamp
Baudios CON 240 'No-Invertido, 9600 bsp, sin paridad
Tiempo_Espera CON 1250 'Tiempo de espera cuando se piden datos al StampPlot
MOSI PIN 0 'Terminal de Datos del bus 3-Wire conectado a P0
SCK PIN 1 'Seal de reloj
SS2 PIN 2 'Seal de habilitacin del DS1620
CAL PIN 8 'Terminal conectado al calentador
BUZ PIN 11 'Altavoz piezoelctrico conectado a P11
Temp VAR Word 'Temperatura del proceso
Sp VAR Word 'Punto de ajuste o Set Point
Kp VAR Word 'Ganancia del controlador
Accion VAR Word 'Excitacin que se aplica al calentador
Aux VAR Word 'Var. aux. de uso general
Digito VAR Byte 'Var. aux. que contiene la parte decimal de los datos
i VAR Byte 'Variable de uso general
Signo VAR Bit 'Bit de signo
Selector VAR Bit 'Estado del interruptor en la interfaz de control
'___________________________________________________________________________________
'Programa Principal
DEBUG "!MACR Macro_10_5.Inicio",CR 'Rutina de inicializacin del Macro_10_5.spm
PAUSE 2000
DEBUG "!MATH %m10=",DEC SetPoint ,CR 'Enva el valor por defecto del punto de ajuste
DEBUG "!MATH %m11=",DEC Ganancia,CR 'Enva la ganancia del controlador
DEBUG "!MATH %m12=",DEC 0,CR 'Accin por defecto = Ajustar el lazo
GOSUB InTemp
LOW CAL
DO
Leer_Accion:
DEBUG "!Read %m12",CR 'Leer el estado del interruptor
SERIN SINPin, Baudios, Tiempo_Espera , Leer_Accion, [DEC Selector] : PAUSE 250
GOSUB Generar_Salida 'Genera la seal de control
ON Selector GOSUB Configurar,Control 'Ejecuta alguna de las dos rutinas
LOOP 'dependiendo del interruptor
'===================================================================================
'SUBRUTINAS
'Rutina para inicializar el DS1620 como termmetro
InTemp:
HIGH SS2 'Habilitar al DS1620
SHIFTOUT MOSI,SCK,LSBFIRST,[EscRegCon,ConfiTerm] : GOSUB Rset 'Enviar config.
SHIFTOUT MOSI,SCK,LSBFIRST,[ConfiTAlta,TempA\9] : GOSUB Rset 'Enviar temp. alta
SHIFTOUT MOSI,SCK,LSBFIRST,[ConfiTbaja,TempB\9] : GOSUB Rset 'Enviar temp. baja
SHIFTOUT MOSI,SCK,LSBFIRST,[InicioConv ] : GOSUB Rset 'Iniciar la medicin
LOW SS2 'Deshabilitar al DS1620
RETURN
'Rutina para producir un reset del DS1620
Rset:
LOW SS2 : PAUSE 5 : HIGH SS2
RETURN
'Configurar, lee el valor de los parmetros del controlador y actualiza la interfaz
Configurar:
Accion = 0 : LOW cal 'Garantizar que no se genera accin de control
Leer_Sp:
DEBUG "!Read %m10",CR 'Leer punto de ajuste
SERIN SINPin, Baudios, Tiempo_Espera , Leer_Sp, [SDEC Sp] : PAUSE 150
Leer_Kp:
DEBUG "!Read %m11",CR 'Leer ganancia proporcional
SERIN SINPin, Baudios, Tiempo_Espera , Leer_Kp, [DEC Kp ] : PAUSE 150
GOSUB Leer_Temperatura 'Medir la temperatura del sistema
Aux = Temp
GOSUB Actualizar_Medidor 'Actualizar el medidor y la grfica
FOR i= 0 TO 2 'Actualizar las etiquetas de la interfaz
LOOKUP i,[Sp,kp,Accion],Aux
GOSUB Manejar_Signo
DEBUG "!POBJ Etiqueta",DEC (2*i+2),"=",SDEC Aux,".",DEC Digito,CR
NEXT
RETURN
momentneamente alcanzar hasta el 100%). Con ello energizar al Figura No. 10.21:
calentador produciendo un aumento de la temperatura. Men contextual definido en el
macro Macro_10_5.spm.
Fuente: Elaboracin Propia.
Sistema de Desarrollo para MC, modelo MDK-B28 - 328 -
www.roso-control.com
Captulo No. 10. Control de Procesos
A medida que la temperatura del sistema se acerca al punto de ajuste, la salida del controlador comienza a
disminuir, esto ocasiona que los aumentos de temperatura sean cada vez menores, es decir, la accin
correctiva se hace menor cuando disminuye el error. La temperatura deber alcanzar el punto de ajuste, ver
figura No.10.22.
Es muy probable que el lazo jams alcance la temperatura deseada, esto se debe al mencionado offset que
presenta el controlador proporcional ante los cambios de carga prolongados. Aqu el cambio de carga que
ms afecta al lazo es la variacin en la temperatura ambiente. Otra fuente de perturbacin permanente
sern las corrientes de aire, pero al no ser stas constantes el controlador podr manejarlas. Si la diferencia
entre la temperatura alcanzada y la deseada luego de transcurrir unos 300 segundos es muy grande (ms
de 2C) puede llevar a cabo el siguiente procedimiento de ajuste:
Active el lazo de control y una vez que el sistema se encuentre en la temperatura deseada, ocasinele
perturbaciones soplando el calentador con un pequeo ventilador o cualquier otro mecanismo. Observe la
respuesta del controlador ante tal situacin.
Desconecte el cable que une a los terminales P8 y CAL en la regleta de conexiones. Aplique una tensin de
+5 Voltios al terminal CAL durante unos 15 20 segundos, posteriormente vuelva conectarlo con P8 y
observe la reaccin del lazo ante tal perturbacin.
Coloque el interruptor en la posicin Ajustar y espere hasta que el sistema se encuentre a temperatura
ambiente. Nota: Puede utilizar algn mecanismo de ventilacin para acelerar este proceso.
El valor de la ganancia del controlador proporcional afecta la velocidad con la que se corrige el error,
mientras ms grande sea, mayor fuerza tiene la accin correctiva. Sin embargo, aumentar
indiscriminadamente la ganancia har que el controlador comience a parecerse ms a un control ON/OFF
que a un Proporcional. Cuando esto ocurre se dice que el sistema est teniendo una respuesta oscilatoria,
condicin totalmente indeseable en un lazo de control continuo.
Si desea observar una respuesta oscilatoria del sistema puede seguir el siguiente procedimiento:
Cambie el selector a la posicin Ajustar y espere hasta alcanzar la temperatura ambiente.
Ajuste la ganancia Kc en 100 %/C.
Coloque el selector de funcin del controlador en Controlar.
Figura No. 10.24: Respuesta oscilatoria ocasionada por una ganancia muy grande.
Fuente: Elaboracin Propia.
Es muy comn que la ganancia de un controlador se exprese de manera adimensional, para ello deber
expresarse al error como un porcentaje. Pero, un porcentaje de qu?. La respuesta es simple, el porcentaje
de error se define con respecto al intervalo o rango de la variable del proceso en el cual puede actuar el
controlador desde el punto donde su salida es 0% (completamente apagado) hasta alcanzar la mxima
salida (100% o completamente encendido). Para determinar este error porcentual deber aplicarse la
siguiente ecuacin:
Sp Vp(t)
Error %(t) = 100 %
Rango de Control
Un ejemplo permite ilustrar este concepto. Si el Rango de Control se define en 10C, el error porcentual
es:
Sp Vp
Error % = 100 %
10C
Si la variable del proceso se aleja 5C por debajo del punto de ajuste, el Error % ser igual al 50%.
Para continuar con el ejercicio, se establecer el rango como la diferencia entre la temperatura inicial y final
obtenida cuando se ejecut el programa 10_4.bsp. Rango = __________ C.
En la seccin de declaracin de constantes, incluya una constante llamada Rango con el valor obtenido para
el rango de control.
Substituya la rutina Calculo_P con el segmento de cdigo que se muestra en la pgina siguiente.
Descargue el programa 10_6.bsp al BASIC Stamp y ejectelo. Conecte al StampPlot Pro y al BS2p.
Ajuste el set point en el valor utilizado anteriormente y coloque la ganancia en 1 (recuerde que ahora la
ganancia no tiene unidades).
Efecte todas las experiencias realizadas con el programa 10_5.bsp. Cuando aumente la ganancia colquela
en 3,4; con ello debe obtener una respuesta similar a la figura No. 10.23.
Calculo_P:
Aux = Temp
Aux = Sp-Temp 'Determina el error
Signo = Aux.BIT15 'Signo indica si hay que aumentar o disminuir la salida
Aux = (ABS Aux*100 / Rango) 'Calcula el error porcentual
Aux = ((ABS Aux) * Kp) 'Calculo de la excitacin proporcional
Aux = ((Aux DIG(0)/5)*10) + Aux 'Redondeo de la parte decimal
Aux = Aux / 10 'Ajuste de formato
IF Signo = 1 THEN Aux = -Aux 'Ajuste del signo
Accion = Aux + Reset_Manual 'Clculo de la salida del controlador en porcentaje
IF (Accion.BIT15 = 1) THEN 'Corrige si el clculo es menor que cero
FREQOUT Buz,2500,1500 : Accion = 0
ELSE
Accion = Accion MAX 1000 'Limita la salida al 100 %
ENDIF
DEBUG "!POBJ Etiqueta6=",DEC (Accion/10),".",DEC Accion DIG 0,CR
'Actualiza la etiqueta correspondiente a la salida del controlador en la interfaz
Accion = (Accion */$42) MAX 255 'Ajusta la salida de 0 a 255 multiplicando por 0.255
RETURN
Programacin
2. Modifique el Macro_10_3.spm y el programa 10_3.bsp para que el valor del set point, pueda ser
ajustado desde el computador remoto.
Captulo No. 11
Movimiento Micro Controlado
Introduccin. Existen gran cantidad de mtodos para producir el movimiento fsico de un mecanismo. Sistemas neumticos que
trabajan a partir de aire presurizado, los sistemas hidrulicos que utilizan fluidos a presin y los sistemas elctricos que utilizan motores
para convertir la energa elctrica en energa mecnica (movimiento). Los motores DC o de corriente continua de pequeo tamao, son
ideales para la educacin; no slo por su reducido costo, sino tambin, por su razonable eficiencia, versatilidad y gran aplicabilidad a los
procesos industriales. Los Motores DC, son ampliamente utilizados en aplicaciones tales como la robtica, mecatrnica y en sistemas de
control. Es ste capitulo se trabajar con un motor DC de imn permanente y con dos tipos de motores de uso muy frecuente en
aplicaciones con microcontroladores: el servomotor y el motor de pasos.
Motores DC:
Los motores DC, son dispositivos que permiten
convertir la energa elctrica en energa
mecnica, la cual, se manifiesta por medio de
un movimiento rotario. Pero, Cmo lo hacen?.
Colector: Es un anillo formado por varias lminas (llamadas delgas) aisladas unas de otras y dispuestas
alrededor de un eje. Las bobinas del rotor se conectan a las delgas que estn a su vez en contacto con las
escobillas, proporcionando el medio para hacer circular corriente en el rotor. El colector se encuentra
slidamente unido al eje del rotor pero aislado elctricamente de ste.
El movimiento del motor DC se basa en que si por un conductor circula una corriente y ste es
sometido a la accin de un campo magntico, se producir una fuerza sobre la longitud del
conductor expuesta al campo. Esta fuerza puede ser entonces utilizada para producir un par de
rotacin. Este principio fsico se conoce como la Ley de Faraday.
En el mundo real, los motores DC no son 100% eficientes. Varias limitaciones del motor, incluyendo las
prdidas por friccin mecnica, causan que parte de la energa elctrica aplicada se pierda en forma de
calor. Los motores DC utilizados, por ejemplo en juguetes, son econmicos pero tpicamente tienen una
eficiencia tan baja como el 50%. Mientras que los motores utilizados en la industria pueden tener eficiencias
promedio de 95%. Normalmente, los requerimientos de potencia en un motor DC, se encuentran expresados
en la hoja de especificaciones del fabricante. Uno de los parmetros fundamentales que se incluye en estas
especificaciones, es el Voltaje de Alimentacin Nominal o voltaje recomendado para la operacin del
motor. La mayora de los motores DC pueden trabajar a menor voltaje del especificado; sin embargo, se
hacen menos eficientes, entregando menos potencia mecnica de salida. Tambin los motores DC operados
a un mayor voltaje del recomendado, pueden entregar mayor potencia de salida, mejoran su eficiencia, pero
su vida til se ver drsticamente reducida. Otro parmetro importante es la Corriente del Motor. Cuando
un motor DC se alimenta a un voltaje constante, el motor consume una corriente que es proporcional al
trabajo que est realizando. Si no existe carga mecnica conectada en su eje (vaco), el motor consumir
una pequea corriente que le permitir vencer su inercia mecnica y alimentar las prdidas internas. Cuando
la carga mecnica aplicada al motor sea tal que pare al rotor; el motor consumir el mximo de corriente. A
sta corriente la llamaremos Stall Current o corriente mxima.
Mientras mayor sea la corriente que consume el motor, entre los lmites de corriente (Min, Max), ste
dispondr de mayor fuerza rotacional o torque en su eje. Esto es una consecuencia directa de la reaccin
entre la corriente que circula por las espiras del rotor y el campo magntico del estator. Frecuentemente los
motores DC se especifican por el trmino Stall Torque o torque mximo. Este trmino, representa la mayor
fuerza rotacional que el eje del motor puede entregar cuando se alimenta al voltaje nominal y consume una
corriente mxima Stall Current.
La potencia disponible en el eje de un motor DC depender entonces del torque aplicado al eje y de la
velocidad rotacional del mismo. Cuando el motor est en vaco, sin carga en el eje, su velocidad rotacional
ser la mxima, pero el par disponible en el eje del motor ser cero, por tanto su potencia de salida ser
tambin cero (el motor se encuentra realmente haciendo algn trabajo, para compensar las prdidas por
friccin, pero esto no se considera potencia de salida). Cuando al motor se le aplica la mxima carga
mecnica, el motor entonces se parar. En ese momento, se producir el mximo de par pero sin velocidad
rotacional, por ello, de nuevo la potencia de salida ser cero. Entre estos dos extremos (Vaco Torque
Mximo) la potencia de un motor DC se puede representar a travs de una curva parablica como se
muestra en la figura No. 11.2.
Figura No. 11.2: Relacin entre la velocidad, el torque y la potencia de salida en un motor DC.
Fuente: Robotic Explorations, ISBN 0-13-089568-7.
SERVOMOTORES
Un servomotor, es un motor de corriente continua (DC) especializado,
el cual, puede ser comandado para que gire a una posicin
determinada. Tiene un circuito de control construido en su interior
que se realimenta en todo momento con la posicin de su rotor. De
sta forma puede llevar a cabo una auto-regulacin. En lugar de rotar
continuamente como los motores comunes de DC, un servomotor
puede ser posicionado. Usted puede, enviando las seales apropiadas
desde el BASIC Stamp, hacer rotar al servo a un punto especfico y
ste quedarse ah. Los servos poseen un conector para 3 cables: Uno
de alimentacin, uno de tierra y el cable de control. El tipo de servo
que ser utilizado en este captulo, es construido por la casa FUTABA
y fue diseado originalmente para ser usado en aviones, botes, autos
a radio control y microbots. Figura No. 11.3: Fotografa de un servomotor.
Fuente: www.parallax.com.
Un servomotor opera comparando el ancho del pulso de entrada (Control) con el ancho del pulso producido
por un temporizador (timer) interno. A su vez, el periodo de este temporizador est controlado por un
potencimetro acoplado al eje del motor. La diferencia entre ambos anchos de pulsos es utilizada como
error de posicin del circuito controlador interno. El circuito de control del servomotor, se debe encargar de
determinar la direccin en la que se debe girar el motor para minimizar dicho error. Luego que la accin ha
sido tomada, el motor gira modificando la posicin del potencimetro de retroalimentacin, al llegar el
siguiente pulso se vuelve a realizar la comparacin y esto se realizar en forma indefinida hasta que el error
de posicin sea mnimo o cero.
1 ms 1.5 ms 2 ms
Para controlar la posicin del servomotor, debe envirsele una serie de pulsos. El tiempo en alto o activo
(ON) de esta serie de pulsos, determina el ngulo del movimiento deseado. La longitud de este pulso vara
tpicamente entre 1 ms y 2 ms, como se aprecia en la figura No. 11.5. Con una seal de 1 ms el servomotor
se posiciona a 0 (en un extremo) y con 2ms alcanzar el ngulo mximo, el extremo opuesto. Con una
seal de 1.5 ms el servomotor se detendr en el centro del recorrido. En la prctica, a estos motores se les
pueden aplicar anchos de pulsos que abarcan entre entre 0.5 ms y 2.5 ms. Ello por supuesto depender de
las especificaciones que nos indique el fabricante.
El tiempo en bajo o apagado (OFF) de la seal no es tan crtico y suele estar comprendido entre 10 ms y 30
ms. En algunos servomotores se cumple que, si el tiempo entre pulsos es mayor de 50 ms, el circuito de
control podra entrar en modo SLEEP (bajo consumo de energa) ocasionando un comportamiento errtico.
La figura No. 11.6, muestra el esquema interno tpico de un servomotor. En este se aprecia el potencimetro
que permite conocer la posicin angular actual, el motor DC, el circuito de control, los engranajes internos y
los cables de alimentacin y control.
Cubierta Superior
Engranajes
Eje
Cubierta
Potencimetro
Motor DC
Circuito de control
Cubierta
Inferior
Tornillos
MOTOR DE PASOS
El motor de pasos llamado tambin Stepper Motor, es un motor que se
alimenta de tensin continua (DC) y convierte los pulsos elctricos aplicados en
sus bobinas en movimientos rotacionales discretos. Pueden girar
continuamente o slo un ngulo llamado paso o step. Debido a que
resultan muy precisos y confiables, se emplean comnmente en
aplicaciones donde el posicionamiento mecnico resulta ser muy
importante. Son ideales cuando se tiene que girar un eje y detenerlo en cierta
posicin con una precisin de hasta centsimas de milmetros. En sta posicin
puede permanecer bloqueado (o no), hasta recibir una nueva orden de giro
Una de sus principales ventajas es que no necesitan de sensores para
determinar la posicin del eje, ya que se conoce la posicin por la secuencia de
pulsos que se han enviado a las bobinas.
Bsicamente, stos motores tienen un rotor, sobre el que van aplicados distintos imanes permanentes y un
estator, compuesto por bobinas excitadoras arrolladas en forma independiente. Los motores de pasos
pueden ser vistos como motores elctricos sin conmutadores. Toda la conmutacin (o excitacin de las
bobinas) debe ser manejada externamente por un circuito controlador o driver. Los motores de paso son
lentos si los comparamos con un motor DC convencional y en general podemos decir que existen los
siguientes tipos: De imn permanente y de reluctancia variable.
IMN PERMANENTE: En los motores de paso de imn permanente, el rotor es un imn fuertemente
magnetizado que puede girar en el interior del estator y que se alinear con el campo magntico creado por
la bobina del estator que est alimentada en un instante de tiempo. Se clasifican en Unipolares y Bipolares.
Com n
1 1
UNIPOLARES: Estos suelen tener 5 6 cables de salida,
dependiendo de su conexin interna. Son fciles de
controlar, su caracterstica principal es poseer una toma
(TAP) central que se conecta al positivo de la fuente de
alimentacin.
2 2
El accionamiento del motor, se produce por la atraccin generada entre el estator y uno de los dientes del
rotor para disminuir la reluctancia del circuito magntico. En la figura No. 11.10.A, se observa que al
energizar la bobina B1, se producir en ella un campo magntico y el diente D1, que se encuentra cercano a
B1, se alinear con este campo. En la figura No. 11.10.B puede verse lo que ocurre al energizar a la bobina
B2. En este caso, el diente que se encuentra ms cercano al campo ser D2, por lo tanto se producir una
rotacin en sentido anti-horario hasta que el rotor alcance la posicin mostrada.
-
i
D3
D3
B3 B2 +
B3 D2 B2
D4
D2
D1 D4
D1
+
i
B1
B1
Figura No. 11.10(A)(B):
-
Motor de reluctancia variable.
Fuente: Revista Robots, Pg MO-
A B
03, ao 2003.
Especificaciones tcnicas del motor de pasos unipolar de imn permanente utilizado en este
captulo:
Este procedimiento es de mucha utilidad cuando no tenemos la hoja tcnica de especificaciones de un motor
de pasos y/o no sabemos que conductor est asociado a cada bobina. El procedimiento es simple siempre y
cuando se sigan los siguientes pasos: Primero, aplicamos un voltaje positivo +VDC al cable comn que
previamente ya se ha identificado con un tester (es el conductor con menos resistencia de todos). Segundo,
escogemos otro cable al azar y lo colocamos a tierra. Tercero, con los cables restantes, escogemos slo uno
de ellos a la vez y lo conectamos a tierra, observamos el movimiento del rotor al hacer la conexin y
concluimos en base a lo indicado en la figura No. 11.12.
En un motor de pasos, la secuencia con la cual se alimentan las bobinas determina las caractersticas del
funcionamiento del motor en cuanto a su velocidad, torque y ngulo de desplazamiento. En general existen
tres formas diferentes o secuencias de operacin, las cuales llamaremos: Una Bobina (Wave Drive), Dos
Bobinas (Normal) y Medio Paso.
PULSOUT
Genera un pulso de una duracin especificada en un terminal de E/S.
Pin: Es una variable, constante o expresin de (0 - 15) que indica cual terminal de E/S ser
utilizado, el mismo ser convertido en salida.
Duracin: Es una variable, constante o expresin de (0-65535) que especifica la cantidad de
unidades de tiempo que durar el pulso. La equivalencia del valor de Duracin al tiempo de
duracin del pulso est determinada por la base tiempo de BASIC Stamp, que para el BS2p es de
0.75s.
El funcionamiento de esta instruccin es el siguiente:
Convierte al terminal Pin en salida
Invierte el estado lgico de Pin
Espera en la condicin anterior el tiempo definido por Duracin * Unidad de tiempo
Invierte nuevamente el estado de Pin para retornarlo a su estado inicial
El sistema de desarrollo MDK-B28, cuenta con un circuito integrado ULN2003AN, el cual, es utilizado como
amplificador de potencia y permite al microcontrolador BASIC Stamp 2p manejar cargas relativamente
elevadas como un motor de pasos o un relay. El ULN2003AN posee un encapsulado DIP 16 con 7 entradas,
7 salidas, 1 punto de conexin comn y un terminal de referencia (tierra) distribuidos como se muestra en la
figura No. 11.14. Cada salida de este dispositivo puede manejar una corriente mxima de 500 mA. Cuando
se utiliza ms de una salida, deber tenerse la precaucin de no exceder los lmites establecidos en la figura
No. 11.16. En el sistema de desarrollo MDK-B28 las entradas del ULN2003AN se han conectado a los
terminales P8 a P14 del microcontrolador, ver figura No. 11.14 y se encuentran disponibles en el terminal de
conexiones de 8 puntos identificado como CN4.
Objetivo: Utilizar al BASIC Stamp 2p, para variar la velocidad de un motor DC.
Elementos a Utilizar
'Programa 11_1.bsp
'Este programa muestra como variar la velocidad de un motor DC por medio de la
'modulacin del ancho del pulso, utilizando el comando PWM.
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
Maximo CON 255 'Velocidad mxima
Minimo CON 0 'Velocidad mnima
Paso CON 50 'Paso entre los incrementos de velocidad
Duracion CON 6 'Veces que se repite la inst. PWM durante 1 seg
DCMotor PIN 12 'Terminal donde se conecta el motor
Velocidad VAR Byte 'Establece la velocidad de giro
Veces VAR Nib 'Controla el tiempo que el motor permanece en una velocidad
'___________________________________________________________________________________
'Programa Principal
DO
FOR Velocidad = Minimo TO Maximo STEP Paso 'Incrementa la velocidad desde el
FOR Veces = 0 TO Duracion 'valor mnimo hasta el valor mximo
PWM DCMotor,Velocidad,255 'en pasos que duran 1s
NEXT
NEXT
Una forma muy comn de variar la velocidad de los motores DC es por medio de la modulacin de ancho de
pulso (PWM). En este ejemplo, se ha utilizado la instruccin PWM del BS2p. En el programa 11_1.bsp se
hace variar el parmetro Ciclo Util de la instruccin PWM, con ello se modifica el voltaje efectivo aplicado a
la armadura del motor produciendo entonces un cambio en su velocidad.
Modifique la constante Minimo colocndola en un valor igual a 100 y observe el resultado. En gran
cantidad de aplicaciones se requerir del control de la velocidad del motor. El ejemplo del programa
11_2.bsp, utiliza un potencimetro, un condensador y el conocido comando RCTime para implementar un
control a lazo abierto de sta variable. Antes de ejecutarlo, anexe al montaje anterior, el circuito de la figura
No. 11.21.
Figura No. 11.21: Circuito RC utilizado para controlar la velocidad del motor.
Fuente: Elaboracin Propia.
'Programa 11_2.bsp
'Este programa muestra como efectuar un control a lazo abierto de la velocidad de
'un motor DC, utilizando un potencimetro y el comando RCTIME.
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Programa Principal
HIGH ControlPin 'Terminal de control en alto
PAUSE 20 'Carga del condensador
RCTIME ControlPin,1,Vel_Ini 'Posicin inicial del potencimetro
DO
HIGH ControlPin 'Terminal de control en alto
PWM DCMotor,Velocidad,255 'Carga del condensador y generar la PWM
RCTIME ControlPin,1,Velocidad 'Medicin del valor de la resistencia
Velocidad = ABS((Vel_Ini-Velocidad)/13) 'Ajuste para escalar de 0 a 255
LOOP
Objetivo: Utilizar al BASIC Stamp 2p para controlar el posicionamiento y el sentido de giro de un servomotor.
Figura No. 11.22: Esquema de conexiones de un Figura No. 11.23: Fotografa del montaje para el
servomotor con el sistema de desarrollo MDK-B28. ejercicio # 2.
Fuente: Elaboracin Propia. Fuente: Elaboracin Propia.
'Programa 11_3.bsp
'Este programa tiene por objetivo utilizar el comando PULSOUT para posicionar
'el eje del Servomotor a 0,90 y 180
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
'Programa Principal
'___________________________________________________________________________________
Inicio:
LOW Salida
DO
FOR i=0 TO 100
PULSOUT Salida,740 'Colocar el eje del servomotor en el extremo derecho
PAUSE 20 'de su rotacin. Tiempo en estado bajo de la seal
NEXT
PAUSE 500 'Esperar 0.5 segundos antes de cambiar de posicin
FOR i=0 TO 100
PULSOUT Salida,1820 'Colocar el eje del servomotor en la posicin central
PAUSE 20 'Tiempo en estado bajo de la seal
NEXT
LOOP
Experimentalmente, se comprob que el valor del ancho del pulso requerido para colocar al servomotor en
la posicin inicial a un ngulo de 180 grados (rotacin completa a la derecha), equivale a 740 unidades del
comando PULSOUT. Como el BASIC Stamp 2p utiliza para esta instruccin una base de tiempo de 0.75s,
el ancho del tren de pulsos es de aproximadamente 0.555 ms. De manera similar, para colocar el eje del
motor en la posicin de 90 grados (en el centro del recorrido), se debi enviar un pulso de 1.36 ms,
mientras que para alcanzar un ngulo de cero grados (rotacin completa a la izquierda) se requiere de un
pulso de 2.21 ms. Estos valores estn dentro de los rangos de rotacin indicados en la figura No. 11.5. y
difieren dependiendo del fabricante, calidad y precio del servomotor.
Un servomotor puede ser conectado en cualquiera de los terminales de E/S del BASIC Stamp, sin la
necesidad de disponer de un driver o una interfaz de potencia entre ambos dispositivos. Sin embargo, es
necesario colocar un condensador electroltico de capacidad relativamente elevada 2200 3300 f. en
paralelo con los terminales de alimentacin del servomotor. Este condensador acta como un reservorio de
carga elctrica y aporta parte de la elevada corriente transitoria que consume el servomotor cuando inicia su
movimiento. De no emplearse el condensador, la fuente de alimentacin deber suplir la cantidad de
corriente demandada por el servomotor completamente, pues de no hacerlo, se producir una cada de
tensin capaz de incluso ocasionar un reset del microcontrolador. Los servomotores se utilizan comnmente
para abrir o cerrar vlvulas, en brazos robticos, microbots y pequeos automatismos como el que se
desarrolla en el ejercicio # 3.
Objetivo: Utilizar al microcontrolador BASIC Stamp y un servomotor para simular el comportamiento de una puerta automtica.
Elementos a Utilizar
Mantenga el servomotor conectado al terminal P12
como se indica en la figura No. 11.22, y arme el circuito
que se muestra en la figura No. 11.24. Descargue el
(1) BASIC Stamp 2p.
(1) Servomotor Standard Parallax.
programa 11_4.bsp al BASIC Stamp. Posteriormente
(1) Condensador de: 2200uF, 1uF x . perturbe el nivel de iluminacin que incide sobre la
(1) Fotorresistencia de 4.7 KOhms. fotorresistencia del sistema de desarrollo MDK-B28
(1) Cable de programacin. colocando su mano sobre la misma. Observe la
(1) StampW (v2.0 beta 2.1 o superior).
respuesta del servomotor.
'Programa 11_4.bsp
'Este programa simula la automatizacin de una puerta mediante el movimiento del eje
'de un servomotor utilizando un sensor foto-resistivo.
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
X VAR Word
'Almacena el nivel de iluminacin detectado
Vinit VAR Word
'Nivel de iluminacin que existe cuando la puerta
'deba estar cerrada
i VAR Byte 'Variable de uso general
'___________________________________________________________________________________
'Programa Principal
Inicio:
HIGH SPuerta
PAUSE 10
RCTIME SPuerta,1,Vinit 'Determina el nivel de iluminacin existente cuando no
Vinit = Vinit */ $0126 'hay personas. Especifica un margen de 15% para abrir
DO
HIGH SPuerta
PAUSE 10
RCTIME SPuerta,1,X 'Determina el nivel de iluminacin para saber si se debe
IF (Vinit>X) OR X=0 THEN 'o no abrir la puerta
PULSOUT Salida,Cerrar 'Generar el tren de pulsos para cerrar (giro a la der.)
ELSE
FOR i = 0 TO 100
PULSOUT Salida,Abrir 'Abrir completamente la puerta (giro izq.)
PAUSE 25
NEXT
PAUSE 3000 'Esperar 3 seg para que la persona pase
ENDIF
PAUSE 25
LOOP
Objetivo: Utilizar al BASIC Stamp para controlar la posicin del servomotor desde el computador por medio de una interfaz grfica
creada con el software STAMP Plot Pro.
Elementos a Utilizar
En este ejercicio, el ngulo de giro deseado ser
(1) BASIC Stamp 2p. introducido por medio de una interfaz grfica
(1) Servomotor Standard Parallax. desarrollada con el StampPlot Pro. El BASIC Stamp,
(1) Cable serial DB9. estar en continua comunicacin con el computador,
(1) Programa StampPlot V3 (rev 1.6 o superior).
(1) StampW (v2.0 beta 2.1 o superior). solicitndole el valor del ngulo de giro del motor.
Para lograr posicionar el eje del servomotor en un ngulo especfico, se puede asumir una relacin lineal
entre el ancho del pulso y el ngulo de giro del eje del servomotor. Bajo esta premisa, se puede aplicar una
simple regla de tres o la ecuacin de una recta para determinar el argumento del comando PULSOUT, que
permite posicionar al servomotor en el ngulo deseado.
Transcriba el siguiente macro y gurdelo con el nombre Macro_11_5.spm en la carpeta Macro del STAMP
Plot Pro. Nota: Esta carpeta se encuentra localizada en el directorio: \Archivos de programa\
StampPlotPro_V3\Macro.
Inicio:
!POBJ Clear
'LIMPIAR AREA DE OBJETOS
!NEWP 'NUEVA GRAFICA
!PPER 65,65 'DIVIDIR AREA DE GRAFICA Y OBJETOS EN 65%X y 65%Y
!COLR B15,G15,S15 'DEFINIR COLORES DEL AREA DE GRAFICACION
'INDICADOR ************************************************************************
'CREA UN INDICADOR DE AGUJA PARA MOSTRAR LA POSICION DEL SERVO
@RECT 16a,15a,80a,78a,0 'CUADRO DE FONDO
@TEXT 35a,20a,2,0,POSICION
@TEXT 20a,21a,2,0,0 g
@TEXT 71a,21a,2,0,180 g
@FPIE 48a,28a,22a,-2,182,7 'DIBUJA UN SEMICIRCULO GRIS
@FPIE 48a,28a,2a ,-2,182,0 'EJE DEL INDICADOR
@DPIE 48a,28a,22a,-2,182,0
'BORDE DEL INDICADOR
'ETIQUETAS *************************************************************************
'ETIQUETA PARA EL CUADRO DE TEXTO
!POBJ oLabel.etiqu1=67,98,30,6, POSICIONES DEL EJE,7,0,10,1
!POBJ etiqu1.F=Tahoma,16,0,0 'FUENTE UTILIZADA
'EVENTOS ***************************************************************************
!POBJ Pos.C=!MATH %m10=((ME))
'GUARDAR EN %m10 EL VALOR DEL SLIDER CUANDO ESTE CAMBIE
'RUTINAS ***************************************************************************
Descargue ahora el programa 11_5.bsp y ejectelo. Cierre el debug terminal que el editor de PBASIC ha
abierto e inicie el StampPlot Pro V3. Conecte el StampPlot al puerto de comunicaciones del PC. Oprima el
pulsador de reset del sistema de desarrollo MDK-B28 para reiniciar al BASIC Stamp. Al hacer esto, aparecer
en el StampPlot la interfaz creada para este ejercicio, ver la figura No. 11.25.
'Programa 11_5.bsp
'Este programa se utiliza en conjunto con el macro Macro_11_5.spm para controlar la
'posicin de un Servomotor por medio de una interfaz grfica (GUI) elaborada con el
'software StampPlot Pro.
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
SINPin CON 16 'Terminal SIN (2) del BASIC Stamp
Baudios CON 240 'No-Invertido, 9600 bsp, sin paridad
Tiempo_Espera CON 1250 'Tiempo de espera cuando se piden datos al StampPlot
PAUSE 500
DEBUG "!MACR Macro_11_5.Inicio",CR 'Ejecutar el segmento de
Inicio: 'inicializacin del macro
LOW ServoPin
DO
Leer_Pos:
DEBUG "!READ %m10",CR
SERIN SINPin, Baudios, Tiempo_Espera , Leer_Pos, [DEC Pos_Act]
PAUSE 250 'Leer el valor de la variable %m10
'del StampPlot Pro
IF Pos_Act <> Pos_Ant THEN 'Si la posicin ha cambiado,
DEBUG "!MACR .Actualizar,",DEC Pos_Act,CR 'Actualizar el indicador de posicin
DEBUG "!POBJ Texto2.Add=A las (RTIME) el valor es: ",DEC Pos_Act,"\n",CR
Pos=(12*(180-Pos_Act))+740 'Clculo del ancho de los pulsos
FOR i=0 TO 100 'Generar el tren de pulsos
PULSOUT ServoPin,Pos : PAUSE 20
NEXT
Pos_Ant = Pos_Act
ENDIF
LOOP
El programa 11_5.bsp, es sencillo. Podemos resumir que las acciones que realiza son las siguientes:
Vare la posicin de la barra de desplazamiento (slider) y observe como el motor gira hasta el ngulo
deseado. El medidor colocado en rea central de graficacin, muestra una representacin grfica de la
posicin a la que se ha llevado al servomotor. Este indicador ha sido construido dibujando cuadros y
semicrculos y se actualiza cada vez que se ejecuta la rutina Actualizar del macro.
Objetivos: Identificar los terminales de conexin de las bobinas de un motor de pasos unipolar. Elaborar un programa en PBASIC que
permita controlar el sentido de giro de un motor de pasos.
Comn
1 4 1 4
Comn Comn
3 2 3 2
Figura No. 11.26: Esquemas elctricos de un motor de pasos unipolar de 5 (izquierda) y de 6 (derecha) cables.
Fuente: Elaboracin Propia.
Conecte uno de los cables restantes a tierra, si el motor intenta girar en el sentido de las agujas
del reloj (giro CW), este ser el Cable No. 4, ver la figura No. 11.27C.
El conductor que no produzca movimiento alguno, ser el Cable No.3, ver la figura 11.27D.
1 1 1 1
2 4 2 4 2 4 2 4
3 3 3 3
A B C D
Figura No. 11.27: Identificacin de las bobinas de un motor de pasos unipolar.
Fuente: Elaboracin Propia.
Presione alternadamente los pulsadores PB1, PB2 y verifique el funcionamiento del programa. Con ambos
pulsadores liberados, intente rotar el eje del motor y observe lo que sucede.
'Programa 11_6.bsp
'Este programa hace rotar a un motor de pasos unipolar de acuerdo al estado de dos
'pulsadores. Para efectuar la rotacin se utiliza la secuencia "Wave Drive"
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
Bobina1 CON %0001 'Energizar bobina # 1
Bobina2 CON %0010 'Energizar bobina # 2
Bobina3 CON %0100 'Energizar bobina # 3
Bobina4 CON %1000 'Energizar bobina # 4
Velocidad CON 5 'Velocidad de giro
PB1 PIN 0 'Pulsador PB1
PB2 PIN 1 'Pulsador PB2
Objetivo: Desarrollar una interfaz grfica por medio del StampPlot Pro, que le permita al usuario cambiar la velocidad, el sentido de
giro, el ngulo de rotacin y la secuencia de operacin del motor de pasos.
Elementos a Utilizar
Transcriba el macro que se muestra a continuacin y
(1) BASIC Stamp 2p. gurdelo con el nombre Macro_11_7.spm en el
(1) ULN2003AN (Driver de potencia de 7 canales). directorio Macro del directorio de instalacin del
(1) Motor de Pasos Unipolar. programa StampPlot Pro. Es importante que respete la
(1) Cable de programacin DB9. tamp
ubicacin del archivo, pues ste es inicializado desde el
(1) Programa StampPlot V3 (rev 1.6 o superior).
(1) StampW (v2.0 beta 2.1 o superior). microcontrolador.
'MACRO_11_7.SPM
'ESTE MACRO ES UTILIZADO JUNTO AL PROGRAMA 11_7.BSP A FIN DE MANEJAR A UN MOTOR DE
'PASOS. LA INTERFAZ GRAFICA, PERMITE MODIFICAR POR MEDIO DE SLIDERS LA POSICION Y
'LA VELOCIDAD DE GIRO DEL MOTOR. ADEMAS SE PUEDE HACER FUNCIONAR AL MOTOR CON
'DIFERENTES SECUENCIAS DE PASO, EN SENTIDO HORARIO Y ANTI-HORARIO.
'RUTINAS ***************************************************************************
Iniciar_Ventana:
!POBJ Clear
!NEWP 'CREA UNA NUEVA GRAFICA
!MENU OFF 'DESHABILITAR BARRA DE MENU
!TBAR OFF 'DESHABILITAR BARRA DE HERRAMIENTAS
!PPER 50,100 'DEFINE EL AREA UTILIZADA POR LOS OBJETOS Y PARA LA
'GRAFICACION
!TITL Motor de Paso
ENDMAC
'----------------------------------------------------------------------------------
Iniciar_Grafica:
!RSET 'RESET DE LA GRAFICA
!PLOT ON 'INICIAR GRAFICACION
!SPAN -180,180 'VALORES MAXIMO Y MINIMO DEL EJE VERTICAL
!TMAX 50 'TIEMPO MAXIMO EN EL EJE VERTICAL
!YLBL POSICION
'TITULO DEL EJE VERTICAL
!XLBL TIEMPO
'TITULO DEL EJE HORIZONTAL
!SHFT ON 'HABILITAR EL DESPLAZAMIENTO DEL 35 % DE LA GRAFICA
!PAMT 35 'CUANDO SE LLEGA AL MAXIMO DE TIEMPO
!ECHO ON
ENDMAC
'---------------------------------------------------------------------------------
Iniciar_Variables:
!MATH %m10=1 '%m10 CONTIENE LA SECUENCIA DE OPERACION ELEGIDA
!MATH %m11=1 '%m11 CONTIENE EL SENTIDO DE GIRO SELECCIONADO
!MATH %m12=0 '%m12 DETERMINA LA POSICION QUE ALCANZARA EL MOTOR
!MATH %m13=1 '%m13 ALMACENA LA VELOCIDAD DE ROTACION
!MATH %m14=0 '%m14 ALMACENA EL ESTADO DEL INTERRUPTOR QUE ENCIENDE
'AL MOTOR
!POBJ List1.Set=WAVE DRIVE
!POBJ List2.Set=GIRO ANTIHORARIO
ENDMAC
'---------------------------------------------------------------------------------
'ESTA RUTINA DEFINE A TODAS LAS ETIQUETAS QUE USAN UNA FUENTE TAHOMA DE 10 PTOS
Fuente:
!POBJ Label1.F=Tahoma,10,1,0
!POBJ Label2.F=Tahoma,10,1,0
!POBJ Label3.F=Tahoma,10,1,0
!POBJ Label4.F=Tahoma,10,1,0
!POBJ Label5.F=Tahoma,10,1,0
!POBJ Label6.F=Tahoma,10,1,0
!POBJ Label7.F=Tahoma,10,1,0
!POBJ Label8.F=Tahoma,10,1,0
!POBJ Label9.F=Tahoma,10,1,0
!POBJ Label10.F=Tahoma,10,1,0
ENDMAC
'---------------------------------------------------------------------------------
Declarar_Objetos:
'LISTAS **************************************************************************
'DEFINICION DEL SLIDER UTILIZADO PARA CONTROLAR LA POSICION ENTRE 0 Y 360 GRADOS
!POBJ oHSlider.sld1=51,50,47,10,0,360,0
!POBJ sld1.Tip=Seleccione el Angulo!
!POBJ oLabel.Label3=60,58,30,8,ELIJA ANGULO DE GIRO,7,0,10,0
!POBJ oLabel.Label4=38,40,30,8,0,7,0,8,0
!POBJ oLabel.Label5=81,40,30,8,360,7,0,8,0
'BANNERS ************************************************************************
'INTERRUPTOR ********************************************************************
'UTILIZA UN OBJETO TIPO BOTON CON IMAGEN PARA CREAR EL SW. QUE ENCIENDE AL MOTOR
'EVENTOS *************************************************************************
'CODIGO QUE SE EJECUTA AL PRESIONAR EL BOTON DERECHO DEL RATON SOBRE LA LISTA
'List1. DEFINE QUE LA OPCION SELECCIONADA SE ALMACENE EN %m10 y SE MUESTRE EN UN
'CUADRO DE MENSAJES
!POBJ List1.Code=!MATH %m10=(List1.I) (ER) !UMSG 2,Eligio la secuencia ((ME))
Al ejecutarse ste macro se crea una interfaz como la mostrada en la figura No. 11.30. Sin entrar en detalles
acerca del funcionamiento de cada una de las instrucciones del macro, podemos explicar muy brevemente
que:
'Programa 11_7.bsp
'Este programa muestra como efectuar con el Motor de Pasos las siguientes acciones:
'1) Operar en las secuencias Wave Drive, Normal y Medio Paso.
'2) Girar sentido Horario o Anti-horario.
'3) Variar la velocidad de Rotacin
'Debe usarse en conjunto con el MACRO_11_7.spm que contiene la interfaz de control
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
Bob_1 CON %0001 'Bobina 1 energizada
Bob_2 CON %0010 'Bobina 2 energizada
Bob_3 CON %0100 'Bobina 3 energizada
Bob_4 CON %1000 'Bobina 4 energizada
Bob_1_2 CON %0011 'Bobinas 1 y 2 energizadas
Bob_2_3 CON %0110 'Bobinas 2 y 3 energizadas
Bob_3_4 CON %1100 'Bobinas 3 y 4 energizadas
Bob_4_1 CON %1001 'Bobinas 4 y 1 energizadas
Tiempo CON 50 'Constante utilizada para variar la velocidad
WaveDrive CON 1 'Seleccin del modo de operacin Wave Drive en la interfaz
Normal CON 2 'Seleccin del modo de operacin Normal en la interfaz
MedioPaso CON 3 'Seleccin del modo de operacin Medio Paso en la interfaz
AntiHor CON 1 'Giro en sentido contrario al de las agujas del reloj (CCW)
Horario CON 2 'Giro en sentido de las agujas del reloj (CW)
SINPin CON 16 'Terminal SIN (2) del BASIC Stamp
Baudios CON 240 'Normal, 9600 bsp, sin paridad
Espera CON 1250 'Tiempo de espera cuando se piden datos al StampPlot
Pos VAR Word 'Posicin angular en grados
Angulo VAR Word 'ngulo de giro en grados (0-360)
I VAR Byte 'Contador de la cantidad de pasos efectuados
Pasos VAR Byte 'Cantidad de pasos de 3.6 que efectuar el motor
Vel VAR Byte 'Velocidad de giro
UltBob VAR Nib 'Variable de uso general
Secuencia VAR Nib 'Secuencia de operacin seleccionada
Sentido VAR Nib 'Sentido de giro escogido
Switch VAR Bit 'Estado del interruptor en la interfaz
'___________________________________________________________________________________
'Programa Principal
DIRC = $F 'Definicin de los terminales P8,P9,P10 y P11 como salidas
DEBUG "!MACR Macro_11_7.Inicio",CR 'Llamada a la rutina de inicializacin del Macro
PAUSE 3000
'===================================================================================
'SUBRUTINAS
'La rutina Leer_Valores lee las var. internas %m10,%m11,%m12 y %m13 del STAMP Plot
Leer_Valores:
Leer_Secuencia:
DEBUG "!READ %m10",CR 'Leer Secuencia
SERIN SINPin,Baudios,Espera,Leer_Secuencia,[DEC Secuencia] : PAUSE 250
Leer_Sentido:
DEBUG "!READ %m11",CR 'Leer Sentido
SERIN SINPin, Baudios, Espera , Leer_Sentido,[DEC Sentido] : PAUSE 250
Leer_Angulo:
DEBUG "!READ %m12",CR 'Leer ngulo de desplazamiento
SERIN SINPin, Baudios, Espera , Leer_Angulo, [DEC Angulo] : PAUSE 250
Leer_Vel:
DEBUG "!READ %m13",CR 'Leer Velocidad de giro
SERIN SINPin, Baudios, Espera , Leer_Vel, [DEC Vel ] : PAUSE 250
RETURN
Despus de descargar el programa 11_7.bsp, inicialice el software StampPlot Pro de la manera habitual y
conecte el puerto de comunicaciones correspondiente. Presione el pulsador RESET del sistema de desarrollo
MDK-B28. La interfaz grfica como se muestra en la figura No. 11.30 deber desplegarse en la ventana del
STAMP Plot Pro.
En realidad, no se est dividiendo entre 3.6 sino multiplicando por su inverso es decir 0.278.
Programacin
Captulo No. 12
Comunicacin serial sincrnica I2C
Introduccin. I2C es un bus de comunicacin serial sincrnica desarrollado por Phillips Semiconductors a principios de los aos 80s.
Este bus se cre con la finalidad de reducir la complejidad del cableado interno encontrado en las tarjetas electrnicas de equipos
digitales de radio y TV. Actualmente, su uso se ha extendido a innumerables aplicaciones en el rea digital, hecho que lo convierte, en
uno de los ms populares estndares de comunicacin serial sincrnica. En ste captulo, se exploran las caractersticas del bus I2C y
del protocolo de transferencia de datos asociado a l, orientndolo todo a la implementacin de un maestro I2C con el microcontrolador
BASIC Stamp, que utilice y configure los dispositivos esclavos I2C disponibles en el sistema de desarrollo MDK-B28.
Una de las principales razones, para que el estudio del bus I2C sea un punto obligatorio en la capacitacin
de un estudiante en el desarrollo de aplicaciones con microcontroladores, es la gran variedad de productos y
fabricantes que producen circuitos integrados con esta tecnologa. Entre los que se pueden citar: Phillips,
National, Xicor, Siemens y Dallas-Maxim Semiconductors. El trmico I2C es una simplificacin comercial y
prctica, su nombre real es Inter-Integrated Circuit bus, es decir, bus de interconexin de circuitos
integrados. Entre las caractersticas ms relevantes de este bus se encuentran:
RECONOCIMIENTO
Luego de transmitirse cada byte, es obligatoria la generacin de un bit adicional de reconocimiento (ACK)
que indica al dispositivo maestro que el esclavo ha recibido el byte. Luego de enviar los ocho bits de datos y
sus correspondientes pulsos de reloj, el maestro (transmisor) debe dejar el terminal SDA en alta impedancia,
con lo cual, asumir un estado lgico alto. En este momento y antes de que ocurra el prximo pulso de reloj,
el esclavo debe forzar la lnea SDA a nivel bajo, as que, cuando el maestro genere el pulso en SCL
correspondiente al bit de reconocimiento, la lnea SDA se encuentra en (0) indicando la recepcin del byte.
Cuando el esclavo no puede generar el bit de reconocimiento (SDA permanece en estado alto al producirse
el noveno pulso), el maestro deber detener la transferencia generando una condicin de STOP o producir
una condicin de START repetida para comenzar una nueva transferencia. Cuando el maestro se encuentra
recibiendo datos provenientes de un esclavo, ser l quien deba generar el bit de reconocimiento y le
indicar al esclavo si debe o no dejar de enviar bytes, al colocar a SDA en estado bajo o alto segn sea el
caso.
Una vez que el maestro genera la condicin de inicio, el primer grupo de ocho bits enviado es el byte de
control o de direccionamiento, el formato de ste se muestra en la figura No. 12.4. Los siete primeros bits
definen la direccin del esclavo con el que se desea establecer la comunicacin, mientras que el octavo bit
indica la accin a efectuar. Este bit (llamado R/W) define si la operacin a efectuar es una lectura (si es un 0
lgico) o una escritura (si es un 1 lgico). Cuando una direccin es enviada, cada esclavo del bus la recibe y
la compara con su direccin de identificacin, si ambas coinciden el esclavo se considera direccionado como
un esclavo-transmisor o como esclavo-receptor dependiendo del valor lgico del bit R/W.
Todas las transferencias de informacin terminan con una condicin de parada generada por el maestro.
Despus de esto, si el maestro an desea comunicarse dentro del bus, puede generar una nueva condicin
de inicio (llamada SR o START Repeated ) y direccionar a cualquiera de los esclavos del bus sin haber
generado una condicin de parada. Esta posibilidad hace que sobre el bus se definan tres formatos de
transferencia de informacin:
de control), el maestro debe configurarse como receptor, ya que el esclavo se comportar a partir
de este momento como trasmisor. Una vez que el esclavo comienza a transmitir, ser entonces el
maestro quien deba producir la seal activa baja de reconocimiento (ACK). Para detener la
transferencia, el maestro enva una seal de no reconocimiento (deja a SDA en estado alto) y luego
genera la condicin de parada.
CARACTERSTICAS ELCTRICAS
El bus I2C permite la conexin entre dispositivos de diversas tecnologas que utilizan diferentes voltajes de
alimentacin. Para dispositivos con voltajes de entrada fijos que operan con una alimentacin de 5 V (10%),
como en el caso del bus I2C del sistema MDK-B28, se han definido los siguientes valores:
VIL = 1.5 V (tensin mxima de entrada que se considera como estado bajo o 0).
VIH = 3 V (tensin mnima de entrada que se considera como estado alto o 1).
Al comparar al I2C con los buses estudiados en captulos anteriores (SPI y 3-Wire), podemos encontrar que
existen ventajas y desventajas en torno a cual utilizar dependiendo de la aplicacin, pudiendo decir entonces
que:
En un Bus I2C, no existe una seal de seleccin de dispositivo, as que el bus se compone slo de
dos lneas (ms un conductor de tierra o referencia). An ms importante que la reduccin del
conductor, es que esto facilita la incorporacin o retiro de dispositivos del bus sin efectuar cambios
en el hardware del mismo.
Las transferencias de informacin estn limitadas por condiciones de inicio y parada ms no por bits
de arranque y fin.
Existe un medio de direccionamiento para identificar a cada dispositivo esclavo conectado al bus.
Ningn esclavo puede responder ante una informacin enviada a una direccin que no le
corresponda.
Es naturalmente half-duplex, por lo cual, la tasa de transferencia de datos es significativamente
menor que las alcanzadas con SPI o 3-Wire.
El bus de dispositivos I2C del sistema de desarrollo MDK-B28, incluye a dos dispositivos:
En la figura No. 12.8, puede observarse la ubicacin de los mismos componentes en el sistema de
desarrollo.
MEMORIA EEPROM
La memoria 24LC04B fabricada por Microchip, tiene una
capacidad de almacenamiento de 4Kbits (512 bytes) y se
encuentra dividida en dos bancos (denominados banco 0 y
banco 1) de 256 bytes cada uno. Como en todas las memorias
de la familia 24XXXX, la direccin de los esclavos comienza con
1010. Para el caso de la memoria del sistema MDK-B28, los
siguientes dos bits no tienen significado (por lo cual no importa
el valor que se les asigne) y el ltimo bit define el banco de
trabajo. As que el formado del byte de control para esta
Figura No. 12.8: Dispositivos I2C ubicados
memoria ser el mostrado en la figura No. 12.9. en el sistema de desarrollo MDK-B28.
Fuente: Elaboracin Propia.
Este modelo especfico de memoria EEPROM, slo permite la utilizacin de una memoria sobre el bus al no
tener direcciones determinadas por hardware. El bit B0 del byte de control corresponde entonces al MSB de
la direccin a leer o escribir as que se puede tener acceso a los 512 bytes de la memoria, simplemente con
configurar correctamente a B0 y especificando los restantes bits de la localidad deseada, inmediatamente
despus del byte de control. El formato bsico para la escritura en la memoria se muestra en la figura No.
12.10. Este es el mtodo de escritura por bytes.
Cada banco de la memoria 24LC04B se compone de 8 pginas de 16 bytes cada una. Cuando se requiere
transferir volmenes considerables de informacin, la escritura de bytes resulta ser bastante ineficiente, pero
la escritura por pginas (ver figura No. 12.11) mejora notablemente el rendimiento.
Para escribir varios bytes en la memoria, bastar con enviarlos uno a continuacin del otro antes de producir
la condicin de STOP. Este mtodo de escritura ser utilizado en el desarrollo del ejercicio # 2.
El DS1307 es un RTC serial que procesa la informacin de los segundos, minutos, horas, da del
mes, da de la semana, mes y ao.
El ajuste para la duracin de los meses, incluso en los aos bisiestos, es realizado por el propio
circuito y es vlido hasta el ao 2100.
Contiene 56 bytes de NVRAM (memoria RAM No voltil).
Permite la operacin en modo de 24 12 horas.
Al presentarse fallas en la alimentacin (VCC) el DS1307 cambia automticamente al modo de
operacin con batera para no perder su configuracin. Su consumo, es esta condicin, es menor de
500nA.
Puede generar una seal de onda cuadrada de frecuencia programable.
En la figura No. 12.12, se muestra la distribucin de los pines de conexin del DS1307, entre los cuales se
encuentran:
A travs de los terminales VCC y GND, se provee la tensin necesaria para el funcionamiento del DS1307.
Tpicamente los niveles de voltaje de estos pines son: +5V DC y 0V.
VBAT: Proporciona un medio para garantizar que el DS1307 mantenga su configuracin ante una prdida de
alimentacin (VCC). Funciona a travs de una batera externa de 2 V a 3.5V DC. Si la tensin de la fuente
que alimenta al integrado (VCC) disminuye hasta un umbral de VBAT x 1.25, las funciones de lectura y
escritura sern deshabilitadas pero seguir funcionando el reloj/cronmetro. Al hacerse VCC menor que
VBAT el circuito pasar a modo de bajo consumo o back up.
SQW/OUT: A travs de este pin, se obtiene una seal de onda cuadrada de 1Hz, 4kHz, 8kHz o 32kHz. Este
terminal es de tipo open drain, por lo tanto para su utilizacin se hace necesario el uso de un resistor de pull
up conectado a una fuente de alimentacin positiva, puede ser VCC o VBAT.
REGISTROS: Los registros de funcin especfica del DS1307 se encuentran ubicados en los ocho primeros
bytes de una memoria total de 64 bytes. De estos ocho registros, los siete primeros (direcciones 00h a 06h)
se utilizan para almacenar la informacin del reloj/calendario en formato BCD, mientras que el registro 07h
se emplea como registro de control. La figura No. 12.13, muestra la distribucin de los registros internos del
DS1307.
La inclusin del diodo Zener DZ1 de 3V, brinda al sistema la garanta de no destruir al DS1307 en caso de
conexin de una batera de alto voltaje, por ejemplo una batera de 9V.
La velocidad de transmisin es
aproximadamente de 81 Kbps.
Slo puede haber un maestro en el
bus, el cual ser evidentemente un
BS2p.
El BS2p no puede trabajar como
dispositivo esclavo.
La direccin del esclavo es de 7 bits
(el modo de direccionamiento de 10
bits no est soportado).
Se permite el uso de todos los
modificadores de formato.
Las lneas SDA y SCL deber llevar
resistencias de pull up de 4.7 kOhm.
Al ser los comandos, uno de lectura
y otro de escritura, el LSB del byte
de control (R/W) no es tomado en
cuenta an cuando debe ser
colocado a su valor correcto para
dar legibilidad al programa.
Figura No. 12.14: Interconexin de los dispositivos I2C en el DS1307.
Fuente: Elaboracin Propia.
I2CIN
Esta instruccin recibe datos desde un dispositivo por medio del protocolo I2C.
Argumento Pin 0 8
0: Pin de dato serial (SDA) 8: Pin de dato serial (SDA)
Configuracin de los terminales de E/S
1: Pin de reloj serial (SCL) 9: Pin de reloj serial (SCL)
Tabla No. 12.2: Argumento Pin para el manejo del protocolo I2C.
Fuente: PBASIC Syntax Guide, Parallax 2003.
I2COUT
Este comando enva datos a un dispositivo por medio del protocolo I2C.
Pin: Es una variable, constante o expresin (0 u 8) que especifica el Pin Entrada/Salida a usar para
enviar las seales.
Identificacin del Esclavo: Es una variable, constante o expresin (0-255) que especifica la
identificacin del dispositivo I2C esclavo.
Direccin: Es una variable, constante o expresin (0-255) que indica la direccin en el dispositivo I2C
en donde se escribir la informacin.
Direccin baja: Parmetro opcional de tipo variable, constante o expresin (0-255) que indica el
byte bajo de una direccin de tipo word en el dispositivo I2C.
Dato de Salida: Lista de variables y modificadores que especifica el formato y el contenido de los
datos a enviar.
STOP
Permite detener la ejecucin del programa.
STOP
STOP impide que el BASIC Stamp ejecute cualquier otra instruccin hasta que se aplique una seal de
reset.
Las acciones que generan una seal de reset son: colocar el pin RES a un nivel bajo y luego llevarlo a un
nivel alto, cargar un nuevo programa o desconectar la alimentacin del microcontrolador.
El comando STOP difiere del comando END en los siguientes aspectos:
STOP no pone al BASIC Stamp en modo de baja potencia. Por lo tanto, los niveles de consumo de
energa se mantienen.
El parpadeo que ocurre en los pines de salida dejados en estado alto, luego que el programa ha
finalizado (END), no se observa despus que el programa ha sido detenido por un comando
(STOP).
ON..GOTO
Produce un salto incondicional a una direccin especificada por un ndice.
Indice: Es una variable, constante o expresin (0-255) que indica la direccin del salto.
Direccin1,Direccin2DireccinN: Etiqueta que identifica el destino del salto a efectuar.
Si Indice excede el tamao de la lista de posibles direcciones de salto, no se efecta salto alguno y se
prosigue con la ejecucin programa.
Objetivo: Desarrollar un programa en PBASIC que permita leer y escribir datos en diferentes formatos, en la memoria I2C modelo
24LC04B incluida dentro del sistema de desarrollo MDK-B28.
La figura No. 12.16 muestra el diagrama de flujo del programa 12_1.bsp. Encienda el sistema de desarrollo
MDK-B28, descargue al BS2p el programa 12_1.bsp y observe el resultado en la pantalla LCD.
Si su memoria se encuentra en perfectas condiciones, deber ver como, para todas las direcciones desde 0 a
la 255 aparece el mensaje OK. Al finalizar, el mensaje MEMORIA INTEGRA podr ser visto en la pantalla
LCD, si esto no ocurre revise el cableado de nuevo.
En el programa 12_1.bsp se ha hecho de uso de las instrucciones I2CIN e I2COUT para leer y escribir un
dato en la memoria EEPROM. Se utiliza el formato de escritura por bytes, con lo cual, cada dato (de 8 bits)
es escrito y ledo de manera independiente. Ntese que este programa se ejecuta una sola vez y estando la
memoria en buen estado o no, finaliza con una instruccin de STOP que literalmente detiene el programa
hasta que se reinicie al Stamp. De esta manera, no se efectuarn ms escrituras de la memoria sino las
requeridas, recuerde que una EEPROM tiene un lmite finito de veces que puede ser escrita, cosa que no
sucede en las memorias RAM.
INICIO
Si
Dir=255
No
Dir = 0
Escribir en modo byte
el valor Dir en la localidad [ Dir ]
Si
No Emitir sonido e indicar
Dir = Dir +1 Dir = 255
memoria en buen estado
FIN
'Programa 12_1.bsp
'Este programa muestra como leer y escribir datos para verificar la integridad de
'una memoria 24LC04B mediante las instrucciones I2CIN e I2COUT del BS2P
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
Buz PIN 11
SinLCD PIN 6 'Terminal que enva informacin al controlador SLCD-IC
I2CPin PIN 0 'Terminal de datos del bus I2C
Ahora bien, como se mencion anteriormente la memoria 24LC04B se compone de dos banco de 256 bytes
cada uno, para tener acceso al banco 1 deber modificar el argumento de las instrucciones I2CIN e I2COUT
segn se muestra en la figura No. 12.9. Conecte el pulsador PB1 al terminal P2, descargue el programa
12_2.bsp y ejectelo.
'Programa 12_2.bsp
'Este programa muestra como leer y escribir datos por pginas, en ambos bancos de
'una memoria 24LC04B mediante las instrucciones I2CIN e I2COUT del BS2p
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
LeerB0 CON $A1 'Lectura en el Banco 0
LeerB1 CON $A3 'Lectura en el Banco 1
EscrB0 CON $A0 'Escritura en el Banco 0
EscrB1 CON $A2 'Escritura en el Banco 1
Page0 CON 0 'Pgina 0
Page1 CON 16 'Pgina 1
Page2 CON 32 'Pgina 2
BorrarLCD CON 1 'Limpiar pantalla
Baudios CON 240 'Parmetro Baudmode de SERIN/SEROUT
Inst CON 254 'Envo de una Instruccin
'___________________________________________________________________________________
'Programa Principal:
'Inicio:
PAUSE 1000 'Esperar que el SLCD-BD se inicialice
SEROUT SinLCD,Baudios,[Inst,BorrarLCD] 'Borrar Pantalla
DO
LOOP
Bco0:
I2CIN I2CPin, LeerB0 , Page0, [SPSTR 32]
'Lee todo el mensaje y lo almacena en Scratchpad RAM
FOR Dir=Page0 TO Page1-1 'Se extrae la 1ra. lnea del mensaje con
GET Dir,Dato 'GET y se muestra en la LCD
SEROUT SinLCD,Baudios, [Dato]
NEXT
FOR Dir = Page1 TO Page2-1 'Muestra la segunda lnea del mensaje que
GET Dir, Dato 'se encuentra almacenada en la memoria de
SEROUT SinLCD,Baudios, [Dato] 'intercambio
NEXT
Bco1:
I2CIN I2CPin, LeerB1 , Page0, [SPSTR 32] 'Lee el segundo mensaje
SEROUT SinLCD,Baudios,[Inst,Linea1] 'Ir a lnea 1 del LCD
IN IC IO
En este programa, los mensajes que se muestran en la LCD se
almacenan en la memoria EEPROM I2C. Para almacenar el mensaje 0
se ha hecho uso de las instrucciones:
C a rg ar en m em oria I2C
los d os m ensajes a m ostra r
I2COUT I2CPin,EscrB0,Page0 ,["DEMOSTRACION DEL"]
M sg = 0 PAUSE 3
LEE R m ensaje M sg en EEP R O M
I2COUT I2CPin,EscrB0,Page1 ,[" BUS I2C "]
M ostrar m ensaje M sg en LC D
PAUSE 3
No PB1
Con una sola instruccin I2COUT se han enviado 16 bytes de manera
P resiona d o consecutiva a la memoria. Cuando se utiliza esta forma de escribir
datos, los bytes recibidos son almacenados en un buffer hasta que se
Si recibe una condicin de STOP. En ese momento se escribe la
informacin a la EEPROM, con ello se reduce drsticamente el tiempo
M en sa je = N O T M sg requerido para transferir volmenes de informacin relativamente
grandes.
La diferencia entre stas instrucciones, salvo por el contenido de los mensajes, radica en el parmetro
Identificacin del Esclavo de la instruccin I2COUT. En la figura No. 12.18 se puede observar con
claridad la diferencia existente al modificar el bit B0 en el byte de control.
Elementos a Utilizar Conecte los pulsadores PB1, PB2 y PB3 a los terminales
P2, P3 y P4. Mantenga al SLCD-BD conectado segn la
figura No. 12.15.
(1) BASIC Stamp 2p.
(1) Mdulo SLCD-DB.
(1) RTC I2C DS1307 (Dallas). Estudie detenidamente los diagramas de flujo
(1) Altavoz piezoelctrico. mostrados en las figuras No. 12.19, No. 12.20 y No.
(1) Cable de programacin. 12.21.
(1) StampW (Ver 2.0 beta 2.1 o superior).
INICIO
ActualizarLCD Titilar
Inicializar DS1307
Inicializar DS1307
Mostrarmensaje:
Mostrar mensaje:
Mostrar en Si
LCD la Fecha -> dd/mm/aa Da Semana Obtener posicin que la variable editada PROGM_12_3.
PROG 12_3.bsp
bsp
Mostrar en LCD la Hora -> hh:mm:aa Modo Op Ocupa en LDC (LCDPos) RTC I2C
RTC I2CDS1307
DS1307
Set_Hora
Ajustar bits de configuracin BCD2BIN
BCD2BIN
del modo de operacin (BCD
(BCD aaBIN)
BIN)
RETURN
RETURN
ActualizarLCD
ActualizarLCD
Figura No. 12.19: Diagramas de flujo para el programa 12_3.bsp.
Fuente: Elaboracin Propia.
1
4
No No No
No PB1
2 PB3 PB2
Titila = 1 Presionado
Presionado Presionado
Si Si Si
Si
Titila = 0 Si
Todo
Mostrar texto SET Ajustado
Ajustado
ModVar= -1
No
ModVar = ModVar +1
33
3
CASE ModVar OF
0 1 2 3 4 5 6
Mostrar Texto DIA Mostrar Texto MES Mostrar Texto YRS Mostrar Texto HRS Mostrar Texto MIN Mostrar Texto SEG Mostrar Texto MOD
VarEdit= Fecha VarEdit= Mes VarEdit= Ao VarEdit= Hora VarEdit = Minutos VarEdit = Segundos VarEdit=Modo de Op
Min= 1 Max = 12 Max= 99 Max= 59 Max= 59 Max=3
Min = 1 Min = 00 Min= 0 Min= 0 Min=1
24 Horas
Si
Max= 24 No
Min= 0
Verificar_
Max= 12
Fecha_Tope
Min = 1
44
Dia_Semana
CASE Mes OF
K=0 K=1 K=4 K=3 K=4 K=0 K=2 K=5 K=3 K=6 K=1
Leer_Hora
Dia =Da MOD 7
S Configuracin
ModoOP=1 Convierte los valores del arreglo
= 24 Horas
RTCRAM de BCD a Binario
N
Eliminar MSBit de segundo Dgito
RETURN
RETUR
Encienda el sistema de desarrollo y al ejecutar el programa 12_3.bsp, deber aparecer el mensaje inicial
PROGRAMA 12_3.bsp RTC I2C DS1307 por un segundo. Seguidamente debe observar que la pantalla
muestra la configuracin por defecto del reloj, es decir, la fecha 01/01/00 y la hora 00:00:00 en modo de 24
horas como se aprecia en la figura No. 12.22. Si esto no ocurre, apague el sistema y revise las conexiones.
'Programa 12_3.bsp
'Este programa muestra como implementar un Reloj Digital utilizando el RTC DS1307 de
'Dallas Semiconductor. El reloj permitir la operacin en modo de 24 horas o AM/PM.
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
'Constantes relacionadas con el RTC
LeerRTC CON %11010001 'Lectura en el DS1307
EscrRTC CON %11010000 'Escritura en el DS1307
Segundo CON 0 'Posicin dentro del arreglo del registro de segundos
Minuto CON 1 'Posicin dentro del arreglo del registro de minutos
Hora CON 2 'Posicin dentro del arreglo del registro de horas
Dia CON 3 'Posicin dentro del arreglo del registro de da-> semana
Fecha CON 4 'Posicin dentro del arreglo del registro de das del mes
Mes CON 5 'Posicin dentro del arreglo del registro de meses
Year CON 6 'Posicin dentro del arreglo del registro de ao
Control CON 7 'Posicin dentro del arreglo del registro de control
ModoOp CON 8 'Indica que se est modificando el modo
'Programa Principal:
Modificar:
Titila = 1 'Indica que se est editando una variable del RTC
IF ModVar= 6 THEN 'Fin de la modificacin, ya todo fue ajustado
ModVar=-1 : Titila =0 : Dir = Fin
ELSE
'Avanza a la siguiente variable y busca el texto a mostrar como funcin de PB1
ModVar = (ModVar+1)
LOOKUP ModVar, [Dias,Meses,Years,Horas,Minutos,Segundos,Modo],Dir
LOOKUP ModVar, [Fecha,Mes,Year,Hora,Minuto,Segundo,ModoOp],VarEdit
'VarEdit indica cual variable dentro del arreglo RTCRAM ser modificada
ENDIF
SEROUT SinLCD,Baudios,[Inst,Linea1 + 13] 'Muestra la funcin de PB1
GOSUB Mostrar_Texto 'Muestra texto en parte superior derecha
SELECT VarEdit 'con la opcin que se est disminuyendo
CASE Hora: 'En caso de ser la Hora
IF (RTCRAM(ModoOp)=1) THEN 'Depende si es 24 Hrs o no
VarEditTop = 24 : VarEditMin = 0 'Para 24 Hrs (0-24)
ELSE
VarEditTop = 12 : VarEditMin = 1 'Para 12 Hrs (1-12)
ENDIF
CASE Minuto,Segundo: VarEditTop = 59 : VarEditMin = 0 'Minutos y seg. de 0 a 59
CASE Fecha : VarEditMin = 1 : GOSUB Verificar_Fecha_Tope : VarEditTop = VarAux
CASE Mes : VarEditTop = 12 : VarEditMin = 1 'Meses de 1 a 12
CASE Year : VarEditTop = 99 : VarEditMin = 0 'Aos de 0 a 99
CASE ModoOp: VarEditTop = 3 : VarEditMin = 1
ENDSELECT
GOTO Verificar_Modificacion 'Retorna al lazo principal en el lugar
'adecuado para actualizar el parpadeo
'===================================================================================
'SUBRUTINAS
IniciarDS1307:
HIGH I2CSDA 'Garantiza condicin BUS FREE
HIGH I2CSCL 'Garantiza condicin BUS FREE
I2CIN I2CSDA,LeerRTC,Segundo,[RTCRAM (Segundo)] 'Lee la config. del 1er. byte
I2COUT I2CSDA,EscrRTC,Segundo,[RTCRAM (Segundo)& $7F]'Activa al oscilador interno
RETURN 'sin perder la configuracin
'Rutina para leer la hora del DS1307 y seleccionar el modo de operacin (AM/PM o 24)
Leer_Hora:
I2CIN I2CSDA,LeerRTC,Segundo,[STR RTCRAM \7]
RTCRAM.LOWBIT(65) = RTCRAM.LOWBIT (22)
RTCRAM.LOWBIT(64) = RTCRAM.LOWBIT (21)
IF RTCRAM.LOWBIT(65)=0 THEN RTCRAM(ModoOp)=1 ELSE RTCRAM(Hora)=RTCRAM(Hora)&$1F
RETURN
'Rutina que convierte los elementos del arreglo RTCRAM de BCD a Binario
BCD2BIN:
FOR I = 0 TO 6
RTCRAM(I) = (RTCRAM(I)/16)*10 + RTCRAM.LOWNIB(2*I)
NEXT
RETURN
'Rutina que verifica el lmite de la fecha (da del mes) segn el mes y el ao
Verificar_Fecha_Tope:
LOOKUP (RTCRAM(Mes)-1),[31,28,31,30,31,30,31,31,30,31,30,31],VarAux
IF ((RTCRAM(Mes)=2)AND(RTCRAM.LOWNIB(12)/4*4=RTCRAM(Year))) THEN VarAux = VarAux+1
RTCRAM (Fecha) = RTCRAM (Fecha) MAX VarAux
RETURN
'Rutina que muestra el texto almacenado en las tres localidades formadas por DIR,
'DIR+1 y DIR + 2 en la memoria EEPROM del BS2p por la pantalla LCD en la posicin
'que esta tenga
Mostrar_Texto:
FOR I=0 TO 2
READ Dir, Texto (I) 'Obtiene el texto almacenado en la EEPROM
Dir = Dir +1
NEXT
SEROUT SinLCD,Baudios, [STR Texto\3] 'Muestra el mensaje de texto
RETURN
Conecte una batera de 9V DC al terminal VBAT como se muestra en la figura No. 12.23. Apague el sistema
de desarrollo MDK-B28, espere algunos minutos y encindalo nuevamente. Observe que, la hora mostrada
por el reloj/calendario no slo se mantiene, sino que se sigue actualizando an cuando se ha retirado la
alimentacin del circuito. Esta caracterstica es muy comn en gran cantidad de aplicaciones en las cuales se
requiere del mantenimiento de la hora an cuando ocurran interrupciones en la potencia de alimentacin.
Por ejemplo, en todos los computadores reside una pequea batera de litio de 3V que cumple una funcin
similar a la usada en esta parte del ejercicio y se encarga de proveer de una fuente de respaldo para la
configuracin tanto de la hora como de ajustes propios del PC. El consumo de corriente en este modo de
operacin, es tan reducido que con una batera puede asegurarse la operacin de hasta 10 aos.
Programacin
1. Utilizando al BASIC Stamp, la memoria 24LC04B y el reloj de tiempo real, modifique el programa
12_3.bsp, para que se convierta en un reloj despertador con dos (2) alarmas. Utilice el buzzer del
sistema de desarrollo para emitir un sonido a una frecuencia de 4.5 KHz cuando la alarma se active.
El programa deber permitir seleccionar las alarmas en forma independiente.
Captulo No. 13
Comunicacin Serial Asincrnica 1Wire
Introduccin. Dallas Semiconductor ha desarrollado una poderosa tecnologa llamada 1-Wire, la cual, utiliza un slo conductor ms
su retorno o tierra para efectuar las comunicaciones y la transmisin de energa entre un dispositivo maestro y mltiples esclavos. Una
RED de dispositivos 1-Wire est conformada por un maestro y uno o ms esclavos que poseen un nico terminal de datos de tipo
open drain , al que se conecta una resistencia de pull-up anclada a +5v (nominal). Una de las caractersticas de esta tecnologa 1-
Wire, es que cada dispositivo esclavo tiene una nica e irrepetible identificacin grabada en su memoria ROM. En este captulo, se
utilizar al microcontrolador BASIC Stamp como maestro dentro de una RED 1-Wire y se efectan acciones tpicas de bsqueda,
direccionamiento y transferencia de informacin entre dispositivos 1-Wire.
Las redes de dispositivos 1-Wire pueden tener fcilmente una longitud desde 200 m y contener
unos 100 dispositivos.
Todas las tensiones mayores que 2,2 Voltios son consideradas un (1) lgico mientras que como un
(0) lgico se interpreta cualquier voltaje menor de 0,8 V.
La transferencia de informacin es a 16.3 Kbps en modo Standard y hasta a 142 Kbps en modo
overdrive.
INICIALIZACIN
Todas las comunicaciones en el bus 1-Wire comienzan con una secuencia de un pulso de Reset y
Presencia. El pulso de reset provee una forma limpia de iniciar las comunicaciones, ya que, con l se
sincronizan todos los dispositivos esclavos presentes en el bus. Un Reset es un pulso que genera el maestro
al colocar la lnea de datos en estado lgico bajo por unos 480 s. Una vez liberado, el bus retorna al nivel
alto y luego de un tiempo comprendido entre 15 s a 60 s, los dispositivos esclavos transmitirn un pulso
de presencia. Este consiste en un forzar la lnea de datos a nivel bajo durante un tiempo entre 60 s a 240
s. El maestro, esperar por los pulsos de presencia con el bus en estado alto, a travs de la resistencia de
pull up, por un tiempo de al menos 480 s. Cuando utilizamos un microcontrolador BASIC Stamp 2p, el
pulso de reset tendr las caractersticas del mostrado en la figura No. 13.1.
Estado de Reset
Aprox 15 - 60 us
+5V
Pulso de
Pulso deReset
Reset Pulso
Pulsode
de
Presencia
Presencia
0V
TRANSFERENCIA DE DATOS
La lectura y escritura de datos en el bus 1-Wire se hace por medio de Slots, la generacin de estos es
responsabilidad del maestro, en este caso, el BASIC Stamp 2p. Cuando el maestro lee informacin del bus,
debe forzar la lnea de datos a estado bajo durante al menos 1 s y esperar unos 15 s para entonces leer
el estado de la misma. El estado lgico de la lnea en ese momento, estar determinado por el dispositivo
esclavo. La figura No. 13.2, muestra el proceso de lectura de un Slot tpico que produce un BASIC Stamp
2p.
Al momento de efectuar la escritura de un bit en el bus ocurre algo similar, el maestro produce un pulso de
entre 1 s y 15 s de duracin, para luego colocar en el bus al bit que se desea transmitir. Este bit deber
permanecer en el bus al menos 60 s. En la figura No. 13.3, puede verse claramente como un BASIC Stamp
2p escribe la informacin en el bus 1-Wire.
Perodo de recuperacin
Aprox 8 us
+5V
0V
Aprox
Esclavo 1 -Wire lee Esclavo 1 - Wire lee
8 us
la lnea (15us - 45us) la lnea (15us - 45us)
BASIC Stamp Escribe un 0 BASIC Stamp Escribe un 1
Aprox 72 us Aprox 72 us
OWIN
Recibe informacin desde un dispositivo mediante el protocolo 1-Wire.
Pin : Variable, constante o expresin (0 - 15) que especifica cual terminal de E/S ser usado para la
recepcin.
Modo: Variable, constante o expresin (0 - 15) que indica el tipo de transferencia de informacin. Este
parmetro controla la ubicacin de los pulsos de reset, selecciona el modo de transferencia en bytes o
bits y define la velocidad a utilizar, modo normal o modo de alta velocidad.
Dato de Entrada: Lista de variables y sus modificadores, que indican donde y como ser almacenada
la informacin entrante.
El argumento Modo de la instruccin OWIN puede tomar cualquiera de los valores mostrados en la tabla
No. 13.2, anexa.
Modo Efecto
0 No Reset, modo Byte, Baja velocidad
1 Reset antes de los datos, modo Byte, Baja velocidad
2 Reset despus de los datos, modo Byte, Baja velocidad
3 Reset antes y despus de los datos, modo Byte, Baja velocidad
4 No Reset, modo Bit, Baja velocidad
5 Reset antes de los datos, modo Bit, Baja velocidad
8 No Reset, modo Byte, Alta velocidad
9 Reset antes de los datos, modo Byte, Alta velocidad
OWOUT
Enva informacin hacia un dispositivo mediante el protocolo 1-Wire.
Pin: Variable, constante o expresin (0 - 15) que especifica cual terminal de E/S ser usado para la
transmisin.
Modo: Variable, constante o expresin (0 - 15) que indica el tipo de transferencia de informacin. Este
parmetro controla la ubicacin de los pulsos de reset, selecciona el modo de transferencia en bytes o
bits y define la velocidad a utilizar, modo normal o modo de alta velocidad.
Dato de Salida: Lista de variables y sus modificadores que indican cuales son y como sern enviados
los datos.
STORE
Dado que el microcontrolador BS2p posee varios bloques de memoria EEPROM, existe una instruccin que
permite indicar sobre cual de estos bloques tienen efecto las instrucciones de READ y WRITE.
La instruccin STORE permite tener acceso a cualquier localidad de EEPROM sin importar cual bloque
contiene al programa que se encuentra en ejecucin, ello permite ampliar la cantidad de memoria disponible
para los comandos READ y WRITE (limitada en principio a 2047 bytes). Tambin puede usarse para crear
un espacio separado para las variables que deban ser almacenadas en dicha memoria evitando as un
posible solapamiento entre programas y datos.
Por defecto READ y WRITE operan en el banco que contenga al programa en ejecucin, STORE cambia
esto y mantiene la ejecucin de las mencionadas instrucciones de lectura/escritura en el banco especificado
hasta que se modifique ste mediante otra instruccin STORE o que se cambie el programa (se ejecute otro
bloque).
WRITE
Si bien la directiva DATA permite escribir en la EEPROM, lo hace una sola vez y durante la descarga del
programa. Esto la limita a contener datos que no cambian de manera alguna dentro del programa, como los
mensajes de texto o los valores de inicializacin predeterminados de algunas variables. Sin embargo, son
innumerables las aplicaciones que requieren de la escritura en EEPROM de datos en tiempo de ejecucin (y
no en tiempo de compilacin como lo hace DATA); para ello, PBASIC dispone de la instruccin WRITE.
Localidad: Variable, constante o expresin de 0 a 2047 que indica la direccin de la EEPROM donde se
quiere escribir.
Dato: Es una constante, variable o expresin de 0 a 65535, que se desea almacenar en la memoria.
El modificador Word se utiliza de la misma manera que en la instruccin DATA
Objetivos: Desarrollar un programa en PBASIC que permita identificar si existe un esclavo conectado al bus 1-Wire del sistema de
desarrollo MDK-B28. Obtener el serial de identificacin del dispositivo 1-Wire detectado.
INICIO
Presentar mensaje:
Conecte un dispositivo al bus 1-Wire
Ver_Disp
(Verificar estado del bus) Esperar 500 ms
Si
No
Enviar RESET al bus 1-Wire
Enviar un RESET por el bus 1-Wire
FIN
'Programa 13_1.bsp
'Este programa tiene por objetivo leer el cdigo de identificacin
'de un dispositivo conectado al bus 1-Wire
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
ReadRom CON $33 'Lee la identificacin del disp. (1 solo esclavo en la RED)
MatchRom CON $55 'Selecciona a un dispositivo del bus (requiere saber su ID)
SkipRom CON $CC 'Selecciona a un dispositivo del bus (sin saber su ID)
SearchRom CON $F0 'Lee todas las ID de todos los dispositivos presentes
Inicio:
GOSUB Ver_Disp 'Verifica si hay o no esclavos
ON Dispositivo GOTO Bus_CC , Un_Disp , No_Disp 'Salta al caso correspondiente
No_Disp:
DEBUG CRSRXY,0,3,CLREOL
DEBUG CRSRXY,11,3,"No hay dispositivos conectados" : PAUSE 500 : GOTO Inicio
Bus_CC:
DEBUG CRSRXY,0,3,CLREOL 'Borra la lnea actual
DEBUG CRSRXY,11,3," BUS EN CORTOCIRCUITO "
FREQOUT Buz,1900,1250 : GOTO Inicio 'Seal de alarma
'___________________________________________________________________________________
'SUBRUTINAS
'Ver_Disp determina si hay o no algn dispositivo en el bus
Ver_Disp:
OWOUT OW_Pin,OW_RADBB,[SearchROM]
'Comando Search hace el dispositivo comience a transmitir su ID
OWIN OW_Pin,OW_NRBitB,[Dispositivo.BIT1,Dispositivo.BIT0] 'Lee el primer de la ID
Dispositivo = Dispositivo.BIT1 + Dispositivo.BIT0
'El primer bit de la ID del esclavo y su negado, permiten saber el estado del bus:
'Si son 0 ambos, el bus est en cortocircuito. Si ambos son 1, no hay esclavos en
'el bus. Si son 01 10 hay 1 slo dispositivo conectado a la RED.
RETURN
En el debug terminal debe mostrarse el mensaje Conecte un dispositivo al bus 1-Wire tal como puede
apreciarse en la figura No. 13.7. Conecte el DS1971 o cualquier otro iButton que usted disponga en el Blue
Dot Receptor y observe el cdigo que se despliega en la pantalla del computador, ver figura No. 13.8.
Anote la ID que se le muestra: ( ).
Desconecte al iButton y observe el serial que ste presenta en su parte anterior, verifique que sea el mismo
que se le mostr en la pantalla del PC, de no ser as, apague el sistema y revise las conexiones. Si persiste el
error, desconecte el iButton y apritelo nuevamente en su receptor.
Elementos a Utilizar
Como fue mencionado con anterioridad, cada
dispositivo 1-Wire posee una identificacin nica de (1) BASIC Stamp 2p.
8 bytes, las partes que la componen pueden verse en (1) Conector Blue Dot Receptor (Dallas).
la figura No. 13.9 (1) DS1971 o cualquier otro iButton (Dallas).
(1) StampW (Ver 2.0 beta 2.1 o superior).
Cuando se transmite informacin de manera serial, es necesario verificar la posible existencia de errores que
pudieran ocurrir durante la comunicacin. Existen varios mtodos para efectuar este chequeo. Uno de los
ms simples consiste en aadir un bit extra a cada byte transmitido de modo que el nmero de unos (1)
contenidos en el paquete de 9 bits siempre sea par o impar. Este procedimiento se le conoce como
verificacin de paridad y permite encontrar errores que ocurran en un bit, pero no es confiable cuando
cambia ms de un bit dentro del byte.
Uno de los mecanismos de deteccin de errores ms eficientes es el Chequeo de Redundancia Cclica (del
ingls Cyclic Redundancy Check) conocido por sus iniciales CRC. El CRC de un conjunto de datos, es un
nmero de cierta cantidad de bits que contiene el resultado de la aplicacin de una expresin matemtica al
mencionado conjunto de datos. As, si el CRC es de 4 bits se denominar CRC-4, si es de 8 bits se llamar
CRC-8, si es de 16 bits ser CRC-16, etc. El algoritmo utilizado para el clculo de CRC de Dallas
Semiconductor (DOW CRC), cuyo resultado se incluye en la identificacin de los dispositivos 1-Wire, es de
8 bits y se calcula introduciendo los primeros 56 bits, correspondientes al serial del dispositivo y el cdigo de
la familia a la que pertenece el dispositivo, en el algoritmo ilustrado en la figura No. 13.10.
Los errores detectables por el CRC-8 implementado por Dallas Semiconductors son:
Figura No. 13.10: Representacin de la forma de calcular el CRC-8 en los dispositivos 1-Wire.
Fuente: Understanding and Using Cyclic Redundancy Checks with Dallas Semiconductor iButtonTM Products.
El clculo del CRC-8 puede hacerse de varias formas. La primera de ellas es evidentemente por hardware,
siguiendo el esquema de la figura No. 13.10. Cuando se implementa por software, una forma simple de
hacerlo, es por medio de una tabla de 256 bytes, la cual, es llamada repetidas veces a medida que se
introducen los bytes hasta obtener el valor definitivo del CRC. Este mtodo es muy sencillo, pero presenta el
inconveniente de requerir el uso de 256 bytes de la memoria del microcontrolador. Por esta razn, el
programa 13_2.bsp presenta una tercera forma de efectuar el clculo y se basa en aplicar las funciones
lgicas mostradas en la figura No. 13.10, a travs de programacin. Si bien de esta forma el clculo se
efecta de una manera ms lenta, se hace con un gasto menor de recursos del microcontrolador.
Descargue el programa 13_2.bsp al BASIC Stamp y ejectelo. Por medio del debug terminal, se le solicitar
que introduzca la identificacin de un dispositivo 1-Wire.
Tome el iButton que utiliz en la actividad anterior e introduzca el serial y el cdigo de la familia, ver figura
No. 13.11. Para el caso de la figura 13.11, luego de introducir: 000000FBD8B314 el programa presentar
el mensaje CRC = D4, verificndose que el clculo ha sido correcto.
'Programa 13_2.bsp
'Este programa muestra como calcular el CRC-8 utilizado por los iButtons, requiere
'que el usuario introduzca el serial del dispositivo y el cdigo de la familia.
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
'___________________________________________________________________________________
'Programa Principal
CRC =0 'Inicializa la variable CRC en 0
DEBUG CLS,"INTRODUZCA EL SERIAL Y LA FAMILIA DEL DISPOSITIVO",CR,"ID #: "
'Mensaje al usuario para que se introduzca la identificacin del dispositivo
FOR Indice = 0 TO 6 'Lee cada par de nmeros hexadecimales corresp. al
DEBUGIN HEX2 RomCode (Indice) 'cdigo de la familia y el serial propio del disp.
NEXT 'y lo almacena en el arreglo RomCode
DEBUG CR, "CRC = ",HEX2 CRC,CR 'Muestra el valor del CRC calculado
END
'===================================================================================
'SUBRUTINAS
'CRCCalc calcula el CRC-8 de un byte
CRCCalc:
FOR Indice = 0 TO 7 'Toma el byte de entrada (CRC) y lo va introd. en
IBit = CRC.BIT0 ^ CRCt.BIT0 'la ecuacin del CRC-8 bit por bit. El resultado
CRC = CRC >> 1 'parcial del clculo se almacena en la variable
CRC.BIT2 = CRC.BIT2 ^ IBit 'CRC. La variable IBit almacena temporalmente el
CRC.BIT3 = CRC.BIT3 ^ IBit 'valor de la operacin XOR entre el LSB del CRC
CRC.BIT7 = IBit 'anterior y el LSB del dato entrante, ya que ser
'necesario conservar este valor luego de hacer el
'corrimiento de los bits a travs de la expresin
CRCt = CRCt >> 1 'Procesar el prximo bit
NEXT
RETURN
Una vez que se ha visto como calcular el CRC-8 y verificado el funcionamiento del programa 13_2.bsp,
resultar evidente que introducir la identificacin por medio del teclado y el debug terminal, es de muy poca
utilidad prctica, por ello, en los siguientes programas se unifican los ejercicios # 1 y # 2 de este capitulo.
Si
CRCverif =
CRCverif Presentar
Presentar mensaje:
mensaje: FIN
FIN
= Vlido
Valido CRC Ok
CRC OK
No
Presentar
Presentar mensaje:
mensaje:
Conecte
Conecte un dispositivo
un dispositivo al bus 1 1-Wire al Bus
- Wire
Ver_Disp
Ver_Disp Esperar
Esperar 500500 ms
ms
Verificar
(Verificar el estado
estado del Bus
del bus)
No
Emitir tonotono
Emitir de alerta
de alerta Hay disp
Hay Disp. Presentar
Presentar mensaje:
mensaje:
por
por500
500 ms.ms Conectados?
conectados No hay No hay Disp.
dispositivos Conectados
conectados
Si
Si
Presentar
Presentar mensaje:
mensaje: Hay
Hay conflicto
conflicto
BusCORTOCIRCUITO
BUS EN en Cortocircuito en
Enelelbus
Bus?
No
Enviar
Enviar un RESET
un RESET por elpor
busel1 bus 1-Wire-Wire
Enviarcomando
Enviar commando
ReadROM ($33)
ReadRom ($33)
Recibir
Recibir los 8 los 8 de
bytes bytes de Identificacin
Identificacin
Y guardarlos
y almacenarlos en RAMenScratchpad
la RAM Scratcpad
Extraer
Extraer la IDladelIDScratchpad
del Scratchpad
y mostrarla
y mostrarla en pantalla
en pantalla
RUN1 1
RUN
En las figuras No. 13.12 y No. 13.13, se muestran los diagramas de flujo correspondientes a los programas
13_3.bsp y P13_3a.bsp. El programa 13_3.bsp es muy similar al 13_1.bsp pero presenta dos variaciones
importantes. La primera ocurre al iniciarse el programa, pues se verifica que el contenido de la posicin 8 de
la RAM Scratchpad (SCRAM) del BS2p sea igual a una constante llamada Valido. Para qu se preguntar
usted?. La respuesta es bastante simple. En sta localidad de la memoria SCRAM, el programa ubicado en el
banco 1 (P13_3a.bsp) colocar un valor igual a Valido si se determina que el CRC calculado es igual al
recibido. La otra modificacin es la llamada a la ejecucin del programa que calcula el CRC mediante la
instruccin RUN 1.
INICIO (1)
Presentar mensaje:
Calculando CRC
ByteAct = 0
CRCCalc
Si
No CRCt =
CRC RETURN
Si
SCRAM (8) = 00
SCRAM (8) = Valido
Figura No. 13.13: Diagrama de flujo
para el programa P13_3a.bsp.
Fuente: Elaboracin Propia.
RUN 0
Por su parte en el programa P13_3a.bsp, adems de calcular el valor del CRC-8, se utiliza una localidad de la
memoria SCRAM (octava localidad) para guardar un valor o byte que depende del xito que se obtuvo al
calcular el CRC-8. All en esa localidad, se escribir un ($00) si ocurri un error en la lectura de los datos y
se colocar ($AA) si fue correcta.
Los siguientes ejercicios se desarrollarn basndose en el DS1971, un iButton que posee una memoria
EEPROM de 256 bits, con la cual, se implementar un pequeo sistema de control de acceso.
Cargue y ejecute el siguiente programa en el BASIC Stamp el programa 13_3.bsp, utilizado para la lectura
de la identificacin de dispositivos 1-Wire y el programa P13_3a, usado para el clculo y validacin de la
identificacin leda desde un esclavo 1-Wire.
'Programa 13_3.bsp
'Este programa tiene por objetivo leer el cdigo de un dispositivo conectado al bus
'1-Wire y validar el mismo por medio del CRC-8.
'===================================================================================
'{$STAMP BS2p, P13_3a.bsp}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
ReadRom CON $33 'Lee la identif. del dispositivo (1 slo esclavo en la RED)
MatchRom CON $55 'Selecciona a un dispositivo del bus (requiere saber su ID)
SearchRom CON $F0 'Lee todas las ID de todos los dispositivos presentes en la RED
Valido CON $AA 'Constante de validacin de datos
OW_NRBB CON 0 'Modo 0: No Reset, modo Byte, Baja velocidad
OW_RADBB CON 1 'Modo 1: Reset Antes de los Datos, modo Byte, Baja Velocidad
OW_NRBitB CON 4 'Modo 4: No Reset, modo Bit, Baja velocidad
CRCverif VAR Byte 'Var. que indica si el CRC recibido coincide con el calculado
RomByte VAR Byte 'Var. usada para mostrar la identificacin del dispositivo
Inicio:
GOSUB Ver_Disp 'Verifica si hay o no esclavos en la RED
ON Dispositivo GOTO Bus_CC , Un_Disp , No_Disp 'Salta al caso correspondiente
Un_Disp: 'Cuando hay un solo esclavo
OWOUT OW_Pin,OW_RADBB,[ReadRom] 'Enva un Reset, luego un ReadRom,
OWIN OW_Pin,OW_NRBB,[SPSTR 8] 'recibe la ID del dispositivo y
DEBUG CRSRXY,4,3,"Dispositivo 1-Wire # ID: " 'la almacena en la RAM Scratchpad
FOR Indice=7 TO 0 'Muestra la ID obtenida en el
GET Indice,RomByte : DEBUG HEX2 RomByte 'DEBUG TERMINAL
NEXT
RUN 1 'Ejecuta el programa del banco 1 para validar el CRC recibido
'Programa P13_3a.bsp
'Este programa muestra como utilizar el algoritmo de clculo del CRC-8 del programa
'13_2.bsp, para validar la identificacin obtenida de un dispositivo conectado al
'bus 1-Wire. Se utilizar la memoria Scratchpad del BS2p para el intercambio de
'informacin entre los bloques de programacin del BASIC Stamp 2p.
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
Valido CON $AA
OW_Pin PIN 0 'Terminal de datos del bus 1-Wire
CRC VAR Byte 'Variable que contiene al CRC calculado
CRCt VAR Byte 'Var. aux. que contiene el byte al que se le calcula el CRC
ByteAct VAR Nib 'Variable de uso general
Indice VAR Nib 'Variable de uso general
IBit VAR Bit 'Variable temporal
'___________________________________________________________________________________
'Programa Principal
CRC =0
DEBUG CRSRXY,15,4,"Calculando CRC = "
FOR ByteAct = 0 TO 6
GET ByteAct ,CRCt 'Recupera el cdigo de la familia y el serial del Scratchpad
GOSUB CRCCalc 'y los va introduciendo en la expresin de clculo
NEXT 'hasta obtener el CRC y mostrarlo en pantalla
DEBUG HEX2 CRC
GET 7,CRCt 'Obtiene el CRC recibido del dispositivo y lo compara con el
IF (CRCt = CRC) THEN PUT 8, Valido: ELSE PUT 8,$00 'calculado, si son iguales
RUN 0 'Retorna al Banco 0 'indica que es vlido
'===================================================================================
'SUBRUTINAS
'CRCCalc calcula el CRC-8 de los datos que se introduzcan por medio de la var. CRCt
CRCCalc:
FOR Indice = 0 TO 7
IBit = CRC.BIT0 ^ CRCt.BIT0
CRC = CRC >> 1
CRC.BIT2 = CRC.BIT2 ^ IBit : CRC.BIT3 = CRC.BIT3 ^ IBit : CRC.BIT7 = IBit
CRCt = CRCt >> 1
NEXT
RETURN
En la figura No. 13.14 puede observarse el resultado de la ejecucin de los programas 13_3.bsp y
P13_3a.bsp.
Objetivo: Utilizar al microcontrolador BASIC Stamp como maestro en un bus 1-Wire para leer y escribir informacin en un DS1971.
COMANDOS AFECTA A:
En este ejercicio se utilizar un nuevo comando de ROM llamado MATCH ROM que permite al
microcontrolador, efectuar el direccionamiento de un esclavo una vez conocido su serial de identificacin.
Para tener acceso a todas las funciones especficas de memoria de un dispositivo 1-Wire en particular,
recomendamos que se utilicen las hojas tcnicas y/o especificaciones del fabricante. En la figura No. 13.16
se muestra un diagrama de flujo extrado de las hojas de especificaciones del DS1971, con esta informacin
se podr realizar el programa 13_4.bsp.
El programa 13_4.bsp permite escribir una cierta cantidad de datos (en este caso caracteres ASCII) y
almacenarlos en la memoria EEPROM del dispositivo DS1971. Para comprender como se efecta este
proceso, se presentan los diagramas de las figuras No. 13.17 y No. 13.18.
MASTER TX MEMORY
FUNCTION COMMAND
BUS MASTER TX
BUS MASTER TX VALIDATION KEY ($A5) DS1971 COPIA EEPROM
BUS MASTER TX
ADDRESS BYTE TO SCRATCHPAD
ADDRESS BYTE
VALIDATION
KEY MATCH ? BUS MASTER TX
ADDRESS BYTE
MASTER TX DATA MASTER RX DATA
DS1971 INCREMENTS DS1971 INCREMENTS BYTE FROM
BYTE TO SCRATCHPAD
SCRATCHPAD SCRATCHPAD SCRATCHPAD ADDRESS DS1971 COPIES
ADDRESS MASTER RX DATA
ADDRESS ADDRESS SRATCHPAD DATA TO
DS1971 INCREMENTS
EEPROM BYTE FROM
SCRATCHPAD
SCRATCHPAD ADDRESS
ADDRESS
DS1971 TX
PRESENCE PULSE
INICIO
Menu
No Error
Familia =
$14
Error
Si
Borrar LCD
Presentar mensaje en la LCD:
Validando Datos espere 1 seg Figura No. 13.17: Diagrama de flujo
Emitir Tono Agudo del programa 13_4.bsp.
Fuente: Elaboracin Propia.
Espera de 1 seg
Presentar en la LCD:
ERROR ERROR
CRCVerif
Menu
Lectura Escritura
Mostrar en la LCD
Enviar los 16 bytes desde la FIN DE ESCRITURA
Menu SCRAM del BS2p
Descargue al BASIC Stamp el programa 13_4.bsp y conecte el DS1971 al soporte cuando se le indique. Una
vez que se logre identificar al iButton, se le presentar el men que se muestra en la figura No. 13.20.
Una vez que aparezca el mensaje de finalizacin de Figura No. 13.20: Programa 13_4.bsp ejecutndose.
Fuente: Elaboracin Propia.
escritura y regrese al men de la figura No. 13.20,
presione el pulsador PB1 y verifique que el contenido almacenado en la EEPROM coincide con lo que usted
escribi. La opcin 3 del men (RET) permite volver a identificar al dispositivo conectado en el bus.
'Programa 13_4.bsp
'Este programa tiene por objetivo leer y escribir informacin en una memoria DS1971
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
ReadRom CON $33 'Lee la identificacin del dispositivo(1 slo esclavo en la RED)
MatchRom CON $55 'Selecciona a un dispositivo del bus (requiere saber su ID)
SearchRom CON $F0 'Lee todas las ID de todos los dispositivos presentes en la RED
LeerEE CON $F0 'Lee el contenido de la EEPROM del DS1971
EscribSP CON $0F 'Escribe la informacin en la Scratchpad del DS1971
CopiarSP CON $55 'Copia el contenido de Scratchpad del DS1971 a su EEPROM
Validar CON $A5 'Validacin de la copia del Scratchpad a la EEPROM en el DS1971
'___________________________________________________________________________________
Inicio:
PAUSE 1500 'Pausa para inicializar el LCD
GOSUB Caract_Propios 'Carga de los caracteres propios
Principal:
SEROUT SinLCD,Baudios,[Inst,BorrarLCD]
SEROUT SinLCD,Baudios,[Inst,Linea1," LECT. y ESCRIT."]
SEROUT SinLCD,Baudios,[Inst,Linea2," DEL DS1971 "]
'Mensaje inicial con el objetivo del programa
PAUSE 2500
BuscarDS1971: 'Indica al usuario que presente un DS1971
SEROUT SinLCD,Baudios,[Inst,BorrarLCD]
SEROUT SinLCD,Baudios,[Inst,Linea1,"PRESENTE DS1971 "]
SEROUT SinLCD,Baudios,[Inst,Linea2,"EN EL SOPORTE..."]
DO WHILE Disp<>1 : GOSUB Ver_Disp : LOOP 'Espera por un dispositivo
OWOUT OW_Pin,OW_RADBB,[ReadRom] 'Leer la ID del dispositivo
OWIN OW_Pin,OW_NRBB,[STR RomCode \8] 'Almacena la ID en el arreglo RomCode
IF (RomCode <> $14) THEN GOTO Error 'Mens. de error al no colocar un DS1971
SEROUT SinLCD,Baudios,[Inst,Linea1,"VALIDANDO DATOS "]
SEROUT SinLCD,Baudios,[Inst,Linea2," ESPERE 1 SEG "]
PAUSE 1000
GOSUB CRCVerif 'Verifica si la ID es correcta mediante CRC
IF CRC<> RomCode (7) THEN GOTO Error 'Mensaje de error si los CRCs no coinciden
Menu:
SEROUT SinLCD,Baudios,[Inst,Linea1,"DISP. ENCONTRADO "] 'Mensaje de confirmacin
SEROUT SinLCD,Baudios,[Inst,Linea2,1,"LEER ",2,"ESCR ",3,"RET"]'Men de opciones
'1- Lee el contenido del ibutton y lo muestra en el LCD 2- Permite escribir datos
'por medio del DEBUG TERMINAL al DS1971 3- Retorna al inicio del programa
DO
BUTTON PB1,0,255,0,Esp(0),1, Lectura 'Si se presiona PB1 leer memoria EEPROM
BUTTON PB2,0,255,0,Esp(1),1, Escritura 'Si se presiona PB2 escribir en EEPROM
BUTTON PB3,0,255,0,Esp(2),1, Principal 'Si se presiona PB3 ir a inicio
LOOP
Error:
SEROUT SinLCD,Baudios,[Inst,BorrarLCD,Inst,Linea1] 'Borra al LCD y muestra un
FREQOUT Buz,250,1400 'mensaje de error mientras
SEROUT SinLCD,Baudios,[" ", E,R,R,O,R," ",E,R,R,O,R] 'produce un tono de alerta
FREQOUT Buz,250,900
PAUSE 1000
GOTO BuscarDS1971 'Regresa a buscar iButton
'Indica por medio del LCD, que la introduccin de los datos que se almacenarn
'se har a travs del DEBUG TERMINAL
'Mensaje tanto por LCD como por DEBUG TERMINAL, indica fin de la escritura
SEROUT SinLCD,Baudios,[Inst,Linea2," FIN DE ESCRIT. "]
FREQOUT Buz,1500,1000 'Bip que indica fin de escritura
GOTO Menu
'===================================================================================
'SUBRUTINAS
Ver_Disp:
OWOUT OW_Pin,OW_RADBB,[SearchROM]
OWIN OW_Pin,OW_NRBitB,[Disp.BIT1,Disp.BIT0]
Disp = Disp.BIT1 + Disp.BIT0
RETURN
CRCCalc:
FOR Indice = 0 TO 7
IBit = CRC.BIT0 ^ CRCt.BIT0
CRC = CRC >> 1
CRC.BIT2 = CRC.BIT2 ^ IBit : CRC.BIT3 = CRC.BIT3 ^ IBit : CRC.BIT7 = IBit
CRCt = CRCt >> 1
NEXT
RETURN
Una vez que se ha comprendido como leer y escribir informacin en el DS1971, el siguiente ejercicio, ser
desarrollar una aplicacin que haga uso de este nuevo conocimiento. Uno de los usos ms frecuentes de los
iButtons, es en sistemas de control de acceso e identificacin. El ejercicio siguiente presenta una aplicacin
bastante sencilla pero altamente funcional de cmo usar un econmico dispositivo, el DS1971, como una
segura llave electrnica.
En la mayora de las aplicaciones para el control de acceso, los usuarios tienen diferentes privilegios y por lo
tanto su nivel de autorizacin es diferente. As por ejemplo, si una empresa instala un sistema de control de
acceso electrnico como el que se desarrollar en este ejercicio, el presidente de la empresa podr acceder
a todos y cada uno de los lugares de la instalacin, pero un empleado de la planta, poco o nada tendr que
hacer en el departamento de sistemas o en la administracin. En el mencionado ejemplo, la llave
entregada al presidente tendr un nivel de acceso superior a la llave entregada al empleado de planta.
En el ejercicio No. 4, vamos a construir un equipo para el control de acceso de personal. Para ello, primero
debemos grabar en la memoria interna del DS1971 cierta informacin Confidencial. Posteriormente, se
elabora un programa que efecta la validacin del contenido del DS1971 y se determina si el portador de
ste tiene o no acceso al lugar deseado. Mantenga armado el circuito del ejercicio anterior, si lo desea,
puede omitir los pulsadores ya que no sern requeridos.
La memoria del DS1971 se ha dividido en 3 secciones como se puede ver en la figura No. 13.21. En los
primeros 14 bytes, se almacena el nombre del usuario quien tendr la llave electrnica. A continuacin, se
utiliza un byte para guardar un nmero (del 0 al 7) que corresponde al nivel de acceso asignado al iButton y
finalmente un byte que corresponde a la clave del usuario. La clave es calculada para cada dispositivo que
se ingresa al sistema, siendo una funcin de la identificacin del mismo. Por lo tanto, resulta ser
prcticamente imposible que una llave no autorizada funcione dentro del sistema. En las figuras No. 13.22,
No. 13.23 y No. 13.24 se observan los diagramas de flujo del programa que prepara a los iButtons DS1971
para ser utilizados con el sistema de control de accesos.
Nivel Clave
Acceso
Figura No. 13.21: Distribucin de los datos en la memoria interna del DS1971, para el ejercicio # 4.
Fuente: Elaboracin Propia.
INICIO
1
DispOK = 0
Presentar mensaje:
Presentar mensaje: Incluyendo Dispositivo ...
Presente DS1971 en el soporte
Incluye_DS1971
Ver_DS1971
Presentar mensaje:
No Verificando Contenido
DispOK=1
Si Valida_DS1971
Presentar mensaje:
un DS1971 ha sido detectado
Introduzca Nivel de Autorizacin (0-7) Presentar mensaje:
Retire el DS1971
Leer AutNivel
DS1971 Si
Presentar mensaje: 1
Introduzca su nombre (14 caracteres) Desconectado?
No
Leer 14 caracteres
y almacenarlos en SCRAM Esperar 500 ms
x=0 Indice = 0
Ver_Disp
No CRC = RETURN
No RomCode (7)
Familia
= $14
Si
Si
DispOK = 0
DispOK = 1
CRCVerif
RETURN
RETURN
Incluye_DS1971 Verifica_DS1971
Cal_Clave LectError = 0
'Programa 13_5.bsp
'Este programa permite grabar los DS1971 autorizados en un sistema de control
'de acceso de personal.
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
ReadRom CON $33 'Lee la identificacin del dispositivo(1 slo esclavo en la RED)
MatchRom CON $55 'Selecciona a un dispositivo del bus (requiere saber su ID)
SearchRom CON $F0 'Lee todas las ID de todos los dispositivos presentes en la RED
LeerEE CON $F0 'Lee el contenido de la EEPROM del DS1971
EscribSP CON $0F 'Escribe la informacin en la Scratchpad del DS1971
CopiarSP CON $55 'Copia el contenido de Scratchpad del DS1971 a su EEPROM
Validar CON $A5 'Validacin de la copia de la Scratchpad a la EEPROM en el DS1971
'___________________________________________________________________________________
'Programa Principal
DO
DispOK = 0 'Asumir que no hay disp. conectados
DEBUG CLS,REP "*" \60,CR 'Mensaje al usuario para que coloque
DEBUG "Presente DS1971 en el soporte..." 'en el receptor el botn a programar
DO WHILE DispOK=0 : GOSUB Ver_DS1971 : LOOP 'Verifica presencia, familia e ID
DEBUG "un DS1971 ha sido detectado",CR 'Indica la presencia del iButton
DEBUG "Introduzca Nivel de Autorizacin (0-7) = "
'===================================================================================
'SUBRUTINAS
'Ver_DS1971 determina si hay o no un DS1971 conectado y valida el serial del mismo
'La variable DispOK tendr un 1 cuando se detecte un DS1971 y se compruebe la
'correcta recepcin de su identificacin
Ver_DS1971:
GOSUB Ver_Disp 'Busca si hay dispositivos
IF (Disp <> 1) THEN RETURN 'Si no hay disp. o hay ms de 1, abortar
OWOUT OW_Pin,OW_RADBB,[ReadRom] 'Leer el serial de identificacin
OWIN OW_Pin,OW_NRBB,[STR RomCode \8] 'y almacenarlo en la variable RomCode
IF (RomCode = $14) THEN GOSUB CRCVerif 'Si es un DS1971 validar su ID, sino
RETURN 'abortar
( RomByte(i) + 1)
7
Figura No. 13.25: Programa 13_5.bsp en ejecucin. Clave =
Fuente: Elaboracin Propia. i=0
La escogencia de la ecuacin utilizada para el clculo de la clave es arbitraria. En este caso se ha optado por
una expresin simple, que permite obtener un buen nivel de seguridad sin que se produzcan
desbordamientos matemticos ni implique una operacin, que por su dificultad matemtica, represente un
obstculo para el desarrollo del ejercicio. Existen muchos algoritmos de encriptacin de informacin
aprobados por organismos especializados en la materia, el estudio de ellos escapa totalmente de los
objetivos trazados para este capitulo. Ahora bien, el iButton que se encuentra en el receptor en este
momento, de ahora en adelante ser referido como llave # 1. El mismo ha sido programado para
funcionar en el sistema de control de acceso.
Retire la llave # 1 del Blue Dot Receptor y conecte otro DS1971, ahora llamado llave # 2. Programe la
llave # 2 con un nivel de acceso igual a 0. Retire la llave # 2 de su receptculo. Ejecute el programa
13_6.bsp y observar como se presentan en la pantalla LCD los mensajes:
Inicio
Caract_Propios
No
Clave
Error
Correcta?
Presentar mensaje en LCD:
CONTROL DE ACCESO 1-WIRE Si
Presentar en terminales P12 a P14
Esperar 2.5 seg El nivel de acceso de la llave
Mostrar en LC D
Presentar mensaje en LCD: nombre del usuario
Presente Llave en el soporte
Ver_DS1971 Mostrar en LC D
el de Nivel Autorizacin de la llave
No
DispOK = 1
Si Si
Llave
Desconectada
Cal_Clave
No
'Programa 13_6.bsp
'Este programa implementa un control de acceso 1-Wire utilizando al DS1971
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
ReadRom CON $33 'Lee la identificacin del dispositivo(1 slo esclavo en la RED)
MatchRom CON $55 'Selecciona a un dispositivo del bus (requiere saber su ID)
SearchRom CON $F0 'Lee todas las ID de todos los dispositivos presentes en la RED
'___________________________________________________________________________________
'Programa Principal
DIRD = $7F 'Pines de P12 a P14 como salidas, para mostrar el nivel de autorizacin
PAUSE 1500 'de la llave presentada. Pausa de 1.5 s para inicializar LCD
GOSUB Caract_Propios 'Carga los caracteres personalizados en el LCD
Inicio:
SEROUT SinLCD,Baudios,[Inst,BorrarLCD] 'Borrar contenido del LCD
SEROUT SinLCD,Baudios,[Inst,Linea1," CONTROL ACCESO "] 'Mensaje inicial con la
SEROUT SinLCD,Baudios,[Inst,Linea2," 1-WIRE "] 'funcin del programa
PAUSE 2500
DO
DO
GOSUB Pedir_Llave
DispOK = 0
DO : GOSUB Ver_DS1971 : LOOP UNTIL DispOK = 1 'Esperar por el DS1971
GOSUB Cal_Clave 'Calcula la clave para la llave detectada
GOSUB Leer_DS1971 'Lee la informacin de la llave
GET SPClave,Temp0 'Comparar la clave calculada con la
IF CLAVE <> Temp0 THEN GOSUB Error 'recibida, si difieren ejecutar Error
LOOP UNTIL CLAVE = Temp0 'Repetir hasta encontrar llave autorizada
GET SPNivel,Temp0 'Leer nivel de acceso
OUTD = Temp0 'Pines P12 a P14 muestran nivel de acceso
SEROUT SinLCD,Baudios,[Inst,BorrarLCD,Inst,Linea1] 'Borrar la LCD
FOR X = 0 TO 13 'Muestra el nombre del que
GET X,Temp : SEROUT SinLCD,Baudios,[STR Temp \1] 'lleva la llave en LCD
NEXT
SEROUT SinLCD,Baudios,[Inst,Linea2] 'Muestra el nivel de autorizacin
IF (Temp0 = 0) THEN 'asignado o la palabra NO AUTORIZADO
SEROUT SinLCD,Baudios,[" NO AUTORIZADO "] 'si el nivel es 0
ELSE
SEROUT SinLCD,Baudios,["NIVEL AUT. = ",DEC1 Temp0 ]
ENDIF
'Esperar hasta que la llave sea liberada
DO WHILE (Disp = 1): GOSUB Ver_Disp : PAUSE 500 : LOOP
OUTD = 0 'Apagar los LEDs
LOOP
'===================================================================================
'SUBRUTINAS
'Pedir_Llave presenta un mensaje en la LCD para que se coloque al DS1971
Pedir_Llave:
SEROUT SinLCD,Baudios,[Inst,BorrarLCD] 'Presentar mensaje para que se
SEROUT SinLCD,Baudios,[Inst,Linea1,"PRESENTE LLAVE "] 'coloque al DS1971
SEROUT SinLCD,Baudios,[Inst,Linea2,"EN EL SOPORTE..."]
RETURN
Ver_DS1971:
GOSUB Ver_Disp 'Busca si hay dispositivos
IF (Disp <> 1) THEN RETURN 'Si no hay disp. o hay ms de 1, abortar
OWOUT OW_Pin,OW_RADBB,[ReadRom] 'Leer el serial de identificacin
OWIN OW_Pin,OW_NRBB,[STR RomCode \8] 'y almacenarlo en la variable RomCode
IF (RomCode = $14) THEN GOSUB CRCVerif ELSE GOSUB Error
'Si es un DS1971 validar su ID, sino abortar
RETURN
Caract_Propios:
SEROUT SinLCD,Baudios,[Inst,CGRAM_0]
SEROUT SinLCD,Baudios,[$1F,$1F,$18,$1F,$1F,$18,$1F,$1F]
SEROUT SinLCD,Baudios,[$1E,$1F,$1B,$1B,$1E,$1F,$1B,$1B]
SEROUT SinLCD,Baudios,[$0E,$1F,$1B,$1B,$1B,$1B,$1F,$0E]
RETURN
Cal_Clave:
Clave =0
FOR x=0 TO 7
Clave = (SQR (RomCode(x)+1)) + Clave
NEXT
RETURN
'La rutina Error indica al usuario que ha introducido una llave invlida o que el
'contacto elctrico con el soporte y el DS1971 es deficiente
Error:
SEROUT SinLCD,Baudios,[Inst,BorrarLCD,Inst,Linea1] 'Borra contenido del LCD
FREQOUT Buz,250,1400 'un mensaje de error
SEROUT SinLCD,Baudios,[" ", E,R,R,O,R," ",E,R,R,O,R] 'produce un tono de alerta
FREQOUT Buz,250,900
PAUSE 1000
GOSUB Pedir_Llave
RETURN
'La rutina Leer_DS1971 direcciona la llave detectada, lee los 16 bytes de EEPROM
'y los almacena en la RAM Scratchpad de BS2p.
Leer_DS1971:
OWOUT OW_Pin,OW_RADBB,[MatchRom ,STR RomCode \8,LeerEE ,0]
OWIN OW_Pin,OW_NRBB ,[SPSTR 16]
OWOUT OW_Pin,OW_RADBitB,[0]
RETURN
Elementos a Utilizar
Cuando existe un slo dispositivo conectado al bus 1-
Wire puede omitirse el direccionamiento mediante el
(1) BASIC Stamp 2p. uso del comando SKIP ROM. Tambin puede utilizarse
(1) Conector Blue Dot Receptor (Dallas).
(2) DS1971 256 bit EEPROM (Dallas).
el comando READ ROM para leer la identificacin del
(1) Mdulo SLCD-BD. esclavo y direccionarlo. Pero, Qu hacer cuando existe
(1) Cable de Programacin. ms de 1 dispositivo en la RED 1-Wire al mismo
(1) StampW (Ver 2.0 beta 2.1 o superior). tiempo?.
Quizs, podramos leer manualmente los seriales de identificacin de todos los esclavos a conectar en el bus.
Para ello, se tendra que colocar cada dispositivo solo en el bus y aplicar los conceptos aprendidos con los
ejercicios anteriores. Con el comando READ ROM, leeramos su identificacin para luego almacenarla en una
memoria EEprom externa o en la memoria EEprom del BASIC Stamp. Posteriormente, se deber repetir el
procedimiento con todos los dems dispositivos hasta llegar al ltimo. Como en una red 1-Wire se pueden
conectar 100 o ms dispositivos, esta forma de manual de leer los seriales sera imprctica e ineficiente.
Previendo esta situacin, todos los dispositivos que emplean la tecnologa 1-Wire, soportan un comando
de ROM llamado SEARCH ROM. Este ya fue utilizado en todos los ejercicios anteriores para detectar la
presencia de dispositivos esclavos en la red, pero ciertamente, fue un uso bastante reducido en comparacin
a lo que se desarrollar en este ejercicio.
A continuacin, el maestro escribir un bit en el bus y cada esclavo comparar este bit con el que l
previamente haba transmitido. En caso de que los bits sean diferentes, el esclavo entrar en estado de
espera, del cual, slo saldr al producirse un nuevo reset. Si ambos bits coinciden, el esclavo trasmitir el
siguiente bit de su ID seguido de su complemento. El proceso se repetir hasta que se completen los 64 bits
de identificacin en cada dispositivo esclavo.
Pero, Qu bit transmiti el maestro?. En el caso de las dos combinaciones centrales de la tabla No. 13.3.
(01 y 10) el maestro tomar el bit recibido (ID Bit), lo almacenar en una variable temporal (donde al final
del proceso se tendrn los 64 bits de la ID de uno de los dispositivos) y lo reenviar al bus.
Cuando se produce una primera discrepancia (se reciben dos ceros consecutivos), el maestro colocar un 0
en el bus y almacenar el bit en el cual se produjo la colisin. Esto har que los dispositivos cuya ID fuese 1
en la posicin donde se present la colisin, dejen de participar en la bsqueda. El bit que se enva al bus se
almacena en la variable temporal de la ID.
Ahora bien, el proceso de bsqueda contina y al momento de presentarse otra colisin se compara el bit en
el que sta ocurre con la posicin del cero del prrafo anterior; si coinciden, entonces se enviar un 1 por el
bus (ID bit se toma igual a 1). Si la posicin de la colisin actual es mayor que la anterior deber escogerse
un cero, mientras que, si es menor debe repetirse el camino tomado en la bsqueda pasada para ese mismo
bit. Para entender mejor el algoritmo, se muestra en la figura No. 13.29 el diagrama de flujo de la
implementacin usada en el programa 13_7.bsp.
INICIO
3
BitAct = Si
RomCode (BitAct-1) = 1
UltDisc
Disp = 0
UltDisc=0 No
2 Si
BitAct > RomCode (BitAct-1) = 0
UltDisc UltCero = BitAct
NoDisp = 0
BitAct = 1 No
UltCero= 0
Si
RomCode
UltCero = BitAct
Enviar RESET seguido de comando (BitAct-1)
SEARCH ROM al bus 1-Wire
No
1
4
NoDisp = 1 Si Tbit0 =
UltCero = 0 No
Tbit1 = 1 BitAct
RomCode (BitAct-1) = 0 BitAct = BitAct +1
= 64
No Si
1
UltDisc = UltCero
Tbit0 =
RomCode(BitAct-1) = TBit0
Tbit1 = 0
No Si Si
NoDisp
Disp = Disp + 1
=0
Enviar TBit0 por bus 1-Wire
No
Mostrar los 64 Bits de RomCode
4
No
2 UltDisc=
0
Figura No. 13.29: Diagrama de
flujo del algoritmo de Search ROM
Si
utilizado en el programa 13_7.bsp.
Fuente: Elaboracin Propia. Mostrar en debug terminal;
Existen: Disp, dispositivos conectados al bus 1-Wire
Ejecute el programa 13_7.bsp y conecte al menos dos dispositivos en el bus. En el debug terminal deber
aparecer algo similar a lo mostrado en la figura No. 13.30.
'Programa 13_7.bsp
'Este programa tiene por objetivo implementar el algoritmo Search ROM para encontrar
'todos los dispositivos esclavos conectados a una RED 1-Wire
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
SearchRom CON $F0 'Lee todas las ID de todos los dispositivos presentes en la RED
OW_RADBB CON 1 'Modo 1: Reset Antes de los Datos, modo Byte, Baja velocidad
OW_NRBitB CON 4 'Modo 4: No Reset, modo Bit, Baja velocidad
'___________________________________________________________________________________
'Programa Principal
Inicio:
Inicio:
DO
El propsito del programa anterior es implementar el algoritmo de bsqueda de dispositivos esclavos en una
red 1-Wire. Sin embargo, este programa no efecta ningn tipo de verificacin de la informacin recibida,
por esta razn, se ha incluido el programa 13_8.bsp. El programa 13_8.bsp, busca a todos los dispositivos
en una red 1-Wire, valida la identificacin obtenida por medio del CRC-8, almacena en la EEprom del
BASIC Stamp 2p cada uno de los seriales vlidos obtenidos y muestra uno por uno los dispositivos, con ID y
nmero.
'Programa 13_8.bsp
'Este programa tiene por objetivo implementar el algoritmo Search ROM para encontrar
'todos los dispositivos conectados a la RED 1-Wire, validar las IDs recibidas,
'almacenar en EEprom del BASIC Stamp las IDs y mostrar el tipo de dispositivo al que
'corresponde la identificacin.
'===================================================================================
'{$STAMP BS2p}
'{$PBASIC 2.5}
'___________________________________________________________________________________
'Declaracin de Variables y Constantes
SearchRom CON $F0 'Lee todas las ID de todos los dispositivos presentes en la RED
OW_RADBB CON 1 'Modo 1: Reset Antes de los Datos, modo Byte, Baja velocidad
OW_NRBitB CON 4 'Modo 4: No Reset, modo Bit, Baja velocidad
'___________________________________________________________________________________
'Programa Principal
Inicio:
STORE RomCodes 'Indica que las instrucciones READ/WRITE operan en el banco 1
SEROUT SinLCD,Baudios,[Inst,BorrarLCD,Inst,Linea1, "PROTOCOLO 1-WIRE"]
SEROUT SinLCD,Baudios,[Inst,Linea2, "1- BUSCAR 2- VER"]
DO
BUTTON PB1,0,255,0,Esp(0),1,Buscar 'Al presionar PB1 ejecuta la bsqueda
BUTTON PB2,0,255,0,Esp(1),1,Listar 'Al presionar PB2 muestra la ID de los disp.
LOOP
IF (CRC = RomCode (7)) AND (NoDisp=0) THEN 'Si la ID es correcta y hay dispositivos
Disp = Disp + 1 'entonces se incrementa el contador
FOR Indice =7 TO 0 'Y se escribe en el Banco 1 de la EEPROM del BS2p la
WRITE ((Disp-1)*8+Indice), RomCode(Indice) 'ID del dispositivo encontrado
NEXT
ENDIF
Listar:
SEROUT SinLCD,Baudios,[Inst,BorrarLCD] 'Borrar contenido de la LCD
SEROUT SinLCD,Baudios,[Inst,Linea1,"TOTAL DISP.= ",DEC3 Disp]
PAUSE 2000 'Muestra el total de dispositivos en RED por 2 seg
X = 0
DO WHILE Disp > X 'Mientras queden dispositivos por mostrar
SEROUT SinLCD,Baudios,[Inst,Linea1,"ID # ",DEC2 X+1, " "]
SEROUT SinLCD,Baudios,[Inst,Linea2]
FOR Y = (X*8)+7 TO (X*8) 'Obtiene el ID del dispositivo actual y lo va
READ Y,Temp : 'mostrando en la lnea 2 del LCD
SEROUT SinLCD,240,[HEX2 Temp]
NEXT
LOOKDOWN Temp, [$1 ,$2 ,$4 ,$5 ,$6 ,$8 ,$9 ,$0A,$0B,$0C,$0F,$10,$14,$1A,$21,
$12,$20,$22,$27,$28,$2C,$23,$84], Temp
'Temp ahora contiene el ndice coincidente con la familia
LOOKUP Temp, [F01,F02,F04,F05,F06,F08,F09,F0A,F0B,F0C,F0F,F10,F14,F1A,F21,
F12,F20,F22,F27,F28,F2C,F23,F84],Dir
'Dir contiene la direccin de la EEPROM donde se encuentra el nombre
SEROUT SinLCD,Baudios,[Inst,Linea1+9]
STORE Nombres 'Los comandos READ y WRITE se aplican al Banco 0
FOR Y = Dir TO (Dir + 6) 'Obtiene cada una de las letras del nombre
READ Y,Temp : SEROUT SinLCD,Baudios,[STR Temp\1] 'y las muestra en la LCD
NEXT
STORE RomCodes 'Los comandos READ y WRITE se aplican al Banco 1
X = X + 1 'Prximo dispositivo
PAUSE 3000 'Espera de 3 segundos para lectura de la LCD
LOOP
GOTO Inicio 'Al finalizar regresa al principio
'===================================================================================
'SUBRUTINAS
'
CRCVerif:
CRC =0
FOR X = 0 TO 6
CRCt = RomCode(X) : GOSUB CRCCalc
NEXT
RETURN
CRCCalc:
FOR Indice = 0 TO 7
IBit = CRC.BIT0 ^ CRCt.BIT0
CRC = CRC >> 1
CRC.BIT2 = CRC.BIT2 ^ IBit : CRC.BIT3 = CRC.BIT3 ^ IBit : CRC.BIT7 = IBit
CRCt = CRCt >> 1
NEXT
RETURN
En este ejercicio, se ha utilizado la memoria EEPROM del BASIC Stamp para almacenar las cadenas de texto
con los nombres de los dispositivos 1-Wire y los seriales de identificacin de los mismos. Los seriales han
sido almacenados en el bloque 1 de EEPROM , mientras que los nombres se encuentran junto con el cdigo
del programa en el bloque 0. Dependiendo de la cantidad de dispositivos existentes en la red 1-Wire, la
cantidad de memoria EEPROM utilizada para almacenar sus seriales podra crecer significativamente. Por
ejemplo, si existen 50 dispositivos en la red 1-Wire, se utilizarn 400 bytes de memoria. Si no se toma la
previsin de almacenar estos datos en reas separadas de la memoria EEPROM del BASIC Stamp, se podra
borrar parte del propio programa en ejecucin. Para escribir los seriales en la EEPROM se ha utilizado:
FOR Indice =7 TO 0
WRITE ((Disp-1)*8+Indice), RomCode(Indice)
NEXT
Este conjunto de instrucciones van almacenado cada byte del serial de ID (RomCode(I)) en una localidad
que se calcula como (Disp-1)*8+Indice. A medida que se encuentra cada dispositivo, la variable Disp
aumenta su valor en 1, de modo que el producto (Disp-1)*8, el cual contiene la direccin donde se
almacenar el primer byte de la identificacin del dispositivo recin hallado, apunta a una localidad de
memoria separada por 8 bytes. De esta manera, se evita la sobre escritura de los seriales previamente
almacenados. Un procedimiento similar se ha utilizado para la lectura, slo que la extraccin se hace en el
sentido contrario al de la escritura, a fin, de presentar los datos directamente en una pantalla LCD.
Programacin
Anexo No. 01
Esquemas Elctricos del Sistema de Desarrollo
MDKB28
El Bus de Expansin del sistema de desarrollo MDK-B28 es compatible con los AppMods de
Parallax, Inc.
Anexo No. 02
Especificaciones de Componentes
ISBN 980-12-2188-7