end

Paso 3. Circuitos LED

Paso 3. Circuitos LED

     Última actualizacón: 25 mayo 2017 a las 11:09

Hasta ahora hemos utilizado la tarjeta Home Work y la pantalla del ordenador para enviar mensajes a través de los programas y realizar un control del tiempo.  Ha llegado el momento de estudiar el funcionamiento y la programación de diferentes dispositivos físicos conectándolos a las clavijas de entrada y salida (I/O Imput/Output, o Entrada/Salida) de forma que el microcontrolador establezca sus funciones.

Como primer paso sencillo, vamos a probar un circuito LED (diodo emisor de luz o Light-Emitting Diode), es decir, construiremos circuitos que emitan luz para poder “comprobar” el tipo de señales electrónicas que se usan, entre otras cosas, para controlar los motores del robot.  Este es uno de los tipos de LEDES que vamos a emplear:

Estos dispositivos LED, que podemos ver en la gran parte de los aparatos electrónicos que tenemos en nuestras casas son dispositivos diodos semiconductores de silicio y otros materiales, que disponen de dos patitas o terminales.  Cuando se les aplica una diferencia de tensión (o voltaje) entre ambos con la polaridad correcta se encienden y emiten una luz que puede ser de diversos colores.  Un terminal se denomina ánodo (con polaridad positiva y que se corresponde con el más largo) y el otro, el cátodo (y polaridad negativa), es el más corto.

Para que se ilumine el LED hay que aplicar entre unos 2 a 4 V entre sus terminales (dependiendo de su color).  Dado que a través de la tarjeta Home Work obtenemos 5 V de tensión, deberemos colocar delante del LED una resistencia (resistor) que se encargue de absorber la tensión sobrante.

La resistencia es un dispositivo que no tiene polaridad, por lo que es indiferente la posición en la que se coloquen sus dos terminales.  Veamos a continuación una imagen de las resistencias que vamos a utilizar:

El efecto de absorción de tensión de las resistencias depende del valor que tengan, que se mide en ohmios (Ω).  Una buena iluminación LED puede conseguirse con una resistencia de 220 Ω, aunque también se puede conseguir que se encienda débilmente con una resistencia de 470 Ω.  Dado que las resistencias suelen ser muy pequeñas y cilíndricas no se puede grabar fácilmente su valor por lo que se utiliza un código de colores para indicarlo.  A continuación se muestra la tabla con el código de colores:

Además de los nueve primeros colores (que sirven para determinar el valor) se utilizan otros dos encargados de informar sobre la tolerancia o exactitud del valor indicado por los mismos.  Así, si la última franja tiene color ORO, significa que el valor real que tiene la resistencia no se desvía más de ±5% del que indican sus colores.  En el caso de ser plata, la tolerancia es de ±10% (si no hay ninguna de estas dos bandas, la tolerancia es de ±20%).

Para hacer la lectura correcta, deberemos colocar la resistencia de forma que la última franja, la de la derecha, sea la que indique la tolerancia: el color de la primera franja corresponde al primer número del valor; el color de la segunda franja al segundo; mientras que el de la tercera franja indica el número de ceros que hay que añadir a los dos anteriores para obtener el resultado en ohmios (esto es, un multiplicador):

Como un ±5% de 470 Ω son ±23,5 Ω, el valor real de la resistencia estará comprendido entre 470 ± 23,5 Ω, o sea, entre 493,5 y 446,5 Ω.

Encendido del LED

Una vez comprendidos los aspectos básicos, para encender un LED basta conectarle en serie una resistencia y aplicarle una tensión de 5 V, de forma que el polo positivo se conecte al ánodo, y el negativo al cátodo como podemos ver en el esquema representado más abajo:

En nuestro banco de pruebas, la “board of education”, el polo negativo de la alimentación se conecta a un terminal común que se denomina “tierra” y se representa con la tensión Vss.  El esquema quedaría de la siguiente forma:

Montaje de componentes

Como hemos dicho, la tarjeta Home Work posee una superficie destinada al montaje de los componentes de los circuitos (“board of education”) compuesta de numerosos orificios interconectados que permiten realizar la conexión entre los componentes sin usar soldadura ni estropearlos, únicamente aplicando presión.

La placa de pruebas tiene dos zonas blancas de 17 filas con cinco orificios en cada una.  Los orificios de cada fila están conectados entre sí de forma que si, por ejemplo, colocamos el cátodo del LED en uno de los orificios de la primera fila y en cualquiera de los cuatro restantes el terminal de una resistencia, ambos quedarán conectados.

Como vemos en la imagen, tanto en la parte superior como en el lado izquierdo de la placa de pruebas existen dos líneas negras de conectores (rotuladas como X2 la vertical, y X3 la horizontal).  La línea vertical tiene 16 orificios denominados P0 a P15 y están conectados a las 16 líneas de entrada o salida del microcontrolador.  A través de la programación del microcontrolador podremos establecer que cada una de estas líneas sea entrada o salida y, en caso de ser salida, podremos sacar un nivel alto o +5 V (o Vdd), o bien un nivel bajo o 0 V (o Vss).  Si la línea es de entrada, el microcontrolador leerá en ella la tensión exterior aplicada y reconocerá nivel alto o bajo.  El nivel alto puede estar comprendido entre 2 y 5 V, mientras que el bajo siempre será inferior a 1,4 V.

Haciendo parpadear un LED

El primer experimento consistirá en encender un LED durante tres segundos, luego volver a apagarlo otros 3 segundos y repetir estas dos acciones tres veces (es decir, el LED parpadeará tres veces cada tres segundos).

Elegiremos una de las clavijas de entrada/salida de la placa de pruebas (por ejemplo la P15), que actuará como salida generando por ella un nivel alto durante tres segundos y un nivel bajo durante otros tres segundos.  Para hacerlo será necesario conectar, como explicamos más arriba, una resistencia de absorción según el siguiente esquema:

En primer lugar, introducimos el ánodo (polo +) del LED en uno de los orificios de la placa de pruebas.  Por su parte, el cátodo se introduce en uno de los orificios de la fila de conectores X3 rotulada como Vss (es nuestra toma de tierra).  Ya tenemos conectado el LED.  Acto seguido tomamos una resistencia de 470 Ω e insertamos uno de sus extremos en un orificio junto al ánodo del LED (lo que hace que estén conectados entre sí), mientras que el otro extremo se introduce en el orificio P15 de la fila de conectores X2 (actuará como salida).  Las imágenes de abajo muestran la conexión:

Para encender el LED hay que sacar un nivel alto por la clavija P15 y, para apagarlo un nivel bajo.  Vamos a estudiar los comandos en lenguaje PBASIC que configuran cada clavija como E/S, y otras que sacan por ella un nivel alto o bien un nivel bajo.

El comando HIGH seguido por el número de la clavija que se quiera hará que salga por ella un nivel alto; por otro lado, el comando LOW sacará un nivel bajo (Vss).  Por ejemplo, HIGH 15 saca un nivel alto (Vdd) por la clavija P15, lo que hace que el LED conectado a ella se encienda; y LOW 15 saca un nivel bajo y hace que se apague.

Para mantener congelado el estado del microcontrolador un tiempo determinado se utiliza el comando PAUSE (que ya hemos estudiado) seguido del número de milisegundos que deseemos (por tanto, para controlar espacios de tiempo de 3 segundos emplearemos PAUSE 3000).

Veamos por tanto las líneas de código del programa de parpadeo del LED:

  1. ‘ Programa parpadeo LED.  ParpadeoLED.bs2
  2. ‘ {$STAMP BS2}
  3. ‘ {$PBASIC 2.5}
  4. DEBUG «Parpadeo tres veces durante tres segundos»
  5. HIGH 15‘Sale por P15 un nivel alto
  6. PAUSE 3000       ‘Pausa de tres segundos
  7. LOW 15               ‘Sale por P15 un nivel bajo
  8. PAUSE 3000
  9. HIGH 15               ‘Sale por P15 un nivel alto
  10. PAUSE 3000       ‘Pausa de tres segundos
  11. LOW 15               ‘Sale por P15 un nivel bajo
  12. PAUSE 3000
  13. HIGH 15               ‘Sale por P15 un nivel alto
  14. PAUSE 3000       ‘Pausa de tres segundos
  15. LOW 15               ‘Sale por P15 un nivel bajo
  16. PAUSE 3000
  17. END                     ‘Fin del programa

Como ya hemos hecho en otras ocasiones, escribimos el programa en el editor y lo ejecutamos para que quede grabado en la memoria del microcontrolador:

Como alguno de ustedes se habrá percatado, incluir la linea de comando DEBUG únicamente se ha hecho para comprobar que el programa se ha cargado adecuadamente.

Veamos una demostración en vídeo del funcionamiento:

Con estas instrucciones es muy sencillo cambiar el tiempo de parpadeo o las veces de repetición del mismo pero, ¿qué debemos hacer para que el LED parpadee de forma indefinida?, es una función que muy necesaria más adelante.  Existe una forma cómoda y fácil de repetir de forma ininterrumpida una secuencia de instrucciones evitando tener que reproducir hasta el infinito las líneas de código: con un comando PBASIC llamado GOTO.  Con él se pasa a ejecutar la instrucción que se desee, previamente identificada, y cuando el programa regrese a la línea de código que contiene el comando GOTO, todo vuelve a comenzar.  Es parecido a un bucle aunque esto lo explicaremos más detenidamente en siguientes entradas.  Veamos un ejemplo:

  1. ‘ Programa parpadeo infinito.  Parpadeoinfinito.bs2
  2. ‘ {$STAMP BS2}
  3. ‘ {$PBASIC 2.5}
  4.  DEBUG «Parpadeo infinito del LED»
  5.  INICIO:      HIGH 15             ‘Sale por P15 un nivel alto
  6.                       PAUSE 1000      ‘Pausa de un segundo
  7.                       LOW 15               ‘Sale por P15 un nivel bajo
  8.                       PAUSE 1000
  9. GOTO INICIO     ‘Salta a la instrucción con etiqueta INICIO

Al ejecutar este programa, el LED permanece parpadeando durante tres segundos de forma indefinida:

Publicado por José Luis Moreno en ROBÓTICA, 3 comentarios
Paso 2: Primeros pasos en la programación

Paso 2: Primeros pasos en la programación

     Última actualizacón: 24 mayo 2017 a las 14:04

En el paso anterior descargamos el software y conectamos la tarjeta al PC.  Repasemos los pasos del procedimiento de Ayuda que habíamos comenzado:

  1. Identificación de la tarjeta que estamos utilizando.
  2. Conexión de la tarjeta al ordenador.
  3. Realizar una prueba de la conexión.
  4. Resolver los problemas con la conexión si es necesario.
  5. Escribir nuestro primer programa en lenguaje PBASIC.
  6. Desconectar el hardware cuando hayamos finalizado.

Una vez realizadas las tareas 1 a 4 (y la 6 para la desconexión), vamos a centrarnos en la tarea 5 y escribir el primer programa en lenguaje de programación PBASIC, conectando para ello la tarjeta Home Work al PC como ya hicimos.

Este sencillo programa va a consistir en decirle a la tarjeta Home Work que transmita un mensaje al PC.  Para escribir el código utilizaremos el programa BASIC Stamp Editor (en adelante programa de edición) que hemos instalado en el paso anterior.

Es importante señalar que cada línea de código tiene una función determinada que iremos explicando a medida que avancemos y que contiene una serie de comandos.  Un comando o instrucción es una palabra que el usuario proporciona a un sistema informático y que describe una acción a realizar por el microcontrolador.

Estas son las líneas de código del primer programa:

  1. ‘ Primer programa de prácticas del robot Boe-Bot.  Primerprograma.bs2
  2. ‘ El microcontrolador envía un mensaje de texto al PC.
  3. ‘ {$STAMP BS2}
  4. ‘ {$PBASIC 2.5}
  5. DEBUG «Hola, este es un mensaje enviado desde el robot!»
  6. END

Los números al principio de cada línea NO DEBEN INCLUIRSE EN EL PROGRAMA, están ahí únicamente para facilitar esta explicación.

Vemos que las cuatro primeras líneas, llamadas comentarios, vienen precedidas de un apóstrofe ( ‘ ) ―el apóstrofe se obtiene pulsando la tecla de cierre de interrogación situada a continuación del número cero―.  Estos comentarios que se escriben al principio del código no son interpretados por el programa de edición ya que su función es servir de información a nosotros, seres humanos, que lo estamos leyendo.  En nuestro caso, las lineas 1 y 2 informan del nombre del programa y de qué es lo que hace exactamente.

Las dos siguientes líneas (la 3 y 4) también son comentarios pero se trata de mensajes especiales.  Son las llamadas “directivas del compilador” cuya misión es informar al programa de edición de ciertas condiciones.  Todos los programas tienen como mínimo dos de tales directivas, en nuestro caso:

‘ {$STAMP BS2}

‘ {$PBASIC 2.5}

La primera le indica al programa de edición en qué clase de microcontrolador se va a descargar el programa (el Basic Stamp 2); mientras que la segunda le informa que el lenguaje de programación que vamos a emplear es la versión 2.5 de PBASIC.

En nuestro programa de edición, la primera directiva de compilación la podemos introducir automáticamente pulsando el botón que se indica en la imagen.  En cualquier caso, es más recomendable hacerlo manualmente para acostumbrarnos a introducir los comandos.  Lo mismo sucede con la segunda:

Aunque hemos recomendado escribir estas directivas manualmente, hay que tener cuidado y no poner signos diferentes: si no se emplean las llaves { } y se colocan paréntesis por ejemplo, el programa no funcionará.  En cualquier caso, si las introducimos manualmente, deberemos cerciorarnos que el programa de edición las destaca en colores diferentes.  Al aparecer los comandos destacados en colores nos cercioramos de que el programa de edición los ha codificado correctamente al tiempo que facilita una lectura rápida de la línea de comandos en busca de posibles errores.

Bien, ahora terminamos escribiendo las dos últimas líneas de comandos:

DEBUG «Hola, este es un mensaje enviado desde el robot!»

END

El primer comando del programa es DEBUG, que sirve para mandar un mensaje al PC a través del puerto USB.  El mensaje que queramos que aparezca debe introducirse entrecomillado (las comillas son importantes, si falta alguna de ellas, el programa no funcionará).  El segundo es el comando END que indica la finalización del programa.  Una vez leído este comando, el microcontrolador permanece en modo de bajo consumo de energía en espera de que se pulse el botón de reinicio, o bien se introduzca un nuevo programa.  Es importante resaltar que cuando se introduce un nuevo programa, el anterior se borra automáticamente.

Bien, ya tenemos nuestro primer programa así que lo guardamos en nuestro disco duro (pulsando en la pestaña File y acto seguido en Save).  Ya estamos preparados para enviarlo a la tarjeta Home Work.

Una vez grabado, solo nos queda abrir la pestaña RUN y de nuevo pulsar RUN para activar el programa (o bien, de forma directa pulsando el botón con un triángulo azul situado en la barra de tareas).  Tras pulsar el botón aparecerá una ventana de transferencia y, justo después, deberá aparecer la ventana de debug (Debug Terminal) en la que se visualiza el mensaje enviado desde la tarjeta Home Work:

Una vez editado y ejecutado el programa, desde la tarjeta Home Work se habrá enviado el mensaje para su visualización en la pantalla del PC.  Esto asegura tanto el correcto funcionamiento de la tarjeta como la comunicación con el PC y su software.  Pueden comprobar que el mensaje proviene de la tarjeta Home Work pulsando varias veces el botón de reinicio de la misma (etiquetado con el número 10 como vimos en el paso 1) y aparecerá lo siguiente:

Comprobamos que el programa se reinicia cada vez y envía de nuevo el mensaje.

En conclusión, el primer programa ha tenido como objetivo enviar un mensaje a la pantalla del PC con la misión de comprobar el correcto funcionamiento de los sistemas.

Comando PAUSE

Una vez que hemos aprendido a escribir un sencillo programa, vamos a conocer nuevos comandos.

El primero de ellos es PAUSE.  Como habrán adivinado, el comando retarda la ejecución del programa un tiempo determinado en milisegundos (1000 milisegundos corresponden a 1 segundo).  Veamos cómo funciona:

Modifiquemos el programa anterior añadiendo la siguiente línea de comandos encima de la primera línea DEBUG:

PAUSE 1000

El programa quedará así:

Ejecutemos el programa y comprobaremos que el mensaje tarda en aparecer 1 segundo.

Formatos del comando DEBUG y caracteres de control

El comando DEBUG dispone de diversos formatos para enviar un texto con ciertas características a la ventana de debug.  DEC es un ejemplo que sirve para mostrar un valor en decimal.  Otro ejemplo de formato para un carácter de control es CR, que sirve para enviar un retorno de carro (escribirá el siguiente texto en una línea diferente).

Probemos el siguiente programa y lo guardamos:

  1. ‘ Segundo programa de prácticas del robot Boe-Bot.  Segundoprograma.bs2
  2. ‘ El microcontrolador realiza un cálculo y envía el resultado
  3. ‘ al PC.
  4. ‘ {$STAMP BS2}
  5. ‘ {$PBASIC 2.5}
  6. DEBUG «Hola, este es un mensaje enviado desde el robot!»
  7. DEBUG CR, “¿Cuánto es 7×11?”
  8. DEBUG CR, “El resultado es: ”
  9. DEBUG DEC 7 * 11
  10. END

Al ejecutarlo visualizaremos lo siguiente:

Si expresamos operaciones como 7 * 11 el microprocesador las calcula y genera el resultado.  El símbolo % detrás del comando DEBUG generará los resultados en binario (empleando únicamente 0 y 1).  Por otro lado, si utilizamos el comando DEBUG sin ningún símbolo se presentarán los caracteres en código ASCII.

En este ejemplo hemos cambiado el último comando DEBUG para que muestre la letra A (el número 65 en código ASCII).

Publicado por José Luis Moreno en ROBÓTICA, 1 comentario