Proyecto con Microprocesadores 1






Desarrollo del Sistema


1. Desarrollo Hardware

1.1. Módulo de Control Remoto

Este módulo estará implementado con un microcontrolador 68HC11, utilizando para ello el kit de evaluación 68HC11 Evaluation Board. Tanto el teclado como la unidad de transmisión de radio frecuencia estarán conectados al los puertos diponibles en el kit.

Esquemático de la conexión eléctrica:

La comunicación entre el control y el robot poseerán las siguientes características:

Medio de Transmisión : Aire.

Transmisor y Receptor: Radio frecuencia en la banda UHF a 418 MHZ, hasta 4800 baudios, compatible TTL, con modulación directa (ASK), el 1 lógico equivale a la presencia de la portadora y el 0 lógico equivale a la ausencia de la portadora.

Codificación: 1 bit de inicio 8 bit de datos y 1 de parada.

Velocidad de Comunicación: 2604 baudios. Se selecciona esta velocidad debido a la limitación impuesta por los módulos transmisor y receptor de 4800 baudios; además esta velocidad es posible configurarla con exactitud en los microcontroladores utilizados para ambos módulos.

Comados transmitidos del control al robot: Los comandos serán específicamente caracteres ASCII.

A: Avance

I: Giro a la izquierda

D: Giro a la derecha

P: Parada

T: Trípode

M: Marcha

O: Oruga

1.2. Módulo Controlado (Robot Stiquito)

El módulo controlado poseerá un microcontrolador AT89C2051, el cual dispondrá de la interfaz de potencia, la interfaz de radio frecuencia y el sensor de contacto, necesarios para la recibir los comandos y ejecutarlos, y detectar obstáculos.

Esquemático de la conexión eléctrica:

2. Desarrollo Software

2.1. Módulo de Control Remoto

Los agoritmos de las rutinas a ser implementadas en el módulo de control remoto se describen a continuación:

Rutina: Control

 

Esta es la subrutina principal.

Variables:

BANDERA: Si bandera vale 1 hay un comando a transmitir y 0 en otro caso.

VECES: Si vale 0 significa que en ese barrido no se detectó  alguna  tecla apretada, si esta variable tiene  otro valor significa que alguna tecla está siendo presionada.

TECLA: Contiene el valor numérico de la tecla apretada es decir el valor del comando.

ASCII: Contiene el valor ASCII de la tecla apretada.

 

INICIO

INCIALIZAR LAS VARIABLES

HABILITAR INTERRUPCIONES

INICIALIZAR EL PUNTERO

LLAMAR A SUBRUTINA INICIAL

MIENTRAS

            SI BANDERA=1(si es verdadero significa que hay un comando a transmitir)

            LIMPIAR BANDERA

            LLAMAR A SUBRUTINA TRANSMITIR

            FIN SI

FIN MIENTRAS

 

*************************************************************************

 

Subrutina: Teclado

 

Realiza el barrido de teclado. Esta es la parte de la rutina que permite configurar los puertos y la interrupción periódica.

Variables:

FILA: Indica la fila actual.

 

INICIO

ESTABLECER EL TEMPORIZADOR DE LA INTERRUPCIÓN PERIÓDICA PARA QUE NO INTERRUMPA NUEVAMENTE

SI FILA ES IGUAL A CERO ENTONCES

            ESCRIBIR EN LA PRIMERA FILA A TRAVÉS DEL PUERTO DE SALIDA

            LLAMAR A SUBRUTINA COLUMNAS

            SI NINGUNA TECLA ES PRESIONADA ENTONCES

                        INCREMENTAR PARA IR A LA SIGUIENTE FILA

            FINSI

SINO 

            SI FILA ES IGUAL A UNO ENTONCES

                        ESCRIBIR EN LA SEGUNDA FILA A TRAVÉS DEL PUERTO DE SALIDA

                        LLAMAR A SUBRUTINA COLUMNAS

                        SI NINGUNA TECLA ES PRESIONADA ENTONCES  

                                    INCREMENTAR PARA IR A LA SIGUIENTE FILA

                        FINSI

            SINO 

                        SI FILA ES IGUAL A DOS ENTONCES

                                    ESCRIBIR EN LA TERCERA FILA A TRAVÉS DEL PUERTO DE SALIDA

                                    LLAMAR A SUBRUTINA COLUMNAS

                                    SI NINGUNA TECLA ES PRESIONADA ENTONCES

                                                INCREMENTAR PARA IR A LA SIGUIENTE FILA

                                    FINSI

                        SINO 

                                    ESCRIBIR EN LA CUARTA FILA A TRAVÉS DEL PUERTO DE SALIDA

                                    LLAMAR A SUBRUTINA COLUMNAS

                                    SI NINGUNA TECLA ES PRESIONADA ENTONCES

                                                LIMPIAR PARA LA IR A LA PRIMERA FILA

                                    FINSI

                        FINSI

            FINSI

FINSI

 

FIN

 

*************************************************************************

 

Subrutina: Columnas

 

Forma parte del módulo barrido de teclado.

Variables:

COLUMNA: Indica la columna actual.

 

INICIO

