Robots Móviles
Software y documentación para robots móviles
|
En el presente documento se describe cómo conectar un display de 7 segmentos (en realidad de 8 como ahora veremos) a un microcontrolador MC68HC11 a través del puerto B. También se ofrecen un conjunto de rutinas en ensamblador y macros para visualizar caracteres alfabéticos y numéricos.
Para el montaje vamos a utilizar un display fácilmente localizable en tiendas de electrónica como es el TDSL5160 pero cualquier otro de de características similares nos puede servir para nuestros propósitos.
Un display de este tipo está compuesto por siete u ocho leds de diferentes formas especiales y dispuestos sobre una base de manera que puedan representarse todos los símbolos numéricos y algunas letras. Los primeros siete segmentos son los encargados de formar el símbolo y con el octavo podemos encender y apagar el punto decimal.
Entonces al tratarse de simples leds necesitaremos además tantas resistencias de unos 330 ohmios como leds queramos utilizar, en nuestro caso ocho, un conector macho de 10 pines en dos filas y placa perforada sobre la que montaremos el resto de los componentes. Se puede variar el valor de las resistencias para conseguir un mayor o menor brillo en los leds. Además, utilizaremos también, un cable de 10 hilos con dos terminales hembra debidamente construido para conectar la nueva placa a la del microcontrolador.
Anteriormente se ha comentado que el display que se va a utilizar es de cátodo común, esto significa que todos los cátodos de los leds están conectados, alimentaremos cada led por separado por su correspondiente ánodo.
También existen displays de ánodo común, éstos son similares a los que vamos a utilizar en nuestro montaje con la salvedad de que las conexiones a alimentación y masa serían al revés.
La correspondencia de los pines y cada uno de los leds del display puede verse en la siguiente figura:
Los pines 3 y 8 corresponden con el cátodo de los leds (son los situados en el centro de las dos filas de pines), para el resto se sigue el criterio mostrado en la tabla. Por ejemplo, si alimentamos el display por el pin 2 (utlizando una de las resistencias comentadas) y unimos el pin 3 o el 8 a masa, se encenderá el segmento inferior (marcado como d en la figura). Si alimentamos por el pin 5 lo que encenderemos será el punto decimal indicado como en la figura DP (del inglés Dot Point).
En primer lugar soldaremos el conector a la placa (la utilizada se ha cortado a un tamaño de 16x13 agujeros) debidamente centrada, las resistencias y el display y realizaremos las conexiones entre el conector y el display. La masa del conector del puerto B se encuentra en el pin 6 (justo en la esquina diagonal del pin 1 marcado por la flecha) debe llevarse hasta uno de los cátodos del display (por ejemplo, el pin 8 que se encuentra más cerca). El resto de los pines controlables desde el micro se podrá realizar, por simple sencillez en el montaje, de la siguiente forma:
Pin del Puerto B |
Pin del Display |
Segmento |
0 ($01) |
9 |
f, superior izquierda |
1 ($02) |
10 |
g, central |
2 ($04) |
6 |
b, superior derecha |
3 ($08) |
7 |
a, superior |
4 ($10) |
5 |
DP, punto decimal |
5 ($20) |
4 |
c, inferior derecha |
6 ($40) |
2 |
d, inferior |
7 ($80) |
1 |
e, inferior izquierda |
Al tratarse de un display de cátodo común, cada vez que activemos, es decir, pongamos a '1' lógico, uno de los bits de salida del puerto B, encenderemos el led correspondiente en el display. Nótese que si hubiesemos utilizado un display de ánodo común, el conexionado y la forma de operación serían diferentes. En nuestro caso, la correspondencia entre pines del puerto B y el led del display queda como la de la figura.
La programación es tremendamente sencilla dado el puerto utilizado: todos sus bits son de salida y no hace falta ningún tipo de configuración previa especial, simplemente modificamos el valor correspondiente del led que queremos encender o apagar.
El siguiente programa enciende todos los segmentos exteriores del display uno tras otro y en orden, en sentido horario. Se utiliza la biblioteca wait.inc para realizar una pausa entre leds.
* ----------------------------------------------------------------------- * display2.asm * * Programa de prueba del display de 7 segmentos conectado al puerto B * ----------------------------------------------------------------------- * ----------------------------------------------------------------------- * Símbolos * ----------------------------------------------------------------------- PORTB EQU $04 ; Dirección del puerto B DISP_A EQU $08 ; Segmento superior DISP_B EQU $04 ; Segmento superior derecho DISP_C EQU $20 ; Segmento inferior derecho DISP_D EQU $40 ; Segmento inferior DISP_E EQU $80 ; Segmento inferior izquierdo DISP_F EQU $01 ; Segmento superior izquierdo DISP_G EQU $02 ; Segmento central DISP_DP EQU $10 ; Punto decimal * ----------------------------------------------------------------------- * Programa * ----------------------------------------------------------------------- ORG $0000 ; Programa en RAM interna inicio LDAA #DISP_A ; Enciende el segmento superior STAA PORTB,X BSR f_wait LDAA #DISP_B ; Enciende el segmento superior derecho STAA PORTB,X BSR f_wait LDAA #DISP_C ; Enciende el segmento inferior derecho STAA PORTB,X BSR f_wait LDAA #DISP_D ; Enciende el segmento inferior STAA PORTB,X BSR f_wait LDAA #DISP_E ; Enciende el segmento inferior izquierdo STAA PORTB,X BSR f_wait LDAA #DISP_F ; Enciende el segmento inferior derecho STAA PORTB,X BSR f_wait ; LDAA #DISP_G ; Enciende el segmento central ; STAA PORTB,X ; BSR f_wait ; LDAA #DISP_DP ; Enciende el punto decimal ; STAA PORTB,X ; BSR f_wait BRA inicio * ----------------------------------------------------------------------- * Biblioteca de pausa * ----------------------------------------------------------------------- include wait.inc ; Carga la biblioteca de pausa END |
El segundo programa muestra en orden todos los diígitos hexadecimales desde el 0 hasta la F. Para ello, hemos calculado el byte que debe enviarse por el puerto para encender simultáneamente los leds que nos interesen para conseguir el carácter deseado. Por ejemplo, para representar el carácter 4, siguiendo la tabla anterior, deben encenderse el segmento superior izquierdo (segmento f, $01), el segmento superior derecho (segmento b, $04), el segmento central (segmento g, $02) y el segmento inferior derecho (segmento c, $20), relizando un 'OR' entre todos los valores nos da como resultado $27, que es lo que enviaremos al display.
* ----------------------------------------------------------------------- * display3.asm * * Programa de prueba del display de 7 segmentos conectado al puerto B * con el que se visualizan los 16 caracteres hexadecimales * ----------------------------------------------------------------------- * ----------------------------------------------------------------------- * Símbolos * ----------------------------------------------------------------------- PORTB EQU $04 ; Dirección del puerto B DISP_0 EQU $ED ; Carácter 0 DISP_1 EQU $24 ; Carácter 1 DISP_2 EQU $CE ; Carácter 2 DISP_3 EQU $6E ; Carácter 3 DISP_4 EQU $27 ; Carácter 4 DISP_5 EQU $6B ; Carácter 5 DISP_6 EQU $EB ; Carácter 6 DISP_7 EQU $2C ; Carácter 7 DISP_8 EQU $EF ; Carácter 8 DISP_9 EQU $6F ; Carácter 9 DISP_DP EQU $10 ; Punto decimal DISP_A EQU $AF ; Carácter A DISP_B EQU $E3 ; Carácter b DISP_C EQU $C9 ; Carácter C DISP_D EQU $E6 ; Carácter d DISP_E EQU $CB ; Carácter E DISP_F EQU $8B ; Carácter F * ----------------------------------------------------------------------- * Programa * ----------------------------------------------------------------------- ORG $0000 ; Programa en RAM interna inicio LDAA #DISP_0 STAA PORTB,X BSR pausa LDAA #DISP_1 STAA PORTB,X BSR pausa LDAA #DISP_2 STAA PORTB,X BSR pausa LDAA #DISP_3 STAA PORTB,X BSR pausa LDAA #DISP_4 STAA PORTB,X BSR pausa LDAA #DISP_5 STAA PORTB,X BSR pausa LDAA #DISP_6 STAA PORTB,X BSR pausa LDAA #DISP_7 STAA PORTB,X BSR pausa LDAA #DISP_8 STAA PORTB,X BSR pausa LDAA #DISP_9 STAA PORTB,X BSR pausa LDAA #DISP_DP STAA PORTB,X BSR pausa alfa LDAA #DISP_A STAA PORTB,X BSR pausa LDAA #DISP_B STAA PORTB,X BSR pausa LDAA #DISP_C STAA PORTB,X BSR pausa LDAA #DISP_D STAA PORTB,X BSR pausa LDAA #DISP_E STAA PORTB,X BSR pausa LDAA #DISP_F STAA PORTB,X BSR pausa LDAA #DISP_DP STAA PORTB,X BSR pausa BRA inicio * ----------------------------------------------------------------------- * Subrutina para hacer una pausa doble * ----------------------------------------------------------------------- pausa BSR f_wait BSR f_wait RTS * ----------------------------------------------------------------------- * Biblioteca de pausa * ----------------------------------------------------------------------- include ..\wait.inc END |
También puede accederse al código fuente en ensamblador directamente desde estos enlaces: display2.asm, display3.asm y wait.inc. Los primeros son los programas de prueba y el tercero es un fichero include para pausas. Esta facilidad de ficheros include sólo puede utilizarse desde el ensamblador Ras, si se utiliza otro programa ensamblador siempre puede incluirse a mano desde el editor.
Como hemos visto, la conexión de un display de 7 segmentos a través de un puerto del MC68HC11 no presenta demasiada complejidad, puede decirse que es más un ejercicio de soldadura que de programación o diseño electrónico.
Lo que es en sí la visualización es excelente, jugando con los valores de las resistencias (en nuestro caso de 330 ohmios) y sin sobrepasar las recomendaciones del fabricante, podemos dar más brillo a los leds.
En cambio, presenta serias limitaciones en cuanto a la visualización de caracteres ya que con un único display no pueden representarse todos los caracteres alfanuméricos (por ejemplo, la M, la Z o la Ñ) y hay caracteres que tienen la misma representación (el 9 no se diferencia en nada de una g, el 5 de una S, etc.). Cuando se precise de un mayor conjunto de caracteres a visualizar e incluso de forma simultánea, por un pequeño incremento de dinero en el total del montaje podemos pasar a un LCD alfanumérico de 16 caracteres en dos filas.
En el web de Microbótica puede encontrarse información de los distintos modos de conexionado y programación de un LCD a un MC68HC11; en el de Fernando Remiro hay información adicional para su uso con PIC. Próximamente en este mismo web se ofrecerán otras alternativas de conexionado.
A modo de resumen, el uso de displays de 7 segmentos puede ser muy apropiado cuando queramos ver de lejos algún tipo de indicación de lo que está haciendo internamente nuestro robot autónomo en cada momento. Por ejemplo, si el sistema de control del robot tiene diferentes modos de funcionamiento, un display es una forma elegante de anunciar el modo en el que se encuentra, aunque hay otro tipo de soluciones más económicas que también pueden servir, como pueden ser uno o más leds (como ejemplo, véase la placa de depuración).
© Javier de Lope Asiaín 2000-2002
|
||
Última modificación
01-Nov-2001 |
FastCounter by bCentral |