Tellymate Enero 2010 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 ser insertados sobre la Arduino utilizando el puerto serie (TX, RX), GND, 5v y al reset de la placa dejando 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 a instalación y a su código, de forma sencilla a través de dos ejemplos los cuales nos darán una pauta para continuar con proyectos más complejos. En el primero de los ejemplos imprimiremos un 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 mostraremos los 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) Ingeniería MCI Ltda. – Luis Thayer Ojeda 0115 of 402, Providencia, Santiago, Chile http:www.olimex.cl Fono: + 56 2 3339579 Fax: +56 2 3350589 2 |T e l l y M a t e S h i e l d 1.- Unir las tarjetas. Unir Arduino con TellyMate de acuerdo a la siguiente figura. 2.- Conexión al PC. Con un cable USB A-B conectaremos nuestra Arduino al computador Hay que verificar el puerto COM virtual que lo veremos en Propiedades de Mi 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 mayor informació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.olimex.cl/present.php?page=tut_arduino Ingeniería MCI Ltda. – Luis Thayer Ojeda 0115 of 402, Providencia, Santiago, Chile Fono: + 56 2 3339579 Fax: +56 2 3350589 3 |T e l l y M a t e S h i e l d 3.- 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 elegir entre las versiones disponibles para distintos sistemas operativos. Luego de bajar el archivo se descomprime y listo (no se necesita instalar el programa). En el escribiremos nuestro código, lo compilaremos y lo cargaremos a nuestra tarjeta. 4.- Código. Para el manejo de nuestra Arduino a través de programas que uno cargue, estos correr en dos partes importantes, una es setup() que es como la base que se ejecuta una sola vez al inicio del programa en la cual se inicializa la comunicación serial, se asignan las entradas, las salidas, etc. El siguiente es el loop() que es un ciclo infinito donde se encuentra el código en sí, que controlara activamente la 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 imprima en pantalla y realice otras funciones. La función más importante en este ejemplo es Serial.println(“ ”) que muestra en la televisión el texto que está entre comillas. Para inicializar la salida se usa Serial.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 el escribiremos 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. Imagen del programa 1. Ingeniería MCI Ltda. – Luis Thayer Ojeda 0115 of 402, Providencia, Santiago, Chile Fono: + 56 2 3339579 Fax: +56 2 3350589 4 |T e l l y M a t e S h i e l d 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 caso elegimos 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 parte superior 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 funciones predeterminadas para una mejor presentación de los textos y el uso de una aplicación con nuestra 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 variaremos con 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). Imagen de la resistencia unida con la Arduino-TellyMate Ingeniería MCI Ltda. – Luis Thayer Ojeda 0115 of 402, Providencia, Santiago, Chile Fono: + 56 2 3339579 Fax: +56 2 3350589 5 |T e l l y M a t e S h i e l d 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 tengan un mayor manejo de nuestra tarjeta TellyMate. Para este ejemplo se usará la secuencia <ESC> que tiene múltiples variantes de las cuales aplicaremos el limpiado de pantalla (<ESC> E), pero que en nuestro 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 la secuencia en CHAR_ESC. En el siguiente link se muestran las secuencias que maneja el dispositivo www.batsocks.co.uk/products/Other/TellyMate_UserGuide_ControlSequences.htm Imagen del programa 2. 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 que los futuros textos que serán mostrados a continuación no sean interferidos. void screen_clear( void ) { Serial.print( CHAR_ESC "E"); } Ingeniería MCI Ltda. – Luis Thayer Ojeda 0115 of 402, Providencia, Santiago, Chile Fono: + 56 2 3339579 Fax: +56 2 3350589 6 |T e l l y M a t e S h i e l d 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 deseamos leer (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 forma fácil seria escribir analogRead(1) para que lea la entrada 1 pero la idea es también ir variando las entradas 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 caso será 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)) ; Ingeniería MCI Ltda. – Luis Thayer Ojeda 0115 of 402, Providencia, Santiago, Chile Fono: + 56 2 3339579 Fax: +56 2 3350589 7 |T e l l y M a t e S h i e l d 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); } 5.- 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 uno de los dos formatos de una forma simple, para ello en nuestra tarjeta TellyMate se usa un jumper en 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 usamos un televisor de 5 pulgadas NTSC no necesita de un jumper en la posición 6 y si el jumper numero 7 ya que no viene con la resistencia como se muestra en la siguiente figura. Ingeniería MCI Ltda. – Luis Thayer Ojeda 0115 of 402, Providencia, Santiago, Chile Fono: + 56 2 3339579 Fax: +56 2 3350589 8 |T e l l y M a t e S h i e l d Imagen del jumper 7 para la resistencia de 78 Ohm.. 6.- Conectar al televisor. El cable Rca/plug que viene con TellyMate lo conectaremos al televisor en la conexión de video y veremos Ingeniería MCI en la parte superior de la televisión para el primer programa. Imagen de la conexión al televisor. Ingeniería MCI Ltda. – Luis Thayer Ojeda 0115 of 402, Providencia, Santiago, Chile Fono: + 56 2 3339579 Fax: +56 2 3350589 9 |T e l l y M a t e S h i e l d 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.olimex.cl y http://arduino.cl Ingeniería MCI Ltda. – Luis Thayer Ojeda 0115 of 402, Providencia, Santiago, Chile Fono: + 56 2 3339579 Fax: +56 2 3350589