Está en la página 1de 358

¿Qué es un Microcontrolador?

Guía del Estudiante

VERSION 3.0
Página 2 · ¿Qué es un Microcontrolador?

GARANTÍA
Parallax garantiza sus productos contra cualquier defecto en materiales y manufactura por un periodo de 90 días partir
de la fecha de recepción del producto. Si usted descubre un defecto Parallax podrá reparar o reemplazar la mercancía o
regresarle el costo de su compra. Antes de regresar el producto a Parallax, llame un número de Regreso Autorizado de
Mercancía (RMA). Escriba este número en la parte externa de la caja para regresar la mercancía a Parallax. Por favor
incluya lo siguiente con la mercancía que regresa: Su nombre, su número telefónico, dirección y descripción del
problema. Parallax le regresará su producto o su reemplazo utilizando el mismo método utilizado para mandar el
producto a Parallax.

GARANTIA DE REGRESO DE SU DINERO EN EL PERIODO DE 14 DIAS


Si dentro de los 14 días a partir de la fecha de recepción del producto usted encuentra que el producto no cumple sus
necesidades usted lo puede regresar y le regresaremos íntegramente su dinero. Parallax le regresará el precio de compra
del producto, se excluyen los gastos de embarque y empaque. Esta garantía no es válida si se ha alterado o dañado el
producto. Vea la sección arriba mencionada de la garantía para conocer las instrucciones para regresar el producto a
Parallax.

DERECHOS DE AUTOR Y PATENTE DE MARCAS


Esta documentación tiene Derechos de Autor de Parallax de 2003 a 2009. Al obtener o descargar una copia impresa de
este documento o de software está de acuerdo en usarla solamente para productos Parallax. No se permiten cualquier
otros usos y pudieran representar una violación a los Derechos de Autos de Parallax, legalmente castigables de acuerdo
con los Derechos de Autos Federales o por las Leyes de Propiedad Intelectual. Cualquier duplicado de este documento
para fines comerciales está expresamente prohibido por Parallax. En cambio se permite total o parcialmente el
duplicado para usos educativos y se condiciona a que el material se use solamente con productos Parallax., el estudiante
sólo tiene que pagar el costo del duplicado..Verifique con Parallax su aprobación antes de hacer el duplicado total o
parcial de cualquier documentación. BASIC Stamp, Board of Education, Boe-Bot, Stamp in Class y SumoBor son
marcas registradas de Parallax Inc. también lo son HomeWork Board, PING, Parallax, el logotipo de Parallax, Propeller
y Spin. Si decide usar cualquiera de estas palabras en su material electrónico o impreso, necesita especificar que este
registro pertenece a Parallax. Otros nombres de marcas o productos tienen los derechos de autos de sus respectivos
dueños.

ISBN 9781928982524
3.0.0-09.12.09-HKTP
RECLAMO DE RESPONSABILIDADES.
Parallax Inc no es responsable de daños especiales, incidentales o de consecuencia que resulten de cualquier violación
de la garantía, o bajo cualquier teoría legal , incluyendo perdidas de beneficios, caducidad, intangibles o reemplazo del
equipo o propiedad, o cualquier costo de recuperación, reprogramación o reproducción de cualquier tipo de datos
almacenados o usados con productos Parallax. Parallax tampoco es responsable de cualquier daño personal incluyendo
la vida o la salud que resulten del uso de cualquier de nuestros productos. Usted es 100% responsable de su aplicación
BASIC Stamp, sin importar cuanta amenaza represente para la vida.

ERRATAS
Hemos realizado un gran esfuerzo para garantizar la exactitud de nuestros textos, sin embargo estos
pueden tener errores. Ocasionalmente, una fe de erratas con un lista de errores y correcciones conocidas
de un texto se enviará con la pagina del producto relacionado en la liga WWW.PARALLAX.COM. Si usted
encuentra un error por favor mándelo al correo EDITOR@PARALLAX.COM
Índice
Prefacio ....................................................................................................................... 7
Características de la version 3.0 ....................................................................................7
Usuarios..........................................................................................................................8
Foros de ayuda...............................................................................................................8
Recursos para educadores.............................................................................................9
Traducciones en otros idiomas.....................................................................................10
Datos del autor .............................................................................................................10
Contribuidores especiales ............................................................................................10
Capítulo 1 : Inicio...................................................................................................... 11
¿Actualmente cuántos microcontroladores utilizamos? ...............................................11
El BASIC Stamp2 es un modulo nuevo con microcontrolador .....................................11
Inventos maravillosos realizados con los microcontroladores BASIC Stamp...............12
Hardware y software.....................................................................................................15
Actividad #1 : Instalación del software..........................................................................15
Actividad #2 : Uso del archivo “ayuda” para ajustes del hardware...............................21
Resumen ......................................................................................................................23
Capítulo 2 : Encendiendo y Apagando Luces ....................................................... 27
Luces Indicadoras.........................................................................................................27
Energizando un diodo emisor de luz (LED) ..................................................................27
Actividad #1 : Construccion y verificacion de un circuito con LED ...............................28
Actividad #2 : Control de apag/enc con el BASIC Stamp .............................................36
Actividad #3 : Conteo y repetición ................................................................................42
Actividad #4 : Construyendo y verificando un segundo circuito con LED.....................46
Actividad #5 : Control de un LED bicolor usando la dirección de la corriente ..............50
Resumen ......................................................................................................................56
Capítulo 3 : Entrada Digital – Botones Push ......................................................... 61
Los encuentras en calculadoras, juegos de mano y aparatos......................................61
Recibiendo versus mandando señales high y low........................................................61
Actividad #1 : Verificando un botón push con un circuito LED .....................................61
Actividad #2 : Leyendo un botón push con el BASIC Stamp........................................65
Actividad #3 : Control con botón push de un circuito LED............................................70
Actividad #4 : Dos botones push controlando dos circuitos LEDs................................73
Actividad #5 : Prueba del tiempo de reacción de un temporizador ..............................78
Resumen ......................................................................................................................87
Capítulo 4 : Controlando el Movimiento ................................................................ 93
Microcontrol del movimiento .........................................................................................93
Señales encendido/apagado y movimiento del motor ..................................................93
Presentando al servomotor...........................................................................................93
Actividad #1 : Conectando y verificando el servo .........................................................95
Actividad #2 : Programa de prueba del control del servo ...........................................101
Actividad #3 : Control del tiempo de retención del servo............................................112
Página 4 · ¿Qué es un Microcontrolador?

Actividad #4 : Controlando la posición con su computadora ......................................119


Actividad #5 : Convirtiendo posición a movimiento ....................................................127
Actividad #6 : Botónes push – Para controlar el servo ...............................................130
Resumen ....................................................................................................................134
Capítulo 5 : Midiendo Rotación............................................................................. 141
Ajustando perillas y monitoreando máquinas .............................................................141
El resistor variable atrás de la perilla - el potenciometro ............................................141
Actividad #1 : Midiendo y verificando el circuito potenciometro .................................143
Actividad #2 : Midiendo la resistencia al medir el tiempo ...........................................145
Actividad #3 : Leyendo la perilla con el BASIC Stamp ...............................................152
Actividad #4 : Controlando un servo con un potenciometro .......................................158
Resumen ....................................................................................................................166
Capítulo 6 : Indicadores Digitales......................................................................... 171
El indicador digital de todos los dias...........................................................................171
¿Qué es un indicador de 7 segmentos?.....................................................................171
Actividad #1 : Construyendo y verificando el indicador LED de 7 segmentos............173
Actividad #2 : Controlando el indicador LED de 7 segmentos....................................177
Actividad #3 : Mostrando digitos.................................................................................180
Actividad #4 : Mostrando la posición de un dial..........................................................187
Resumen ....................................................................................................................192
Capítulo 7 : Midiendo Luz...................................................................................... 196
Dispositivos que contienen sensores de luz...............................................................196
Conociendo el fototransistor .......................................................................................199
Actividad #1 : Construyendo y verificando el medidor de luz .....................................200
Actividad #2 : Ajustando los eventos de luz ...............................................................204
Actividad #3 : Graficando mediciones de luz (opcional) .............................................213
Actividad #4 : Medidor sencillo de luz.........................................................................215
Actividad #5 : Salida conmutada (ON/OFF) del fototransistor....................................227
Actividad #6 : Por diversion – Mida luz exterior con un LED ......................................237
Resumen ....................................................................................................................241
Capítulo 8 : Frecuencia y Sonido.......................................................................... 248
Su día y los beeps electrónicos ..................................................................................248
MIcrocontroladores, bocinas y señales apagado/ encendido.....................................248
Actividad #1 : Construyendo y verificando la bocina ..................................................249
Actividad #2 : Sonidos en acción................................................................................251
Actividad #3 : Notas musicales y canciones sencillas ................................................256
Actividad #4 : Música con microcontrolador ...............................................................261
Actividad #5 : Tonos telefónicos con RTTTL ..............................................................274
Resumen ....................................................................................................................286
Capítulo 9 : Bloques de Construcción Electrónicos .......................................... 291
Los pequeños chips negros........................................................................................291
Expanda sus proyectos con circuitos integrados perifericos ......................................292
Actividad #1 : Control del flujo de corriente con un transistor.....................................293
Actividad #2 : Presentando el potenciometro digital...................................................296
Resumen ....................................................................................................................305
Capítulo 10 : Realizando sus Propios Inventos .................................................. 311
Aplique lo que usted ya conoce en otras partes y componentes ...............................311
Haciendo el prototipo de un sistema de micro seguridad...........................................312
Actividad #1 : De la idea a la demonstración del concepto ........................................312
Actividad #2 : Construya y verifique individualmente cada circuito ............................316
Actividad #3 : Organice las tareas de sus códigos en piezas pequeñas....................317
Actividad #4 : ¡Documente su código! ........................................................................321
Actividad #5 : Dele a su aplicación maravillosa nuevas funciones.............................323
Actividad #6 : Como resolver diseños dificiles............................................................324
Actividad #7 : ¿Qué sigue?.........................................................................................332
Resumen ....................................................................................................................335
Anexo A : Lista de Partes y Opciones de Kits .................................................... 337
Opciones completas de kits........................................................................................338
Anexo B : Más sobre Electricidad ........................................................................ 339
Actividad adicional: Ley de ohm, voltaje y corriente ...................................................340
Anexo C : Resumen del Formato RTTTL ............................................................. 347
Índice Alfabetico..................................................................................................... 349
Página 6 · ¿Qué es un Microcontrolador?
Prefacio · Página 7

Prefacio
Este libro responde la pregunta “¿Que es un Microcontrolador?” y enseña a los estudiantes
la manera de diseñar sus propios trabajos e inteligente inventos utilizando el modulo del
microcontrolador Basic Stamp de Parallax. Las actividades de este texto son varios
experimentos agradables e interesantes diseñados para despertar la imaginación de los
estudiantes en movimiento, luz, sonido y retroalimentación del tacto para explorar nuevos
conceptos. Estas actividades sumergen a los estudiantes a una diversidad de principios
básicos en los campos de programación de computadoras, electricidad y electrónica,
matemáticas y física. Muchas de estas actividades facilitan la coordinación de mente y
manos al diseñar prácticas como las que utilizan los ingenieros y técnicos en la creación y
aplicación de máquinas modernas utilizando partes comunes y baratas.

¿Qué es un Microcontrolador? es el texto de iniciación en los Programas de Clases de esta


compañía. Para ver la serie completa, que incluye titulo de Robótica con el con el robot
“Boe.Bot”, de sensores inteligentes y sus aplicaciones, Control de Procesos, y más, visiste
la página www.parallax.com/Education.

CARACTERÍSTICAS DE LA VERSION 3.0


Esta es la primera revisión del libro desde 2004. Los cambios más importantes son:
• Cambio de los fotoresistores de sulfuro de cadmio por sensores de luz que
cumplen la norma RoHS que serán más utilizados en los futuros diseños. Esto
implicó reescribir los capítulos 7 y 10, y algunos ajustes en otros capítulos.
• Mejoras en las actividades e ilustraciones de Control de Servos del Capítulo 4.
• Mover la sección de “Ajustes y Pruebas” del Capítulo 1, y los anexos de Hardware
y Busqueda de Fallas del Archivo “Ayuda”. Esto se hizo para reforzar las
conexiones de Hardware del puerto Serial y USB, y otras conexiones de
programación ya que nuestros productos y tecnologías siguen creciendo. Esto
permite la actualización dinámica del material del Hardware y Búsqueda de Fallas.
• Eliminación del CD de Parallax, que ya no se incluyen en nuestros kits,
reduciendo desperdicios y asegurandonos que los clientes descargan el software de
Basic Stamp más reciente así como los drivers USB disponible para el
funcionamiento de sus sistemas.

Ademas, se han corregido la “fe de erratas” de la versión 2.2. El material conserva los
mismos objetivos, los mismos conceptos e instrucciones de programación y se incluyen los
nuevos conceptos. Finalmente, para facilidad en su uso, ha cambiado los números de
páginas para que la página del PDF y los números de página físicos sean los mismos.
Página 8 · ¿Qué es un Microcontrolador?

USUARIOS
Este texto está diseñado como puerta de entrada a la tecnología y el diseño con una curva
de fácil aprendizaje para programación de dispositivos incrustados. El libro está
organizado y lo pueden usar varios tipos de estudiantes y autodidactas. Muchos estudiantes
de bachillerato pueden realizar los ejemplos de este libro guiados por las instrucciones
indicadas de un istructor supervisor. En el otro lado del espectro, los estudiantes de los
primeros semestres de ingeniería pueden verificar su comprensión y habilidad de resolver
problemas con preguntas, ejercicios y proyectos (con solución) en el resumen de cada
capítulo. Los estudiantes autodidactas pueden trabajar a su propio ritmo y obtener ayuda a
través de los foros de Stamps in Class abajo mencionados.

FOROS DE AYUDA
Parallax mantiene foros gratuitos moderados por nuestros clientes, los cuales cubren una
variendad de temas:
• El Propeller Chip analiza temas relacionados con el Microcontrolador Propeller
multinúcleo y una línea de productos de Herramientas de Desarrollo.
• El Basic Stamp. Estudia las ideas de los proyectos, el soporte y temas relacionados
para todos los modelos del Basic Stamp.
• El Microcontroller SX. Proporciona asistencia técnica para todos los productos
del chip SX incluyendo al Compilador SX/B y la Herramienta SX-Key.
• Sensores. Estudia la gran variedad de sensores de Parallax y sus interfaces con el
microcontrolador de Parallax.
• Stamps en Clase. Aquí se localizan los materiales educativos de estudiantes,
maestros y clientes así como sus proyectos escolares.
• Robotics. Aque se encuentran los Robots de Parallax y de clientes contruidos con
procesadores y sensores de Parallax.
• El Sandbox. Contiene temas relacionados con el uso de productos Parallax que no
se tratan en otros forums.
• Proyectos Terminados. Aquí puedes mandar tu proyecto terminado que realizaste
con productos Parallax.
• Desarrollo de Juegos Propeller y Sistema Hydra. Aquí encuentras el análisis y la
asistencia técnica para el Kit de Desarrollo de Juegos HYDRA relacionados con la
programació del microcontrolador Propeller.
Prefacio · Página 9

RECURSOS PARA EDUCADORES


Tenemos una gran variedad de recursos para ayudar a los educadores.

Stamps in Class “Mini Projects”


Como complemento a nuestros libros, tenemos un banco de proyectos para el salón de
clases. Cada Mini Proyecto tiene todos los Códigos Fuente. diseñados para involucrar a
los estudiantes, explicaciones “Como Trabaja”, esquemáticos y diagramas de alambrado o
fotos del dispositivo para que los use el estudiante. Algunos proyectos tienen un video
demostrativo, para promover el auto estudio de estudiantes que deseen profundizar la
electrónica y la programación. Además incluimos la liga de internet Stamps in Class de
Mini Proyectos en www.parallax.com/Education.

Cursos para educadores.


Son cursos prácticos, intensivos de 1 o 3 días para instructores impartidos por Ingenieros
de Parallax, o maestros con experiencia que están usando los materiales educativos de
Parallax en sus salones de clases. Para detalles de Cursos para educadores visite:
www.parallax.com/Education

Forum Parallax para Educadores


En este foro gratuito y privado los educadores pueden hacer preguntas y compartir sus
experiencias al usar los productos Parallax en sus salones de clases. Aquí también
encuentra Materiales de Educacion Complementarios. Las instrucciones para inscribirse
están en education@parallax. Com. Se requiere que muestre que usted es educador.

Materiales de Educación Complementarios


Estos libros educacionales continen un conjunto de preguntas no publicadas y las
soluciones que han mandado a nuesto Forun Parallax para Educadores. Aquí invitamos a
los educadores a que copien y modifiquen este material y lo usen como una preparación
rápida de tareas, acertijos y pruebas. Las presentaciones en Power Point y los materiales de
prueba preparados por otros educadores aquí nos la pueden mandar.

Permisos de Derechos de Autor para uso en Educación


No se requiere permiso para bajar, duplicar e instalar el software de Parallax para uso en
educación de Productos Parallax y lo pueden usar en computadoras de escuelas o la de su
hogar. Nuestros textos de Clase Stamp y los Manuales Stamp en Basic están disponibles y
gratuitos en descargas de PDF, y pueden duplicarse, y el único costo para sus estudiantes
Página 10 · ¿Qué es un Microcontrolador?

son las copias fotostáticas. Los archivos PDF no estan encriptados y puede seleccionar los
textos o imágenes para preparar en Power Point sus propias presentaciones.

TRADUCCIONES EN OTROS IDIOMAS


Algunos de nuestros textos de clases se han traducido a otros idiomas; estos textos se
pueden descargar libremente y están sujetos a las mismas reglas de derecho de autor de los
textos originanales. Para ver la lista completa vaya a la liga Tutoriales y Traducciones de
www.parallax.com/education. Estos fueron preparados en coordinación con el programa
Traductores Voluntarios. Si usted está interesado en participar en el programa de
Traductores Voluntarios, escriba a translation@parallax.com.

DATOS DEL AUTOR


Andy Lindsay trabaja en Parallax desde 1999, y ha escrito para la compañia ocho libros y
varios artículos e información de productos. Las últimas 3 versiones de ¿Qué es un
Microcontrolador? se diseñó y actualizó con las observaciones y retroalimentación al
educator que Andy recolectó cuando viajaba por el país y la capacitación de Cursos y
eventos Parallax para Educadores que impartió en el extranjero. Andy se graduó como
ingeniero en Electricidad y Electrónica en la Universidad del Estado de California en
Sacramento y es un autor activo que escribe ponencias en el área de microcontroladores de
la curricula de los primeros semestres de ingeniería. Cuando no escribe material educativo,
Andy elabora documentos de productos y aplicaciones de Ingeniería en Parallax.

CONTRIBUIDORES ESPECIALES
El equipo de Parallax que preparó esta edición, es Arístides Alvarez excelente lider del
departamento, el diseño de lecciones y escritura técnica lo hace Andy Lindsay; el diseño
del arte lo hace Jen Jabobs, las ilustraciones gráficas son de Rich Allred y Andy Lindsay;
la revisón tecnica la hizo Jessica Uelmen; la tipografía y el layout lo realizó Stephanie
Lindsay. Damos un agradecimiento especial a Ken Gracey, fundador del programa Stamps
in Class, y a Tracy Allen y Phil Pilgrim por su contribución en la selección del sensor de
luz utilizado en esta versión que reemplaza al fotoresistor de sulfuro de cadmio.

Muchas personas contribuyeron al desarrollo de ¿Qué es un Microcontrolador? , a estas


personas les estamos agradecidos. Nuevamente Parallax desea agradecer a Robert Ang por
la revisión total minuciosa y detallada del original. También agradecemos a los autores de
Stamp in Class, Tracy Allen (Aplicación de sensores) y a Martin Hebel (Control de
Procesos) por su revisión y recomendaciones. Andy Lindsay desea agradecer a su papá
Marshal y a su cuñado Kubilay por sus valiosos consejos musicales y sugerencias.
Inicio · Página 11

Capítulo 1: Inicio
¿ACTUALMENTE CUÁNTOS MICROCONTROLADORES UTILIZAMOS?
Un microcontrolador es un tipo de computadora en miniatura que se encuentra en muchos
aparatos. Algunos ejemplos de productos comunes de uso cotidiano que contienen
microcontroladores se muestran en la figura 1-1. Si estos tienen botones y pantallas
digitales lo más seguro es que tengan como “cerebro” un microcontrolador programable.

Figura 1-1
Ejemplos cotidianos de
a´paratos que tienen
microcontroladores.

Traté de hacer un lista y cuente cuantos aparatos utiliza en un día normal. Estos son
algunos ejemplos, si su radio reloj se apaga, y presiona varias veces en la mañana la perilla
de su aparato, la primera acción de ese día es interactuar con un microcontrolador. Cuando
calienta alimentos en el horno de microondas y hace una llamada con su teléfono celular
también está interactuando con un microcontrolador. Esto solo es el comienzo. Veamos
otros ejemplos. Cuando enciende el TV con el control remoto, cuando juega con su
Nintendo y cuando usa una calculadora, estos aparatos tienen internamente un
microcontrolador que interactúa con usted.

EL BASIC STAMP2 ES UN MODULO NUEVO CON MICROCONTROLADOR


El módulo BASIC Stamp 2 de Parallax que muestra la figura 1-2 tiene un microcontrolador
incrustado, es el chip negro más grande. El resto de los componentes del módulo BASIC
Stamp también los encuentra en los aparatos de consumo de uso diario. Todos juntos
reciben, correctamente, el nombre de sistema de cómputo incrustado, que se llama en
forma abreviada “sistema incrustado”. Con frecuencia, a estos módulos se les llama más
comúnmente “microcontroladores”

Las actividades de este texto lo guiarán a través de circuitos construidos similares a los que
tienen los aparatos de consumo y los dispositivos de alta tecnología. También escribirá
programas de computo que el módulo BASIC Stamp ejecutará. Estos programas harán que
el modulo BASIC Stamp monitoree y controle para que realice funciones útiles.
Página 12 · ¿Qué es un Microcontrolador?

Figura 1-2
Módulo del
Microcontrolador
BASIC Stamp 2.

En este libro “BASIC Stamp” se refiere al módulo del


microcontrolador BASIC Stamp 2.
El nombre de este módulo diseñado y fabricado por Parallax Incorporated se abrevia
como BS2, y es el primero de una serie de módulos que muestra la figura 1-3. Cada
uno de los otros módulos es ligeramente diferente, e incluyen mayor velocidad, más
memoria, màs funciones o una combinación de estas características. Para saber
más de estas características vaya a la liga de “Comparación de Módulos BASIC
Stamp en www.parallax.com/basicstamp

Figura 1-3
Modelos del
BASIC Stamp 2,
de izquierda a
derecha BS2,
BS2e, BS2sx,
BS2p24, BS2p40,
BS2pe, BS2px

INVENTOS MARAVILLOSOS REALIZADOS CON LOS


MICROCONTROLADORES BASIC STAMP
No solamente los aparatos de consumo contienen microcontroladores. Los Robots, la
maquinaria, los diseños aeroespaciales y otros dispositivos de alta tecnología contienen
microcontroladores. Veamos algunos ejemplos se fueron creados con módulos BASIC
Stamp.

Los robots se han diseñado para diversas actividades desde ayudar a los estudiantes a
mejorar su aprendizaje de microcontroladores hasta resolver problemas complicados de
mecánica. La figura 1-4 muestra 2 ejemplos de robots. En cada uno de estos robots los
estudiantes utilizan el BASIC Stamp 2 para leer sensores, controlar motores, y
comunicarse con otras computadoras. El robot de la izquierda es el robot de Parallax Boe-
Bot. Los proyectos del libro Robótica con el Boe-Bot los puede realizar usando el Boe-Bot
después de haber trabajado con las actividades de este libro. El de la derecha, llamado
Inicio · Página 13

ROV submarino (vehículo operado a control remoto) se construyó y verificó en un


programa MATE ((Educación Marina con Tecnología Avanzada). El Instituto de Cursos de
Verano para profesores. Los operadores ven una pantalla de TV que observa el ROV a
través de una videocámara y la controla con brazos y una laptop. El BASIC Stamp mide
profundidad y temperatura, controla el desplazamiento vertical de un motor e intercambia
información con la laptop. El MATE coordina las competencias ROV regionales e
internacionales con estudiantes de niveles medio a superior.

Figura 1-4

Robots educativos.

Imagen dell robot de la


izquierda ROV Boe-Bot
del Instituto de Cursos de
Verano para profesores. A
la derecha otra imagen y
la liga al instituto
www.marinetech.org

Otros robots resuelven problemas complicados, como el robot autónomo de vuelos remotos
y que se muestra a la izquierda de la figura 1-5. Este robot lo construyeron y verificaron
estudiantes de Ingeniería Mecánica de la Universidad de California en Irvine. Utilizaron un
módulo BASIC Stamp para lograr la comunicación con un Sistema de Posicionamiento
Global por Satélite (GPS) para que robot pudiera conocer su posición y altitud. El BASIC
Stamp lee los datos de niveles de los sensores y controla los ajustes del motor para que el
robot se mantenga volando correctamente. El robot mecánico multipies de la derecha de la
Figura 1-5 lo desarrollaron profesores de la Universidad de Nanyang en Singapure. La
tablilla tiene más de 50 módulos BASIC Stamp y todos se comunican entre si por medio de
una red elaborada que ayuda a controlar y coordinar el movimiento de caja conjunto de
piernas. Los robots de este tipo no solamente nos ayudan a comprender mejor los diseños
de la naturaleza sino que además se usan para explorar lugares remotos e incluso en otros
planetas.
Página 14 · ¿Qué es un Microcontrolador?

Figura 1-5
Robots de Investigación
que contienen
microcontroladores.

A la izquierda se muestra
el Robot de Vuelo
Autónomo de la
Universidad de California
en Irvin y a la derecha se
muestra el Robot
“ciempiés” Proyecto
Multipies de la
Universidad de Nanyang.

Con ayuda de los microcontroladores, los robots también pueden realizar tareas cotidianas,
por ejemplo limpiar el pasto. El módulo BASIC Stamp dentro del robot cortador de pasto
que muestra la figura 1-6 le indica cuales son los límites de esa superficie, y también lee
los sensores que detectan los obstáculos además de controlar los motores que lo mueven.

Figur 1-6
Módulo del
Microcontrolador de
BASIC Stamp 2.

Los microcontroladores también se utilizan en proyectos, científicos, de alta tecnología y


aéreo espaciales. La Estación del Tiempo que se muestra a la izquierda de la figura 1-7 se
usa para colectar datos ambiéntales relacionados con el envejecimiento de los arrecifes de
coral. El módulo interno BASIC Stamp colecta estos datos usando una variedad de
sensores y almacena la información para que los científicos la procesen posteriormente. El
submarino, del centro, es un vehículo de exploración submarino, y sus propulsores cámaras
y luces todos están controlados por el microcontrolador de BASIC Stamp.. El Cohete
mostrado a la derecha fue parte de un concurso para lanzar un cohete privado al espacio.
Nadie gano el concurso, pero este cohete casi lo logra! El BASIC Stamp controló todos los
aspectos de la secuencia de lanzamiento.
Inicio · Página 15

Figura 1-7
Ejemplos de Microcontroladores
en la Industria Ambiental y
Aéreo espacial.

A la izquierda tenemos un
Sistema Colector de Datos
Ecológicos EME, en el centro
una Investigación Submarina
del Instituto Harbor Branch y a
la derecha se muestra el
lanzamiento de un cohete JP.
Desde aplicaciones caseras comunes hasta aplicaciones científicas y aéreo espaciales usted
comenzará a aprender los fundamentos de los microcontroladores con proyectos que aquí
desarrollaremos. Al trabajar con las actividades de este libro usted experimentará.

Y aprenderá como usar una variedad de bloques de construcción en los cuales se cimientan
todos estos inventos de alta tecnología. Usted construirá circuitos para pantallas, sensores y
controles de movimiento. Aprenderá como conectar estos circuitos al módulo BASIC
Stamp 2, y luego escribirá programas que haga que controlen pantallas, que colecten los
datos de los sensores, y que controlen el movimiento. Con estas actividades aprenderá
conceptos y técnicas de electrónica y programación de microcontroladores. A su debido
tiempo encontrará el camino para inventar aparatos de sus propios diseños.

HARDWARE Y SOFTWARE
Iniciamos con módulos microcontroladores de BASIC Stamp similares a los de su PC o
laptop. La primer actividad que las personas hacen es desempacar, conectar e instalar y
verificar algún software y quizá pueden escribir con algún software de su propiedad
usando un lenguaje de programación. Si esta es la primera vez que usa un módulo BASIC
Stamp usted hará actividades semejantes a la arriba mencionadas. Si está usted en clases,
es posible que el hardware ya esté instalado listo para usarse. Si este esta es su situación
puede que su maestro le de otras indicaciones. Si no es su caso, en este capítulo le
guiaremos paso a paso para iniciar y poner en marcha el microcontrolador BASIC Stamp.

ACTIVIDAD #1: INSTALACIÓN DEL SOFTWARE


El Editor BASIC Stamp (versión 2.5 o superior) es el software que usará en la mayoría de
la actividades y proyectos de este libro. Utilizará este software para escribir programas que
el módulo BASIC Stamp ejecutará. También usará este software para visualizar mensajes
que el BASIC Stamp genera y le ayudan a comprender lo que está pensando.
Página 16 · ¿Qué es un Microcontrolador?

Requerimientos de su PC o laptop
Necesita una PC para ejecutar el software del editor del BASIC Stamp. Los requerimientos
de las PC son los siguientes:

• Microsoft Windwos 2000 o superior.


• Puerto Serie o USB.
• Conexión y Explorador de Internet.

Descarga del Software desde Internet


Es muy importante, que siempre que sea posible, use la última versión del software editor
de BASIC Stamp. El primer paso es ir al sitio web de Parallax y descargue el software.

9 Uso del Buscador web para ir a www.parallax.com/basicstampsoftware (Figura 1-


8)

Figura 1-8
Página del sotware del
Editor BASIC Stamp en
www.parallax.com/basicsta
mpsoftware

Este es el lugar para


descargar la última versión
de software.

9 Haga click en el botón “Click Here to Download” para descargar la última versión
de software Editor de Windows de BASIC Stamp. (Figura 1-9).
Inicio · Página 17

Figura 1-9
Página del Botón de
descarga del editor
BASIC Stamp.

Haga click en el botón


para empezar la
descarga.

9 Se abrirá la ventana File Download (descargar archivo) y le preguntará si desea


ejecutar o guardar este archivo (Figura 1-10) . Haga click en el botón Save
(guardar).

Figura 1-10
Ventana de Descargar
Archivo.

Haga click en Save y


guarde el archivo en su
computadora.

9 Use SAVE IN para escoger el lugar en donde su computadora guardará el archivo


de instalación, finalmente haga click en SAVE (Figura 1-11).
Página 18 · ¿Qué es un Microcontrolador?

Figura 1-11
Ventana de Guardar
como.

Escoga un lugar para


guardar el Instalador de
Software en su
computadora, luego haga
click en Guardar.

9 Cuando vea “Descarga Completa”, haga click en el boton Run (Ejecutar). Figura
1-12).
9 Siga los Indicadores que aparecen. Puede ver mensajes del Sistema Operativo que
le preguntan que verifique si desea continuar con la instalación. Diga que Si Desea
continuar.

Figura 1-12
Mensaje de Descarga
Completa.

Haga click en Run


(ejecutar)

Confirme que sí
desea continuar.

9 Se abrirá la ventana del Instalador del Editor BASIC Stamp (Figura 1-13). En
seguida haga click y siga las indicaciones, aceptando todas por Default.
Inicio · Página 19

Figura 1-13
Ventana de Instalador
del Editor BASIC
Stamp.

Haga click en
Siguiente.

9 IMPORTANTE: Cuando aparezca el mensaje “Instalar Driver USB” (Figura 1-


14). Marque la ventanita de “Instalación/Actualización Automática del Driver” y
de un click en SIGUIENTE.

Figura 1-14
Mensaje del
Instalación del Driver
USB.

Marque la ventanita
de Instalacion
Automática y de
click en SIGUIENTE.
Página 20 · ¿Qué es un Microcontrolador?

9 Cuando aparezca el mensaje “Listo para Instalar el Programa” (Figura 1-15), de un


clik en el botón “Instalar”. Puede aparecer un barra de progreso, esto puede durar
unos minutos.

Figura 1-15
Listo para Instalar el
Programa.

Para continuar de un
click en “Instalar”.

En este punto, pudiera aparecer una ventana adicional detrás de la ventana actual mientras
se están actualizando los drivers USB. Esta ventana se cerrará eventualmente cuando
termine la instalacion de los drivers. Si usted no ve esta ventana, esto no indica que hay
problemas.

Nota sobre los drivers USB ( “Drivers USB” XE). Los drivers USB que instala por default
el Instalador Editor Windows se requiren para usar el hardware de Parallax que se conecta
al puerto USB de su PC. Las iniciales VCP significan “Puerto de Comunicación Virtual”
(Puerto COM Virtual XE) y le permitirá que los puertos USB de su computadora vea e
intrerprete el hardware de Parallax como un Puerto Serie RS232.
Drivers USB para otros Sistemas Operativos. Los drivers USB VCP que se incluyen el el
Software del Editor de Windows de BASIC Stamp sólo son válidos para el Sistema
Operativo de Windows. En la liga www.parallax.com/usbdrivers encuentra usted mayor
información.

9 Cuando la ventana le indica que la instalación se ha realizado con éxito de un click


en “Terminar” (Figura 1-16)
Inicio · Página 21

Figura 1-16
Instalación
completa del Editor
BASIC Stamp.

De un click en
“Terminar”

ACTIVIDAD #2: USO DEL ARCHIVO “AYUDA” PARA AJUSTES DEL


HARDWARE
En esta sección usted utilizará el Archivo de AYUDA del Editor BASIC Stamp. Dentro del
Archivo AYUDA usted reconocerá las diferencias de las tablillas programables BASIC
Stamp disponibles en el programa de Clases, e identificará la que está utilizando. Luego,
seguirá paso a paso la AYUDA para conectar su hardware a su computadora y verificará
los sistemas de programación del BASIC Stamp.

Ejecución, por primera vez, del Editor 2.5 BASIC Stamp


9 Si usted ve el ícono del Editor BASIC Stamp en su PC, de doble clik en este ícono
(Figura 1-17).
9 O de un click en el Menu de Inicio de su PC, en seguida escoga: Todos los
programas <Parallax Inc > Editor 2.5 BASIC Stamp > Editor 2.5 BASIC Stamp.

Figura 1-17
Icono del Editor BASIC
Stamp

Dé doble click para


iniciar el programa.
Página 22 · ¿Qué es un Microcontrolador?

9 En la Barra de Herramientas del Editor BASIC Stamp de un click en AYUDA


(Figura 1-18), en seguida seleccione Ayuda del BASIC Stamp en el cuadro del
menu.

Figura 1-18
Icono del Editor BASIC
Stamp

Dé doble click para


iniciar el programa.

Figura 1-19 Ayuda del Editor BASIC Stamp.


Inicio · Página 23

9 De un click en la leyenda de la esquina inferior derecha “INICIO DE STAMPS


EN CLASE” que muestra la figura 1-19. De la Página “Bienvenido”(esquina
superior izquierda).

Siguiendo las indicaciones del Archivo AYUDA


Desde aquí, seguirá usted las indicaciones del Archivo AYUDA hasta completar las
siguientes tareas.

• Identifique que Tablilla de Desarrollo BASIC Stamp está utilizando.


• Conecte su Tablilla de Desarrollo a su computadora.
• Verifique su conexión de programación.
• Si es necesario, revise si tiene problemas en su conexión.
• Escriba su primer programa PBASIC para su BASIC Stamp.
• Desenergice su hardware cuando todo esté hecho.

Cuando haya terminado las actividades del Archivo Ayuda, regrese a este libro y continue
con el siguiente resumen ante de pasar al capítulo 2.

¿Que hacer si tengo problemas?


Si tiene problemas mientras sigue las indicaciones de este libro o con el Archivo Ayuda,
usted tiene las siguientes opciones para obtener Soporte Técnico.

En los forums. Mande un mensaje a nuestro foro gratuito Stamps en Clase en la liga
forums.parallax.com
Por email. Mande un email a support@parallax.com
Por teléfono. En Estados Unidos llame sin cobrar al 888-99-STAMP (888-997-8267).
Desde otros lugares llame a (916)524-8333.
Más recursos: Vaya a la liga www.parallax.com/support

RESUMEN
Este capitulo lo guió en las siguientes actividades:
• Una introducción a algunos aparatos que utilizan microcontroladores.
• Una introducción al módulo BASIC Stamp.
• Un paseo por algunos inventos interesantes fabricados con módulos BASIC
Stamp.
• Donde obtener el sofware Editor del módulo BASIC Stamp que usará
precisamente en los experimentos de este libro
• Como instalar el sofware Editor del módulo BASIC Stamp.
• Como usar la ayuda del Editor y el Manual del BASIC Stamp.
Página 24 · ¿Qué es un Microcontrolador?

• Una introducción a los módulos BASIC Stamp, a la Plataforma de Eduacación y la


plataforma de Trabajo en Casa.
• Como ajustar el hardware del BASIC Stamp.
• Como verificar su software y hardware.
• Como escribir y ejecutar un programa en PBASIC.
• Utilizar las instrucciones DEBUG Y END.
• Usar el carácter de control CR y el formato decimal DE.
• Una breve introducción del código ASCII.
• Como desconectar la energía de su Tablilla de Experimentos cuando todo terminó.

Preguntas
1. ¿Qué es un Microcontrolador?
2. ¿El módulo BASIC Stamp es un microcontrolador o contiene un
microcontrolador?
3. ¿ Qué detalles debe usted ver o imaginar para saber si un aparato como un radio o
un teléfono celular contiene un Microcontrolador?
4. ¿Qué significa un apostrofe en el principio de una línea de código de programa
PBASIC?
5. ¿ Qué instrucciones en PBASIC aprendió usted en este capítulo?
6. Pensemos que desea hacer una pausa en su proyecto BASIC Stamp para tomar un
café, o quiza tardarse un poco más y luego regresar a su proyecto después de un
par de días. ¡Qué debe hacer antes de tomarse un descanso?

Ejercicios
1. En esta instrucción, explique la operación del asterisco.
DEBUG DEC 7 * 11

2. Adivine lo que mostrará la Terminal Debug cuando ejecuta esta intrucción


DEBUG DEC 7 + 11

3. Hay un problema con estas dos instrucciones. Cuando ejecuta el código, los
números que se muestran estan muy juntos de tal forma que parece un número
grande en lugar de dos números pequeños. Modifique estas dos instrucciones para
que las respuestas aperezcan en dos líneas diferentes en la Terminal Debug.
DEBUG DEC 7 * 11
DEBUG DEC 7 + 11
Inicio · Página 25

Proyectos
1. Use la Terminal DEBUG para mostrar la solución del problema matemático
1+2+3+4-
2. Guarde su primer programa Turn.bs2 con otro nombre. Si fuera a colocar la
instrucción DEBUG mostrada justamente debajo de la instrucción END, del
programa, ¿cuales otras líneas debería usted borrar para que hiciera el mismo
trabajo?
3. Modifique la copia del programa para verificar su hipótesis (su predicción del lo
que ocurrirá)
DEBUG “Cuanto es 7x11”, CR, “El resultado es”, DEC 7 * 11

Soluciones
Q1. Un microcontrolador es un tipo de computadora en miniatura que contienen los
productos electrónicos.
Q2. El módulo BASIC Stamp contiene un chip microcontrolador.
Q3. Si el aparato tiene botones y pantalla digital, estos detalles indican que dentro hay
un microcontrolador.
Q4. Un comentario.
Q5. Desconecte de la alimentación al proyecto de su BASIC Stamp.

E1. Multiplica los dos operandos 7 y 11, y el resultado del producto es 77. El asterisco
es el operador de multiplicación.
E2. La Terminal Debug mostrará: 18
E3. Para resolver el problema agrerue un retorno (carriage retur) usando CR control
carácter y coma.
DEBUG DEC 7 * 11
DEBUG CR, DEC 7 + 11

P1. Este es un programa para mostrar la solución al problema matemático 1+2+3+4

' ¿Qué es un Microcontrador? - Ch01Prj01_Add1234.bs2


'{$STAMP BS2}
'{$PBASIC 2.5}

DEBUG "¿Qué es 1+2+3+4?"


DEBUG CR, "La respuesta es: "
DEBUG DEC 1+2+3+4

END
Página 26 · ¿Qué es un Microcontrolador?

P2. Se pueden quitar las 3 últimas línes DEBUG. Se necesita otro CR depues del
Mensaje “Hello”

' ¿Qué es un Microcontrolador? - Ch01Prj02_ FirstProgramYourTurn.bs2


' BASIC Stamp manda mensajes a la Terminal Debug .

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Hello, it's me, your BASIC Stamp!", CR

DEBUG "What's 7 X 11?", CR, "The answer is: ", DEC 7 * 11

END

La salida de la Terminal Debug es:

Hola soy yo tu BASIC Stamp!


¿Cuanto es? 7*11
La respuesta es: 77.

El resultado es el mismo que genera el código anterior. Este es un ejmplo del uso
de comas en la salida para sacar mucha información usando solamente una
instrucción DEBUG con sus múltiples elementos.
Encendiendo y Apagando Luces · Página 27

Capítulo 2: Encendiendo y Apagando Luces


LUCES INDICADORAS
Las luces indicadoras son tan comunes que la mayoría de las personas no les da
importancia. La figura 2-1 muestra tres luces indicadoras de un impresora laser. En función
de que luz está encendida, la persona que usa la impresora sabe si está trabajando bien o
necesita atención. Estos son algunos ejemplos de aparatos con luces indicadoras:
autoestereos, televisores, Reproductores DVD, lectores de discos, impresoras, y tableros de
control de sistemas de alarmas.

Figura 2-1
Luces indicadoras.

Las luces indicadoras


se utilizan mucho en
aparatos cotidianos.

La tarea de encender y apagar una luz indicadora consiste en conectarla y desconectarla de


la fuente de alimentación. En algunos casos, la luz indicadora se conecta directamente a la
bateria o fuente de alimentación como la hace la luz de tu Tablilla de Experimentos. Otras
luces indicadoras las conmuta un microcontrolador interno del aparato. Estas son
generalmente luces indicadoras de estado que indican si el aparato está encendido.

ENERGIZANDO UN DIODO EMISOR DE LUZ (LED)


La mayoría de las luces indicadoras que usted ve en los aparatos se llaman Diodos
Emisores de Luz. Usted frecuentemente verá en los libros y diagramas de circuitos que a
los diodos emisores de luz se le identifica con las LED. En este libro generalmente es
pronuncida como tres letras “L-E-D”.Usted construirá un circuito con LED y lo conectará
a la alimentación y el LED se iluminará. Usted desconectará el LED de la fuente y el LED
dejará de emitir luz.
Página 28 · ¿Qué es un Microcontrolador?

Se puede conectar un circuito con LED a la BASIC Stamp, y ésta se puede programar para
que conecte y desconecte el LED de la fuente. Esto es mucho más fácil que manualmente
cambiar el alambrado del circuito para conectar y desconectar la bateria.
La BASIC Stamp también puede programarse para que haga lo siguiente:

• Encender y Apagar un LED con tiempos diferentes.


• Encender y Apagar un LED un numéro específico de veces.
• Controlar un circuito con varios LEDs.
• Controlar el color de un LED Bicolor (dos colores).

ACTIVIDAD #1: CONSTRUCCION Y VERIFICACION DE UN CIRCUITO


CON LED
Es importante que verifique uno por uno los componentes antes de construir con ellos un
sistema mas grande. Esta actividad se concentra en construir y verificar dos circuitos
diferentes con LED. El primer circuito hace que el LED emita luz. El segundo circuito
hace que el LED no emita luz. En la siguiente actividad, usted contruirá un circuito más
grande con LED y lo conectará a la BASIC Stamp. Luego escribirá un programa que haga
que la BASIC Stamp ilumine los LEDs y luego los apague. Al verificar el estado de cada
LED usted se asegura que este circuito funcione, y esto le dará seguridad al conectarlos a
la tablilla de experimentos.

Conociendo el Resistor
Un resistor es un componente que “limita” el flujo de electricidad. Al flujo de electricidad
se le llama corriente. Los resistores tienen un valor que indica que tanto se opone al flujo
de la corriente. El valor de su resistencia se mide en ohms y se identifica con la letra griega
Omega: Ω. Más adelante en este libro verá que K significa kΩ, -o mil ohms. El resistor con
el que usted trabajaráen esta actividad es de 470 Ω y lo muestra la figura 2-2. El resistor
tiene dos alambres (llamadas terminales) una a cada lado. Entre las dos terminales está la
cerámica que se opone al flujo de corriente. La mayoría de los diagramas de circuitos
muestra el resistor como una linea quebrada de la izquierda y esto identifica un resistor de
470 Ω. A esta línea quebrada se le llama símbolo esquemático. El dibujo de la derecha le
indica a los principiantes del BASIC Stamp, que usan este libro, la manera de identificar al
resistor que contiene el Kit, y dónde se debe colocar al contruir su circuito.
Encendiendo y Apagando Luces · Página 29

Gold Figura 2-2


Silver
or Siimbolo esquemático del resistor de
Blank
470 Ω.
470 Ω
Yellow Brown Simbolo esquemático del resistor
Violet (izquierda), Dibujo del resistor
(derecha)

Los resistores utilizados en esta actividad tienen franjas de colores. Hay una combinación
diferente de colores que le indican el valor del resistor. Por ejemplo, el código de colores
para el resistor de 470 Ω es amarillo-violeta-café.

Hay una cuarta franja que indica la tolerancia del resistor. Tolerancia es la medida en
porcentaje que indica cuanto se aleja del valor verdadero. Esta cuarta franja puede ser
dorada (5%), plateada (10%) o sin franja (20%). En las actividades de este libro solamente
es importante su valor, la tolerancia no lo es.

Cada barra de color le dice el valor que corresponde a un dígito. Estos colores/dígitos los
muestra la Tabla 2-1. La figura 2-3 como interpretar las barras de colores con la tabla para
obtener el valor del resistor.

Tabla 2-1
Código de Colores
del Resistor
Digito Color Figura 2-3
Tolerance Código de
0 Negro Code Colores de los
1 Café resistores
2 Rojo
3 Naranja Primer Dígito;
First Digit Number of Zeros Segundo
4 Amarillo
Second Digit dígito;
5 Verde Número de
6 Azúl ceros.
7 Violeta
8 Gris
9 Blanco
Página 30 · ¿Qué es un Microcontrolador?

Este es un ejemplo que muestra la Tabla 2-1 y la Figura 2-3 y en combinación se usan para
encontrar el valor de un resistor con amarillo-violeta-café y vale 470 Ω:

• La primer franja es amarillo, es el dígito de las centenas y vale 4.


• La segunda franja es violeta , es el dígito de la decenas y vale 7.
• La tercer franja es Café. El café vale uno, esto significa que en la unidades
colocamos uno y solamente un cero.

Amarillo-Violeta-Café = 470 Ω.

Conociendo el LED
Un diodo es una válvula unidireccional, y un diodo emisor de luz (LED) emite luz cuando
una corriente pasa por él. A diferencia del código de colores de los resistores, el color de
un LED generalmente indica el color de luz que emitirá cuando lo atravieza una corriente.
Las marcas importantes del LED se encuentran en su estructura. Como el LED es un
elemento unidireccional asegúrese de conectarlo correctamente en su circuito si no lo hace,
éste no funcionará.

La Figura 2-4 muestra el símbolo esquematico de un LED y su dibujo. Un LED tiene dos
terminales. Una terminal se llama ANODO y la otra se llama CATODO. En esta actividad,
contruirá un circuito con LED poniendo atención para asegurarse que el ánodo y el cátodo
están conectados correctamente. En el dibujo la terminal del ánodo se asocia con el signo
positivo (+). En el símbolo esquemático, el ánodo es la parte ancha del triángulo. En el
dibujo la terminal del cátodo no tiene indicación pero en el esquemático es la raya vertical
frente al triángulo.

Figura 2-4
Dibujo de un LED y símbolo
esquemático

Arriba vemos el Dibujo, abajo vemos


el símbolo esquemático.
+
En imágenes posteriores del dibujo
del LED un + estará cerca de la
terminal del ánodo.

LED
Encendiendo y Apagando Luces · Página 31

Cuando empiece armar su circuito verifique el símbolo esquematico y el dibujo. En el


dibujo, observe que las terminales del LED tiene diferentes longitudes. La terminal más
larga corresponde al ánodo, y la más corta al cátodo. También, si mira cuidadosamente la
envolvente de plástico del LED, casi todo es una circunferencia, pero hay una pequeña
parte plana cerca de la terminal más corta y esta es otra forma de identifcar el cátodo. Esta
característica es muy importante si ambas terminales se han cortado a la misma longitud.

Componentes del Circuito de Prueba del LED


(1) LED verde.
(1) Resistor de 470 Ω (amarillo-violeta-café)

Identificación de Partes. Además de los dibujos de la figura 2-2 y figura 2-4 usted puede
usar la foto de la última página del libro para ayudarse a identificar los componentes del kit
utilizados en esta y otras actividades.

Construcción del Circuito de Prueba del LED


Construya el circuito metiendo las terminales del LED y del Resistor en los pequeños
huecos llamados conectores en el área de su Tablilla Prototipo como lo muestra la figura 2-
5. Esta área de su tablilla tiene conectores negros en la parte alta e izquierda. Los
conectores negros de la parte superior tienen la siguientes etiquetas: Vdd(+5V), Vin (es un
voltaje no regulado de su bateria o fuente), y Vss(0 V), también llamado “tierra.” A estas
se les llama terminales de la fuente y se usan para suministrar energía a los circuitos. Los
conectores negros de la izquierda tienen etiquetas como P0, P1, hasta llegar a P15. En estos
conectores usted puede conectar sus circuitos a las terminales de entrada/salida de su
módulo BASIC Stamp.

Vdd Vin Vss


X3

P15 Figura 2-5


P14
P13 Area de Prototipo
P12
P11
P10 Las terminales de la fuente están a lo
P9 ancho de la parte superior, las
P8
P7 terminales de acceso de
P6 entrada/salida están a la izquierda y
P5
P4
en todo lo largo junto a las terminales
P3 sin soldadura de su tablilla prototipo
P2 (de color blanco)
P1
P0
X2
Página 32 · ¿Qué es un Microcontrolador?

Las terminales de Entrada/Salida generalmente se llaman terminales E/S y después de


conectar su circuito a uno o más de estas terminales usted puede programar su BASIC
Stamp para monitorear que el circuito (meta) señales al circuito de salida. Usted hará esto
en la siguiente actividad.

La tablilla blanca con muchos huecos se llama tablilla sin soldadura. En esta area usted
conectará componentes para construir circuitos. Esta area tiene tiene 17 filas de terminales.
Cada fila tiene dos conjuntos de 5 componentes separados por una canal en medio de ellas.
Los cinco terminales o conectores están conectados estre sí mismos. Si usted conecta dos
alambres en el mismo grupo de 5 terminales, ellos harán contacto eléctrico. Dos alambres
en la misma fila pero de lados separados por la canal no hacen contacto entre ellos.
Muchos dispositivos está diseñados para colocarse en esta forma, por ejemplo los botones
push que usaremosen el capítulo 3.

Más acerca de la tablilla prototipo. Para aprender, la historia, como se construyen y como
se usan vea el video en la liga: www.parallax.com/go/WAM

La figura 2-6 muestra un circuito esquemático y una imagen de un circuito contruido en la


Tablilla Prototipo. Cada grupo de 5 conectores puede conectar 5 terminales o alambres. En
este circuito, el resistor y el LED están conectados porque cada uno tiene una terminal
metida en el mismo grupo de 5 conectores. Observe que una terminal del resistor se
conecta a Vdd (+5V) para alimentar el circuito. La otra terminal del resistor está conectada
al ánodo del LED. Para cerrar el circuito del cátodo del LED se conecta a Vss (0 V, tierra).

Ahora está listo para armar el circuito que muestra la figura de abajo 2-6 conectando las
terminales del LED y resistor en las terminales de su tablilla prototipo. Siga estos pasos:

9 Desconecte la alimentación de su Tablilla.


9 Use la Figura 2-4 para decidir en donde conectar el cátodo del LED. Observe la
terminal más corta o la parte plana del plástico del LED.
9 Conecte la terminal del cátodo del LED en uno de los conectores negros
identificados con Vss de la parte superior.
9 Conecte el ánodo del LED en el conector mostrado en el área de la Tablilla de
Experimentos.
9 Conecte una de las terminales del resistor en el mismo grupo de conectores donde
conectó el ánodo del LED.
9 Coloque la otra terminal del resistor en uno los conectores identificados como
Vdd.
Encendiendo y Apagando Luces · Página 33

Dirección. Para el Resistor no es importante, sí es muy importante para el LED. Si


usted conecta el LED en forma inversa, éste no se iluminará cuando conecte la energía. El
resistor si hace su trabajo. El resistor no tiene dirección para conectarse.

9 Reconecte la alimentación a su Tablilla de Experimentos.


9 Verifique el que LED verde se ilumina. Será luz verde.

Figura 2-6
Vdd Vin Vss Led Iluminado, conectado
Vdd X3 directamente a la alimentación.
+
P15
P14 En la izquierda está el esquemático,
P13
470 Ω P12 en la derecha el diagrama de
P11 alambrado.
P10
P9
P8 Observe que una terminal del
LED P7
P6
resistor y la del ánodo del LED
P5 verde están conectadas en el
P4 mismo grupo de 5 conectores. Así
P3
Vss P2 se conectan electricamente los dos
P1 componentes.
P0
X2

Si el LED verde no se ilumina cuando energiza la tablilla de experimentos:

9 Algunos LEDs brillan más cuando se miran desde arriba. Trate de ver lu luz desde
arriba.
9 Si su cuarto está muy iluminado apague algunas lámparas o trate de ver el haz
sobre sus manos.

Si aún así no puede ver la luz verde del LED, haga lo siguiente:

9 Verifique nuevamente que el ánodo y el cátodo están correctamente conectados.


Si no lo están, retire el LED déle media vuelta y vuelva a insertarlo. Esta actividad
no daña al LED simplemente no emite luz.
9 Verifique nuevamente que construyó usted el circuito exactamente como lo
muestra la figura 2-6. Si el kit del microcontrolador que está usando lo utilizó
alguien antes que usted, probablemente el LED esté dañado, utilice otro LED.
9 Si está usted en clase pida ayuda a su profesor.
Página 34 · ¿Qué es un Microcontrolador?

¿Aún tiene problemas? Intente con estos recursos en línea.


Visite los forums Stamps in Class. Si usted no tiene un instructor o amigo que le pueda
ayudar usted puede visitar los forurms de Parallax en la liga http://forums.parallax.com
Si no encuentra respuesta a sus preguntas contacte el Departamento de Soporte en la
siguiente liga: www.parallax.com

Funcionamiento del Circuito de Prueba del LED


Las terminales de la fuente Vdd y Vss proporcionan energía eléctrica de la misma forma
como lo hace una bateria. Las terminales Vdd es como la terminal positiva de la batería, y
las terminales Vss son como la terminal negativa de la bateria. La figura 2-7 muestra como
una bateria aplica energía eléctrica a un circuito originando un flujo de electrones en él. A
este flujo de electrones se le llama Corriente Eléctrica, o solamente Corriente. El resistor
limita la corriente eléctrica. Está corriente hace que el diodo emita luz.

-
- - Figura 2-7
+ - Flujo de electrones iluminando el
N
- - LED { XE”Electron”}
N N
+++ + + -
+++ = N - - El signo menos encerrado en el
+++
--- - círculo se usa para mostrar
- - -N - - electrones circulando desde el
_
-N - N negativo de la batería hasta la
- -
- terminal positiva.
- - - - -

Reacciones Quimicas. Internamente la bateria proporciona corriente al circuito. La terminal


negativa de la bateria contiene un compuesto que tienen moléculas con exceso de
electrones (en la Figura 2-7 se muestra con el signo menos). La terminal positiva de la
bateria tiene un compuesto químico con moléculas que tienen carencia de electrones.
(mostrados con el signo más). Cuando un electrón abandona una molécula de la terminal
negativa y viaja a través del alambre a éste se le llama electron libre (se muestra con el
mismo signo menos). La molécula que pierde este electrón y como consecuencia ya no
tiene carga negativa. Está neutra (se muestra con una N). Cuando un electrón llega a la
terminal positiva, se une a una molécula que tiene carencia de electrones y ahora, tambien
se convierte en molécula neutra.
Encendiendo y Apagando Luces · Página 35

La figura 2-8 muestra como se usa la notación esquemática para describir el flujo de
electricidad en el circuito del LED. Se llama VOLTAJE a la presión electrica del circuito.
Los signos positivo y negativo se usan para mostrar el voltaje aplicado al circuito. La
flecha muestra el sentido de la corriente a través del circuito. Esta flecha casi siempre
apunta en el sentido opuesto de la dirección de corriente de electrones. Fue Benjamin
Franklin quien definió el sentido de corriente de la terminal positiva a la terminal negativa
de un circuito. Con el paso del tiempo los científicos descubrieron el sentido verdadero del
flujo de electrones, pero ya estaba establecido el punto de vista de B. Franklin.

Vdd
Voltage +
Figura 2-8
Resistance Sentido convencional de corriente del
circuito LED.
Current
Los signos + y – aplicados al circuito
LED y la flecha de corriente muestran el
flujo de corriente a través del circuito.

Voltage - Vss

Dibujo del esquemático (como figura2-8) es una imagen que explica como se conectan
uno o más circuitos. Los esquematicos son utilizados por estudiantes, hobistas,
electricistas, ingenieros y todos los que saben trabajar con circuitos eléctricos.
Anexo B. Otros Conceptos de Electricidad, es un anexo que contiene un glosario de
términos y actividades para familiarizarse más con mediciones de voltaje, corriente y
resistencia.

Su turno- Modificación del circuito de prueba del LED.


En la siguiente actividad, usted programará el BASIC Stamp para que el LED se ilumine y
luego se apague continuamente. El BASIC Stamp hará esto conmutando el LED entre dos
conexiones diferentes Vdd y Vss. Recuerde: cuando el resistor se conecta a Vdd el LED se
ilumina. Ahora realice los cambios que muestra la figura 2-9 para verificar que el LED se
apaga. Esto sucede cuando la terminal del resistor se cambia de Vdd a Vss.

9 Desenergice su Tablilla de Experimentos.


9 Saque la terminal del resistor que está conectada en Vdd y conéctela en Vss como
lo muestra la figura 2-9.
9 Energice su Tablilla de Experimentos.
9 Verifique el LED verde no emite luz. No se ilumina en verde.
Página 36 · ¿Qué es un Microcontrolador?

¿Por qué no se ilumina el LED? Como las dos terminales del circuito están conectadas al
mismo voltaje (Vss), no hay diferencia de potencial en el circuito. Entonces no fluye
corriente en el circuito y el LED está apagado.

Vdd Vin Vss


X3
+
P15 Figura 2-9
P14
P13 El LED está apagado.
P12
P11
P10 En la izquierda está el
P9 esquemático y a la
P8
470 Ω P7 derecha está el diagrama
LED P6 del alambrado.
P5
P4
P3
Vss Vss P2
P1
P0
X2

ACTIVIDAD #2: CONTROL DE APAG/ENC CON EL BASIC STAMP


En la actividad #1, se construyeron y verificaron dos circuitos diferentes. El primer circuito
iluminó un LED, el segundo lo apago. La figura 2-10 muestra la forma en que BASIC
Stamp puede hacer la misma actividad si usted conecta un circuito LED a una de sus
terminalesde E/S. En esta actividad, usted conectará el circuito LED al BASIC Stamp y lo
programará para que haga parpadear un LED. Usted también experimentará con programas
que hagan que el BASIC Stamp haga parpadear el LED a diferentes velocidades.
Encendiendo y Apagando Luces · Página 37

Figura 2-10
SOUT 1 24 VIN SOUT 1 24 VIN
SIN 2
BS2
23 VSS SIN 2
BS2
23 VSS BASIC Stamp
ATN
VSS
3

4
22

21
RES
VDD (+5V)
ATN
VSS
3

4
22

21
RES
VDD (+5V)
Conmutando
P0 5 Vdd 20 P15 P0 5 Vdd 20 P15
P1 6 19 P14 P1 6 19 P14 El BASIC Stamp
P2 7 Vss 18 P13 P2 7 Vss 18 P13
P3 8 17 P12 P3 8 17 P12 puede
P4 9 16 P11 P4 9 16 P11 programarse
P5 P10 P5 P10
internamene
10 15 10 15

P6 11 14 P9 P6 11 14 P9
P7 12 13 P8 P7 12 13 P8 para conectar
BS2-IC BS2-IC un LED a Vdd o
Vss.

Hay dos grandes diferencias entre cambiar la conexión manualmente y hacerlo con el
BASIC Stamp. Primero, el BASIC Stamp no tiene que cortar la alimentación del área de
experimentos cuando se hace el cambio físico de Vdd a Vss. Segundo, en tanto que una
persona puede hacer estos cambios varias veces en un minuto, el BASIC Stamp lo puede
hacer miles de veces por segundo.

Partes del Circuito de Prueba del LED.


Las mismas de la Actividad # 1.

Conección del circuito del LED a la BASIC Stamp


El circuito LED que muestra la figura 2-11 se alambra casi igual que el circuito del
ejercicio anterior. La diferencia es que la terminal del resistor manualmente se conmutó del
Vdd al Vss y ahora se conecta a un pin de E/S del BASIC Stamp.

9 Desenergice la Tablilla de Experimentos.


9 Modifique el circuito de la Actividad # 1 y conecte como muestra la figura 2-11.
Página 38 · ¿Qué es un Microcontrolador?

Vdd Vin Vss


P14 Figura 2-11
X3
470 Ω +
P15 Circuito LED
LED P14 controlado con el
P13
P12 BASIC Stamp.
P11
Vss P10
La entrada del
P9
P8 circuito LED ahora
P7 se conecta al pin de
P6
P5 E/S del BASIC
P4 Stamp.
P3
P2
P1
P0
X2

Los resistores son necesarios. Recuerde siempre usar un resistor. Sin el resistor circula
mucha corriente a través del circuito y puede dañar a los elementos del circuito, al BASIC
Stamp y a la Tablilla de Experimentos.

Parpadeo de un LED con un programa


El programa ejemplo hace que un LED parpadee, se ilumine y se apage una vez por
segundo. Esto se hace introduciendo varias técnicas de programación a la vez. Después de
ejecutarlo, usted experimentará con diferentes partes del programa para comprender mejor
como trabaja.

Programa Ejemplo: LedOnOff.bs2


9 Meta el código LedOnOff.bs2 en el Editor del BASIC Stamp.
9 Energize su Tablilla de Experimentos.
9 Ejecute el programa.
9 Verifique que el LED parpadea una vez por segundo.
9 Desenergice la Tablilla después de haber comprobado que el programa funciona
correctamente.
Encendiendo y Apagando Luces · Página 39

'¿Qué es Microcontrolador? - LedOnOff.bs2


'Enciende y Apaga un LED. Se repite 1 vez por segundo en forma contínua.

'{$STAMP BS2}
'{$PBASIC 2.5}

DEBUG "The LED connected to P14 is blinking!"

DO

HIGH 14
PAUSE 500
LOW 14
PAUSE 500

LOOP

Funcionamiento de LedOnOff.bs2
La instrucción DEBUG “The LED connecto to p14 is blinking!” hace que esta frase
aparezca en la Terminal DEBUG. La insrucción HIGH 14 hace que internamente la
BASIC Stamp conecte la terminal 14 a Vdd. Y esto hace que el LED se ilumine.

La instrucción PAUSE 500 hace que el BASIC Stamp no haga nada durante ½ segundo
mientras el LED está iluminado. El número 500 hace que la instrucción PAUSE espere
500/1000 de segundo. El número que sigue de PAUSE se le llama argumento, Los
argumentos le dan a las instrucciones PBASIC la información necesaria para ejecutarse. Si
usted ve PAUSE en el manual BASIC Stamp descubrira que a este número se le llama
Duration del Argumento. El nombre Duration se escogió para este argumento para mostrar
que la instrucción PAUSE se detiene cierta duración de tiempo y se expresa en
milisegundos.

¿Qué es un milisegundo? Un milisegundo es 1/1000 de un segundo. Y se abrevia: ms. 1


segundo dura 1000 milisegundos.

La insrucción LOW 14 hace que internamente el BASIC Stamp conecte la terminal 14 a


VSS. Y esto hace que el LED se apague. Como a LOW 14 le sigue otra PAUSE 500 el
LED se mantiene apagado ½ segundo.

La razón por la que el código se repite a si mismo en forma siempre contínua es porque
está anidado entre las palabras clave PBASIC DO y LOOP. La figura 2-12 muestra como
trabaja el conjunto DO...LOOP. Al colocar el segmento de código que enciende y apaga el
LED con pausas en DO y LOOP, le informa al BASIC Stamp que ejecute estas cuatro
Página 40 · ¿Qué es un Microcontrolador?

instrucciones en forma continua. Y el resultado es que el LED parpadea repetidamente. Y


seguirá parpadeando hasta que desconectes la energía o presiones el botón de RESET, o
hasta que se agote la bateria. Al código que repite un conjunto de instrucciones
indefinidamente se le llama: Bucle Infinito.

DO
HIGH 14 Figura 2-12
PAUSE 250 DO...LOOP
LOW 14 El código colocado entre las palabras
PAUSE 250 DO y LOOP se ejecuta en forma
continua.
LOOP

Una Prueba de Diagnóstico para su Computadora


Aunque no es común, hay algunos sistemas de cómputo como ciertas Laptops y
Estaciones, que detienen el programa PBASIC después de la primera vez que se ejecuta
DO...LOOP. Estas computadoras tienen un diseño de puerto serie no normalizado. Y al
colocar una instrucción DEBUG en el programa LedOnOff.bs2 la Terminal DEBUG se
autoprotege. Usted volverá a ejecutar este programa sin la instrucción DEBUG para ver si
su computadora tiene ese problema en su puerto serie no normalizado. Quizá no es su caso,
pero es muy importante que usted lo conozca.

9 Abra el archivo LedOnOff.bs2


9 Borre toda la instrucción DEBUG.
9 Corra el programa modificado y observe su LED.

Si el LED parpadea en forma contínua, como lo hacía con el programa original cuando
tenía la instrucción DEBUG, su computadora no tiene este problema.

Si el LED parpadea solamente una vez y después se detiene, su computadora tiene un


puerto serie no normalizado. Si usted desconecta el cable del puerto serie de su Tablilla de
Trabajo y presiona el botón RESET, el BASIC Stamp ejecutará el programa correctamente
sin detener el LED. En los programas que escriba usted mismo, siempre necesitará agregar
una sola instrucción DEBUG, como la siguiente:

DEBUG “Program Running”


Encendiendo y Apagando Luces · Página 41

Justamente después de las directivas del compilador. Esto abrirá la Terminal Debug y
mantendra el puerto COM abierto. Esto asegurará que sus programas no se detengan
después que pasen por DO...LOOP o cualquier otras instrucciones de Bucle que aprenderá
en los últimos capítulos. Usted verá estas instrucciones en algunos de los programas
ejemplo que no utilizarían una instrucción DEBUG. De esta forma estará capacitado para
ejecutar los programas restantes de este libro incluso si su computadora tiene un puerto
serie no normalizado, si este es su caso acuerdese de agregar la pequeña instrucción
DEBUG cuando empiece a escribir sus propios programas.

Su Turno – Tiempo y Repeticiones


Al cambiar el argumento Duration de la instrucción PAUSE usted modifica la cantidad de
tiempo que el LED se ilumina y se apaga. Por ejemplo, al cambiar el argumento Duration a
250, hará que el LED parpadee dos veces por segundo. Las instrucciones DO...LOOP en
su programa así quedarían:
DO
HIGH 14
PAUSE 250
LOW 14
PAUSE 250
LOOP

9 Abra el archivo LedOnOff.bs2 y guarde una copia como LedOnOff.YourTurnbs2


9 Cambie el argumento de Duration de la instrucción PAUSE de 500 a 250 y ejecute
el programa.

Si usted desea que el LED parpadee una vez cada tres segundos, con tiempo LOW 2veces
mayor que el tiempo HIGH, usted debe programar PAUSE después de HIGH 14 con 1
segundo usando PAUSE 1000. La PAUSe después de LOW 14 debe ser PAUSE 2000.
DO
HIGH 14
PAUSE 1000
LOW 14
PAUSE 2000
LOOP

9 Haga estas modificaciones y corra el programa el código arriba mostrado.


Página 42 · ¿Qué es un Microcontrolador?

Un experimento agradable es ver que tan cortas pueden ser las pausas y todavía ver
parpadear al LED. Cuando el LED parpadea muy rápido pero el ojo percibe que no
parpadea, a esto se le llama Persistencia de la Visión.

Así se verifica cual es el umbral de su persistencia de visión:

9 Modifique el argumento Duration de la instrucción Pause al valor 100.


9 Corra el programa y verifique el parpadeo del LED.
9 Reduzca 5 unidades el argumento Duration y vuelva a verificar.
9 Continúe reduciendo el argumento Duration hasta que no vea parpadeo en el LED.
Su brillo será el mismo pero sin parpadeo.

Un último experimento es crear solamente un parpadeo. Cuando corra el programa el LED


solamente parpadea una vez. Esto nos permite verificar el funcionamiento de DO...LOOP
Usted puede quitar temporalmente DO...LOOP del programa colocando un apostrofe a la
izquierda de DO y LOOP en seguida lo mostramos:
' DO

HIGH 14
PAUSE 1000
LOW 14
PAUSE 2000

' LOOP

9 Modifique y corra el programa arriba mostrado


9 Explique que sucedió, porqué el LED solamente parpadeo una vez.

Comentario de una línea del código. Al colocar un apostrofe a la izquierda de una


instrucción ésta se convierte en COMENTARIO. Esta es una herramienta útil porque usted
no necesita borrar la instrucción para ver que sucede si la quita del programa. Es más
sencillo agregar o quitar un apostrofe que borrar y re-escibir la instrucción.

ACTIVIDAD #3: CONTEO Y REPETICIÓN


En la actividad anterior, el LED parpadeaba en forma contínua, o parpadeó una vez y luego
se detuvo. ¿Qué hacer si desea que parpadee el LED diez veces? Las computadoras
(incluyendo a BASIC Stamp) son grandes para hacer una tarea continuamente o un número
de veces. Las computadoras se pueden programar para que tomen decisiones en función de
Encendiendo y Apagando Luces · Página 43

varias condiciones. En esta actividad, usted programara al BASIC Stamp para que el LED
parpadee 10 veces.

Partes para el Conteo y Circuito de prueba.


Use el circuito del ejemplo que muestra la figura 2-11.

¿Cuántas veces?
Hay varias formas para hacer que el LED parpadee 10 veces. La forma más simple es
usando el par de instrucciones de bucle: FOR...NEXT. El bucle FOR…NEXT es similar al
bucle DO…LOOP. Cualquiera de los dos bucles se pueden usar para repetir instrucciones
un número determinado de veces. Es más sencillo usar el bucle FOR…NEXT. A este
proceso a veces se le llama Conteo o Bucle Finito.

El bucle FOR...NEXT depende de una variable para ajustar el número de veces que el LED
parpadea. Una variable es una palabra de su elección que se usa para almacenar un valor.
El siguiente programa ejemplo eligió la palabra counter para “contar” las veces que el LED
parpadea.

La Elección de Palabras para nombres de Variables tiene las siguientes reglas:


1. El nombre no puede ser una palabra que use el PBASIC. Las palabras de
PBASIC se llaman Palabras Reservadas y algunas con las que usted ya se ha
familiarizado son DEBUG, PAUSE, HIGH, LOW, DO y LOOP. Usted puede ver la lista
completa de palabras reservadas en el Manual BASIC Stamp.
2. El nombre no puede tener un espacio.
3. Aunque el nombre puede tener letras, números o guines, este debe comenzar con
una letra.
4. El nombre debe tener menos de 33 caracteres.

Programa Ejemplo: LedOnOffTenTimes.bs2


El programa LedOnOffTenTimes.bs2 demuestra como usar el bucle FOR..NEXT para que
el LED parpadee diez veces.

9 Debe construir el Circuito de la Actividad #2 y estár listo para usarse.


9 Meta el código LedOnOffTenTimes.bs2 en el Editor de BASIC Stamp.
9 Energice su Tablilla de Experimentos.
9 Ejecute el Programa
9 Verifique que el LED parpadea diez veces.
Página 44 · ¿Qué es un Microcontrolador?

9 Ejecute por segunda vez el programa y verifique el el valor de COUNTER


mostrado en la Terminal DEBUG coincide precisamente con el número de veces
que el LED parpades. Sugerencia: En lugar de hacer click en RUN por segunda
vez, usted puede presionar y liberar el boton de RESET de su Tablilla de
Expimentos.

' ¿Qué es un Microcontrolador? - LedOnOffTenTimes.bs2


' Apagado y Encendido de LED Repite 10 veces.

' {$STAMP BS2}


' {$PBASIC 2.5}

counter VAR Byte

FOR counter = 1 TO 10

DEBUG ? counter

HIGH 14
PAUSE 500
LOW 14
PAUSE 500

NEXT

DEBUG "All done!"

END

¿Cómo funciona el programa LedOnOffTenTimes.bs2?


Esta línea de PBASIC:

Counter VAR Byte

Le indica al Editor BASIC Stamp que su programa usará la palabra “counter” como una
variable de puede almacer un byte de información
Encendiendo y Apagando Luces · Página 45

¿Qué es un Byte? Un Byte es un espacio de memoria para almacenar un número entre 0 y


255 The BASIC Stamp tiene 4 diferentes tipos de variables, y pueden almacenar diferentes
rangos de números:

Table 2-2: Tipos de Variable y Valores


Tipos de Variables Rango de Valores
Bit 0a1
Nib 0 a 15
Byte 0 a 255
Word 0 a 65535

Una instrucción DEBUG puede incluir “formatos” que determinan cuanta información
deberá mostrar la Teminal Debug. Colocando el signo de interrogación “?” antes de una
variable en un instrucción DEBUG le indica a la Terminal Debug que muestre el nombre
de la variable y su valor. De la siguiente forma:

DEBUG ? counter

Muestra el nombre y el valor de la variable “counter” en la Terminal Debug.

El bucle FOR...NEXT y todas sus instrucciones se muestra más abajo. La frase FOR
counter = 1 to 10, le indica al BASIC Stamp que tiene que poner la variable counter al
valor 1, y que ejecute las siguientes instrucciones hasta que llegue al siguiente NEXT.
Cuando el BASIC Stamp obtiene el siguiente NEXT, regresa a FOR. La instrucción FOR
agrega un uno al valor de counter. En seguida, verifica para ver si counter es mayor que
diez. Si no es diez repite el proceso. Cuando el valor de counter finalmente alcanza el valor
once, el programa brinca las instrucciones que están entre FOR y NEXT y se mueve a la
instrucción que está depués de NEXT.

FOR counter = 1 to 10

DEBUG ? counter

HIGH 14
PAUSE 500
LOW 14
PAUSE 500

NEXT
Página 46 · ¿Qué es un Microcontrolador?

La instrucción que sigue después de NEXT es

DEBUG “All done!”

Esta instrucción se incluye justamente para mostrar lo que hace el programa después de 10
veces del bucle FOR...NEXT. Se mueve a la instrucción que sigue a NEXT.

Su turno – Otras formas de Contar


9 En el programa LedOnOffTenTimes.bs2, sustituya la frase:
FOR counter = 1 to 10 por la frase FOR counter = 1 to 20

9 Ejecute el programa. ¿ Qué hizo el programa en forma diferente, usted esperaba


ésta acción?
9 Realice una segunda modificación a la instrucción FOR. Esta vez haga el
siguiente cambio:
FOR counter = 20 to 120 STEP 10

¿Cuántas veces parpadeo el LED? ¿Qué valores mostró la Terminal Debug?

ACTIVIDAD #4: CONSTRUYENDO Y VERIFICANDO UN SEGUNDO


CIRCUITO CON LED
Los LED indicadores se pueden usar para decirle al usuario de una máquina muchas cosas.
Muchos aparatos necesitan, dos, tres o más LEDs para indicarle al usuario si la máquina
está lista o no lo está, si hay un problema, si ya se termino la tarea, etcétera.

En esta actividad usted repetirá el circuito LED de la Actividad #1 para un segundo


circuito LED. En seguida ajustará el programa ejemplo de la Actividad #2 para asegurarse
que está correctamente conectado el circuito LED a la BASIC Stamp. Después de eso,
usted modificará el programa ejemplo de la Actividad #2 para hacer que los LEDs
trabajen en paralelo.

Partes adicionales requeridas


Además de las partes utilizadas en las Actividades #1 y #2 usted necesitará las siguientes
partes:

Un LED amarillo
Un resistor de 470 Ω (amarillo-violeta-café).
Encendiendo y Apagando Luces · Página 47

Construyendo y verificando un segundo circuito LED.


En la actividad #1, usted verificó manualmente el primer circuito LED para asegurarse que
funcionara y después lo conecto a la BASIC Stamp. Antes de conectar el segundo circuito
LED a la BASIC Stamp es importante que también lo verifique.

9 Desenergice su Tablilla de Experimentos.


9 Construya el segundo circuito LED que muestra la figura 2-13.
9 Energice su Tablilla de Experimentos.
9 ¿Se iluminó el circuito LED que usted agregó? Si se iluminó, continue. Si no se
iluminó en la Actividad #1 hay sugerencias de búsqueda de fallas que puede
utilizar para este circuito.

Vdd Vin Vss


X3 +
+
Vdd P15
P14
P13 Figura 2-13
P12
P11
470 Ω P10 Circuito Manual
P9 de Prueba para
P8
P14 P7 el segundo LED.
P6
470 Ω P5
P4
LED P3
LED P2
P1
P0
Vss Vss X2

9 Desenergice su Tablilla de Experimentos.


9 Modifique el segundo circuito LED que acaba justamente de verificar conectando
el resistor del circuito LED a la terminal P15 como lo muestra la figura 2-14.
Página 48 · ¿Qué es un Microcontrolador?

Figura 2-14
Vdd Vin Vss
X3 + Conexión del
+ segundo LED
P15
P14
al BASIC
P15 P13 Stamp
470 Ω P12
P11
P14 P10 En la parte
470 Ω P9 izquierda el
P8
P7 esquemático
LED LED
P6 y en la parte
P5
P4
derecha el
Vss Vss P3 diagrama de
P2 cableado.
P1
P0
X2

Uso de un Programa para verificar el segundo circuito LED


En la actividad #2, usted uso el programa ejemplo y las instrucciones HIGH y LOW para
controlar el circuito LED conectado a la terminal P14. Estas instrucciones tendran que
modificarse para controlar el circuito LED controlado a la terminal P15. El lugar de usar
HIGH 14 y LOW14 usted usará HIGH 15 y LOW 15.

Programa Ejemplo: TestSecondLed.bs2


9 Meta el programa TestSecondLed.bs2 al Editor de BASIC Stamp.
9 Energice su Tablilla de Experimentos.
9 Corra el programa TestSecondLed.bs2
9 Asegurese que el circuito LED conectado a la terminal 15 está parpadeando. Si el
LED está parpadeando vaya al siguiente ejemplo (Controlando ambos LEDs). Si
el LED conectado a la terminal 15 no parpadea verifique que no tenga errores de
alambrado y el programa errores de escritura e intentelo nuevamente.

¿Qué es un Microcontrolador- TestSecondLed.bs2


' Encienda y Apague el LED conectado a P15 .
' Repitalo 1 vez por segundo en forma contínua.

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Program Running!"

DO
Encendiendo y Apagando Luces · Página 49

HIGH 15
PAUSE 500
LOW 15
PAUSE 500
LOOP

Control de ambos LEDs


Claro que usted puede controlar ambos LEDs al mismo tiempo. Una forma de hacer esto es
usando dos instrucciones HIGH antes de la instrucción PAUSE. Una instrucción HIGH
coloca el pin P14 en HIGH y la siguiente instrucción HIGH coloca el pin 15 en HIGH.
También necesitará usted dos instrucciones LOW para apagar los LEDs. Es verdad que
ambos LEDs no se iluminarán y apagarán EXACTAMENTE al mismo tiempo porque
primero se ilumina o apaga uno y luego el otro. Sin embargo solo hay un milisegundo de
diferencia entre los dos cambios y el ojo humano no podrá detectarlo.

Programa Ejemplo: FlashBothLeds.bs2


9 Mete el código FlashBothLeds.bs2 en el Editor de BASIC Stamp.
9 Ejecute el programa.
9 Observe que ambos LEDs parecen parpadear al mismo tiempo.

' ¿Qué esMicrocontrolador? - FlashBothLeds.bs2


' Encienda y Apague los LEDs conectados en P14 y P15 .

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Program Running!"

DO

HIGH 14
HIGH 15
PAUSE 500
LOW 14
LOW 15
PAUSE 500
LOOP

Su turno: LEDs Alternados


Ustede puede hacer que los LEDs alternen combinando las instrucciones HIGH y LOW
que controlan los terminales de Entrada/Salida. Esto significa que cuando un LED esta
iluminado, el otro está apagado.
Página 50 · ¿Qué es un Microcontrolador?

9 Modifique el programa: FlashBothLeds.bs2 de forma que entre las instrucciones


DO y LOOP quede de la siguiente forma:

HIGH 14
LOW 15
PAUSE 500
LOW 14
HIGH 15
PAUSE 500

9 Ejecute la versión modifica del programa FlashBothLeds.bs2 y verifique que los


LEDs parpadean en forma alternada: uno iluminado y el otro encendido.

ACTIVIDAD #5: CONTROL DE UN LED BICOLOR USANDO LA


DIRECCIÓN DE LA CORRIENTE
El aparato que muestra la figura 2-15 es un monitor de seguridad para llaves electrónicas.
Cuando se usa una llave electrónica con el código correcto, el LED cambia de color y abre
la puerta. A este tipo de LED se le llama LED BICOLOR. Esta actividad responde a dos
preguntas:

1-¿Cómo cambia el LED de Color?


2-¿Cómo puede usted hacerlo con el BASIC Stamp?

Figura 2-15
LED Bicolor en un
Aparato de Seguridad.

Cuando la puerta esta


asegurada el LED bicolor
se iluma en rojo. Cuando
la puerta se libera con el
código correcto de un una
llave electrónica el LED
se ilumina en verde.
Encendiendo y Apagando Luces · Página 51

Conociendo el LED Bicolor


La figura 2-16 muestra el símbolo y el dibujo de un LED Bicolor.

Figura 2-16
LED Bicolor.

A la izquierda está su
símbolo y a la derecha el
dibujo.

En realidad un LED Bicolor son justamente dos LEDs en un solo empaque. La figura 2-17
muestra como se polariza el LED para que se ilumine verde. Al invetir las terminales del
LED ahora se ilumina rojo. Igual que los otros LEDs cuando conecta ambas terminales del
circuito a Vss el LED se apaga.

Figura 2-17
Voltaje aplicado al
LED Bicolor.

A la izquierda
verde, en el centro
rojo y a la derecha
apagado.

Partes del Circuito LED Bicolor


Un LED Bicolor
Un Resistor de 470 Ωs (amarillo-violeta-café).
Un trozo de alambre.
Página 52 · ¿Qué es un Microcontrolador?

Construyendo y verificando el Circuito LED Bicolor


La figura 2-18 muestra el manual de prueba para un LED Bicolor.

9 Desenergice su Tablilla de Experimentos.


9 Construya el circuito que muestra el lado izquierdo de la Figura 2-18.
9 Energice su Tablilla de Experimentos y verifique que el LED Bicolor se ilumina
verde.
9 Desenergice nuevamente su Tablilla de Experimentos.
9 Modifique su circuito como se muestra en el lado derecho de la Figura 2-18.
9 Energice su Tablilla de Experimentos.
9 Verifique que el LED Bicolor se ilumina rojo.
9 Desenergice su Tablilla de Experimentos

¿Qué sucede si invierto el LED Bicolor? Los LEDs Bicolor se fabrican


como el que muestra la figura 2-16 y también con los colores invertidos. Si
su LED Bicolor se ilumina rojo cuando se conecta en el circuito y debería
brillar verde y viceversa, los colores de su LED están invertidos. Si este es
su situación, conecte siempre el pin 1 en donde el diagrama dice pin 2 y el
pin 2 donde el diagrama muestra el pin 1.

Vdd
1 Vin 2 Vss Vdd
2 Vin 1 Vss
X3 X3
Figura 2-18
P15 P15
P14 P14 Prueba manual del
P13 P13 LED Bicolor.
P12 P12
P11 P11
P10 P10 En la izquierda está
P9 P9
P8 P8 el LED Bicolor verde
P7 P7 y en la derecha el
P6 P6
P5 P5
rojo.
P4 P4
P3 P3
P2 P2
P1 P1
P0 P0
X2 X2

Para controlar un LED Bicolor con el BASIC Stamp se requieren dos pines E/S. Después
que usted ha verificado manualmente que el LED Bicolor funciona usando la prueba
Encendiendo y Apagando Luces · Página 53

manual, usted puede conectar el circuito LEDs en el BASIC Stamp como se muestra en la
figura 2-19.

Figura 2-19
LED Bicolor conectado
en el BASIC Stamp.

En la izquierda está el
esquemático y a la
derecha el alambrado.

Control del LED Bicolor en el BASIC Stamp


La figura 2-20 muestra como se usan los pines P14 y P15 para controlar el flujo de
corriente en el circuito LED Bicolor. El esquemático superior muestra el flujo de corriente
en el LED verde cuando P15 está en Vdd con HIGH, y P14 está en Vss con LOW. Esto
hace que el LED verde permita que circule corrientea través de él cuando se aplica el
voltaje como se muestra, en cambio el LED rojo actua como una válvula abierta y no hay
flujo de corriente en él. El LED Bicolor se ilumina verde.

El esquemático inferior muestra lo que sucede cuando P15 está en Vs y P14 está en Vdd.
Ahora está invertido el voltaje. El LED verde está apagado y no circula por él corriente. En
tanto que el LED rojo está iluminado y la corriente circula por circuito en dirección
contraria.
Página 54 · ¿Qué es un Microcontrolador?

HIGH = Vdd P15


1
Current

2
LOW = Vss P14 Figura 2-20
470 Ω Circuito de Prueba del
LED Bicolor.

Arriba la corriente circula


LOW = Vss P15 en el LED verde y abajo
1 en el LED rojo.

Current

2
HIGH = Vdd P14
470 Ω

La figura 2-20 la clave para programar el BASIC Stamp y hacer que el LED Bicolor emita
dos colores. El esquemático superior muestra el LED Bicolor en verde usando HIGH 15 y
LOW 14. El esquemático inferior muestra el LED Bicolor en rojo usando LOW 15 y
HIGH 14. Para apagar el LED se manda LOW a los pines P14 y P15. En otras palabras use
LOW en ambos pines.

El LED Bicolor Apagado. Si usted manda HIGH a los pines P14 y P15 es LED se
apaga.¿Por qué? Porque la diferencia de potencial (voltaje) entre los pines P14 y P15 es la
misma ya sea que mande HIGH o LOW a los pines P14 y P16.

Programa Ejemplo. TestBiColorLED.bs2


9 Energice su Tabllilla de Experimentos.
9 Meta el código TestBiColorLED.bs2 al Editor del BASIC Stamo.
9 Verique que el LED cambia a los estados rojo, verde y apagado.

' ¿Qué es un Microcontrolador - TestBiColorLed.bs2


' Parpadea el LED bicolor rojo y verde en forma contínua.

' {$STAMP BS2}


‘ {$PBASIC 2.5}

PAUSE 1000
DEBUG "Program Running!", CR
Encendiendo y Apagando Luces · Página 55

DO

DEBUG "Green..."
HIGH 15
LOW 14
PAUSE 1500

DEBUG "Red..."
LOW 15
HIGH 14
PAUSE 1500

DEBUG "Off...", CR
LOW 15
LOW 14
PAUSE 1500

LOOP

Su Turno – Mostrando Colores


En la actividad #3, una variable de nombre “counter” se usó para controla el número de
veces que parpadea un LED. ¿Qué sucede si usted usa el “counter “ para controlar el
argumento de Duration de la instrucción PAUSE para cambiar repetidamente el color del
LED Bicolor.

9 Renombre y guarde TestBiColorLED.bs2 ahora con el nombre


TestBiColorLEDYourTurn.bs2
Agrege una declaración de variable “counter” antes de la instrucción DO

counter VAR BYTE

9 Reemplace el bucle DO…LOOP con el bucle FOR…NEXT.

FOR counter = 1 to 50
HIGH 15
LOW 14
PAUSE counter

LOW 15
HIGH 14
PAUSE counter
NEXT

Cuando lo haya hecho, el código sera como esto:


Página 56 · ¿Qué es un Microcontrolador?

counter VAR BYTE

DO

FOR counter = 1 to 50

HIGH 15
LOW 14
PAUSE counter

LOW 15
HIGH 14
PAUSE counter

NEXT

LOOP

En el principio de cada vuelta del bucle FOR…NEXT, el valor de “Pausa” (valor de


Duration) vale solamente un milisegundo. Cada vez que se ejecuta el bucle FOR..NEXT, la
pausa se incrementa un milisegundo hasta llegar a 50 milisegundo. El bucle DO...LOOP
hace que el bucle FOR...NEXT una y otra vez y otra vez.

9 Ejecute el programa modificado y observe su funcionamiento.

RESUMEN
El BASIC Stamp se puede programar para conmutar un circuito con un LED que se
ilumine y se apague. Los LEDs indicadores son útiles en una variedad de lugares como
monitores de computadoras, lectores de discos, y otros aparatos. Estudiamos una forma
para identificar las terminales cátodo y ánodo del LED. Un circuito LED debe tener un
resistor para limitar la que corriente que circula por él. Estudiamos los Resistores junto con
uno de sus códigos más comunes para conocer el valor del resistor.

El BASIC Stamp ilumina y apaga un circuito LED conectando internamente un pin de


Entrada/Salida: E/S, ya sea a Vdd o Vss. La instrucción HIGH se utiliza para que el
BASIC Stamp internamente cone uno de sus pines a Vdd, y la instrucción LOW se usa
para conectar internamente un pin a Vss. La instrucción PAUSE se usa para que el BASIC
Stamp no ejecute instrucciones en un tiempo determinado.

Esta se utilizó para que el LED se mantenga apagado o encendido cierta cantidad de
tiempo. La cantidad de tiempo la determina el número usado en el valor de “Duration” de
la instrucción PAUSE.
Encendiendo y Apagando Luces · Página 57

El bucle DO...LOOP se puede usar para crear un bucle infinito. Las instrucción localizadas
entre DO y LOOP son palabras clave que se ejecutarán una y otra y otra vez. Aunque esta
acción se llama bucle infinito, el programa puede reiniciarse conectactando y
desconectando la alimentación o presionando y liberando el boton RESET. También puede
cargarse un nuevo programa en el BASIC Stamp y este borrará el programa con bucle
infinito. Los bucles de “CONTEO” pueden hacerse con FOR...NEXT, una variable para
ajustar el número de repeticiones que el bucle tiene que hacer y números para especificar
donde comenzar y terminar el CONTEO:

Estudiamos la Dirección de Corriente y la Polaridad del Voltaje para usar un LED Bicolor.
Si el voltaje se aplica al circuito LED, la corriente pasará por el en una dirección, y este se
iluminará de un color particular. Si se invierte la polaridad del Voltaje, la corriente lo
atravieza en dirección inversa y éste se ilumina con un color diferente.

Preguntas
1. ¿Cúal es el nombre de la letra Griega: Ω, y que unidades tiene Ω?
2. ¿Que resistor deja pasar más corriente en un circuito, uno de 470 Ω o uno de 1000
Ω?
3. ¿Cómo conecta dos alambres usando una tablilla? ¿Puede usted usar una tablilla
para conectar cuatro alambres juntos?
4. ¿Qué necesita usted hacer siempre antes de modificar un circuito construido en su
tablilla?
5. ¿Cuánto dura la instrucción PAUSE 10000?
6. ¿Cómo hace usted que el BASIC Stamp no haga nada durante un minuto?
7. ¿Cuáles son los diferentes tipos de variables?
8. Cabe el valor 500 en un Byte?
9. ¿Qué hace la instrucción HIGH?

Ejercicios
1. Dibuje el diagrama de un circuito LED semejante al que realizó en la Actividad
#2, pero conecte el circuito al pin P13 en lugar del P14. Explique como
modificaría el programa LedOnOff.bs2 para que haga que parpadee su circuito
LED cuatro veces por segundo.
2. Explique como modificaría el programa LedOnOffTenTimes.bs2 para hacer que
parpade el circuito LED 500 veces antes de detenerse. Sugerencia: Solamente
necesita modificar dos líneas del código.
Página 58 · ¿Qué es un Microcontrolador?

Proyectos
1. Haga un contador descendente de 10 segundos, usando un LED amarillo y un
LED Bicolor. Haga que el inicie el LED Bicolor en rojo durante 3 segundos.
Después de 3 segundo el LED Bicolor cambie a verde. Cuando cambie el LED
Bicolor a verde, haga que el LED amarillo parpadee una vez por segundos durante
diez segundos. Cuando termine de parpadear el LED amarillo el LED Bicolor
debe regresar a rojo y mantenerse en ese color.

Soluciones
Q1. Omega se refiere a OHM, es la unidad que indica la oposición al flujo de
corriente.
Q2. Un resistor de 470 Ω: a mayor valor ohmico mayor oposición, en consecuencia
valores ohmicos menores permiten mayor flujo de corriente.
Q3. Para conectar dos alambres insertelos en el mismo grupo de 5 terminales. Usted
puede conectar 4 alambres insertandolos en el mismo grupo de 5 terminales.
Q4. Desconecte la Alimentación.
Q5. 10 segundos.
Q6. PAUSE 60000.
Q7. Bit, Nib, Byte y Word.
Q8. No. El valor mayor que cabe en un Byte es 255. El valor 500 esta fuera de escala
de un Byte.
Q9. HIGH 7 hará que BASIC Stamp conecte internamente el pin P7 a Vdd.

E1. La Duración de PAUSE se debe reducir a 500 ms/4 = 125 ms. Para usar el pin
P13, HIGH 14 Y LOW 14 deben cambiarse por HIGH 13 Y LOW 13.

P13 DO
470 Ω HIGH 13
LED PAUSE 125
LOW 13
PAUSE 125
Vss LOOP

E2. La variable “counter” debe cambiarse de tamaño de Byte a Word, y la instrucción


FOR debe modificarse para que cuente de 1 a 5000.

counter VAR Word


FOR counter = 1 to 5000
Encendiendo y Apagando Luces · Página 59

DEBUG ? counter, CR
HIGH 14
PAUSE 500
LOW 14
PAUSE 500
NEXT

P1. El diagrama del LED Bicolor de la izquierda permanece sin cambios de la Figura
2-19. El diagrama del LED amarillo está copiado de la Figura 2-11. Para este
proyecto el pin P14 se cambió por P13 y se usó un LED amarillo en lugar del
verde. Nota: Cuando BASIC Stamp ejecuta las instrucciones se va un modo de
bajo consumo y hace que el LED Bicolor parpadee brevemente cada 2.3 segundos.
Esto mismo se aplica después que el programa ejecuta una instrucción END. Hay
otra instrucción llamada “STOP” que usted puede agregar al final de los
programas para hacer que mantenga las señales HIGH/LOW sin ir al modo de bajo
consumo, evitando así el parpadeo.

P13
470 Ω
Yellow
LED

Vss

'¿Qué es im Microcontrolador? - Ch02Prj01_Countdown.bs2


' Contador Descendente de 10 s con LEDs, Rojo, Amarillo, Verde
' LED Bicolor en P15, LED Amarillo en P13

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Program Running!"

counter VAR Byte

' Rojo durante 3 segundos ' LED Bicolor rojo


LOW 15
HIGH 14
PAUSE 3000
' Verde 10 segundoss...
HIGH 15 ' LED Bicolor verde
LOW 14

' el LED amarilla está parpadeando


Página 60 · ¿Qué es un Microcontrolador?

FOR counter = 1 TO 10
HIGH 13 ' LED Amarillo Encendido
PAUSE 500
LOW 13 ' LED Amarillo Apagado
PAUSE 500
NEXT

' LED Rojo encendido ' LED BiColor Rojo


LOW 15
HIGH 14
Entrada Digital – Botón Push · Página 61

Capítulo 3: Entrada Digital – Botones Push


LOS ENCUENTRAS EN CALCULADORAS, JUEGOS DE MANO Y
APARATOS
¿En un día cuántos aparatos con Botones Push utilizas? Estos son algunos ejemplos que
pueden estar en tu lista: computadoras, ratones, calculadoras, hornos de microondas,
controles remotos, juegos de mano, y teléfonos celulares. En cada aparato hay un
microcontrolador que escanea los botones push y esperando que el circuito haga cambios.
Cuando cambia el circuito el microcontrolador detecta el cambio y toma alguna acción. Al
finalizar este capítulo, tendrás la experiencia para diseñar circuitos con botones push y
programarás el BASIC Stamp para monitorear y tomar acciones cuando ocurran los
cambios.

RECIBIENDO VERSUS MANDANDO SEÑALES HIGH Y LOW


En el capítulo #2, tú programaste el BASIC Stamp para mandar señales high y low y
utilizaste los circuitos LED para mostrar estas señales. Mandar señales high y low significa
que utilizaste un pin de BASIC Stamp como “salida”. En este capítulo usaras un pin de
BASIC Stamp como “entrada”. Cuando un pin está como entrada, éste “escucha” señales
high/low en lugar de mandarlas. Tú meterás estas señales al BASIC Stamp usando un
circuito botón push y pogramarás el BASIC Stamp para reconocer si el botón push está
presionado o libre.

Otras palabras que significan mandar, high/low y recibir: Mandar señales high/low son
descritas de diferentes formas. Tú puedes mandar señales cuando estás Transmitiendo,
Controlando o Conmutando. En lugar de high/low decimos binario, o niveles de lógica TTL,
o niveles de lógica CMOS o señales Booleanas. Otra palabra para “recibir” es “sensar.”

ACTIVIDAD #1: VERIFICANDO UN BOTÓN PUSH CON UN CIRCUITO LED


¿Puedo usar un botón push para manda un señal high o low al BASIC Stamp y controlar un
LED con el botón push? La respuesta es sí, en esta actividad lo usará para verificar un
botón push.

Conociendo el botón push


La figura 3-1 muestra el símbolo y el dibujo de un botón push normalmente abierto. Dos
de las terminales del botón push se conectan en cada terminal. Esto significa que al
conectar un alambre al pin 1 del botón push también queda conectado al pin 4.
Página 62 · ¿Qué es un Microcontrolador?

La misma regla se aplica para las terminales 2 y 3. La razón por la cual el botón push no
tiene solamente dos terminales es poque necesita estabilidad. Si el botón push sólo tuviera
dos terminales es porque éstas podrian eventualmente doblarse y romperse por la presión
que recibe cuando los usuarios lo presionan.

Figura 3-1
1, 4 Botón Push Normalmente Abierto
1 4
2, 3 2 3 En la izquierda está el símbolo y a la
derecha un dibujo.

El lado izquierdo de la figura 3-2 muestra como se ve un botón push normalmente abierto
cuando no está presionado. Cuando el botón no se presiona hay un espacio entre las
terminales 1,4 y 2,3. Este espacio hace que la terminal 1,4 no conduzca corriente a las
terminales 2,3. A esto se le llama Circuito Abierto. El nombre “normalmente abierto”
significa que el estado normal (sin presionar) forma un circuito abierto. Cuando se presiona
el botón, el espacio entre las terminales 1,4 y 2,3 se cierra con un metal conductor. A esto
se le llama Circuito Cerrado y la corriente fluye a través del botón push.

Figura 3-2
1, 4 1, 4 Botón Push Normalmente Abierto
2, 3 2, 3
A la izquierda está sin presionar, a la
derecha está presionado.

Parte de Prueba para el Botón Push.


Un Led – escoga un color.
Un Resistor de 470 Ω (amarillo-violeta-café).
Un alambre.

Construcción del Circuito de Prueba del Botón push


La figura 3-3 muestra el circuito a construir para verificar manualmente el botón push.
Entrada Digital – Botón Push · Página 63

Siempre desconecte la alimentación de su Tablilla de Experimentos antes de hacer


cambios en su circuito de prueba. De aquí en adelante las instrucciones ya no le dirán:
Desconecte la Alimentación...entre cada modificación de circuito. A usted le corresponde
recordar esta instrucción.
Siempre conecte la alimentación en su Tablilla de Experimentos antes de descargar un
programa a la BASIC Stamp.

9 Construya el circuito que muestra la Figura 3-3


Vdd

Vdd Vin Vss +


X3
1, 4
P15
2, 3 P14
P13 Figura 3-3
P12
P11
P10
470 Ω P9
Circuito de prueba del
P8 botón push.
P7
P6
P5
LED P4
P3
P2
P1
P0
Vss X2

Verificando el botón push


Cuando no está presionado el botón push no se iluminará el LED. Si está bien construído,
cuando el botón push esté presionado el LED se iluminará.

Señales de Alarma. Si el LED de “Pwr” de su Tablilla de Experimentos parpadea, brilla


poco o no brilla cuando reconecta la alimentación, esto significa que hay un corto circuito
de Vdd a Vss o de Vin a Vss. Si esto sucede, desconecte inmediatamente la alimentación y
encuentre y corriga el error de su circuito.
El LED construido en la Tablilla de Experimentos es diferente. Si el LED solo brilla
cuando está ejecutandose un programa esto puede estar asociado con la Fuente o con la
Ejecución. Cuando termina un programa porque ejecuta una instrucción END o porque se
ejecuta fuera de las instruciones el LED se apagará.

9 Verifique que está apagado el LED de su circuuito de prueba.


9 Mantenga presionado el Botón Push y verifique que se ilumina el LED mientras
mantiene presionado el botón push.
Página 64 · ¿Qué es un Microcontrolador?

Funcionamiento del Circuito Botón Push


El lado izquierdo de la Figura 3-4 muestra que sucede cuando el botón push no está
presionado. El circuito LED no está conectado a Vdd. Es un circuito abierto que no puede
conducir corriente. Al presionar el botón push, como lo muestra el lado derecho de la
figura, usted cierra la conexión entre la terminales con un metal conductor. Esto forma una
trayectoria para que los electrones fluyan a través del circuito y como consecuencia el LED
se ilumina.
Vdd Vdd
Figura 3-4
El botón push está No
presionado y presionado.
1, 4 1, 4

2, 3 2, 3 En la izquierda el botón
push sin presionar es un
circuito abierto y no hay
No 470 Ω 470 Ω luz.
Current Current

En la derecha el botón
esta presionado y es un
LED LED
circuito cerrado y emite
luz.

Vss Vss

Su turno - Apague el LED con un botón push


La figura 3-5 muestra un circuito que hace que el LED se comporte diferente. Cuando el
botón no está presionado, se ilumina el LED, cuando se presiona el botón el LED se apaga.
Como este botón push conecta un conductor entre las terminales 1,,4 y 2,3 cuando se
presiona, esto significa que la electricidad puede tomar la trayectoria de menor resistencia
a través del botón push en lugar de a través del Led. A diferencia de los corto circuitos
estudiados en el Recuadro de Señales de Alarma, el corto circuito del botón presionado y
se refleja en las terminales del LED no dañan el circuito y realizan un propósito útil.

9 Construya el circuito que muestra la Figura 3-5.


9 Repita las pruebas que realizó en el primer circuito de botón push ahora en este
nuevo circuito.
Entrada Digital – Botón Push · Página 65

Vdd Vdd Vin Vss


X3
P15
1, 4 P14
P13
P12
P11 + Figura 3-5
LED P10
P9
2, 3 P8 El LED refleja el corto
P7 circuito del botón push.
P6
P5
470 Ω P4
P3
P2
P1
P0
Vss X2

¿Se puede conectar de esta forma el LED? Hasta ahora, el cátodo del LED se ha
conectado siempre a Vss. Ahora el LED está en un lugar diferente en el circuito, y su ánodo
conectado a Vdd. Las personas preguntas si esta conexión no rompe las leyes del circuito y
la respuesta es no. La presión eléctrica que proporciona Vdd y Vss es 5 volts. El LED rojo
solo necesita 1.7 volts y el resistor usará los 3.3 volts restantes sin importar el orden en que
estén conectados.

ACTIVIDAD #2: LEYENDO UN BOTÓN PUSH CON EL BASIC STAMP


En esta actividad usted conectará un circuito botón push a el BASIC Stamp y mostrará si el
botón está o no está presionado. Usted hará esto escribiendo un programa PBSIC que
verifique el estado del botón y lo muestre en la Terminal Debug.

Partes del Circuito Botón Push


Un botón push – normalmente abierto.
Un resistor de 220 Ω (rojo-rojo-café).
Un resistor de 10 KΩ (café-negro-naranja).
Dos alambres.

Construyendo el Circuito Botón Push para el BASIC Stamp


La figura 3-6 muestra el circuito botón push que se conecta al pin P3, E/S, del BASIC
Stamp.

9 Construya el circuito que muestra la Figura 3-6.


Página 66 · ¿Qué es un Microcontrolador?

Figura 3-6
Vdd Vin Vss Circuito Botón
X3 Push conectado al
P15 pin P3.
Vdd P14
P13
P12 En el diagrama de
P11 alambrado el
P10
P9
resistor de 220 Ω
P8 del lado izquierdo
P7 conecta el botón
P3 P6
P5 push a P3
220 Ω
10 kΩ
P4 mientras que el
P3
P2 resistor de 10 KΩ
P1 de la derecha
P0
Vss X2 conecta al botón
push a Vss.

La figura 3-7 muestra como el BASIC Stamp ve cuando el botón push está presionado y
cuando no está presionado. Cuando el botón push está presiondado, el BASIC Stamp sensa
que Vdd se conecta a P3. Internamente el BASIC Stamp coloca un “1” lógico en un parte
de su memoria que almacena la información de los pines de Entrada/Salida. Cuando el
botón push no está presionado, no sensa Vdd, senda Vss a través del los resistores de 10 Ω
y 220 Ω. Y ahora se almacena un “0” lógico en la misma localidad de memoria que
almacenó el “1” cuando el botón push estaba presionado.
Entrada Digital – Botón Push · Página 67

Vdd SOUT 1 24 VIN


SIN 2 23 VSS
ATN 3
BS2 22 RES
VSS 4 21 VDD (+5V)
P0 5 20 P15
P1 6 19 P14
P2 7
1 18 P13
P3 8 17 P12
P4 9 0 16 P11
220 Ω P5 10 15 P10
10 kΩ P6 11 14 P9 Figura 3-7
P7 P8
BASIC Stamp leyendo un
12 13

BS2-IC
botón push.
Vss
Arriba, cuando está
Vdd presionado el botón el
SOUT
SIN
1

2
24

23
VIN
VSS
BASIC Stamp lee un “1”
ATN 3
BS2 22 RES Abajo, cuando no está
VSS
P0
4

5
21

20
VDD (+5V)
P15
presionado el botón el
P1 6 19 P14 BASIC Stamp lee un “0”
P2 7 1 18 P13
P3 8 17 P12
P4 9 0 16 P11
220 Ω P5 10 15 P10
10 kΩ P6 11 14 P9
P7 12 13 P8

BS2-IC

Vss

Binario y Circuitos. Para formar números el sistema de base-2 números usa solamente
dos digitos 1 y 0 y estos valores binarios pueden transmitirse de un dispositivo a otro. El
BASIC Stamp interpreta Vdd como un 1 binario y el Vss como un 0 binario. En forma
semejante, cuando el BASIC Stamp fija un pin de entrada/salida a Vdd usuando un HIGH
manda un “1”. Cuando fija un pin de entrada/salida a Vss usando un LOW manda un “0”.
Esta es un forma muy común de comunicación de números binarios usada por muchos
chips de computadoras y otros dispositivos.

Programando el BASIC Stamp para Monitorear el Botón Push.


El BASIC Stamp almacena un 1 o un 0 sensando el pin P3 en una localidad de memoria
llamada IN3. Este es un Programa Ejemplo que muestra como se realiza este trabajo:

Programa Ejemplo: ReadPushbuttonState.bs2


El siguiente programa hace que el BASIC Stamp verifique al botón push cada ¼ de
segundo y mande el valor de IN3 a la Terminal Debug.
Página 68 · ¿Qué es un Microcontrolador?

La Figura 3-8 muestra la Terminal Debug mientras se ejecuta el programa. Cuando se


presiona el botón push, la Terminal Debug muestra el número 1, y cuando el botón push no
se presiona, la Terminal Debug muestra el número 0.

Figura 3-8
La Terminal Debug muestra los
Estados del botón push.

La Terminal Debug muestra un 1


cuando el botón push está
presionado y un 0 cuando con está
presionado.

9 Meta el programa ReadPushbuttonState.bs2 en el Editor de BASIC Stamp.


9 Ejecute el programa.
9 Verifique que la Terminal Debug muestre el valor 0 cuando el botón push no está
presionado.
9 Verifique que la Terminal Debug muestre el valor 1 cuando el botón push se
mantiene presionado.

'¿Qué es un Microcontrolador? - ReadPushbuttonState.bs2


' Verifica y manda el estado de botón push a Terminal Debug cada 1/4 segundo.

' {$STAMP BS2}


' {$PBASIC 2.5}

DO

DEBUG ? IN3
PAUSE 250

LOOP

Funcionamiento de ReadPushbuttonState.bs2
El bucle DO...LOOP en el programa se repite cada ¼ de segundo por la instrucción
PAUSE 250. Cada vez que se ejecuta DO...LOOP, la instrucción DEBUG ? IN3 manda el
valor que hay en IN3 a la Terminal Debug. El valor de IN3 es el Estado que el pin P3 sensa
en el instante que se ejecuta la instrucción DEBUG.
Entrada Digital – Botón Push · Página 69

Su turno – Un Botón Push con un Resistor en Pull-up


El circuito que acaba de trabajar tiene un resistor conectado a Vss. Este resistor se llama
resistor de pull-down porque “jala” el voltaje de P3 hacia abajo: Vss (0 volts) cuando el
botón no está presionado. La Figura 3-9 muestra un circuito botón push que usa un resistor
pull-up. Este resistor “jala” el voltaja hacia arriba: Vdd (5 volts) cuando el botón no está
presionado. Ahora se han invertido las reglas. Cuando el botón no esta presionado, IN3
almacena un 1, y cuando el botón esta presionado, IN3 almacena un 0.

El resistor de 220Ω se usa en este ejemplo para proteger el pin E/S del BASIC Stamp.
Esta es una buena técnica que se usa en los prototipos, en los productos este resistor se
reemplaza con un alambre (ya que un alambre cuesta menos que un resistor)

9 Modifique su circuito como se muestra en la Figura 2-9.


9 Vuelva a ejecutar el programa: ReadPushbuttonState.bs2
9 Usando la Terminal Debug, verifique que IN3 está en 2 cuando no se presiona el
botón y un 0 cuando el botón está presionado.
Vdd Vin Vss
X3
Vdd
P15
P14
P13
10 kΩ P12
P11
P10
Figura 3-9
P3 P9
P8
220 Ω P7 Circuito Botón push
P6 modificado.
P5
P4
P3
P2
Vss P1
P0
X2

Low Activo vs High Activo. El circuito botón push de la Figura 3-9 se llama Low activo
poque manda a el BASIC Stamp una señal baja (Vss) cuando el botón está presionado. El
circuito botón push de la Figura 3-6 se llama High activo poque manda una señal alta
(Vdd) cuando el botón está presionado.
Página 70 · ¿Qué es un Microcontrolador?

ACTIVIDAD #3: CONTROL CON BOTÓN PUSH DE UN CIRCUITO LED


La figura 3-10 muestra una vista amplificada de un botón push y un LED que se usan para
ajustar los parámetros de un monitor de computadora. Este es uno de muchos aparatos que
tienen un botón push que usted puede presionar para ajustar el aparato y un LED que le
muestra cual es el estado del aparato.

Figura 3-10

Botón y LED de un
Monitor de
Computadora

El BASIC Stamp se puede programar para que tome decisiones basadas en lo que sensa.
Por ejemplo, se puede programar para que parpadee el LED 10 veces por segundo cuando
se presiona el botón.

Botón y partes del Circuito LED


Un botón push normalmente abierto.
Un resistor de 20 KΩ (café-negro-naranja).
Un LED de cualquier color.
Un resistor de 220 Ω (rojo-rojo-café).
Un resistor de 470 Ω (amarillo-violeta-café).
Varios alambres.

Construyendo los circuito del Botón Push y el LED


La Figura 3-11 muestra el circuito del botón push usado en la actividad que acaba de
terminar junto con el circuito LED del Capítulo 2, Actividad #2.

9 Construya el circuito que muestra la Figura 3-11.


Entrada Digital – Botón Push · Página 71

P14
470 Ω
LED Vdd Vin Vss
X3
+
Vss P15
P14
P13
Vdd P12 Figura 3-11
P11
P10 Botón push y
P9 circuito LED.
P8
P7
P3 P6
P5
220 Ω P4
10 kΩ P3
P2
P1
P0
Vss X2

Programando el control del botón push


El BASIC Stamp se puede programar para que tome decisiones usando las instrucciones
IF..THEN...ELSE. El Programa Ejemplo que usted ejecutará hará parpadear el LED
cuando se presione el botón push. Cada vez que se ejecuta el bucle DO...LOOP, la
instrucción IF...THE...ELSE verifica el estado del botón push y decide si parpadea o no
parpadea el LED.

Programa Ejemplo: PushbuttonControlledLed.bs2


9 Meta el programa PushbuttonControlledLed.bs2 en el Editor del BASIC Stamp y
ejecútelo.
9 Verifique que el LED parpadea mientras mantiene presionado el botón push.
9 Verifique que el LED no parpadea cuando no presiona el botón push.
Página 72 · ¿Qué es un Microcontrolador?

' ¿Qué es un Microcontrolador - PushbuttonControlledLed.bs2


' Verifique el estado del botón 10 veces por segundo y cuando se presiona
parpadea el LED.

' {$STAMP BS2}


' {$PBASIC 2.5}

DO

DEBUG ? IN3

IF (IN3 = 1) THEN
HIGH 14
PAUSE 50
LOW 14
PAUSE 50

ELSE
PAUSE 100

ENDIF

LOOP

Funcionamiento del programa: PushbuttonControlledLed.bs2


Este programa es una versión modificada de ReadPushbuttonState.bs2 estudiado en la
actividad anterior. Las instrucciones DO...LOOP y DEBUG ? IN3 son las mismas. La
instrucción PAUSE 250 se reemplazó con las instrucciones IF...THEN...ELSE. Cuando es
verdadera la condición después de IF (IN3=1) se ejecutarán las istrucciónes que están
después de THEN. Ellas se ejecutarán hasta llegar a ELSE, en este punto el programa
brinca hasta ENDIF y avanza. Cuando la condición posterior de IF no es verdadera
(IN3=1), las instrucciones después de la instrucción ELSE se ejecutarán hasta llegar a
ENDIF.

Ustede puede hacer una lista detallada de lo que debe hacer, para que le ayude a planear el
programa o para describir lo que hace . Esta clase de lista se llama Pseudo Código
[XE”Pseudo Código”} y el ejemplo de abajo utiliza el pseudo código para describir el
funcionamiento de PushbuttonControlledLed.bs2.

• Haga varias veces las instrucciones que están entre Aquí y la instrucción Loop.
o Muestre el valor de IN3 en la Terminal Debug
o Si el valor de IN3 es 1, Entonces
ƒ El LED se ilumina
ƒ Espere un 1/20 de segundo
ƒ El LED se apaga
Entrada Digital – Botón Push · Página 73

ƒ Espere un 1/20 de segundo


o Else (si el valor de IN2 es 0)
ƒ no haga nada solo espere la misma cantidad de tiempo que
hubiera tomado el parpadeo del LED (1/10 de segundo
• Loop

Su turno – Más rápido/Más lento


9 Guarde el programa ejemplo con un nombre diferente.
9 Modifique el programa de tal forma que el LED parpadee dos veces más rápido
cuando mantiene usted presionado el botón push.
9 Modifique el prograga de tal forma que el LED parpadee la mitad de rápido
cuando mantiene presionado el botón push.

ACTIVIDAD #4: DOS BOTONES PUSH CONTROLANDO DOS CIRCUITOS


LEDS
Vamos agregar al proyecto un segundo botón push y analizar como funciona. Para hacer
esta actividad más interesante, agregaremos un segundo circuito LED para usar el segundo
botón push para que lo controle.

Partes del botón push y el circuito LED


Dos botones push – normalmente abiertos.
Dos resistores de 10 KΩ (café-negro-naranja).
Dos resistores de 470 Ω (amarillo-violeta-café).
Dos resistores de 220 Ω (rojo-rojo-café).
Dos Led de cualquier color.
Alambres para puentes.

Agregando un botón push y un circuito Led.


La Figura 3-12 muestra un segundo circuit LED y botón push que se agrega al circuito que
usted verificó en la actividad anterior.

9 Construya el circuito que muestra la Figura 3-12. Si necesita ayuda para el circuito
mostrado en el diagrama, use como guía el diagrama de alambrado que muestra la
Figura 3-13.
9 Modifique el programa ReadPushbuttonState.bs2 para que ahora lea IN4 en lugar
de IN3, y úselo para verificar su segundo circuito botón push.
Página 74 · ¿Qué es un Microcontrolador?

P15
470 Ω
P14
470 Ω

LED LED

Vss Vss
Figura 3-12
Diagrama Esquemático
Vdd Vdd de los Botones push y
LEDs.
P4
220 Ω

P3
220 Ω
10 kΩ 10 kΩ

Vss Vss
Los Puntos indican conexiones. Hay 3 lugares donde se intersectan las líneas en la
Figura 3-12, pero solamente dos de estas intersecciones tienen puntos. Cuando dos líneas
se insersectan con un punto, esto significa que están conectadas electricamente. Por
ejemplo, el resistor de 10 KΩ en la parte inferior derecha de la Figura 3-12 tiene una de sus
terminales P3 conectadas al botón push y la otra a la terminal del resistorde 220Ω. Cuando
dos lines se intersectan pero no hay punto, esto significa que estos dos alambres NO
ESTÁN conectadas eléctricamente. Por ejemplo, la línea que conecta a P4 deñ botón push
y el resistor de 10 KΩ no está conectado con P3 del botón push porque no hay punto en
esa intersección.
Entrada Digital – Botón Push · Página 75

Vdd Vin Vss


X3 ++
P15
P14
P13
P12 Figura 3-13
P11
P10 Diagrama de alambrado de dos
P9 Botones push y dos LEDs.
P8
P7
P6
P5
P4
P3
P2
P1
P0
X2

Programación de Control del Botón push


En la actividad anterior usted experimentó tomar decisiones usando la intrucción:
IF...THEN...ELSE. Existe la instrucción IF...ELSEIF...ELSE. Esto es grandioso para
decidir cual LED va a parpadear. El siguiente Programa Ejemplo mostra como funciona.

Programa Ejemplo: PushbuttonControlOfTwoLeds.bs2


9 Meta y ejecute PushbuttonControlOfTwoLeds.bs2 en el Editor BASIC Stamp.
9 Verifique que parpadea el LED conectado en P14 mientras mantiene presionado el
botón push conecta en P3.
9 También verifique que parpadea el LED conectado en P15mientras mantiene
presionado el botón push conecta en P4.

' ¿Qué es un Microcontrolador - PushbuttonControlOfTwoLeds.bs2


' Si P3 está presionado parpadea el LED de P14, si P4 está presionado parpadea
el LED de P15.
' P4 está presionado.

' {$STAMP BS2}


' {$PBASIC 2.5}

PAUSE 1000

DO
Página 76 · ¿Qué es un Microcontrolador?

DEBUG HOME
DEBUG ? IN4
DEBUG ? IN3

IF (IN3 = 1) THEN
HIGH 14
PAUSE 50
ELSEIF (IN4 = 1) THEN
HIGH 15
PAUSE 50
ELSE
PAUSE 50
ENDIF

LOW 14
LOW 15

PAUSE 50

LOOP

Funcionamiento del programa PushbuttonControlOfTwoLeds.bs2


Si la Terminal Debug muestra a IN3 y IN4 rotando es muy difícil leer lo que se está
mostrando. Una forma de detener la rotación es mandando siempte el cursor a la posición
izquierda superior de la Terminal Debug utilizando el Control de Caracteres HOME:
DEBUG HOME

Al mandar el curso a la posición izquierda superior cada vez a través del bucle
DO...LOOP, las instrucciones
DEBUG ? IN4
DEBUG ? IN3

Se muestran otra vez los valores de IN3 y IN4 en la misma parte de la Terminal Debug
La palabra clave DO inicia el bucle de este programa
DO
Estas instrucciones de la frase IF son las mismas del Programa Ejemplo de la actividad
anterior.
IF (IN3 = 1) THEN
HIGH 14
PAUSE 50
Entrada Digital – Botón Push · Página 77

Aquí es donde está la ayuda de ELSEIF. Si IN3 no es 1 pero IN4 es 1, hacemos que
conecte el LED de P15 en lugar del LED conectado en P14.
ELSEIF (IN4 = 1) THEN
HIGH 15
PAUSE 50

Si no es verdadera ninguna frase , deseamos que se espere 50 ms sin cambiar el estado de


cualquier circuito LED.
ELSE
PAUSE 50
Cuando hayas teminado con todas las necisiones, no olvides ENDIF.
ENDIF

Es hora de apagar el LED y hacer pausa otra vez. Tu podrías tratar de decidir que LED
quieres que parpadee. Las instrucciones de PBASIC lo ejecutan bonito y rápido, entonces
¿podemos apagarlos y olvidarnos de tomar decisiones?
LOW 14
LOW 15

PAUSE 50

La instrucción LOOP regresa el programa a la instrucción DO al proceso de verificar los


botones push y cambiar los estados de los LED y empezar una y otra y otra vez.
LOOP

Su turno - ¿Podemos presionar los dos Botones Push?


El Programa Ejemplo tiene una falla. Trate de presionar ambos botones al mismo tiempo y
observe la falla. Usted podría espererar que ambos LEDs parpadeen, pero no lo hacen
porque solamente se está ejecutando un bloque de códigos IF...ELSEIF...ELSE antes de
que brinque al siguiente ENDIF. De esta forma puede usted resolver este problema o falla.

9 Guarde en programa PushbuttonControlOfTwoLeds.bs2 con un nombre diferente.


9 Reemplace la instrucción IF y el siguiente bloque:
IF ( IN3 = 1) THEN
HIGH 14
PAUSE 50

Con el siguiente bloque


Página 78 · ¿Qué es un Microcontrolador?

IF ( IN3 = 1) AND (IN4 = 1) THEN


HIGH 14
HIGH 15
PAUSE 50

Un Bloque de Códigos es un grupo de instrucciones. Si la frase IF de arriba tiene un


bloque de códigos con tres instrucciones (HIGH, HIGH y PAUSE). Entonces la frase de
ELSEIF tiene un bloque de códigoscon dos instrucciones (HIGH, pause)

Ejecute su programa modificado y vea si maneja los dos botones push y los circuitos LED
como usted esperaría.

La palabra clave AND se puede usar en una instrucción IF...THEN para verificar si es
verdadera más de una condición. Todas las condiciones con AND deben ser verdaderas
para que la frase IF sea verdadera.
La palabra clave OR se puede usar para verificar si por lo menos una de la condiciones es
verdadera.

También puede usted modificar el programa para que el LED que parpadea lo haga con
diferentes cantidades de tiempo. Por ejemplo, usted puede reducir Duration de la
Instrucción PAUSE a 10 en ambos botones push, e incrementar PAUSE para el LED en
P14 hasta 100, e incrementar PASE para el LED P15 hasta 200.

9 Modifique las instrucciones PAUSE en el IF y en las dos frases de ELSEIF como


se comentó.
9 Ejecute el programa modificado.
9 Observe la diferencia en el comportamiento de cada LED.

ACTIVIDAD #5: PRUEBA DEL TIEMPO DE REACCIÓN DE UN


TEMPORIZADOR
Usted es el Ingeniero de Sistemas Incrustados en una compañía de Videojuegos. El
Departamento de Mercadotecnia recomienda que se debe agregar un circuito para verificar
el tiempo de reacción para el siguiente Controlador de Juego Portátil. Su siguiente tarea es
desarrollar una prueba para verifica el tiempo de reacción.

La solución que usted construirá y verificará en esta actividad es un ejemplo de cómo


resolver este problema, pero ésta no la única solución. Antes de continuar, detengase un
momento para pensar como diseñaría esta prueba de reacción.
Entrada Digital – Botón Push · Página 79

Partes del Juego Tiempo de Reacción de un Temporizador


Un LED Bicolor.
Un Resistor de 470 Ω (amarillo-violeta-café).
Un Botón push – normalmente abierto.
Un Resistor de 10 KΩ (café-negro-naranja).
Un Resistor de 220 Ω (rojo-rojo-café).
Alambres para puentes.

Construcción del Circuito Tiempo de Reacción de un Temporizador


La Figura 3-14 muestra los diagramas esquemático y alambrado de un circuito que puede
usarse con el BASIC Stampo para hace un juego de Tiempo de Reacción.

9 Construya el circuito que muestra la Figura 3-14.


9 Ejecute el programa TestBiColorLED.bs2 del capítulo 2, actividad #5 para
verificar el circuito LED Bicolor y asegurese que está bien alambrado.
9 Si usted reconstruye el circuito botón push para esta actividad, ejecute el programa
ReadPushbuttonState.bs2 de la Acitivad #2 de este capítulo para asegurarse que el
botón push está trabajando correctamente.
P15
1

1 2
Vdd Vin Vss
X3
2
P14 P15
470 Ω P14 Figura 3-14
P13
P12 Circuito del
Vdd P11
Juego
P10
P9 Tiempo de
P8 Reacción
P7
P6
P3 P5
P4
220 Ω P3
10 kΩ P2
P1
P0
X2
Vss
Página 80 · ¿Qué es un Microcontrolador?

Programación del Tiempo de Reacción


El siguiente Programa Ejemplo apagará el LED Bicolor hasta que el Jugador mantenga
presionado el botón push. Cuando el botón push se mantiene presionado, el LED se
iluminará rojo por un corto período de tiempo. Cuando se ilumina verde, el jugador tiene
que soltar el botón push tan pronto como él o ella puedan. Así el programa mide el tiempo
de reacción que emplea el jugador en soltar el botón push para iluminarse verde.

El programa ejemplo también muestra como funcionan los conceptos “polling” y conteo.
Polling es el proceso de verificar algo una vez y otra vez muy rápidamente para ver si este
proceso ha cambiado. Conteo es el proceso de agregar un número a una variable cada vez
que se hace (o no se hace) algo. En este programa, el BASIC Stamp verificará el cambio
“Polling” cuando el LED Bicolor cambia a verde hasta que se libera el botón push. Este
esperará 1/1000 de segundo usando la instrucción PAUSE 1. Cada vez que verifica y el
botón no se ha liberado, agregará un 1 a la variable de Conteo llamada timeCounter.
Cuando el botón push se ha liberado, el programa deja de verificar “Polling” y manda un
mensaje a la Terminal DEBUG y ésta muestra el valor de la variable timeCounter.

Programa Ejemplo. ReactionTimer.bs2


9 Meta y ejecute el programa ReactionTimer.bs2
9 Siga las indicaciones de la Terminal Debug (vea la Figura 3-15)

Figura 3-15
Instrucciones de Tiempo de
Reacción en la Terminal Debug.
Entrada Digital – Botón Push · Página 81

' ¿Qué es un Microcontrolador? - ReactionTimer.bs2


' Prueba del tiempo de reacción del botón y un LED bicolor.

' {$STAMP BS2}


' {$PBASIC 2.5}

PAUSE 1000 ' Espera 1 s antes 1er mensaje.

timeCounter VAR Word ' Declara variable para almacenar tiempo.

DEBUG "Press and hold pushbutton", CR, ' Muestra instrucciones tiempo reac.
"to make light turn red.", CR, CR,
"When light turns green, let", CR,
"go as fast as you can.", CR, CR

DO ' Comienza bucle principal.

DO ' Se repite el bucle anidado...


LOOP UNTIL IN3 = 1 ' hasta que se presiona botón.

HIGH 14 ' LED Bicolor en rojo.


LOW 15

PAUSE 1000 ' Retardo 1 segundo.

LOW 14 ' LED Bicolor en verde.


HIGH 15

timeCounter = 0 ' Carga Counter con cero.


DO ' Bucle anidado, cuenta tiempo.

PAUSE 1
timeCounter = timeCounter + 1

LOOP UNTIL IN3 = 0 'hasta liberar el botón.

LOW 15 ' LED Bicolor Apagado.

DEBUG "Your time was ", DEC timeCounter, ' Muestra medición de tiempo.
" ms.", CR, CR,
"To play again, hold the ", CR, ' Instrucciones para jugar otra vez.
"button down again.", CR, CR

LOOP ' Regresa para comenzar bucle principal".


Página 82 · ¿Qué es un Microcontrolador?

Funcionamiento del Programa ReactionTimer.bs2


Como el programa tendrá que mantener identificado el número de veces que se verificó
(Polling) el botón de push, declararemos una variable que se llama “timeCounter”.

Variables Inicializando en Cero: Cuando declaramos una variable en PBASIC,


automáticamente su valor es CERO hasta que una instrucción la ajusta a su nuevo valor.

La instrucción DEBUG contiene instrucciones para el jugador del juego.


DEBUG “ Mantenga presionado el botón push”, CR
“para iliminar el LED rojo.” , CR, CR,
“cuando el LED se haga verde” , CR,
“hágalo tan rápido como pueda.” . CR, CR

Las instrucciones DO...LOOP se pueden anidar. En otras palabras, usted puede color un
bucle DO...LOOP dentro de otro bucle DO...LOOP.

DO ‘Comienza el bucle principal.


DO ‘Se repite el bucle anidado...
LOOP UNTIL IN3 = 1 ‘hasta presiona el botón push.
‘Aquí esta esl resto del programa.
LOOP

Merece nuestra atención el bucle interno DO...LOOP. Un bucle DO...LOOP puede usar
una condición para decidir si se sale o no se sale del bucle y se mueve a las siguientes
instrucciones. El bucle DO...LOOP se repite así mismo todo el tiempo que el botón push
no está presionado (IN3 = 0). El bucle DO...LOOP se ejecutará una vez y otra vez hasta
que IN3 = 1. Entonces, el progama se moverá a la siguiente instrucción después de la frase
LOOP UNTIL. Este es un ejemplo de “Polling.” El bucle DO...LOOP UNTIL verifica
hasta que se presiona el botón push.

DO ‘Se repite el bucle anidado...


LOOP UNTIL IN3 = 1 ‘hasta que se presiona el botón push

Las instrucciones que siguen inmediatamente despues de la frase LOOP UNTIL cambian
el LED Bicolor rojo, se mantiene así un segundo y luego se ilumina verde.
HIGH 14 ‘LED Bicolor en rojo
LOW 15
PAUSE 100 ‘Retardo de 1 segundo
LOW 14 ‘LED Bicolor en verde
Entrada Digital – Botón Push · Página 83

HIGH 15

Tan pronto como el LED Bicolor se ilumina verde, es momento de empezar a contar para
saber cuanto tiempo utiliza el jugador en liberar el botón push. La variable timeCount se
ajusta en cero, y entonces otro bucle DO...LOOP con la condición UNTIL empieza a
repetirse a si mismo. Y se repite así mismo hasta que el jugador liber el botón push
(IN3=0). Cada vez que pasa por el bucle, el BASIC stamp lo retarda 1 milisegundo usando
PAUSE 1, y también agrega un 1 al valor de la variable timeCounter.
TimeCounter = 0 ‘Fija el timeCounter en cero
DO ‘Bucle anidado, cuenta el tiempo
PAUSE = 1
timeCounter = timeCounter + 1
LOOP UNTIL IN3 = 0 ‘hasta que se libera el botón push

Después de liberar el botón push, el LED Bicolor se apaga.


LOW 15

Los resultados se muestran en la Terminal Debug.

DEBUG "Su tiempo fue ", DEC timeCounter,


" ms.", CR, CR,
"Para volver a jugar, mantenga presionado ", CR,
"nuevamente el botón.", CR, CR

La última frase del programa es LOOP, que regresa al programa al primer DO.

Su turno – Revisión del Diseño (Topicos Avanzados)


El departamento de Mercadotecnia dió su prototipo a algunos jugadores. Cuando los
jugadores lo analizaron, el departamento de Mercadotecnia regresó a usted una lista de tres
problemas que tiene que corregir antes de construir su nuevo prototipo con su controlador.

9 Guarde el programa Reaction Timer-bs2 con un nuevo nombre (por ejemplo:


ReactionTimerYourTurn.bs2)

En seguida se analiza la lista de los problemas y sus soluciones.

Problema 1: Cuando el jugador mantiene presionado el botón push durante 30


segundos, su scores es realmente alrededor de 14,000 ms o 14 segundos. ¡Esto se tiene
que corregir!
Página 84 · ¿Qué es un Microcontrolador?

Se requiere 1 ms para la ejecución del mismo bucle y agregar un 1 a la variable


timeCounter sin incluir la instrucción PAUSE 1. A esto se le llama Código sobrepasado, y
es la cantidad de tiempo que le toma a BASIC Stamp para ejecutar las instrucciones. Una
solución rápida que mejorará la exactitud es volver comentario la instrucción PAUSE 1,
agregandole un apóstrofe a su izquierda.
‘PAUSE 1

9 Haga que PAUSE 1 sea un comentario y verifique para ver la exactitud del
programa.

En lugar de cambiar “delay” a comentario, otra forma para solucionar el programa es


multiplicar su resultado por dos. Por ejemplo, justamente antes de la instrucción DEBUG
que muestra el número de milisegundo, usted puede insertar una unstrucción que
multiplique el resultado por dos:
timeCounter = timeCounter * 2 ‘<- Agregue este
DEBUG “Su tiempo fue”, DEC timeCounter, “ms.”, CR, CR

9 Quite el comentario de la instrucción PAUSE borrando el apóstrofe e intente la


solución de la multiplicación por dos.

Para mayor Precisión usted puede usar el operador “*/” para multiplicar un valor con una
fracción. No es dificil usar el operador */ así se hace:
1. Coloque el valor o variable que desea multiplica por un valor fraccional antes del
operador */.
2. Tome el valor fraccional que usted desea usar y multiplíquelo por 256.
3. Redondee el valor a la derecha del punto decimal.
4. Coloque el valor redondeado después del operador */.
Ejemplo: Deseamos multiplicar la variable timeCounter por 3.
1. Coloque timeCounte a la izquierda del operador */
timeCounter = timeCounter */
2. Multiplique el valor fraccional por 256: 3.69x256 = 944.64
3. Redondee 944.64 a 945
4. Coloque el valor a la derecha del operador */
timeCounter = timeCounter */ 945 ‘multiplique por 3.69
Entrada Digital – Botón Push · Página 85

La multiplicación de 14,000 por 2 da, un escalamiento a 28,000 este valor no es 30,000


30,000 entre 14,000 = 2.14. Multiplique por 2.14 con el operador */ para aumentar la
precisión necesitamos saber cuántos 256 hay en 2.14. Entonces 2.14x256 = 547.84 = 548.
Usted puede usar este valor y el operador */.
timeCounter = timeCounter * 2

9 Reemplace timeCounter = timeCounter * 2 con


timeCounter */ 548 y vuelva a verificar su programa.

Su prueba de 30-segundos con el original, el programa sin modificar genera un valor que
es ligeramente diferente de 14,000. Entonces, usted puede usar el mismo procedimiento
con sus resultados de prueba para calcular el valor para que el operador */ haga más
precisos sus resultados.

9 Inténtelo.

Problema 2. Los jugadores rapidamente calcularon que el retardo de rojo a verde es


de 1 segundo. Después de jugar varias veces, estaban preparados para predecir
cuando ir y su score no reflejó su tiempo verdadero de reacción.

El BASIC Stamp tiene la instrucción RANDOM. Así se modifica su código para un


número al azar.

9 En el principio de su código agregue una declaración para una nueva variable


llamada “value”, y póngala en 23. El valor 23 se llama “semilla” porque comienza
la secuencia de un pseudo número al azar.

timeCounter VAR Word


value VAR Byte ' <- Agregue esto
value = 23 ' <- Agregue esto

9 Justo antes de la instrucción PAUSE 1000 dentro del bucle DO...LOOP, use la
instrucción RANDOM para darle a “value” un nuevo valor “random” de la
secuencia de un pseudo random que empieza con 23.

RANDOM value ' <- Agregue esto


DEBUG "Delay time ", ? 1000 + value, CR ' <- Agregue esto

9 Modifique la instrucción PAUSE 1000 para que se agregue el “value” random al


argumento de Duration.
Página 86 · ¿Qué es un Microcontrolador?

PAUSE 1000 + value ' <- Modifique esto

LOW 14
HIGH 15

9 Como el valor más grande que puede almacenar un Byte es 255, la instrucción
PAUSE solamente varía ¼ de segundo. Usted puede multiplicar la variable value
por 4 para hacer que el retardo de luz roja varíe desde 1 hasta justamente 2
segundos.
DEBUG "Delay time ", ? 1000 + (value*4), CR ' <- Modifique
PAUSE 1000 + (value * 4) ' <- Modifique esto nuevamente

¿Qué es un Algoritmo? Un Algoritmo es una secuencia de operaciones matemáticas.


¿Qué es Pseudo random? Pseudo random significa aquello que parece random pero que
realmente no lo es. Cada vez que usted empieza el programa una vez y otra vez, usted
obtendrá la misma secuencia de valores.
¿Qué es una semilla? Una semilla es un valor que se usa para iniciar la secuencia pseudo
random. Si usted usa un valor diferente para la semilla (cambie el valor 23 por otro número),
se obtendrá una diferente secuencia pseudo random.

Problema 3. Un jugador que presiona el botón antes que cambie a luz verde obtiene
un muy buen irrasonable score (1 ms) Su microcontrolador necesita calcular si el
jugador está haciendo trampa.

El pseudo código se introdujo cerca del final de la Actividad #3 en este capítulo. Aquí
están algunos pseudo códigos que le ayudan a aplicar la frase IF...THEN...ELSE para
resolver el problema. Considere que ha hecho los cambios de los problemas 1 y3, si el
jugador libera el botón antes que la luz sea verde el timeCounter será ahora 2 en lugar de 1.
Los cambios abajo mostrados harán que funcione el timeCounter ya sea valga 1 o 2.

• Si el valor de timeCounter es menor o igual a 2 (timeCounter<=2)


o Muestre un mensaje que le diga al jugador que él o ella tiene que esperar
hasta que la luz sea verde para que pueda presionar el botón.
• Else, (si el valor de timeCounter es mayor que 1)
o Muestre el valor de timeCounter (como lo hace el programa
ReactionTimer.bs2) en milisegundos.
• End If
• Muestre el mensaje “Jugar nuevamente”
Entrada Digital – Botón Push · Página 87

9 Modifique su programas para crear este pseudo código en PBASIC para así
resolver el problema de hacer trampa.

RESUMEN
Este capítulo introdujo el botón push y algunos circuitos comunes con botón push.
También introdujo como construir y verificar un circuito botón push y como usar el
BASIC Stamp para leer el estado de uno o más botones push. Se programó el BASIC
Stamp para tomar decisiones basado en el estado (s) de los botones push y ésta
información se utilizó para controlar LEDs.

Se construyó un juego de reacción de tiempo usando estos conceptos. Además se programó


a el BASIC Stamp para controlar los LEDs y verificar un botón push y tomar mediciones
de tiempo.
Se introdujeron varios conceptos de programación, que incluyen conteo, pseudo códigos
para planeación de flujo de programas, exceso de código en aplicaciones sensibles al
tiempo y valores de semillas para eventos pseudo random.

Se construyeron circuitos de lectura individuales de botón push usando variables


especiales de e/s (IN3, IN4, etc) usando el BASIC Stamp, y se hicieron decisiones basados
en estos valores usando las instrucciones IF...THEN...ELSE, y se introdujeron las
instrucciones de bloque IF...ELSEIF...ELSE. Para evaluar más de una condición, se
introdujeron los operadores AND y OR. Se agregó una condicición a un bucle DO...LOOP
usando la palabra clave UNTIL, además se introdujo el anidado de bucles DO...LOOP.
Para agregar un elemento no predecible se introdujo la instrucción RANDOM a una
aplicación del Tiempo de Reacción.

Preguntas
1. ¿Cuál es la diferencia entre mandar y recibir señales HIGH y LOW usando el
BASIC Stamp?
2. ¿Respecto a un botón push, que significa “normalmente abierto”?
3. ¿Qué sucede entre las terminales de un botón normalmente abierto cuando se
presiona?
4. ¿Cuál es el valor de IN3 cuando se conecta un botón push a Vdd? ¿Cuál es el valor
de IN3 cuando se conecta un botón push a Vss?
5. ¿Qué hace la instrucción DEBUG ? IN3?
Página 88 · ¿Qué es un Microcontrolador?

6. Qué clase de bloques de código se pueden usar para tomar decisiones basadas en
el valor de uno o más botones push?
7. ¿Qué hace el control de caracteres HOME en la frase DEBUG HOME?

Ejercicios
1. Explique como se modifica en programa ReadPushbuttonState.bs2 para que lea el
botón push cada segundo en lugar de cada ¼ de segundo.
2. Explique como se modifica el programa ReadPushbuttonState.bs2 para que lea un
circuito de un botón push normalmente abierto con un resistor de pull-up
conectado al pin E/S P6.

Proyecto
1. Mofique el programa ReactionTimer.bs2 para que jueguen dos jugadores. Agregue
un segundo botón conectado al pin P4 para el segundo jugador.

Soluciones
Q1. Al “mandar” el BASIC Stamp usa un pin E/S como salida, en tanto que al
“recibir” usa el pin E/S como entrada.
Q2. Normalmente abierto significa que el estado normal del botón push (sin presionar)
forma un circuito abierto.
Q3. Cuando se presiona, la distancia entre la terminales se unen con un metal
conductor. La corriente puede circular a través del botón push.
Q4. IN3 = 1cuando el botón se conecta a Vdd. IN3 = 0 cuando el botón push se
conecta a Vss.
Q5. DEBUG ? IN3 muestra el texto “IN3 =” seguido por el valor almacenado en IN3
(el valor puede ser un 1 o un 0 dependiendo del pin P3), y le sigue un regreso.
Q6. Los bucles IF…THEN…ELSE y IF…ELSEIF…ELSE.
Q7. El control de caracteres HOME manda al cursor a la posición izquierda superior
de la Terminal Debub.

E1. En el programa el bucle DO...LOOP se repite cada ¼ segundo por la instrucción


PAUSE 250. Para repetirlo cada segundo cambie PAUSE 250 (250 ms = 0.25s
=1/4 s) por PAUSE 1000 (1000 mse = 1s)
DO
DEBUG ? IN3
PAUSE 1000
LOOP
Entrada Digital – Botón Push · Página 89

E2. Para leer el pin P6 reemplace IN3 con IN6. El programa sólo muestra el estado del
botón push, y no usa el valor para tomar decisiones, por eso no importa si el
resistor es pull-up o pull-down. La instrucción DEBUG mostrará cualquier estado
del botón.

DO
DEBUG ? IN6
PAUSE 250
LOOP

P1. Primero se agregó un botón push para el segundo jugador y se conectó al BASIC
Stamp en el pin P4. El esquemático es el de la Figura 3-13.

Vdd Vdd
P15
1

P4 P3
220 Ω 220 Ω
10 kΩ 10 kΩ
2
P14
470 Ω
Vss Vss

Abajo se incluyen secciones del programa solución, pero recuerde que las
soluciones pueden codificarse de diferentes maneras. Sin embargo, la mayoría de
las soluciones inclurán las siguentes modificaciones:

Use dos variables para controlar los tiempos de dos jugadores.


timeCounterA VAR Word ' Tiempo del jugador A
timeCounterB VAR Word ' Tiempo del jugador B

Cambie las instrucciones para mostrar los dos botones push

DEBUG “Mantenga presionados los botones push”, CR,


DEBUG “Otra vez abajo los botones push”, CR, CR

Espere que los dos botones estén presionados antes que el LED sea rojo, usando el
operado AND.
LOOP UNTIL {IN3 = 1} AND {IN4 = 1}
Página 90 · ¿Qué es un Microcontrolador?

Espere que los dos botenes se liberen para el tiempo final, y use nuevamente el
operador AND.

LOOP UNTIL {IN3 = 0} AND {IN4 = 0}

Sume lógicamente para decidir que tiempo del jugadors se incrementa:

IF (IN3 = 1) THEN
timeCounterA = timeCounterA + 1
ENDIF
IF (IN4 = 1) THEN
timeCounterB = timeCounterB + 1
ENDIF

Cambie el tiempo de la pantalla para mostrar los tiempos de ambos jugadores.


DEBUG "Tiempo del Jugador A : ", DEC timeCounterA, " ms. ", CR
DEBUG "Tiempo del Jugador B : ", DEC timeCounterA, " ms. ", CR

Sume lógicamente para mostrar que jugador tiene el tiempo de reacción más
rápido.
IF (Tiempo del ContadorA < Tiempo del ContadorB) THEN
DEBUG "El jugador A es el ganador!", CR
ELSEIF (Tiempo del ContadorB < Tiempo del ContadorA) THEN
DEBUG "El jugador B es el ganador!", CR
ELSE
DEBUG "Es un empate!", CR
ENDIF

Abajo se muestra la solución completa.

' Que es un Microcontrolador - Ch03Prj01_TwoPlayerReactionTimer.bs2


' Verifique el tiempo de reacción con un boton y un LED bicolor.
' Agregue un segundo jugador y un segundo botón. Ambos jugadores
' juegan al mismo tiempo usando el mismo LED.Gana quien libera más
rapido el boton.
' Pin P3: Jugador A Pushbutton, Active High
' Pin P4: Jugador B Pushbutton, Active High

' {$STAMP BS2}


' {$PBASIC 2.5}

timeCounterA VAR Word ' Tiempo del jugador A


timeCounterB VAR Word ' Tiempo del jugador B
Entrada Digital – Botón Push · Página 91

PAUSE 1000 ' 1 s antes del primer


mensaje

DEBUG "Mantenga presionados los botones", CR, ' Muestra el t de reacción


"para que se ilumine el LED rojo.", CR, CR, ' instrucciones.
"Cuando cambie a verde, let", CR,
"juege tan rapido como pueda.", CR, CR
DO ' Comienza el bucle principal.

DO ' El bucle hasta que ambos presionan


' Nada
LOOP UNTIL (IN3 = 1) AND (IN4 = 1)

HIGH 14 ' LED Bicolor rojo.


LOW 15

PAUSE 1000 ' Retardo de 1 segundo.

LOW 14 ' LED Bicolor verde


HIGH 15

timeCounterA = 0 ' Fija el timeCounters a cero


timeCounterB = 0

DO

PAUSE 1
IF (IN3 = 1) THEN ' Si el botón todavía está presionado,
timeCounterA = timeCounterA + 1 ' incremente el contador
ENDIF
IF (IN4 = 1) THEN
timeCounterB = timeCounterB + 1
ENDIF

LOOP UNTIL (IN3 = 0) AND (IN4 = 0) ' Esta en bucle hasta que ambos
' botones se liberen.
LOW 15 ' LED Bicolor apagado.

DEBUG "Tiempo del jugador A: ", DEC timeCounterA, " ms. ", CR
DEBUG "Tiempo del jugador B: ", DEC timeCounterB, " ms. ", CR, CR
IF (timeCounterA < timeCounterB) THEN
DEBUG "El jugador A es el ganador!", CR
ELSEIF (Tiempo del jugador B < timeCounterA) THEN
DEBUG "El jugador B es el ganador!", CR
ELSE ' Son iguales los tiempos A & B
DEBUG "Es un empate!", CR
ENDIF
DEBUG CR

DEBUG "Para jugar otra vez ", CR ' Instrucciones para jugar otra vez.
DEBUG "presionen los botones.", CR, CR

LOOP ' Regresa a iniciar el bucle principal.


Página 92 · ¿Qué es un Microcontrolador?
Controlando el Movimiento · Página 93

Capítulo 4: Controlando el Movimiento


MICROCONTROL DEL MOVIMIENTO
Los microcontroladores cada día hacen que se muevan las cosas de su alrededor con
seguridad al lugar correcto. Si tiene usted una impresora de inyección de tinta, la cabeza
impresora que se mueve sobre la hoja al imprimir la mueve un motor paso a paso que
controla un microcontrolador. La puerta de la tienda de abarrotes que usted atraviesa está
controlada por un microcontrolador, y la charola que deposita el CD en su DVD también
está controlada por un microcontrolador.

SEÑALES ENCENDIDO/APAGADO Y MOVIMIENTO DEL MOTOR


Los motores microcontrolados reciben secuencias de señales high y low similares a las que
usted ha estado enviando a los LEDs. La diferencia es que el microcontrolador tiene que
mandar estas señales a velocidades que son generalmente más rápidas que los ejemplos de
parpadeo de LEDs del capítulo 2. Si usted fuera a utilizar un circuito LED para monitorear
señales de control, algunas harían que el LED parpadeara tan rápido que el ojo humano no
podría detectar sus cambios. Paracería que el LED brilla atenuado. Otros mostrarian un
parpadeo muy rápido y algunos podrían ser más discernibles.
Algunos motores requieren mucha circuitería para ayudarle al microcontrolador que haga
que trabajen, otros motores requieren parte mecánicas extras para hacer que trabajen
correctamente en las máquinas. Para empezar, de todos los diferentes tipos de motores el
motor servo con el que usted experimentará en este capítulo es el más sencillo. Como
pronto usted lo verá el BASIC Stamp lo controla facilmente y requiere pocos o ningún
circuito adicional, y tiene una salida mecánica que es fácil de conectar a las cosas que
usted quiere mover.

PRESENTANDO AL SERVOMOTOR
Un motor servo para hoby es un dispositivo que controla la posición, usted los encuentra
en carros de radiocontrol RC, barcos o aviones. En carros RC, el servo mantiene el volante
para controlar que tan brusco gira el carro. En un barco RC, mantiene el timón en posición
para dar vueltas. Los aviones RC típicamente tienen varios servos para la posición de los
diferentes alerones para controlar el movimiento del avión. En vehículos impulsados por
máquinas de gas, otro servo mueve la leva de la máquina para controlar su velocidad. Un
ejemplo de un avión RC y su radio control lo muestra la Figura 4-1. El hobista vuela el
avión manipulando la palanca del joystic del radio control, y éste hace que los servos del
avión controlen las posiciones de los alerones y el timón del avión.
Página 94 · ¿Qué es un Microcontrolador?

Figura 4-1
Modelo de Avión y su
Radio control.

¿Entonces, cómo mantiene el joystich del radio control una cierta posición que hace que el
alerón del avión mantenga cierta posición? El radio control convierte la posición del
joystick en pulsos de radio que duran cierta cantidad de tiempo. El tiempo que dura cada
pulso indica la posición de uno de los joysticks. En el avión RC, un radio-receptor
convierte estos pulsos de radio en pulsos digitales. (señales high/low) y las manda a los
servos del avión. Cada servo tiene un circuito interno que convierte estos pulsos digitales a
una posición que conserva el servo. La cantidad de tiempo que duran cada pulso es lo que
le indica a los servos la posición que deben mantener. Estos pulsos de control sólo duran
unas pocas milésimas de segundo, y se repiten cada 40 a 50 veces por segundo para hacer
que el servo mantenga la posición indicada.

La Figura 4-2 muestra un dibujo del Servo Normalizado de Parallax. El conector se usa
para conectar el servo a la alimentación (Vdd y Vss) y a la Fuente de Señal (un pin E/S del
BASIC Stamp). El cable (2) tiene tres alambres que van a Vdd, Vss y a la línea de señal
del conector al servo. La flecha es la parte del servco que se parece a la estrella (3) de
cuatro picos. Cuando está girando el servo, la estrella es la parte móvil que el servo
mantiene en diferentes posiciones. El tornillo de cruz (4) une la estrella con la flecha de
salida del servo. La caja (5) contiene los sensores, el circuito de control, un motor de DC y
engranes. Estas partes trabajan en conjunto para recibir las señales high/low del BASIC
Stamp y las convierte en posiciones que mantiene la estrella del servo.
Controlando el Movimiento · Página 95

Figura 4-2

3 Servo Normalizado de
1 Parallax

(1)Conector
(2)Cable
4 (3)Estrella
(4)Tornillo de sujeción
del la estrella a la flecha
del servo
(5)Caja

En este capítulo, usted programará el BASIC Stamp para mandar señales a un servo que
controla la posición de la estrella del servo. Al hacer que BASIC Stamp mande señales que
le indiquen al servo que mantenga diferentes posiciones, sus programas también pueden
organizar el movimiento del servo. Sus pogramas, incluso, pueden monitorear botónes
push y usar la información para conocer que botones push están presionados y ajustar la
posición que el servo mantiene (control de posición servo de botones push). El BASIC
Stamp también puede programarse para recibir mensajes que usted teclea en la Terminal
Debug y usar esos mensajes para controlar la posición del servo (control de posición servo
de la terminal).

ACTIVIDAD #1: CONECTANDO Y VERIFICANDO EL SERVO


En esta actividad , usted seguirá las instrucciones para conectar un servo a la fuente de su
tablilla y a el BASIC Stamp.
Página 96 · ¿Qué es un Microcontrolador?

Partes del Servo y el circuito LED


Un Servo Normalizado Parallax
Un Resistor –470 Ω (amarillo-violeta-café).
Un LED de cualquier color.

El circuito LED se usará para monitorear las señales que manda el BASIC Stamp al servo.
Recuerde que el circuito LED no se necesita para que el servo funcione. Sólo se usa para
que le ayude a “ver” las señales de control

Precaución. Para las acitivades de este libro use solamente un Servo Normalizado de
Parallax Otros servos pueden tener diferentes especificaciones que pudieran no ser
compatibles con estas actividades.

Construyendo los Circuitos Servo y LED


En el capítulo 1, usted identificó la Tablilla y versión de software usando la “Ayuda” del
BASIC Stamp Help.Usted necesitará conocer que tablilla y versión usted tiene para
encontrar la instrucción de construcción del circuito servo para su tablilla.

9 Si todavía no sabe que tablilla y revisión tiene, abra BASIC Stamp Editor Help y
haga click en la liga: Getting Started with Stamps in Class de la Página Principal.
Ahora, siga las indicaciones para determinar que Tablilla tiene.
9 Si usted tiene una Tablilla con puerto USB (cualquier revisión) o Serie (Revisión
C o más nueva) vaya a la sección de abajo de Stamp HomeWorkBoard Servo
Circuit
9 Si usted tiene una Tablilla (Revisión C o más recientes va a Stamp
HomeWorkBoard Servo Circuit de la página 99.
9 Si su Tablilla no está en la lista arriba mencionada, vaya a
www.parallax.com/Go/WAM Servo Circuit Connection para encontrar las
instrucciones de su tablilla. Cuando haya seguido la instrucciones de su circuito
servo de su Tablilla, vaya a la Actividad #2: Programa de Prueba del Control
Servo en la página 101.

Circuito Servo de la Tablilla Board of Education


Estas instrucciones se usan en todas las revisiones de puerto USB así como también en la
revisiones C o más recientes de puerto Serie.

9 Apague la fuente como lo muestra la Figura 4-3


Controlando el Movimiento · Página 97

Reset
Figura 4-3
Desconecte la fuente.
Ponga en 0 el interruptor de 3
0 1 2 posiciones.

La Figura 4-4 muestra el conector del servo en la Tablilla. Aquí es donde usted conecta el
servo. Esta Tablilla tiene un jumper que usted puede usar para conectar la fuente de
alimentación del servo ya sea Vin o Vdd. El jumper es una pieza rectangular egra
removible que indica la flecha entre los dos conectores del servo.

9 Verifique el jumper se conecta a Vdd como lo muestra la Figura 4-4. Si éste se fija
en Vin, jale el jumper rectangular de los pines donde está colocado y entonces
presionelo sobre los dos pines más cercanos a la etiqueta Vdd.

15 14 Vdd 13 12 Figura 4-4


Jumper del Conector Servo
Red conectado a Vdd
Black
X4 X5
Vin

El jumper le permite escoger la fuente de alimentación (Vin o Vdd) del Servo


Normalizado de Parallax.
Si está usted utilizando una batería de 9 V, fíjelo a Vdd. No use eliminadores de batería de
Pared de 9 V.
Si esta usted utilizando 4 baterias AA, un paquete baterias 6V con ambas funciona
correctamente.
ƒ Si está usando una Fuente de Alimentación use solamente Vdd. Antes de
conectar la fuente de alimentación a la Tablilla, asegúrese de verificar las
especificaciones si son compatibles con las características que indica el BASIC
Stamp Editor Help.

La Figura 4-5 muestra el esquemático del circuito que contruirá en su Tablilla.

9 Construya el circuito mostrado en la Figura 4-5 y Figura 4-6


9 Asegúrese que está bien conectado el servo. Los alambres, blanco, rojo y negro
deben estár alineados como lo muestra la Figura 4-6.
Página 98 · ¿Qué es un Microcontrolador?

P14
470 Ω
LED Figura 4-5
Esquemático del
Servo y LED
Vss indicador de la
Vdd Tablilla.

Se utiliza en
White Tablillas con puerto
P14
serie revisión C o
Red
Servo más recientes, o
Black con cualquier
versión de Tablilla
con puerto USB.

Vss

15 14 Vdd 13 12
White
Red Red
Black Black

X4 X5
Vdd Vin Vss
X3
+
P15
Figura 4-6
P14 Servo e indicador
P13
P12 LED de la Tablilla de
P11 Educación
P10
P9
P8
P7
P6
P5
standard servo
P4
P3 www.parallax.com
P2
P1
P0
X2

Hasta ahora, usted ha colocado en la posición 1 el interruptor de 3 posiciones. Ahora


muévalo a la posición 2 para alimentar el conector del servo.
Controlando el Movimiento · Página 99

9 Suministre alimentación al conector del servo ajustando el interruptor de 3


posiciones como lo muestra la Figura 4-7. Su servo puede girar un poquito cuando
lo conecta a la alimentación.

Reset
Figura 4-7
Alimentación a la Tablilla del
Conector del Servo.
0 1 2

En este capítulo cuando vea las instrucción “Energic su Tablilla” mueva a la posicion 2 el
interruptor de 3 posiciones. De igual forma cuando vea las instrucciónes “Desconecte la
Alimentación de su Tablilla” mueva a la posición 0 el interruptor de 3 posiciones.

9 Desconecte la Alimentación de su Tablilla.


9 Vaya a la Actividad #2 en la página 101.

Circuito Servo de la Tablilla BASIC Stamp


Si está conectando su servo a la Tablilla BASIC Stamp (Rev C o más reciente) usted
necesitará estás partes adicionales de su kit:

Un conector de 3 terminales macho/macho (lo muestra la Figura 4-8)


Cuatro alambres para conexión.

Figura 4-8
Parte extra de 3 pines macho/macho
de la tablilla BASIC Stamp.

La Figura 4-9 muestra el esquemático de los circuitos servo y LED en su Tablilla BASIC
Stamp. Las instrucciónes que siguen después de la figura le mostrarán como construir con
seguridad este circuito.

9 Desconecte la batería de 9 V de su Tablilla.


9 Construya el indicador LED y el circuito conector del servo mostrado por el
esquemático de la Figura 4-9 y el diagrama de alambrado de la Figura 4-10.
Página 100 · ¿Qué es un Microcontrolador?

P14
470 Ω
LED

Vss
Vdd Figura 4-9
Esquemático del servo y
LED indicador en la
P14 White Tablilla.
Red
Servo
Black

Vss

Figura 4-10
Circuitos del LED
indicador y conector
servo en la Tablilla.

9 Conecte el servo al conector servo como lo muestra la Figura 4-11.


9 Asegurese que los colores del cable del servo están correctamente alineados con
los colores identificados en la imagen.
9 Verifique dos veces sus conexiones.
Controlando el Movimiento · Página 101

Cuidado
Solamente use una batería de 9V cuando el Servo Normalizado de Parallax esté conectado
a la Tablilla BASIC Stamp. No use ningún tipo de Fuente de Alimentación o Eliminador de
Baterias que se alimente al contacto de AC.
Para mejores resultados, asegurese que su bateria está nueva. Si está usando una batería
recargable asegurese que está bien cargada. Debe tener una capacidad de energía de
100mAh (miliamperes por hora) o mayor.

9 Reconecte la batería de 9 V a su Tablilla. El servo puede girar ligeramente cuando


hace la conexión.

Figura 4-11
El servo conectado a la
Tablilla.

ACTIVIDAD #2: PROGRAMA DE PRUEBA DEL CONTROL DEL SERVO


A Un gradodo es la medida de un ángulo y se indica con el símbolo o. La Figura 4-12
muestra diferentes mediciones de ángulos que incluye 30, 45, 90, 135 y 180 grados. Cada
grado de la medición de un ángulo representa 1/360 parte de un círculo, así 90 grados
representan una medición de ¼ de un círculo ya que 90/360 = ¼. En forma semejante un
ángulo de 180 grados es ½ círculo ya que 180/360 = ½ y usted puede calcular fracciones
semejantes diferentes a las mediciones que muestra la figura.
Página 102 · ¿Qué es un Microcontrolador?

Figura 4-12
Ejemplo de
mediciones de
variosángulos.

El Servo Normalizado de Parallax puede hacer que la estrella fije posiciones dentro de un
rango de 180 grados, así la medida de un grado puede ser útil para describir las posiciones
que mantiene el servo. La Figura 4-13 muestra ejemplos de un servo con un trozo de
alambre que está sujeto con dos hoyos de su estrella y un doblez. La dirección del alambre
muestra el ángulo de la estrella del servo y la figura muestra ejemplos de 0, 45, 90, 135 y
180 grados.

Figura 4-13 Ejemplos de posiciones de la estrella del servo.

Your servo horn’s range of motion and mechanical limits will probably be different from what’s
shown here. Instructions on how to adjust it to match this figure come after the first example
program.

En la fábrica, el montaje de la estrella del servo se hace al azar, entonces las posiciones de
su servo probablemente sean diferentes a las que muestra la Figura 4-13. En la práctica, la
estrella de su servo pudiera estár montada en un rango de +/- 45 grados. El servo de la
Figura 4-14 muestra un ejemplode un servo cuya estrella se montó 20 grados en sentido de
la manecillas del reloj respecto a la Figura 4-13.

Después de que usted encuentre el centro el rango de movimiento de la estrella de su servo


usted puede usarlo como una referencia de 90 grados o ajustar la estrella mecánicamente
para que coincida con el de la Figura 4-13 siguiente las instrucciones posteriores de esta
actividad.
Controlando el Movimiento · Página 103

Figura 4-14 Ejemplos de posición de la estrella del servo antes de los ajustes mecánicos.

Este es un ejemplo de una estrella montada en la flecha de salida del servo cerca de 20
grados en sentido invervso de las manecillas del reloj con referencia a la Figura 4-13.

Usted puede encontrar el centro del rango de movimiento del servo girando con precaución
la estrella para encontrar sus límites mecánicos en sentido directo e inverso de las
manecillas del reloj. La posición media entre estos dos límites es el centro o posición de 90
grados. La posición del centro del servo pudiera estar en cualquier lugar de la región
mostrada en la figura 4-15.

El centro del rango de movimiento de la estrella de su


servo pudiera estar en esta región.

Figura 4-15
Rango de posiciones
posibles del centro.
Página 104 · ¿Qué es un Microcontrolador?

En los siguientes pasos gire la estrella del servo lentamente no la fuerce! El servo
tiene límites mecánicos interconstruidos para prevenir que la estrella gire fuera del rango de
movimiento de 180 grados. Gire suavemente la estrella y tenga la sensibilidad de sentir
cuando llega a unos de sus límites mecánicos. No trate de forzarla más allá de esos límites
porque podría dañar los engranes internos del servo.

9 Verifique que está desconectada la alimentación de su Tablilla.


9 Suavemente gire la estrella del servo para encontrar los límites mecánicos en
sentido directo e inverso a las manecillas del reloj. La estrella del servo gira con
poca fuerza hasta que alcanza los límites. NO TRATE DE GIRAR LA
ESTRELLA MÁS ALLÁ DE SUS LÍMITES, sólo girela lo suficiente para
alcanzar los límites.
9 Gire la estrella del servo hasta la mitad de los dos límites. Esta es
aproximadamente la posicón del centro del servo.
9 Con la estrella en la posición central, sujete un trozo de alambre en la estrella y
orientele hacia la parte superior de la región que muestra la Figura 4-15.

Recuerde que la dirección en que apunta el alambre en la figura es solamente un ejemplo,


su dirección puede apuntar en cualquier parte de esta región. Adonde quiera que apunte
cuando está en el centro de su región de movimiento deberá estar muy cerca de la posición
de 90 grados. Nuevamente, esta posición puede variar de un servo a otro debido a la forma
en que la estrella se sujeta al servo.

Programando las Posiciones del Servo


La gráfica en la Figura 4-16 se llama Diagrama de Tiempos y muestra ejemplos de señales
high/low que el BASIC Stamp tiene que mandar al servo para que esté en la posición de 90
grados.

Figura 4-16
Diagrama de
Tiempos de la Señal
Servo

Pulsos de 1.5 ms
hacen que el servo
mantenga una
posición “central” de
90 grados.
Controlando el Movimiento · Página 105

El diagrama de tiempos muestra que las señales high duran 1.5 ms separadas por señales
low que duran 20 ms. Los puntos ...a la derecha de las señales es una forma de indicar que
las señales high de 1.5 ms y las señales low de 20 ms una y otra y otra vez para mantener la
posición del servo. El símbolo “20ms” indican que el tiempo low puede tener un valor
aproximado, y que realmente puede variar unos pocos milisegundos arriba y abajo del
valor de 20 ms con el siguiente para no afectar la posición de la estrella del servo. Esto se
debe a que la cantidad de tiempo de la señal high dura hasta que le dice al servo que
posición conservar, y esto tiene que ser preciso.

Hay una instrucción especial llamada PULSOUT que da un control preciso a su programa
sobre la duración de las señales high muy breves, a las que se les llama comunmente
pulsos.
Esta es la sintaxis de la instrucción PULSOUT:

PULSOUT Pin Duration.

Con la instrucción PULSOUT usted puede escribir el código en PBASIC para hacer que
BASIC Stamp fije la posición del servo en 90 grados usando como guía el diagrama de
tiempos. El argumento “Pin” de la instrucción PULSOUT tiene que ser un número que le
indica al BASIC Stamp que pin de E/S deberá transmitir el pulso. El argumento “Duration”
de la instrucción PULSOUT que vale 2 millonésimas de segundo representa los
incrementos de tiempo del pulso. 2 millonésimas de segundo es igual a 2 microsegundos y
se abrevia 2us.

Una millonésima de segundo se llama microsegundo. La letra Griega μ se usa en lugar


de la palabra micro y la letra s se usa en lugar de segundo. Esto facilita escribir y tomar
notas, porque en lugar de escribir 2 microsegundos, usted puede escribir 2 μs.
Recordatorio: Una milésima de segundo se llama milisengundo y se abrevia ms.
Equivalencias: 1ms = 1000 μ s. En otras palabras, usted puede meter mil millonesimas de
segundo dentro de una milésima de segundo.

Ahora que sabe como usar la instrucción PULSOUT, el programa ServoCenter.bs2 manda
pulsos de contro repetidamente para hace que el servo mantenga la posición de 90 grados.
La instrucción PULSE 14, 750 mandará un pulso de 1.5 ms al servo. Hace esto porque el
argumento Duration de la instrucción PULSOUT especifica el número de 2us de duración
del pulso. Como el argumento Duration vale 720, la instrucción PULSOUT hará que el
pulso dure 750x2us = 1500 us = 1.5 ms ya que hay 1000 us en 1 ms. Después que termina
el pulso high la instrucción PULSOUT hace que el pin E/S ahora mande señales bajas.
Página 106 · ¿Qué es un Microcontrolador?

Entonces, la instrucción PAUSE 20 que sigue del PULSOUT hace que el BASIC Stamp
mande señales low durante 20 ms.

Con las dos instrucciones dentro del bucle DO...LOOP el high de1.5 ms seguido por el low
de 20 ms se repetiran una y otra y otra vez haciendo que el servo mantenga su posición

Programa Ejemplo; ServoCenter.bs2


' ¿Que es un Microcontrolador? - ServoCenter.bs2
' Mantiene el Servo en su posicion central de 90 grados.

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Program Running!", CR

DO
PULSOUT 14, 750
PAUSE 20
LOOP

Prueba de la Posición Central del Servo en 90 grados


La posición del Servo en 90 grados se llama posición central porque el punto de 90 grados
está en el centro del rango de movimiento de 180 grados. Los pulsos de 1.5 ms hacen que
el servo mantenga la estrella en su posición central, la cual deberá estar cerca del punto
medio que usted determinó al fijar los límites mecánicos del servo. Usted puede usar la
posición del centro para mantener al servo como la referencia de 90 grados, o usar un
desarmador para quitar y reposicionar la estrella para que el alambre sujeto a la estrella
apunte hacia arriba. Las instrucciones de ajuste están en la sección titulada: Opcional:
Ajuste Central de 90 grados de la estrella del servo. Si usted usa la posición del centro, sin
ajustarlo, como una referencia cualquier otra posición del servo está respecto a la posición
de 90 grados. Por ejemplo, la posición de 45 grados debería ser 1/8 de una vuelta en
sentido de las manecillas del reloj, y la posición de 135 grados debería ser 1/8 de vuelta en
sentido inverso de la manecillas del reloj. Estos ejemplos se mostraron en la Figura 4-14.

Vamos a encontrar cual es la verdadera posición central de la estrella de su servo:

9 Gire suavemente la estrella del servo a uno de sus límites mecánicos.


9 Aplique alimentación a su Tablilla. Si tiene una Tablilla Board of Education,
asegurese que el interruptor de 3 posiciones está en la posición 2.
9 Corra el programa ServoCenter.bs2.
Controlando el Movimiento · Página 107

Tan pronto como está el programa cargado la estrella del servo deberá girar a su posición
central y ahí permanecer. El servo “mantiene” esta posición porque los servos
normalizados están diseñados para resistir fuerzas externas que los empujen. Es por esto
que el servo mantiene en esa posción el volante de los carros RC, el timón de los barcos o
los alerones del avión.

9 Anote la posición central de su servo.


9 Suavemente aplique un giro a la estrella como cuando lo hizo para encontra sus
límites mecánicos. El servo debe reaccionar y mantener la estrella en la posición
central.

Si desconecta la energía, usted puede girar el servo afuera de su posición central. Cuando
usted conecta la energía, el programa se reinicia y el servo moverá inmediatamente la
estrella a la posición central y ahí la mantendrá.

9 ¡Inténtelo!

Opcional – Ajuste de la estrella del servo en el centro de 90 grados


Como opción usted puede ajustar la estrella del servo para hacer que el alambre de la
estrella apunte hacia arriba cuando se está ejecutando el programa ServoCenter.bs2 como
lo muestra el lado derecho del Figura 4-17. Si usted hace este ajuste mecánico, esto
simplificará los ajustes de los ángulos del servo porque cada ángulo se parecerá a los de la
Figura 4-13.

Usted necesitará un Desarmador de Cruz # 2 para este ajuste opcional.


Página 108 · ¿Qué es un Microcontrolador?

Output
shaft Figura 4-17
Phillips
Centrado mecánico
Screw
del Servo

Usted puede
remover y
reposicionar la
estrella de la flecha
de salida del servo
con un pequeño
desarmador.

Horn

9 Desconecte la alimentación de su Tablilla.


9 Quite el tornillo que fija la estrella del servo con la flecha de salida, y luego
suavemente jale hacia fuera la estrella de la caja para liberarla. Las partes se
parecerán a el lado izquierdo de la Figura 4-17.
9 Conecte la alimentación a su Tablilla. El programa deberá hacer que el servo
mantenga la flecha de salida en la posición central.
9 Regrese la estrella a la flecha de salida del servo y haga que el alambre sujeto en
ella apunte hacia arriba como lo muestra el lado derecho de la Figura 4-17.

Ajuste fino. Pudiera ser que no sea posible tener un alineamiento perfecto debido al ajuste
de la estrella con la flecha sin embargo será muy cercano. Entonces usted puede ajustar el
alambre sujeto a la estrella y así compensar esta pequeña desviación y hacer que el
alambre apunte hacia arriba.

9 Desconecte la alimentaciós de su Tablilla.


9 Apriete el tornillo de cruz.
9 Conecte la alimentación a su Tablilla para que el programa haga que el servo
mantenga nuevamente su posición central. El alambre sujeto a la estrella ahora
deberá apuntar hacia arriba (o casi hacia arriba) indicando la posición de 90
grados.
Controlando el Movimiento · Página 109

Su Turno – Programas para que el Servo Apunte en Direcciones Diferentes


La Figura 4-18 muestra unas pocas instrucciones PULSOUT que le indican al servo mantener
ciertas posiciones importantes como 0, 45, 90, 135 y 180 grados. Las instrucciones
PULSOUT son aproximadas.

Y usted podría tener que ajustar los valores ligeramente para obtener posiciones angulares
más precisas. Usted puede modificar el argumento Duration de las instrucciones
PULSOUT para mantener cualquier posición de este rango. Por ejemplo, si usted desea
mantener la posición de 30 grados, el argumento Duration de las instrucciones PULSOUT
deberá ser 417, este valor es 2/3 del valor de los argumentos Duration entre 250 ( 0 grados)
y 500 (45 grados).

Los tiempos de los pulsos de la Figura 4-18 posicionarán la estrella del servo muy
cerca de los ángulos mostrados pero estas no son necesariamente exactas. Usted
puede experimentar con diferentes valores de Duration de PULSOUT para tener
posiciones más precisas.

9 Haga una copia de ServoCenter.bs2 con el nombre TestServoPositions.bs2


9 Cambie el argumento Duration de PULSOUT de 750 a 500 y ejecute el programa
moficado para verificar que el servo se mantiene en la posición de 45 grados.
9 Repita esta prueba con argumentos Duration de 1000 (135 grados) y 417
(30grados).
9 Trate de predecir el argumento Duration que necesita para una posición que no
está escrita en la Figura 4-18, y verifique que servo gira la estrella y la mantiene
en la posición que desea. Por ejemplo pueden ser las posiciones 60, 120 grados
etc.

Mantenga su programa con argumentos Duration de PULSOUT en rango de 350 a


1150. El rango de 250 a 1250 es en “Teoría” pero en la práctica el servo podría tratar de
empujar contra sus límites mecánicos. Eso puede reducir la vida útil del servo. Su usted
desea maximixar el movimiento del rango de su servo, cuidadosamente verifique que
gradualmente se acerquen a la posición de su servo justamente dentro de sus límites
mecánicos, su desgaste será normal en lugar de ser excesivo.
Página 110 · ¿Qué es un Microcontrolador?

Figura 4-18: Posiciones de Estrella del Servo, Instrucciones PULSOUT y Duración del Pulso
en ms.

Resolviendo la Ecuación
Asociada a la instrucción PULSOUT de la Figura 4-18 hay un número que corresponde a
los milisegundos que dura cada pulso. Por ejemplo, el PULSOUT 14, 417 manda 0.834
ms de duración, y para PULSOUT 14, 500 manda 1.0 ms. Si usted tiene el BASIC Stamp 2
y desea convertir el tiempo en milisegundos al argumento Duration de la instrucción
PULSOUT, use esta ecuación:

Duración = número de milisegundos x 500

Por ejemplo, si usted no conocía que el argumento Duration para 1.5 es 750, así es como
usted debía calcularlo:
Controlando el Movimiento · Página 111

Duration = 1.5 x 500 = 750

La razón por la que tenemos que multiplicar el número de milisegundos de un pulso por
500 se obtiene del argumento PULSOUT Duration poque Duration está en términos de
unidades de 2 us en la BS2. ¿Cuántas unidades de 2μ hay e1 ms? Para saberlo solamente
divida 2 millonésimas en 1 milésimas.

1 2
÷ = 500
1,000 1,000 ,000

Si la instrucción es PULSOUT 14, 500, el pulso durará 500 x 2us = 1000 us = 1.0 ms.
(Recuerde: 1000 us = 1 ms)

Usted puede calcular Duration de una instrucción PULSOUT desconocida usando esta
ecuación:

Número de ms = Duración / 500 ms

Por ejemplo, si usted ve la instrucion PULSOUT 14, 850, ¿cuánto dura verdaderamente ese
pulso?

Número de ms = 850 / 500 ms = 1.7 ms

Escriba el Código a partir de los Diagramas de Tiempo


La Figura 4-19 muestra los diagramas de la señal que el BASIC Stamp manda al Servo
para que su estrella mantenga una posición de 135 grados. Como el diagrama de tiempo
muestra pulsos repetidos separados por señales low de 20 ms, el bucle DO...LOOP del
programa ServoCenter.bs2 proporciona un buen punto de inicio y todo lo que se necesita
es ajustar la duración de los pulsos high. Para calcular el argumento Duration de la
instrucción PULSOUT para los pulsos de 2 ms en el diagrama de tiempos, usted puede
usar la ecuacion Duration de la Sección Resolviendo la Ecuación.

Duración = número de milisegundos x 500


= 2 x 500 = 1000

Cuando sustituimos 1000 en el argumento Duration de la instrucción PULSOUT , el bucle


de control del servo se parecerá a esto:
DO
Página 112 · ¿Qué es un Microcontrolador?

PULSOUT 14, 1000


PAUSE 20
LOOP

9 Verifique este bucle en una copia de ServoCenter.bs2 y verifique que la estrella


del servo se coloca aproximadamente en 135 grados.
9 Repita este ejercicio para los diagramas de tiempo en la Figura 4-20

Figura 4-19
Diagramas de
Tiempo para la
posición de 135
grados

Son pulsos de 2 ms
separados por 20
ms

Figura 4-20
Diagramas de
Tiempo para la
posición de 45
grados

Son pulsos de 1 ms
separados por 20
ms

ACTIVIDAD #3: CONTROL DEL TIEMPO DE RETENCIÓN DEL SERVO


La Animatrónica usa la electrónica para animar props y efectos especiales, y los servos son
la herramienta común en este campo. La Figura 4-21 muestra un ejemplo de una mano
robótica de un proyecto de Animatrónica, que usa servos para controlar los dedos. El
programa PBASIC que controla los movimientos de la mano hace que los servos
mantengan las posiciones durante cierta cantidad de tiempo. En la actividad anterior,
nuestros programas hicieron que el servo mantenga en forma contínua ciertas. Posiciones
indefinidamente. Esta actividad lo introduce en la forma de escribir códigos que hacen que
el servo mantenga ciertas posiciones durante ciertas cantidades de tiempo.
Controlando el Movimiento · Página 113

Figura 4-21
Mano Animatrónica

Hay cinco servos en la parte inferior


derecha de la imagen que jalan los
cables de frenado y se comunican
con los dedos para hacerlos flexibles.
El BASIC Stamp proporciona el
control de cada dedo.

Bucles FOR...NEXT para controlar el Tiempo del Servo que Mantiene una
Posición
Si usted escribe el código para hace que un LED parpadee una vez por segundo, usted
puede anidar el código en un bulce FOR...NEXT para que repita tres veces el parpadeo por
tres segundo. Si su LED parpadea cinco veces por segundo, usted tiene que hacer que
bucle FOR...NEXT se repita quince veces para obtener el parpadeo del LED por tres
segundos. Como las instrucciones PULSOUT y PULSE que controlan su servo son
responsables de mandar señales high/low estas también hacen que el LED parpadee. Las
señales que mandamos a los servos en la actividad anterior hacen que el LED se ilumine
poco, quizá con un aparente parpadeo, esto se debe porque las señales high/low son muy
rápidas y los tiempos en high son muy breves. Reduzcamos la velocidad de las señales en
1/10 y veremos que el LED parpadea.

Programa Ejemplo. SlowServoSignalForLed.bs2


Comparado con el servo de señal centrada, este programa ejemplo incrementa la duración
de PULSOUT y PAUSE por un factor de 10 para que puedamos ver la señal con un LED
indicador que parpadea. El bucle FOR…NEXT del programa se repite casi 5 veces por
segundo, haciendo que 15 repeticiones hacen que el LED parpadee por tres segundos.

9 Desconecte la alimentación de su servo:


Página 114 · ¿Qué es un Microcontrolador?

o Si tiene una Tablilla Board of Education coloque el interruptor de 3


posiciones en la posición 1, para desconectar la alimentación del servo.
La posición 1 mantiene la alimentación del resto del sistema.
o Si tiene usted una Tablilla de BASIC Stamp Homework, temporalmente
desconecte el alambre que se conecta a Vdd. Esto desconecta la
alimentación del servo.
9 Meta y ejecute el programa SlowServoSignalsFor Led.bs2
9 Verifique que el LED parpadea rapidamente durante 3 segundos.
9 Cambie el valor EndValue del bucle FOR...NEXT de 15 a 30 y vuelva a ejecutar
el programa.
9 Como el bucle se repite dos veces, el LED deberá parpadear ahora durante 6
segundos.
9 Conecte la alimentación de su servo:
o Si tiene una Tablilla Board of Education coloque el interruptor de 3
posiciones en la posición 2, para conectar la alimentación del servo.
o Si tiene usted una Tablilla de BASIC Stamp Homework, conecte el
alambre que se conecta a Vdd.

' ¿Que es un Microcontrolador – SlowServoSignalsForLed.bs2


' Haga un 1/10 más lentas las señales de su servo para ver que parapadea el LED
indicador.

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Programa Ejecutandose!", CR

counter VAR Word

FOR counter = 1 to 15
PULSOUT 14, 7500
PAUSE 200
NEXT

Programa Ejemplo ThreeServoPositions.bs2


Si usted cambia PULSOUT 14, 7500 a PULSOUT 14, 750 y PAUSE 200 a PAUSE 20,
tendrá usted un bucle FOR...NEXT que manda brevemente la señal de posición central al
servo. Como ahora la señales durarán 1/10 de las duraciones del programa
SlowServoSignalsForLed.bs2 todo el bucle FOR...NEXT tomará 1/10 de tiempo en
ejecutarse. Si el objetivo es hacer que el servo mantenga una posición particular durante
tres segundos simplemente proporciona diez veces más pulso al incrementarse el
argumento de 15 a 50 “EndValue” del bucle FOR...NEXT.
Controlando el Movimiento · Página 115

FOR counter = 1 to 150 ' Se Centra durante 3 segundos.


PULSOUT 14, 750
PAUSE 20
LOOP

El programa ejemplo ThreeServoPositions.bs2 hace que el servo mantenga tres posiciones


diferentes como lo muestra la Figura 4-22, cada una durante 3 segundos.

Figura 4-22
ThreeServoPositions.bs2

El programa hace que el


servo mantenga cada
posición durante tres
segundos..

9 Meta y ejecute el programa ThreeServoPositions.bs2.


9 Verifique que el servo mantiene cada posición en la secuencia de la Figura 4-22
durante tres segundos.

La última posición que el servo mantendrá por 3 segundos es 135 grados y luego el
programa se detiene. La estrella del servo estará en la misma posición incluso si el BASIC
Stamp deja de mandar pulsos de control. La diferencia es que durante los tres segundos que
el BASIC Stamp mantiene la posición de 135 grados, el servo resiste cualquier fuerza que
trate de mover la estrella de esta posición. Al terminar los 3 segundos se puede girar con la
mano la estrella del servo.

Una forma para saber si el servo está recibiendo señales de control es observando el LED
indicador que está conectado al pin P14. Cuando está iluminado el LED esta indicando que
el servo está recibiendo señales de control y manteniendo su posición. Cuando se detienen
las señales el LED estará apagado.

9 Vuelva a ejecutar el programa (o presione y libere el botón de Reset).


9 Tan pronto que el servo va a la posición de 135 grados, mire el LED indicador de
señal mientras aplica fuerza de rotación a la estrella.

Usted debe ser capáz de sentir la reacción del servo mientras que el LED brilla muy poco
indicando que el servo todavía está recibiendo señales de control. En el momento en que se
Página 116 · ¿Qué es un Microcontrolador?

apaga el LED sabemos que ya no se envian señales de control, el servo deja de mantener su
posición y ahora usted puede girar la estrella.

9 Cuando se detiene la señal de 135 grados, verifique que el LED muestra que las
señales están detenidas y que el servo le permite girar la estrella afuera de la
posición de 135 grados.

' Que es un Microcontolador – ThreeServoPositions.bs2


' El Servo mantiene las posiciones 45, 90, and 135 degree durante 3 seconds cada
una.

' {$STAMP BS2}


' {$PBASIC 2.5}

counter VAR Word

PAUSE 1000

DEBUG "Posicion = 45 grados...", CR

FOR counter = 1 TO 150 ' 45 grados durante 3 segundos.


PULSOUT 14, 500
PAUSE 20
NEXT

DEBUG "Posicion = 90 grados...", CR

FOR counter = 1 TO 150 '90 grados durante 3 segundos.


PULSOUT 14, 750
PAUSE 20
NEXT

DEBUG "Posicion = 135 grados...", CR

FOR counter = 1 TO 150 '135 grados durante 3 segundos.


PULSOUT 14, 1000
PAUSE 20
NEXT

DEBUG "Todo hecho.", CR, CR

END

Su Turno – Ajustando la Posición vs Ajustando el Tiempo de Retención.


El programa ThreServoPositions.bs2 supone que la ejecución de 50 pulsos del servo del
bucle FOR...NEXT le toma 1 segundo. También esto puede usarse para ajustar el tiempo
de retención del argumenteo EndValue del bucle FOR...NEXT. Por ejemplo si usted desea
Controlando el Movimiento · Página 117

que el servo sólo mantenga su posición durante dos segundos, cambie el argumento
EndValue de 150 a 100. Para cinco segundos cambielo de 150 a 250, y así sucesivamente...

9 Haga una copia del programa ThreServoPositions.bs2


9 Modifique el argumenteo EndValue del bucle FOR...NEXT y experimente con
diferentes valores para diferentes tiempos de retención.
9 Opcional: Particularice las posiciones de retención ajustando el argumento
Duration de la instrucción PULSOUT.

Tiempo de Repetición del Bucle FOR...NEXT – Verdaderamente es 1/44 de


segundo no un 1/50
Un 1/50 de segundo es una aproximación de repetición del bucle. Un 1/44 de segundo es
una aproximación mas cercana. Considere cuanto tiempo requiere ejecutar cada elemento
del bucle FOR...NEXT . La instrucción PULSOUT 14, 750 está en la midad del rango de
las posibles duraciones del pulso, de tal forma que se puede tomar como promedio de la
duración del pulso. Manda un pulso que dura 750 x 2us = 1500 us = 1.5 ms. La instrucción
PAUSE 20 provoca un retardo en el programa de 20 ms. Un bucle FOR...NEXT con una
instrucción PULSOUT y una PAUSE requiere 1.3 ms para procesar todos los números e
instrucciones. Aunque esto significa que la señal low entre los pulsos dura verdaderamente
21.3 ms en lugar de 20 ms, esto no afecta el funcionamiento del servo. Los tiempos low
pueden estar apagados unos pocos milisegundo, pero los pulsos high tienen que tener
duraciones muy precisas por eso la instrucción PULSOUT es muy precisa.

Entonces, el tiempo total del bucle FOR...NEXT que requiere para repetirse es 1.5 ms + 20
ms + 1.3 ms = 22.8 ms, esto ses 22.8 milésimas de segundo. ¿Cuántas 22.8 milésimas de
segundo caben en 1 segundo? Dividamos 0.028 entre 1 y obtenemos:

1 segundo/0.028 segundos/repetición = 43.86 repeticiones = 44 repeticiones

Esta es la razón por la que el bucle se repite a razón de 44 repeticiones por segundo. El
número total de repeticiones en 1 segundo se llama “Hertz” y se abrevia Hz. Así, podemos
decir que la señal del servo se repite o tiene una Frecuencia cercana a 44 Hz.

Ciclos y hertz (Hz): Cuando una señal se repite a si misma un cierto número de veces,
cada repetición se llama ciclo. El número de ciclos es un segundo se mide en Hertz. Hertz
se abrevia Hz.

Los valores largos o cortos de PULSOUT Duration hacen que el bucle FOR...NEXT tome
un poco más o menos tiempo para repetirse. El PULSOUT Duration de 750 está en la
Página 118 · ¿Qué es un Microcontrolador?

mitad del rango de duración de los pulsos de control del servo que muestra la Figura 4-18.
Entonces usted puede usar 44 en su código como referencia para el número de los pulsos
del servo en un segundo. Si usted necesita mayor precisión repita las ecuaciones de la
instrucción PULSOUT que está utilizando. Por ejemplo, si el bucle tiene una instrucción
PULSOUT con Duration de 1000 en lugar de 750, al pulso dura 2ms en lugar de 1.5 ms. El
bucle todavía tiene una pausa de 20 ms y 1.3 ms de tiempo de proceso. Entonces la suma
es 2 + 20 + 1.3 = 23.3 ms. Dividimos 1 s entre este número para encontra la razón del
bucle FOR...NEXT y obtenemos 1/0,023 = 42.9 = 43 Hz.

Resumen de Contro del Bucle FOR...NEXT del Servo


La Figura 4-23 detalla la función de cada número del bucle FOR...NEXT del control del
servo. El EndValue del bucle FOR...NEXT determina el número de 1/44 de segundo en
que el servo mantiene una posición. El valor 750 manda un pulso de 1.5 ms que instruye al
servo que mantenga una posición de 90 grados de acuerdo con la Figura 4-18. El
argumento “pin” de la instrucción PULSOUT escoge el pin de E/S para mandar las señales
de control al servo. Entonces, 14 hace que la instrucción PULSOUT mande una señal high
breve (pulso) al servo conectado en la terminal pin P14. Cuando se termina el pulso ahora
el pin manda una señal low. Entonces, la instrucción PAUSE 20 asegurá quela señal low
dure aproximadamente 20 ms antes del siguiente pulso.

Number of 44ths of a
Servo I/O pin second to hold the
position
Figura 4-23
FOR counter = 1 TO 132
PULSOUT 14, 750 Control del Servo
PAUSE 20 Del Bucle
NEXT Position to hold For...Next

Required 20 ms
between each pulse

En promedio un bucle FOR...NEXT que manda una sola instrucción PULSOUT al servo
seguida por una PAUSE 20, se repite 44 veces por segundo. Y como el bucle se repite 132
veces, hace que el servo mantenga la posición 135 grados durante 3 segundos. Esto se debe
a que:

132 repeticiones entre 44 repeticiones/segundo = 3 segundos


Controlando el Movimiento · Página 119

Si su aplicación o proyecto necesita que el BASIC Stamp manda una señal servo para
determinado número de segundo, solamente multiplique el número de segundo por 44 y
use el resultado en el argumento EndValue del bucle FOR...NEXT. Por ejemplo, si su
señal necesita que dure cinco segundos:

5 segundo x 44 repeticiones/segundo = 220 repeticiones

ACTIVIDAD #4: CONTROLANDO LA POSICIÓN CON SU COMPUTADORA


La Automatización de las Fábricas frecuentemente incluyen comunicación de
microcontroladores con grandes computadoras. Los microcontroladores leen los sensores y
transmiten los datos a la computadora principal. La computadora principal interpreta y
analiza los datos de los sensores y regresa información de posiciones a los
microcontroladores. Los microcontroladores pueden actualizar la velocidad de una banda
rotatoria , o una posición específica, o un mecanismo o la tarea que controla un motor.

Usted puede usar la Terminal Debug para mandar mensajes de su computadora a el BASIC
Stamp como lo muestra la figura 4.22. El BASIC Stamp tiene que programarse para que
“escuche” los mensajes que manda usted con la Terminal Debug, y también tiene que
almacenar los datos que usted manda de una o más variables.

Figura 4-24
Mandando Mensajes a el
BASIC Stamp

Haga click en el cuadro de la


esquina superior izquierda y
escriba su mensaje. Una
copia del mensaje que
escribió aparece en la
ventana inferior. A esta
copia se le llama “ECO”.
Página 120 · ¿Qué es un Microcontrolador?

En esta actividad, usted programará el BASIC Stamp para recibir dos valores de la
Terminal Debug, y usará estos valores para controlar el servo.

1. El número de pulsos a enviar al servo.


2. El valor de Duration que usa la instrucción PULSOUT.

También programará el BASIC Stamp usando estos valor para controlar el servo.

Partes y Circuito
Los mismos de la Actividad #2

Programando el BASIC Stamp para Recibir Mensajes de la Terminal Debug


La programación del BASIC Stamp para que mande mensajes a la Terminal Debug se
usando la Instrucción DEBUG. La programación del BASIC Stamp para que reciba
mensajes de la Terminal Debug se hace usando la Instrucción DEBUGIN. Al usar
DEBUGIN, también puede declarar una o más variables para que el BASIC Stamp
almacene la información que recibe.

Este es un ejemplo de una variable que usted puede declarar para que el BASIC Stamp
almacene un valor
Pulses VAR Word

Posteriormente en el programa, usted usará esta variable para almacenar un número que
recibe de la instrucción DEBUGIN.
DEBUGIN DEC pulses

Cuando el BASIC Stamp recibe un valor numérico de la Terminal Debug, lo almacena en


la variable “pulses” El formadto DEC le dice a la instrucción DEBUGIN que los caracteres
que usted envía serán digitos que forman un número decimal. Tan pronto como usted pisa
la tecla “Enter” el BASIC Stamp almacenará, como un número decimal, los dígitos que
recibe en la variable “pulses”. Y luego avanzará.

Aunque no está incluido en el Programa Ejemplo, usted puede agregar una línea para
verificar que BASIC Stamp procesó el mensaje.
DEBUG CR, "Usted mandó el valor: ", DEC pulses
Controlando el Movimiento · Página 121

Programa Ejemplo: ServoControlWithDebug.bs2


La Figura 4-25 muestra la localización de las ventanas de la Terminal Debug junto con la
Ventana de Recepción. La Ventana de Recepción es la que hemos estado usando para
mostrar los Mensajes que recibe la Terminal Debug del BASIC Stamp.
La Ventana de Transmisión le permite a usted escribir los caracteres y números y
transmitirlos a el BASIC Stamp.

Figura 4-25
Ventanas de la Terminal Debug

Å Ventana de Transmisión

En la Figura 4-25, se escribión el número 264 en la Ventana de Transmisión de la Terminal


Debug. Abajo, en la Ventana de Recepción se muestra una copia del valor 264 cerca del
mensaje “Meta Tiempo de Ejecución”. A esta copia se le llama “eco” y solamente se
muestra en la Ventana de Recepción si el rectángulo, de la esquina inferior derecha, Echo
Off está sin verificar.

Eco es cuando usted manda un mensaje a traves de la ventana Transmitir de la Terminal


Debug, y aparece una copoa en la ventana Recibir de la Terminal Debug. Hay una
ventanita para checar en la esquina inferior derecha de la Terminal Debug, y usted puede
hacer click para ver que ya checó. En esta actividad, como deseamos mostrar los “ecos”
en la ventana de Recepción, la ventanita EchoOff quedará vacia, sin checar.

9 Meta el programa ServoControlWithDebug.bs2 en el Editor de BASIC Stamp y


ejecútelo.
9 Si la ventana de Transmisión es muy pequeña, agrandela usando el ratón haciendo
clik en el Separador y arrastrelo hacia abajo. El Separador está justamente abajo
del mensaje de texto “Enter run time as a” en la Figura 4-25.
9 Asegurese que la ventanita Echo Off de la esquina inferior derecha esta vacia.
Página 122 · ¿Qué es un Microcontrolador?

9 Haga click en la ventana Transmit de arriba, para colocar ahí su cursor y escribir
los mensajes.
9 Cuando la Terminal Debug le indique “Enter run time as a number of pulses”
escriba el número 132, y luego presione la tecla Enter de su computadora
9 Cuando la Terminal Debug le indique “Enter position as a PULSOUT duration”
escriba el número 100 y luego presione “Enter”.

La duración de PULSOUT Duration debe ser un número entre 350 y 1150. Si usted
mete números fuera de este rango el programa los cambiar a losn números más cercanos
de 350 o 1150. Si el programa no tiene esta característica de seguridad, se pueden meter
ciertos números que pudierán hacer que el servo trate de girar a un posición más allá de
sus propios límites mecánicos. Aunque esto no daña al servo, puede disminuir su vida útil.

El BASIC Stamp mostrará el mensaje “Servo en Ejecución” mientras manda pulsos al


servo. Cuando ha terminado el envió de pulsos, mostrará el mensaje “Hecho” durante 1
segundo. Entonces, le indicará que meta nuevamente el número de pulsos. De buen humor
asegurese de seguir la indicación de meter valores entre 350 y 1150 para el valor de
PULSOUT.

9 Experimente metiendo otros valores del rango 350 a 1150 para valores de
PULSOUT Duration y valores para el número de pulsos entre la entre 1 a 65534.

Se requieren cerca de 44 pulsos para hacer que el servo mantenga una posición por 1
segundo. Para hacer que el servo mantenga una posición durante 5 minutos usted deberá
meter 13200 en el indicador “número de pulsos”. Esto es:
44 pulsos/segundo x 60 segundos/minuto x 5 minutos = 13200 pulsos
¿Por qué se usan los valores de 1 a 64434? Si usted verdaderamente desea saberlo, lea
toda la sección FOR...NEXT del Manual BASIC Stamp para aprender acerca de error del
rango de la variable, 16-bit rollover. Se hace un error cuando está haciendo sus programas.

' ¿Que es un Microcontrolador? - ServoControlWithDebug.bs2


' Manda Mensajes a BASIC Stamp para controlar el servo usando
' la Terminal Debug.

' {$STAMP BS2}


' {$PBASIC 2.5}

counter VAR Word


pulses VAR Word
duration VAR Word

PAUSE 1000
DEBUG CLS, "Tiempo de ejecución del Servo: ", CR,
" ~44 pulsos en 1 segundo", CR,
Controlando el Movimiento · Página 123

"Posición del Servo ", CR,


" 350 <= PULSOUT Duration <= 1150", CR, CR

DO

DEBUG "Meta el tiempo de ejecución ", CR,


"como numero de pulsos: "
DEBUGIN DEC pulses

DEBUG "Meta la posición como", CR,


"Duración de PULSOUT: "
DEBUGIN DEC duration

duration = duration MIN 350 MAX 1150

DEBUG "Servo en ejecución...", CR

FOR counter = 1 TO pulses


PULSOUT 14, duration
PAUSE 20
NEXT

DEBUG "Hecho", CR, CR


PAUSE 1000

LOOP

Funcionamiento del programa ServoControlWithDebug.bs2


En este programa se declaran tres variables tamaño “Word”

counter Var WORD


pulses Var WORD
duration Var WORD

Se declara la variable “counter” porque la usa el bucle FOR…NEXT. (Para detalles, vea
Capítulo 2, Actividad 3). Las variables “pulses” y “duration” se usan para un par de
actividades. Ambas se usan para recibir y almacenar valores que manda la Terminal
Debug. La variable “pulses” también se usa para fijar el número de repeticiones en el bucle
FOR...NEXT que proporciona pulsos al servo, y la variables “duration” se usa para fijar la
duración de cada pulso de la instrucción PULSOUT.

La instrucción DEBUG proporciona un recordatorio que hay cerca de 44 pulos en 1


segundo en el bucle FOR...NEXT, y el argumento de PULSOUT Duration que controla la
posición del servo puede valer entre 350 y 1150.
DEBUG CLS, "Tiempo de Ejecución del Servo :", CR,
Página 124 · ¿Qué es un Microcontrolador?

" ~44 pulsos en 1 segundo", CR,


"Posicion del Servo :", CR,
" 350 <= Duración de PULSOUT <= 1150", CR, CR

El resto de el programa se anida dentro de un bucle DO...LOOP sin un WHILE o sin el


argumento Condition de la instrucción UNTIL de tal manera que las instrucciones se
ejecutan una vez y otra y otra vez.

DO
‘No se muestra el resto del programa.
LOOP

La instrucción DEBUG se usa para mandar su (el “usuario” del software) mensaje para
meter el número de pulso. Entonces, la instrucción DEBUGIN espera que usted meta los
dígitos que forman el número y que presione la tecla “Enter” de su teclado. Los digitos
que usted metión se convierten en un valor que almacena la variable “pulses”. El proceso
se repite con unas segundas instrucciones DEBUG y DEBUGIN que cargan otro valor que
usted también mete en la variable “duration”.
DEBUG "Meta el tiempo de ejecución como ", CR,
"número de pulsos: "
DEBUGIN DEC pulses

DEBUG "Meta la posición como", CR,


"Duración de PULSOUT: "
DEBUGIN DEC duration

Despues que ha metido el segundo valor, es útil mostrar un mensaje mientras se está
ejecutando el servo para que no intente meter el segundo valor durante este tiempo:
DEBUG “El servo está ejecutandose...” , CR

Mientras el servo está ejecutandose intente suavemente mover la estrella del servo fuera de
su posición de retención. El servo se resiste a esta ligera presión aplicada a la estrella.

For Counter = StartValue hasta EndValue {STEP StepValor} …NEXT


Esta es la sintaxis del bucle FOR…NEXT del Manual BASIC Stamp. Y muestra que usted
necesita un Counter, StartValue y un EndValue para controlar cuantas veces en si mismo
se repite el bucle. Si usted desea agregar un número diferente a uno al valor Counter,
tambien hay un StepValue opcional para cada bucle.
Controlando el Movimiento · Página 125

Como en los ejemplos anteriores, la variable “counter” se usó para mantener el ajuste de
las repeticiones del bucle FOR...NEXT. La variable “counter” afuera del bucle
FOR...NEXT introduce algunas nuevas técnicas usando variables para definir como se
comporta el programa (y el servo). Hasta este ejemplo, los bucles FOR...NEXT han usado
constantes como 10 o 132 en el argumento EndValue. En este bucle FOR...NEXT el valor
de la variable pulsos se usa para controlar el EndValue del bucle FOR...NEXT. Entonces,
usted fija el valor de “pulses” metiendo un número en la Terminal Debug, y éste controla
el número de repeticiones que ejecuta el bucle FOR...NEXT, y este a su vez controla el
tiempo que el servo mantiene una posición dada.

FOR counter = 1 to pulsos


PULSOUT 14, duration
PAUSE 20
NEXT

También, en los ejemplos anteriores, valores constantes tales como 500, 750 y 1000 se
usaron para el argumento “duration” de la instrucción PULSOUT. En este bucle, una
variable llamada “duration” que usted determina metiendo valor en Ventana de
Transmisión de la Terminal Debug, ahora define la duración del pulso de la instrucción
PULSOUT, y esta a su vez controla la posición que el servo mantiene.

Tómese su tiempo para entender el bucle FOR...NEXT del programa


ServoControlWithDebug.bs2.
Este es uno de los primeros ejemplos de las cosas maravillosas que usted puede hacer con
argumentos y variables de las instrucciones de PBASIC. Destaca la utilidad de
funcionamiento que un módulo con microcontrolador programable como el BASIC Stamp
puede realizar.

Su Turno – Ajuste de límites con Software


Imaginemos que este sistemade control servo computarizado se ha desarrollado para que
trabaje a control remoto. Quizá un guardia de seguridad lo usará para abrir una puerta que
él o ella observa con una cámara remota. Quizá un colega estudiante lo usará para controlar
puertas de una red de pasajes confusos de ratones que buscan alimento. Quizá un cañonero
militar lo usé para apuntar el cañón a un objetivo particular. Si usted está diseñando el
producto para alguien más lo use, la última cosa que usted desea darle al usuario (guardia
de seguridad, colega estudiante, cañonero militar) es la posibilidad que meta números
erroneos que puedan dañar el equipo.

Mientras ejecuta el programa ServoControlWithDebug.bs2, es posible hacer un error


mientras escribe el valor de duration en la Terminal Debug. Digamos que accidentalmente
Página 126 · ¿Qué es un Microcontrolador?

usted escribe 100 en lugar de 1000 y presiona “Enter”. El valor 100 provocaría que el
servo trate de girar a una posición más allá de sus límites mecánicos. Aunque esto no daña
instantáneamente el servo, esto no beneficia la vida útil del servo. Entonces el programa
tiene una línea que previene este error que puede causar daño:

duration = duration MIN 350 MAX 1150

Esta instrucción corregiría el 100 que accidentalme escribió y cambiaría la variable


“duration” a 350. Si usted accidentalmente escribe 10000 esto reduciría la variable
“duration” a 1150. Usted puede hacer algo equivalente con un par de instrucciones
IF...THEN:
IF duration < 350 THEN duration = 350
IF duration > 1150 THEN duration = 1150

Hay algunas máquinas que incluso corrigen automáticamente al valor más cercano y se
tuvieran resultados indeseable. Por ejemplo, una máquina de control númerico que corta
algúna clase de material costoso, usted no desearía que la máquina suponga 350 cuando
usted escribió 1000, pero accidentalmente escribió 100

Si no corta el material al ajuste de 350 esto generaría un error costoso. Entonces, podemos
tomar otra aproximación a su programa e indicarle que sus valores están fuera de rango y
volver a intentar. Este es un ejemplo de cómo puede moficar el código para que haga esto:

9 Guarde el programa ejemplo ServoControlWithDebug.bs2 con un nuevo nombre


ServoControlWithDebugYourTurn.bs2
9 Reemplace estas dos instrucciones:

DEBUG "Meta la posicion como", CR,


"Duración de PULSOUT: "
DEBUGIN DEC duration

Con este bloque de instrucciones :

DO
DEBUG " Meta la posicion como ", CR,
" Duración de PULSOUT: "
DEBUGIN DEC duration
IF duration < 350 THEN
DEBUG "El Valor de Duracion como mínimo debe ser 350", CR
PAUSE 1000
ENDIF
Controlando el Movimiento · Página 127

IF duration > 1150 THEN


DEBUG "El Valor de Duracion no puede ser mayor que 1150", CR
PAUSE 1000
ENDIF
LOOP UNTIL duracion >= 350 AND duracion <= 1150

9 Guarde el programa
9 Ejecute el programa y verifique que se repite hasta que usted mete un valor
correcto en el rango 350 a 1150.

ACTIVIDAD #5: CONVIRTIENDO POSICIÓN A MOVIMIENTO


En esta actividad, usted programará el servo para cambiar la posición a diferentes
velocidades. Al cambiar la posición a diferentes velocidades, usted hará que la estrella del
servo gire a diferentes velocidades. Usted puede usar esta técnica para hacer que el servo
controle el movimiento en lugar de la posición.

Programación la Razón de Cambio por Posición


Usted puede usar un bucle FOR...NEXT para hacer que el servo haga un barrido a través
de un rango de movimiento como esto:

FOR counter = 500 TO 1000


PULSOUT 14, counter
PAUSE 20
NEXT

El bucle FOR...NEXT hace que la estrella del servo empiece en 45 grados y luego gire
lentamente en sentido inverso de las manecillas del reloj hasta que llegue a 135 grados.
Debido a que “counter” es el índice del bucle FOR...NEXT el counter se incrementa una
unidad cada vez que se ejecuta el bucle. El valor de “counter” también se usa en el
argumento “duration” de la instrucción PULSOUT, lo que significa que la duración de
cada pulso se hace un poquito más grande cada vez que se ejecuta el bucle. Como cambia
la variable “counter” también lo hace la posición de la estrella del servo.

Los bucles FOR...NEXT tienen un argumento opcional: StepValue de STEP. El argumento


StepValue puede usarse para que el servo gire más rápido. Por ejemplo, usted puede usar el
argumento StepValue para agragar 8 cada vez que el bucle se ejecuta (en lugar de 1)
modificando la frase FOR de la siguiene manera:
FOR counter = 500 to 1000 STEP 8
Página 128 · ¿Qué es un Microcontrolador?

Usted también puede hacer que el servo gire en la dirección contraria contando en forma
descendente en lugar de ascendente. En PBASIC, los bucles FOR...NEXT contarán en
forma inversa si el argumento StarValue es mayor que el argumento EndValue. Este es un
ejemplo para hacer que el bucle FOR...NEXT cuente de 1000 hacia 500.
FOR counter = 1000 to 500

Usted puede combinar el conteo descendente con un argumento StepValue para hacer que
el servo gire más rápidamente en la dirección de las manecillas del reloj de la siguiente
manera:
FOR counter = 1000 TO 500 STEP 20

El truco para hacer que el servo gire a diferentes velocidades es haciendo que los bucles
FOR…NEXT cuenten en forma ascendente y descendente con diferentes tamaños de
escalón. El siguiente programa usa estas técnicas para hacer que la estrella del servo gire
hacia delante y atrás a diferentes velocidades.

Programa Ejemplo: ServoVelocities.bs2


9 Meta y ejecute el programa: ServoVelocities.bs2
9 Conforme se ejecuta el programa, observe como cambía el valor de “counter” en
la Terminal Debug.
9 También observe como el servo se comporta diferente cuando se ejecutan dos
bucles distintos FOR...NEXT Hay cambios de dirección y velocidad en la estrella
del servo.

' ¿Que es un Microcontrolador? - ServoVelocities.bs2


' El servo gira lentamente en direccion contraria a manecillas del reloj, .
luego rapidamente en direccion de manecillas del reloj
' {$STAMP BS2}
' {$PBASIC 2.5}

counter VAR Word

PAUSE 1000

DO
DEBUG "El ancho del Pulso se incrementa por 8", CR

FOR counter = 500 TO 1000 STEP 8


PULSOUT 14, counter
PAUSE 7
DEBUG DEC5 counter, CR, CRSRUP
NEXT
Controlando el Movimiento · Página 129

DEBUG CR, "El ancho del Pulso disminuye por 20", CR

FOR counter = 1000 TO 500 STEP 20


PULSOUT 14, counter
PAUSE 7
DEBUG DEC5 counter, CR, CRSRUP
NEXT
LOOP

Funcionamiento del programa ServoVelocities.bs2


El primer bucle FOR...NEXT cuenta en forma ascendente de 500 a 1000 en pasos de 8.
Como la variable “counter” se usa como argumento “duration” de la instrucción
PULSOUT, la estrella del servo gira en sentido inverso a las manecillas del reloj en pasos
que son ocho veces más pequeños que el menor paso posible.

FOR counter = 500 TO 1000 STEP 8


PULSOUT 14, counter
PAUSE 7
DEBUG DEC5 counter, CR, CRSRUP
NEXT

¿ Por qué PAUSE 7 en lugar de PAUSE 20?


La instrucción DEBUG DEC 5 counter, CR, CRSRUP toma alrededor de 8 ms para
ejecutarse. Esto significa que PAUSE 12 podría mantener el retardo de 20 ms entre pulso.
Unos pocos experimentos de ensayo y error mostraron que PAUSE 7, dio al servo el
movimiento más suave. Ya que el tiempo “low” de 20 ms entre los pulsos del servo no
necesitan ser precisos, estos son correctos para sintonizarlo y ajustarlo.

Más Formatos de DEBUG y caracteres de control son caracteristicas de la instrucción


DEBUG que muestra el valor de la variable “counter”. Este valor se imprime usando el
formato decimal de 5 dígitos (DEC5). Despues que se impimer el valor, hay un retorno de
carro (CR). Después de eso, el carácter de control CRSRUP (cursor arriba). Manda al
cursor de regreso a la línea anterior- Esto genera el valor nuevo del “counter” para que se
imprima sobre el valor viejo cada vez que se ejecuta el bucle.

El segundo bucle FOR...NEXT cuenta en forma descendente de 1000 a 500 en pasos de 20.
La variable “counter” también se usa en este ejemplo como un argumento para la
instrucción PULSOUT, entonces la estrella del servo gira en sentido de las manecillas del
reloj.
FOR counter = 1000 TO 500 STEP 20
PULSOUT 14, counter
PAUSE 7
DEBUG DEC5 counter, CR, CRSRUP
NEXT
Página 130 · ¿Qué es un Microcontrolador?

Su Turno – Ajustando las Velocidades


9 Use diferentes valores STEP para hacer que el servo gire a diferentes velocidades.
9 Y ejecute el programa despues de cada modificación.
9 Observe el efecto de cada nuevo valor de StepValue y vea que tan rápido gira la
estrella del servo
9 Experimente con diferentes valores (entre 3 y12) de” Duration” de la instrucción
PAUSE para encontrar el valor que de al servo el movimiento más suave para
cada nuevo valor de StepValue.

ACTIVIDAD #6: BOTÓNES PUSH – PARA CONTROLAR EL SERVO


En este capítulo usted ha escrito programas que hacen que el servo realice una serie de
movimientos predeterminados, y también ha controlado al servo usando la Terminal
Debug. Uste trambien puede programar el BASIC Stamp para que controle al servo usando
entradas con botones push. En esta actividad usted:

• Construirá un circuito para controlar el servo con entradas de botones push.


• Programará el BASIC Stamp para controlar el servo con entradas de botones

Cuando lo haya hecho, usted será capaz de mantener presionado un botón push para hacer
que el BASIC Stamp gire el servo en una dirección, y mantener presionado el otro botón
para que el servo gire en dirección contraria. Cuando los botones push no están
presionados el servo mantendrá la última posición en que se movió.

Partes extra para los botones push que controlan el servo


En esta actividad usará las mismas partes de las actividades anteriores. Además usted
necesitara juntar las siguientes partes para el circuito de los botones push:

Dos Botones push – normalmente abiertos


Dos Resistores de 10 KΩ (café-negor-naranja)
Dos Resistor de 220 Ω (rojo-rojo-café)
Tres alambres para puentes.

Juntando los Botones push del Circuito de Control


La Figura 4-26 muestra el circuito de los botones push que usará para controlar el servo.

9 Agregue este circuito a los circuitos servo y LED que ha estado usando hasta este
punto. Cuando lo haya hecho su circuito: se parecerá a:
Controlando el Movimiento · Página 131

Será semejante a la Figura 4-27 si usted está usando la Tablilla Board of


o
Eduación con puerto USB (cualquier revisión) o puerto Serie (revisión C
o más reciente)
o Será semejante a la Figura 4-28 si usted esta usando la Tablilla BASIC
Stamp Home Work Board (revisión C o más reciente)
9 Si su tablilla no esta en la lista arriba mencionada, busque la sección Servo
Circuits Connections dowload en la liga www.parallax.com/Go/WAM para
encontrar las instrucciones de su tablilla.

Vdd Vdd

P4
220 Ω
Figura 4-26
Circuitos Botones
P3 push para
220 Ω Control del Servo
10 kΩ 10 kΩ

Vss Vss

15 14 Vdd 13 12
White
Red Red
Figura 4-27
Black Black Circuitos Servo y
X4 X5 Botones push
Vdd Vin Vss agregrados a la
X3
+ Tablilla Board of
P15 Education
P14
P13
P12 Tablilla Board of
P11 Education puerto
P10
P9
Serie Rev C o
P8 más reciente o
P7 puerto USB
P6
P5 cualquier
standard servo
P4
www.parallax.com
revisión.
P3
P2
P1
P0
X2
Página 132 · ¿Qué es un Microcontrolador?

Figura 4-28
Circuitos Servo y
Botones push
agregrados a la
Tablilla.

HomeWorkBoard.
Tablilla
HomeWork Rev
C o más reciente.

9 Verifique los botones push conectados al pin P3 usando la versión original del
programa ReadPushbuttonState.bs2. La sección que tiene este programa y las
instrucciones de su uso comienzan en la paágina 67.
9 Modifique el programa para que ahora lea por el pin P4.
9 Ejecute el programa modificado para verificar que el botón push está conectado en
el pin P4.

Programando el Control del servo con botones push


Se pueden usar los bloques de código de IF...THEN para verificar los estados de los botoes
push para sumarlos o restarlos de una variable de nombre “duration”. Esta variable se usa
en el argumento “duration” de la instrucción PULSOUT. Si se presiona uno de los botones
push, se incrementa el valor de “duration”. Si se presiona el otro botón push, disminuye el
valor de “duration”. Se usa un bucle anidado de IF...THEN para decidir si la variable
“duration” es muy grande (mayor que 1000) o es muy pequeña (menor que 500).

Programa Ejemplo: ServoControlWithPushbuttons.bs2


Este programa ejemplo hace que la estrella del servo gire en sentido inverso a las
manecillas del reloj cuando se presiona el botón push conectado al pin P4. La estrella del
Controlando el Movimiento · Página 133

servo seguirá girando hasta que se libere el botón push y el valor de duración sea menor
que 100.

Cuando se presiona el botón push conectado al pin P3, la estrella del servo gira en sentido
de las manecillas del reloj. El servo también está limitado en su movimiento en sentido de
la manecillas del reloj porque a la variable “duration” no le está permitido ir más debajo de
500. La Terminal Debug muestra el valor de “duration” cuando se está ejecutando el
programa.

9 Meta el programa: ServoControlWithPushbuttons.bs2 en el Editor de BASIC


Stamp y ejecútelo.
9 Verifique que el servo gira en sentido inverso a las manecillas del reloj cuando
mantiene presionado el botón push conectado al pin P4.
9 Verifique que el servo gira en sentido de las manecillas del reloj cuando mantiene
presionado el botón push conectado al pin P3.
9 Verifique que tan pronto se alcanza el límite de duration<500 o lo excede el servo
deja de girar en la dirección de la manecillas del reloj.

' ¿Que es un Microcontrolador - ServoControlWithPushbuttons.bs2


' Mantenga presionado el botón push de P4 para que el servo gire en sentido
' inverso de las, manecillas del reloj o presione el botón push P3 para qgire
' en sentido directo
' {$STAMP BS2}
' {$PBASIC 2.5}

duration VAR Word


duration = 750
PAUSE 1000

DO
IF IN3 = 1 THEN
IF duration > 500 THEN
duration = duration - 25
ENDIF
ENDIF

IF IN4 = 1 THEN
IF duration < 1000 THEN
duration = duration + 25
ENDIF
ENDIF

PULSOUT 14, duration


PAUSE 10

DEBUG HOME, DEC4 duration, " = duration"


LOOP
Página 134 · ¿Qué es un Microcontrolador?

Su Turno – Límites Mecánicos vs. Límites por Software


Los limitadores mecánicos previenen que el servo gire más allá de 0 y 180 grados, que
corresponde a argumentos de PULSOUT Duration en la vecindad de 250 y 1250. El
programa ServoControlWithPushbuttons.bs2 también tiene límites por software, definidos
por las instrucciones IF...THEN que previenen que usted use un botón push para que el
servo gire más allá de cierto punto. En contraste con los limitadores mecánicos, los límites
del software son muy fácil de ajustar. Por ejemplo, usted puede hacer que el botón push
controle el servo en un rango muy amplio de movimiento simplemente reemplazando cada
ejemplo de 500 por 350 y los 1000 por 1150. También puede usted darle al servo un rango
de movimiento más angosto reemplazando los ejemplos de 500 con 650 y los de 1000 con
850. Los límites por software incluso, no necesitan ser simétricos. Por ejemplo, usted
podría cambiar los limites por software del rango 500-1000 por el rango de 350 a 750.

9 Experimente con diferentes limites de servo por software, incluyendo 350 a 1150,
650 a 850 y 350 a 750.
9 Verifique cada conjunto de limites por software para asegurarse que se comportan
como usted lo espera.

También usted puede cambiar la velocidad de giro del servo mientras mantiene presionado
un botón push. Por ejemplo, si usted cambia los dos valores de 25 del programa por 50, el
servo responderá dos veces má rápido. Alternadamente, usted podría cambiarlos a 30 para
hacer que el servo responde un poquito más rápido, o a 20 para que responda lentamente o
a 10 para que responda muy lentamente.

9 ¡Inténtelo!

RESUMEN
Este capítulo introdujo el movimiento microcontrolado usando un Servo Normalizado de
Parallax. Un servo es un dispositivo que se mueve para mantener una posición particular
basado en las señales electrónicas que recibe. Estas señales toman la forma de pulos que
duran entre 0.5 y 2.5 ms, y que se mandan aproximadamente cada 20 ms al servo para
mantener su posición.

El programador puede usar la instrucción PULSOUT para hacer que el BASIC Stamp
mande estas señales . Como los pulsos tienen que mandarse cada 20 ms para que el servo
mantenga su posición las instrucciones PULSOUT y PAUSE generalmente se colocan en
alguna parte del bucle. Las variables o constantes pueden usarse para determinar tanto el
Controlando el Movimiento · Página 135

número de repeticiones del bucle como el argumento “Duration” de la instrucción


PULSOUT.

En este capítulo presentamos varias formas para obtener los valores en la variables. La
variable puede recibir el valor desde la Terminal Debug usando la instrucción DEBUGIN.
El valor de la variable puede pasar a través de una secuencia de valores cuando se usa
como argumento de “Counter” del bucle FOR..NEXT. Esta técnica puede usarse para
hacer que el servo haga movimientos de barrido. Si las instrucciones IF...THEN se usan
para monitorear los botones push y se pueden usar par sumar o restar la variable utilizada
en el argumento “Duration” de la instrucción PULSOUT cuando se presiona cierto botón
push. Esto permite el control de la posición y los movimientos de barrido dependiendo de
la construcción del programa y como se activen los botones push.

Preguntas
1. Cuáles son las cinco partes externas de un servo? ¿ Para que se usan?
2. ¿Se requiere un circuito LED para un servo funcione?
3. ¿Qué instrucción control el tiempo “low” de la señal que se manda al servo? ¿Qué
instrucción controla el tiempo “high”?
4. ¿Qué elemento de programación puede usted usar para controlar la cantidad de
tiempo que el servo usa par manteer una posición particular?
5. ¿Cómo usa usted la Terminal Debug para mandar mensajes a el BASIC Stamp?
6. ¿Qué tipo de bloque de Códigos puede usted escribir para limitar el rango de
movimiento del servo?

Ejercicios
1. Escriba un bloque de Códigos que barra el valor de PULSOUT para controlar un
servo desde una “duration” de 700 a 800, y luego regrese a 700 en incrementos de
(a) 1 y (b) 4.
2. Agregue un bucle anidado FOR...NEXT a la respuesta del ejercicio 1b para que
proporcione diez pulsos anted de incrementar por 4 el argumento “Duration” de
PULSOUT.

Proyecto
1. Modifique el programa ServoControlWithDebug.bs2 para que monitoree un
interruptor Supresor. Si se presiona el interruptor Supresor (el botón push está
conectado en el pin P3), la Terminal Debug no deberá aceptar ningúna instrucción,
y deberá mostrar “Presione el Interruptor de Inicio para arrancar la maquinaria”.
Cuando está presionado el Interruptor de Inicio ( el botón push está conectado en
Página 136 · ¿Qué es un Microcontrolador?

el pin P3) el programa deberá funcionar normalmente. Si se desconecta y luego se


reconecta la energía, el programa deberá comportarse como si se hubiera
presionado el Interruptor Supresor.

Soluciones
Q1. Conector – Conecta al servo a la fuente de alimentación y a la fuente de señal; 2)
Cable – lleva la alimentación y la señal del conector al servo; 3) Estrella – Es la
parte movil del servo; 4) Tornillo – Sujeta la estrella del servo a la flecha de
salida; 5) Caja – Contiene el motor de DC, engranes y circuitos de control.
Q2. No, el LED solamente nos ayuda a ver como se comportan las señales de control.
Q3. El tiempo “low” lo controla la instrucción PAUSE. El tiempo “high” lo controla la
instrucción PULSOUT.
Q4. Un bucle FOR...NEXT
Q5. Escriba mensajes en la Ventana de Transmisión de la Terminal Debug. Use la
instrucción DEBUGIN y una variable para hacer que BASIC Stamp reciba los
caracteres.
Q6. Ya sea anidando la instrucción IF...THEN or una instrucción que use los
operadores MAX y MIN para mantener la variable en ciertos rangos.
E1.
a) Incrementos de 1 b) Agrege STEP 4 a los bucles
FOR...NEXT .
FOR counter = 700 TO 800
PULSOUT 14, counter FOR counter = 700 TO 800 STEP 4
PAUSE 20 PULSOUT 14, counter
NEXT PAUSE 20
FOR counter = 800 TO 700 NEXT
PULSOUT 14, counter FOR counter = 800 TO 700 STEP 4
PAUSE 20 PULSOUT 14, counter
NEXT PAUSE 20
NEXT

E2. Considere que ha declarado una variable de nombre “pulses”:

FOR counter = 700 TO 800 STEP 4


FOR pulses = 1 TO 10
PULSOUT 14, counter
PAUSE 20
NEXT
NEXT
FOR counter = 800 TO 700 STEP 4
Controlando el Movimiento · Página 137

FOR pulses = 1 TO 10
PULSOUT 14, counter
PAUSE 20
NEXT
NEXT

P1. Existen varias soluciones; aquí presentamos dos.

'¿Qué es un Microcontrolador - Ch04Prj01Soln1__KillSwitch.bs2


' Manda mensajes a BASIC Stamp para controlar el servo usando
' la Terminal Debug mientras no se presione el Interruptor Supresor.

' Contribucion del: Professor Clark J. Radcliffe, Departmento


' of Ingeniría Mecanica, Michigan State University

' {$STAMP BS2}


' {$PBASIC 2.5}

counter VAR Word


pulses VAR Word
duration VAR Word

DO

PAUSE 2000
IF (IN3 = 1) AND (IN4 = 0) THEN
DEBUG "Press Start switch to start machinery. ", CR ,CRSRUP
ELSEIF (IN3 = 0) AND (IN4 = 1) THEN
DEBUG CLS, "Meta el numero de pulsos:", CR
DEBUGIN DEC pulses

DEBUG "Meta la duración de PULSOUT:", CR


DEBUGIN DEC duration

DEBUG "Servo en ejecución...", CR

FOR counter = 1 TO pulses


PULSOUT 14, duration
PAUSE 20
NEXT

DEBUG "DONE"
PAUSE 2000

ENDIF

LOOP

Abajo presentamos una versión que incluso puede detectar un botón presionado y
que manda señales al servo. Esto es importante en maquinaria que se necesitan
Página 138 · ¿Qué es un Microcontrolador?

DETENER INMEDIATAMENTE cuando se presiona el Interruptor Supresor. El


programa usa la técnica de “espera” que estudiamos en el Juego de Reacción de
Tiempo en la capítulo 3, Actividad #5, en tres lugares diferentes del programa.
Usted puede verificar que el programa se detiene mandando una señal de contro al
servo observando la señal del indicador LED conectado al pin P14.

' ¿Que es un Microcontrolador? - Ch04Prj01Soln2__KillSwitch.bs2


' Manda mensajes a BASIC Stamp para controlar el servo usando
' la Terminal Debug mientras no se presione el Interruptor Supresor
' {$STAMP BS2}
' {$PBASIC 2.5}

counter VAR Word


pulses VAR Word
duration VAR Word

PAUSE 1000

DEBUG "Presione el Interruptor de Inicio P4)para arrancar maquinaria."


DEBUG CR

DO:LOOP UNTIL IN4 = 1


DEBUG "Presione el Interruptor Supresor (P3) para detener maquinaria."
DEBUG CR

DEBUG CR, CR, "Tiempo de Ejecución del Servo:", CR,


" ~44 pulsos en 1 segundo", CR,
"Posición del Servo:", CR,
" 350 <= PULSOUT Duration <= 1150", CR, CR

DO

IF IN3 = 1 THEN
DEBUG "Presione el Interruptor de Inicio (P4) .", CR
DO:LOOP UNTIL IN4 = 1
DEBUG "Presione el Interruptor Supresor (P3) para detener "
DEBUG "maquinaria.", CR
ENDIF
DEBUG "Meta el tiempo de Ejecucion como", CR,
"numero de pulsos: "
DEBUGIN DEC pulses

DEBUG "Meta la posición como", CR,


"Duración del PULSOUT : "
DEBUGIN DEC duration

duration = duration MIN 350 MAX 1150

DEBUG "Servo se está ejecutando...", CR

FOR counter = 1 TO pulses


Controlando el Movimiento · Página 139

PULSOUT 14, duration


PAUSE 20
IF IN3 = 1 THEN
DEBUG "Presione el Interruptor de Inicio (P4) para arrancar "
DEBUG " maquinaria.", CR
DO:LOOP UNTIL IN4 = 1
DEBUG "Presione el Interruptor Supresor (P3) para detener "
DEBUG " maquinaria.", CR
ENDIF
NEXT

DEBUG "HECHO", CR, CR


PAUSE 1000

LOOP
Página 140 · ¿Qué es un Microcontrolador?
Midiendo Rotación · Página 141

Capítulo 5: Midiendo Rotación


AJUSTANDO PERILLAS Y MONITOREANDO MÁQUINAS
Muchos dueños de casa tienen perillas para controlar las luces de un cuarto. Gire la
perilla en una dirección y las luces brillan más, gire la perilla en la dirección inversa y las
luces se atenuan. Los trenes usan perillas para controlar la velocidad y dirección del
motor. Muchas máquinas tienes perillas o cranks que se usan para afinar la posición de
navajas y superficies guias.

Las perillas también se encuentran en los equipos de audio, y se usan para ajustar el
volumen de los sonidos. La Figura 5-1 muestra un ejemplo simple de un interruptor y una
perilla que se gira para para ajustar el volumen de la bocina. Al girar la perilla, un circuito
dentro de la bocina cambia, y el volumen de la música de la bocina cambia. Circuitos
similares se pueden encontrar dentro de los joysticks, e incluso dentro del servo usado en
el Capítulo 4: Controlando el Movimiento.

Figura 5-1
Ajuste de Volumen de
una Bocina.

EL RESISTOR VARIABLE ATRÁS DE LA PERILLA - EL


POTENCIOMETRO
El dispositivo dentro de muchos sistemas de sonido, perillas, joysticks y servos se llama
“potenciometro” y se abrevia frecuentemente “pot” La Figura 5-2 muestra la imagen de
algunos potenciometros comunes. Observe que todos ellos tienen tres pines:
Página 142 · ¿Qué es un Microcontrolador?

Figura 5-2
Ejemplo de
Potenciometros.

La Figura 5-3 muestra el símbolo esquemático y dibujo de un potenciometro que usted


usará en este capítulo. Las terminales A y B están conectadas a un elemento resistivo d e
10 K Ω. A la terminal W se le llama Terminal Central y se conecta a un alambre que toca
el elemento resistivo desde cero hasta el valor total.

Figura 5-3
Símbolo esquemático y dibujo de un
Potenciometro.

La Figura 5-4 muestra como trabaja la terminal central. Conforme usted gira la perilla
superior del potenciometro la terminal central hace contacto con el elemento resistivo en
diferentes lugares. Conforme gira la perilla en sentido de las manecillas del reloj, la
terminal central se acerca a la terminal A, y cuando usted gira la perilla en sentido inverso
a las manecillas del reloj, la terminal central se acerca a la terminal B.

Figura 5-4
Ajustando la terminal central del
potenciometro.
Midiendo Rotación · Página 143

ACTIVIDAD #1: MIDIENDO Y VERIFICANDO EL CIRCUITO


POTENCIOMETRO
Al colocar resistores de diferente valor en serie con un LED se tienen diferentes
cantidades de corriente fluyendo a través del circuito. Resistores con valores grandes en
el circuito LED provocan pequeñas cantidades de corriente que fluyen a través del
circuito y el Led se ilumina con poco brillo. Resistores con valores pequeños en el
circuito LED provocan mas corriente que fluyen a través del circuito y el Led se ilumina
con más brillo. Al conectar las terminales W y A del potenciometro en serie con un LED,
usted puede usarlo para ajustar la resistencia del circuito. Esto a su vez ajustra el brillo
del LED. En esta actividad usted usará el potenciometro como resistor variable y lo usará
para cambiar el brillo del LED.

Partes del Circuito Potenciometro


Un potenciometro de 10 K Ω
Un resistor de 220 Ω (rojo-rojo-café)
Un LED rojo
Un alambre para puente

Construyendo el Circuito de Prueba del Potenciometro.


La Figura 5-5 muestra el circuito que usará para ajustar el brillo del LED con un
potenciometro

9 Construya el circuito que muestra la Figura 5-5..

Sugerencia; Si usted tiene problemas al colocar el potenciometro en los conectores de la


Tablilla, observe sus terminales. Si cada una tiene un pequeño doblez, use unas pinzas de
punta para enderezarlas y luego vuelva a meterlas en la Tablilla. Cuando las terminales del
potenciometro estan derechas pueden mantener mejor contacto con los conectores de la
Tablilla.
Página 144 · ¿Qué es un Microcontrolador?

Figura 5-5
Circuito de Prueba
Potenciometro-LED

Verificando el Circuito del Potenciometro


9 Gire el potenciometro en sentido de las manecillas del reloj hasta que llegue a su
límite mecánico como lo muestra la Figura 5-6(a)

Presione un poco el potenciometro contra la Tablilla mientra gira la perilla. Para estas
actividades el potenciometro necesita estár firmemente colocado en los conectores de la
Tablilla. Si no tiene precaución cuando gira la perilla el potenciometro se puede
desconectar de los conectores de la tablilla y esto generará mediciones incorrectas.
Entonces, aplique un poco de presión hacia abajo mientras gira la perilla del potenciometro
para que este firmemente colocado en la Tablilla.
Trátelo con cuidado. Si su potenciometro no gira totalmente, no trate de forzarlo. Solo
girelo hasta que alcance su límite mecanico, sino lo hacer se podría romper.

9 Gradualmente gire el potenciometro en sentido inverso de las manecillas del


reloj a las posiciones que muestras las Figura 5-6 (b), (c), (d), (e) y (f)
observando cuanto brilla el LED en cada posición.
Midiendo Rotación · Página 145

Figura 5-6
Perilla del
Potenciometro.
(a) (c) (e)
Desde (a) hasta (f) se
muestra la terminal
(b) (d) (f) deslizante del
potenciometro ajustada a
diferentes posiciones.

Funcionamiento del Circuito del Potenciometro


La resistencia total de su circuito de prueba es 220 Ω más la resistencia de las terminales
Ay W del potenciometro. La resistencia entre las terminales A y W aumenta conforme se
ajusta la perilla en el sentido de las manecillas del reloj, y este ajuste a su vez reduce la
corriente a través del LED haciendo que se atenue.

ACTIVIDAD #2: MIDIENDO LA RESISTENCIA AL MEDIR EL TIEMPO


Esta actividad introduce una nueva parte llamada capacitor . Un capacitor se comporta
como una bateria recargable que solamente retiene su carga para duraciones cortas de
tiempo. Esta actividad también introduce “La Constante de Tiempo” RC, que es una
abreviatura de tiempo resistor-capacitor. La constante de tiempo es una medida cuanto
tiempo le toma a un capacitor perder cierta cantidad de su carga almacenada cuando le
proporciona corriente al resistor. Midiendo la constante de tiempo que le toma al
capacitor para descargarse con diferentes valores de resistores y capacitores usted se
familiarizará más con la constante de tiempo RC. En esta actividad, usted programará el
BASIC Stamp para que cargue un capacitor y luego mida el tiempo que le toma al
capacitor descargarse a través de un resistor.

Conociendo al Capacitor
La Figura 5-7 muestra el símbolo esquemático y el dibujo del tipo de capacitor usado en
esta actividad. El valor de la Capacitancia se mide en microfarads (μF) y su valor se
imprime tipicamente en el capacitor.

La forma cilindrica de este capacitor particular se llama “pequeña caja”. Este tipo
capacitor se llama “electrolitico” capacitor y se debe manejar con cuidado.

9 Lea el recuadro de PRECAUCIÓN EN LA SIGUENTE PÁGINA.


Página 146 · ¿Qué es un Microcontrolador?

Precaución: El capacitor tiene una terminal positiva (+) y una negativa (-). La terminal
negativa es la que está fija en el cuerpo del capacitor y esta cerca de una raya con un signo
negativo (-). Siempre asegurese que conecta las terminales como lo muestra el diagrama
del circuito. Si conecta este capacitor incorrectamente lo puede dañar. En algunos circuitos,
al conectar incorrectamente este tipo de capacitor y luego conectarle la alimentación hace
que se caliente e incluso explote.
Precaución: No aplique má voltaje a un capacitor electrolítico que el que tiene
especificado. El voltaje que soporta esta impreso en el cuerpo del capacitor.
Precaución: Se recomienda usar gogles cuando trabaje con este capacitor.

3300 µ
Figura 5-7
Símbolo esquemático y dibujo de un
3300 µF F capacitor de 3300 μF

Ponga mucha atención a las


+ - terminales y a la conexión de las
terminales Positiva y Negativa.

Resistores y partes del Circuito de Tiempo

Un Capacitor de 3300 μF
Un Capacitor de 1000 μF
Un Resistor de 220 Ω (rojo-rojo-café)
Un Resistor de 470 Ω (amarillo-violeta-cafe)
Un Resistor de 1 K Ω (café-negro-rojo)
Un Resistor de 2 K Ω (rojo-negro-rojo)
Un Resistor de 10 Ω (café-rojo-naranja)

Construyendo y Verificando el Circuito de Tiempo Resistor-Capacitor


La Figura 5-8 muestra el circuito esquemático, y la Figura 5-9 muestra el diagrama del
alambrad para esta actividad. Tomaremos mediciones de tiempo usando diferentes
valores del resistor en donde está colocado el resistor de nombre Ri.
Midiendo Rotación · Página 147

9 Lea cuidadosamente el siguiente recuadro de SEGURIDAD.

SEGURIDAD

Siempre observe la polaridad cuando conecte el capacitor de 3300 o 1000 μF.


Recuerde, la terminal negativa es la terminal que está conectada en el cuerpo del capacitor
y esta cercano a la raya con un signo negativo (-). Use la Figur 5-7 para indentificar las
terminales (+) y (-)

Su capacitor de 3300 μF trabajará correctamente en este experimento si se asegura que


las terminales positiva (+) y negativa (-) están conectadas exactamente como lo muestra la
Figura 5-8 y la Figura 5-9.

Nunca invierta las terminales de la fuente de alimentación en el capacitor de 3300 μF


o cualquier otro capacitor con polaridad. El voltaje en la terminal positiva (+) debe
siempre ser mayor que el voltaje en la terminal negativa (-). Vss es el voltaje menor (0 V) en
la Tablilla Board of Education y BASIC Stamp Homework Board. Al conectar la terminal
negativa del capacitor en VSS usted se asegura que siempre es correcta la polaridad en las
terminales del capacitor.
Nunca aplique voltaje al capacitor que exceda el voltaje impreso en el cuerpo del
capacitro.
Use gogles durante esta actividad.
Antes de construir o modificar su circito siempre desconecte la alimentación.
Mantenga alejados sus manos y cara del capacitorcuando conecte la alimentación.

9 Con la alimentación desconectada, construya el circuito mostrado empezando


con un resistor de 470 Ω colocandolo donde está marcado Ri.

P7 Figura 5-8
220 Ω Esquemático para
R1 = 470 Ω
3300 µF Ri R2 = 1 kΩ verificar la descarga del
R3 = 2 kΩ voltaje del circuito RC.
R4 = 10 kΩ
Se usarán cuatro
diferentes resistores en
donde está marcado Rin
Vss

Se usarán cuatro diferentes resistores en donde está marcado Rin. Primero, el


esquemático se construirá y verificará con Ri = 470 Ω, luego se usará Ri = 1 KΩ.
Página 148 · ¿Qué es un Microcontrolador?

R4 R3 R2 R1 Figura 5-9
F Diagrama de Alambrado
Vdd Vin Vss
- 0 0µ para ver el tiempo de
X3
33 descarga de un circuito

+
P15 de tiempo RC.
P14

+
P13
P12 Asegurese que el lado
P11
P10 negativo del capacitor lo
P9 conecta en su Tablilla de
P8
P7
la misma forma que lo
P6 muestra esta figura, cn la
P5 terminal negativa
P4
P3 conectada a Vss.
P2
P1
P0
X2

9 Asegurese que el lado negativo del capacitor lo conecta en su Tablilla de la


misma forma que lo muestra esta figura, cn la terminal negativa conectada a Vss.

Midiendo el circuito de tiempo RC con el BASIC Stamp


Aunque se puede usar un reloj para registrar que la carga del capacitor alcance cierto
nivel, el BASIC Stamp se puede programar para monitorear el circuito y darle usted
mediciones de tiempo más consistentes.

Programa Ejemplo: PolledRcTimer.bs2


9 Meta y ejecute el programa PolledRcTimer.bs2.
9 Observe como el BASIC Stamp carga el capacitor y luego mide el tiempo de
descarga.
9 Registre la Medición de Tiempo (el tiempo de descarga del capacitor) en la fila
del resistor de 470 Ω de la Tabla 5-1.
9 Desconecte la Alimentación de su Tablilla Board of Education o BASIC Stamp
Home Work.
9 Quite el resistor de 470 Ω del lugar marcado Ri de la Figura 5-8 y Figura 5-9 de
y reemplacelo por un resistor de 1 kilo ohm.
9 Reconecte la alimentación a su Tablilla.
9 Registe su siguiente Medicipon de Tiempo (para el resistor de 1 KΩ)
9 Repita estos pasos para cada valor de resistor de la Tabla 5-1
Midiendo Rotación · Página 149

Tabla 5-1: Resistencia RC-tiempo para C = 3300


μF
Resistencia (Ω) Tiempo Medido (s)
470
1k
2k
10 k

' ¿Que es un Microcontrolador? - PolledRcTimer.bs2


' Programa de Tiempo de descarga modificado para seguir voltaje de descarga de
RC.

' {$STAMP BS2}


' {$PBASIC 2.5}

timeCounter VAR Word


counter VAR Nib
PAUSE 1000

DEBUG CLS

HIGH 7
DEBUG "Capacitor en carga...", CR

FOR counter = 5 TO 0
PAUSE 1000
DEBUG DEC2 counter, CR, CRSRUP
NEXT

DEBUG CR, CR, "Ahora Mida el tiempo de Descarga!", CR, CR


INPUT 7

DO
PAUSE 100
timeCounter = timeCounter + 1

DEBUG ? IN7
DEBUG DEC5 timeCounter, CR, CRSRUP, CRSRUP

LOOP UNTIL IN7 = 0

DEBUG CR, CR, CR, "The RC decay time was ",


DEC timeCounter, CR,
"Decimas de segundo.", CR, CR
END
Página 150 · ¿Qué es un Microcontrolador?

Funcionamiento del programa PolledRcTimer.bs2


Se declaran dos variables. La variable “timeCounter” se utiliza para conocer cuanto
tiempo toma el capacitor en descargarse a través de Ri. La variable “counter” se usa para
un conteo descendente mientras el capacitor se esta cargando.
timeCounter VAR Word
counter VAR Nib

La instrucción DEBUG CLS limpia la Terminal Debug para que no se amontonen las
mediciones sucesivas. High 7 pone en alto P7 e inicia la carga del capacitor, y entonces
se muestra el mensaje “Capacitor Cargando”. Después de eso, el bucle FOR...NEXT hace
un conteo descendente mientras el capacitor se está cargando. Cuando el capacitor se
carga, se incrementa el voltaje a través de sus terminales desde 3.4 y 4.9 V (depende del
valor de Ri)
DEBUG CLS

HIGH 7
DEBUG "Capacitor Cargando...", CR

FOR counter = 5 TO 0
PAUSE 1000
DEBUG DEC2 counter, CR, CRSRUP
NEXT

Un mensaje muestra el inicio de la descarga.


DEBUG CR, “Ahora mide el tiempo de descarga!”, CR, CR

Para permitir que el capacitor se descargue a través del resistor Ri, el pin de E/S cambia
de HIGH a INPUT. Cuando está como “entrada” el pin E/S no afecta al circuito, pero
pueden sensar señales “high” o “low”. Tan pronto como el pin E/S libera el circuito, el
capacitor se descarga y circuila corriente a través del resistor. Cuando se ha descargado el
capacitor el voltaje a través de sus terminales se hace menor y menor (se descarga).
INPUT 7

En el capítulo anterior del botón push, usted usó el BASIC Stamp para detectar una señal
“high” o “low” usando las variables IN3 y IN4. En esa ocasión, la señal “high” era Vdd y
la señal “low” era Vss. Para el BASIC Stamp verdaderamente la señal “high” es cualquier
voltaje mayor de 1.4 V. Claro que también puede ser 5V. En forma semejante, la señal
“low” el cualquier voltaje entre 1.4 V y 0V.
Midiendo Rotación · Página 151

El bucle DO...LOOP verifica el pin P7 cada 100 ms hasta que el valor de IN7 cambia de
1 a 0, y esto indica que el voltaje de descarga del capacitor es 1.4 V.
DO

PAUSE 100
timeCounter = timeCounter + 1

DEBUG ? IN7
DEBUG DEC5 timeCounter, CR, CRSRUP, CRSRUP

LOOP UNTIL IN7 = 0

Se muestra el resultado y se termina el programa.


DEBUG CR, CR, CR, "El tiempo de descarga de RC fue ",

DEC timeCounter, CR,


"decimas de segundo.", CR, CR
END

Su turno – Un circuito más rápido


Usando un capacitor de aproximadamente 1/3 de 3300 μF, la medición del tiempo para
el valor de cada resistor que se uso en el circuito se reducirá por 1/3. Posteriormente en la
siguiente actividad usted usará un capacitor con 1/33 000 de capacidad ¡El BASIC Stamp
tomara para usted la medición de tiempo usando una instrucción llamada RCTIME.

9 Desconecta la alimentación de su Tablilla Board of Education o


HomeWorkBoard.
9 Reemplace el capacitor de 3300 μF por uno de 1000 μF.
9 Confirme que la polaridad de su capacitor es correcta. La terminal negativa se
conecta a Vss.
9 Reconecte la alimentación.
9 Repita los pasos del Programa Ejemplo: PolledRcTimer.bs2 y registre sus
mediciones de tiempo en la Tabla 5-2.
9 Compare sus mediciones de tiempo a la que anotó en la Tabla 5-1.
9 ¿Qué tan cercanas están a 1/3 del valor de las mediciones tomadas con el
capacitor de 3300 μF?
Página 152 · ¿Qué es un Microcontrolador?

Tabla 5-2: Resistencia y tiempo RC-, C = 1000 μF


Resistencia (Ω) Tiempo medido (s)
470
1k
2k
10 k

ACTIVIDAD #3: LEYENDO LA PERILLA CON EL BASIC STAMP


En la actividad #1, se usó un potenciometro como resistor variable. La resistencia en el
circuito varía dependiendo de la posición de la perilla de ajuste. En la actividad #2 se usó
un circuito de tiempo RC para medir diferentes resistencias. En esta actividad, usted
construirá un circuito de tiempo RC para leer el potenciometro y usar el BASIC Stamp
para tomar las mediciones de tiempo. El capacitor que usará será muy pequeño y las
mediciones de tiempo estarán en el rango de microsegundo. Incluso, aunque las
mediciones son de duraciones muy cortas de tiempo, el BASIC Stamp le dará una
excelente indicación de la resistencia entre las terminales A y W que a su vez indican la
posición de la perilla.

Partes para leer el circuito de tiempo RC con el BASIC Stamp


Un Potenciometro de 10 KΩ
Un Resistor de 220 Ω (rojo-rojo-café)
Cuatro alambres para puentes
Un Capacitor de 0.1 μF
Un Capacitor de 0.01 μf
Dos puentes

Estos capacitores no tienen. Terminals + ni -. No tienen polaridad.. Pueden conectar


estos capacitores sin preocuparse de las terminales positiva y negativa.

Figura 5-10
104 Capacitores de
103 Cerámica
0.1 µF 0.01 µF
Esquemático y dibujo
del capacitor de 0.1μF
(izquierda) y el de 0.01
μF (derecha)
Midiendo Rotación · Página 153

Contruyendo el circuito de Tiempo RC para el BASIC Stamp


La Figura 5-11 muestra el diagrama esquemático y alambrado para el circuito RC de
tiempo rápido. Este es el circuito que usted usará para monitorear la posición de la perilla
del potenciometro con ayuda del BASIC Stamp y un programa PBASIC.

Figura 5-11
Diagrama esquemático
y alambrado del circuito
de Tiempo RC para el
BASIC Stamp con
potenciometro.

Programando las Mediciones de Tiempo de RC


El programa ejemplo en la actividad #2, midió el tiempo de descarga verificando IN7 = 0
cada 100 ms, y lo mantuvo varias veces para verificarlo. Cuando IN7 cambió de 1 a 0,
esto indicó que el voltaje del capacitor se descargo a 1.4 V. Cuando se ejecutó el
programa el resultado se almacenó en la variable timeCounter como un número de
décimas de segundo que le tomo al capacitor descargarse hasta 1.4 V.

Este siguiente Programa Ejemplo usa una instrucción PBASIC llamada RCTIME que
hace que el BASIC Stamp mida la descarga RC en terminos de unidades de 2 us.
Entonces, en lugar de décimas de segundo, el resultado “RCTIME 7, 1” almacena en la
variable “time” el número de 2 millonesimas de unidades de segundo que le toma al
voltaje del capacitor descargarse debajo de 1.4 V. Como la instrucción RCTIME tiene
Página 154 · ¿Qué es un Microcontrolador?

unidas muy finas de medición, usted puede reducir el tamaño del capacitor desde 3300
μF hasta 0.1 e iincluso a 0.01 μF, y todovía obtener mediciones de tiempo que indican el
valor del resistor. Como la resistencias entre las terminales del potenciometro cambina
conforme gira la perilla, la medición RCTIME le dan a usted mediciones de tiempo que
corresponde a la posición de la perilla del potenciometro.

Programa Ejemplo: ReadPotWithRcTime.bs2


9 Meta y ejecute el programa ReadPotWithRcTime.bs2
9 Gire la perilla del potenciometro mientras observa el valor de la variable “time”
usando la Terminal Debug.

Recuerde aplicar un poco de presión para mantener el potenciometro bien fijo sobre la
tablilla cuando gira la perilla. Si su servo comienza a oscilar adelante y atrás
inesperadamente en lugar de mantener su posición de retención, puede ser que el
potenciometro no esté bien fijo.

' ¿Que es un Microcontrolador - ReadPotWithRcTime.bs2


' Lea el tiempo RC del potenciometro usando la instrucción RCTIME .

' {$STAMP BS2}


' {$PBASIC 2.5}

time VAR Word

PAUSE 1000

DO

HIGH 7
PAUSE 100
RCTIME 7, 1, time
DEBUG HOME, "tiempo = ", DEC5 time
LOOP

Su Turno – Cambiando el Tiempo al Cambiar el Capacitor


9 Reemplace el capacitor de 0.1μF por uno de 0.01μF
9 Mantenga las mismas posiciones del Potenciometro como lo hizo en la actividad
principal y compare los valores mostrados por la Terminal Debug con los valores
obtenidos con el capacitor de 0.1μF.¿Son las mediciones RCTIME cerca de un
décimo del valor para una posición dada del potenciometro.
9 Regrese el capacitor de 0.1μF.
Midiendo Rotación · Página 155

9 Con el capacitor de 0.1μF y el de 0.01 quitado gire la perilla del potenciometro a


su límite en ambas direcciones y anote los valores más alto y más bajo para la
siguiente acitividad. El más alto______ El más bajo_______ .

Funcionamiento del Programa ReadPotWithRcTime.bs2


La Figura 5-12 como interactuan las intrucciones HIGH, PAUSE y RCTIME del
programa ReadPotWithRcTime.bs2 con el circuito de la Figura 5-11.

Figura 5-12 Voltajes en P7 con HIGH, PAUSE y RCTIME

En la izquierda la instrucción HIGH 7 hace que el BASIC Stamp internamente conecte el


pin E/S P7 a los 5 V (Vdd). La corriente circula desde la fuente a través del resistor del
potenciometro y también carga al capacitor. Conforme el capacitor se aproxima a su
carga final (casi 5 V) menor es la corriente que fluye por él. La instrucción PAUSE 100
se usa primordialmente para que la Terminal Debug muestre actualizaciones cerca de 10
veces por segundo; PAUSE 1 es suficiente para cargar el capacitor. En la derecha la
instrucción RCTIME 7,1, time cambia la dirección del pin E/S de salida a entrada y
comienza el tiempo de conteo en incrementos de 2 us. Como entrada, el pin E/S ya no
alimenta al circuito con 5 V. De hecho, como entrada, es casi invisible al circuito RC.
Entontes, el capacitor empieza a perder su carga a través del potenciometro. Conforme el
Página 156 · ¿Qué es un Microcontrolador?

capacitor piede su carga, su voltaje se descarga. La instrucción RCTIME mantiene el


tiempo de conteo hasta que P7 sensa una señal “low” esto significa que el voltaje a través
del capacitor se ha descargado a 1.4 V, y en este punto almacena la medición en la
variable “time”.

La Figura 5-12 también muestra una gráfica del voltaje en la terminales del capacitor
durante las instrucciones HIGH, PAUSE y RCTIME. En respuesta a la instrucción HIGH
7 que conecta el circuito a 5 V, el capacitor se carga rapidamente.

Entonces mantiene su nivel a su voltaje final durante la ejecución de la instrucción


PAUSE 100. Cuando el programa llega a la instrucción RCTIME 7,1, time, cambia la
dirección del pin E/S a entrada, entonces el capacitor empieza a descargase a travesl de
potenciometro. Conforme el capacitor se descarga, el voltaje en P7 disminuye. Cuando el
voltaje disminuye hasta 1.4 V (en este ejemplo en la marca de 150 us), la instrucción
RCTIME deja de contar el tiempo y almacena el resultado de la medición en la variable
“time”. Como la instrucción RCTIME cuenta el tiempo en unidades de 2 us, para 150 us
el número que se almacen en la variable “time” es 75.

Umbral Lógico del pin E/S: 1.4 V es el umbral lógico del pin E/S en el BASIC Stamp.
Cuando el pin E/S se direcciona como entrada, almacena un 1 en su registro de entrada si
el voltaje aplicado es superior a1.4 V, o almacena un 0 si el voltaje de entrada es menor a
1-4 V. El primer botón push del capítulo 3 Activida #2 aplicaba 5 V o 0 V. Como 5 V está
arriba de 1.4 V, IN3 almacenó un 1 y como 0 V está debajo de 1.4 IN3 almacenó un 0.

Argumento “State” de RCTIME. En el programa ReadPotWithRcTime.bs2, el voltaje a


través del capacitor disminuye desde casi 5 V, y cuando alcanza 1.4 V, el valor en el
registro IN7 cambia de 1 a 0. En este momento, la instrucción RCTIME almacena la
medición en “Duration” que es la variable “time” en el programa ejemplo. El argumento
“State” de la instrucción RCTIME es 1 in RCTIME 7, 1, “time”, que le indica a la instrucción
RCTIME que el registro IN7 almacenará un 1 cuando inicie la medición. La instrucción
RCTIME mide cuanto tiempo le toma al registro IN7 cambiar al estado opuesto, y esto
sucede cuando el voltaje disminuye debajo del voltaje umbral a 1.4 V del pin de E/S.
Para mayor información. Vea la instrucción RCTIME en el manual BASIC Stamp Manual o
en la ayuda de BASIC Stamp Editor’s Help.

La figura 5-13 muestra la forma en que cambia la descarga con la resistencia del
potenciometro para el circuito de la Figura 5-11. Cada posición de la perilla del
potenciometro determina una cierta resistencia. Girandolo en una dirección la resistencia
aumenta y en la otra dirección la resistencia disminuye. Cuando la resistencia es mayor el
tiempo de descarga es más largo, y la instrucción RCTIME almacena un valor mayor en
la variable “time”. La instrucción DEBUG del programa ReadPotWithRcTime.bs2
muestra esta medición de tiempo en la Terminal Debug, y como el tiempo de descarga
Midiendo Rotación · Página 157

cambia con la resistencia del potenciometro, el número en la Terminal Debug indica la


posición de la perilla.

Figura 5-13
Forma en que la Resistencia
del Potenciometro afecta el
Tiempo de Descarga

¿Por qué el capacitor se carga a un menor voltaje cuando el potenciometro tiene


menos resistencia?
De una mirada en le esquemático de la esquina superior izquierda de la Figura 5-12. Sin el
resistor de 220 Ω, el pin de E/S debe ser capaz de cargar el capacitor a 5 V, pero el resistor
de 220 Ω es necesario para prevenir un posible daño al pin E/S de un transitorio de
corriente cuando empieza a cargar el capacitor. También previee que el potenciometro se
dañe al drenar mucha corriente cuando se gira a 0 Ω mientras el pin E/S está mandando
una señal “high” de 5 V.
Cuando se le aplican 5 V a las terminarles del resistor de 220 Ω en serie con el
potenciometro, el voltaje entre ellos tiende a se una fracción de 5 V. Cuando dos resistores
conduciendo corriente se conectan en serie, que generan un voltaje intermedio, al circuito
se le llama Divisor de Voltaje. Entonces el resistor de 220 Ω y el potenciometro forman un
circuito divisor de voltaje, y para cualquier resistencia del potenciometro (Rpot) , usted
puede usar esta ecuación para calcular el voltaje en el potenciometro (Vpot):
Vpot = (5 V x Rpot) /(Rpot + 220 Ω)
El valor de Vpot define el valor superior del voltaje en el capacitor. En otras palabras,
Cualquiera que sea el voltaje en el potenciometro será si el capacitor no está conectado,
esto es el voltaje al que el capacitor puede cargarse pero no mayor a este voltaje. El rango
de la mayoria de las perillas del potenciometro los valores de la resistencia son en kΩ y
cuando usted calcula Vpot para valores de Rpot en KΩ, los resultados son bastante
cercanos a 5 V. El resistor de 220 Ω no influye en el Vpor de cargarse arriba de 1.4 V hasta
que el valor del potenciometro disminuye a 85.6 Ω,este valor es menor al 1% del rango del
movimiento del potenciometro. Este 1% resultaría de todas formas para las mediciones más
pequeñas, entonces es dificil decir que mediciones de 1% en este rango están fuera de los
ordinario. Incluso con el resistor adicional de 220 Ω contruido en su Tablilla BASIC Stamp
las conexiones en el pin E/S solo se afectan cuando el rango del potenciometro llega a
1.7%, y este valor no es importante.
Entonces el resistor de 220 Ω protege el pin E/S con un impacto pequeño en la medición de
descarga de RC para decirle cuanto se ha desviado la posición de la perilla del
potenciometro.
Página 158 · ¿Qué es un Microcontrolador?

ACTIVIDAD #4: CONTROLANDO UN SERVO CON UN POTENCIOMETRO


Los joysticks como en de la Figura 5-14 se encuentran comunmente en controladores de
video juegos. Cada joystick tiene tipicamente dos potenciometros que permiten que la
electrónica interna en el controlador del juego reporta la posición del joystick a la consola
de video juego. Un potenciometro gira el movimiento horizotal del joystick (izquierda a
derecha), y el otro gira el movimiento vertical del joystic (adelante/atrás)

Horizontal
potentiometer Figura 5-14
Potenciometros dentro
del Módulo Joystick de
Parallax.

Vertical
potentiometer

Otra aplicación de joystick que usa potenciometros es el controlador de radio RC y el


aeroplano en la Figura 4-1. El controlador tiene dos joysticks y cada uno tiene dos
potenciometros. Cada posición del potenciometro es responsable de controlar un servo
diferente del RC del avión.

En esta actividad, usted usará un potenciometro similar a los del joystick que controla la
posición del servo. Cuando usted gira la perilla del potenciometro, la estrella del servo
reproducirá este movimiento. Esta actividad utilizad dos circuitos, el circuito del
potenciometro de la Actividad # 3 de este capítulo, y el circuito servo del capítulo 4,
actividad # 1. El programa PBASIC desarrollado en este capítulo mide repetidamente la
posición del potenciometro con una instrucción RCTIME, y luego usa la medición y algo
de matemáticas para controlar el posición del servo con una instrucción PULSOUT.

El BASIC Stamp puede medir la posición del joystick. Como hay dos potenciometros en
cada joystick, cada uno de ellos puede reemplazar el potenciometro único de los circuitos
de la Figura 5-11. Entonces una instrucción RCTIME puede medir el potenciometro vertical
y el otro puede medir el potenciometro horizontal.
Midiendo Rotación · Página 159

Partes del Potenciometro Controlando el Servo


Potenciometro de 10 K Ω
Un Resistor de 220 Ω (rojo-rojo-cafe)
Un Resistor de 470 Ω (amarillo-violeta-cafe)
Un Capacitor de 0.1 μF
Un Servo Normalizado de Parallax
Un LED de cualquier color
Dos alambres para puentes

Los usuarios de la Tablilla HomeWork Board también necesitarán:

Un conector de 3 terminales hembra-hembra


Cuatro alambres para puentes

Construyendo el Circuito de Perilla y Servo


Esta actividad usará dos circuitos que usted ya ha construido individualmente: el circuito
del potenciometro de la actividad que acaba de terminar y el circuito servo del capítulo
anterior.

9 Quite del área de su tablilla el potenciometro del circuito RC de la actividad # 3.


Si necesita reconstruirlo, use la Figura 5-11. Asegurese que usa el capacitor de
0.1 μF y no el capacitor de 0.01 μF.
9 Agregue al proyecto el circuito servo del capítulo 4, actividad 1. Recuerde que su
circuito servo será diferente dependiendo de la Tablilla que use. Abajo están las
páginas para esta sección que necesita buscar en:
o Vaya a la Página 96 si usa la Tablilla Board of Education
o Vaya a la Página 99 si usa la Tablilla BASIC Stamp HomeWork

Programando Potenciometro Controlando el Servo


Usted necesitará los valores más pequeño y más grande de la variable tiempo que guardó
de su circuito RC de tiempo cuando usó un capacitor de 0.1 μF

9 Si no ha completado la sección Su Turno de la actividad anterior, regresese y


completela ahora.

Para este siguiente ejemplo, estos son los valores de tiempo que midieron los técnicos de
Parallax, sus valores son quizá ligeramente diferentes.
Página 160 · ¿Qué es un Microcontrolador?

• En el límite en sentido de la manecillas del reloj 1


• En el límite en sentido contrario de la manecillas del reloj 691

¿Entonces, como pueden ajustarse estos valores de entrad para que cubran el rango de
500 –1000 para controlar el servo con la instrucción PULSOUT? La respuesta es usando
multiplicaciones y sumas. Primero, multiplique los valores de entrada por algo para hacer
la diferencia de entre los valores en el sentido de las manecillas del reloj (mínimo) y en
sentido inverso de las manecillas del reloj (máximo) 500 en lugar de casi 700. En
seguida, agregue un valor constante al resultado para que el rango de 500 a 1000 en lugar
de 1 a 500. En electrónica a estas operaciones se les llama “Escalamiento” y “ajuste.” Así
es como trabaja la matemática para la multiplicación (escalamiento).

500
time(maximum) = 691 × = 691× 0.724 = 500
691
500
time(minimum) = 1 × = 0.724
691

Despues de haber escalado los valores, así se hace el paso de suma (offset)

time(maximum) = 500 + 500 = 1000


time(minimum) = 0.724 + 500 = 500

El operador */ se introdujo en la página 84 y es parte del PBASIC para escalamiento por


valores fraccionales, como 0.724. Estos son nuevamente los pasos para usar */ aplicado a
0.74:

1. Coloque el valor o variable que usted desea multiplicar por un valor fraccional
antes del operador */

tiempo = tiempo */

2. Tome el valor fraccional que usted desea usar y mutipliquelo por 256

nuevo valor fraccional = 0.724x256 = 185.344

3. Quite los decimales del número

nuevo valor fraccional = 185


Midiendo Rotación · Página 161

4. Coloque el valor despues del operador */

tiempo = tiempo */ 185

Estos son los pasos del “escalamiento” ahora todo lo que necesitamos es agregar el offset
de 500. Esto puede hacerse con una segunda instrucción que suma 500 a “tiempo”:

tiempo = tiempo */ 185


tiempo = tiempo + 500

Ahora, “tiempo” esta listo para reciclarce con el argumento “Duration” de la intrucción
PULSOUT

time = time */ ‘Escalamiento por 0.724.


time = time + 500 ‘Se aplica un offset de 500.
PULSOUT 14, time ‘Manda el pulso al servo.

Programa Ejemplo: ControlServoWithPot.bs2


9 Meta y ejecute este programa, luege gire la perilla del potenciometro y asegurese
que a iguales movimientos del servo, corresponden al potenciometro.

' ¿Que es un Microcontrolador - ControlServoWithPot.bs2


' Lee el potentiometro del circuito de tiempo RC usando la instrucción RCTIME.
' Escale time por 0.724 y offset por 500 para el servo.

' {$STAMP BS2}


' {$PBASIC 2.5}

PAUSE 1000
DEBUG "Programa ejecutandose!"
time VAR Word
Página 162 · ¿Qué es un Microcontrolador?

DO

HIGH 7
PAUSE 10
RCTIME 7, 1, time
time = time */ 185 ' Escalamiento por 0.724 (X 256 for */).
time = time + 500 ' Se aplica un Offset de 500.
PULSOUT 14, time ' Manda pulsos al servo.

LOOP

Su Turno – Escalamiento de la Relación Servo-Perilla.


Su potenciometro y capacitor probablemente le darán valores de tiempo que son
diferentes de los que analizamos en esta actividad. Estos son valores que reunió en la
sección Su Turno de la actividad anterior.

9 Repita la matemática analizada en la sección Programando Potenciometro


Controlando el Servo de la página 159 usando los valores máximos y minimos.
9 Sustituya sus valores de Escalamiento y Offset en el programa
ControServoWithPot.bs2.
9 Comente el DEBUG ”Programa en Ejecución!” que tiene un apostrofe al
principio de la línea.
9 Agregue esta línea de código entre las instrucciones PULSOUT y LOOP para
que usted pueda ver sus resultados:

DEBUG HOME, DEC5 time ‘Muestra en ajuste de valor de tiempo

9 Ejecute el programa modificado y verifique su trabajo. Debido a que se


redondearon los valores, los límites puede que no sean exactamente 500 y 1000,
pero deben ser muy cercanos.

Declarando Constantes y Pin con Directivas


En programas grandes, usted puede terminar usando el valor del factor de escalamiento
(que fue 185) y el de offset (que fue 500) muchas veces en el programa. Números como
185 y 500 en su programa se llaman “constantes” porque a diferencia de las variables su
valores no cambian mientras se ejecuta el programa. En otras palabras, el valor
permanece “constante”. Usted puede crear nombres para estas constantes con directivas
“CON”.
Factor de escalamiento CON 185
Ofsset CON 500
delay CON 10
Midiendo Rotación · Página 163

Estas directivas “CON” siempre se declaran cerca del comienzo del programa, para
que sean fáciles de encontrar.

Una vez que sus valores constantes se le han dado nombres con las directivas “CON”,
usted puede usar en su progrma “ScaleFactor” en lugar de 185 y “Offset” en lugar de 500.
Por ejemplo:
time = time */ scale Factor ‘ Escalaminento de 0.724
time = time + offset ‘Offset de 500

Con los valores que asignamos a las constantes con las directivas “CON” las
instrucciones verdaderamente son:
time = time */ 185 ‘ Escalaminento de 0.724
time = time + 500 ‘Offset de 500

Una ventaja importante al usar constantes es que usted puede cambiar una directiva “con”
y esta se actualiza en cada instante del nombre de al constante en su programa. Por
ejemplo, si usted escribe un programa grande que usa la constante ScaleFactor en 1
diferentes lugares, un cambio para Scale Factor Con... y todos los momentos su programa
usara “ScaleFactor” que actualiza el valor para el siguiente prograda descargado.
Entonces, Si usted cambia ScaleFactor CON 500 por ScaleFactorCON510, cada
instrucción con ScaleFactor usará 510 en lugar de 500.

Usted tambien puede darle nombres a los pines E/S usando la directiva “PIN”. Por
ejemplo, usted puede declarar un directiva PIN para el pin E/S p/ de la siguiente manera:
RcPin PIN7

Hay dos lugares en el programa del ejemplo anterior donde se usa el número 7 para
referirse al pin E/S P7. El primero ahora puede escribirse como:
HIGH RcPin

El segundo puede escribirse como:


RCTIME RcPin, 1, time

Si posteriormete cambia su circuito para usar diferentes pines E/S, todo lo que tiene que
hacer es cambiar el valor de su directiva PIN y las dos instrucciones HIGH y RCTIME,
se actualizarán automáticamente.
Página 164 · ¿Qué es un Microcontrolador?

De igual forma, si usted tiene que recalibrar su factor de escalamiento o el offset, usted
solamente necesita cambiar las directivas “CON” al principio del programa.

La directiva del PIN tiene una característica adicional: El compilador PBASIC puede
detectar si el nombre del pin se usa como entrada o salida, y substituur al número del pin
E/S, o al bit del registro de la variable de entrada correspondiente. Por ejemplo, usted
podría declarar dos directivas pin, como LedPin PIN 14 y ButtonPin PIN3. Entonces su
código puede tener una frase como IF buttonPin = 1 THEN HIGH LedPin. El compilador
PBASIC convierto esto a IF IN3 = 1 THEN HIGH14.
El IF ButtonPin = 1 hizo una comparación, y el compilador PBASIC conoce que usted
está usando Button Pin como una entrada. Entonces, usa el bit del registro de entrada IN3
en lugar de número 3. De igual manera, el compilador PBASIC sabe que HIGH LedPin usa
el nombre pin LedPin como el valor constante 14 para una operación de salida, y este lo
sustituye por HIGH 14.

Programa Ejemplo: ControlServoWithPotUsingDirectives.bs2


Este programa funciona igual que el programa ControlServoWithPot.bs2 pero usa
nombre de constantes como pines de E/S.

9 Meta y ejecute el programa ControlServoWithPotUsingDirectives.bs2


9 Observe como el servo responde al potenciometro y verifique que se comporta
de la misma manera que el programa ControlServoWithPot.bs2.

' ¿Que es un Microcontrolador - ControlServoWithPotUsingDirectives.bs2


' Lee el otentiometro en el circuit RC-time usando la instrucción RCTIME .
' Le aplica un factor de escala y offset, luego manda el valor al servo.

' {$STAMP BS2}


' {$PBASIC 2.5}

rcPin PIN 7 ' Define pines E/S


servoPin PIN 14

scaleFactor CON 185 ' Declara Constantes


offset CON 500
delay CON 10

time VAR Word ' Declara Variable time

PAUSE 1000 ' Initializacion


Midiendo Rotación · Página 165

DO
' Routina Principal
HIGH rcPin ' Mide tiempo de descarga RC
PAUSE delay
RCTIME rcPin, 1, time
time = time */ scaleFactor ' Escala a scaleFactor.
time = time + offset ' time más Offset
PULSOUT servoPin, time ' Manda pulso al servo.
DEBUG HOME, DEC5 time ' Muestra el ajuste del valor tiempo
LOOP

Su Turno – Actualizando la Directiva de PIN


Como se mencionó anters, si usted conecta el circuito RC a un pin E/S diferente, usted
puede simplemente cambiar el valor de la directiva RcPin PIN, y este cambio
automáticamente se refleja en las instrucciones HIGH RcPin y RCTIME RcPin, 1, time.

9 Guarde el Programa Ejemplo con un nombre nuevo.


9 Cambie scaleFactor y offser a los valores únicos para su circuito RC que usted
determinado en la sección anterior Su Turno.
9 Ejecute el programa modificado y verifique que trabaja correctamente.
9 Modifique su circuito moviendo la conexión del circuito RC de pin E/S 7 al pin
de E/S 8.
9 Modifique la declaración rcPin que diga:

rcPin PIN 8

9 Ejecute nuevamente su programa y verifique que las instrucciones HIGH y


RCTIME todavía están funcionando correctamente con el pin diferene que acaba
de cambira con la directiva RcPin PIN.
Página 166 · ¿Qué es un Microcontrolador?

RESUMEN
Este capítulo introdujo el potenciometro, una parte frecuentemente encontrada debajo de
varios botones y perillas. El potenciometro tiene un elemento resistivo que tipicamente se
conecta al exterior con dos terminales y una terminal deslizable que hace contacto en un
punto variable sobre el elemento resistivo. El potenciometro se puede usar como un
resistor variable si la terminal deslizable y una de las terminales exteriores se usan en un
circuito.

En este capitulo tambien se introdujo el capacitor. Un capacitor se puede usar para


almacenar y liberar carga. La cantidad de carga que un capacitor puede almacenar se
relaciona con su valor, que se mide en farads, (F). El símbolo “μ” es una notación de
ingeniería de micro y significa una millonésima. El capacitor utilizado en las actividades
de este capítulo fue de 0.01 a 3300 μF.

Un resistor y un capacitor se pueden conectar junto en un circuito que necesita cierta


cantidad de tiempo para cargarse y descargarse. A este circuito se le llama comunmente
circuito de tiempo RC. La R y C del circuito de tiempo RC se refieren al resistor y al
capacitor. Cuando un valor (C en las actividades de este capítulo) se mantiene constante,
el cambio en el tiempo que le toma para que el circuito se descargue se relaciona con el
valor de R. Cuando cambia el valor de R, el valor que el tiempo toma para que se cargue
y descarge tambien cambia. El tiempo total que le toma al circuito RC para descargarse
puede escalarse usando un capacitor de diferente tamaño.

Se uso el “polling” para monitorear el tiempo de descarga de un capacitor en un circuito


RC en donde el valor de C era muy grande. Se usaron diferentes resistores para mostrar
como cambia el tiempo de descarga cuando cambia el valor del resistor del circuito. Se
usó la instrucción RCTIME para monitorear un potenciometro (un resistor variable) en un
circuuito de tiempo RC con un capacitor más pequeño. Aunque estos capacitores hacen
que el tiempo de descarga tenga un rango de 2 a 1500 us (millonesimas de segundo), el
BASIC Stamp no tiene problemas para controlar estas mediciones de tiempo con la
instrucción RCTIME. El pin E/S debe fijarse en HIGH y entonces al capacitor del
circuito de tiempo RC se le permite descargarse usando PAUSE antes usar la instrucción
RCTIME.

La programación en PBASIC puede usarse para medir un sensor resistivo como un


potenciometro y escalar su valor para que sea de utilidad con otro dispositivo, por
ejemplo un servo. Esto incluye realizar operaciones matemáticas en el tiempo de descarga
de RC medido, que la instrucción RCTIME almacena en una variable. Esta variable
Midiendo Rotación · Página 167

puede ajustarse sumandole un valor constante que nos permite controlar el servo. En la
sección Proyectos, usted puede por si mismo encontrarlo usando multiplicaciones y
divisiones.

La directiva “CON” puede usarse al principio de un programa para sustituir el nombre de


un valor constante (un número). Después de darle nombre a una constante, el nombre
puede usarse en lugar del número en todo el programa. Todo da facilidad, especialmente
si usted necesita usar el mismo nombre en 2, 3, o incluso 100 diferentes lugares en el
programa. Usted puede cambiar el número en la directiva “CON”, y todos los 2, 3, o
incluso 100 diferentes ejemplos de ese número se actualizarán automáticamente la
siguiente vez que usted ejecute el programa. Las directivas “PIN” le permiten que usted
le asigne nombre a los pines de E/S. El nombre del pin de E/S es sensible en contexto, de
tal manera que el compilador PBASIC sustituye el número del pin E/S correspondiente
por el nombre del pin en instrucciones como HIGH, LOW y RCTIME. Si el nombre del
pin se usa en una frase condicional, este lo sustituye en lugar del registro de entrada
correspondiente como IN2, IN3, etc.

Preguntas
1. ¿Cuándo usted gira la perrilla o el botón de un sistema de sonido, que
componente principal está ajustando?
2. En un potenciometro típico, ¿es ajustable la resistencia entre las dos terminales
exteriores?
3. ¿Por qué se parece un capacitor a una bateria recargable?
4. ¿Qué puede usted hacer con un ciruito de tiempo RC para darle una indicación
del valor de un resistor variable?
5. ¿Cómo actua la directiva CON? De su explicación en términos de un nombre y
un número.

Ejercicio
1. Considere que tiene un capacitor de 0.5 μF en un circuito de tiempo RC, y desea
que la medición sea 10 veces mayor? Calcule el valor del nuevo capacitor

Proyectos
1. Agregue un LED bicolor a la actividad #4. Modifique el programa ejemplo para
que el LED bicolor sea rojo cuando gira el servo gira en sentido inverso de las
manecillas del reloj, y verde cuando el servo gira en sentido de la s manecillas
del reloj y no se ilumine cuando el servo mantenga su posición.
Página 168 · ¿Qué es un Microcontrolador?

2. Use la instrucción IF...THEN para moficar el primer programa ejemplo de la


actividad #4 de tal forma que el servo solamente gire entre valores de 650 a 800
de PULSOUT.

Soluciones
Q1. Un potenciometro
Q2. No. Está fija. La resistencia variable está entre cualquiera de las terminales
finales y la terminal central
Q3. Q3. Un capacitor es como una pila recargable porque puede cargarse para que
mantenga un voltaje. La diferencia es que solamente retiene la carga por una
pequeña cantidad de tiempo.
Q4. Usted puede medir el tiempo que le toma al capacitor descargarse (o cargarse).
Este tiempo se relaciona con la resistecia y la capacitancia. Si se conoce la
capacitancia y la resistencia es variable, entonces el tiempo de descarga da una
indicación de la resistencia.
Q5. La directiva “CON” sustituye un nombre por un número.

E1. El nuevo capacitor = (10 veces el valor del capacitor viejo) = (10x0.5μF) = 5
μF.

P1. Actividad #4 agregandole el LED Bicolor

P13
1
Esquemático del potenciometro de la Figura
5-11, el servo del capítulo 4 actividad #1, y el
LED bicolor de la Figura 2-19, muestra a P15
2 y P14 que se cambiaron a P13 Y P14.
P12
470 Ω

' ¿Que es un microcontrolador? - Ch5Prj01_ControlServoWithPot.bs2


' Lee el potentiometro en el circuito de tiempo RC usando la
' instrucción RCTIME.
' El tiempo var esta en el rango de 126 a 713, y se nececita un offset
' de 330.
' LED Bicolor en P12, P13 indica la direccion de la rotación del servo:
' verde para CW, rojo para CCW, apagado cuando el servo esta en
' posición de reten.

' {$STAMP BS2}


' {$PBASIC 2.5}
Midiendo Rotación · Página 169

PAUSE 1000
DEBUG "Programa en Ejecución!"

time VAR Word ' leyendo el tiempo del


potenciometro
prevTime VAR Word ' lectura previa

DO

prevTime = time ' Almacena la lectura del tiempo anterior


HIGH 7 ' Lee el pot usando RCTIME
PAUSE 10
RCTIME 7, 1, time
time = time + 350 ' Escala el pot, iguala el rango del servo

' al incrementarse, el pot giro CCW


IF ( time > prevTime + 2) THEN
HIGH 13 ' El Led Bicolor es rojo
LOW 12

' valor disminuye, el pot giro CW


ELSEIF ( time < prevTime - 2) THEN
LOW 13 ' LED Bicolor es verde
HIGH 12
ELSE ' El Servo mantiene su posicion
LOW 13 ' LED apagado
LOW 12
ENDIF

PULSOUT 14, time

LOOP

1. La clave es agregar bloques IF...THEN. abajo mostramos un ejemplo. CLREOL


es un útil carácter de control DEBUG que significa “limpiar al finalizar la línea.'

' ¿Que es un Microcontrolador - Ch5Prj02_ControlServoWithPot.bs2


' Lee el potentiometro en el circuito de tiempo RC usando la
instrucción RCTIME.
' Modificado con IF…THEN para que el servo sólo gire de 650 a 850.
' El tiempo variable varía desde 1 a 691, se necesita un offset mínimo
' de 649 .

' {$STAMP BS2}


' {$PBASIC 2.5}

PAUSE 1000
DEBUG "Programa en ejecución!"
time VAR Word

DO
Página 170 · ¿Qué es un Microcontrolador?

HIGH 7 ' Lee el pot con RCTIME


PAUSE 10

RCTIME 7, 1, time
time = time + 649 ' Escala tiempo al rango del servo
IF (time < 650) THEN ' Limita el rango de 650 a 850
time = 650
ENDIF
IF (time > 850) THEN
time = 850
ENDIF

PULSOUT 14, time


DEBUG HOME, "time = ", DEC4 time, CLREOL

LOOP
Indicadores Digitales · Página 171

Capítulo 6: Indicadores Digitales


EL INDICADOR DIGITAL DE TODOS LOS DIAS
La Figura 6-1 muestra un indicador en el frente de la puerta de un horno. Cuando el
horno no se usa, muestra la hora. Cuando se usa el horno, muestra el tiempo de
cocimiento, y parpadea al mismo tiempoque una alarma suena para indicarle que el
alimento está listo. Un microcontrolador dentro de la puerta del horno monitorea los
botones push y actualiza el indicador. Tambien monitorea un sensor interno del horno y
conmuta dispositivos que energizan y desenergizan el elemento de calentamiento.

Figura 6-1
Reloj Digital con
Indicador de 7
segmentos en la puerta
del horno.

Cada uno de los tres dígitos de la Figura 6-1 se llama indicador de 7 segmentos. En este
capítulo, usted programará el BASIC Stamp para mostrar números y letras en un
indicador de 7 segmentos.

¿QUÉ ES UN INDICADOR DE 7 SEGMENTOS?


Un Indicador de 7 segmentos es un bloque rectangular de 7 líneas de igual longitud que
puede iluminarse selectivamente con LEDs para mostrar digitos y algunas letras. La
Figura 6-2 muestra un dibujo de un indicador de 7 segmentos que usted usará en las
actividades de este capítulo. También tiene un punto que puede usarse como punto
decimal. Cada uno de los segmentos (desde A hasta G) y el punto contienen un LED
separado, que pueden controlarse individualmente. La mayoría de los pines tiene un
número junto con una etiqueta que corresponde a uno de los LEDs del segmento. El pin 5
tiene la etiqueta DP, que significa punto decimal. Los pines 3 y 8 tienen la etiqueta
“cátodo común” y estudiaremos su significado cuando veamos su diagrama.
Página 172 · ¿Qué es un Microcontrolador?

Common
Cathode

10 9 8 7 6
G F A B

A
F B Figura 6-2
G Indicador de 7 segmentos
E C
Dibujo y mapa de pines.
D

E D C DP

1 2 3 4 5
Common
Cathode

Mapa de pines La figura 6-2 es un ejemplo de un mapa de pines. Un mapa de pines


contiene información útil que le ayuda conectar una parte a otros circuitos. El mapa de
pines usualmente muestra un número para cada pin, un nombre para cada pin y una
referencia.
Mire la Figura 6-2. Cada pin está numerado, y el nombre para cada pin es la letra del
segmento cercano al pin. La referencia para esta parte es el punto decimal. Oriente la parte
de tal forma que el punto decimal esté abajo a la derecha. Entonces usted puede ver con el
mapa de pines que el Pin 1 está abajo a la izquierda, y el número de los pines se
incrementa en sentido inverso de las manecillas del reloj alrededor de la envolvente.

La Figura 6-3 muestra un esquemático del LED dentro del indicador LED de 7
segmentos. Cada ánodo del LED se conecta a un solo pin. Todos los cátodos se conectan
juntos por alambres dentro de la parte. Debido a que los cátodos comparten una conexión
común, al indicador LED de 7 segmentos se le llama de cátodo común. Se pueden
conectar los pines 3 o 8 de la parte a Vss, usted conectará todos los cátodos del LED a
Vss.
Indicadores Digitales · Página 173

1 4 6 7 9 10 5

E C B A F G DP
Figura 6-3
Esquemático de un
LED’s Indicador LED de 7
segmentos

3 8

ACTIVIDAD #1: CONSTRUYENDO Y VERIFICANDO EL INDICADOR LED


DE 7 SEGMENTOS
En esta actividad, usted manualmente construirá circuito para verificar cada segmento del
indicador.

Partes para la prueba del Indicador LED de 7 segmentos


Un indicador LED de 7 segmentos
5 Resistores de 1 KΩ (café-negro-rojo)
Un alambre para puente

Circuitos de Prueba para el indicador de 7 segmentos


9 Con la energía desconectada de su Tablilla Board of Education o HomeWork
Board, construya el circuito mostrado en la Figura 6-4 y 6-5.
9 Reconecte la alimentación y verifique que el segmeto A se ilumina.
9
¿Qué significa “x” debajo de “nc” en el esquemático? “nc” significa “no hay conexión” o
no conectado. Esto indica que el pin particular del indicador LED de 7 segmentos no está
conectado a ninguna parte. La “x” al final del pin también significa no conectado. Los
esquemáticos algunas veces usan “x” o “nc”.
Página 174 · ¿Qué es un Microcontrolador?

Vdd

1 kΩ

nc
X nc nc nc nc nc nc

X
1 4 6 7 9 10 5 Figura 6-4
Esquemático del circuito
E C B A F G DP de prueba para el
segmento A del
indicador LED
LED’s

3 8

X
nc
Vss
P0
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
P13
P14
P15
X2

X3
Vdd
Figura 6-5
Diagrama de alambrado
Vin del circuito de prueba
para el segmento “A”
del indicador LED.
Vss

9 Desconecte la alimentación y modifique el circuito para conectar el resistor a la


entrada “B” del LED como lo muestran la Figura 6-6 y 6-7.
Indicadores Digitales · Página 175

Vdd

1 kΩ

nc
X nc nc nc nc nc nc

X
1 4 6 7 9 10 5 Figura 6-6
Esquemático del circuito
E C B A F G DP de prueba para el
segmento B del
indicador LED
LED’s

3 8

X
nc
Vss
P0
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
P13
P14
P15
X2

X3
Vdd
Figura 6-7
Diagrama de alambrado
Vin
del circuito de prueba
para el segmento “B” del
indicador LED.
Vss

9 Reconecte la alimentación y verifique que se ilumina el segmento B.


9 Usando el mapa de pines de la Figura 6-2 como guía, repita estos pasos para los
segmentos C hasta G.
Página 176 · ¿Qué es un Microcontrolador?

Su Turno – El número 3 y la letra H


La Figura 6-8 y 6-9 muestran el dígito 3 alambrado en el indicador LED de 7 segmentos.

Vdd Vdd Vdd Vdd Vdd

1 kΩ (all)

nc nc nc
X

X
1 4 6 7 9 10 5
Figura 6-8
E C B A F G DP Alambrado del dígito
“3”

LED’s

3 8
X

nc
Vss
P0
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
P13
P14
P15
X2

X3
Vdd
Figura 6-9
Diagrama de
Vin

alambrado de la
Figura 6-8
Vss

9 Construya y verifique el circuito mostrado en la Figura 6-8 y Figura 6-9 y


verifique que mustra el número 3.
9 Dibuje un esquemático que mostrará el número 2 en el LED de 7 segmentos.
9 Contruya y verifique el circuito para asegurarse que funciona. Si tiene fallas
solucionelas.
Indicadores Digitales · Página 177

9 Determine el circuito necesario para la letra “H” y después construyalo y


verifiquelo.

ACTIVIDAD #2: CONTROLANDO EL INDICADOR LED DE 7 SEGMENTOS


En esta actividad usted conectará el LED de 7 segmentos a el BASIC Stamp y ejecutará
un programa simple para verificar y asegurarse que cada LED está conectado
correctamente.

Partes para el Indicador LED de 7 segmentos


Un indicador LED de 7 segmentos
8 Resistores de 1 KΩ (café-negro-rojo)
5 Alambres para puentes

Conectando el Indicador LED de 7 segmentos a el BASIC Stamp


La Figura 6-11 muestra el esquemático y la Figura 6-12 muestra el diagrama de
alambrado para este ejemplo de BASIC Stamp controlando un indicador LED de 7
segmentos.

Esquematico y mapa de pines. Si usted está tratando de construir el circuito del


esquemático de la Figura 6-11 sin ayuda de la Figura 6-12, asegúrese de consultar el mapa
de pines del indicador LED de 7 segmentos, mostrado para su conveniencia en la Figura 6-
10.

Common
Cathode

10 9 8 7 6
G F A B

A
F B
Figura 6-10
G Dibujo del Indicador LED de 7
E C segmentos y Mapa de pines
D

E D C DP

1 2 3 4 5
Common
Cathode
Página 178 · ¿Qué es un Microcontrolador?

1 kΩ
(All)
P15
P14
P13
P12
Figura 6-11
P11
Esquematico
P10 del BASIC
P9 Stamp
controlando
P8 un Indicador
E C DP G F A B
LED de 7
segmentos.
LED’s

common

Vss

Sea cuidadoso con los resistores conectados a P13 Y P14. Observe cuidadosamente a los
resistores conectados en P13 y P14 de la Figura 6-12. Hay una distancia entre estos dos
resistores. El espacio se muestra porque el pin 8 del indicador LED de 7 segmentos está
sin conectar. Un resistor conecta el pin E/S P13 con pin 9 del indicador LED de 7
segmentos. Otro resistor conecta a P14 con el pin 7 del indicador de 7 segmentos

DP
EDC GFAB
P0
P1
P2
P3
P4
P5
P6
P7
P8
P9
P10
P11
P12
P13
P14
P15

Figura 6-12
X2

X3

Diagrama de alambrado
para la Figrua 6-11.
Vdd

Use las letras de letras


de arriba de los
Vin

segmentos en este
diagrama como
Vss

referencia.
Indicadores Digitales · Página 179

Dispositivo Paralelo El indicador LED de 7 segmentos se llama dispositivo paralelo


porque el BASIC Stamp tiene que usar un grupo de líneas de E/S para mandar datos al
dispositivo (información high y low). En el caso de este indicador LED de 7 segmentos toma
8 pines de E/S para decirle al dispositivo lo que tiene que mostrar.
Bus Paralelo. Los alambres que transmiten las señales HIGH/LOW desde el BASIC Stamp
al indicador LED de 7 segmentos se llaman BUS PARALELO. Observe que estos alambres
se dibujan como líneas paralelas en la Figura 6-11. El termino “paralelo” hace referencia a
la geometría del esquemático.

Programando la Prueba del Indicador LED de 7 segmentos


Las instrucciones HIGH y LOW aceptarán una variable Pin como argumento. Para
verificar cada segmento, uno a la vez, simplemente coloque las instrucciones HIGH y
LOW en un bucle FOR...NEXT, y use el “indice” para fijar nuevamente los pines E/S en
HIGH y LOW.

9 Meta y ejecute el programa SegmentTestWithHighLow.bs2


9 Verifique que cada segmento en el indicador LED de 7 segmentos se ilumina
brevemente girando nuevamente en apagado y encendido.
9 Haga una lista de que segmento controla cada pin de E/S.

Programa Ejemplo: SegmentTestWithHighLow.bs2


' ¿Que es un Microcontrolador- SegmentTestWithHighLow.bs2
' Individualmente verifique cada segmento en un indicador LED de 7-Segment .

'{$STAMP BS2}
'{$PBASIC 2.5}

pinCounter VAR Nib

PAUSE 1000
DEBUG "Pin de E/S", CR,
"-------", CR

FOR pinCounter = 8 TO 15

DEBUG DEC2 pinCounter, CR


HIGH pinCounter
PAUSE 1000
LOW pinCounter

NEXT
Página 180 · ¿Qué es un Microcontrolador?

Su Turno – Un Patrón Diferente


Quitando la instrucción LOW pinCounter tendrá un efecto interesante.

9 Haga que la instrucción LOW pinCounter sea un comentario, agreguele un


apostrofe a su izquierda.
9 Ejecute el programa modificado y observe el efecto.

ACTIVIDAD #3: MOSTRANDO DIGITOS


Incluyendo el punto decimal hay 8 diferentes señales high/low que los pines de E/S del
BASIC Stamp manda al indicador LED de 7 segmentos. Esto es, ocho diferentes
instrucciones HIGH o LOW para mostrar un número. Si usted desea contar de cero a
nueve, requeriría una gran cantidad de programación. Afortunadamente hay variables
especiales que puede usted usar para fijar los valores high y low para los grupos de pines
de E/S.

En esta actividad, usará 8 números binarios en lugar de instrucciones HIGH y LOW para
controlar las señales high/low que manda el BasicStamp a los pines: Al fijar variables
especiales llamadas DIRH y OUTH iguales a los números binarios usted será capaz

De controlar las señales high/low mandadas a los pines E/S conectados al circuito del
indicador LED de 7 segmentos usando una sóla instrucción PBASIC.

8 bits aquello que tiene 8 dígitos se dice que tiene 8 bits. : A binary number Cada bit es un
lugar donde puede almacenar un 1 o un 0.
Un Byte es una variable que contiene 8 bits. Hay 256 diferentes combinaciones de ceros y
unos que usted puede usar para contar desde 0 a 255 con 8 bits. Esta es la razón por la
cual una variable Byte puede almacenar un número entre 0 y 255.

Partes y Circuito para Mostrar Digitos


Las mismas de la actividad anterior.

Programando PATRONES On/Off usando números binarios


En esta actividad, usted experimentará con las variables DIRH y OUTH. DIRH es una
variable que controla la dirección (entrad o salida) de los pines de E/S desde P8 hasta
P15. OUTH controla las señales high o low que cada unos de estos pines E/S manda.
Como usted pronto verá, OUTH es especialmente útil porque usted puede usarla para
mandar al mismo tiempo las señales high/low para 8 diferentes pines con solamente una
Indicadores Digitales · Página 181

instrucción. Este es un programa ejemplo que muestra como se pueden usar estas dos
variables para contar desde 0 hasta 0 con el indicador LED de 7 segmentos sin usar las
instrucciones HIGH y LOW.

Programa Ejemplo. DisplayDigits.bs2


Este Programa Ejemplo reciclara los digitos de 0 a 9 en el indicador LED de 7 segmentos.

9 Meta y ejecute el programa DisplayDigits.bs2


9 Verifique que se muestran los dígitos de 0 hasta 9.

' ¿Que es un Microcontrolador - DisplayDigits.bs2


' Se muestran los digitos de 0 a 9 en el indicador LED de 7 segmentos.

'{$STAMP BS2}
'{$PBASIC 2.5}

DEBUG "Program Running!"

OUTH = %00000000 ' OUTH se inicializa en low.


DIRH = %11111111 ' Fiha P8-P15 todo en low.
' Digito:
' BAFG.CDE
OUTH = %11100111 ' 0
PAUSE 1000
OUTH = %10000100 ' 1
PAUSE 1000
OUTH = %11010011 ' 2
PAUSE 1000
OUTH = %11010110 ' 3
PAUSE 1000
OUTH = %10110100 ' 4
PAUSE 1000
OUTH = %01110110 ' 5
PAUSE 1000
OUTH = %01110111 ' 6
PAUSE 1000
OUTH = %11000100 ' 7
PAUSE 1000
OUTH = %11110111 ' 8
PAUSE 1000
OUTH = %11110110 ' 9
PAUSE 1000

DIRH = %00000000 ' Los pines E/S a entrada,


' de segmentos apagados.
END
Página 182 · ¿Qué es un Microcontrolador?

Funcionamiento de DisplayDigits.bs2
La Figura 6-13 le muestra como puede usar las variables DIRH y OUTH para controlar la
dirección y estado (high/low) de los pines de E/S desde P8 hasta P15.

Vss
Vin
Figura 6-13
Usando DIRH y OUTH

Vdd
para fijar todos los pines
a Salida-Low

X3

X2
P15
P14
P13
P12

P10
P11

P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
OUTH = %00000000
DIRH = %11111111
La primera instrucción:

OUTH = %00000000

Hace que todos los pines E/S (de P8 a P15) están listos para mandar señales “low”. Si
todos ellos mandan señales low, apagarán todos los LEDs del indicador LED de 7
segmentos. Si usted desea que todos los pines E/S manden una señal high usted podría
usar OUTH = %11111111

¿Qué hace %? El simbolo “%” formato en Binario se usa para decirle al Editor BASIC
Stamp que el número es un número binario. Por ejemplo, el número binario %00001100 es
lo mismo que el número decimal 12. Como usted verá en esta actividad, los números
binarios pueden hacer más fácil muchas tareas de programacion.

Las señales low verdaderamente no se manda por los pines E/S hasta que se usa la
variable DIRH que cambia los pines E/S de entrada a salida. La instrucción:
DIRH = %11111111
Indicadores Digitales · Página 183

Fija los pines de E/S desde P8 hast P15 como salidad. Tan pronto como se ejecuta esta
instrucción P8 hasta P15 empiezan a mandar señales low. Esto se debe a que la
instrucción OUTH = 00000000 se ejecutó justamente antes de la instrucción DIRH. Tan
pronto como la instrucción DIRH fija todos los pines como salida, empiezan a mandar
señales low.

Usted tambien puede usar DIRH = %00000000 para cambiar todos los pines E/S en
entradas.

Antes que los pines E/S se conviertan en salidas: Hasta que los pines de entrada cambian a
salida, sensan las señales y actualizan la variable INH. Esta es la variable que contiene IN8,
IN9 hasta IN15. Estas variables se pueden usar de la misma forma que se usaron IN3 y IN4
para leer los botones push en el Capítulo 3 Entrada Digital – Botones push.
En el BASIC Stamp todos los pines de E/S se inicializan como entradas. A esto se le llama
“default”. Usted tiene que decirle a el BASIC Stamp que un pin I/O cambie a salida antes de
que empiece a mandar señales high o low. Las dos instrucciones HIGH y LOW cambian
automáticamente la dirección de los pines E/S del BASIC Stamp como salida. Colocando un
1 en la variable DIRH también se hacen uno los pines de E/S en salida.
Siempre fije valores en un registro OUT antes de hacerlos salidas con valores en el registro
DIR correspondiente. Esto previene que brevemente se manden señales no desadas. Por
ejemplo, si a DIR5 = 1 le sigue OUT5 = 1 en el principio de un programa, el brevemente
manda una señal “low” no deseada antes de cambiar a “high” porque OUT5 almacena cero
cuando el programa comienza. (En BASIC Stamp todas las variables/registros se inicializan
en 0.) Si OUT5 = 1 y le sigue DIR5 =1, el pin de E/S mandará una señal “high” tan pronto
como se convierta en salida.
Como los valores almacenados por default en todas las variables es 0 cuando el programa
inicia, la instrucción OUTH = %00000000 en realidad es redundante.

La Figura 6-14 muestra como usar la variable OUTH para mandar selectivamente señales
high y low a P8 hasta P15. Un 1 binario se usa para mandar una señal high, y un 0 binario
se usa para mandar una señal low. Este ejemplo muestra el número tres en el indicador
LED de 7 segmentos:

' BAFG.CDE
OUTH = %11010110
Página 184 · ¿Qué es un Microcontrolador?

Vss
Vin
Figura 6-14
Usando OUTH para
controlar las señales

Vdd
High/Low desde P8
hasta P15

X3

X2
P15
P14
P13
P12

P10
P11

P9
P8
P7
P6
P5
P4
P3
P2
P1
P0
‘ BAFG.CDE
OUTH = %11010110
La instrucción OUTH = %11010110 usa ceros binarios para fijar los pines E/S P8, P11 y
P13 en low, y usa unos binarios para fijar P9, P10, P12, P14 y P15 en high. La linea
debajo de la instrucción es un comentario que muestra las etiquetas del segmento con el
valor binario que hace que el segmento se ilumine o se apague.

Dentro de HIGH and LOW commands:


HIGH 15 ...es lo mismo que: OUT15 = 1
DIR15 = 1
Igualmente , la instrucción :
LOW 15 ...es lo mismo que: OUT15 = 0
DIR15 = 1
Si desea cambiar P15 como entrada, use DIR15 = 0. Entonces, puede usar IN15 para
detectar (en lugar de mandar) señales high/low .

Su Turno – Mostrado A hasta F


9 Calcule que patrones binarios (combinaciones de ceros y unos) necesitará para
mostrar las letras A, b, C, d, E y F.
9 Modifique el programa DisplayDigits.bs2 para que muestre A, b, C, d, E y F.
Indicadores Digitales · Página 185

Decimal vs Hexadecimal

Los digitos basicos en el sistema de números decimales son;

0,1,2,3,4,5,6,7,8,9

En el hexadecimal (base-16) en el número de dígitos del sistema de base son:

0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
La Base-16 se usa mucho en la programación de computadoras y microcontroladores. Una
vez que usted sepa calcular como mostrar los caracteres de A hasta F, usted podrá
modificar su programa para contar en hexadecimal de 0 hasta F.

Guardando las Listas de los Patrones On/Off


La instrucción LOOKUP facilita la escritura de los códigos del Indicador LED de 7
segmentos. La instrucción LOOKUP le permite que “vea” elementos de una lista. Este es
un ejemplo de código que usa la instrucción LOOKUP:
LOOKUP index, [7, 85, 19, 167, 28], value

Hay dos variables que usa estra instrucción “index” y “value”. Si index es 0, value
almacena 7, Si index es 1, value almacena 85. En el siguiente programa ejemplo, index
vale 2, entonces la instrucción LOOKUP coloca 19 en value y eso es lo que muestra la
Terminal Debug.

Programa Ejemplo: SimpleLookup.bs2


9 Meta y ejecute el programa SimpleLookup.bs2
9 Ejecute el programa con la variable index fiajdo en 2.
9 Trate de ajustar la variable index igual a un número entre 0 y 4.
9 Ejecute nuevamente el programa despues de cada cambio en la variable index y
observe que valor de la lista se coloca en la variable value.
9 Opcional: Modifique el programa colocando la instrucción LOOKUP en un
bucle FOR...NEXT que cuente de 0 a 4.
' ¿Que es un Microcontrolador - SimpleLookup.bs2
' Muestra un valor usando un indice y una Tabla.

' {$STAMP BS2}


' {$PBASIC 2.5}

value VAR Byte


index VAR Nib
Página 186 · ¿Qué es un Microcontrolador?

index = 2
PAUSE 1000

DEBUG ? index

LOOKUP index, [7, 85, 19, 167, 28], value

DEBUG ? value, CR

DEBUG "Cambie la variable indice de un ", CR,


"numero diferente (entre 0 y 4).", CR, CR,

"Ejecute el programa moficado y ", CR,


"verifique que ve el número", CR,
"que la instrucción LOOKUP coloca en el", CR,
"variable valor."

END

Programa Ejemplo: DisplayDigitsWithLookup.bs2


Este programa ejemplo muestra como la instrucción LOOKUP puede verdaderamente
facilitar el almacenamiento de patrones de bits usados en la variable OUTH.
Nuevamente, la variable index se usa para escoger que valor binario se coloca en la
variable OUTH. Este Programa Ejemplo cuenta desde 0 a 9. La diferencia entre este
programa y el programan DisplayDigits.bs2 es que este programa es mucho más versatil.
Es mucho más rápido y facil de ajustar para diferenes secuencias de números usando
tablas lookup.

9 Meta y el ejecute el programa DisplayDigitsWithLookup.bs2


9 Verifique que hace las mismas acciones que el programa anterior (con mucho
menor trabajo)
9 Vea la Terminal Debug mientras se ejecuta el programa. Esta muestra como el
valor de index se usa con la instrucción LOOKUP para cargar el valor binario
correcto desde la lista en OUTH.
Indicadores Digitales · Página 187

' ¿Que es un Microcontrolador - DisplayDigitsWithLookup.bs2


' Use una tabla lookup para almacenar y mostrar digitos con un indicador LED
7-segment .

'{$STAMP BS2}
'{$PBASIC 2.5}

index VAR Nib

OUTH = %00000000
DIRH = %11111111
PAUSE 1000

DEBUG "index OUTH ", CR,


"----- --------", CR

FOR index = 0 TO 9
LOOKUP index, [ %11100111, %10000100, %11010011,
%11010110, %10110100, %01110110,
%01110111, %11000100, %11110111, %11110110 ], OUTH

DEBUG " ", DEC2 index, " ", BIN8 OUTH, CR


PAUSE 1000
NEXT

DIRH = %00000000
END

Su Turno – Nuevamente mostrando de 0 a F


Modifique el programa DisplayDigitsWithLookup.bs2 para que cuente en hexadecimal
de 0 a F. No olvide actualizar el argumento EndValue del bucle FOR...NEXT.

ACTIVIDAD #4: MOSTRANDO LA POSICIÓN DE UN DIAL


En el capítulo 5, Actividad #4 usted usó el potenciometro para controlar la posición de
un servo. En esta actividad, usted mostrara la posición de un potenciometro usando un
indicador LED de 7 segmentos.

Partes para el Dial y el Indicador


Un indicador LED de 7 segmentos
8 Resistores de 1 KΩ (café-negro-rojo)
Un Potenciometro de 10 K Ω
Un Resistor de 220 Ω (rojo-rojo-café)
Un capacitor de 0.1 μF
Siete alambres para puentes.
Página 188 · ¿Qué es un Microcontrolador?

Construyendo los circuitos Dial e Indicador


La Figura 6-15 muestra el esquemático de un circuito potenciometro que debe ser
agregado a proyecto. La Figrua 6-16 muestra el diagrama de alambrado del circuito de la
Figura 6-15 combinada con el circuito de la Figura 6-11.

9 Agregue el circuito del potenciometro al circuito del indicador LED de 7


segmentos como se muestra en la Figura 6-16.

Figura 6-15
Esquemático del circuito
del potenciometro
agregado al proyecto.

Figura 6-16
Diagrama de alambrado
para la Figura 6-15

Programando el Dial e Indicador


Hay una instrucción muy útil llamadoa LOOKDOWN, y claro, es la instrucción inversa a
LOOKUP.Entanto que la instrucción LOOKUP entregra un número basado en un índice,
la instrucción LOOKDOWN entrega un índice basado en un número.

Programa Ejemplo: SimpleLookdown.bs2


Este Programa Ejemplo demuestra el funcionamiento de la instrucción LOOKDOWN
Indicadores Digitales · Página 189

9 Meta y ejecute el programa SimpleLookdown.bs2.


9 Ejecute el programa, como es, con la variable “value” fijada en 167, y use la
Terminal Debug para observar el valor del “index”
9 Trate de fijar la variable “value” con cada uno de los números de la lista de la
instrucción LOOKDOWN: 7,85,19,28
9 Ejecute otra vez el programa después de cada cambio en la variable “value” y
observe que valor la lista obtiene y lo coloca en la variable “index”

Cuestion interesante: ¿Qué sucede si su valor es mayor que 187? Este pequeño giro en
la instrucción LOOKDOWN puede causar problemas porque la instrucción LOOKDOWN no
hace cambios en el “index”

' ¿Que es un Microcontrolador - SimpleLookdown.bs2


' Debug un indice usando un valor la tabla lookup .

' {$STAMP BS2}


' {$PBASIC 2.5}

value VAR Byte


index VAR Nib

value = 167
PAUSE 1000
DEBUG ? value

LOOKDOWN value, [7, 85, 19, 167, 28], index

DEBUG ? index, CR

DEBUG "Cambie el valor de la variable a un ", CR,


"numero diferente en esta lista:", CR,
"7, 85, 19, 167, or 28.", CR, CR,

"Ejecute el programa modificado ", CR,


"verifique que ve el número que ", CR,
"que la instrucción LOOKDOWN coloca en la ", CR,
"variable indice."
END

A menos que le indique una diferente clase de comparación la instrucción LOOKDOWN


verifica para ver si un valor es igual a una entrada de la lista. Usted también puede
verificar para ver si un valor es mayor que, menor que o igual a, etc. Por ejemplo, para
buscar una entrada en el que el valor de la variable “value” es menor que o igual que, use
el operador <= justamente antes del primer parenteis que empieza la lista. En otras
Página 190 · ¿Qué es un Microcontrolador?

palabras, el operador regresa el índice del primer valor en la lista que hace la frase
verdadera en la instrucción.
9 Modifique SimpleLookdown.bs2. sustituyendo las frases value y LOOKDOWN
en lugar de los que ya existen.
9 Modifique las instrucción DEBUG para que muestre:
DEBUG "Cambie la variable value a un ", CR,
"numero diferente en este rango:", CR,
"0 a 170.", CR, CR,

"Ejecute el programa modificado y ", CR,


"verifque que se ver el número que ", CR,
"la instrucción LOOKDOWN coloca en la ", CR,
"variable indice."

9 Experimente con diferentes valores y vea si la variable “index” muestra lo que


usted esperaba.

Programama Ejemplo: DialDisplay.bs2


Este Programa Ejemplo refleja la posición de la perilla del potenciometro iluminando
segmentos exteriores alrededor del indicador LED de 7 segmentos como se muestra en la
Figura 6-17

Figura 6-17
Mostrando la posición del
potenciometro con el indicador LED
de 7 segmentos

9 Meta y ejecute el programa DialDisplay.bs2


9 Gire la perilla del potenciometro y asegurese que funciona. Recuerde presionar
al potenciometro en la tablilla para que asiente correctamente.
9 Cuando ejecuta el Programa Ejemplo quizá no sea tan preciso como lo muestra
la Figura 6-17 Ajuste los valores en la Tabla para que el Indicador Digital
muestra con mayor precisión la posición mostrada del potenciometro.

' ¿Que es un Microcontrolador - DialDisplay.bs2


' Muestre la posición del POT usando un indicador LED de 7-segment .
Indicadores Digitales · Página 191

'{$STAMP BS2}
'{$PBASIC 2.5}

PAUSE 1000
DEBUG "Programa en Ejecución”

index VAR Nib


time VAR Word

OUTH = %00000000
DIRH = %11111111

DO

HIGH 5
PAUSE 100
RCTIME 5, 1, time

LOOKDOWN time, <= [40, 150, 275, 400, 550, 800], index

LOOKUP index, [ %11100101, %11100001, %01100001,


%00100001, %00000001, %00000000 ], OUTH

LOOP

Funcionamiento del programa DialDisplay.bs2


Este Programa Ejemplo toma mediciones con RCTIME del potenciometro y las almacena
en una variable llamada “time”

HIGH 5
PAUSE 100
RCTIME 5, 1, time

La variable “time” se usa en una tabla LOOKDOWN. La tabla LOOKDOWN decide que
número en la lista “time” es menor que, y luego carga el número (0 a 5 en este caso) en la
variable “indice”

LOOKDOWN time, <= [40, 150, 275, 400, 550, 800], index
En seguida, la variable “index” se usa en una tabla LOOKUP para escoger el valor
binario a cargar en la variable OUTH.

LOOKUP index, [ %11100101, %11100001, %01100001,


%00100001, %00000001, %00000000 ], OUTH
Página 192 · ¿Qué es un Microcontrolador?

Su Turno – Agregando un Segmento


El programa DialDisplay.bs2 solo gira cinco de los seis segmento cuando usted gira la
perilla. La secuencia de giro de los LEDs del programa DialDisplay.bs2 es E, F, A, B, C,
el segmento D no se ilumina.

9 Guarde el programa DialDisplay.bs2 con el nombre DialDisplayYourTurn.bs2


9 Modifique DialDisplayYourTurn.bs2 para que haga que los seis LEDs exteriores
se iluminen conforme gira el potenciometro. La secuencia deberá ser: E,F,A,B,C,
y D.

Sugerencia: Quite el circuito LED de su tablilla. Estaremos usando nuevamente el circuito


indicador LED de 7 segmentos con otros circuitos del Capítulo 7, Actividad 4.

RESUMEN
Este capítulo introdujo el indicador LED de 7 segmentos, y la lectura de un mapa de
pines. Este capítulo también introdujo algunas técnicas para dispositivos y circuitos que
tienen entradas paralelas. Se introdujeron las variables DIRH y OUTH como un medio
para controlar los valores de los pines E/S del BASIC Stamp de P8 hasta P15. Se
introdujeron las instrucciones LOOKUP y LOOKDOWN como un medio de referencia
de listas de valores usados para mostrar letras y números.

Preguntas
1. ¿ En un indicador LED de 7 segmentos cual es el ingrediente activo que hace que
un indicador muestre datos cuando un microcontrolador senda señales high y
low?
2. ¿Qué significa cátodo común? ¿Qué piensa que significa ánodo común?
3. ¿Cómo se llama al grupo de alambres que conducen señales de y hacia un
dispositivo paralelo?
4. ¿Cuáles son los nombres de las instrucciones que en este capítulo se usaron para
manejar listas de valores?

Ejercicios
1. Escriba un comando OUTH para fijar en “high” P8, P10,P12. y P9, P11 Y P13
en “low”. Considere que todos los pines de E/S comienzan como entradas,
escriba la instrucción DIRH que hará que los pines de E/S de P8 a P13 manden
señales high/low mientras que P14 y P125 se configuren como entradas.
Indicadores Digitales · Página 193

2. Escriba los valores requeridos de OUTH para formar las letras: a, C, d, F, H, I, n,


P, S.

Proyecto
1. Deletree “FISH CHIPS And Dip” en forma permanente con su indicador LED de
7 segmentos. Haga que cada letra dure 400 ms.

Soluciones
Q1. El ingrediente activo es un LED.
Q2. Cátodo común significa que todos los cátodos se conectan juntos, esto es, ellos
comparten un punto de conexión común. Ánodo común podría significar que
todos los ánodos se conectan juntos.
Q3. Un Bus en Paralelo.
Q4. Las instrucciones LOOKUP y LOOKDOWN manejas listas de valores.

E1. El primer paso para configurar OUTH es fijar en “1” cada posición especificada
del bit como HIGH. Entonces los bits 8,10 y 12 se fijan en “1”. Luego poner “0”
para cada LOW. Entonces los bists 9, 11 y 13 se fijan en “0”. Para configurar
DIRH, los pines especificados 8,10,12,11, y 13 deben ponerse como salidas
mandandoles un bit en “1”. 15 y 14 se configuran como entradas colocando
ceros en los bits 15 y 14. El segundo paso es traducir esto a lenguage PBASIC.

Bit 15 14 13 12 11 10 9 8 Bit 15 14 13 12 11 10 9 8
OUTH 0 0 0 1 0 1 0 1 DIRH 0 0 1 1 1 1 1 1

OUTH = %00010101 DIRH = %00111111

E2. La clave para resolver este problema es dibujar cada letra y observar que
segmentos deben iluminarse. Coloque un 1 en cada segmento que debe
iluminarse. Translade eso valores binarios OUTH. La lista de segmentos
BAFG.CDE para los bits de OUTH está en la Figura 5-14.
Página 194 · ¿Qué es un Microcontrolador?

Letra LED Segmentos B A F G.C D E OUTH Valor = Common


Cathode
a e, f, a, b, c, g 11110101 %11110101
10 9 8 7 6
C a, f, e, d 01100011 %01100011
G F A B
d b, c, d, e, g 10010111 %10010111
F a, f, e, g 01110001 %01110001 A
F B
H f, e, b, c, g 10110101 %10110101 G
I f, e 00100001 %00100001 E C
n e, g, c 00010101 %00010101 D

P all but c and d 11110001 %11110001 E D C DP


S a, f, g, c, d 01110110 %01110110
1 2 3 4 5
From Figura on page 172. Common
Cathode

P1. Use el esquemático de la Figura 6-11. Para resolver este problema modifique el
programa DisplayDigitsWithLookup.bs2, usando el patrón de letras que resolvió
en el Ejercicio 2. En la solución las letras tienen que arreglarse como constantes
para hacer el programa más intuitivo. Es correcto usar los valores binarios, pero
está sujeto a mayores errores.

' ¿Que es un Microcontrolador - Ch6Prj01_FishAndChips.bs2


' Use la tabla lookup para almacenar y mostrar los digitos
' en un indicador 7-segment. Deletree el mensaje: FISH CHIPS And dIP

'{$STAMP BS2}
'{$PBASIC 2.5}

' Patrones del indicador 7-Segment para crear letras


A CON %11110101
C CON %01100011
d CON %10010111
F CON %01110001
H CON %10110101
I CON %00100001
n CON %00010101
P CON %11110001
S CON %01110110
space CON %00000000

index VAR Byte ' 19 caracteres por mensaje

OUTH = %00000000 ' Todos apagados al iniciar


DIRH = %11111111 ' Todos los LEDs deben ser salidas
PAUSE 1000 ' 1 sec. Antes del 1er. mensaje

DO

DEBUG "indice OUTH ", CR,


Indicadores Digitales · Página 195

"----- --------", CR

FOR index = 0 TO 18 ' 19 Caracteres por mensaje

LOOKUP index, [ F, I, S, H, space, C, H, I, P, S, space,


A, n, d, space, d, I, P, space ], OUTH

DEBUG " ", DEC2 index, " ", BIN8 OUTH, CR

PAUSE 400 ' 400 ms entre letras

NEXT

LOOP
Página 196 · ¿Qué es un Microcontrolador?

Capítulo 7: Midiendo Luz


DISPOSITIVOS QUE CONTIENEN SENSORES DE LUZ
En los capitulos anteriores introdujimos botones push como sensores de contacto/presión
y potenciometros como sensores de rotación/posición. Estos dos sensores son comunes en
los productos electrónicos, solamente piense cuantos aparatos con botones y perillas usa
diariamente. Otro sensor que se encuentra comunmente en muchos productos es el sensor
de luz. Estos son unos ejemplos de dispositivos que necesitan sensores de luz para
funcionar correctamente.

• Luces de carros que automáticamente se enciende cuando obscurece.


• Luces de calles que automáticamente se enciende cuando obscurece
• Luces de seguridad de puertas externas que se encienden cuando alguien camina
(pero solamente en la noche)
• Pantallas de Laptops que se hacen más brillantes en áreas bien iluminadas y
menos brillantes en áreas con poca iluminación.
• Cámaras que automáticamente dependiendo de la luz existente.
• El sensor interno de TVs, Reproductores DVD y otros sistemas de
entretenimiento detecta la luz infraroja de control remoto.

Los tres primeros ejemplos de la lista de iluminacion automática dependen de sensores


ambientales de luz que distinguen el día de la noche. La electrónica dentro de estos
dispositivos solamente necesita conocer si hay luz u obscuridad, entonces pueden
considerarse sensores con salida binaria como los botones push. Las pantallas de las
Laptops y los sistemas automáticos de exposición de las cámaras se ajustan las
condiciones luminosas del área obteniendo información de sus sensores de luz de la
cantidad de brillo u obscuridad existentes. Estos tienen que tratar sus sensores de luz
como salidas analógicas que suministran un número que indica la cantidad de brillo u
obscuridad, parecido a los ejemplos del potenciometro del Capítulo 5 donde los numeros
indicaban la posición de la perilla.

Los sensores de luz dentro de TVs y otros sistemas de entretenimiento detectan el


infrarojo (IR) que es una luz invisible al ojo humano, pero que pueden detectar muchos
dispositivos electrónicos. Por ejemplo, si usted ve el frente de su control remoto que
apunta al TV o otros dispositivos de entretenimiento, usted encontrará un LED claro
infrarojo. Cuando usted presiona un boton del control, este manda señales codificadas al
sistema de entretenimiento y el LED infrarojo parpadea. Como usted no puede ver la luz
infraroja parece que el LED no hace nada cuando presiona el botón. Sin embargo, si hace
Midiendo Luz · Página 197

esto a través de la lente de una cámara digital, el LED parecera blanco. La luz blanca
contiene todos los colores del espectro. Los sensores, rojo, verde y azul dentro del chip de
la cámara reportan que detectan luz en respuesta a la luz blanca.

Esto sucede porque los sensores rojo/verde/azul todos detectan la luz infraroja del LED
IR del control. Entoces la cámara tambien interpreta la luz de un LED infrarojo como
blanca.

Más respecto a LEDs infrarojos y Detectores


La Robótica con el Boe-Bot tiene ejemplos con el BASIC Stamp controlando el robot Boe-
Bot e internamente tiene LEDs IR como los del control remoto del TV, y el Receptor IR
dentro del TV para detectar objetos enfrente de él. El Boe-Bot usa LEDs IR como luz, y el
receptor IR dentro de los TVs para detectar las reflexiones luz de objetos lejanos enfrente
de él. El libro IR Remote for theBoe-Bot explica con los controles de TV remotos codifican el
mensaje que al TV, también tiene ejemplos de cómo programar el microcontrolador del
BASIC Stamp para decodificar mensajes del control remoto para que pueda mandar
mensajes al Boe-Bot e incluso controlarlo alrededor, todo con un control remoto.

El tipo de luz, que un dispositivo sensa depende como fue diseñado. Por ejemplo, los
sensores de luz de dispositivos que se ajustan a las condiciones de luz ambiental
necesitan sensar luz visible. Los sensores de pixeles rojo, verde y azul internos de las
cámaras digitales están sensando los niveles de los colores específicos de una imagen
digital. El sensor IR dentro del TV está buscando luz infraroja que parpadee cerca de 40
kHz.Estos son solamente unos ejemplos de lo que requiere una aplicación para diferentes
clases de sensores de luz.

La Figura 7-1 muestra unos ejemplos de sensores de luz disponible para varios
requerimientos de sensores de luz. De izquierda a derecha, se muestra un fototransistor,
un fotoresistor de sulfuro de cadmio, un sensor lineal de luz, un fotodiodo fortalecido
para el color azul, un convertidor de luz a frecuencia, un fototransistor infrarojo y un
receptor remotor infrarojo de TV.
Página 198 · ¿Qué es un Microcontrolador?

Figura 7-1: Ejemplo de Sensores de Luz

Datos de la Celda de Sulfuro de Cadmio o Fotoresistor


La celda de sulfuro de cadmio o fotoresistor fue uno de los sensores de luz ambiente más
comunes de alumbrado automático. Con la llegada de las restricciones de la Union Europea
de la ley respecto al uso de ciertas sustancias peligrosas (RoH) los fotoresistores de sulfuro
de cadmio ya no se integraron a los aparatos importados hacia o fabricados en Europa.
Esto ha incrementado el uso de un número de productos que reemplazan el fotoresistor,
incluyendo al fototransistor y el sensor lineal de luz. Como resultado de estos cambios, esta
edición ahora incluye un fototransistor para detectar niveles de luz lo que antes hacia el
fotoresistor de sulfuro de cadmio.

Los documentos de cada sensor de luz describen el tipo de luz que detecta en términos de
la longitud de onda. La longitud de onda de la distancia entre las formas o ciclos
repetidos. Por ejemplo, imagine una onda viajando en el oceano, subiendo y bajando, La
longitud de tal onda deberá ser la distancia entre cada pico (pico de espuma) del ciclo de
la onda. La longitud de onda de la luz se puede medir en forma similar, en lugar de que
midamos la distancia entre dos picos de las oscilaciones electromagnéticas de luz. Cada
color de luz tiene su propia longitud de onda y se considera que es luz visible, esto
significa que el ojo humano puede detectarla. La Figura 7-2 muestra longitudes de onda
de luz visible y también algunos tipos de luz que el ojo humano no puede detectar,
incluyendo la ultravioleta y el infrarojo. Estas longitudes de onda se miden en
nanometros, que se abrevia nm. Un nanometro es la billonésima parte de un metro.
Midiendo Luz · Página 199

Figura 7-2 Longitudes de onda y sus Correspondientes Colores

Wavelength (nm) 10…380 450 495 570 590 620 750…100,000


Color Violet Green Orange Infrared
Ultraviolet Blue Yellow Red

Nota: Si usted esta viendo esta imagen en un libro impreso en escala de gris, usted puede
bajarlo a todo color del PDF en www.parallax.com/go/WAM.

CONOCIENDO EL FOTOTRANSISTOR
Un transistor es como una válvula que permite que pase cierta cantidad de corriente a
través de dos de sus terminales. La tercera terminal del transistor controla la cantidad de
corriente que pasa a través de las otras dos terminales. Dependiendo del tipo de transistor,
el flujo de corriente puede controlarse por voltaje, corriente o en caso del fototransistor
por luz. La Figura 7-3 muestra el esquemático y el dibujo del fototransistor de su kit ¿Qué
es un Microcontrolador?. A mayor cantidad de luz que llega a la terminal de la base del
fototransistor conduce mayor corriente la terminal del colector. la cual sale de la terminal
del emisor. En forma inversa, si llega menor cantida de luz a la terminal de la base hay
menor conducción de corriente.
B

C Figura 7-3
Símbolo esquemático y dibujo del
B Fototransistor
E

E
C

La sensibilidad pico de este fototransistor está en 850 nm, y de acuerdo con la Figura 7-2
en la escala infraroja. También responde a la luz visible, aunque es menos sensitivo
especialmente a longituedes de onda debajo de 450 nm, que están a la izquierda del azul
en la Figura 7-2. La luz de lámparas de halogeno e incandescentes, y especialmente la luz
del sol, son fuentes muy fuertes de infrarojo comparado con las lámparas fluorescetes. El
Página 200 · ¿Qué es un Microcontrolador?

transistor infrarojo responde bien a todas estas fuentes de luz, pero es más sensible a la
luz del sol, un poco menos a lámparas de halogeno e incandescentes y mucho menor a
lámparas fluorescentes.

El diseño de circuito que usan el transistor puede ajustarse para que trabaje mejor en
ciertos tipos de condiciones luminosas., y los circuitos de fototransistor de este capítulo
se diseñan para el interior. Hay una aplicación sensor de luz externa, pero se usará un
dispositivo diferente que al principio parecería que no es candidato a ser sensor de luz: el
diodo emisor de luz.

ACTIVIDAD #1: CONSTRUYENDO Y VERIFICANDO EL MEDIDOR DE


LUZ
El capítulo 5 introdujo la medición de del tiempo de descarga de RC con las instrucción
RCTIME para medir el tiempo que le toma a un capacitor perder su carga a través de un
resistor variable dentro del potenciometro. Con mayor resistencia (a el flujo de la
corrinete eléctrica), el potenciometro disminuye la razón para perder su carga, y
resistencias más pequeñas acelerán esa razón. La medición del tiempo de descarga dio
una indicación de la resistencia del potenciometro a cual a su vez hizo posible que el
BASIC Stamp conozca la posición de la perilla del potenciometro.

Cuando se coloca en un circuito de descarga RC, un fototransistor, el cual conduce más o


menos corriente cuando incide más o menos luz en él, se comporta como el
potenciometro. Cuando más luz incide en el fototransistor, conduce más corriente y el
capacitor pierde su carga más rápidamente. Con menos luz, el fototransistor conduce
menos corriente, y el capacitor pierde su carga menos rápido. Entonces la misma
medición que dio RCTIME nos da una indicación de la posición de la perilla de un
potenciometro del capítulo 5 y que ahora se usará para medir niveles de luz con un
fototransistor.

En esta actividad, usted construirá y verificará un circuito de descarga RC que mide el


tiempo que le toma la carga del capacitor para descargarse a través de un fototransistor.
La medición de descarga de RC le dará a usted una idea de los niveles de luz sensados
por la superficie colectora de luz de un fototransistor. Igual que como las pruebas con el
potenciometro, los valores de tiempo medidos por la instrucción RCTIME se mostraran
en la Terminal Debug.

Partes del Detector de Luz


Un Fototransistor
Un Resistor de 220 Ω (rojo-rojo-café)
Midiendo Luz · Página 201

Dos Capacitores de 0.01 μF (identificados con 103)


Un Capacitor de 0.1 μF (identificado con 104)
Un alambra para puente

Construyendo el Circuito de Tiempo RC con un Fototransistor


La Figura 7-4 el diagrama esquemático y de alambrado del circuito de tiempo RC que
usted usará en este capítulo. Este circuito es diferente del circuito del potenciometro del
Capítulo 5 Actividad #3, en dos formas. Primero, el pin E/S usado para medir el tiempo
de descarga es diferente (P2). Segundo, el potenciometro se ha reemplazado con el
fototransistor.

Sugerencia Deje su circuito del LED 7 segementos y agregue el circuito del fototransistor
en su tablilla. Usaremos el LED 7 segmentos con el fotoresistor en la Actividad #4.

9 Construya el circuito mostrado en la Figura 7-4.


9 Asegúrese que las que las terminales colector y emisor (C y E) están conectadas
como lo muestra el diagrama de alambrado.
Figura 7-4

Circuito Esquematico y
diagrama de alambrado
del Fototransistor y el RC

Empiece con el capacitor


Página 202 · ¿Qué es un Microcontrolador?

Vdd Vin Vss


0.01 μF marcado con
X3 103.
.
P15
P14
P13
P12
P11
P10
P9 Longer pin
P8 (C) terminal
P7
P6
P5
P4 Flat spot
P3
P2 (E) terminal
P1
P0
X2

Programando el Circuito de Prueba del Fototransistor


El primer Programa Ejemplo (TestPhototransistor.bs2) es en verdad una ligera versión
modificada del programa ReadPotWithRcTimebs.2 del Capítulo 5, Actividad #3. El
circuito del potenciometro del capítulo 5 se conectó al pin E/S P7. El circuito en esta
actividad se conecta a P2. Debido a esta diferencia, el Programa Ejemplo ha actualizado
dos instrucciones para hacerlo que trabaje. La instrucción HIGH 7 del programa ejemplo
anterior es ahora HIGH 2 ya que el circuito del fototransistor se conectó en P2 y no en
P7.

Por la misma razón, la instrucción RCTIME 7, 1, time cambia a RCTIME 2, 1, time.

Programa Ejemplo: TestPhototransistor.bs2


La luz que colecta la superficie del fototransistor en la parte superior de un domo de
plástico transparente, es la terminal de la base (B) que muestra la Figura 7-3. Debe ser
visible a través del domo una pequeña área negrea. El área negra es en realidad el
fototransistor, una pequeña pieza de silicio. El resto del dispositivo es el empaque,
incluyendo el casco de plástico, el soporte de la terminales y las terminales.

En lugar de girar la perilla del potenciometro como lo hizo en el Capítulo 5, este circuito
se verifica exponiendo la superficie colectora de luz del fototransistor a diferentes niveles
de luz. Cuando se está ejecutando el Programa Ejemplo, la Terminal Debug deberá
mostrar valores pequeños para condiciones de luz brillantes y valores grandes para
condiciones de poca luz.
Midiendo Luz · Página 203

Evite luz solar directa. El circuito y programa que usted está diseñando para detectar
variaciones de luz en interiores y no trabaja para luz solar incidiendo directamente. Deje la
luz interior pero cierre las cortinas si los rayos del sol atraviezan una ventana cercana.

9 Meta y ejecute el programa TestPhototransistor.bs2


9 Anote los valores de la variable “time” de la Terminal Debug bajo condiciones
normales de iluminación.
9 Haga sombra con su mano sobre el circuito y verifque nuevamente la variable
“time”. Deberá mostrar un número mayor.
9 Haga un sombrero con su mano y póngala sobre el circuito para hacer más
sombra, la Terminal Debug deberá mostrar un valor significativamente mayor
para “time”.

' ¿Que es un Microcontrolador? - TestPhototransistor.bs2


' Lee el fototransistor del circuito de tiempo RC usando la instrucción
RCTIME.

' {$STAMP BS2}


' {$PBASIC 2.5}

time VAR Word


PAUSE 1000

DO
HIGH 2
PAUSE 100
RCTIME 2, 1, time
DEBUG HOME, "time = ", DEC5 time
LOOP

Su Turno – Usando un diferente capacitor para diferentes condiciones de luz


Las mediciones de tiempo con un capacitor de 0.1μF serán diez veces mayores que un
capacitor de 0.01μF, esto significa que el valor de la variable “time” que muestre la
Terminal Debug deberán ser 10 veces más grandes. Al reeplazar el capacitor de 0.01μF
por uno de 0.1μF será más útil en condiciones de luz más brillantes, donde usted
típicamente veía mediciones pequeñas usando el capacitor de 0.01μF. Por ejemplo,
digamos que las condiciones de luz son muy brillantes y las mediciones están en el rango
de 1 a 13 con el capacitor de 0.01 μF. Al reemplazarlo con uno de 0.1μF sus mediciones
estarán en el rango de 10 a 130, y su aplicación será mas sensible a variaciones de luz
dentro de la habitación.
Página 204 · ¿Qué es un Microcontrolador?

9 Modifique el circuito reemplazando el capacitor de 0.01μF por uno de 0.1 μF


(marcado como 104)
9 Vuelva a ejecutar el programa TestPhototransistor.bs2 y verifique que las
mediciones de tiempo de RC son aproximadamente diez veces su valor anterior.

Los intervalosde tiempo más grandes que la instrucción RCTIME puede medir es 65535
unidades de 2 us cada una que corresponde a un tiempo de descarga de 65535x2 us = 131
ms = 0.131 s. Si el tiempo de descarga excede 0.131 segundos, la instrucción RCTIME
regresa a 0 indicando que se excedió la máxima medición de tiempo.

9 Puede puede hacer mucha sombra sobre el fototransistor para exceder la


medición máxima de 65535 y hacer que la instrucción RCTIME regrese a 0.

La siguiente actividad se realiza con el menor de los dos capacitores.

9 Antes de pasar a la siguiente actividad, regrese el circuito a la versión original


que muestra la Figura 7-4 quitando el capacitor de 0.1μF y reemplazandolo con
el capacitor de 0.01μF.

ACTIVIDAD #2: AJUSTANDO LOS EVENTOS DE LUZ


Una de las características más útiles de la memoria de programa del BASIC Stamp es que
usted puede desconectar la alimentación de la Tablilla sin perder el programa. Tan pronto
como se conecta la alimentación el programa se ejecutará nuevamente desde el principio.
Como el código de su aplicación típicamente no llena la memoria del módulo BASIC
Stamp, cualquier porción que no se use para el programase puede usar para almacenar
datos. Esta memoria es especialmente adecuado para almacenar datos que usted no desea
que el BASIC Stamp olvide.

Mientras los valores almacenados por las variables se borran cuando se desconecta la
energía, el BASIC Stamp recordara todos los valores almacenados en su memoria de
programa cuando se vuelva a conectar la alimentación.

¿Qué es Adquisición de Datos? Datalogging es lo que un microcontrolador hace cuando


registra y almacena mediciones períodicas de sensores durante cierta cantidad de tiempo.
Los dispositivos de Adquisición de Datos o dataloggers, son especialmente útiles en
investigación científica. Por ejemplo, en lugar de poner una persona en una localidad
remota para que tome mediciones del ambiente, se puede colocar una estación datalogging
de ambiente. Esta registra mediciones períodicas y los científicos visitan la estación muy
frecuentemente para colectar los datos, o en algunos caos, actualiza sus mediciones a una
computadora por medio de teléfono celular , radio o satélite.
Midiendo Luz · Página 205

El chip del BASIC Stamp que almacena la memoria de programa y los datos se muestran
en la Figura 7-5. Este chip se llama EEPROM que significa memoria de Solo Lectura
Programable y Borrable Electricamente. Esto esta muy largo y pronunciar cada una de
sus letras es todavía un montón de trabajo. Entonces, cuando las personas hablan de una
EEPROM, generalmente dicen E-E-Prom.

2 KB EEPROM Figura 7-5


stores your Chip de EEPROM del
PBASIC source módulo BASIC Stamp
code.
Esta EEPROM almacena
su código de programa y
cualquier otros datos que
su programa coloca ahí,
incluso cuando la
alimentación se
desconecta.

La Figura 7-6 la ventana del Mapa de Memoria del Editor del BASIC Stamp. Usted
puede ver esta ventana haciendo click en el menú RUN del Editor de BASIC Stamp y
seleccionar Memory Map.

El Mapa de Memoria usa diferentes colores para mostrar los módulos RAM (variables en
random access memory ) y EEPROM (program memory) que se utilizan. El cuadro rojo
en la barra en la parte izquierda indica que porción de la EEPROM es visible en el Mapa
de EEPROM. Usted puede dar click y jalar este cuadro hacia arriba y abajo para ver
varias porciones de la memoria EEPROM. Al jalar el cuadro rojo de arriba abajo, usted
puede ver cuanto espacio de memoria EEPROM usa el programa TestPhototransistor.bs2
de la Actividad #1.

Los bytes que contienen los Símbolos del programa están resaltados en azul, y solamente
35 bytes fuera de la EEPROM de 2048 se usan para el programa. Los 2013 bytes
restantes están libres para almacenar datos.
Página 206 · ¿Qué es un Microcontrolador?

Figura 7-6
Mapa de Memoria

Para ver esta


ventana haga click
en RUN y seleccione
Memory Map

El mapa EEPROM muestra las direcciones en valores hexadecimales, que se discutieron


brevemente en el recuadro Decimal vs Hexadecimal en la página 185, los valores a lo
largo del lado izquierdo muestran las direcciones iniciales de cada fila de bytes. Los
números en la parte superior muestran el número de byte dentro de esa fila, desde 0 hasta
F en Hexadecimal, que equivale 0 a 15 en decimal. Por ejemplo, en la Figura 7-6 el valor
decimal C1 se almacenó en la dirección 7E0. CC se almacenó en la dirección 7E1, 6D se
almacenó en la dirección 7E2, y así sucesivamente hasta E8, que se almacenó en la
dirección 7EF. Si usted busca hacia arriba y abajo con la barra, usted verá que la
dirección de memoria mayor está en la parte más baja del Mapa EEPROM, y la dirección
menor está hasta arriba, con la fila superior empezando en 000.

En PBASIC los progamas siempre se almacenan en las direcciones mayores de la


EEPROM, que están abajo del Mapa EEPROM. Entonces, si su programa va a almacenar
datos en EEPROM, deberá empezar con la menor dirección , empezando con la dirección
0. Esto ayuda a asegurar que sus datos almacenados no se sobreescribiran en su programa
PBASIC, lo que generaría un programa defectuoso. En el caso del Mapa EEPROM
mostrado en la Figura 7-6 el programa PBASIC reside en las direcciones 7FF hasta 7DD,
empezando con la dirección mayor y construyendose hasta la menor dirección
Entonces, su aplicación puede almacenar datos desde la dirección 000 hasta 7DC,
construyendose desde el menor hasta el mayor, en decimal la dirección es desde 0 hasta
2012.

Si usted planea almacenar datos en EEPROM, es importante que sea capaz de convertir
de hexadecimal a decimal para calcular la dirección de escritura más grande. Abajo están
las matemáticas para convertir el número 7DC hexadecimal a decimal. Hexadecimal es
un sistema numérico con base 16, eso significa que usa 16 diferentes dígits para
Midiendo Luz · Página 207

representar sus valores. Los dígitos 0 a 9 representan los primeros 10 valores, y las letras
A a F representan los valores 10 a 15. Cuando se convierte de hexadecimal a decimal
cada digito de la derecha la potencia mayor de dieciseis. El dígito más a la derecha es el
número de unos, el cual es el número 16. El siguiente digito de la derecha es el número
de 16, el cual es el número 16. El tercer dígito es el número de 256s, el cual es el número
16.

Hexadecimal 7DC = (7 × 162) + (D × 161) + (C × 160)


= (7 × 162) + (13 × 161) + (12 × 160)
= (7 × 256) + (13 × 16) + (12 × 1)
= 1792 + 208 + 12
= 2012 (valor decimal)

Esta aproximación de conversión trabaja de igual manera con otras bases, incluyendo la
base 10 de valores decimales. Por ejemplo:

2102 = (2 × 103) + (1 × 102) + (0 × 101) + (2 × 100)


= (2 × 1000) + (1 × 100) + (0 × 10) + (2 × 1)

2048 Bytes = 2 KB
Aunque la letra “K” y la letra “k” se llaman “kilo” son ligeramente diferentes. En electrónica y
computación la “K” se usa para indicar un kilobyte binario que es 1x2 = 1024. Cuando nos
referimos con exactitud a 1000 bytes, usamos la letra “k” que se usa como kilo y es 1x10 =
1000 en el sistema métricoñ
Tambien, la letra “B” significa bytes, mientras que la letra “b” significa bits. Esto puede hacer
una gran diferencia por 2Kb significa 2048 bits, que is 2048 numeros diferentes donde cada
número está limitado a un valor de 0 o 1. En contraste 2KB significa 2048 bytes cada uno
de los bytes puede almacenar un valor en el rango de 0 a 255.

Usando la EEPROM para almacenar datos puede ser muy útil en aplicaciones remotas.
Un ejemplo de una aplicación remota podría ser un monitor de temperatura colocado en
un camión que contiene comida refrigerada. El podría fijar la temperatura durante todo el
viaje para ver si siempre está lo suficientemente fria para asegurar que ninguno de los
embarques cambie de congelado a líquido. Un segundo ejemplo es una estación de
monitoreo del clima. Una de las piezas de la estación de datos del clima podría almacenar
para que despues obtener sus niveles de luz. Esto puede dar una indicación de nubes que
cubren los tiempos de un día.

Y algunos estudios la usan para monitorear los efectos de contaminación y condensación


de trails en aviones, con altos niveles que llegan a la superficie de la tierra.
Página 208 · ¿Qué es un Microcontrolador?

Teniendo en mente el el ajuste de niveles de luz, esta actividad introduce una técnica para
almacenar los niveles de luz medidos en la EEPROM y después analizarlos. En esta
actividad, usted ejecutará un Programa Ejemplo PBASIC que almacena una serie de
mediciones de luz en el módulo EEPROM del BASIC Stamp. Después que se termine el
programa, usted ejecutará un segundo programa que retira los valores de la EEPROM y
los muestra en la Terminal Debug.

Programando Almacenamiento de Datos en Terminos Grandes


La instrucción WRITE se usa para almacenar valores en la EEPROM, y la instrucción
READ se usa para extraer esos valores.

La sintaxis para la instrucción WRITE es:

WRITE Location, {WORD} Value

Por ejemplo, si usted quiere escribir el valor 195 en la dirección 7 en la EEPROM, usted
podría usar la instrucción

WRITE 7, 195

Los valores “WORD” pueden ser cualesquiera desde 0 hasta 65565, mientras que los
valores “byte” solamente pueden contener números de 0 a 255. Un valor “word” toma el
espacio de dos bytes. Si usted quiere escribir un valor en EEPROM, usted tiene que usar
el modificador opcional “Word.”

Sea cuidadoso. Como “word” ocupa dos bytes usted tiene que brincar una de las
direcciones tamaño byte en la EEPROM antes de que usted pueda escribir otro “word”.
Digamos que usted necesita guardar dos valores “word” en EEPROM: 659 y 50012. Si
usted desea almacenar el primer valor en la dirección 8, usted tendrá que escribir el
segundo valor en la dirección 10-
WRITE 8, Word 659
WRITE 10, Word 50012
Midiendo Luz · Página 209

¿Es posible escribir sobre su programa? Sí, y si usted lo hace, el programa se pararece
a que empieza a comportarse extrañamente o que deja de ejecutarse. Como los símbolos
del programa PBASIC residen en las direcciones mayores de EEPROM, es mejor usar los
valores más pequeños de localidades “Location” para almacenar números con la instrucción
WRITE.
¿Como puedo saber si la Location que estoy usando es muy grande? Usted puede usar el
mapa de memoria para calcular el valor más grande no usado por su programa PBASIC.
La explicación después de la Figura 7-6 describe la manera de calcular cuantas direcciones
de memoria están disponibles. De manera sencilla usted puede convertir de hexadecimal a
decimal usando el formato decimal “DEC” en la instrucción DEBUG y el formato
hexadecimal $ hexadecimal formato de esta forma:
DEBUG DEC $7BC
Su programa mostrará el valor decimal del hexadecimal 7DC porque el signo “$” de formato
hexadecimal le indica a la instrucción DEBUG que el 7DC es un número hexadecimal.
Entonces, el formato DEC (decimal) hace que la instrucción DEBUG muestre el valor en un
formato decimal.

Programa Ejemplo: StoreLightMeasurementsinEeprom.bs2


Este Programa Ejemplo muestra con usar la instrucción WRITE tomando mediciones de
luz cada 5 segundos durante 2 ½ minutos y almacenandolos en la EEPROM. Como el
Programa Ejemplo de la actividad anterior muestra las mediciones en la Terminal Debug,
pero tambien las almacena en la EEPROM para su posterior retiro con un programa
diferente que usa la instrucción READ.

9 Meta y ejecute StoreLightMeasurementsinEeprom.bs2


9 Registre las mediciones mostradas por la Terminal Debug para que usted pueda
verificar las mediciones de lectura cuando se obtengan de la EEPROM.
9 Gradualmente incremente la sombra sobre el fototransistor durante 2 ½ minutes
de período de prueba para tener datos significativos.

Especialmente si usted tiene una Tablilla USB, su reconexión en la computadora podría


Resetear el BASIC Stamp y resetear el programa, en cuyo caso, podría empezar a tomar
un nuevo conjunto de mediciones.

9 Después que el programa StoreLightMeasurementsinEeprom.bs2 haya


concluido, desconecte la alimentación y déjela desconectada hasta que usted este
listo para ejecutar el siguiente programa ejemplo:
ReadLightMeasurementsFromEeprom.bs2.
Página 210 · ¿Qué es un Microcontrolador?

Usted puede cambiar las pausas en el bucle FOR...NEXT. Este Programa Ejemplo tiene
pausas de 5 segundos, las cuales resaltan las mediciones períodicas que toman las tarjetas
de adquisición de datos. Esto podría parecer muy largo, entonces usted puede reducir
PAUSE 5000 a PAUSE 500 para hacer que el programa ejecute diez veces más
rápidamente la prueba.

' ¿Que es un Microcontrolador - StoreLightMeasurementsInEeprom.bs2


' Escriba mediciones de luz a la EEPROM.

' {$STAMP BS2}


' {$PBASIC 2.5}

time VAR Word


eepromAddress VAR Byte

PAUSE 1000
DEBUG "Iniciando mediciones...", CR, CR
"Medicion Valor", CR,
"----------- -----", CR
FOR eepromAddress = 0 TO 58 STEP 2
HIGH 2
PAUSE 5000
RCTIME 2, 1, time
DEBUG DEC2 eepromAddress,
" ", DEC time, CR
WRITE eepromAddress, Word time
NEXT

DEBUG "Todo hecho. Ahora, ejecutelo:", CR,


"ReadLightMeasurementsFromEeprom.bs2"
END

Como funciona StoreLightMeasurementsinEeprom.bs2


El bucle FOR...NEXT que mide los valores de tiempo RC y los almacena en la EEPROM
tiene que contar en pasos de 2 porque los valores “word” se escriben en la EEPROM.

FOR eepromAddress = 0 to 58 STEP 2

La instrucción RCTIME carga las mediciones de tiempo de descarga en la variable


“time” que es de tamaño “word”

RCTIME 2, 1, time

El valor que almacena la variable “time” se copia en la dirección de la EEPROM dada


por el valor actual de la variable “eepromAddress” todas las veces a través del bucle.
Midiendo Luz · Página 211

Recuerde, que la dirección para la instrucción WRITE siempre está en términos de bytes.
Entonces, la variable “eepromAddress” se incrementa por dos cada vez en el bucle
porque la variable Word toma dos bytes.

WRITE eepromAddress, Word time


NEXT

Programando la Extracción de Datos


Para extraer los valores que usted grabó en la EEPROM, usted puede usar la instrucción
“READ”. La sintaxis de la instrucción es:

READ Location, {WORD} Variable

Mientras que la instrucción WRITE puede copiar una de una constante o una variable a la
EEPROM, la instrucción READ tiene que copiar el valor almacenado en una dirección de
la EEPROM a una variable, entonces como su nombre lo sugiere , el argumento
“Variable” tiene que ser una “variable”.

Recuerde que las variables se almacenan el módula RAM de el BASIC Stamp. De manera
diferente a la EEPROM, los valores RAM pueden borrarse cuando se desconecta la
alimentación y también cuando se presiona el botón RESET de su Tablilla.
El BASIC Stamp 2 tiene 26 bytes de RAM, mostrados en el lado derecho del Mapa de
Memoria en la Figura 7-6. Si usted declara una variable “word” usted está usando dos
bytes. La declaración de una variable byte usa un byte, un nible usa la mitad de un byte y
un bit usa 1/8 de byte.

Digamos que eepromValueA u eepromValueB son variables “Word”, y littleEE es una


variable Byte. Estas variables deberán estar definidas en el inicio del programa con la
declaraciónes de variables “VAR”. Estas son algunas instrucciones para extraer los
valores que se almacenaron en ciertas direcciones de la EEPROM con anterioridad
usando la instrucción WRITE, quizá incluso en un programa diferente.

READ 7, littleEE
READ 8, Word eepromValueA
READ 10, Word eepromValueB

La primera instrucción retira un valor byte de la dirección 7 de la EEPROM y lo copia en


la variable llamada littleEE. La siguiente instrucción copia la “word” que ocupan las
direcciones 8 y 9 de la EEPROM y la almacena en la variable “word” eepromValueA. La
Página 212 · ¿Qué es un Microcontrolador?

última de las tres instrucciones copia una “word” que ocupan las direcciónes 10 y 11de la
EEPROM y la almacena en la variable eepromValueB.

Programa Ejemplo: ReadLighMeasurementsFromEeprom.bs2


Este Programa Ejemplo demuestra como usar la instrucción READ para extraer las
mediciones de luz que fueron almacenadas en la EEPROM con el programa
StoreLightMeasurementsInEeprom.bs2.

9 Conecta la energía a su Tablilla.


9 Meta el programa ReadLighMeasurementsFromEeprom.bs2 en el Editor de
BASIC Stamp.
9 Si usted tenía desconectada la alimentación de su tablilla, cuando la reconectó,
inmediatamente haga click en el botón “Run” del Editor del BASIC Stamp para
bajar el programa en el BASIC Stamp.

No espere más de 6 segundos entre reconectar la alimentación y bajar el programa


ReadLighMeasurementsFromEeprom.bs2 en el BASIC Stamp, porque el programaque
todavía está en la mememori de programa (StoreLightMeasurementsInEeprom.bs2.)
empezará a grabar sobre la mediciones anteriores. Entonces, si usted reduce “Duration” de
la instrucción PAUSE de 5000 a 500 usted solamente tendra 1.5 segundos.

Compare la Tabla de la Terminal Debug que muestra este programa con la Tabla que
mostro el programa StoreLightMeasurementsInEeprom.bs2, y verifique que los valores
son los mismos.

' ¿Que es un Microcontrolador - ReadLightMeasurementsFromEeprom.bs2


' Lectura de mediciones de luz de la EEPROM.

' {$STAMP BS2}


' {$PBASIC 2.5}

time VAR Word


eepromAddress VAR Byte

PAUSE 1000

DEBUG "Extrayendo mediciones", CR, CR,


"Mediciones Valores", CR,
"---------- -----", CR

FOR eepromAddress = 0 TO 58 STEP 2

READ eepromAddress, Word time


DEBUG DEC2 eepromAddress, " ", DEC time, CR
Midiendo Luz · Página 213

NEXT
END

Funcionamiento del programa ReadLighMeasurementsFromEeprom.bs2


La instrucción WRITE y la instrucción READ dependen de direcciones byte. Y como
deseamos leer valores “word” de la EEPROM, la variable eepromAddress tiene que
tener 2 agregado a ella cada vez que se ejecuta el bucle FOR...NEXT.
FOR eepromAddress = 0 to 58 STEP 2

La instrucción READ obtiene el valor tamaño “word” de eepromAddress, y obtiene el


valor copiado en la variable time
READ eepromAddress, Word time

Los valores de la variables time y eepromAddress se muestran en columnas adyacentes


en una tabla en la Terminal Debug.

DEBUG DEC2 eepromAddress, " ", DEC time, CR


NEXT

Su Turno – Más Mediciones


9 Modifique el programa StoreLightMeasurementsInEeprom.bs2. para que tome y
registre dos veces las muchas mediciones en la misma cantidad de tiempo.
9 Modifique el programa ReadLighMeasurementsFromEeprom.bs2 para que
muestre todas las mediciones del programa modificado
StoreLightMeasurementsInEeprom.bs2.

ACTIVIDAD #3: GRAFICANDO MEDICIONES DE LUZ (OPCIONAL)


Las listas de mediciones como las de la Actividad #2 pueden ser tediosas para analizarse.
Imagine que lee cientos de estos números recolectados en la puesta del sol. O quizá
buscando un evento particuar, como cuando su cubrió brevemente el sensor de luz. Esta
información podría ser útil si el sensor de luz se coloca en un área donde camina sobre él
una persona o un animal, o un objeto pasando sobre una banda transportadora necesita
registrarse y analizarse. Sin importar la apliación, si usted tiene que trabajar con una larga
lista de números, para encontrar aquellos eventos y patrones que pueden ser tareas
difíciles y que consumen mucho tiempo.
Página 214 · ¿Qué es un Microcontrolador?

En cambio si usted hace una gráfica de la lista de mediciones, encontrar eventos y


patrones se hace mucho más fácil. La persona, animal u objeto que pase por el sensor de
luz mostrará un punto alto o pico en la mediciones. La Figura 7-7 muestra un ejemplo de
una gráfica que podría indicar la razón a la cual los objetos de una banda transportadora
están pasando sobre el sensor. Los picos en la gráfica ocurren cuando los tiempo de las
mediciones son grandes.

En el caso de una banda transportadora, esto indicaría que un objeto pasa sobre el sensor
reflejando una sombra. Esta gráfica facilita ver de un vistaso que un objeto pasa sobre el
sensor aproximadamente cada 7 segundo, y qu el objeto que esperabamos en 28 segundo
no estaba ahí.

Gráfica 7-7 Gráfica de Mediciones de Luz con el Fototransistor

Decay Time Vs. Time


for Phototransistor RC Circuit
9000

8000

7000
Decay Time (2 us)

6000

5000

4000

3000

2000

1000

0
0 10 20 30 40 50 60

"Decay Time" Tim e (s)

La Gráfica en la Figura 7-7 se generó copiando y pegando valores en la Terminal Debug


a un archivo de texto y luego se importo a una hoja de trabajo Excel de Microsoft.
Algunas utilerias de graficación pueden tomar el lugar de la Terminal Debug y graficar
los valores directamente en lugar de mostrarlos como un lista de números. La Figura 7-8
muestra un ejemplo de una de estas utilerias, llamada StampPlot LITE.
Midiendo Luz · Página 215

Figura 7-8 StampPlotLITE

En esta actividad opcional, usted puede ir a www.parallax.com/go/WAM y seguir la liga


de Data Plotting y realizar un número de actividades que demuestran como graficar
valores usando varias hojas de calculo y paquetes de software de utilerias de graficación.

ACTIVIDAD #4: MEDIDOR SENCILLO DE LUZ


La información de los sensores de luz puede comunicarse de muchas formas. El medidor
de luz con el que trabajará en esta actividad cambia la rapidez en que el indicador
parpadea dependiendo de la intensidad de luz que detecta.

Partes del Medidor de Luz


Un Fototransistor
Un Resistor de 220 Ω (rojo-rojo-café)
Página 216 · ¿Qué es un Microcontrolador?

Dos Capacitores de 0.01 μF (marcados con 103)


Un Capacitor de 0.1 μF (marcado con 104)
Un Indicador LED de 7 segmentos
Ocho Resistores de 1 KΩ (café-negro-rojo)
Seis alambres para puentes

Construyendo el Circuito Medidor de Luz


La Figura 7-9 muestra el esquemático del indicador LED de 7 segmentos y el
Fototransistor que se usará para construir el Medidor de Luz, y la Figura 7-10 muestra el
diagrama de alambrado de los circuitos. El circuito fototransistor es el mismo que ha
estado usando en las dos últimas actividades y el circuito del indicador LED de 7
segmentos es el mismo de la Figura 6-11.

9 Construya el circuito mostrado en la Figura 7-9 y la Figura 7-10.


9 Verifique el indicador LED de 7 segmentos para asegurarse que está conectado
correctamente usando el programa SegmentTestWithHighLow.bs2 del capítulo 6
Actividad #2, que empieza en la página 179.
Midiendo Luz · Página 217

Figura 7-9
Circuito
esquemático del
Medidor de Luz

Figura 7-10
Diagrama de
Alambrado para la
Figura 7-9
Página 218 · ¿Qué es un Microcontrolador?

Usando Subrutinas
La mayoría de los programas que usted ha escrito hasta ahora trabajan dentro de un bucle
DO...LOOP. Como toda la actividad principal del programa sucede dentro de
DO...LOOP, a esta usualmente se le llama rutina principal. Conforme usted agrega más
circuitos y más funciones útiles a su programa, puede tener un poco de dificultad para
tener el control de todo el código en la rutina principal. Su programa trabajará con mayor
facilidd si usted lo organiza en pequeños segmentos de código que hagan ciertas tareas.
PBASIC tiene algunas instrucciones que usted puede usar para hacer que el programa
brinque de la rutina principal, haga una tarea, y luego regrese al mismo punto de la rutina
principal. Esto le permitira que usted mantenga cada segmento de código haciendo un
trabajo particular sin estar en la rutina principal. Cada vez que usted necesite el programa
para hacer uno de esos trabajos, usted puede escribir una instrucción dentro de la rutina
principal que le diga al programa que brinque a tal trabajo, lo haga, y regrese cuando el
trabajo esté hecho. Los trabajos se llaman subrutinas y a este proceso se le llama
“llamado de subrutinas”

La Figura 7-11 muestra un ejemplo de una subrutina y como se usa. La instrucción


GOSUB Subroutine_Name hace que el programa brinque a la etiqueta Subroutine_Name.
Cuando el programa va a esa etiqueta, corriendo y ejecutando las instrucciones hasta que
llega a la instrucción (retorna) RETURN. Y ahora el programa regresa a la instrucción
que viene despues de la instrucci´´on GOSUB. En el caso del ejemplo de la Figura 7-11,
la siguiente instrucción es: DEBUG “Next command”

DO
GOSUB Subroutine_Name
DEBUG "Next command"
LOOP
Figura 7-11
Funcionamiento de la
Subroutine_Name: Subrutina
DEBUG "This is a subroutine..."
PAUSE 3000
RETURN
Midiendo Luz · Página 219

¿Qué es un Etiqueta? Una etiqueta es un nombre que puede usarse en un lugar de su


programa. GOSUB es una de las instrucciones que usted puede usar para brincar a un
etiqueta. Otras instrucciones son GOTO, ON GOTO y ON GOSUB. Una etiqueta debe
termina con el signo dos puntos (:), y por la forma de estilo, separe palabras con el carácter
de subrayado para que sean fáciles de reconocer. Cuando escoga un nombre para una
etiqueta, asegurese de no usar una palabra reservada o un nombre que esté usando una
variable o una constante. El resto de reglas para el nombre de una etiqueta son las mismas
que las usadas para nombrar variables, que están enumeradas en el recuadro de
información de la página 43.

Programa Ejemplo: SimpleSubroutines.bs2


Este Programa Ejemplo muestran como funcionan las subrutinas mandando mensajes a la
Terminal Debug.

9 Examine el programa SimpleSubroutines.bs2 y trate de adivinar el orden en el


cual se ejecutarán las instrucciones DEBUG.
9 Meta y ejecute el programa.
9 Compare el comportamiento del programa real con sus predicciones.

' ¿Que es un Microcontrolador - SimpleSubroutines.bs2


' Demostración del funcionamiento de la subrutina.

' {$STAMP BS2}


' {$PBASIC 2.5}

PAUSE 1000

DO

DEBUG CLS, "Inicia la rutina principal.", CR


PAUSE 2000
GOSUB First_Subroutine
DEBUG "Regresa a la principal.", CR
PAUSE 2000
GOSUB Second_Subroutine
DEBUG "Repite la principal...", CR
PAUSE 2000

LOOP

First_Subroutine:

DEBUG " Primera Ejecución "


DEBUG "subroutine.", CR
PAUSE 3000

RETURN
Página 220 · ¿Qué es un Microcontrolador?

Segunda_Subrutina:

DEBUG " Executing second "


DEBUG "subroutine.", CR
PAUSE 3000
RETURN

Funcionamiento de SimpleSubroutines.bs2
La figura 7-12 muestra como funciona la llamada de “First_Subroutine” en la rutina
principal (en bucle DO...LOOP). La instrucción GOSUB First:Subroutine manda el
programa a la etiqueta First_Subroutine. Luego, se ejecutan las tres instrucciones dentro
de esa subrutina. Cuando el programa llega a la instrucción RETURN, brinca de regreso
al comando que viene inmediatamente después de GOSUB First_Subroutine, y es
DEBUG “Back in Main.”, CR

¿Qué es una llamada a subrutina? Cuando usted usa la instrucción GOSUB para hacer
que el programa brinque a una subrutina, a esto se llama “llamada a subrutina”.

PAUSE 2000
GOSUB First_Subroutine
DEBUG "Back in main.", CR

Figura 7-12
First_Subroutine: Llamada a la Primera
DEBUG " Executing first " Subrutina.
DEBUG "subroutine.", CR
PAUSE 3000
RETURN

La Figura 7-13 muestra un segundo ejemplo del mismo proceso con llamada a la segunda
subrutina (GOSUB Second_Subrutine).
Midiendo Luz · Página 221

PAUSE 2000
GOSUB Second_Subroutine
DEBUG "Repeat main...", CR

Second_Subroutine: Figura 7-13


Llamada a segunda
DEBUG " Executing second " subrutina
DEBUG "subroutine", CR
PAUSE 3000
RETURN

Su Turno – Agregando y Anidando Subrutinas


Usted puede agregar subrutinas además de las dos que están en el programa y llamarlas
de la rutina principal.

9 Agregue la subrutina mostrada en la Figura 7-11 al programa


SimpleSubroutines.bs2.
9 Haga los ajustes necesarios a la instrucción DEBUG para que muestre
correctamente las tres subrutinas.

Usted también puede llamar una subrutina dentro de otra subrutina. A esto se le llama
subrutinas anidadas.

9 Intente mover la instrucción GOSUB para que llame a la subrutina


Subroutine_Name hacia otra de las subrutinas, y vea como funciona.

Cuando anidar subroutines. La regla es no más de cuatro profundidades. Vea el Manual


BASIC Stamp o la Ayuda del BASIC Stamp Editor para más información Vea GOSUB y
RETURN

Medidor de Luz Usando Subrutinas


El siguiente programa LightMeter.bs2 usa subrutinas para controlar el indicador LED de
7 segmentos dependiendo del nivel de luz detectado por el fototransistor. El ciclo
apagado y encendido de los segmentos del indicador LED en un patrón circular se hace
más rápido cuando el fototransistor recibe más luz. Cuando la luz disminuye el patrón se
hace más lento.
Página 222 · ¿Qué es un Microcontrolador?

El Programa Ejemplo LightMeter.bs2 usa una subrutina llamada Update_Display para


controlar el orden de avance de los segmentos del medidor de luz.
El programa que ejecuta el medidor de luz trata con tres diferentes operaciones.

1. Leer el Fototransistor.
2. Calcular el tiempo de espera antes de actualizar el indicador LED de 7
segmentos.
3. Actualizar el indicador LED de 7 segmentos.

Cada operación está contenida dentro de su propia subrutina, y la rutina principal


DO...LOOP llamará en secuencia a cada una de elllas una vez y otra y otra vez.

Programa Ejemplo: LightMeter.bs2

El Control de las condiciones de luz hace la gran diferencia. Para mejores resultados,
realice esta prueba en una habitación iluminada con luz fluorescente con poca o sin luz
directa del sol. (cierre las cortinas). Para información de la calibración de este medidor a
otras condiciones de luz, vea la sección Su Turno.

9 -Meta y corra el programa LightMeter.bs2


9 -Verifique de la velocidad de repetición del patron circular mostrado por el
indicador LED de 7 segmentos esta controlado por las condiciones de luz que el
fototransistor está sensando. Haga esto haciendo sombre con su mano o un
pedazo de papel y verifique que la rapidez de cambio del patron circula del
indicador se mueve lentamente.

' ¿Que es un Microcontrolador - LightMeter.bs2


' Indica los niveles de luz usando un indicador LED de 7 segmentos.

' {$STAMP BS2}


' {$PBASIC 2.5}

PAUSE 1000

DEBUG "Programa en Ejecución !"

index VAR Nib ' Declaración de Variables .


time VAR Word

OUTH = %00000000 ' Inicializa el indicador de 7-segment.


DIRH = %11111111
Midiendo Luz · Página 223

DO ' Rutine Principal.

GOSUB Get_Rc_Time
GOSUB Delay
GOSUB Update_Display

LOOP
' Subrutinas

Get_Rc_Time: ' Subrutina de tiempo RC

HIGH 2
PAUSE 3
RCTIME 2, 1, time

RETURN

Delay: ' Subrutina de Retardo.

PAUSE time / 3

RETURN

Update_Display: ' Muestra actualización de subrutinas.

IF index = 6 THEN index = 0


' BAFG.CDE
LOOKUP index, [ %01000000,
%10000000,
%00000100,
%00000010,
%00000001,
%00100000 ], OUTH
index = index + 1

RETURN

Funcionamiento del programa LightMeter.bs2


Las primeras dos líneas del programa declaran variables. No importa donde se usen estan
variables en la subrutinas o en la rutina principal, siempre es mejor declarar variables
(y constantes) al principio de su programa.
Como esto es práctica común, esta sección de código tiene un nombre “Variable
declarations” (“Declaración de Variables”). Este nombre se muestra como comentario a
la derecha la la primera declaración de variable.
index VAR Nib ‘Declaración de Variables.
time VAR Word
Algunos programas tambien tiene procedimientos que necesitan hacerse de una vez al
inicio del programa. Por ejemplo: Ajustar todos los pines de los 7 segmentos en low y
Página 224 · ¿Qué es un Microcontrolador?

direccionarlos como salidas. Este sección de programa PBASIC también tiene un nombre
“Inicialización”
OUTH = %00000000 ' Inicializa el indicador 7-segmentos.
DIRH = %11111111

El siguiente segmento de código se llama rutina principal. La rutina principal primero


llama a la subrutina Get-Rc-Time. Luego, esta llama a la subrutina Delay, y después de
esto esta llama al subrutina Update_Display. Recuerde que el programa va a través de las
tres subrutinas tan rápido como puede, una vez y otra y otra vez.
DO ' Rutina Principal.
GOSUB Get_Rc_Time
GOSUB Delay
GOSUB Update_Display
LOOP

Generalmente todas las subrutinas se colocan después de la rutina principal. El nombre de


la primera subrutina es Get_Rc_Time; y ella toma la medición del tiempo RC con el
circuito fototransistor. Esta subrutina tiene una instrucción PAUSE que permite que el
capacitor se cargue. La Duracion de esta instrucción es pequeña y solamente necesita una
pausa con el tiempo suficiente para asegurarse que el capacitor se carge. Observe que la
instrucción RCTIME fija el valor de la variable “time”. Esta variable la usará la segunda
subrutina.
Get_Rc_Time: ' Subrutina de tiempo RC
HIGH 2
PAUSE 3
RCTIME 2, 1, time
RETURN

El nombre de la segunda subrutina es “Delay”, y todo lo que contiene es PAUSE time /


3. La instrucción PAUSE permite la medición del tiempo de descarga (cuanto se ilumina
el LED) para controlar el retardo entre el giro en cada segmento iluminado del indicador
de 7 segmentos. El valor a la derecha del operador división “/” puede hacerse mayor para
rotaciones más rápidas en condiciones de poca iluminación o puede hacerse pequeño para
hacerlo menos rápido en condiciones de mucha iluminación. Usted también podría usar
“*” para multiplicar la variable time por un valor en lugar de dividirlo para hacer que el
indicador vaya lento y para controlar con mayor precisión la velocidad, no olvide el
operador “*/”. Mayor información de este operador está en la sección Su Turno.
Delay:
PAUSE time / 3
RETURN
Midiendo Luz · Página 225

La tercera subrutina se llama Update_Display. La instrucción LOOKUP en esta subrutina


contiene una tabla con seis patrones de bits que se usan para crear el patron circular
alrededor del exterior del indicador LED de 7 segementos. Agregando un 1 a la variable
“index” cada vez que se llama la subrutina, esta genera el siguiente patrón de bits en la
secuencia para obtener la colocación en OUTH. Hay solamente seis entrada en la tabla
LOOKUP para valores del “index” que van de 0 a 5. ¿Qué sucede cuando el valor de
index llega a seis? La instrucción LOOKUP no conoce automáticamente como regresar a
la primera entrada, pero usted puede usar una frase IF...THEN para resolver este
problema. La instrucción IF indez = 6 THEN index = 0 resetea el valor de index a 0 cada
vez que llega a 6. También hace que la secuencia de los patrones de bits colocados en
OUTH se repitan en si mismos una y otra y otra vez. Estos, a su vez, hace que el
indicador LED de 7 segmentos repita su patrón circular una y otra y otra vez.
Update_Display:

IF index = 6 THEN index = 0


' BAFG.CDE
LOOKUP index, [ %01000000,
%10000000,
%00000100,
%00000010,
%00000001,
%00100000 ], OUTH
index = index + 1
RETURN

Su Turno – Ajustando el Medidor en Hardware y Software


Hay dos formas para cambiar la sensibilidad del medidor. Primero por software: el
programa en PBASIC puede cambiarse para ajustar la velocidad. Anteriormente
mencionamos que dividiendo la variable time de la subrutina Delay con la instrución
PAUSE time /3 con números mayores que 3 acelerarán el indicador y con números
menores a 3 los desacelerarán. Para verdaderamente desacelararlo también puede
multiplicarlo por valores con el operador de multiplicación * , y para ajustes finos existe
el operador */.

Cuando usted conecta capacitores en paralelo, su valor aumenta. Entonces, colocando un


segundo capacitor de 0.01 μF en seguida del primero como lo muestra la Figura 7-14 y 7-
15, la capacitancia sera 0.02 μF. Al tener dos veces al capacitancia, las mediciones de
descarga serán dos veces mayores para el mismo nivel de luz.
Página 226 · ¿Qué es un Microcontrolador?

9 Conecte el segundo capacitor a la derecha del primero en la porción del sensor de


luz del circuito medidor de luz de la Figura 7-14 y 7-15.
9 Ejecute el programa LightMeter.bs2 y observe los resultados.

Como las mediciones de tiempo serán dos veces mayores, el patrón circular de los LEDs
del indicador de 7 segmentos deberá girar a la mitad de velocidad.

Figura 7-14
Dos capacitores de 0.01
μF en paralelo.

Figura 7-15
Circuitos del Medidor de
Luz con dos capacitores
de 0.01 μF en paralelo.

En lugar de la mitad de velocidad de un capacitor de 0.01 μF, ¿por qué no un décimo de


velocidad? Usted puede reemplazar los dos capacitores de 0.01 μF con un capacitor de
0.1 μF. Este trabajará correctamente en habitaciones muy iluminadas, y bajará su
velocidad en condiciones normales de iluminación. Recuerde que cuando usted usa un
capacitor que es diez veces mayor entonces la medición de luz del tiempo RC requerirá
diez veces más tiempo.

9 Reemplace los capacitores de 0.01 μF con un capacitor de 0.1 μF.


9 Ejecute el programa y vea si el efectro predicho ocurre.
Midiendo Luz · Página 227

9 Antes de continuar restaure el circuito con un capacitor de 0.01 μF en paralelo


con el fototransistor como se muestra en la Figrua 7-9 y 7-10.
9 Verifique su circuito restaurado y compruebe que funciona antes de continuar.

¿Qué es mejor ajustar el software o el hardware? Trate usted de usar siempre lo mejor
de ambos mundos. Escoga un capacitor que le de a usted la mediciones más exactas
sobre el ramgo más amplio de niveles de luz. Después que su hardware es lo mejor que
puede usarse, use el software para ajustar automáticamente el medidor de luz de manera
que trabaje bien para el usuario bajo el rango más amplio de condiciones. Esto toma una
cantidad considerable de pruebas y refinamiento pero todo esto es parte del proceso de
diseño de productos.

ACTIVIDAD #5: SALIDA CONMUTADA (ON/OFF) DEL


FOTOTRANSISTOR
Antes que los microcontroladores fueran comunes en los productos, los fotoresistores se
usaban en circuitos que variaban en su salida de voltaje. Cuando el voltaje pasaba debajo
de una valor umbral indicando tiempo de noche, otros circuitos en el dispositivo
encendian las lámparas. Cuando el voltaja pasaba arriba del umbral, indicando tiempo de
día, los circuitos del dispositivo apagaban las lámparas. El comportamiento binario de
conmutación de la luz puede ser emulado con el mismo BASIC Stamp y el circuito RC
modificando simplemente el programa. Alternativamente, el circuito se puede modificar
para que mande un 1 o un 0 a un pin E/S dependiendo de la cantidad de voltaje
suministrado a el pin, en forma similar como lo hace un botón push. En esta actividad,
ustes trabajará con estos dos enfoques.

Ajustando el Programa de Estados On/Off


El programa PhototransistorAnalogToBinary.bs2 toma el rango de mediciones del
fototransistor y las compara en el punto medion entre las mediciones mayor y menor. Si
la medición está arriba del punto medio, muestra “Enciende las Luces”, si no lo está,
muestra “Apaga las Luces”. El programa usa directivas de constantes para definir las
mediciones mayor y menor que el programa espera del circuito fototransistor.
valMax CON 4000
valMin CON 100
Página 228 · ¿Qué es un Microcontrolador?

El programa también usa los operadores MIN y MAX para asegurarse que los valores
permanecen dentro de estos límites antes de usarlos para tomar decisiones. Si time es
mayor que valMax (4000 en este Programa Ejemplo), la frase fija time to valMax =4000
De forma semejante si time es menor que valMin (100 en el Programa Ejemplo), la frase
fija time to valMin= 100
time = time MAX valMax MIN valMin

La instrucción IF...THEN...ELSE convierte el rango de valores analógicos digitalizados


en una salida binaria que toma la forma de mensajes luz encendica o luz apagada.
IF time > (valMax - valMin) / 2 THEN
DEBUG CR, "Enciende la luces "
ELSE
DEBUG CR, "Apaga las luces"
ENDIF

Antes de que este programa trabaje correctamente, usted tiene que calibrar sus
condiciones de luz como sigue:

9 Verique su circuito fototransistor para asegurarse que solo tiene un capacitor de


0.01 μF (marcado con 103)
9 Meta el programa PhototransistorAnalogToBinary.bs2 en el Editor de BASIC
Stamp. Asegurese de agregar un espacio extra despues de “s” in el mensaje
“Encienda la luces “
9 Cargue el programaen el BASIC Stamp.
9 Observe al Terminal Debug cuando ustes aplica las condiciones de luz penunbra
y brillo que usted desea verificar, y escriba los valores de tiempo resultantes de
máximo y mínimo.
9 Meta estos valores en el programa con las directivas valMax y valMIn.
9 Ahora, su programa está listo para ejecutarse y verificarse.
9 Cargue el programa modificado en el BASIC Stamp.
9 Verifique para comprobar que las condiciones de luz en penumbra generan el
mensaje “Encienda las luces” y en condiciones de brillo genera el mensaje
“Apague las luces”.
Midiendo Luz · Página 229

' ¿Que es un Microcontrolador - PhototransistorAnalogToBinary.bs2


' Cambia las mediciones analogicas del fototransistor en resultado binario.

' {$STAMP BS2}


' {$PBASIC 2.5}

valMax CON 4000


valMin CON 100

time VAR Word

PAUSE 1000

DO

HIGH 2
PAUSE 100
RCTIME 2, 1, time

time = time MAX valMax MIN valMin

DEBUG HOME, "time = ", DEC5 time


IF time > (valMax - valMin) / 2 THEN
DEBUG CR, "Ecienda las luces "
ELSE
DEBUG CR, "Apague las luces"
ENDIF

LOOP

Su Turno – Diferentes umbrales para Brillo y Obscuridad


Si usted trata de incorporar el programa PhototransistorAnalogToBinary.bs2 en un
sistema automático de luz, tiene un defecto potencial. Digamos que hay suficiente
obscuridad en el exterior que hace que la medicion de time sobrepase (valMax –
valMin) / 2, que hace que se enciendan las luces, y al encenderse las luces el sensor las
detecta, entonces esto haría que se apagaan. ¡Este ciclo, enciende las luces/apaga las luces
podía repetirse rapidamente toda la noche!

La Figura 7-16 muestra en una gráfica como funciona el ciclo encendido apagado.
Cuando el nivel de luz cae, se incrementa el valor de la variable time, y cuando este cruza
el umbral, la lampara automáticamente se enciende. Entonces, como el fototransitor sensa
la lampara que se ha encendido disminuye la medición de la variable time y entonces la
lámpara se apaga. Entoces, se incrementa nuevamente el valor de la variable time y
sobrepasa el umbral, y como consecuencia nuevamente la lámpara se enciende, y baja el
valor de la variable time del nivel de umbral y etcetera, etcetera...
Página 230 · ¿Qué es un Microcontrolador?

valMax
"Turn light on "

Figura 7-16
(valMax - valMin) / 2
Oscilaciones
Arriba/Debajo del
"Turn light off"
Umbral.
valMin

Un remedio para este problema es agregar un segundo umbral, como lo muestra la Figura
7-17. El umbral “Enciende la lámpara” solamente enciende la lámpara después tener
mucha obscuridad, y “Apaga la lámpara” despues que hay mucho brillo. Con este
sistema, la lámpara se enciende despues que “time” pasó del rango de “Enciende la
lámpara. La lampara encendida genera brilla, entonces “time” disminuyó ligeramente,
pero como no bajó hasta el umbral de “Apaga la lámpara” nada ha cambiado y la lámpara
sigue encendida. El término HISTERESIS se usa para describir este tipo de sistemas, que
tiene dos umbrales de entrada diferentes que afectan su salida junto con una zona de no-
transición entre ellas.

valMax
"Turn light on "
(valMax - valMin) / 4 * 3
Figura 7-17
No transition Usando Diferentes
Umbrales Alto y Bajo
(valMax - valMin) / 4 para Prevenir
"Turn light off" Oscilaciones.
valMin

Usted puede realizar este sistema de dos umbrales en su código PBASIC modificado la
instrucción IF...THEN..ELSEIF del programa PhototransistorAnalogToBinary.bs2 . Este
es un ejemplo:
IF time > (valMax - valMin) / 4 * 3 THEN
DEBUG CR, "Enciende las lámparas "
ELSEIF time < (valMax - valMin ) / 4 THEN
DEBUG CR, "Apaga las lámparas"
ENDIF
Midiendo Luz · Página 231

El primer bloque IF...THEN muestra “Enciende las lámparas” cuando la variable time
almacena un valor que es mayor a ¾ del valor del tiempo más alto (el menor brillo). El
bloque de códigos ELSEIF sólo muestra “Apaga las lámparas” cuando la variable tiempo
almacena un valor que es menor a ¼ del menor valor de tiempo (máximo brillo).

9 Guarde el programa PhototransistorAnalogToBinary.bs2 con el nombre


PhototransistorHysteresis.bs2.
9 Antes de modificar el programa PhototransistorHysteresis.bs2 verifiquelo para
asegurarse que funciona el umbral. Si la iluminación ha cambiado, repita los
pasos de calibración (del programa PhototransistorAnalogToBinary.bs2) de
valMin y valMax.
9 Reemplace la instrucción IF...ELSE...ENDIF del programa
PhototransistorAnalogToBinary.bs2 que acaba,ps de analizar.
9 Cargue el programa PhototransistorHysteresis.bs2 en el BASIC Stamp.
9 Verifique y compruebe que es obscuro el umbral “Enciende las lámparas2” y que
es luminoso el umbral “Apague las lámparas”

Si usted agrega un circuito LED y modifica el código para que encienda y apague el
LED, pueden suceder algunas situaciones interesantes. Especialmente si usted pone el
LED cerca del fototransistor, usted podría todavía ver el comportamiento enc/apag
cuando hay obscuridad incluso con la histeresis programada. ¿Qué tan lejos del
fototransistor debe estár el LED para hacer que los dos umbrales prevengan el
comportamiento enc/apag?

Considerando que los valores de valMin y valMax son iguales en ambos programas, ¿qué
tan lejos debe estar el LED para que trabaje correctamente el programa
PhototransistorAnalogToBinary.bs2 que no se ha modificado?
Página 232 · ¿Qué es un Microcontrolador?

TTL vs Disparador Schmitt


Los pines de E/S de su BASIC Stamp mandan y reciben señales usando lógica de
transistor- transistor o TTL ) Como salida, el pin de E/S manda una señal high igual a 5 V o
una señal low igual a 0 V. El lado izquierdo de la Figura 7-18 muestra como el pin de E/S se
comporta como entrada. El registo IN de los pines de E/S (IN0, IN1, IN2, etc) almacena un 1
si el voltaje aplicado esta arriba de 1.4 V, o un 0 si está debajo de 1.4 V. Esto se muestra 1
Lógico o 0 Lógico en la figura.
Un disparados Schmitt es un circuito representado por el símbolo en el centro de la Figura
7-18. El lado derecho de la Figura 7-18 muestra como se comportaría un pin de E/S
direccionado como entrada si tuviera un circuito disparador Schmitt interconstruido.
Semejante al código PBASIC con dos umbrales el disparado Schmitt tiene histeresis. El
valor de entrada almacenado por el registro IN del pin de E/S no cambia de 1 a 0 hasta que
el voltaje de entrada pasa debajo de 0.75 V. El BASIC Stamp 2px tiene una instrucción
PBASIC que permite que usted configura sus pines de entrada como Disparadores Schmitt.
Figura 7-18 Umbrales y símbolos de TTL vs Disparador Schmitt.

TTL Schmitt Trigger Schmitt Trigger


Threshold Symbol Threshold

5V 5V
Logic 1
≈4.25 V
Logic 1
No Change
≈1.4 V
Logic 0
≈0.75 V
Logic 0
0V 0V

Ajustando el Circuito para Estados Enc/Apag


En la Actividad #2 del Capítulo 5 se mencionó que el voltaje de umbran para un pin E/S
del BASIC Stampa es 1.4 V. Cuando un pin de E/S se direcciona como entrada, los
voltajes arriba de 1.4 V aplicados a un pin de E/S resulta en un 1 binario, y los voltajes
debajo de 1.4 V resultan en un 0 binario. El nudo Vo en el circuito que muestra la Figura
7-19 cambia su voltaje en función de la luz. El circuito puede conectarse a el pin E/S del
BASIC Stamp, y con poca iluminación el voltaje pasará abajo del umbral de BASIC
Stamp de 1.4 V, y el registro de entrada del pin de E/S almacenará un 0. En condiciones
de mucha iluminación, Vo sube arriba de 1.4 V, y el registro de entrada del pin de E/S
almacenará un 1.
Midiendo Luz · Página 233

Figura 7-19
Circuito del Voltaje de
Salida en Función de la
+ Luz.
V =R
– I

La razón de los cambios del voltaje en Vo con niveles de luz lo explica la ley de Ohm .
Que establece que el voltaje en los extremos de un resistor (V en la Figura 7-19) es iual a
la corriente que pasa por el resistor (I), multiplicado por la resistencia del resistor (R).
V=IxR

Recuerde que un fototransistor permite que pase más corriente a través de él cuando
recibe más iluminación, y menos corriente cuando recibe menos iluminación.
Pongamosle atención al ejemplo del circuito de la Figura 7-19 y calculemos cuanta
corriente podría pasar a través del resistor para crear una caída de voltaje de 1.4 V.
Primero, sabemos que el valor del resistor es 10 K Ω, o 10000 Ω. Tambien sabemos que
la diferencia de potencial sea igual a 1.4 V, entonces necesitamos modificar la ley de
Ohm para encontrar I. Para hacer esto, dividimos ambos miembros de la ecuación V = I x
R por R, y obtenemos I = V/R. Entonces sustituimos los valores conocidos (V = 1.4 V y
R = 10 K Ω) y resolvemos para I.

I = V÷R
= 1.4 V ÷ 10 kΩ
= 1.4 V ÷ 10,000 Ω
= 0.00014 V/Ω
= 0.00014 A
= 0.14 mA

Ahora, si por el transistor circula el doble de corriente, porque hay más iluminación, ¿
cual es la diferencia de potencial en el resistor? Con el doble de corriente, I = 0.28 mA, y
la resistencia es 10 K Ω, aplicando la ley de ohm tenemos:
Página 234 · ¿Qué es un Microcontrolador?

V = I×R
= 0.28 mA × 10 kΩ
= 0.00028 A × 10,000 Ω
= 2.8 AΩ
= 2.8 V

Con 2.8 V aplicados a un pin E/S, su registro de entrada deberá almacenar un 1 ya que
2.8 V está arriba del voltaje de umbral del pin E/S que es 1.4 V.

Su Turno – Más cálculos


¿Qué sucede si el fototransistor solo permite la mitad del voltaje de umbral, la corriente
que fluye en el circuito es (0.07 mA), cual sería el voltaje en los extremos del resistor?
¿Qué almacenaría el registro de entrada del pin E/S?

Verificando el Sensor Binario de Luz


Verificar el circuito del sensor binario de luz es parecido a verificar el circuito de los
botones push del capítulo 3. Cuando el circuito se conecta a un pin E/S, el voltaje puede
estar arriba o debajo de voltaje de umbral de 1.4 V del BASIC Stamp, lo cual resulta en
un 1 o 0 y este lo mostrará la Terminal Debug.

Partes para el Circuito Analógico y el Sensor Binario de Luz


Un fototransistor
Un Resistor de 220 Ω (rojo-rojo-café)
Un Resistor de 10 K Ω (café-negro-naranja)
Un Resistor de 2 K Ω (rojo-negro-rojo)
Un Resistor de 4.7 K Ω (amarillo-violeta-rojo)
Un Resistor de 100 K Ω (café-negro-amarillo)
Dos alambres para puentes

Circuito Analógico y Sensor Binario de Luz


El circuito que muestra la figura 7 se comporta como un botón push controlado por
sombra.

La obscuridad hace que in2 = 0, y la iluminación hace que in2 = 1. Recuerde que un pin
de E/S direccionado como entrada no afecta al circuito que monitorea porque no
proporciona ni consume corriente. Esto hace al pin E/S y al resitor de 220 Ω
esencialmente invisible al circuito. Entonces, el voltaje resultante de los cálculos de
Midiendo Luz · Página 235

nuestro circuito de la sección anterior será el mismo con o sin el resistor de 220 Ω y el
pin E/S conectados.

9 Construya el circuito que muestra la Figura 7-20

Figrua 7-20 Diagrama Esquemático y de Alambrado del Circuito Analógico y Sensor Binario
de Luz.

Código de Prueba del Circuito Analógico y Sensor Binario de Luz


El Programa TestBinaryPhototransistor.bs2 es una versión modificada del programa
ReadPushButtonState.bs2 del Capítulo 3, Actividad # 2. Además del ajustar los
comentarios, un cambio al programa real es la línea DEBUG ? IN2 que antes era
DEBUG ? IN3 en el Programa Ejemplo porque el botón push estaba conectado al P3 en
lugar de P2.

9 Revise Capítulo 3, Actividad #2 (página 65).


9 Use el programa TestBinaryPhototransistor.bs2 de abajo para verificar que con
iluminación sobre el fototransistor genera un 1 con obscuridad y genera un 0.
Usted podría necesitar mucha iluminación. Si su habitación está iluminada y
genera un 0, inténtelo con luz solar o con una lámpara cerca. Un remedio
alternativo para poca iluminación es reemplazar el resistor de 10 K Ω por uno de
100 K Ω.
Página 236 · ¿Qué es un Microcontrolador?

' ¿Que es un Microcontrolador? - TestBinaryPhototransistor.bs2


' Verifique cada ¼ de segundo el circuito fototransistor estados de salida
binarios.

' {$STAMP BS2}


' {$PBASIC 2.5}

DO
DEBUG ? IN2
PAUSE 250
LOOP

Verificando la Resistencia en Serie


Vea los calculos de V = I x R al principio de esta actividad. Si el resistor en serie es1/5
del valor, el voltaje en el resistor será 1/5 del valor para las mismas condiciones de luz.
De igual manera, un resistor 10 veces mayor originará que el voltaje sea diez veces
mayor.

¿Qué hace esto en su circuito? Un resistor de 100 K Ω en lugar de un resistor de 10 K Ω


significa que el fototransistor sólo tiene que conducir un 1/10 de la corriente para que
llegue al voltaje de umbral del pin E/S del BASIC Stamp que es de 1.4 V y esto significa
que necesita menos luz para obtener un 1 binario en el registro de entrada del pin E/S.
Esto trabajaría como un sensor en un ambiente que se supone en obscuridad ya que será
más sensitivo a pequeñas cantidades de luz. En contraste, un resistor con 1/5 de su valor
significa que el fototransistor tiene que conducir 6 veces más corriente para obtener el
voltaje en el resistor para que cruce el voltaje de umbras de 1.4 V y esto significa que
requiere más luz para obtener un 1 binario en el registro de entrada del pin E/S. Entonces,
este circuito sería más adecuado para detectar luz más brillante.

9 Experimente con resistores de 2 K Ω, 4.7 K Ω, 10 K Ω y 100 K Ω, y compare


los cambios en sensitividad a la luz con cada resistor.

Su Turno – Indicador de Nivel de Baja Iluminación


9 Escoja un resistor con la mejor respuesta a los cambios 1/0 con niveles de baja
iluminación en su área de trabajo.
9 Agregue la característica del LED del Capítulo 3, Actividad #3 para el circuito
de umbral del fototransistor.
9 Ponga algo entre el LED y el fototransistor para que el fototransistor no pueda
“ver” el LED. Esto elimina la posibilidad de cruce entre los dos dispositivos.
Midiendo Luz · Página 237

Modifique el programa para que haga que la luz parpadee cuando una sombre se proyecta
sobre el fototransistor.

ACTIVIDAD #6: POR DIVERSION – MIDA LUZ EXTERIOR CON UN LED


Anteriormente dijimos, el circuito presentado en la Actividad #1 se diseñó para
mediciones de luz en interiores.

¿Qué sucede si su aplicación necesita necesita tomar mediones del exterior? Una opción
pudiera ser encontrar un fototransistor que genere menos corriente para la misma
cantidad de luz. Otra opción pudiera ser encontrar uno de los otros sensores de luz en el
kit de ¿Qué es un Microcontrolador? son de forma diferente a los LED y se compartan
particularmente bien para mediciones de luz brillante.

Cuando una corriente eléctrica circula por el LED, este emite luz, ¿entonces, que piensas,
que sucede cuando la luz incide sobre el LED? Sí, así es, puede hacer que la corriente
eléctrica fluya a través de un circuito. La Figura 7-21, muestra un circuito LED para
detectar niveles de luz del exterior, y en otras áres muy brillantes. Mientras que el
fototransistor permite que la corriente circule porque se le aplicó una presión eléctrica
(voltaje), el LED se parece a un pequeño panel solar y crea su propio voltaje para
suministrar la corriente. Respecto al circuito de descarga RC, el resultado con un LED es
casi el mismo. El LED conduce más corriente y drena la carga del capacitor más
rápidamente cuando hay más luz, y conduce menos corriente y drena la carga del
capacitor menos rápidamente cuando hay menos luz.

Figura 7-21
Yellow
Esquemático del LED en
un Circuito de tiempo RC
Sensible a la Luz
Página 238 · ¿Qué es un Microcontrolador?

¿Por qué se conecta el LED en sentido inverso? En el Capítulo 2, el ánodo del LED se
conecto al resistor de 220 Ω y el cátodo se conectó a tierra. El circuito hace que el LED
emita luz como resultado de la corriente que circula en el LED cuando el voltaje se aplica al
circuito. Cuando la luz incide sobre el LED, este creará un pequeño voltaje que genera una
pequeña corriente en la dirección opuesta. Entonces, el LED tiene que conectarse en
sentido inverso para que la corriente que conduzca permita que el capacitor lo drene para
las mediciones de descarga de RC.

Partes para el Sensor de Luz LED


Un LED amarilla
Un LED verde
Un LED rojo
Un Resistor de 220 Ω (rojo-rojo-café)
Un alambre para puente

Circuito del Sensor de Luz LED


Una diferencia muy grande entre el LED y el fototransistor es que el LED conduce
mucho menos corriente para la misma cantidad de luz, esto hace que con luz muy
brillante el LED conduce suficiente corriente para descargar el capacitor rápidamente
pero lo suficiente para la medicón de RCTIME. Recuerde que el máximo tiempo de
medición que RCTIME puede medir es 65535 x 2 us = 131 ms. Entonces para
mediciones buenas de descarga de RC con el BASIC Stamp se requiere un capacitor
mucho muy pequeño. De hecho, el circuito trabaja mejor sin capacitor externo. El LED
tiene una capacitancia interna muy pequeña, llamada “capacitancia de unión”, y los clips
de metal en los que coloca componentes en su tablilla también tienen capacitancia.
Pensando, un capacitor son dos placas separadas por aislante llamado dieléctrico.
Entonces las placas de metal dentro de su tablilla separadas por plástico y aire forman un
capacitor. La combinación de la capacitancia de unión del LED, y la capacitancia de los
clips de su tablilla hacen que usted pueda usar el LED sin ningún capacitor externo, como
lo muestra la Figura 7-22.

Construya el circuito mostrado en la Figura 7-22 y 7-23, usando el LED amarillo.


¡Asegúrese de observar la polaridad mostrada en la figuras!
Midiendo Luz · Página 239

Figura 7-22
Esquemático del Circuito
LED RCTIME

Flat spot and


shorter cathode pin Figura 7-23
Diagrama de alambrado
del Circuito LED RC
TIME

Longer anode pin

Verificando el Sensor de Luz LED con Código


El circuito LED que sensa la luz puede verificarse en una habitación bien iluminada o en
exteriores durante el día. En habitaciones con poca iluminación los tiempos medidos no
exceden a 65535 y en este caso RCTIME almacenará cero en la variable “result”. Para la
mayoría de situaciones, el código es the mismo de la Actividad #1, del programa
TestPhototransistor.bs2.

Si está en una habitación bien iluminada trate esto:

9 Ejecute el programama TestPhototransistor.bs2 de la Actividad #1.


9 Dirija el LED a la fuente de luz más brillante volteando su tablilla hacia la luz.
9 Gradualmente gire la tablilla de la fuente de luz más brillante de la habitación, el
valor que muestra la Terminal Debug deberá ser mayor conforme la luz
disminuye.
Página 240 · ¿Qué es un Microcontrolador?

Si tiene una lámpara brillante trate esto:

9 Ejecute el programa TestPhototransistor.bs2.de la Actividad #1.


9 Elimine las fuentes de luz más brillantes como la luz del sol de la ventana.
9 Encienda la lámpara y apúntela hacia la parte superior del LED a una distancia
de 10 cm. Si es posible, apague algunas de las lámparas fluorescentes para
disminuir los niveles de luz ambiente.
9 Observe las mediciones que muestra la Terminal Debug conforme usted
gradualmente incrementa la distancia de la lámpara de la parte superior del LED.
Esto le permitirá que usted determina la distancia de la lámpara del LED.

Si usted está en una habitación que tiene sólo lámparas fluorescentes sin fuentes de luz
brillantes:

Ejecute el programa TestPhototransistor.bs2 de la Actividad #1.


Elimina la mayoría de las fuentes brillantes de luz como rayos que entran por la ventana.
Si es posible, apague algunas de las lámparas fluorescentes para que los niveles de luz
sean bajos.

Apunte el LED hacia el monitor de su computadora hasta que casi toque el monitor y vea
si la mediones le permiten distinguir entre varios colores del monitor.

Pruebas en el Exterior
9 Ejecute el programa StoreLightMeasurements InEeprom.bs2 de la Actividad #2.
9 Desconecte el cable de programación y lleve su tablilla al exterior.
9 Dirija su tablilla para el LED apunte directamente al sol.
9 Presione y suelte el botón de Reset para reiniciar el programa de Adquisición de
Datos.
9 Gire gradualmente su tablilla respecto al sol durante 2 ½ minutos.
9 Regrese su tablilla al interior y reconectela a la PC.
9 Ejecute el programa ReadLightMeasurementsFromEeprom.bs2 y examine las
mediciones de luz. Como usted giró gradualmente el LED respecto al sol, las
mediciones sucesivas deberán ser mas grandes.

Su Turno - ¿Puede el BASIC Stamp indicarle si la luz es Verde o Roja?


En la Figura 7-2, el verde esta en la mitad del espectro y el rojo a la derecha. Si usted baja
la versión PDF a color de este libro de www.parallax.com usted puede colocar el verde y
el rojo en su pantalla y registrar las mediciones de luz del espectro de colores. Entonces,
Midiendo Luz · Página 241

al comparar las mediones más pequeñas de cada LED, y usted puede detectar si el LED
está enfrente del color verde o rojo de la pantalla.

9 Empiece con el circuito detector de luz con el LED verde de la Figura 7-22 y la
Figura 7-23.
9 Descargue la versión PDF de ¿Qué es un Microcontrolador? de
www.parallax.com/go/WAM.
9 Coloque el espectro de colores de la Figura 7-2 en su monitor y agrande la
imagen.
9 Con el programa TestPhototransistor.bse muestre las mediciones en la Terminal
Debug sostenga su tablilla para que el domo del LED verde apunte directamente
en el monitor sobre el espectro de colores. Para mejores resultados el domo del
LED casi debe tocar el monitor, y los niveles de luz de su habitación deben ser
mínimos.
9 Dislice el LED verde lentamente a lo largo de la barra del espectro que muestra
el monitor.y anote que color reporta las mediciones más pequeñas.
9 Repite esto con el LED rojo. ¿Reporto el LED rojo los valores de medición más
bajos cuando estaba sobre el color rojo del monitor, y el LED verde reportó sus
mediciones más bajas cuando estaba sobre el color verde del monitor?

Las mediciones más bajas del LED rojo deben ocurrir cuando está sobre el color rojo del
monitor, y las mediciones más bajas del LED verde deben ocurrir cuando estén sobre el
color verde del monitor.

RESUMEN
Este capítulo introdujo los sensores de luz y describió como se usan en una variedad de
productos. Diferentes sensores de luz detectan diferentes clases de luz, y sus hojas de
datos describen su sensibilidad en términos de longitud de onda. Este capítulo se enfocó
en el fototransistor, un dispositivo que controla la corriente de colector a emisor por la
cantidad de luz que incide en su base. Un fototransistor conduce porque luz puede
controlar la cantidad de corriente, la técnica para medir la posición de una perilla de un
potenciometro del capítulo 5 del circuito RC, también trabaja para medir la luz que incide
sobre el fototransistor. El tiempo que requiere un capacitor para perder su carga a través
del fototransistor resulta en la medición RCTIME que proporciona un número que
corresponde a la brillantez de la luz incidente en el fototransistor.

La Adquisición de Datos por almacenamiento de mediciones de luz en el módulo de la


memoria de programa EEPROM del BASIC Stamp, se introdujo con las instrucciones
WRITE y READ que se usaron para almacenar valores y retirar valores del módulo
Página 242 · ¿Qué es un Microcontrolador?

EEPROM del BASIC Stamp. El volumen de números involucrados en la Adquisición de


Datos puede ser dificil de analizar, pero al graficar los datos es más fácil ver patrones,
tendencias y eventos. Los datos adquiridos pueden transferirse a hojas de cálculo y
graficarse, y ciertas utilerias de graficación puede mostrarlas la Terminal Debug y
graficar los valores que el BASIC Stamp manda en vez de mostrarlos como texto.
También se desarrollón un ejemplo de aplicación de un Medidor de Luz y éste demostró
como se pueden usar las mediciones de luz para controlar otros procesos, en este caso, la
velocidad de un patrón circular de un indicador LED de 7 segmentos. Esta aplicación usó
subrutinas para realizar tres trabajos diferentes para la aplicación del medidor de luz.

El BASIC Stamp puede programarse para convertir la medición del tiempo de descarga
de un circuito RC a valores binarios usando instrucciones IF...THEN. Adicionalmente, el
programa puede tomar un rango de mediciones del tiempo de descarga de RC y aplicarle
histeresis al umbral “luces encendidas” en el rango de mediciones de obscuridad, y un
“luces apagadas” en el rango con mayor luz. Esto puede ayudar a prevenir oscilaciones
encendido/apagado que de otra forma podrían ocurrir cuando el sensor reporta obscuridad
y el dispositivo prede las luces en un área con luminosidad.

Sin histeresis, el dispositivo podría sensar la luz y apagar nuevamente las luces y repetir
este ciclo en form indefinida.

Una aproximación de hardware para sensar los estados de luz encendido/apagado es


aplicarle energía al fototransistor con un resistor en serie. Al estudiar la ley de Ohm
vimos que la cantidad de corriente que el fototransistor conduce afecta el voltaje del
resistor. Este voltaje variable puede conectarse a un pin E/S y generar un 1 binario si el
voltaje está arriba de 1.4 V que es el umbral de un pin E/S, o un 0 binario si el voltaje está
debajo del voltaje de umbral.

El LED (diodo emisor de luz) que emite luz cuando circula por él una corriente también
se comporta como un pequeño panel solar cuando le llega luz, y esto genera un pequeño
voltaje que a su vez puede hacer circular corriente en los circuitos. Las corrientes que
generan los LEDs son pequeñas pero suficientes para una combinación de la propia
capacitancia del LED y la capacitanci propia de los clips de la tablilla de experimentos
proporcionan suficiente capacitancia para la descarga de un circuito RC sin capacitor
externo. Mientras que el fototransistor del kit ¿Qué es un Microcontrolador? se comporta
mejor en ambientes interiores, el LED es grandioso para los ambientes exteriores y con
mediciones de luz brillante.
Midiendo Luz · Página 243

Preguntas
1. ¿Cuáles son algunos ejemplos de aplicaciones de alumbrado automático que
dependen de sensores de luz ambiente?
2. ¿Cuáles son algunos ejemplos de productos que responden a cambios en la
brillantes de luz ambiente?
3. ¿Qué rango de longitud de ondas tiene el espectro de luz visible?
4. ¿Cuáles son los nombres de las terminales del fototransistor, y cual de ellas
controla la cantidad de corriente que puede circular por el dispositivo?
5. ¿Qué significan las letras de EEPROM?
6. ¿Cuántos bytes puede almacenar el módulo EEPROM del BASIC Stamp?
¿Cuántos bits puede almacenar?
7. ¿Qué instrucción usa usted para almacenar un valor en EEPROM? ¿Qué
instrucción usar usted para retirar un valor de EEPROM? ¿Cuál de ellos requiere
una variable?
8. ¿Qué es una etiqueta?
9. ¿Qué es una subrutina?
10. ¿Qué instrucción se usa para llamar un subrutina? ¿Qué instrucción se usa para
terminar una subrutina?

Ejercicios
1. Dibuje el esquemático de un circuito de tiempo RC con fototransistor conectadoa
P5.
2. Modifique el programa TestPhototransistor.bs2 para que funciones en un circuito
conectado a P5 en lugar de P2.
3. Explique como debería modifica el programa LightMeter.bs2 para que el patrón
circular mostrado por el indicador LED de 7 segmentos giren en la dirección
opuesta.

Proyectos
1. Haga un pequeño prototipo de un sistema que automáticamente ciere las cortinas
cuando haya mucha luz y nuevamente las abra cuando disminuya la luz. Use el
servo como actuador mecánico. Sugerencia: Para el código usted puede agregar
dos instrucciones de control de servo al programa
PhototransistorAnalogToBinary.bs2, y cambiar la instrucción PAUSE 100 a
PAUSE 1. Asegúres que sigue las instrucciones en el texto para calibrar el área
de condiciones de luz antes de hacer la prueba.
2. Para un crédito adicional, refuerce su solución al Proyecto 1 incorporandole las
modificaciones de histéresis analizadas en la Actividad #5.
Página 244 · ¿Qué es un Microcontrolador?

Soluciones
Q1. Luces de carros, alumbrado de calles y luces de seguridad externa que
automáticamente se iluminan cuando hay obscuridad.
Q2. Pantallas de Laptops y cámaras con autoenfoque.
Q3. De 380 nm a 750 nm de acuerdo con la fígura 7-2.
Q4. Colector, base y emisor. La base controla la cantidad de corriente de emisor a
colector.
Q5. Memoria de Solo Lectura Electricamente Programable y Borrable.
Q6. 2048 bytes. 2048x8 = 16, 384 bits
Q7. WRITE para almacenar un valor; READ para retirar un valor. La instrucción
READ necesita una variable.
Q8. Etiqueta es un nombre que puede usarse para referirese a un lugar en un
programa con PBASIC.
Q9. Una subrutina es un pequeño segmento de código que hace cierto trabajo.
Q10.Se llama con GOSUB y se termina con RETURN

E1. Esquemático de la Figura 7-4 con el cambio de P2 a P5.

E2. Los cambios requeridos son muy similares a los que explicamos en la página
202.
DO
HIGH 5
PAUSE 100
RCTIME 5, 1, time
DEBUG HOME, "time = ", DEC5 time
LOOP

E3. Para ir en la dirección opuesta, los patrones deben mostrarse en orden inverso.
Esto puede hacerse conmutando los patrones dentro de la instrucción LOOKUP,
o invirtiendo el orden de obtenerlos de look up. Estas son dos soluciones hechas
con subrutinas alternadas Update-Display.
Midiendo Luz · Página 245

Solucion 1 Solucion 2

Update_Display: Index = 5 '<<Add after Index variable


IF index = 6 THEN index = 0
' BAFG.CDE Update_Display:
LOOKUP index, [ %01000000, ' BAFG.CDE
%10000000, LOOKUP index, [ %01000000,
%00000100, %10000000,
%00000010, %00000100,
%00000001, %00000010,
%00100000 ], %00000001,
OUTH %00100000 ], OUTH
index = index + 1 IF (index = 0) THEN
RETURN index = 5
ELSE
index = index - 1
ENDIF
RETURN

P1. El fototransistor de la Figura 7-4, el esquemático del servo para su tablilla del
Capítulo 4, Actividad #1.

' ¿Que es un Microcontrolador - Ch07Prj01_Blinds_Control.bs2


' Control de la Posicion del servo con luz.

' {$STAMP BS2}


' {$PBASIC 2.5}

valMax CON 4000


valMin CON 100
time VAR Word

PAUSE 1000

DO
HIGH 2
PAUSE 1 ' PAUSA 100 -> PAUSA 1
RCTIME 2, 1, time
DEBUG HOME, "time = ", DEC5 time

time = time MAX valMax MIN valMin

IF time > (valMax - valMin) / 2 THEN


DEBUG CR, "Abre las cortinas " ' Modifica
PULSOUT 14, 500 ' Agrega
ELSE
DEBUG CR, "Cierra las cortinas" ' Modifica
PULSOUT 14, 1000 ' Agrega
ENDIF
LOOP
Página 246 · ¿Qué es un Microcontrolador?

P2. Agregando la Funcion Histeresis para el crédito adicional:

' ¿Que es un Microcontrolador? - Ch07Prj02_Blinds_Control_Extra.bs2


' Control de posición del servo con luz incluyendo histeresis.

' {$STAMP BS2}


' {$PBASIC 2.5}

valMax CON 4000


valMin CON 100

time VAR Word

PAUSE 1000

DO

HIGH 2
PAUSE 1 ' PAUSA 100 -> PAUSA 1
RCTIME 2, 1, time
DEBUG HOME, "time = ", DEC5 time

time = time MAX valMax MIN valMin

IF time > (valMax - valMin) / 4 * 3 THEN


DEBUG CR, "Abre las cortinas " ' Modifica
PULSOUT 14, 500 ' Agrega
ELSEIF time < (valMax - valMin ) / 4 THEN
DEBUG CR, "Cierra las cortinas" ' Modifica
PULSOUT 14, 1000 ' Agrega
ENDIF

LOOP
Midiendo Luz · Página 247
Página 248 · ¿Qué es un Microcontrolador?

Capítulo 8: Frecuencia y Sonido


SU DÍA Y LOS BEEPS ELECTRÓNICOS
Estos son algunos ejemplos de beeps que usted puede oir durante un día normal: El beep
del horno de microondas cuando termina de cocinar su comida. El teléfono celular toca
diferentes tonos de beeps de canciones para llamar su atención que está recibiendo una
llamada. El cajero automático emite beeps para recordarle que no olvide su tarjeta. La
caja registradora de la tienda emite beeps para decirle a la cajera que el código de barras
de los abarrotes que pasó sobre el escaner ya lo registró. Algunas calculadoras emiten
beeps cuando se presionan incorrectamente las teclas. Usted empezó su día con los beeps
de un reloj despertador.

MICROCONTROLADORES, BOCINAS Y SEÑALES APAGADO/


ENCENDIDO
Todos los beeps que usted oye durante su rutina diaria los generan microcontroladores
conectados a bocinas. El microcontrolador crea estos beeps mandando señales rápidas de
apag/enc a varios tipos de bocinas. La velocidad de estas señales se llama frecuencia y
determina el tono del beep. Cada vez que una señal apag/enc se repite a sí misma se llama
ciclo. Usted verá frecuentemente que al número de ciclos por segundo se le llama hertz y
se abrevia Hz. Por ejemplo, una de las frecuencias más comunes de los beeps que ayudan
a las máquinas a llamar su atención es 2 kHz. Esto significa que las señales high/low se
repiten 2000 veces por segundo.

Presentando a las Bocinas Piezoeléctricas


En esta actividad usted experimentará mandando una variedad de señales a una común,
pequeña y barata bocina lllamada bocina piezoeléctrica. A una bocina piezoeléctrica
comunmente se le llama bocina piezo o zumbador piezo. Su símbolo esquemático y su
dibujo lo muestra la Figura 8-1.

Figura 8-1
Bocina Piezoeléctrica. Dibujo y
símbolo esquemático.
Frequencia y Sonido · Página 249

ACTIVIDAD #1: CONSTRUYENDO Y VERIFICANDO LA BOCINA


En esta actividad usted contruirá y verificará el circuito de la bocina piezoeléctrica.

Partes del Circuito de la Bocina


Una bocina piezoeléctrica
Dos cables para puentes.

Construyendo el Circuito de la Bocina Piezoeléctrica.


La terminal negativa de la bocina piezoeléctrica deberá conectarse a Vss, y la terminal
positiva deberá conectarse a un pin E/S. El BASIC Stamp deberá programarse para
mandar señales high/low a la terminal positiva de la bocina piezoeléctrica.

9 Si su bocina tiene un aislante quíteselo (no necesita lavarlo)


9 Construya el circuito que muestra la Figura 8-2
Vdd Vin Vss
X3

P15
P14
P13
P12
P11 Figura 8-2
P9 P10 +
P9
Circuito de la bocina
P8 piezoeléctrica, Diagrama
P7 esquemático y de
P6
P5 alambrado.
P4
Vss P3
P2
P1
P0
X2

Funcionamiento de la Bocina Piezoeléctrica


Cuando la cuerda de una guitarra vibra, causa cambios en la presión del aire. Estos
cambios en la presión del aire nuestro oido los detecta como un tono. Con cambios
rápidos en la presión del aire es mayor el tono, y para cambios lentos en la presión del
aire, menor es el tono. El elemento dentro de la caja de plástico de la bocina
piezoeléctrica se llama elemento piezoeléctrico. Cuando las señales high/low se aplican a
la terminal positiva de la bocina, el elemento piezoeléctrico vibra, y genera cambios en la
presión del aire como lo hace la cuerda de la bocina. Y como la cuerda de la bocina, su
Página 250 · ¿Qué es un Microcontrolador?

oido detecta los cambios en la presión del aire que genera la bocina piezoeléctrica, y
suena típicamente como un beep o un tono.

Programando el Control de la Bocina


La instrucción FREQOUT es una forma conveniente de mandar señales high/low a la
bocina para que haga un sonido. El Manual del BASIC Stamp muestra que la sintaxis de
la instrucción es:

FREQOUT Pin, Duration, Freq1 {, Freq2}

Y como la mayoría de las otras instrucciones usadas en este libro, “Pin” es un valor que
usted puede usar para escoger que pin del BASIC Stamp usar. El argumento “Duration”
es un valor que le dice a la instrucción FRECOUT que tan largo, en milisengundos, es el
tono que deberá tocar. El argumento Freq1, se usa para fijar en hertz la frecuencia del
tono, , en hertz . Hay un argumento opcional Freq2 que puede usarse para tocar dos tonos
diferentes al mismo tiempo.
Así se manda un tono al pin E/S P9 que dura 1.5 segundos y tiene una frecuencia de 2
kHz:

FREQOUT 9, 1500, 2000

Programa Ejemplo: TestPiezoWithFreqout.bs2


Este Programa Ejemplo manda un tono de 2 kHz a la bocina en el pin E/S P9 durante 1.5
segundos. Usted puede usar la Terminal Debug para ver cuando la bocina emite beeps y
cuando se detiene.

9 Meta y corra el programa TestPiezoWithFreqout.bs2


9 Verifique que la bocina hacer un tono claramente audible durante el tiempo que
la Terminal Debug muestrael mensaje: “Tone sending” (Mandando Tono)

' ¿Que es un Microcontroladirr - TestPiezoWithFreqout.bs2


' Manda un tono a la bocina piezo usando la instrucción FREQOUT.

'{$STAMP BS2}
'{$PBASIC 2.5}

PAUSE 1000

DEBUG "Mandando Tono...", CR

FREQOUT 9, 1500, 2000

DEBUG "Hecho el Tono ."


Frequencia y Sonido · Página 251

Su Turno – Ajustando la Frecuencia y Duración


9 Guarde el programa TestPiezoWithFreqout.bs2 con un nombre diferente.
9 Trate algunos valores diferentes para los argumentos de Duration y Freq1.
9 Después de cada cambio, ejecute el programa y escriba el efecto.
9 Conforme el argumento Freq1 se hace mayor ¿sube o baja el tono? Trate valores
de 1500, 2000, 2500 y 3000 para responder este pregunta.

ACTIVIDAD #2: SONIDOS EN ACCIÓN


Algunos juguetes contienen microcontroladores que se usan para hacer “sonidos en
acción”. Sonidos en acción involucra cambiar rápidamente la frecuencia de la bocina.
Usted puede tambien obtener algunos efectos interesantes jugando juntos dos tonos
diferentes usando el argumento opcional Freq2 de la instrucción FREQOUT. Esta
actividad presenta ambas técnicas.

Programando Sonidos en Acción


La acción y aplicación de sonidos tiene tres componentes diferentes:

1. Pausa
2. Duración
3. Frecuencia

La pausa es el tiempo entre tonos, y usted puede usar la instrucción PAUSE para crearla.
La duración es la cantidad de tiempo que dura un tono, usted puede fijarla usando el
argumento Duration de la instrucción FREQOUT. La frecuencia determina la
característica del tono. A mayor frecuencia, mayor es el tono, a menor frecuencia menor
es el tono. Esto lo determina, naturalmente, el argumento Freq1 de la instrucción
FREQOUT.

Programa Ejemplo: ActionTones.bs2


El programa ActionTones.bs2 demuestra unas pocas combinaciones de pausa, duración y
frecuencia. Esta primer secuencia de tonos suena parecido a su reloj despertador
electrónico. El segundo suena como hablaría un robot de película familiar de ciencia
ficción. El tercero es un tipo de efecto de sonido que usted podría oir en un video juego
antiguo.

9 Meta y ejecute el programa ActionTones.bs2


Página 252 · ¿Qué es un Microcontrolador?

' ¿Que es un Microcontrolador - ActionTones.bs2


' Demuestra diferentes combinaciones de pausa, duracion, frecuencia
' pueden usarse para efectos de sonico.

'{$STAMP BS2}
'{$PBASIC 2.5}

duration VAR Word


frequency VAR Word

PAUSE 1000

DEBUG "Alarm...", CR
PAUSE 100
FREQOUT 9, 500, 1500
PAUSE 500
FREQOUT 9, 500, 1500
PAUSE 500
FREQOUT 9, 500, 1500
PAUSE 500
FREQOUT 9, 500, 1500
PAUSE 500

DEBUG "Robot reply...", CR


PAUSE 100
FREQOUT 9, 100, 2800
FREQOUT 9, 200, 2400
FREQOUT 9, 140, 4200
FREQOUT 9, 30, 2000
PAUSE 500

DEBUG "Hyperspace...", CR
PAUSE 100
FOR duration = 15 TO 1 STEP 1
FOR frequency = 2000 TO 2500 STEP 20
FREQOUT 9, duration, frequency
NEXT
NEXT

DEBUG "Done", CR

END

Funcionamiento de ActionTones.bs2
La rutina “Alarma” suena como un reloj despertador. Esta rutina toca un tono con una
frecuencia fija de 1.5 kHz que dura 1.5 segundos con retardos fijos entre tonos de 0.5
segundos. La rutina “Robot reply” usa varias frecuencia de duración corta.
Frequencia y Sonido · Página 253

La rutina “Hyperspace” no usa retardos, pero varia a la duración y la frecuencia. Usando


bucles FOR...NEXT para cambiar rapidamente las variables frecuencia y duración, usted
puede obtener algunos efectos interesantes de sonidos.

Cuando uno de los bucles FOR...NEXT se ejecuta dentro de otro bucle, se le llama
“bucles anidados”. Así trabaja el bucle anidado FOR...NEXT. La variable duración
empieza en 15, entonces el bucle For frequency...lo toma y manda frecuencias a la bocina
piezoeléctrica de 2000, luego 2020, luego 2040, etc, hasta llegar a 2500.

Cuando termina el bucle FOR frequency, el bucle For duration...solo se ha repetido una
de sus 15 ves. Entonces resta un 1 al valor de duración y repite el bucle For frequency
una y otra vez.

FOR duration = 15 TO 1
FOR frequency = 2000 TO 2500 STEP 15
FREQOUT 9, duration, frequency
NEXT
NEXT

Programa Ejemplo: NestedLoops.bs2


Para comprender mejor como funciona el bucle anidado FOR...NEXT, el programa
NestedLoops.bs2 usa la instrucción DEBUG para mostrar el valor de una versión menos
complicada de bucles anidados que utizamos en el programa ActionTones.bs2.

9 Meta y ejecute el programa NestedLoops.bs2.


9 Examine la salida de la Terminal Debug, y verifique que cambian las variables
duration y frequency cada vez que pasan por el bucle.

' ¿Que es un Microcontrolador? - NestedLoops.bs2


' Demonstración del funcionamiento del bucle anidad del programa
ActionTones.bs2.

'{$STAMP BS2}
'{$PBASIC 2.5}

duration VAR Word


frequency VAR Word

PAUSE 1000

DEBUG "Duration Frequency", CR,


"-------- ---------", CR
Página 254 · ¿Qué es un Microcontrolador?

FOR duration = 4000 TO 1000 STEP 1000


FOR frequency = 1000 TO 3000 STEP 500
DEBUG " " , DEC5 duration,
" ", DEC5 frecuencia, CR
FREQOUT 9, duration, frecuencia
NEXT
DEBUG CR
NEXT

END

Su Turno – Más Efectos de Sonido


Hay muchas formas bonitas e ilimitadas que al modificar ActionTones.bs2 genere
diferentes combinaciones de sonido. Esta es una modificación a la rutine “Hyperspace”.

DEBUG "Hyperspace jump...", CR


FOR duration = 15 TO 1 STEP 3
FOR frequency = 2000 TO 2500 STEP 15
FREQOUT 9, duration, frequency
NEXT
NEXT
FOR duration = 1 TO 36 STEP 3
FOR frequency = 2500 TO 2000 STEP 15
FREQOUT 9, duration, frequency
NEXT
NEXT

9 Guarde su Programa Ejemplo con el nombre ActionTonesYourTurn.bs2.


9 Alégrese con esta y otras modificaciones de su propia creación.

Dos Frecuencias al Mismo tiempo


Usted puede tocar dos frecuencias diferentes al mismo tiempo. Recuerde la sintaxis de la
instrucción FREQOUT de la Actividad #1.

FREQOUT Pin, Duration, Freq1 {, Freq2}

Usted puede usar el argumento opcional Freq2 para tocar dos frecuencias con una sola
instrucción FREQOUT. Por ejemplo, usted puede tocar 2 kHz y 3 kHz de la siguiente
forma:

FREQOUT 9, 1000, 2000, 3000


Frequencia y Sonido · Página 255

Cada tono de teclado es también un ejemplo de dos frecuencias juntas combinadas. En


Telecomunicaciones a esto se le llama DTMF (Dual Tone Multi Frequency) Frecuencia Dual
Muti Tono. En PBASIC también hay una instrucción llamada DTMFOUT que esta diseñada
justamente para mandar tonos de teléfono. Para ejemplos vea esta instrucción en el Manual
BASIC Stamp o en Ayuda.

Programa Ejemplo: PairsOfTones.bs2


Este Programa Ejemplo demuestra la diferencia en tono cuando tocó juntas 2 kHz y 3
kHz. También demuestra un fenomeno interesante que ocurre cuando usted suma dos
ondas de sonida que están muy cerca en frecuencia. Cuando usted toca 2000 Hz y 2001
Hz al mismo tiempo el tono entra y sale una vez cada segundo (a un frecuencia de 1 Hz).
Si usted toca 2000 Hz y 2002 Hz, el tono entra y sale dos veces por segundo (2Hz) y así
sucesivamente.

Batido es cuando dos tonos muy cercanos en frecuencia se tocan juntan originando que el
tono que usted oye entra y salga. La frecuencia de ese desvanecimiento es la diferencia
entre las dos frecuencias. Si la diferencia es 1 Hz, el tono entra y sale a 1 Hz. Si la
diferencia es 2 Hz, el tono entra y sale a 2 Hz.
Las variaciones en la presión del aire que hace la bocina piezoeléctrica se llaman “ondas de
sonid” Cuando el tono es más grabe, las variaciones en la presión del aire causadas por las
dos frecuencias se agregan una a otra (a esto se le llama superposición). Cuando el tono
esta en lo más quieto , las variaciones en la presión del aire se cancelan unas a otras (a
esto se se llama interferencia).

9 Meta y ejecute el programa PairsOfTones.bs2.


9 De un vistaso a la Terminal Debug cuando están tocando los tonos, y observe los
efectos diferentes que se obtienen al mezclar los tonos diferentes.

' ¿Que es un Microcontrolador - PairsOfTones.bs2


' Demostación de algunos de los efectos que ocurren cuando mezcla dos tonos.

'{$STAMP BS2}
'{$PBASIC 2.5}

PAUSE 1000

DEBUG "Frequency = 2000", CR


FREQOUT 9, 4000, 2000

DEBUG "Frequency = 3000", CR


FREQOUT 9, 4000, 3000

DEBUG "Frequency = 2000 + 3000", CR


FREQOUT 9, 4000, 2000, 3000
Página 256 · ¿Qué es un Microcontrolador?

DEBUG "Frequency = 2000 + 2001", CR


FREQOUT 9, 4000, 2000, 2001

DEBUG "Frequency = 2000 + 2002", CR


FREQOUT 9, 4000, 2000, 2002

DEBUG "Frequency = 2000 + 2003", CR


FREQOUT 9, 4000, 2000, 2003

DEBUG "Frequency = 2000 + 2005", CR


FREQOUT 9, 4000, 2000, 2005

DEBUG "Frequency = 2000 + 2010", CR


FREQOUT 9, 4000, 2000, 2010

DEBUG "Hecho", CR
END

Su Turno – Optimización del Código


El programa PairsOfTones.bs2 se escribió para demostrar fenómenos interesantes que
suceden cuando usted toca al mismo tiempo dos frecuencias diferentes usando el
argumento opcional Freq2 de la instrucción FREQOUT. Sin embargo, es muy ineficiente.

9 Modifique el programa PairsOfTones.bs2 para que recicle el argumento Freq2 en


el rango de 2001 a 2005 usando una variable tamaño “word” y un bucle.

ACTIVIDAD #3: NOTAS MUSICALES Y CANCIONES SENCILLAS


La Figura 8-3 muestra las 25 teclas más a la derecha del teclado de un piano. Tambien
muestra las frecuencias a las cuales vibra cada alambre dentro del piano cuando usted la
golpea.
Frequencia y Sonido · Página 257

Figura 8-3 Teclas del Piano a la derecha y sus Frecuencias

Las teclas y sus notas correspondientes están marcadas C6 hasta C8. Estas teclas están
separadas en dos grupos de 12, 7 son teclas blancas y 5 son teclas negras. La secuencia de
notas se repite en si misma cada 12 teclas. Notas de la misma letra están relacionadas con
la frecuencia que se dobla cada octava mayor. Por ejemplo, C7 es dos veces la frecuencia
de C6, y C8 es el doble de C7. De igual forma, si va una octava hacia abajo, la frecuencia
será la mitad del valor, por ejemplo, A6 es la mitad de frecuencia de A7.

Si usted ha escucha a un cantante practicar sus notas cantando el Solfeo, “Do Re Mi Fa


Sol La Si Do,” el cantante está intentando igualar la notas que usted obtiene de golpear
las teclas blancas del teclado de un piado. Estas teclas blancas se llaman teclas naturales,
y el nombre octava se relaciona al doblar la frecuencia con cada ocho teclas naturales. La
tecla negra del piano se le llama Bemol o Sostenido. Por ejemplo la tecla negra entre C y
D se llama C Bemol (C#)o D Sostenido El nombre x o y depende de la pieza particular
que se está tocado, y las reglas de esto pertenecen a las lecciones de música.

Programando Notas Musicales


La instrucción FREQOUT también es útil para notas musicales. Programar el BASIC
Stamp para tocar música usando un bocina piezo involucra seguir una variedad de reglas
Página 258 · ¿Qué es un Microcontrolador?

usadas al tocar música usando otro instrumento musical. Estas reglas se aplican a los
mismos elementos que se usaron para hacer efectos de sonido: frecuencia, duración y
pausa. El siguiente Programa Ejemplo toca algunas de las frecuencias de las notas
musicales en la bocina piezo cada una con una duración de medio segundo.

Programa Ejemplo: DoReMiFaSolLaTiDo.bs2


9 Meta y ejecute el programa DoReMiFaSolLaTiDo.bs2

' ¿Que es un Microcontrolador - DoReMiFaSolLaTiDo.bs2


' Manda notas de una octava medio segundo usando una bocina piezo.
'{$STAMP BS2}
'{$PBASIC 2.5}
PAUSE 1000

'Solfege Tone Note

DEBUG "Do...", CR: FREQOUT 9,500,1047 ' C6

DEBUG "Re...", CR: FREQOUT 9,500,1175 ' D6

DEBUG "Mi...", CR: FREQOUT 9,500,1319 ' E6

DEBUG "Fa...", CR: FREQOUT 9,500,1396 ' F6

DEBUG "Sol..", CR: FREQOUT 9,500,1568 ' G6

DEBUG "La...", CR: FREQOUT 9,500,1760 ' A6

DEBUG "Ti...", CR: FREQOUT 9,500,1976 ' B6

DEBUG "Do...", CR: FREQOUT 9,500,2093 ' C7

END

Su Turno – Notas Bemol/Sostenido


Use las frecuencias mostradas en la Figura 8-3 para agregar las cinco notas
bemol/sostenido al programa DoReMiFaSolLaTiDo.bs2. Modifique su programa para
que toque la siguiente octava superior. Sugerencia: Haga sus operaciones y use la
operación * 2 depués de cada argumento Freq1. Por ejemplo, FREQOUT 9, 500, 1175 *
2 esto multiplicara D6 por 2 y le dará a usted D7, que es la nota D en la séptima octava.
Frequencia y Sonido · Página 259

Almacenando y Retirando Secuencias de Notas Musicales


Una forma de guardar notas musicales es almacenandola en el módulo EEPROM del
BASIC Stamp. Aunque usted podría usar algunas instrucciones WRITE para hacer esto,
una mejor forma es usar la directiva DATA. Esta es la sintaxis para la directiva DATA:

{Symbol} DATA {Word} DataItem {, {Word} DataItem, … }

Este es un ejemplo para usar la directiva DATA para almacenar los caracteres que
corresponden a las notas musicales.

Notes DATA "C","C","G","G","A","A","G"

Usted puede usar la instrucción READ para accesar estos caracteres. La letra “C” se
localiza en la dirección Notes + 0, la segunda letra “C” se localiza en Notes + 1.
Entonces, hay una letra “G” en Notas + 2, y así sucesivamente. Por ejemplo si usted
desea cargar la última letra “G” en una variable byte llamada noteLetter, use la
instrucción:
READ Notes + 6, noteLetter

Usted también puede almacenar listas de números usando la directiva DATA. Los valores
de Frecuencia y duración que usa el BASIC Stamp para las notas musicales necesitan
estar almacenadas en variables tamaño “word” porque son generalmente mayores a 255.
Así es como se hace con la directiva DATA.

Frequencies DATA Word 2093, Word 2093, Word 3136, Word 3136,
Word 3520, Word 3520, Word 3136

Como cada uno de estos valores ocupa dos bytes, para accesarlos con la instrucción
READ es diferente a accesar caracteres. El primer 2093 está en Frequencies + 0, pero el
segundo 2093 se localiza en Frequencies + 2. El primer 3136 se localiza en Frecuencies
+4, y el segundo 3136 se localiza en Frequencies + 6.

Los valores en la directiva DATA Frequencies corresponde con notas musicales in la


directiva Notes DATA directive.

Este es un bucle FOR...NEXT que coloca Notes DATA en una variable llamada
noteLetter, luego coloca Frequencies DATA en una variable llamada noteFreq.

FOR index = 0 to 6
Página 260 · ¿Qué es un Microcontrolador?

READ Notes + index, noteLetter


READ Frequencies + (index * 2), Word noteFreq
DEBUG noteLetter, " ", DEC noteFreq, CR
NEXT

¿Qué hace (index * 2)?


Cada valor almacenado en la directiva Frequencies DATA toma un “word” (dos bytes),
mientras cada carácter en la directiva Notes DATA solamente toma un byte. El valor de
index se incrementa por 1 cada vez en el bucle FOR...NEXT. Esto está bien al accesar los
caracteres de las notas usando la instruccón READ Notes + index, noteLetter. El problema
es que para cada uno de los bytes en Notes, la variable index necesita apuntar dos veces
hacia debajo de la lista Frequencies. La instrucción READ Frequencies + (index * 2), Word
noteFreq, se encarga de esto.

El siguiente Programa Ejemplo almacena notas y duraciones usando DATA, y usa la


instrucción FREQOUT para tocar cada frecuencia de nota en una duración específica. El
resultado es las primeras pocas notas de la canción de niños “Twinkle Twinkle Little
Star.” {XW” Twinkle Twinkle Little Star ”}

La canción “El Alfabeto” la usan los niños para memorizar las letras “ABCDs”y usa las
mismas notas de “Twinkle Twinkle Little Star.”

Programa Ejemplo: TwinkleTwinkle.bs2


Este programa ejemplo demuestra como usar la directiva DATA para almacenar listas y
como usar la instrucción READ para accesar los valores de las listas.

9 Meta y ejecute el programa TwinkleTwinkle.bs2


9 Verifique que el sonido de las notas se parecea la canción “Twinkle Twinkle
Little Star.”
9 Use la Terminal Debug para verificar que trabaja como se espera.

' ¿Que es un Microcontrolador? - TwinkleTwinkle.bs2


'Toca las primeras siete notas de la canción Twinkle Twinkle Little Star.

'{$STAMP BS2}
'{$PBASIC 2.5}

Notes DATA "C","C","G","G","A","A","G"

Frequencies DATA Word 2093, Word 2093, Word 3136, Word 3136,
Word 3520, Word 3520, Word 3136
Frequencia y Sonido · Página 261

Durations DATA Word 500, Word 500, Word 500, Word 500,
Word 500, Word 500, Word 1000

index VAR Nib


noteLetter VAR Byte
noteFreq VAR Word
noteDuration VAR Word

PAUSE 1000

DEBUG "Note Duration Frequency", CR,


"---- -------- ---------", CR

FOR index = 0 TO 6

READ Notes + index, noteLetter


DEBUG " ", noteLetter

READ Durations + (index * 2), Word noteDuration


DEBUG " ", DEC4 noteDuration
READ Frequencies + (index * 2), Word noteFreq
DEBUG " ", DEC4 noteFreq, CR

FREQOUT 9, noteDuration, noteFreq

NEXT

END

Su Turno – Agregando y Tocando Más Notas


Este programa tocó las primeras siete notas de Twinkle Twinkle Little Star. Las sílabas
son: “Twin-kle twin-kle lit-tle star” La siguiente frase de la canción dice “How I wond-er
what yor are” y sus notas son F, F, E, E, D, D, C. E igual que la primera frase, se sostine
dos veces que las otras notas. Para agregar esta frase a la canción del programa
TwinkleTwinkle.bs2, usted necesita expander apropiadamente cada directiva DATA. No
olvide cambiar el bucle FOR...NEXT para que vaya de 0 a 13 en lugar de 0 a 6.

9 Modifique el programa TwinkleTwinkle.bs2 para que toque las dos primeras


frases de la canción en lugar de solamente la primera frase.

ACTIVIDAD #4: MÚSICA CON MICROCONTROLADOR


Las duraciones de las notas en una hoja de música no se graba en terminos de
milisegundos. En lugar de eso se decriben como notas: entero, mitad, cuarto, octavos,
diecisesavos, y treinta y dosavos. Como su nombre lo sugiere, media nota dura la mitad
de un entero, Un cuarto de nota dura la cuarta parte de tiempo de lo que dura una nota
entera. ¿Cuánto dura una nota entera? Depende de la pieza de música que se está tocando.
Página 262 · ¿Qué es un Microcontrolador?

Una pieza se puede tocar en un tempo que hace que una nota entera dure cuatro segundo,
en otra pieza la nota entera dura dos segundos y otras pueden tener otra duración.

Descansos son los tiempos entre notas que no se tocan tonos. La duración de los
descansos tambien se miden en entero, mitad, cuarto, octavo, dieciseisavo y treinta y
doseavos.

Más de Musica con microcontrolador. Después de completar esta actividad, usted estará
listo para aprender como escribir códigos musicales en PBASIC a partir de las hojas de
música. Vea el tutorial Tocando música de partitura con la bocina piezo, y su primer video
en www.parallax.com/go/WAM.

Un Sistema Mejorado para Almacenar y Retirar Música


Usted puede escribir programas que almacenen dos veces más música en su BASIC
Stamp usando bytes en lugar de words en sus directivas DATA. Usted puede también
modificar su programa para hacer fácil de leer las notas musicales usando una de las
convenciones más comunes para las notas y su duración. Esta actuvidad empezará
presentado como almacenar información musical en una forma que relacione los
conceptos de notas, duración y descansos o silencios. Tambien se presentará el Tempo, y
lo analizará en la siguiente actividad.

Esta es una de las directivas DATA que almacena notas musicales y duraciones para el
siguiente Programa Ejemplo. Cuando se toque se parecerá a la canción “Martinillo”. Solo
se almacenarán los caracteres de las notas en la directiva Notes DATA porque las
instrucciones LOOKUP y LOOKDOWN se usarán para acoplar letras con sus
correspondientes frecuencias.
Notes DATA "C","D","E","C","C","D","E","C","E","F",
"G","E","F","G","Q"

Durations DATA 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
2, 4, 4, 2

WholeNote CON 2000

El primer número en la directiva Durations DATA le indica al programa cuanto debe


durar la primera nota de la directiva Notes Data. La segunda duración es para la segunda
nota, y así sucesivamente. Las duraciones no están en terminos de milisegundos. En lugar
de eso son números mucho más pequeños que pueden almacenarse en bytes, entonces no
Frequencia y Sonido · Página 263

hay prefijo Word en la directiva DATA. Comparado con almacenar valores en terminos
de milisegundos, estos números se relacionan más con la partitura.

Esta es una lista de lo que significa cada duración.

1 nota entera
2 media nota
4 cuarto de nota
8 octavo de nota
16 dieciseisavo de nota
32 treintaydosavo de nota

Después que se lee cada valor de la directiva Durations DATA, se divide entre el valor de
WholeNote para obtener la Duration usada en la instrucción FREQOUT. La cantidad de
tiempo que dura cada nota depende del tempo de la canción. Un tempo rápido significa
que cada nota dura menos tiempo, mientras que un tempo lento significa que cada nota
dura más tiempo. Como todas las duraciones de las notas son fracciones de una nota
entera, usted puede usar la duración de la nota entera para fijar el tempo.

¿Qué significa “Q” en Notes DATA? “Q” se usa para “salir” y DO UNTIL...LOOP
verifica “Q” cada vez en el bucle y lo repetirá hasta que lo encuentra.
¿Cómo toco un silencio? Usted puede insertar un silencio entre notas insertando una “p”. La
sección “Su Turno” tiene las primeras pocas notas de la 5ª. Sinfonía de Beethoven que
tiene un silencio.
¿Cómo toco notas bemol/sostenido? El programa NotesAndDurations.bs2 tiene valores en
las tablas lookup para notas bemol/sostenido. Cuando usted usa con letra minúscula, usted
toca la nota bemol. Por ejemplo, si usted desea tocar B-sostenido, use “b” en lugar de “B”.
Recuerde que esta tiene la misma frecuencia que A-bemol.

Programa Ejemplo: NotesAndDurations.bs2


9 Meta y ejecute el programa NotesAndDurations.bs2
9 ¿Cómo se oye?
Página 264 · ¿Qué es un Microcontrolador?

' ¿Que es un Microcontrolador - NotesAndDurations.bs2


' Toca las primeras notas de Martinillo.

'{$STAMP BS2}
'{$PBASIC 2.5}

DEBUG "Program Running!"

Notes DATA "C","D","E","C","C","D","E","C","E","F",


"G","E","F","G","Q"

Durations DATA 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
2, 4, 4, 2

WholeNote CON 2000

index VAR Byte


offset VAR Nib

noteLetter VAR Byte


noteFreq VAR Word
noteDuration VAR Word

DO UNTIL noteLetter = "Q"

READ Notes + index, noteLetter

LOOKDOWN noteLetter, [ "A", "b", "B", "C", "d",


"D", "e", "E", "F", "g",
"G", "a", "P", "Q" ], offset

LOOKUP offset, [ 1760, 1865, 1976, 2093, 2217,


2349, 2489, 2637, 2794, 2960,
3136, 3322, 0, 0 ], noteFreq

READ Durations + index, noteDuration

noteDuration = WholeNote / noteDuration

FREQOUT 9, noteDuration, noteFreq

index = index + 1

LOOP
END

Funcionamiento de NotesAndDurations.bs2
Las directivas Notes y Durations DATA se analizaron antes del programa. Estas
directivas combinadas con la constante WholeNote se usaron para almacenar todos los
datos musicales usados por el programa.
Frequencia y Sonido · Página 265

Abajo se muestran las declaraciones para las cinco variables usadas en el programa.
Incluso aunque ya no usa el bucle FOR...NEXT para accesar los datos, ahí todavía tiene
que estar una variable (index) que mantiene el ajuste por el cual entra DATA que está
siendo leida por Notes y Durations. La variable offset se usa con las instrucciones
LOOKUP y LOOKDOWN para seleccionar un valor particular. La variable noteLetter
almacena un carácter que accesa la instrucción READ. Las instrucciones LOOKUP u
LOOPDOWN se usan para convertir este carácter en un valor de frecuencia. Este valor se
almacena en la variable noteFreq y se usa como argumento Freq1 de la instrucció
FREQOUT. La variable noteDuration se usa en la instrucción READ para recibir un
valor de Durations DATA. Y también se usa para calcular el argumento Duration para la
instrucción FREQOUT.

index VAR Byte


offset VAR Nib

noteLetter VAR Byte


noteFreq VAR Word
noteDuration VAR Word

El bucle principal se mantiene en ejecución hasta que la letra “Q” se lee de NotesDATA.

DO UNTIL noteLetter = “Q”

Una instrucción READ obtiene un caracter de NotesDATA, y lo almacena en la variable


noteLetter. Entonces, la variable noteLetter se usa en la instrucción LOOKUP para fijar el
valor de la variable offset. Recuerde que offset almacena un 2 si se detecta “b”, un 2 si se
detecta “B”, un 3 si se detecta “C” y así sucesivamente.

Entonces este valor de offset se usa en una instrucción LOOKUP to para calcular cual
deberá ser el valor de la variable noteFreq. Si offset es 1, noteFreq será 1865, si offset es
2, noteFreq será 1876, si offset es 3, noteFreq es 2093 y así sucesivamente.
READ Notes + index, noteLetter

LOOKDOWN noteLetter, [ "A", "b", "B", "C", "d",


"D", "e", "E", "F", "g",
"G", "a", "P", "Q" ], offset

LOOKUP offset, [ 1760, 1865, 1976, 2093, 2217,


2349, 2489, 2637, 2794, 2960,
3136, 3322, 0, 0 ], noteFreq
Página 266 · ¿Qué es un Microcontrolador?

La frecuencia de la nota se ha determinado, pero todavía tiene que calcularse la duración.


La instrucción READ usa el valor de “index” para colocar un valor de Duration DATA a
NoteDuration.

READ Duration + index, noteDuration

Entonces, noteDuration es iguala a la constante WholeNote dividida entre noteDuration.


Si noteDuration empieza en 4 de la instrucción READ, se convierte en 2000/4 = 500. Si
noteDuration es 8, se convierte en 2000/8 = 250.
noteDuration = WholeNote / noteDuration

Ahora que ya se han determinado los valores de noteDuration y noteFrequ, la instrucción


FREQOUT toca la nota.
FREQOUT 9, noteDuration, noteFreq

Cada vez que pasa por el bucle principal, el valor de “index” se incrementa por uno.
Cuando el bucle principal regresa al principio, la primer acción que el programa hace es
leer la siguiente nota , usando la variable “index”.

index = index + 1
LOOP

Su Turno – Experimentando con Tempo y una Canción Diferente


La longitud de tiempo que cada nota pierde se relaciona con el tempo. Usted puede
cambiar el tempo ajustando la constante WholeNote. Si usted la incrementa a 2250, el
tempo decrecerá, y la canción se reproducirá más despacio. Si usted disminuye la
constante a 1750, el tempo aumentará y la canción se reproducirá más rápido.

9 Guarde el programa NotesAndDurations.bs2 con el nombre


NotesAndDurationsYourTurn.bs2
9 Modifique el tempo del programa NotesAndDurationsYourTurn.bs2 ajustando
el valor de WholeNote. Pruebe valores de 1500, 1750, 2000 y 2250.
9 Ejecute el programa después de cada modificación, y elija cual se escucha mejor.

Meter los datos musicales es mucho más fácil cuando todo lo que tiene que hacer es
grabar notas y duraciones. Estas son las primeras ocho notas de la Quinta Sinfonía de
Beethoven.

Notes DATA "G","G","G","e","P","F","F","F","D","Q"


Frequencia y Sonido · Página 267

Durations DATA 8, 8, 8, 2, 8, 8, 8, 8, 2
WholeNote CON 2000

9 Guarde su programa modificado como Beethoven’s Fifth.bs2


9 Reemplace las directivas Notes y Durations DATA y la declaración de la
constante WholeNote con el código de arriba.
9 Ejecuteel programa. ¿Le parece familiar?

Agregando Características Musicales


Al Programa Ejemplo le acaba de introducir notas, duraciones y silencios.
También usa la duración de una nota entera para determinar el tiempo. Estas son tres
características adicionales que podemos agregar a un programa que toca música;

• Tocar notas “punteadas”


• Determinar la duración de la nota entero a partir del tempo
• Tocar notas de más de una octava.

The termino “punteadas” se refiere a un punto usado en la partitura para indicar que una
nota deberá tocarse 1 ½ veces más de su duración normal. Por ejemplo, una nota de un
cuarto punteada deberá durar la duración de una nota de un cuarto más un octavo de nota.
Una nota de un medio punteada dura una mitad mas un cuarto de duración.

Usted puede agregar una tabla de datos que almacene notas punteadas s sin puntear. En
este ejemplo, un cero significa una nota sin puntear, y un uno una nota punteada.
Dots DATA 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 1, 0

Los programas que reproducen música típicamente expresan el tempo de una canción en
batidos por minuto. Esto es lo mismo que decir notas de un cuarto por minuto.
BeatsPerMin CON 200

La Figura 8-4 es una repetición de la Figura 8-3. Esta muestra las 6ta. Y 7ta. Octavas del
teclado de un piano. Estas son dos octavas que suenan con claridad cuando las toca la
bocinapiezo. Este es un ejemplo de la directiva DATA que usted usará en la sección Su
Turno para tocar más de una octava usando la directiva NotesDATA.
Octaves DATA 6, 7, 6, 6, 6, 6, 6, 6, 6, 7, 6,
6, 6, 6
Página 268 · ¿Qué es un Microcontrolador?

Figura 8-4 Teclas del Piano más a la derecha y Sus Frecuencias.

Programa Ejemplo: MusicWithMoreFeatures.bs2


Este Programa Ejemlo toca las primeras notas de “For He’s a Jolly Good Fellow.”
Todas las notas pertenecen a la misma (7ª.) octava, pero algunas de las notas están
punteadas. En la sección Su Turno, usted intentará un ejemplo que usa notas se usa notas
de más de una octava y notas punteadas.

9 Meta y corra el programa MusicWithMoreFeatures.bs2


9 Cuente las notas y vea si usted puede oir las notas punteadas (con 1 ½ duración)-
9 También escuche las notas de la 7ª. Octava. Trate de cambiar una de estas notas
a la 6ª. Octava. El cambio en el sonido de la música es hermosamente drástico.

' ¿Que es un Microcontrolador - MusicWithMoreFeatures.bs2


' Toca el comienzo de He's a Jolly Good Fellow.
'{$STAMP BS2}
'{$PBASIC 2.5}

DEBUG "Program Running!"


Frequencia y Sonido · Página 269

Notes DATA "C","E","E","E","D","E","F","E","E","D","D",


"D","C","D","E","C","Q"
Octaves DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7
Durations DATA 4, 2, 4, 4, 4, 4, 2, 2, 4, 2, 4,
4, 4, 4, 2, 2
Dots DATA 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 1, 0

BeatsPerMin CON 320

index VAR Byte


offset VAR Nib

noteLetter VAR Byte


noteFreq VAR Word
noteDuration VAR Word
noteOctave VAR Nib
noteDot VAR Bit

wholeNote VAR Word


wholeNote = 60000 / BeatsPerMin * 4

DO UNTIL noteLetter = "Q"

READ Notes + index, noteLetter

LOOKDOWN noteLetter, [ "C", "d", "D", "e", "E",


"F", "g", "G", "a", "A",
"b", "B", "P", "Q" ], offset

LOOKUP offset, [ 4186, 4435, 4699, 4978, 5274,


5588, 5920, 6272, 6645, 7040,
7459, 7902, 0, 0 ], noteFreq

READ Octaves + index, noteOctave


noteOctave = 8 - noteOctave
noteFreq = noteFreq / (DCD noteOctave)

READ Durations + index, noteDuration


noteDuration = WholeNote / noteDuration

READ Dots + index, noteDot


IF noteDot = 1 THEN noteDuration = noteDuration * 3 / 2

FREQOUT 9, noteDuration, noteFreq

index = index + 1

LOOP

END
Página 270 · ¿Qué es un Microcontrolador?

Funcionamiento de MusicWithMoreFeatures.bs2
Abajo están los datos musicales de la canción completa. Para cada nota en la directiva
NotesData, le corresponde una entrada en Octaves, Durations, y la directiva Dost DATA.
Por ejemplo, la primera nota es una nota C de la 7ª. Octava, es un cuarto de nota y no está
punteada. Este es otro ejemplo, el segundo de la última nota (no incluye salida) es una
nota E, de la 7ª. Octava. Es mitad de nota y no esta punteada. También hay una constante
BeatPerMin que fija el tempo de la canción.

Notes DATA "C","E","E","E","D","E","F","E","E","D","D",


"D","C","D","E","C","Q"
Octaves DATA 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7
Durations DATA 4, 2, 4, 4, 4, 4, 2, 2, 4, 2, 4,
4, 4, 4, 2, 2
Dots DATA 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,
0, 0, 0, 1, 0

BeatsPerMin CON 320

En el Programa Ejemplo anterior, WholeNote era una constante. Este tiempo, es una
variable que no retiene la duración de una nota completa en milisegundos. Después de
calcular este valor, WholeNote se usará para determinar todas las duraciones de las otras
notas, como se hizo en el programa anterior. Las variables index, offset, noteLetter, y
noteDuration también se usaron en la misma manera como se usaron en el programa
anterior.

La variable noteFreq se maneja un poquito diferente ya que ahora tiene que ajustarse
dependiendo de la octava en que se toca la nota. Se han agrefado las variables noteOctave
y noteDot para manejar la octava y las características punteadas.
wholeNote VAR Word

index VAR Byte


offset VAR Nib

noteLetter VAR Byte


noteFreq VAR Word
noteDuration VAR Word
noteOctave VAR Nib
noteDot VAR Bit
Frequencia y Sonido · Página 271

La variable wholeNote se calcula usando BeatsPerMin. El tempo de la canción se define


en batidos por minuto, y el programa tiene que dividir BeatsPerMin entre 60000 ms, y
luego multiplicarse por 4. El resultado da el valor correcto de una nota completa.
WholeNote = 60000/ BeatsPerMin * 4

Las Matemáticas se ejecutan de izquierda a derecha. En el cálculo de wholeNote =


60000/ beatsPerMin * 4, el BASIC Stamp primero calcula 60000/beatsPerMin. Luego el
resultado lo multiplica por 4. Los parentesis se pueden usar para agrupar operaciones. Si
usted desea dividir entre 4 beatsPerMin primero usted puede hacer esto: wholeNote =
60000/(beatsPerMin*4).

Todo esto es lo mismo como el programa anterior:

DO UNTIL noteLetter = "Q"

READ Notes + index, noteLetter

LOOKDOWN noteLetter, [ "C", "d", "D", "e", "E",


"F", "g", "G", "a", "A",
"b", "B", "P", "Q" ], offset

Ahora que las octavas están el el mix, ha cambiado la parte de el código que calculó la
frecuencia de la nota. La Tabla de Valores de la instrucción LOOKUP contiene
frecuencias de las notas desde la 8ª. Octava. Estos valores pueden dividirse entre 1 si
usted desea tocar notas de la 8ª. Octava,

Por 2 si usted desea tocar notas en la 7ª. Octava, por 4 si usted desea tocar notas en la 6ª.
Octava, y por 8 si usted desea tocar notas en la 5ª. Octava. La divisió se efectua en
seguida.

Todo lo que hace la instrucción LOOKUP es colocar una nota de la 8ª. Octava en la
variable noteFreq.
LOOKUP offset, [ 4186, 4435, 4699, 4978, 5274,
5588, 5920, 6272, 6645, 7040,
7459, 7902, 0, 0 ], noteFreq

Esta es la forma en que la variable noteFreq se ajusta para la octava correcta. Primero, la
instrucción READ dimensiona el valor almacenado de la octava en Octaves DATA.
Este pudiera ser un valor entre 5 y 8.
Página 272 · ¿Qué es un Microcontrolador?

READ Octaves + index, noteOctave

Dependiendo de la octava, deseamos dividir noteFreq por 1, 2, 4, o 8. Esto significa que


el objetivo es es realmente dividir por 20 = 1, 21 = 2, 22 = 4, or 23 = 8. La siguiente frase
de abajo toma el valor de noteOctave, el cual puede ser un valor entre 5 y 8 y resta ese
valor de 8. Si noteOctave fue 8, ahora es 0. Si noteOctave fue 7 ahora es 1. Si noteOctave
fue 6, ahora es 2, y si noteOctave fue 5, ahora es 3.
noteOctave = 8 – noteOctave

Ahora, noteOctava es un valor que puede usarse como un exponente de 2, ¿pero como
elevamos a la potencia 2 en PBASIC? Una solución es usando el operador DCD. DCD 0
es 1, DCD1 es 2, DCD 2 es 4 y DCD 3 es 8. Al dividir noteFreq por DCDnoteOctava
significa que usted está dividiendo por 1, 2, 4, y 8, el cual divide noteFreq bajandolo al
valor correcto. El resultado final es que noteFreq se fija en la octava correcta. Usted usará
la Terminal Debug en la sección Su Turno para poner más atención en su
funcionamiento.
NoteFreq = noteFreq / (DCD noteOctave)

¿Como puedo ser experto en usar el operador DCD? Manteniendose aprendiendo y


practicando. Cada vez que usted vea una nueva: instrucción, operador, o palabra clave que
se usa en un ejemplo consulte el Manual BASIC Stamp. Léalo y trate de usarlo en un
programa de su propio diseño.
Adquiera el hábito de de leer periódicamente el Manual BASIC Stamp y trate de reducir los
Programas Ejemplo. Esta es la mejor forma de familiarizarse con las diferentes
instrucciones y operadores y su funcionamiento. Haciendo estas actividades, usted
desarrollara el hábito de siempre agregarlos a la lista de herramientas de programación que
usted puede usar para resolver problemas.

Las primeras dos líneas del código para determinar la duración de la nota son casi iguales
a las del código del Programa Ejemplo anterior. Ahora, sin embargo, una nota pudiera
estar punteada y esto significa que la duración tendría que multiplicarse por 1.5. Se usa
un instrucción READ para accesar valores en la EEPROM con la directiv Dots DATE. La
frase IF...THEN se usa para multiplicar por 3 y dividir por 2 siempre y cuando el valor de
la variable noteDot es 1.
READ Durations + index, noteDuration
noteDuration = WholeNote / noteDuration

READ Dots + index, noteDot


IF noteDot = 1 THEN noteDuration = noteDuration * 3 / 2
Frequencia y Sonido · Página 273

Matemática de Numeros Enteros El BASIC Stamp no procesa automáticamente un


número como 1.5. Cuando hace matemáticas solamente trabaja con números enteros..., -5,
-4, -3, -2, -1, 0, 1, 2, 3,... La mejor solución para multiplicar por 1.5 es multiplicar por 3/2.
Primero multiplica por 3 y luego divide por 2.
Hay algunas formas para programar el BASIC Stamp para que maneja valores fraccionales.
Usted puede programar el BASIC Stamp que use enteros para calcular la parte fracciónal
de un número. Esto se presenta en la Guia del Estudiante de Circuitos Básicos Analógicos
y Digitales. Hay también dos operadores que hacen que los valores fraccionales sean
faciles de trabajar, y estos son Multiplicación Alta y Multiplicación Middle. Estos se explican
con detalla en la Guía del Estudiante de Sensores Aplicados y en el Manual de BASIC
Stamp.

Lo restante de este programa ejemlo funciona de la misma forma que lo hizo en el


Programa Ejemplo anterior:
FREQOUT 9, noteDuration, noteFreq
index = index + 1
LOOP
END

Su Turno – Tocando una Canción con Más de Una Octava


El programa MusicWithMoreFeatures.bs2 usó silencios, pero se mantuvo en una octava.
La canción “Take Me Out of the Ball Game” abajo mostrada toca la mayoría de las notas
en la 6ª. Octava. Hay dos notas en la 7ª. Octava y esto hace una gran diferencia en sus
sonidos.

9 Guarde una copia del programa MusicWithMoreFeaturesYourTurn.bs2


9 Modifique el programa reemplazando las cuatro directivas data y una
declaración de constante con lo siguiente:

Notes DATA "C","C","A","G","E","G","D","P","C","C","A",


"G","E","G","Q"
Octaves DATA 6, 7, 6, 6, 6, 6, 6, 6, 6, 7, 6,
6, 6, 6
Durations DATA 2, 4, 4, 4, 4, 2, 2, 4, 2, 4, 4,
4, 4, 2
Dots DATA 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,
0, 0, 1

BeatsPerMin CON 240

9 Ejecute el programa y verifique que suene correctamente.


Página 274 · ¿Qué es un Microcontrolador?

Las dos notas de la 7ª. Octava son esenciales para hacer que la canción suene
correctamente. Es interesante escuchar que sucede si estos 7 valores se cambian a 6.

9 Trate de cambiar los dos valores 7 en la directiva Octaves DATA, para que sean
6.
9 Recuerde que este cambio hará que “Take Me out to the Ball” suene feo.
9 Ejecute el programa y escuche el efecto de las octavas incorrectas de la canción.
9 Cambie la directiva Octaves DATA a su estado original.
9 Ejecute el programa otra vez y escuche para ver si el sonido suena otra vez
correctamente.

ACTIVIDAD #5: TONOS TELEFÓNICOS CON RTTTL


Los viejos teléfonos celulares usaban para tocar tonos telefonicos un bocina piezo. Los
tonos se bajaban de la web a una computadora y se cargaban de la computadora al
teléfono celular. En ese tiempo, en ese tiempo una de las formas más usadas de
composición, grabación y traslado de tono eran cadenas de texto con caracteres que
describen cada nota en la canción. Este es un ejemplo de cómo eran las primeras notas de
la 5ª. Sinfonía de Beethoven.

Beethoven5:d=8,o=7,b=125:g,g,g,2d#,p,f,f,f,2d

Este formato para almacnar datos nusicales se llama RTTTL {} que es Ringing Tone
Text Transfer Language {} Lenguaje de Transferencia de Texto de Tonos Teléfonicos.
La gran característica de los archivos RTTTL fue que eran ampliamente compartidos a
traves de WWW. Alguno sitios tenían archivos RTTL disponibles para descargarlos
libremente. Estos eran también programas de software libre que se podían usar para
componer y emular archivos y después descargarlos en su teléfono celular.

Las especificaciones de RTTTL todavía se publican en línea. El anexo C resume como se


almacenan notas, duraciones, pausas, tempo y notas punteadas con archivos RTTTL.
Esta actividad presenta algunas técnicas de programación con PBASIC que puede usar
para reconocer diferentes elementos de texto. La habilidad para reconocer diferentes
caracteres o grupos de caracteres tomar acciones basadas en lo que contienen esos
caracteres es extraordinariamente útil. De hecho, es la clave para convertir formato
RTTTL (como la Quinta de Beethoven arriba mostrada) en música. Al final de esta
actividad, hay un Programa de Aplicación que usted puede usar para tocar tonos con
formato RTTTL.
Frequencia y Sonido · Página 275

Seleccionando que Bloque de Código Ejecutarse en Función de Caso por Caso


La frase SELECT...CASE es probablemente la mejor herramienta de programación para
reconocer caracteres o valores. Recuerde que esta es una de las herramientas usadas para
convertir tonos de teléfonos en notas musicales.
En general, SELECT...CASE se usa para:

• Seleccionar una variable o expresión.


• Evaluar la variable o expresión en función de caso por caso.
• Ejecutar diferentes bloques de código dependiendo en que caso es adecuado el
valor de esa variable.

Here is the syntax for SELECT...CASE: SELECT expression


CASE condition(s)
statement(s)
{ CASE ELSE
statement(s) }
ENDSELECT

Usted puede intentar los dos siguiente Programas Ejemplo para ver como funciona
SELECT...CASE. El pograma SelectCaseWithValues.bs2 toma valores numéricos que
usted mete en la Terminal Debug y le indica el tamaño mínimo de la variable que usted
necesitará para mantener ese valor. El programa SelectCaseWithCharacters.bs2 le dice a
usted en la Terminal Debug si usted metió una letra mayúscula, minúscula, un dígito o un
signo de puntuación.

Recuerde usar la ventana de Transmisión en la Terminal Debug para mandar los


caracteres que usted escribe en el BASIC Stamp. La Figura 8-5 muestra la ventanas de
Transmisión y Recepción.
Figura 8-5
Windowpanes Mandando
Mensajes al BASIC
Transmit → Stamp

Haga click en la
ventana Transmitir
Receive → (arriba) para meter
el valor o carácter
que usted desea
transmitir a el
BASIC Stamp..
Página 276 · ¿Qué es un Microcontrolador?

Programa Ejemplo: SelectCaseWithValues.bs2


9 Meta y ejecute el programa SelectCaseWithValues.bs2.
9 En la Terminal Debu, asegurese que en la ventanita no esta marcada Echo Off.
9 Haga click en la ventana Transmitir de la Terminal.
9 Meta un valor entre 0 y 65535, y presione la tecla Enter.

¿Qué sucede si usted mete un número mayor que 65535? Si usted mete el númere 65536,
el BASIC Stamp almacenará el número 0. Si usted mete el número 65537, el BASIC
Stamp almacenará el número 1, y así sucesivamente. Cuando un número es demasiado
grande para la variable en la que cabe, hay un desbordamiento (overflow).

Use la Tabla 8-1 para verificar que el Programa Ejemplo hace las decisiones correctas
respecto al tamaño de los números que introdujo en la Terminal Debug.

Table 8-1: Variable Types and Values They Can Store


Tipo de Variables Rango de Valores
Bit 0a1
Nib 0 a 15
Byte 0 a 255
Word 0 a 65535

' ¿Que es un Microcontrolador? - SelectCaseWithValues.bs2


' Meta un valor y vea el tamaño mínimo requerido de la variable para
retenerlo.

'{$STAMP BS2}
'{$PBASIC 2.5}

value VAR Word


PAUSE 1000

DEBUG "Enter a value from", CR,


"0 to 65535: "

DO

DEBUGIN DEC value

SELECT value

CASE 0, 1
DEBUG "Bit", CR
PAUSE 100
Frequencia y Sonido · Página 277

CASE 2 TO 15
DEBUG "Nib (Nibble)", CR
PAUSE 200

CASE 16 TO 255
DEBUG "Byte", CR
PAUSE 300

CASE 256 TO 65535


DEBUG "Word", CR
PAUSE 400

ENDSELECT

DEBUG CR, "Meta otro valor: "

LOOP

Funcionamiento del programa SelectCaseWithValues.bs2


Se declar una variable tamaño word para mantener los valores metidos en la Terminal
Debug.

value VAR Word

La instrucción DEBUGIN toma el número que usted metión y lo coloca en la variable


value.
DEBUGIN DEC value
La frase SELECT escoge la variable value como uno de los casos a evaluar.
SELECT value

El primer caso es si la variable es igual a 1 o a 0. Si el valor es igual a uno esos números,


se ejecutan las instrucciones DEBUG y PAUSE que le siguen.
CASE 0, 1
DEBUG “BIT”, CR
PAUSE 100

El segundo caso es cuando su valor es igual a cualquier número que va de 2 a15. Si es


igual a uno de esos números, se ejecutan las instrucciones DEBUG y PAUSE debajo de
ellas.
CASE 2 to 15
DEBUG “NIB (Nibble)”, CR
PAUSE 200
Página 278 · ¿Qué es un Microcontrolador?

Cuando se han hecho todos los casos, la palabra clave ENDSELECT se usa para
completar la instrucción SELECT...CASE.
ENDSELECT

Programa Ejemplo: SelectCaseWithCharacters.bs2


Este Programa Ejemplo evalua cada caracterque usted mete en la ventana Transmisión de
la Terminal Debug. El programa puede reconocer caracteres mayúsculas y minúsculas,
digitos y algunos signos de puntuación. Si usted mete un carácter que el programa no
reconoce, le dirá que lo intente otra ez (meta un carácter diferente).

9 Meta y ejecute el programa SelectCaseWithCharacters.bs2.


9 Asegurese que no está marcada la ventanita Echo Off.
9 Haga click en la ventana Transmit de la Terminal Degug para colocar ahí el
cursor.
9 Meta los caracteres en la ventana Transmit y observe los resultados.

' ¿Que es un Microcontrolador? - SelectCaseWithCharacters.bs2


' Programa que puede identificar algunos caracteres: mayusc/minusc, digito,
puntuacion.

'{$STAMP BS2}
'{$PBASIC 2.5}

character VAR Byte


PAUSE 1000

DEBUG "Meta un caracter: ", CR

DO
DEBUGIN character

SELECT character

CASE "A" TO "Z"


DEBUG CR, "Mayusculas", CR

CASE "a" TO "z"


DEBUG CR, "Minusculas", CR

CASE "0" TO "9"


DEBUG CR, "Digito", CR

CASE "!", "?", ".", ","


DEBUG CR, "Puntuacion", CR

CASE ELSE
Frequencia y Sonido · Página 279

DEBUG CR, "Caracter no conocido.", CR,


"Pruebe otro diferente."

ENDSELECT

DEBUG CR, "Meta otro caracter", CR


LOOP

Funcionamiento de SelectCaseWithCharacters.bs2.
Cuando lo comparamos con el programa SelectCaseWithValues.bs2, este Programa
Ejemplo tiene unas pocas diferencias. Primero, el nombre de la variable value se cambió
por character, y su tamaño cambió de word a byte. Esto se hace porque todos los
caracteres en PBASIC son tamaño byte. La instrucción SELECT escoge la variabe
character para la evaluación de caso por caso.
SELECT character

Las comillas se usan para decirle al Editor de BASIC Stamp que usted se está refiriendo a
caracteres. Podemos tratar los siguientes grupos de caracteres y signos de puntuación de
la misma forma como un rango de números, ya que el BASIC Stamp los reconoce por sus
equivalentes numéricos en ASCII. {}. Vea la ayuda de BASIC Stamp Editor.
SELECT character

CASE "A" TO "Z"


DEBUG CR, "Upper case", CR
CASE "a" TO "z"
DEBUG CR, "Lower case", CR

CASE "0" TO "9"


DEBUG CR, "Digit", CR

CASE "!", "?", ".", ","


DEBUG CR, "Punctuation", CR

También hay una instrucción diferente “CASE” que no se usó en el ejemplo anterior:
CASE ELSE
DEBUG CR, "Character not known.", CR,
"Try a different one."

Esta instrucción CASE le indica al bloque de código SELECT que hacer si ninguno de
los otros casos es verdadero. Usted puede usar este caso para trabajar metiendo un
carácter por ejemplo % y $.
Página 280 · ¿Qué es un Microcontrolador?

Su Turno – Seleccionando Caracteres Especiales.


9 Modifique la frase SELECT...CASE en el programa
SelectCaseWithCharacters.bs2 de tal forma que muestre “Carácter Especial”
cuando usted meta uno de estos caracteres: @, #, %, %, &, (), _ , o +.

Programa de Aplicación para Tocar Tonos de Teléfono RTTTL


Abajo está un archivo que contiene la informació musical usada en el siguiente Programa
Ejemplo. Hay cinco directivas adiconales RTTTL_File_DATA que usted puede probar en
la sección Su Turno. Este programa toca una canción llamada “Reveille” {} que es el
primer toque de trompeta de la mañana tocada en campos militares. Quizá usted la ha
escuchado en películas y shows de tv.

RTTTL_File DATA "Reveille:d=4,o=7,b=140:8g6,8c,16e,16c,8g6,8e,",


"8c,16e,16c,8g6,8e,8c,16e,16c,8a6,8c,e,8c,8g6,",
"8c,16e,16c,8g6,8e,8c,16e,16c,8g6,8e,8c,16e,",
"16c,8g6,8e,c,p,8e,8e,8e,8e,g,8e,8c,8e,8c,8e,8c,",
"e,8c,8e,8e,8e,8e,8e,g,8e,8c,8e,8c,8g6,8g6,c."

Programa Ejemplo: MicroMusicWithRtttl.bs2


Este Programa de Aplicación es muy largo, y es una buena idea descargar la última
version de la página www.parallax.com/go/WAM.

Al descargar el programa y abrirlo con el Editor BASIC Stamp usted ahorrará una
cantidad significativa de tiempo. La alternativa, es naturalmente meterlo a mano y
depurar cuatro página de código.

9 Con el Editor de BASIC Stamp abra el archivo del programa que descargó
MicroMusicWithRtttl.bs2 o a mano meta cuidadosamente el ejemplo que está
abajo.
9 Ejecute el programa, y verifique que reconoce la pieza Reveille bugle call.
9 Vaya a la sección Su Turno e intente algunas piezas más (con directivas
RTTTL_File DATA)

' ¿Que es un Microcontrolador? - MicroMusicWithRtttl.bs2


' Play Nokia RTTTL format ringtones using DATA.

'{$STAMP BS2}
'{$PBASIC 2.5}
DEBUG "Programa ejecutandose!"

' -----[ Definiciones de E/S ]----------------------------------------------


Frequencia y Sonido · Página 281

SpeakerPin PIN 9 ' Bocinapiezo conecteda a P9.

' -----[ Variables ]-------------------------------------------------------

counter VAR Word ' Contador de Propósito General.


char VAR Byte ' Variable almacena caracteres.
index VAR Word ' Index para apuntar a los datos.

noteLetter VAR Byte ' Amacena caracter de la note .


noteFreq VAR Word ' Almacena frecuencia de la nota.
noteOctave VAR Word ' Almacena octava de la nota.

duration VAR Word ' Almacena duracion de la nota.


tempo VAR Word ' Almacena tempo.

default_d VAR Byte ' Almacena duración default .


default_o VAR Byte ' Almacena octava default.
default_b VAR Word ' Almacena batidos/min default.

' -----[ EEPROM Data ]-----------------------------------------------------

RTTTL_File DATA "Reveille:d=4,o=7,b=140:8g6,8c,16e,16c,8g6,8e,",


"8c,16e,16c,8g6,8e,8c,16e,16c,8a6,8c,e,8c,8g6,",
"8c,16e,16c,8g6,8e,8c,16e,16c,8g6,8e,8c,16e,",
"16c,8g6,8e,c,p,8e,8e,8e,8e,g,8e,8c,8e,8c,8e,8c,",
"e,8c,8e,8e,8e,8e,8e,g,8e,8c,8e,8c,8g6,8g6,c."

Done DATA ",q,"

Notes DATA "p", "a", "#", "b",


"c", "#", "d", "#",
"e", "f", "#", "g",
"#"
Octave8 DATA Word 0, Word 3520, Word 3729, Word 3951,
Word 4186, Word 4435, Word 4699, Word 4978,
Word 5274, Word 5588, Word 5920, Word 6272,
Word 6645

' -----[ Initialization ]--------------------------------------------------

counter = 0 ' Inicializa counter.

GOSUB FindEquals ' Primero encuentra '=' en archivo.


GOSUB ProcessDuration ' Obtiene duration default duration.
GOSUB FindEquals ' Encuentra siguiente '='.
GOSUB ProcessOctave 'Obtien Octava default.
GOSUB FindEquals ' Encuentra el último '='.
GOSUB GetTempo ' Obtiene tempo default.

' -----[ Código del Programa]-------------------------------------------

DO UNTIL char = "q" 'Está en bucle en 'q' en DATA.


Página 282 · ¿Qué es un Microcontrolador?

GOSUB ProcessDuration ' Obtiene duración de la nota.


GOSUB ProcessNote ' Obtiene el valor del índice de la nota.
GOSUB CheckForDot ' Si es punteada, duracion es 3/2.
GOSUB ProcessOctave ' Obtiene la octava.
GOSUB PlayNote ' Obtiene la frecuencia de la siguiente nota,.
LOOP ' Fin del bucle principal.

END ' Fin del programa.

' -----[ Subroutina Encuentra Caracteres iguales ]-----------------------

FindEquals: ' Va a caracteres en


' Busca Archivo RTTTL
DO ' '='. Incremeta contador
READ RTTTL_File + counter, char ' hasta que encuentra'=' , y luego
counter = counter + 1 ' regresa.
LOOP UNTIL char = "="

RETURN

' -----[ Subroutine - Read Tempo from RTTTL Header ]----------------------


' Cada caracter del teclado tiene un sólo número llamado valor ASCII .
' Los caracteres 0, 1, 2,...9 tienen valores ASCII de 48, 49, 50,...57.
' Usted puede convertir los caracteres que representam un dígito a
' a si valr restamdpñes 48 a la variable que almacena el dígito.
' Puede examinar esto comparando DEBUG DEC 49 y DEBUG 49.

GetTempo: ' Describe archivo RTTTL de Tempo.


' Convierte caracters a
default_b = 0 ' digitos restandoles 48

DO ' de cada caracterASCII


READ RTTTL_File + counter, char ' valor. Multiplica Iterativamente
IF char = ":" THEN ' cada dígito por 10 y si hay
default_b = default_b / 10 ' otro dígito, entonces lo suma
counter = counter + 1 ' el dígito más reciente con
EXIT ' uno de la columna.
ENDIF ' Por ejemplo, la cadena
default_b = default_b + char - 48 ' "120" es (1 X 10 X 10)
counter = counter + 1 ' + (2 X 10) + 0. The '1'
default_b = default_b * 10 ' primero se convierte, y luego
LOOP UNTIL char = ":" ' se multiplica por 10. El '2'
' es convertido/agregado.
RETURN ' 0 es convertido/agregado, hecho.

' -----[ Subroutine – Busca Octava ]------------------------------------

ProcessOctave: ' Puede o no puede haber Octava


' incluida en una nota dada
READ RTTTL_File + counter, char ' porque cualquier nota
SELECT char ' que se toca en la octava default
CASE "5" TO "8" ' no se specifica
noteOctave = char - "0" ' la octava. Si se usa un caracter
Frequencia y Sonido · Página 283

counter = counter + 1 ' '5' '8' entonces se usa


CASE ELSE ' ésta, usa default_o.
noteOctave = default_o ' Los Characteres se convierten
ENDSELECT ' a dígitos restando
IF default_o = 0 THEN ' '0', que es lo mismo
default_o = noteOctave ' que restar 48.La primera
ENDIF ' vez se llama esta subrutina
' default_o e 0.
RETURN ' Si 0, entonces fija default_o.

' -----[ Subroutina - Encuentra Index de Notea ]-----------------------------

ProcessNote: ' Fija el valor de index value de lookup


' de la frecuencia de nota basada em
READ RTTTL_File + counter, char ' el caracter de la nota. Si 'p',
SELECT char ' el índice es 0. Si 'a' a 'g',
CASE "p" ' lee los valores de los caracteres en
index = 0 ' la Tabla DATA y su equivalente.
counter = counter + 1 ' Graba el valor del índíce cuando
CASE "a" TO "g" ' encuentra su equivalente. Si el siguiente
FOR index = 1 TO 12 ' caracter es bemoñ (#), suma
READ Notes + index, noteLetter ' 1 al valor del índice para
IF noteLetter = char THEN EXIT ' incrementar el índice (y
NEXT ' frecuencia) by 1 .
counter = counter + 1 ' Igual que en otras subroutinas,
READ RTTTL_File + counter, char ' incrementa el contador para
SELECT char ' cada caracter que se procesa.
CASE "#"
index = index + 1
counter = counter + 1
ENDSELECT
ENDSELECT

RETURN

' -----[ Subroutina - Determina Duración de la Nota ]--------------------

ProcessDuration: ' Checa para ver si hay caracters de la


' forma 1, 2, 4, 8, 16 o 32.
READ RTTTL_File + counter, char ' Si hay, entonce los convierte de
' Caracteres ASCII a un valor
SELECT char ' restandoles 48. En el
CASE "1", "2", "3", "4", "8" ' caso de 16 o 32, los multiplica
duration = char - 48 ' por 10 y suma al siguiente
counter = counter + 1 ' digito o a la columna de unos.
READ RTTTL_File + counter, char
SELECT char
CASE "6", "2"
duration = duration * 10 + char - 48
counter = counter + 1
ENDSELECT
CASE ELSE ' Si no usa duración,
duration = default_d ' use default.
Página 284 · ¿Qué es un Microcontrolador?

ENDSELECT

IF default_d <> 0 THEN ' Si no define default_d


duration = 60000/default_b/duration*3 ' (si default_d = 0), entonces
ELSE ' fije default_d = a la duración
default_d = duration 'con d=#.
ENDIF

RETURN
' -----[ Subroutine – Cheque Para '.' Indicando Duraci+on 1.5 ]-----------

CheckForDot: ' Cheque para indicación punteada


' multiplique duración por 3/2.
READ RTTTL_File + counter, char ' Si hay punteada, multiplique por
SELECT char ' 3/2 e incremente contador,
CASE "." ' sino, no haga nada y
duration = duration * 3 / 2 ' regrese.
counter = counter + 1
ENDSELECT

RETURN

' -----[ Subrutina - Encuentra Comma and Play Note/Duration ]-----------------

PlayNote: ' Encuentra la última comma en la


' note actual. Luego,
READ RTTTL_File + counter, char ' manda la frecuencia de la nota
SELECT char ' de los datos, y la toca, o
CASE "," ' hay silencio si frecuencia = 0.
counter = counter + 1
READ Octave8 + (index * 2), Word noteFreq
noteOctave = 8 - noteOctave
noteFreq = noteFreq / (DCD noteOctave)
IF noteFreq = 0 THEN
PAUSE duration
ELSE
FREQOUT SpeakerPin, duration, noteFreq
ENDIF
ENDSELECT

RETURN

Funcionamiento del programa de MusicWithRtttl.bs2


Este Programa Ejemplo es de uso divertido, y muestra la clase de código que usted será
capáz de escribir con alguna práctica. Sin embargo, se incluyó en este texto más por
diversión que por los conceptos de codificación que emplea. Si usted examina el código
brevemente, usted podría observar que ya ha usado todas las instrucciones y operadores
del programa ¡excepto uno!
Frequencia y Sonido · Página 285

Esta es una lista de los elementos en este programa que por ahora le deberían ser
conocidos:
• Comentarios que le ayudan en la explicación de su código
• Declaraciones de Constantes y Variables.
• Declaraciones DATA
• Instrucciones READ
• Bloques IF...ELSE...ENDIF
• Bucles DO...LOOP con o sin WHILE y UNTIL
• Subrutinas con GOSUB, etiquetas y RETURN
• Bucles FOR...NEXT
• Instrucciones LOOKUP y LOOKDOWN
• Instrucciones FREQOUT y PAUSE
• Instrucciones SELECT...CASE
• EXIT es nuevo, pero este simplemente permite que el programa pueda “salir” de
un bucle antes que termine, y frecuentementese usa con las frases IF...THEN.

Su Turno – Canciones Diferentes


9 Trate de reemplazar la directiva RTTTL_File DATA en el programa
MicroMusicWithRTTTL.bs2 con cada uno del los cinco archivos musicales de
abajo.
¡Solamente una directiva RTTTL_File DATA a la vez! Asegurese de reemplazar, no
añada, su nueva directiva RTTTL_File DATA.

9 Ejecute el programa MicroMusicWithRTTTL.bs2 para verificar cada archivo


RTTTL.

RTTTL_File DATA "TwinkleTwinkle:d=4,o=7,b=120:c,c,g,g,a,a,2g,f,",


"f,e,e,d,d,2c,g,g,f,f,e,e,2d,g,g,f,f,e,e,2d,c,c,",
"g,g,a,a,2g,f,f,e,e,d,d,1c"

RTTTL_File DATA "FrereJacques:d=4,o=7,b=125:c,d,e,c,c,d,e,c,e,f",


",2g,e,f,2g,8g,8a,8g,8f,e,c,8g,8a,8g,8f,e,c,c,g6",
",2c,c,g6,2c"

RTTTL_File DATA "Beethoven5:d=8,o=7,b=125:g,g,g,2d#,p,f,f,f,2d"

RTTTL_File DATA "ForHe'sAJollyGoodFellow:d=4,o=7,b=320:c,2e,e,e,",


"d,e,2f.,2e,e,2d,d,d,c,d,2e.,2c,d,2e,e,e,d,e,2f,",
"g,2a,a,g,g,g,2f,d,2c"
Página 286 · ¿Qué es un Microcontrolador?

RTTTL_File DATA "TakeMeOutToTheBallgame:d=4,o=7,b=225:2c6,c,a6,",


"g6,e6,2g.6,2d6,p,2c6,c,a6,g6,e6,2g.6,g6,p,p,a6",
",g#6,a6,e6,f6,g6,a6,p,f6,2d6,p,2a6,a6,a6,b6,c,",
"d,b6,a6,g6"

Descargando Archivos RTTTL. Hay archivos disponibles RTTTL para bajarse de varios
sitios de WWW. Estos archivos son contribuciones de entusiastas de ring tones, muchos de
ellos no son expertos musicales. Algunos tonos de teléfono son muy buenos, otros no se
pueden reconocer. Si usted desea descargar y tocar algunos archivos RTTTL, asegurese
de quitar los espacios entre caracteres, luego inserte el archivo de texto entre las comillas.

RESUMEN
Este capítulo introdujo técnicas para hacer sonidos y tonos musicales con el BASIC
Stamp y una bocina piezo eléctrica. La instrucción FREQOUT se puede usar para mandar
a una bocina piezo eléctrica señales high/low para que hagan efectos de sonido y/o notas
musicales. La instrucción FREQOUT tiene argumentos que controlan los pines de E/S a
donde se manda la señal, la Duration del Tono y la Frecuencia del Tono (Freq1). Hay un
argumento opcional Freq2 que puede utilizarse para tocar dos tonos al mismo tiempo.

Los efectos de sonido pueden hacerse ajustando la frecuencia y duración de los tonos y
las pausas entre ellos. El valor de la frecuencia también puede barrerse en un rango de
valores para crear una variedad de efectos.

Hacer notas musicales también depende de la frecuencia, duración y pausas. El valor del
argumento “Duration” de la instrucción FREQOUT lo determina “tempo” de la canción y
la duración de la nota (nota entera, media nota, un cuarto de nota, etc). El valor Freq1 de
la nota lo determina la letra de la nota y la octava. Los descansos o silencios entre notas
se usan para fijar la duración de la instrucción PAUSE.

Tocar canciones simples usando el BASIC Stamp puede hacerse con una secuencia de
instrucciones FREQOUT, pero hay formas mejores para almacenar y retirar los datos
musicales. Las directivas “DATA” con su etiquetas opcionales “SYMBOL” se usaron
para almacenar valores de bytes sin usar prefijos, y valores tamaño “word” usando
prefijos “Word”. La instruccón READ se usó para retirar valores almacenados por las
directivas DATA. En los ejemplos de este capítulo, el argumento “Location” de la
instrucción DATA siempre usó la etiqueta de la directiva opcional “Symbol” para
diferenciar los diferentes tipos de datos. Algunas de las etiquetas “Symbol” que se usaron
fueron Notes, Durations, Dots, y Octaves (notas, duraciones, puntos y octavas).
Frequencia y Sonido · Página 287

Los datos musicales pueden almacenarse en formatos que tienden en si mismos para
convertirse en una partitura. El estilo de los datos de la partitura puede convertirse en
frecuencias usando las instrucciones LOOKUP y LOOKDOWN. También pueden
realizarse las operaciones matemáticas en valores de variables para cambiar la octava de
una nota dividiendo su frecuencia por una potencia de dos. Las operaciones matemáticas
también son útiles para la duración de las notas conociendo el tempo o la duración de la
nota entera.

Se introdujo SELECT...CASE como una forma de evaluar una variable en función de


caso por caso. SELECT...CASE es particularmente útil para examinar caracteres o
números cuando hay diferentes elecciones lo que podría ser la variable y diferentes
elecciones para fijar las acciones que necesitan tomarse en función del valor de la
variable. Un programa que convierte cadenas de caracteres que describen los tonos
musicales de los teléfonos celulares viejos (se llama RTTTL) se usó para introducir
programas grandes que hacen uso de todas las técnicas de programación presentadas en
este texto. SELECT...CASE juega un papel importante en este programa porque se usa
para examinar caracteres seleccionados en un archivo RTTTL en función de caso-por-
caso.

Preguntas
1. ¿Que origina que un sonido suene con un timbre alto?
2. ¿Qué hace FREQOUT 15, 1000, 3000? ¿Qué provoca que un tono suene con un
timbre bajo?
3. ¿Cómo puede usted modificar la instrucción FREQOUT de la pregunta 2 para
que mande dos frecuencias al mismo tiempo?
4. Si usted golpea la tecla B6 de un piano, ¿Qué frecuencia emite?
5. ¿Cómo modifica usted una directiva DATA o una instrucción READ si desea
almacenar y retirar valores “word”?
6. ¿Puede usted tener más de una directiva DATA? Si si puede, como puede usted
indicarle a una instrucción READ que obtenga los datos de una o mas directiva
DATA?
7. Si usted conoce la frecuencia de una nota en una octava, que tiene usted que
hacer para que esa frecuencia toco en la octava mayor siguiente?
8. ¿Qué hace SELECT...CASE?

Ejercicios
1. Modifique el tono “Alarm...” del programa ActionTones.bs2 para que la
frecuencia del tono que toca aumente en 500 cada vez que el tono se repite.
Página 288 · ¿Qué es un Microcontrolador?

2. Explique como modifica el programa MusicWithMoreFeatures.bs2 para que


muestre un mensaje de alerta en la Terminal Debug cada vez que se toca una
nota punteada.

Proyectos
1. Construya un Generador de Tonos controlado con botones push. Si se presiona
un botón push, la bocina debe emitir un beep de 2 kHz durante un 1/5 de
segundo. Si se presiona el segundo botón push la bocina debe emitir una beep de
3 kHz durante un 1/10 de segundo.

Soluciones
Q1. Nuestro oido detecta cambios en la presión del aire como tonos. Un tono con
timbre alto genera cambios más rápidos en la presión del aire, un tono con timbre
bajo genera cambios lentos en la presión del aire.
Q2. FRECOUT 15, 1000, 3000 manda una señal de 3000 Hz que sale del pin P15
durante un segundo (1000 ms). El efecto de cada númro es: 15 es el pin E/S 15;
1000 es la duración del tono en milisegundos, o un segundo; 3000 es la
frecuencia del tono, en hertz, entonces manda un tono de 3000 Hz.

Q3. Use el argumento opcional Freq2. Para tocar 3000 Hz y digamos 2000 Hz,
simplemente agregamos la segunda frecuencia a la instrucción después de una
coma:

FREQOUT 15, 1000, 3000, 2000

Q4. 1975-5 Hz, vea la Figura 8-3.


Q5. Use el modificador opcional Word antes de cada dato.
Q6. Si. Cada directiva DATA puede tener un diferente parámetro opciona Symbol.
Para especificar de que directiva DATA se obtienen los datos, incluya el
parámetro Symbol despues de cada palabra clave READ. Por ejemplo: READ
Notes, noteLetter. En este ejemplo, Notes es el parámetro Symbol.
Q7. Para obtener una nota en la siguiente octava mayor, multiplique la frecuencia por
dos.
Q8. SELECT...CASE selecciona una variable o expresión la evaluación en función
de caso por caso, y ejecuta diferentes bloques de código dependiendo en cual
caso se adecúa el valor de la variable.
Frequencia y Sonido · Página 289

E1. Este problema puede resolverse ya sea manualmente incrementando el valor de


cada tono por 500 o utilizando el bucle FOR...NEXT con un valor “STEP”
(paso) de 500.

Utilizing FOR...NEXT loop: Manually increasing tone:


DEBUG "Increasing alarm...", CR DEBUG "Increasing Alarm...",CR
PAUSE 100 PAUSE 100
FOR frequency = 1500 TO 3000 STEP 500 FREQOUT 9, 500, 1500
FREQOUT 9, 500, frequency PAUSE 500
PAUSE 500 FREQOUT 9, 500, 2000
NEXT PAUSE 500
FREQOUT 9, 500, 2500
PAUSE 500
FREQOUT 9, 500, 3000
PAUSE 500

E2. Modifique las líneas que identifican la nota punteada.


READ Dots + index, noteDot
IF noteDot = 1 THEN noteDuration = noteDuration * 3 / 2

Agregue una instrucción DEBUG al bucle IF...THEN. No olvide ENDIF. Add a


DEBUG command to the IF...THEN. Don't forget the ENDIF.
READ Dots + index, noteDot
IF noteDot = 1 THEN
noteDuration = noteDuration * 3 / 2
DEBUG "Nota Punteada!", CR
ENDIF

P1. Use el circuito de bocina piezoeléctrica de la Figrua 8-2; y los circuitos del botón
push de la Figura 4-26.

' ¿Que es unMicrocontrolador? - Ch8Prj01_PushButtonToneGenerator.bs2


' P4 Presionado: 2 kHz beep for 1/5 second. 2 kHz = 2000 Hz.
' 1/5 s = 1000 / 5 ms = 200 ms
' P3 Presionado: 3 kHz beep for 1/10 second. 3 kHz = 3000 Hz.
' 1/10 s = 1000 / 10 ms = 100 ms
'{$STAMP BS2}
'{$PBASIC 2.5}

DEBUG "Programa Ejecutandose!"


DO
IF (IN4 = 1) THEN
FREQOUT 9, 200, 2000 ' 2000 Hz para 200 ms
ELSEIF (IN3 = 1) THEN
Página 290 · ¿Qué es un Microcontrolador?

FREQOUT 9, 100, 3000 ' 3000 Hz para 100 ms


ENDIF
LOOP
Bloques de Construcción Electrónicos · Página 291

Capítulo 9: Bloques de Construcción


Electrónicos
LOS PEQUEÑOS CHIPS NEGROS
No necesitas más que ver a tu BASIC Stamp (ver Figura 9-1) para encontrar ejemplos de
esos pequeños chips negros. Cada uno de estos chips tiene una función especial. El chip
de arriba a la derecha es el regulador de voltaje. Este chip recibe el voltaje de la bateria y
lo convierte casi exactamente en 5 V, que es lo que necesita el resto de los componentes
del BASIC Stamp para trabajar correctamente. El chip arriba a la izquierda es el módulo
EEPROM del BASIC Stamp. Los programas en PBASIC se convierten en números
llamados “simbolos” (tokens) que se descargan en el BASIC Stamp. Estos tokens se
almacenan en la EEPROM y usted puede verlos al hacer click en Run y luego en el mapa
de memoria del Editor BASIC Stamp. El chip más grande es el “Chip Interpreter”. Este
es un microcontrolador programado con el Interpreter PBASIC que manda los tokens
desde la EEPROM y luego interpreta la instrucción PBASIC que el token representa.
Luego ejecuta la instrucción y manda el siguiente token y así sucesivament. A este
proceso se le llama “Manda y Ejecuta”.

5V Regulator
converts input
2K EEPROM stores voltage to
PBASIC code and logged regulated 5
data volts
→ ←

Figura 9-1
Circuitos
Integrados
del BASIC
Stamp

PBASIC Interpreter chip


(a pre-programmed
microcontroller)

Página 292 · ¿Qué es un Microcontrolador?

Las personas usan el término Circuito Integrado (CI) cuando se refieren a los pequeños
chips negros. Realmente el circuito integrado es un pequeño chip de silicio que está
contenido dentro de un plástico negro o una cajita de cerámica. Dependiendo del chip
puede tener cientos, miles o millones de transistores. Un transistor es el bloque de
construcción básico de los circuitos integrados, y usted tendrá la oportunidad de
experimentar con el transistor en este capítulo. Otro componentes familiares diseñados
dentro del chip de silicio son los diodos, resistores y capacitores.

Reflexione un momento en las actividades que ha trabajado en este libro. La lista incluye
LEDs parpadeando, lectura de botones push, control de servos, lectura de mediciones de
luz con potenciometro, control de indicadores, y produciendo sonidos. Pero esto es
solamente el comienzo, esto es impresionante, considerando que usted puede combinar
estas actividades para hacer circuitos más complicados. El núcleo del sistema que hizo
posible todas estas actividades, lo compone justamente los tres circuitos integrados que
muestra la figura 9-1, y otros pocos componentes adicionales. Es justamente lo que
mostramos lo poderoso que son los circuitos integrados cuando se diseñan para trabajar
en conjunto.

EXPANDA SUS PROYECTOS CON CIRCUITOS INTEGRADOS


PERIFERICOS
Existen miles de circuitos integrados diseñados para usarse con microcontroladores.
Algunas veces diferentes fabricantes de circuitos integrados hacen chips que realizan la
misma función. Algunas veces cada característica del chip son muy diferentes y otras
veces son casi identicos pero uno podría costar menos que el otro. Cada uno de los miles
de circuitos integrados diferentes como bloques de construcción para una variedad de
diseños. Las compañias publican información del funcionamiento de cada uno de sus
circuitos integrados en documentos que se llaman hojas de datos y está disponibles en la
web. Estos fabricantes también publican notas de aplicación que muestra como se usan
sus circuitos integrados en una o formas útiles que facilitan el diseño de productos. Los
fabricantes de circuitos integrados dan esta información con el deseo de que los
ingenieros los usen para costruir sus ultimos juguetes o aplicaciones con sus chips. Si se
venden miles de juguetes significa que la compañía vende miles de sus circuitos
integrados.

En este capítulo, usted experimentará con el transistor y un circuito integrado de


propósito especial llamado Potenciometro Digital. Como mencionamos antes, el
transistor es el bloque de construcción básico de los circuitos integrados. También es el
bloque de construcción básico de muchos otros circuitos. El potenciometro digital
también tiene una variedad de usos. Recuerde que en cada actividad que usted haya
Bloques de Construcción Electrónicos · Página 293

realizado, hay probablente cientos de formas diferentes que usted podría usar en cada uno
de estos circuitos integrados.

ACTIVIDAD #1: CONTROL DEL FLUJO DE CORRIENTE CON UN


TRANSISTOR
En esta actividad, usted usará un transistor como una forma para controlar la corriente
que pasa a través de un LED. Usted puede usar un LED para monitorear la corriente ya
que brilla más cuando pasa más corriente por él, y brilla menos cuando pasa menos
corriente por él.

Presentado el Transistor
La Figura 9-2 muestra el símbolo esquemático y dibujo del transistor 2N3904. Hay
diferentes tipos de transistores. Uno llamado NPN, esto se refiere al tipo de material
usado para fabricar el transistor y la forma como esos materiales forman capas en el
silicio. La mejor manera de empezar a pensar en un transistor es imaginarse una válvula
que se usa para controlar la corriente. Diferentes transistores controlan cuanta corriente
pasa por diferentes medios. Este transistor controla la cantidad de corriente que pasa al
colector y regresa al emisor. Usa la cantidad de corriente permitida por la terminal de la
base para controlar la corriente de C a E. con una pequeña cantidad de corriente que
permite la base, circula una corriente 416 veces mayor a través del transistor de C a E.

C
Figura 9-2
C B Transistor 2N3904 {}
B Símbolo esquemático y dibujo del
E transistor
2N3904
E

Hoja de Datos de 2N3904 Anteriormente mencionamos, que los fabricantes de


semiconductores publican documentos llamados hoja de datos de los dispositivos que
fabrican. Estas hojas de datos contienen información que los ingenieros usan para diseñar
el dispositivo en un producto. Por ejemplo para ver la hoja de datos de 2N3904 vaya a
www.fairchildsemi.com. Meta 2N3904 en el rectángulo Search de la página principal de
Fairchild Semiconductors y de click en Go. Uno de los resultados de búsqueda puede ser
una liga a información del producto 2N3904. Sigala y busque la liga Datasheet.
La mayoría de los buscadores web muestran la hoja de datos y la abren con Adobe Acrobat
Reader.
Página 294 · ¿Qué es un Microcontrolador?

Partes Del Circuito Transistor


Un transistor 2N3904
Dos Resistores de 100 K Ω (café-negro-amarillo)
Un LED de cualquier color
Un potenciometro de 10 K Ω
Tres alambres para puentes

Construyendo y verificando el Circuito Transistor


La Figura 9-3 muestra un circuito que usted puede usar para controlar manualmente la
cantidad de corriente que el transistor permite que pase por el LED. Girando la perilla del
potenciometro, el circuito suministrará diferentes cantidades de corriente a la base del
transistor. Esto originará un cambio en la cantidad de corriente que el transistor permita
que pase de colector a emisor. El LED le dará una clara indicación de estos cambios
brillando más o brillando menos.

9 Construya el Circuito Mostrado en la Figura 9-3


o Asegurése que el ánodo (la terminal más larga) del LED está conectado
a Vdd.
o Verifique dos veces el circuito del Transistor. Observe que la parte plana
del transistor apunta a la derecha en el diagrama de alambrado.
9 Gire la perilla del transistor y verifique que cambia el brillo en el LED conforme
cambia la posición de la terminal central del potenciometro.

Vdd Vdd

LED Figura 9-3


Circuito del
Transistor
Controlado
POT 100 kΩ Manualmente
10 kΩ con el
Potenciometro
100 kΩ

Vss Vss
Bloques de Construcción Electrónicos · Página 295

Su Turno – Conmutando el Transistor en Apag/Enc


Si todo lo que usted desea es conmutar un transistor en Enc/Apag, usted puede usar el
circuito mostrado en la Figura 9-4. Cuando el BASIC Stamp manda una señal high a éste
circuito, el hará que el transistor conduzca mucha corriente como cuando ajustó el
potenciometro para máximo brillo. Cuando el BASIC Stamp manda una señal low a este
circuito hace que el transistor deje de conducir corriente, y el LED no emite luz.

¿Cuál es la diferencia entre conectar esto y conectar un circuito LED a un pin E/S?
Los pines del BASIC Stamp tienen limitaciones en la cantidad de corriente que pueden
entregar. También los transistores tienen limitaciones, pero estas son mucho mayores. En
La Guia del Estudiante de Control de Procesos, un transistor se usa para excitar un
pequeño ventilador de DC. También se usa para proporcionar cantidades grandes de
corriente a un resistor pequeño que se usa como elemento calefactor. Cualquiera de estas
dos aplicaciones podrían drenar mucha corriente que dañarían rápidamente a el BASIC
Stamp, pero el transistor se encarga de que esto no suceda.

9 Construya el Circuito que muestra la Figura 9-4


9 Escriba un programa que mande señales high y low a P8 dos veces cada
segundo. Sugerencia: El programa LedOnOff.bs2 del Capítulo 2 solamente
necesita modificarse para mandar señales high/low a P8 en lugar de P14.
9 Ejecute el programa y verifique que le da el control de Enc/Apag del LED.

Vdd Vdd Vin Vss


X3 Figura 9-4
P15 Circuito del
P14
LED P13
BASIC Stamp
P12 que controla
P11 el Enc/Apag
P10
P9 entregando
P8 100 kΩ P8 corriente al
P7
P6 LED con
P5 transistor.
100 kΩ P4
P3
P2
P1
P0
Vss X2
Página 296 · ¿Qué es un Microcontrolador?

ACTIVIDAD #2: PRESENTANDO EL POTENCIOMETRO DIGITAL


En esta actividad el ajuste manual del potenciometro con un circuito integrado que es un
potenciometro que se ajusta digitalmente. Luego, programará el BASIC Stamp para
ajustar el potenciometro digital, y este ajustará el brillo del LED en forma semejante
como lo hizo manualmente con el potenciometro en la actividad anterior.

Presentando el Potenciometro Digital


La Figura 9-5 muestra el mapa de pines del potenciometro digital que usará en esta
actividad. El chip tiene 8 pines, cuatro por lado que están espaciadas para insertarlo con
facilidad en su tablilla (tienen 1/10 de pulgada de separación). El fabricante coloca un
punto de referencia en el empaque de plástico que le indica la diferencia entre el pin 1 y
el pin 5. El punto de referencia es una pequeño medio círculo en el empaque del chip.
Usted puede usar este punto como una referencia para los números de los pines del chip.
Los números de los pines en el chip se cuentan arriba, en sentido inverso a las manecillas
del reloj.

Sustitución de partes. Para Parallax a veces es necesario sustituir una parte. La parte
funcionará igual, pero su etiqueta puede ser diferente. Usted puede encontrar que el
potenciometro digital incluido en las partes de su Kit Que es un Microcontrolador no está
marcado con AD5220 pero tenga la seguridad que trabajara correctamente en esta
actividad.

Reference
Notch
Figura 9-5
AD5220 Pin Map
1 CLK Vdd 8
Use the reference notch to make
2 U/D CS 7
sure you have the AD5220 right-side-
3 A1 B1 6 up when building it into your circuit on
the breadboard.
4 GND W1 5

AD5220
Bloques de Construcción Electrónicos · Página 297

Este es un resumen de cada uno de los pines y funciones del CI AD5220


1. CLK: Es el pin que recibe los pulsos de reloj (señales low-high) que mueven la
terminal W central.
2. U/D: Es el pin que recibe la señal high para hacer que la terminal W central se
mueva hacia A1, la terminal W verdaderamente no se mueve hasta que un pulso
(señal low-high-low) se manda al pin CLK.
3. A1: Es la terminal A del potenciómetro.
4. GND: Es la conexión de tierra. La tierra en la Tablilla Board of Education y
BASIC Stamp Home Work es la terminal Vss.
5. W1: Es la terminal W del potenciometro
6. B1: Es la terminal B del potenciometro
7. CS: Es la terminal Selección de Chip. Al aplicarle una señal high a este pin, el
chip ignora todas las señales de control que mandadas a CLK y U/D. Al aplicarle
una señal low a este chip, actua con cualquier señal de control que recibe.
8. Vdd: Se conecta a +5 V, que es Vdd en la tablilla Board of Education y BASIC
Stamp HomeWork.

Hoja de Datos de AD5220: Para ver la hoja de datos de AD5220: vaya a la liga
www.analog.com Meta AD5220 en el cuadro Search de la página principal de Analog
Devices y déle click en el botón Search. Dé click en Data Sheets. Dé click en la liga que
dice “AD5220: Increment/Decrement Digital Potentiometer Datasheet”

Partes del circuito Transistor Controlado con Potenciometro Digital


Un Transistor 2N3904
Dos Resistores de 100 K Ω (café-negro-amarillo)
Un LED de cualquier color
Un Potenciometro Digital AD5220
Diez alambres para puentes

Construyendo el Circuito del Potenciometro Digital


La Figura 9-6 muestra el circuito esquemático con el potenciometro digital usado en lugar
de un potenciometro manual, y la Figura 9-7 muestra el diagrama de alambrado del
circuito. El BASIC Stamp puede controla el potenciometro digital mandando señales de
control a los pines P5 y P6.

9 Construya el circuito mostrado en la Figura 9-6 y 9-7.


Página 298 · ¿Qué es un Microcontrolador?

Vdd Vdd
Vdd
AD5220
CLK Vdd 8 Figura 9-6
P6 1

U/D CS 7
Circuito
P5 2
Esquemático del
3
A1 B1 6 Transistor
GND W1 5 100 kΩ Controlado por
4
Potenciometro
Digital
100 kΩ

Vss Vss

Vdd Vin Vss


X3
P15
P14
P13
P12 Figura 9-7
P11 Diagrama de
P10
P9 alambrado de la
P8 Figura 9-6
P7
P6
AD5220

P5
P4
P3
P2
P1
P0
X2

Programando Control del Potenciometro Digital


Imagine que la perilla del potenciometro manual del ejercicio anterior tiene 128
posiciones. Tambien imagine que el potenciometro está en la mitad de su rango de
movimiento. Esto significa que usted puede girar la perilla en una dirección con 63 pasos
y en la otra dirección con 64 pasos.

Digamos que usted gira la perilla del potenciometro un paso en sentido de las manecillas
del reloj. El LED brillará muy poquito. Esto sería lo mismo que mandar una señal high al
pin U/D del AD5220 y mandar un puls o (high-low-high) al pin CLK.

HIGH 5
PULSOUT 6, 1
Bloques de Construcción Electrónicos · Página 299

Ahora imagine que gira su potenciometro manual 3 pasos en sentido inverso de las
manecillas del reloj. El LED brillará más poquito. Esto sería lo mismo que mandar una
señal low al pin U/D del AD5220 y mandar tres pulsos al pin CLK.
LOW 5
FOR counter = 1 TO 3
PULSOUT 6, 1
PAUSE 1
NEXT

En seguida imagine que usted gira el potenciometro totalmente en sentido de las


manecillas del reloj. Esto es lo mismo que mandar una señal high a pin U/D del AD5220
mandando 65 pulsos a la terminal CLK. Y ahora el LED estará en su máximo brillo.
HIGH 5
FOR counter = 1 TO 65
PULSOUT 6, 1
PAUSE 1
NEXT

Finalmente, imagine que usted gira el potenciometro totalmente en sentido inverso de las
manecillas del reloj. El LED no emitirá luz. Esto es lo mismo que mandar una señal low
a pin U/D mandando 128 pulsos a la terminal CLK.
LOW 5
FOR counter = 0 TO 127
PULSOUT 6, 1
PAUSE 1
NEXT

Programa Ejemplo: DigitalPotUpDown.bs2


Este programa ejemplo ajusta el potenciometro hacia arriba y hacia abajo, de un extremo
de su rango al otro extremo, haciendo que el LED brille gradualmente y luego
gradualmente no emita luz.

9 Meta y ejecute el programa DigitalPotUpDown.bs2


Página 300 · ¿Qué es un Microcontrolador?

' ¿Que es un Microcontroador? - DigitalPotUpDown.bs2


' Barrido de valores digitales del pot.

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Programa Ejecutandose!"

counter VAR Byte

DO
LOW 5

FOR counter = 0 TO 127


PULSOUT 6, 1
PAUSE 10
NEXT

HIGH 5

FOR counter = 0 TO 127


PULSOUT 6, 1
PAUSE 10
NEXT
LOOP

Su Turno – Cambiando la Velocidad y Reducción del Código


Usted puede incrementar o disminuir la velocidad con la que el LED brilla y se apaga,
cambie el argumento Duration de la instrucción PAUSE

9 Modifique y ejecute el programa usando PAUSE 20 y observe la diferencia en


velocidad con que el LED brilla y se apaga.
9 Repita usando PAUSE 5.

Para simplificar el programa usted puede usar una instrucción llamada TOGGLE.
TOGGLE cambia el estado de un pin E/S del BASIC Stamp, si el pin E/S estaba
mandando una señal high, TOGGLE hace que mande una señal low. Si el pin E/S estaba
mandando una señal low, TOGGLE hace que mande una señal high.

9 Guarde el programa DigitalPotUpDown.bs2 con el nombre


DigitalPotUpDownWithToggle .bs2
9 Modifique el programa para que sea como el que mostramos abajo.
9 Ejecute el programa y verifique que funciona de la misma forma como el
programa DigitalPotUpDown.bs2
9 Compare el número de líneas de código que necesito para hacer el mismo trabajo
Bloques de Construcción Electrónicos · Página 301

La Ejecución Fuera de la Memoria de Programa es un problema que algunas personas


encuentran cuando los proyectos del BASIC Stamp son muy grandes y complicados. Al
usar TOGGLE en lugar de dos bucles FOR...NEXT es exáctamente un ejemplo de algunas
técnicas que pueden usarse para hacer el mismo trabajo con la mitad de líneas de código.

' ¿Qué es un Microcontrolador? - DigitalPotUpDownWithToggle.bs2


' Barrido de Valores Digitales del Pot.

' {$STAMP BS2}


' {$PBASIC 2.5}

DEBUG "Programa en Ejecución!"

counter VAR Byte


LOW 5

DO
FOR counter = 0 TO 127
PULSOUT 6,5
PAUSE 10
NEXT
TOGGLE 5
LOOP

Mirando el Interior del Potenciometro Digital


La Figura 9-8 muestra un diagrama del interior del potenciometro AD5220. El AD5220
tiene 128 elementos resistivos cada uno de 78.125 Ω (valor nominal). Los 128 elementos
suman 10 K Ω.
3
A1
Ad5220 78 Ω
pos. 127
78 Ω
1 CLK
2 U/D pos. 126
W1 78 Ω
5 Figura 9-8
7 CS 40 Ω pos. 125
Interior del AD5220
… …
78 Ω
pos. 1
78 Ω
pos. 0 B1
6
Página 302 · ¿Qué es un Microcontrolador?

Un valor nominal significa un valor nombrado. Elementos como los resistores y


capacitores tipicamente tienen un valor nominal y una tolerancia. Cada uno de los
elementos resistivos del AD5220 tienen un valor nominal de 78.125 Ω con una tolerancia
del 30 % (23.438 Ω) arriba y debajo de su valor nominal.

Entre cada uno de estos elemtos resistivos hay un interruptor llamado “derivación” (tap).
En verdad cada interruptor es un grupo de transistores que se conmutan Enc/Apag para
permintir o no permitir el paso de corriente. Solamente uno de estos interruptores puede
cerrarse al mismo tiempo. Si se cierra uno de los interruptores superiores (por ejemplo la
posición 125, 126 o 127) es como tener la perilla del potenciometro manual casi al
extremo en el sentido de las manecillas del reloj. Si se cierra la posición 0 o 1 es como
tener la perilla del potenciometro manual casi al extremo en el sentido inverso de las
manecillas del reloj.

Imagine que se cierra la posición 126. Si usted desea mandar la derivación a 125, (la
posición 126 abierta y la posición 125 cerrada), fije U/D en low y luego aplique un pulso
a CLK. Si usted desea fijar la derivación en la posición 127 , fije U/D en high y aplique
dos pulsos. Si usted desea regresar la derivación a 1, fije U/D en low y aplique 126
pulsos.

El siguiente Programa Ejemplo usa la Terminal Debug para preguntarle que derivación
desea usted cerrar. Luego decide si el pin U/D se fija en high o low y aplica el número
correcto de pulsos para mover la derivación de su posición vieja a su posición nueva. Con
excepción de Data EEPROM, el siguiente Programa Ejemplo tiene casi todas las
secciones que usted normalmente espera encontrar en un programa de aplicación.

• Título – Son comentarios que incluyen el nombre del archivo de un


programa su descripción las directivas del PBASIC.
• Data EEPROM – Son declaraciones DATA que almacenan listas
predefinidas de valores en porciones de la memoria EEPROM que no se
necesitan para almacenar programa
• Definiciones I/O – Son directivas PIN que le dan nombre a los pines I/O
• Constantes – Son declaraciones CON que le dan valores a los nombres en el
programa.
• Variables – Son declaraciones VAR que le asignan nombres a porciones de
la memoria RAM del BASIC Stamp para almacenar valores.
• Initialization- Es una rutina que para iniciar el programa con el pie derecho
(correctamente). En el siguiente programa, la derivación del potenciometro
necesita fijarse en cero.
Bloques de Construcción Electrónicos · Página 303

• Main – Es la rutina que maneja los principales trabajos que el programa


tiene que hacer.
• Subrutinas – Son segmentos de código que hacen trabajos específicos, unos
con otros o en este caso para la rutina principal.

Programa Ejemplo: TerminalControlledDigitalPot.bs2


Usted puede usar este Programa Ejemplo y la Terminal Debug para fijar la derivación del
potenciometro digital. Cambiando el ajuste de la derivación del potenciometro digital,
usted puede cambiar el brillo del LED conectado al transistor que controla el
potenciometro digital La Figura 9-9 muestra un ejemplo para meter el valor 120 en la
ventana de Transmisión de la Terminal Debug mientras corre el programa.Como el ajuste
anterior del tap era 65, el LED brillará al doble cuando se haga el ajuste a 120.

Windowpanes Figura 9-9


Mandando
Transmit → mensajes al BASIC
Stamp

Haga click en la
Receive → ventana (superior) y
meta los números
para el nuevo ajuste
de la derivación

9 Meta y ejecute el programa TerminalControlledDigitalPot.bs2


9 Asegúrese que la ventanita Echo Off está sin marcar.
9 Haga click en la ventana Transmit de la Terminal Debug para colocar ahí el
cursor.
9 Meta valores entre 0 y 127 en la Terminal Debug. Asegurese de presionar la
tecla Enter despues de haber escrito los dígitos.

' -----[ Title ]-----------------------------------------------------------


' ¿Que es un Microcontrolador? - TerminalControlledDigitalPot.bs2
' Actualiza la derivación del pot digita en función de lo que mete en Terminal
Debug.

' {$STAMP BS2}


' {$PBASIC 2.5}

' -----[ Datos en EEPROM ]-------------------------------------------------


Página 304 · ¿Qué es un Microcontrolador?

' -----[ Define E/S ]-------------------------------------------------

UdPin PIN 5 ' Fija valores de los pines E/S


ClkPin PIN 6 ' conectados a CLK y U/D.

' -----[ Constants ]-------------------------------------------------------

DelayPulses CON 10 ' Retardo para observar iliminación del LED.


DelayReader CON 2000

' -----[ Variables ]-------------------------------------------------------

counter VAR Byte ' Contador para FOR...NEXT.


oldTapSetting VAR Byte 'Ajuste de Derivación previa.
newTapSetting VAR Byte 'Ajuste Nuevo de Derivación

' -----[ Initialization ]--------------------------------------------------

oldTapSetting = 0 ' Initializa el nuevo y viejo


newTapSetting = 0 ' ajustes de Derivación a cero

LOW UdPin 'Fija Pin de Arriba/Abajo pin para bajar.


FOR counter = 0 TO 127 'el ajuste de Derivación a su mínimo nivel.
PULSOUT 6,5
PAUSE 1
NEXT
PAUSE 1000 ' Espera 1 s antes del 1er mensaje

' -----[ Main Routine ]----------------------------------------------------

DO

GOSUB Get_New_Tap_Setting ' Indicador de usuario y obtener entrada.


GOSUB Set_Ud_Pin ' Fija pin Arriba/Abajo para up/down.
GOSUB Pulse_Clk_pin ' Manda pulsos.

LOOP

' -----[ Subroutines ]-----------------------------------------------------

Get_New_Tap_Setting: ' Muestra instrucciones y


' obtiene entrada de user del nuevo
DEBUG CLS, "Tap setting is: ", ' valor de ajuste de Derivación.
DEC newTapSetting, CR, CR
DEBUG "Enter new tap", CR, "setting (0 TO 127): "
DEBUGIN DEC newTapSetting

RETURN
Set_Ud_Pin: ' Examina los valores nuevos y viejos de Derivación
'para decidir el valor del pin de Arriba/Abajo .
IF newTapSetting > oldTapSetting THEN ' Notifica usuario si valore
HIGH UdPin ' son iguales.
Bloques de Construcción Electrónicos · Página 305

oldTapSetting = oldTapSetting + 1 ' Incrementa el pin Pulse_Clk_pin.


ELSEIF newTapSetting < oldTapSetting THEN
LOW UdPin
oldTapSetting = oldTapSetting - 1 ' Decrementa el pín Pulse_Clk_pin.

ELSE
DEBUG CR, "New and old settings", CR,
"are the same, try ", CR,
"again...", CR
PAUSE DelayReader ' Da tiempo lectura para ver
ENDIF ' Mensaje.

RETURN

Pulse_Clk_pin:

' Manda pulsos de valores nuevos y viejos. Recuerde que Set_Ud_Pin


' ajustaron el valor de ajuste viejo a ajuste nuevo en una unidad.
' Esto mantiene el bucle FOR...NEXT loop ejecutandose de una a muchas vees.

FOR counter = oldTapSetting TO newTapSetting


PULSOUT ClkPin, 1
PAUSE DelayPulses
NEXT

oldTapSetting = newTapSetting ' Mantiene el ajuste de viejos y nuevos


' valores de ajuste.
RETURN

RESUMEN
Este capítulo presentó los circuitos integrados y la forma como pueden usarse con el
BASIC Stamp. Se usó un transistor como válvula de corriente, y un potenciometro digital
para controlar la cantidad de corriente que pasa a través del transistor. Al examinar los
potenciometros digitales presentamos el punto de referencia y el mapa de pins como
elementos importantes de chips electrónicos. Se analizó la función de cada uno de los
pines del potenciometro digital y también la estructura interna del dispositivo. Se
presentó la instrucción TOGGLE del PBASIC como medio para ahorrar memoria de
programa.

Preguntas
1. ¿Cuáles son los nombres de las terminales del transistor que usted usó en este
capítulo?
2. ¿Qué terminal controla en paso de corriente a través del transistor?
3. ¿Cómo puede usted incrementar o decrementar la corriente que pasa a través del
transistor?
Página 306 · ¿Qué es un Microcontrolador?

Ejercicio
1. Escriba un programa que ajuste la derivación del potenciometro digital en la
posición, sin importar su posición actual.

Proyecto – Desafio Avanzado


1. Agregue un fototransistor a su proyecto y haga que el brillo del LED se ajuste
con la cantidad de luz que sensa el fototransistor. Nota: la solución es importante
ya que demuestra una aproximación útil para escalar una entrada a otra salida.

Soluciones
Q1. Emistor, Base y Colector.
Q2. La base controla la corriente que pasa a través del transistor.
Q3. Incremente o decremente la corriente permitida en la base del transistor.

E1. Para resolver este ejercicio, vea el programa TerminalControlledDigitalPot.bs2.


La primer actividad por hacer en la sección Inicialización, es fijar la derivación
en su posición más baja. Este cóodigo es precisamente lo que usa la solución de
abajo.

' ¿Qué es un Microcontrolador? - Ch9Ex01_SetTapToZero.bs2


' Gira el Potenciometro Digital hasta cero
' {$STAMP BS2}
' {$PBASIC 2.5}
DEBUG "Program Running!"

UdPin PIN 5 ' Fija los valores de los pines E/S


ClkPin PIN 6 ' Conectado a CLK y U/D.
counter VAR Byte ' Contador de FOR...NEXT.

LOW UdPin ' Ajusta el pin Arriba/Abajo en Abajo.


FOR counter = 0 TO 128 ' Fija Derivación en valor Mínimo.
PULSOUT ClkPin,5
PAUSE 1
NEXT

P1. Use el circuito del potenciometro digital que muestra la Figura 9-6 y el circuito
fototransistor de la Figura 7-4.

Esta solución se obtiene con el programa TerminalControlledDigitalPot.bs2, e


incorpora elementos del programa PhototransistorAnalogToBinary.bs2 del
Capítulo 7, Actividad # 5.
Bloques de Construcción Electrónicos · Página 307

Tambien aplica algo de Algebra para resolver el problema de escalamiento que


hace el rango de los valores que usted podría obtener de las mediciones de
tiempo RC del fototransistor se ajusten al rango de 0 a 128 para el potenciometro
digital. Recuerde que esta es una solución del ejemplo, y no significa que sea la
única solución o aproximación.

La llamada a la subrutina GOSUB Get_New_Tap_Setting del programa


TerminalControlledDigitalPot.bs2 se reemplaza por otras dos llamadas a
subrutina GOSUB Read_Phototransitos y GOSUB Scale:Phototransitor. De
igual manera la subrutina Get_New_Tap-Setting se reemplaza por
Read_Phototransistor y Scale_Phototransistor.
La subrutina Read_Phototransistor es una versión de subrutina de las
instrucciones que toma las mediciones de RCTIME del fototransistor y limita su
rango de entrada en el programa PhototransistorAnalogToBinary.bs2.

El pin, se han ajustado los nombres constantes y variables, y ha cambiado


PAUSE 100 a PAUSE 10 para que muestre 10 veces por segundo, estos cambios
se necesitaron para cargar el capacitor antes de tomar la medición de RCTIME.
Después esta subrutina almacena un valor en la variable lightReadin, este valor
tiene que estar entre ValMin (100) y ValMax (4000). Asegurese de verificar y
ajustar estos valores para su propias condiciones de iluminación.

El problema que ahora tenemos es que solamente hay 128 ajustes de derivación,
y 3900 mediciones posibles de RCTIME del fototransistor. Para resolver este
problema necesitamos dividir las mediciones RCTIME del fototransistor por
algún valor para hacer que ajuste en el rango 0 a 127. Entonces, sabemos que
necesitamos dividir el rango de valores de entrada por algun valor para hacer que
quede entre 128 valores. Usaremos esta ecuacion

Rango de Mediciones posibles del Fototransistor = 128 valores posibles de


derivación / Divisor de Escala

Para resolver esto, multiplicamos ambos lados de la ecuación por Divisor de


Escala, y luego dividimos ambos lados por 128 valores posibles de derivación

Divisor de Escala = Rango de Mediciones posibles del Fototransistor


128 valores posibles de derivación
Página 308 · ¿Qué es un Microcontrolador?

En el código, el Rango de Mediciones posibles del transistor es ValMax –


ValMin, y scaleDivisor es una variable, y 128 es una constante. Entonces, este
código de la sección Declaraciones e Inicialización calcula el valor de
scaleDivisor como

ScaleDivisor = (valMax - valMin) / 128

Después de cada medición RCTIME del fototransistor, la subrutina


Scale_Phototransistor resta valMin de lightReading y luego divide la medición
por scaleDivisor. El mapa resultante de mediciones de entrada del rango de 100 a
4000 cambia al rango de 0 a 127 ajustes de salida del derivador.

Escala_Fototransistor
LightReading = (lightReading - valMin) / scaleDivisor
RETURN

Considerando que ValMin es 100 y ValMax es 400, la variable lightReading


podría almacenar 3900 valores posibles. ¿Qué sucede si el rango de entrada fue
ValMin = 10,000 a ValMax = 13900? Cuando usted resta ValMin = 10000
todavía hay 3900 valores posibles, y dividiendolo por scaleDivisor mapeará
correctamente las mediciones a los ajustes correspondientes de derivación del
potenciometro digital. Si su código no restó primero ValMin, el valor escalado
resultante podría estar completamente fuera del rango 0 a 128 del potenciometro
digital.

' ¿Qué es un Microcontrolador? Ch9Prj01_PhotoControlledDigitalPot.bs2


' Actualiza el pot digital basado en lectura del fototransistor
' {$STAMP BS2}
' {$PBASIC 2.5}

' -----[ Declaraciones e Inicialización]------------------------------


UdPin PIN 5 ' Fija valores de pine E/S
ClkPin PIN 6 ' Conectado a CLK y U/D.
PhotoPin PIN 2 ' Fototransistor en pin P2
DelayPulses CON 10 ' Retardo pora observar brillo de LED.
DelayReader CON 2000
valMax CON 4000 'Valor Max del fototransistor
valMin CON 100 ' Valor Min del fototransistor

counter VAR Byte ' Contadorr para FOR...NEXT.


oldTapSetting VAR Byte ' Ajuste Previo de Derivación.
newTapSetting VAR Byte ' Ajuste Nuevo de Derivación.
lightReading VAR Word ' lectura del fototransistor
scaleDivisor VAR Word ' Para Escalamiento de valores
Bloques de Construcción Electrónicos · Página 309

' Fije un valor that que pueda dividirse en RCTIME del fototransistor
' para escalarlo a un valor en el range de 0 a 128

scaleDivisor = (valMax - valMin) / 128

oldTapSetting = 0 ' Initialicee el nuevo y viejo


newTapSetting = 0 ' ajuste del Derivación a cero.

LOW UdPin ' Ajuste el pin Arri/Abaj en Abajo.


FOR counter = 0 TO 127 ' Ajuste Derivación a mínima posición.
PULSOUT ClkPin,5
PAUSE 1
NEXT

PAUSE 1000 ' Espera 1 sec. Antes 1er mensaje

' -----[ Rutina Principal ]----------------------------------------


DO
GOSUB Read_Phototransistor
GOSUB Scale_Phototransistor
newTapSetting = lightReading MIN 1 MAX 127
DEBUG HOME, DEC5 lightReading
GOSUB Set_Ud_Pin ' Fije el pin Arri/Abajo en Abajo.
GOSUB Pulse_Clk_pin ' Manda pulsos.
LOOP

' -----[ Subrutinas ]-------------------------------------------------


Set_Ud_Pin: ' Examina viejos y nuevos
IF newTapSetting > oldTapSetting THEN ' valores para decidir
HIGH UdPin
ELSEIF newTapSetting < oldTapSetting THEN ' el valor pin. Y
LOW UdPin ' notificar al usuario si
ENDIF ' los valores son iguales.
RETURN

Pulse_Clk_pin: ' Manda pulsos


FOR counter = oldTapSetting TO newTapSetting ' de viejos
PULSOUT ClkPin, 1 ' a nuevos valoress.
PAUSE DelayPulses
NEXT
oldTapSetting = newTapSetting ' Mantiene el ajuste de nuevos
RETURN 'y viejos valores.

Read_Phototransistor:
HIGH PhotoPin
PAUSE 1
RCTIME PhotoPin, 1, lightReading
lightReading = lightReading MAX valMax MIN valMin
RETURN

Scale_Phototransistor:
lightReading = (lightReading - valMin) / scaleDivisor
RETURN
Página 310 · ¿Qué es un Microcontrolador?
Realizando sus Propios Inventos · Página 311

Capítulo 10: Realizando sus Propios Inventos


Este texto le presentó las bases de integrar computadora y Tablilla en proyectos e
inventos. Ahora usted tiene experiencia de los ingredientes de circuitos comunes en los
productos cotidianos que incluyen: luces indicadoras, botones, servos, perillas,
indicadores digitales, sensores de luz, bocinas, transistores, y otros circuitos integrados.
Usted también tiene experiencia en conectar esos circuitos al controlador BASIC Stamp y
escribir códigos para verificar cada uno de ellos así como integrarlos en pequeñas
aplicaciones.

En este punto, usted puede estar interesado en usar sus nuevas habilidades para inventar
algo o para aprender más o quiza ambas actividades. Usted ha aprendido que en este libro
puede obtener un buen método para hacer prototipos de una variedad amplia de inventos.
En este capítulo usaremos un sistema micro alarma como ejemplo de prototipo de un
dispositivo familiar. A lo largo del camino cubriremos algunas técnicas importantes de
prototipos y habitos, que incluyen:

• Sugerencias para el desarrollo inicial de sus ideas de diseño e inventos.


• Un ejemplo de cómo construir y verificar cada subsistema del prototipo.
• Ejemplos de cómo incorporar códigos de prueba en el código del proyecto.
• Buenas prácticas en los comentarios de los códigos y versiones de archivos.
• Ejemplos de partes familiares como xxx para dispositivos con interfaces
similares.
• Sugerencias y trucos para obtener diseños pasados xx
• En donde buscar más sobre proyectos Stamps en Clase y dispositivos
interesantes.

APLIQUE LO QUE USTED YA CONOCE EN OTRAS PARTES Y


COMPONENTES
El circuito botón push del capítulo 3 es un ejemplo de un dispositivo de entrada muy
simple que convierte una condición física (ya sea que haya o no haya presionado el
botón) en una señal high o low que el BASIC Stamp puede detectar y procesar. Usted
también ha usado botones push en aplicaciones que controlan luces parpadeantes,
posiciones de servos y tonos de bocina. Hay muchos sensores que detectan condiciones
físicas además de las de contacto que también mandan señales que el pin E/S del BASIC
Stamp puede monitorear. Unos pocos ejemplos incluyen sensores de gas, movimiento y
sonido, y hay muchos muchos más. Como ahora usted ya tiene experiencia haciendo que
Página 312 · ¿Qué es un Microcontrolador?

BASIC Stamp monitoree un circuito botón push, monitorear un sensor de sonido o


movimiento es muy similar, y ciertamente el siguiente paso razonable.

Otra técnica de este libro fue medir el tiempo de descarga de RC con la instrucción
RCTIME para sensar la posición de una perilla de potenciometro y niveles de luz con un
fototransistor y un LED. Estos ejemplo son la punta del iceberg en términos de sensores
que usted puede usar con un circuito RC

Otros ejemplos son sensores de humedad, temperatura y presión que son solamente el
principio.El indicador de luz LED proporciona otro ejemplo de circuito que es
representativo de una variedad de circuitos con funciones diferentes. El circuito LED es
controlado por un pin de salida de señales high/low del BASIC Stamp. Con circuitos de
soporte adicional, usted puede usar las señales para mover motores eléctricos hacia
delante y hacia atrás, apagar y encender luces, apagar y encender elementos de
calentamiento y mucho más.

Ahora, piense en otros dispositivos con lo que usted ya ha experimentado en este libro.
Cada uno de ellos es justamente un ejemplo en una lista de dispositivos con interfaces
similares que usted puede usar para hacer prototipos de varios inventos.

HACIENDO EL PROTOTIPO DE UN SISTEMA DE MICRO SEGURIDAD


En este capítulo usaremos partes del kit ¿Qué es un Microcontrolador? para hacer un
prototipo de un muy pequeño sistema de seguridad que usted podría usar en un escritorio,
caja de herramienas o closet, xx. Con este prototipo también investigaremos otras partes y
componentes que usted podría sustituir en su sistema de seguridad para que funcione con
los mismos principios de las partes conocidas de su kit, y podría darle a su sistema una
gran funcionalidad. A partir de esto, veremos como encontrar, comprender, verificar e
incorporar otros componentes con las que quizá usted nunca ha trabajado anteriormente.

ACTIVIDAD #1: DE LA IDEA A LA DEMONSTRACIÓN DEL CONCEPTO


Muchos productos empiezan con una idea, y en algunos casos un invento puede ser xx en
otros casos es algo que resuelve un problema. Esta idea puede desarrollarse en conceptos
con dibujos y especificaciones, y a veces un trabajo anterior de diseño. El siguiente paso
es tipicamente desarrollar un prototipo que funcione. Quizá no sea bonito pero debe ser
fiable para demostrar que un dispositivo puede trabajar de acuerdo con el concepto y
especificación. En las compañias donde se desarrollan productos, tipicamente se requiere
la demostración del concepto para obtener la aprobación de la dirección y fondos para
continuar desarrollando el producto.
Realizando sus Propios Inventos · Página 313

Idea, Concepto y Descripción Funcional


Digamos que usted tiene un gabinete con una puerta en una bisagra y charola, y necesita
un muy pequeño sistema de alarma. O quizá usted desea diseñar un gabinete especial con
seguridad interconstruida. La Figura 10-1 muestra un bosquejo de cómo un
potenciometro y un contacto eléctrico similar a un botón push puede usarse para detectar
cuando la puerta o la charola está abierta. Este bosquejo es similar al concepto diagrama,
el cual se enfoca solamente en mostrar lo que el producto o invento puede hacer.

Figura 10-1
Bosquejo de
un gabinete
con
Microsistema
de Seguridad

Es importante la descripción funcional. Cuando usted tiene una mejor idea de lo que
supone que su dispositivo tiene que hacer al principio, esto previene problemas que
puedan suceder si usted tiene que rediseñar el dispositivo para adecuarle algo que usted
no había pensado. Los diseñadores y las compañias que crean aparatos para clientes
tienen que ser muy cuidadosos al examinar sus clientes para comprender lo que ellos
esperan. En especial los dispositivos diseñados para clientes, sus rediseños pueden ser
muy costosos y consumir mucho tiempo.

Este es un ejemplo de una muy breve descripción funcional que podemos usar para
nuestro sistema. Desarrolle un prototipo del circuito y programa de un microsistema de
Página 314 · ¿Qué es un Microcontrolador?

alarma que pueda monitorear una pequeña puerta que tenga una bisagra y una charola. Si
se activa una alarma deberá sonar si la puerta o la charola se abren. Un LED de estado
deberá iluminarse verde cuando la alarma no está preparada, y rojo cuando se active. El
prototipo controlado por computadora debe activarse y desactivarse. Se deberá incorporar
un retardo de tiempo después que el dispositivo se ha activado para permitirle al usuario
que cierre el gabinete.

Especificaciones
Además de la descripción funcional, las especificaciones tipicamente toman en
consideración muchos aspectos que la propuesta debe incluir: costo, consumo de energía,
voltaje de alimentación, dimensiones, peso, volumen de la bocina, y algunos otros
detalles.

Diseño Inicial
Frecuentemente, el diseño inicial incluye tormenta de ideas para que las aproximaciones
puedan resolver el problema de diseño, y muchas de estas ideas tienen que verificarse
para saber si son verdaderamente realizables. Otras porciones del diseño podrían
involucrar partes normalizadas o comunes y practicas de diseño. Nuestra micro alamarma
cae en esta categoría, al menos en el prototipo. Se deberá colocar un botón push en el
gabinete para que cuando la charola se cierre presione al botón push. El LED bicolor es
un indicador familiar y también la bocina piezo eléctrica es una bien conocida generadora
de ruido de alarma.

Entonces, ahora conocemos los circuitos que necesitamos para nuestro prototipo gabine
de micro seguridad: LED bicolor, botón push, potenciometro y bocina piezo. La siguiente
es una lista de los capitulos y actividades donde presentamos cada uno de estos circuitos:

• LED bicolor: Capítulo 2, Actividad #5


• Botón push: Capítulo 3, Actividad #2
• Potenciometro: Capítulo 5, Actividad #3
• Bocina piezo: Capítulo 8, Actividad #1

Lista de Partes de la Alarma


Juntando el material de cada capitulo estas forman en conjunto la lista de partes:
Tres Resistores de 220 Ω (rojo-rojo-café) Una Bocina piezo
Un Resistor 10 K Ω (café-negro-naranja) Un Capacitor de 0.01μF
Un LED bicolor , Un potenciometro de 10 K Ω
Un Botón push – normalmente abierto , Cuatro Alambres para puentes
Realizando sus Propios Inventos · Página 315

Esquemático de la Alarma del Gabinete


El esquemático de la Figura 10-2 está arreglado para darle a todos los componentes
plenitud de espacio en la tablilla, de tal forma de no todos las conexiones de los pines
están en la misma forma como estuvieron el los capítulos anteriores.

Recuerde esto cuando descargue los ejemplos de los códigos de los capítulos anteriores
para verificar cada uno de los circuitos.

Figura 10-2 Esquematico del Prototipo del Sistema de Alarma.


Página 316 · ¿Qué es un Microcontrolador?

ACTIVIDAD #2: CONSTRUYA Y VERIFIQUE INDIVIDUALMENTE CADA


CIRCUITO
Siempre que le sea posible, verifique individualmente cada subsistema antes de tratar
hacerlos trabajar en conjunto. Si usted sigue esta regla, sus proyectos funcionaran mejor y
le ahorraran mucho tiempo al buscar fallas. Por ejemplo, si todos los circuitos se
construyen sin verificar, las personas tienen una tendencia natural de emplear mucho
tiempo examinando el código y olvidan verificar cada circuito

Entonces, el ahorro más importante de tiempo con este procedimiento es asegurarse que
no hay errores en el circuito que traten de hacerle pensar que son errores de código.

Construyendo y Verificando Cada Circuito


Esta actividad demuestra concentrarse en subsistemas individuales construyendo y
verificando cada circuito. Depues que se ha construido y verificado el circuito botón
push, construimos y verificamos el circuito de la bocina. Después repetimos este proceso
con el potenciometro y el LED bicolor, los circuitos estarán correctos y listos para
aplicarles el programa

9 Busque el código del Capítulo 3, Actividad #2 para adaptarlo a las pruebas que
muestra la Figura 10-2 del circuito botón push.
9 Cambie las referencias de los pines de E/S para que trabajen con el circuito de la
Figura 10-2
9 Verifique el código y corrija cualquier error de programa o alambrado antes de
continuar.
9 Repita el mismo proceso para:
o El circuito de la bocina piezo del Capítulo 8, Actividad #1.
o El circuito del potenciometro del Capítulo 5, Actividad # 3
o El circuito del LED bicolor del Capítulo 2, Actividad # 5
9 Asegurese de guardar cada programa modificado bajo un nuevo nombre, de
preferencia en una carpeta separada , puede ser de nombre “WAM Capítulo 10”

Su Turno – Prueba del Sistema


Ahora que todos los circuitos están verificados y todos los programas de prueba
guardados en su PC, es hora de construir una prueba del sistema que muestre mensajes
del circuito que se está verificando y ejecute su código de prueba. Este es un ejercicio útil
porque los sistemas de alarma típicos tienen auto-prueba y modos de diagnóstico que
utilizan todas las caracteristicas en un rutina.
Realizando sus Propios Inventos · Página 317

9 Combine elementos en sus programas de prueba en un sólo programa que:


o Comience mostrando el color del LED bicolor en la Terminal Debug y
actualice el color...
o Luego muestre un mensaje que indique el sonido de la bocina piezo
mientras emite beeps..
o Finalmente meta un bucle que reporte repetidamente el sensor botón
push de la charola y el sensor de la puerta del potenciometro con bisagra
que sense su status en la Terminal Debug.
9 Pruebe y corrija cualquier error que exista antes de continuar.

ACTIVIDAD #3: ORGANICE LAS TAREAS DE SUS CÓDIGOS EN PIEZAS


PEQUEÑAS
Así como cada circuito debe construirse y verificarse antes de hacer que trabajen en
conjunto, cada carácteristica del código también debe desarrollarse y verificarse
individualmente antes de incorporarlos en una aplicación grande. El programa
MicroAlarmProto(Dec-009).bs2 es un ejemplo de un programa pensado en verificar un
concepto. La interface del usuario de la Terminal Debug está siempre presente y el
sistema de alarma se repite correctamente a través de sus varios modos o estados,
incluyendo no preparada, preparando, preparada y accionada.

En este punto, la subrutina Alarm-Arming al final del programa está todavía en


construcción. Contiene el código que activa la alarma si se libera el botón push, y esto
indica que la charola se ha abierto, pero todavía no monitorea la puerta bisagrada. Se
requiere agregar el código del potenciometro a la subrutina Check-Sensors que mide su
posición. Si su posición está más alla de cierto umbral, por ejemplo 15, la variable state
deberá cambiar a activado. Todavía hay dos tareas adicionales para cambiar el color del
LED bicolor en verde cuando la alarma no esté preparada, y en rojo cuando se active.
Estas tareas faltantes están indicadas por comentarios en el código semejante a esto:

‘ Hacer: El LED bicolor verde


...
‘ Hacer: El LED bicolor rojo
...
‘ Hacer: Verificar si el potenciometro está arriba del
valor de umbral. Si está, entonces, disparar la alarma.

9 Meta a mano el programa MicroAlarmProto(Dev-009) en el Editor de BASIC


Stamp (recomendado) o descarguelo de www.parallax.com/go/WAM y ábralo
con el editor del BASIC Stamp..
Página 318 · ¿Qué es un Microcontrolador?

9 Examine el programa y observe que cada subrutina es modular, y hace un trabajo


específico. Esto es parte de organizar las tareas de los códigos en piezas
pequeñas.
9 Si no recuerda como usar las ventanas Transmitir y Recibir de la Terminal
Debug, repase la Figura 9-9.
9 Cargue el programa MicroAlarmProto(Dev-009) en el BASIC Stamp y use la
ventana Transmitir de la Terminal Debug para escribir el caracter A para activar
la alarma, y D para desactivar la alarma. El sistema hace una pequeña cuenta
descendente antes de activar la alarma. Asegurese de mantener presionado el
botón push antes de activar la alarma.
9 Cuando la alarma esté preparada, libere el botón. Usted tendrá una oportunidad
de desactivar la alarma despues de unos pocos segundo del tono de alarma.
9 Active nuevamente la alarma. Esta vez escriba “D” para desactivar la alarma
antes de liberar el botón.

' -----[ Title ]-----------------------------------------------------------


'¿Qué es un Microcontrolador? - MicroAlarmProto(Dev-009).bs2
'Prueba del Sistema de Alarma.

' {$STAMP BS2} ' Target = BASIC Stamp 2


' {$PBASIC 2.5} ' Language = PBASIC 2.5

' -----[ Constantes ]-------------------------------------------------------


NotArmed CON 0 ' Estados del Sistema de Alarma
Arming CON 1
Armed CON 3
Triggered CON 4

' -----[ Variables ]-------------------------------------------------------


seconds VAR Word ' El contador almacena segundos
counter VAR Byte ' Para el conteo
char VAR Byte ' Almacena Caracteres
state VAR Nib ' Almacena los estados del sistema de alarma

' -----[ Initialización ]--------------------------------------------------


PAUSE 1000 ' Espera 1 segundo
DEBUG "Program running..." ' Muestra mensaje Ejecutandose
state = NotArmed ' Inicializa los estados de alarma

' -----[ Rutine Principal ]------------------------------------------------


DO ' Bucle Principal
SELECT state ' Evalua los estados caso por caso
CASE NotArmed ' Si estado = no preparada
' To-do: bicolor LED green
GOSUB Prompt_to_Arm ' Llama a Prompt_to_Arm
CASE Arming ' Si estado = Preparando
GOSUB Alarm_Arming ' Llama a Alarm_Arming
CASE Armed ' Si estado = Armed
Realizando sus Propios Inventos · Página 319

' To-do: bicolor LED red


GOSUB Check_Sensors ' Llama Check_Sensors
GOSUB Prompt_to_Disarm ' Llama Prompt_to_Disarm
CASE Triggered ' Si estado = Triggered
GOSUB Alarm_Triggered ' Llama a Alarm_Triggered
ENDSELECT ' Hecho evaluaando caracter
LOOP ' Repite el Bucle Principal

' =====[ Subrutinas ]=====================================================

' -----[ Subrutina - Prompt_To_Arm ]--------------------------------------


Prompt_to_Arm:
DEBUG CLS, "Type A to arm", CR, ">" ' Muestra Mensaje
GOSUB Get_User_Input ' Llama Get_User_Input
RETURN ' Regresa desde Prompt_to_Arm

' -----[ Subrutina - Prompt_to_Disarm ]-----------------------------------


Prompt_to_Disarm:
DEBUG CLS, "Type D to disarm", CR, ">" ' Muestra Mensaje
GOSUB Get_User_Input ' Llama a Get_User_Input
RETURN ' Regresa desde Prompt_to_Disarm

' -----[ Subrutina - Alarm_Arming ]---------------------------------------


Alarm_Arming:
DEBUG CLS, "Close the cabinet.", ' Alerta usuario a asegurar gabinete
CR, "You have"
FOR seconds = 8 TO 0 ' Cuenta descendente segundos restantes
DEBUG CRSRX, 9, DEC seconds, CLREOL, 'Muestra tiempo restante
" seconds left..."
PAUSE 1000 ' Espera 1 segundo
NEXT ' Repite conteo descendente
state = Armed ' Fija estado de variable en Preparada
RETURN ' Retorna desde Alarm_Arming

' -----[ Subrutina - Alarm_Armed ]----------------------------------------


Alarm_Armed:
DO ' Bucle Preparada
GOSUB Prompt_To_disarm ' Checa entrada de usuario
GOSUB Check_Sensors ' Checa sensores
LOOP UNTIL state <> Armed ' Repite hasta estado no preparada
RETURN ' Regresea desde Alarm_Armed

' -----[ Subrutina - Alarm_Triggered ]------------------------------------


Alarm_Triggered:
DO ' Bucle Alarma activada
DEBUG CLS, "Alarm triggered!!!" ' Muestra precauciones
FOR counter = 1 TO 15 ' Suenan 15 tono de alarma
FREQOUT 6, 100, 4500
PAUSE 100
NEXT
FOR seconds = 1 TO 6 ' 3 segundo.para que usuario desprepare
IF state <> triggered THEN EXIT
GOSUB Prompt_to_Disarm
Página 320 · ¿Qué es un Microcontrolador?

NEXT
LOOP UNTIL state <> triggered ' Repite hasta despreparar' -

-[ Subrutina - Get_User_Input ]-------------------------------------


Get_User_Input:
char = 0 ' Limpia variable char
SERIN 16, 84, 500, Timeout_Label, [char] ' Espera 0.5 s. para
GOSUB Process_Char ' Presionar Tecla, si presiona, llama: Process_Char
Timeout_Label: ' Si no presiona , brinca Llama
RETURN ' Regresa desde Get_User_Input

' -----[ Subrutina - Process_Char ]---------------------------------------


Process_Char:
SELECT char ' Evalua caracter caso por caso
CASE "A", "a" ' Si "A" o "a"
state = Arming ' Cambia estado var a Preparando
CASE "D", "d" ' Si no "D" o "d"
state = NotArmed ' Canbia estado var a No Preparada
CASE ELSE ' si no, no "A", "a", "D", "d"
DEBUG "Wrong character, try again" ' Muestra mensaje error
PAUSE 2000 ' Da a usuario 2 sec.para leer
ENDSELECT ' Hecho con evaluando caracter
RETURN ' Regresa desde Process_Char

' -----[ Subrutina - Check_Sensors ]--------------------------------------


Check_Sensors:
' To-do: Checa so Potenciometro esta arriba del valor de umbral.
' Si sí, entonces, alarama disparada
IF IN0 = 0 THEN state = Triggered ' Boton sueñtp? Dispara alarma.
RETURN ' Regresa desde Check_Sensors

Nuevas Técnicas de Codificación en el Código Ejemplo


De una mirada al bucle FOR...NEXT en la subrutina Alarm-Triggered:
FOR seconds = 1 TO 6
IF state <> triggered THEN EXIT
GOSUB Prompt_to_Disarm
NEXT

Si una llamada a la subrutina the Prompt_to_Disarm genera un cambio en la variable


state. La frase IF...THEN usa EXIT para salir del bucle FOR...NEXT antes que se hagan
6 repeticiones.

Aparece una nueva instrucción llamada SERIN en la subrutina Get_User_Input. Las


instrucciones DEBUG Y DEBUGIN son versiones especiales de las instrucciones más
generales SEROUT y SERIN. Para ver como trabajan trate de reemplazar la instrucción
DEBUG “Programa Ejecutandose...” con SEROUT 16, 84, [“Programa Ejecutandose...].
A diferencia de las instruccións DEBUG y DEBUGIN, SEROUT y SERIN pueden
Realizando sus Propios Inventos · Página 321

comunicarse con cualquier pin de E/S, o con el pin 16 para comunicarse con la Terminal
Debug. Ellas también tienen códigos especiales que usted puede usar para seleccionar la
velocidad de los bauds que se describen en la Tablas de Velocidad de Bauds en las
instrucciones SERIN y SEROUT que están en el Manual BASIC Stamp.

Get_User_Input:
char = 0
SERIN 16, 84, 500, Timeout_Label, [char]
GOSUB Process_Char
Timeout_Label:
RETURN

La subrutina Get_User_Input empieza fijando la variable char a 0 para limpiar los valores
anteriores que char podría haber almacenado. Luego, ejecuta la instrucción SERIN, con el
valor opcional Timeout con valor de 500 ms (medio segundo), y su etiqueta opcional
timeout con su valor asociado a Timeout_Labe1, que está dos líneas abajo. Si la
instrucción SERIN recibe un carácter dentro de los 500 ms, almacena el resultado en la
variable char y se mueve a la siguiente línea y esta llama a la subrutina Process_Char. Si
no recibe un carácter dentro de los 500 ms brinca a Timeout_Label que hace que brinque
sobre la llamada a subrutina.

Su Turno – Pasos Siguientes hacia la Demostración del Concepto


Es tiempo de hacer que este programa funcione como Demostración del Concepto.
Guarde una copia del programa MicroAlarmProto(Dev-009).bs2 con el nonmbre
MicroAlarmProto(Dev010).bs2.

9 Use segmentos de sus códigos verificados de la Actividad #2 para completar los


tres “Todo”
9 Verifique su código modificado, y cuando esté trabajando correctamente, guarde
una copia del programa con el nombre MicroAlarmProto(Dev-011),bs2.

ACTIVIDAD #4: ¡DOCUMENTE SU CÓDIGO!


El programa MicroAlarmProto(Dev-011).bs2 no está completamente terminado porque
todavía necesita alguna documentación y otros cambios que hagan que el programa sea
fácil de modificar y mantener.

Por ejemplo, en la subrutina Alarm_Triggered, la instrucción FREQOUT, 6, 100, 4500


tiene algunos codificadores llamados “números misteriosos” Los números misteriosos
son valores que se usan en una forma que el observador casual podría no ser capáz de
reconocer facilmente. Usted podría reescribir esta instrucción como FREQOUT,
Página 322 · ¿Qué es un Microcontrolador?

SpeakerPin, BeepTime, AlarmTone. Entonces usted puede agregar directivas Pin en la


sección arriba de la sección Constants y declarar SpeakerPin PIN 6. También en la
sección Constants, declare BeepTime CON 100, y AlarmTone CON 4500.

En un programa dado cada constante no tiene que tener nombre. Recuerde que los
números misteriosos son valores que se usan en una forma que el observador casual
podría no ser capáz de reconocer facilmente. Otro ejemplo de la subrutina
Alarm:Triggered es:

FOR seconds = 1 TO 6 ' 3 sec. for user to disarm.

Los números 1 y 6 no son números misteriosos porque es muy claro que hacen que el
bucle FOR...NEXT se repita seis veces, y el comentario a su derecha indica que seis
repeticiones duran por tres segundos. No todos los supervisores pueden estar de acuerdo
con esta interpretación, y algunos podrían proclamar que el 1 y el 6 son números
misteriosos. Si usted termina de codificar su trabajo y a su jefe le gusta nombrar todas las
constantes, eso es probablemente una buena idea para adjuntar a su estilo de codificación
requerido.

9 Vaya al programa MicroAlarmProto(Dev-011).bs2 y documente los números


misteriosos declarando las directivas pin y las constantes, y sustituya sus
nombres por números en el programa.
9 Una excepción en las directivan PIN es el argumento Pin de la instrucción
SERIN, que debe declararse como una constante y no como un pin. Los
argumentos Pin son para pines E/S y su rango esde P0 a P15. El argumento 16 en
el Pin hace que la instrucción SERIN escuche al pin SIN del módulo BASIC
Stamp que está conectado en el puerto de programación de su tablilla.

Otra área donde la documentación de MicroAlarmProto(Dec011).bs2 que todavía está


debil es en los comentarios que explican cada rutina y subrutina. Cada subrutina deberá
tener comentarios que expliquen lo que hace, las variables de las que depende para hacer
su trabajo, y cualquier variables que la subrutina use para almacenar resultados antes de
que regrese (RETURN). Este es un ejemplo de una buena documentación agregada al
principio de la subrutina Process_Char.

' -----[ Subroutine - Process_Char ]---------------------------


'
' Actualiza el estado de variable basedo en el contenido de la
' variable char. Si char contiene "A" o "a", la constante
Armed
' se almacena en state. Si char contine "D" or "d",
Realizando sus Propios Inventos · Página 323

' la constante NotArmed se almacena en state.


'
Process_Char:
'... aqui se omite el código
RETURN ' Regresa de...

Actualice las descripciones entre los títulos de la subrutina y sus etiquetas, y también
repítalo para la rutina principal. Cuando lo haya hecho, guarde una copia de su código
con el nombre MicroAlarmProofOfConcept(v1.0).bs2

Guarde Copias e Incremente el Número de Version después de Cada Cambio


Pequeño
Asegurese de continuar guardando copie de su código con cada ajuste pequeño. Esto
facilita tomar tomar pequeños pasos hacia atrás para trabar su código si sus cambios le
causan errores. Por ejemplo, antes de su siguiente modificación, guarde el archivo como
MicroAlarmProofOfConcept(v 1.01) o quizá v1.01ª. Cuando su próxima caracteristica
quede completamente implementada escoja un paso razonable de su versión. Si es una
revisión pequeña , trate con v1.1; si es una revisión grande llevela a v2.0

ACTIVIDAD #5: DELE A SU APLICACIÓN MARAVILLOSA NUEVAS


FUNCIONES
Como mencionamos anteriormente, cada circuito con el que usted ha trabajado en este
texto es realmente un ejemplo de un grupo de componentes y módulos con los que el
BASIC Stamp puede interactuar en la misma forma. La Figura 10-3 muestra algunas
substituciones de partes que usted podría hacer para convertir su actual minisistema de
seguridad en uno que proteja un objeto localizado en la abertura. Este sistema modificado
puede detectar movimientos en el cuarto, y tambien proteger si alguien levanta un objeto
que usted desea proteger.

• El botón push que genera salidas high-low: reemplacelo por un Sensor de


Movimiento PIR
• El potenciometro: Resistor Variable reemplacelo con un Sensor FlexiForce
Sensor

El sensor PIR detecta cambios de patrones de luz pasiva infrarroja en el área circundante
y manda una señal high para indicar que ha detectado movimiento, o una señal low para
indicar que no hay movimiento. La resistencia del sensor FlexiForce varía con la fuerza
aplicada en en punto redondo que está en un extremo (por ejemplo un objeto arriba de él)
y puede medirse el tiempo en un circuito RC utilizando la instrucción RCTIME.
Página 324 · ¿Qué es un Microcontrolador?

Figura 10-3 Sensores para actualizar nuestro Mini Sistema de Alarma

PIR Motion FlexiForce Sensor


Sensor

9 Vaya a www.parallax.com y escriba “motion detection” en el campo Search, y


haga click en el botón Go
9 Busque Sensor PIR en resultados de búsqueda y vaya a su página de productos.
9 Descargue la documentación (en PDF) del Sensor PIR y opcionalmente vea el
video de Sensor PIR. El PDF estará en la página sección de Descargas.
9 Lea las explicaciones de la documentación, el esquemático y el código ejemplo
PIR_Simple.bs2. ¿Podría usted sustituir este sensor por el botón push?
9 Regrese a resultados de búsqueda (o regrese a la página principal de Parallax) y
escriba pressure en el campo Search y siga la liga del sensor FlexiForce.
9 Encuentre la documentación de FlexiForce y el Código Fuente (zip).
9 En un archivo descomprimido, abra y lea la documentación, esquemático y el
código fuente de FlexiForceSimple.bs2. ¿Podría usted sustituir este sensor por el
potenciometro?

El ejemplo paso a paso que demuestra como mejorar tanto en esta como en la
siguiente actividad que puede usted incorporar en la aplicación de su Micro Alarma,
está en Stamps in Class “MiniProyectos” en la liga www.parallax.com/Education

ACTIVIDAD #6: COMO RESOLVER DISEÑOS DIFICILES


Ahora que sabe con certeza que hacer con ¿Qué es un Microcontrolador? uno de los
pasos más importantes siguientes que puede tomar es encontrar respuestas a tareas que no
sabe como resolver con su microcontrolador. Estos son los pasos generales:

Paso 1: Busque componentes o circuitos que podrían resolver su problema.


Realizando sus Propios Inventos · Página 325

Paso 2: Lea sobre los componentes o circuitos, y encuentre como funcionan.


Ponga atención especial en como necesitaría el BASIC Stamp
interactuar con los componentes/circuitos.
Paso 3: Verifique para saber si el código ejemplo es adecuado para el circuito
o componente. Esto le permitirá con facilidad incorporarloen su
aplicación.

Digamos que el siguiente paso en su proyecto es mostrar el status del sistema sin
conexión a la computadora. Este es un ejemplo de cómo podría encontrar y evaluar un
componente para su aplicación.

9 (Paso 1) Vaya a www.parallax.com y escriba “display” en el campo Search.


Desde la página principal usted podría necesitar hacer click en el botón Go en
lugar de solamente presionar Enter. Ve a las páginas de producto de los varios
tipos de resultados en la búsqueda y mira si puedes encontrar uno que sea
relativamente barato y capáz de mostrar un par de líneas de texto. Si te decidiste
por la LCD 2x16 Serial de Parallax como muestra la Figura 10-4 es una buena
elección y estás en el camino correcto.

Figura 10-4
Parallax 2x16 Serial LCD

9 (Paso 2) Ve a página de productors LCD 2x16 Serial de Parallax. Si aún no lo


haces, lee la descripción del producto. Luego encuentra la liga al PDF de la
documentación de la LCD 2x16 Serial de Parallax. Lo encontrarás en la página
Descargas y Sección de Recursos, probablemente marcada Parallax Serial 2x16
LDC Documentation v2.0 (pdf). El número de la versión podría ser mayor por el
tiempo que ha pasado.
9 (Paso 3) Verifica por ejemplo el código en la documentación en PDF de
Parallax Serial 2x16 LCD así como también en las ligas del producto en
Descargas y Sección de Recursos de la página web. Busca un bonito, corto y
simple programa ejemplo que muestra un mensaje de texto porque esto
generalmente proporciona un un punto de inicio.
Página 326 · ¿Qué es un Microcontrolador?

Después de la breve introducción a SERIN y SEROUT del programa ejemplo que


siguieron en este capítulo, el código de ejemplo de la LCD Serial de Parallax, entonces la
instrucción SEROUT te parecerá más familiar.

Si usted sigue a los Sensores Inteligentes y la liga de Aplicaciones, usted puede bajar
el libro Sensores Inteligentes y Aplicaciónes que tiene un capítulo entero relacionado con el
control de la LCD con su BASIC Stamp 2.

Tres Ejemplos de Muchos Más.


Los sensores PIR y FlexiForce y el LDC en Serie Parallax, son tres ejemplos de módulos
y componentes que usted puede usar para incrementar grandemente la funcionalidad de
su prototipo. Estos tres son un granito en arena la playa de lo que existe disponible.

La Figura 10-5 muestra más módulos y componentes y todavía representan solamente


una pequeño muestra. Los ejemplos en la figura son (a) modulos de RF para
comunicación por radio, (b) gyro para detectar velocidades de rotación, (c) brújulas para
encontrar dirección, (d) sensor de vibración, (e) acelerometro para detectar inclinación y
cambios de velocidad, (f) sensor ultrasonico para detectar distancias, (g) sensor de
intensidad de luz, (h) controlador servo, (i) controladores de motores DC, (j) arreglo
Darlington para excitar bobina de motores paso a paso, y (k) motores paso a paso. Usted
puede encontrar cualquiera de estos dos dispositivos en www.parallax.com con la clave
búsqueda. Por ejemplo, para encontrar más acerca de (f) meta “sensor ultrasonico” en la
página principal de Parallax, en el campo Search y de click en el botón Go.
Realizando sus Propios Inventos · Página 327

Figura 10-5 Más ejemplos de Modulos y Accesorios

Communication Sensors Motor Control

b e h

a j

c f

k
i
d g

Su Turno – Investigando Más Recursos


Si usted tiene un proyecto en mente y necesita encontrar un circuito o un código para
soportar una de las caracteristicas de su proyecto, el procedimiento de búsqueda antes
analizado le proporciona un buen punto de inicio,

Pero solamente si se encuentra en la páginas de productos de www.parallax,com y ahí


hay un número de preguntas de diseño que las página del producto no resuelven
necesariamente. Afortunadamente, hay muchos recursos, incluyendo:

• Libros en PDF Stamp in Class


• Documentación en PDF de Productos Parallax
• Columnas de BASIC Stam en la Revista Nuts and Volts.
• Respuestas en preguntas y artículos en forums.parallax.com
• Artículos de BASIC Stamp publicados en Internet

Cuando usted está buscando componentes e información acerca de cómo usarlos con el
BASIC Stamp, esto cae en la categoria de “application information”. Cuando está
buscando información de aplicación, es mejor empezar con el sitio web del fabricante, y
luego expandir la búsqueda que incluyan los forums, y si usted todavía no ha encontrado
Página 328 · ¿Qué es un Microcontrolador?

una buena solución expandala más para que incluya la WWW. La Figura 10-6 muestra
un ejemplo de Google las palabras claves de búsqueda son “infrarojo” y “remoto” en
documentos PDF y páginas de productos en www.parallax.com. Aquí la parte importante
es que Google busca documentos PDF en lugar de sólo páginas de productos. Asegurese
que no hay espacios en el sitio: www.parallax.com

Figura 10-6
Buscador Google del
sitio www.parallax.com

Usted puede moficicar la búsqueda para incluir preguntas y respuestas en los forum de
soporte de Parallax cambiando “www” a “forums” como esto:
infrared remote site: forums.parallax.com

Esto busca todas las preguntas, respuestas y artículos cortos que contengan las palabras
“infrarojo” y “remoto” en los forums parallax.com. Para encontrar una aplicación
específica del BASIC Stamp, cambie su búsqueda en los terminos de abajo. Asegurese
que las palabras BASIC Stamp están con comillas porque esto filtrara resultados de
colecciones por correo.
Este es un resumen de la secuencia de busqueda en Google para “BASIC Stamp” infrared
remote

9 Sitio remoto infrarojo: www.parallax.com


o Busquedas para los términos “infrarojo” y “remoto” en PDF y página de
productro en www.parallax.com
9 Sitio remoto infrarojo: forum parallax.com
o Busquedas para los términos “infrarojo” y “remoto” en discusiones en
forums parallax.com
9 Remoto Infrarojo BASIC Stamp
o Busquedas en la web para las palabras “infrarojo” y “remoto” en la
misma página o PDF con la frase “BASIC Stamp”

Digamos que el siguiente paso para su proyecto Micro Alarma es un teclado, pero la
documentación y ejemplo en una sola búsqueda en página de productos en parallax.com
lo llevo a ejemplos de circuitos y códigos esparcidos. Entonces hagamos las busquedas
Realizando sus Propios Inventos · Página 329

con más orden, digamos que una busqueda en Google en el sitio de Parallax para todas
las referencias a teclados. Recuerde qe Google incluye documentos PDF.

9 Vaya a www.google.com
9 Escriba “teclado site: www.parallax.com” en el campo de Busqueda y luego
presione Enter.

Los resultados pueden requerir algo de paciencia y persistencia para pasar, y muchas
páginas de resultados. Hay generalmente suficiente de un parrafo de cada resultado de
búsqueda para tener algún contexto de cada liga. Esto le dará alguna idea de cuales
brincar y cuales mirar con atención. Después de unas página, usted podría encontrar y
seguir una liga de Partes del Kit de IR Remoto como lo muestra la Figura 10-7. Esto
podría no ser solución a lo que usted esperaba, pero después de examinar el precio, la
documentación, y el código ejemplo, podría tener mucho potencial para reforzar su
sistema de seguridad con teclado.

Figura 10-7 Partes del Kit de IR Remoto

Si despues de todo esto, usted todavía no ha encontrado la información que necesita, es


tiempo de preguntar en los forums parallax.com. Cuando usted les manda una pregunta,
la verán expertos en una variedad de disciplinas, maestros, hobistas y estudiantes. La
habilidad de los expertos de los Forums Parallax tendrán la capacidad de ayudarle a
superar los problemas de su diseño difícil.

Memoria del Procesador y Rapidez de los Diseños Difíciles


En algunos casos, los programas para proyectos grandes pueden crecer mucho y exceder
la memoria de programa del BASIS Stamp. Este diseño difícil puede algunas veces
resolverse reescribiendo el código que haga el mismo trabajo con menos instrucciones.
Otra opción es elegir un modelo de BASIC Stamp con memoria de programa más grande.
En otros casos, el proyecto podría involucrar almacenar más valores de variables que el
BASIC Stamp puede guardar. También hay modelos de BASIC Stamp 2 con
característica de borrado para los valores de variables RAM. Otros proyectos podrían
Página 330 · ¿Qué es un Microcontrolador?

necesitar hacer más tareas en menor tiempo para las que BASIC Stamp fue diseñado,
algunos modelos de BASIC Stamp están diseñados con velocidades rápidas de
procesamiento.

La Figura 10-8 muestra todos los diferentes modelos del BASIC Stamp. Para detalles de
cada uno vaya a “Comparación de Modulos BASIC Stamp” en la liga
www.parallax.com/basicstamp.

Figura 10-8 Linea completa de Modelos BASIC Stamp

From left: BS1, BS2, BS2e, BS2sx, BS2p24, BS2p40, BS2pe, BS2px

BS1: Confiable y Capáz, perfecto para proyectos pequeños o espacios limitados.


BS2: Ideal para principiantes con muchos recursos de code; es el núcleo de Stamps
en programas en Clase..
BS2e: Perfecto usuarios BS2 que necesitan mas espacio de programa y variables.
BS2sx: Soporta el conjunto de instrucciones the BS2 con más variable y espacio de
programa y más de dos veces la velocidad de ejecución .
BS2p24: Además de más velocidad y espacio de variables, las instrucciones especiales
soportan el poleo de pines E/S, LCD de caracteres, y comunicaciones de I2C 1-
alambre.
BS2p40: Todas las características de BS2p24 con un puerto adicional de16 pines de
E/S.
BS2pe: Soporta el conjunto de instrucciones del BS2p24 y además es de muy bajo
consumo de potencia y más memoria para apliciones de adquisición de datos.
BS2px: Es el mas velox de los modelos BASIC Stamp soport todas las instrucciones
del BS2p24 , más caracteristicas especiales de configuración de pines E/S.

Un concepto en recordar es que si usted sube a un modelo más rápido de BASIC Stamp
es las diferencias en unidades de las instrucciones dependientes del tiempo como
RCTIME y FREQOUT. Debido a que los diferentes modelos de procesadores corren a
Realizando sus Propios Inventos · Página 331

diferentes velocidades, las unidades de Duration y Frequency y otros argumentos podrían


ser diferentes. Por ejemplo, cuando el BS2 ejecuta FREQOUT 6, 100, 4500 manda un
tono agudo de señal de alarma a P6 durante 100 ms (1/10 de segundo) a una frecuencia de
4500 Hz. Cuando el mismo comando lo ejecuta un BS2px manda un tono que solamente
dura 16.6 ms a una frecuencia de 27,135 Hz, que es un tono mucho más alto e incluso no
lo escucha el oido humano! La descripción completa de cómo funciona cada una de las
instrucciones de cada modelo y las sugerencias de conversión de programas BS2 de un
modelo a otro las encuentra en la ayuda: BASIC Stamp Editor Help.

Procesamiento en Paralelo de Alto Rendimiento


Algunas aplicaciones complicadas requiren agilidad de procesamiento y memoria que
está más alla de las capacidades de la línea BASIS Stamp 2. Estas son la clase de
proyectos por la que fue diseñado el Microcontrolador Propeller. Este poderoso y unico
microcontrolador tiene ocho procesadores de alta velocidad en un solo chip, además 32
pines de E/S y una memoria de programa RAM muy grande. Sus 8 procesadores puede
trabajar al mismo tiempo, en forma independiente o en forma compartida, comparten el
acceso a la memoria global y al sistema de reloj. Cada procesador tiene su propia
memoria, hardware adicional para realizar funciones complicadas como monitoreo en alta
velocidad de pines E/S o generación de señales para una pantalla de TV o computadora.

El Kit Propeller Education que muestra la Figura 10-9 es un buen puento de inicio con el
Microcontrolador Propeller. Este Kit no es necesariamente el mejor siguiente paso
despues de ¿Qué es un Microcontrolador?. Sin Embargo, cuando se da cuenta que sus
proyectos son más ambiciosos y desafiantes, recuerde al Microcontrolador Propeller y al
Kit Propeller Education.

Figura 10-9
Kit Propeller Education
(izquierda)
Plataforma PE
(derecha)
Página 332 · ¿Qué es un Microcontrolador?

ACTIVIDAD #7: ¿QUÉ SIGUE?


Ahora que usted está por terminar con ¿Qué es un Microcontrolador? es tiempo de pensar
en lo siguiente por aprender. Antes de continuar, reflexione un momento en lo que más le
interesa. Algunas categorias generales en la que usted podría investigar incluye:

• Robotica
• Electrónica
• Sensores
• Automatización
• Proyectos Hobi
• Ciencias de la Tierra y Mediciones del Clima

Esta actividad genera recursos que usted puede usar para avanzar en cada una de estas
categorias.

Los recursos, kits y componentes que se analizaron en esta actividad eran comunen
cuando este capítulo se escribio (Otoño 2009). Las versiones nuevas y mejores, kits y
componentes están disponibles para reemplazar alguna de las aquí presentadas.
Asegurese de verificar www.parallax.com con la información más reciente.

¿Cuál es la Secuela del Microcontrolador?


La Figura 10-10 muestra libros y kits que arman la mejor secuela de este libro. Robotics
with the Boe-Bot es una agradable y gran experiencia para que usted pueda aplicar
algunas de las técnicas de este libro a las aplicacione de robótica con el robot deslizante
Boe Bot.

El libro Sensores Inteligentes y Sus Aplicaciones fue escrito para ser la parte 2 de ¿Qué
es un Microcontrolador?. Se le cambió el nombre porque todos los sensores inteligentes
y la pantalla de cristal líquido mostrados en el centro de la Figura 10-10 tienen
coprocesadores que se comunican con el BASIC Stamp. Los coprocesadores los hacen
sensores inteligentes. El libro Comprendiendo las Señales, es grandioso porque le permite
a usted, “ver” las interacciones entre el BASIC Stamp y los circuitos utilizando un
Osciloscopio Parallax que usted conecta en el puerto USB de su computadora.
Realizando sus Propios Inventos · Página 333

Figura 10-10 Los Siguientes Grandes Pasos que siguen de ¿Qué es un Microcontrolador?

Smart Sensors Understanding


Boe-Bot Robot Kit and Applications Signals Parts
Parts and Text and Text

Más de Kits Stamps in Class y Libros de Texto


La Figura 10-11 muestra un diagrama de flujo que sintetiza todos los Kits Stamp in Class
y Libros de Texto disponibles en el momento que éste se escribió. Son accesibles a través
del Programa Stamps in Class. Un vistaso y la liga a los Diagramas de Flujo está en
www.parallax.com/Education, y usted puede dar click en cada imagen para visitar la
página del producto del libro y su kit acompañante. ¿Qué es un Microcontrolador? está
hasta arriba a la izquierda en la Figura. Desde ahí, el diagrama de flujo indica que usted
puede brincar a Robotica con el Boe-Bot (Robotics with the Boe-Bot) o cualquier
texto/kit de la serie Sensores o Señales.

Descargas completas de Libros de Texto en PDF Usted puede descargar el PDF a todo
color de cada Libro Stamps in Class en www.parallax.com. Haga click en cualquier imagen
de la carta para navegar en la página Texto + Kit y usted encontrara el PDF en la página
sección de Descarga.
Página 334 · ¿Qué es un Microcontrolador?

Figura 10-11
Diagrama de
Flujo de Stamps
in Class. {}

Si la categoría en la que usted está interesado es:

• Robótica, entonces definitivamente el siguiente paso es Robótica con el Boe-Bot.


• Proyectos de Sensores, Inventos o Hoby, entonces su siguiente paso podría ser
Sensores Inteligentes y Aplicaciones.
• Electrónica (señales), entonces su siguiente paso podría ser Control de Procesos
• Ciencias de la Tierra y Mediciones del Clima, entoces su siguiente pasos podría
ser Sensores Aplicados (Originalmente se llamaba Mediciones de la Tierra)
Realizando sus Propios Inventos · Página 335

Recursos Adicionales de Stamp In Class


Arriba y Adelante que son los libros de Texto Stamps in Class, En Stamps in Class hay
“Mini Proyectos” en la liga www.parallax.com/Education. Algunos proyectos utilizan
justamente el stock de partes del los kits pero demuestran nuevas formas para usarlos
junto con nuevos conceptos. Muchos de estos proyectos son como los capítulos de los
libros de Texto Stamp in Class, tienen Actividades, Diagramas Esquemáticos, Diagramas
de Alambrado listas completas de códigos que pueden descargarse. Algunos incluso
tienen videos con tutoriales por ejemplo “Construya su Propio Mini Temporizador” que
puede construirse precisamente con las partes que usted ha estado usando en este libro.
Cualesquiera que sea la información que busca, o inspiración creativa, usted prodrá
encontrarla aquí.

Figura 10-12 Ejemplo del Mini Proyecto con Stamps in Class

RESUMEN
Este libro presentó una variedad de circuitos y técnicas, todas ellas son bloques de
construcción en productos comunes así como en inventos. Este libro también presentó
técnicas para juntar los diversos bloques de construcción con el microcontrolador de
Página 336 · ¿Qué es un Microcontrolador?

BASIC Stamp. Este capítulo demostró como incorporar las técnicas y bloques de
construcción en un prototipo, y también recomendó algunos de los siguientes pasos para
aprender más en su área de interes.

La aproximación para hacer que el BASIC Stamp interactue con un circuito dado puede
aplicarse a una variedad de circuitos y módulos que cumplan e incluso sobrepasen sus
tareas. Dos ejemplos aplicados al prototipo de la micro alarma fueron: (1) un sensor de
movimiento con una interface similar a el botón push y (2) un sensor de presión con una
interface similara a la del potenciometro.

Mientras desarrolla el código para su aplicación, asegúrese de guardar su trabajo


frecuentemente bajo nombres de revisión aumentadas. También asegúrese de darle
nombres significativos a los pines de E/S y números a las directivas PIN Y CON.
Finalmente, agregue muchos comentarios a su código que expliquen los que hacen y
como lo hacen. Las subrutinas deben incluir comentarios que expliquen que hace la
subrutina junto con sus variables y los con valores que usa para hacer su trabajo, así como
las variables que almacenan los resultados cuando termina la subrutina.

Este capítulo también presentó una variedad de técnicas de investigación para


implementar características en su prototipo. Incluso, si al principio no tenía idea de cómo
hace que trabaje una carateristica particular, usted puede usar técnicas de búsquedas para
encontrar el componente útil, el circuito y ejemplos de código.

Los libros de texto Stamp in Class y sus kits tienen muchos circuitos y técnicas útiles de
diseño, y este es un gran lugar para aprender más en los campos de robótica, sensores,
electrónica, automatización, ciencias de la tierra, y más. Todos los libros de texto que
acompañan a los Kits Stamps in Class se pueden descargar libremente.

Ahora que usted ha llegado al final del libro, reflexione un momento en cuatro ideas: (1)
las técnicas que usted ha aprendido, (2) su siguiente invento, proyecto o prototipo, (3) lo
que usted ha aprendido aquí que puede aplicarlo en él y (4) que es lo siguiente que quiere
aprender.

9 Ahora, es tiempo de empezar con su siguiente proyecto o prototipo.


9 Asegurese de mantenerse estudiando y aprendiendo nuevas técnicas conforme
avanza.
9 ¡SEA OPTIMISTA y BUENA SUERTE!
Anexo A: Lista de partes y opciones de kits · Página 337

Anexo A: Lista de Partes y Opciones de Kits


Libro y Partes del Kit #28152, Sólo Partes #28122
Partes y cantidades sujetas a cambio sin aviso
Parallax Part # Descripción Cantidad
150-01020 Resistor, 5%, 1/4W, 1 kΩ 10
150-01030 Resistor, 5%, 1/4W, 10 kΩ 4
150-01040 Resistor, 5%, 1/4W, 100 kΩ 2
150-02020 Resistor, 5%, 1/4W, 2 kΩ 2
150-02210 Resistor, 5%, 1/4W, 220 Ω 6
150-04710 Resistor, 5%, 1/4W, 470 Ω 6
152-01031 Potentiometer - 10 kΩ 1
200-01031 Capacitor, 0.01 μF 2
200-01040 Capacitor, 0.1 μF 2
201-01080 Capacitor, 1000 μF 1
201-03080 Capacitor 3300 μF 1
¿Qué es un Microcontrolador? Solo texto
28123 1
(#28152 )
350-00001 LED – Verde - T1 3/4 2
350-00005 LED - Bicolor - T1 3/4 1
350-00006 LED – Rojo- T1 3/4 2
350-00007 LED – Amarillo - T1 3/4 2
350-00027 Indicador de 7-segmentos LED 1
350-00029 Fototransistor, 850 nm, T1 3/4 1
400-00002 Botón Push – Normalmente Abierto 2
451-00303 Conector de 3 Pines – Macho/Macho 1
500-00001 Transistor – 2N3904 1
604-00010 Potenciometro digital de 10 kΩ 1
800-00016 Cables de puentes de 3” – Bolsa de 10 2
900-00001 Bocina Piezo r 1
900-00005 Servo Normalizado Parallax 1
Página 338 · ¿Qué es un Microcontrolador?

OPCIONES COMPLETAS DE KITS


Hay algunas opciones de Kits disponibles que incluyen la Tablilla de Desarrollo del
Microcontrolador BASIC Stam 2 y todos los componentes electrónicos para completar
las actividades de este libro.

• El Kit de Actividades BASIC Stamp (# 90005) incluye:


o Una Tablilla BASIC Stamp HomeWork con BS2 de montaje superficial
o Un adaptador USB de USB A a Cable Mini-B (#28031)
o ¿Qué es un Microcontrolador? Libro y Partes (28153)

• Kit Discovery BASIC Stam (Serie # 27207 o USB # 27807) que incluye
o Tablilla Board of Education (Serie #28150 o USB # 28850)
o Modulo Microcontrolador BASIC Stamp 2 (# BS2-IC)
o Cable de Programación (Serial # 800-00003 o USB A MiniB # 805-
00006)
o ¿Qué es un Microcontrolador? Partes y Texto (#28152)
o Manual BASIC Stamp (# 27218)

• ¿Que es un Microcontrolador? Texto y Kit de Partes (#28152) más


• Kit Completo Board of Education (Serial # 28103 o USB #28803) que incluye:
o Tablilla Board of Education (Serial # 28150 o USB # 28850)
o Modulo Microcontrolador BASIC Stamp (# BS2-IC)
o Cable de Programación Cable de Programación (Serial # 800-00003 o
USB A MiniB # 805-00006)
o Alambres para puente (i paquete de 10)

Un mensaje a los educadores: Descuentos por comprar en cantidad de todos los kits
arriba mencionados: para detalles vea cada página de productos del kit en
www.parallax.com. Además las Tablilla HomeWork está disponible por paquetes de 10
como una solución económica para uso en el salón de clases, y cuesta significativamente
menos que la Board of Education más el módulo BASIC Stamp 2. Por favor contacte al
Equipo de Ventas de Parallax en (800) 512-1024 para saber los precios por grandes
cantidades.
Anexo B: Más sobre electricidad · Página 339

Anexo B: Más sobre Electricidad


¿Qué es un electron?? Un electron es una de las tres partes fundamentales del átomo;
las otras dos son el protón y el neutrón. Un o más protones y neutrones están juntos en el
centro de la molécula en un área llamada núcleo. Los Electrones son muy pequeños
comparados con los protones y neutrones, los electrones giran alrededor del núcleo. Los
Electrones se rechazan unos con otros, los electrons y protones se atraen uno con otror.
¿Qué es carga?? La tendencia de un electrón que repele otro electrón y atraer un protón
cercano se llama carga negativa . La tendencia de un protón a repeler otror protón y
atraer un electron se llama carga positive . Cuando una molécula tiene más electrones que
protoness, se dice que está cargada negativamente Si una molécula tiene menos
electrones que protones, se dice que está cargada positivamente Si un molécula tiene el
mismo número de protones y electrones, se dice que tiene carga neutra.
¿Qué es voltaje?? Voltaje es como la presión eléctrica. Cuando una molécula cargada
negativamente está cerca de una cargada positivamente, el elctrón extra de la molécula
con carga negativa trata de jalar al de la molécula cargada positivamente.. Las Baterias
tienen una sustancia con moléculas cargadas negativemente separadas de un compuesto
con moléculas cargadas positivamente..Cada uno de estos compuestos está conectado a
una de las terminales de la bateria; el compuesto cargado positivamente está conectado a
la terminal positiva (+) , y el compuesto negativo está conectado a la terminal negativa (-) .
El volt ies una medidad de la presión eléctrica, y se abrevia con con letra mayúsculal V.
Quizá usted ya conoce la bateria de (9 V) usada para proporcionar energía a la Tablilla
Board of Education or HomeWork Board. Otras baterias conocidas son la de 12 V de los
carros y la AA de 1.5 V usadas en calculadoras, juegos portatiles y otros aparatos
¿Qué es corriente?? Corriente es una medida del númeor de electrones por segundo que
pasan por un circuito. Algunas veces las moléculas ligadas en una reacción química crean
un compuesto (está neutramente cargado). Otras veces los electrones abandonan la
molécula cargada negativamente y se unen a las cargadas positivamente, fluyendo en un
circuito como el que construyó y verificó . La letra más usada en libros y diagramas para
referirse a la corriente es “I” mayúscula.”
¿Qué es un ampere?? Un ampere es la unidad básica de corriente, y se escribe con la
letra mayúscula “A” Con respecto a los circuitos que usa con el BASIC Stamp,un ampere
es una cantidad de corriente muy grande Este es conveniente cuando se referiere a la
cantidad de corriente que la bateria de un carro proporciona a las luces, al ventilador de
enfriamiento y otros aparatos de gran potencia.. El miliamper (mA) y el microamper (μA)
son medidas más convenientes que maneja el módulo BASIC Stamp en sus pines de E/S y
sus circuitos son de:. 1 mA = 1/1,000 A, y 1 μA = 1/1,000,000 A.
¿Qué es resistencia?? Resistencie es la propiedad de un circuito a oponerse al flujo de
electrones ( corrienet) desde la terminal negativa de una bateria a la terminal positiva .
El ohm es la unidad básica de resistencia. Ya lo presentamos y se abrevia con la letra
griega Omega (Ω).
¿Qué es un conducto?r? El alambre de Cobre casi no tiene resistencia, y se llama
conductor.
Página 340 · ¿Qué es un Microcontrolador?

ACTIVIDAD ADICIONAL: LEY DE OHM, VOLTAJE Y CORRIENTE


Esta actividad es una aplicación de las definiciones ya analizadas.

Partes para la Ley de Ohm


Un Resistor de 220 Ω (rojo-rojo-café)
Un Resistor de 470 Ω (amarillo-violeta-café)
Un Resistor de 1 K Ω (café-negro-rojo)
Un Resistor de 2 K Ω (rojo-negro-rojo)
Un LED de cualquier color

Circuito de Prueba
El valor de la resistencia Ri en la Figura B-1 puede cambiarse. Resistencias menores
permiten más corriente a través del LED, y éste emitirá más brillo. Mayores valores de
resistencia harán que el LED brille menos porque no permite que pase mucha corriente a
través del circuito.

9 Desconecte la alimentación de su Tablilla Board of Education o HomeWork para


que pueda modificar el circuito.
9 Construya el circuito que muestra la Figura B-1 empezando con un resistor de
220 Ω.
9 Modifique el circuito reemplazando el resistor de 220 Ω por uno de 470 Ω.
¿Brilló menos el LED?
9 Repita usando el resistor de 1 K Ω, luego el de 2 K Ω verificando cada vez el
cambio en brillantez.
Anexo B: Más sobre electricidad · Página 341

Vdd Vin Vss


X3
Vdd +
R1 R2 R3 R4 P15
P14
P13
Ri
P12 Figura B-1
P11
P10 Monitor de la Corriente
P9 del LED
P8
R1 = 220 Ω P7
LED R2 = 470 Ω P6
P5
R3 = 1 kΩ P4
R4 = 2 kΩ P3
P2
Vss P1
P0
X2

Si usted está usando una bateria de 9 V, también puede comparar la brillantez de una
fuente Vin, de voltaje diferente. Vin se conecta directamente a la terminal + de la bateria
de 9 V y Vss se conecta directamente a la terminal negativa de la bateria. En nuestro
sistema, Vdd son 5 V regulados. Esto es cerca de la mitad del voltaje de la bateria de 9 V.

9 Si no está usted usando una bateria de 9 V detengase aquí y brinque a la sección


de abajo Calculando la Corriente. Si no es así continue.
9 Comience con el circuito mostrado por la Figura B-1 pero use un resistor de 1
kilo ohm.
9 Haga una nota del brillo del LED.
9 Desconecte la alimentación.
9 Modifique el circuito desconectando la terminal del resistor de Vdd y conéctelo a
Vin.
9 ¿Cuándo volvió a conectar la alimentación, como brilló el LED? ¿Cuánto más
brillante?

Haga el experimento de Vin con un resistor de 220 0 470 Ω, porque le proporcionará al


LED mucha más corriente que la especificada.

Calculando la Corriente
El Manual BASIC Stamp tiene algunas reglas de cuanta corriente puede proporcionar un
pin de E/S a los circuitos. Si no sigue usted estas reglas, puede terminar dañando el
Página 342 · ¿Qué es un Microcontrolador?

BASIC Stamp. Las reglas indican cuanta corriente le está permitida que proporcione a un
pin de E/S y cuanta corriente pueden proporcionar un grupo de pines de E/S.

Reglas de Corriente de los pines del BASIC Stamp


Un pin de E/S puede proporcionar hasta 20 mA. En otras palabras, si usted manda una
señal HIGH a un pin E/S, ete no deberá suministrar más corriente de 20 mA.
Si usted conecta el LED para que el BASIC Stamp ahora haga que el LED se ilumine
cuando manda una señal LOW el pin puede absorver hasta 20 mA.
Los pines desde P0 hasta P7 solamente pueden proporcionar 40 mA. De igual manera los
pines desde P8 hasta P15 solo pueden proporcionar 40 mA. 40 mA es la corriente máxima
que puede proporcionar el módulo BASIC Stamp 2 con una fuente regulada de 5 V,
entonces la corriente total que pueden drenar todos los pines de E/S nunca deberán
exceder 40 mA. Si usted tiene muchos circuitos de LEDs, usted necesitará resistores
mayores para que los circuitos no drenen mucha corriente.
Para mayor información, consulte la Tabla Descripción de Pines del BASIC Stamp en el
Manual BASIC Stamp.

Si usted sabe calcular la cantidad de corriente que usa su circuito, puede decidir si el
brillo de su LED es el correcto. Cada componente tiene reglas de lo que hace con el
voltaje, la resistencia y la corriente. Para el diodo emisor de luz, la regla es un valor que
se llama polarización en sentido directo del diodo. Para el resistor, la regla se llama Ley
de Ohm. También hay reglas para saber cuanta corriente y voltaje se suman en un
circuito. Estas se llaman Leyes de Kirchhoff de Voltaje y Corriente.
Anexo B: Más sobre electricidad · Página 343

Vdd – Vss = 5 V El voltaje (la presión eléctrica) de Vdd a Vss es 5 V. Esto se llama Voltaje
regulado, y trabaja casi igual que una bateria que proporciona exactamente 5 V. (las
baterias no son tipicamente de 5 V, aunque cuatro baterias recargables de nickel cadmio de
1.2 V cada una, en serie nos dan 4.8 V) Las Tablillas Board of Education y BASIC Stamp
HomeWork tienen reguladores de 5 V que convierten la alimentación de la bateria de 6 a 9
V a un voltaje regulado de 5 V para los conectores Vdd arriba de la Tablilla. El BASIC
Stamp tambien tiene un regulador interconstruido que convierte las entradad de 6 a 9 V en
5 V para sus componentes.
Ven – Vss = 9 V- Si usted está usando una bateria de 9 V, el voltaje de Vin a Vss es 9 V.
Sea cuidadoso. Si usted está usando un regulador de voltaje que conecta en la pared,
incluso si dice 9 V, este podría ser tan grande como 18 V.
Tierra y/o referencia. Se refiere a la terminal negativa de un circuito, hablando de las
tablillas BASIC Stamp y Board of Education , Vss se considera la referencia a tierra. Vale
cero volts, y si usted está usando una bateria de 9 V, esta es la terminal negativa de la
bateria. La terminal positiva de la bateria es 9 V. Vdd es 5 V (arriba la referenci Vss es 0 V.)
y este es un voltaje especial hecho por un chip regulador de voltaje que suministra al BASIC
Stamp la energía.
Ley de Ohm V = I x R El voltaje medido en las terminales del resistor (V) es igual a la
corriente que pasa a través del resistor (I) multiplicado por la resistencia del resistor.
Voltaje en Sentido Directo del Diodo Es el voltaje en las terminales del ánodo y el cátodo
cuando la corriente pasa por él desde el ánodo al cátodo. Para el LED verde del circuito de
la Figura 2-6, usted puede considerar que el voltaje del diodo es de aproximadamente 2.1
V, para hacer sus cálculos. Si el LED es amarillo, considere 2.0 v y para el LED rojo
considere 1.7 V. Resistencias menores en serie y/o mayor voltaje aplicado al circuito dan
como resultaddo mayor flujo de corriente. Resistencias mayores en serie y/o menor voltaje
aplicado dan como resultado menor flujo de corriente.
Simplificación de la Ley de Kirchhoff de Voltaje. Voltaje usado igual a voltaje
suministrado. Si usted alimenta un circuito con 5 v, el número de volts en todas las partes
usadas suma 5 V.
Simplificación de la Ley de Kirchhoff de Corriente. La corriente de entrada es igual a la
corriente de salida. La corriente que entra a un circuito LED desde Vdd es igual a la
cantidad de corriene que sale a través de Vss. }También, si usted conecta tres LEDs al
BASIC Stamp cada circuito LED drena 5 mA, esto significa que el BASIC Stamp tiene que
suministrar a los tres circuitos un total de 15 mA

Ejemplos de Cálculo: Un circuito, Dos Circuitos


Para calcular la corriente que drena un circuito LED rojo, lo hacemos en dos pasos:

1. 1.Calculamos el voltaje en los extremos del Resistor.


2. Usamos la ley de Ohm para calcular la corriente a través del Resistor.

La Figura B-2 muestra como calcular la corriente en el resistor. El voltaje suministrado a


su izquierda es 5 V. El votaje usado por cada componente está a la derecha del circuito.
Página 344 · ¿Qué es un Microcontrolador?

El voltaje que no conocemos al principio es Vr, el voltaje en los extremos del resistor.
Pero conocemos que el voltaje en los extremos del LED es 1.7 V. (el voltaje en sentido
directo del diodo emisor de luz). También sabemos que el voltaje en los componentes
suman 5 V de acuerdo con la Ley de Kirchhoff de Voltaje. La diferencia entre 5 V y 1.7
V es 3.3 V, entonces este debe ser el voltaje en los extremos del resistor.

Figura B-2
VR + 1.7 V = 5 V
El voltaje en el
VR = 5 V − 1.7 V circuito,
VR = 3.3V Resistor, y
LED

Kilo En el sistema métrico decimal kilo significa 1000. En el sistema métrico decimal 1000
se dice kilo, y se abrevia con la letra minúscula k. En lugar de escribir 1000 Ω, podemos
escribir 1 KΩ. Y se pronuncia un KΩ. De igual manera 2000 se escribe 2 K Ω.
En el sistema métrico decimal, mili es 1/1000 is se abrevia con la letra minuscula m. Si el
BASIC Stamp proporciona a un circuito LED 3.3 milesimas de Amper, esto es 3.3
miliamperes o 3.3 mA.
¿Qué es un mA? Se pronuncia milamper, es la notación de una milésima de amper. La “m”
en mA es la notación métrica para mili, que es 1/1000 . La A en mA se usa para amperes.
Ponga las dos juntas y tiene miliampers, y es muy útil para describir la cantidad de corriente
drenada por el BASIC Stamp y los circuitos que a él se conectan.

Ahora que hemos calculado el voltaje en los extremos del resistor, la Figura B-3 muestra
un ejemplo de usar ese valor para calcular la corriente que pasa por el resistor.

Empezamos con la ley de Ohm; V = R x I. Usted conoce la respuesta de V (3.3 V) y R


(470 Ω). Ahora despejamos I (la corriente).
Anexo B: Más sobre electricidad · Página 345

V = I×R
3.3V = I × 470 Ω
3.3 V
I=
470 Ω Figura B-3
Calculo de la
I ≈ 0.00702 V
Ω corriente a través
I = 0.00702 A del Resistor
7.02
I= A
1000
I = 7.02 mA

¡Es verdadero! 1 A = 1V / ohm (Un amper es un volt por ohm)


¿Cuánta corriente es 7.02 mA? Es la cantidad de corriente que circula por el circuito LED
de la Figura B-2. Usted puede reemplazar el resistor de 470 Ω y el circuito conducirá cerca
de 55 mA, y el LED brillará mucho. Si usted usa un resistor de 1000 Ω, el circuito conducirá
3.3 ma y el LED brillará poquito. Un resistor de 2000 Ω hará que el LED apenas brille y la
corriente será 1.65 mA

Digamos que usted desea que un pin E/S encienda dos LEDs al mismo tiempo. Esto
significa que internamente el BASIC Stamp deberá proporcionar a los circuitos lo que
muestra la Figura B-4. ¿Podrá el circuito exceder la corriente límite en los pins E/S de 20
mA? Calculemoslo. Recuerde que la versión simplificada de la Ley de Kirchhoff de
Corriente dice que la corriente total drenada por la fuente es igual a la corriente
suministrada a todo los circuitos. Esto significa que I en la Figura B-4 es igual al total de
las dos corrientes que son drenadas. Simplemente sume las dos corrientes drenadas, y la
respuesta será de 14.04 mA, que se puede redondear como 14.0 mA. Como la corriente
drenada está debajo de el límite de 20 mA de los pines de E/S, se pueden conectar con
seguridad al pin E/S y conmutar con el BASIC Stamp.
Página 346 · ¿Qué es un Microcontrolador?

Figura B-4
I = I 1 + I 2 + ... I i Corriente
Total
I = 7.02 mA + 7.02 mA
proporcionada
I = 14.04 mA ≈ 14.0 mA a los dos
Circuitos LED

Su Turno – Modificando el Circuito


9 Repita el ejercicio de la Figura B-2 pero use Vin – Vss = 9 V en lugar de Vdd –
Vss = 5 V.

Considerando que el voltaje en sentido directo no cambia, la respuesta es Vr = 7.3 V. El


voltaje medido en el resitor probablemente sea menor porque el voltaje en sentido directo
del LED es mayor, porque pasa más corriente por el circuito.

9 Repita el ejercicio de la Figura B-3 pero use un resistor de 1 K Ω.

Respuesta: I = 3.3 mA

9 Use Vr = 7.3 V para hacer el ejercicio en la Figura B-3 con un resistor de 1 K Ω..

Respuesta: I = 7.3 mA

9 Repita el ejercicio que muestra la Figura B-4 con un resistor de 470 Ω y el otro
de 1 K Ω..

Respuesta: I = 7.02 mA + 3.3 mA = 10.32 mA.


Anexo C: Resumen del formato RTTL · Página 347

Anexo C: Resumen del Formato RTTTL


Este es un resumen que intenta ayudarte a que tenga sentido el formato RTTTL. Las
especificaciones completas del RTTTL las puedes encontrar en varios sitios web. Con
cualquier buscador, usa las palabras clave “Especificaciones RTTTL” para repasar las
páginas web que incluyan la especificación.

Este es un ejemplo de un tono en formato RTTTL:

TakeMeOutToTheBallgame:d=4,o=7,b=225:2c6,c,a6,g6,e6,2g.6,2d6,p,
2c6,c,a6,g6,e6,2g.6,g6,p,p,a6,g#6,a6,e6,f6,g6,a6,p,f6,2d6,p,2a6
,a6,a6,b6,c, d,b6,a6,g6

El texto antes de los dos puntos, es lo que el telefono celular muestra como nombre de la
canción. En este caso el tono se llama:

TakeMeOutToTheBallGame:

Entre los primeros y segundos dos puntos, se introdujeron los ajustes por default usando
d, o, y b. Esto es lo que significan:

d – duration
o- octava
b – batidos por minuto o tempo.

En TakeMeOutToTheBallGame, los ajustes por default son:

d= 4, o = 7, b = 225:

Las notas de la melodia se meten despues de los segundos dos puntos, y se separan con
comas. Si se usa la letra de la nota, esa nota se tocará con la duración default in la octava
por default Por ejemplo, la segunda nota de TakeMeOutToTheBallGame es:

,c,

Como no hay otra información, se tocará con la duración default de un cuarto de nota
(d=4), en la séptima octava (o=7)

Una nota puede tener hasta cinco caracteres entre las comas, esto es lo que especifica
cada carácter:
Página 348 · ¿Qué es un Microcontrolador?

, duración de la nota bemol punteada, octava,


Por ejemplo:

,2g#.6,

significa toca la media nota G bemol por 1 ½ duración de la media nota y tócala en la
sexta octava.

Estos son unos pocos ejemplos de TakeMeOutToTheBallGame:

,2g.6, – media nota, G, punteada, sexta octava


,a6, – duracion de la nota de un cuarto por default. Una nota tocada en la
sexta octava
,g#6, – duración un cuarto, nota g , bemol (escrita como #), sexta octava

El carácter:

,p,

indica pausa, y se usa para los silencios. Sin información extra, la p se toca por defaul en
duraciones de un cuarto. Usted podría tambien tocar media nota en forma de silencio
usando:

,2p,

Este es un ejemplo de un silencio punteado:

,2p.,

En este caso el silencio podría durar media nota más un cuarto de nota.
Índice alfabetico · Página 349

Índice Alfabetico
-$- Apostrofe, 42
$ (Hexadecimal formatter), 209 Area de Prototipo, 31
Argumentos, 39
-*-
Automatización, 334
** (Operador de multiplicación -B-
alta), 273
*/ (Multipicación Media), 84 Base
*/ (Operador de Multiplicación del Fototransistor, 199
Media), 273 Transistor, 293
-:- Base-2 números, 67
:, 45 BASIC Stamp, 330
BASIC Stamp 2, 11
-?-
Bateria, 34
? (symbol = x formato), 45 Batido, 255
-1- Benjamin Franklin, 35
Bicolor LED, 50
16-bits error de rollover, 122 Binario, 61
-A- Bit, 45
AD5220 digital potentiometer, 296 Bloque de Códigos, 78
Adquisición de datos, 204 Booleana, 61
Ajuste, 160 Botón
Alerta de la Alimenación, 101 High Activo, 69
Algoritmo, 86 BS1, 330
Amp, 339 BS2, 330
AND, 78 BS2e, 330
Anidando subrutinas, 221 BS2p24, 330
Anode BS2p40, 330
Indicador de 7-segmentos, 172 BS2pe, 330
Anodo, 30 BS2px, 232, 330
BS2sx, 330
LED, 30
Bucle anidado, 253
Página 350 · ¿Qué es un Microcontrolador?

Bus Paralelo, 179 Comentarios al código, 42


Byte, 45, 180 Communication products, 327
-C- Concepto diagrama, 313
Conductor, 339
Capacitancia de unión, 238 conectores, 31
Capacitor, 145 Conmutar, 61
Capacitancia de unión, 238 Constantes, 162
Electrolytic, 145 Contando, 80
Electrolytic Capacitor Schematic Symbol Control caracteres. Vea DEBUG
and Part Drawing, 146 Control Caracteres
Polar identificando terminales, 146 Control Caracteres
DEBUG
Capacitor Electrolitico, 145
Carga, 339 CR, 25
Carga Negativa, 339 Controlar, 61
Carga Positiva, 339 Conversión hexadecimal a
Catodo, 30 decimal, 207
LED, 30 Corriente, 28, 35, 339
Cátodo Milamper, 344

Catodo Común & indicador de CRSRUP, 129


segmentos, 172
-D-
Chip Interpreter, 291
Ciclo, 117 DATA, 259
Ciencias de la Tierra y Mediciones DCD, 272
del Clima, 334 DEBUG, 39
Circuito abierto, 62 DEBUG Control Caracteres, 129
Circuito cerrado, 62 CRSRUP, 129
CLREOL, 169 DEBUG Control Characters
CMOS, 61
CLREOL, 169
Código de Colores de los
resistores, 29 DEBUG Control de Caracteres
Código sobrepasado, 84 HOME, 76
Colector
DEBUG Formato
del Fototransistor, 199
Índice alfabetico · Página 351

DEC (Formato decimal), 120 Emisor


DEBUG formatos del Fototransistor, 199
? (symbol = x formato), 45 Transistor, 293

DEBUG Formatos, 129 END, 63


$ (Hexadecimal Formato), 209 Entero, 273
% (Formato Binario ), 182
Error de Rollover, 122
Escalamiento, 160
DEC (Decimal formato), 209
Especificaciones, 314
Debug Terminal Espectro de colores, 198
Transmit and Receive Windowpane, 121 Esquemático, 35
Etiqueta, 219
DEBUGIN, 120 EXIT, 285, 320
DEC, 120, 209
Decimal formato DEC, 209 -F-
Demostración del Concepto, 321 Farads, 166
Derivación del Potenciometro, 302 FlexiForce Sensor, 323
Desbordamiento, 276 FOR...NEXT, 43
Descripción funcional, 313 Fotoresistor, 198
Diagrama de Tiempo, 104 Fototransistor, 199
diodo, 30 Fracción, 84
diodo emisor de luz. Vea LED Frecuencia, 248
Diodos Emisores de Luz. Vea LED Frecuencia Dual Muti Tono, 255
DIRH, 180 FREQOUT, 250, 254
Disparador Schmitt, 232 -G-
Display LCD, 325
Dispositivo Paralelo, 179 Google, 328
Divisor de voltaje, 157 GOSUB, 218
DO...LOOP, 39, 82, 124 GOTO, 219
DTMFOUT, 255 Grado, 101
Graphing software, 215
-E-
-H-
Eco, 121
Editor BASIC Stamp, 15 hertz, 250
EEPROM, 205 Hertz, 248
Electron, 34, 339 Hexadecimal formato $, 209
Página 352 · ¿Qué es un Microcontrolador?

HIGH, 39, 184 Leyes de Kirchhoff de Voltaje y


High activo vs. low activo, 69 Corriente, 342
Histeresis, 230 Llamada a subrutina, 220
HOME, 76 Logica transistor-transistor (TTL),
Homework board y el circuito 232
divisor de voltjae RCTIME, 157 Longitud de onda, 198
-I- LOOKDOWN, 188, 189
LOOKUP, 185
IF...ELSEIF...ELSE, 75 LOW, 39, 184
IF...THEN, 78 Luz visible, 198
IF..THEN...ELSE, 71
-M-
IN, 67
Indicador de 7 segmentos, 171, 172 mA, 344
Indicador LED de 7 segmentos, Manda y Ejecuta, 291
173 Mandar, 61
Inicialización de Variables, 82 Mapa de memoria, 205
Insertar, 31 Mapa de Memoria, 206
Interferencia, 255 Mapa de pines, 172, 296
-J- Mediciones de la Tierra, 334
Medidor de luz, 215
Jumper del Conector Servo, 97 Memoria
-K- Sobre escribiendo el programa, 209
KCL, 343 microcontrolador, 11
kHz, 248 Microcontrolador Propeller, 331
Kilo, 344 Microfarads, 145
KVL, 343 Microsegundo, 105
-L- Mili, 344
Milisegundo, 39
LCD 2x16 Serial, 325
Milisengundo, 105
LED, 27, 30
Modificaro WORD, 208
Bi-color, 50 Motor Control product, 327
como sensor de luz, 237 Música
Ley de Ohm, 233, 343 Punteadas, 267
Silencios, 262
Índice alfabetico · Página 353

Tempo, 263 -P-


-N- Parallax Precaución de Servo
Nanometro, 198 Normalizado, 96
nc, 173 Partes del Kit de IR Remoto, 329
Neutra, 34 PBASIC Language
Neutrón, 339 CLREOL, 169
Nib, 45 HIGH, 184
No-conecta, 173 LOW, 184
Notas bemol, 257
SELECT…CASE, 275
Notas sostenidos, 257
Núcleo, 339 PBASIC Lenguage
Numbers WRITE, 209
Binary, 180
PBASIC Lenguaje
Números Base-10, 185 AND, 78
Números Base-16, 185 Argumentos, 39
Números binarios, 67, 182
Bit, 45
Números Binarios, 180
Números decimal, 185 Byte, 45
Números Decimales, 206 CRSRUP, 129
Números hexadecimal, 185 DATA, 259
Números misteriosos, 321 DCD, 272
-O- DEBUG, 39
Octava, 257 DEBUGIN, 120
Ohm, 339 DEC, 209
Omega Ω, 28 DEC. See
ON GOSUB, 219
DIRH, 180
ON GOTO, 219
DO...LOOP, 39, 82, 124
ondas de sonid. Vea Ondas sonoras
Operaciones matemáticas, 271 END, 63
OR, 78 EXIT, 285, 320
OUTH, 180 FOR...NEXT, 43, 124
FREQOUT, 250, 254
Página 354 · ¿Qué es un Microcontrolador?

GOSUB, 218 PBASIC Lrnguaje


GOTO, 219 Nib, 45
HOME, 76
PBASIC Operador
IF...ELSEIF...ELSE, 75
** (Multiplicación alta), 273
IF...THEN, 78
*/ (Multiplicación Media), 273
IF..THEN...ELSE, 71
PBASIC Operadores
IN, 67
*/ (Multipicación Media), 84
LOOKDOWN, 188, 189
DCD, 272
LOOKUP, 185
Orden de ejecución, 271
LOW, 39
Parentesis, 271
Nib, 45
ON GOSUB, 219 PBSIC Lenguaje
ON GOTO, 219 HIGH, 39

OR, 78 PIN, 164


OUTH, 180 Pines E/]S, 32
PAUSE, 39
Pines E/S
PIN, 164 Dirección default, 183

PULSOUT, 105 Polling, 80, 82


RANDOM, 85 Potenciometro, 141
Potenciometro Resistor Variable
RCTIME, 151, 200
(de una vuelta), 141
READ, 208
Potentiometer
RETURN, 218
AD5220 (digital), 296
SERIN, 320
Procesamiento en Paralelo, 331
SEROUT, 320
Program
STEP, 124
Sobre escribir, 209
TOGGLE, 300
Program Listing
UNTIL, 82, 124
SimpleLookup.bs2, 185
WHILE, 124
Word, 208 Program Listings
WRITE, 208 ActionTones.bs2, 252
Índice alfabetico · Página 355

Ch02Prj01_Countdown.bs2, 59 ReactionTimer.bs2, 81
Ch03Prj01_TwoPlayerReactionTimer.bs2, ReadLightMeasurementsFromEeprom.bs
90 2, 212
Ch04Prj01Soln1__KillSwitch.bs2, 137 ReadPotWithRcTime.bs2, 154
Ch07Prj01_Blinds_Control.bs2, 245 ReadPushbuttonState.bs2, 68
Ch07Prj02_Blinds_Control_Extra.bs2, SegmentTestWithHighLow.bs2, 179
246
SelectCaseWithCharacters.bs2, 278
Ch5Prj01_ControlServoWithPot.bs2, 168
ServoCenter.bs2, 106
Ch6Prj01_FishAndChips.bs2, 194
SimpleLookdown.bs2, 189
Ch8Prj01_PushButtonToneGenerator.bs2
, 289 SimpleSubroutines.bs2, 219

Ch9Ex01_SetTapToZero.bs2, 306 SlowServoSignalsForLed.bs2, 114

Ch9Prj01_PhotoControlledDigitalPot.bs2, StoreLightMeasurementsInEeprom.bs2,
308 210

ControlServoWithPot.bs2, 161 TerminalControlledDigitalPot.bs2, 303

DialDisplay.bs2, 190 TestBiColorLed.bs2, 54

DigitalPotUpDownWithToggle.bs2, 301 TestBinaryPhototransistor.bs2, 235

DisplayDigits.bs2, 181 TestPhototransistor.bs2, 203

DisplayDigitsWithLookup.bs2, 186 TestPiezoWithFreqout.bs2, 250

DoReMiFaSolLaTiDo.bs2, 258 TestSecondLed.bs2, 48

LightMeter.bs2, 222 ThreeServoPositions.bs2, 116

MicroAlarmProto(Dev-009).bs2, 318 TwinkleTwinkle.bs2, 260

MicroMusicWithRtttl.bs2, 280 Protón, 339


MusicWithMoreFeatures.bs2, 268 Prototipo, 311
Proyecto de la Alarma, 315
NestedLoops.bs2, 253
Pseudo random, 86
NotesAndDurations.bs2, 263
Puerto COM, 41
PairsOfTones.bs2, 255 PULSOUT, 105
PhototransistorAnalogToBinary.bs2, 229 Punteadas en música, 267
PolledRcTimer.bs2, 149 Punto de referencia, 296
PushbuttonControlledLed.bs2, 71 -R-
PushbuttonControlOfTwoLeds.bs2, 75 RANDOM, 85
Página 356 · ¿Qué es un Microcontrolador?

RCTIME, 151, 200 SERIN, 320


READ, 208 SEROUT, 320
Recibir, 61 Servo
Registros Diagrama de Tiempo, 104
DIRH y OUTH para pines E/S, 180 Frase de precaución, 96
Reglas de nombres de Variables, Servo Normalizado de Parallax
43 Parts diagram, 95
Resistencia, 339
resistor, 28 Silencios en música, 262
Resistor, 38 Símbolo esquemático, 28
Simplificación de la Ley de
E/S protección de pin, 69
Kirchhoff de Corriente, 343
Pull-up y Pull-down, 69
Simplificación de la Ley de
Resistor como protección E/S, 38 Kirchhoff de Voltaje, 343
Variable, digital potentiometer, 296 Sin soldar, 32
Variable, potenciometro, 141 sistema incrustado, 11
Sistema métrico decimal, 344
Resistor variable
Sobre escribir el programa, 209
potenciometro (digital), 296 Sonidos en acción, 251
RETURN, 218 StampPlot LITE, 215
Robótica con el Boe-Bot, 334 Stamps en Clase "Mini Proyectos",
Rutina Principal, 224 335
Subrutina, 218
-S-
Etiqueta, 219
SELECT…CASE, 275
Semilla, 86 Subrutinas anidadas, 221
Sensar, 61 Sulfuro de cadmio, 198
Sensor de Movimiento PIR, 323 Superposición, 255
Sensores Aplicados, 334 -T-
Sensores Inteligentes y
Take Me Out To The Ball Game,
Aplicaciones, 334
347
Sensores Inteligentes y
Teclas naturales, 257
Aplicaciónes, 326
Tempo, 263
Sensors products, 327
Tierra, 31, 343
Índice alfabetico · Página 357

TOGGLE, 300 OUTH, 180


Tokens, 205, 209, 291 Word, 45
Tolerancia, 29, 302 Vdd, 343
Transistor, 199, 293 Vea DEBUG Formatoss”}.
NPN, 293 Vea Pines E/S, 32
Transmitir, 61 Ven, 343
TTL, 61 Ventana de Transmisión, 121
Tutoriales en video, 335 Video
-U- Construya su Propio Mini Temporizador,
335
UNTIL, 82, 124 Volt, 339
-V- Voltaje, 35, 339
Valor nominal, 302 Voltaje decay circuit, 147
Variable, 45 Voltaje Directo, 343
Variable range error, 122 Vss, 343
Variable tamaño Bit, 45 -W-
Variable tamaño Nib, 45 WHILE, 124
Variables, 45 Word, 45
Almacenamiento RAM, 211 WRITE, 208, 209
Bit, 45 - -
Byte, 45
μF (microfarad), 145
DIRH, 180
Nib, 45
Página 358 · ¿Qué es un Microcontrolador?

Las partes y cantidades están sujetas a cambios sin aviso. Las partes pueden ser diferentes
a las que se muestran en esta imagen. Si tiene preguntas respecto a su kit, por favor
mande un email a stampsinclass.com

También podría gustarte