Professional Documents
Culture Documents
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 )
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.
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.
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
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
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
goto bucle
www.roso-control.com Curso sobre MicroControladores nivel Bsico & Avanzado. Pgina No. 29
Procesamiento de Bits
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.
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.
bucle:
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:
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
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.
Modificadores de Variables
Tabla 4.4: Modificadores de Variables.
Escriba el siguiente programa (PL4_2R0.bsp)
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
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).
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
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.
T1 VAR WORD ' Variable que almacena duracin del pulso 0-1-0
T2 VAR WORD ' Variable que almacena duracin del pulso 1-0-1
INICIO:
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
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
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
CS con 0
CLK con 1
D0 con 2
debug cls
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
CALC_VOLTS:
return
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
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
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:
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
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
'{$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
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.
'{$STAMP BS2p}
'Programa: PL9_3R0.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
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.
'{$STAMP BS2p}
'Programa: PL10_1R0.bsp
'Rotacin de un Servo Motor
goto Inicio
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...
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
DO
VECES = 100 ' Repeticiones = 100 veces
GOSUB CCW ' Rotacin en sentido Anti Horario
PAUSE 1000 ' Pausa de 1 segundos
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
DO
VECES = 100 ' Repeticiones = 100 veces
GOSUB CCW ' Rotacin en sentido Anti Horario
PAUSE 1000 ' Pausa de 1 segundos
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
DO
VECES = 100 ' Repeticiones = 100 veces
GOSUB CCW ' Rotacin en sentido Anti Horario
PAUSE 1000 ' Pausa de 1 segundos
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.
'{$STAMP BS2p}
'Programa: PL11_1R0.bsp
'Automatizacin simple
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.
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
Control Secuencial
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
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
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
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:
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
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
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
Regresar_P_Inicial:
Resistor = Off ' Apaga al resistor
GOTO P_Inicial ' Se regresa a P_Inicial
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
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
!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 ******************
ENDMAC
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
!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
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.
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)
I2COUT:
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:
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.
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
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
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
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
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.
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
Principal:
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
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
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
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
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
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 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.
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
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
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.
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
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.
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.
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
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
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
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
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
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
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)
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
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
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"
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
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
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
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
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:
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
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
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
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
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
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]
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.
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
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:
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.
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
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.
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:
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
FORMA No. 2
SELECT salida
CASE 0 TO 3
HIGH 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 }
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}
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: