Está en la página 1de 179
Experimentos y Código Fuente para el BASIC Stamp Versión en Castellano 1.1 Sobre la precisión

Experimentos y Código Fuente para el BASIC Stamp

Versión en Castellano 1.1

Sobre la precisión de este texto:

Se realizó un gran esfuerzo para asegurar la precisión de este texto y los experimentos, pero puede haber errores aún. Si usted encuentra errores o algún tema que requiera información adicional, por favor infórmelo a aalvarez@parallaxinc.com, así podemos continuar mejorando la calidad de nuestra documentación.

favo r infórmelo a aalvarez@parallaxinc.com , así podemos continua r mej orando la calidad de nuestra

Garantía

Parallax garantiza sus productos contra defectos en sus materiales o debidos a la fabricación por un período de 90 días. Si usted descubre un defecto, Parallax según corresponda, reparará, reemplazará o regresará el valor de la compra. Simplemente pida un número de autorización de regreso de mercadería (Return Merchandise Authorization, “RMA”), escriba el número en el exterior de la caja y envíela a Parallax. Por favor incluya su nombre, número telefónico, dirección y una descripción del problema. Nosotros le regresaremos su producto o el reemplazo, usando el mismo método de correo que usted usó para enviar el producto a Parallax.

Garantía de 14 días de regreso de dinero

Si dentro de los 14 días en que usted recibió su producto, encuentra que no es conveniente para sus necesidades, puede regresarlo,

recibiendo un reembolso. Parallax regresará el precio de compra del producto, excluyendo los costos de manipuleo y correo. Esto no se aplica si el producto a sido alterado o dañado.

Derechos de Copia y Marcas Registradas

Esta documentación tiene derechos de copia Copyright 1999 por Parallax, Inc. BASIC Stamp (Estampilla BASIC) es una marca registrada de Parallax, Inc. Si usted decide usar el nombre “BASIC Stamp” en su página web o en material impreso, debe agregar la aclaración: “BASIC Stamp es una marca registrada de Parallax, Inc.” Otros nombres de productos son marcas registradas de sus respectivos dueños.

Desvinculación de Responsabilidad

Parallax, Inc. no es responsable de daños por consecuencias, incidentes o daños especiales que resulten de cualquier violación de la garantía, bajo cualquier teoría legal, incluyendo pérdida de beneficio, tiempo, daño o reemplazo de equipo o propiedad y cualquier costo, recuperando, reprogramando o reproduciendo cualquier dato guardado o usado dentro de los productos Parallax. Parallax tampoco es responsable de cualquier daño personal, incluyendo vida o muerte, resultado del uso de cualquiera de nuestros productos. Usted tiene absoluta responsabilidad por la aplicación que desarrolle con el BASIC Stamp.

Acceso en Internet

Mantenemos sistemas de Internet para su uso. Estos pueden ser usados para obtener software, comunicarse con miembros de Parallax y comunicarse con otros clientes. Las rutas de acceso a la información se muestran a continuación:

E-mail:

aalvarez@parallaxinc.com

Web:

http://www.parallaxinc.com y http://www.stampsenclase.com

Lista de Discusión de BASIC Stamp en Internet

Mantenemos dos listas de discusión por e-mail para gente interesada en el BASIC Stamp. La lista trabaja así: mucha gente se suscribe

a la lista y luego todas las preguntas y

discutir temas sobre el BASIC Stamp y obtener respuestas a preguntas técnicas. Para suscribirse a la lista de BASIC Stamp encuentre

la información en www.parallaxinc.com. Esta lista genera aproximadamente 40 mensajes diarios.

respuestas son distribuidas a todos los suscriptos. Es una forma rápida, divertida y gratis de

También mantenemos una lista exclusiva para educadores que usan el BASIC Stamp en el aula. Usted puede unirse a esta lista en el

sitio web http://www.stampsinclass.com. Esta lista genera aproximadamente 5 mensajes diarios.

Si busca una lista de discusión en castellano puede encontrarla en http://www.stampsenclase.com.

Contenido

Contenido Contenido Prefacio 3 Introdu cción 5 Obtenga el Mayor Provecho de las Prácticas de StampWorks

Contenido

Prefacio

3

Introducción

5

Obtenga el Mayor Provecho de las Prácticas de StampWorks

5

Tres Pasos para Tener Éxito con StampWorks

5

Prepare su Plaqueta StampWorks

7

Contenido de este Kit

7

Preparación de la Protoboard

8

Bases de la Programación

13

Contenido de un Programa

13

Saltos – Redireccionando el Flujo de un Programa

14

Bucles – Ejecutando el código una y otra vez

15

Subrutinas – Código reutilizable que ahorra espacio de programa

17

Estilo de Programación

17

Plantilla

18

Convención sobre Nombres

19

Hora de Experimentar

21

Aprendiendo los Conceptos de Programación

21

Construcción de Proyectos

21

Que hacer entre proyectos

21

Experimento 1: Hacer Titilar un LED

23

Experimento 2: Hacer Titilar un LED (Versión 2)

25

Experimento 3: Contador con LEDs

29

Experimento 4: Pantalla de LEDs de Ciencia Ficción

33

Experimento 5: Gráficos con LEDs (Punto o Barra)

35

Experimento 6: Un Juego Simple

39

Experimento 7: Controlador de Luces

43

Building Circuits On Your Own

47

Usando Displays de 7 Segmentos

49

Experimento 8: Contador de un Dígito

51

Experimento 9: Dado Digital

55

Experimento 10: Reloj con Pantalla de LEDs

59

Manual StampWorks Versión 1.1 • Página 1

Contenido

Usando LCDs

65

Experimento 11: Demostración Básica con LCD

67

Experimento 12: Creando Caracteres en un LCD

73

Experimento 13: Leyendo la RAM del LCD

79

Experimento 14: Juego de la Bola 8 Mágica

85

Avanzando

91

Experimento 15: Filtrando Múltiples Entradas

93

Experimento 16: Contando Eventos

97

Experimento 17: Medición de Frecuencia

99

Experimento 18: Medición Avanzada de Frecuencia

101

Experimento 19: Theremin Controlado por Luz

103

Experimento 20: Efectos de Sonido

105

Experimento 21: Entrada Analógica con PULSIN

109

Experimento 22: Salida Analógica con PWM

111

Experimento 23: Expandiendo Salidas

113

Experimento 24: Expandiendo Entradas

117

Experimento 25: Control de un Servo

121

Experimento 26: Motor Paso a Paso

125

Experimento 27: Medición de Tensión

129

Experimento 28: Medición de Temperatura

133

Experimento 29: Multiplexado de 7 Segmentos

137

Experimento 30: Reloj de Tiempo Real

145

Experimento 31: Comunicaciones Seriales

153

Trabajando por su Cuenta

161

Apéndice A: Hojas de Datos

163

Apéndice B: Manual del BASIC Stamp II, Versión 2.0

177

Página 2 • Manual StampWorks Versión 1.1

Prefacio

Prefacio Estimados Amigos: Prefacio Probablemente existen tantas formas de aprender un nuevo tema o habilidad, como

Estimados Amigos:

Prefacio

Probablemente existen tantas formas de aprender un nuevo tema o habilidad, como estudiantes hay, pero todos coinciden en que aprender haciendo produce los resultados más duraderos. Y para ser franco, aprender haciendo es casi siempre la forma más satisfactoria de aprender; involucra más a los sentidos en el proceso de aprendizaje. De eso se trata este manual y el Kit de StampWorks:

aprender a programar el BASIC Stamp escribiendo programas en él. Las secciones de teoría son cortas y concisas. Aprenderá la teoría de programación, poniéndola en práctica. No encontrará muchos rodeos; solamente encontrará trabajo, trabajo divertido que le enseñará a programar microcontroladores con el BASIC Stamp de Parallax.

¿Por qué tomar el desafío? ¿Por qué aprender a escribir programas para el microcontrolador BASIC Stamp? La respuesta es simple, sino obvia: los microcontroladores se encuentran por todos lados. Están en nuestros televisores, hornos microondas, teléfonos celulares e incluso en nuestros autos. El hecho es que los automóviles más nuevos tienen diez o más microcontroladores controlando todo, desde el motor, la climatización del habitáculo, la rotación de las ruedas (control de tracción), el sistema de frenos (ABS) y muchas otras funciones. En resumen, los vehículos modernos son más seguros y más confortables debido, en gran medida, al uso de microcontroladores.

Con microcontroladores podemos construir circuitos y dispositivos “inteligentes”. En el pasado, debíamos cambiar el conexionado o algunos componentes de un circuito para modificar o crear un nuevo comportamiento. La ventaja del uso del microcontrolador sobre las otras opciones, es que podemos cambiar el comportamiento de nuestro circuito o dispositivo, simplemente modificando el programa. La ventaja de usar el BASIC Stamp es que simplifica la escritura y modificación de programas y con el Kit de StampWorks qué tan fácil puede ser.

Diviértase con estos proyectos y piense cómo podría aplicar los conceptos aprendidos en cada uno. Apreciaré recibir sugerencias (en Inglés) en cualquier momento por e-mail a jonwms@aol.com.

sugerencias (en Inglés) en cualquier momento por e-mail a jonwms@aol.com. Manual StampWorks Versión 1.1 • Página

Manual StampWorks Versión 1.1 • Página 3

Introducción

Página 4 • Manual StampWorks Versión 1.1

Introducción

Introducción Introducción Obtenga el Mayor Provecho de las Prácticas de StampWorks Este libro está dividido en

Introducción

Obtenga el Mayor Provecho de las Prácticas de StampWorks

Este libro está dividido en dos secciones principales: los experimentos de StampWorks y el manual del BASIC Stamp II. Para llevar a cabo los experimentos, deberá moverse constantemente por las dos secciones. Se puede descargar información adicional de la página de StampWorks del sitio web www.parallaxinc.com, incluyendo hojas de datos, actualizaciones y detalles técnicos generados después de emitida esta publicación.

Tres Pasos para Tener Éxito con StampWorks:

1. Lea la Sección 1 del manual del BASIC Stamp II (en Inglés). Esta sección le explicará el funcionamiento del BASIC Stamp II y lo guiará en el proceso de instalación del software de programación. Otro recurso útil es el capítulo 1 de ¡Robótica! (en Castellano) que puede descargarse por internet de www.stampsenclase.com.

2. Lea la sección siguiente de este manual, “Prepare su Plaqueta de StampWorks para los Experimentos”. Esta sección describe los pasos necesarios para poner en condiciones la plaqueta de experimentación.

3. Realice los experimentos por su cuenta, refiriéndose a la guía de sintaxis del manual del BASIC Stamp tanto como sea necesario. Esta es la parte divertida, trabajar con el Stamp construyendo circuitos simples y escribiendo el código.

Para cuando haya podido realizar todos los experimentos, estará listo para desarrollar sus propios proyectos con el Stamp, desde algunos simples hasta los moderadamente complejos. La clave está en asegurarse haber comprendido todo sobre un experimento en particular antes de pasar al siguiente.

Una última indicación: ¡Diviértase!

Manual StampWorks Versión 1.1 • Página 5

Prepare su Plaqueta StampWorks

Prepare su Plaqueta StampWorks Prepare su Plaqueta StampWorks Antes de realizar los experimentos, deberá cont rolar

Prepare su Plaqueta StampWorks

Antes de realizar los experimentos, deberá controlar los componentes de su kit y preparar su plaqueta StampWorks. Una vez hecho esto, será capaz de construir con ella, una gran variedad de circuitos controlados por el Stamp.

El Kit StampWorks incluye los siguientes componentes de Parallax:

Código

Descripción

Cantidad

150-01020

resistor 1K ohm, ¼ W, 5%

4

150-01030

resistor 10K ohm, ¼ W, 5%

8

150-02210

resistor 220 ohm, ¼ W, 5%

3

150-04720

resistor 470 ohm, ¼ W, 5%

1

200-01040

capacitor 0.1 uF

4

201-01061

capacitor 10 uF

1

251-03230

cristal de 32.768 kHz

1

27000

CD-ROM Parallax

1

27220

Manual StampWorks (en Inglés)

1

27964

Motor paso a paso 12 VDC/75 ohm

1

28135

Plaqueta NX-1000 y LCD 2x16

1

28162

Multímetro Digital

1

350-00009

Fotorresistor

2

451-00303

Conector de 3 pines

1

602-00009

74HC595

1

602-00010

74HC165

1

602-00015

Amp. operacional doble LM358

1

603-00001

MAX2719, driver de LEDs 7 seg.

1

604-00002

Termómetro Digital DS1620

1

604-00005

Reloj de tiempo real DS1302

1

604-00009

Temporizador 555

1

700-00050

Cable rojo

1

700-00051

Cable blanco

1

700-00052

Cable negro

1

700-00065

Juego de herramientas

1

700-00066

Corta / pela cables

1

750-00007

Fuente de alimentación 12V 1A

1

800-00003

Cable Serial

1

900-00001

Parlante

1

900-00005

Servo común Parallax

1

ADC0831

Conversor A/D de 8-bits ADC0831

1

BS2-IC

Módulo BASIC Stamp II

1

Manual StampWorks Versión 1.1 • Página 7

Prepare su Plaqueta StampWorks

Para poder realizar los experimentos de StampWorks, necesitará estos componentes:

Módulo BASIC Stamp II

Plaqueta de laboratorio StampWorks (INEX-1000)

Fuente de alimentación de 12 V

Cable de programación

Cables rojo y negro

Corta / pela cables

Empiece quitando la envoltura del módulo BASIC Stamp II e insértelo cuidadosamente en el zócalo de StampWorks. Observará que el módulo BASIC Stamp II y la plaqueta de laboratorio StampWorks tienen una marca semicircular. El módulo BASIC Stamp II debería insertarse en el zócalo de forma que las marcas queden alineadas.

en el zócalo de forma que las marcas queden alineadas. Use el cable de programación para
en el zócalo de forma que las marcas queden alineadas. Use el cable de programación para

Use el cable de programación para conectar la plaqueta de laboratorio StampWorks a su PC. Es recomendable elegir un puerto serial (com) que no se encuentre en uso. Si, sin embargo, se ve forzado a desconectar otro dispositivo, por ejemplo, un PDA u organizador electrónico, de su computadora, asegúrese de deshabilitar el software de comunicación antes de intentar programar el BASIC Stamp. Si aún no ha instalado el software de programación del Stamp, vea la Sección 1 del manual de programación del Stamp II para obtener instrucciones.

Asegúrese de que el interruptor de encendido de la plaqueta de laboratorio StampWorks esté en OFF. Conecte la ficha de la fuente de alimentación de 2.1 mm en la ficha DC INPUT. Conecte la fuente de alimentación a un toma (120 VCA o 220 VCA según el caso).

En la parte central de la INEX-1000 hay un sector para realizar conexiones sin soldadura para que pueda montar circuitos que no se encuentren en la plaqueta del kit StampWorks (este kit incluye varios circuitos pre-armados). Es importante comprender cómo trabaja la protoboard. Con un poco de preparación, le será aún más fácil usarla en los próximos experimentos.

Página 8 • Manual StampWorks Versión 1.1

Prepare su Plaqueta StampWorks

La parte central de la protoboard es la que usaremos para conectar nuestros componentes. Esta sección consiste en varias columnas de conectores (hay un número impreso al margen para referencia). Para cada columna hay dos juegos de filas. El primero está indicado con las letras A hasta la E y el segundo de la F hasta la J. En todas las columnas, los conectores de la A hasta la E se encuentran eléctricamente conectados. Lo mismo se repite entre la F y la J.

Por encima y por debajo de la parte principal de la protoboard hay dos filas horizontales, cada una dividida al medio (aproximadamente en la columna 30). Estas líneas horizontales serán usadas para suministrar los +5 volts (Vdd) y masa (Vss). Para preparar la protoboard uniremos las filas para que la alimentación sea accesible en todos los sectores de la protoboard. Así se ve la protoboard desde el exterior:

la protoboard. Así se ve la protoboard desde el exterior: Si la viéramos con rayos-X, podríamos

Si la viéramos con rayos-X, podríamos observar las conexiones internas y los cortes en Vdd y Vss que deberemos unir. Esta es una vista de las conexiones internas de la protoboard:

unir. Esta es una vista de la s conexiones internas de la protoboard: Manual StampWorks Versión

Manual StampWorks Versión 1.1 • Página 9

Prepare su Plaqueta StampWorks

Comience pelando medio centímetro del aislante del extremo de un cable de interconexión negro. Con una pinza, doble cuidadosamente el cable 90 grados para que se vea así:

cuidadosamente el cable 90 grados para que se vea así: Ahora introduzca este extremo en la

Ahora introduzca este extremo en la fila del extremo superior (masa), en el conector que se encuentra justo arriba de la columna 29 (este conector es el que se encuentra exactamente en la línea central de la protoboard, hacia el extremo superior). Sostenga el cable de forma que salga hacia el costado derecho. Marque el aislante, realizando un corte superficial a la altura de la columna 32, asegurándose de no dañar el cable.

Quite el cable de la protoboard y córtelo medio centímetro más allá de la marca que acaba de realizar. Con la pinza pelacables, quite el aislante a partir de la marca. Ahora doble este extremo a 90 de forma que el cable tome forma de “U” con el aislante en la parte central.

tome forma de “U ” con el aislante en la parte central. Si midió y cortó

Si midió y cortó cuidadosamente, este cable en forma de “U” debería poder introducirse fácilmente en la fila de masa entre los conectores 29 y 32. Esto creará una fila continua de masa. Repita este procedimiento para la fila del extremo inferior, también con cable negro. Luego conecte ambas filas usando el mismo proceso, en la columna 60 (extremo derecho de cada fila).

Con el cable rojo, conecte las filas de alimentación superior e inferior. Estas filas proveerán los +5 volts, o Vdd. Una las filas de Vdd por la columna 59.

Ahora corte 4 cm de cable negro y 4 cm de cable rojo y pele medio centímetro en ambos extremos. Doble cada cable con forma de “U” redondeada. Estos cables no quedarán planos como los anteriores, para que sean más fáciles de retirar de la plaqueta StampWorks cuando sea necesario.

Página 10 • Manual StampWorks Versión 1.1

Prepare su Plaqueta StampWorks

Enchufe cuidadosamente un extremo del cable rojo en cualquiera de los terminales del bloque de +5V (cerca del interruptor RESET) y el otro extremo a la fila Vdd (+5) en la columna 1 de la protoboard. Luego conecte un extremo del cable negro en cualquiera de los terminales del bloque GND (masa) y el otro extremo en la fila de masa en la columna 19 de la protoboard. TENGA MUCHO CUIDADO al realizar estas últimas dos conexiones. Si las filas Vdd y Vss quedan interconectadas, se podrían producir daños al conectar la alimentación a la plaqueta StampWorks. Cuando termine el conexionado, la protoboard debería verse así:

termine el conexionado, la protoboard debería verse así: Encienda la plaqueta StampWorks moviendo el interruptor de

Encienda la plaqueta StampWorks moviendo el interruptor de energía a la posición ON. Debería encenderse el LED indicador de encendido (ON LED verde). Si no es así, asegúrese de que el transformador esté correctamente enchufado y busque errores en el conexionado de la protoboard.

Ejecute el software editor del BASIC Stamp II e ingrese la siguiente línea de código:

DEBUG “¡La plaqueta StampWorks está lista!”

Ahora ejecute el programa (Run). Si todo salió bien, el programa se descarga en el Stamp y aparece una ventana DEBUG en la pantalla, mostrando el mensaje que escribimos (en la imagen del ejemplo está en Inglés).

Manual StampWorks Versión 1.1 • Página 11

Prepare su Plaqueta StampWorks

Prepare su Plaqueta StampWorks Si ocurre un error, controle los siguientes ítems: • ¿Está el BASIC

Si ocurre un error, controle los siguientes ítems:

¿Está el BASIC Stamp II conectado correctamente en la plaqueta NX-1000?

¿Está el interruptor de encendido en la posición ON? ¿Está encendido el LED verde?

¿El cable de programación está conectado entre la PC y la plaqueta StampWorks?

¿Ha seleccionado (manualmente) un puerto com erróneo de la PC?

¿El puerto com de la PC está siendo usado por otro programa?

Cuando la ventana DEBUG aparece y le dice que la plaqueta StampWorks está lista, es el momento de hablar sobre la programación del Stamp.

Conexión de un Chip

Hay dos formas de dibujar un esquema. Una considerada “chip- céntrica” en la cual los pines de E/S del chip aparecen de acuerdo a su ubicación física. En StampWorks los esquemas se dibujaron de forma más eficiente, poniendo los pines de E/S en los lugares que hagan el gráfico más claro. Los pines de E/S de todos los chips se cuentan a partir del indicador, comenzando por el Pin 1 y contando en sentido anti-horario.

Página 12 • Manual StampWorks Versión 1.1

Indicador
Indicador

Bases de la Programación

Bases de la Programación Contenido de un Programa Bases de la Programación En la sección 1

Contenido de un Programa

Bases de la Programación

En la sección 1 de “BASIC Stamp II manual” se introduce el BASIC Stamp, su arquitectura y el concepto de variables y constantes. En esta sección, presentaremos varios elementos de un programa: código lineal, saltos, bucles y subrutinas.

Los ejemplos siguientes usan pseudo-código para demostrar y describir la estructura del programa. Itálicas se usan para indicar las secciones de pseudo-código que deberían ser reemplazadas por instrucciones de programación válidas para lograr que el ejemplo pueda ser compilado y ejecutado correctamente. Usted no necesita realizar ninguno de estos ejemplos, ya que todos estos conceptos serán usados en los próximos experimentos.

La gente a menudo piensa en las computadoras y los microcontroladores como dispositivos “inteligentes” cuando en realidad, no realizan ninguna tarea sin un juego específico de instrucciones. Este juego de instrucciones se llama programa. Escribirlo es nuestro trabajo. Los programas del Stamp se escriben en un lenguaje de programación llamado PBASIC, una versión específica del lenguaje de programación BASIC (Beginners All-purpose Symbolic Instruction Code= Código de Instrucciones Simbólicas Multi-propósito para Principiantes) desarrollada por Parallax. El BASIC es muy popular debido a su simplicidad y a su sintaxis similar al Inglés.

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

instruccion 1

instruccion 2

instruccion 3

END

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

Manual StampWorks Versión 1.1 • Página 13

Bases de la Programación

Saltos – Redireccionando el Flujo de un Programa

Un comando de salto es el que causa que el flujo del programa se desvíe de su trayectoria lineal. En otras palabras, cuando el programa encuentra un comando de salto, no ejecutará, en la mayoría de los casos, la siguiente línea de código. El programa normalmente, se dirigirá a otro sector. Hay dos categorías de comandos de salto: incondicional y condicional. El PBASIC tiene dos comandos, GOTO y GOSUB que realizan saltos incondicionales.

Este es un ejemplo de salto incondicional usando GOTO:

Rotulo:

instruccion 1

instruccion 2

instruccion 3

GOTO Rotulo

Lo llamamos salto incondicional debido a que siempre se ejecuta. GOTO redirige el programa hacia otro lugar. La ubicación se especifica como parte del comando GOTO y se denomina dirección. Recuerde que las direcciones están al principio de una línea de código y son seguidas por dos puntos (:). Verá frecuentemente GOTO al final del cuerpo principal del código, haciendo que las instrucciones del programa se ejecuten nuevamente.

El salto condicional hará que el flujo del programa se modifique bajo circunstancias específicas.

salto condicional más simple se logra con la función IF-THEN. La función de PBASIC IF-THEN es diferente de la original de BASIC. En PBASIC, THEN siempre es seguido por una dirección de programa (etiqueta), mientras que en el BASIC estándar se permite colocar instrucciones a continuación del THEN. Si la condición que se evalúa es verdadera, el programa saltará a la dirección especificada. Caso contrario, continuará en la siguiente línea de código.

El

Observe este listado:

Inicio:

instruccion 1 instruccion 2 instruccion 3 IF condicion THEN Inicio

Se ejecutan las instrucciones y se verifica la condición. Si se evalúa como verdadera, el programa saltará hacia atrás a la línea llamada Inicio. Si la condición se evalúa como falsa, el programa continuará por la línea que se encuentre a continuación de la instrucción IF-THEN.

Página 14 • Manual StampWorks Versión 1.1

Bases de la Programación

A medida que sus requerimientos se vuelven más complicados, podría necesitar que su programa

salte a un gran número de direcciones, dependiendo de cierta condición. La primera aproximación es

usar múltiples instrucciones IF-THEN.

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

Esta aproximación es válida y puede ser usada. Afortunadamente, el PBASIC tiene un comando especial, BRANCH, que permite que un programa salte a distintas direcciones dependiendo del valor de una variable. Esto es muy útil debido a que las condiciones que mencionábamos, a menudo proceden de una variable de control. BRANCH es un poco más sofisticado en su funcionamiento, pero muy poderoso debido a que puede reemplazar múltiples instrucciones IF-THEN. BRANCH requiere una variable de control y una lista de direcciones o etiquetas.

En el caso de una única variable de control, el listado anterior puede ser reemplazado por una línea de código:

BRANCH controlVar,[ Etiqueta_0, Etiqueta_1, Etiqueta_2]

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

Bucles – Ejecutando el código una y otra vez

Los bucles hacen que secciones del programa se repitan. Los bucles a menudo usan saltos condicionales e incondicionales para crear varias estructuras de repetición. Este es un ejemplo de

bucle incondicional:

Etiqueta:

instruccion 1

instruccion 2

instruccion 3

GOTO Etiqueta

Al usar GOTO las instrucciones se repiten incondicionalmente. Al usar IF-THEN, podemos crear bucles

que se repetirán en ciertas condiciones. Los siguientes ejemplos son llamados bucles condicionales. Estos bucles se ejecutarán bajo ciertas circunstancias. La programación condicional es lo que le otorga a los microcontroladores su “inteligencia.”

Manual StampWorks Versión 1.1 • Página 15

Bases de la Programación

Etiqueta:

instruccion 1 instruccion 2 instruccion 3 IF condicion THEN Etiqueta

Con esta estructura de repetición, las instrucciones se ejecutarán mientras la condición se evalúe como verdadera. Cuando la condición se evalúe como falsa, el programa continuará por la línea de código siguiente a la instrucción IF-THEN. Es importante observar que en el listado anterior las instrucciones siempre se ejecutarán al menos una vez, incluso cuando la condición sea falsa.

Para evitar que suceda esto, es necesario probar la condición antes de ejecutar las instrucciones. El código puede escribirse como se muestra a continuación para lograr que las instrucciones (1 – 3) solamente se ejecuten cuando la condición sea verdadera. Cuando la condición es evaluada como falsa, el programa continúa en Etiqueta_2.

Etiqueta_1:

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

Etiqueta_2:

instruccion 4

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

FOR controlVar = ValInicial TO ValFinal STEP tamañoPaso instruccion 1 instruccion 2 instruccion 3 NEXT

La construcción FOR-NEXT es usada para lograr que una sección de código se ejecute una cantidad determinada de veces. FOR-NEXT usa una variable de control para determinar la cantidad de repeticiones. El tamaño de la variable determinará la cantidad máxima de repeticiones. Por ejemplo, la cantidad máxima de repeticiones cuando se utiliza una variable de control tipo byte será 255.

Página 16 • Manual StampWorks Versión 1.1

Bases de la Programación

La opción STEP de FOR-NEXT es usada cuando se necesita que el incremento de la variable en cada repetición sea distinto de uno. Si, por ejemplo, el bucle debe contar en valores pares, el código podría verse así:

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

Subrutinas – Código reutilizable que ahorra espacio de programa

El último concepto de programación que discutiremos es la subrutina. Una subrutina es una sección de código que puede ser llamada (ejecutada) desde cualquier punto del programa. GOSUB es usado para redirigir el programa hacia el código de la subrutina. La subrutina termina con el comando RETURN. Este comando hace que el programa salte hacia la línea de código que sigue a la llamada GOSUB original.

Inicio:

GOSUB MySub

PAUSE 1000

GOTO Inicio

MySub:

instruccion 1 instruccion 2 instruccion 3 RETURN

En este ejemplo, el código de MySub es ejecutado y luego el programa salta hacia atrás a la línea PAUSE 1000.

Estilo de Programación

El PBASIC es un lenguaje muy flexible. Sus reglas son simples y fáciles de aprender. El PBASIC no es sensible al formato del programa, uso de espacios en blanco (espacios, tabulaciones, líneas en blanco, etc.) y no detecta diferencias entre mayúsculas y minúsculas; esto quiere decir que dirs, Dirs y DIRS significan lo mismo en PBASIC así que podremos elegir la opción que más nos guste para trabajar.

Manual StampWorks Versión 1.1 • Página 17

Bases de la Programación

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

Los programas de este libro y los que se encuentran en el CD de StampWorks usan las siguientes convenciones:

Plantilla

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

Encabezado: Esta sección contiene el nombre del archivo y una corta descripción de su funcionamiento. También se registran en este sector las revisiones y actualizaciones que se realizan a la versión original. En la Versión 1.1 de este libro, también hemos agregado la directiva del compilador que indica el modelo de BASIC Stamp que estamos usando.

Declaraciones: Ésta sección contiene la declaración de los alias para los pines de E/S, valores constantes y variables. En los ejemplos de programación de esta guía, las variables PBASIC siempre tendrán nombres significativos. Los únicos nombres internos que se usarán serán Outs y Dirs y siempre en la sección de inicialización y no en el código principal.

Instrucciones DATA: Algunos programas almacenan información adicional en la EEPROM del

DATA. Esta sección provee el espacio para dicho

BAISC

Stamp

con

instrucciones

almacenamiento.

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

Código: Es donde reside la parte principal del código del programa.

Subrutinas: Las subrutinas están separadas del cuerpo principal del código debido a que pueden ser llamadas desde cualquier parte del programa. La separación entre subrutinas también facilita la portabilidad del código, posibilitando usar la herramienta de edición “cut and paste” (cortar y pegar) para reutilizar las subrutinas en otros programas.

La plantilla se llama BLANK.BS2. Puede cargarla cuando comienza un proyecto nuevo, asegurándose de cambiarle el nombre utilizando la opción “Save As” (Guardar como) del BASIC Stamp Editor.

Página 18 • Manual StampWorks Versión 1.1

Bases de la Programación

'

=========================================================================

'

Archivo: BLANK.BS2

'

'

{ descripción }

'

'

{$STAMP BS2}

'

=========================================================================

'

{ pines de E/S }

'

{ constantes }

'

{ variables }

'

 

-------------------------------------------------------------------------

'

{ instrucciones DATA }

'

 

-------------------------------------------------------------------------

'

{ inicialización }

'

 

-------------------------------------------------------------------------

'

{ código }

Principal:

 

GOTO Principal

END

'

 

-------------------------------------------------------------------------

'

{ subrutinas }

Convención sobre Nombres

Como se dijo anteriormente, los programas de los experimentos utilizarán alias (sobrenombres) para los pines de E/S y variables internas de PBASIC. Se usarán las siguientes convenciones:

Constantes: (incluyendo las etiquetas de direccionamiento a subrutinas) utilizarán mezcla de mayúsculas y minúsculas, comenzando siempre en mayúscula. Ejemplos: LimitSw, LMotor, DlyTm, InitLCD

Manual StampWorks Versión 1.1 • Página 19

Bases de la Programación

Variables: usarán mezcla de mayúsculas y minúsculas, comenzando siempre en minúscula. Ejemplos: lcdChar, hrs, iCount

Palabras reservadas PBASIC: todo en mayúsculas. Ejemplos: FOR, NEXT, GOSUB, RETURN

Nota del traductor

La traducción fue realizada por Arístides Alvarez (aalvarez@parallaxinc.com).

Los programas se dejaron en su versión original, sin traducir los nombres de variables ni etiquetas, manteniendo el formato del autor original.

En algunos casos el traductor no comparte el estilo de programación del autor, pero para mantener la veracidad y equivalencia de la versión en castellano con la versión original en inglés, se mantuvo la estructura original.

Si tiene comentarios o sugerencias sobre la traducción, puede enviarlas a aalvarez@parallaxinc.com. Si quiere opinar sobre el libro en sí, puede enviar sus comentarios a Jon Williams, jonwms@aol.com.

Página 20 • Manual StampWorks Versión 1.1

Hora de Experimentar

Hora de Experimentar Hora de Experimentar Aprendiendo los Conceptos de Programación Lo que sigue es una

Hora de Experimentar

Aprendiendo los Conceptos de Programación

Lo que sigue es una serie de experimentos de programación que usted puede construir y ejecutar en su plaqueta de laboratorio StampWorks. El propósito de estos experimentos es enseñar los conceptos de programación y el uso de componentes externos con el BASIC Stamp. Los experimentos fueron pensados para que gane progresivamente experiencia en programación. Combinando los conceptos individuales aprendidos puede producir programas sofisticados.

Construcción de Proyectos

Esta sección del manual es simple pero importante debido a que aprenderá lecciones de programación y técnicas de construcción importantes, usando su laboratorio StampWorks. A medida que avance sobre el manual, observará menos detalles de construcción (ya contará con suficiente experiencia como para tomar sus propias decisiones) y la explicación del funcionamiento del programa será menos profunda, enfocándose específicamente en las técnicas especiales o dispositivos externos conectados al BASIC Stamp.

Qué hacer entre proyectos

El circuito de un proyecto puede no ser eléctricamente compatible con el siguiente pudiendo en algunos casos, causar daños al BASIC Stamp si se ejecuta el programa viejo con el circuito nuevo. Por esta razón, se debería cargar un programa vacío en el Stamp antes de conectar el circuito nuevo. Esto protegerá al Stamp configurando a todos los pines de E/S como entradas. Este es un programa simple de una sola línea que limpiará y protegerá al Stamp.

DEBUG "Stamp limpio."

Este programa se llama CLEAR.BS2.

Manual StampWorks Versión 1.1 • Página 21

Experimento 1: Hacer Titilar un LED

Experimento 1: Hacer Titilar un LED Experimento 1: Hacer Titilar un LED El propósito de este

Experimento 1:

Hacer Titilar un LED

El propósito de este experimento es hacer titilar un LED con el BASIC Stamp. Estos se usan a menudo como indicadores de alarma.

Nuevos Elementos/Comandos PBASIC:

CON

HIGH

LOW

PAUSE

GOTO

Construcción del Circuito

Todos los experimentos de StampWorks usan una línea punteada para indicar componentes que ya se encuentran montados en la plaqueta NX-1000. El LED se encuentra en el sector “LED MONITOR 16 CHANNELS” (MONITOR DE LEDS DE 16 CANALES) de la plaqueta.

CHANNELS” (MONITOR DE LEDS DE 16 CANALES) de la plaqueta. Dado que la plaqueta StampWorks tiene

Dado que la plaqueta StampWorks tiene los LEDs montado sobre ella, todo lo que debe hacer es conectar uno al BASIC Stamp.

1. Corte 15 cm de cable blanco. Pele medio centímetro de aislante de cada extremo.

2. Conecte un extremo al Port 0 del BASIC Stamp.

3. Conecte el otro extremo al Channel 0 del LED Monitor

Manual StampWorks Versión 1.1 • Página 23

Experimento 1: Hacer Titilar un LED

'

=========================================================================

'

Archivo: BLINK1.BS2

'

'

Hace titilar un LED conectado a P0

'

=========================================================================

LEDpin

CON

0

' LED conectado a Pin 0

DlyTm

CON

500

' retardo en milisegundos

'

-------------------------------------------------------------------------

Principal:

HIGH LEDpin

' enciende LED

PAUSE DlyTm

' tiempo encendido

LOW LEDpin

' apaga LED

PAUSE DlyTm

' tiempo apagado

GOTO Principal

' repite todo

END

Descripción del Programa

Cada uno de los pines de E/S del Stamp tiene asociado tres bits de control. Un bit de la palabra Dirs determina si el pin es una entrada (bit = 0) o una salida (bit = 1). Si el pin se configura como salida, el estado del pin dependerá del bit correspondiente de la palabra Outs. Si el pin se configura como entrada, se toma el valor actual y se almacena dentro de la palabra Ins.

HIGH y LOW realizan dos funciones en un solo comando: el pin seleccionado es configurado como salida primero y luego se fija el valor correspondiente en la palabra Outs (1 para HIGH, 0 para LOW).

Por ejemplo, esta línea de código:

HIGH 0

Realiza la misma función que:

Dir0 = 1 Out0 = 1

' hace salida a Pin 0 ' pone al Pin 0 en estado alto

Página 24 • Manual StampWorks Versión 1.1

Experimento 2: Hacer Titilar un LED (Versión 2)

Experimento 2: Hacer Titilar un LED (Versión 2) Experimento 2: Hacer Titilar un LED (Versión 2)

Experimento 2:

Hacer Titilar un LED (Versión 2)

El propósito de este experimento es hacer titilar un LED con el BASIC Stamp. El método empleado en este experimento agrega flexibilidad al control del LED.

Nuevos Elementos/Comandos PBASIC:

VAR

Out0 – Out15

Dir0 – Dir15

Byte

Bit0 – Bit15

Construcción del Circuito.

Use el mismo circuito que en el Experimento 1.

'

=========================================================================

'

Archivo: BLINK2.BS2

'

'

Hace titilar un LED conectado al Pin 0. El tiempo de encendido y apagado

'

del LED pueden ser distintos.

'

=========================================================================

MiLED

VAR

Out0

' LED conectado a Pin 0

TiempoEnc

CON

1000

' tiempo encendido en milisegundos

TiempoAp

CON

250

' tiempo apagado en milisegundos

Encendido

CON

1

Apagado

CON

0

'

-------------------------------------------------------------------------

Inicializar:

'

Dir0 = %1

-------------------------------------------------------------------------

' hace salida al pin del LED

Principal:

MiLED = Encendido

Manual StampWorks Versión 1.1 • Página 25

Experimento 2: Hacer Titilar un LED (Versión 2)

PAUSE TiempoEnc MiLED = Apagado PAUSE TiempoAp GOTO Principal END

' pausa de encendido

' pausa de apagado ' repite todo

Descripción del Programa

Esta versión de BLINK expone las capacidades técnicas de los pines de E/S del BASIC Stamp y su control. Observe cómo usar sobrenombres (o alias) para los pines de E/S, constantes y variables, logrando que el programa sea fácil de leer. No hay errores en la interpretación de:

MiLED = Encendido

La ventaja en este programa es la capacidad del pin de E/S del BASIC Stamp I/O de seguir el valor de una constante o una variable. Cambie el programa para que se vea como el LED puede seguir a una variable:

'

=========================================================================

'

Archivo: BLINK2b.BS2

'

'

Hace titilar un LED conectado a Pin 0.

'

=========================================================================

MiLED

VAR

Out0

' LED conectado a Pin 0

TiempoEnc

CON

1000

' tiempo encendido en milisegundos

TiempoAp

CON

250

' tiempo apagado en milisegundos

Encendido

CON

1

Apagado

CON

0

cntr

VAR

Byte

' contador para controlar al LED

'

-------------------------------------------------------------------------

Inicializar:

Dir0 = %1

'

' Hace el pin del LED salida

-------------------------------------------------------------------------

Principal:

MiLED = cntr PAUSE TiempoEnc

' pone cntr.Bit0 en MiLED ' pausa de encendido

Página 26 • Manual StampWorks Versión 1.1

Experimento 2: Hacer Titilar un LED (Versión 2)

cntr = cntr + 1 GOTO Principal END

' incrementa el contador ' repite todo

¿Puede explicar lo que sucede?

Dado que MiLED es una variable tipo bit, el Bit0 de cntr la controlará. Funciona así: cuando cntr es impar (1, 3, 5, etc.), Bit0 será activado (1), haciendo que el LED se encienda. Cuando cntr es un número par, Bit0 se limpiará (0), haciendo que el LED se apague.

Manual StampWorks Versión 1.1 • Página 27

Experimento 3: Contador con LEDs

Experimento 3: Contador con LEDs Experimento 3: Contador con LEDs El propósito de este experimento es

Experimento 3:

Contador con LEDs

El propósito de este experimento es mostrar el valor de 8 bits (un byte) usando LEDs. Múltiples LEDs se usan frecuentemente como indicadores.

Nuevos Elementos/Comandos PBASIC:

OutL, OutH

DirL, DirH

FOR-NEXT

Construcción del Circuito.

Estos LEDs figuran en el sector “LED MONITOR 16 CHANNELS” de la plaqueta NX-1000.

en el sector “LED MO NITOR 16 CHANNELS” de la plaqueta NX-1000. Manual StampWorks Versión 1.1

Manual StampWorks Versión 1.1 • Página 29

Experimento 3: Contador con LEDs

Dado que la plaqueta de laboratorio de StampWorks tiene los LEDs montados, lo único que deberá hacer es conectarlos al BASIC Stamp.

1. Comience con seis cables blancos de 15 cm. Pele medio centímetro de aislante en todos los extremos.

2. Conecte un extremo al Pin 0 del BASIC Stamp.

3. Conecte el otro extremo al Channel 0 del LED Monitor.

4. Repita los pasos 2 y 3 para los Channels 1-7 del LED Monitor (pines 1– 7 del Stamp) usando más cables.

'

=========================================================================

'

Archivo: LEDCNTR.BS2

'

'

Muestra un contador binario en los pines 0 - 7

'

=========================================================================

LEDs

VAR

OutL

' LEDs en pines 0 - 7

MinCnt

CON

0

' valor inicial del contador

MaxCnt

CON

255

' valor final del contador

DlyTm

CON

100

' retardo en milisegundos

cntr

VAR

Byte

' contador

'

-------------------------------------------------------------------------

Inicializar:

DirL = %11111111

'

' hace salidas todos los pines

-------------------------------------------------------------------------

Principal:

FOR cntr = MinCnt TO MaxCnt LEDs = cntr PAUSE DlyTm NEXT

' bucle que genera los números ' muestra el número con LEDs ' pausa entre números

GOTO Principal

' repite todo

END

Página 30 • Manual StampWorks Versión 1.1

Experimento 3: Contador con LEDs

Descripción del Programa

Como se explicó en el Experimento 1, el estado de salida de los pines del BASIC Stamp se almacenan en el área de memoria llamada Outs (OutL es el byte inferior de la palabra Outs). Dado que OutL es parte de la memoria (RAM) multipropósito del BASIC Stamp, se pueden escribir y leer valores en ésta. En este caso, copiar el valor de nuestro contador en OutL (LEDs es el alias) hace que éste sea mostrado en los LEDs de la plaqueta StampWorks.

Desafío

Modifique el programa para que cuente hacia atrás.

Manual StampWorks Versión 1.1 • Página 31

Experimento 4: Pantalla de LEDs de Ciencia-Ficción

Experimento 4: Pantalla de LEDs de Ciencia-Ficción Experimento 4: Pantalla de LEDs de Ciencia-Ficción El propósito

Experimento 4:

Pantalla de LEDs de Ciencia-Ficción

El propósito de este experimento es hacer un “ping-pong” de luz a través de los LEDs para crear una pantalla tipo Sci-Fi (ciencia-ficción). Circuitos como éstos se usan en películas y series televisivas.

Nuevos Elementos/Comandos PBASIC:

<< (Operador de desplazamiento de bits hacia la izquierda)

>> (Operador de desplazamiento de bits hacia la derecha)

IF-THEN

Construcción del Circuito

Use el mismo circuito del experimento anterior.

'

=========================================================================

'

Archivo: PONG.BS2

'

'

"Ping-Pong" en LED (uno de ocho)

'

=========================================================================

LEDs

VAR

OutL

' LEDs se conectan a los pines 0 - 7

DlyTm

CON

50

' retardo en milisegundos

'

-------------------------------------------------------------------------

Inicializar:

DirL = %11111111 LEDs = %00000001

'

' configura todos los pines como salidas ' comienza con un LED encendido

-------------------------------------------------------------------------

Adelante:

PAUSE DlyTm LEDs = LEDs << 1 IF LEDs = %10000000 THEN Atras GOTO Adelante

Atras:

PAUSE DlyTm

' muestra el LED ' desplaza el LED a la izquierda ' verifica posición final ' continua en esta dirección

' muestra el LED

Manual StampWorks Versión 1.1 • Página 33

Experimento 4: Pantalla de LEDs de Ciencia-Ficción

LEDs = LEDs >> 1 IF LEDs = %00000001 THEN Adelante GOTO Atras

END

' desplaza el LED a la derecha ' verifica posición final ' continua en esta dirección

Descripción del Programa

Este programa demuestra la habilidad del BASIC Stamp para manipular sus salidas. El programa inicializa los LEDs en %00000001 (el LED 0 está encendido) luego utiliza el operador de desplazamiento a la izquierda (<<) para mover el LED encendido una posición a la izquierda. Con números binarios, desplazar un lugar a la izquierda es lo mismo que multiplicar por dos. Desplazar un lugar a la derecha (>>) es lo mismo que dividir por dos.

Ambas secciones principales del código usan IF-THEN para controlar el límite de la cuenta, haciendo que el programa salte a la otra sección cuando llega al valor límite.

Desafío

Cree un retardo variable y agregue alguna curiosidad al programa (vea PONG2.BS2 por ejemplo).

Página 34 • Manual StampWorks Versión 1.1

Experimento 5: Gráficos con LEDs (Punto o Barra)

Experimento 5: Gráficos con LEDs (Punto o Barra) Experimento 5: Gráficos con LEDs (Punto o Barra)

Experimento 5:

Gráficos con LEDs (Punto o Barra)

El propósito de este experimento es crear un gráfico configurable con LEDs (punto o barra). Este tipo de gráficos es muy común en equipamiento de audio, específicamente para indicadores de volumen (VU meters). El valor a graficar en el experimento se tomará de la posición de un potenciómetro.

Nuevos Elementos/Comandos PBASIC:

Word

RCTIME

*/ (operador estrella-barra)

GOSUB-RETURN

DCD

Construcción del Circuito

Agregue este circuito al Experimento 4.

DCD Construcción del Circuito Agregue este circuito al Experimento 4. Manual StampWorks Versión 1.1 • Página

Manual StampWorks Versión 1.1 • Página 35

Experimento 5: Gráficos con LEDs (Punto o Barra)

1. Usando cable rojo (corte el largo necesario), conecte la pista Vdd (+5) al punto A15.

2. Conecte un capacitor de 0.1 uF (104K) entre los puntos B14 y B15.

3. conecte un resistor de 220-ohm (rojo-rojo-marrón) entre los puntos C10 y C14.

4. Usando cable blanco, conecte A10 al Port 15 del BASIC Stamp.

5. Usando cable blanco, conecte E14 al cursor del potenciómetro de 10K

6. Usando cable negro, conecte la pista Vss (masa) al terminal inferior del potenciómetro de

10K.

'

=========================================================================

'

Archivo: LEDGRAGH.BS2

'

'

Muestra una barra o un punto en la barra de 8 LEDs

'

'

{$STAMP BS2}

'

=========================================================================

LEDs

VAR

OutL

' salidas para LEDs

PotPin

CON

15

DotGraf

CON

0

' define tipo de gráfico

BarGraf

CON

1

GrMode

CON

BarGraf

' define modo gráfico actual

rawVal

VAR

Word

' valor medido en el potenciómetro

grafVal

VAR

Byte

' valor a graficar

bits

VAR

Byte

' bit más alto que se enciende

newBar

VAR

Byte

' espacio de trabajo para la barra

'

-------------------------------------------------------------------------

Inicializar:

DirL = %11111111

'

' todas salidas

-------------------------------------------------------------------------

Principal:

HIGH PotPin PAUSE 1 RCTIME PotPin,1,rawVal

grafVal = rawVal */ $005F

' descarga el capacitor ' durante 1 ms ' lee el potenciómetro

' escala

' – equivalente a rawVal * 0.372

grafVal (0 - 255)

Página 36 • Manual StampWorks Versión 1.1

Experimento 5: Gráficos con LEDs (Punto o Barra)

GOSUB ShowGraph

' muestra

PAUSE 50 GOTO Principal END

' repite todo

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

ShowGraph:

IF GrMode = BarGraf THEN ShowBar

ShowDot:

LEDs = DCD (grafVal / 32) RETURN

ShowBar:

bits = DCD (grafVal / 32) newBar = 0

BuildBar:

IF bits = 0 THEN BarDone newBar = newBar << 1 newBar.Bit0 = 1 bits = bits >> 1 GOTO BuildBar

BarDone:

LEDs = newBar RETURN

' salta al código de modo gráfico

' muestra el valor (punto)

' obtiene el bit más alto

' ¿se encendieron todos los LEDs? ' no – desplazar a la izquierda ' enciende el primer LED ' desplaza el valor de bits ' continuar

' mostrar nuevo nivel

Descripción del Programa

Después de inicializar las salidas, este programa lee el potenciómetro de 10K (ubicado en la plaqueta de laboratorio StampWorks) con RCTIME. Usa DEBUG para mostrar el valor directo que se obtuvo con RCTIME, entre uno (con el potenciómetro completamente en sentido anti-horario) y 685 (con el potenciómetro completamente en sentido horario). Dado que grafVal es una variable de un byte, el valor rawVal debe afectarse por un factor de escala para corregir su rango.

Para determinar el factor de escala, hay que dividir 255 (el máximo valor posible para grafVal) por 685 (máximo valor que entrega rawVal). El resultado es 0.372.

Trabajar con valores fraccionarios dentro del sistema algebraico de números enteros del PBASIC, es posible gracias al operador */ (estrella-barra). El parámetro para */ es una variable de 16-bit

Manual StampWorks Versión 1.1 • Página 37

Experimento 5: Gráficos con LEDs (Punto o Barra)

(word). Los primeros ocho bits (byte superior) se multiplican como un número entero. Los últimos ocho bits (byte bajo) se multiplican como número fraccionario.

Para determinar el valor del byte de la parte fraccionaria, multiplique el valor fraccionario decimal por 255 y conviértalo a formato hexadecimal.

Ejemplo:

0.372 x 255 = 95 (o $5F)

Dado que el factor en el experimento es 0.372, el valor */ es $005F.

El programa usa el operador DCD para determinar el valor del bit más alto de grafVal. Con ocho LEDs en el gráfico, grafVal es dividido por 32, forzando el resultado de DCD a valores de salida entre %00000001 (DCD 0) y %10000000 (DCD 7).

En el modo Dot, esto es todo lo que se requiere para encender un solo LED. En el Bar Mode, los LEDs inferiores también deben encenderse. Esto es realizado por un bucle. El valor de control del bucle es la variable bits, que también se calcula en base a DCD. Este bucle se controla por valor de bits, saliendo cuando este es igual a cero, mientras que cada iteración decrementa su valor.

Si bits es mayor que cero, la variable de espacio de trabajo del gráfico, newBar, se desplaza a la izquierda y su bit 0 es activado. Por ejemplo, si DCD asigna %1000 a bits, esta es la forma en que bits y newBar se verán afectadas en cada iteración del bucle:

bits newBar

1000

0001

0100

0011

0010

0111

0001

1111

0000

(listo – salir del bucle y mostrar el valor)

El propósito de la variable newBar, es evitar que los LEDs parpadeen con cada actualización. Esto permite que el programa comience con una barra gráfica “vacía” que se construye hasta el valor actual. Con esta técnica, el programa no debe recordar el valor del gráfico anterior.

Página 38 • Manual StampWorks Versión 1.1

Experimento 6: Un Juego Simple

Experimento 6: Un Juego Simple Experimento 6: Un Juego Simple El propósito de este experimento es

Experimento 6:

Un Juego Simple

El propósito de este experimento es crear un juego simple con el BASIC Stamp.

Nuevos Elementos/Comandos PBASIC:

RANDOM

& (operador And)

FREQOUT

BUTTON

LOOKUP

Construcción del Circuito

And) • FREQOUT • BUTTON • LOOKUP Construcción del Circuito Manual StampWorks Versión 1.1 • Página

Manual StampWorks Versión 1.1 • Página 39

Experimento 7: Controlador de Luces

Si quiere puede usar el piezoeléctrico del kit en lugar del de la NX-1000 que parece tener mejor volumen.

1. Usando cables blancos, conecte los puertos 0 – 5 del BASIC Stamp a los LEDs 0 – 5.

2. Usando cable blanco, conecte el puerto 6 del BASIC Stamp al lado + del piezoeléctrico.

3. Usando cable negro, conecte el lado – del piezoeléctrico a masa (ground).

4. Usando un cable negro conecte el puerto 7 del BASIC Stamp al pulsador D0.

'

=========================================================================

'

Archivo: LASVEGAS.BS2

'

'

Máquina tragamonedas basada en un BASIC Stamp

'

=========================================================================

LEDs

VAR

OutL

' salidas LED

Spkr

CON

6

' salida parlante

Swtch

CON

7

' pulsador de entrada

randW

VAR

Word

' número aleatorio

pattern

VAR

Byte

' patrón de luces

tone

VAR

Word

' tono de salida

swData

VAR

Byte

' variable para BUTTON

delay

VAR

Word

' retardo variable de "giro"

spin1

VAR

Byte

' contador bucle

spin2

VAR

Byte

' contador bucle

'

-------------------------------------------------------------------------

Inicializar:

DirL = %00111111

'

' configura LEDs como salidas

-------------------------------------------------------------------------

Attention:

GOSUB GetRnd FREQOUT Spkr,35,tone PAUSE 100 BUTTON Swtch,0,255,10,swData,1,Spin GOTO Attention

Spin:

LEDs = %00111111 PAUSE 750

' obtiene número aleatorio ' emite un sonido

' controla el pulsador de juego

' simula un reinicio del juego

Página 40 • Manual StampWorks Versión 1.1

Experimento 6: Un Juego Simple

LEDs = %00000000 PAUSE 500 delay = 75

FOR spin1 = 1 TO 25 GOSUB GetRnd FREQOUT Spkr,25,425 PAUSE delay delay = delay */ $0119 NEXT

IF pattern = %00111111 THEN YouWin FREQOUT Spkr,1000,150 LEDs = %00000000 PAUSE 1000 GOTO Attention

YouWin:

FOR spin1 = 1 TO 5 FOR spin2 = 0 TO 3 LOOKUP spin2,[$00,$0C,$12,$21],LEDs LOOKUP spin2,[665,795,995,1320],tone FREQOUT Spkr,35,tone PAUSE 65 NEXT NEXT

LEDs = %00000000 PAUSE 1000 GOTO Attention END

' retardo de inicialización

' gira la rueda ' obtiene número aleatorio ' ruido de la rueda ' pausa entre ruidos ' multiplica la pausa por 1.1

' si todos se encienden, gana ' caso contrario, pierde ' limpia los LEDs

' repite todo

' luces y sonidos para indicar que ´ ganó

' limpia los LEDs

' repite todo

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

GetRnd:

RANDOM randW tone = randW & $7FF pattern = randW & %00111111 LEDs = pattern RETURN

' obtiene número pseudo aleatorio ' no deja que el tono sea muy alto ' borra bits sin uso ' muestra el patrón

Manual StampWorks Versión 1.1 • Página 41

Experimento 7: Controlador de Luces

Descripción del Programa

Este programa demuestra cómo agregar más aleatoriedad al número pseudo aleatorio generado por el comando RANDOM, agregando el efecto humano.

El programa espera en un bucle llamado Attention. Al principio del bucle se llama a GetRnd para crear un valor pseudo aleatorio, un tono para el parlante y para poner un patrón nuevo en los LEDs. Al regresar a Attention, se emite el sonido y se revisa si se ha presionado el botón. El programa repetirá el bucle sobre Attention hasta que se presione el botón.

El comando BUTTON es usado para eliminar el rebote en la entrada. Lo que hace aleatorio al programa es el tiempo que permanece presionado el botón. Cuando se presiona, los LEDs se encienden y luego se apagan para simular que el juego se reinicia. Luego, un bucle FOR-NEXT es usado para simular el giro de los rodillos de la máquina tragamonedas. En cada giro, un sonido “clic” es generado mientras se aumenta la pausa entre los mismos para simular la desaceleración natural de los discos de la máquina.

Si se encienden los seis LEDs antes del último giro, el programa salta a YouWin. Esta rutina usa LOOKUP para encender un patrón predefinido de LEDs y sonidos antes de regresar al principio del programa. Si alguno de los LEDs no se enciende, se escuchará el sonido de la derrota en el parlante y el juego se reiniciará.

Desafío

Modifique el juego para que se pueda ganar con menos de seis LEDs encendidos. Por ejemplo, vea

LASVGAS2.BS2.

Página 42 • Manual StampWorks Versión 1.1

Experimento 7: Controlador de Luces

Experimento 7: Controlador de Luces Experimento 7: Controlador de Luces El propósito de este experimento es

Experimento 7:

Controlador de Luces

El propósito de este experimento es crear un pequeño controlador de luces, conveniente para árboles de navidad y decoraciones externas. Las salidas de este circuito serán solamente LEDs (Para controlar luces de alta tensión vea el libro de Matt Gilliland, Microcontroller Application Cookbook).

Nuevos Elementos/Comandos PBASIC:

DATA

MIN

// (Operador módulo)

BRANCH

Construcción del Circuito.

MIN • // (Operador módulo) • BRANCH Construcción del Circuito. Manual StampWorks Versión 1.1 • Página

Manual StampWorks Versión 1.1 • Página 43

Experimento 7: Controlador de Luces

1. Usando cables blancos, conecte los puertos 0-5 del BASIC Stamp a los LEDs 0– 5.

2. Usando cable rojo, conecte la línea de Vdd (+5) al punto A15.

3. Conecte un capacitor de 0.1 uF (104K) entre B14 y B15.

4. Conecte un resistor de 220-ohm (rojo-rojo-marrón) entre C10 y C14.

5. Usando cable blanco, conecte A10 al puerto 6 del BASIC Stamp.

6. Usando cable blanco, conecte E14 al terminal superior del potenciómetro de 10K.

7. Usando cable negro, conecte la línea de Vss (ground) al cursor (terminal central) del potenciómetro de 10K.

8. Usando un cable blanco conecte el puerto 7 del BASIC Stamp al pulsador D7.

'

=========================================================================

'

Archivo: LTSHOW.BS2

'

'

mini controlador de luces

'

' {$STAMP BS2}

' =========================================================================

Select

CON

7

' botón en pin 7

PotPin

CON

6

' pot. control veloc. en pin 6

Lights

VAR

OutL

' salidas de control de luces

delay

VAR

Word

' pausa entre patrones

btnVar

VAR

Byte

' variable para BUTTON

mode

VAR

Byte

' modo seleccionado

offset

VAR

Byte

' offset del patrón de luz

randW

VAR

Word

' variable para RANDOM

'

-------------------------------------------------------------------------

SeqA

DATA %000001, %000010, %000100, %001000, %010000, %100000

SeqB

DATA %100000, %010000, %001000, %000100, %000010

SeqC

DATA %000001, %000010, %000100, %001000, %010000 DATA %000000, %001100, %010010, %100001

SeqD

DATA %100100, %010010, %001001

SeqE

DATA %0

AMax

CON

SeqB-SeqA

' calcula largo de secuencia

BMax

CON

SeqC-SeqB

CMax

CON

SeqD-SeqC

DMax

CON

SeqE-SeqD

'

-------------------------------------------------------------------------

Página 44 • Manual StampWorks Versión 1.1

Experimento 7: Controlador de Luces

Inicializar:

DirL = %00111111

'

' configura LEDs como salidas

-------------------------------------------------------------------------

Principal:

HIGH PotPin PAUSE 1 RCTIME PotPin,1,delay delay = (delay */ $018A) MIN 50 PAUSE delay

SwitchCheck:

BUTTON Select,0,255,0,btnVar,0,Show mode = mode + 1 // 5

Show:

' descarga el capacitor

' lee potenciómetro de velocidad ' calcula retardo (50 ms ~ 1 sec) ' espera entre patrones

' ¿nuevo modo? ' si, actualizar la var. mode

BRANCH mode,[ModeA,ModeB,ModeC,ModeD,ModeE] GOTO Principal END

'

-------------------------------------------------------------------------

ModeA:

offset = offset + 1 // AMax READ (SeqA + offset),Lights GOTO Principal

ModeB:

offset = offset + 1 // BMax READ (SeqB + offset),Lights GOTO Principal

ModeC:

offset = offset + 1 // CMax READ (SeqC + offset),Lights GOTO Principal

ModeD:

offset = offset + 1 // DMax READ (SeqD + offset),Lights GOTO Principal

ModeE:

' actualiza el offset (0 - 5) ' sale nuevo patrón de luces ' repite

Manual StampWorks Versión 1.1 • Página 45

Experimento 7: Controlador de Luces

RANDOM randW Lights = randW & %00111111 GOTO Principal

' obtiene número aleatorio ' enciende canales aleatorios

Descripción del Programa

Este programa es más simple de lo que parece. El cuerpo principal del programa es un bucle. La velocidad de ejecución del bucle principal es controlada por la posición del potenciómetro. RCTIME es usada para leer el potenciómetro y normalmente el número máximo que se obtuvo en su lectura fue 648. Multiplicando el máximo valor del potenciómetro por 1.54 (delay */ $018A) se obtiene un máximo de 1000, para producir una pausa de un segundo de duración. El operador MIN es usado para garantizar que la pausa más corta posible sea de 50 milisegundos.

El código SwitchCheck revisa si D7 es presionado. Si es así, la variable mode, es incrementada (en una unidad). El operador de módulo (//) es usado para mantener a mode en el rango de cero a cuatro. Esto funciona debido a que el operador de módulo entrega el resto de una división. Dado que cualquier número dividido por sí mismo da un resto de cero, usar el operador de esta manera hace que mode esté entre cuatro y cero.

El elemento final del bucle principal es Show. Este código usa BRANCH para llamar a la subrutina que emitirá la secuencia de luces especificada por mode. Los modos A hasta D trabajan en forma similar, obteniendo secuencias de luces de la EEPROM del BASIC Stamp (almacenada por las instrucciones DATA). El modo E genera un patrón aleatorio de luces.

Mire el código de la subrutina ModeA. Lo primero que se hace es actualizar el valor de la variable offset, usando la técnica del operador módulo. El valor de offset es agregado al principio de la secuencia de luz especificada, y el patrón de luces actual es obtenido con READ. Observe que las instrucciones DATA de cada secuencia están etiquetadas (SeqA, SeqB, etc.). Internamente, cada una de esas etiquetas es convertida a un valor constante que es igual a la dirección de inicio de cada secuencia. La longitud de cada secuencia es calculada con esas constantes. Al emplear esta técnica, los patrones de luces pueden ser actualizados (alargados o acortados) sin necesidad de modificar el código llamado por Show. ModeE es muy directo, usando la función RANDOM para presentar nuevos patrones de luces en cada pasada a través del bucle principal.

Desafío

Agregue una nueva secuencia de luces. ¿Qué secciones del programa deben ser modificadas para realizar esta tarea?

Página 46 • Manual StampWorks Versión 1.1

Construyendo Circuitos

Construyendo Circuitos Construyendo Circuitos por su Cuenta Con la experiencia que obtuvo en la sección anterior

Construyendo Circuitos por su Cuenta

Con la experiencia que obtuvo en la sección anterior, ya está en condiciones de montar los circuitos restantes sin instrucciones específicas. Estos proyectos son bastante simples y los encontrará eléctricamente similares a varios de los proyectos que ya construyó.

Proceda lentamente y controle dos veces sus conexiones antes de aplicar la alimentación al circuito. A partir de ahora entonces, usted deberá montar sus propios proyectos y experimentos con el Stamp.

Ahora continuemos con los displays de 7 segmentos …

Manual StampWorks Versión 1.1 • Página 47

Usando Displays de 7 Segmentos

Usando Displays de 7 Segmentos Usando Displays de 7 Segmentos Un display de 7 segmentos está

Usando Displays de 7 Segmentos

Un display de 7 segmentos está formado por siete LEDs comunes (ocho contando el punto decimal) que han sido empacados con el patrón que se muestra en la Figura 8. Los LEDs tienen un elemento en común (ánodo o cátodo).

8. Los LEDs tienen un elemento en común (ánodo o cátodo). Iluminando combinaciones específicas de LEDs

Iluminando combinaciones específicas de LEDs podemos crear los dígitos e incluso algunos caracteres alfanuméricos (letras y símbolos). Los LEDs de siete segmentos normalmente se usan en letreros numéricos.

La plaqueta de StampWorks tiene cuatro displays de siete segmentos de cátodo común. Los experimentos de esta sección le mostrarán como aprovechar al máximo estos componentes tan versátiles.

Manual StampWorks Versión 1.1 • Página 49

Experimento 8: Contador de un Dígito

Experimento 8: Contador de un Dígito Experimento 8: Contador de un Dígito El propósito de este

Experimento 8:

Contador de un Dígito

El propósito de este experimento es demostrar el uso del módulo de 7 segmentos, creando un contador decimal simple.

Nuevos Elementos/Comandos PBASIC:

Nib

Construcción del Circuito.

Nuevos Elementos/Comandos PBASIC: • Nib Construcción del Circuito. Manual StampWorks Versión 1.1 • Página 51

Manual StampWorks Versión 1.1 • Página 51

Experimento 8: Contador de un Dígito

'

=========================================================================

'

Archivo: 7SEGS.BS2

'

'

Muestra un dígito de 7 segmentos

'

=========================================================================

segs

VAR

OutL

' LEDs del 7 segmentos

cntr

VAR

Nib

' contador

'

 

-------------------------------------------------------------------------

'

Segmentos

.abcdefg

 

'

--------

DecDig

DATA %01111110

'

0

DATA %00110000

'

1

DATA %01101101

'

2

DATA %01111001

'

3

DATA %00110011

'

4

DATA %01011011

'

5

DATA %01011111

'

6

DATA %01110000

'

7

DATA %01111111

'

8

DATA %01111011

'

9

'

 

-------------------------------------------------------------------------

Inicializar:

DirL = %01111111

'

' configura como salidas los 7 seg.

-------------------------------------------------------------------------

Principal:

FOR cntr = 0 TO 9 READ (DecDig + cntr),segs PAUSE 1000 NEXT

' cuenta ' muestra el dígito ' durante un segundo

GOTO Principal

' repite todo

END

Página 52 • Manual StampWorks Versión 1.1

Experimento 8: Contador de un Dígito

Descripción del Programa

Este programa es muy similar al del control de luces: se lee un patrón de la EEPROM y se pone en la salida de los LEDs. En este programa, el envío de patrones específicos a los LEDs del 7 segmentos, crea los dígitos del cero al nueve.

Desafío

Actualice el programa para crear un contador hexadecimal de un dígito. Use el patrón que se muestra a continuación para generar los últimos dígitos hexadecimales.

muestra a continuación para generar los últimos dígitos hexadecimales. Manual StampWorks Versión 1.1 • Página 53

Manual StampWorks Versión 1.1 • Página 53

Experimento 9: Dado Digital

Experimento 9: Dado Digital Experimento 9: Dado Digital El propósito de este experime nto es crear

Experimento 9:

Dado Digital

El propósito de este experimento es crear un dado digital.

Construcción del Circuito.

Agregue este pulsador al circuito del experimento anterior.

Agregue este pulsador al circuito del experimento anterior. '

'

=========================================================================

'

Archivo: ROLLER.BS2

'

'

Dado Digital. Muestra un número del 1 al 6 cuando se presiona D7.

'

=========================================================================

RollBtn

CON

15

' botón en Pin 7

Segs

VAR

OutL

' LEDs del 7 segmentos

swData

VAR

Byte

' datos del comando BUTTON

dieVal

VAR

Nib

' nuevo valor del dado

spinPos

VAR

Nib

' posición de giro

doSpin

VAR

Nib

' control de actualización de giro

'

-------------------------------------------------------------------------

'

.abcdefg

'

--------

 

DecDig

DATA %01111110

'

0

DATA %00110000

'

1

DATA %01101101

'

2

DATA %01111001

'

3

Manual StampWorks Versión 1.1 • Página 55

Experimento 9: Dado Digital

DATA %00110011

'

4

DATA %01011011

'

5

DATA %01011111

'

6

DATA %01110000

'

7

DATA %01111111

'

8

DATA %01111011

'

9

Bug

DATA %01000000 DATA %00100000 DATA %00010000 DATA %00001000 DATA %00000100 DATA %00000010

' indicador de giro

'

-------------------------------------------------------------------------

Inicializar:

DirL = %01111111

'

' define salidas

-------------------------------------------------------------------------

Principal:

GOSUB GetDie PAUSE 5 ' ¿Está presionado el botón? BUTTON RollBtn,0,255,10,swData,1,ShowDie GOTO Principal

ShowDie:

READ (DecDig + dieVal),Segs PAUSE 3000 GOTO Principal END

'

' obtiene valor del dado

' muestra el valor ' durante tres segundos ' repite

-------------------------------------------------------------------------

GetDie:

dieVal = dieVal // 6 + 1 READ (Bug + spinPos),segs doSpin = doSpin + 1 // 7 IF doSpin > 0 THEN GetDieX spinPos = spinPos + 1 // 6 GetDieX:

RETURN

' limita entre 1 y 6 ' muestra patrón de giro ' ¿actualiza el indicador de giro? ' solo si doSpin = 0 ' actualiza el indicador de giro

Página 56 • Manual StampWorks Versión 1.1

Experimento 9: Dado Digital

Descripción del Programa

Este programa se basa en todo lo que hemos hecho hasta el momento y debería resultarle fácil de comprender. Hemos agregado un poco de creatividad en la programación para lograr que un programa simple se vea más interesante.

Hay que remarcar el uso de la variable doSpin. Para crear un valor aleatorio, la variable dieVal es actualizada rápidamente hasta que el botón es presionado. Esta velocidad de cambio, es demasiado rápida para usarla en el indicador de giro del dado. La variable doSpin entonces, actúa como un retardo, haciendo que el valor indicado por los LEDs sea actualizado cada séptimo paso por la rutina GetDie. Esto nos permite ver los números claramente y crea un efecto de display agradable.

Manual StampWorks Versión 1.1 • Página 57

Experimento 10: Reloj con Pantalla de LEDs

Experimento 10: Reloj con Pantalla de LEDs Experimento 10: Reloj con Pantalla de LEDs El propósito

Experimento 10:

Reloj con Pantalla de LEDs

El propósito de este experimento es crear una pantalla simple de reloj usando cuatro módulos LED de 7 segmentos.

Nuevos Elementos/Comandos PBASIC:

OutA,OutB,OutC,OutD

DirA,DirB,DirC,DirD

In0 - In15

DIG

Construcción del Circuito

DirA,DirB,DirC,DirD • In0 - In15 • DIG Construcción del Circuito Manual StampWorks Versión 1.1 • Página

Manual StampWorks Versión 1.1 • Página 59

Experimento 10: Reloj con Pantalla de LEDs

'

=========================================================================

'

Archivo: CLOCK.BS2

'

'

Simula un reloj digital usando cuatro displays 7-segmentos

'

=========================================================================

segs

VAR

OutL

' segmentos

digSel

VAR

OutC

' selector de dígito

tic

VAR

In15

' generador de pulsos de 1 Hz

DPoint

CON

%10000000

' bit de punto decimal

secs

VAR