You are on page 1of 0

Curso Terico - Prctico, Experimentos y Cdigo Fuente

ROSO Electric Supply


Distribuidor Autorizado
MicroControladores
www.roso-control.com
Contenido






Prefacio ..........................................................................................................................................................
CURSO NIVEL BASICO
Captulo No. 01: Diagramas de Flujo ............................................................................................................
Captulo No. 02: Bases de la Programacin .................................................................................................
Captulo No. 03: Qu es un MicroControlador? ..........................................................................................
Captulo No. 04: Procesamiento de Bits .......................................................................................................
Captulo No. 05: Midiendo una Entrada ........................................................................................................
Captulo No. 06: Analgico Vs. Digital ..........................................................................................................
Captulo No. 07: Conversin Analgica a Digital ...........................................................................................
Captulo No. 08: Conversin Digital a Analgica ...........................................................................................
Captulo No. 09: Acondicionamiento de una Entrada/Salida Digital ..............................................................
Captulo No. 10: Movimiento Micro-Controlado .............................................................................................
Captulo No. 11: Automatizacin Simple .......................................................................................................
Captulo No. 12: Control Secuencial .............................................................................................................

CURSO NIVEL AVANZADO
Captulo No. 13: Control de Procesos ..........................................................................................................
Captulo No. 14: Protocolo I2C, Adquisicin de Datos (Data Logger) ..........................................................
Captulo No. 15: Comunicacin Serial RS232 ..............................................................................................
Captulo No. 16: Protocolo 1-Wire de Dallas Semiconductors .....................................................................
ANEXOS
Anexo "A" Pantalla de Cristal Lquido LCD ..............................................................................................
Anexo "B" Pantalla de LED's 4 x 7 Segmentos .......................................................................................
Anexo "C" StampPlot ...............................................................................................................................
Anexo "D" Referencia Rpida del PBASIC ..............................................................................................
Anexo "E" Macro en Excel StampDAQ ....................................................................................................
Anexo "F" Directivas y Comandos del PBASIC 2.5 .................................................................................
1
3
7
15
26
38
48
57
79
85
93
98
102
110
124
156
172
A - 2
B - 2
C - 2
D - 2
E - 2
F - 2
Prefacio










Estimados Participantes:

El curso sobre MicroControladores, fue diseado con la finalidad de brindar al participante


la oportunidad de experimentar, programar y programar a un MicroControlador real. El
primer nivel (Bsico) se basa en las experiencias obtenidas sobre los temas encontrados en
los cursos de auto - aprendizaje de Parallax. El segundo nivel (Avanzado), fue totalmente
desarrollado por nuestros ingenieros para brindar al estudiante la posibilidad de desarrollar
equipos y aplicaciones que sirvan de base para completar sus trabajos de grado tanto a
nivel tcnico como universitario; e incluso, para aquellos profesionales que deseen
desarrollar equipos comerciales y/o industriales. Si su preparacin no alcanza el nivel
tcnico en electrnica, no se preocupe, ya que, a travs de todo el texto se hace un gran
esfuerzo para explicar conceptos bsicos sobre electricidad, electrnica y programacin.

Son muchas las motivaciones que nos llevaron a la preparacin de este texto; el mundo
de los MicroControladores es muy interesante, cambiante y todos los das gracias a las
nuevas tecnologas se desarrollan productos ms potentes, rpidos y completos para la
automatizacin de procesos industriales. De hecho, los MicroControladores se encuentran
en todas partes; desde los electrodomsticos, celulares, industria automotriz y robtica.
Con los MicroControladores podemos construir circuitos y dispositivos "inteligentes" que
permiten ser reprogramados en lnea para modificar o crear un nuevo comportamiento.

La ventaja del uso de los MicroControladores sobre las otras opciones clsicas, es que
podemos cambiar el comportamiento de nuestro circuito o dispositivo, simplemente
modificando el programa interno del MicroControlador. De eso se trata ste texto, de
programar y programar a un MicroControlador de una manera extremadamente fcil y
rpida.

Jos M. Rodrguez S.
ROSO Electric Supply




1. Diagramas de Flujo
Diagramas de Flujo
Un diagrama de flujo es una representacin grfica detallada
que muestra la naturaleza y secuencia paso a paso de una
operacin. Se puede hacer un diagrama de flujo de cualquier
tarea diaria, como conducir hasta el supermercado, o ir al
colegio. Cuntos pasos estn involucrados en esta simple
tarea? Cuntas decisiones se toman hasta llegar al
supermercado o al colegio? Se puede hacer el diagrama de flujo de una operacin formal, cocinar bizcochos
por ejemplo, ya sea un proceso a pequea escala en su cocina o a gran escala en una fbrica. Ypor supuesto,
se puede hacer un diagrama de flujo que tenga en cuenta los pasos y decisiones necesarios para que la tarea
sea llevada a cabo por una computadora o un microcontrolador.

Un proceso relativamente simple normalmente es fcil de comprender y fluye en forma lgica desde el
principio hasta el final. En el caso de cocinar bizcochos, los pasos involucrados son bastante simples. Una
receta normalmente requiere que se mezclen los ingredientes necesarios, se armen los bizcochos y se
cocinen apropiadamente. Hay que tomar varias decisiones: Estn bien mezclados los ingredientes? Est
precalentado el horno? Se cocinaron los bizcochos el tiempo necesario?

A medida que el proceso se vuelve ms complejo, sin embargo, es ms difcil diagramar el orden de los
eventos necesarios, para llegar a un final exitoso. Un programa en un MicroControlador puede tener muchsimos
pasos y bifurcaciones if - then. Puede ser difcil seguir el flujo del programa, si solamente observramos el
cdigo.

Un diagrama de flujo se construye con unos smbolos grficos especiales que representan acciones,
funciones, y equipamiento usado para lograr un resultado especfico. La Tabla 1 muestra los smbolos
y su uso.
Tabla 1: Smbolos de Diagramas de Flujo




Inicio / Finindica el inicio y el final de un programa o proceso.

Procesoindica un paso que debe ser cumplido.


Entrada / Salidaindica que el proceso requiere una entrada o
provee una salida.



Diagramas de Flujo


www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 3
Diagramas de Flujo


Decisinindica que el proceso tiene la posibilidad de tomar
distintas direcciones de acuerdo a una condicin. Normalmente,
tiene la forma de una desigualdad verdadera o falsa.

Lnea de flujoes usada para mostrar la direccin del flujo entre
smbolos.



Conector es usado para mostrar una conexin entre puntos de
un mismo diagrama, o diferentes diagramas de flujo.

Subrutina o subprocesoindica el uso de una rutina o proceso
definido.



Ejemplo: Ajuste de la Temperatura de una Ducha

Tomemos como ejemplo el diagrama de flujo de una tarea diaria: ajustar la temperatura de una ducha. El
proceso de ajustar la temperatura del agua involucra varios pasos. Primero se abren las Llaves de agua fra y
caliente, esperamos un rato para que se estabilice la temperatura del agua, la probamos y tomamos algunas
decisiones para realizar los ajustes necesarios. Si la temperatura del agua es demasiado fra, abrimos ms la
Llave de agua caliente y probamos nuevamente. Si el agua est demasiado caliente, se abre ms la del agua
fra. Una vez que realizamos cada ajuste, vamos al punto donde esperamos unos segundos antes de probar
nuevamente. Por supuesto no tuvimos en cuenta el caso cuando las Llaves estn completamente abiertas.
Se pueden agregar pasos en el proceso de ajuste de temperatura para corregir esta condicin. La Figura 1
muestra un diagrama de flujo de este proceso.

Este ejemplo demuestra un proceso que puede ser usado para ajustar la temperatura, pero seran estos los
pasos para un programa de un microcontrolador? Seguro! Las Llaves podran ser ajustadas por servos, y la
temperatura del agua podra determinarse con un sensor. En la mayora de los casos, un proceso simple para
nosotros puede ser bastante complejo para un microcontrolador. Tome el ejemplo de dar la vuelta a la
esquina conduciendo un automvil. Puede hacer una lista de las entradas que procesamos mientras
realizamos el giro?


www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 4
Diagramas de Flujo
Figura 1: Diagrama de flujo. Ejemplo del control
de la Temperatura en una Ducha

Inicio
Abrir la llave del agua fra
1 Vuelta
Abrir la llave del agua
Caliente, 1 Vuelta
Esperar
5 segundos
Probar la Temperatura
del Agua
Agua
Muy Caliente?
Agua
Muy Fra ?
Abrir la llave del agua
Caliente, 1 Vuelta
Abrir la llave del agua fra
1 Vuelta
Entrar a la Ducha
A
A
A
Si
Si
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 5




2. Bases de la Programacin
Bases de la Programacin

Bases de la Programacin

Contenido de un Programa

En este captulo, presentaremos varios elementos de un programa: Cdigo lineal, saltos, bucles y
subrutinas.

Los ejemplos siguientes usan pseudo-cdigo para demostrar y describir la estructura del programa.
Itlicas se usan para indicar las secciones de pseudo-cdigo que deberan ser reemplazadas por
instrucciones de programacin vlidas para lograr que el ejemplo pueda ser compilado y ejecutado
correctamente. Usted no necesita realizar ninguno de estos ejemplos, ya que todos estos conceptos
sern usados en los prximos captulos.

La gente a menudo piensa en las computadoras y los MicroControladores como dispositivos
inteligentes cuando en realidad, no realizan ninguna tarea sin un juego especfico de instrucciones.
Este juego de instrucciones se llama programa. Escribirlo es nuestro trabajo. Los programas del
Stamp se escriben en un lenguaje de programacin llamado PBASIC, una versin especfica del
lenguaje de programacin BASIC (Beginners All-purpose Symbolic Instruction Code= Cdigo de
Instrucciones Simblicas Multi-propsito para Principiantes) desarrollada por Parallax. El BASIC es
muy popular debido a su simplicidad.

Un programa puede ser tan simple como una lista de instrucciones. Algo as:

instruccion 1
instruccion 2
instruccion 3
END

Esta es una estructura de programa muy simple, pero vlida. Lo que encontrar sin embargo, es que
la mayora de los programas no se ejecutan en forma lineal como en el programa anterior. El flujo del
programa es a menudo redirigido con saltos, bucles y subrutinas, intercalando con pequeas
secciones lineales. Los requerimientos del flujo del programa son determinados por el objetivo del
programa y las condiciones bajo las cuales se ejecutar.

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 7
Bases de la Programacin

Saltos Redireccionando el Flujo de un Programa

Un comando de salto es el que causa que el flujo del programa se desve de su trayectoria lineal. En
otras palabras, cuando el programa encuentra un comando de salto, no ejecutar, en la mayora de
los casos, la siguiente lnea de cdigo. El programa normalmente, se dirigir a otro sector. Hay dos
categoras de comandos de salto: incondicional y condicional. El PBASIC tiene dos comandos, GOTO y
GOSUB que realizan saltos incondicionales.

Este es un ejemplo de salto incondicional usando GOTO:

Rotulo:
instruccion 1
instruccion 2
instruccion 3
GOTO Rotulo

Lo llamamos salto incondicional debido a que siempre se ejecuta. GOTO redirige el programa hacia
otro lugar. La ubicacin se especifica como parte del comando GOTO y se denomina direccin.
Recuerde que las direcciones estn al principio de una lnea de cdigo y son seguidas por dos puntos
(:). Ver frecuentemente GOTO al final del cuerpo principal del cdigo, haciendo que las instrucciones
del programa se ejecuten nuevamente.

El salto condicional har que el flujo del programa se modifique bajo circunstancias especficas. El
salto condicional ms simple se logra con la funcin IF-THEN. La funcin de PBASIC IF-THEN es
diferente de la original de BASIC. En PBASIC, THEN siempre es seguido por una direccin de
programa (etiqueta), mientras que en el BASIC estndar se permite colocar instrucciones a
continuacin del THEN. Si la condicin que se evala es verdadera, el programa saltar a la direccin
especificada. Caso contrario, continuar en la siguiente lnea de cdigo.

Observe este listado:

Inicio:
instruccion 1
instruccion 2
instruccion 3
IF condicion THEN Inicio

Se ejecutan las instrucciones y se verifica la condicin. Si se evala como verdadera, el programa
saltar hacia atrs a la lnea llamada Inicio. Si la condicin se evala como falsa, el programa
continuar por la lnea que se encuentre a continuacin de la instruccin IF-THEN.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 8
Bases de la Programacin

A medida que sus requerimientos se vuelven ms complicados, podra necesitar que su programa
salte a un gran nmero de direcciones, dependiendo de cierta condicin. La primera aproximacin es
usar mltiples instrucciones IF-THEN.

IF condicion_0 THEN Etiqueta_0
IF condicion_1 THEN Etiqueta_1
IF condicion_2 THEN Etiqueta_2

Esta aproximacin es vlida y puede ser usada. Afortunadamente, el PBASIC tiene un comando
especial, BRANCH, que permite que un programa salte a distintas direcciones dependiendo del valor
de una variable. Esto es muy til debido a que las condiciones que mencionbamos, a menudo
proceden de una variable de control. BRANCH es un poco ms sofisticado en su funcionamiento, pero
muy poderoso debido a que puede reemplazar mltiples instrucciones IF-THEN. BRANCH requiere
una variable de control y una lista de direcciones o etiquetas.

En el caso de una nica variable de control, el listado anterior puede ser reemplazado por una lnea
de cdigo:

BRANCH controlVar,[ Etiqueta_0, Etiqueta_1, Etiqueta_2]

Cuando controlVar (variable de control) es cero, el programa saltar a Etiqueta_0, cuando
controlVar es uno el programa saltar a Etiqueta_1 y as.

Bucles Ejecutando el cdigo una y otra vez

Los bucles hacen que secciones del programa se repitan. Los bucles a menudo usan saltos
condicionales e incondicionales para crear varias estructuras de repeticin. Este es un ejemplo de
bucle incondicional:

Etiqueta:
instruccion 1
instruccion 2
instruccion 3
GOTO Etiqueta

Al usar GOTO las instrucciones se repiten incondicionalmente. Al usar IF-THEN, podemos crear bucles
que se repetirn en ciertas condiciones. Los siguientes ejemplos son llamados bucles condicionales.
Estos bucles se ejecutarn bajo ciertas circunstancias. La programacin condicional es lo que le
otorga a los MicroControladores su inteligencia.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 9
Bases de la Programacin

Etiqueta:
instruccion 1
instruccion 2
instruccion 3
IF condicion THEN Etiqueta

Con esta estructura de repeticin, las instrucciones se ejecutarn mientras la condicin se evale
como verdadera. Cuando la condicin se evale como falsa, el programa continuar por la lnea de
cdigo siguiente a la instruccin IF-THEN. Es importante observar que en el listado anterior las
instrucciones siempre se ejecutarn al menos una vez, incluso cuando la condicin sea falsa.

Para evitar que suceda esto, es necesario probar la condicin antes de ejecutar las instrucciones. El
cdigo puede escribirse como se muestra a continuacin para lograr que las instrucciones (1 3)
solamente se ejecuten cuando la condicin sea verdadera. Cuando la condicin es evaluada como
falsa, el programa contina en Etiqueta_2.

Etiqueta_1:
IF NOT (condicion) THEN Etiqueta_2
instruccion 1
instruccion 2
instruccion 3
GOTO Etiqueta_1
Etiqueta_2:
instruccion 4

El ltimo ejemplo de bucle condicional se trata de un bucle programado mediante la sentencia FOR-
NEXT.

FOR controlVar = ValInicial TO ValFinal STEP tamaoPaso
instruccion 1
instruccion 2
instruccion 3
NEXT

La construccin FOR-NEXT es usada para lograr que una seccin de cdigo se ejecute una cantidad
determinada de veces. FOR-NEXT usa una variable de control para determinar la cantidad de
repeticiones. El tamao de la variable determinar la cantidad mxima de repeticiones. Por ejemplo,
la cantidad mxima de repeticiones cuando se utiliza una variable de control tipo byte ser 255.

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 10
Bases de la Programacin
La opcin STEP de FOR-NEXT es usada cuando se necesita que el incremento de la variable en cada
repeticin sea distinto de uno. Si, por ejemplo, el bucle debe contar en valores pares, el cdigo
podra verse as:

FOR controlVar = 2 TO 20 STEP 2
instruccion 1
instruccion 2
instruccion 3
NEXT


Subrutinas Cdigo reutilizable que ahorra espacio de programa

El ltimo concepto de programacin que discutiremos es la subrutina. Una subrutina es una seccin
de cdigo que puede ser llamada (ejecutada) desde cualquier punto del programa. GOSUB es usado
para redirigir el programa hacia el cdigo de la subrutina. La subrutina termina con el comando
RETURN. Este comando hace que el programa salte hacia la lnea de cdigo que sigue a la llamada
GOSUB original.

Inicio:
GOSUB MySub
PAUSE 1000
GOTO Inicio

MySub:
instruccion 1
instruccion 2
instruccion 3
RETURN

En este ejemplo, el cdigo de MySub es ejecutado y luego el programa salta hacia atrs a la lnea
PAUSE 1000.

Estilo de Programacin

El PBASIC es un lenguaje muy flexible. Sus reglas son simples y fciles de aprender. El PBASIC no es
sensible al formato del programa, uso de espacios en blanco (espacios, tabulaciones, lneas en
blanco, etc.) y no detecta diferencias entre maysculas y minsculas; esto quiere decir que dirs,
Dirs y DIRS significan lo mismo en PBASIC as que podremos elegir la opcin que ms nos guste
para trabajar.

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 11
Bases de la Programacin

Los programadores experimentados tienden a adoptar o desarrollar un estilo (de formato) de
programacin consistente. Ya sea que elija adoptar un estilo o desarrollar uno propio, el hecho de
mantener la coherencia con el mismo simplificar la solucin de problemas y las revisiones futuras.
Esto es especialmente cierto cuando quiere modificar un programa en el que no ha trabajado por
mucho tiempo.

Los programas de este libro usan las siguientes convenciones:


Plantilla

La estructura de todos los programas es similar. sta puede dividirse en cuatro secciones:

Encabezado: Esta seccin contiene el nombre del archivo y una corta descripcin de su
funcionamiento. Tambin se registran en este sector las revisiones y actualizaciones que se
realizan a la versin original. Adicionalmente hemos agregado la directiva del compilador que
indica el modelo de BASIC Stamp que estamos usando.

Declaraciones: sta seccin contiene la declaracin de los alias para los pines de E/S, valores
constantes y variables. En los ejemplos de programacin de esta gua, las variables PBASIC
siempre tendrn nombres significativos. Los nicos nombres internos que se usarn sern
Outs y Dirs y siempre en la seccin de inicializacin y no en el cdigo principal.

Instrucciones DATA: Algunos programas almacenan informacin adicional en la EEPROM del
BASIC Stamp con instrucciones DATA. Esta seccin provee el espacio para dicho
almacenamiento.

Inicializacin: Esta seccin es usada para inicializar el estado de los pines de E/S, variables
del programa y cuando sea necesario, el hardware externo.

Cdigo: Es donde reside la parte principal del cdigo del programa.

Subrutinas: Las subrutinas estn separadas del cuerpo principal del cdigo debido a que
pueden ser llamadas desde cualquier parte del programa. La separacin entre subrutinas
tambin facilita la portabilidad del cdigo, posibilitando usar la herramienta de edicin cut
and paste (cortar y pegar) para reutilizar las subrutinas en otros programas.

Puede utilizar una plantilla del programa cargandola cuando comienza un proyecto nuevo, el nombre de la
misma es: PL2_1R0.bsp y se encuentra en el CD entregado junto al manual del curso.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 12
Bases de la Programacin
' =========================================================================
' Programa: PL2_1R0.bsp
'
' { Descripcin }
'
' {$STAMP BS2P}
' =========================================================================

' { Pines de E/S }

' { Constantes }

' { Variables }

' -------------------------------------------------------------------------

' { Instrucciones DATA }

' -------------------------------------------------------------------------

' { Inicializacin }

' -------------------------------------------------------------------------

' { Cdigo }

Principal:

DEBUG "HOLA A TODOS, ESTE ES MI PRIMER PROGRAMA DEL CURSO ... "
END

' -------------------------------------------------------------------------

' { Subrutinas }



www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 13




3. Qu es un MicroControlador?
Qu es un MicroControlador?


CPU
Central Processing Unit.
(Unidad de procesamiento
Central). Este trmino se
refiere especficamente al
circuito integrado (con-
tenido dentro de la caja de
la computadora), que hace
los verdaderos cmputos.
Sin embargo, a veces el
trmino es usado (aunque
incorrectamente), para in-
clur todo lo que est dentro
de la caja, incluyendo el
disco rgido, la disquetera, el
CD ROM, la fuente y la
Tarjeta Madre.
Microcontrolador
Es un circuito integrado
que contiene muchas de
las mismas cualidades que
una computadora de
escritorio, tales como la
CPU, la memoria, etc.,
pero no incluye ningn
dispositivo de comunica-
cin con humanos, como
monitor, teclados o mouse.
Los MicroControladores
son diseados para
aplicacin de control de
mquinas, ms que para
interactuar con humanos.

Qu es un
MicroControlador?
Muchos de nosotros sabemos qu apariencia tiene una
computadora. Usualmente tiene teclado, monitor, CPU (Unidad
de Procesamiento Central), impresora y mouse. Este tipo de
computadoras, como la Mac o PC, son diseadas principalmente
para comunicarse con humanos.

Manejo de base de datos, anlisis financieros o incluso procesadores de textos, se encuentran todos dentro
de la gran caja, que contiene CPU, la memoria, el disco rgido, etc. El verdadero cmputo, sin embargo,
tiene lugar dentro de la CPU.

Si piensa sobre esto, el nico propsito del monitor, teclado, mouse e incluso la
impresora, es conectar a la CPU con el mundo exterior.

Pero usted saba que hay computadoras alrededor de nosotros, corriendo
programas y haciendo clculos silenciosamente sin interactuar con ningn
humano? Estas computadoras estn en su auto, en el transbordador espacial, en
un juguete, e incluso puede haber uno en su secador de pelo.

Llamamos a stos dispositivos MicroControladores . Micro porque son
pequeos, y Controladores, porque controlan mquinas o incluso otros
controles. Los MicroControladores , por definicin entonces, son diseados
para ser conectados ms a mquinas que a personas. Son muy tiles porque
usted puede construir una mquina o artefacto, escribir programas para
controlarlo, y luego dejarlo trabajar para usted automticamente.

Hay un nmero infinito de aplicaciones para los MicroControladores. Su
imaginacin es el nico factor limitante!

Cientos (sino miles) de variaciones diferentes de MicroControladores estn
disponibles. Algunos son programados una vez y producidos para aplicaciones
especficas, tales como controlar su horno microondas. Otros son
reprogramables, que quiere decir que pueden ser usados una y varias veces
para diferentes aplicaciones. Los MicroControladores son increblemente
verstiles, el mismo dispositivo puede controlar un aeromodelo, una tostadora,
o incluso el ABS de su auto (sistema antibloqueo).

Este experimento nos introduce en un microcontrolador muy popular llamado
BASIC Stamp. El BASICStamp es un conjunto sofisticado de circuitos, todos
ensamblados en una pequea plaqueta de circuito impreso (PCB). En realidad, el PCB tiene el mismo tamao
de muchos otros tipos de circuitos integrados. El BASICStamp es mostrado en la Figura 3.1.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 15
Qu es un MicroControlador?
Figura 3.1: BASIC Stamp II
Esta es la imagen del mdulo BASIC
Stamp II. El mdulo real tiene a _
proximadamente el tamao de una
estampilla.





La escritura de programas para el BASICStamp se realiza con la versin especial del lenguaje BASIC (se llama
PBASIC). La mayora de los otros MicroControladores requieren alguna forma de programacin que puede ser
muy difcil de aprender. Con el BASICStamp, usted puede crear circuitos simples y programas en minutos,
(que es lo que estamos por hacer). Sin embargo, no debe pensar errneamente que todo lo que el BASIC
Stamp puede hacer son cosas simples. Muchos productos comerciales sofisticados han sido creados y
vendidos usando un BASICStamp como cerebro.

Cuando creamos dispositivos que tienen un microcontrolador actuando como un cerebro, en muchas
formas estamos tratando de imitar cmo acta nuestro cuerpo.

Su cerebro necesita cierta informacin para tomar decisiones. Esta informacin es obtenida a travs de
varios sensores, como la vista, el odo, el tacto, etc. Estos sensores detectan lo que nosotros llamamos el
mundo real o mundo exterior, y envan esa informacin al cerebro para procesamiento.
Recprocamente, cuando su cerebro toma una decisin, manda seales a travs de su cuerpo para hacer algo
en el mundo exterior. Utilizando las entradas de sus sentidos, y las salidas de sus piernas, brazos, manos,
etc., su cerebro se est comunicando e interactuando con el mundo exterior.

Cuando usted va manejando por la ruta, sus ojos detectan un ciervo corriendo frente a usted. Su cerebro
analiza esta entrada, toma una decisin y emite instrucciones a sus brazos y manos, girando el volante
para evitar golpear al animal. Esta entrada/decisin/salida es de lo que se tratan los MicroControladores.
Nosotros llamamos a esto entrada/salida o e/s, para abreviar.

Este captulo lo introduce en la funcin de salida del BASIC Stamp, y en cada captulo siguiente se
introducen nuevas ideas y experimentos para que usted realice. Usted ser capaz de usar las ideas de stas
lecciones para inventar sus propias aplicaciones para programas de MicroControladores y circuitos.


PCB:
Printed Circuit Board.
(Plaqueta de circuito im-
preso). Los circuitos e-
lectrnicos complejos re-
quieren muchas conexiones
elctricas entre componen-
tes. Una PCB es simplemente
una pieza rgida, nor-
malmente de fibra de vidrio,
que tiene muchos cables de
cobre sobre su superficie (o
algunas veces dentro). Estos
cables llevan las seales
entre los componentes del
circuito.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 16
Qu es un MicroControlador?
Partes
Requeridas
Constryalo!
Para cada experimento usted necesita una PC compatible IBM,
usando DOS 2.0 o superior, Win95/98/ o NT4.0. Para el
Experimento 1 usted necesita lo siguiente:



(1)Un mdulo BASIC Stamp
(1) Una Plaqueta de Educacin NX-1000
(1) Un cable de programacin
(2) Dos LEDs con resistencias de 220 Ohm
(1) Una fuente de tensin conectada a la plaqueta de educacin
(1) Set de cables de conexin
(1) Un programa editor de BASIC Stamp, versin 1.33 o superior.



Cualquier sistema microcontrolador (o computadora), consiste
en dos componentes primarios: hardware y software (circuito y
programa). El hardware es el componente fsico del sistema. El
software es la lista de instrucciones que residen dentro del
hardware. Nosotros crearemos ahora el hardware, y luego
escribiremos un programa de software para controlarlo.

Para que nuestro microcontrolador interacte con el mundo exterior, necesitamos armar algo de hardware.
Nosotros usaremos una plaqueta de circuito impreso llamada Plaqueta de Educacin. Esta plaqueta fue
creada para simplificar las conexiones con elementos del mundo real, al BASICStamp. Se proveen conectores
para la alimentacin (fuente externa o batera de 9 voltios), el cable de programacin, y los pines de
entrada/salida del BASICStamp. Hay tambin un rea de prototipo o protoboard (una placa blanca con
muchos agujeros).
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 17
Figura 3.2.
Fotografa de la Plaqueta de
Educacin modelo NX-1000.
Qu es un MicroControlador?

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 18
Figura 3.3. Fotografa de las conexiones entre el BASIC Stamp y los LED's a travs de la Protoboard.
Es importante entender cmo trabaja la protoboard. La protoboard tiene muchas tiras metlicas que
pasan por debajo de cada fila. Estas tiras conectan los huecos unos a otros; sto hace fcil conectar
componentes juntos para construir un circuito elctrico. Usted puede conectar diferentes componen_
tes enchufndolos dentro de los nodos comunes. La Figura No. 3.4. ilustra ste concepto.
Figura 3.4. Conexiones de la Protoboard.
Las lneas negras horizontales muestran como
los huecos estn conectados por debajo de la
Protoboard. Esto significa que usted no tiene
que enchufar dos cables en el mismo hueco,
debido a que ese hueco est unido elctica_
mente con los huecos contiguos a el, tanto a
la izquierda como a la derecha.
Qu es un MicroControlador?



LED: LED: LED: LED:
Light Emitting Diode. (Diodo
Emisor de Luz). Es un tipo
especial de diodo semicon-
ductor, que cuando es co-
nectado a un circuito elec-
trnico con un resistor li-
mitador de corriente, emite
luz visible. Los LEDusan muy
poca energa y son ideales
para ser conectados a dis-
positivos tales como el
BASIC Stamp.




Esquema:
Un diagrama elctrico que
muestra conexiones entre
componentes que no
necesariamente se ve, como
el circuito fsico. Usamos
diagramas esquemticos
debido a que ellos ayudan a
entender el flujo de la seal,
a travs de circuitos
complejos.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 19
Cada pin de BASIC Stamp tiene un nombre de seal asociado a l. Por
ejemplo, el pin 24 es VIN (que quiere decir entrada de voltaje). Esta
es una de las conexiones para el voltaje de entrada desde el transfor_
mador de alimentacin. Cuando usted conecta la tensin de alimenta_
cin, una conexin es hecha desde el regulador de tensin mediante
una pista de cobre que est sobre la Plaqueta de Educacin. Los Pines
del BASIC Stamp que usaremos en ste experimento son los siguientes:

Pin del BS2p Nombre de seal
5 P0
6 P1
21 Vdd (+5 Volt DC)
23 GND( Comn )

Cuando programemos el BASIC Stamp, nos referiremos al Nombre de


Seal, ms que al verdadero nmero de pin.

Bien, construyamos el circuito. La figura 3.5. muestra a un diagrama


elctrico del circuito en forma esquemtica. P0 y P1 son pines de
entrada / salida del BASIC Stamp. P0, est conectado elctricamente a
la resistencia R14 y el LED D14, mientras que P1, est conectado
elctricamente a la resistencia R15 y el LED D15.
Figura 3.5.
Diagrama esquemtico
de conexiones del
circuito en la Protoboard.
Qu es un MicroControlador?

Progrmelo!
Conecte la Plaqueta de Educacin a la PC:

1. Enchufe un extremo del cable de programacin en la Plaqueta de
Educacin.
2. Enchufe el otro extremo del cable de programacin en un
conector del puerto serial disponible en la PC.

Listo! Ya hemos creado un circuito (hardware). Pero esto no es nada an. As
es que necesitamos...

Cuntos de ustedes ya saben escribir un programa de computadora? Si lo ha
hecho antes, entonces la primera parte de sta seccin puede ser un repaso.
Pero si es nuevo en el tema, no se preocupe, en realidad no es tan difcil.

Un programa de computadora no es nada ms que una lista de instrucciones
que una computadora ejecuta (o en nuestro caso un microcontrolador).
Creamos un programa para el microcontrolador escribindolo en una PC
(utilizando el teclado y el monitor), luego descargamos este cdigo a travs
del cable de programacin, al microcontrolador. Este programa (o lista de
instrucciones), entonces se ejecuta dentro del BASICStamp.

Si hemos escrito el programa correctamente, har lo que nosotros
esperbamos. Sin embargo, si hemos cometido un error, entonces el
dispositivo no trabajar (o trabajar mal), y necesitamos depurarlo (debug).
Depurar el programa puede ser una de las experiencias ms estresantes de
todo el proceso, por lo tanto, cunto ms cuidadoso es en crear el programa,
tericamente ms fcil ser depurarlo. Un debugging es el arte de remover
errores (bug).

PBASICpara el BASICStamp, tiene muchos comandos de donde elegir, 36 para
ser exactos. Ver Anexo "D" para mayor informacin sobre los comandos.


Programa:
Una secuencia de ins-
trucciones que son ejecu-
tadas por una computadora
o un microcontrolador, en
una secuencia especfica,
para realizar una tarea. Los
programas son escritos en
diferentes tipos de lenguajes,
tales como C, Fortran o
BASIC


Error:
Un error en su programa o
hardware. Aplicar debug
(depurar) en su programa es
revisar y eliminar errores en
su cdigo. Tambin puede
haber errores de hardware
tales como un LEDpuesto al
revs, que causa que el
sistema no funcione.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 20
Qu es un MicroControlador?

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 21
Encienda su PC. El programa del BASIC Stamp funciona en dos y Windows 95/98/NT4.0. Asumiremos
que usted est usando una computadora con Windows 95. Despus de instalado el programa Stamp
Editor, haga doble click con el ratn sobre el Icono del BASIC Stamp. Usted ahora deber estar
corriendo un programa llamado "Stamp Editor". este es un programa que fue creado para ayudarlo a
escribir y descargar programas al MicroControlador BASIC Stamp. La Pantalla se ver como se indica
en la figura 3.6. Escriba el siguiente programa en el editor de texto como se indica.
'{$STAMP BS2p}

Output 0

titilar:

Out0 = 1
pause 1000
Out0 = 0
pause 1000
goto titilar
Figura 3.6.
Software del BASIC
Stamp. Doble click
sobre el Icono BASIC
Stamp para hacer co_
rrer el software. La
pantalla que se abre
se ver como sta.
La pantalla, excepto por unas pocas palabras en el ttulo, est en blanco inicialmente. Ac es donde
usted va a escribir el programa como se indica en la figura 3.6. Ahora recuerde, vamos a escribir
nuestro programa usando un equipo de "comunicacin humano" (monitor, teclado, ratn, etc.), que
es parte de su PC. El programa que escribiremos, no correr en su PC, sino que ser descargado o
enviado al MicroControlador. Una vez que el programa ha sido recibido en el MicroControlador, el
BASIC Stamp ejecutar las instrucciones exactamente como nosotros las hemos creado.
Qu es un MicroControlador?



www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 22
Ahora, mientras tiene apretada la tecla ALT presione R (de run correr), y luego presione
ENTER cuando el men muestre el comando RUN. Si todo est correcto, el LED que est conectado
a P0 (pin 5 de la Plaqueta de Educacin), debera titilar. Si usted obtiene un mensaje que dice
Hardware not found, (no se encuentra el circuito), revise las conexiones del cable entre la PC y la
plaqueta de educacin, y tambin asegrese que una fuente de alimentacin est conectada a la
plaqueta de educacin. Si an no funciona, revise bajo el men EDIT la opcin PREFERENCES y
EDITOR OPERATION. El ajuste del puerto COM por defecto, debera estar en AUTO (automtico).

Trate de descargar el programa nuevamente (tenga presionada la tecla ALT y presione r). Si an no
funciona, usted debe tener un error (bug). Revise nuevamente su programa para asegurarse que lo
haya escrito correctamente. Si despus de tratar esto, usted an tiene problemas, pdale ayuda a su
instructor.

Analicemos nuestro programa:


El primer comando usado es Output. Cada seal (P0 y P15) puede ser ajustada como entrada o
salida. Debido a que nosotros queremos que el microcontrolador encienda y apague un LED, el
microcontrolador est manipulando el mundo exterior. Por lo tanto, por definicin, nosotros
queremos que P0 sea una salida Output. Resultado del primer comando: Output 0 hace P0 una
salida. (Aclaracin: si nosotros buscbamos hacer P1 una salida, el comando debera haber sido
output 1).

El siguiente tem en el programa titilar:, no es realmente un comando. Es slo una etiqueta, una
marca en cierto punto del programa. Volveremos a esto ms adelante. Ahora, el pin 5 o P0 como lo
llamamos, es una salida. En el mundo de las computadoras, voltajes en stos pines, pueden ser tanto
altos o bajos, que significa que pueden tener un voltaje alto o bajo. Otra forma de referirnos a
alto y bajo es 1 y 0. 1 significa alto y 0 significa bajo.

Piense en un Apagador de luz en la pared, cuando el


suiche est en una posicin, la lmpara se enciende, y
cuando est en otra posicin, se apaga. Es binaria, hay
slo dos combinaciones: encendida o apagada, o 1 o
0. No importa cunto insista, usted nunca podr poner
el suiche en el medio de las dos posiciones. Si
queremos encender el LED necesitamos hacer que P0
vaya arriba (que tenga un 1). P0 est actuando como
un interruptor, que puede ser cambiado a encendido o
apagado bajo un control de programa. Entonces la
tercera instruccin hace que el pin P0 vaya a un estado
alto, lo que hace que el LED encienda.

Hablando tcnicamente, "Out" no es


realmente un comando. Usamos el
registro "Out" para hacer una salida tanto
alta como baja. As:

Out0 = 0 >> Salida P0 en Bajo


Out0 = 1 >> Salida P0 en Alto
Qu es un MicroControlador?
Si apagramos el LED en el siguiente comando, esto pasara demasiado rpido para que pudiramos verlo.
Por lo tanto necesitamos retardar el programa; de sta forma podemos ver si est operando
correctamente o no.

Es el propsito del siguiente comando: pause 1000. Este comando hace que el programa espere por 1000
milisegundos, o sea 1 segundo.

El siguiente comando es Out0=0. Este comando hace que P0 vaya a nivel bajo y apague al LED.

A continuacin hacemos una pausa con pause 1000 (otro segundo). El LED est an apagado.

Goto (ir) es muy simple de entender. Durante el curso de la ejecucin del
programa, cuando el comando goto es encontrado, el programa va a algn
punto especfico en el programa. En nuestro ejemplo, le decimos al programa
ir a titilar. Donde sea que est titilar, es donde el programa ir.

En nuestro programa, la etiqueta titilar est en la segunda lnea. Por lo tanto,
cuando la instruccin goto titilar es encontrada, el programa salta hacia la
segunda lnea y lo repite nuevamente. (El programa regresa a la segunda lnea
cada vez que encuentra el comando goto titilar. Esto es lo que causa que el
LED continuamente parpadee.
Un buen hbito al que conviene acostumbrarse, es remark remark remark remark (comentar) sus
programas. Comentar o documentar sus programas, los hace ms fciles de
seguir o de depurar si hay algn problema.


El apstrofe () es usado para decirle al microcontrolador que ignore la siguiente informacin, es slo para
beneficio humano. En otras palabras, cualquier cosa que est escrita en una lnea del programa despus de un
apstrofe, no es parte del cdigo de la instruccin. Guarde ste programa como: PL3_1R0.bsp





Remark Remark Remark Remark (Comentario) en un
programa, no es ejecutado
como comando. Es ignora-
do por el microcontrolador.
El propsito de un comen-
tario es permitir a los hu-
manos entender ms fcil-
mente qu estn haciendo
los comandos en el pro-
grama.
'{$STAMP BS2P}
'Programa: PL3_1R0.bsp
'Programa para hacer titilar a un LED.

Output 0 ' Define a P0 como una Salida


Titilar: ' Comienzo del Bucle
Out0 = 1 ' Enciende el Led conectado a P0
Pause 1000 ' Retardo de 1000 milisegundos
Out0 = 0 ' Apaga el Led conectado a P0
Pause 1000 ' Retardo de 1000 milisegundos
Goto Titilar ' Regresa al la etiqueta Titilar
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 23
Qu es un MicroControlador?

El programa an operar exactamente de la misma manera, los comentarios despus de los apstrofes, estn
solamente para nuestro beneficio, para entender qu hemos creado.

Observe que a travs de ste experimento, hemos usado el comando "Pause" para esperar por x
milisegundos. Tenga en cuenta que las instrucciones tambin requieren de un tiempo de ejecucin. Por
ejemplo, el tiempo para la ejecucin de los comandos LOW, HIGH, y Pause es de alrededor de 0.15
milisegundos cada uno. El BASICStamp ejecuta en promedio 4,000 instrucciones por segundo.


































Un modo ms simple



Recuerde que cada uno de los pines del Stamp (P0-P15) puede ser configurado como entrada o salida. Para hacer el pin una
salida, use el comando output. Una vez que el pin es una salida, nosotros podemos hacerlo ir a nivel bajo (un nivel lgico 0), o alto
(un nivel lgico 1), con la instruccin OUT0=0 (para abajo), o OUT0=1 (para alto). Usando estos comandos, toma dos lneas en
nuestro programa para hacer el PIN una salida y luego hacerlo ir a alto o bajo.

PBASICtiene una forma ms simple de hacer esto. Si usted desea hacer P0 una salida y en nivel alto (al mismo tiempo),
simplemente use el comando: HIGH0; y recprocamente, para hacer P0 una salida y nivel bajo (al mismo tiempo) use: LOW0.



El programa funciona exactamente igual, slo que los comandos nuevos no slo hacen que el pin vaya a nivel alto o bajo (como
OUT0=0 y OUT0=1) sino que ellos tambin hacen que el pin se convierta en una salida. En casos simples como ste programa,
cualquier mtodo bastar, pero en programacin ms complicada, un mtodo puede ser ms apropiado que otro. Exploraremos
esto en una leccin futura.
Guarde el programa como PL3_2R0.bsp
'{$STAMP BS2P}
'Programa PL3_2R0.bsp
'Programa para hacer titilar a un LED.

Titilar:
High 0 ' P0 es colocado como salida y en nivel alto
Pause 1000 ' Esperar 1000 milisegundos
Low 0 ' P0 es colocado como salida y en nivel bajo
Pause 1000 ' Esperar 1000 milisegundos
Goto Titilar ' Ir a la etiqueta Titilar
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 24




4. Procesamiento de Bits
Procesamiento de Bits
Un paso importante en el aprendizaje de cmo lograr que el BASIC
Stamp procese datos analgicos, es aprender cmo hace para
enviar y recibir nmeros binarios. Tambin es importante
entender cmo trabajan los nmeros binarios y cmo se realiza la
conversin de un nmero binario al sistema decimal.

Este experimento introduce algunas tcnicas para transmitir y recibir nmeros binarios con el BASICStamp.
En este experimento, armaremos un teclado binario para transmitir nmeros binarios al BASICStamp. El
BASICStamp tambin ser programado para procesar y mostrar los nmeros binarios que reciba. Los
nmeros binarios se mostrarn con LEDs as como tambin con la ventana debug. La ventana debug tambin
ser til para mostrar los nmeros en formato binario, decimal y hexadecimal.

En Qu es un MicroControlador?, aprendimos que binario es un sistema numrico usado por los
MicroControladores, que emplea solamente dos dgitos, 0 y 1. El BASICStamp es uno de muchos dispositivos
electrnicos digitales que pueden interpretar a 0 Volts como un 0 binario y a 5 Volts como un 1 binario.

El sistema binario es bueno para describir estados y nmeros. En trminos de estados, los dos dgitos del
sistema binario (0 y 1) pueden ser usados para representar encendido / apagado, abierto / cerrado, no / si,
alto / bajo, etc. Combinaciones de dgitos binarios pueden ser usadas para describir nmeros. Por ejemplo, los
nmeros binarios 101, 110 y 111 representan a los nmeros decimales 5, 6 y 7. Estos nmeros pueden ser
usados para describir informacin analgica, como la posicin de una puerta a medida que se abre o cierra.



(4) LED's con resistencias de 200 Ohm 1/4 Watt
(4) Pulsadores con resistencia de pullup de 10 KOhm 1/4 Watt
(1) Set de cables para conexin
(1) Plaqueta de Educacin NX1000
(1) Programa editor para el BASIC Stamp

En este experimento introducimos el pulsador y su smbolo esquemtico, que mostramos en la Figura 4.1.
Note que a cada terminal del smbolo esquemtico le corresponden dos pines en el componente. Si quiere
realizar una conexin a uno de los terminales del smbolo esquemtico, puede conectar cualquiera (o ambos)
de los dos pines correspondientes.

El espacio libre en el smbolo esquemtico indica que el interruptor est normalmente abierto. Cuando los
dos terminales de un interruptor no estn conectados, se obtiene un circuito abierto. En circunstancias
normales (cuando el pulsador no est presionado) el circuito est abierto, dndole el nombre de
normalmente abierto.

Introduccin al
Proceso de Bits


Componentes
Requeridos
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 26
Procesamiento de Bits





Pulsador



Figura 4.1.
Esquema de conexiones para un
pulsador (lado izquierdo) y su
respectiva representacin gr _
fica (lado derecho).
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 27

Figura 4.2. Esquema de conexiones. Muestra cuatro pulsadores con sus resistencias de pullup y
cuatro diodos LED's con sus resistencias limitadoras de corriente. Nota: Los smbolos
(P0, P1, P2, P3, P4, P5, P6 y P7) corresponde a los Pines de Conexin del BASIC Stamp
en la Plaqueta de Educacin.
Esquema de Conexiones, Constryalo!
Procesamiento de Bits


Figura 4.4: Fotografa del circuito
Muestra tres pulsadores PL1..PL3 y
diodos LEDs. conectados a los pines
de E/S del BASIC Stamp.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 28
Una vez montado el circuito y haciendo referencia al diagrama mostrado en la figura No. 4.2. Nos
damos cuenta que los pines de entrada - salida (P4 al P7) del BASIC Stamp, estn conectados a Vdd
que son cinco Voltios (+5 Volt DC) o un "Estado Alto" a travs de un resistor de 10KOhm. Al
presionar los pulsadores (D4 a D7), los Pines (P4 al P7) del BASIC Stamp estarn conectados ahora a
Vss que son cero Voltios (0 Volt DC) o un "Estado Bajo". A sto lo llamamos lgica negativa.
Procesamiento de Bits



Progrmelo!
'{$STAMP BS2p}
'Programa PL4_1R0.bsp
'Programa para el procesamiento de BIT's

a VAR BIT ' Define una variable tipo BIT (1 BIT)


b VAR BIT ' Define una variable tipo BIT (1 BIT)
c VAR BIT ' Define una variable tipo BIT (1 BIT)
d VAR BIT ' Define una variable tipo BIT (1 BIT)
r VAR NIB ' Define una variable tipo NIBLE (4 BITs)

Input 4 ' Define el Pin P4 como Entrada


Input 5 ' Define el Pin P5 como Entrada
Input 6 ' Define el Pin P6 como Entrada
Input 7 ' Define el Pin P7 como Entrada

Output 0 ' Define el Pin P0 como Salida


Output 1 ' Define el Pin P1 como Salida
Output 2 ' Define el Pin P2 como Salida
Output 3 ' Define el Pin P3 como Salida

DEBUG cls ' Limpia la Pantalla de DEBUG

bucle:

a = ~In4 ' Asigna a "a" el valor negado del pin 4
b = ~In5 ' Asigna a "b" el valor negado del pin 5
c = ~In6 ' Asigna a "c" el valor negado del pin 6
d = ~In7 ' Asigna a "d" el valor negado del pin 7

Out3 = d ' Asigna al Pin P3 el valor de "d"


Out2 = c ' Asigna al Pin P2 el valor de "c"
Out1 = b ' Asigna al Pin P1 el valor de "b"
Out0 = a ' Asigna al Pin P0 el valor de "a"

r = (8*d)+(4*c)+(2*b)+(1*a) ' Calcula el No. decimal

DEBUG HOME, cr
DEBUG "El Estado del Pulsador D4 es ", BIN a, cr
DEBUG "El Estado del Pulsador D5 es ", BIN b, cr
DEBUG "El Estado del Pulsador D6 es ", BIN c, cr
DEBUG "El Estado del Pulsador D7 es ", BIN d, cr, cr

DEBUG "Nmero Binario de 4 Bits: ", cr


DEBUG "P3 P2 P1 P0", cr
DEBUG " ", BIN d, " ", BIN c, " ", BIN b, " ", BIN a, cr, cr

DEBUG "Equivalente en Binario : ", BIN4 r, cr, cr


DEBUG "Equivalente en Decimal : ", DEC2 r, cr, cr
DEBUG "Equivalente en Hexadecimal: ", HEX1 r, cr, cr

goto bucle

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 29
Procesamiento de Bits

Un valor variable contnuo en lugar de un 1


0 (+5V). Los valores analgicos pueden estar
en cualquier valor intermedio de ambos extre_
mos, debido a que los MicroControladores sla_
mente entienden entradas si son valores digi_
tales, nuestros sensores y los circuitos de inter_
faz, necesitan convertir los valores analgicos
(voltajes) a sus equivalentes digitales, as:
5 Volts = 1
0 Volts = 0
Valor Analgico
Veamos cmo se puede llevar a cabo esto con PBASIC. Ingrese el programa en el BASIC Stamp Editor
gurdelo con el nombre PL4_1R0.bsp. El Nombre sale de: Programa 4.1, revisin 0. Asegrese que
la plaqueta de educacin reciba alimentacin y que los cables estn correctamente conectados.
Luego ejecute el programa.

As es como debera trabajar el progra_


programa: mientras no se presionen los
pulsadores, la salida DEBUG debera ser
igual que la de la figura 4.5 y todos los
LEDs deberan estar apagados. Si se
presiona cualquier pulsador deberan
cambiar los valores presentados en la
pantalla. Trate de presionar todas las
combinaciones posibles de los pulsado_
res para visualizar en la pantalla los n_
ros del cero (0) al quince (15). Si sto
no ocurre tendr que revisar el progra_
ma y las conexiones del circuito.
Figura 4.5. Salida de la Pantalla Debug.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 30
Procesamiento de Bits

Explicacin del Programa

Para su Informacin:

Tamao de memoria

! Un bit de memoria puede almacenar un
dgito binario, o sea 0 1.
! Un nibble de memoria almacena 4 bits.
! Un byte almacena 8 bits.
! Una word almacena 16 bits.

Como en el programa PL4_1R0.bsp la primera lnea comienza con un apstrofe, as es que se
trata de un comentario que el BASIC Stamp ignorar.

'{$STAMP BS2p} 'Le indica al Stamp Editor el tipo de BASIC Stamp
'Programa PL4_1R0.bsp
'Programa para el procesamiento de BIT's

Luego se definen las variables que se utilizarn en el programa. Las variables son
utilizadas para almacenar valores mientras se ejecuta el programa. Las letras a, b, c y d
se definen como variables que pueden almacenar 1 bit cada una, mientras que la variable r,
es definida como una variable de 4 bits.

a VAR BIT ' Define una variable tipo BIT (1 BIT)


b VAR BIT ' Define una variable tipo BIT (1 BIT)
c VAR BIT ' Define una variable tipo BIT (1 BIT)
d VAR BIT ' Define una variable tipo BIT (1 BIT)
r VAR NIB ' Define una variable tipo NIBLE (4 BITs)

El siguiente segmento define los pines del BASIC Stamp que se utilizarn como entrada y como
salida y como se limpia inicialmente a la pantalla del DEBUG.

Input 4 ' Define el Pin P4 como Entrada


Input 5 ' Define el Pin P5 como Entrada
Input 6 ' Define el Pin P6 como Entrada
Input 7 ' Define el Pin P7 como Entrada

Output 0 ' Define el Pin P0 como Salida


Output 1 ' Define el Pin P1 como Salida
Output 2 ' Define el Pin P2 como Salida
Output 3 ' Define el Pin P3 como Salida

DEBUG cls ' Limpia la Pantalla de DEBUG

bucle:

Luego controlamos el estado de los pulsadores revisando el estado de la entrada de los


pines P4, P5, P6 y P7. El estado encontrado se lo asignamos negado a las variables a,b,c y d.

a = ~In4 ' Asigna a "a" el valor negado del pin 4


b = ~In5 ' Asigna a "b" el valor negado del pin 5
c = ~In6 ' Asigna a "c" el valor negado del pin 6
d = ~In7 ' Asigna a "d" el valor negado del pin 7

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 31
Procesamiento de Bits
Para su Informacin:
Memoria del BASIC Stamp
RAM
El BASICStamp tiene 26 bytes de RAM (random
access memory = memoria de acceso aleatorio)
que pueden ser usados para almacenar valores
variables. Otros 6 bytes de RAM se usan para
administrar los pines de E/Sdel BASICStamp.
EEPROM
Es la sigla de electrically erasable programmable
read only memory, que en castellano es memoria
solo de lectura borrable elctricamente. Es
usada principalmente para almacenar programas
en PBASIC. La EEPROM tambin puede usarse
para almacenar datos que no varan
frecuentemente.
A continuacin, necesitamos hacer el estado de las salidas de los pines P3, P2, P1
y P0, igual a las variables d, c, b y a respectivamente lo cual equivale a decir:

Out3 = d ' Asigna al Pin P3 el valor de "d"


Out2 = c ' Asigna al Pin P2 el valor de "c"
Out1 = b ' Asigna al Pin P1 el valor de "b"
Out0 = a ' Asigna al Pin P0 el valor de "a"

Ahora se realizar un clculo aritmtico en el BASIC Stamp. Los parntesis son


necesarios para mantener las reglas algebraicas de las operaciones. Esto se debe a
que el BASIC Stamp realiza los clculos comenzando desde la izquierda. Luego
realiza cada operacin dentro de los parntesis que encuentra, mientras avanza de
izquierda a derecha.

r = (8*d)+(4*c)+(2*b)+(1*a) ' Calcula el No. decimal

Por ltimo encontramos once (11) comandos DEBUG, los cuales, permitirn visualizar
en la pantalla del DEBUG en la PC, los valores de cada variable a, b, c, d y r al
igual que los correspondientes nmeros binarios, decimales y hexadecimales. La
instruccin DEBUG HOME, cr enva el cursor a la posicin superior izquierda de
la ventana DEBUG. Los siguientes comandos harn aparecer el texto entre las
comillas y luego el valor binario de las variables respectivamente. Los modificado_
res de Formato BIN, BIN4, DEC2 y HEX1 le indican a la ventana DEBUG como mostrar
las variables y con cuantos digitos. Ejemplo: BIN4, visualiza un No. binario de 4
digitos, mientras que DEC2, visualiza a un nmero decimal de dos digitos y HEX1,
visualizar a un nmero hexadecimal de un digito.

Para lograr que el BASIC Stamp controle continuamente las entradas y salidas del
los pulsadores debemos cerrar el bucle con la instruccin: goto Bucle
DEBUG HOME, cr
DEBUG "El Estado del Pulsador D4 es ", BIN a, cr
DEBUG "El Estado del Pulsador D5 es ", BIN b, cr
DEBUG "El Estado del Pulsador D6 es ", BIN c, cr
DEBUG "El Estado del Pulsador D7 es ", BIN d, cr, cr

DEBUG "Nmero Binario de 4 Bits: ", cr


DEBUG "P3 P2 P1 P0", cr
DEBUG " ", BIN d, " ", BIN c, " ", BIN b, " ", BIN a, cr, cr

DEBUG "Equivalente en Binario : ", BIN4 r, cr, cr


DEBUG "Equivalente en Decimal : ", DEC2 r, cr, cr
DEBUG "Equivalente en Hexadecimal: ", HEX1 r, cr, cr

goto bucle

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 32
Procesamiento de Bits


Contando en Binario

La Tabla 4.1 muestra como contar de 0 a 3 usando nmeros binarios de 2 bits y como contar de 0 a 7 usando
nmeros binarios de 3 bits.

Observe que se pueden representar cuatro nmeros (decimales 0 al 3) con un nmero binario de 2 bits. Ocho
nmeros (0 al 7) con un nmero binario de 3 bits. Con 4 bits se pueden representar 16 nmeros diferentes,
con 5 bits se pueden representar 32 nmeros diferentes y as sucesivamente.

Tabla 4.1: Contando con Nmeros Binarios

Nmero
Decimal
Representacin
binaria de 2 bits
Representacin
binaria de 3 bits
0 00 000
1 01 001
2 10 010
3 11 011
4 100
5 101
6 110
7 111

Se puede determinar fcilmente la cantidad mxima de nmeros que se pueden obtener (combinaciones de 0
y 1) de una cantidad especfica de bits mediante la siguiente frmula:

combinaciones = 2
bits


Esto significa que la cantidad de combinaciones posibles es igual a dos elevado al nmero de bits. Para 2 bits,
se pueden obtener 2
2
= 4 nmeros. Para 3-bits, el nmero de combinaciones es 2
3
= 8, y as sucesivamente.

Para convertir un nmero de binario a decimal se necesitan dos pasos. El primero es multiplicar cada bit por
su potencia de dos. La Tabla 4.2 muestra las potencias de dos para hasta 8 bits. Cuando multiplica cada bit
por su valor de la Tabla 4.2, obtiene una serie de valores decimales. El segundo paso es realizar la suma de
todos estos valores decimales obtenidos.

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 33
Procesamiento de Bits

Tabla 4.2: Factores para Nmeros Binarios de 8 bit s
Bit 7 6 5 4 3 2 1 0
Multiplicador 128 64 32 16 8 4 2 1


A modo de ejemplo, convirtamos el nmero binario 1011 a decimal. Primero, multipliquemos cada bit por su
potencia de dos de la Tabla 4.2.

8 1 = 8
4 0 = 0
2 1 = 2
1 1 = 1

Segundo, sumemos los 4 valores decimales:

8+0+2+1 = 11

Ahora sabemos que el nmero binario 1011 es igual al nmero decimal 11.
Para su Informacin:
Factor de cada Bit y Potencias de dos

El bit-0 es el bit menos significativo o de menor peso (least significant bit =LSB, en ingls) y el bit-7 es el de mayor peso o ms
significativo (most significant bit =MSB, en ingls). Esto se debe a que el bit-0 hace la contribucin ms pequea al valor del
nmero y el bit-7 hace la contribucin ms grande. Los nmeros binarios se arman comenzando por el bit-7 a la izquierda y
finalizando con el bit-0 a la derecha, lo que permite convertirlos utilizando potencias de dos.

Ejemplos:
El multiplicador para el bit-0 es 1, que es igual a 2
0
.
El multiplicador para el bit-1 es 2, que es igual a 2
1
.
El multiplicador para el bit-7 es 128, que es igual a 2
7
.

-------Puede usar potencias de dos para extender la Tabla 4.2 para cualquier cantidad de bits. --------
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 34
Procesamiento de Bits
Palabra Bytes Nibbles Bits Descripcin
INS
INL
INH
INA, INB
INC, IND
IN0 IN7
IN8 IN15
Pines de Entrada
OUTS
OUTL
OUTH
OUTA, OUTB
OUTC, OUTD
OUT0 OUT7
OUT8 OUT15
Pines de Salida
DIRS
DIRL
DIRH
DIRA, DIRB
DIRC, DIRD
DIR0 DIR7
DIR8 DIR15
Control de I/O
W0
B0
B1

W1
B2
B3

W2
B4
B5

W3
B6
B7

W4
B8
B9

W5
B10
B11

W6
B12
B13

W7
B14
B15

W8
B16
B17

W9
B18
B19

W10
B20
B21

W11
B22
B23

W12
B24
B25


Tabla 4.3: Organizacin de la
Memoria RAM para una BSII.
Existen 16 palabras de dos (02)
bytes cada una para un total de
32 bytes. Todos los bits se pue-
den direccionar en forma inde -
pendiente.

Organizacin de las variables en la Memoria del BASIC Stamp II
El BASIC Stamp II, tiene capacidad de almacenamiento en memoria RAM de 32 bytes como se indica en la tabla 4.3. Los pri-
meros seis (06) bytes estn reservados para los Pines de Entrada/Salida (I/O) y el control de direccin de los mismos. Los
siguientes 26 bytes estn disponibles y pueden ser usados como registros o variables de propsito general. Slamente la
localizacin INS es de slo lectura y representa el estado de los Pines de entrada - salida P0 al P15. La localizacin OUTS
contiene el estado de 16 salidas con retencin. DIRS contiene la forma en que se comportarn los Pines P0 al P15; como
entrada o como salida. Un 0 en un bit particular DIRS convertir al pin correspondiente en entrada, mientras que un 1 lo
convertir en una salida.

Cuando el BASIC Stamp II es energizado por primera vez o cuando ocurre un RESET, automticamente todas las localiza -
ciones de memoria son inicializadas a 0, as, todos los pines estarn definidos como entradas.

Una Variable es un smbolo que


contiene un cierto valor. Ese valor
puede ser cambiado bajo el control
del programa y por lo tanto, el
valor de las variables puede cambiar
pero su nombre NO!. Las variables
pueden guardar ciertas piezas de
informacin ahora, para ser usadas
posteriormente en cualquier parte
del programa.
Variable
RAM propsito General
RAM propsito General
RAM propsito General
RAM propsito General
RAM propsito General
RAM propsito General
RAM propsito General
RAM propsito General
RAM propsito General
RAM propsito General
RAM propsito General
RAM propsito General
RAM propsito General
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 35
Procesamiento de Bits
LOWBYTE byte inferior de una palabra (word)
HIGHBYTE byte superior de una parabra (word)
BYTE0 byte 0 de una palabra (word)
BYTE1 byte 1 de una palabra (word)
LOWNIB nibble inferior de una palabra (word) o de un byte
HIGHNIB nibble superior de una palabra (word) o de un byte
NIB0 nib 0 de una palabra (word) o de un byte
NIB1 nib 1 de una palabra (word) o de un byte
NIB2 nib 2 de una palabra (word)
NIB3 nib 3 de una palabra (word)
LOWBIT bit inferior de una palabra (word), byte, o nibble
HIGHBIT bit superior de una palabra (word), byte, o nibble
BIT0 bit 0 de una palabra (word) , byte, o nibble
BIT1 bit 1 de una palabra (word) , byte, o nibble
BIT2 bit 2 de una palabra (word) , byte, o nibble
BIT3 bit 3 de una palabra (word) , byte, o nibble
BIT4 BIT7 bits 4 al 7 de una palabra (word) o byte
BIT8 BIT15 bits 8 al 15 de una palabra (word)

Los Modificadores de variables
permiten trabajar con bits espe-
cificos en cada variable. El BS2
utiliza los siguientes modifica -
dores de variables:
En PBASIC, los nombres de las variables pueden tener una longitud de hasta 32 caracteres. La longitud del nombre de
la variable no tiene ninguna influencia en la velocidad de ejecucin del programa. Usted deber siempre declarar sus
variables del tamao ms pequeo posible, pero que al mismo tiempo, sea el ms apropiado para los datos que contendr.
El Stamp tiene un lmite de 208 bits para almacenar variables, stos bits estn agrupados en trece (13) palabras (Words)
de diecisis (16) bits cada una. Los bits, pueden ser utilizados en cualquier combinacin o agrupacin de tamaos como se
indica en la tabla 4.4. Por ejemplo: Su programa puede contener 10 variables tipo palabras de 16 bits (160 bits), 10
variables tipo nibbles (40 bits) y ocho variables tipo bits (8 bits) para un total de 208 bits. Puede que use otra combinacin
de tipos de variable, lo importante es recordar que nunca se puede exceder de 208 bits.

Modificadores de Variables
Tabla 4.4: Modificadores de Variables.
Escriba el siguiente programa (PL4_2R0.bsp)

myword VAR WORD


byteInferior VAR myword.LOWBYTE
byteSuperior VAR myword.HIGHBYTE
bitInferior VAR myword.LOWBIT
bitSuperior VAR myword.HIGHBIT

Main:
myword = $FFAA
DEBUG "myword = ", BIN myword, cr
DEBUG "byteInferior = ", BIN myword.LOWBYTE, cr
DEBUG "byteSuperior = ", BIN myword.HIGHBYTE, cr
DEBUG "bitInferior = ", BIN myword.LOWBIT, cr
DEBUG "bitSuperior = ", BIN myword.HIGHBIT, cr
END

Mximo 208 Bits para usarse en VARIABLES....


www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 36




5. Midiendo una Entrada
Midiendo una Entrada

Midiendo una
Entrada

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 38
En el BASIC Stamp, cada pin puede ser configurado como una
entrada o como una salida. Si los pines se configuran como una
entrada, podemos medir el nivel lgico del pin como se ha hecho en
el captulo anterior; utilizando para ello la instruccin "in". Por
ejemplo: in0, leer el estado lgico (Alto o Bajo) del Pin P0. Si
queremos medir ms que el nivel lgico de una entrada, entonces
podramos utilizar cualquiera de los siete comandos que posee el
BASIC Stamp, destinados a la medicin de una entrada, cada uno
de ellos se vern detalladamente en los prximos captulos, sin
embargo, en ste captulo vamos a trabajar con el comando
PULSIN, el cual, mide la longitud de un pulso entrante y el valor en
unidades de tiempo lo almacena en una variable. Este comando no
mide solamente el estado lgico de una entrada, sino es capaz, de
medir el tiempo que ha pasado el pin en ese estado lgico.
Pin:
PULSIN Pin, Estado, Variable
Estado:
Variable:
Es una variable, constante o expresin (0-15) que especifica cual pin de entrada -
salida se utilizar para la medicin del pulso.

Es una variable, constante o expresin (0-1) que especifica el nivel lgico del pulso a
medir (estado Alto o Bajo). Un pulso con estado Alto comienza cuando hay un cambio
de nivel de cero(0) a uno(1), mientras que un pulso con estado bajo comienza
cuando hay un cambio de nivel de uno(1) a cero(0).

Es una variable usualmente una palabra (Word) de 16 bits, en el cual se almacenar


la duracin del pulso. Las unidades de tiempo para un BASIC Stamp 2p son de 0.75
microsegundos, con lo cual, podemos medir pulsos de duracin mxima de 49,125
milisegundos.
El comando PULSIN, trabaja como un cronmetro, el cual, es
puesto en funcionamiento cuando cambia el nivel lgico del pin
de entrada asociado y es de nuevo detenido cuando exista otro
cambio de nivel lgico en el pin de entrada. El resultado de sta
medicin de tiempo se almacenar en una variable de hasta 16
bits. Muchas propiedades analgicas como el voltaje, resistencia,
capacitancia, frecuencia, ciclo til, pueden ser medidas en trmi-
nos de una duracin de un pulso en unidades de tiempo.
Midiendo una Entrada

Un CI (circuito integrado) necesita tener algn tipo de identificacin en su
encapsulado, para decirnos cul es el pin 1. El identificador es normalmente una
ranura o marca ubicada en un extremo del encapsulado plstico. Ver Figura 5.1.


Como con el BASICStamp, cada pin del 555 tiene una funcin en particular.
Aunque el 555 es a prueba de balas, conectar una seal elctrica inadecuada
al pin equivocado, puede daar el dispositivo, as que sea cuidadoso y siga de
cerca los diagramas.

El tipo de circuito que construiremos se llama multivibrador astable. No se
asuste por este nombre tan complicado!. Este significa que la salida del 555
alterna entre alto y bajo. Recuerde que anteriormente se han utilizado los
comandos high y low para hacer titilar un LED. En realidad, eso es todo lo que
el circuito 555 est haciendo. Est simplemente oscilando.

La velocidad a la que parpadea la salida (el pin 3 del 555), es controlada por los
valores de un resistor y un capacitor. A medida que los valores de estos
dispositivos cambien, la velocidad de parpadeo del 555 tambin cambiar.

Ya hemos usado resistores anteriormente. Ellos controlan la cantidad de
corriente que fluye a travs de un circuito dado. Debido a que queremos
cambiar (convenientemente) la velocidad a la que el 555 parpadea, vamos a
usar un resistor variable, tambin conocido como potencimetro. Si usted
alguna vez ajust el volumen de una radio, usted ha usado uno.


Circuito Integrado:
Normalmente llamados CI,
son circuitos electrnicos
que han sido miniaturizados
y combinados dentro de un
pequeo encapsulado. Mu-
chos tipos diferentes de CI
han sido creados para un
sinnmero de aplicaciones.
El temporizador 555 que
usaremos en este experi-
mento es un miembro de la
familia de CI lineales. El
CPUStamp es un CI digital.
8 pin dip:
Esto se refiere al estilo de
encapsulado del CI. El 555
tiene 8 pines, y stos estn
dispuestos en dos lneas al
costado del encapsulado
(Dual Inline Package).
Figura 5.1: CI
Temporizador 555
Note la muesca en un
extremo del encapsulado
del chip.


Multivibrador astable:
Es un nombre extravagante
para un circuito que sin
intervencin externa, (de
otros circuitos o
dispositivos), emitir con-
tinuamente una secuencia de
pulsos.
Identificador
Pin 1 2 3 4
8 7 6 5
'555'
CI temporizador
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 39
Midiendo una Entrada
Girando el dial del potencimetro, usted cambia el valor del resistor variable.
Este giro cambia la velocidad a la que titila el 555.

Cuando conecte el potencimetro, notar que tiene tres terminales de
conexin disponibles. Uno de stos es el cursor y los otros dos son los
extremos del elemento resistivo. Solamente necesitamos conectar uno de los
extremos y el cursor a nuestro circuito, como se muestra en la Figura 5.2.







Cuando usted inserta el CI temporizador 555 en la zona de prototipo de la
Plaqueta de Educacin, asegrese de que el dispositivo quede centrado en la
lnea divisoria, de esa forma los pines no estn puestos en corto. Una vez que
ha completado el circuito que se muestra en la Figura 5.2, siga adelante y
alimente la Plaqueta de Educacin.


Potencimetro:
Es simplemente un resistor
que cambia su valor a
medida que es rotado (o en
algunos casos deslizado).
Recuerde que los resistores
tienen dos conectores. Un
potencimetro tiene tres
conectores. El conector
central es el cursor que se
desliza sobre un elemento
resistivo. Cuanto ms acerca
el cursor a uno de sus
extremos, menos resistencia
hay entre el cursor y se
extremo. Los potenci-
metros vienen en muchos
valores diferentes, tales
como 5K, 10k, 100k, 1 M
ohms, y ms. Tambin vie-
nen en muchas configura-
ciones fsicas diferentes
para acomodarse a diferen-
tes diseos de productos.
Todos operan esencialmente
de la misma forma; un
movimiento mecnico en el
cursor cambia el valor
resistivo del dispositivo
Figura 5.2: Esquema del Temporizador 555
P0 y P1 son pines de E/S del BASIC Stamp


Sobre los esquemas:

Es una prctica comn en los
diagramas esquemticos,
dibujar los pines de un CI, en
cualquier lugar en el que
hagan ms fcil de leer el
diagrama.



www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 40
Midiendo una Entrada


Partes Requeridas



Para ste experimento, usted necesitar lo siguiente:






7 instrucciones
inputdiferentes:
Ellas son:
Button
Count
Input
Pulsin
Rctime
Serin
Shiftin

Anteriormente ya hemos
usado input. En ste
experimento exploraremos
Pulsin
Constryalo!
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 41
(1) Un BASIC Stamp 2p
(1) Una Plaqueta de Educacin NX1000
(1) Un Cable de Programacin
(1) Un LED's con resistencias de 200 Ohm 1/4 Watt
(1) Un CI temporizador CMOS 555
(1) Un Capacitor 1 microfaradios, 25 volt electroltico
(1) Un Capacitor 10 microfaradios, 25 volt electroltico
(1) Un Potencimetro 100K (resistor variable)
(1) Un Resistor 4.7K ohm, Watt
(1) Un Resistor 1 K ohm, Watt
(1) Una Fuente de alimentacin
(1) Un set de cables de conexin
(1) Un Programa BASIC Stamp Editor
Figura 5.3.
Fotografa del circuito
electrnico montado en
la Protoboard; del es_
quema mostrado en la
figura 5.2.
Midiendo una Entrada

Progrmelo!




Inicie el BASICStamp Editor. Si usted no recuerda cmo hacer esto,
fjese en un experimento anterior.

El pin 4 (en el 555) es un pin de reset. Es una entrada al 555 y mientras ste pin vea un estado alto, el
555 funcionar. Para que el circuito trabaje sin interaccin con el BASICStamp, conectamos el pin 4 (del
555), directamente a Vdd (alto). Esto mantiene al pin 4 en un estado alto, lo que le permite al 555 hacer
titilar el LED. Ahora desconecte ste cable de Vdd y conctelo a P1 para darle el control al BASICStamp.

Escriba el siguiente programa:


Ahora mientras presiona la tecla ALT, escriba r (por run) y presione
enter.

Qu pas y por qu?. Si todo est trabajando apropiadamente, usted debera
ver titilar el LED (por 5 segundos), y luego estar apagado por otros 5 segundos.
Luego el programa se repite.

Debido a que P1 (en el BASICStamp) est conectado al pin reset del 555, cada
vez que P1 va a alto, le permite al 555 hacer titilar el LED. Ycada vez que P1
va a bajo(bajo el control de nuestro programa), apaga el circuito 555.

Bien, dir usted; y qu?.

Bien, pinselo de sta forma. Los MicroControladores son capaces de hacer
slo una cosa a la vez. Si queremos hacer titilar un LED como un indicador de
advertencia, entonces mientras el BASICStamp est haciendo su rutina high - pause - low pause - repetir
(para hacer titilar el LED), el BASICStamp no es capaz de hacer alguna otra cosa.


Reset:
Como se mencion, es un
pin de control en el CI
temporizador 555. Si co-
nectamos este pin a P1 en el
Stamp, y P1 es configurado
como una entrada, enton-
ces la circuitera del 555
puede operar (aunque tal vez
aleatoriamente). En ste ca-
so, tenemos dos entradas
(P1 en el Stamp y reset en
el 555) conectadas juntas.
Un pin configurado como
entrada en el Stamp tender
a flotar a nivel alto. Esta es
una condicin flotante y no
se garantiza que sea un
verdadero valor alto.
Cuando convertimos a P1 en
salida y la fijamos en nivel
alto, sta tambin lleva a
nivel alto al pin 4 del 555y
no nos da una condicin
flotante.
'{$STAMP BS2p}
'Programa: PL5_1R0.bsp

Inicio:
High 1
Pause 5000
Low 1
Pause 5000
Goto Inicio
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 42
Midiendo una Entrada
Ahora, como se muestra en el siguiente programa, usted puede encender el circuito que hace titilar el LED, y
continuar (en su programa) y hacer algo ms importante. Intntelo.


Lo que hemos hecho ac es quitarle la tarea al BASICStamp de hacer titilar el LED. La accin de hacer
titilar el LED es cumplida por el circuito temporizador del 555. Todo lo que necesita hacer el BASICStamp
es habilitar o deshabilitar el circuito titilador. El BASICStamp puede entonces realizar una tarea ms
importante. En ste ejemplo, la tarea ms importante es contar hasta 500 y mostrar los nmeros en la
pantalla. En el mundo real, sin embargo, usted puede estar buscando que se
renan ciertas condiciones de entrada (en algn otro pin del BASICStamp).

En este circuito hemos usado un capacitor de 10 microfaradios. Apague la
alimentacin y reemplace el capacitor de 10 microfaradios con uno de 1
microfaradio. Asegrese de observar la polaridad correcta de los capacitores.
Contine y encienda el circuito.

Reduciendo el valor del capacitor (C1) hemos aumentado la velocidad de
parpadeo del LED (en ste caso, 10 veces). Aunque difcil de observar, el LED
est an parpadeando, pero a una velocidad mucho mayor.



Microfaradio:
Una unidad de medida para
la cantidad de carga que
puede ser almacenada en un
capacitor. Similar al valor de
ohm para los resistores, el
microfaradio (para los
capacitores), est disponible
en un amplio rango de
valores. 1 microfaradio es
igual a 1/1.000.000 de un
Faradio. Analizaremos los
capacitores en un expe-
rimento posterior, pero por
ahora, es necesario com-
prender que a menor valor,
menor capacidad de carga
tiene el capacitor, lo que da
como resultado una osci-
lacin ms rpida en el
circuito del 555.

'{$STAMP BS2p}
'Programa: PL5_2R0.bsp

x var word ' Define la variable x como una palabra de 16 bits


low 1 ' Coloca al pin P1 como salida y en nivel bajo

inicio:
high 1 ' Coloca al pin P1 como salida y en nivel alto

for x = 1 to 500 ' Visualiza en la pantalla desde el 1 al 500,
debug ?x ' mientras el LED parpadea
next

pause 3000 ' Retardo de 3000 milisegundos
low 1 ' Apaga al LED
pause 2000 ' Retardo de 2000 milisegundos
goto inicio ' Regresa a inicio
Diferentes smbolos para Capacitores
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 43
Midiendo una Entrada

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 44
Midiendo una seal peridica asimtrica:
En la figura 5.2. se muestra el circuito de un LM 555, conectado como un multivibrador astable, sto
significa que en su salida (pata 3 del 555) se obtendr una onda cuadrada peridica pero no simtrica.
Haciendo referencia a la hoja de especificaciones del fabricante encontramos que para el circiuto de la
figura 5.2. podemos aplicar las siguientes formulas:

- Tiempo de carga del condensador estar dado por la ecuacin, T1 = 0.693 (R1*+R2) x C
- Tiempo de descarga del condensador estar dado por la ecuacin, T2 = 0.693 (R2) x C
- El periodo total de la seal sera: T = T1 + T2
- La Frecuencia de oscilacin de la senl sera: F = 1/T = 1.44 / ((R1+ 2R2) xC))
* Se incluye en R1 la Resistencia del Potencimetro (POT).

Figura 5.4.
Fotografa de una seal peridica asimtrica obtenida con el osciloscopio entre el pin 3 del LM 555 y tierra.
Midiendo una Entrada

'{$STAMP BS2p}
'Programa: PL5_3R0.bs2
'Midiendo una Entrada periodica asimtrica.

A VAR WORD ' Define la variable A como una palabra de 16 bits


B VAR WORD ' Define la variable B como una palabra de 16 bits

T1 VAR WORD ' Variable que almacena duracin del pulso 0-1-0
T2 VAR WORD ' Variable que almacena duracin del pulso 1-0-1

HIGH 1 ' Pone en nivel alto a P1 y comienza a oscilar 555

INICIO:

PULSIN 0,1,A ' Mide el pulso en el Pin P0 cuando pasa de 0 a 1


PULSIN 0,0,B ' Mide el pulso en el Pin P0 cuando pasa de 1 a 0

T1 = (((A/100)*75)/1000)
T2 = (((B/100)*75)/1000)

DEBUG CLS ' Limpia la pantalla del DEBUG


DEBUG "Valor de A = " ' Muestra el valor de "A"
DEBUG DEC A, cr
DEBUG "Ancho pulso T1 (ms) = " ' Muestra el ancho del pulso = A * 0.75 us.
DEBUG DEC T1, cr,cr

DEBUG "Valor de B = " ' Muestra el valor de "B"


DEBUG DEC B, cr
DEBUG "Ancho pulso T2 (ms) = " ' Muestra el ancho del pulso = B * 0.75 us.
DEBUG DEC T2, cr, cr

DEBUG "Periodo (ms) T=T1+T2 = " ' Muestra el periodo total T = T1+T2
DEBUG DEC (T1+T2), cr

DEBUG "Frecuencia (Hz) = " ' Muestra la frecuencia de la seal F = 1/T


DEBUG DEC (1000/(T1+T2)), cr

Pause 1500 ' Pausa de 1500 milisegundos

goto INICIO ' Se devuelve al programa INICIO


www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 45
Progrmelo!
Midiendo una Entrada









Midiendo una Entrada









Midiendo una Entrada









Midiendo una Entrada



Cada vez que cambia el valor de resistencia del potencimetro, la velocidad de parpadeo del LED es
cambiada. Pulsin puede slo medir hasta un mximo de aprox. 49 milisegundos, sta es la razn por
la cual aumentamos la velocidad de parpadeo de LED ( disminuyendo el valor del capacitor de 10 uf a
1 uf). Decimos slo 49 milisegundos, ya que, Pulsin almacena el valor del conteo en una variable
de 16 bit, su valor mximo podr alcanzar entonces: 65535 x 0.75 microsegundos = 49.151 mili_
segundos, lo que es aprox a 49 milisegundos. Ahora usted pude realmente medir el ancho del pulso
en unidades de tiempo que hacen parpadear al LED.
Trabajando con el Osciloscopio ....

Conecte el Osciloscopio para poder realizar la medicin del ancho del pulso en el Pin P0. Utilice el
Canal "A" del osciloscopio conectando la seal del osciloscopio al punto P0 del BASIC Stamp y el
comn del osciloscopio a Vss de la plaqueta de educacin. Utilice los cursores en el men "CURSORS"
en el osciloscopio y mida el ancho del pulso. Si hace lo correcto, usted comprobar que el ancho
medido por el osciloscopio es casi igual al indicado por el BASIC Stamp en la pantalla "DEBUG".
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 46
Figura 5.5. Fotografa de una seal peridica simtrica obtenida con el osciloscopio entre el pin 3 del LM 555 y tierra.




6. Analgico Vs. Digital
Analgico Vs. Digital
A vs. D


Decisin Econmica:
A medida que usted comience a
crear sus propios circuitos, sean o
no productos comerciales, el costo
del hardware electrnico puede
subir rpidamente, principal-
mente si hace esto como un pasa-
tiempo fuera de una clase normal.
Se vuelve realmente importante
decidir cul es la mejor
aproximacin para resolver una
tarea particular. Algunas veces, la
mejor y la ms barata, no es la
misma opcin. Como descu-
briremos muchas veces, usted ser
capaz de resolver una tarea de
ambas formas. Puede que le lleve
ms tiempo realizarlo en software,
pero (si no contamos su tiempo),
ser casi siempre la decisin ms
barata.
En nuestro ltimo experimento, usamos uno de los ms populares
circuitos integrados de todos los tiempos, el temporizador 555.
Con l construimos un multivibrador astable, un nombre
extravagante para un circuito que hace titilar un LED.

Recuerde que la velocidad de parpadeo fue controlada por los valores de dos componentes: un capacitor y un
resistor. Para poder cambiar convenientemente la velocidad de parpadeo, sustituimos un resistor de valor
fijo por un potencimetro. Rotando manualmente la perilla del potencimetro, cambiamos su resistencia.

Algunos dispositivos que actualmente estn disponibles, nos permiten eliminar el elemento manual para
cambiar el valor resistivo.

Usted puede estar familiarizado con los telfonos celulares, que requieren que presione un botn en lugar de
girar una perilla, para ajustar el volumen. En muchos casos, esto se realiza con un circuito similar al que
vamos a realizar. En lugar de cambiar el volumen de un parlante, vamos a regresar a nuestro circuito titilador
555, y no slo seremos capaces de prender y apagar un circuito, sino que tambin podremos variar (desde el
programa), la velocidad de parpadeo del LED.

Recuerde, todo esto se realiza en hardware. Es importante destacar que
en cada diseo, usted tomar decisiones; tanto escribir un programa o
implementar la funcin en hardware. No hay slo una respuesta correcta.
En muchos casos usted podra tomar cualquiera de las dos, y luego est la
decisin econmica qu mtodo ser menos caro?, y podra el cdigo
de control realizar todas las funciones?.

Estas son situaciones que se plantean a travs del proceso de diseo.
Como descubriremos en ste experimento, hay muchos mtodos
diferentes para realizar una cierta tarea, y algunas veces es mejor dejarle
al MicroControlador hacer la tarea pesada, como por ejemplo clculos, y
dejar las tareas simples (hacer titilar el LED a una velocidad diferente) a un
simple circuito de hardware.

Saque su Plaqueta de Educacin y haga que algo suceda!.


www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 48
Analgico Vs. Digital
Partes Requeridas

Constryalo!



DS1804:
Muchos nmeros diferentes
y combinaciones de letras
son usados en la industria de
los semiconductores, para
referirse a componentes
individuales. Estos son
simplemente nmeros de
referencia para tipos
especficos de dispositivos.

Este CI en particular es
fabricado por una compaa
Dallas Semiconductors.
Para ste experimento, usted necesitar lo siguiente:




Mire el circuito que se muestra en la Figura 6.1. Como usted habr
notado, ste es esencialmente el mismo circuito titilador de LED
que usamos en la figura 5.2. Recuerde que la velocidad de
parpadeo del LED fue cambiada girando el potencimetro.
Ahora construya el circuito que se muestra en la Figura 6.1. Conecte el circuito
integrado DS1804 en el lugar del potencimetro. Tambin observe que la lnea
de reset del 555 (pin 4) est ahora conectada a P0 en el BASICStamp.

Bien, qu es el DS1804? Recuerde que un potencimetro es simplemente un
resistor variable que cambia su resistencia cuando usted rota o mueve
mecnicamente su perilla o cursor. Este cambio en la resistencia es
responsable del cambio en la velocidad de parpadeo del circuito temporizador
555.

El DS1804 es un potencimetro controlado digitalmente. Usted puede cambiar
su resistencia (igual que como haca con el potencimetro manual), pero en
lugar de mover la perilla mecnicamente, usted le enviar pulsos digitales
desde el BASICStamp. Estos pulsos digitales cambian la ubicacin de la perilla
y por lo tanto cambian la velocidad de parpadeo del 555.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 49
(1) Un BASIC Stamp 2p
(1) Una Plaqueta de Educacin NX1000
(1) Un Cable de Programacin
(1) Un LED's con resistencias de 200 Ohm 1/4 Watt
(1) Un CI temporizador CMOS 555
(1) Potencimetro digital DS1804 Dallas Semiconductor
(1) Un Capacitor 10 microfaradios, 25 volt electroltico
(1) Un Resistor 4.7K ohm, Watt
(1) Un Resistor 1 K ohm, Watt
(1) Una Fuente de alimentacin
(1) Un set de cables de conexin
(1) Un Programa BASIC Stamp Editor
Analgico Vs. Digital






Figura 6.2: Interior
del DS1804. Este potencimetro
controlado digitalmente reemplaza
al potencimetro manual.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 50
Figura 6.1. Potencimetro Digital.
Reemplace el potencimetro manual de la figura 5.2. con el Potencimetro digital DS1804, como se indica en la siguiente figura:

Mire la figura 6.2. Este es un diagrama interno del circuito integrado DS1804. El elemento resistivo
tiene un valor total de 100k Ohms. La perilla, si bien no es totalmente continua, puede ser
posicionada en cualquiera de sus 100 posiciones discretas.

Pin (1): Incrementar Posicin Pin (7): Habilitar al Potencimetro
Pin (2): Arriba / Abajo Pin (3) y Pin (6): Extremos del Potencimetro
Pin (5): Cursor o centro del Potencimetro
4
W
L
Analgico Vs. Digital


www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 51
Esto significa que el valor de 100 KOhm del DS1804, puede ser posicionado en 100 valores diferen_
tes de 1 KOhm cada uno. As, un primer incremento resultar en 1000 Ohm, un segundo incremento
causar que el valor sea aproximadamente 2000 Ohms. As sucesivamente, hasta llegar a 100.000
Ohm o 100KOhms. En la figura 5.2, se observa un circuito que puede habilitar (o desconectar) un
circuito temporizador 555. Sin embargo, la nica forma para modificar la velocidad de parpadeo era
mediante la rotacin manual de un potencimetro mecnico. Con el DS1804 podemos lograr que el
BASIC Stamp no slo encienda o apague el circuito, sino que tambin controle la velocidad con
que parpadea el LED.
Figura 6.3.
Fotografa de componentes montados en la Protoboard,
del diagrama esquemtico de la figura 6.1.
Analgico Vs. Digital
'{$STAMP BS2p}
'Programa: PL6_1R0.bsp
'Potencimetro Digital DS1804

x VAR BYTE ' Define a x como una variable de 8 bits.


y VAR BYTE ' Define a y como una variable de 8 bits.

Output 0 ' P0 Salida para hacer RESET en el '555'


Output 1 ' P1 Salida para incrementar el DS1804
Output 2 ' P2 tipo de Accin Arriba / Abajo (Up/Down)
Output 3 ' P3 Selecciona el DS1804 (Chip Select)

High 0 ' Habilita al 555 para que el LED titile


Low 3 ' Selecciona al DS1804

'***** Esta seccin reinicia el resistor variable en cero OHM ******

Low 2 ' Los pulsos hacen que el DS1804 vaya a "bajo"(Down)


For x = 1 to 100
High 1 ' Pulso
Low 1
Next ' Repite 100 veces

'***** Esta seccin fija el valor del resistor variable a un valor


' determinado por "y" en el bucle for - Next ******

High 2 'Los pulsos hacen que el DS1804 vaya "arriba" (Up)


For y = 1 to 100
High 1 'pulso
Low 1
Next 'repite 100 veces (aumenta el valor del resistor interno)

bucle: 'Despus de ajustar el resistor se queda aqu


goto bucle

Miremos ms de cerca nuestro programa:


Cada vez que el potencimetro digital se energiza por primera vez, no tenemos ni idea de cul es la
posicin del cursor, debido a que no se puede observar dentro del chip. Por lo tanto sta rutina,
(comenzando con ste comando), enviar una cantidad suficiente de pulsos para fijar el cursor en el
inicio de la excursin. Debido a que hay 100 posiciones discretas en el elemento resistivo para el
DS1804, por lo menos, envindole un pulso "bajo" (fijando la direccin con el comando "low2") al
menos 100 veces, nos aseguramos que el cursor est en el principio. No hay problema si usted le
enva pulsos hacia "abajo" o "arriba" ms de 100 veces, el potencimetro digital simplemente llegar
a su posicin mnima o mxima y descartar los pulsos sobrantes.

Progrmelo!
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 52
Analgico Vs. Digital
Explicacin del programa, instruccin por instruccin...

Output 0

Esta salida es conectada a la lnea de reset del temporizador. Un cambio en el valor de la salida de P0 puede encender
circuito titilador.

Output 1

Este comando lo hemos usado muchas veces, pero a qu est conectado P1?. La respuesta puede ser encontrada en la
hoja de datos del resistor variable DS1804. La seal de incremento (Pin 1 del DS1804), es donde enviaremos los pulsos
para mover el cursor. Como ver ms adelante, usaremos los comandos "High" y "Low" para enviar los pulsos en esta lnea
de seal.

Output 2

Otra salida al BASIC Stamp que est conectada a una seal llamada Arriba / Abajo del DS1804. Cuando progra_
mamos el BASIC Stamp para hacer P2 alto, entonces cualquier pulso en el pin de incremento har que el resistor
variable aumente su valor. Inversamente, si P2 es bajo, entonces cualquier pulso en la lnea de seal de incremento har
que el DS1804 disminuya su valor de resistencia.

Output 3

Con la seal de Habilitar "chip select", seleccionamos si el DS1804 puede cambiar su valor. Si la seal de "Habilitar"
chip select (en el pin 7 del DS1804) es alta, entonces cualquier pulso o seales Arriba / Abajo son simplemente igno_
radas. La seal (que sale de P3 en el BASIC Stamp) es activa baja.

High 0

Bien, sta instruccin fija el nivel de P0 en alto, por lo tanto habilita el circuito titilador.

Low3

Debido a que P3 es Habilitar chip select (y es activo bajo), poniendo un 0 en P3, habilita al DS1804 a recibir pulsos y
modificar su resistencia.

Low2

Los pulsos hacen que el DS1804 vaya hacia abajo
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 53
Analgico Vs. Digital


For x = 1 to 100
High 1
Low1
Next

Estos comandos hacen que P1 vaya a alto y luego a bajo, dando como resultado un pulso simple, y debido a que est
en un bucle ForNext que se repite 100 veces, sto crea 100 pulsos. El resistor digital es ahora fijado en "0" Ohms.

High 2

La seal en P2 que haba sido fijada anteriormente en nivel bajo (haciendo que el cursor se mueva hacia "abajo") es a_
hora fijada en nivel alto, de esa forma, cualquier pulso (en el pin 1 del DS1804) a partir de ste punto del programa, har
que el cursor se mueva hacia arriba.

For y =1 to 100

La cantidad de veces que se repite ste bucle puede ser cambiada entre 1 y 100 veces. Pruebe diferentes valores. Cada vez
que usted cambia el valor, ejecute el programa. Usted ver que el circuito titilador opera a una velocidad diferente
dependiendo de su valor.

High 1
Low1
Next

En este caso, repetiremos 100 veces, lo que hace que el cursor se mueva 100 posiciones hacia arriba.

Bucle:
goto bucle
En ste punto, nuestro programa simplemente se detiene y no hace nada ms. En una "aplicacin real", sin embargo, su
programa podra continuar realizando otras tareas, mientras tanto, la velocidad de parpadeo se mantiene (habiendo sido
fijada por nuestro MicroControlador), sin requerirse alguna otra interaccin con el BASIC Stamp.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 54
Analgico Vs. Digital
Modifique el programa para aumentar y disminuir la velocidad de parpadeo del LED, y guardelo como PL6_1R1.bs2

'{$STAMP BS2p}
'Programa: PL6_1R1.bsp
'Potencimetro Digital DS1804

X VAR BYTE ' Define a X como una variable de 8 bits.

High 0 ' Habilita al 555 para que el LED titile

INICIO:

Low 2 ' Los pulsos hacen que el DS1804 vaya a "bajo"(Down)


Low 3 ' Selecciona al DS1804

DEBUG CLS ' Limpia la pantalla DEBUG


DEBUG "**** Colocando del DS1804 en 0Ohm ****", cr

For X = 1 to 100 ' Fija el valor del cursor en "0 Ohm" rpidamente
High 1 ' Pulso "incremente"
Low 1
Next ' Repite 100 veces

PAUSE 500
DEBUG "*************** LISTO ****************", cr,cr
DEBUG "** DISMINUYENDO RATA DE PARPADEO **", cr

High 2 ' Hace que el cursor vaya hacia "arriba" (Up)


For x = 0 to 10 ' Hace que el cursor aumente 10 posiciones discretas
High 1 ' Pulso "incremente"
Low 1

DEBUG 2,18,5,"X = ", DEC x


Pause 1000 ' Espera 1000 milisegundos
Next ' Repite 100 veces

GOTO INICIO ' Se regresa a inicio


Es un dispositivo que realmente mide el valor de un resistor en particular. Trabaja haciendo circular una
corriente a travs del resistor, y midiendo la cada de voltaje sobre l. En muchos casos usted necesita
apagar su circuito si va a usar un hmetro. En el caso del chip DS1804, sin embargo, usted puede dejar
encendido el circuito, siempre y cuando slamente toque los tres terminales (que representan los tres
terminales del potencimetro) con las puntas del hmetro. De hecho para poder medir el valor del cursor
en cualquier punto, la alimentacin del DS1804 debe estar aplicada. Este es un caso especial y no es
una circunstancia normal de medicin.
hmetro
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 55




7. Conversin Analgica a Digital
Conversin Analgica a Digital
Construya su Propio Voltmetro Digital de CC

Un voltmetro digital de CCes una herramienta til para medir
tensin entre dos puntos. En este Captulo, construiremos un
voltmetro para mediciones de CC(corriente continua) en el rango
de 0 a 5 Volts. Un uso comn de un voltmetro es controlar la
tensin entre los dos terminales de una batera o una pila.

El voltmetro digital se llama as debido a que muestra las mediciones con dgitos. Se usan los dgitos de 0 a 9 y
un punto decimal para mostrar las mediciones de tensin como valores decimales. Se podran usar solamente
los dgitos 0 y 1 y se seguira llamando voltmetro digital, pero nos mostrara el valor en el sistema binario en
lugar de decimal, lo que nos hara perder mucho tiempo interpretando los datos. Dado que nuestro
voltmetro procesa las mediciones en binario, comenzaremos mostrando los valores binarios y luego los
modificaremos a una forma ms convencional y fcil de leer en decimal.

En la figura 5.2, usamos un circuito con LED para mostrar los
cambios en el nivel de tensin analgica aplicada a un circuito.
Como valor variable continuo, la tensin analgica vara dentro
de un rango continuo. Usaremos el potencimetro como en el
la figura 5.2 para generar un rango de tensiones continuo entre
0 y 5 Volts en la Plaqueta de Educacin.

Si bien la informacin sobre la tensin analgica puede ser
eficientemente procesada por dispositivos binarios, la tensin
primero debe ser muestreada para poder describirla usando
nmeros binarios. El ADC0831 es un circuito integrado comn que
realiza esta tarea. Describe la informacin analgica con nmeros
binarios para dispositivos que procesan informacin binaria,
como el BASICStamp.

En este captulo, construiremos un voltmetro usando un BASIC Stamp junto con el circuito integrado
ADC0831. Se conectar un potencimetro a la Plaqueta de Educacin y se ajustar para producir la tensin
de salida analgica. El voltmetro luego ser usado para medir muestras del rango continuo de salida de la
tensin.

Conversin
Analgica a
Digital Bsica


Rango continuo:
Conjunto de todos los valores posibles
entre un valor mximo y uno mnimo.
Cuando una fuente de tensin vara sobre
un rango continuo, se considera tensin
analgica.

Usaremos nuestro voltmetro para hacer un
muestreo de la tensin sobre un rango
continuo, de 0 a 5 Volts. La tensin que
medimos podra ser 1,234 Volts, 3,857564
Volts, 4,9999 Volts, etc.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 57
Conversin Analgica a Digital

Figura 7.1: El Circuito Divisor de Tensin
muestra como el cursor de un potencimetro
hace que el elemento resistivo se vea como
dos resistores en serie.

Vsalida es la tensin medida en el terminal
del cursor.






El Potencimetro, una Fuente de Tensin Variable

Hay una razn para que la tensin en el terminal del cursor del
potencimetro cambie, cuando gira la perilla. El cursor hace que el
elemento resistivo del potencimetro se comporte como dos resistores
en serie. La Figura 7.1 muestra dos resistores en serie. Cuando se aplica
una tensin de entrada y se mide la tensin de salida como se muestra
en la Figura 7.1, el circuito se conoce como divisor de tensin. R
1
y R
2
son
las resistencias entre el cursor y los otros dos terminales del
potencimetro y su valor cambia cuando se desplaza el cursor. Dado
que el potencimetro hace que R
1
y R
2
varen, podemos llamar al
terminal del cursor salida del divisor de tensin variable.






Componentes
Requeridos

V dd
Vsalida
(Tomada del
terminal del
cursor)
V ss
R
"
R
2
Ventrada
= Vdd
Para su Informacin:
Valores de Resistencia
Cuando sabe el valor de las dos
resistencias de la Figura 7.1, puede
predecir la tensin de salida usando
esta ecuacin:
2 1
2
R R
R
V V
entrada Salida
+
=

Como era de esperarse, se llama
ecuacin de divisor de tensin. Este
mtodo para modificar el valor de
una tensin de entrada por una
fraccin conocida, se conoce como
divisor de tensin.



Resistores en serie:
En la figura de abajo se muestran
tres resistores en serie. Los
resistores en serie conforman una
resistencia equivalente igual a la
suma de todas las resistencias:

R
serie
= R
1
+ R
2
+ R
3


R
"
R
3
R
2
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 58
(1) Un BASIC Stamp 2p
(1) Una Plaqueta de Educacin NX1000
(1) Un Cable de Programacin
(1) Potencimetro 100 KOhm
(1) Convertidor A/D ADC 0831
(1) Una Fuente de alimentacin
(1) Un set de cables de conexin
(1) Un Programa BASIC Stamp Editor
Conversin Analgica a Digital

El Circuito Integrado ADC0831. Un Conversor Analgico Digital de 8-bits

El ADC0831 es un circuito integrado conocido como conversor analgico a digital de 8-bits (conversor A/D)
con salida serial sincrnica. Veamos que es lo que significa cada uno de estos trminos:

! Circuito Integrado (IC) es un circuito con componentes microscpicos implantados sobre la
superficie de una pastilla de silicio. Cada chip est encapsulado en plstico negro y tiene 8 pines. El
encapsulado es para proteger el circuito integrado.

! Conversor A/D mide una muestra de tensin analgica y entrega un nmero binario que la describe.

! 8-bits es la cantidad de dgitos binarios que el ADC0831 usa para describir la tensin analgica que
muestrea. 8-bits tambin es la resolucin del conversor A/D. Puede contar de 0 a 255 (decimal)
usando un nmero binario de 8-bits. Esto significa que el ADC0831 puede aproximar la tensin que
mide a uno de 256 niveles. Un conversor con una resolucin mayor, como 12-bits, puede
descomponer el mismo rango de tensin en 4096 niveles, debido a que puede contar de 0 a 4095 con
12 bits binarios.

! Serial y sincrnico
Enviar los datos sincrnicamente significa que estamos enviando los datos con cierta coordinacin o
sincrona. Tcnicamente, significa que el emisor y el receptor de los bits de datos trabajan con la
misma seal de reloj.

El BASIC Stamp ser programado para leer y almacenar los 8-bits
transmitidos serialmente por el ADC0831. Tambin programaremos al BASIC
Stamp para que muestre el equivalente decimal de la salida binaria. Luego
este equivalente decimal se usa para calcular y mostrar la tensin medida en
formato digital. El BASICStamp tambin debe ser programado para enviar
las seales de control binariasque hacen funcionar al ADC0831.

La Figura 7.2a. muestra la distribucin de pines del ADC0831. Cada pin tiene un
nmero y un rtulo. El nmero es importante para realizar el conexionado
correctamente cuando se construye el circuito. Los rtulos indican la funcin
de cada pin.


Seales de control
binarias:
Son seales de tensin con
dos estados posibles, bajo o
alto, que se envan a un
dispositivo para decirle cmo
o cundo hacer algo. El
ADC0831 requiere seales de
control para activarse y una
seal de reloj para enviar cada
uno de los bits de salida.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 59
Conversin Analgica a Digital





La notacin de las entradas y salidas del ADC0831 funciona as: Vin(+)
es la entrada analgica y D0 es la salida serial. VREFy Vin(-) se usan
para polarizar el chip. Vcc y GND se usan para alimentar el IC. Vcc es
esencialmente lo mismo que Vdd en la Plaqueta de Educacin y GND es
lo mismo que Vss. /CS indica seleccin de chip activo bajo y CLK
representa el reloj (clock). Ambas son entradas de seales de control
binarias.

Para activar el ADC0831 para tomar una medicin, el pin /CS debe recibir una seal del BASICStamp que
comience en estado alto y luego pase a bajo. Esta seal debe permanecer en estado bajo durante la
conversin. Luego la entrada CLK debe recibir un pulso de reloj para indicar que la conversin debera co-
menzar en el siguiente pulso de reloj. Para ste IC, un pulso de reloj comienza en bajo, pasa a alto y luego
baja nuevamente. Se necesitan 8 pulsos ms de reloj para completar la conversin. Cada vez que se recibe un
pulso de reloj en la entrada CLK, se enva otro de los bits seriales por la salida D0.

Los diseadores en electrnica usan hojas de datos para encontrar la informacin que acabamos de
mencionar. Cada fabricante de chips publica hojas de datos para cada modelo de circuito integrado que
produce. La informacin que mostramos en la Figura 7.2a. fue extrada de una hoja de datos publicada por
National Semiconductor, fabricante del ADC0831. Por supuesto que todas las hojas de datos estn disponibles
en los sitios web de los fabricantes.


Polarizar:
Mtodo por el cual se aplican niveles
de tensin especficos en ciertos puntos
de un circuito para calibrarlo o ajustarlo.
Figura 7.2a: Smbolo del
ADC0831 y Distribucin de
Pines. La distribucin de
pines de la derecha muestra
los pines con sus respectivos
rtulos, de acuerdo a como se
ubican en el chip. El smbolo
de la izquierda muestra la
misma informacin pero con
el tpico formato para ser
usado en diagramas.
/CS
pin "
"
Marca ndice
Vin (+)
Vin (-)
4
3
2
GND
Vcc
CLK
D0
VREF
8
7
6
5
ADC0831
conversor
A/D
ADC0831
2
3
4
5 8
6
7
"
/CS
CLK
DO
Gnd
Vin(-)
Vin(+)
Vdd Vref
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 60
Conversin Analgica a Digital

SHIFTIN Dpi n, Cpi n, Mode, [ Vari abl e {\Bi t s} {, Vari abl e {\Bi t s}} ]

Funci n
Dpi n
Cpi n
Mode
Vari abl e
Bi t s
Smbolo Valor Significado y/o Accin
MSBPRE 0 msb-bit primero; Lectura bits antes del pulso de reloj
LSBPRE 1 lsb-bit primero; Lectura bits antes del pulso de reloj
MSBPOST 2
msb-bit primero; Lectura bits despus del pulso de
reloj
LSBPOST 3
lsb-bit primero; Lectura bits despus del pulso de
reloj

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 61
Comando que recibe datos en el BASIC Stamp, enviados en forma serial sncrona.
Es una variable, constante o expresin (0-15) que especifica cual Pin del BASIC
Stamp ser utilizado como entrada sncrona de datos. Este Pin se debe definir
como una entrada.
Es una variable, constante o expresin (0-15) que especifica cual Pin del BASIC
Stamp ser utilizado como seal de reloj de sincronizacin. Este Pin se debe definir
como una salida.
Es una variable, constante o expresin (0-3) uno de los cuatro smbolos
predefinidos, que le indican al comando SHIFIN en que orden los bits de datos
debern ser guardados en una variable y cual es la relacin entre los pulsos del
reloj y los datos recibidos. Ver la figura 7.2b.
Una variable donde se almacenarn los datos recibidos.
Es una variable, constante o expresin (1-16) opcional, que especifica cuantos bits el
comando SHIFIN deber leer. Si no se especifican, se tomarn por defecto ocho bits.
El comando SHIFIN es el comando utilizado por el BASIC Stamp para comunicarse en forma serial
sncrona con otros dispositivos, como memorias, convertidores analgicos digitales, relojes en tiempo
real, etc. Un comando SHIFTIN, lo primero que realiza es colocar el Pin de reloj (Cpin) en un estado
bajo y colocar el Pin de datos (Dpin) como una entrada. Luego se lleva a cabo, una de las cuatro
acciones mostradas en la figura 7.2b. Se continuar con la lectura hasta completar el nmero de
bits (Bits) especificado en el comando SHIFTIN; si no se especific, se leern ocho bits.
Figura No. 7.2b. Modos de Operacin del Comando SHIFTIN
Conversin Analgica a Digital

SHIFTOUT Dpi n, Cpi n, Mode, [ Out put Dat a {\Bi t s} {, Out put Dat a {\Bi t s}} ]

Funci n
Dpi n
Cpi n
Mode
Out put Dat a
Bi t s
Smbolo Valor Significado y/o Accin
LSBFIRST 0 Enva el lsb-bit primero
MSBFIRST 1 Enva el msb-bit primero

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 62
Comando que transmite datos desde el BASIC Stamp en forma serial sncrona.
Es una variable, constante o expresin (0-15) que especifica cual Pin del BASIC
Stamp ser utilizado como salida sncrona de datos. Este Pin se debe definir
como una salida.
Es una variable, constante o expresin (0-15) que especifica cual Pin del BASIC
Stamp ser utilizado como seal de reloj de sincronizacin. Este Pin se debe definir
como una salida.
Es una variable, constante o expresin (0-1) uno de los dos smbolos
predefinidos, que le indican al comando SHIFOUT en que orden los bits de datos
debern ser enviados. Ver la figura 7.2c.
Es una variable, constante o expresin que contiene los datos a enviar.
Es una variable, constante o expresin (1-16) opcional, que especifica cuantos bits el
comando SHIFTOUT deber enviar. Si no se especifican, se tomarn por defecto ocho
bits.
El comando SHIFOUT es el comando utilizado por el BASIC Stamp para comunicarse en forma serial
sncrona con otros dispositivos, como memorias, convertidores analgicos digitales, relojes en tiempo
real, etc. Un comando SHIFTOUT; lo primero que realiza es colocar el Pin de reloj (Cpin) en un
estado bajo y colocar el Pin de datos (Dpin) como una salida. Luego coloca en el Pin de datos (Dpin)
el valor del prximo bit a enviar (0,1) y genera un pulso de reloj sobre el Pin (Cpin). Se continuar
con el envo hasta completar el nmero de bits (Bits) especificado en el comando SHIFTOUT; si no se
especific, se enviarn ocho bits.
Figura No. 7.2c. Modos de Operacin del Comando SHIFTOUT
Conversin Analgica a Digital

La Figura 7.3 muestra el diagrama para este experimento. Es un circuito
bastante fcil de construir, as que intentemos armarlo sin el ejemplo de
la protoboard. Afortunadamente puede obtener la lista de conexiones del
diagrama de abajo. Recuerde que cuando trabaja con las conexiones de
un chip, debe usar la marca ndice junto con el diagrama de pines para
identificar correctamente los pines.


El Programa 7.1 es el primer paso para obtener un Voltmetro de CC. Este
programa muestra la salida serial de 8-bits del ADC0831. Ingrese el cdigo
y gurdelo con el nombre PL7_1R0.bsp. Haremos cuatro versiones de ste
programa, as que ser importante poder distinguirlas.

Modificaremos el programa para que tambin muestre la conversin decimal para el nmero binario de 8-
bits. Luego agregaremos un poco ms de cdigo para ajustar el nmero a una escala de 5 Volts. Asegrese que
el circuito est correctamente montado, el cable de programacin y la alimentacin estn conectados y luego
ejecute el programa.


Constryalo!

Progrmelo!
Figura 7.3: Diagrama de Circuito
Lista de conexiones de este esquema:
! Pin 1 del ADC0831 se conecta al pin P0 del BASIC
Stamp.
! El cursor del potencimetro se conecta al pin 2
del ADC0831.
! De los otros dos terminales del potencimetro,
uno se conecta a Vdd en la Plaqueta de Educacin
y el otro se conecta a Vss.
! Pines 3 y 4 del ADC0831 se conectan a Vss.
! Pines 5 y 8 del ADC0831 se conectan a Vdd.
! Pines 7 y 6 del ADC0831 se conectan a los pines P1
y P2 del BASICStamp, respectivamente.

P0
P"
P2
ADC0831
"00k
POT
2
3
4
5 8
6
7
"
/CS
CLK
DO
Gnd
Vin(-)
Vin(+)
Vdd Vref
Vdd
Vdd
Vss
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 63
Conversin Analgica a Digital

'{$STAMP BS2p}
'Programa: PL7_1R0.bsp
'Conversin Analgica a Digital

'************* Declaracin de Variables ******************

adcbits var byte


v var byte
R var byte
v2 var byte
v3 var byte

CS con 0
CLK con 1
D0 con 2

'************* Inicia la Ventana Debug ******************

debug cls

'***************** Rutina Principal **********************

principal:

gosub ADCDATA
gosub CALC_VOLTS
gosub MOSTRAR

goto principal

'****************** Subrutina ADCDATA ********************

ADCDATA:

high CS
low CS
low CLK
pulsout CLK,210
shiftin D0,CLK,msbpost,[adcbits\8]
return

'****************** Subrutina CALC_VOLT ******************

CALC_VOLTS:
return

'****************** Subrutina MOSTRAR ********************

MOSTRAR:
debug home
debug "Valor Binario de 8 Bits: ", bin8 adcbits
return

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 64
Conversin Analgica a Digital

La Salida

Si el potencimetro se encuentra aproximadamente en el punto medio, la salida de la pantalla debug podra
verse similar a la Figura 7.4. A medida que gira el potencimetro, los ceros y unos deberan cambiar
rpidamente. Cada vez que deja de moverlo, la salida debera permanecer esttica mostrando un patrn de
ocho ceros y unos.


Figura 7.4: Salida de Debug
para el Programa 7.1.

Valor Binario de 8 Bits: 10110100

Si su ventana debug responde de esta forma, seguramente su circuito y su programa estarn funcionando
correctamente. Si no es as, controle el conexionado de su circuito. Tambin asegrese de haber escrito
correctamente el cdigo. La ventana debug podra estar fuera de la vista, actvela con la secuencia
Run/Debug/New Terminal en la versin para Windows del software. Algunas veces una letra equivocada hace
que el programa no funcione correctamente.


Explicacin del Programa

Las primeras lneas de este programa son comentarios que comienzan con apstrofes y no tienen ninguna
funcin ms all de brindar informacin a la persona que lee el cdigo.

Programa: PL7_1R0.bsp

A continuacin est la seccin de declaracin de variables, que comienza con un comentario. Este programa
solamente usa la variable adcbits. En las prximas revisiones agregaremos cdigo que usar las otras cuatro
variables, v, R, v2 y v3.

'************* Declaracin de Variables ******************
adcbits var byte
v var byte
R var byte
v2 var byte
v3 var byte

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 65
Conversin Analgica a Digital

a continuacin hay un nuevo tipo de declaraciones que no hemos usado anteriormente. Se definen tres
constantes usando la directiva con. Despus de definir las constantes, podemos usar CS en vez del nmero 0,
CLK en vez de 1 y D0 en vez de 2. Los nombres de las constantes se escogieron de acuerdo a los rtulos de los
pines del ADC0831. Los nmeros se basan en los pines de E/S del BASICStamp.

CS con 0
CLK con 1
D0 con 2

Luego hay un bucle que contiene tres comandos gosub. La rutina
principal:goto principal ejecuta 3 subrutinas subrutinas subrutinas subrutinas diferentes
indefinidamente. Las subrutinas se llaman ADCDATA:, CALC_VOLTS:, y
MOSTRAR:. La etiqueta principal: es usada de igual forma que la
etiqueta bucle: de los programas anteriores. El nombre principal:
se escogi debido a que, como se explic anteriormente, esta es la
"rutina principal" del programa.

'***************** Rutina Principal **********************
principal:

gosub ADCDATA
gosub CALC_VOLTS
gosub MOSTRAR

goto principal

Bueno, cmo funciona el comando gosub? Como se muestra en el diagrama de flujo de la Figura 7.5, gosub
ADCDATA da la orden de ir a la subrutina rotulada ADCDATA: y volver al finalizar su ejecucin. El programa
salta a la etiqueta ADCDATA: y comienza a ejecutar comandos. Tan pronto como se encuentra con el
comando return, el programa regresa a la lnea inmediatamente posterior a gosub ADCDATA. En este caso,
el siguiente comando es otra instruccin gosub, ms especficamente: gosub CALC_VOLTS.


Subrutina:
Una subrutina es un pequeo
programa que realiza una tarea
especfica dentro de un programa
ms grande.




Asincrno, significa que podemos cambiar Sincrno, significa que estamos enviando o
los valores binarios, sin tener que esperar recibiendo los datos con cierta coordinacin
una habilitacin del BASIC Stamp. El Basic temporal (sincrona), la cual, realiza el BASIC
Stamp, recibe transmite datos tan rpido Stamp.
como pueda.
Sincrnico Asincrnico
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 66
Conversin Analgica a Digital

La subrutina ADCDATA: enva seales de control y recibe datos del ADC0831. Esta subrutina es donde se
demuestra la utilidad de la directiva con. P0 en el BASICStamp est conectado al pin /CS del ADC0831. De la
misma forma, los pines P1 y P2 estn conectados a CLK y D0. Cuando se envan seales al pin /CS, podemos
ingresar un comando como high CS en lugar de high 0. Tiene ms sentido al escribir el cdigo y tambin lo
hace ms fcil de leer. Tambin es ms fcil modificar el valor de una constante al inicio del programa si se
decide conectar el ADC0831 a un pin de E/S distinto del BASICStamp.

El comando high CS enva una seal de estado alto al pin /CS del ADC0831. Para iniciar la conversin,
necesitamos enviar un estado alto (5 Volts), seguido por un estado bajo (0 Volts) en la entrada /CS del
ADC0831 usando low CS. La seal enviada a la entrada /CS del ADC0831 debe permanecer en estado bajo
durante la conversin.

high CS
low CS

El comando low CLK es necesario para que los pulsos de reloj tengan la forma correcta. Al usar este
comando se garantiza que al usar la siguiente instruccin (pulsout) se enviar un pulso de reloj con la forma
correcta, bajo-alto-bajo. Usamos los comandos high y low para generar estados altos y bajos como
alternativa a out0=1 y out0=0 que empleamos en el primer experimento.

low CLK

El comando pulsout CLK,210 enva un pulso de reloj a la entrada CLK del ADC0831. Este es el primer pulso
de reloj y todo lo que hace es avisar al ADC0831 que inicie la conversin en el siguiente pulso de reloj. Por este
motivo, no necesitamos controlar el estado de la entrada D0 con anterioridad a este pulso.

pulsout CLK,210
principal:

gosub ADCDATA
gosub CALC_VOLTS
gosub MOSTRAR

goto PRINCIPAL

ADCDATA:
high CS
low CS
low CLK
pulsout CLK,210
shiftin
D0,CLK,msbpost,[adcbits\8]
return

Figura 7.5: Diagrama de Flujo
Una subrutina enva el programa a
una etiqueta especfica. En este
caso ADCDATA:. Luego el
programa contina ejecutando
comandos hasta encontrar la
instruccin return. Esta
instruccin regresa la ejecucin del
programa al comando
inmediatamente posterior al
gosub que origin el salto. En
este caso es otro comando gosub.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 67
Conversin Analgica a Digital

Dado que pusimos el reloj en estado bajo justo antes de este comando, pulsout enva la seal bajo-alto-bajo
deseada. La duracin en estado alto es dos veces el nmero especificado en el comando pulsout, en
microsegundos (s). 1 s = 1/1.000.000 segundos. Por lo tanto, la duracin de este pulso es de 1.18 s 210 =
248 s, asumiendo que estamos utilizando un BASIC Stamp 2p.

El comando shiftin D0,CLK,msbpost,[adcbits\8] es una instruccin poderosa que se encarga de
realizar toda la comunicacin serial sincrnica, ste comando enva las seales de control a la entrada CLK del
del ADC0831 y lee los bits de la salida D0 del ADC0831. Este comando tambin carga cada uno de los bits de
salida del ADC 0831 en el byte adcbits .. .

shiftin D0,CLK,msbpost,[adcbits\8]

El comando shiftin est desarrollado con ms detalle al comienzo de ste captulo, el formato general es:

shiftin pin de datos, pin de reloj, modo,[variable \ bits]

En nuestro caso, el pin de datos es D0, una constante igual a 2. esta constante es usada como referencia al pin
de E/S P2 del BASICStamp en este programa. Del mismo modo, el pin de reloj es CLK, que es una constante
igual a 1 y hace referencia al pin de E/S P1 del BASICStamp. El modo en este caso es msbpost que es uno de
los cuatro modos de transmisin que pueden ser usados con este comando. Indica que se transmite primero
el MSB (bit ms significativo) y que los bits de salida del ADC0831 estn listos despus del flanco descendente
del reloj (post). Los parmetros entre corchetes [adcbits\8], indican que los bits se desplazan dentro de la
variable adcbits y se esperan 8-bits.

La subrutina CALC_VOLTS: est vaca por el momento, pero desarrollaremos su cdigo en breve. Esta
subrutina calcular la tensin medida.

CALC_VOLTS:
return

Hasta el momento, la subrutina MOSTRAR: solamente muestra la salida binaria de cada tensin analgica
tomada por el ADC0831. Ser modificada para mostrar el equivalente decimal del valor binario de 8-bits.
Tambin se modificar para mostrar la tensin medida.

El comando debug home, cr, "valor binario de 8-bits: ", bin8 adcbits, enva el cursor a la
posicin superior izquierda (inicio o "home") de la ventana debug. Luego imprime el mensaje que aparece
entre comillas. El modificador bin8 hace que el valor de adcbits se muestre como 8 dgitos binarios.

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 68
Conversin Analgica a Digital
debug home, cr, "valor binario de 8-bits: ", bin8 adcbits


Si la cantidad de dgitos mostrados puede variar, cuando use el comando debug home siempre especifique la
cantidad mxima de dgitos que podra tener en nmero, usando los modificadores como bin8, dec3, etc.
Cuando se usa debug cls, no es necesario especificar la cantidad de dgitos, as que podran usarse los
modificadores bin y dec.

El comando debug home es mejor para programas que se repiten constante y rpidamente. Si se usa debug
cls bajo estas circunstancias, al limpiar repetidamente la ventana debug se produce un parpadeo que
dificulta la lectura.

El comando return enva el programa de regreso a la lnea posterior al comando gosub MOSTRAR

MOSTRAR:
debug home
debug "valor binario de 8-bits: ", bin8 adcbits
return

Modificaremos la subrutina MOSTRAR: para que muestre el equivalente decimal del contenido binario de
adcbits en la ventana debug. Tambin se agregar cdigo para mostrar la lectura del voltmetro.


Interpretando la Salida

El ADC0831 mide la tensin analgica que se presenta en su entrada. Luego enva al BASICStamp un nmero
binario que describe el valor medido. Por ahora, nos concentraremos en una escala de tensin que comienza
en 0 Volts y termina en 5 Volts.

Con un nmero binario de 8-bits, puede comenzar a contar con 00000000 y terminar en 11111111.
Traducido a nmeros decimales, es lo mismo que contar de 0 a 255. Cuando se aplica a una escala de 5 Volts
que comienza en 0 Volts, es lo mismo que contar de 0 a 5 Volts usando 255 pasos de tensin.

Para la escala de 5 Volts, cuando el ADC0831 mide 0 Volts, usted obtiene 00000000. Cuando mide 5 Volts, la
salida es 11111111. Podemos calcular que la salida de la ventana debug de 10110100 de la Figura 7.4 es igual
al nmero decimal 180. Esto corresponde a una tensin medida de 3.53 Volts.

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 69
Conversin Analgica a Digital


Repaso de Conversin Binaria a Decimal

Cmo sabemos que se pueden obtener 256 combinaciones de un nmero binario de 8-bits? Recuerde,
siempre puede decir la cantidad de nmeros (combinaciones de 0s y 1s) que se pueden obtener de una
cantidad determinada de bits usando la frmula del Experimento 2:

combinaciones =2
bits


Esto significa que la cantidad de combinaciones es igual a dos elevado a la cantidad de bits. Para 8-bits, la
cantidad de combinaciones es 2
8
= 256. Para 12-bits, la cantidad de combinaciones es 2
12
= 4096 y as.

Usemos el mtodo de la tabla 7.1. para convertir el nmero binario de 8-bits 10100101 a su equivalente decimal
Repetiremos la tabla de multiplicadores para trabajar con ella:

Tabla 7.1 Multiplicadores de Bits para un Nmero Binario de 8-bits
Bit 7 6 5 4 3 2 1 0
Multiplicador 128 64 32 16 8 4 2 1


Primero, multiplique cada bit por su potencia de dos de la Tabla 7.1

128 X 1 = 128
64 X 0 = 0
32 X 1 = 32
16 X 0 = 0
8 X 0 = 0
4 X 1 = 4
2 X 0 = 0
1 X 1 = 1

Segundo, sume los 8 valores decimales:

128+0+32+0+0+4+0+1 = 165

Ahora sabemos que el nmero binario 10100101 es igual al nmero decimal 165. Para mostrar esta
conversin, agregaremos un comando debug a la subrutina MOSTRAR:. Las lneas agregadas estn sealadas
con "!".
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 70
Conversin Analgica a Digital

MOSTRAR:
debug home, "valor binario de 8 bits: ", bin8 adcbits
debug CR, CR, "Valor decimal: ", dec3 adcbits '! nueva lnea
return

El comando debug CR, CR, "Valor Decimal: ", dec3 adcbits le dice a la ventana debug que
ejecute dos saltos de lnea y muestre el mensaje entre comillas, seguido por el valor decimal de 3 dgitos de
adcbits. Si el valor real solamente tiene uno o dos dgitos, la ventana debug completar los espacios
faltantes con ceros debido al uso de dec3. Por ejemplo, el nmero 7 se mostrar como 007 y el nmero 85
como 085, etc.

Con un ajuste cuidadoso del potencimetro, podremos lograr una salida como la de la Figura 7.6.


Figura 7.6: Salida de Debugpara
el Programa PL7_1R1.bs2


Valor Binario de 8 Bits: 10100101

Valor Decimal: 165



Clculo de la Tensin

Ahora que sabemos el equivalente decimal de la salida binaria del ADC0831, podemos realizar unos clculos
para obtener la tensin medida. Para averiguar a que tensin corresponde el nmero decimal, debemos
calcular a que punto del rango de tensin corresponde este nmero. ste es un mtodo para razonar el
problema.

Sabemos que la tensin est en el rango de 0 a 5 Volts y tambin sabemos que la salida del ADC0831
est en el rango de 0 a 255.
En otras palabras, la tensin es a 5 como la salida del conversor es a 255.

Esto se traduce en la ecuacin No. 7.1:




Podemos despejar esta ecuacin para calcular la tensin:


255
/
5
D A Decimal Salida Tensin
=
255
5 ) A/D Decimal (Salida
Tensin=
Modifique el programa PL7_1R0.bsp con ste cdigo y guardelo como PL7_1R1.bsp
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 71
Conversin Analgica a Digital

Ahora sabemos que multiplicando por 5 y dividiendo por 255 obtenemos una escala de 5 Volts con 256
niveles. Podemos calcular la tensin de la Figura 7.6 donde la salida del ADC0831 es 10100101 = 165. La
tensin medida es:


Para calcular esta tensin usando el BASICStamp, deberemos agregar cdigo a las subrutinas CALC_VOLTS:
y MOSTRAR:. Primero, la ecuacin de tensin debe ser expresada en cdigo PBASIC. Este es un ejemplo de
cmo pretendera usted resolver esta ecuacin.

v = 5*adcbits/255

Este clculo en PBASICal parecer nos dara la salida que buscamos, pero no lo har. Igualmente intentaremos
usar esta ecuacin para ver que ocurre. Modifique las subrutinas CALC_VOLTS: y MOSTRAR: en el Programa
PL7_1R1.bsp y guardelo como el programa PL7_1R2.bsp, como a continuacin:

CALC_VOLTS:
v = 5*adcbits/255 '! lnea nueva
return

MOSTRAR:
debug home, "valor binario de 8 bits: ", bin8 adcbits
debug CR, CR, "Valor decimal: ", dec3 adcbits
debug CR, CR, Tensin: , dec3 v, Volts '! lnea nueva
return

Calculamos que 165 correspondera a una tensin de entrada de 3,24 Volts. Los 003 Volts que aparecen en la
Figura 7.7 tienen redondeo a valores enteros. Qu sucedi?


Figura 7.7: Salida de Debug para
el Programa PL7_1R2.bsp

Valor Binario de 8 Bits: 10100101

Valor Decimal: 165

Tensin: 003 Volts


Los comandos PBASIC del BASIC Stamp trabajan solamente con aritmtica entera. Los enteros son los
nmeros que usamos para contar: -2, -1, 0, 1, 2, 3, etc. El entero ms grande que puede procesar un BASIC
Stamp es 65535. Cuando se usa aritmtica entera, la parte fraccionaria de la respuesta es descartada.
. decimales dos a redondeado Volts 3,24 =
255
165 5
= Tensin
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 72
Conversin Analgica a Digital
Afortunadamente, an podemos usar aritmtica entera para encontrar los valores fraccionarios que estamos
intentando mostrar.
Antes de la divisin, la salida del conversor A/D output es multiplicada por 5. Esto no causa problemas.

) A/D Decimal (Salida 5 es esencialmente lo mismo que adcbits 5 .

En nuestro ejemplo de clculo de tensin es 825. 165 5 = Dado que 825 es un entero que es menor que
65535, esta parte del clculo se realiza sin problemas. El inconveniente se presenta al dividir 825 por 255. La
respuesta tiene un componente fraccionario que nunca se calcula con aritmtica entera.

Si hace la divisin con papel y lpiz, necesitar varios pasos y solamente usar matemtica entera. Veamos
cmo calcular la respuesta para este problema de divisin.

60 de resto un + 3 =
255
) A/D Decimal Salida ( 5
= Tensin

El proceso para calcular la parte fraccionaria de la divisin es repetitivo. Se multiplica el resto por 10, luego
se divide por 255, obteniendo otro resto que se multiplica por 10 y divide por 255 otra vez, etc. Para calcular
directamente los dos primeros decimales podemos tomar el resto y multiplicarlo por 100, luego dividimos por
255. Intentmoslo.


Recuerde: el BASICStamp descarta todo lo que se encuentre a la derecha de la coma sin redondear el
nmero. Esto se llama truncar. El resultado que obtendremos es 23. Este resultado debera haber sido
redondeado a 24 debido a que 23,5294 est ms cerca de 24 que de 23. Por ahora, usemos a 23 a la derecha
de la coma.

Nuestra respuesta usando este algoritmoes el entero 3 a la izquierda de la coma
y el entero 23 a la derecha. Dado que solamente usamos aritmtica entera en
este clculo, debera funcionar con PBASICen el BASICStamp.

Dado que el BASICStamp trabaja con enteros, no nos sorprende que exista un
comando PBASICpara calcular el resto entero de una divisin. El operador para
la divisin es / y el del resto es //. Intentemos convertir nuestro algoritmo en
cdigo PBASICpara que realice la cuenta por nosotros. Los pasos de la divisin
que mostramos a continuacin, corresponden a los comandos PBASIC que
usaremos.
23 23.5924... 255 6000 255 100) (60 = =
entera matemtica


Algoritmo:
Procedimiento para resol-
ver un problema. El pro-
cedimiento se descom-
pone en pasos repetitivos.


www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 73
Conversin Analgica a Digital


v=5*adcbits/255
R v
adcbits 5 255
+
R=(5*adcbits//255)

v2=(100*R)/255
2 v
R 100 255

De aqu obtenemos los 3 comandos PBASICpara calcular los valores a izquierda y derecha de la coma
decimal. Para reconstruir el valor fraccionario en la pantalla, imprimiremos una coma "," entre ambos valores.

El primero de los tres comandos ya se encuentra en nuestra subrutina CALC_VOLTS:. Agregue las otras dos
instrucciones para completar el algoritmo. Guarde el programa como PL7_1R3.bsp.

CALC_VOLTS:
v=5*adcbits/255
R=5*adcbits//255 '! lnea nueva
v2=100*R/255 '! lnea nueva
return

La subrutina MOSTRAR: tambin debe ser actualizada para imprimir los dos valores con una coma en el
medio. Asegrese de actualizar la lnea de la subrutina MOSTRAR: exactamente como se muestra abajo.

MOSTRAR:
debug home, "Valor Binario de 8 Bits: ", bin8 adcbits
debug CR, CR, "Valor Decimal: ", dec3 adcbits
debug CR, CR, Tensin: "
debug dec1 v, ",", dec2 v2, Volts '! lnea nueva
return

Ahora ejecute nuevamente el programa y vea lo que sucede. La Figura 7.8 muestra un ejemplo de la salida. El
programa est casi listo para mostrar el valor ms cercano a la centsima de Volt. Solamente debemos
corregir el error de redondeo en las centsimas.


Figura 7.8: Salida de DebugPara
el Programa PL7_1R3.bsp


Valor Binario de 8 Bits: 10100101

Valor Decimal: 165

Tensin: 3,23 Volts


www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 74


Este problema de redondeo puede ser corregido agregando el segmento de cdigo que se muestra abajo a la
subrutina CALC_VOLTS:.
La Salida

El ejemplo de salida de la Figura 7.9 indica que el voltmetro ahora calcula correctamente las centsimas de
Volt.


Figura 7.9: Salida de Debugpara
el Programa PL7_1R4.bsp

Valor Binario de 8 Bits: 10100101

Valor Decimal: 165

Tensin: 3.24 Volts


IMPORTANTE: Tan pronto como est seguro de que su programa funciona correctamente, gurdelo como
P7_1R4.bsp. En el prximo experimento usaremos este cdigo y el circuito.


Conversin Analgica a Digital
CALC_VOLTS:
v = 5 * adcbits / 255
R = 5 * adcbits // 255
v2 = 100 * R / 255
v3 = 100 * R // 255
v3 = 10 * v3 / 255
if v3 < 5 then salte_a_linea
v2 = v2 + 1

salte_a_linea:
if v2 < 100 then salte_a_todo
v = v + 1
v2 = 0

salte_a_todo:
return

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 75
Conversin Analgica a Digital


Explicacin del Programa

Para redondear correctamente las centsimas, necesitamos conocer el dgito de las milsimas. Usando las
reglas de divisin entera, podemos simplemente crear una variable v3 igual al resto del clculo de v2, y dividir
nuevamente por 255.

v3=100*R//255
v3=10*v3/255

Para evitar el uso de otra variable, v3 es redefinida en la segunda lnea. El valor de v3 a la derecha del signo
igual es el que se calcul en la primer lnea. El valor de v3 a la izquierda del igual es el valor redefinido, que es
diez veces el anterior v3, dividido por 255.

Este proceso podra repetirse una y otra vez para obtener el dgito en la posicin la diezmilsima de Volt,
cienmilsima y as sucesivamente.

Una vez que se conoce el valor del dgito de las milsimas, se aplican las siguientes reglas de redondeo:

Si el dgito de las milsimas es menor a 5, saltear agregar 1 a las centsimas.
Caso contrario, agregar 1 a las centsimas.
En todos los casos, truncar los valores ms all de las centsimas.

Dado que el valor v2 ya est truncado, solamente necesitamos el cdigo para decidir si le sumamos 1 o no a
las centsimas. Mostramos una versin posible a continuacin.

if v3<5 then saltea_linea
v2=v2+1
saltea_linea:

Dado que el valor de las unidades est almacenado en otra variable, necesitamos verificar si al agregar uno a
las centsimas es necesario o no, incrementar ese valor. Sin este cdigo, 3,996 se redondeara a 3,00 en lugar
de a 4,00.

if v2<100 then saltea_todo
v=v+1
v2=0
saltea_todo:


www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 76
Conversin Analgica a Digital
Guarde este programa y, si es posible, deje el circuito como est, debido a que podramos usar el voltmetro
para tomar mediciones en el circuito que construiremos en el prximo experimento.


Resolucin

El BASICStamp est ahora programado para calcular con precisin la tensin asociada a la salida binaria del
ADC0831 con una aproximacin de centsimas de Volt. Aunque se eliminaron las fuentes de error
provenientes del clculo, hay otra fuente de error que es la limitacin en la resolucin del conversor A/D.

El chip conversor A/D que estamos usando es capaz de discriminar 256 valores binarios. Esto significa que
cada medicin de tensin se redondea a uno de 256 valores discretos. El tamao del salto es el rango de
tensin entre estos valores discretos. Dado que el primer valor es cero, hay 255 pasos de tensin. El tamao
del paso est dado por :

Con esto en mente, cada vez que mueve el potencimetro, el conversor aproxima su salida al valor analgico,
pero no es exacto debido a las limitaciones por la resolucin. As, todava hay cierta incertidumbre sobre el
valor real de las centsimas. En algunas aplicaciones, la incerteza se muestra junto con el valor. Asumiendo
que el ADC0831 redondea a mitad de salto de tensin, podramos usar esta convencin para mostrar el valor
de tensin: "3,24 Volts ms o menos 0,01 Volts."

Existen conversores de mayor resolucin, como de 12 y 16 bits (y mayores tambin), pero debido a su mayor
precisin, su costo tambin se incrementa. La mejora en la resolucin es significativa. Como se mencion
antes, un conversor de 12-bits le dar una resolucin de 4095 pasos. Esto resulta en 5 volts / 4095 pasos, o un
paso cada 0,0012 Volts. Un conversor de 12-bits normalmente cuesta ms que uno de 8-bits. Tambin hay un
costo en trminos de la cantidad de memoria necesaria para tomar la medicin, (12 en oposicin a 8-bits) y
en la cantidad de procesamiento tambin (13 pulsos de reloj en lugar de 9).


Volts/paso 0.02 Volts/paso 0.0196
pasos 255
Volts 5
Paso de Tamao = =
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 77
En el Anexo "B", se detalla la construccin y programacin de un voltmetro digital con pantalla de
LED's de 7 Segmentos, el cual, es bsicamente una continuacin de ste captulo.




8. Conversin D/A con PWM
Conversin Digital a Analgico con PWM

Un resistor, un capacitor, un BASICStamp y una sola lnea
de cdigo PBASIC. Eso es todo lo que se necesita para
construir un conversor D/A con una resolucin de 8-bits.
Suena demasiado bueno para ser verdad? En algunos casos
se necesitar un bfer para que el circuito pueda mantener
la tensin en la salida. An as, es fcil de construir y ofrece
un grado de precisin superior a la de la red resistiva en escalera. La Figura 8.1 muestra el circuito usado, que
se trata de un circuito RCsimple. La entrada recibe una seal de modulacin de ancho de pulso (PWM) y la
salida sube o baja al nivel de tensin deseado.
















Cmo pueden una serie de pulsos de ancho variable, generar un nivel de tensin a la salida del conversor
D/A? La respuesta es el circuito RCmostrado en la Figura 8.1. Este circuito se comporta como una batera
recargable.


Digital a Analgico
Fcil con PWM


Figura 8.1: Circuito
RC que puede ser
conectado al BASIC
Stamp para realizar
la conversin D/A.
"0k
P8
+
-
"uF
Vss
D/A
Salida
PWM
Entrada
Arme el circuito de la figura 8.2. Recuerde que: las entradas del ADC0831 tienen resisten-
cias muy altas y se tratan como un circuito abierto. Debido a sto, es correcto conectar la
salida del conversor D/A a la entrada Vin(+) del ADC0831 sin necesidad de utilizar otro
componente adicional.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 79
Conversin Digital a Analgico con PWM


Vamos a usar el comando pwm para enviar pulsos al circuito RCpara realizar la conversin D/A. Luego
mediremos la tensin usando el ADC0831 como voltmetro.

El formato del comando pwm es:

pwm pin, trabajo, ciclos

El parmetro pin se refiere al pin de E/S del BASICStamp y puede especificar un nmero entre 0 y 15. Dado
que la entrada del conversor est conectada al pin P8 en el diagrama, usaremos un valor de pin igual a 8.

Ahora, qu hay sobre trabajo?. Podemos definir que un ciclo de trabajo es la relacin entre el ancho del
pulso y perodo. El parmetro trabajo no se aplica a un slo pulso de una seal, por el contrario se debe
aplicar a todos los pulsos sobre cierto perodo de tiempo. En otras palabras, el trmino trabajo
especifica la relacin entre tiempo en estado alto de la seal durante todos los pulsos en un intervalo de tiempo
especfico.

Cuando trabajo es 255 significa que todos los pulsos estn en estado alto y no hay estados bajos entre ellos.
Cuando todos los pulsos son altos, el capacitor se cargar hasta los 5 Volts. En teora, en realidad el capacitor
nunca podra cargarse hasta exactamente 5 Volts, pero en la prctica, un tiempo de 5RChace que la
tensin sobre el capacitor llegue a 99.3% de 5 Volts.
"0k
P8
P0
P"
P2
ADC0831
2
3
4
5 8
6
7
"
/CS
CLK
DO
Gnd
Vin(-)
Vin(+)
Vdd Vref
Vdd
+
-
"uF
Vss Vss

Figura 8.2: Circuito RC
para la Conversin D/A
con PWMconectado al
terminal Vin(+) del
ADC0831. ste es
conectado a la salida del
conversor D/Apara medir
las tensiones de salida.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 80
Conversin Digital a Analgico con PWM

Por lo tanto, trabajo es el parmetro que controla el nivel de tensin pero, cmo sabremos cunto deber
valer trabajo? Es bastante simple ya que se utiliza una escala de 0 a 255, donde 0 es 0 Volts y 255 son 5
Volts.

Supongamos que deseamos generar 3,25 Volts. Podemos utilizar la ecuacin abajo indicada sobre una escala de
5 Volts a un rango de 0 a 255. Recuerde que la tensin medida es a 5 como la salida del conversor A/D es a
255. Esto traducido a fracciones es:

255
/
5
decimal D A Entrada Tensin
=

En este caso, la tensin de salida del conversor D/A es a 5 como trabajo es a 255, lo que se traduce as a
fracciones:


255 5
D/A trabajo Salida
=


Normalmente sabemos la tensin que queremos, as que despejemos la ecuacin para obtener el parmetro
trabajo que necesitamos:

trabajo = 255 (Salida D/A / 5)

Dado que queremos una salida de 3,25 Volts:

trabajo = 255 (3,25 / 5) = 165,75

El nmero 165,75 debera ser redondeado a 166, de forma que podamos asignar a trabajo un valor entero.

La ltima cantidad que debemos determinar para el comando pwm es el parmetro ciclos, que especifica la
cantidad de milisegundos que durar la salida del PWM y puede valer hasta 65.535. La regla para determinar
la cantidad de ciclos es:

ciclos = 4 R C, en milisegundos

Dado que usamos un capacitor de 1.0 uFy un resistor de 10 k,

ciclos (en milisegundos) = 4 0.000001 10,000 = 0.04 = 40 10
-3
= 40 milisegundos
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 81
Conversin Digital a Analgico con PWM

Podemos escribir el comando: PWM 8, 166,40.
Vamos a incluir este cdigo como una subrutina llamada DAC y la vamos a anexar al programa del captulo
anterior PL7_1R4.bsp, despus el programa lo llamaremos sta vez PL8_1R0.bsp. Por favor, comentelo...
'{$STAMP BS2p}
'Programa: PL8_1R0.bsp
'Conversin Digital a Analgica usando PWM

'*************************** Declaracin de Variables ***************************


adcbits VAR BYTE ' Variable que almac. el valor binario de la conversin A/D
v VAR BYTE ' Variable que almac. el valor entero de la conversin A/D
R VAR BYTE ' Variable que almac. el residuo de la divisin entera
v2 VAR BYTE ' Variable que almac. el valor decimal de la conversin A/D
v3 VAR BYTE ' Variable que almac. las centcimas.

CS CON 0 ' Pin P0 del BS2 definido como "Chip Select" del ADC 0831
CLK CON 1 ' Pin P1 del BS2 definido como reloj "Clock" del ADC 0831
D0 CON 2 ' Pin P2 del BS2 definido como Datos "DATA" del ADC 0831

'************************** Inicia la Ventana Debug *****************************


DEBUG cls ' Limpia la pantalla del DEBUG

'***************************** Rutina Principal **********************************


principal:
GOSUB DAC ' Sub_Rutina de Conversin Digital a Analgica
GOSUB ADCDATA ' Sub_Rutina de Conversin Analgica a Digital
GOSUB CALC_VOLTS ' Sub_Rutina que calcula valor entero y decimal
GOSUB MOSTRAR ' Sub_rutina para mostrar el resultado
GOTO principal ' Lazo o Bucle a principal

'******************************** Subrutinas *************************************

DAC: ' Genera un pulso de Trabajo de 160 durante 40 milisegundos


PWM 8, 166,40
RETURN

ADCDATA: ' Rutina de Conversin Analgica a Digital


HIGH CS ' Habilita al Convertidor ADC 0831
LOW CS ' al cambiar el estado de alto a bajo.
LOW CLK ' Coloca la seal de reloj en bajo
PULSOUT CLK,210 ' Genera un primer pulso que inicia la conversin A/D
SHIFTIN D0,CLK,msbpost,[adcbits\8] ' Lee la conversin A/D y el resultado lo al_
RETURN ' macena en la variable adcbits.

CALC_VOLTS:
v = 5 * adcbits / 255 ' Calcula el valor entero y el decimal con dos
R = 5 * adcbits // 255 ' (02) cifras significativas.
v2 = 100 * R / 255
v3 = 100 * R // 255
v3 = 10 * v3 / 255
if v3 < 5 then salte_a_linea
v2 = v2 + 1
salte_a_linea:
if v2 < 100 then salte_a_todo
v = v + 1
v2 = 0
salte_a_todo:
RETURN

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 82
Conversin Digital a Analgico con PWM


















La Figura 8.3 indica que el bfer est cumpliendo su trabajo.


Figura 8.3: Salida de Debug
para el Programa PL8_1R0.bsp





Valor Binario de 8 Bits: 10100110

Valor Decimal: 166

Tensin: 3,25 Volts

'PL8_1R0.bsp Continuacin ...

MOSTRAR:
DEBUG HOME
DEBUG "Valor Binario de 8 Bits: ", BIN8 adcbits
DEBUG cr, cr, "Valor Decimal: ", DEC3 adcbits
DEBUG cr, cr, "Tensin: "
DEBUG DEC1 v, ",", DEC2 v2, " Volts"
RETURN
Ejecute el programa PL8_1R0.bsp, deber aparecer en la pantalla debug lo indicado en la figura 8.3
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 83




9. Acondicionamiento de una
Entrada/Salida Digital
Acondicionamiento de una Entrada/Salida Digital


Entrada Digital
Partes Requeridas

I
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 85
En el ejercicio del captulo 4, figura 4.2., se emple el nivel de estado estable del interruptor. La rutina
informaba el estado del interruptor una vez por cada pasada del bucle. Qu sucede si se desea
presionar rpidamente un botn para lograr que algo suceda solamente una vez? Hay dos problemas
que deberemos enfrentar. El primero es: Qu tan rpido puede presionar y soltar un botn? Debe
hacerlo en menos tiempo de lo que tarda en ejecutarse un ciclo de programa. El segundo problema es
lidiar con el rebote del interruptor. Llamamos rebote del interruptor a la tendencia que tienen estos
dispositivos a realizar varias acciones rpidas de encendido / apagado, en el instante que se activan o
desactivan. Vamos a construir un circuito que permita explicar ste fenmeno del rebote de un
interruptor utilizando muy pocos componentes y con la ayuda de un excelente programa graficador de
seales llamado Stamp Plot V3. En el Anexo "C", se encuentra una descripcin de ste programa.
Para ste experimento requerimos las siguientes partes:

(1) Un BASIC Stamp 2p


(1) Una Plaqueta de Educacin NX1000
(1) Un Cable de Programacin
(2) Dos LED's con resistencias de 200 Ohm 1/4 Watt
(1) Pulsador con resistencia 10 KOhm del pullup
(1) Una Fuente de alimentacin
(1) Un set de cables de conexin
(1) Un Programa BASIC Stamp Editor
(1) Un Programa Stamp Plot
Figura 9.1. Diagrama esquemtico del circuito a construir.
Deteccin de rebote en un Interruptor.
Acondicionamiento de una Entrada/Salida Digital

Constryalo!
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 86
Figura 9.2. Fotografa del circuito como construdo. Deteccin de rebote en un interruptor.
Es casi imposible presionar y liberar el botn suficientemente rpido como para realizar la accin
solamente una vez. Esto se muestra en la Figura 9.4. El bucle del programa se ejecuta demasiado
rpido. Si usted es lento, el programa tiene la oportunidad de ejecutarse varias veces mientras el
interruptor se encuentra presionado. Agregue a esto varios milisegundos de rebote y podra obtener
muchos pulsos cada vez que presione el botn. Cargue el programa PL9_1R0.bsp en el BASIC Stamp
2p y salga del programa editor. Luego ejecute el programa StampPlotV3.exe, que debi haber
instalado previamente desde el CD entregado a usted con el curso. Luego de ejecutarlo ver una
pantalla igual a la que se muestra en la figura 9.4.
Figura 9.3. Icono del programa StamPlotV3.exe
Acondicionamiento de una Entrada/Salida Digital
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 87
'{$STAMP BS2p}
'Programa: PL9_1R0.bsp
'DESAFIO DE VELOCIDAD

PAUSE 500
DEBUG "!TITL DESAFIO DE VELOCIDAD", CR ' Ttulo para la ventana del StampPlotV3
DEBUG "!TMAX 5", CR ' Configura el tiempo del Grfico (eje X)
DEBUG "!PNTS 300", CR ' Configura cantidad de puntos en grfica

INPUT 0 ' Configura a P0 como Pin de entrada


OUTPUT 1 ' Configura a P1 como Pin de salida
OUTPUT 2 ' Configura a P2 como Pin de salida

Out1 = 1 ' LED conectado a P1 = Encendido


Out2 = 0 ' LED conectado a P2 = Apagado

Bucle:

DEBUG IBIN In0, BIN Out1, BIN Out2, CR ' Dibuja el estado inicial de los Pines
IF In0 = 0 Then Titila ' Si se presiona P0 va a titila

GOTO Bucle

Titila:
TOGGLE 1 ' Invierte el estado del Pin P1 (LED)
TOGGLE 2 ' Invierte el estado del Pin P2 (LED)
GOTO Bucle

Figura 9.4. Programa StampPlotV3.exe. La pantalla muestra el estado de los Pines de entrada/salida del BASIC
Stamp. P0 >> Estado del pulsador (Interruptor), P1 >> Estado de Pin P1 (LED L15), P2 >> Estado del
Pin P2 (LED L14).
Rebote del Interruptor
Acondicionamiento de una Entrada/Salida Digital




www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 88
Reducir ms la velocidad de ejecucin del programa puede ayudar a
remediar el problema. ( Si el programa anterior no trabaj correcta_
mente con StampPlotV3 , una disminucin en la velocidad de
ejecucin permitir mejorar la transmisin serial de datos). Agregue
una pausa de 250 milisegundos a la rutina Titila:. El interruptor
tiene ahora 250 milisegundos para asentarse luego de ser presiona_
do, para despus retornar a su posicin abierta. Incluya en su
programa PAUSE 250 para incrementar el tiempo del bucle y
cancelar el rebote del interruptor, guardelo como PL9_2R0.bsp.
Otorgando ste tiempo de establecimiento, es mucho ms fcil
lograr que Titila: se ejecute una sola vez, al presionar rpidamente
el botn. Esta tcnica elimina el rebote del interruptor y le da
tiempo suficiente para liberarlo antes del siguiente ciclo de
programa. La pausa, debe ser suficientemente larga para evitar
estos inconvenientes. Sin embargo, si la PAUSE es demasiado larga,
se podra presionar el botn sin que el microcontrolador lo note.
Stamp Plot V3

El Stamp Plot V3, es un programa que


permite la visualizacin en tiempo real de
las variables o registros internos de un MC
BASIC Stamp. Es muy fcil de utilizar y
adems es gratuito. En el Anexo "C",
podemos encontrar una descripcin de ste
programa al igual que un par de ejemplos
que servirn como entrada del programa.

'{$STAMP BS2p}
'Programa: PL9_2R0.bsp
'DESAFIO DE VELOCIDAD

PAUSE 500
DEBUG "!TITL DESAFIO DE VELOCIDAD", CR ' Ttulo para la ventana del StampPlotV3
DEBUG "!TMAX 5", CR ' Configura el tiempo del Grfico (eje X)
DEBUG "!PNTS 300", CR ' Configura cantidad de puntos en grfica

INPUT 0 ' Configura a P0 como Pin de entrada


OUTPUT 1 ' Configura a P1 como Pin de salida
OUTPUT 2 ' Configura a P2 como Pin de salida
Out1 = 1 ' LED conectado a P1 = Encendido
Out2 = 0 ' LED conectado a P2 = Apagado

Bucle:

DEBUG IBIN In0, BIN Out1, BIN Out2, CR ' Dibuja el estado inicial de los Pines
IF In0 = 0 Then Titila ' Si se presiona P0 va a titila

GOTO Bucle

Titila:
TOGGLE 1 ' Invierte el estado del Pin P1 (LED)
TOGGLE 2 ' Invierte el estado del Pin P2 (LED)
PAUSE 250 ' Pausa de 250 milisegundos, para eliminar
GOTO Bucle ' el efecto del rebote.

Acondicionamiento de una Entrada/Salida Digital



Comando BUTTON: Rutina Anti Rebote de PBASIC

Eliminar el rebote de los interruptores es una tarea comn en programacin. Parallax desarroll dentro del
juego de instrucciones PBASIC2 un comando especfico para trabajar con la deteccin de seal de entrada
digital. El comando se llama button. La sintaxis del comando se muestra en el cuadro siguiente.


Para probar esta funcin con nuestra rutina, cargue y ejecute el Programa: PL9_3R0.bsp )





Referencia Rpida de Comandos PBASIC: BUTTON

BUTTON pin, estadoactivo,retardo,repetir,bytevariable,estadosalto, direccin

Pin: (0-15) Nmero de pin de la entrada.
Estadoactivo: (0 or 1) Especifica el estado lgico que ocurre al activar el interruptor.
Retardo: (0-255) Especifica el tiempo de establecimiento del interruptor. Nota: 0 y 255 son casos especiales. Si
retardo es 0, Button no elimina el rebote ni ejecuta autorepeticin. Si es 255, Button elimina el rebote pero no
ejecuta autorepeticin.
Repetir: (0-255) Especifica la cantidad de ciclos por repeticin.
Bytevariable: Nombre de una variable tipo byte que sirve como espacio de trabajo para la instruccin BUTTON.
Estadosalto: Estado del pin en el que se pretende que salte. (0) = No Presionado, (1) = Si Presionado.
Direccin: Etiqueta a la que saltar el programa cuando se cumplan las condiciones.

'{$STAMP BS2p}
'Programa: PL9_3R0.bsp
'DESAFIO DE VELOCIDAD

PULSADOR VAR byte ' Variable definida para el pulsador

PAUSE 500
DEBUG "!TITL DESAFIO DE VELOCIDAD", CR ' Ttulo para la ventana del StampPlotV3
DEBUG "!TMAX 5", CR ' Configura el tiempo del Grfico (eje X)
DEBUG "!PNTS 300", CR ' Configura cantidad de puntos en grfica

OUTPUT 1 ' Configura a P1 como Pin de salida


OUTPUT 2 ' Configura a P2 como Pin de salida
Out1 = 1 ' LED conectado a P1 = Encendido
Out2 = 0 ' LED conectado a P2 = Apagado

Bucle:

DEBUG IBIN In0, BIN Out1, BIN Out2, CR ' Dibuja el estado inicial de los Pines
BUTTON 0,0,255,2,PULSADOR,1,Titila ' Si se presiona P0 va a Titila

GOTO Bucle

Titila:
TOGGLE 1 ' Invierte el estado del Pin P1 (LED)
TOGGLE 2 ' Invierte el estado del Pin P2 (LED)
GOTO Bucle

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 89
Acondicionamiento de una Entrada/Salida Digital

Las salidas de un microcontrolador pueden ser usadas para
controlar el estado de dispositivos de campo de salida. Los
dispositivos de salida son aquellos que realizan el trabajo en
una aplicacin de control de proceso. Ellos entregan la energa
al proceso bajo control. Algunos ejemplos incluyen motores,
calentadores, solenoides, vlvulas y lmparas. La salida de baja
potencia del BASICStamp (o cualquier otro microcontrolador) no le permite proveer la energa requerida por
estas cargas. Con un acondicionamiento de seal apropiado, el BASICStamp puede controlar transistores de
potencia, tiristores y rels. Estos son los dispositivos que pueden entregar las tensiones y corrientes que
demandan los dispositivos de campo. En algunas aplicaciones, puede usar la salida del BASICStamp para
comunicarse con otro microcontrolador o circuito electrnico. Podra haber problemas de compatibilidad
entre diferentes familias lgicas, fuentes de alimentacin separadas, o masas no comunes que requieren
consideraciones especiales.

El diseo del acondicionamiento de seal apropiado comienza observando las caractersticas y limitaciones de
las salidas del BASICStamp. La salida de un BASICStamp usa niveles TTL standard. (Nota del Traductor Nota del Traductor Nota del Traductor Nota del Traductor: Los
niveles usados por el BASICStamp NO SON TTL NO SON TTL NO SON TTL NO SON TTL, sino que son compatibles con estos). Un estado alto de
aproximadamente 5 Volts a un estado bajo cercano a 0 Volts.

y recibir 25 mA de corriente. Relacionando esto al diagrama de la Figura 9.5, observe como se puede
conectar la carga. En la Figura 9.5a, la carga es conectada desde el pin de salida a masa. Cuando pone el pin en
estado alto, aparecen 5 Volts sobre el resistor (RL). La corriente de carga fluir hasta masa, a travs del
resistor. En este modo de suministro de corriente el BASICStamp puede entregar un mximo de 20 mA.

Figura 9.5: Disponibilidad de Corriente en un pin de Salida del BASIC Stamp



Figura 9.5a: Suministro de Corriente Figura 9.5b: Absorcin de Corriente


Salida Digital
De acuerdo a las especificaciones del BASIC Stamp, una salida puede entregar una corriente mxima de 20 mA
O
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 90
Acondicionamiento de una Entrada/Salida Digital
En la Figura 9.5b, la carga est entre el pin de salida y la fuente de +5 Volts Vdd. La corriente fluye desde la
alimentacin hacia el pin de salida del BASICStamp en estado bajo (masa), atravesando la carga. Este es el
modo de absorcin de corriente en el que el BASICStamp puede recibir un mximo de 25 mA.



Especificacin de Corriente de un Circuito Digital?
Las especificaciones de la salida de los circuitos digitales se muestran en las hojas de datos del fabricante. Estos
dispositivos normalmente pueden "absorber" ms corriente de la que pueden "entregar". Algunos dispositivos no
pueden entregar corriente porque la salida, no est conectada internamente a +V. Normalmente la salida de
estos dispositivos se denomina salida con colector abierto.

Las salidas se han usado para encender LEDs en ejercicios previos, como muestra la Figura 9.5a.Cuando la
salida del BASICStamp est en estado bajo, el diodo se polariza en directa generando una cada de tensin de
ms de un Volt, cayendo el resto de la tensin en el resistor de 220-Ohm. Esto limita el flujo de la corriente a
aproximadamente 16 mA. (Nota del Traductor Nota del Traductor Nota del Traductor Nota del Traductor: Estos valores fueron corregidos por el traductor), La luz
emitida por el diodo da una indicacin visual del estado de la salida. En los desafos de programacin
anteriores, haba asumido que el estado del LED representaba la accin del proceso que se estaba realizando
en ese momento. Esta suposicin se vuelve real cuando considera la operacin de un rel de estado slido
(SSR). La Figura9.6b muestra el esquema del rel de estado slido. El circuito de entrada (terminales 1-2) es
equivalente a la Figura 9.6a. La entrada de +3 a +24 VCCidentifica el rango de tensiones de control. Las
tensiones de control deben estar por encima de la tensin que produce suficiente corriente en el LED para
encenderlo. Si se excede la tensn de control mxima, la corriente resultante puede daar el LED. La luz
generada en el SSRacciona un circuito de salida controlado pticamente. No se muestra el detalle de este
circuito, pero est representado por el smbolo de contacto normalmente abierto. Las limitaciones de
corriente y tensin de la salida se muestran en la hoja de datos del dispositivo y normalmente tambin se
encuentran impresas en el encapsulado.

Figura 9.6: Circuitos de BASIC Stamp con LED y con Rel de Estado Slido



Figura 9.6a: BASIC Stamp con LED Figura 9.6b: BASIC Stamp con Rel de Estado Slido
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 91




10. Movimiento Micro-controlado
Movimiento Micro-controlado
Movimiento
Micro-controlado
El SERVO Motor
















Circuito de interface:
Los MicroControladores ope_
r an con niveles de seal y
voltaje muy pequeos. No
tienen suficiente capacidad
de manejo para operar
dispositivos de salida
grandes, o para grandes
cargas.

Considere su Walkman
como un microcontrolador.
Por s mismo puede
controlar una pequea salida
(como los auriculares), pero
para controlar un dispositivo
ms grande (como grandes
bafles), usted necesitar un
circuito de interface (un
amplificador).

El BASIC Stamp puede
controlar pequeos motores
en un robot, o con el
adecuado circuito de
interface, puede operar los
motores que abren las
compuertas de una represa
hidroelctrica; todo
depende de su circuito de
interface.


Inicializacin:
La primera parte de muchos
programas es llamada a
veces la rutina de inicia-
lizacin. Esto significa que
esta porcin del programa
ajusta todos los parmetros
que el programa usar.

Figura 10.1: Servo
Servo de radio control
(RC)

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 93
Hay muchos tipos de motores diferentes que el BASIC Stamp puede controlar.
La mayora de los motores, sin embargo, requieren algn tipo de circuitera de
interface externa que le permite a nuestro microcontrolador, controlarlos. En
este experimento usaremos un tipo especializado de motor DC (CC, corriente
continua). Es llamado servo.
Qu es un servo? Un servo es un motor de corriente continua que tiene un circuito de
control construido en su interior, El circuito de control est realimentando en todo momento
con la posicin del rotor del motor. Es muy simple de conectar a un microcontrolador (tal
como el BASIC Stamp). El tipo de servo que usaremos fue diseado originalmente para ser
usados en aviones, botes y autos radiocontrolados. En lugar de rotar continuamente, como
los motores comunes, un servo es posicionable. Usted puede, enviando las seales
apropiadas desde el BASIC Stamp, hacer rotar al servo a un punto especfico, y quedarse
ah.
Los servos poseen un conector para 3 cables: Uno de
alimentacin, uno de tierra y el cable de control. Debido
a que los servos posen los drivers y circuitos de control
integrados, su funcionamiento, no es equivalente al de
un motor de corriente contnua.
IMPORTANTE !!!
Movimiento Micro-controlado





Constryalo!
(1) Un BASIC Stamp 2p
(1) Una plaqueta de Educacin NX1000
(1) Un conector de tres pines
(1) Cable de Programacin
(1) Servo Parallax
(1) Un LED con resistencia 220 Ohm 1/4 Watt
(1) Un capacitor electroltico de 3000 uf
(1) Una fuente de alimentacin
(1) Un programa Stamp Editor.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 94
Figura 10.2a. Esquema elctrico de la co_
nexin de un servo motor.

Figura 10.2b. Fotografa del montaje


en la Protoboard.
Movimiento Micro-controlado













Si usted est usando el
editor de DOSBASICStamp
y obtiene un mensaje que
dice, Hardware not found,
revise nuevamente las
conexiones entre la PCy la
Plaqueta y tambin
asegrese que la batera de
9 volts (o la fuente de
alimentacin) est conec-
tada y cargada.

Trate de descargar
nuevamente (tenga
presionada la tecla ALT y
luego presione r). Si an
no funciona, debe tener un
bug (error). Revise nueva-
mente su programa para
estar seguro de que lo ha
escrito correctamente.

Despus de revisar sus
conexiones, presione ALTr
otra vez. Si an recibe el
mensaje hardware not
found asegrese de que su
computadora est
funcionando en DOS, y no en
Win95. Si est funcionando
en Win 95, vaya al men de
inicio (en el monitor), y
seleccione reiniciar en modo
MS/DOS.

Si despus de revisar esto
tiene problemas , pdale
ayuda a su instructor.
Figura 10.3: Secuencia de pulsos de un servo tpico. Diagrama de
tiempo de los pulsos que necesita el servo.

Un servo rotar noventa grados si se le aplica un tren de pulsos entre (1 - 2) miliseg. Un
servo rotar ciento ochenta grados si se le aplica un tren de pulsos entre (0.5 - 2.5) mili-
segundos. Estos pulsos deben repetirse al menos cada 10 milisegundos, y deben estar
aplicados sobre el cable de control blanco amarillo del Servo motor. A medida que el
ancho del pulso se incrementa, (0.5 ms, 0.8 ms, 1.0 ms, 1,3 ms etc.), el servo cambia su
posicin. Cuando el ancho del pulso alcanza los 2,5 ms, el servo est en el otro extremo
de su rotacin.
0.5 a 2.5
Aproximadamente 10 ms. Giro de 180 grados.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 95
Aproximadamente 10 ms. Giro de 90 grados.
Centro CCW CCW CW
Movimiento Micro-controlado






Milisegundo:
Los sistemas de MicroControladores y
computadoras, operan a velocidades
muy altas. Como humanos, estamos
acostumbrados a usar para mediciones
de tiempo, el rango de segundos, o en el
caso de competencias atlticas, dcimas
o centsimas de segundos. Un
milisegundo es 1 / 1000 de segundo, es
decir hay 1000 milisegundos en 1
segundo. Esto se ve como una pequea
cantidad de tiempo, pero es realmente
bastante largo en el mundo de la micro-
electrnica de las computadoras. De
hecho, su computadora personal (la que
est usando para escribir stos
programas en PBASIC), est pro-
bablemente operando en millonsimas
de segundos.

Diagrama de Tiempo:
Las computadoras funcionan con una
serie de pulsos, normalmente entre 0 y
5 volts. Un diagrama de tiempo es
simplemente una forma de visualizar los
pulsos. Usted lee un diagrama de
tiempo de izquierda a derecha. En
nuestro diagrama de ejemplo, vemos
que el voltaje, (en nuestro pin de salida
P1) comienza a 0 volts. Despus de un
corto perodo de tiempo vemos que P1
pasa a estado alto por una duracin de
1 a 2 milisegundos y luego regresa a 0
volt. Despus de aproximadamente 10
milisegundos, P1 vuelve a subir. Salvo
que se indique en el diagrama, usted
puede asumir que el proceso se repite
indefinidamente, es decir que cuando
llega al extremo derecho del diagrama,
regresa al extremo izquierdo, y
comienza otra vez.


Modificaciones de
Servo:
Aunque no estn diseados
especficamente para
rotacin completa, los
servos pueden ser
modificados para permitirles
movimiento giratorio
completo. Un mtodo para
sta modificacin est
explicado en Programming &
Customizing the BASIC
Stamp, por Scott Edwards.

'{$STAMP BS2p}
'Programa: PL10_1R0.bsp
'Rotacin de un Servo Motor

' ************* Declaracin de Variables ***************


x var word
output1 ' Pin P1 Definido como salida
output5 ' Pin P5 Definido como salida

' ************* Programa Principal ***************


Inicio:

for x = 1 to 100 ' Lazo de 100 Repeticiones


pulsout 1,425 ' Pulso por P1 de 0.5 ms
pause 10 ' Pausa de 10 ms
toggle 5 ' El LED Parpadea
next

for x = 1 to 100 ' Lazo de 100 Repeticiones


pulsout 1,2118 ' Pulso por P1 de 2.5 ms
pause 10 ' Pausa de 10 ms
toggle 5 ' El LED Parpadea
next

pause 500 ' Esperar 500 milisegundos

goto Inicio

Si su programa trabaja bien, el servo


debera estar rotando repetidamente de un
extremo a otro. Para un BS2p, la base de
tiempo para el comando PULSOUT es igual
a 1.18 (us) microsegundos, as:

PULSOUT 1,425 : generar un pulso de


salida por el pin P1 de duracin igual a: 425
x 1.18 us = 0.50 mseg.

PULSOUT 1,2118 : generar un pulso de


salida por el pin P1 de duracin igual a: 2118
x 1.18 us = 2.5 mseg.

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 96

Movimiento Micro-controlado
Movimiento
Micro-controlado
El Motor Paso a Paso




Especificaciones Tcnicas

Resistencia x Fase (Ohms): 75
Corriente (mA): 150
Inductancia x Fase (mH): 39
Torque de paso (g-cm): 80
Torque de retencin (g-cm): 600
Espacio de montaje diagonal (in.): 1.73
Rotacin x Paso: 3.6 Grados
Dimetro del eje (in.): 0.197
Largo del eje (in.): 0.43
Lado del Motor (in.): 1.66
Altura del motor (in.): 1.35
WPeso del Motor: 0.55 lbs.

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 96-1
Tambin conocidos como "stepper motor", pueden girar en un ngulo preciso 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, y en dicha posicin puede
permanecer bloqueado (o no), hasta no recibir una nueva orden de giro.

Bsicamente, stos motores estn constituidos normalmente por un rotor sobre el que van aplicados distintos
imanes permanentes y por un cierto nmero de bobinas excitadoras bobinadas en su estator. Los motores de
pasos pueden ser vistos como motores elctricos sin conmutadores. Las bobinas son parte del estator y el
rotor es un imn permanente. Toda la conmutacin (o excitacin de las bobinas) debe ser manejada
externamente por un circuito controlador o driver.

Existen bsicamente 2 tipos de clasificacin para los motores de pasos. Los de reluctancia variable y los de
imn permanente, que a su vez pueden ser: Unipolares, bipolares y multipolares. En este libro, trabajaremos
con motores de paso tipo UNIPOLAR.
Bobina 2 (Verde)
Bobina 1 (Rojo)
COMUN (Negro)
Bobina 3 (Marrn)
Bobina 4 (Blanco)
Figura 10.4: Diagrama de conexin de las bobinas internas de un
motor Unipolar Paso a Paso, PARALLAX #27964. 12-Volt 75 Ohm
"Unipolar Stepper Motor".


Movimiento Micro-controlado
Identificando los cables de las bobinas. Aplicando un voltaje al cable comn y manteniendo
uno de los otros cables a tierra mientras vamos colocando a tierra cada uno de los dems cables
de forma alternada y observando los resultados, tenemos:
Secuencias para manejar motores Paso a Paso Unipolares
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 96-2
1
2
3
4
Seleccionamos un Cable al Azar y lo conectamos a
tierra. En este caso elegimos como punto de refe_
rencia el Cable No. 4. vamos a colocar ahora los
otros tres cables a tierra, uno a uno...

El cable que colocado a


tierra mueva al motor en
el sentido CW, ser el
Cable de la Fase 3.

El cable que colocado a


tierra mueva al motor en
el sentido CCW, ser el
Cable de la Fase 1.

El cable que colocado a


tierra no mueva al motor,
ser el Cable de la Fase
2.

Figura 10.5: Identificando a cada bobina en un motor unipolar


Paso a Paso, PARALLAX #27964. 12-Volt 75 Ohm "Unipolar
Stepper Motor".

En esta secuencia se activa slo una bobina Esta es la secuencia ms utilizada En esta secuencia se activan las bobinas
a la vez. En Algunos Motores esto brinda un y la que generalmente recomienda para realizar una rotacin igual a la mitad
funcionamiento ms suave. Sin embargo, el el fabricante. Con esta secuencia del paso real. Activando primero dos bo_
torque de Paso y Retencin es menor. el motor avanza un paso por vez, binas y luego slo una. Ahora existirn
manteniendo el torque de Paso y ocho (8) movimientos en vez de Cuatro.
de Retencin.

B O B I N A B O B I N A B O B I N A B O B I N A
PASO 4 3 2 1 PASO 4 3 2 1 PASO 4 3 2 1 PASO 4 3 2 1
1 1 0 0 0 1 1 1 0 0 1 1 0 0 0 5 0 0 1 0
2 0 1 0 0 2 0 1 1 0 2 1 1 0 0 6 0 0 1 1
3 0 0 1 0 3 0 0 1 1 3 0 1 0 0 7 0 0 0 1
4 0 0 0 1 4 1 0 0 1 4 0 1 1 0 8 1 0 0 1

Medio Paso Normal Wave Drive

Movimiento Micro-controlado
Partes Requeridas
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 96-3
(1) Un BASIC Stamp 2p
(1) Una plaqueta de Educacin NX1000
(1) Cable de Programacin
(1) Motor Paso a Paso, Parallax No. 27964
(1) Una fuente de alimentacin
(1) Un programa Stamp Editor.
1
2
3
4
Constryalo!
Progrmelo!
Figura 10.6: Esquema de Conexiones Elctricas para un Motor
Paso a Paso, PARALLAX #27964. 12-Volt 75 Ohm "Unipolar
Stepper Motor".


Movimiento Micro-controlado
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 96-4
'{$STAMP BS2p}
'{$PBASIC 2.5}
'Programa: PL10_2R0.bsp
'Rotacin de un motor Paso a Paso con la secuencia: WAVE DRIVE

I VAR NIB ' Variable de uso general


SEC VAR NIB(4) ' Vector de secuencia
VECES VAR BYTE ' No. de veces que se repite
X VAR BYTE ' Variable de uso general

DIRC = %1111 ' Define a P11,P10,P9,P8 Como Salidas


I = 1 ' Valor inicial de la secuencia

SEC(1) = %1000 ' Secuencia de Rotacin No. 01


SEC(2) = %0100 ' Secuencia de Rotacin No. 02
SEC(3) = %0010 ' Secuencia de Rotacin No. 03
SEC(4) = %0001 ' Secuencia de Rotacin No. 04

DO
VECES = 100 ' Repeticiones = 100 veces
GOSUB CCW ' Rotacin en sentido Anti Horario
PAUSE 1000 ' Pausa de 1 segundos

VECES = 100 ' Repeticiones = 100 veces


GOSUB CW ' Rotacin en sentido Horario
PAUSE 1000 ' Pausa de 1 segundo
LOOP

CW:
FOR X=1 TO VECES ' Repite el no. de veces
IF I>4 THEN ' La rotacin en sentido Horario.
I=1
ENDIF
OUTC = SEC(I)
PAUSE 5
I=I+1
NEXT
RETURN

CCW:
FOR X=1 TO VECES ' Repite el no. de veces
IF I<1 THEN ' La rotacin en sentido Anti Horario
I=4
ENDIF
OUTC = SEC(I)
PAUSE 5
I=I-1
NEXT
RETURN

Movimiento Micro-controlado
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 96-5
'{$STAMP BS2p}
'{$PBASIC 2.5}
'Programa: PL10_3R0.bsp
'Rotacin de un motor Paso a Paso con la secuencia: NORMAL

I VAR NIB ' Variable de uso general


SEC VAR NIB(4) ' Vector de secuencia
VECES VAR BYTE ' No. de veces que se repite
X VAR BYTE ' Variable de uso general

DIRC = %1111 ' Define a P11,P10,P9,P8 Como Salidas


I = 1 ' Valor inicial de la secuencia

SEC(1) = %1100 ' Secuencia de Rotacin No. 01


SEC(2) = %0110 ' Secuencia de Rotacin No. 02
SEC(3) = %0011 ' Secuencia de Rotacin No. 03
SEC(4) = %1001 ' Secuencia de Rotacin No. 04

DO
VECES = 100 ' Repeticiones = 100 veces
GOSUB CCW ' Rotacin en sentido Anti Horario
PAUSE 1000 ' Pausa de 1 segundos

VECES = 100 ' Repeticiones = 100 veces


GOSUB CW ' Rotacin en sentido Horario
PAUSE 1000 ' Pausa de 1 segundo
LOOP

CW:
FOR X=1 TO VECES ' Repite el no. de veces
IF I>4 THEN ' La rotacin en sentido Horario.
I=1
ENDIF
OUTC = SEC(I)
PAUSE 5
I=I+1
NEXT
RETURN

CCW:
FOR X=1 TO VECES ' Repite el no. de veces
IF I<1 THEN ' La rotacin en sentido Anti Horario
I=4
ENDIF
OUTC = SEC(I)
PAUSE 5
I=I-1
NEXT
RETURN

Movimiento Micro-controlado
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 96-6
'{$STAMP BS2p}
'{$PBASIC 2.5}
'Programa: PL10_4R0.bsp
'Rotacin de un motor Paso a Paso con la secuencia: MEDIO PASO

I VAR NIB ' Variable de uso general


SEC VAR NIB(8) ' Vector de secuencia
VECES VAR BYTE ' No. de veces que se repite
X VAR BYTE ' Variable de uso general

DIRC = %1111 ' Define a P11,P10,P9,P8 Como Salidas


I = 1 ' Valor inicial de la secuencia

SEC(1) = %1000 ' Secuencia de Rotacin No. 01


SEC(2) = %1100 ' Secuencia de Rotacin No. 02
SEC(3) = %0100 ' Secuencia de Rotacin No. 03
SEC(4) = %0110 ' Secuencia de Rotacin No. 04
SEC(5) = %0010 ' Secuencia de Rotacin No. 05
SEC(6) = %0011 ' Secuencia de Rotacin No. 06
SEC(7) = %0001 ' Secuencia de Rotacin No. 07
SEC(8) = %1001 ' Secuencia de Rotacin No. 08

DO
VECES = 100 ' Repeticiones = 100 veces
GOSUB CCW ' Rotacin en sentido Anti Horario
PAUSE 1000 ' Pausa de 1 segundos

VECES = 100 ' Repeticiones = 100 veces


GOSUB CW ' Rotacin en sentido Horario
PAUSE 1000 ' Pausa de 1 segundo
LOOP

CW:
FOR X=1 TO VECES ' Repite el no. de veces
IF I>8 THEN ' La rotacin en sentido Horario.
I=1
ENDIF
OUTC = SEC(I)
PAUSE 5
I=I+1
NEXT
RETURN

CCW:
FOR X=1 TO VECES ' Repite el no. de veces
IF I<1 THEN ' La rotacin en sentido Anti Horario
I=8
ENDIF
OUTC = SEC(I)
PAUSE 5
I=I-1
NEXT
RETURN




11. Automatizacin Simple
Automatizacin Simple

Automatizacin
Simple
En el Experimento anterior se us un servo motor para demos-
trar cmo un microcontrolador puede manipular y controlar a
un dispositivo mecnico en el mundo real.

El programa hizo que el servo rotara una y otra vez de un extremo a otro. Este
fue un ejemplo de cmo un microcontrolador puede hacer mover un dispositivo.

Sin embargo, en este Experimento el BASICStamp estaba ciego. Todo lo que
hizo el servo fue responder a nuestro cdigo. Recuerde que la verdadera
importancia de un microcontrolador es su habilidad para tomar decisiones
basado en las entradas y entonces manipular el mundo real con su salida.

En este experimento haremos exactamente eso. S, vamos a mover el servo
nuevamente, pero slo si se renen las condiciones de entrada apropiadas.
Usted puede pensar en ste experimento como un equivalente a escala de una
puerta automtica de un supermercado. La puerta est cerrada la mayor parte
del tiempo, hasta que alguien o algo se acerca, entonces la puerta se abre
automticamente. Aparentemente no hay nada que tengamos que hacer para
abrir la puerta; no presionamos ningn botn, slo estar cerca de la puerta es
suficiente para hacerla abrir. Esta es una forma muy bsica de automatizacin.
Algunos de los sensores que son usados para ste tipo de aplicaciones son
bastante sofisticados, y otros son bastante simples. Sin embargo, todos tienen
una cosa en comn, y es que cuando detectan una entrada entregan una seal al
microcontrolador, quien de esa forma puede tomar una decisin, en ste caso
abrir la puerta.

Como sensor de deteccin usaremos un dispositivo llamado fotoresistor. Es
un dispositivo diseado para detectar niveles de luz diferentes. Es un tipo de
sensor ptico.








Automatizacin:
En este experimento el
trmino automatizacin
significa que algo est
siendo hecho sin
intervencin humana. En
nuestro ejemplo (la puerta
automtica del super-
mercado), esto no es
exactamente cierto.
Aunque no presionamos
fsicamente ningn botn,
estamos, con nuestra
presencia, presionando el
botn detector de luz.
Esto sin embargo, parece
ser completamente
automtico, debido a que
no tenemos que pensar en
otra cosa que caminar
hacia la puerta.
En un sentido estricto,
automatizacin es la
habilidad de los
MicroControladores de
hacer que las cosas
sucedan sin interaccin de
nuestra parte
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 98
Automatizacin Simple






www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 99
(1) Un BASIC Stamp 2p
(1) Una plaqueta de Educacin NX1000
(1) Un conector de tres pines
(1) Cable de Programacin
(1) Servo Parallax
(1) Un LED con resistencia 220 Ohm 1/4 Watt
(1) Fotoresistor Cds con resistencia 4.7 KOhm
(1) Un capacitor electroltico de 3000 uf
(1) Una fuente de alimentacin
(1) Un programa Stamp Editor.
Constryalo!
Figura 11.1a. Esquema elctrico de la co_
nexin de un servo motor.

Figura 11.2b. Fotografa del montaje


en la Protoboard.
Automatizacin Simple

Progrmelo!
Este circuito tiene dos tipos de dispositivos de salida, (el servo y el LED) y un tipo de dispositivo de entrada, (el
fotoresistor).







Espacio de programa:
Los MicroControladores pueden tener varios
tipos de memoria que son usadas para llevar a
cabo su tarea. En el caso del BASICStamp 2,
estamos limitados a 2048 bytes de
almacenamiento de memoria (EEPROM). Esta
cantidad de espacio es usada para almacenar
datos y programas. Si usted escribe un
programa que obtiene datos automticamente
en un perodo de tiempo (tal como una estacin
meteorolgica remota), usted querr hacer su
programa tan pequeo y eficiente como sea
posible para permitirle tanto lugar como pueda
para almacenar datos.

EEPROM:
Esta es la sigla de electrically erasable,
programmable, read only memory(memoria
slo de lectura, elctricamente borrable y
programable). Aunque es un desarrollo
sofisticado en la industria de la memoria, es
bastante simple de usar. Podemos grabar
nuestros programas y datos en la EEPROM con
comandos muy simples. Luego, cuando la
alimentacin es quitada, el programa y los datos
son retenidos. En qu se diferencia la EEPROM
de los otros tipos de memoria de estado
slido? en que pueden ser muy fcilmente
borradas (automticamente) y reescritas, una
y otra vez.

'{$STAMP BS2p}
'Programa: PL11_1R0.bsp
'Automatizacin simple

'*** Definicin de Variable de bucle ***


x VAR BYTE

'* Declara Pines como entrada y Salida *


Output 1
Output 5
Input 7

'********* Cerrar la Puerta **********


Cerrar_la_puerta:
For x = 1 To 100
pulsout 1, 850 ' (1 milisegundo)
pause 10
next

'****** Verificar si hay Alguien *******


Ver_si_hay_alguien:
IF In7 = 1 THEN Abrir_la_Puerta
goto Ver_si_hay_alguien

'********** Abrir la Puerta **********


Abrir_la_puerta:
For x = 1 to 100
Out5 = in7
pulsout 1,3000
pause 10
next

'****** Verificar si hay Alguien *******


IF In7 = 0 then Cerrar_la_puerta
goto Abrir_la_puerta
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 100




12. Control Secuencial
Control Secuencial









El BASICStamp es muy bueno para realizar operaciones de control secuencial. Muchos procesos dependen de
la ejecucin ordenada de operaciones. Considere la operacin de maquinado de la Figura 12.1.

Figura 12.1: Secuencia de Perforado Automtico



Control Secuencial
En la actualidad, una gran cantidad de Mquinas y
Herramientas existentes el la industria, utilizan un
MicroControlador para hacer una secuencia autom -
tica de trabajo.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 102
Solenoide
Taladro
Banda
Transportadora
Pieza
Detector de
Profundidad
Control Secuencial








www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 103
Constryalo!
Para ste experimento, usted necesita:

(1) Un BASIC Stamp 2p


(1) Una plaqueta de Educacin NX1000
(1) Cable de Programacin
(3) Tres LED's con resistencia 220 Ohm 1/4 Watt
(1) Una fuente de alimentacin
(1) Un programa Stamp Editor.
(1) Un programa Stamp Plot V3
Para ste experimento, usted necesita:

Figura 12.3. Fotografa del Montaje Figura 12.2. Esquema elctrico para el
en la Protoboard Control Secuencial

Taladro
Banda Solenoide
Control Secuencial



www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 104
Detalles del Proceso Secuencial:
Una cinta transportadora est moviendo piezas a travs de una estacin de perforado. Cuando se
detecta una pieza, la cinta transportadora se detiene. Luego de una breve pausa, el solenoide se
activa para sujetar la pieza; otra pausa corta y el taladro baja hacia la pieza. Un interruptor
de proximidad controla la profundidad del agujero taladrado. Cuando se activa el detector de
profundidad, el comando perforar se detiene y se eleva la posicin del taladro. Luego de darle un
tiempo para que el taladro se retraiga, el solenoide libera la pieza y se activa la cinta transportadora.
La pieza procesada es retirada de ste sector y la cinta transportadora continua movindose hasta
que se detecte otra pieza. Cuando se detecta otra pieza, el proceso secuencia se repite.

Con el acondicionamiento de seal apropiado, el BASIC Stamp puede controlar fcilmente esta
secuencia. Para nuestro ejercicio, necesitar usar su imaginacin para lograr que los LEDs simulen el
comportamiento de los SSRs que controlaran la cinta transportadora, el solenoide y el taladro. Arme
el circuito de la Figura 12.2.

El control secuencial es muy fcil de representar con diagramas de flujo. El tiempo que se necesita
para completar el diagrama de flujo, le ahorrar tiempo en la escritura del programa. Compare el
diagrama de flujo de la Figura 12.4 con la descripcin del proceso anterior.
Hay
Pieza ?
Inicio
No
A
Apagar la Cinta
Encender la Cinta
Pausa de 2 seg.
Encender el
Taladro
No
Esta
Profundo ?
Apagar el Talador
y el Solenoide
Activar el
Solenoide
A
Pausa de 2 seg.
Pausa de 2 seg.
Figura 12.4. Diagrama de flujo para el Control Secuencial del Proceso
Control Secuencial









www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 105
Progrmelo!
La verdadera ventaja de los MicroControladores es que tienen la capacidad de introducir toda la
inteligencia necesaria para realizar un control sofisticado dentro del equipo. Sin embargo, a sus
capacidades tambin se le agrega la cualidad de enviar informacin a una PC. El StampPlot V3
puede usarse efectivamente para monitorear el proceso de maquinado secuencial. El Programa
PL12_1R0.bsp usa sta interfaz. La Figura 12.5 muestra ste proceso secuencial monitoreado por
el StampPlot V3.

'{$STAMP BS2p}
'Programa PL12_1R0.bsp
'ANIMACION GRAFICA DEL UN CONTROL SECUENCIAL CON EL BASIC STAMP.

'************************ Declaracin de Variables **********************************

OFF CON 0 ' Define el estado OFF como 1


ONN CON 1 ' Define el estado ON como 0
X VAR Byte ' Variable X es un Byte

OUTPUT 3 ' Define a P3 como una Salida


OUTPUT 4 ' Define a P4 como una Salida
OUTPUT 5 ' Define a P5 como una Salida

BANDA VAR OUT3 ' P3 Rel de la banda transportadora (LED 15)


SOLENOIDE VAR OUT4 ' P4 Rel del solenoide sujeta piezas (LED 14)
TALADRO VAR OUT5 ' P5 Rel del taladro (LED 13)

'******************* Configurando Stamp Plot V3 Objetos ****************************

INIT:
Pause 2000 ' Esperar por dos (02) segundos.
DEBUG "!NEWP",CR ' Crea una nueva grfica
DEBUG "!TITL Taladro de Prensa",CR ' Coloca nombre al archivo
DEBUG "!POBJ Clear",CR ' Borra a todos los objetos en la grfica
DEBUG "!PPER 0,0",CR ' Define el rea de objetos en la Pantalla

DEBUG "!POBJ oImage.banda=0,100,100,100,C:\TALADRO\banda.wmf,0",CR


DEBUG "!POBJ oImgBut.part=15,50,8,6,C:\TALADRO\part_0.wmf,0,C:\TALADRO\
part_1.wmf,0",CR
DEBUG "!POBJ oImgBut.drill=51,120,6,60,C:\TALADRO\drill_0.wmf,0,C:\TALADRO\
drill_1.wmf,0",CR
DEBUG "!POBJ oImgBut.clamp=55,57,5,10,C:\TALADRO\clamp_0.wmf,0,C:\TALADRO\
clamp_1.wmf,0",CR

Control Secuencial








'***************************** Configurando Objetos ******************************

BANDA = OFF ' Apagar LED de la banda transportadora


SOLENOIDE = OFF ' Apagar LED del solenoide sujeta pieza
TALADRO = OFF ' Apagar LED del taladro

'***************************** Programa Principal ******************************

Inicio:
DEBUG "!POBJ oLabel.MENSAJE=65,80,30,10,< BANDA ENCENDIDA >,15,0,12", CR
FOR X = 1 TO 70
BANDA = ONN ' Enciende la banda transportadora
DEBUG "~PWAV C:\TALADRO\convey.wav",CR ' Sonido de la banda transportadora
DEBUG "!POBJ Part.Move=[(Part.L),+,.5],[Part.T]",CR ' Mueve la Pza. a la
derecha
Pause 250 ' Espera 250 milisegundos
NEXT

Proceso: ' El proceso comienza


BANDA = OFF ' Se detiene la banda transportadora
DEBUG "!POBJ MENSAJE.SET =< BANDA APAGADA >", CR
PAUSE 2000 ' Esperar dos segundo
SOLENOIDE = ONN ' Se coloca ajusta la pieza a su posicin
DEBUG "~IWAV stapler.wav(CR)!POBJ Clamp=1",CR ' Se emite un sonido " Clack..."
DEBUG "!POBJ MENSAJE.SET =< SOLENOIDE ON >", CR
PAUSE 2000 ' Esparados dos segundos para encender
' el Taladro
Bajar_Taladro:
TALADRO = ONN ' Se enciende LED del Taladro
DEBUG "!POBJ MENSAJE.SET =< TALADRO ENCENDIDO >", CR
FOR X = 1 TO 25 ' Comienzo del bucle
DEBUG "!POBJ Drill.Move=,[(drill.T),-,.5]",CR ' El taladro comienza a bajar
DEBUG "~PWAV C:\TALADRO\drill.wav",CR ' Sonido del taladro
Pause 250 ' Esperar 250 milisegundos
NEXT

Detener_Taladro:
TALADRO = OFF ' Apagar el taladro
DEBUG "!POBJ MENSAJE.SET =< TALADRO APAGADO >", CR
PAUSE 2000

Levantar_Taladro:
DEBUG "!POBJ Part=1",CR ' Visualiza la pieza con hueco
DEBUG "!POBJ MENSAJE.SET =< TALADRO SUBIENDO>,", CR
For X = 0 TO 25 ' Comienzo del bucle
DEBUG "!POBJ Drill.Move=,[(drill.T),+,.5]",CR ' El taladro comeinza a subir
Pause 250 ' Espera 250 milisegundos
NEXT

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 106
Control Secuencial




www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 107

Soltar_pieza:
DEBUG "!POBJ MENSAJE.SET =< LIBERANDO PIEZA >", CR
DEBUG "~PWAV stapler.wav(CR)!POBJ Clamp=0",CR ' Se emite un sonido " Clack ..."
SOLENOIDE = OFF ' Se libera la pieza
PAUSE 2000 ' Esperar dos segundos
BANDA = 1 ' Enciende la banda transportadora

FOR X = 0 TO 50 ' La pieza continua hasta


DEBUG "!POBJ Part.Move=[(Part.L),+,.5],[Part.T]", CR ' llegar al final de la
DEBUG "~PWAV C:\TALADRO\convey.wav",CR ' banda transportadora
PAUSE 250 ' Sonido de la banda transp.
NEXT

DEBUG "!POBJ Part=0",CR ' Coloca la pieza en su posicin


DEBUG "!POBJ Part.Move=15,50",CR ' original. Y va a Inicio
GOTO Inicio
Control Secuencial

Animacin Grfica ...
Figura 12.5.
Maquinado secuencial con un MicroControlador
BASIC Stamp. Corresponde al cdigo del pro -
grama PL12_1R0.bsp
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 108




13. Control de Procesos
Control de Procesos


Control de Procesos
El control de procesos continuo involucra el mantenimiento de las condiciones del proceso deseadas.
Calentar o enfriar objetos a cierta temperatura, mantener una presin constante en una tubera de vapor,
o fijar un valor de flujo del material a un recipiente para mantener un nivel constante de lquido, son
ejemplos de control de procesos continuos e industriales. La condicin que se quiere controlar se
denomina "variable de proceso". La temperatura es la variable de proceso que hemos seleccionado en ste
captulo. Por otra parte, los dispositivos de salida industrial son los elementos de control. Motores,
vlvulas, calentadores, bombas y solenoides son ejemplos de dispositivos usados para controlar la energa
que determinan las salidas de los procesos.

La accin de control tomada se basa en la relacin dinmica entre la configuracin del dispositivo de salida
y su efecto sobre el proceso. En general, el control de proceso puede ser clasificado en dos tipos: lazo
abierto y lazo cerrado. El control de lazo cerrado determina la configuracin de los dispositivos de salida,
midiendo y evaluando durante el transcurso del proceso. En el control en lazo abierto, no se realizan
controles automticos para ver si es necesaria alguna accin correctiva.

Un ejemplo simple de control en lazo abierto podra ser enfriar una habitacin una noche de mucho calor.
Sus opciones son usar un ventilador de ventana o un aire acondicionado. El ventilador de ventana es un
dispositivo que puede configurarse a baja, media o alta velocidad al evaluar la situacin de su habitacin.
Esta evaluacin involucra comprender la relacin causa - efecto entre las condiciones de la habitacin y el
ajuste de la velocidad del ventilador. Tambin est involucrado un elemento de prediccin. Una vez que
decide la velocidad que usar, se acostar y dormir toda la noche. De sta forma est configurando un
sistema de control de lazo abierto. Si sus estimaciones fueron correctas, tendr un buen descanso. Caso
contrario, podra levantarse titiritando de fro o sudando de calor. Por otro lado, un aire acondicionado
le permite fijar la temperatura deseada. Un termostato comparar continuamente la temperatura deseada
con la medicin de la temperatura ambiental. Cuando la temperatura de la habitacin sea superior a la
deseada, el aire acondicionado encender su compresor y enfriar la habitacin. Cuando la habitacin se
ha enfriado por debajo de la temperatura deseada el compresor del aire se apagar. A medida que avanza
la noche y la temperatura exterior disminuye, el sistema de lazo cerrado pasar cada vez menos tiempo
encendido que apagado. Este es un ejemplo tpico de control por realimentacin de lazo cerrado,
debido a que la accin se toma en base a la medicin de la temperatura de la habitacin.

Determinar la mejor accin de control para una aplicacin y disear el sistema que provea sta accin es
de lo que trataremos en ste captulo y de eso se trata la ingeniera de procesos. Los MicroControladores
han probado ser una solucin econmica para agregar cierto nivel de sofisticacin a los esquemas de
control ms simples.

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 110
Control de Procesos



Partes
Requeridas




Para este experimento, usted necesitar lo siguiente:





En el presente captulo vamos a construir un Control ON/OFF de temperatura a lazo cerrado simulando la
operacin de un termostato. Se utilizar una pantalla LCD para visualizar la temperatura y el punto de
ajuste Set_Point. El elemento transductor de la temperatura ser un termmetro DS1620 y el elemento
final de control ser una resistencia calefactora de 047 Ohms; energizada a travs de un transistor 2N3904.
El programa, Stamp Plot 3 nos permitir visualizar el estado de la resistencia calefactora, la temperatura
medida en tiempo real y el ajuste de temperatura Set_point.

Constryalo!
(1) BASIC Stamp 2p
(1) Plaqueta de Educacin NX-1000
(3) Pulsadores NO con resistencia 10 KOhm de pullup
(1) Diodo LED color Rojo con resistencia de 220 Ohm
(1) Transistor 2N3904 o equivalente NPN
(1) DS1620 Termmetro digital Dallas Semiconductor
(1) LCD 2x16. Pantalla de cristal lquido
(1) Resistencia 47 Ohm, 1/4 Watt
(1) Resistencias de 470 Ohm, 1/4 Watt
(1) Resistencia de 1 KOhm, 1/4 Watt
(1) Resistencia de 4.7 KOhm, 1/4 Watt
(1) Juego de Cables para conexines
(1) Programa Editor de BASIC Stamp II ver. 1.33 o sup.
(1) Programa Stamp Plot V3

Los Instrumentos de control empleados en las


industrias de procesos tienen su propia termi -
nologa; los trminos empleados definen las
caractersticas propias de la medida, del
control y de las caractersticas estticas y din-
micas de los diversos instrumentos utilizados:

- Indicadores, registradores, controladores,


transductores y vlvulas de control.

La terminologa empleada se ha unificado con


el fin de que los fabricantes, los usuarios y los
organismos o entidades que intervienen direc-
ta o indirectamente en el campo de la instru -
mentacin industrial empleen el mismo len -
guaje. Las definiciones de los trminos
empleados se relacionan con las sugerencias
hechas por la SAMA (Scientific Apparatus Ma -
kers Association) en su norma PMC 20.

Es la diferencia algebraica entre el
valor ledo o transmitido por el ins-
trumento y el valor real de la va -
riable medida. Si el proceso est en
rgimen permanente existe el lla -
mado error esttico.
Un mismo Lenguaje ...
Error
Instrumental
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 111
Control de Procesos





Figura 13.1: Esquema de
conexines para el control
On / Off de temperatura .

La medida de la temperatura constituye una de las mediciones ms comunes y ms importantes que se efectan en los
procesos industriales. Las limitaciones del sistema de medida quedan definidas en cada tipo de aplicacin por
la presicin, por la velocidad de captacin de la temperatura, por la distancia entre el elemento de medida y el aparato
receptor y por el tipo de instrumento indicador, registrador o controlador necesario; es importante sealar que es
esencial una comprensin clara de los distintos mtodos de medida con sus ventajas y desventajas propias para lograr
una seleccin ptima del sistema ms adecuado. Los instrumentos de medida de la temperatura utilizan diversos
fenmenos que son influidos por la temperatura y entre los cuales figuran:

.- Variaciones en volumen o en estado de los cuerpos (Slidos, Lquidos o Gases)


.- Variaciones de resistencia de un conductor (Sondas de Resistencias)
.- Variaciones de resistencia en semiconductores (Sonda de Thermistor)
.- f.e.m. creada en la unin de dos metales distintos (Termopares, Termocuplas)
.- Intensidad de radiacin total emitida por un cuerpo (Pirmetros de radiacin)
.- Variaciones de frecuencia en un cristal oscilador (Termmetros Digitales DS 1620) de Dallas Semiconductor
Medicin de la Temperatura
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 112
+5V
47
C
B
E
Control de Procesos

Figura 13.2: Fotografa de las conexiones del circuito en la plaqueta
de educacin NX-1000, para el control On / Off de
temperatura.
Colocar el Resistor R7
( 47 Ohm ), sobre el
DS1620
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 113
Pulsador D6
LED L15
Pulsador D5
Pulsador D7
Control de Procesos

Antes de entrar a la programacin en PBasic, es necesario plantear un diagrama de flujo del proceso
completo. Luego escribiremos el programa PL13_1R0.bsp. No se preocupe si no entiende el cdigo,
ste es un programa ms extenso que los anteriores, pero muy sencillo de entender. El instructor le
explicar cada componente del circuito y partes de la programacin.
Inicio
Inicializacin LCD
DS1620 y Variables
Primer
Arranque?
Si Escribe en EEprom
Arranque = 1, Set_Point = 35
Leer Set_Point desde EEprom
A
Mostrar en el LCD
Control y Men
Pulsaron
a D6 ?

Pulsaron
a D7 ?

Pulsaron
a D5 ?
TEMP
A_SP
CF
Si
Si
Si
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 114
Control de Procesos

TEMP
Leer_Temperatura
Mostrar en LCD Temperatura
Mostrar en LCD el Men
Resistencia = ON
Resistencia = OFF
Resistencia = OFF
Grfica en Stamp Plot 3, IBIN Resistor,
Temperatura y Set_Point
Temp. >=
Set_Point
A
Si
Si
Si Stamp Plot 3
RES. ENCENDIO a las:
OFF a ON ?
ON a OFF ?
RES.
Si
Stamp Plot 3
RES. APAGO a las:
RES.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 115

Pulsaron
a D5 ?
Control de Procesos

A_SP
Leer Set_Point desde la EEprom
Mostrar el Set_Point
Set_Point = Set_Point + 1
Mostrar nuevo Set_Point
Guardar el Set_Point en EEprom
Set_Point = Set_Point - 1
Mostrar nuevo Set_Point
Guardar el Set_Point en EEprom
A
Leer_Temperatura
Lee la Temperatura del DS1620
RETURN
CF
A
Si
Si
Si
Sin Cdigo

Un Macro, es un conjunto de instrucciones que un programa interpreta y ejecuta para realizar una determinada tarea. El
Stamp Plot 3, puede ejecutar un macro a fin de optimizar el tiempo de ejecucin y disminuir el tamao del programa
almacenado en el BASIC Stamp. Anteriormente y en el captulo No. 12 de Control Secuencial, todas las instrucciones para el
Stamp Plot 3, se almacenaron en la EEprom del BASIC Stamp. Usted seguramente, no se di cuenta quizs, de que en ste
ejercicio, se utiliz totalmente la memoria de programacin del BASIC Stamp. Los macros se pueden utilizar entre otras cosas
para enviar informacin de inicializacin y detalles del grfico al Stamp Plot 3 (Nombre de la grfica, ttulo, nombre de los ejes
y variables, coordenadas, rango de la grfica e informacin inherente a objetos y controles animados.
Macro
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 116

Pulsaron
a D5 ?

Pulsaron
a D7 ?

Pulsaron
a D6 ?
Control de Procesos

Progrmelo!
'{$STAMP BS2p}
'Programa: PL13_1R0.bsp
'Control en lazo cerrado On/Off

'***************** Definicin de pines de Entrada - Salida (I/O) **********************

DQ CON 8 ' DS1620.1 (Datos)


Clock CON 9 ' DS1620.2 (Reloj)
Reset CON 10 ' DS1620.3 (Reset)
OUTPUT 14 ' Define Pin 14 como Salida
Resistor VAR OUT14 ' Salida a Resistencia

'************************* Definicin Constantes LCD *********************************

WakeUp CON %00110000 ' Despierta al LCD


FourBitMode CON %00100000 ' Modo de Datos (4 Bits)
TwoLine5x8Font CON %00101000 ' LCD a 2 lneas, letra tipo 5x8
DisplayOff CON %00001000 ' Apaga el LCD, retiene los datos
DisplayOn CON %00001100 ' Enciende el LCD sin cursor
IncCrsr CON %00000110 ' El cursor se incrementa sin desplaz. al LCD
ClearDisplay CON %00000001 ' Se limpia el LCD
MoveCrsr CON %10000000 ' Mueve el cursor a la posicin (X)

'********************* Definicin de Constantes DS1620 ********************************

RdTmp CON $AA ' Leer temperatura


StartC CON $EE ' Iniciar Conversin de Temp.
WrCfg CON $0C ' Escribe en el Reg. de config.

'************** Definicin de Variables y Constantes generales ************************

One_Time VAR Bit ' Variable controla primer Inicio


PULS_D7 VAR Bit ' Pulsador D7
PULS_D6 VAR Bit ' Pulsador D6
PULS_D5 VAR Bit ' Pulsador D5
Estado_ANT VAR Bit ' Indica el Estado Anterior del Resistor
TempIn VAR Word ' DS1620 Reg. Temperatura
TempC VAR Word ' Temperatura en Centgrados
Set_Point VAR Word ' Punto de Ajuste de Temperatura
On CON 1 ' Indica Energizado
Off CON 0 ' Indica Apagado

D7 CON 11 ' Define al Pulsador D7 conectado en Pin 11


D6 CON 12 ' Define al Pulsador D7 conectado en Pin 12
D5 CON 13 ' Define al Pulsador D7 conectado en Pin 13

'**************************** Inicializacin ******************************************

Initializar:
Pause 500 ' Espera por el LCD
PULS_D7 = 0 ' Estado Inicial del pulsador 1
PULS_D6 = 0 ' Estado Inicial del pulsador 2
PULS_D5 = 0 ' Estado Inicial del pulsador 3

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 117
Control de Procesos

Estado_ANT = Off ' Indica el Estado Anterior del Resistor es = Off


GOSUB InitLCD ' Inicializa el LCD
GOSUB DS1620Init ' Inicializa al DS1620
Read 0,One_Time ' Lee la EEprom 0
If One_Time <> 0 Then Principal ' Si es la primera vez que Inicia el BS2
One_Time = 1 ' Coloca One_Time a 1
Write 0,One_Time ' Escribe en EEprom <- 0
Set_Point = 35 ' Valor Inicial de Set_Point
Write 10,Set_Point ' Escribe en EEpron <- Set_Point

'******************************* Programa Principal ***********************************

Principal:
Read 10, Set_Point ' Lee Variable Set_point
P_Inicial:
LCDOUT 0,ClearDisplay,[" Control On/Off "] ' Visualiza Control On/Off
LCDOUT 0,MoveCrsr+64, ["1_TP 2_SP 3_CF"] ' 1 TP -> Ver Temperatura
PAUSE 500 ' 2 SP -> Ver Set_Point Temp.
Leer_Boton: ' 3 CF -> Configurar
BUTTON D7,0,255,0,PULS_D7,1,Temperatura ' Si se presiona D7 va a ..
BUTTON D6,0,255,0,PULS_D6,1,Ajuste_Sp ' Si se presiona D6 va a ..
BUTTON D5,0,255,0,PULS_D5,1,Configurar ' Si se presiona D5 va a ..
GOTO Leer_Boton

'********************* Rutina de Control de temperatura ******************************


Temperatura:
GOSUB Leer_Temperatura ' Leer la Temperatura
PAUSE 500
LCDOUT 0,ClearDisplay,["TEMPERATURA = ",DEC TempC] ' Muestra la Temperatura
LCDOUT 0,MoveCrsr+64, ["--- 3 Salir ----"] ' Muestra 3 Salir
PAUSE 500
BUTTON D5,0,255,0,PULS_D5,1,Regresar_P_Inicial ' Si se Presiona D5 va a ..

DEBUG IBIN Resistor, CR ' Envia al StampPlot 3 el
DEBUG DEC TempC, "," ,DEC Set_Point, CR ' Estado del resistor, TempC
' y el Set_Point.
If TempC >= Set_point Then Apagar_RES ' Si TempC >= Set_Point
Resistor = On ' Energiza al resistor
IF Estado_ANT = RESISTOR Then Temperatura ' Pregunta si la Resistencia
DEBUG "!POBJ LIST.Add = RES.ENCENDIO a las : ","(RTIME)", CR ' cambi de Off a
Estado_ANT = On ' On. Coloca el estado de
GOTO Temperatura ' la Resistencia en ON.

Apagar_RES: ' Apaga al resistor


Resistor = Off ' Pregunta si la Resistencia cam_
IF Estado_ANT = RESISTOR Then Temperatura ' bi de On a Off. Coloca el es _
DEBUG "!POBJ LIST.Add = RES.APAGO... a las : ","(RTIME)", CR ' tado de la Resis_
Estado_ANT = Off ' Off ' tencia en Off
GOTO Temperatura

Regresar_P_Inicial:
Resistor = Off ' Apaga al resistor
GOTO P_Inicial ' Se regresa a P_Inicial

'*************************** Ajuste del Set_Point *************************************


Ajuste_Sp:
Read 10, Set_Point
LCDOUT 0,ClearDisplay,["Set_Point = ",DEC Set_Point] ' Muestra el Set_Point
LCDOUT 0,MoveCrsr+64, ["1_UP 2_DW 3_EX"] ' 1_UP -> Incrementar_Sp
PAUSE 500 ' 2_DW -> Decrementar_Sp

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 118
Control de Procesos

Modificar_Sp:
BUTTON D7,0,255,0,PULS_D7,1,Incrementar_Sp ' Va a Incrementar_Sp
BUTTON D6,0,255,0,PULS_D6,1,Decrementar_Sp ' Va a Decrementar_Sp
BUTTON D5,0,255,0,PULS_D5,1,P_Inicial ' Va a P_Inicial
GOTO Modificar_Sp

Incrementar_Sp:
Read 10, Set_Point ' Lee el Valor de Set_Point
Set_Point = Set_Point + 1 ' Lo incrementa en 1
Write 10,Set_Point ' Escribe EEpron <- Set_Point
LCDOUT 0,ClearDisplay,["Set_Point = ",DEC Set_Point] ' Muestra Set_Point en LCD
LCDOUT 0,MoveCrsr+64, ["1_UP 2_DW 3_EX"]
Pause 250
GOTO Modificar_Sp

Decrementar_Sp:
Read 10, Set_Point ' Lee el Valor de Set_Point
Set_Point = Set_Point - 1 ' Lo incrementa en 1
Write 10,Set_Point ' Escribe EEpron <- Set_Point
LCDOUT 0,ClearDisplay,["Set_Point = ",DEC Set_Point] ' Muestra el Set_Point en LCD
LCDOUT 0,MoveCrsr+64, ["1_UP 2_DW 3_EX"]
Pause 250
GOTO Modificar_Sp

Configurar: ' Aqu Puede escribir otro ...


' cdigo. Este espacio se dej
' reservado para Usted.
GOTO Principal ' Regresa a Principal

'************************************* Subrutinas *************************************

InitLCD:
Pause 500 ' Pausa para la inicializacin LCD
LCDCMD 0,WakeUp ' Enva comandos para el LCD
Pause 10
LCDCMD 0,WakeUp ' Enva comandos para el LCD
Pause 1
LCDCMD 0,WakeUp ' Enva comandos para el LCD
Pause 1
LCDCMD 0,FourBitMode ' Convierte bus en modo 4 bits
LCDCMD 0,TwoLine5x8Font ' Ajusta LCD a 2 lneas de 5x8
LCDCMD 0,DisplayOff ' Apaga el display
LCDCMD 0,DisplayOn ' Enciende el display sin cursor
LCDCMD 0,IncCrsr ' Ajusta el LCD para auto_incremento
LCDCMD 0,ClearDisplay ' Limpia el display
RETURN

DS1620Init
HIGH Reset ' Esta Subrutina se encarga de
SHIFTOUT DQ, Clock, LSBFirst, [WrCfg, %10] ' programar al DS1620 para que
LOW Reset ' se inicialice y comience a
PAUSE 10 ' convertir temperaturas, en
HIGH Reset ' forma autnoma. Ver Hoja de
SHIFTOUT DQ, Clock, LSBFirst, [StartC] ' especificaciones.
LOW Reset
RETURN

Leer_Temperatura:
HIGH Reset ' Activa al DS1620
SHIFTOUT DQ, Clock, LSBFirst, [RdTmp] ' Enva comando Leer Temp.
SHIFTIN DQ, Clock, LSBPRE, [TempIn\9] ' Lee la Temp en TempIn
LOW Reset ' Desactiva al DS1620
TempIn = TempIn / 2 ' Redondea a grados enteros
TempC = TempIn ' Guarda el Valor en Centgrados
RETURN

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 119
Control de Procesos

STAMP PLOT 3
Con la ayuda del programa Stamp Plot 3, vamos a
construir una animacin grfica para el Control On/Off
de temperatura. Cargue el Macro PL13_1R0 en el
Stamp Plot 3, una pantalla similar a la abajo mostrada
deber aparecer. Ahora presione el pulsador "D7"
del circuito que ha construido con el BASIC Stamp
2p construido y observe como se empieza a controlar.
Figura 13.3: Fotografa de la pantalla del
programa Stamp Plot.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 120
Control de Procesos

'Macro utilizado el el programa Stamp Plot 3, para realizar una animacin del control
'de temperatura ON/OFF. Se utilizara junto al programa PL13_1R0.bsp

INIT: ' Comienzo del Macro

'************************** Configurando la Grfica **********************

!NEWP ' Crea una nueva Grfica


!RSET ' "Reset", coloca la grfica al Valor Inicial
!MENU OFF ' Elimina la Barra del "MENU"
!TBAR OFF ' Elimina la Barra de Tabulacin
!ECHO OFF ' No reenva los datos recibidos
!FLSH ON ' Permite flujo de datos
!TITL PL13_1R0.bsp ' Ttulo de la Grfica

'************************** Define Escala Y Decimales ********************

!SPAN 25,45 ' Fija valor (Mn,Max) del eje Y

'*************************** Define escalas y Leyendas *******************

!RTIM ON ' Coloca escala en eje x como Tiempo Real


!YLBL Temperatura oC ' Nombre del eje Y
!XLBL Tiempo ' Nombre del eje X
!USRS Control On / Off ' Muestra mensaje "Control On / Off
!GRID 10, 20 ' No. de grillas en los ejes (X,Y)
!COLR B15,G3,A9,S0,D12 ' Fija los colores de la grfica y datos

'************************* Tiempo REAL Shif de la Grfica ****************

!SHFT ON ' Desplazamiento de la Grfica a la Izq.

'************************ LEYENDA DE COLORES Y NOMBRES *******************

@TEXT 15a,108a,1,9,Temperatura ' Muestra la etiqueta Temperatura


@TEXT 45a,108a,1,1,Set_Point ' Muestra la etiqueta Set_Point
@TEXT 70a,108a,1,12,Resistencia ' Muestra la etiqueta Resistencia

'*************************** DEFINICION DE BOTONES ***********************

!BUTC 0,*** Cargar MACRO ****,!MACS ' Define el Men que aparecer
!BUTC 1, ,!REFR ' cuando se presiona el botn
!BUTC 2,Inicializar GRAFICA ,!RSET ' derecho del ratn.
!BUTC 3,Conectar Al P/ RS232 ,!CONN ON ' Conectar al BASIC Stamp
!BUTC 4,DesConectar P/ RS232 ,!CONN OFF ' Desconectar al BASIC Stamp
!BUTC 5,Continuar La GRAFICA ,!PLOT ON ' Comenzar a graficar
!BUTC 6,Detener LA GRAFICA ,!PLOT OFF ' Detener la graficacin
!BUTC 7,Imprimir Pantalla ,!PRNT ' Imprimir Grfica
!BUTC 8,Abrir GRAFICA <- HD,!REFR ' Abrir un Archivo
!BUTC 9,Guardar GRAFICA -> HD,!REFR ' Guardar un archivo
!BUTC 10,Visualiz. Barra Herram.,!TBAR ON ' Mostar barra de Herramientas
!BUTC 11,Esconder Barra Herram.,!TBAR OFF ' Esconder barra de Herramientas
!BUTC 12,QUITAR,!NEWP ' Generar una nueva Grfica

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 121
Control de Procesos

'************************ Llama a la Subroutina OBJECTS ******************

!MACR .OBJECTS ' Llama a las Subrutinas

'*********************** CONECTAMOS Y EMPEZAMOS A GRAFICAR ***************

!CONN ON ' Conecta al BASIC Stamp


!PLOT ON ' Comienza a graficar

ENDMAC

'********************************* SUBRUTINAS ****************************

OBJECTS:
!POBJ Clear ' Elimina a todos los Objetos
!PPER 75.7,100 ' Parte la pantalla al 75.7%
!POBJ oBack=0 ' Coloca el fondo negro

'****************** Timer0 = 1 seg, Actualiza los Medidores *************

!POBJ oTimer0.C=!MACR .RTIMER0 ' Reloj de ejecucin de cdigo


!POBJ oTImer0 = 1 ' se habilita cada 1 seg

'******************************* Termmetro **************************


!POBJ oLabel.TEMP=76,100,24,3,Temperatura oC,0,15,8,1
!POBJ oMeter.Meter1=76,97,24,25,0,100,0,100
!POBJ Meter1.C=!IFTH (swSilence),=,1,~PWAV gbell.wav
!POBJ oLabel.Alarm1=76,72,24,3,MIN oC ALARMAS MAX oC,0,15,8,1
!POBJ oText.txtAMin=76,69,7,3,0,12,15,8
!POBJ oText.txtAMax=93,69,7,3,100,12,15,8
!POBJ oImgBut.swSilence=76,66,24,4,comp\switch_0.jpg,1,comp\switch_1.jpg,0
!POBJ swSilence.tip=Silencia la Alarma
!POBJ swSilence.C=~IWAV stapler.wav
!POBJ oButton.butSet1=83.1,69,10,3.4,SET,8
!POBJ butSet1.tip=Introduce los Ajustes de las Alarmas
!POBJ butSet1.C=!POBJ txtMin=(AMIN)(;)
!POBJ txtMax=(AMAX)

'************************* Programacin del Banner ***********************

!POBJ oBanner.Banner=76.,62.,24.,3.7,ROSO Electric Supply ----> Curso sobre


MicroControladores Nivel AVANZADO ---> Programa PL13_1R0.bs2 Control On/Off en tiempo Real
---->,6,7,8,4

'************************* Programacin Caja de Texto ********************


!POBJ oList.LIST=76,58,23.8,54.8,7,
!POBJ LIST.F=Courier New,7,1,1

'**************************** Imprimir Grfica **************************

!POBJ oButton.PrintG=76.,5.,24.,5.,Imprimir,8
!POBJ PrintG.C = !PRNT ' Imprime la Grfica en papel

ENDMAC


RTIMER0: ' Actualiza las variables del indicador
!POBJ meter1=(AINVAL0),0,100,(txtAMin),(txtAMax)
!POBJ Update
ENDMAC

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 122




14. Protocolo I2C. Adquisicin de Datos
Protocolo I2C, Adquisicin de Datos




Protocolo I2C
Adquisicin de Datos
"Data Logging"
En el presente captulo, nos dedicaremos al estudio del protocolo de comunicacin serial I2C, se
utilizar para ello, una memoria serial EEprom modelo 24LC01B y un reloj en tiempo real modelo
DS1307 fabricado por Dallas Semiconductor. En la segunda parte del captulo, desarrollamos una
aplicacin para la adquisicin de datos analgicos, cuyos valores en el tiempo, se digitalizan
utilizando un corvertidor A/D modelo ADC0831 y almacenan en una memoria EEprom serial
24LC01B. El programa permite visualizar en la pantalla de la computadora los datos almacenados
en la memoria EEprom a travs del comando DEBUG . El programa tambin tiene la capacidad de
enviar los datos almacenados en la memoria EEprom directamente a travs del puerto serial al
programa Excel de Microsoft; para de esta forma, observar el comportamiento de la variable
digitalizada en el tiempo, implementando as, una especie de osciloscopio digital con memoria.
El protocolo I2C, es una forma de comunicacin serial sincrnica, la cual, fue desarrollada por Phillips
Semiconductors. Solamente se requieren dos pines de entrada salida para su implementacin deno_
minados SDA (Datos), el cual es bidireccional y SCL (Reloj). Estos pines pueden estar compartidos
entre mltiples dispositivos (I2C) y se encuentran conectados a una tensin de alimentacin posi_
tiva (+5v) a travs de una resistencia de "pull-up". Cuando ambos pines (SDA, SCL) estn en alto, se
considera que el bus de comunicaciones est libre. Se puede transferir datos en el bus I2C a una
velocidad de 100 Kbits/seg. El No. mximo de dispositivos que se pueden conectar al bus depender
de la capacitancia interna de cada componente, la suma de la capacitancia interna de todos los
componentes conectados al bus I2C, no deber sobrepasar a 400pF.

Protocolo I2C

Es un equipo que se emplea para registrar y almacenar los valores de


variables en el tiempo en una memoria interna generalmente EEprom.
Estos datos pueden ser ledos y recuperados para realizar un anlisis
posterior. Los "Data Logger" son muy utilizados en la industria para
realizar infinidad de estudios relacionados al proceso productivo y de
sta forma recolectar datos, que debido a la ubicacin u otros factores
puede ser impractico recolectar en Tiempo Real.
Data Logger?
01011101 01101010 01010101 01010010 10101010 11111100 10101010 11001001
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 124
Protocolo I2C, Adquisicin de Datos
S P
S L
T
A
R
T
Identificacin A
C
K
Direccin A
C
K
Datos
A
C
K
S
T
O
P
I
B
R
E
a
6
a
5
a
4
a
3
a
2
a
1
a
0
rw a
6
a
5
a
4
a
3
a
2
a
1
a
0
a
7
d
6
d
5
d
4
d
3
d
2
d
1
d
0
d
7
S = "START" Condicin de Inicio
P = "STOP" Condicin de Parada
a = Identificacin del dispositivo y/o bits de direcciones. (rw) lectura o escritura
d = bits de datos ( 8 Bits)
ACK = "ACKNOWLEDGE" Seal de Reconocimiento
Transferencia de Bits en el protocolo I2C

Figura No. 14.1.


Formato de transmisin
del protocolo I2C.
INICIO:

PARADA:

INICIO: Una transicin de "alto" a "bajo" de la lnea SDA mientras la lnea SCL est en "alto" indica
una condicin de Inicio.

PARADA: Una transicin de "bajo" a "alto"de la lnea SDA mientras la lnea SCL est en "alto" indica
una condicin de Parada.

Las condiciones de Inicio y Parada siempre son generadas por el BASIC Stamp. El bus I2C se consi_
dera ocupado despus de una condicin de INICIO y se considera que esta libre de nuevo un tiempo
despus de la condicin de PARADA si los estados en ambos Pines (SDA y SCL) son altos. El BASIC
Stamp se encargar de generar todas las seales requeridas para correcto manejo del protocolo I2C,
usted deber slo asegurarse de conocer la Identificacin del Dispositivo y la Direccin del Registro
que desea accesar, para una lectura o escritura de los datos.

Es un conjunto de instrucciones en (VBA) Visual Basic que


permiten la ejecucin de tareas predeterminadas. El Macro
StampDAQ, fue creado por Parallax, Inc y permite capturar
datos enviados por el BASIC Stamp a travs del puerto se_
rial del computador. Los datos capturados, se analizan y
colocan en celdas respectivas en una hoja de Excel para
su respectivo anlisis. Los datos desde el BASIC Stamp
deben ser enviados en forma de "String" segn las directi_
vas del Macro. Es importante consultar la hoja de especi_
ficaciones del StampDAQ, las cuales, se encuentran en el
Apndice "E".
ficio de sta aplicacin.
Macro en Excel
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 125
Protocolo I2C, Adquisicin de Datos
BS2p
Valor del Pin 0 or 8
Arreglo de los
Pines de I/O
Cuando el Pin es 0: Cuando el Pin es 8:
0: Pin de Datos (SDA) 8: Pin de Datos (SDA)
1: Pin de Reloj (SCL) 9: Pin de Reloj (SCL)
Velocidad de
Transmisin
Aproximadamente 81 kbits/sec
Notas
Ambos pines SDA y SCL deben tener resistencias de 4.7 K pull-up
El comando I2COUT slo permite un dispositivo maestro.
El BASIC Stamp no puede trabajar como un dispositivo esclavo.
Conexines entre el BS2p y un Dispositivo I2C.
Figura No. 14.2.
Conexiones entre el BS2p
y un dispositivo I2C.
Dos Instrucciones Completas
El BS2p, tiene implementos dos comandos para el manejo del protocolo I2C. Estos son:
I2CIN : Recibe datos desde dispositivos con protocolo I2C.
I2COUT: Enva datos a dispositivos con protocolo I2C.

I2CIN :
I2COUT:
I2CIN Pin, ID, Direccin{\Direccin baja}, [Dato de Entrada]
I2COUT Pin, ID, Direccin{\Direccin baja}, [Dato de Salida]

Pin:
ID:
Direccin:
Direccin
Baja:
Dato de
Entrada:
Dato de
Salida:
Es una variable, constante o expresin (0 .. 255) que especifica la direccin del registro a
leer o escribir del dispositivo I2C.
Es una variable, constante o expresin (0 8) que especifica cual pin del BS2p se utilizar para
comunicarse con el dispositivo I2C. Los dispositivos I2C requieren dos pines para comunicarse,
cuando usted especifica el Pin esta definiendo el primer pin de conexin (SDA) y automticamente
el BS2p le asigna al pin contiguo (Pin +1) la conexin para el (SCL).
Es una variable, constante o expresin (0 .. 255) que especifica la Identificacin del dispositivo I2C
esclavo que se conectar al BS2p.
Es una variable, constante o expresin (0 .. 255) que especifica la direccin ms baja o
menor del registro a leer o escribir del dispositivo I2C, es opcional y no todos los dispo_
sitivos I2C la requieren.
Es una lista de variables y modificadores que le indican al comando I2CIN que hacer con
los datos de entrada. I2CIN puede almacenar los datos en una variable o en un arreglo
interpretando el texto numrico como valor (decimal, binario o Hexadecimal) y almacenar
el valor correspondiente en una variable.
Es una lista de variables, constantes, expresiones y formatos que le indican al comando
I2COUT que hacer con los datos de salida. I2COUT puede transmitir "bytes" individuales
o repeticiones de "bytes", convertir valores a decimal, hexadecimal, binario y texto o
transmitir arreglos de variables.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 126
Protocolo I2C, Adquisicin de Datos
Modificador
del Formato
Tipo de Nmero Caracteres nmericos aceptados Notas
DEC{1..5}
SDEC{1..5}
HEX{1..4}
SHEX{1..4}
IHEX{1..4}
ISHEX{1..4}
BIN{1..16}
SBIN{1..16}
IBIN{1..16}
ISBIN{1..16}


Modificadores Especiales Accin
STR Arreglo \L {\E}
Introduce un "string" de caracteres de largo L en un arreglo.
E causa la terminacin de la lectura, los bytes sucesivos
sern llenados con ceros.
WAITSTR Arreglo {\L}
Espera por una secuencia de bytes iguales a los contenidos en
el arreglo. Se puede limitar el largo con el parmetro L.
Si no se especifica la longitud L se leern bytes hasta encon_
trarse con el primer byte = 0.
SKIP NmeroIgnora Ignora un "Nmero" de caracteres o bytes.
Figura No. 14.3.
Modificadores de formato para el
comando:
.- I2CIN notas (1,2,3,4 )
.- I2COUT notas ( 5,6)

Mayor informacin sobre los mo_


dificadores, puede encontarla en
la pgina No. 139 del texto "BA _
SIC STAMP MANUAL REV.2" de
Parallax, Inc.
I2CIN:

I2COUT:

Hexadecimal con signo


Limitado entre 1 y 4 digitos
Decimal
Limitado entre 1 y 5 digitos
Hexadecimal
Limitado entre 1 y 4 digitos
Decimal con signo
Limitado entre 1 y 5 digitos
Hexadecimal con prefijo y signo.
Limitado entre 1 y 4 digitos
Hexadecimal con prefijo
Limitado entre 1 y 4 digitos
Binario con signo
Limitado entre 1 y 16 Bits
Binario con prefijo
Limitado entre 1 y 16 Bits
Binario
Limitado entre 1 y 16 Bits
Binario con prefijo y signo
Limitado entre 1 y 16 Bits
-, Del No. 0 al No. 9
Del No. 0 al No. 9
-$, Del No. 0 al No. 9
De la letra "A" a la letra "F"
Del No. 0 al No. 9
De la letra "A" a la letra "F"
-, Del No. 0 al No. 9
De la letra "A" a la letra "F"
$, Del No. 0 al No. 9
De la letra "A" a la letra "F"
%, 0,1
0,1
-, 0,1
-,%, 0,1
1,5
1,2,5,6
1,3,5
1,2,3,5,6
1,3,4,5
1,2,3,4,5,6
1,5
1,2,5,6
1,4,5
1,2,4,5,6
I2CIN:
1 Todas las conversiones numricas continuarn aceptando nuevos datos hasta que se reciban el No. especificado de datos o
un carcter no numrico. Ejemplo: Tres (3) digitos para el modificador DEC3.
2 Para que pueda ser reconocido como parte del nmero, el signo (-) debe estar inmediatamente despus de un carcter
numrico. Todos los caracteres incluyendo los espacios entre el signo (-) y el nmero, sern ignorados.
3 Los modificadores hexadecimales no son sensitivos a las maysculas; "a" a la "f es los mismo que "A" a la "F".
4 Indica que se ignorarn todos los caracteres, incluso los nmeros vlidos hasta que no se reciban los prefijos asociados ($
para el hexadecimal y % para el binario). Este modificador puede diferenciar entre texto y un valor hexadecimal. Ejemplo:
ABC podra ser interpretado por el modificador HEX como un nmero, pero el modificador IHEX lo ignorar a menos que se
escriba como $ABC. De igual manera, un modificador binario puede distinguir el nmero decimal 10 desde un nmero binario
%10. Todo prefijo antes de un carcter no numrico ser ignorado y cualquier carcter (incluyendo espacio) entre un prefijo
y un nmero; causa que el prefijo sea ignorado. Indica que el signo (-) siempre va antes de los prefijos. Ejemplo: -$1B45.
I2COUT:
5 Modificadores con formato fijo, como por ejemplo DEC4, llenar el nmero con ceros a la izquierda si es necesario; DEC4 65,
enviar el 0065. Si un nmero es mayor que el nmero de digitos especificado en el modificador, el nmero se truncar a la
posicin mxima especificada en el modificador. Ejemplo: DEC4 56422 enviar 6422.
6 Los modificadores con signo pueden trabajar con las reglas de complemento a dos.
Figura No. 14.4.
Modificadores especiales de
formato para el comando: I2CIN
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 127
Protocolo I2C, Adquisicin de Datos

Vss
P9
Vdd
4.7 k
P8
24LC01B
(DIP)
4.7 k
SDA
SCL
1
2
3
4
8
7
6
5
Modificadores Especiales Accin
?
Muestra en Pantalla "variable = x' + CR; donde x es un nmero.
El formato por defecto es decimal pero se puede combinar con
otros modificadores de formato. (Ej: BIN ? x para mostar
"x = Nmero_binario.
ASC ?
Muestra "variable = 'x'" + CR; donde x es un caracter ASCII.
STR Arreglo {\L}
Enva un "string" de caracteres desde un arreglo. El argumento
opcional L puede ser utilizado para limitar la cantidad de ca_
racteres, de otra manera, se seguirn enviando caracteres
hasta encontrar el primer byte = 0.
REP Byte \L Enva un "string" que es la repeticin L veces del Byte.
Constryalo!
(1) BASIC Stamp 2p (BS2p)
(1) Plaqueta de Educacin NX-1000
(1) 24LC01B, Memoria I2C
(2) Resistencia 4.7 KOhm, 1/4 Watt
(1) Programa Editor de BASIC Stamp II ver. 1.33 o sup.

Figura No. 14.3.


Esquema de Conexiones entre el BS2p
y una memoria I2C modelo 24LC01B .
Para ste experimento usted
necesitar lo siguiente:
Figura No. 14.5.
Modificadores especiales de
formato para el comando: I2COUT
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 128
Protocolo I2C, Adquisicin de Datos
'Programa: PL14_1R0.bsp
'Protocolo I2C. Lectura y Escritura en una memoria 24LC01B I2C

I2Cpin CON 8 ' Define el Pin No. 8 del BS2p como Pin I2C
Rd2401 CON $A1 ' Identificacin de la Memoria EEprom para Lectura
Wr2401 CON $A0 ' Identificacin de la Memoria EEprom para Escritura
I VAR Byte ' Variable para el bucle
DATO VAR Byte ' Variable donde se almacena la lectura desde la EEprom

Comienzo:

DEBUG CLS ' Limpia la Pantalla


DEBUG "Escribiendo en EEprom", CR ' Muestra mensaje "Escribiendo en EEprom"
For I = 0 To 15 ' Bucle de 1 a 15
I2COUT I2Cpin,Wr2401,I,[I] ' Guarda en la Memoria 24LC01B los valores del 0 al 15
PAUSE 5 ' desde la posicin cero de la EEprom hasta la 15
Next ' Retardo de 15 mseg. especificado por el fabricante.

DEBUG "Listo .....", CR
PAUSE 1000
DEBUG "Leyendo en EEprom", CR
PAUSE 1000

For I = 0 To 15 ' Bucle de 1 a 15


I2CIN I2Cpin,Rd2401,I,[DATO] ' Lee la Memoria 24LC01B desde la posicin 0 a la 15
DEBUG "EEprom Direccin = ",DEC2 I, " Valor = ", DEC DATO, CR
Next

Loop:
GOTO Loop

Progrmelo!

El Bus I2C, permite la comunicacin entre dispositivos fabricados con diferentes tecnologas, los cuales, pueden utilizar o no diferentes tensiones
de alimentacin. Para dispositivos con niveles de entrada fijos, operando sobre una tensin de alimentacin de 5V (10%), se han definido los
siguientes niveles: ViL mx = 1.5 Volt (mxima tensin "baja" de entrada), ViH mn = 3.0 Volt (mnima tensin "alta" de entrada). Los disposi_
tivos que operan sobre una tensin de alimentacin fija diferente a 5 Volts, tambin deben tener stos niveles niveles de entrada de 1.5 Volt y
3.0 Volt para ViL y ViH respectivamente. Para dispositivos que operan sobre un amplio margen de tensiones de alimentacin (por ejemplo:
CMOS), se han definido los siguientes niveles: ViL mx = 0.3 Vdd (mxima tensin "baja"de entrada), ViH mn = 0.7 Vdd (mnima tensin "alta"
de entrada). Para ambos grupos de dispositivos, se ha definido el mximo valor "bajo" de salida, VOLmx = 0.4 V (mx. tensin de salida
"baja") con una corriente de carga de 3 mili-amper. La mxima corriente de entrada de nivel bajo a VOL mx del terminal SDA y el SCL de un
dispositivo I2C es de -10 micro-amper, incluyendo la corriente de fugas de una posible etapa de salida. La mxima corriente de entrada de nivel
alto a 0.9 Vdd de los terminales SDA y SCL de un dispositivo I2C es de 10 micro-amper, incluyendo la corriente de fugas de una posible
etapa de salida. La capacidad mxima de los terminales SDA y SCL de un dispositivo I2C es de 10 pF. Cada dispositivo con niveles de
entrada fijos puede tener su propia fuente de alimentacin de 5 Volt (10%).
Caractersticas Elctricas de un Bus I2C ...
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 129
Protocolo I2C, Adquisicin de Datos

R/W A
START READ/WRITE
Direccin del esclavo
A = ACK Bit, Bit de reconocimiento
2
4
L
C
0
1
B
A0
A1
A2
VSS
1
2
3
4
8
7
6
5
VCC
WP
SCL
SDA
1 0 1 0
A
2
A
1
A
0
R/W X X X X
A
11
A
10
A
9
A
7
A
0
A
8

Byte de Control Byte de direccin No. 1 Byte de direccin No. 0
Cdigo de
4 Bits
Direccin
del esclavo
X = No importa o Ceros(0).
Identificacin de un Dispositivo I2C:
En un Bus I2C, los dispositivos se identifican a
travs de una direccin nica que forma parte de
un byte de control. El byte de control est con_
formado por un cdigo fijo de cuatro bits estable_
cido por el fabricante. Para la memoria 24LC01B
el cdigo es 1010. Los siguientes tres (03) bits del
byte de control corresponden a los bits de selec_
cin del dispositivo (A2,A1,A0), stos bits son
usados por el dispositivo maestro para seleccionar
hasta ocho combinaciones de dispositivos escla_
vos. El ltimo bit del byte de control define la ope_
racin que se desea realizar. Cuando se coloca
en uno (1) se selecciona la operacin de lectura,
cuando se coloca en cero (0) se est seleccio _
nando una operacin de escritura. Los prximos
dos bytes recibidos indican la direccin del primer
byte de datos. Como slamente se utilizan las
direcciones desde (A11 .. A0), los primeros cuatro
bits del byte de direcciones siempre sern ceros.
Figura No. 14.4.
Descripcin del byte de control
Operacin Cdigo Dispositivo R/W
Leer
Escribir
1010
1010
A2,A1,A0
1
0
A2,A1,A0
Figura No. 14.5.
Pines de Conexin para la
memoria I2C, 24LC01B
1 1 0 0 A2 A1 A0
Figura No. 14.6.
Secuencia de bytes en el
protocolo I2C.
R/W: 0 Escribir
1 Leer
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 130
Protocolo I2C, Adquisicin de Datos
X1
X2
V
BAT
GND
V
CC
SQW/OUT
SCL
l
2
3
4
8
7
6
5 SDA
2
A
1
A
0
R/W X X X X
A
11
A
10
A
9
A
7
A
0
A
8

Byte de Control Byte de direccin No. 1 Byte de direccin No. 0
Cdigo de
4 Bits
Direccin
del esclavo
X = No importa o Ceros(0).
Un Reloj en Tiempo Real con comunicacin I2C.
Otro dispositivo muy utilizado junto a los MicroControladores es el
reloj de tiempo real, el cual, es capaz de mantener en forma au_
tnoma un conteo completo de Hora-Fecha, incluso con compen_
zacin de ao bisiesto. El reloj de tiempo real modelo DS1307; es
fabricado por Dallas Semiconductor y tiene la capacidad de comu_
cacin a travs del protocolo I2C. En la figura 14.7 se muestra la
distribucin de los pines de conexin. Los Pines 3,4 y 8 se utilizan
para su alimentacin de tensin, los pines 1 y 2 son utilizados para la conexin de un cristal de
referencia y los pines 5 y 6 son utilizados para la comunicacin I2C respectivamente. La identifica_
cin del dispositivo viene definida por el fabricante. Para realizar una escritura en los registros del
DS1307 se debe enviar un byte de control con el valor $D0, para realizar una lectura se debe enviar
el valor $D1. En las figura 14.8 se muestra la secuencia de bytes para realizar una escritura y una
lectura en los registros internos del DS1307.
Figura No. 14.7.
Reloj en Tiempo
Real. DS1307.
Figura No. 14.8. Secuencia de bytes para Escribir/Leer en los registros internos del reloj de tiempo real DS1307.
A
R/W: 0 Escribir
1 Leer
1 1 1 0
Constryalo!
(1) BASIC Stamp 2p
(1) Plaqueta de Educacin NX-1000
(1) DS1307, Reloj en Tiempo Real
(1) Cristal 32.768 KHz.
(3) Resistencia 4.7 KOhm, 1/4 Watt
(3) Pulsadores NO con resistencia 10 KOhm de pullup
(1) LCD 2x16. Pantalla de cristal lquido
Para ste experimento usted
necesitar lo siguiente:
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 131
Protocolo I2C, Adquisicin de Datos





Figura No. 14.8. Esquema de conexiones para implementar un reloj en tiempo real con el DS1307.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 132
Protocolo I2C, Adquisicin de Datos

Comando RUN
Los registros internos del reloj en tiempo real DS1307 se encuentran codificados en formato BCD
(Binario Codificado en Decimal). En total el DS1307 posee ocho registros con direcciones 00h a la
07h, de las cuales, las primeras siete se utilizan para almacenar la informacin acerca del reloj -
calendario; la ltima 07h se utiliza como registro de control. La figura 14.9, muestra la distribucin de
los registros internos del DS1307. Para mayor informacin sobre el DS1307, se deber consultar la
hoja tcnica del fabricante, la cual, se encuentra en el CD entregado a usted con el manual del curso.
Figura No. 14.9.
Distribucin de los registros
internos del DS1307.
Antes de entrar a la programacin en PBasic, es necesario plantear un diagrama de flujo del proceso
completo. Luego escribiremos el programa PL14_3R0.bsp. No se preocupe si no entiende el cdigo,
ste es un programa ms extenso que los anteriores, pero muy sencillo de entender. El instructor le
explicar cada componente del circuito y partes de la programacin.

Un comando RUN ejecuta a diferen_


tes programas localizados en cual_
quiera de los ocho Bloques de pro_
gramacin en un BS2p. El comando
se escribe: RUN (argumento), donde
el argumento puede ser una varia_
ble , constante o expresin entre ( 0
y 7). El comando RUN es similar al
comando GOTO. No se puede retor_
nar desde un comando RUN.

Hasta ste momento usted slo ha_


ba trabajado con el Bloque No. 0,
pero ahora trabajaremos con el blo_
que No. 1 tambin.
El BS2p, posee un total de 16KBytes de memoria para almacenar
los cdigos del programa. Esta memoria est organizada en
bloque de 2KBytes cada uno. Hasta un mximo de ocho (8)
bloques de programacin pueden ser llenados con cdigos de
programa. Cuando el BS2p se inicializa por primera vez, o
cuando se hace un "reset", el programa en el bloque cero (0) es
el nico que se ejecuta. Sin embargo, si usted incluye el comando
RUN x, en el bloque cero, donde x toma cualquier valor entre
uno (1) y siete (7), entonces podr ejecutar cualquier programa
en cualquier bloque de programacin. Los pines de entrada y
salida retienen el estado actual al momento de ejecutar un
comando RUN. Igualmente, todas las variables que se almace_
naron en la memoria "Scratch Pad RAM" retienen su valor, las
variable que se almacenaron simplemente en la memoria RAM se
perdern. Consulte los comandos PUT y GET para que aprenda a
trabajar con la memoria "Scratch Pad RAM".
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 133
Protocolo I2C, Adquisicin de Datos






Figura No. 14.10.
Diagrama de flujo para programar
y visualizar la fecha y hora en una
pantalla LCD, utilizando un reloj
de tiempo real DS1307.
INICIO
Inicializar Variables y Constantes
InitLCD
InitDS1307
Get_DateTime
Mostrar en LCD la Hora -> hh:mm:ss
Mostar el LCD la Fecha -> dd/mm/aa
Pausa de 500
mili-segundos
Presionaron
a D5 ?
Si
Si
Pausa de 500
mili-segundos
B
Regresar
AJUSTAR
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 134
Presionaron
a D6 ?
Protocolo I2C, Adquisicin de Datos




AJUSTAR
Get_DateTime
Convierte Valores del Arreglo
DATA_REG(I) de BCD a Decimal
I = 5 ? A
Mostrar en LCD cada variable
almacenada en HTemp
Incrementar HTemp
Decrementar HTemp
Almacenar en DATA_REG(I)
los valores de HTemp
I = I + 1
Si
Si
Si
Si
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 135
Presionaron
a D5 ?
Presionaron
a D7 ?
Presionaron
a D6 ?
Protocolo I2C, Adquisicin de Datos

A
Convierte Valores del Arreglo
DATA_REG(I) de Decimal a BCD
SET_DateTime
B
InitLCD
Inicializa la Pantalla LCD
RETURN
RETURN
InitDS1307
Inicializa el DS1307
Get_DateTime
Escribe en los registros del
DS1307 con DATA_REG(I)
RETURN
RETURN
Lee los registros del DS1307
y los coloca en DATA_REG(I)
Set_DateTime Regresar
RUN 0
FIN
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 136
Protocolo I2C, Adquisicin de Datos
Progrmelo!
'{$STAMP BS2p}
'Programa: PL14_2R0.bsp
'Programa para Configurar al DS1307 Reloj en Tiempo Real

'************ Definicin de Variables y Constantes Para el DS1307 *********************

I2Cpin CON 8 ' DS1307.5 (SDA Pin) DS1307.6 (SCL Pin por defecto)
AddrReg CON 0 ' Direccin del primer registro DS1307 ( Es Fija = 0)
CtrReg CON 7 ' Direccin del registro de control del DS1307
Wr1307 CON %11010000 ' Comando para escribir en el DS1307
Rd1307 CON %11010001 ' Comando para leer en el DS1307

Temp VAR BYTE ' Variable utilizada para construir comandos


HTemp VAR BYTE ' Variable Temporar propsito general
DATA_REG VAR BYTE(7) ' Arreglo (0>Ao,1>Mes,2>Da,3>Hor,4>Min,5>Seg
I VAR BYTE ' Variable para el Bucle For - Next
Text VAR BYTE(3) ' Arreglo para mostrarlo en el LCD

SecReg CON 0 ' Registro de Segundos No. 0


MinReg CON 1 ' Registro de Minutos No. 1
HrsReg CON 2 ' Registro de Horas No. 2
DateReg CON 4 ' Registro de Da No. 4
MonReg CON 5 ' Registro de Mes No. 5
YrReg CON 6 ' Registro de Ao No. 6

'************** Definicin de Variables y Constantes generales ************************

PULS_D7 VAR Byte ' Pulsador D7


PULS_D6 VAR Byte ' Pulsador D6
PULS_D5 VAR Byte ' Pulsador D5

D7 CON 11 ' D7 estar conectado al Pin P11


D6 CON 12 ' D6 estar conectado al Pin P12
D5 CON 13 ' D5 estar conectado al Pin P13

'************************* Definicin Constantes LCD *********************************

WakeUp CON %00110000 ' Despierta al LCD


FourBitMode CON %00100000 ' Modo de Datos (4 Bits)
TwoLine5x8Font CON %00101000 ' LCD a 2 lneas, letra tipo 5x8
DisplayOff CON %00001000 ' Apaga el LCD, retiene los datos
DisplayOn CON %00001100 ' Enciende el LCD sin cursor
IncCrsr CON %00000110 ' El cursor se incrementa sin desplaz. al LCD
ClearDisplay CON %00000001 ' Se limpia el LCD
MoveCrsr CON %10000000 ' Mueve el cursor

'**************************** Programa Principal *************************************

Initializar:
Pause 500 ' Espera por el LCD
PULS_D7 = 0 ' Estado Inicial del D7
PULS_D6 = 0 ' Estado Inicial del D6
PULS_D5 = 0 ' Estado Inicial del D5
GOSUB InitLCD ' Inicializa el LCD
GOSUB InitDS1307 ' Inicializa el DS1307

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 137
Protocolo I2C, Adquisicin de Datos

Principal:

Loop:
GOSUB GET_DateTime ' Lee los valores del DS1307
LCDCMD 0,ClearDisplay ' Limpia el Display
LCDOUT 0,0,[DEC DATA_REG.LOWNIB(7)] ' Visualiza h
LCDOUT 0,0,[DEC DATA_REG.LOWNIB(6),":"] ' Visualiza hh:
LCDOUT 0,0,[DEC DATA_REG.LOWNIB(9)] ' Visualiza hh:m
LCDOUT 0,0,[DEC DATA_REG.LOWNIB(8),":"] ' Visualiza hh:mm:
LCDOUT 0,0,[DEC DATA_REG.LOWNIB(11)] ' Visualiza hh:mm:s
LCDOUT 0,0,[DEC DATA_REG.LOWNIB(10)," 2_RET"] ' Visualiza hh:mm:ss 2_RET
LCDCMD 0,MoveCrsr+64 ' Mueve el cursor a la lnea 2 del LCD
LCDOUT 0,0,[DEC DATA_REG.LOWNIB(5)] ' Visualiza d
LCDOUT 0,0,[DEC DATA_REG.LOWNIB(4), "/"] ' Visualiza dd/
LCDOUT 0,0,[DEC DATA_REG.LOWNIB(3)] ' Visualiza dd/m
LCDOUT 0,0,[DEC DATA_REG.LOWNIB(2), "/"] ' Visualiza dd/mm/
LCDOUT 0,0,[DEC DATA_REG.LOWNIB(1)] ' Visualiza dd/mm/a
LCDOUT 0,0,[DEC DATA_REG.LOWNIB(0)," 3_SET"] ' Visualiza dd/mm/aa 3_SET
Pause 500
BUTTON D6,0,255,0,PULS_D6,1,REGRESAR ' Si Presionan a D6 -> Va al Programa 1
BUTTON D5,0,255,0,PULS_D5,1,AJUSTAR ' Si Presionan a D5 -> Va a Ajustar Reloj
GOTO Loop

REGRESAR: ' Ejecuta el Programa 0 PL14_1R0.bsp


RUN 0

AJUSTAR:
GOSUB GET_DateTime ' Lee los valores del DS1307
For I = 0 To 5 ' Del DS1307 que estn en BCD y los
DATA_REG(I) = (DATA_REG(I)/16)*10+DATA_REG.LOWNIB(2*I)
Next ' Convierte Decimal para Mostrarlos
' en la Pantalla LCD.
For I=0 to 5 ' Bucle de Lectura
HTemp = DATA_REG(I) ' Pone Year en la Var. Temporal
BRANCH I,[A,M,D,H,MM,S] ' Salto Condicional Dependiendo de I

A: TEXT(0) = "A" ' Variable para visualizar A#O
TEXT(1) = "#"
TEXT(2) = "O"
GOTO Display
M: TEXT(0) = "M" ' Variable para visualizar MES
TEXT(1) = "E"
TEXT(2) = "S"
GOTO Display
D: TEXT(0) = "D" ' Variable para visualizar DIA
TEXT(1) = "I"
TEXT(2) = "A"
GOTO Display
H: TEXT(0) = "H" ' Variable para visualizar HRS
TEXT(1) = "R"
TEXT(2) = "S"
GOTO Display
MM: TEXT(0) = "M" ' Variable para visualizar MIN
TEXT(1) = "I"
TEXT(2) = "N"
GOTO Display
S: TEXT(0) = "S" ' Variable para visualizar SEG
TEXT(1) = "E"
TEXT(2) = "G"


www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 138
Protocolo I2C, Adquisicin de Datos

Display:
LCDOUT 0,ClearDisplay,[STR TEXT\3," = ",DEC2 HTemp] ' Visualiza el Ao en LCD
LCDOUT 0,MoveCrsr+64, ["1_UP 2_DW 3_EN"] ' 1_UP -> Incrementa Valor
Pause 500 ' 2_DW -> Decrementa Valor
LOOKUP I,[99,12,31,23,59,59], Temp ' 3_EN -> Aceptar valor

Modificar:
BUTTON D7,0,255,0,PULS_D7,1,Incrementar ' Si pulsaron a D7 -> Incrementa Temp
BUTTON D6,0,255,0,PULS_D6,1,Decrementar ' Si pulsaron a D6 -> Decrementa Temp
BUTTON D5,0,255,0,PULS_D5,1,Continuar ' Si pulsaron a D5 -> Contina
Pause 100
GOTO Modificar

Incrementar:
IF I <> 2 THEN NO_EJECUTAR ' Si estamos seleccionando los Das
LOOKUP DATA_REG(1),[0,31,28,31,30,31,30,31,31,30,31,30,31], Temp
IF DATA_REG(1) <> 2 Then No_Ejecutar ' Si el Mes es Febrero (02)
IF DATA_REG(0) <> (DATA_REG(0)/4*4) THEN NO_EJECUTAR 'Si el Ao es Bisiesto
Temp = Temp + 1 ' Sumar a los Das + 1
NO_EJECUTAR:
IF HTemp >= Temp THEN Salir_IN
HTemp = HTemp + 1 ' Se Incrementa Temp en 1
Salir_IN:
LCDOUT 0,ClearDisplay,[STR TEXT\3," = ",DEC2 HTemp]' Se muestra el Valor en LCD
LCDOUT 0,MoveCrsr+64, ["1_UP 2_DW 3_EN"]
Pause 250
GOTO Modificar

Decrementar:
IF HTemp <= 0 Then Salir_DC
HTemp = HTemp - 1 ' Se Decrementa Temp en 1
Salir_DC:
LCDOUT 0,ClearDisplay,[STR TEXT\3," = ",DEC2 HTemp]' Se muestra el Valor en LCD
LCDOUT 0,MoveCrsr+64, ["1_UP 2_DW 3_EN"]
Pause 250
GOTO Modificar

Continuar: ' Contina modificando variables
DATA_REG(I) = HTemp ' Selecciona el nuevo Valor Decimal
Next

For I = 0 To 5 ' Toma los Valores de las Variables


DATA_REG(I) = (DATA_REG(I)/10)*6 + DATA_REG(I) ' los convierte en BCD
Next

GOSUB SET_DateTime ' Guarda los Registros en el DS1307


GOTO Principal
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 139
Protocolo I2C, Adquisicin de Datos

'******************************** Subrutinas ****************************************

InitLCD:
Pause 500 ' Pausa para la inicializacin LCD
LCDCMD 0,WakeUp ' Enva comandos para el LCD
Pause 10
LCDCMD 0,WakeUp ' Enva comandos para el LCD
Pause 1
LCDCMD 0,WakeUp ' Enva comandos para el LCD
Pause 1
LCDCMD 0,FourBitMode ' Convierte bus en modo 4 bits
LCDCMD 0,TwoLine5x8Font ' Ajusta LCD a 2 lneas de 5x8
LCDCMD 0,DisplayOff ' Apaga el display
LCDCMD 0,DisplayOn ' Enciende el display sin cursor
LCDCMD 0,IncCrsr ' Ajusta el LCD para auto_incremento
LCDCMD 0,ClearDisplay ' Limpia el display
RETURN

InitDS1307:
HIGH I2Cpin ' Pone en Alto el Pin SDA del DS1307
HIGH (I2Cpin + 1) ' Pone en Alto el Pin SDL del DS1307
I2COUT I2Cpin,Wr1307,AddrReg,[0] ' Escribe en el Registro CH <- 0 y
RETURN ' Habilita el Oscilador del DS1307

GET_DateTime: ' Lee los Registros del DS1307 y los


For I = 0 To 5 ' y los guarda en el Arreglo DATA_REG
LOOKUP I,[YrReg,MonReg,DateReg,HrsReg,MinReg,SecReg], Temp
I2CIn I2Cpin,Rd1307,Temp,[DATA_REG(I)]
Next
RETURN

SET_DateTime: ' Guarda el arreglo DATA_REG en el


For I = 0 To 5 ' DS1307
LOOKUP I,[YrReg,MonReg,DateReg,HrsReg,MinReg,SecReg], Temp
I2COUT I2Cpin,Wr1307,Temp,[DATA_REG(I)]
Next
RETURN

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 140
Protocolo I2C, Adquisicin de Datos



Data Logger
Vamos a construir nuestro "Data Logger", para ello, monte el circuito de la figura No. 14.11, la cual,
muestra el diagrama de conexiones entre componentes. Note que el circuito es muy similar al circuito
anterior, por ello, slo tendr que hacer pocas modificaciones.
Figura No. 14.11. Esquema de conexiones para implementar un "Data Logger".
Al fin ...
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 141
Protocolo I2C, Adquisicin de Datos

Constryalo!
(1) BASIC Stamp 2p
(1) Plaqueta de Educacin NX-1000
(1) DS1307, Reloj en Tiempo Real
(1) Cristal 32.768 KHz.
(1) Memoria I2C modelo 24LC01B
Para ste experimento usted
necesitar lo siguiente:
(1) Convertidor A/D modelo ADC 0831
(1) Condensador de 10 uF, 25 Volt.
(1) Resistencia 1.0 KOhm, 1/4 Watt
(3) Resistencia 4.7 KOhm, 1/4 Watt
(3) Resistencia 10 KOhm, 1/4 Watt
(3) Pulsadores NO
(1) LCD 2x16. Pantalla de cristal lquido
(1) Buzzer
Figura No. 14.12. Fotografa del "Data Logger" montado en la protoboard.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 142
Protocolo I2C, Adquisicin de Datos





Como en todo programa, es necesario diagramar su funcionamiento antes de escribirlo en PBASIC.
Para ello vamos a utilizar el siguientes diagramas de flujo:
Figura No. 14.13.
Diagrama de flujo para
la programacin del
"Data Logger"
INICIO
Definicin de variables y constantes
InitLCD **
Inicializar variables, MEMFULL = 50
Pulsadores = 0
InitDS1307 **
Mostrar en LCD
"Data Logger"-> 1
"Real T_Clock">2
Presionaron
a D6 ?
Si
Si
Real_Time
P_Inicial
B
** Ver diagrama de flujo figura 14.10
** Ver diagrama de flujo figura 14.10
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 143
Presionaron
a D7 ?
Protocolo I2C, Adquisicin de Datos
























P_Inicial
A
Mostrar en LCD
"I2C Data Logger"
"1_LOG 2_DB 3_EXC"
Pausa de 500 milisegundos
Si
COMIENZO
ENVIAR_
EXCEL
ENVIAR_
DEBUG
Si
Si
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 144
Presionaron
a D6 ?
Presionaron
a D5 ?
Presionaron
a D7?
Protocolo I2C, Adquisicin de Datos







COMIENZO
J = 0
LEER_VOLTS
GRABAR_EEprom
J < MEMFULL ?
Generar TONO "BIP"
A
Real_Time
RUN 1

FIN
Si

En el BASIC Stamp, una memoria "Scratch Pad" es una memoria RAM interna destinada al intercambio de datos
entre programas localizados en diferentes bloques. Recordemos que el BASIC Stamp 2p tiene ocho bloques de
programacin de 2 KBytes cada uno. Esta memoria RAM "Scratch Pad" no es igual a la memoria RAM convencional
encontrada en el BASIC Stamp. Esta memoria no puede ser asignada en forma dinmica a una variable y en cada
localizacin slamente se pueden escribir datos del tamao de "Bytes" o sea ocho bits. Las localizaciones de la
memoria "Scratch Pad" estn disponibles para propsito general y en el BASIC Stamp 2p; se disponen de hasta 128
localizaciones de bytes para sta memoria, sin embargo, la localizacin 127 es de slo lectura. Esta localizacin
contiene en el "nible" inferior el No. del bloque de programacin utilizado actualmente y en el "nible" superior No. del
bloque de programacin que se utilizar para las operaciones de lectura y escritura en la memoria EEprom del BS2p.

MEMORIA RAM "SCRATCH PAD"


www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 145
J = J + 1
Protocolo I2C, Adquisicin de Datos




























ENVIAR_
DEBUG
J = 0
Leer EEprom 24LC01B
Calcular VOLTS
Valor Entero y Decimal
Enviar al DEBUG:
No. Muestra, Volts
J >= MEMFULL
-1 ?
J = J + 1
B
Si

: Escribe en la memoria Scratch Pad RAM un "Valor" de 8 bits


en la direccin "Localizacin". Ejemplo: PUT 25,100. Escribe
el valor 100 en la localizacin 25.

: Lee de la direccin "Localizacin" de la memoria "Scratch


Pad RAM" y le asigna el contenido a una variable "Valor".
Ejemplo: GET 25,Valor. Le asigna el contenido de la direc_
cin 25 a la variable Valor. En ste caso Valor = 100.
Comando PUT ?
Comando GET ? GET Localizacin, Variable
PUT Localizacin, Valor
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 146
Protocolo I2C, Adquisicin de Datos




Enviar_
EXCEL
Pausa de 1000 milisegundos
Enviar por el Pto. Serial a EXCEL
"LABEL", "Muestra", "Volts"
J = 0
Leer EEprom 24LC01B
Calcular VOLTS
Valor Entero y Decimal
Enviar por el Pto. Serial a EXCEL
"Data", Volts(Binario), Volt (Entero),
Volts(Decimal)
J >= MEMFULL
-1 ?
J = J + 1
B
Si
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 147
Protocolo I2C, Adquisicin de Datos

Progrmelo!

'{$STAMP BS2p, PL14_2R0.bsp}


'Programa: PL14_3R0.bsp
'Protocolo I2C, Adquisicin de Datos

'************************* Definicin Constantes LCD *********************************

WakeUp CON %00110000 ' Despierta al LCD


FourBitMode CON %00100000 ' Modo de Datos (4 Bits)
TwoLine5x8Font CON %00101000 ' LCD a 2 lneas, letra tipo 5x8
DisplayOff CON %00001000 ' Apaga el LCD, retiene los datos
DisplayOn CON %00001100 ' Enciende el LCD sin cursor
IncCrsr CON %00000110 ' El cursor se incrementa sin desplaz. al LCD
ClearDisplay CON %00000001 ' Se limpia el LCD
MoveCrsr CON %10000000 ' Mueve el cursor a la posicin (X)

'***************** Definicin de Variables y Constantes AD0831*************************

CS CON 10 ' AD0831.1 (CS Pin 1) Chip Select


D0 CON 14 ' AD0831.6 (D0 Pin 6) DATA
CLK CON 15 ' AD0831.7 (CLK Pin 7) Clock

AD_Bits VAR BYTE ' Variable utilizada en la Conversin A/D.


ENTERO VAR BYTE ' Variable con el valor entero de la Conv.
R VAR BYTE
DECIMAL VAR BYTE ' Variable con el valor decimal de la Conv.
CENTESIMAS VAR BYTE ' Variable con el valor decimal de la Conv.

'************ Definicin de Variables y Constantes Para el DS1307 *********************

SecReg CON 0 ' Registro de Segundos No. 0


MinReg CON 1 ' Registro de Minutos No. 1
HrsReg CON 2 ' Registro de Horas No. 2
DateReg CON 4 ' Registro de Da No. 4
MonReg CON 5 ' Registro de Mes No. 5
YrReg CON 6 ' Registro de Ao No. 6

I2Cpin CON 8 ' DS1307.5 (SDA Pin)


AddrReg CON 0 ' Direccin 1er. registro DS1307 ( Es Fija = 0)
CtrReg CON 7 ' Direccin Reg. de Control del DS1307
Rd1307 CON %11010001 ' Comando para leer en el DS1307
Wr1307 CON %11010000 ' Comando para escribir en el DS1307
Temp VAR BYTE ' Variable utilizada para construir comandos
DATA_REG VAR BYTE(7) ' Arreglo para almacenar registros del DS1307

'************ Definicin de Variables y Constantes Para la EEprom 24xx*****************

Rd2401 CON %10100011 ' Comando para leer en la EEprom 2401


Wr2401 CON %10100010 ' Comando para escribir en la EEprom 2401
sPin CON 16 ' Puerto de programacin Pin - P16
Baud CON 240 ' Modo de transmisin 9600, 8-N-1 para el BS2p
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 148
Protocolo I2C, Adquisicin de Datos

'********************* Definicin de Variables y Constantes generales *****************

I VAR BYTE ' Variable de bucle


J VAR BYTE ' Cuenta el No. de Conversiones A/D.
MEMFULL VAR BYTE ' Max. No. de Bytes almacenados en EEprom
PULS_D7 VAR Bit ' Pulsador D7
PULS_D6 VAR Bit ' Pulsador D6
PULS_D5 VAR Bit ' Pulsador D5
On CON 1 ' Indica Energizado
Off CON 0 ' Indica Apagado

D7 CON 11 ' Asigna al Pin P11 el Pulsador D7


D6 CON 12 ' Asigna al Pin P12 el Pulsador D6
D5 CON 13 ' Asigna al Pin P13 el Pulsador D5

'**************************** Inicializacin ******************************************

Initializar:
Pause 500 ' Espera por el LCD
J = 0 ' Inicializa el No. de Intervalos de Conv. A/D
MEMFULL = 50 ' Max. No. de Bytes a grabar en EEprom
PULS_D7 = 0 ' Estado Inicial del pulsador D7
PULS_D6 = 0 ' Estado Inicial del pulsador D6
PULS_D5 = 0 ' Estado Inicial del pulsador D5

GOSUB InitLCD ' Inicializa el LCD


GOSUB InitDS1307 ' Inicializa al DS1307

'******************************* Programa Principal ***********************************

Principal:

LCDOUT 0,ClearDisplay,["DATA_LOGGER -> 1"] ' Visualiza DATA_LOGGER -> 1


LCDOUT 0,MoveCrsr+64, ["REAL_T CLOCK > 2"] ' Visualiza REAL_T Clock > 2
PAUSE 500 ' 1 -> Va a Data Logger Prog. No. 0
Leer_B: ' 2 -> Va a Real_T Clock Prog. No. 1
BUTTON D7,0,255,0,PULS_D7,1,P_Inicial ' Si se presiona D7 va a P_Inicial
BUTTON D6,0,255,0,PULS_D6,1,Real_Time ' Si se presiona D6 va a Real_Time
GOTO Leer_B

Real_Time:
RUN 1

P_Inicial:
LCDOUT 0,ClearDisplay,["I2C Data Logger "] ' Visualiza I2c Data Logger
LCDOUT 0,MoveCrsr+64, ["1_LOG 2_DB 3_EXC"] ' 1 LOG -> Comienza el Logger
PAUSE 500 ' 2 DB -> Hacer debug
Leer_Boton: ' 3 EXC -> Enviar a Excel
BUTTON D7,0,255,0,PULS_D7,1,COMIENZO ' Si se presiona D7 va a COMIENZO
BUTTON D6,0,255,0,PULS_D6,1,ENVIAR_DEBUG ' Si se presiona D6 va a ENVIAR_DEBUG
BUTTON D5,0,255,0,PULS_D5,1,ENVIAR_EXCEL ' Si se presiona D5 va a ENVIAR
GOTO Leer_Boton

COMIENZO:
J = 0 ' Inicia la EEprom en Direccin -> 0
Lazo:
GOSUB LEER_VOLTS ' Lee Valores de la conversin A/D
GOSUB GRABAR_EEprom ' Escribe en la Memoria EEprom
IF J < MEMFULL THEN Lazo ' Si se lleg al Mx de Muestras
FREQOUT 1,2000,1500 ' Emite un sonido de 1500 Hz 2 seg.
GOTO P_Inicial ' Va al P_Inicial

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 149
Protocolo I2C, Adquisicin de Datos

ENVIAR_DEBUG:
FOR J=0 TO MEMFULL - 1 ' Direcciona la Memoria EEprom
I2CIN I2CPin,Rd2401,J,[AD_Bits] ' Lee el Valor de la Memoria y lo
' Almacena en AD_Bits
ENTERO = 5 * AD_Bits / 255 ' Calcula el Valor Entero
R = 5 * AD_Bits // 255 ' Calcula el Valor Decimal
DECIMAL = 100 * R / 255
CENTESIMAS = 100 * R // 255
CENTESIMAS = 10 * CENTESIMAS / 255
IF CENTESIMAS < 5 then salte_a_linea
DECIMAL = DECIMAL + 1
salte_a_linea:
IF DECIMAL < 100 then salte_a_todo
ENTERO = ENTERO + 1
DECIMAL = 0
salte_a_todo:
DEBUG "Muestra No. ",DEC2 J," Valor Volts = ",DEC1 ENTERO,".",DEC2 DECIMAL, CR
NEXT
GOTO Principal

ENVIAR_EXCEL: ' Esperar 1 segundo.


Pause 1000 ' Enva un CR para asegurar el
SEROUT sPin,Baud,[CR] ' Buffer del StampDAQ
SEROUT sPin,Baud,[CR,"LABEL,Muestra #, VOLTS",CR] ' Muestra Texto
SEROUT sPin,Baud,["CLEARDATA",CR] ' Limpia Celdas del Excel

FOR J = 0 TO MEMFULL - 1 ' Lee el Valor de la Memoria EEprom y
I2CIN I2CPin,Rd2401,J,[AD_Bits] ' Lo Asigna a AD_Bits
ENTERO = 5 * AD_Bits / 255 ' Calcula el Valor Entero
R = 5 * AD_Bits // 255 ' Calcula el Valor Decimal
DECIMAL = 100 * R / 255
CENTESIMAS = 100 * R // 255
CENTESIMAS = 10 * CENTESIMAS / 255
IF CENTESIMAS < 5 then salte_a
DECIMAL = DECIMAL + 1
salte_a:
IF DECIMAL < 100 then salte_b
ENTERO = ENTERO + 1
DECIMAL = 0
salte_b:
SEROUT sPin,Baud,["DATA,",DEC J, ",", DEC AD_Bits,",", DEC ENTERO,".",DEC DECIMAL,CR]
'Enva El No. de Muestras y el
NEXT ' Valor de Volts. Lo escribe en la Hoja
PAUSE 1000 ' de Excel.
GOTO Principal

'************************************* Subrutinas *************************************

InitLCD:
Pause 500 ' Pausa para la inicializacin LCD
LCDCMD 0,WakeUp ' Enva comandos para el LCD
Pause 10
LCDCMD 0,WakeUp ' Enva comandos para el LCD
Pause 1
LCDCMD 0,WakeUp ' Enva comandos para el LCD
Pause 1

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 150
Protocolo I2C, Adquisicin de Datos

LCDCMD 0,FourBitMode ' Convierte bus en modo 4 bits


LCDCMD 0,TwoLine5x8Font ' Ajusta LCD a 2 lneas de 5x8
LCDCMD 0,DisplayOff ' Apaga el display
LCDCMD 0,DisplayOn ' Enciende el display sin cursor
LCDCMD 0,IncCrsr ' Ajusta el LCD para auto_incremento
LCDCMD 0,ClearDisplay ' Limpia el display
RETURN

InitDS1307:
HIGH I2Cpin ' Pone en Alto el Pin SDA del DS1307
HIGH (I2Cpin + 1) ' Pone en Alto el Pin SDL del DS1307
I2COUT I2Cpin,Wr1307,AddrReg,[0] ' Escribe en el Registro CH <- 0 y
RETURN ' Habilita el Oscilador del DS1307

GET_DateTime: ' Lee los Registros del DS1307 y los


For I = 0 To 5 ' y los guarda en DATA_REG
LOOKUP I,[YrReg,MonReg,DateReg,HrsReg,MinReg,SecReg], Temp
I2CIn I2Cpin,Rd1307,Temp,[DATA_REG(I)]
Next
RETURN

LEER_VOLTS:

HIGH CS ' Habilita al AD0831
LOW CS ' Arranca la Conversin A/D
LOW CLK ' Coloca el resultado en Binario
PULSOUT CLK,210 ' en la Variable AD_Bits
SHIFTIN D0,CLK,msbpost,[AD_Bits\8]
RETURN

GRABAR_EEprom: ' Graba en la Memoria EEprom


IF J >= MEMFULL THEN M24XXFULL ' los valores de la conversin A/D.
I2COUT I2CPin,Wr2401,J,[AD_Bits]
J=J+1
PAUSE 10
M24XXFULL:
RETURN

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 151
Protocolo I2C, Adquisicin de Datos

Figura No. 14.14. Visualizacin de la Salida
DEBUG para el programa del "Data Logger"
montado en la protoboard.
Como llegar a la pantalla DEBUG. Inicialmente
cuando usted ejecuta el programa PL14_3R0.bsp,
aparece en el display LCD el mensaje como el
indicado en la figura No. 14.15. Si usted presiona al
pulsador "D7", entrar en la parte del programa
destinada al "Data Logger", si por el contrario
usted presiona al pulsador "D6" entrar a ejecutar
las rutinas del Reloj en Tiempo Real.
Figura No. 14.15. Pantalla Inicial
Luego presionando al pulsador "D7", podemos
visualizar la pantalla general del "Data Logger"
como se indica en la figura No. 14.16
Figura No. 14.16. Pantalla general del "Data Logger"
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 152

I2C Data Logger


1_LOG 2_DB 3_EXC

DATA_LOGGER -> 1
REAL_T CLOCK > 2
Protocolo I2C, Adquisicin de Datos

Al presionar el pulsador "D7" nuevamente (1_LOG) el BASIC Stamp har la captura de 50 muestras
de voltaje entregadas por el convertidor A/D ADC 0831. Se escuchar un sonido "bip" indicando que
ya se ha realizado la captura de los datos correctamente. Luego si se presiona el pulsador "D6"
(2_DB) los datos se enviarn directamente a la pantalla DEBUG del computador. Si por el contrario
usted presiona el pulsador "D5" (3_EXC) los datos se enviarn a travs del puerto serial al programa
EXCEL de Microsoft. Es importante ejecutar entonces, antes de enviar los datos a EXCEL, el Macro en
Excel llamado: PL14_3R0.xls, el cual, se encuentra en el directorio ..\CAPITULO_14 del CD entregado
a usted con el curso.
Figura No. 14.17. Grfica de los datos recibidos del programa "Data Logger" con el Macro StampDAQ de Excel.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 153
Protocolo I2C, Adquisicin de Datos

Figura No. 14.18. Figura No. 14.18.
Grfica de la seal en los puntos de entrada
del convertidor A/D ADC 0831 puntos (Vin+)
y (Vin-) como se indica en el esquema elc_
trico mostrado en la figura No. 14.11. Esta
grfica se realiz con la ayuda de un Osci_
loscopio digital marca OPTAscope.
Podemos ver que las diferencias entre los datos graficados en Excel (figura No. 14.17) y los graficados
por el Osciloscopio (figura No. 14.18) son pequeas para una seal de entrada en el convertidor A/D
de 10 Hz. De ste modo su "Data Logger" se convirti en un pequeo osciloscopio digital con memoria,
gracias a la ayuda del Macro en Excel StampDAQ.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 154

15. Comunicacin Serial RS232
Comunicacin Serial RS232

SOUT
SIN
ATN
VSS
P0
P1
P2
P3
P4
P5
P6
P7
1
2
3
4
6
5
7
9
8
DSR
RTS
BS2-IC
Modulo
PC Puerto Serial
1
2
3
4
5
6
7
8
9
10
11
12
24
23
22
21
20
19
18
17
16
15
14
13
VIN
VSS
RES
VDD
P15
P14
P13
P12
P11
P10
P9
P8
Comunicacin Serial RS232
Uno de los tipos ms comunes de comunicacin entre equipos electrnicos es la comunicacin serial.
Existen dos tipos de comunicacin serial; sncrona (como hemos visto en el captulo anterior) y
asncrona. En ste captulo trataremos la comunicacin asncrona que significa sin "reloj" o sin
sincrona. En ste tipo de comunicacin serial, los datos se transmiten y reciben sin necesidad de usar
una seal de reloj. Los datos se pueden enviar a travs de slo dos cables de comunicacin, uno para
los datos y otro para la tierra o conexin comn. En un computador por ejemplo, se encuentra un
puerto o varios puertos seriales para la comunicacin asncrona, son llamados los puertos COM o
puertos RS232. El Trmino RS232 se refiere a las especificaciones elctricas que deben cumplir las
seales para ser usadas como puerto de comunicacin serial en un PC. Los niveles lgicos de un
puerto RS232 son igualmente un cero (0) y un uno (1), sin embargo, los voltajes de trabajo en stos
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, hacen dos conversiones: convierten los voltajes de +- 12 Vdc
a niveles TTL compatibles ( 0 a 5 ) Vdc, invierten 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
serial de la PC. En la figura No. 15.1, vemos un circuito tpico de conexin serial RS232 de nueve
pines denominado DB-9. Se puede apreciar que el BASIC Stamp slo necesita la colocacin de un
resistor de 22 KOhm en serie al BASIC Stamp y el Pin No. 3 del conector DB-9. Este resistor limita la
corriente del PIN de salida del BASIC Stamp, y en caso de una mala conexin, mantiene la corriente y
al voltaje en valores seguros que no afectarn el funcionamiento del BASIC Stamp. En la figura
anexa, las conexiones entre pines del DB-9 con doble lnea son opcionales. Si se colocan no se
habilitar el "Handshaking" de (DTR-DSR-DCD) y (RTS-CTS).








Figura No. 15.1.
Diagrama de conexiones de un puerto
Serial DB-9, el cual, muestra la forma de
conectar correctamente el BASIC Stamp.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 156
TX
RX
DTR
GND
Comunicacin Serial RS232
BS1 BS2 BS2e BS2sx BS2p
Unidad de tiempo n/a 1 ms 1 ms 400 s 400 s
Velocidad "Baud"
300, 600,
1200, and
2400 only
243 to 50K 243 to 50K 608 to 115K 608 to 115K
Lmite de "Baud"
Control de Flujo
n/a 19.2K 19.2K 19.2K 19.2K
Lmite de
Calificadores
Ilimitado 6 (6 con formato "WAIT")
Pines de E/S
Disponibles
0 - 7 0 - 15 0 - 15 0 - 15 0 - 15
Otro Pin Serial
Interno
n/a Fsicamente el PIN No. 2 del BS2p cuando Rpin = 16

"Baud"
8-bit
sin-paridad
Invertido
8-bit
sin-paridad
Normal
7-bit
Paridad Impar
Invertido
7-bit
Paridad Impar
Normal
1200 18447 2063 26639 10255
2400 17405 1021 25597 9213
4800 16884 500 25076 8692
9600 16624 240 24816 8432
Figura No. 15.2. Caractersticas de los diferentes BASIC Stamp respecto a sus capacidades de comunicacin.
En el curso sobre MicroControladores nivel Avanzado utilizamos slo el BS2p.
La comunicacin serial asncrona se realiza gracias a la sincronizacin precisa de tiempos entre el
transmisor y el receptor, ambos deben trabajar a la misma velocidad usualmente llamada "BAUD"que
significa bits por segundo (bps). En la figura No. 15.3 se muestran los valores ms comunes para la
comunicacin serial RS232 de un BASIC Stamp 2p. Estos argumentos son muy flexibles y en conjunto
determinan la forma como se enviarn los datos al momento de realizar una comunicacin. Por
ejemplo: podemos enviar los datos con: 1 bit de parada, 8 bits de datos sin paridad o enviar 7 bits
de datos con paridad impar y virtualmente a cualquier velocidad entre 300 Baud y 100 KBaud. Es
usual, utilizar la comunicacin serial RS232 con: 1 bit de parada y 8 bits de datos sin paridad. En
nuestro texto, ste es el modo que utilizaremos. Para mayor informacin sobre comunicaciones
RS232 consulte el texto "BASIC Stamp Programming Manual ver. 2.0b", pgina 273.
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 los 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,
slamente con siete bit podemos representar valores desde 0 hasta 127, mientras si utilizamos el
modo (8N), podemos representar valores desde 0 a 255.
Figura No. 15.3.
Formas de comuni_
cacin ms utilizadas
por el BASIC Stamp 2p.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 157
Comunicacin Serial RS232

El BASIC Stamp, tiene dos comandos destinados a la comunicacin serial asncrona, los cuales son:

SERIN Rpin, {\Fpin},Baudmode,{Plabel,}{Timeout, Tlabel,}[InputData]


SEROUT Tpin, {\Fpin},Baudmode,{Pace,}{Timeout, Tlabel,}[OutputData]
Fpin:
Es una variable, constante o expresin (0-16) que especifica en cual pin de entrada
o salida se realizar la recepcin o transmisin serial. Si el Pin utilizado es el No. 16,
el BASIC Stamp utilizar el PIN dedicado (SIN, fsicamente el PIN 2), el cual, es
normalmente utilizado por el comando DEBUG del editor. Este Pin va conectado a un
circuito "Line drive /receiver", el cual, convierte los niveles lgicos TTL (0-5) Vdc a
niveles RS232. Por sta razn podemos hacer una conexin directa al PC.

Es una variable, constante o expresin del (0-15) opcional, que especifica el pin de
entrada o salida que ser utilizado para indicar el estatus del Control de Flujo. Este
pin debe colocarse como una salida para el comando SERIN y como entrada para el
comando SEROUT. Cuando usamos el comando SEROUT y se utiliza Fpin, se debe
incluir siempre los argumentos Timeout y Tlabel.

Es una variable, constante o expresin (0-65535) que especifica la configuracin y


la velocidad de transmisin/recepcin en baud.

Es una etiqueta opcional que le indica al programa donde ir cuando se determine


que existe un error de paridad. Slo se debe utilizar en modo de 7 bits y paridad
impar.

Es una variable, constante o expresin opcional (0-65535) que determina el largo de


la pausa entre bytes transmitidos. Cuando se utiliza "Pace" no podemos utilizar el
argumento "Timeout" al mismo tiempo.

Es una variable, constante o expresin (0-65535) que le indica al comando SERIN


cuanto debe esperar por el dato de entrada, si el dato nunca se recibe, el programa
saltar a Tlabel. Si estamos utilizando el comando SEROUT; significa cuanto debe
esperar por la activacin del pin definido como (Fpin ). En el caso que no se reciba
sta activacin, el programa saltar a la etiqueta Tlabel.

Es una etiqueta opcional que debe existir cuando utilizamos el argumento Timeout.
sta etiqueta indica donde el programa deber ir en el caso de que ocurra un evento
"Timeout."

Rpin/Tpin:
Plabel:
Baudmode:
Pace:
Timeout:
Tlabel:
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 158
Comunicacin Serial RS232

InputData: Es una lista de variables y modificadores de formatos que le indican al comando
SERIN como almacenar los datos recibidos en las variables, interpretando los datos
de entrada como texto (decimal, binario o hexadecimal), esperar por una secuencia
fija o variable de bytes de entrada, o ignorar un nmero especifico de bytes.

Es una lista de variables, constantes, expresiones y modificadores de formatos que


le indican al comando SEROUT que formato tendrn los bytes de salida. SEROUT
puede transmitir datos en forma individual y en repeticiones, convirtiendo los datos
de salida en (decimal, binario, hexadecimal o texto), enviar una secuencia fija o
variable de bytes de datos o transmitir un "string" de datos desde un arreglo de
variable.

En las figuras del captulo 14, nmeros 14.3, 14.4 y 14.5 se describen los
modificadores de formato para los comandos I2CIN y I2COUT. Estos modificadores
se utilizan igualmente para los comandos SERIN y SEROUT con las mismas
propiedades y sin ningn tipo de restriccin.

OutputData:
Constryalo!
Para ste experimento usted
necesitar lo siguiente:
(1) BASIC Stamp 2p
(1) Plaqueta de Educacin NX-1000
(3) Pulsadores con resistencia de
pullup incluida en en NX-1000.
(1) LCD 2x16. Pantalla de cristal lquido
(1) Buzzer
(1) Set de Cables de Conexin.
(1) Programa editor de BASIC Stamp II
(1) Programa Stamp Plot 3
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 159
Comunicacin Serial RS232


El equipo es operado a travs La operacin del equipo se realiza


de controles manuales, o sea, desde un lugar distante. El control
operados directamente. se puede llevar a cabo a travs de
Ejemplo: Presionar a un pul_ cables de control o en forma ina_
sador para encender un con_ lmbrica. Por Ejemplo: Encender
trol de un motor. Girar la llave un televisor con un control remoto
del auto para encenderlo... activar la alarma de un vehculo...

REMOTA
OPERACIN
LOCAL
De un equipo
en forma
Figura No. 15.4. Esquema de conexiones del circuito para realizar una comunicacin serial RS232
desde el BASIC Stamp 2p al PC, utilizando los comandos SERIN y SEROUT.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 160
Comunicacin Serial RS232

Vamos a desarrollar una aplicacin que nos permita entender las comunicaciones seriales RS232
entre el BASIC Stamp y el PC. Para ello, se desarroll un circuito que se puede operar en forma
"LOCAL" desde los pulsadores colocados en la plaqueta NX-1000 donde se encuentra el BASIC
Stamp, como lo hemos realizado en la mayora de los captulos anteriores, y en forma "REMOTA"
desde la pantalla del PC; algo nuevo en ste captulo. En la industria, casi en su totalidad, existen
equipos de control que pueden ser operados en forma local y remota simultneamente. Podemos
mencionar, por ejemplo, el control simple de la temperatura en una caldera, donde el punto de
ajuste "set point" se introduce en forma remota desde una sala de control ubicada muy distante del
equipo controlador.

En nuestro ejemplo, vamos a contar la frecuencia en Hz de una seal con forma de onda cuadrada
generada desde la plaqueta NX-1000. La frecuencia de la seal la vamos a determinar contando los
pulsos 0-1-0 que le llegan al PIN 15 del BASIC Stamp en un segundo utilizando el comando
COUNT. Vea el anexo D, pgina D-6 para mayor informacin del comando COUNT.

En la pantalla LCD, aparecer un men inicial como se muestra en la figura No. 15.5. Presionando el
pulsador "D7", entraremos a visualizar la frecuencia medida por el BASIC Stamp. Podemos cambiar
la frecuencia de la onda generada y al mismo tiempo se mostrar su valor en la pantalla LCD. Esta es
una operacin "LOCAL". Ahora bien, si corremos en el PC el programa Stamp Plot 3 y cargamos el
macro llamado PL15_1R0; podemos entonces observar que una fotografa de la plaqueta NX-1000
aparecer en la pantalla del computador. Si hacemos un "clip" con el ratn sobre la parte de la
imagen que corresponde a los pulsadores en la plaqueta NX-1000, usted observar como se puede
realizar el mismo control "LOCAL", pero ahora desde su PC, ver figura 15.6. A sto lo
denominamos control "REMOTO". Esta comunicacin realizada entre el MicroControlador BASIC
Stamp y el PC es una comunicacin serial bidireccional asncrona RS232. Que les parece?. Decubri_
rn ms acerca de los comandos SERIN y SEROUT estudiando el programa. Sin embargo, antes de
programar en PBASIC, vamos a plantear los diagramas de flujo para sta aplicacin.
Operacin "LOCAL" y "REMOTA" con RS232
Figura No. 15.5. Visualizacin en LCD del programa PL15_1R0.bsp

MENU PRINCIPAL
1_FREQ 2_TONO

FREQ(Hz). = 101
P(3) -> Menu ANT
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 161
Comunicacin Serial RS232




Figura No. 15.6. Macro PL15_1R0 del programa Stamp Plot 3 visto en la Pantalla del PC.
COUNT Pin, Periodo, Variable
El comando COUNT, coloca al "Pin" seleccionado como una entrada, por un periodo de tiempo
"Periodo" y cuenta el nmero de ciclos 0-1-0 1-0-1 en el pin, el valor lo almacena en una
"Variable". El BASIC Stamp 2p, puede responder a transiciones tan pequeas como 1.2
microsegundos. Un ciclo est conformado por dos transiciones que pudiesen ser de 0 a 1 o de 1 a
0. Por sta razn count puede medir ondas hasta de frecuencias de 416.7 Khz.

Pin: Variable, constante o expresin (0-15) indica cual pin de E/S se utilizar para el conteo.
Periodo: Variable, constante o expresin (0-65535) que indica el tiempo durante el cual se contar.
Para el BS2p la unidad de tiempo es de 287 microsegundos.
Variable: Una variable donde se almacenar el conteo, generalmente es de 16 bits.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 162
Comunicacin Serial RS232


Figura No. 15.7. Diagrama de flujo del programa para la Comunicacin Serial RS232
INICIO
Inicializar variables, constantes
generales y para el LCD
InitLCD ** ** Ver figura No. 14.10
Enviar al Stamp Plot 3
SEROUT (MENU)
B
Enviar al LCD
(MENU Principal ...)
Pulsaron
a D6 ?
Si
Si
FRECUEN_
CIA
TONE
SERIN (Coordenadas)
(XCor, YCor)
CONT_1
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 163
Pulsaron
a D7 ?
RET1
Comunicacin Serial RS232






CONT_1
GETY
Timeout ?
GETX
Timeout ?
No
No
Si
Si
Leer Cordenada YCor
Leer Cordenada XCor
Analizar Coordenadas (Xcor, YCor)
(XCor,Ycor)
~ Pulsar D6 ?
(XCor,Ycor)
~ Pulsar D7 ?
TONE
FRECUEN_
CIA
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 164
RET1

Comunicacin Serial RS232

FRECUEN_
CIA
XCor = 255
YCor = 255
COUNT Count_Pin,3484,FREQ
Enviar al Stamp Plot 3
SEROUT (MENU)
Enviar al LCD
(MENU Principal ...)
Pulsaron
a D5 ?
B
SERIN (Coordenadas)
(XCor, YCor)
CONT_2
C
Si
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 165

Comunicacin Serial RS232

CONT_2
GETY
Timeout ?
GETX
Timeout ?
Leer Cordenada YCor
Leer Cordenada XCor
Analizar Coordenadas (XCor, YCor)
(XCor,YCor)
~ Pulsar D5 ?
B
C
No
No
Si
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 166

Comunicacin Serial RS232

TONE
Enviar al Stamp Plot 3
SEROUT "Escriba la FREQ"?
SERIN x 10 seg
DEC TONO ?
FREQOUT Pin_Tono,4000,(TONO/4)
Pausa 100 milisegundos
B
FREQOUT Pin, Periodo,Freq1{,Freq2}
El comando FREQOUT, genera una o dos ondas sinusoidales utilizando un algoritmo de modula_
cin del ancho del pulso (PWM). El rango de frecuencias que se puede obtener est comprendido
entre (0 y 123.5) KHz. Para un BASIC Stamp 2p, la unidad mnima del periodo es de 3.77 Hz,
equivalente 0.265 milisegundos.

Pin: Variable, constante o expresin (0-15) indica cual pin de E/S se utilizar.
Periodo: Variable, constante o expresin (0-65535) que indica el tiempo durante el cual se generar
el Tono(s). Para el BS2p la unidad de tiempo es de 0.265 milisegundos.
Freq1: Variable, constante o expresin (0-32767) que indica la frecuencia del primer tono.
Freq2: Variable, constante o expresin (0-32767) que indica la frecuencia del segundo tono.
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 167

Comunicacin Serial RS232

'{$STAMP BS2p}
'Programa: PL15_1R0.bsp
'Comunicaciones Seriales RS232

'********************** Definicin de Variables y Constantes **************************

FREQ VAR WORD ' Variable que almacena la frecuencia


Xcor VAR BYTE ' Variable que almacena coordenada del eje x
Ycor VAR BYTE ' Variable que almacena coordenada del eje y

TONO VAR WORD ' Variable que almacena el Tono en Hz


PIN_Tono CON 11 ' PIN de conexin al buzzer
Count_Pin CON 15 ' PIN de conexin al generador de frecuencia
BMode CON 240 ' 9600 Baud, 8 Bit sin paridad, normal

PULS_D7 VAR Bit ' Pulsador D7


PULS_D6 VAR Bit ' Pulsador D6
PULS_D5 VAR Bit ' Pulsador D5

D7 CON 14 ' D7 estar conectado al Pin P14


D6 CON 13 ' D6 estar conectado al Pin P13
D5 CON 12 ' D5 estar conectado al Pin P12

'************************* Definicin Constantes LCD *********************************

WakeUp CON %00110000 ' Despierta al LCD


FourBitMode CON %00100000 ' Modo de Datos (4 Bits)
TwoLine5x8Font CON %00101000 ' LCD a 2 lneas, letra tipo 5x8
DisplayOff CON %00001000 ' Apaga el LCD, retiene los datos
DisplayOn CON %00001100 ' Enciende el LCD sin cursor
IncCrsr CON %00000110 ' El cursor se incrementa sin desplaz. al LCD
ClearDisplay CON %00000001 ' Se limpia el LCD
MoveCrsr CON %10000000 ' Mueve el cursor
HomeCrsr CON %00000010 ' Lleva el Cursor al Home

'**************************** Programa Principal *************************************

Initializar:
Pause 500 ' Espera por el LCD
PULS_D7 = 0 ' Estado Inicial del pulsador D7
PULS_D6 = 0 ' Estado Inicial del pulsador D6
PULS_D5 = 0 ' Estado Inicial del pulsador D5
GOSUB InitLCD ' Inicializa la pantalla LCD

Principal:

SEROUT 16,BMode,["!RSET",cr] ' Limpia textos en la pantalla del PC
SEROUT 16,BMode,["~TEXT 66a,56a,1,0, MENU PRINCIPAL ",cr] ' Muestra en LCD del PC
SEROUT 16,BMode,["~TEXT 66a,51a,1,0, 1_FREQ 2_TONO ",cr] ' Muestra en LCD del PC
SEROUT 16,BMode,["@TEXT 35a,100a,1,0,Comunicaciones Seriales RS232",cr]

Progrmelo!
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 168

Comunicacin Serial RS232

LCDOUT 0,ClearDisplay,[" MENU PRINCIPAL "] ' Muestra en LCD MENU PRINCIPAL
LCDOUT 0,MoveCrsr+64, [" 1_FREQ 2_TONO "] ' Muestra en LCD 1_FREQ,2_CRON
PAUSE 500 ' Pausa de 500 milisegundos

SELEC_0:
BUTTON D7,0,255,0,PULS_D7,1,FRECUENCIA ' Si presionan D7 -> Va a FRECUENCIA
BUTTON D6,0,255,0,PULS_D6,1,TONE ' Si presionan D6 -> VA a TONE

SEROUT 16,BMode,["!GETX", cr] ' Lee RS232 la coordenada X del
SERIN 16,BMode,250,GetY,[DEC XCor] ' ratn al hacer "Click" y el
PAUSE 100 ' valor lo asigna a XCor

GetY:
SEROUT 16,BMode,["!GETY", cr] ' Lee RS232 la coordenada Y del
SERIN 16,BMode,250,TestSP,[DEC Ycor] ' ratn al hacer "Click" y el
PAUSE 100 ' valor lo asigna a YCor

TestSP:
IF (XCor<=27) AND (XCor>=23) AND (YCor<=12) AND (YCor>=8) THEN FRECUENCIA
IF (XCor<=31) AND (XCor>=29) AND (YCor<=12) AND (YCor>=8) THEN TONE

PAUSE 500 ' Pausa de 500 milisegundos
GOTO SELEC_0

FRECUENCIA:
FREQ_D:
COUNT Count_Pin,3484,FREQ ' Cuenta el No.de ciclos en 1 Seg.

SEROUT 16,BMode,["!SETD1,", DEC FREQ,cr] ' Enva el valor de la frecuencia al SP.


SEROUT 16,BMode,["!RSET", cr] ' Limpia textos en la pantalla del PC
PAUSE 1500 ' Retardo en limpiar Textos del SP.
SEROUT 16,BMode,["~TEXT 66a,56a,1,0,FREQ (Hz). = ",cr]
SEROUT 16,BMode,["~TEXT 78A,56A,1,0,(DATAVAL1)", cr]
SEROUT 16,BMode,["~TEXT 66a,51a,1,0,P(3) -> Menu ANT",cr]
SEROUT 16,BMode,["@TEXT 35a,100a,1,0,Comunicaciones Seriales RS232",cr]

LCDCMD 0, ClearDisplay ' Limpia pantalla del LCD


LCDOUT 0, 0,["FREQ(Hz). = ", DEC FREQ] ' Muestra en LCD FREQ (Hz). = XXX
LCDOUT 0,MoveCrsr+64, ["P(3) -> Menu ANT"] ' Muestra en LCD P(3) -> Menu ANT

BUTTON D5,0,255,0,PULS_D5,1,Principal ' Si presionan D5 -> Va a Principal

SEROUT 16,BMode,["!GETX", cr] ' Lee RS232 la coordenada X del


SERIN 16,BMode,250,GetY1,[DEC XCor] ' ratn al hacer "Click" y el
PAUSE 100 ' valor lo asigna a XCor

GetY1:
SEROUT 16,BMode,["!GETY", cr] ' Lee RS232 la coordenada Y del
SERIN 16,BMode,250,TestSP1,[DEC Ycor] ' ratn al hacer "Click" y el
PAUSE 100 ' valor lo asigna a YCor

TestSP1:
IF (XCor<=36) AND (XCor>=33) AND (YCor<=12) AND (YCor>=8) THEN Principal
GOTO FREQ_D

TONE:
SEROUT 16,BMode,["!REQD TONO,10,Escriba la FREQ en Hz entre (2000 - 4000)", cr]

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 169

Comunicacin Serial RS232

SERIN 16,BMode,10000,SkipReq,[DEC TONO] ' Ventana de requisicin de Datos
FREQOUT PIN_Tono,4000,(TONO/4) ' a travs del PC, duracin 10 seg

SkipReq:
Pause 100 ' Pausa de 100 milisegundos
XCor = 255 ' Asigna a XCor 255
YCor = 255 ' Asigna A YCor 255
GOTO Principal ' Regresa a la etiqueta principal

'******************************** Subrutinas ****************************************

InitLCD:
Pause 500 ' Pausa para la inicializacin LCD
LCDCMD 0,WakeUp ' Enva comandos para el LCD
Pause 10
LCDCMD 0,WakeUp ' Enva comandos para el LCD
Pause 1
LCDCMD 0,WakeUp ' Enva comandos para el LCD

Pause 1
LCDCMD 0,FourBitMode ' Convierte bus en modo 4 bits
LCDCMD 0,TwoLine5x8Font ' Ajusta LCD a 2 lneas de 5x8
LCDCMD 0,DisplayOff ' Apaga el display
LCDCMD 0,DisplayOn ' Enciende el display sin cursor
LCDCMD 0,IncCrsr ' Ajusta el LCD para auto_incremento
LCDCMD 0,ClearDisplay ' Limpia el display
RETURN


www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 170

16. Protocolo 1-Wire de Dallas Semiconductor
Protocolo 1-Wire de Dallas Semiconductor










www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 172
Dallas Semiconductor ha desarrollado una tecnologa denominada 1-Wire, la cual, es capaz de
transmitir y recibir informacin (datos) en forma serial asncrona, utilizando slamente, un conductor
ms su retorno comn o tierra. A travs de stos conductores se envan las seales de comunicacin
y potencia para la alimentacin de los circuitos internos de cada componente conectado a la RED.
La RED de comunicaciones 1-Wire tiene una arquitectura Maestro - Esclavos. Se basa en la
utilizacin de un slo dispositivo maestro, el cual, se puede interconectar con uno o ms componen_
tes esclavos que tienen un nico serial de identificacin. El protocolo 1-Wire utiliza los niveles
lgicos convencionales CMOS/TTL que trabajan sobre un rango de tensin de 2.8 a 6 Volts DC.
Tanto el Maestro como los Esclavos transmiten informacin en forma bidireccional, pero slo
en una direccin a la vez. Los "bytes" de informacin se envan siempre comenzando por el bit
menos significativo (LSB). Dallas semiconductor ha fabricado una extensa gama de productos con
comunicacin 1-Wire como podemos ver en la figura No. 16.1.
Protocolo 1-Wire
1-Wire
Convertidores A/D
Potencimetros Digitales
Memorias
EEprom
SRAM
NV-RAM
Reloj en tiempo Real
Sensores de Temperatura
Suiches digitales
Cargadores de Batera
iButton
Figura No. 16.1. Diferentes componentes 1-Wire

Es un microcircuito encapsulado en un encerramiento de acero


inoxidable de 16 milmetros de dimetro con forma de batera.
Este microcircuito se comunica con el exterior a travs del
protocolo de comunicaciones 1-Wire desarrollado por Dallas
Semiconductor. El fabricante ha desarrollado gran cantidad de
iButtons con diferentes funciones, para satisfacer a un gran
nmero de aplicaciones. Los iButton pueden contener: Seriales
nicos de identificacin, Memorias (Eprom, EEprom, NVRAM),
Reloj en tiempo Real, Sensores de Temperatura, "Data
Loggers", y circuitos especiales para la encriptacin de
informacin.

iButton
Protocolo 1-Wire de Dallas Semiconductor








www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 173
Podemos describir al protocolo 1-Wire como una secuencia de transacciones de informacin, la
cual, se desarrolla segn los siguientes pasos:

(1) Inicializacin
(2) Comandos y funciones de ROM
(3) Comandos y funciones de Memoria
(4) Transacciones de bytes (datos)

INICIALIZACION:
Escribiendo
un uno (1)
en la lnea
Escribiendo
un cero (0)
en la lnea
Tiempo de
recuperacin
La cada sincroniza a cada bit
Comienzo del
prximo bit
Comienzo del
prximo bit
15 us Mx.
60 us. Slot Activo
Pulsos de
RESET y
Presencia
Los Esclavos, si hay, bajan la
lnea a (0). Indicando presencia.
El Master baja la lnea a (0)
realizando un RESET 480 us.
Secuencia de RESET y Presencia
RESET
PRESENCIA
La Inicializacin, comienza con un pulso de RESET generado por el MASTER, seguido por los pulsos
de presencia, si hay, dispositivos en la lnea.

Figura No. 16.2. Diferentes


secuencias encontradas en
comunicaciones 1-Wire.
Protocolo 1-Wire de Dallas Semiconductor

Comando Valor ( Hex) Accin
Read ROM $33
Lee la Identificacin del dispositivo (64 bits). Este coman-
do slo se puede utilizar cuando existe slo un dispositi_
vo esclavo en la RED.
Match ROM $55
Este comando, seguido de la identificacin de 64 bits, per_
mite seleccionar a un dispositivo en particular en la RED.
Skip ROM $CC
Selecciona a un dispositivo sin necesidad de enviarle la
identificacin de 64 bits, pero slo funciona cuando hay
slo un dispositivo en la RED.
Search ROM $F0
Lee todos los 64 bits de identificacin de todos los dispo_
sitivos conectados en la RED. Un proceso de eliminacin
es utilizado para distinguir a cada dispositivo.








www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 174
Estos comandos y funciones ROM, son utilizados para direccionar al dispositivo. Los mismos son:

Comandos y funciones de ROM:


Figura No. 16.3. Diferentes
Comandos de ROM para
una RED 1-Wire.
Comandos y funciones de Memoria:
Finalmente, las transacciones de bytes (datos) son utilizadas para leer o escribir datos en el
dispositivo 1-Wire. La lectura de los datos est acompaada por la generacin de un pequeo pulso
que forza a la lnea al estado bajo por 15 microsegundos, el flanco de bajada activa la captura del
dato. La escritura de los datos est acompaada por la generacin de un pequeo pulso de ancho
variable dependiendo de lo que se est escribiendo (0,1) y debe durar al menos 60 microsegundos.
Ver figura No. 16.2
Transacciones de bytes (datos)
Estos comandos y funciones de memoria, permiten al Maestro direccionar una localizacin especfica
de memoria en un dispositivo esclavo. Ver especificaciones de cada dispositivo en particular.
Figura No. 16.4.
Identificacin de un
iButton, de Dallas
Semiconductor.
YYWW = Ao, Semana ZZZZ = No. de Parte
CC = CRC XXX = 001 - FFF Cdigo del Cliente,
SSSSSSSSSSSS = 12 Digitos Hex. Serial Informacin Adicional:
RR = Empaque F5: Empaque 5 mm de profundidad
FF = Cdigo de la Familia F3: Empaque 3 mm de profundidad
Protocolo 1-Wire de Dallas Semiconductor

Mode 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
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 175
El BASIC Stamp, tiene dos comandos destinados a la comunicacin serial asncrona con protocolo
1-Wire, los cuales son:

OWIN Pin, Mode, [InputData]


OWOUT Pin, Mode, [OutputData]
Pin:
Es una variable, constante o expresin (0-15) que especifica en cual pin de entrada
o salida se realizar la recepcin o transmisin 1-Wire.

Es una variable, constante o expresin del (0-15) que especifica el modo como se
har la transferencia de datos (modo bytes o bits) y el lugar que ocupar el RESET
en la transmisin.

Es una lista de variables y modificadores de formatos que le indican al comando


OWIN como almacenar los datos recibidos en las variables, interpretando los datos
de entrada como texto (decimal, binario o hexadecimal), esperar por una secuencia
fija o variable de bytes de entrada, o ignorar un nmero especifico de bytes.

Es una lista de variables, constantes, expresiones y modificadores de formatos que


le indican al comando OWOUT que formato tendrn los bytes de salida. OWOUT
puede transmitir datos en forma individual y en repeticiones, convirtiendo los datos
de salida en (decimal, binario, hexadecimal o texto), enviar una secuencia fija o
variable de bytes de datos o transmitir un "string" de datos desde un arreglo de
variable.

En las figuras del captulo 14, nmeros 14.3, 14.4 y 14.5 se describen los
modificadores de formato para los comandos I2CIN y I2COUT. Estos modificadores
se utilizan igualmente para los comandos OWIN y OWOUT con las mismas
propiedades y sin ningn tipo de restriccin.

Mode:
InputData:
OutputData:
Figura No. 16.5.
Diferentes valores
que puede tomar el
argumento Mode.
Protocolo 1-Wire de Dallas Semiconductor



www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 176
(1) BASIC Stamp 2p (BS2p)
(1) Plaqueta de Educacin NX-1000
(3) Pulsadores con resistencia de pullup de 220 Ohm
(1) iButton DS1971
(1) Base iButton DS9092
(1) Resistencia 4.7 KOhm, 1/4 Watt
(2) LED's color Rojo.
(1) LCD 2x16. Pantalla de cristal lquido
(1) Buzzer
(1) Set de Cables de Conexin.
(1) Programa editor de BASIC Stamp II

Para ste experimento usted


necesitar lo siguiente:
Constryalo!
Figura No. 16.6. Esquema de conexiones del circuito para realizar una comunicacin
serial asncrona bajo el protocolo 1-Wire de Dallas Semiconductor.
Protocolo 1-Wire de Dallas Semiconductor

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 177
Cada microcircuito 1_Wire, tiene sus propias caractersticas dependiendo de la funcin para la cual
fue diseado, sin embargo, hay muchos comandos y funciones de memoria ROM que comparten en su
totalidad. Estudiar como trabaja la RED 1_Wire, es un gran adelanto, para conocer como direccionar
y trabajar con un componente en particular. En ste captulo hemos escogido trabajar con el DS1971,
no es ms que un iButton, con una memoria EEprom de 256 bits encapsulado en un empaque tipo F3.
Este iButton es muy utilizado en aplicaciones para el control de acceso de personas a diversas
instalaciones como por ejemplo: edificios, estacionamientos, activacin o desactivacin de puertas
automticas, etc. Y sto es lo que hemos desarrollado; una aplicacin donde usted podr ver la
identificacin de su DS1971 y tener la posibilidad de escribir y mostrar informacin contenida en la
memoria EEprom interna del dispositivo. Igualmente, usted podr programar una pequea pero muy
ilustrativa aplicacin para el control de acceso no autorizado. En la figura No. 16.8. se muestran los
diagramas de flujo de la presente aplicacin.
Figura No. 16.7. Fotografa del circuito de la figura No. 16.6, montado en la protoboard.
Protocolo 1-Wire de Dallas Semiconductor







www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 178
Figura No. 16.8. Diagramas de flujo para la aplicacin del Protocolo de comunicaciones
1-Wire de Dallas Semiconductor. Programa PL16_1R0.bsp
INICIO
Definicin de Constantes y Variables
Inicializar Variables
InitLCD
A
Mostrar en LCD
PROTOCOLO 1-WIRE
1_SET 2_EP 3_CNT
Presionaron
a D6 ?
SI
SI
SI
DS1971_
MEMO
Guardar
Serial
Control
DS1971_
MEMO
Control
RUN 2
RUN 1
FIN
FIN
InitLCD
Inicializar pantalla LCD
RETURN
Presionaron
a D7 ?
Presionaron
a D5 ?
Protocolo 1-Wire de Dallas Semiconductor











www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 179
Guardar
Serial
Mostrar en LCD, PRESENTAR 1-Wire
Mostrar en LCD, EN BASE DEL DS1971
Device_Check
Hay
Presencia ?
Leer el SERIALy almacenarlo
en RomData
Familia
es 14 ?
NO
NO
Mostrar en LCD, DS1971 ENCONTRADO
y el SERIAL
Emitir un "bip"
Guardar el SERIAL Ledo en la
Memoria EEprom del BS2p
Mostrar en LCD
GUARDANDO EN EEPROM
A
Device_Check
Comando
Search ROM
Leer la RED 1-Wire
Asignar a variable DevCheck.bit1 y
DevCheck.bit0
RETURN
Protocolo 1-Wire de Dallas Semiconductor
























www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 180
Definicin de Constantes y Variables
INICIO
Limpiar pantalla LCD
Mostrar en LCD
Leer/Esc DS1971
1_Le 2_Es 3_Mpri
Escribir
DS1971
Principal
SI
SI
SI
Figura No. 16.9. Diagramas de flujo para la aplicacin del Protocolo de comunicaciones
1-Wire de Dallas Semiconductor. Programa DS1971.bsp
Presentar en LCD, PRESENTAR 1-WIRE
Presentar en LCD, EN BASE DEL DS1971
Device_Check
Hay
Presencia ?
NO
Leer memoria del DS1971
Almacenar el valor en EEpromData\16
Emitir un "bip"
Mostrar en LCD, EL TEXTO ES
Mostar en LCD, EEpromData\16
Pausa de 3 Segundos
Presionaron
a D7 ?
Presionaron
a D5 ?
Presionaron
a D6 ?
Protocolo 1-Wire de Dallas Semiconductor






















www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 181
Escribir
DS1971
Mostar en LCD, ESPERANDO TEXTO
Limpiar pantalla del DEBUG
DEBUG HOME
Enviar a la pantalla DEBUG,
Mensaje con TEXTO
Esperar Texto de la Pantalla DEBUG,
y almacenarlo en EEpromData\16
Emitir un "bip"
Hay
Presencia ?
SI
Emitir un "bip" tono agudo
Emitir un "bip", tono grave
Enviar a la pantalla DEBUG
Mejore la Conexin
Enviar a la pantalla DEBUG
NO Mueva al DS1971
Enviar a la pantalla DEBUG
Escribiendo el DS1971
Pausa de 15 milisegundos
Emitir un "bip"
Escribir en la Memoria EEprom del
DS1971 EEpromData\16
Enviar a la pantalla DEBUG
Mostrando TEXTO, y mostarlo en LCD
Emitir un "bip"
Enviar a la pantalla DEBUG
Escritura completa del DS1971
Pausa de 3 segundos
RUN 0
Protocolo 1-Wire de Dallas Semiconductor




www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 182
Definicin de Constantes y Variables
INICIO
LED Autorizado = OFF
LED NoAutorizado = OFF
Mostrar en LCD, PRESENTAR 1-Wire
Mostrar en LCD, EN BASE DEL DS1971
Leer memoria EEprom del
DS1971
Device_Check
Hay
Presencia ?
Familia
es 14 ?
Leer SERIAL del DS1971
Serial =
Almacenado?
NO
NO
NO
Autorizado
No
Autorizado
Figura No. 16.9. Diagramas de flujo
para la aplicacin del Protocolo de
comunicaciones 1-Wire de Dallas
Semiconductor. Programa Con_
trol .bsp
Protocolo 1-Wire de Dallas Semiconductor



www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 183
Autorizado
No
Autorizado
Mostrar en LCD, NO_AUTORIZADO
Mostrar en LCD, AUTORIZADO
Emitir un "bip" Emitir un "bip"
LED NoAutorizado = ON LED Autorizado = ON
Pausa 3 Segundos Pausa 3 Segundos
RUN 0
RUN 0
FIN FIN
LED Autorizado = OFF LED NoAutorizado = OFF
STORE ProgramSlot
Es una funcin del BASIC Stamp 2p, la cual, indica que bloque de programacin (0..7) se utilizar
para las funciones de Lectura y/o Escritura de la memoria EEprom. ProgramSlot entonces, puede ser
una variable, constante o expresin (0..7). El comando STORE permite que un programa accese
todas las localizaciones de memoria EEprom de un BASIC Stamp 2p, no importando en cual bloque
de programacin se encuentre. Por defecto, el bloque de programacin para las instrucciones de
lectura y escritura son el mismo donde se ejecuta el programa, sin embargo, ste puede cambiar con
un comando STORE, permaneciendo as hasta que otro comando STORE modifique su valor.
Protocolo 1-Wire de Dallas Semiconductor

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 184
'{$STAMP BS2p,DS1971,Control}
'Programa: PL16_1R0.bsp
'Protocolo 1-Wire de Dallas Semiconductor

'********************** Definicin de Variables y Constantes **************************

OW_NRBB CON 0 ' MODO(0) = No Reset , Byte, Baja velocidad


OW_RABB CON 1 ' MODO(1) = Reset Antes , Byte, Baja velocidad
OW_RDBB CON 2 ' MODO(2) = Reset Despus, Byte, Baja velocidad
OW_NRIB CON 4 ' MODO(4) = No Reset , Bit , Baja velocidad

OW_Pin CON 15 ' Pin de E/S para el 1-Wire
ReadROM CON $33 ' Comando 1-Wire para leer serial
SearchROM CON $F0 ' Comando 1-Wire para verificar si hay disp. en la RED
NoDevice CON %11 ' Indica que no hay dispositivos

I VAR BYTE ' Contador de bucle


RomData VAR BYTE(8) ' Arreglo de Bytes para guardar el serial
DevCheck VAR NIB ' Indica si hay o no dispositivos en la RED 1-Wire

PULS_D7 VAR Bit ' Pulsador D7


PULS_D6 VAR Bit ' Pulsador D6
PULS_D5 VAR Bit ' Pulsador D5

D7 CON 14 ' D7 estar conectado al Pin P14


D6 CON 13 ' D6 estar conectado al Pin P13
D5 CON 12 ' D5 estar conectado al Pin P12

PIN_Tono CON 11 ' PIN de conexin al buzzer

'************************* Definicin Constantes LCD *********************************

WakeUp CON %00110000 ' Despierta al LCD


FourBitMode CON %00100000 ' Modo de Datos (4 Bits)
TwoLine5x8Font CON %00101000 ' LCD a 2 lneas, letra tipo 5x8
DisplayOff CON %00001000 ' Apaga el LCD, retiene los datos
DisplayOn CON %00001100 ' Enciende el LCD sin cursor
IncCrsr CON %00000110 ' El cursor se incrementa sin desplaz. al LCD
ClearDisplay CON %00000001 ' Se limpia el LCD
MoveCrsr CON %10000000 ' Mueve el cursor
HomeCrsr CON %00000010 ' Lleva el Cursor al Home

'**************************** Programa Principal *************************************

Initializar:
Pause 500 ' Espera inicial por el LCD
PULS_D7 = 0 ' Estado Inicial del pulsador 1
PULS_D6 = 0 ' Estado Inicial del pulsador 2
PULS_D5 = 0 ' Estado Inicial del pulsador 3
GOSUB InitLCD ' Inicializa la pantalla LCD

Principal:
DEBUG CLS ' Limpia la pantalla del DEBUG
LCDOUT 0,ClearDisplay,["PROTOCOLO 1-Wire"] ' Muestra en LCD PROTOCOLO 1-Wire
LCDOUT 0,MoveCrsr+64, ["1_SET 2_EP 3_CNT"] ' Muestra en LCD 1_SET 2_EP 3_CNT
PAUSE 500

Progrmelo!
Protocolo 1-Wire de Dallas Semiconductor

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 185
SELEC_0:
BUTTON D7,0,255,0,PULS_D7,1,GUARDAR_SERIAL ' Si Pulsaron a D7 -> Va a GUARDAR_SERIAL
BUTTON D6,0,255,0,PULS_D6,1,DS1971_MEMO ' Si Pulsaron a D6 -> VA a DS1971_MEMO
BUTTON D5,0,255,0,PULS_D5,1,CONTROL ' Si Pulsaron a D5 -> VA a CONTROL
GOTO SELEC_0

GUARDAR_SERIAL:
LCDOUT 0,ClearDisplay,["PRESENTAR 1-WIRE"] ' Muestra en LCD PRESENTAR 1-WIRE
LCDOUT 0,MoveCrsr+64, ["EN BASE DEL 1971"] ' Muestra en LCD EN BASE DEL 1971
PAUSE 500

GOSUB Device_Check ' Verifica Presencia en la RED


IF (DevCheck <> NoDevice) AND (DevCheck.Bit1 XOR DevCheck.Bit0) THEN Get_ROM
GOTO GUARDAR_SERIAL ' Si no, contina buscando.

Get_ROM:
OWOUT OW_Pin,OW_RABB,[ReadROM] ' Enva un comando ReadROM a la RED
OWIN OW_Pin,OW_RDBB,[STR RomData\8] ' Lee el Serial del Dispositivo
IF (RomData(0) <> $14) THEN Get_ROM ' Compara la familia con el DS1971
LCDOUT 0,ClearDisplay,["DS1971 ENCONTRAD"] ' Muestra en LCD DS1971 ENCONTRAD

For I=7 to 0 Step 1 ' Bucle para mostrar el serial


LCDOUT 0,MoveCrsr+(78-(2*I)),[HEX2 RomData(I)]' del DS1971 en la Pantalla LCD
NEXT

FREQOUT Pin_TONO,1000,1000 ' Emite un "Bip" por 1 segundo


Pause 2000 ' Pausa de 2 segundos

FOR I=0 TO 7 ' Guarda en Memoria EEprom del BS2p


WRITE I,RomData(I) ' el Serial del Dispositivo DS1971
NEXT

LCDOUT 0,ClearDisplay,[" SERIAL DS1971 "] ' Muestra en LCD SERIAL DS1971
LCDOUT 0,MoveCrsr+64, ["GUARDADO @EEPROM"] ' Muestra en LCD GUARDADO @EEPROM
PAUSE 2000 ' Pausa de 2 segundos
GOTO Principal

DS1971_MEMO: ' Ejecuta el bloque de programacin


RUN 1 ' No. 01. Programa DS1971.bsp

CONTROL: ' Ejecuta el bloque de programacin


RUN 2 ' No. 02. Programa Control.bsp

GOTO Principal ' Va a principal



'******************************** Subrutinas ****************************************

InitLCD:
Pause 500 ' Pausa para la inicializacin LCD
LCDCMD 0,WakeUp ' Enva comandos para el LCD
Pause 10
LCDCMD 0,WakeUp ' Enva comandos para el LCD
Pause 1
LCDCMD 0,WakeUp ' Enva comandos para el LCD

Pause 1
LCDCMD 0,FourBitMode ' Convierte bus en modo 4 bits
LCDCMD 0,TwoLine5x8Font ' Ajusta LCD a 2 lneas de 5x8
LCDCMD 0,DisplayOff ' Apaga el display
LCDCMD 0,DisplayOn ' Enciende el display sin cursor
LCDCMD 0,IncCrsr ' Ajusta el LCD para auto_incremento
LCDCMD 0,ClearDisplay ' Limpia el display
RETURN

Device_Check:
DevCheck = 0
OWOUT OW_Pin,OW_RABB,[SearchROM] ' Hace una busqueda en la RED
OWIN OW_Pin,OW_NRIB,[DevCheck.Bit1,DevCheck.Bit0] ' Lee dos bit de presencia
RETURN

Protocolo 1-Wire de Dallas Semiconductor



www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 186
'{$STAMP BS2p}
'Programa: DS1971.bsp
'Protocolo 1-Wire de Dallas Semiconductor Continuacin

'********************** Definicin de Variables y Constantes **************************

OW_NRBB CON 0 ' MODO(0) = No Reset , Byte, Baja velocidad


OW_RABB CON 1 ' MODO(1) = Reset Antes , Byte, Baja velocidad
OW_RDBB CON 2 ' MODO(2) = Reset Despus, Byte, Baja velocidad
OW_NRIB CON 4 ' MODO(4) = No Reset , Bit , Baja velocidad

OW_Pin CON 15 ' Pin de E/S para el 1-Wire
ReadROM CON $33 ' Comando 1-Wire para leer serial
SkipROM CON $CC ' Comando 1-Wire para direccionar a 1 slo dispositivo
SearchROM CON $F0 ' Comando 1-Wire para verificar si hay disp. en la RED

WriteSp CON $0F ' Comando para Escribir en el ScratchPad del DS1971
ReadSP CON $AA ' Comando para Leer del ScratchPad del DS1971
CopySP CON $55 ' Comando para Copiar en la EEprom del DS1971
ReadMemory CON $F0 ' Comando para leer memoria del DS1971
Valid CON $A5 ' Comando para validar lecturas DS1971
NoDevice CON %11 ' No hay dispositivos

I VAR BYTE ' Contador de bucle


RomData VAR BYTE(8) ' Arreglo de Bytes para guardar el serial del DS1971
DevCheck VAR NIB ' Indica si hay o no dispositivos en la RED 1-Wire

PULS_D7 VAR Bit ' Pulsador D7


PULS_D6 VAR Bit ' Pulsador D6
PULS_D5 VAR Bit ' Pulsador D5

D7 CON 14 ' D7 estar conectado al Pin P14


D6 CON 13 ' D6 estar conectado al Pin P13
D5 CON 12 ' D5 estar conectado al Pin P12
PIN_Tono CON 11 ' PIN de conexin al buzzer

EEpromDATA VAR BYTE(16) ' Almacena lo que se escribir en la EEprom del DS1971
MoveTo CON 2 ' Usada para el comando DEBUG (posicin del cursor)

'************************* Definicin Constantes LCD *********************************

ClearDisplay CON %00000001 ' Se limpia el LCD


MoveCrsr CON %10000000 ' Mueve el cursor

'**************************** Programa Principal *************************************

DS1971:
LCDOUT 0,ClearDisplay,["Leer/Esc DS1971"] ' Muestra en LCD Leer/Esc DS1971
LCDOUT 0,MoveCrsr+64, ["1_Le 2_Es 3_Mpri"] ' Muestra en LCD 1_Le 2_Es 3_Mpri
PAUSE 500

SELEC_1:
BUTTON D7,0,255,0,PULS_D7,1,LEER_DS1971 ' Si Pulsaron a D7 -> Va a LEER_DS1971
BUTTON D6,0,255,0,PULS_D6,1,ESCRIBIR_DS1971 ' Si Pulsaron a D6 -> VA a ESCRIBIR_DS1971
BUTTON D5,0,255,0,PULS_D5,1,Principal ' Si Pulsaron a D5 -> VA a Principal
GOTO SELEC_1

LEER_DS1971:

LCDOUT 0,ClearDisplay,["PRESENTAR 1-WIRE"] ' Muestra en LCD PRESENTAR 1-WIRE
LCDOUT 0,MoveCrsr+64, ["EN BASE DEL 1971"] ' Muestra en LCD EN BASE DEL 1971
PAUSE 500

GOSUB Device_Check ' Verifica Presencia en la RED


IF (DevCheck <> NoDevice) AND (DevCheck.Bit1 XOR DevCheck.Bit0) THEN TEXTO
GOTO LEER_DS1971 ' Si no, contina buscando.

Protocolo 1-Wire de Dallas Semiconductor



www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 187
TEXTO:
OWOUT OW_Pin,OW_RABB,[SkipROM,ReadMemory,0] ' Comando SkipROM y Leer memoria
OWin OW_Pin,OW_NRBB,[STR EEpromData\16] ' Asigna a la variable el conte_
OWOUT OW_Pin,OW_RABB,[$FF] ' nido de la EEprom del DS1971
FREQOUT Pin_TONO,1000,1000 ' Emite un "Bip" por 1 segundo
LCDOUT 0,ClearDisplay,[" EL TEXTO ES "] ' Muestra en LCD EL TEXTO ES
LCDOUT 0,MoveCrsr+64, [STR EEpromData\16] ' Muestra en LCD "El TEXTO"
PAUSE 3000
GOTO DS1971

ESCRIBIR_DS1971:
DEBUG CLS ' Limpia la pantalla DEBUG
PAUSE 250 ' Pausa de 250 milisegundos

LCDOUT 0,ClearDisplay,["ESPERANDO TEXTO"] ' Muestra en LCD ESPERANDO TEXTO
LCDOUT 0,MoveCrsr+64, ["DESDE EL DEBUG"] ' Muestra en LCD DESDE EL DEBUG

DEBUG HOME ' Va al Inicio la la pantalla DEBUG


DEBUG " ------------------------------------",cr ' Se presenta el mensaje el la
DEBUG " MENU ESCRIBIR EN LA EEPROM DS1971 ",cr ' pantalla DEBUG...
DEBUG " ------------------------------------",cr
DEBUG " * Escriba un Texto de 16 Caracteres",cr
DEBUG " dentro de los parntesis. Este",cr
DEBUG " se guardar en la memoria EEprom",cr
DEBUG " del DS1971. Luego usted podr ver",cr
DEBUG " ste texto en la Pantalla LCD....",cr,cr
DEBUG "** Recuerde presionar firmemente el",cr
DEBUG " DS1971 sobre su base adaptadora.",cr
DEBUG " Hasta que no exista un correcto",cr
DEBUG " contacto usted oir un doble Bip,",cr
DEBUG " el cual,le indicar que tiene que",cr
DEBUG " mejorar el contacto .............",cr

DEBUG MoveTo,3,16,"Escriba Aqu = (" ' Se coloca el cursor Columna = 3
DEBUG MoveTo,35,16,")" ' Fila = 16 o (x,y) = 3,16 y se
DEBUG MoveTo,19,16 ' muestra Escriba Aqu = (

SERIN 16,240,[STR EEpromData\16] ' Se esperan por 16 Bytes.


FREQOUT Pin_TONO,1000,1000 ' Emite un "Bip" por 1 segundo

Presencia:
GOSUB Device_Check ' Verifica Presencia en la RED
IF (DevCheck <> NoDevice) AND (DevCheck.Bit1 XOR DevCheck.Bit0) THEN DETECTADO
FREQOUT PIN_Tono,100,800 ' Emite sonido tono bajo 100 ms
FREQOUT PIN_Tono,200,2000 ' Emite sonido tono agudo 200 ms
DEBUG MoveTo,3,18,"***** Mejore la Conexin *****",cr
PAUSE 500 ' Pausa de 500 milisegundos
GOTO Presencia


DETECTADO:
DEBUG MoveTo,3,18,"***** No Mueva al DS1971 *****",cr ' Presenta mensaje en P/DEBUG
DEBUG MoveTo,3,19,"Escribiendo el DS1971 ........",cr ' Presenta mensaje en P/DEBUG
FREQOUT Pin_TONO,500,3000 ' Emite un "Bip"

OWOUT OW_Pin,OW_RABB,[SkipROM,WriteSp,0,STR EEpromData\16] ' Escribe en ScracthPad


OWOUT OW_Pin,OW_RABB,[SkipROM,ReadSp ,0,STR EEpromData\16] ' Lee el ScratchPad
OWOUT OW_Pin,OW_RABB,[SkipROM,CopySp ,Valid] ' Copia el ScratchPad
HIGH OW_Pin ' Mantiene en alto el OW_Pin
PAUSE 15 ' Pa OWOUT OW_Pin,OW_RABB,[SkipROM,ReadMemory,0]
OWOUT OW_Pin,OW_RABB,[SkipROM,ReadMemory,0] ' Lee Memoria EEprom DS1971
OWin OW_Pin,OW_NRBB,[STR EEpromData\16] ' Asigna los datos al arreglo
OWOUT OW_Pin,OW_RABB,[$FF] ' EEpromData
DEBUG MoveTo,3,20,"Escritura Completa del DS1971.",cr ' Presenta mensaje P/DEBUG
FREQOUT Pin_TONO,500,3000 ' Emite un "Bip"
DEBUG MoveTo,3,21,"MOSTRANDO TEXTO EN LCD .......",cr
FREQOUT Pin_TONO,500,3000 ' Emite un "Bip"
Protocolo 1-Wire de Dallas Semiconductor

www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 188
LCDOUT 0,ClearDisplay,[" EL TEXTO ES "] ' Muestra en LCD EL TEXTO ES
LCDOUT 0,MoveCrsr+64, [STR EEpromData\16] ' Muestra en LCD "El TEXTO"
PAUSE 3000 ' Pausa de 3 segundos

Principal:
RUN 0 ' Ejecuta el programa en el Slot 0

'******************************** Subrutinas ****************************************

Device_Check:
DevCheck = 0
OWOUT OW_Pin,OW_RABB,[SearchROM] ' Hace una busqueda en la RED
OWIN OW_Pin,OW_NRIB,[DevCheck.Bit1,DevCheck.Bit0] ' Lee dos bit de presencia
RETURN

Protocolo 1-Wire de Dallas Semiconductor



www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 189
'{$STAMP BS2p}
'Programa: Control.bsp
'Protocolo 1-Wire de Dallas Semiconductor Continuacin

'********************** Definicin de Variables y Constantes **************************

OW_NRBB CON 0 ' MODO(0) = No Reset , Byte, Baja velocidad


OW_RABB CON 1 ' MODO(1) = Reset Antes , Byte, Baja velocidad
OW_RDBB CON 2 ' MODO(2) = Reset Despus, Byte, Baja velocidad
OW_NRIB CON 4 ' MODO(4) = No Reset , Bit , Baja velocidad

OW_Pin CON 15 ' Pin de E/S para el 1-Wire
ReadROM CON $33 ' Comando 1-Wire para leer serial
SearchROM CON $F0 ' Comando 1-Wire para verificar si hay disp. en la RED
NoDevice CON %11 ' No hay dispositivos

I VAR BYTE ' Contador de bucle


RomData VAR BYTE(8) ' Arreglo de Bytes para guardar el serial
EEpromDS1971 VAR BYTE(8) ' Almacena lo que se escribir en la EEprom del DS1971
DevCheck VAR NIB

PIN_Tono CON 11 ' PIN de conexin al buzzer

'************************* Definicin Constantes LCD *********************************

ClearDisplay CON %00000001 ' Se limpia el LCD


MoveCrsr CON %10000000 ' Mueve el cursor

'**************************** Programa Principal *************************************

INICIO:
STORE 0 ' Usa el Slot 0, para Read & Write
LOW 9 ' Led de "Autorizado" = OFF
LOW 10 ' Led de "NO Autorizado" = OFF

FOR I = 0 TO 7 ' Este bucle lee el serial del DS1971
READ I,EEpromDS1971(I) ' original que estaba guardado en la
NEXT ' memoria EEprom del BS2p. ..........

MENSAJE:
LCDOUT 0,ClearDisplay,["PRESENTAR 1-WIRE"] ' Muestra en LCD PRESENTAR 1-WIRE
LCDOUT 0,MoveCrsr+64, ["EN BASE DEL 1971"] ' Muestra en LCD EN BASE DEL 1971
PAUSE 500

GOSUB Device_Check ' Verifica Presencia en la RED


IF (DevCheck <> NoDevice) AND (DevCheck.Bit1 XOR DevCheck.Bit0) THEN Get_ROM
GOTO MENSAJE ' Si no, contina buscando.

Get_ROM:
OWOUT OW_Pin,OW_RABB,[ReadROM] ' Enva un comando ReadROM a la RED
OWIN OW_Pin,OW_RDBB,[STR RomData\8] ' Lee el Serial del Dispositivo
IF (RomData(0) <> $14) THEN MENSAJE ' Compara la familia con el DS1971
LCDOUT 0,ClearDisplay,["DS1971 ENCONTRAD"] ' Muestra en LCD DS1971 ENCONTRAD

FOR I = 0 TO 7 ' Verifica si el serial ledo


IF RomData(I) <> EEpromDS1971(I) THEN NoAutorizado ' es el mismo almacenado en la
NEXT ' memoria EEprom del BS2p

Protocolo 1-Wire de Dallas Semiconductor



www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 190
Autorizado:
LCDOUT 0,MoveCrsr+64, ["** AUTORIZADO **"] ' Muestra en LCD ** AUTORIZADO **
FREQOUT Pin_TONO,1000,1000 ' Emite un "Bip" por 1 segundo
HIGH 9 ' Led de "Autorizado" = ON
Pause 3000 ' Pausa de 5000 milisegundos
LOW 9 ' Led de "Autorizado" = OFF
RUN 0 ' Ejecuta el programa del Slot 0

NoAutorizado:
LCDOUT 0,MoveCrsr+64, ["*NO AUTORIZADO*"] ' Muestra en LCD *NO AUTORIZADO*
FREQOUT Pin_TONO,1000,500 ' Emite un "Bip" por 1 segundo
HIGH 10 ' Led de "NO Autorizado" = ON
Pause 3000 ' Pausa de 5000 milisegundos
LOW 10 ' Led de "NO Autorizado" = OFF
RUN 0 ' Ejecuta el programa del Slot 0

'******************************** Subrutinas ****************************************

Device_Check:
DevCheck = 0
OWOUT OW_Pin,OW_RABB,[SearchROM] ' Hace una busqueda en la RED
OWIN OW_Pin,OW_NRIB,[DevCheck.Bit1,DevCheck.Bit0] ' Lee dos bit de presencia
RETURN





Anexo "A" Pantalla LCD
Anexo"A". Pantallas LCD

Usando LCDs

Si bien los LEDs y los displays de siete segmentos son muy buenos como dispositivos de salida, habr
proyectos que requerirn proveer informacin ms compleja al usuario. Por supuesto, nada supera la
pantalla de video de una PC, pero estas son grandes, caras y casi siempre imprcticas para concretar
proyectos con MicroControladores. Los mdulos LCD de caracteres por otro lado, son ideales para
estas aplicaciones. Estos mdulos econmicos permiten imprimir salidas alfanumricas, usando muy
pocas lneas de E/S y muy poco esfuerzo del BASIC Stamp.

El BASIC Stamp 2P, dispone de tres instrucciones para el manejo de pantallas LCD (LCDCMD, LCDIN y
LCDOUT), las cuales, permiten trabajar directamente a un LCD compatible al controlador 44780
con: 1x16, 2x16 y 4x20 caracteres. En ste captulo, utilizaremos un LCD de 2 lneas de 16
caracteres cada una, LCD 2 x16. En la figura A-1, se muestra un esquema tpico de conexin del LCD.
BASIC Stamp BS2p
Valores Pin 0, 1, 8 or 9
I/O pin
Cuando el No.
de Pin es:
0 or 1
0 1 (Dependiendo del pin): LCD Habilitar Pin (E)
2: LCD Lectura/Escritura Pin (R/W)
3: LCD Seleccin de registro Pin (RS)
4 7: LCD Datos Pines (DB4 DB7, respectivamente)
I/O pin
Cuando el No.
de Pin es:
8 or 9
8 9 (Dependiendo del pin): LCD Habilitar Pin (E)
10: LCD Lectura/Escritura Pin (R/W)
11: LCD Seleccin de registro Pin (RS)
12 15: LCD Datos Pines (DB4 DB7, respectivamente
Nota: LCDCMD est diseado para trabajar en modo 4 bits


Tabla A-1: LCDCMD
LCDCMD Pi n, Comando
Pgina A - 2
Enva un comando a la pantalla LCD.

Pin: Puede ser una variable, constante o expresin (0 - 1 8 - 9) la cual especifica el Pin del BASIC
Stamp que se utilizar como entrada - salida (I/O).

Comando: Puede ser una variable, constante o expresin (0 - 255) tipo byte, el cual, contiene
el comando que se le enviar a la pantalla LCD.
Enva un comando a la pantalla LCD.

Pin:

Comando:
Anexo"A". Pantallas LCD



Figura A-1: Conexin tpica de una pantalla LCD.
Inicializacin

El LCD de caracteres debe ser inicializado antes de comenzar a enviarle informacin. Los proyectos
de ste libro inicializan el LCD de acuerdo con la especificacin del controlador Hitachi HD44780. El
controlador Hitachi es el que se encuentra comnmente y muchos otros controladores son
compatibles con l.



Pgina A - 3
'Inicializacin de una pantalla LCD. Esta subrutina se debe utilizar siempre que se desee
'utilizar una pantalla LCD. Escrbala como InitLCD.

InitLCD:
Pause 500 ' Pausa requerida para la inicializacin
LCDCMD 0,48 ' Enva comandos para despertar al LCD
Pause 10
LCDCMD 0,48 ' Enva comandos para despertar al LCD
Pause 1
LCDCMD 0,48 ' Enva comandos para despertar al LCD
Pause 1
LCDCMD 0,32 ' Convierte el bus de datos en modo 4 bits
LCDCMD 0,40 ' Ajusta el modo de operacin a 2 lneas de 5x8
LCDCMD 0,8 ' Apaga el display
LCDCMD 0,12 ' Enciende el display sin cursor
LCDCMD 0,6 ' Ajusta el display para auto incremento
LCDCMD 0,1 ' Limpia el display
RETURN
BASIC STAMP II!!
ROSO Electric S.
Anexo"A". Pantallas LCD
Modos de Operacin

Hay dos modos principales de operar con LCDs: enviar un caracter y enviar un comando. Cuando se
enva un caracter, la lnea RS est en estado alto y el dato enviado es interpretado como un caracter
que debe ser mostrado en la posicin actual del cursor. El caracter normalmente es enviado en
cdigo ASCII. Tambin se pueden enviar caracteres no ASCII al LCD, as como tambin hasta ocho
caracteres programables personalizados.

Los comandos se envan al LCD luego de poner en estado bajo la lnea RS. Hay varios comandos
estndar para controlar y manipular la pantalla LCD.

Command
(in decimal)
Description
Nulo 0 No realiza ninguna operacin
Limpiar LCD 1 Limpia la pantalla y lleva el cursor al inicio del LCD
Posicin 0 2 Mueve el cursor al inicio de la pantalla LCD
Inc. Cursor 6 Mueve el cursor a la DER. sin desplazar la pantalla
Pantalla Off 8 Apaga la pantalla LCD sin perder los datos
Pantalla On 12 Enciende la pantalla LCD sin cursor
Parpadea Cursor 13 Enciende la pantalla LCD con el cursor intermitente
Cursor bajo lnea 14 Enciende la pantalla LCD con el cursor bajo lnea
Cursor a la Izq. 16 Mueve el cursor un caracter a la izquierda
Cursor a la Der. 20 Mueve el cursor un caracter a la derecha
Desplaz. Izq. 24 Desplaza la pantalla LCD 1 caracter a la izquierda
Desplaz. Der. 28 Desplaza la pantalla LCD 1 caracter a la derecha
Moverse a la Dir.
RAM
64 + Direccin
Mueve el apuntador a la memoria RAM de caracteres
Moverse a la Dir.
RAM
128 + Direccin
Mueve el cursor para visualizar caracteres en RAM
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
16
80
39
103

Line 1:
Line 2:
On-screen positions* Off-screen positions*
2 x 16 Display
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
Line 1:
Line 2:
4 x 20 Display
Line 3:
Line 4:
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
16 17 18 19
80 81 83
36 37 38 39
100101102103
*Assuming the display is in the home position.
82
Figura A-2: Posiciones para cada
caracter dependiendo el tipo de
pantalla LCD utilizada.
Pgina A - 4
Tabla A-2: Comandos utiliza -
dos por las Pantallas LCD,
soportadas por el controlador
Hitachi 44780.
Lnea 1
Lnea 2
.......Posiciones dentro de la Pantalla ................ fuera .
Lnea 1
Lnea 2
Lnea 3
Lnea 4
LCD
LCD
EJEMPLO:

El Comando: LCDCMD 0, 128 + 66


mover el cursor de la pantalla LCD a la
tercera columna con la segunda lnea de la
pantalla LCD...
Anexo"A". Pantallas LCD


Cdigos de los Comandos Descripcin
7 6 5 4 3 2 1 0
Limpiar LCD 0 0 0 0 0 0 0 1
Limpia la pantalla y mueve el
cursor a la posicin 0
Posicin 0 0 0 0 0 0 0 1 0
Mueve el cursor y la pantalla
a la posicin 0
Modo de entrada 0 0 0 0 0 1 M S
Direccin del cursor (M: 0=Izq.,
1=Der.) desplaza la pantalla (S:
0=no desplaza, 1=desplaza)
Pantalla/Cursor 0 0 0 0 1 D U B
Pantalla on/off (D), Cusor bajo
lnea (U) y parpadeo del cursor
(B). (0=off, 1=on)
Desplaz. Pantalla
Desplaz. Cursor
0 0 0 1 C M 0 0
Desplaz. de la pantalla o cursor
0=cursor, 1=Pantalla) Izq. / Der.
(M: 0=Izq., 1=Derecha).
Funciones 0 0 1 B L F 0 0
Tamao Datos (B: 0=4-bits,
1=8-bits), No. de lneas (L:
0=1-lnea, 1=2-lines) Tamao de
la letra (F: 0=5x8, 1=5x10)
Moverse a la
Direccin de RAM
0 1 A A A A A A
Mueve apuntador de localidad RAM
especificada por la direccin (A)
Moverse a la
Direccin de RAM
1 A A A A A A A
Mueve el cursor a la localidad RAM
especificada por la direccin (A)





Los comandos mostrados en la Tabla A-2, no son los nicos comandos aplicables a las pantallas de
LCD, usted mismo puede construir un conjunto de comandos dependiendo de sus necesidades utili-
zando las especificaciones del fabricante, en ste caso, de Hitachi LCD 44780. En la Tabla A-3 se
describe como se pueden seleccionar las diferentes opciones de comandos.
Pgina A - 5
Tabla A-3: Cdigos para
diferentes comandos de
una pantalla LCD, con
un controlador compa -
tible con el controlador
LCD Hitachi 44780.
WakeUp CON %00110000 ' Despierta a la pantalla LCD
FourBitMode CON %00100000 ' Modo de Datos (4 Bits)
OneLine5x8Font CON %00100000 ' Pantalla LCD a 1 lnea, letra tipo 5x8
OneLine5x10Font CON %00100100 ' Pantalla LCD a 1 lnea, letra tipo 5x10
TwoLine5x8Font CON %00101000 ' Pantalla LCD a 2 lneas, letra tipo 5x8
TwoLine5x10Font CON %00101100 ' Pantalla LCD a 2 lneas, letra tipo 5x10
DisplayOff CON %00001000 ' Apaga la pantalla LCD, retiene los datos
DisplayOn CON %00001100 ' Enciende la pantalla LCD sin cursor
DisplayOnULCrsr CON %00001110 ' Enciende la pantalla LCD con el cursor bajo una lnea
DisplayOnBLCrsr CON %00001101 ' Enciende la pantalla LCD con el cursor parpadeando
IncCrsr CON %00000110 ' El cursor se incrementa sin desplazamiento de pantalla
IncCrsrShift CON %00000111 ' El cursor se incrementa con desplazamiento de pantalla a la Izq.
DecCrsr CON %00000100 ' El cursor se decrementa sin desplazamiento de pantalla
DecCrsrShift CON %00000101 ' El cursor se decrementa con desplazamiento de pantalla a la Der.
ClearDisplay CON %00000001 ' Se limpia la Pantalla LCD
HomeDisplay CON %00000010 ' El cursor y la pantalla LCD van a la posicin 0 ("HOME")
ScrollLeft CON %00011000 ' Desplazamiento de la pantalla LCD a la izquierda
ScrollRight CON %00011100 ' Desplazamiento de la pantalla LCD a la derecha
CrsrLeft CON %00010000 ' Mueve el cursor a la izquierda
CrsrRight CON %00010100 ' Mueve el cursor a la derecha
MoveCrsr CON %10000000 ' Mueve el cursor a la posicin (X)
MoveToCGRAM CON %01000000 ' Mueva la CGRAM a la posicin (x)

Comandos definidos como Constantes para la Pantalla LCD


Anexo"A". Pantallas LCD

LCDOUT Pi n, Comando, [Dat os]
Convert i dores de Format o y Modi f i cadores
BASIC Stamp Programming Manual 2.0c www.parallaxinc.com Page 173

Formato de
Conversin
Tipos de Nmeros Notas
DEC{1..5} Decimal, fijo de 1-5 digitos 1
SDEC{1..5} Decimal con signo, fijo de 1 5 digitos 1,2
HEX{1..4} Hexadecimal, fijo de 1 4 digitos 1
SHEX{1..4} Hexadecimal con signo, fijo de 1 4 digitos 1,2
IHEX{1..4} Hexadecimal, fijo de 1 4 digitos con el prefijo ($) 1
ISHEX{1..4} Hexadecimal con signo, fijo de 1 4 digitos con el prefijo ($) 1,2
BIN{1..16} Binario, fijo de 1 16 digitos 1
SBIN{1..16} Binario con signo, fijo de 1 16 digitos 1,2
IBIN{1..16} Binario, fijo de 1 - 16 digitos, con el prefijo (%) 1
ISBIN{1..16} Binario con signo, fijo de 1 - 16 digitos, con el prefijo (%) 1,2
1 El formato fijo, como el DEC4, llenar de ceros la variable si es necesario, Por ejemplo: DEC4 65 enva el
nmero 0065. Si el No. es mayor que los digitos especificados en el formato, el nmero enviado ser igual
a los digitos menos significativos permitidosen el formato. Ex. DEC4 56422 enviar 6422.
2 Los Convertidores de Formato trabajan bajo las reglas de complemento a dos.

Modificador Accin realizada
STR ByteArray {\L}
Enva una cadena de caracteres desde un arreglo. El argumen-
to {\L} , puede ser utilizado para limitar la salida de caracteres.
De otra manera, los caracteres se enviarn hasta encontar el
primer cero, o cuando se alcance el espacio en RAM
REP Byte \L
Enva una cadena de repeticiones del byte \L, es el No. de veces
que se repite. (ex: REP "X" \10 enva ("XXXXXXXXXX"

command. To do this, simply use 0 for the Command argument, as in:
Tabla A-5: Modificadores
de Formato.

Tabla A-4: Convertidores de
Formato.

Pgina A - 6
Enva datos a la pantalla LCD.

Pin: Puede ser una variable, constante o expresin (0 - 1 8 - 9) la cual especifica el Pin del BASIC
Stamp que se utilizar como entrada - salida (I/O).

Comando: Puede ser una variable, constante o expresin (0 - 255) tipo byte, el cual, contiene
el comando que se le enviar a la pantalla LCD.

Datos: Una lista de variables, constantes, expresiones con su modificador que le indica a la pantalla
los datos y el formato con que se quieren visualizar. LCDOUT, puede transmitir bytes indivi-
duales o repeticin de bytes, puede convertir los valores de los datos a decimal, hex o
binario. Se pueden transmitir tambin, una cadena de texto, o transmitir una cadena de los
bytes pertenecientes a un vector o matriz (Arreglo de bytes).
Enva datos a la pantalla LCD.

Pin:

Comando:

Datos:




Anexo"A". Pantallas LCD

Pgina A - 7
Por fin !!! Vamos a Programar un LCD.
'{$STAMP BS2p}
'Programa: LDCDEMO.bs2
'Visualizacin en una pantalla LCD

'********* Definir las constantes del LCD a Utilizar y variables del programa *******
WakeUp CON %00110000 ' Despierta a la pantalla
FourBitMode CON %00100000 ' Modo de Datos (4 Bits)
TwoLine5x8Font CON %00101000 ' Pantalla a 2 lneas, letra tipo 5x8
DisplayOff CON %00001000 ' Apaga la pantalla, retiene los datos
DisplayOn CON %00001100 ' Enciende la pantalla sin cursor
IncCrsr CON %00000110 ' El cursor se incrementa sin desplazamiento de pantalla
ClearDisplay CON %00000001 ' Se limpia la Pantalla
MoveCrsr CON %10000000 ' Mueve el cursor a la posicin (X)
ScrollLeft CON %00011000 ' Desplazamiento de la pantalla a la izquierda
ScrollRight CON %00011100 ' Desplazamiento de la pantalla a la derecha
i VAR Byte ' Variable de Bucle
Valor CON 32 ' Valor constante para visualizarlo

'*********************** Inicializacin de la pantalla LCD *************************


Init:
Pause 500
GOSUB InitLCD

Principal:
LCDOUT 0,ClearDisplay,["BASIC STAMP II!!"] ' Visualiza BASIC STAMP II!!
LCDOUT 0,MoveCrsr+64, ["ROSO ELECTRIC S."] ' Visualiza ROSO ELECTRIC S.
Pause 1000 ' espera un segundos
For i = 0 to 15
LCDCMD 0,ScrollLeft ' Desplazamiento de la pantalla
Pause 250 ' a la izquierda
Next

For i = 0 to 15
LCDCMD 0,ScrollRight ' Desplazamiento de la pantalla
Pause 250 ' a la derecha
Next

Pause 1000

For i = 1 to 2
LCDCMD 0, DisplayOff ' Apaga la pantalla
Pause 300
LCDCMD 0, DisplayOn ' Enciende la pantalla
Pause 300
Next

Pause 1000
LCDCMD 0,ClearDisplay ' Se limpia la Pantalla
LCDOUT 0,0,["Valor = ",DEC Valor," DEC"] ' Visualiza Valor = 32 DEC
LCDOUT 0,MoveCrsr+64,["Valor = ",HEX Valor," HEX"] ' Visualiza Valor = 20 HEX
Pause 4000
GOTO Principal

'*********************************** Subrutinas **********************************

InitLCD:
Pause 500 ' Pausa requerida para la inicializacin
LCDCMD 0,WakeUp ' Enva comandos para despertar al LCD
Pause 10
LCDCMD 0,WakeUp ' Enva comandos para despertar al LCD
Pause 1
LCDCMD 0,WakeUp ' Enva comandos para despertar al LCD
Pause 1
LCDCMD 0,FourBitMode ' Convierte el bus de datos en modo 4 bits
LCDCMD 0,TwoLine5x8Font ' Ajusta el modo de operacin a 2 lneas de 5x8
LCDCMD 0,DisplayOff ' Apaga el display
LCDCMD 0,DisplayOn ' Enciende el display sin cursor
LCDCMD 0,IncCrsr ' Ajusta el display para auto incremento
LCDCMD 0,ClearDisplay ' Limpia el display
RETURN




Anexo "B" Pantalla de LED's 4 x 7 Segmentos
Anexo "B" Pantalla de LED's 4 x 7 Segmentos


Pgina B - 2
LED's de 7 Segmentos
Uno de los componentes ms utilizados como elemento de visualizacin es el LED's de 7 Segmentos.
En realidad, los LED's de 7 Segmentos no son ms que arreglos de LED's dispuestos en el interior de
un contenedor plstico con forma de digito. Al energizar cualquier segmento (LED) se visualizar una
parte del nmero a la vez. En el captulo 7, se realiz una conversin A/D y se mostr el resultado en
la pantalla DEBUG del computador, ahora, usted podra utilizar ste elemento de visualizacin para
mostrar el resultado de la conversin A/D en una pantalla de LED's de 4 x 7 Segmentos.
Figura B-1: Esquema de conexiones elctricas para implementar un
Voltmetro digital con pantalla de LED's de 7 Segmentos.

8888
Anexo "B" Pantalla de LED's 4 x 7 Segmentos
Pgina B - 3
Constryalo!
Para ste experimento usted
necesitar lo siguiente:
(1) BASIC Stamp 2p (BS2p)
(1) Plaqueta de Educacin NX-1000
(1) Convertidor A/D ADC 0831
(1) Pantalla de 4 LED's X 7 Segmentos
(1) Set de Cables de Conexin.
(1) Programa editor de BASIC Stamp II

Figura B-2: Montaje en la Protoboard del circuito de la figura B-1.



Anexo "B" Pantalla de LED's 4 x 7 Segmentos
Pgina B - 4
'{$STAMP BS2p}
'Programa: 7SEG_DEMO.bsp
'Seal de Salida Digital con LED's de 7 SEGMENTOS.
'Construccin de un voltmetro digital con Pantalla de LED's

'******************** Declaracin de Variables y Constantes ***************************

CS CON 12 ' AD0831.1 Pin de CHIP SELECT del AD0831


CLK CON 15 ' AD0831.7 Pin de CLOCK del AD0831
D0 CON 14 ' AD0831.6 Pin de DATA del AD0831

VALOR VAR WORD ' Valor de la conversin A/D del AD0831


ENTERO VAR BYTE ' Valor entero de la conversin A/D
DECIMAL VAR BYTE ' Valor decimal de la conversin A/D
R VAR BYTE ' Variable utililizada en la conv. A/D
CENTESIMAS VAR BYTE ' Variable utililizada en la conv. A/D

OUT_SEGM VAR OutL ' Salida P0 a P7, Ilumina a los Segmentos de LED's
OUT_DIGTVAROutC ' Salida P8 a P11, Selector de Digitos
OUT_PDECCON%10000000 ' Salida del punto Decimal

DIGITOVARNib ' Variable que define el No. del digito a mostrar

' .abcdefg ' Datos almacenados en memoria EEprom


' --------
DIG_DECMDATA %01111110 ' 0 Datos para representar al No. 0
DATA %00110000 ' 1 Datos para representar al No. 1
DATA %01101101 ' 2 Datos para representar al No. 2
DATA %01111001 ' 3 Datos para representar al No. 3
DATA %00110011 ' 4 Datos para representar al No. 4
DATA %01011011 ' 5 Datos para representar al No. 5
DATA %01011111 ' 6 Datos para representar al No. 6
DATA %01110000 ' 7 Datos para representar al No. 7
DATA %01111111 ' 8 Datos para representar al No. 8
DATA %01111011 ' 9 Datos para representar al No. 9

'******************************** Programa Principal **********************************

Initialize:
DirL = %11111111 ' Define P0 a P7 como Pines de Salidas
DirC = %1111 ' Define P8 a P11 como Pines de Salidas
OUT_DIGT = %1111 ' Apaga a todos los digitos

PRINCIPAL

GOSUB LEER_VOLTS ' Subrutina para leer el Voltaje


Valor = (Entero*100) + Decimal ' Clculo del valor entero + decimal
GOSUB MOSTRAR_VALOR ' Subrutina para mostrar en pantalla
GOTO PRINCIPAL

'************************************ SUB_RUTINAS ************************************

LEER_VOLTS:
HIGH CS ' Habilita al AD0831
LOW CS ' Arranca la Conversin A/D
LOW CLK ' Coloca el resultado en Binario
PULSOUT CLK,210 ' en la Variable AD_Bits
SHIFTIN D0,CLK,msbpost,[VALOR\8]

Anexo "B" Pantalla de LED's 4 x 7 Segmentos



Pgina B - 5

ENTERO = 5 * VALOR / 255 ' Calcula el Valor Entero


R = 5 * VALOR // 255 ' Calcula el Valor Decimal
DECIMAL = 100 * R / 255
CENTESIMAS = 100 * R // 255
CENTESIMAS = 10 * CENTESIMAS / 255
IF CENTESIMAS < 5 then salte_a_linea
DECIMAL = DECIMAL + 1
salte_a_linea:
IF DECIMAL < 100 then salte_a_todo
ENTERO = ENTERO + 1
DECIMAL = 0
salte_a_todo:
RETURN

MOSTRAR_VALOR:
OUT_SEGM = %00000000 ' Limpia todos los LED's
LOOKUP DIGITO,[%1110,%1101,%1011,%0111],OUT_DIGT ' Ubica el valor del Digito
READ (DIG_DECM + (VALOR DIG DIGITO)),OUT_SEGM ' Lee de EEprom el Digito
IF (DIGITO <> 2) THEN SkipDP ' Si el Digito es <> 2 va a SkipDP
OUT_SEGM = OUT_SEGM + OUT_PDEC ' Coloca el Punto decimal

SkipDP:
DIGITO = (DIGITO + 1) //4 ' Escoge el prximo digito
RETURN




Anexo "C" StampPlot
Anexo "C". StampPlot

Los datos del BASIC Stamp se procesan en una de cuatro formas por la aplicacin:

Valores Analgicos

Cualquier cadena que se enve que comience con un valor numrico ser procesada y graficada como un valor
analgico.

Debug DEC 100, 13 ' Grafica el nmero 100

Valores Digitales

Cualquier cadena que comience con un '%' se procesar como valor digital. Un dibujo digital separado ser
comenzado por cada valor binario de la cadena. Por ejemplo, "%1001" dibujar cuatro valores digitales. Se
pueden enviar hasta 9-bits. Una vez que se iniciaron los grficos digitales, debe tenerse precaucin en enviar
siempre la misma cantidad de bits dado que los grficos dependen del orden y la posicin.

Debug IBIN4 INC,13 ' Grafica 4 valores digitales

Configuracin de Control

Toda cadena que comience con '!' ser procesada como configuracin de control. La configuracin de la
aplicacin puede controlarse desde el BASICStamp usando valores y palabras de control especficas, si es
necesario.

Debug "!AMAX 200",13 ' Configura mximo analgico del grfico = 200
Debug "!RSET",13 ' Reinicia el grfico

Otras cadenas

El resto de las cadenas simplemente se agregar al recuadro de mensajes.

Debug "Hola Mundo!",13

Note que cada ingreso de datos DEBEterminar con un retorno de carro data (13 o CR).
Pgina C - 2
Anexo "C". StampPlot

Los pasos para usar programas del BASIC Stamp con StampPlot son los siguientes:

1. Inicie StampPlot haciendo clic en Inicio/Programas/StampPlot/StampPlot.
2. Ingrese y ejecute su programa en el BASIC Stamp usando el editor del BASIC Stamp.
3. Cierre la ventan debug azul del BASIC Stamp presionando el botn close.
4. Algunos programas pueden requerir que reinicie el BASIC Stamp para tomar la configuracin inicial.
Hgalo presionando el botn Reset de la plaqueta NX-1000.
5. Antes de descargar (ejecutar) otro programa en el BASIC Stamp, asegrese de destildar la casilla
'Connect' del StampPlot o su puerto COM ser bloqueado por el StampPlot.

El graficador adquirir los datos digitales y analgicos y los almacenar temporalmente para que puedan ser
reajustados o desplazados por la pantalla. La cantidad de puntos de datos recogidos es ajustable. Una vez
que los puntos llegan a la cantidad mxima, el graficador puede detenerse o reiniciarse.

El siguiente programa realizar algunos ajustes de configuracin, graficar en forma continua y mostrar el
valor de X en el StampPlot, dibujando sus cuatro bits digitales. Ingrese el programa y use los pasos de arriba
para probarlo con el StampPlot.


Pgina C - 3
'{$STAMP BS2p}
'Programa: StampPlot.bsp
'Configuracin del programa Stamp Plot.

Pause 500 ' Pausa Corta de 500 milisegundos


DEBUG "!RSET", CR ' RESET
DEBUG "!SPAN 0, 50", CR ' Rango del valor analgico
DEBUG "!TSMP ON", CR ' Activar temporizador en los mensajes
DEBUG "!TMAX 60", CR ' Configura grfico en 60 seg mximo
DEBUG "!RSET", CR ' Reinicializa el grfico

x VAR Byte ' Variable contador

Bucle:
DEBUG "Comenzando el Bucle", CR ' Mensaje de visualizacin
For x = 0 to 15 ' Bucle for - Next
DEBUG DEC x, CR ' Grafica el valor analgico de x
DEBUG IBIN4 x, CR ' Grafica el valor digital de x
DEBUG "!USRS El valor de x es: ", DEC x, CR
Pause 200 ' Visualiza el valor de x
Next
GOTO Bucle

Anexo "C". StampPlot



Abajo se muestra un ejemplo obtenido con StampPlot y el programa anterior.






Pgina C - 4
Men Principal
Barra de Herramientas
Valor mn, mx del eje "Y"
Variables de entrada
Valor mx del eje "X"
Variable analgica
Variables digitales
Ventana de Texto
Figura C-1: Fotografa del programa Stamp Plot.
Anexo "C". StampPlot



Controles del BASIC Stamp y Comandos de Configuracin

La mayora de los controles y configuracin del grfico pueden ajustarse desde el programa del BASICStamp.
Para usar estos comandos, simplemente colquelos en un comando debug desde BASICStamp. Todos los
comandos deben terminar con CR(ASCII 13): DEBUG"!PLOTON", CR.

Comando Descripcin
!TITL mensaje Ttulo de la ventana
!USRS mensaje Muestra un mensaje en el recuadro User Status
!BELL Emite un sonido por la PC
!AMAX valor Fija el valor analgico mximo
!AMIN valor Fija el valor analgico mnimo
!SPAN minValor,
maxValor
Fija los valores analgicos mximo y mnimo cono arriba (tambin agrega el
rango al recuadro Rango Drop-Down).
!AMUL valor Fija el factor de multiplicacin de los datos entrantes
!TMAX valor Fija el tiempo mximo (segundos)
!TMIN valor Fija el tiempo mnimo (segundos)
!PNTSvalor Fija la cantidad de puntos de datos a adquirir
!PLOTON/OFF Habilita / deshabilita el grfico de datos
!RSET Reinicia el grfico y todos los datos
!CLRM Limpia la lista de mensajes
!CLMM Limpia los valores min/max registrados
!CMMRON/OFF Habilita / deshabilita el borrado del registro de valores Min/Max en el reset
!MAXS Detiene el grfico cuando se completa la cantidad mxima de puntos de datos
!MAXR Reinicia el grfico cuando se completa la cantidad mxima de puntos de datos
!SHFTON/OFF Habilita / deshabilita el desplazamiento del grfico cuando se registran datos
(puede causar prdida de precisin en los datos si se habilita)
!TSMP ON/OFF Habilita la temporizacin de la lista de mensajes y los datos almacenados
!SAVDON/OFF Activa la grabacin en archivos de los datos digitales y analgicos
!SAVM ON/OFF Activa la grabacin de mensajes en un archivo
!DELD Borra el archivo de datos
!DELM Borra el archivo de mensajes
Pgina C - 5
Anexo "C". StampPlot

Notas de Aplicacin Adicionales

El tamao del grfico que se usa depende de la cantidad de puntos de datos y de la velocidad a la que se
transmiten. Por ejemplo, si desea que 60 segundos de datos ocupen toda la pantalla y se transmiten desde el
BASICStamp a una velocidad mxima de 100 ms (Pause 100 + tiempo de procesamiento): 60/0,1 = 600
puntos de datos.

La aplicacin necesita una pausa regular mnima en la recepcin de datos para completar el proceso. Una
pausa de 10 ms normalmente es suficiente para una computadora bastante rpida. Si la aplicacin detecta
que recibir correctamente los datos, aparecer un mensaje en un recuadro y se desconectar. Algunas
indicaciones que la computadora no da abasto con los datos son: datos desparejos, no hay grfico y la
incapacidad de responder a los controles (se cuelga).

A mayor cantidad de puntos y cuanto mayores sean los valores, ms tiempo demorar el graficador para
actualizar o desplazar la imagen. Para obtener una configuracin ms rpida o conveniente al iniciar el BASIC
Stamp, estas son las configuraciones recomendadas:

Pausa de 500ms al inicio para que se limpie el buffer del StampPlot.
Realice un RESETdel StampPlot (!RSET) antes de realizar cambios de configuracin para permitir que
los puntos de datos se eliminen, evitando que se produzca una actualizacin de la pantalla
(redibujado).
Reset (!RSET) al finalizar la configuracin, pone el tiempo en 0.

Como con cualquier aplicacin, la mejor forma de aprender a usarla es jugando con ella. Divirtase!
Pgina C - 6




Anexo "D" Referencia Rpida de PBASIC
Anexo "D". Referencia Rpida de PBASIC
Referencia
Rpida de PBASIC
El Parallax BASICStamp Manual Version 1.9 (en ingls) consiste
de aproximadamente 450 pginas de descripciones de
comandos PBASIC, notas de aplicacin, y esquemas. El
documento completo est disponible para descargar en
http://www.parallax.com y http://www.stampsinclass.com en
formato Adobe PDF, pero tambin puede ser adquirido por
estudiantes e instituciones educativas.
Esta Gua de Referencia Rpida de PBASICes una versin reducida de los comandos del BASICStamp II.


BIFURCACIN

IF...THEN
IF condicin THENdireccinEtiqueta
Evala la condicin y, si es verdadera, se dirige al punto del programa marcado por direccinEtiqueta.
Condicin es una expresin, tal como x=7, que puede ser evaluada como verdadera o falsa.
DireccinEtiqueta es una etiqueta que especifica donde ir en el caso que la condicin sea verdadera.

BRANCH
BRANCHindicador, [direccin0, direccin1, direccinN]
Se dirige a la direccin especificada por el indicador (si est en el rango).
Indicador es una variable / constante que especifica a cul de las direcciones listadas dirigirse (0-N).
Direcciones son las etiquetas que especifican a qu lugar dirigirse.

GOTO
GOTO direccinEtiqueta
Se dirige al punto del programa especificado por direccinEtiqueta.
DireccinEtiqueta es una etiqueta que especifica a qu lugar dirigirse.

GOSUB
GOSUB direccinEtiqueta
Guarda la direccin de la instruccin siguiente a GOSUB, luego se dirige al punto del programa especificado
por direccinEtiqueta.
DireccinEtiqueta es una etiqueta que especifica a qu lugar dirigirse.

RETURN
Regresa de una subrutina. Regresa el programa a la direccin (instruccin) inmediatamente siguiente al
GOSUB ms reciente.

Pgina D - 2
Anexo "D". Referencia Rpida de PBASIC
REPETICIN

FOR...NEXT
FOR variable =inicial to final {paso}NEXT
Crea un bucle repetitivo que ejecuta las lneas de programa entre FORy NEXT, incrementando o disminuyendo
el valor de la variable de acuerdo al paso, hasta que el valor de la variable iguala al valor final.
Variable es una variable tipo nib, byte, o word usada como contador.
Inicial es una variable o una constante que especifica el valor inicial de la variable.
Final es una variable o una constante que especifica el valor final de la variable. Cuando el valor de la
variable supera el valor final, end, el bucle FOR. . . NEXTdetiene su ejecucin y el programa contina en
la instruccin siguiente a NEXT.
Paso es una variable o constante opcional que fija el valor en que aumenta o disminuye la variable en
cada bucle de FOR/ NEXT. Si inicial es mayor que final, PBASIC2 interpreta que paso es negativo, aunque
no se use un signo menos.


FUNCIONES NUMRICAS

LOOKUP
LOOKUP ndice, [valor0, valor1,... valorN], variable
Busca el valor especificado por el ndice y lo guarda en la variable. Si el ndice excede el mximo valor de
ndice de la lista, la variable no es afectada. Un mximo de 256 valores puede ser incluido en la lista.
ndice es una constante, expresin o variable tipo bit, nibble, byte o word.
Valor0, valor1, etc. son constantes, expresiones o variables tipo bit, nibble, byte o word.
Variable es una variable tipo bit, nibble, byte o word.

LOOKDOWN
LOOKDOWNvalor, {comparador,}[valor0, valor1,... valorN], variable
Compara un valor con los de la lista en funcin del comparador y guarda la ubicacin (ndice), en la variable.
Valor es una constante, expresin o variable tipo bit, nibble, byte o word.
Comparador es =, <>, >, <, <=, =>. (= es la opcin por defecto).
Valor0, valor1, etc. son constantes, expresiones o variables tipo bit, nibble, byte o word.
Variable es una variable tipo bit, nibble, byte o word.

Pgina D - 3
Anexo "D". Referencia Rpida de PBASIC
RANDOM
RANDOMvariable
Genera un nmero pseudo-aleatorio.
Variable es una variable tipo byte o word en el rango de 0..65535.


DIGITAL I/O (ENTRADA/SALIDA DIGITAL)

INPUT
INPUT pin
Convierte al pin especificado en entrada (escribe un 0 en el bit correspondiente de DIRS).
pin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15.

OUTPUT
OUTPUT pin
Convierte al pin especificado en salida (escribe un 1 en el bit correspondiente de DIRS).
pin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15.

REVERSE
REVERSE pin
Si el pin es de salida, lo hace de entrada. Si el pin es de entrada, lo hace de salida.
pin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15.

LOW
LOWpin
Convierte al pin en salida y la pone en estado bajo (escribe un 1 en el bit correspondiente de DIRS y un 0 en el
bit correspondiente de OUTS).
pin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15.

HIGH
HIGHpin
Convierte al pin en salida y la pone en estado alto (escribe un 1 en el bit correspondiente de DIRS y OUTS).
pin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15.

TOGGLE
TOGGLE pin
Invierte el estado de un pin.
pin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15.
Pgina D - 4
Anexo "D". Referencia Rpida de PBASIC

PULSIN
PULSINpin, estado, variable
Mide un pulso de entrada (resolucin de 2 s).
pin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15.
estado es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..1.
variable es una variable tipo bit, nibble, byte o word.
Las mediciones se toman en intervalos de 2uS y el tiempo mximo es de 0.13107 segundos.

PULSOUT
PULSOUT pin, perodo
Genera un pulso de salida (resolucin de 2 s).
pin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15.
perodo es una constante, expresin o variable tipo bit, nibble, byte o word, en el rango de 0..65535 que
especifica la duracin del pulso en unidades de 2uS.

BUTTON
BUTTONpin, presionado, retardo, velocidad, espaciotrabajo, estado, etiqueta
Elimina el rebote, realiza auto-repetir, y se dirige a la etiqueta si un botn es activado.
pin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15.
presionado es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..1.
retardo es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..255.
velocidad es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..255.
espaciotrabajo es una variable tipo byte o word. Se inicia con 0 antes de ser usada.
estado es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..1.
etiqueta es la etiqueta a la que debe saltar el programa cuando se presiona el botn.
Pgina D - 5
Anexo "D". Referencia Rpida de PBASIC

SHIFTIN
SHIFTINdpin, cpin, modo, [resultado{\bits}{,resultado{\bits}... }]
Convierte los bits recibidos de serie a paralelo y los almacena.
dpin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15 que
especifica el pin de datos.
cpin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15 que
especifica el pin del reloj (clock).
modo es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..4 que
especifica el modo de transmisin. 0 o MSBPRE= msb primero, pre-reloj, 1 o LSBPRE= lsb primero, pre-
reloj, 2 o MSBPOST= msb primero, post-reloj, 3 o LSBPOST= lsb primero, post-reloj.
resultado es una variable tipo bit, nibble, byte o word donde el dato recibido es guardado.
bits es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 1..16 que especifica
el nmero de bits a recibir en resultado. El valor predeterminado es 8.

SHIFTOUT
SHIFTOUT dpin, cpin, modo, [datos{\bits}{, datos{\bits}... }]
Enva los datos en forma serial.
dpin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15 que
especifica el pin de datos.
cpin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15 que
especifica el pin del reloj (clock).
Modo es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..1 que
especifica el modo de transmisin. 0 o LSBFIRST= lsb primero, 1 o MSBFIRST= msb primero.
datos es una constante, expresin o variable tipo bit, nibble, byte o word que contiene el dato a ser
enviado.
bits es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 1..16 que especifica
el nmero de bits a enviar. El valor predeterminado es 8.


COUNT
COUNT pin, perodo, resultado
Cuenta el nmero de ciclos en un pin, por un perodo de milisegundos, y guarda ese nmero en resultado.
pin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15.
perodo es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..65535.
resultado es una variable tipo bit, nibble, byte o word.

Pgina D - 6
Anexo "D". Referencia Rpida de PBASIC

XOUT
XOUT mpin, zpin, [casa\clavecomando{\ciclos}{, casa\clavecomando{\ciclos}... }]
Genera cdigos de control de lnea X-10. Se usa con los mdulos de interface TW523 o TW513.
mpin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15 que
especifica el pin de modulacin.
zpin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15 que
especifica el pin de cruce por cero.
casa es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15 que
especifica el cdigo de casa A..P.
clavecomando es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15 que
especifica las claves 1..16 o es uno de los comandos mostrados en BASICStamp Manual Version 1.9. Estos
comandos incluyen encender y apagar luces.
ciclos es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 2..65535 que
especifica el nmero de veces que se transmite un comando. (Predeterminado es 2).

Pgina D - 7
Anexo "D". Referencia Rpida de PBASIC
SERIAL I/O(E/S SERIAL)

SERIN
SERINrpin{\fpin}, baudmodo, {petiqueta,}{tiempoespera, tetiqueta,}[datosentrada]
Recibe datos asincrnicamente (como en RS-232).
rpin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..16.
fpin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15.
baudmodo es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..65535.
petiqueta es una etiqueta a la cual saltar en caso de error de paridad.
tiempoespera es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..65535
que representa el nmero de milisegundos a esperar por un mensaje entrante.
tetiqueta es una etiqueta a la cual saltar en caso de demora.
Datosentrada es un conjunto de nombres de variables, expresiones o constantes, separados por comas
que pueden tener los formatos disponibles para el comando DEBUG, excepto los formatos ASCy REP.
Adems, los siguientes formatos estn disponibles:
1. STRvector de bytes\L{\E}
2. SKIP L
3. WAITSTRvector de bytes{\L}.
4. WAIT(valor {,valor...}) Esperar por una secuencia de hasta seis bytes.

Pgina D - 8
Anexo "D". Referencia Rpida de PBASIC
SEROUT
SEROUT tpin{\fpin}, baudmodo, {pausa,}{tiempoespera, tetiqueta,}[datossalida]
Enva datos asincrnicamente (como en RS-232).
tpin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..16.
fpin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15.
baudmodo es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..60657.
pausa es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..65535 que
especifica un tiempo (en milisegundos) de retardo entre los bytes transmitidos. Este valor slo puede ser
especificado si no se da un valor a fpin.
tiempoespera es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..65535
representa el nmero de milisegundos a esperar para la seal de transmisin del mensaje. Este valor slo
puede ser especificado si se da un valor a fpin.
tetiqueta es una etiqueta a la cual saltar si se sobrepasa el tiempoespera. Se especifica con fpin.
datossalida es un conjunto de constantes, expresiones y nombres de variables separados por comas y
opcionalmente precedido por modificadores disponibles en el comando DEBUG.


ANALOG I/O (E/S ANALGICA)
PWM
PWMpin, duty, ciclos
Puede ser usado para generar voltajes de salida analgicos (0-5V) usando un capacitor y un resistor. Genera
una salida por modulacin de ancho de pulso, y luego el pin vuelve a ser entrada.
pin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15.
duty es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..255.
ciclos es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..255 que
representa la cantidad de ciclos de 1ms a enviar a la salida.

RCTIME
RCTIME pin, estado, variable
Mide un tiempo de carga/descarga RC. Puede ser usado para medir potencimetros.
pin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15.
estado es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..1.
Variable es una variable tipo bit, nibble, byte o word.
Pgina D - 9
Anexo "D". Referencia Rpida de PBASIC

SONIDO

FREQOUT
FREQOUT pin, milisegundos, freq1 {,freq2}
Genera una o dos ondas sinusoidales de las frecuencias especificadas (0 32.767 hz.).
pin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15.
milisegundos es una constante, expresin o variable tipo bit, nibble, byte o word.
freq1 y freq2 son constantes, expresiones o variables tipo bit, nibble, byte o word en el rango de 0..32767
que representan las frecuencias correspondientes.

DTMFOUT
DTMFOUT pin, {tiempoencendido, tiempoapagado,}[tono{,tono...}]
Genera pulsos telefnicos DTMF.
pin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15.
tiempoencendido y tiempoapagado son constantes, expresiones o variables tipo bit, nibble, byte o word
en el rango de 0..65535.
tono es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..15.


ACCESO A EEPROM

DATA
{puntero}DATA {@ubicacin,}{WORD}{datos}{(tamao)}{, {WORD}{datos}{(tamao)}...}
Almacena datos en la EEPROM antes de descargar el programa PBASIC.
puntero es un nombre opcional de una constante no definida o variable tipo bit, nibble, byte o word al
que se le asigna el valor del primer lugar de memoria en el que los datos son almacenados.
ubicacin es una constante, expresin o variable tipo bit, nibble, byte o word opcional que designa el
primer lugar de memoria en el que los datos son escritos.
word es una llave opcional que hace que los datos sean almacenados en la memoria como dos bytes
separados.
datos es una constante o expresin opcional a ser escrita en la memoria.
tamao es una constante o expresin opcional que designa el nmero de bytes de datos definidos o no,
para escribir o reservar en la memoria. Si datos no es especificado, entonces se reserva una cantidad de
espacio indefinido, y si datos es especificado, se reserva la cantidad especificada por tamao.
Pgina D - 10
Anexo "D". Referencia Rpida de PBASIC
READ
READ ubicacin, variable
Lee un byte de la EEPROM y lo almacena en variable.
ubicacin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..2047.
Variable es una variable tipo bit, nibble, byte o word.

WRITE
WRITE ubicacin, datos
Escribe un byte en la EEPROM.
ubicacin es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..2047.
datos es una constante, expresin o variable tipo bit, nibble, byte o word.

TIEMPO
PAUSE
PAUSE milisegundos
Hace una pausa en la ejecucin por 065535 milisegundos.
milisegundos es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..65535.


CONTROL DE ENERGA

NAP
NAP perodo
Descansa por un corto perodo. El consumo de energa es reducido a 50 uA (sin cargas conectadas).
perodo es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..7 que
representa intervalos de 18ms.

SLEEP
SLEEP segundos
Duerme por 1-65535 segundos. El consumo de energa es reducido a 50 uA.
segundos es una constante, expresin o variable tipo bit, nibble, byte o word en el rango de 0..65535 que
especifica el nmero de segundos a dormir.

Pgina D - 11
Anexo "D". Referencia Rpida de PBASIC
END
END
Duerme hasta que se interrumpa y reinicie la alimentacin o se conecte a la PC. El consumo de energa es
reducido a 50 uA.


DEPURACINDEL PROGRAMA

DEBUG
DEBUG datosalida{,datosalida...}
Enva variables a ser vistas en la PC.
datosalida es una cadena de texto, constante o variable tipo bit, nibble, byte o word. Si no se especifican
modificadores DEBUGmuestra caracteres en ascii sin espacios ni separacin de oraciones a continuacin
del valor.



Pgina D - 12

Anexo "E" Macro en Excel StampDAQ
Anexo "E". Macro en Excel StampDAQ

Pgina E - 2
Macro Stamp DAQ
Es un conjunto de instrucciones en (VBA) Visual Basic que permiten la ejecucin de tareas prede_
terminadas. El Macro StampDAQ, fue creado por Parallax, Inc y permite capturar datos enviados
por el BASIC Stamp a travs del puerto serial del computador. Los datos capturados, se analizan
y colocan en celdas respectivas en una hoja de Excel; para su posterior anlisis. Los datos desde el
BASIC Stamp deben ser enviados en forma de "String" segn las directivas del Macro. En la figura
E-1, se muestra el macro Stamp DAQ en forma grfica.
Seleccin del
Puerto Serial
Ajuste de Velocidad
de Transmisin de
datos. (Bits/Seg.)
Leer informacin almacenada
en la EEprom del BASIC Stamp.
y limpiar la memoria EEprom.
Limpia los valores de las
columnas A a la J, en el
Excel, pero no elimina el
contenido de la fila 1.
Reset del BASIC
Stamp al conec_
tarse.
Establecer comuni_
cacin con el BASIC
Stamp.
Mensajes
Estatus del macro
Indicadores de conexin:
No hay conexin: C > en color rojo
Si hay conexin: C > en color verde
Dato recibido: R> en color rojo
Dato transmitido: T> en color rojo
Anexo "E". Macro en Excel StampDAQ

Pgina E - 3
Como iniciar el Macro Stamp DAQ:
Una vez abierto el Excel, cargar la hoja de clculo del ejercicio donde se encuentra el macro Stamp
DAQ. Para visualizar el macro presionar CTRL-s en el teclado del computador. Ahora deber ajustar
los parmetros de comunicacin en el macro:

. Seleccionar el puerto serial (COM) donde se encuentra el BASIC Stamp.


. Indicar si se desea hacer un "reset" del BASIC Stamp al iniciar la conexin.
. Hacer "click" sobre "CONECT" para iniciar la conexin con el BASIC Stamp. Recuerde que se utiliza
en ste macro para enviar y recibir los datos ( 8 Bits, sin paridad, con un Bit de parada).
. Limpiar los valores de la hoja de clculo desde la columna A a la J, presionando "CLEAR COLUMNS".

Usted puede aadir grficos y clculos a su hoja de Excel, con las siguientes limitaciones:

. Slo se pueden aceptar diez (10) valores separados por coma, los cuales sern colocados en la
columnas A a la J. Por esta razn usted no debera utilizar ste espacio. Si desea realizar algn
clculo deber hacerlo a partir de la columna K.
. El Stamp DAQ, siempre coloca los datos en la primera hoja del libro Excel.
. Los caracteres ASCII aceptados por el Stamp DAQ deber ser siempre mayores al ASCII 13 y
menores del ASCII 200. De otra manera el Stamp DAQ reportar un error.


Directivas:
El Stamp DAQ analiza los datos de entrada en forma de "Strings". Estos datos debern comenzar con
una directiva, la cual, le informa al Stamp DAQ cual accin tomar. Todas las directivas deben
escribirse en mayscula seguidos por datos separados por coma. Todos los "String"deben terminar con
un retorno de carro (CR) que es igual al ASCII 13. Los "String" que no comincen con una directiva
sern ignorados. Ejemplos de directivas:

DEBUG "DATA, TIME,", DEC valor1, CR


SEROUT sPin,Baud,["DATA, TIME", DEC valor1, CR]
DEBUG "DATA,", DEC valor1, ",", DEC valor2, CR
SEROUT sPin,Baud,["DATA,", DEC valor1, ",", DEC valor2, CR]
Enva la hora del sistema a la hoja de clculos al igual que el dato DEC Valor1, desde el
BASIC Stamp al macro Stamp DAQ, comenzando en la columna prxima a la columna A.
Enva los datos DEC valor1, DEC valor2 ..., desde el BASIC Stamp al macro Stamp DAQ,
comenzando en la columna prxima a la columna A.
Anexo "E". Macro en Excel StampDAQ

Pgina E - 4
DEBUG "MSG, Comenzando a trabajar.", CR
SEROUT sPin,Baud,["MSG, Comenzando a trabajar.", CR]
Muestra un mensaje en la caja de mensajes del macro Stamp DAQ.
DEBUG "LABEL, Label1, Label2, ..., Label10", CR
SEROUT sPin,Baud,["LABEL, Label1, Label2, ..., Label10", CR]
Enva las etiquetas que se colocarn en la fila 1, desde la columna A hasta la J.
Limpia los valores de las columnas A a la J en la hoja de Excel pero desde la fila 2. Las
etiquetas de la fila 1 no las modifica.
DEBUG "CLEARDATA", CR
SEROUT sPin,Baud,["CLEARDATA", CR]
Progrmelo!
'{$STAMP BS2p}
'Programa: ANEXO_E-1.bsp
'El programa enviar datos del BASIC STAMP 2p, a travs del puerto serial
'y estos datos sern graficados por el Stamp DAQ.

'*************** Inicializacin de Variables y Constantes ***************

X VAR BYTE ' Variable que representa el dato


sPin CON 16 ' Pin para la comunicacin serial
Baud CON 240 ' Modo de comunicacin serial (8 BIT,
' Sin paridad y un Bit de parada.

PAUSE 1000 ' Pausa para estabilizar la comunicacin


SEROUT sPin,Baud,[CR] ' Se enva un CR, para indicar que el
' Buffer de datos esta listo.

'*********************** Programa Principal *****************************

Configure:
SEROUT sPin,Baud,[CR,"LABEL,TIME, X, SIN X",CR]' Se envan las Etiquetas
SEROUT sPin,Baud,["CLEARDATA",CR] ' Se limpian las columnas

Main:
FOR X = 0 TO 255 ' Bucle de 0 a 255
SEROUT sPin,Baud,["DATA,TIME,", DEC X, ",", SDEC SIN X,CR]
NEXT
PAUSE 1000
GOTO Main
Anexo "E". Macro en Excel StampDAQ

Pgina E - 5
CONTROL ITERATIVO CON EL STAMP DAQ:
DEBUG "DUMPING", CR
SEROUT sPin,Baud,["DUMPING", CR]
El Stamp DAQ, permite realizar un control iterativo con el BASIC Stamp a travs de las
dos cajas de seleccin de comandos denominados "check box". Si el BASIC Stamp le
enva al Stamp DAQ un comando CMD?, el Stamp DAQ le enviar de regreso un nmero
que podr ser:
<11> si esta seleccionada la casilla de "Download Data"
<22> si esta seleccionada la casilla de "Clear Logged Data"
DEBUG "CMD?", CR
SEROUT sPin,Baud,["CMD?", CR]
Le indica al Stamp DAQ, que debe limpiar las columnas A a la J en el Excel.
DEBUG "DONE", CR
SEROUT sPin,Baud,["DONE", CR]
Le indica al Stamp DAQ, que debe limpiar la casilla "Clear Stored Data" seleccionada.
DEBUG "Reset", CR
SEROUT sPin,Baud,["Reset", CR]
Le indica al Stamp DAQ, que debe limpiar la casilla "Download Data" seleccionada.
Anexo "E". Macro en Excel StampDAQ

Pgina E - 6
Progrmelo!
'{$STAMP BS2p}
'Programa Anexo_E-2.bsp
'En ste ejemplo el BASIC Stamp genera cada un (1) segundo un nmero aleatrio el cual,
'guarda en su memoria EEprom. Luego, el BASIC Stamp esperar un comando desde el Stamp
'DAQ, que le indicar la accin a tomar, enviar los valores al Stamp DAQ, o borrar el
'contenido de la memoria EEprom del BASIC Stamp.

'************************** Directivas Utilizadas ***********************************


' DATA Enva datos desde el BASIC Stamp al Stamp DAQ
' LABEL Enva etiquetas desde el BASIC Stamp al Stamp DAQ
' MSG Coloca un mensaje en la casilla de mensajes del Stamp DAQ
' CMD? Le indica al BASIC Stamp que el macro Stamp DAQ le est enviando
' un valor que puede ser:
'
' "11" si se presion la casilla "Download Data"
' "22" si se presion la casilla "Clear Stored Data"
'
' DUMPING Le informa al Stamp DAQ que limpie las columnas de la A a la J
' DONE Le informa al Stamp DAQ que limpie la casilla de "Download Data"
' RESET Le informa al Stamp DAQ que limpie la casilla de "Clear Logged Data"

'******************* Definicin de Variables y constantes ****************************


CurLoc VAR Byte ' Localizacin en la EEPROM del BASIC Stamp
StoreVal VAR Byte ' Nmero aleatrio a almacenar
CMD VAR Byte ' Almacena el cdigo de retorno al BASIC Stamp
X VAR Byte ' Variable para un contador general
LastLoc CON 256 ' Ultima localizacin de memoria EEprom
sPin CON 16 ' Pin de comunicacin serial
Baud CON 240 ' Modo de comunicacin serial

'****************************** Programa Principal **********************************


StoreVal = 111 ' Valor inicial del nmero aleatrio
Read LastLoc,CurLoc ' Se lee la ltima localizacin de los datos

Main:
Gosub GenVal ' Genera un nmero aleatrio
Gosub StoreValue ' Almacena el valor en EEprom
Gosub SerialControl ' Lee el comando enviado por el Stamp DAQ
PAUSE 1000 ' Espera un (1) segundo
GOTO Main

'*********************************** Subrutinas *************************************


GenVal:
RANDOM StoreVal ' Genera un nmero aleatrio
RETURN

StoreValue: ' Almacena el valor en EEprom


CurLoc = CurLoc + 1 ' Incrementa la localizacin
WRITE CurLoc, StoreVal ' Almacena la ltima posicin en memoria EEprom
WRITE LastLoc, curLoc ' Almacena el valor en la localizacin actual
' Le enva al Stamp DAQ un mensaje
SEROUT sPin,Baud,["MSG,Valores Almacenados = ", DEC CurLoc + 1,CR]
RETURN

Anexo "E". Macro en Excel StampDAQ



Pgina E - 7

SerialControl: ' Le enva al Stamp DAQ, un comando "CMD?"


CMD = 0 ' Para que le enve el cdigo requerido
SEROUT sPin,Baud,["CMD?",CR]
SERIN sPin,Baud,500,timeout,[dec CMD] ' Lee el cdigo que el Stamp DAQ le envia al BS2p
PAUSE 200' Pausa para la comunicacin serial
IF CMD = 11 THEN Dump ' Si el Comando recibido = 11 va a Dump
IF CMD = 22 THEN Reset ' Si el Comando recibido = 22 va a Reset
Timeout:
RETURN

DUMP: ' Enva datos desde la EEprom al Stamp DAQ


SEROUT sPin,Baud,["DUMPING",CR] ' Limpia las columnas en el Excel
SEROUT sPin,Baud,["LABEL,,Valor,,,,,,,,,,",CR] ' Enva al Stamp DAQ la Etiqueta "Valor"
FOR X = 0 TO curLoc ' Cuenta las localizaciones de la EEprom con datos
Read X,StoreVal ' Lee la Memoria EEprom
SEROUT sPin,Baud,["DATA,,", DEC StoreVal,CR]' Enva los datos al Stamp DAQ serialmente
Next

SEROUT sPin,Baud,["DONE",CR] ' Limpia el Check Box "Download Data"


PAUSE 1000 ' Pausa de un (1) segundo
RETURN

RESET:
CurLoc = 0 ' Ajusta la localizacin de EEprom en cero
Write LastLoc,0 ' Guarda en EEprom esta localizacin
SEROUT sPin,Baud,["MSG,RESET!!!",CR] ' Muestra en el Stamp DAQ el mensaje "RESET!!!"
SEROUT sPin,Baud,["RESET",CR] ' Limpia el Check Box "Clear Logged Data"
PAUSE 1000' Pausa de un (1) segundo
RETURN


Anexo "F" Directivas y Comandos
del PBASIC 2.5
Anexo "F". Directivas y Comandos del PBASIC 2.5

Pgina F - 2
Nuevos Comandos del PBASIC 2.5
El nuevo PBASIC 2.5, incluye una serie de directivas y comandos que aumentan el SET de
instrucciones del PBASIC, haciendose cada vez ms estndar con otras versiones de BASIC para
computadoras y aumentando el extraordinario potencial del BASIC Stamp. Entre las nuevas directivas
y comandos podemos mencionar:

Se Utiliza al comienzo del programa a fin de indicarle al PBASIC que se utilizarn
las nuevas directivas y comandos del PBASIC 2.5.

La definicin de PIN se utiliza para simplificar a los programas que utilizan un
mismo Pin de entrada / salida en el programa. El compilador determinar cuando el
Pin se comportar como una salida y cuando lo har como una entrada.

Un conjunto de caracteres de control adicionales para el comando


DEBUG, entre los cuales encontramos:

Cualquier lnea de cdigo puede ser continuada en la prxima lnea del editor
agregando simplemente una coma ",".
Definicin PIN:
Directiva $PBASIC:
Caracteres de Control para el DEBUG:
Continuacin de lnea:
SDA PIN 8
SCL PIN 9

INICIO:
INPUT SDA ' Define al Pin 8 como entrada
INPUT SCL ' Define al Pin 9 como entrada
LOW SDA ' Define al Pin 8 como salida

RELOJ:
DO : LOOP WHILE (SCL = 0) ' Monitorea al Pin 9 como entrada
RETURN
. CRSRXY (2) Mueve el cursor a las coordenadas X(Byte), Y (Byte).
. CRSRLF (3) Mueve el cursor a la izquierda.
. CRSRRT (4) Mueve el cursor a la derecha.
. CRSRUP (5) Mueve el cursor una lnea arriba.
. CRSRDN (6) Mueve el cursor una lnea abajo.
. LF (10) Carcter de "LINEFEED".
. CLREOL (11) Borra todos los caracteres al final de la lnea.
. CLRDN (12) Borra todos los caracteres desde la posicin actual del
Cursor hasta el final de la pantalla DEBUG.
DEBUG "Hola, Mundo", CR,
"El PBASIC 2.5 esta listo para la accin"
Anexo "F". Directivas y Comandos del PBASIC 2.5

LEER_HORA:

DEBUG Home, "Introduzca la Hora: ", CLREOL


DEBUGIN DEC Hrs
IF (Hrs > 23) THEN LEER_HORA
Pgina F - 3
El comando "DEBUGIN" se cre para facilitar al usuario la introduccin de
datos desde la pantalla DEBUG. Este comando trabaja identicamente igual al
comando SERIN, pero no requiere que el usuario introduzca el nmero de Pin.
Por defecto siempre utiliza el Pin 16, con una velocidad de 9600 Baudios, y se
pueden utilizar los mismos modificadores de formato de los comandos DEBUG,
SERIN y SEROUT.

Se incluye en el PBASIC 2.5 la estructura de desicin estndar IF...THEN...


ELSE, la sintaxis en forma general se puede escribir de dos formas, lo que
encontramos entre los parntesis puede ser opcional.

Select Case puede ser utilizado para reemplazar a mltiples estructuras IF ...
THEN ... ELSE . El smbolo "|" denota items mutualmente excluyentes.

Continuacin de lnea:
IF ... THEN ... ELSE:
FORMA No. 1

IF condicin THEN | IF (PUNTOS>90) THEN


Instrucciones | DEBUG "Muy buenos PUNTOS", CR
{ELSE | ELSE
Instrucciones } | DEBUG "Muy malos PUNTOS", CR
ENDIF | ENDIF

FORMA No. 2

IF Condicin THEN Instruccin { ELSE Instruccin }

IF (idx = 1) THEN HIGH 10: LOW 11 ELSE LOW 10: HIGH 11


SELECT ... CASE:
SELECT expresin
CASE | TCASE ELSE | condicin
Instrucciones
ENDSELECT

****************************** EJEMPLO ***************************

SELECT salida
CASE 0 TO 3
HIGH 1

CASE todas, algunas


LOW 1

CASE ELSE
DEBUG "Comando Incorrecto", CR
END SELECT
Anexo "F". Directivas y Comandos del PBASIC 2.5

Pgina F - 4
El PBASIC 2.5 incluye ahora el lazo estndar de programacin Do ... LOOP.
Hasta 16 lazos DO ... LOOP pueden concatenarse.

Exit causa la terminacin inmediata de lazos FOR ... NEXT o DO ... LOOP.
Hasta 16 EXIT pueden concatenarse en un lazo.


ON ... GOSUB, ha sido aadido al PBASIC 2.5 para obtener una mayor
compatibilidad con otras versiones de BASIC. Este comando es muy similar al
comando BRANCH del PBASIC. Si el valor de offset es mayor que el nmero de
subrutinas indicadas, se continuar ejecutando el cdigo de la prxima lnea.


DO ... LOOP :
DO { WHILE | UNTIL condicin }
Instrucciones
LOOP { UNTIL | WHILE condicin }

****************************** EJEMPLOS ********************************

DO
TOGGLE PinDeAlarma
PAUSE 100
LOOP

DO WHILE (PinDeStatus = 1)
LEDeStatus = On
PAUSE 100
LOOP

DO
PinDeAlarma = On
PAUSE 100
LOOP UNTIL (Temperatura < PuntoDeAjuste)
EXIT :
FOR muestras = 1 TO 10
GOSUB Leer_Temperatura
GOSUB Mostrar Temperatura
IF (Temp > 100) THEN EXIT
PAUSE 100
NEXT
ON ... GOSUB :
ON offset GOSUB Subrutina_1 {, Subrutina_2, Subrutina_3, ... Subrutina_N}

****************************** EJEMPLO ********************************

DO
ON equipo GOSUB Motores, Reles, Acondicionadores, otros
equipo = equipo + 1
LOOP
Anexo "F". Directivas y Comandos del PBASIC 2.5

Pgina F - 5
ON ... GOTO, ha sido aadido al PBASIC 2.5 para obtener una mayor
compatibilidad con otras versiones de BASIC. Este comando es muy similar al
comando BRANCH del PBASIC. Offset puede ser una variable, constante o
expresin (0..255) que contiene el ndice de la direccin del salto. Se ignorarn
ndices mayores a 255.


Los comandos READ and WRITE han sido mejorados para
permitir que los mismos trabajen con Bytes y Palabras
(Word). Adicionalmente se permite la escritura o lectura
simultnea de registros en la misma lnea de cdigos. La
sintaxis es:

Todas las etiquetas que se creen en el programa


para saltos o lazos, debern terminar con el
signo de dos puntos ":".
ON ... GOTO :
ON offset GOTO Salto_1 {, Salto_2, Salto_3, ... Salto_N}

****************************** EJEMPLO ********************************

ON NivelDeAlarma GOTO Cdigo_1, Cdigo_2, Cdigo_3

Mejoras de los Comandos READ / WRITE:


READ localizacin , {WORD} variable {,{WORD} variable, {WORD} variable, ...}
WRITE localizacin , {WORD} variable {,{WORD} variable, {WORD} variable, ...}

****************************** EJEMPLO ********************************

READ 0, Horas, minutos, segundos


WRITE 0, WORD ao, Mes, Da

Significa que (WORD ao) escribir dos Bytes:

Localizacin 0: Ser el Byte menos significativo de ao


Localizacin 1: Ser el Byte ms significativo de ao
Localizacin 2: Ser el Byte Mes
Localizacin 3: Ser el Byte Da
Todas las etiquetas deben terminar con dos puntos (:)
***************************** FORMA CORRECTA *********************************
LEER_HORA:
DEBUG Home, "Introduzca la Hora: ", CLREOL
DEBUGIN DEC Hrs
IF (Hrs > 23) THEN LEER_Hora

*************************** FORMA INCORRECTA *********************************


LEER_HORA ' DEBE INCLUIR LOS (:)
DEBUG Home, "Introduzca la Hora: ", CLREOL
DEBUGIN DEC Hrs
IF (Hrs > 23) THEN LEER_Hora

You might also like