SI COLUMNA ES IGUAL A CERO ENTONCES

            LEER DE LA PRIMERA COLUMNA A TRAVÉS DEL PUERTO DE ENTRADA

            SI TECLA ES APRETADA ENTONCES

            LLAMAR A SUBRUTINA FILTRADO

            SINO

            ESTABLECER QUE NINGUNA TECLA HA SIDO APRETADA

            INCREMENTAR PARA IR A LA SIGUIENTE COLUMNA

            FINSI

SINO 

            SI COLUMNA ES IGUAL A UNO ENTONCES

                        LEER DE LA SEGUNDA COLUMNA A TRAVÉS DEL PUERTO DE ENTRADA

                        SI TECLA ES APRETADA ENTONCES

                        LLAMAR A SUBRUTINA FILTRADO

                        SINO

                        ESTABLECER QUE NINGUNA TECLA HA SIDO APRETADA

                        INCREMENTAR PARA IR A LA SIGUIENTE COLUMNA

                        FINSI

            SINO 

                        LEER DE LA TERCERA COLUMNA A TRAVÉS DEL PUERTO DE ENTRADA

                        SI TECLA ES APRETADA ENTONCES

                        LLAMAR A SUBRUTINA FILTRADO

                        SINO

                        ESTABLECER QUE NINGUNA TECLA HA SIDO APRETADA

                        LIMPIAR PARA IR A LA PRIMERA COLUMNA

                        FINSI

            FINSI

FINSI

FIN

 

*************************************************************************

 

Subrutina: Filtrado

 

Forma parte del módulo barrido de teclado

Variables:

 

INICIO

SI VECES ES IGUAL A CERO ENTONCES

            INCREMENTAR VECES IR AL SIGUIENTE VALOR

SINO 

            SI VECES ES IGUAL A UNO ENTONCES

                        LLAMAR A SUBRUTINA GUARDAR

                        INCREMENTAR VECES PARA IR AL SIGUIENTE VALOR

            SINO 

                        SI VECES ES IGUAL A DOS ENTONCES

                                    INCREMENTAR VECES PARA IR AL SIGUIENTE VALOR

                        FINSI

            FINSI

FINSI

 

FIN

 

*************************************************************************

 

Subrutina: Mostrar

 

Forma parte del módulo barrido de teclado. Permite guardar el valor numérico de la tecla apretada, esto se realiza aplicando la fórmula: 3*FILA+COLUMNA+1, además  avisa al principal que fue apretada una tecla.

 

Codificación:

 

1------1            4------4          7-------7        *------10

2------2            5------5          8-------8        0------11

3------3            6------6          9-------9        #------12

 

INICIO

CARGAR FILA EN A

CARGAR FILA EN B

EN A CARGAR A+B

CARGAR COLUMNA EN B

EN A CARGAR A+B

EN A CARGAR A+1

GUARDAR EN MEMORIA (TECLA)

EN B CARGAR (TECLA)

INCREMENTAR BANDERA

LLAMAR A SUBRUTINA TRANSMITE

LLAMAR A SUBRUTINA MOSTRAR

FIN

 

*************************************************************************

 

Subrutina: Transmitir

 

Se encarga realizar la transmisión de la orden o comando (1 BYTE) de la siguiente manera: transmite la orden PARAR 'P', luego se produce un retardo de 2,8 seg. aproximadamente, esto es para que el robot siempre pueda procesar la orden de parada y posteriormente la nueva orden.

 

INICIO

TRANSMITE 'P' PARAR

ESPERA

TRANSMITE EL COMANDO

FIN

 

*************************************************************************

 

Subrutina: Digascii_1

 

Realiza la conversión a bytes para poder transmitir. Se realiza la siguiente conversión:

 

ASCII_1                     -----            $54                  T

ASCII_2                     -----            $4D                 M

ASCII_3                     -----            $4F                  O

ASCII_4                     -----            $34                  4

ASCII_5                     -----            $41                  A

ASCII_6                     -----            $36                  6

ASCII_7                     -----            $49                  I

ASCII_8                     -----            $38                  8

ASCII_9                     -----            $44                  D

ASCII_#                     -----            $2A                 *

ASCII_0                     -----            $50                  P

ASCII_*                     -----            $23                  #

 

*************************************************************************

 

Subrutina: Inicial

 

Permite la configuración del RTI para el teclado y la configuración del puerto serial.

 

INICIO

CONFIGURAR LA INTERRUPCIÓN PERIÓDICA PARA EJECUTAR LA RUTINA DE INTERUPCIÓN

CONFIGURAR EL PUERTO SERIAL

FIN

 

 

2.2. Módulo Controlado (Robot Stiquito)

En la gráfica se muestra la máquina de estados que controla el flujo del comportamiento del módulo controlado:

Algoritmo de control de movimiento de las patas de Stiquito se describe mediante el siguiente diagrama de flujo:

El tiempo de activación se implementará según el siguiente diagrama. El valor de la bandera será inicialmente igual a uno, por lo que se quedará en el loop hasta que el temporizador llegue al tiempo configurado, cuando esto suceda el valor de la bandera cambiará a cero en el manejador de interrupción del temporizador y de esta manera terminará el loop.

El tiempo de recuperación, es decir, el tiempo en el que las patas activadas vuelven a su posición original se implementará como lo indica el siguiente diagrama: