Tellymate Shield en Arduino

Introducción

TellyMate Shield es una tarjeta que sirve de interface entre la tarjeta Arduino y el televisor. Con ella podemos desplegar texto y gráficos en la televisión con códigos muy simples, además de interactuar directamente con la Arduino. Una de las ventajas que posee, es que no tiene necesidad de cables para hacer la conexión ya que esta viene con los pines listos para serinsertados sobre la Arduino utilizando el puerto serie (TX, RX), GND, 5v y al reset de la placadejando libres todos los pines para el uso que estimemos necesario.

En el siguiente tutorial enseñaremos el uso de tarjeta TellyMate en lo que se refiere ainstalación y a su código, de forma sencilla a través de dos ejemplos los cuales nos darán unapauta para continuar con proyectos más complejos. En el primero de los ejemplos imprimiremosun texto en la pantalla, de modo de aprender a usar los comandos principales para mostrar textos. El segundo tendrá funciones predefinidas para así tener más opciones en el uso de este sistema, además utilizaremos una entrada analógica de Arduino para capturar una señal y  mostraremoslos datos en la pantalla.

Materiales

  • TellyMate Shield
  • Arduino (Nosotros usaremos Duemilanove)
  • Televisor PAL o NTSC
  • Computador
  • Cable USB A-B
  • Cable  Rca/plug
  • Resistencia variable 10Komh (potenciómetro)

 Unir las tarjetas.

Unir Arduino con TellyMate de acuerdo a la siguiente figura.

image0011

Conexión al PC.

Con un cable USB A-B  conectaremos nuestra Arduino al computador.

image0021

Hay que verificar el puerto COM virtual que lo veremos en Propiedades deMi PC–>Hardware–>Administrador de dispositivos–> Puertos (COM & LPT) desplegamos las ramas  y al momento de conectar el cable nos indicara que puerto le corresponde,es importante saber el puerto al momento de cargar el código a la Arduino. Para mayorinformación sobre la instalación de Arduino revisa nuestro tutorial el cual detalla paso a paso la conexión entre la tarjeta y el PC www.mcielectronics.cl/tutorials.php?page=tut_arduino

Descarga del programa (IDE).

Arduino trabaja con un programa propio (IDE) que está hecho en java y lo podemos descargar gratuitamente del siguiente enlace http://arduino.cc/en/Main/Software en donde podremos elegirentre las versiones disponibles para distintos sistemas operativos. Luego de bajar el archivo sedescomprime y listo (no se necesita instalar el programa). En el escribiremos nuestro código, lo compilaremos y lo cargaremos a nuestra tarjeta.

Código.

Para el manejo de nuestra Arduino a través de programas que uno cargue, estos correr en dos partesimportantes, una es setup() que es como la base que se ejecuta una sola vez al inicio del programaen la cual se inicializa la comunicación serial, se asignan las entradas, las salidas, etc. El siguientees el loop() que es un ciclo infinito donde se encuentra el código en sí, que controlara activamentela placa Arduino pudiendo leer las entradas, ajustando las salidas, etc.

Otro punto es sobre nuestra TellyMate, ya que necesita de un código específico para que imprimaen pantalla y realice otras funciones. La función más importante en este ejemploes  Serial.println(“ ”) que muestra en la televisión el texto que está entre comillas. Para inicializarla salida se usaSerial.begin( ) que dentro del paréntesis va la velocidad de transferencia.

Ejecutamos el archivo Arduino.exe que se encuentra en la carpeta que descomprimimos y en elescribiremos el siguiente programa.

Ejemplo 1

Como primer ejemplo realizaremos un sencillo  código el cual imprimirá en pantalla un texto el cual se muestra en la siguiente figura.

image003

void setup()
{
Serial.begin( 56700 ); //Por defecto es esa velocidad
   Serial.println("Ingenieria MCI");//es lo que mostrara en pantalla  
//junto con un “guion bajo (_)” parpadeante llamado cursor.
}
void loop()
{
  // No realizara nada dentro del loop
}

Una vez que terminamos de escribir nuestro programa tenemos que verificar dos cosas.Primero Tools–>Board y que corresponda al modelo que nosotros estamos usando, en este casoelegimos la opción ARDUINO DUEMILANOVE ATMEGA328. Lo otro importante es indicarle cual es el puerto que le corresponde Tools–> Serial port y seleccionamos el puerto que buscamos en el paso 2. Luego presionamos el botón “play” (Verify) que está en la partesuperior izquierda de nuestra pantalla  para compilar y verificar si está bien nuestro programa. Si toda va bien podremos cargar el programa con el botón “Upload” que está ubicado en el sexto lugar de donde se encuentra el botón “play”(Verify). Tardará unos segundos y el programa quedará cargado en la tarjeta.

Ejemplo  2.

Este programa nos ayudara de dos maneras muy simples debido a que tendremos funcionespredeterminadas para una mejor presentación de los textos y el uso de una aplicación connuestra Arduino. Las funciones que se presentarán serán ocultar el cursor, limpiar la pantalla y posicionar el texto en la posición que estimemos conveniente para nuestros futuros  desarrollos. El otro beneficio del programa será leer una entrada analógica de nuestra Arduino que variaremoscon un potenciómetro para que  el valor sea mostrado en la pantalla.

La resistencia variable será conectada a los 5 volt, GND y a la entrada analógica 1 (el pin central de la resistencia debe ir en la entrada analógica y los dos pines laterales a los 5v y  GND).

image0041

Otro punto importante que se tiene que aclarar antes de continuar es sobre el uso de secuencias que entiende el dispositivo, en este programa  se hará uso de una de ellas para que tenganun mayor manejo de nuestra tarjeta TellyMate. Para este ejemplo se usará la secuencia <ESC> quetiene múltiples variantes de las cuales aplicaremos el limpiado de pantalla (<ESC> E),  pero que ennuestro programa se escribirá CHAR_ESC “E”  ya que la secuencia <ESC> será asignada a una variable que siempre tendrá ese valor llamada CHAR_ESC, como se muestra a continuacion.

#define CHAR_ESC “\x1B”

En el código ASCII 1B (hexadecimal) representa <ESC> así de esta forma queda guardada lasecuencia en CHAR_ESC.

En el siguiente link se muestran las secuencias que maneja el dispositivowww.batsocks.co.uk/products/Other/TellyMate_UserGuide_ControlSequences.htm

image0051

Estas son las funciones que nos ayudarán en las distintas tareas que realizaremos a futuro.

Función que desaparece el cursor de la pantalla. Recuerda que en el ejemplo número 1 en el que sí se muestra

void cursor_show( bool show ) { Serial.print( CHAR_ESC );
 Serial.print( show?’e’:’f’ ); }

Función que elimina todos los textos mostrados en la pantalla del televisor, dejando limpio para quelos futuros textos que serán mostrados a continuación no sean interferidos.

void screen_clear( void ) { Serial.print( CHAR_ESC “E”); }

Función que  posiciona el texto en el lugar que nosotros queramos dentro de la pantalla.

void tm_cursor_move( uint8_t row , uint8_t col ) { Serial.print( CHAR_ESC ) ; Serial.print( ‘Y’ ) ; Serial.print((unsigned char)(32 + row)) ; Serial.print((unsigned char)(32 + col)) ; }

Para leer la entrada analógica se usa analogRead() y en el paréntesis va el pin que deseamosleer (un numero de 0 al 5 ya que ellas son las entradas analógicas de nuestra Arduino) para ello se le asigna uno de los valor a una variable que en este caso llamaremos analogPin1. Una formafácil seria escribir analogRead(1)  para que lea la entrada 1 pero la idea es también ir variando lasentradas para un desarrollo más completo, por ello se asigna una variable antes mencionada en este ejemplo. El valor obtenido por la entrada numero uno será guardada en otra variable que en este caso la llamaremos value para que sea usado con distintos propósitos, en este casoserá para que se imprima en pantalla el valor.

  value = analogRead(analogPin1);

Para continuar se escribirá el código completo con algunos comentarios para que sea de mayor entendimiento.

#define CHAR_ESC “\x1B” // toma el valor 1B que en el
 //código ASCII,representa <ESC>.
 int analogPin1 = 1;// se selecciona la entrada analógica
 //numero 1.
 void cursor_show( bool show )// función que no muestras
 //el cursor
 {
 Serial.print( CHAR_ESC ) ;
 Serial.print( show?’e’:’f’ );
 } void screen_clear( void ) // función que limpia la pantalla
 {
 Serial.print( CHAR_ESC “E” );
 } void tm_cursor_move( uint8_t row , uint8_t col ) // función que
 posiciona lo que se muestra en pantalla
 { Serial.print( CHAR_ESC ) ;
 Serial.print( ‘Y’ ) ;
 Serial.print((unsigned char)(32 + row));
 Serial.print((unsigned char)(32 + col));
 } void setup()  // Lo primero que realiza
 {
 Serial.begin( 56700 ) ;// se abre el puerto
 cursor_show( false ) ;// desaparece el cursor
 tm_cursor_move( 12,12 ) ; // posicionara Ingeniería MCI en
 //el centro de la pantalla
 Serial.println(“Ingenieria MCI”) ;// sin tilde (véase nota final)
 tm_cursor_move( 20,20 ) ;
 Serial.println(“www.olimex.cl”) ;
 delay(3000); // retardo de 3000 milisegundos
 screen_clear()// limpia la pantalla para que muestre solamente 
 //el texto que viene a continuación.
 }
 void loop() // Se repite infinitas veces es el cuerpo principal
 del programa.
 {
 int value = 0;  // variable que se le asigna el valor cero
 //como inicio.
 value = analogRead(analogPin1); // lee la entrada analógica
 //numero 1.
 tm_cursor_move( 12,0 ) ; // posiciona en el centro  //la siguiente frase.
 Serial.println(“Valor referencia………………”);
 tm_cursor_move( 12,36 ) ;
 Serial.println(value); // imprime en pantalla el valor
 guardado en value
 delay(1000);
 }

Jumpers.

Existen tres tipos de formatos de televisores NTSC, PAL y SECAM los dos primeros son los usados en América (en Chile se usa NTSC). TellyMate tiene la ventaja de poder elegir entre unode los dos formatos de una forma simple, para ello en nuestra tarjeta TellyMate se usa un jumperen la posición J6 para seleccionar el formato PAL, para NTSC no se usa el jumper.Si el televisor que usaremos no tiene una resistencia interna de 78 Ohm (los portátiles normalmente) usaremos un jumper en el lugar J7 en el caso contrario no será necesario. Nosotros usamosun televisor de 5 pulgadas NTSC no necesita de un jumper en la posición 6 y si el jumper numero 7ya que no viene con la resistencia como se muestra en la siguiente figura.

image006

Conectar al televisor.

El cable Rca/plug que viene con TellyMate lo conectaremos al televisor en la conexión de video yveremos Ingeniería MCI en la parte superior de la televisión para el primer programa.

image007

Notas: Para imprimir en pantalla con el comando Serial.println(“”) no acepta tildes ya que los remplaza por otros caracteres en la pantalla.

Para mayor información visita  www.mcielectronics.cl y http://arduino.cl

Puedes descargar este tutorial en formato DOC: