viernes, 25 de abril de 2008

Guía de programación

GUÍA PARA PROGRAMAR BS2 (PBasic)
Para aprender a programar se necesita mucho esfuerzo, por lo que nos os preocupéis si no entendéis al principio, poco a poco lo iréis comprendiendo.
Para programar, además de escribir y descargar el programa en el robot, hay que configurar el hardware según lo que vayamos a utilizar. Es decir, cada vez que hagamos un programa, es posible que haya que modificar los cables, poner algunas resistencias… Para que lo entendáis mejor, primero explicaré como es la protoboard, placa con la que trabajaremos. También pondré todos los conceptos en recuadros para tenerlos todos agrupados.

Este será el índice:

1- Placa de educación y Protoboard
2- Cómo se programa (comandos, fases y cómo usar el programa)
3- Diferentes elementos utilizados (hardware), cómo se programan y cómo se colocan
4- Conceptos y definiciones

Placa de educación y Protoboard:

La placa de educación es la placa que vamos a utilizar como ``cerebro´´ de nuestro robot. Ella es la encargada de procesar toda la información y actuar en consecuencia según su programación. El programa se descarga en ella y todos los sensores y actuadores (motores, vibradores…) deberán estar conectados a ella. Es la parte más importante, por lo que se deberá tener cuidado con ella. La placa es la CPU, es un microcontrolador, ya que es donde se procesa la información pero no contacta con los seres humanos (no directamente, no tiene teclado…).

Diferentes placas (Basic Stamp, Arduino)

Placa Basic Stamp BS1

Para empezar habrá que distinguir las diferentes partes:

Conexión a la pila de 9 voltios: Ahí se conecta directamente una pila de 9 voltios, aunque también se pueden conectar 4 de 1.5 voltios, aunque el computo total sea inferior en voltaje (4x1.5 = 6 voltios). Se suelen utilizar 6 voltios al usar motores, para no dañarlos, por lo que hay que utilizar una sujeción para las pilas y conectar todas en esos dos puntos.

Conexión con el cable serial: En tu ordenador de sobremesa (en los portátiles no suele haber, por lo que es necesario comprar un adaptador) hay un puerto en la parte trasera del ordenador con unas pestañas llamado cable serial (y puerto serial). Para conectar la placa y el ordenador será imprescindible un cable serial, que se conectará entre ellos y se utilizará para descargar programas en la placa y para ver que entradas suceden en la placa (la información enviada por los sensores).

Botón de reset: Este botón se utiliza en caso de que sea necesario resetear la placa.

Puntos para conectar el resto del hardware, Protoboard (patitas): Aquí se aprecian muchos agujeros de pequeño tamaño. Aquí es donde se colocarán los cables, leds, motores, sensores, resistencias etc. Tiene varias partes: La parte central (color blanco), la parte lateral (negra) y la parte superior (negra también). En la parte superior se encuentran las tomas de tierra (Vss), salidas reguladas a +5 voltios (Vdd), y las entradas a -5 voltios (Vin). En la parte lateral se encuentran los pines, del 1 al 15, de modo que el pin 0 = P0, pin 1= P1… Los agujeros centrales blancos están interconectados por filas. Por lo que será lo mismo colocarlo en cualquiera de las cuatro casillas. Dependiendo del lo que vayamos a utilizar habrá que usarlo con diferentes conexiones y formas. Es posible que a veces tengamos que utilizar resistencias para no dañarlo (con los LEDs), capacitores para entregar los picos de potencia (motores)…

Todas las conexiones de hardware que hagamos pueden ser representadas con un esquema eléctrico como éste:





Si conocéis los símbolos eléctricos, podréis deducir todo el hardware fácilmente sin la necesidad de una foto.

Cómo se programa (comandos, fases y cómo usar el programa):

El programa que se utiliza es el Basic Stamp, con lenguaje PBasic, muy parecido al Basic tan conocido. Este programa se puede descargar de la página web de parallax (ver conocimientos previos para el enlace). Al iniciar este programa veréis esto:


Una pantalla en blanco en la cual hay que escribir el programa. Lo primero será ir a directive y señalar que placa vamos a usar (BS1, BS2…) y en que lenguaje de PBasic (2.0, 2.5…). En principio poned BS2. Una vez echo esto, el programa reconocerá en azul los comandos característicos.
Para programar se debe seguir un orden:

1. Variables
2. Entradas y salidas
3. Programa principal
4. Resto del programa

Lo mejor es seguir este orden para no perderse aunque los dos últimos pueden cambiar su posición (dependiendo del caso). Hay muchos comandos por lo que sólo explicaré algunos de ellos, si se quieren conocer todos, se puede ir dentro del programa a help y allí encontrarás toda la información sobre como usarlos y para que sirven (en inglés). Si seguís leyendo encontraréis la descripción de muchos comandos. Cuando los escribáis, es recomendable poner comentarios para que otros puedan comprenderlos. Para ello, se pondrá una coma alta (`) y así el programa pasará a la siguiente línea cuando llegue ahí.

Variables: Para declarar variables hay que hacer varias cosas, lo primero es darle un nombre a la variable (de hasta 32 caracteres), como por ejemplo ``num´´. Después se escribe VAR y después el tamaño de la variable: Las variables pueden ser declaradas en 4 tamaños diferentes: bit (1 bit), nib (nibble - 4 bits), byte (8 bits), & word (16 bits)
Se debería siempre declarar sus variables en el tamaño más pequeño que sea apropiado para los datos que contendrá. El Stamp2 tiene un límite de 208 bits para guardar variables. Estos están agrupados en 13 palabras (de 16 bits cada una). Estos bits pueden ser usados en cualquier combinación de tamaños anteriores. Por ejemplo, su programa puede tener 10 variables
word (160 bits), 10 variables nibble (40 bits), y 8 variables bit (8 bits), o cualquier otra combinación mientras que el valor total no exceda los 208 bits.

Entradas y salidas: Las patitas o pines pueden ser entradas o salidas, dependiendo de si la placa recibe información (entrada) o la envía (salida). Serían salidas los motores, LEDs… y entradas los sensores. Las salidas se declaran con el comando output seguido del número del pin (con un espacio). Ej: OUTPUT 4. La entrada se hace de la misma manera pero con el comando input.
Programa principal y secundarios: El programa principal contiene la parte del programa que siempre se realiza, y los secundarios son las subrutinas o partes que suceden en caso de que ocurra un suceso determinado. Para cada programa hay que crear una etiqueta, es decir, ponerle un nombre y : para identificar esa parte del programa. Una vez acabado, se puede poner el comando goto y la etiqueta a donde se quiera ir. Se puede poner el mismo nombre de la parte ya finalizada si es la parte principal o se quiere crear un bucle (no sale de esa parte) u otro nombre de otra parte del programa.

Con este programa veréis parte de lo mencionado, aunque habrá cosas que todavía no se han comentado:

' {$STAMP BS2}
x VAR Word `crea una variable de tamaño 16 bits
OUTPUT 0 `el led conectado
OUTPUT 1 `el motor izquierdo conectado
OUTPUT 2 `el motor derecho conectado
INPUT 3 `el bumper izquierdo conectado
INPUT 4 `el bumper derecho conectado
leds: `crea una etiqueta para el led
FOR x=1 TO 3 `crea un bucle que se repetirá 3 veces para encender los leds
LOW 0 `enciende el led
PAUSE 250 `espera 250 milisegundos
HIGH 0 `apaga el led
PAUSE 250 `espera 250 milisegundos
NEXT `vuelve al principio del bucle
revisar: `crea una etiqueta para mirar el estado de los bumpers
IF IN3=0 AND IN4=1 THEN giro1 `si el bumper izq. esta pulsado y el der. no entonces gira
IF IN3=1 AND IN4=0 THEN giro2 `si el izq. no está pulsado y el der. si entonces gira
IF IN3=0 AND IN4=0 THEN vuelta `si el izq. está pulsado y el der. también entonces da la vuelta
IF IN3=1 AND IN4=1 THEN avanzar `si el izq. y el der. no están pulsados entonces avanza
GOTO revisar
avanzar: `avanza el robot al no haber obstáculo alguno
FOR x=1 TO 200
PULSOUT 1,1000
PULSOUT 2,500
PAUSE 10
NEXT
GOTO revisar
giro1: `gira hacia la derecha al haber obstáculo en la izquierda
FOR x=1 TO 50
PULSOUT 1,
PULSOUT 2,
PAUSE 10
NEXT
GOTO revisar
giro2: `gira hacia la izquierda al haber obstáculo en la derecha
FOR x=1 TO 50
PULSOUT 1,
PULSOUT 2,
PAUSE 10
NEXT
GOTO revisar
vuelta: `retrocede para después girar hasta darse la vuelta
FOR x=1 TO
PULSOUT 1,500
PULSOUT 2,1000
PAUSE 10
NEXT
FOR x=1 TO 150
PULSOUT 1,500
PULSOUT 2,500
PAUSE 10
NEXT
GOTO revisar

Para descargar el programa deberemos conectar la placa al ordenador y después pinchar en Run, si el programa tiene fallos de sintaxis, te será indicado antes de ser descargado, por lo que tendrás que corregirlo.


Diferentes elementos utilizados (hardware), cómo se programan y cómo se colocan:

Una vez ya explicado esto, pasaré a describir todos los componentes que se pueden utilizar, la forma de utilizarlos y como colocarlos.
Los elementos que se pueden utilizar (y que describiré, ya que son demasiados para describir todos): LEDs, motores, algunos sensores (fotorresistor, bumper o pulsador…), algunos CI (circuitos integrados)… Estos son los más importantes, y a partir de ellos se pueden deducir como funcionarán otros sensores etc.

LED: Un LED es un diodo emisor de luz. Consume poca energía, pero tiene una polarización, es decir, una parte positiva y otra negativa, algo a tener en cuenta cuando se conecte a la placa, ya que podría no funcionar. Esto se diferencia gracias a que una pata es más larga que la otra. Para utilizar un LED es necesario colocar una resistencia de 470 ohms, ¼ watt.
Tendrá que estar conectado a una patita, tener una resistencia, el LED y por último a Vdd (+5 voltios). Hay que recordar que dentro de cada fila, todos están conectados entre sí. En cuanto a la programación, habrá que utilizar varias cosas: Pause, outnúmero (de la patita) o low y high.


Ej:

output 0 `se declara que P0 es una salida
titilar: `etiqueta
out0 = 0 ` P0 es igual a 0 (encendido)
pause 1000 `espera 1 segundo
out0 = 1 `P0 es igual a 1 (apagado)
pause 1000 `espera otro segundo
goto titilar `vuelve a la etiqueta titilar


La instrucción pause es obligatoria ya que deja tiempo al microcontrolador, y se indica en milisegundos (1000 milisegundos = 1 s). Esto también se puede hacer cambiando la instrucción de out0 = 0 o 1 por low (estado bajo, 0) o high (estado alto, 1). Con esto conseguimos poner en estado alto o bajo al led, es decir, encenderlo o apagarlo. Quedaría así:

titilar:
low 0 `enciende el led
pause 1000
high 0 `apaga el led
pause 1000
goto titilar `vuelve a titilar para que lo continúe haciendo todo el rato (bucle)

Bumper o pulsador: Estos dos se configuran de la misma manera. Como aquí se aprecia, deben tener una conexión a una patita en una de sus cuatro pestañas, en esa misma línea una resistencia hasta Vdd (+ 5 voltios) y de la pestaña que se encuentra debajo a Vss. Se pueden utilizar cables conectores si se necesita más longitud.
Para programar se utiliza como si fuera un sensor, es decir, se obtienen 1 y 0 como resultados.

output 0
output 1
Input 2 `declara P2 como entrada
Input 3
out0=1
out1=1
revisar:
if in2=0 then titular `si por la patita P2 entra un 0 entonces ir a la etiqueta titilar
if in3=0 then doble_titilar `si por la patita P3 entra un 0 entonces ir a doble_titilar
goto revisar
titilar:
low 0
pause 200
high 0
pause 200
goto revisar
doble_titilar:
low 0
low 1
pause 200
high 0
high 1
pause 200
goto revisar

Este programa lo que hace es mirar si están pulsados alguno de los dos bumpers, y si está uno presionado (el P2) entonces se encenderá un LED, si lo están los dos, se encenderán ambos LEDs. Aquí se aprecia muy bien la utilización de LEDs y sus comandos. Así como la utilización de pulsadores (0 = no pulsado, 1 = pulsado). IF…THEN es una condicional, si algo sucede se va a cierta etiqueta.

Servos: Un servo se distingue por que es posicionable y de corriente continua CC, es decir, en vez de girar continuamente podemos pararlo en un punto.
E servo tiene tres cables: negro, rojo y blanco. Cada uno de estos debe ir a un punto determinado. El negro a Vss, el rojo a Vin y el blanco a una patita. El dibujo es erróneo, por lo que habrá que tener cuidado con no equivocarse o podrá funcionar muy lentamente o no funcionar el servo. También se aprecia un capacitor (también tiene polaridad), que proporciona los picos de potencia para mover el motor, aunque no siempre es necesario. Los servos pueden modificarse para que tengan rotación completa.

x var word `crea una variable de tamaño una palabra
output 1
inicio:
for x = 1 to 100 `crea un bucle que se repite 100 veces
pulsout 1,500 `envía un pulso a la P1 de 500
pause 10
next ` vuelve a for
pause 500
for x = 1 to 100
pulsout 1,1000
pause 10
next
pause 500
goto inicio

Es necesario crear una variable debido a la instrucción For, ya que para usarlo es necesario su uso. For crea un bucle, que se repite cuantas veces queramos, ya que si solo enviamos un pulso no se movería prácticamente nada el servo. La instrucción next hace que vuelva a For hasta cumplirse todas las repeticiones establecidas (100 en este caso). El pause es también necesario. La instrucción pulsout sirve para enviar pulsos de salida al servo. El número que acompaña a pulsout (1 en este caso) es la patita a la que se le enviará (P1), la coma y después un número entre 500 y 1000. 500 sería girar en un sentido a la máxima velocidad, 1000 en el sentido contrario a la máxima velocidad y 750 sería no moverse. No es progresivo, es decir, no aumenta x velocidad cada y número. “Pulsout 1” (pulsar la salida 1) hace exactamente lo que su nombre indica. Crea un pulso único de salida en el pin de E/S P1. El número “500” es un valor que determina la duración del pulso. Ésta duración es medida en microsegundos. Pulsout tiene una duración de 2 microsegundos, por lo tanto un valor de 500, nos dará un pulso con una longitud de 500 veces 2 microsegundos, o 1000 microsegundos (que es igual a 1 milisegundo, el valor requerido por el servo). Un valor de 1000 creará un pulso con una longitud de 1000 x 2 microsegundos = 2 milisegundos, el ancho de pulso requerido por el servo para moverse al otro extremo. Con este programa conseguimos que el servo se mueva hacia un lado y luego hacia otro.
Fotorresistor: Es un sensor que detecta luz. También funciona con 1 y 0. Tiene que conectarse a Vss y a un punto de la parte central (blanca), en esa misma línea de la parte central, tiene que ir una resistencia a Vdd y otra a una patita.

Para programarlo se usan comandos ya conocidos, aunque aprenderemos unos nuevos.

n var bit
n=0 `se fija el valor de 0 a la variable n
este_lugar:
n=0
low 5
debug ? n `se muestra en la pantalla del ordenador la información enviada por el sensor _ y se imprime
pause 1000
high 5
n=1
debug ? n
pause 1000
goto este_lugar

En este programa hay una variable de un bit (0 o 1). También hay constantes (n=0), la cual fija el valor de n como 0. Debug lo que hace es mostrar la información recibida por el sensor en la pantalla del ordenador e ? significa imprimir, n indica que variable se debe mostrar. El comando debug es muy útil para comprobar si funciona un sensor.

x var word
n var bit
output 1
cerrar_la_puerta:
for x = 1 to 100
pulsout 1,500
pause 10
next
pause 10
ver_si_hay_alguien:
n=in7 `asigna a n el valor de la entrada P7
if n=1 then abrir_la_puerta
pause 100
goto ver_si_hay_alguien
abrir_la_puerta:
for x = 1 to 100
pulsout 1,1000
pause 10
next
pause 10
n=in7
if n =0 then cerrar_la_puerta
goto abrir_la_puerta

Con este programa repasamos el uso de motores, variables, constantes y condicionales.
Crea dos variables de diferentes tamaños, cierra la puerta mediante el uso de un servo, mira si hay alguien y si lo hay abre la puerta; después de abrirla comprueba que no haya nadie y la cierra, y así sucesivamente.

CI (circuito integrado): Un circuito integrado es un circuito electrónico miniaturizado con alguna función concreta. Veremos dos: Temporizador 555 y X9313 (potenciómetro digital).



Este CI tiene 8 pines. Es un multivibrador astable, circuito que sin “intervención externa”, (de otros circuitos o dispositivos), emitirá continuamente una secuencia de pulsos, que se alternaran entre altos y bajos. La velocidad a la que parpadea está controlada por una especie de resistencia, un potenciómetro. Es una resistencia de valor variable. Con el conseguimos que el Basic Stamp pueda hacer varias cosas a la vez, ya que en condiciones normales, no puede.


En cuanto a la programación tiene sus peculiaridades:

x var word
low 1
inicio:
high 1 for x = 1 to 500
debug ? x
next
pause 3000
low 1
pause 2000
goto inicio

Este programa serviría para hacer titilar al LED, ya que sólo es necesario poner a P1 en estado alto.
Ahora usaremos pulsin. Pulsin es la contraparte de entrada a pulsout. En lugar de generar un pulso de salida de una longitud predeterminada, pulsin se fija en un pin de entrada particular y mide la longitud de un pulso entrante, y almacena ese valor en una variable.

x var word
high 1
inicio:
pulsin 0,1,x
debug ? x
goto inicio


Este programa lo que hará será hacer titilar al led con el Temporizador 555 y medir después cuanto tarda en ponerse de estado bajo a alto y viceversa.
pulsin 0,1,x: Mire un pulso de entrada en P1. Espere que ese pulso vaya de bajo a alto. Tan pronto como lo haga, comienza a “cronometrarlo”, y continúa controlando el pin. Tan pronto como el pulso vuelve a bajar, detiene el cronómetro y regresa un valor en la variable llamada “x”. Este valor es en incrementos de dos microsegundos. Por lo que multiplicando por dos podemos saber cuanto tiempo ha tardado. Por ello, pulsin es un comando detector de entrada.

El X9313 también es un CI. Este CI es un potenciómetro digital, es decir, se controla su valor como resistencia de forma digital, no es necesario girar o pulsar un botón, sino que lo controlamos con el programa. Tiene 31 posiciones diferentes con diferentes resistencias. Con este CI podemos controlar al temporizador 555 de forma digital.

x var word
y var word
output 0
output 1
output 2
output 3
high 0
low 3
low 2
for x = 1 to 32
high 1
low 1
next
high 2
for y = 1 to 2
high 1
low 1
next
bucle:
goto bucle

Todos los comandos que aquí aparecen ya están vistos y explicados, pero es necesario explicar porque se utilizan. En principio este programa debería hacer titilar al led bastante rápido. Primero se crean dos variables del mismo tamaño y se declaran las entradas. Cada entrada tiene una función:

output 0 '555 reset, es decir, conectado al 555.
output 1 ‘incremento, es decir, donde se enviarán los pulsos
output 2 ‘arriba / abajo (up/down), para enviar una señal alta o baja (1 o 0)
output 3 'chip select, selecciona el X9313

En P0 está conectado el 555, y si se envía un pulso se enciende y comienza a trabajar y también se apaga (habría que ponerle en estado alto -high- para encenderlo). En P3 está conectado el X9313, y si se envía un pulso sería posible utilizarlo, habría que ponerlo en estado bajo (low) para encenderlo. P1 será donde enviemos los pulsos para modificar la resistencia de este CI. Y en P2 determinamos si los pulsos que enviaremos serán altos (para subir) o bajos (para bajar).

high 0
low 3
low 2

En esta parte, lo primero que se hace es encender el 555, después selecciona el X9313 y después hace que todos los pulsos que enviemos vayan hacia abajo (low), hasta llegar a 0 para empezar desde ahí.

for x = 1 to 32
high 1
low 1
next
high 2
for y = 1 to 2
high 1
low 1
next

Esta parte sirve para que el X9313 vaya a la primera posición (0 ohms) ya que es posible que se encuentre en otra. Después va a la posición 2 hacia arriba debido a que hemos puesto high 2, que puede ser cambiada si quieres modificar la velocidad de parpadeo de los leds conectados al 555.
Después de esto el programa se detiene y ya no hace más.

x var word
y var word
output 0 '555 reset
output 1 ‘incremento
output 2 ‘arriba/abajo (up/down)
output 3 'chip select
high 0 ‘enciende el titilador
inicio:
low 2 ‘hace que el cursor vaya hacia “abajo” (down)
low 3 ‘selecciona (o habilita) el X9313 para recibir datos
for x = 1 to 32 ‘fija el valor del cursor en “0” lentamente
high 1
low 1
pause 200
next
high 2 ‘hace que el cursor vaya hacia “arriba” (up)
for y = 1 to 32 ‘hace que el cursor aumente 32 posiciones discretas
high 1
low 1
debug ? y
pause 200 ‘pausa por un corto período de tiempo, para que sea visible.
Next
goto inicio ‘repite todo

Este programa lo que haría es hacer que el led titilara a diferentes velocidades, cada vez más lentamente, debido a que hemos puesto una pausa.

Envío de órdenes a través del ordenador en tiempo real:
Con esto conseguiréis que el robot os obedezca cuando hacéis una determinada acción en el ordenador, esta información será enviada por el cable serial que deberá permanecer conectado.
Con este programa lo entenderéis mejor:

' {$STAMP BS2}
' {$PBASIC 2.5}
comando VAR Nib
ava VAR Byte
OUTPUT 4
OUTPUT 11
main:
DEBUG CLS, "¿Qué quieres que haga? 8 = avance, 2 = retroceso, 4 = izquierda y 6 = derecha"
DEBUGIN DEC1 comando
IF (comando = 8) THEN av
IF (comando = 2) THEN re
IF (comando = 4) THEN izq
IF (comando = 6) THEN der
av:
FOR ava = 1 TO 50
PULSOUT 4, 1000
PULSOUT 11, 500
PAUSE 10
NEXT
GOTO main
re:
FOR ava = 1 TO 50
PULSOUT 11, 1000
PULSOUT 4, 500
PAUSE 10
NEXT
GOTO main
izq:
FOR ava = 1 TO 50
PULSOUT 4, 1000
PULSOUT 11, 1000
PAUSE 10
NEXT
GOTO main
der:
FOR ava = 1 TO 50
PULSOUT 4, 500
PULSOUT 11, 500
PAUSE 10
NEXT
GOTO main

Vemos tres cosas nuevas. Al ser un dato introducido por el teclado la condición se pone entre paréntesis: IF (comando = 8) THEN av. Debug CLS lo que hace es mostrar información en la pantalla del ordenador para que tu sepas que debes hacer. Debugin DEC1 comando lo que hace es enviar información al robot a través del ordenador, dec1 indica que va a ser decimal de una cifra en dato introducido y comando es la variable utilizada.

Con todos los comandos explicados y cómo usarlos, creo que seríais capaces de elaborar numerosos programas para diferentes finalidades.

Descripciones de comandos:

BIFURCACIÓN

IF...THEN
IF condición THEN direcciónEtiqueta
Evalúa la condición y, si es verdadera, se dirige al punto del programa marcado por direcciónEtiqueta.
• Condición es una expresión, tal como “x=7”, que puede ser evaluada como verdadera o falsa.
• DirecciónEtiqueta es una etiqueta que especifica donde ir en el caso que la condición sea verdadera.

BRANCH
BRANCH indicador, [dirección0, dirección1, …direcciónN]
Se dirige a la dirección especificada por el indicador (si está en el rango).
• Indicador es una variable / constante que especifica a cuál de las direcciones listadas dirigirse (0-N).
• Direcciones son las etiquetas que especifican a qué lugar dirigirse.

GOTO
GOTO direcciónEtiqueta
Se dirige al punto del programa especificado por direcciónEtiqueta.
• DirecciónEtiqueta es una etiqueta que especifica a qué lugar dirigirse.

GOSUB
GOSUB direcciónEtiqueta
Guarda la dirección de la instrucción siguiente a GOSUB, luego se dirige al punto del programa especificado por direcciónEtiqueta.
• DirecciónEtiqueta es una etiqueta que especifica a qué lugar dirigirse.

RETURN
Regresa de una subrutina. Regresa el programa a la dirección (instrucción) inmediatamente siguiente al
GOSUB más reciente.

REPETICIÓN

FOR...NEXT
FOR variable = inicial to final {paso} …NEXT
Crea un bucle repetitivo que ejecuta las líneas de programa entre FOR y NEXT, incrementando o disminuyendo el valor de la variable de acuerdo al paso, hasta que el valor de la variable iguala al valor final.
• Variable es una variable tipo nib, byte, o word usada como contador.
• Inicial es una variable o una constante que especifica el valor inicial de la variable.
• Final es una variable o una constante que especifica el valor final de la variable. Cuando el valor de la variable supera el valor final, end, el bucle FOR . . . NEXT detiene su ejecución y el programa continúa en la instrucción siguiente a NEXT.
• Paso es una variable o constante opcional que fija el valor en que aumenta o disminuye la variable en cada bucle de FOR / NEXT. Si inicial es mayor que final, PBASIC2 interpreta que paso es negativo, aunque
no se use un signo menos.

FUNCIONES NUMÉRICAS
LOOKUP
LOOKUP índice, [valor0, valor1,... valorN], variable
Busca el valor especificado por el índice y lo guarda en la variable. Si el índice excede el máximo valor de índice de la lista, la variable no es afectada. Un máximo de 256 valores puede ser incluido en la lista.
• Índice es una constante, expresión o variable tipo bit, nibble, byte o word.
• Valor0, valor1, etc. son constantes, expresiones o variables tipo bit, nibble, byte o word.
• Variable es una variable tipo bit, nibble, byte o word.

LOOKDOWN
LOOKDOWN valor, {comparador,} [valor0, valor1,... valorN], variable
Compara un valor con los de la lista en función del comparador y guarda la ubicación (índice), en la variable.
• Valor es una constante, expresión o variable tipo bit, nibble, byte o word.
• Comparador es =, <>, >, <, <=, =>. (= es la opción por defecto).
• Valor0, valor1, etc. son constantes, expresiones o variables tipo bit, nibble, byte o word.
• Variable es una variable tipo bit, nibble, byte o word.

RANDOM
RANDOM variable
Genera un número pseudo-aleatorio.
• Variable es una variable tipo byte o word en el rango de 0..65535.

DIGITAL I/O (ENTRADA/SALIDA DIGITAL)

INPUT
INPUT pin
Convierte al pin especificado en entrada (escribe un 0 en el bit correspondiente de DIRS).
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.

OUTPUT
OUTPUT pin
Convierte al pin especificado en salida (escribe un 1 en el bit correspondiente de DIRS).
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.

REVERSE
REVERSE pin
Si el pin es de salida, lo hace de entrada. Si el pin es de entrada, lo hace de salida.
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.

LOW
LOW pin
Convierte al pin en salida y la pone en estado bajo (escribe un 1 en el bit correspondiente de DIRS y un 0 en el
bit correspondiente de OUTS).
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.

HIGH
HIGH pin
Convierte al pin en salida y la pone en estado alto (escribe un 1 en el bit correspondiente de DIRS y OUTS).
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.

TOGGLE
TOGGLE pin
Invierte el estado de un pin.
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.

PULSIN
PULSIN pin, estado, variable
Mide un pulso de entrada (resolución de 2 μs).
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.
• estado es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..1.
• variable es una variable tipo bit, nibble, byte o word.
Las mediciones se toman en intervalos de 2uS y el tiempo máximo es de 0.13107 segundos.

PULSOUT
PULSOUT pin, período
Genera un pulso de salida (resolución de 2 μs).
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.
• período es una constante, expresión o variable tipo bit, nibble, byte o word, en el rango de 0..65535 que especifica la duración del pulso en unidades de 2uS.

BUTTON
BUTTON pin, presionado, retardo, velocidad, espaciotrabajo, estado, etiqueta
Elimina el rebote, realiza auto-repetir, y se dirige a la etiqueta si un botón es activado.
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.
• presionado es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..1.
• retardo es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..255.
• velocidad es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..255.
• espaciotrabajo es una variable tipo byte o word. Se inicia con 0 antes de ser usada.
• estado es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..1.
• etiqueta es la etiqueta a la que debe saltar el programa cuando se presiona el botón.

SHIFTIN
SHIFTIN dpin, cpin, modo, [resultado{\bits} { ,resultado{\bits}... }]
Convierte los bits recibidos de serie a paralelo y los almacena.
• dpin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15 que especifica el pin de datos.
• cpin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15 que especifica el pin del reloj (clock).
• modo es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..4 que especifica el modo de transmisión. 0 o MSBPRE = msb primero, pre-reloj, 1 o LSBPRE = lsb primero, prereloj,
2 o MSBPOST = msb primero, post-reloj, 3 o LSBPOST = lsb primero, post-reloj.
• resultado es una variable tipo bit, nibble, byte o word donde el dato recibido es guardado.
• bits es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 1..16 que especifica el número de bits a recibir en resultado. El valor predeterminado es 8.

SHIFTOUT
SHIFTOUT dpin, cpin, modo, [datos{\bits} {, datos{\bits}... }]
Envía los datos en forma serial.
• dpin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15 que especifica el pin de datos.
• cpin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15 que especifica el pin del reloj (clock).
• Modo es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..1 que especifica el modo de transmisión. 0 o LSBFIRST = lsb primero, 1 o MSBFIRST = msb primero.
• datos es una constante, expresión o variable tipo bit, nibble, byte o word que contiene el dato a ser enviado.
• bits es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 1..16 que especificael número de bits a enviar. El valor predeterminado es 8.

COUNT
COUNT pin, período, resultado
Cuenta el número de ciclos en un pin, por un período de milisegundos, y guarda ese número en resultado.
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.
• período es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..65535.
• resultado es una variable tipo bit, nibble, byte o word.

XOUT
XOUT mpin, zpin, [casa\clavecomando{\ciclos} {, casa\clavecomando{\ciclos}... }]
Genera códigos de control de línea X-10. Se usa con los módulos de interface TW523 o TW513.
• mpin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15 que especifica el pin de modulación.
• zpin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15 que especifica el pin de cruce por cero.
• casa es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15 que especifica el código de casa A..P.
• clavecomando es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15 que especifica las claves 1..16 o es uno de los comandos mostrados en BASIC Stamp Manual Version 1.9. Estos comandos incluyen encender y apagar luces.
• ciclos es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 2..65535 que especifica el número de veces que se transmite un comando. (Predeterminado es 2).

SERIAL I/O(E/S SERIAL)

SERIN
SERIN rpin{\fpin}, baudmodo, {petiqueta,} {tiempoespera, tetiqueta,} [datosentrada]
Recibe datos asincrónicamente (como en RS-232).
• rpin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..16.
• fpin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.
• baudmodo es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..65535.
• petiqueta es una etiqueta a la cual saltar en caso de error de paridad.
• tiempoespera es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..65535 que representa el número de milisegundos a esperar por un mensaje entrante.
• tetiqueta es una etiqueta a la cual saltar en caso de demora.
• Datosentrada es un conjunto de nombres de variables, expresiones o constantes, separados por comas que pueden tener los formatos disponibles para el comando DEBUG, excepto los formatos ASC y REP.
Además, los siguientes formatos están disponibles:
1. STR vector de bytes\L{\E}
2. SKIP L
3. WAITSTR vector de bytes{\L}.
4. WAIT (valor {,valor...}) Esperar por una secuencia de hasta seis bytes.

SEROUT
SEROUT tpin{\fpin}, baudmodo, {pausa,} {tiempoespera, tetiqueta,} [datossalida]
Envía datos asincrónicamente (como en RS-232).
• tpin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..16.
• fpin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.
• baudmodo es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..60657.
• pausa es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..65535 que especifica un tiempo (en milisegundos) de retardo entre los bytes transmitidos. Este valor sólo puede ser especificado si no se da un valor a fpin.
• tiempoespera es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..65535 representa el número de milisegundos a esperar para la señal de transmisión del mensaje. Este valor sólo puede ser especificado si se da un valor a fpin.
• tetiqueta es una etiqueta a la cual saltar si se sobrepasa el tiempoespera. Se especifica con fpin.
• datossalida es un conjunto de constantes, expresiones y nombres de variables separados por comas y opcionalmente precedido por modificadores disponibles en el comando DEBUG.

ANALOG I/O (E/S ANALÓGICA)

PWM
PWM pin, duty, ciclos
Puede ser usado para generar voltajes de salida analógicos (0-5V) usando un capacitor y un resistor. Genera una salida por modulación de ancho de pulso, y luego el pin vuelve a ser entrada.
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.
• duty es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..255.
• ciclos es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..255 que representa la cantidad de ciclos de 1ms a enviar a la salida.

RCTIME
RCTIME pin, estado, variable
Mide un tiempo de carga/descarga RC. Puede ser usado para medir potenciómetros.
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.
• estado es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..1.
• Variable es una variable tipo bit, nibble, byte o word.

SONIDO

FREQOUT
FREQOUT pin, milisegundos, freq1 {,freq2}
Genera una o dos ondas sinusoidales de las frecuencias especificadas (0 – 32.767 hz.).
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.
• milisegundos es una constante, expresión o variable tipo bit, nibble, byte o word.
• freq1 y freq2 son constantes, expresiones o variables tipo bit, nibble, byte o word en el rango de 0..32767 que representan las frecuencias correspondientes.

DTMFOUT
DTMFOUT pin, {tiempoencendido, tiempoapagado,}[tono{,tono...}]
Genera pulsos telefónicos DTMF.
• pin es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.
• tiempoencendido y tiempoapagado son constantes, expresiones o variables tipo bit, nibble, byte o Word en el rango de 0..65535.
• tono es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..15.

ACCESO A EEPROM

DATA
{puntero} DATA {@ubicación,} {WORD} {datos}{(tamaño)} {, { WORD} {datos}{(tamaño)}...}
Almacena datos en la EEPROM antes de descargar el programa PBASIC.
• puntero es un nombre opcional de una constante no definida o variable tipo bit, nibble, byte o word al que se le asigna el valor del primer lugar de memoria en el que los datos son almacenados.
• ubicación es una constante, expresión o variable tipo bit, nibble, byte o word opcional que designa el primer lugar de memoria en el que los datos son escritos.
• word es una llave opcional que hace que los datos sean almacenados en la memoria como dos bytes separados.
• datos es una constante o expresión opcional a ser escrita en la memoria.
• tamaño es una constante o expresión opcional que designa el número de bytes de datos definidos o no, para escribir o reservar en la memoria. Si datos no es especificado, entonces se reserva una cantidad de espacio indefinido, y si datos es especificado, se reserva la cantidad especificada por tamaño.

READ
READ ubicación, variable
Lee un byte de la EEPROM y lo almacena en variable.
• ubicación es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..2047.
• Variable es una variable tipo bit, nibble, byte o word.

WRITE
WRITE ubicación, datos
Escribe un byte en la EEPROM.
• ubicación es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..2047.
• datos es una constante, expresión o variable tipo bit, nibble, byte o word.

TIEMPO

PAUSE
PAUSE milisegundos
Hace una pausa en la ejecución por 0–65535 milisegundos.
• milisegundos es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..65535.

CONTROL DE ENERGÍA

NAP
NAP período
Descansa por un corto período. El consumo de energía es reducido a 50 uA (sin cargas conectadas).
• período es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..7 que representa intervalos de 18ms.

SLEEP
SLEEP segundos
Duerme por 1-65535 segundos. El consumo de energía es reducido a 50 uA.
• segundos es una constante, expresión o variable tipo bit, nibble, byte o word en el rango de 0..65535 que especifica el número de segundos a dormir.

END
END
• Duerme hasta que se interrumpa y reinicie la alimentación o se conecte a la PC. El consumo de energía es reducido a 50 uA.

DEPURACIÓN DEL PROGRAMA

DEBUG
DEBUG datosalida{,datosalida...}
Envía variables a ser vistas en la PC.
• datosalida es una cadena de texto, constante o variable tipo bit, nibble, byte o word. Si no se especifican modificadores DEBUG muestra caracteres en ascii sin espacios ni separación de oraciones a continuación del valor.

Conceptos y definiciones:

CPU:
Central Processing Unit (Unidad de procesamiento Central).Este término se refiere específicamente al circuito integrado (contenido dentro de la caja de la computadora), que hace los “verdaderos cómputos”. Sin embargo, a veces el término es usado (aunque incorrectamente), para incluir todo lo que está dentro
de la caja, incluyendo el disco rígido, la disquetera, el CD ROM, la fuente y la motherboard.

Microcontrolador:
Es un circuito integrado que contiene muchas de las mismas cualidades que una computadora de escritorio, tales como la CPU, la memoria, etc., pero no incluye ningún dispositivo de “comunicación con humanos”, como monitor, teclados o mouse. Los microcontroladores son diseñados para aplicación de control de máquinas, más que para interactuar con humanos.

PCB:
Printed Circuit Borrad (Plaqueta de circuito impreso). Los circuitos electrónicos complejos requieren muchas conexiones eléctricas entre componentes. Una PCB es simplemente una pieza rígida, normalmente de fibra de vidrio, que tiene muchos cables de cobre sobre su superficie (o algunas veces dentro). Estos cables llevan las señales
entre los componentes del circuito.

LED:
Light Emitting Diode. (Diodo Emisor de Luz). Es un tipo especial de diodo semiconductor, que cuando es conectado a un circuito electrónico con un resistor limitador de corriente, emite luz visible. Los LED usan muy poca energía y son ideales
para ser conectados a dispositivos tales como el Stamp.

Esquema:
Un diagrama eléctrico que muestra conexiones entre componentes que no necesariamente se ve, como el circuito físico. Usamos diagramas esquemáticos debido a que ellos ayudan a entender el flujo de la señal, a través de circuitos complejos.

Programa:
Una secuencia de instrucciones que son ejecutadas por una computadora o un microcontrolador, en una secuencia específica, para realizar una tarea. Los programas son escritos en diferentes tipos de lenguajes, tales como “C”, Fortran o BASIC.

Error:
Un error en su programa o hardware. Aplicar “debug” (depurar) en su programa es revisar y eliminar errores en su código. También puede haber errores de hardware tales como un LED puesto al revés, que causa que el sistema no funcione.

Descarga:
Después que un programa de un microcontrolador ha sido creado en la PC, es enviado
desde la PC por un cable y cargado en la memoria del microcontrolador. El
programa es ejecutado dentro del Stamp.

Remark:
(Comentario) en un programa, no es ejecutado como comando. Es ignorado por el microcontrolador. El propósito de un comentario es permitir a los humanos entender más fácilmente qué están haciendo los comandos en el programa.

Sensor:
Un sensor es un dispositivo de entrada usado para detectar o medir presencia física. Los ejemplos incluyen sensores que detectan luz, calor, temperatura, curvamiento y compuestos químicos (tales como monóxido de carbono).

Analógico:
Un valor variable continuo. En lugar de 1 ó 0 (+5 volt), los valores analógicos pueden estar en cualquier valor intermedio de ambos extremos. Debido a que los microcontroladores solamente entienden entradas si son valores digitales, nuestros sensores y los circuitos de intercomunicación, necesitan convertir valores analógicos (voltajes) a sus equivalentes digitales.

Binario:
El sistema de numeración usado por todos los microcontroladores (así como los sistemas de computadoras). Normalmente usamos el sistema decimal (de 0 a 9). Los sistemas electrónicos digitales sólo trabajan (en los sistemas más básicos) con dos dígitos: 0 y 1.

Variable:
Una variable es un símbolo que contiene un cierto valor. Ese valor puede ser cambiado bajo el control del programa y por lo tanto, el valor de las variables puede cambiar, pero su nombre no. Las variables pueden guardar ciertas piezas de información ahora, para ser usadas posteriormente en el programa.

Capacitor:
Un capacitor almacena energía eléctrica. Es usado en nuestro circuito como una pequeña batería para entregar los picos de corriente (medidos en Amperes), requeridos cuando el motor del servo empieza a girar. El capacitor ayuda a entregar esta energía de “arranque”, permitiéndole al circuito funcionar “suavemente”, minimizando los picos, que pueden hacer funcionar erráticamente al microcontrolador

Milisegundo:
Los sistemas de microcontroladores y computadoras, operan a velocidades muy altas. Como humanos, estamos acostumbrados a usar para mediciones de tiempo, el rango de segundos, o en el caso de competencias atléticas, décimas o centésimas de segundos. Un milisegundo es 1 / 1000 de segundo, es decir hay 1000 milisegundos en 1 segundo. Esto se ve como una pequeña cantidad de tiempo, pero es realmente bastante largo en el mundo de la microelectrónica de las computadoras. De hecho, su computadora personal (la que está usando para escribir éstos programas en PBASIC), está probablemente operando en millonésimas de segundos.

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

Inicialización:
La primera parte de muchos programas es llamada a veces la “rutina de inicialización”. Esto significa que esta porción del programa ajusta todos los parámetros que el programa usará.

Automatización:
En este experimento el término automatización significa que algo está siendo hecho sin “intervención humana”. En nuestro ejemplo (la puerta automática del supermercado), esto no es exactamente cierto. Aunque no presionamos físicamente ningún botón, estamos, con nuestra presencia, “presionando el botón detector de luz”. Esto sin embargo, parece ser completamente automático, debido a que no tenemos que pensar en otra cosa que caminar hacia la puerta. En un sentido estricto, automatización es la habilidad de los microcontroladores de hacer que las cosas sucedan sin interacción de nuestra parte.

Espacio de programa:
Los microcontroladores pueden tener varios tipos de memoria que son usadas para llevar a cabo su tarea. En el caso del BASIC Stamp 2, estamos limitados a 2048 bytes de almacenamiento de memoria (EEPROM). Esta cantidad de espacio es usada para almacenar datos y programas. Si usted escribe un programa que obtiene datos automáticamente en un período de tiempo (tal como una estación meteorológica remota), usted querrá hacer su programa tan pequeño y eficiente como sea posible para permitirle tanto lugar como pueda para almacenar datos.

EEPROM:
Esta es la sigla de ‘electrically erasable, programmable, read only memory”(memoria sólo de lectura, eléctricamente borrable y programable). Aunque es un desarrollo sofisticado en la “industria de la memoria”, es bastante simple de usar. Podemos grabar nuestros programas y datos en la EEPROM con comandos muy simples. Luego, cuando la alimentación es quitada, el programa y los datos son retenidos. ¿En qué se diferencia la EEPROM de los otros tipos de memoria de “estado sólido”? en que pueden ser muy fácilmente borradas (“automáticamente”) y rescritas, una y otra vez.

Debug (comando):
Una herramienta muy útil para “ver” qué está haciendo su programa dentro del Stamp. El comando Debug tiene una gran flexibilidad propia. Revise el apéndice para una descripción completa de cada una de las características disponibles.

Constante:
Un valor o parámetro que es fijado absolutamente a un valor específico. Hay otras formas de fijar las constantes a un valor predeterminado, (tales como usando el comando con), esto lo hace más fácil de cambiar en el futuro. En muchos casos, las variables usadas en un programa son dinámicas, debido a que pueden cambiar constantemente su valor durante la ejecución del programa.

Circuito Integrado:
Normalmente llamados “CI”, son circuitos electrónicos que han sido miniaturizados y combinados dentro de un pequeño encapsulado. Muchos tipos diferentes de CI han sido creados para un sinnúmero de aplicaciones. El temporizador ‘555’ que usaremos en este experimento es un miembro de la familia de CI “lineales”. El CPU Stamp es un “CI digital”.

8 pin dip:
Esto se refiere al estilo de encapsulado del CI. El ‘555’ tiene 8 pines, y éstos están dispuestos en dos líneas al costado del encapsulado (Dual Inline Package).

Multivibrador astable:
Es un nombre extravagante para un circuito que sin “intervención externa”, (de otros circuitos o dispositivos), emitirá continuamente una secuencia de pulsos. ¿Recuerda cuando creamos el chorro de pulsos para controlar el servo en los Experimentos 3 y 4? Lo mismo ocurre con éste circuito, excepto que el ‘555’ alternará entre alto y bajo, sin que nosotros tengamos que escribir un programa. Es una versión en hardware del comando de software “Pulsout”.

Potenciómetro:
Es simplemente un resistor que cambia su valor a medida que es rotado (o en algunos casos deslizado). Recuerde que los resistores tienen dos conectores. Un potenciómetro tiene tres conectores. El conector central es el cursor que se desliza sobre un elemento resistivo. Cuanto más acerca el cursor a uno de sus extremos, menos resistencia hay entre el cursor y ése extremo. Los potenciómetros vienen en muchos valores diferentes, tales como 5K, 10k, 100k, 1 M ohms, y más. También vienen en muchas configuraciones físicas diferentes para acomodarse a diferentes diseños de productos. Todos operan esencialmente de la misma forma; un movimiento mecánico en el cursor cambia el valor resistivo del dispositivo.

Reset:
Como se mencionó, es un pin de control en el CI temporizador ‘555’. Si conectamos este pin a P1 en el Stamp, y P1 es configurado como una “entrada”, entonces la circuitería del ‘555’ puede operar (aunque tal vez aleatoriamente). En éste caso, tenemos dos entradas (p1 en el Stamp y ‘reset’ en el ‘555’) conectadas juntas. Un pin configurado como entrada en el Stamp tenderá a “flotar” a nivel alto. Esta es una ”condición flotante” y no se garantiza que sea un verdadero valor “alto”. Cuando convertimos a P1 en salida y la fijamos en nivel “alto”, ésta también lleva a nivel alto al pin 4 del ‘555’y no nos da una condición “flotante”.

Microfaradio:
Una unidad de medida para la cantidad de “carga” que puede ser almacenada en un capacitor. Similar al valor de “ohm” para los resistores, el microfaradio (para los capacitores), está disponible en un amplio rango de valores. 1 microfaradio es igual a 1/1.000.000 de un Faradio. Analizaremos los capacitores en un experimento posterior, pero por ahora, es necesario comprender que a menor valor, menor capacidad de carga tiene el capacitor, lo que da como resultado una oscilación más rápida en el circuito del 555.

Decisión Económica:
A medida que usted comience a crear sus propios circuitos, sean o no productos comerciales, el costo del “hardware electrónico” puede subir rápidamente, principalmente si hace esto como un pasatiempo fuera de una clase normal. Se vuelve realmente importante decidir cuál es la mejor aproximación para resolver una tarea particular. Algunas veces, la mejor y la más barata, no es la misma opción. Como descubriremos muchas veces, usted será capaz de resolver una tarea de ambas formas. Puede que le lleve más tiempo realizarlo en software, pero (si no contamos su tiempo), será casi siempre la decisión más barata.

X9313:
Muchos números diferentes y combinaciones de letras son usados en la industria de los semiconductores, para referirse a componentes individuales. Estos son simplemente números de referencia para tipos específicos de dispositivos. Este CI en particular es fabricado por una compañía llamada “Xicor”.

Óhmetro:
Es un dispositivo que realmente mide el valor de un resistor en particular. Trabaja haciendo circular una corriente a través del resistor, y midiendo la caída de voltaje sobre él. En muchos casos, usted necesita apagar su circuito si va a usar un óhmetro. En el caso del X9313, sin embargo, usted puede dejar encendido el circuito, siempre y cuando solamente toque los tres terminales (que representan los terminales del potenciómetro) con las puntas. De hecho, para poder medir el valor del cursor en cualquier punto, la alimentación debe estar aplicada. Este es un caso especial y no es una circunstancia normal de medición.

Esta guía está elaborada a partir del manual: ¿Qué es un microcontrolador?

--------------------------------------------------------------------------------
Autor: Sergio Porres González http://roboticamaselectronica.blogspot.com/
Este documento ha sido realizado para orientar a posibles personas interesadas en la programación de un robot, sobre todo para aquellos iniciados. Si alguien quiere publicarlo, que contacte con su autor: sergioporresgonzalez@gmail.com
--------------------------------------------------------------------------------

11 comentarios:

Anónimo dijo...

Muy bueno el manual, me a servido para empezar con esto de la programación en basic.

Sergio Porres dijo...

Me alegra que te haya gustado, quiza haga otro con Arduino, ya veremos.

Ohmetro dijo...

Muy buen manual

me ha servido de mucho para un trabajo de electronica,
gracias!

Sergio Porres dijo...

Pues gracias. Es posible que este verano haga otra guía pero de Arduino.

Derek Iva dijo...

Muy buen tutorial pero probe el comando pulsout con mi servo mg995 y no funciona .Utilizo el pic16f628a y un clock de 4mhz.
hay unos que dicen que es 150 para centrar otros 750.cual mismo deberia ser el tiempo en pulsout?

Derek Iva dijo...

si alguien de uds. ha solucionado el problema con pulsout para servos de mg995 porfavor me podrian enviar un ejemplo.
correo:wilfolightfire18@hotmail.com

Sergio Porres dijo...

Para que el servo se pare normalmente se emplean 750, pero sino puedes hacer un programa de ejemplo e ir probando distintos valores hasta dar con el adecuado.

morpheobcn dijo...

Quiero iniciarme juntamente con mi hijo de 8 años en esto de la robótica. Tengo serias dudas entre LEGO NTX, Arduino, POB Tech, etc. Puedes darme una pequeña orientación?
Muchas gracias.

Sergio Porres dijo...

Pues si quieres iniciarte con tu hijo, te recomiendo encarecidamente los LEGO NXT. Son los más sencillos y a la vez muy polivalentes. Son algo caros (250 € aprox.), pero desde luego son magníficos para trabajar con niños, te lo digo desde la experiencia. Tiene la opción de programación gráfica (mediante dibujos) lo que lo hace más atractiva para los niños. Además el hardware es de tipo Lego Technic y eso lo hace más agradable para los más pequeños.

morpheobcn dijo...

Muchas gracias, por la información.

Evoo Andres dijo...

Me gusto mucho la informacion ... Aunque esta un poco dificl programar un robot a la primera.!!
Felicitaciones sigue asi (: