Robots Móviles
Software y documentación para robots móviles
|
En esta página se ofrecen unos programas y comentarios para conectar sistemas basados en el microcontrolador MC68HC11 y una calculadora HP-48 a través de los puertos serie. Principalmente se explican los conceptos básicos de funcionamiento de los programas que se necesitan en los dos sistemas aunque también se proporciona un programa para la HP-48 que muestra en el display lo que le llega por el puerto serie y envía los códigos asignados a cada tecla.
Se supone que ya se dispone de un sistema basado en MC68HC11, una calculadora HP-48 y los cables de conexión de cada uno de ellos a un puerto serie del ordenador. En el caso de la tarjeta CT6811 de Microbótica, ya se incluye un cable con conexiones telefónicas RJ11 y un conversor a DB9; para las HP-48 es bastante sencillo adquirir un cable con un terminador DB9.
Además, necesitaremos un cable que nos permita conectar ambos sistemas por los teminadores DB9 en el que se permuten las líneas de envío y recepción (lo que se conoce como modem nulo). Por tanto, se necesitarán dos terminadores DB9 macho y cable (con uno de tres hilos es suficiente).
Tenemos que preparar un cable que una las señales de masa de los dos conectores (pin número 5 en los DB9) e intercambie las de recepción y envío (pines 2 y 3) para que un dispositivo reciba lo que el otro está enviando y viceversa. Las conexiones quedan como se muestra en la siguiente figura.
En el lado del MC68HC11 vamos a utilizar el SCI que es el interfaz serie asíncrono que dispone este microcontrolador. Su programación es muy sencilla si se tiene algo de cuidado para no machacar los valores que se están enviando y recibiendo.
Vamos a utilizar sólamente tres registros internos del MC68HC11 para controlar la comunicación:
BAUD EQU $2B ; Registro de velocidad LDX #$1000 ; Apunta a los registros de control LDAA #$30 ; 9600 baudios * LDAA #$33 ; 1200 baudios STAA BAUD,X ; Configura la velocidad |
SCSR EQU $2E ; Registro de estado del SCI SCDR EQU $2F ; Registro de datos del SCI LDX #$1000 ; Apunta a los registros de control * ----------------------------------------------------------------------- * Envía el carácter del acumulador A por el puerto serie SCI * ----------------------------------------------------------------------- sendc BRCLR SCSR,X $80 sendc ; Espera a que termine un envío anterior STAA SCDR,X ; Envía el carácter RTS * ----------------------------------------------------------------------- * Lee un carácter que llega por el puerto serie SCI en el acumulador A * ----------------------------------------------------------------------- readc BRCLR SCSR,X $20 readc ; Espera a que se reciba un carácter LDAA SCDR,X ; Lee el carácter recibido RTS |
Estas dos rutinas envían y reciben, respectivamente, lo que esté en el acumulador A del MC68HC11. Su utilización es muy sencilla, sólo comentar que en la recepción, el flujo del programa queda detenido esperando a que se reciba un dato un por puerto serie. Si no se desea esta espera, puede utilizarse un esquema basado en interrupciones para detectar cuándo ha llegado un dato y recogerlo en ese momento.
El siguiente programa que puede obtenerse directamente desde aquí, espera la pulsación del bumper izquierdo (en el bit 0 del puerto E). Una vez que se pulsa, el programa envía la cadena HOLA por el puerto serie y se queda a la espera de los caracteres que le llegan, haciendo eco por el mismo puerto de lo que le va llegando. Se incluye el fichero wait.inc que incorpora rutinas para efectuar 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.
* ----------------------------------------------------------------------- * hp48c.asm 2001/04/16 * * Prueba de las comunicaciones serie asíncronas de HC11. * - Envía una secuencia de caracteres por el puerto serie. * - Hace eco de lo que le llega por el puerto serie y hace una * pausa entre cada eco. * ----------------------------------------------------------------------- PORTA EQU $00 ; Dirección del puerto A PORTE EQU $0A ; Dirección del puerto E BAUD EQU $2B ; Registro de velocidad SCSR EQU $2E ; Registro de estado del SCI SCDR EQU $2F ; Registro de datos del SCI ORG $0000 ; Programa en RAM interna LDX #$1000 ; Apunta a los registros de control LDAA #$30 ; 9600 baudios * LDAA #$33 ; 1200 baudios STAA BAUD,X ; Configura la velocidad BSET PORTA,X $40 ; Enciende el LED de la CT6811 pulsa BRCLR PORTE,X $01 pulsa ; Espera a que se pulse el bumper izq LDAA #'H ; Envía la cadena "HOLA" BSR sendc LDAA #'O' BSR sendc LDAA #'L' BSR sendc LDAA #'A' BSR sendc eco BSET PORTA,X $40 ; Enciende el LED de la CT6811 BSR readc ; Lee un carácter BSR sendc ; Lo vuelve a enviar BCLR PORTA,X $40 ; Apaga el LED BSR f_wait ; Hace un pausa fin BRA eco * ----------------------------------------------------------------------- * Envía el carácter del acumulador A por el puerto serie SCI * ----------------------------------------------------------------------- sendc BRCLR SCSR,X $80 sendc ; Espera a que termine un envío anterior STAA SCDR,X ; Envía el carácter RTS * ----------------------------------------------------------------------- * Lee un carácter que llega por el puerto serie SCI en el acumulador A * ----------------------------------------------------------------------- readc BRCLR SCSR,X $20 readc ; Espera a que se reciba un carácter LDAA SCDR,X ; Lee el carácter recibido RTS * ----------------------------------------------------------------------- * Incluye rutinas de pausa * ----------------------------------------------------------------------- include wait.inc END |
La programación en el lado de la HP-48 es también muy sencilla. Vamos a utilizar estas cinco llamadas relacionadas con la utilización del puerto serie:
Antes de comenzar con las pruebas es recomendable que nos aseguremos que están bien los parámetros de comunicación de la HP-48. Se podría realizar también por programa pero es bastante común determinar los parámetros mediante variables. En cualquier caso, verifíquese que la comunicación se establece a través del cable y no con infrarrojos (opción Port: Wire), en formato binario a 9600 baudios (o la velocidad que cada uno prefiera) sin paridad.
Se han utilizado ocho variables (entre datos y programas) en la HP-48. A continuación se describe para qué sirve cada una de ellas.
Puede ver el código directamente en esta página o descargar el directorio completo que incluye los fuentes para la HP-48 en modo texto o en binario. Para instalarlo en la HP-48 siga el procedimiento habitual.
* ----------------------------------------------------------------------- HC11 * ----------------------------------------------------------------------- « CLLCD OPENIO RCLF -40 CF DEPTH -> Z « IFERR -1 WHILE 1 REPEAT IF BUFLEN DROP THEN LEE 440 .1 BEEP SWAP 1 + "0" OVER ->STR + DUP SIZE DUP 1 - SWAP SUB "->" + ROT + OVER 7 MOD 1 + "" OVER 1 + DISP DISP ELSE IF KEY THEN ->CAR XMIT IF NOT THEN DROP END END END END THEN DEPTH Z - DROPN END » STOF CLOSEIO » * ----------------------------------------------------------------------- SELTI * ----------------------------------------------------------------------- « "TIPO DE DATOS" { {"Caracteres" 1 } {"Números 8 bits" 2} { "Strings" 3 } } TIPO CHOOSE IF 0 <> THEN CASE DUP 1 == THEN « LCHR » END DUP 2 == THEN « LNUM » END DUP 3 == THEN « LSTR » END END 'LEE' STO 'TIPO' STO END » * ----------------------------------------------------------------------- TIPO * ----------------------------------------------------------------------- 3 * ----------------------------------------------------------------------- LEE * ----------------------------------------------------------------------- « LSTR » * ----------------------------------------------------------------------- ->CAR * ----------------------------------------------------------------------- « IP 10 / IF DUP 4.6 <= THEN DUP IP 1 - 6 * SWAP FP 10 * 1 - + 65 + CHR ELSE DUP IP 5 - 5 * SWAP FP 10 * 1 - + "!YZ?#_789/_456*_123-_0. +" SWAP 1 + DUP SUB END » * ----------------------------------------------------------------------- LCHR * ----------------------------------------------------------------------- « 1 SRECV DROP » * ----------------------------------------------------------------------- LNUM * ----------------------------------------------------------------------- « 1 SRECV DROP NUM ->STR » * ----------------------------------------------------------------------- LSTR * ----------------------------------------------------------------------- « "" DO 1 SRECV DROP + UNTIL BUFLEN DROP 0 == END » |
En el web de Microbótica puede encontrarse documentación complementaria y ejemplos para comunicar tarjetas CT6811 y calculadoras HP.
Esto es software libre y como tal se distribuye bajo licencia pública GNU (GPL). El código fuente de la HP-48 no guarda los cometarios pero puede consultar las licencias en este enlace para las condiciones de copia. No hay NINGUNA garantía; ni siquiera de COMERCIABILIDAD o IDONEIDAD PARA UN FIN DETERMINADO.
© Javier de Lope Asiaín 2000-2002
|
||
Última modificación
17-Abr-2001 |
FastCounter by bCentral |