tabla de contenido - 148.206.53.84148.206.53.84/tesiuami/uami14541.pdf · que sean concentrados en...

66

Upload: vothuy

Post on 25-Sep-2018

218 views

Category:

Documents


0 download

TRANSCRIPT

2

3

Tabla de Contenido I. Introducción.........................................................................5 I.1 Planteamiento del proyecto...............................................5 I.2 Tipos de Robots ..............................................................5

I.2.1 Por generación ..........................................................6 I.2.2 Según su Arquitectura Generacional.............................6 I.2.3 Por Nivel de Inteligencia .............................................8 I.2.4 Por Nivel de Control ...................................................8 I.2.5 Por Lenguaje de Programación ....................................9

II. Elementos y Componentes ..................................................9 II.1 Motor-redutcores.............................................................9 II.2 Circuito L293 ................................................................ 11 II.3 Sensor Óptico CNY-70.................................................... 12 II.4 Modulo Transmisor de RF ............................................... 14 II.5 Modulo Receptor de RF................................................... 15 II.6 Microcontrolador ATmega8535 ........................................ 15

III. Diseño del Mini-Robot Automático ...................................... 17 III.1 Características Principales del Mini-Robot Automático...... 17 III.2 Diseño de la Pista ....................................................... 17 III.3 Construcción de las Partes electro-mecánicas................. 17 III.4 Distribución de los Sensores ........................................ 19 III.5 Sistema de Control ..................................................... 20 III.6 Diagrama de Conexión ................................................ 21 III.7 Configuración de los puertos de I/O del microcontrolador 22 III.8 Criterios, diseño y algoritmo ........................................ 23

IV. Diseño del Mini-Robot Manual ............................................ 27 IV.1 Características Principales del Mini-Robot Manual............ 27 IV.2 Protocolo de Transmisión RF ........................................ 28 IV.3 Protocolo de Recepción RF ........................................... 30 IV.4 Construcción de las Partes electro-mecánicas................. 30 IV.5 Etapa de Transmisión.................................................. 31 IV.6 Etapa de Recepción y Actuadores ................................. 32 IV.7 Diagramas de Conexión............................................... 33 IV.7.1 Etapa de Transmisión ............................................ 33 IV.7.2 Etapa de Recepción ............................................... 34

IV.8 Configuración de los Puertos para Etapa de Transmisión y Recepción.................................................................. 35

IV.9 Criterios, Diseño y Algoritmo para el Transmisor............. 36 IV.10 Criterios, Diseño y Algoritmo para el Receptor................ 40 IV.10.1 Subrutina Rot_Shift:.............................................. 49

V. Conclusiones ................................................................... 55 VI. Bibliografía ...................................................................... 56 VII. Apéndice A: Código para el Seguidor de Línea ..................... 57 VIII. Apéndice B: Código para la Transmisión .............................. 58 IX. Apéndice C: Código para la Recepción ................................ 61

4

5

I. Introducción

I.1 Planteamiento del proyecto El objetivo de este proyecto es el de aplicar algunos conocimientos adquiridos a lo largo de la carrera de Ingeniería en Electrónica para que sean concentrados en la generación de un mini-Robot móvil con doble propósito o dos tipos de operación, el primero es generar un Robot autónomo Seguidor de Línea y el segundo consiste en un Robot No Autónomo (Manual) controlado por medio de un mando a distancia que emite señales de Radio Frecuencia. Las especificaciones para el Robot Autónomo son:

• El móvil realizará un recorrido a través de líneas de color negro que se encuentran sobre un fondo blanco las cuales formarán una trayectoria cerrada.

• El mini-Robot será Autónomo controlado por un microcontrolador, que será el que tome las decisiones.

Las especificaciones para el Robot Manual son:

• El móvil no será Autónomo, esto es que necesitará de instrucciones “externas” para que pueda funcionar.

• Se utilizará un mando a distancia que emitirá señales del tipo RF utilizando un Protocolo de comunicación Serial, para que se pueda manipular por medio de botones.

• El protocolo será generado por medio de un microcontrolador. • El móvil contará con un receptor de señales RF para capturar lo

que es enviado por el mando a distancia. • En el Móvil habrá un Microcontrolador que decodificará la señal

RF capturada por el receptor. En ambas etapas el mini-Robot estará alimentado por dos fuentes independientes acopladas por un común o tierra, una de ellas alimentará la parte lógica del sistema y la otra alimentará los motores.

I.2 Tipos de Robots La potencia del software en el controlador determina la utilidad y flexibilidad del robot dentro de las limitantes del diseño mecánico y la capacidad de los sensores. Los robots han sido clasificados de acuerdo a su generación, a su nivel de inteligencia, a su nivel de control, y a su nivel de lenguaje de programación. Éstas clasificaciones reflejan la potencia del software en el controlador, en particular, la sofisticada interacción de los sensores. A continuación se describe brevemente estos criterios de clasificación.

6

I.2.1 Por generación La generación de un robot se determina por el orden histórico de desarrollos en la robótica. Cinco generaciones son normalmente asignadas a los robots industriales: 1ra Generación: El sistema de control está basado en las “paradas fijas” mecánicamente. Como ejemplo de esta primera etapa están los mecanismos de relojería que mueven las cajas musicales o los juguetes de cuerda. 2da Generación: El movimiento se controla a través de una secuencia numérica almacenada en disco o cinta magnética. Por regla general, este tipo de robots se utiliza en la industria automotriz y son de gran tamaño. 3ra Generación: Utilizan las computadoras para su control y tienen cierta percepción de su entorno a través del uso de sensores. Con esta generación se inicia la era de los robots inteligentes y aparecen los lenguajes de programación para escribir los programas de control. 4ta Generación: Se trata de robots altamente inteligentes con más y mejores extensiones sensoriales, para entender sus acciones y captar el mundo que los rodea. Incorporan conceptos “modélicos” de conducta. 5ta Generación: Actualmente en desarrollo. Esta nueva generación de robots basará su acción principalmente en modelos conductuales establecidos.

I.2.2 Según su Arquitectura Generacional Robots Play-back, los cuales regeneran una secuencia de instrucciones grabadas, como un robot utilizado en recubrimiento por spray o soldadura por arco. Estos robots comúnmente tienen un control de lazo abierto. Robots controlados por sensores, estos tienen un control en lazo cerrado de movimientos manipulados, y hacen decisiones basados en datos obtenidos por sensores. Robots controlados por visión, donde los robots pueden manipular un objeto al utilizar información desde un sistema de visión. Robots controlados adaptablemente, donde los robots pueden automáticamente reprogramar sus acciones sobre la base de los datos obtenidos por los sensores. Robots con Inteligencia Artificial, donde las robots utilizan las técnicas de inteligencia artificial para hacer sus propias decisiones y resolver problemas. Robots médicos, fundamentalmente, prótesis para disminuidos físicos que se adaptan al cuerpo y están dotados de potentes sistemas de mando. Con ellos se logra igualar al cuerpo con precisión los movimientos y funciones de los órganos o extremidades que suplen, o simplemente Robots que ayudan (figura 1) al Medico y al paciente.

7

Androides, robots que se parecen y actúan como seres humanos (figura 2). Los robots de hoy en día vienen en todas las formas y tamaños, pero a excepción de los que aparecen en las ferias y espectáculos, no se parecen a las personas y por tanto no son androides. Actualmente, los androides reales sólo existen en la imaginación y en las películas de ficción. Robots móviles, provistos de patas, ruedas (figura 3) u orugas que los capacitan para desplazarse de acuerdo a su programación. Elaboran la información que reciben a través de sus propios sistemas de sensores y se emplean en determinado tipo de instalaciones industriales, sobre todo para el transporte de mercancías en cadenas de producción y almacenes. También se utilizan robots de este tipo para la investigación en lugares de difícil acceso o muy distantes, como es el caso de la exploración espacial y las investigaciones o rescates submarinos.

Fig. 1.-Muu Socia 3.0

Fig. 2.-ASIMO de Honda

Fig. 3.-Robot Móvil

8

I.2.3 Por Nivel de Inteligencia La Asociación de Robots Japonesa (JIRA) ha clasificado a los robots dentro de seis clases sobre la base de su nivel de inteligencia Dispositivos de manejo manual, controlados por una persona (figura 4). Robots de secuencia variable, donde un operador puede modificar la secuencia fácilmente. Robots regeneradores, donde el operador humano conduce el robot a través de la tarea. Robots de control numérico, donde el operador alimenta la programación del movimiento, hasta que se enseñe manualmente la tarea. Robots inteligentes, los cuales pueden entender e interactuar (figura 5) con cambios en el medio ambiente.

I.2.4 Por Nivel de Control Los programas en el controlador del robot pueden ser agrupados de acuerdo al nivel de control que realizan o su predecibilidad en las formas para realizar su función. Nivel de Inteligencia Artificial, donde el programa aceptará un comando como "levantar el producto" y descomponerlo dentro de una

Fig. 5.-Robot inteligente que puede jugar gato

Fig. 4.-Robot controlado Manualmente

9

secuencia de comandos de bajo nivel basados en un modelo estratégico de las tareas. Nivel de modo de control, donde los movimientos del sistema son modelados, para lo que se incluye la interacción dinámica entre los diferentes mecanismos, trayectorias planeadas, y los puntos de asignación seleccionados. Niveles de servosistemas, donde los actuadores controlan los parámetros de los mecanismos con el uso de una retroalimentación interna de los datos obtenidos por los sensores, y la ruta es modificada sobre la base de los datos que se obtienen de sensores externos. Todas las detecciones de fallas y mecanismos de corrección son implementados en este nivel.

I.2.5 Por Lenguaje de Programación En la clasificación final se considerara el nivel del lenguaje de programación. La clave para una aplicación efectiva de los robots para una amplia variedad de tareas, es el desarrollo de lenguajes de alto nivel. Existen muchos sistemas de programación de robots, aunque la mayoría del software más avanzado se encuentra en los laboratorios de investigación. Los sistemas de programación de robots caen dentro de tres clases : Sistemas guiados, en el cual el usuario conduce el robot a través de los movimientos a ser realizados. Sistemas de programación de nivel-robot, en los cuales el usuario escribe un programa de computadora al especificar el movimiento y el sensado. Sistemas de programación de nivel-tarea, en el cual el usuario especifica la operación por sus acciones sobre los objetos que el robot manipula.

II. Elementos y Componentes En esta sección se proporciona una breve descripción de los componentes básicos utilizados para la construcción de ambos móviles: “Seguidor de Línea” y el “No autónomo controlado por Radio Frecuencia”.

II.1 Motor-redutcores Los Reductores ó Motorreductores son apropiados para el accionamiento de toda clase de máquinas y aparatos de uso industrial, que necesitan reducir su velocidad en una forma segura y eficiente. Las transmisiones de fuerza por correa, cadena o trenes de engranajes que aún se usan para la reducción de velocidad presentan ciertos inconvenientes.

10

Al emplear REDUCTORES O MOTORREDUCTORES se obtiene una serie de beneficios sobre estas otras formas de reducción. Algunos de estos beneficios son:

• Una regularidad tanto en la velocidad como en la potencia transmitida.

• Una mayor eficiencia en la transmisión de la potencia suministrada por el motor.

• Mayor seguridad en la transmisión, reduciendo los costos en el mantenimiento.

• Menor espacio requerido y mayor rigidez en el montaje. • Menor tiempo requerido para su instalación.

Los motorreductores se suministran normalmente acoplando a la unidad reductora un motor eléctrico normalizado asincrónico tipo jaula de ardilla, totalmente cerrado y refrigerado por ventilador para conectar a redes trifásicas de 220/440 voltios y 60 Hz. Para proteger eléctricamente el motor es indispensable colocar en la instalación de todo Motorreductor un guarda motor que limite la intensidad y un relé térmico de sobrecarga. Los valores de las corrientes nominales están grabados en las placas de identificación del motor. Normalmente los motores empleados responden a la clase de protección IP-44 (Según DIN 40050). Bajo pedido se puede mejorar la clase de protección en los motores y unidades de reducción. En Robótica es muy común encontrar este tipo de motores (figura 6) entre otras aplicaciones, ya que tienen la versatilidad de ser bidireccionales, esto es que, funcionan en sentido horario o en sentido antihorario dependiendo de la polarización en la que este funcionando.

Fig. 6 a), b) y c).-Diferentes clases de motor-reductores comerciales

a)

b)

c)

11

Las características del motorreductor (figura 6c) utilizado para este proyecto son las que a continuación se mencionan: • Serie: B01 • Torca de 2 KgF*cm. • Velocidad de 70 RPM. • Consumo de corriente: 80 mA sin carga y 600 mA a máxima (atrancado).

• Reductora de 1:180. • Eje de 5 mm de diámetro a la salida con orificio para tornillo. • Dimensiones: 66 mm x 20 mm x 20 mm • Peso: 34 gr.

II.2 Circuito L293 Uno de los problemas que se presentan cuando se pretende controlar un robot es el control de la potencia de los motores, esto se puede solucionar con facilidad con varios chips los, ULN2003A, L293C, ULN2803A, etc. El CHIP L293 (Figura 7) es un driver diseñado para proporcionar corriente a mecanismos impulsores bidireccionales de hasta 1 A. con voltajes entre 4,5 y 36 V. con una capacidad máxima de disipación de potencia de 5 W. Cada canal de salida es un circuito controlador completo administrado por un Darlington capaz de proporcionar hasta 1 A.

Una característica importante, es que la alimentación de los circuitos del chip es diferente a la alimentación de los canales, lo que da estabilidad al circuito. Puede funcionar con temperaturas entre 0 y 70 grados y tiene control interno de temperatura, se aconseja en caso de altos consumos un cierto nivel de refrigeración del circuito. De los cuatro canales por pares están controlados por una señal añadida de habilitación, por lo que para controlar un canal de salida se deben enviar dos señales, una al canal y la otra a la habilitación del par de canales.

Fig. 7.-CHIP Encapsulado L293

12

Las características del chip por Pines son (figura 8): PIN NOMBRE DESCRIPCION 1 1,2 EN Control canales 1 y

2 2 1A Entrada señal canal 1 3 1Y Salida potencia canal 1 4 Tierra 5 Tierra 6 2Y Salida potencia canal 2 7 2A Entrada señal canal 2 8 VCC2 Alimentación de las

cargas 9 3,4 EN Control canales 3 y

4 10 3A Entrada señal canal 3 11 3Y Salida potencia canal 12 Tierra 13 Tierra 14 4Y Salida potencia canal 15 4A Entrada señal canal 4 16 VCC1 Alimentación 5V L293 Con este chip se puede controlar todo tipo de dispositivos que necesiten en un momento determinado cierta tensión con un nivel de potencia: relés, lámparas, motores, dentro de un orden lo que sea.

II.3 Sensor Óptico CNY-70 Este sensor reflectivo contiene un diodo emisor de infrarrojos como transmisor y un fototransistor como receptor, que están colocados en la misma dirección (figura 9) uno al lado del otro. Su principio de operación consiste básicamente en que la luz emitida por el transmisor es influenciada por un objeto o medio en su camino al detector. El cambio en la señal de luz causado por la interacción con el objeto, produce un cambio en la señal eléctrica en el receptor fotoelectrónico. Estos cambios son los que se van a utilizar para detectar la línea negra en la prueba de Rastreadores: cuando la luz emitida incide en la línea negra, esta luz es prácticamente absorbida por la línea y el detector apenas detecta luz; es en este momento cuando se está detectando la línea negra.

Fig. 8.-Características del CI L293

Fig. 9.-Circuito Integrado CNY-70

13

Cuando el receptor detecta gran cantidad de luz, entonces es cuando no se está detectando la línea negra sino una superficie de color claro. En la figura 10 se puede ver a la izquierda (figura 10a) una vista desde arriba del CNY‐70 donde se aprecia que tanto el Emisor como el Detector está uno junto al otro, y a la derecha (10b) un circuito test con el esquema básico de funcionamiento, donde d es la distancia al medio reflectivo. CARACTERÍSTICAS ELÉCTRICAS (Tamb = 25ºC):

• Corriente de emisor: IF = 50 mA • Tensión de emisor: VF = 1.25 V típico (valor máximo: 1.6 V) • Corriente de colector máxima (detector): IC = 50 mA • VCE (detector) = 32 V mínimo (medido con IC = 1 mA) • VEC (detector) = 5 V mínimo (medido con IE = 100 µ A) • Corriente de oscuridad del detector: ICEO = 200 nA) • Factor de acoplamiento: 5% • Potencia de disipación máxima de acoplamiento: Ptot=200 mW • Longitud de onda de emisión: 950 nm

Fig. 11.-Propiedades Reflexivas

a) b)

Fig. 10.-CNY70. a)Vista superior. b)Funcionamiento

14

Las medidas y relaciones de reflexión de este sensor tienen como parámetros de referencia una superficie de propiedades reflexivas precisas y conocidas (figura 11), llamada Kodak neutral card (white side). Para esta superficie la reflexión medida es del 100%. Otros ejemplos: folio en blanco 94%, tinta de dibujo negra sobre folio en blanco 5%, fotocopia en negro 7%, PVC blanco 90%, PVC gris 11%, vidrio 9%, aluminio brillante 110%, latón brillante 160%, algodón blanco 110%, terciopelo negro 1.5%, etc. Si el CNY‐70 es dirigido a una superficie en la que hay un salto brusco en la reflexión (ejemplo: Salto de papel blanco a papel negro), la radiación reflejada hacia el detector cambia gradualmente y no de forma abrupta, es decir, el cambio en la corriente de colector no es abrupto sino que experimenta una amplia transición gradual desde el valor más alto hasta el más bajo. Se define así la distancia de conmutación que es la distancia que hay desde que la corriente de colector pasa de 90% al 10% (o viceversa).

II.4 Modulo Transmisor de RF Para realizar una transmisión de Radio Frecuencia es necesario contar con un circuito (figura 12) que realice dicha operación, en otras palabras es necesario un modulo que acepte a la entrada (Data-in) una señal del tipo digital y que de a la salida (ANT) una señal modulada en algún intervalo de frecuencia, en este caso es necesario conectar una antena de 30 cm. Para este proyecto se utilizo un modulo comercial que a continuación se describen sus características: Modelo: TWS-BS-6 (315 MHz)

• Frecuencia: 315 MHz • Tipo de Modulación: ASK • Tipo de Circuito: SAW • Voltaje de Alimentación: 3~ 12 V • Voltaje en todos los pines de entrada/salida: -0.3 to +12.0 V • Temperatura: -20 to +85 ¥ • Temperatura de soldado durante 10 seg.: 230 ¥

Fig. 12.-Modulo transmisor comercial

15

II.5 Modulo Receptor de RF Este modulo (figura 13) sirve de receptor para una señal en Radio Frecuencia en la banda de 315 Mhz, por lo que es necesario un circuito que acepte una señal de RF a su entrada (ANT; antena de 30 a 35 cm), esta señal es demodulada en AM, posteriormente es recuperada en forma digital a una de las salidas (Digital Output) y en otra salida analógica o lineal (Linear Out). Modelo: RWS-374-3 (315MHz)

• Frecuencia: 315MHz • Tipo de Modulación: ASK • Tipo de Circuito: LC • Selectividad: -108dB • Espacio de Canal: 500KHz • Voltaje de Alimentación: 5V • Diseño Pasivo de Alta sensibilidad.

II.6 Microcontrolador ATmega8535 En esta sección se muestran las características principales del microcontrolador ATmega8535 de 8 bits que es un circuito del tipo CMOS de baja potencia, basado en la tecnología AVR, fabricado por la empresa ATMEL, que tiene una arquitectura RISC, el cual puede ejecutar algunas instrucciones en un solo ciclo de reloj, permitiendo que el diseño del sistema optimice la relación de consumo de potencia contra velocidad de procesamiento.

a)

b)

Fig. 13.-Modulo receptor comercial. a) Características CD. b) Configuración de

16

Características: • Microcontrolador AVR de 8 bits y alta ejecución • Avanzada arquitectura de tipo RISC

- Set de 130 instrucciones - Archivo de 32 registros de propósito general - Frecuencia de ejecución que va de 1 a 16 Mhz

• Memoria de Datos y memoria no volátil - 8 Kbytes de memoria Flash programable - 512 bytes de EEPROM - 512 bytes de SRAM interna

• Características internas - Dos Timer/Counter de 8 bits con modo de comparador y

preescalador - Un Timer/Counter de 16 bits con modos de preescalador,

comparador y captura - Contador de tiempo real con oscilador separado - Convertidor Analógico Digital de 10 bits y 8 canales - USART serial programable - Interfaz Master/Slave SPI Serial - Watchdog Timer programable - Comparador Analógico

• Características especiales - RESET - Oscilador interno calibrado - Fuentes externas e internas para las interrupciones - Seis modos de Sleep

• Encapsulados - 40 pines PDIP - 44 lead TQFP, PLCC y QFN/MLF

• Voltaje de operación - 2.7 - 5.5 V para ATmega8535L - 4.5 – 5.5 V para ATmega8535

• Frecuencia de operación - 1 – 8 Mhz para ATmega8535L - 1 – 16 Mhz para ATmega8535

Para este proyecto se utilizara el ATmega8535 (figura 14) en encapsulado PDIP de 40 pines.

Fig. 14.-Configuración de Pines del CI ATmega8535

17

III. Diseño del Mini-Robot Automático

III.1 Características Principales del Mini-Robot Automático

El mini-Robot realizará un recorrido a través de una pista, que más adelante se detalla su diseño, esta pista esta constituida por una línea de 1.8 cm de color negro que se encuentra sobre un fondo blanco, la cual formará una trayectoria cerrada. El mini-Robot será un móvil Autónomo de tipo electromecánico que se desplazará con la ayuda de dos ruedas y una “llanta loca” que sirve como estabilizador, este será controlado por un microcontrolador, que será el que tome las decisiones que dependerán del estado en el que se encuentren 2 sensores del tipo opto-reflectivos que servirán para seguir la pista.

III.2 Diseño de la Pista La pista se construye con un pliego de papel ilustración de dimensiones variables, según sea requerido, la única restricción es puesta por el móvil, ya que éste en todo momento debe estar dentro de la frontera de la cartulina, por lo que la distancia entre una línea cualquiera y el borde del papel, no debe ser menor a 10 cm (figura 15). La línea esta hecha con cinta de aislar, de 1.8 cm de ancho.

III.3 Construcción de las Partes electro-mecánicas En esta sección se detalla el diseño del Mini-Robot a nivel Físico, el cual esta constituido por partes mecánicas, electromecánicas y electrónicas, que en conjunto conforman al Móvil, a continuación se describe el material utilizado para este mini-Robot y posteriormente se explica el ensamble y conexión de los componentes.

Fig. 15.-Ejemplo de Pista donde se muestran las medidas

18

Lista de Material:

• 2 porta pilas para 4 pilas AA c/u • 8 pilas AA • 1 mica de 11x14 cm • 2 motor-reductores B01 con 1:180 de reducción • 2 llantas ajustables • 1 balero • 1 pieza de reproductor de cintas magnéticas (llanta loca) • 1 push bottom • 2 resistor de 10 Kohms • 1 resistor de 220 ohms • 1 resistor de 330 ohms • 2 placas fenólica de 4x6 cm c/u • 20 cm de cable plano de 8 hilos • 4 conectores para cable plano • 1 línea de pin-header macho • 1 línea de pin-header hembra • 1 driver L293 • 2 sensores CNY-70 • 2 capacitores de .1 µF • 1 LED • 1 microcontrolador ATmega8535 • 1 zócalo para microcontrolador • 2 metros de alambre del no. 22 • Soldadura • Plastiloca • Pegamento en Silicón • 1 Tarjeta de experimentación (Protoboard) 5x8 cm

La estructura principal del mini-Robot consta de una base rectangular de mica color verde de 11x14 cm, que a la vez sirvió de soporte para todos los elementos mecánicos y electrónicos (figura 16a). A esta base se le adaptaron dos motor-reductores (figura 16a), a los lados de la mayor longitud. Cada uno de los ejes de los motores se le acoplo una rueda. Entre los dos motor-reductores se adhirió a la base una protoboard (figura 16a) en donde se armaron las componentes del circuito electrónico, constituido por el driver L293 (figura 16a) que controla la potencia de los motores, y los conectores a los sensores (figura 16c). Además, detrás de los motores y encima de la base se colocó dos porta pilas (figura 16b) con cuatro pilas recargables de 1.2 v cada una, para proporcionar un voltaje de 4.8 v a la salida, un grupo de pilas sirve de alimentación para la parte lógica del sistema (microcontrolador, sensores, leds indicadores, entrada del driver, etc.), el otro grupo de 4 pilas alimenta exclusivamente a los motores o etapa de potencia. Encima de las baterías se coloco el microcontrolador (figura 16a) montado en la placa fenólica universal en la cual se encuentra la alimentación de las pilas, Zócalo para el microcontrolador y conectores a los pines externos del

19

microcontrolador. Por debajo de la base se encuentran en la parte de “enfrente” los sensores (vista inferior en la figura 16c) que indican la rectificación del camino sobre la línea y en la parte de “atrás” una “llanta loca” que sirve de soporte (figura 16d) para el móvil.

III.4 Distribución de los Sensores Se utilizan dos sensores del tipo par Diodo-Fototransistor, que sirven como ojos para observar la línea a seguir. Como se menciono (ver Elementos y Componentes básicos) estos dispositivos sirven para detectar un cambio radical de colores, en este caso una línea negra (absorbe haz infrarrojo) en un fondo blanco (refleja haz infrarrojo), por lo que los sensores envían señales que dependen de la línea obscura o del fondo claro. Estos circuitos transductores se colocan a 0.95 cm de la línea que divide a la mitad de la base, por lo que hay una distancia de 1.9 cm entre un sensor y otro (figura 16c), a su vez, es necesario que la cara en donde se encuentran los diodos y los fototransistores sea paralela a la superficie en donde se encuentre la pista, para que se realice una mejor lectura, se recomienda una distancia no mayor a 5 mm de la misma superficie.

d)

a) b)

c) Fig. 16.-Diseño Físico del Móvil a)Vista superior, b)Vista lateral, c)Sensores en la parte frontal y d)Vista inferior de la “Llanta loca”

d)

20

En esta aplicación, los sensores CNY-70 tienen dos posibles condiciones en su respuesta, de tal forma que su salida se asocia a dos estados lógicos. El primero, cuando se tiene una incidencia sobre una superficie blanca (o fondo blanco), el haz es reflejado al fototransistor, permitiendo que exista corriente de colector a emisor (figura 17), de manera que el voltaje de colector tenga para fines prácticos una tierra virtual que es asociado al estado lógico de 0 (ver tabla 1).

El segundo caso se encuentra cuando se tiene una incidencia sobre una superficie oscura (fondo oscuro), en este caso el haz no es reflejado al fototransistor, por lo que no existe corriente de colector a emisor, de manera que el voltaje en el colector es Vcc referido a tierra y asociado al estado lógico de 1 (ver tabla 1).

Fondo Detectado Nivel Lógico Blanco 0 Negro 1

III.5 Sistema de Control Como sistema de control se usa un microcontrolador con la matrícula ATmega8535, este es el encargado de realizar el control de la parte lógica, de modo tal que toma las decisiones dependiendo de las señales que tenga a la entrada, las cuales serán dadas por los sensores, y la respuesta se vera reflejada a las salidas. El uso de este tipo de circuitos es de gran importancia en el área de Robótica por lo que es necesario conocer de antemano el funcionamiento y las herramientas necesarias para su manipulación. Las características mencionadas en la sección “Microcontrolador ATmega8535” son las de mayor interés para el proyecto, si se desea profundizar en el tema es necesario consultar el manual del dispositivo, el cual es de distribución gratuita y se adquiere visitando la página Web de ATMEL www.atmel.com.

Tabla 1.-Muestra la relación entre Fondo detectado y respuesta

Fig. 17.-Par Diodo emisor Infrarrojo-Fototransistor

21

III.6 Diagrama de Conexión A continuación se muestra en la figura 18 el diagrama de conexión de los circuitos que se utilizaron para el funcionamiento Automático. Posteriormente se describen las funciones de las terminales de los CI utilizados, así como una breve explicación de la forma como se debe configurar a nivel de código los pines del AVR que se utilizaran como entradas o salidas, según sea el caso. Descripción de los pines utilizados del ATmega8535.

PA0 (PIN 40): Señal que se obtiene del sensor izquierdo (SI), se configura como entrada (IN). PA1 (PIN 39): Señal que se obtiene del sensor derecho (SD), se configura como entrada (IN). GND (PINES 11 y 31): Es el PIN de tierra o común, este no es configurable. VCC (PIN 10): Este PIN se utiliza como alimentación, que en este caso es de 5 V de corriente continua, no es configurable. RST (PIN 9): Es el PIN que se utiliza como RESET y es activado en bajo, por lo que es posible implementar un circuito de RESET o simplemente conectarlo a Vcc para que no sea activado, en este caso se utilizo la segunda opción. PC0 (PIN 22): PIN utilizado como salida el cual activará (en 1 lógico) o desactivará (en 0 lógico) al motor izquierdo. PC1 (PIN23): PIN utilizado como salida el cual activará (en 1 lógico) o desactivará (en 0 lógico) al motor derecho. PC7 (PIN 29): PIN utilizado para permitir al usuario verificar que el programa se está ejecutando (verificación de fallas), para ello se le conecta un LED en serie con una resistencia limitadora.

Fig. 18.-Diagrama de conexión para el circuito del Seguidor de Línea

22

Driver L293

E 1,2 y E 3,4: Habilitación de las salidas 1, 2, 3 y 4, estos se activan en alto, por lo que se conectan a Vcc. Vss: Voltaje de alimentación de la etapa Lógica, esto es 5v, que es la misma fuente que alimenta al microcontrolador. Vs: Voltaje de alimentación de la etapa de Potencia, esto es la fuente que alimenta a los motores y solo a los motores, aunque no se muestre explícitamente en el diagrama, pero la fuente conectada a Vs es independiente a la alimentación de la parte lógica, esto es para evitar problemas de Ruido. GND: A este PIN se le conecta tierra o referencia a cero (0 V) INx: Entradas de control en niveles de voltaje Lógico. IN2 e IN3 se conectan a tierra, ya que solo se necesitan 2 controles de paro y avance que son IN1 e IN4 para el motor izquierdo y derecho respectivamente. OUTx: Salidas de potencia en niveles de Vs. A estas salidas son conectados los motores que previamente se identifico su polaridad, de manera que al polarizar a 1 lógico en IN4, en OUT4 habrá un estado alto o Vs por lo que el motor derecho gira en sentido horario, para el motor izquierdo al polarizar IN1 a 1 lógico, se refleja en OUT1 un estado alto y el motor izquierdo gira en sentido antihorario.

III.7 Configuración de los puertos de I/O del microcontrolador

Esta configuración se lleva a cabo de acuerdo a las condiciones establecidas de uso de cada una de las terminales de I/O (se tienen 4 puertos de 8 bits, con un total de 32 bits). Las terminales asociadas a PA0 y PA1 se configuran como de entrada, mientras que PC0, PC1 y PC7 como de salida. Para ello es necesario configurar los registros especiales en el AVR, siguiendo los siguientes criterios:

1. Identificar los puertos que se van a utilizar, en este caso Puerto A y Puerto C.

2. Para configurar un PIN en el AVR como salida se establece a 1 el bit del registro especial asociado a esta terminal, mientras que para una configuración como entrada se establece a 0 (ver tabla 2).

3. Escribir en los registros especiales DDRx de 8 bits (x es el nombre del puerto en particular) la configuración deseada. El registro DDRx7:DDRx0 (DDRx) se relaciona con las terminales Px7:Px0 respectivamente.

23

Configuración del bit Relación lógica Salida 1 Entrada 0

A continuación se establece la configuración de estos registros especiales tomando en cuenta que: Entradas.- PIN0 y PIN1 del Puerto A. Salidas.- PIN0, PIN1 y PIN7 del Puerto C. Para configurar como entrada las terminales PIN0 y PIN1 del puerto A se establecen a cero los bits PA0 y PA1 en el registro especial DDRA, mientras que la configuración como salidas de las terminales PIN0, PIN1 y PIN7 del puerto C se establece a uno los bits PC0, PC1 y PC7 en el registro especial DDRC, como se muestra en la figura 19. (Nota: por seguridad todas las terminales de los puertos no utilizados se recomienda configurarlos como de entrada).

PA7 PA0 PC7 PC0

DDRA 0 0 0 0 0 0 0 0 DDRC 1 0 0 0 0 0 1 1

A nivel de código, la configuración se realiza de la siguiente manera: .def AUX = R16 ;se define un registro auxiliar en el archivo de registros LDI AUX, 0x00 ;se carga al registro auxiliar un 00 en hexadecimal OUT DDRA, AUX ;se asigna al registro DDRA el valor del reg. AUX,

;configuración del Puerto A como entradas LDI AUX, 0x83 ;se carga al registro auxiliar un 83 en hexadecimal, o un

;1000 0011 en binario OUT DDRC, AUX ;se asigna al reg DDRC el contenido en AUX, configura al

;Puerto C de manera que PC7, PC1 y PC0 son de salida y los ;demás de entrada

Los puertos B y D no se configuran, ya que por default están configurados como entradas en todos sus bits.

III.8 Criterios, diseño y algoritmo Criterios de Diseño:

• El móvil realizará un recorrido a través de líneas de color negro que se encuentran sobre un fondo blanco (pista).

• Las líneas de color negro deberán formar una trayectoria cerrada.

• El mini-Robot será Autónomo controlado por un microcontrolador, que será el que tome las decisiones.

Tabla 2.-Relación Lógica con la configuración de pines

Fig. 19.-Configuración de los registros especiales

24

• El móvil en todo momento se desplazará hacia adelante. • El mini-Robot tendrá 2 sensores (uno izquierdo y otro derecho)

optoelectrónicos que servirán como “ojos”. • Si ninguno de los sensores entra a la línea negra (esto es

detecta superficie blanca) el motor que le corresponde se encenderá, por ejemplo si el sensor derecho no entra a la línea, el motor derecho se enciende y gira hacia adelante.

• Si alguno de los dos sensores entra a la línea negra, se apagará el motor que le corresponda, por ejemplo, si el sensor derecho detecta la línea negra el motor derecho se apagará.

• Si ambos sensores detectan la línea se apagan los dos motores.

El algoritmo principalmente se basa en el principio de Corrección en la trayectoria del movimiento del móvil de acuerdo a la lectura de los sensores (Tabla 3). Debido a que la pista negra se construyo en un fondo blanco solo son necesarios dos sensores que estén monitoreando si el móvil entra a la pista negra o no. Cuando uno de los dos sensores detecta la pista negra (identificando como señal a 1 lógico), la rueda correspondiente a ese lado del sensor se detiene, de este modo corrige el camino al permitir funcionar la rueda contraria. De lo anterior se concluye que existen 4 posibles condiciones del encendido o apagado de los motores que controlan las ruedas, como se muestra en la tabla 3, donde SD y SI es el sensor derecho y el izquierdo, respectivamente, y MD y MI es el motor derecho y el izquierdo, respectivamente.

SI SD MI MD Estado de los sensores Entradas Salidas

Ambos fuera de la línea 0 0 1 1 Derecho dentro de la línea 0 1 1 0 Izquierdo dentro de la línea 1 0 0 1

Ambos en la línea 1 1 0 0

Nota1: En los sensores el 0 lógico significa detección de fondo blanco, el 1 lógico detección de línea negra. Nota2: En los motores el 0 representa apagado y el 1 encendido y con dirección hacia delante.

La descripción anterior del algoritmo produce el siguiente Pseudocódigo, tome en cuenta que en programación dos signos de igual (==) denotan comparación y un solo signo denota (=) asignación:

1. Verificar el estado del sensor izquierdo, si este detecta línea (SI==1) pasa al punto 3, que corresponde a verificar el estado del sensor derecho, SD, si no detecta línea pasa al punto 2.

2. Verificar el estado del sensor derecho, si este detecta línea (SI==0 y SD==1) solo se detiene el motor derecho (MOTORI=1 y MOTORD=0) y regresa al punto 1, si el sensor derecho no detecta línea (SI==0 y SD==0), no se detiene ningún motor (MOTOTI=1 y MOTORD=1) y regresa al punto 1.

Tabla 3.-Se muestra el Principio de Corrección de los sensores

25

3. Verificar el estado del sensor derecho (SD) si este detecta línea (SI==1 y SD==1) apaga ambos motores (MOTORI=0 y MOTORD=0) y regresa al punto 1, si el sensor SD no detecta línea (SI==1 y SD==0) solo apaga el motor izquierdo (MOTORI=0 y MOTORD=1).

El siguiente diagrama (ver figura 20) muestra el flujo principal del programa, surge del Pseudocódigo explicado anteriormente. Modulo “Definiciones y Configuración del AVR”: En esta sección lo primero que se lleva a cabo es la inclusión de un archivo que contiene todas las definiciones de los registros especiales del microcontrolador a utilizar, este se incluye en el programa al utilizar la directiva “.include”. .include "m8535def.inc"

Después se definen, con la directiva “.DEF”, todos los registros del Archivo de Registros de Propósito general, se recomienda utilizar los últimos 16 registros de trabajo, que van de R16 a R31 debido a que

Fig. 20.- Diagrama del Flujo principal para el algoritmo

26

estos no tienen ninguna restricción cuando son usados por el conjunto de instrucciones del AVR. También se definen las equivalencias con constantes, empleando la directiva “.EQU”, estas se suelen utilizar para que el programa sea más legible. .EQU MOTORI =0 ;RUEDA DERECHA ADELANTE PORT C .EQU MOTORD =1 ;RUEDA IZQUIERDA ADELANTE PORT C .EQU LED =7 ;LED INDICADOR DE ENCENDIDO PORTC .EQU SI =0 ;SENSOR IZQUIERDO SIGUE LINEA PORTA .EQU SD =1 ;SENSOR DERECHO SIGUE LINEA PORTA .DEF CONT1 =R16 ;DEFINICION DE REGISTROS CONTADORES .DEF CONT2 =R17 .DEF CONT3 =R18 .DEF AUX1 =R19 ;REGISTRO AUXILIAR

Posteriormente se encuentra la directiva “.org”, el cual le indica al compilador donde inicia la grabación del código que esta por debajo de esta directiva. La dirección especificada es la $000 ya que es esta la que direcciona o apunta el Contador de Programa cuando ocurre un RESET o al inicio de la alimentación del dispositivo. De manera que la instrucción que se ejecuta es la que se define en esta dirección que en este caso es un salto a una etiqueta llamada RESET. .ORG $0000 ; Apunta a la localidad $00 de la Memoria de Programa RJMP RESET ; Salto a la etiqueta “RESET”

En seguida se inicializa la Pila, que es utilizada para almacenar el contenido del Contador de Programa cuando ocurre una interrupción o cuando se llama a una subrutina. Se recomienda inicializar el apuntador de la pila apuntando a la ultima dirección de la memoria SRAM. RESET: LDI AUX1, LOW(RAMEND) ;INICIALIZACION DE LA PILA- OUT SPL, AUX1 ;EN LA ULTIMA DIRECCIÓN DE- LDI AUX1, HIGH(RAMEND) ;LA MEMORIA SRAM OUT SPH, AUX1

Para realizar la configuración de los puertos de entrada y salida se utilizaran las siguientes instrucciones, establecidas con anterioridad.

LDI AUX, 0x00 OUT DDRA, AUX1 LDI AUX, 0x83 OUT DDRC, AUX1

Nota: Para ver completo el código consultar el Apéndice A de este documento.

27

IV. Diseño del Mini-Robot Manual

IV.1 Características Principales del Mini-Robot Man ual En esta sección se habla del diseño del mini-Robot que funciona de forma manual, es decir aquel que necesita de órdenes “externas” para llevar a cabo un movimiento, y por lo tanto no lo hace de manera automática. Las órdenes serán dadas por un usuario con la ayuda de un control, el cual, estará conectado a un microcontrolador, que generará una señal digital para que sea transmitida por un módulo transmisor de radiofrecuencia. El mini-Robot será un móvil de tipo electromecánico que se desplazará con la ayuda de dos ruedas y una “llanta loca” que sirve como estabilizador, este será controlado por un microcontrolador que es el encargado de decodificar la señal recibida por un módulo receptor de radiofrecuencia. El Móvil tendrá solo tres movimientos: Adelante, Giro Izquierdo y Giro Derecho, los giros los realizará sobre su propio eje. En el funcionamiento del Mini-Robot Manual se identifican dos etapas principales (figura 21) llevada a cabo por medio de un protocolo de Transmisión-Recepción:

1. Etapa de Transmisión.- La etapa de Transmisión se divide en dos bloques:

• Generador de Trama. • Circuito Transmisor.

2. Etapa de Recepción.- La etapa de Recepción se divide en 3 bloques:

• Circuito de Recepción. • Circuito de Análisis y Decodificación (Microcontrolador). • Actuadores (etapa de Potencia y Motores).

En la figura 21 se muestran las dos etapas principales que están acopladas implícitamente por el conductor universal para señales de Radio Frecuencia que es el Aire, por otra parte las flechas indican que el acoplamiento es por medio de medios Físicos como alambre o cable.

Fig. 21.-Se muestran los bloques del Sistema: a) Transmisor y b) Receptor

a) b)

28

IV.2 Protocolo de Transmisión RF El protocolo de transmisión consta de un ‘código’ que se forma de cuatro secciones:

• 4 pulsos iniciales (Preámbulo) ver figura 22. • Un espacio sin señal (Header) ver figura 22. • Los 16 pulsos de datos con duración de 1200 µseg. cada uno,

ver figura 22. • Y finalmente un tiempo de guarda (figura 22), que es el

intervalo de tiempo de espera entre una transmisión y otra que determinan el ‘código’.

En general el protocolo basa su velocidad de transmisión en función de un elemento de tiempo (Te). Los valor de Te típicos son de

seg. 200 µ , seg. 400 µ y seg. 800 µ , para este proyecto será de seg. 400 µ El Preámbulo (figura 23): Es el inicio de la comunicación. En esta aplicación se mandan cuatro pulsos como preámbulo. Sin embargo, es posible mandar un mayor número de pulsos.

El Header (figura 24): Es un intervalo de tiempo que tiene como propósito la sincronización entre el transmisor y el receptor. En este protocolo el tiempo de duración del Header es de 10 unidades de Te (10 Te). De manera que el receptor sincroniza el tiempo de transmisión a partir de 10 Te y establecer el valor de un elemento de tiempo (Te). Así, el valor de tiempo Te esta en función de la velocidad de transmisión.

Fig. 23.-Preámbulo a detalle

Fig. 24.-Header a detalle

Fig. 22.-Trama a generar

29

Los Datos (figura 25b): Cada bit a transmitir se configura como un arreglo (figura 25a) de tres bits. El primer bit siempre esta en alto, el segundo bit es el bit en particular en transmitir y el tercer o último bit siempre es de nivel bajo

El tiempo de Guarda: Es el intervalo de tiempo de espera entre una transmisión y otra. La duración de este intervalo de tiempo de Guarda debe ser mayor al del tiempo del Header, de manera que el receptor no confunda el tiempo de Guarda con el tiempo del Header. Por ejemplo, para una transmisión cuyo valor de un Te sea de

seg. 400 µ (duración del Header de 10 Te = 4 m seg.) se recomienda un tiempo de Guarda de 6 m seg. Observe que los 16 pulsos, en la sección de datos, pueden ser ancho o angosto y la combinación de ellos distingue un transmisor de otro. La parte baja de cada pulso corresponde a un voltaje de 0 volts y la parte alta a 5 volts. Los seis pulsos de la derecha (figura 26) son los correspondientes al canal que se transmite (Canal 1 a Canal 6), sin embargo estos pueden variar, a estos seis bits se les reconocerán como los bits de canales. Mientras que, los otros 10 bits se usan como número de serie que distingue a cada transmisor.

Fig. 25.-Datos a detalle. a) Un bit de los datos. b) Varios bits

a)

b)

Fig. 26.-Canales y numero de serie

30

IV.3 Protocolo de Recepción RF El receptor a utilizar será un modulo de Radio Frecuencia, con recepción de seis canales, trabajando en la banda de 315 Mhz que se encarga de demodular la señal de 315 Mhz y entregar a la salida una señal de tipo digital con niveles de 5 Volts para un 1 lógico y 0 Volts para un 0 lógico. A la salida del modulo receptor debe conectarse un microcontrolador encargado de decodificar el canal recibido. El microcontrolador tiene como tarea de asegurarse que la señal recién recuperada corresponde al formato propio de este sistema, por lo que es revisada en cuanto a estructura, tiempo de duración, ancho de pulsos y número de pulsos. Si todo esto corresponde, se extrae solamente los 16 bits y se desecha la sección de Preámbulo y Header, que ya sirvieron para validar el formato. Estos 16 bits se separan en dos grupos: El primero formado por 6 bits contiene la información de los canales activados en el transmisor (ver Tabla 4) y el segundo grupo de 10 bits que contienen el número de serie exclusivo de este juego de Transmisor-receptor que es: “01 0101 0101b”. Para este proyecto solo son utilizados 3 de los 6 canales disponibles.

Código de Tx y canal Rx

Código de Canal Canal

0000 01 1 0000 10 2 0001 00 3

Si el número de serie corresponde precisamente con el de este Receptor, se comparan los bits correspondientes a los canales y si es valido lo decodifica, de otra forma, se desecha y se espera la siguiente transmisión. Ya validado el canal (si es el caso) se decodifica y son manipulados los dos motores del móvil.

IV.4 Construcción de las Partes electro-mecánicas En esta sección se hace referencia a la etapa anterior (Móvil Automático), ya que el diseño del móvil a nivel físico se realiza de la misma manera que para el mini-Robot automático. Sin embargo se le quito los sensores que se instalaron en la parte de enfrente, por otro lado, se conectó un modulo receptor que más adelante se mostrará a detalle en el diagrama de conexión, por lo que el diseño Físico del móvil no se ve alterado de manera significativa, por el contrario es muy similar así como el ensamble que ya se explico anteriormente (ver “Construcción de las partes electro-mecánicas” para el mini-Robot Automático).

Tabla 4.- Se muestra la relación entre el canal y su código

31

A continuación se describe el material utilizado para este mini-Robot. Lista de Material:

• 3 porta pilas para 4 pilas AA c/u • 12 pilas AA • 1 mica de 11x14 cm • 2 motor-reductores B01 con 1:180 de reducción • 2 llantas ajustables • 1 balero • 1 pieza de reproductor de cintas magneticas (llanta loca) • 2 resistor de 330 ohms • 1 placas fenólica de 4x6 cm c/u • 20 cm de cable plano de 8 hilos • 4 conectores para cable plano • 1 línea de pin-header macho • 1 línea de pin-header hembra • 1 driver L293 • 2 capacitores de .1 µF • 2 LEDs • 2 microcontroladores ATmega8535 (Generador de trama y Analizador

de trama) • 1 zócalo para microcontrolador • 2 metros de alambre del no. 22 • Soldadura • Plastiloca • Pegamento en Silicón • 1 Tarjeta de experimentación (Protoboard) 5x8 cm • 1 Tarjeta de experimentación (Protoboard) 5x16 cm • 1 Circuito Transmisor TWS-BS-6 (315 MHz) • 1 Circuito Receptor RWS-374-3 (315MHz) • 2 trozos de alambre calibre 22 de 30 a 35 cm aprox (Antenas)

IV.5 Etapa de Transmisión Esta etapa se divide en dos partes (ver figura 21): a) Generador de Trama y b) Circuito Transmisor:

a) Generador de Trama: La función de este bloque es generar la trama concatenando el código del canal a transmitir y el número de serie del par Transmisor-Receptor. El circuito principal de este bloque es el ATmega8535, sus características fueron detalladas con anterioridad (ver Sistema de Control). Este circuito entrega en uno de sus pines, que es configurado como salida, la señal de la trama a transmitir, dependiendo del canal (Canal 1, Canal 2 y Canal 3) que sea seleccionado por medio de Push-Botoms conectados a los pines PA0, PA1 y PA2 del microcontrolador, para este proyecto solo se van a tomar 3 canales de los 6 disponibles y la relación entre los Pines y los canales es: PA0-Canal 1, PA1-Canal 2 y PA2-Canal 3, ya que el móvil tendrá solamente tres movimientos. Ya generada la trama es entregada al Circuito Transmisor.

32

b) Circuito Transmisor: Este circuito (ver Modulo Transmisor RF) es el encargado de realizar la modulación en AM de la señal digital proporcionada por el generador de trama, también es el encargado de transmitir la señal ya modulada por medio del canal (Aire) en la banda de 315 MHz de amplitud modulada. Este circuito se puede encontrar comercialmente con la serie TWS-BS-6 (315 MHz). Para su funcionamiento solo se necesita alimentarlo con 5V con respecto a tierra y proporcionarle la señal digital a modular, se le conecta una Antena de 30 a 35 cm. Para fines prácticos no es necesario saber más a detalle del funcionamiento de este circuito.

IV.6 Etapa de Recepción y Actuadores La etapa de recepción se divide en tres bloques (ver figura 21) principales: a) Circuito Receptor, b) Circuito de Análisis y Decodificación y c) Actuadotes (etapa de potencia y Motores).

a) Circuito Receptor: Este circuito (ver Modulo Receptor) es el encargado de realizar la demodulación de la señal a recuperar y entrega dicha señal en forma digital, que será analizada posteriormente. Es importante aclarar que este receptor capta todas las señales que se encuentren en la banda de 315 MHz de AM. Este circuito se puede encontrar comercialmente con la serie RWS-374-3 (315 MHz). No se detalla el funcionamiento interno de este módulo comercial ya que esta fuera de los objetivos de este proyecto.

b) Circuito de Análisis y Decodificación: Es el encargado de discriminar entre una señal válida y otra que no lo es, esta necesidad se basa en el hecho de que esta banda de frecuencia es libre y por consiguiente existen muchas señales captadas indeseables. El análisis o validación de la trama permite asegurar que ésta proviene de nuestro transmisor. Una vez válida se decodifica para ser usada por la etapa asociada a los actuadores. El circuito encargado de llevar a cabo el análisis y la decodificación es el microcontrolador AVR ATmega8535 (ver Sistema de Control), que sólo requiere de una terminal como interfaz con el módulo receptor, debido a que la señal recibida es de forma serial, lo que implica una gran sincronía entre ambos. A partir del dato decodificado, el microcontrolador se encarga de activar ó desactivar un par de actuadores, que es el siguiente bloque a explicar.

c) Actuadores: Este bloque esta compuesto por el ya mencionado L293 (ver Circuito L293) y los motor-reductores. El primero sirve como circuito de Potencia. Las entradas son activadas con niveles lógicos y entrega a la salida un voltaje proporcionado

33

por otra fuente de alimentación; es decir, la fuente que alimenta a los motores (ver Motor-reductores) es independiente a la fuente que alimenta a la parte Lógica (Microcontrolador, Circuito Receptor, leds, etc.).

IV.7 Diagramas de Conexión En esta sección se muestran los diagramas de Conexión de los dos circuitos que se utilizaron para el funcionamiento del móvil Manual, uno para la etapa de Transmisión y el otro para la etapa de Recepción.

IV.7.1 Etapa de Transmisión En el diagrama de la figura 27 se muestra el circuito encargado de generar la señal a transmitir (ATmega8535), esta es entregada al pin 3 del Modulo Transmisor RF por medio del pin PB1 del microcontrolador. En los pines PA0, PA1 y PA2 del microcontrolador son conectados los push-botoms, debido a que sólo se transmiten 3 canales. Con los push-botoms se aprovecha el principio básico de un switch (abierto y cerrado), por lo que cuando el switch está cerrado entrega un nivel bajo, pero cuando esta abierto entrega un nivel alto, en esta aplicación se configuraron resistencias Pull-up internas del microcontrolador, y no es necesario conectar estas resistencias físicamente.

Los pines PB0 y PB1 son configurados como salidas. A PB0 se conecta el LED indicador de encendido y apagado en serie con una resistencia de 330 Ohms limitadora de corriente. A continuación se describen los pines del Modulo Transmisor RF utilizados.

PIN 1: Tierra o común. PIN 2: Acepta la señal generada por el microcontrolador que viene del pin PB1, el cual es digital. PIN 3: Vcc o alimentación de 5V. PIN 4: Pin que va a la Antena.

Fig. 27.-Diagrama de Conexión para el transmisor

34

IV.7.2 Etapa de Recepción En el diagrama de la figura 28 se muestra la conexión de la etapa de Recepción, así como los circuitos que conforman los tres bloques: a) Circuito receptor (Módulo Receptor RF), b) Analizador y Decodificador de señal (Microcontrolador) y c) Actuadores (Driver de potencia y motores).

a) Módulo Receptor: Este modulo es el encargado de demodular la

señal en la banda de frecuencia de 315 Mhz, la señal en forma digital es entregada al microcontrolador por medio del PIN2 (Salida digital). También se observa que el PIN 8 del módulo de RF es conectado hacia la antena.

b) Analizador y Decodificador: Este circuito recibe por el pin PA0 la señal entregada por el Módulo Receptor. El pin PA0 se configura como entrada. Una vez que el microcontrolador verifica la trama y la decodifica, envía las señales a los actuadores utilizando los pines PB0 (Motor Derecho con movimiento hacia atrás), PB1 (Motor Derecho con movimiento hacia adelante), PB2 (Motor Izquierdo con movimiento hacia atrás) y PB3 (Motor Izquierdo con movimiento hacia adelante), estos últimos pines se configuran como salidas, al igual que el pin PB7 que sirve como indicador de Encendido/Apagado (usando un LED).

c) Actuadores: Esta parte combina la etapa de potencia y los motores, el Driver L293 (ver Circuito L293) recibe señales del microcontrolador en sus entradas IN1, IN2, IN3 e IN4. Este Driver funciona como un Buffer, es decir, cuando en alguna entrada INx aparece a 0 lógico, a la salida OUTx aparece un voltaje de 0 V, y cuando en alguna entrada aparece a 1 lógico, a la salida aparece el voltaje en Vs (voltaje en el PIN8), además soporta una corriente de 500 mA, entregando así la potencia

Fig. 28.-Diagrama de Conexión para el receptor

35

requerida. En el proyecto se utilizaron 2 fuentes independientes de 4.9 V, una alimentando a las terminales Vss del Módulo Receptor y del microcontrolador y la otra fuente se utilizó para alimentar a Vs de los motores. Las habilitaciones E1,2 y E3,4 están siempre conectadas a nivel alto (se activan a 1 lógico). Las entradas INx son conectadas al microcontrolador como se muestra en la tabla 5.

Pines del Microcontrolador

Pines del Driver L293

PB0 IN3 PB1 IN4 PB2 IN1 PB3 IN2

Los motores son conectados a las salidas OUTx.

IV.8 Configuración de los Puertos para Etapa de Transmisión y Recepción.

En esta sección se describe la configuración de los pines de los microcontroladores que son utilizados tanto en el circuito transmisor como en el circuito receptor. La configuración de todos los pines a nivel de código para el microcontrolador del circuito transmisor se muestra a continuación: .def AUX= R16 ;se define un reg. Auxiliar en R16 del archivo de registros … LDI AUX, 0x00 ;se carga un 00h OUT DDRA, AUX ;se asigna al registro DDRA el valor del reg. AUX,

;configuración del Puerto A como entradas LDI AUX, 0x07 ;se carga en AUX un 07h OUT PORTA, AUX ;se asigna al reg PORTA lo que hay en AUX, configuración de

;las resistencias Pull-up. LDI AUX, 0x03 ;se carga al registro auxiliar un 03 en hexadecimal, o un

;0000 0011 en binario OUT DDRB, AUX ;se asigna al reg. DDRB el contenido en AUX, configuración

;de PB1 y PB0 como salida, los demás pines se ;configuran como entradas

La configuración para los pines de entrada y salida a nivel de código para el microcontrolador del circuito receptor se muestra a continuación: .def AUX= R16 ;se define un reg. Auxiliar en R16 del archivo de registros

Tabla 5.- Muestra la relación de los pines

36

… LDI AUX, 0x00 ;se carga un 00h OUT DDRA, AUX ;se asigna al registro DDRA el valor del reg. AUX,

;configuración del Puerto A como entradas LDI AUX, 0x8F ;se carga al registro auxiliar un 8F en hexadecimal, o un

;1000 1111 en binario OUT DDRB, AUX ;se asigna al reg. DDRB el contenido en AUX, configura a

; PB7 y PB4:PB0 del Puerto B como salidas y a los ;demás bits como entradas

IV.9 Criterios, Diseño y Algoritmo para el Transmis or El objetivo principal del transmisor es el de controlar los movimientos del robot móvil en forma inalámbrica. Para ello el microcontrolador debe cumplir con los siguientes criterios: • La comunicación inalámbrica es del tipo serial en RF. • El usuario cuenta con 3 botones para establecer el tipo de movimiento.

• Cuando uno de los botones es presionado por el usuario, se genera una trama cuya información involucra el tipo de movimiento escogido y cumple con los criterios establecidos por el protocolo de transmisión (ver Protocolo de transmisión RF).

• Se transmiten ráfagas de trama durante el tiempo en que uno de los botones permanece activo.

• Se permiten cuatro estados de funcionamiento con los tres botones de control: a uno de ellos se le identifica con el estado inactivo y es cuando ninguno de los botones se encuentra presionado, en este caso no se manda ninguna trama. Los otros tres estados se asocian con la activación de cada botón.

El programa comienza con la configuración del microcontrolador AVR, en donde se establecen las definiciones de los registros utilizados, las equivalencias numéricas, la inicialización de la pila, la configuración de los puertos de Entrada/Salida, de las interrupciones, etc. Posteriormente se lleva a cabo el algoritmo de control de los movimientos del robot móvil, iniciando con un “barrido” a los pines de entrada (monitoreando los botones) en espera de que alguno de los botones sea activado por el usuario. En tal caso se identifica el botón activo y con esta información se configura los registros de datos que serán utilizados en la trama; se invoca a la rutina TRANSMITE, que es la encargada de generar y transmitir la trama. Este proceso de “barrido” a los pines, la identificación del botón presionado y la transmisión de la trama se repiten hasta que el botón presionado pasa al estado inactivo. En la figura 29 se muestra el diagrama de flujo del transmisor, donde “Trama1” es el código de identificación, ID, de este par Transmisor-Receptor y de longitud de 10 bits. Mientras que “Rentrada” esta relacionado con el botón presionado por el usuario, cuya longitud es de 6 bits. “Trama1” se estableció en la

37

sección de configuración del microcontrolador en el área de equivalencias.

Subrutina TRANSMITE. La subrutina TRANSMITE se encarga de configurar y transmitir la trama, de acuerdo a los criterios establecidos por el protocolo de transmisión (ver Protocolo de Transmisión RF), es decir:

• 4 Pulsos iniciales (Preámbulo). • Un intervalo de tiempo sin señal (Header). • 16 pulsos de datos con duración de 1200 µseg. cada uno. • Y un tiempo de Guarda.

Considerando que el protocolo es de tipo serial, el microcontrolador solo requiere dedicar un pin de alguno de sus puertos, en este caso el PB1, que se le llamará salida, la cual estará activada (a 1 lógico) o desactivada (a 0 lógico) según sea el caso. Se determina como unidad de tiempo elemental Te = 400 µseg.

Fig. 29.-Diagrama de Flujo del transmisor

38

Con las consideraciones anteriores se generan los siguientes pseudocódigos: • Envío del Preámbulo (figura 30):

1. Inicializa el registro REPETIR para contar los 4 pulsos.

2. Activa la salida. 3. Espera un Te. 4. Decrementa REPETIR. 5. Verifica y si han transcurrido los 4 pulsos,

pasa al Header. 6. Si no han transcurrido los 4 pulsos desactiva salida. 7. Espera un Te. 8. Regresa al punto 2.

• Envío del Header (ver figura 31): 1. Desactiva salida. 2. Espera 10Te.

• Envío de los datos (ver figura 32) Los datos se encuentran previamente almacenados en el par de registros Trama1:Trama0. 1. Inicializa un contador de bits (NUM_BITS) para los 16 bits

de datos. 2. Activa salida. 3. Espera un Te. 4. Se rotan a la derecha los registros recuperando el bit LSB. 5. Si el LSB es cero se desactiva la salida, de lo contrario se

activa la salida. 6. Espera un Te. 7. Desactiva salida. 8. Espera un Te. 9. Decrementa NUM_BITS. 10. Verifica y si se han recuperado y enviado los 16 bits pasar

al tiempo de Guarda. 11. Si no se han enviado los 16 bits regresa al punto 2.

• Envío del Tiempo de Guarda (ver figura 33):

1. La salida esta desactivada después de enviar el último bit. 2. Esperar 6 ms (este tiempo puede seleccionarse diferente,

pero siempre mayor a 10 Te).

Fig. 30.-Preámbulo de la Trama

Fig. 31.-Header de la Trama

Fig. 32.-Datos de la Trama

Fig. 33.-Tiempo de Guarda

39

El diagrama de flujo de la subrutina TRANSMITE se muestra en la figura 34 y en el apéndice B el código en ensamblador.

Subrutinas de Retardo. Estas rutinas de retardo se encargan de mantener al microcontrolador en un estado ocioso mientras transcurre un tiempo determinado. En la figura 25 se muestran los diagramas de flujo para los retardos de 400 µseg. (figura 35a), 4 mseg. (figura 35b) y 6 mseg. (figura 35c). El principio de funcionamiento es el mismo para todas ellas: Se inician contadores y se van decrementando en forma anidada hasta llegar a cero. La inicialización de los registros y el número de anidamientos está en función del tiempo del retardo deseado.

Fig. 34.-Diagrama de Flujo De la subrutina TRANSMITE

40

IV.10 Criterios, Diseño y Algoritmo para el Recepto r La etapa de recepción se encuentra montada en el robot móvil y es la encargada de recibir y decodificar la señal transmitida por el sistema de control o transmisor, finalizando con la manipulación de los actuadores del móvil. Los criterios a seguir en el diseño son: • El móvil mediante su módulo de recepción acepta señales de radio frecuencia en la banda de 315 MHz.

• De manera iterativa el microcontrolador monitorea la terminal o pin de recepción con el fin de identificar presencia de señal y por lo tanto en busca de una trama.

• El microcontrolador al encontrar una trama válida, la decodifica e inicia la manipulación de los actuadores de acuerdo al tipo de movimiento requerido.

• La decodificación se lleva a cabo sobre los 16 bits de datos. Los 10 bits menos significativos corresponden al código de identificación, ID, que sirve para localizar la señal del sistema de control o transmisor, reconociéndolo de cualquier otro dispositivo ajeno a

a) b) c)

Fig. 35.-Diagrama de Flujo de las Subrutinas de Retardo

41

esta aplicación (El ID utilizado es: 01 0101 0101). Los 6 bits más significativo corresponden a seis posibles canales o tipos de movimiento. En este proyecto permitiendo 3 canales o 3 tipos de movimiento.

• Los tres posibles movimientos del móvil son: “adelante”, “giro a la izquierda” y “giro a la derecha”. Estos abarcan todo el espacio posible de movilidad, considerando que no haya ningún obstáculo en la cercanía.

• La tabla 6 muestra la relación que existe entre los tres botones del mando de comandos del transmisor con el código enviado, el canal transmitido, la acción del móvil y las terminales para activar el movimiento de los motores (MIF: motor izquierdo al frente, MIB: motor izquierdo hacia atrás, MDF: motor derecho al frente y MDB: motor derecho hacia atrás).

• El “giro a la izquierda” y el “giro a la derecha” es una rotación sobre su propio eje. Para el “giro hacia la izquierda” la llanta del motor izquierdo rueda hacia atrás y la llanta del motor derecho rueda hacia delante. Mientras que el “giro hacia la derecha” las llantas ruedan en los sentidos contrarios.

• Cada motor utiliza dos terminales que al energizarse permiten el movimiento de giro, en la tabla 6 se indican los estados de activación o desactivación de cada uno de ellos para los diferentes movimientos permitidos. Observe que MIF y MIB no deben estar activos al mismo tiempo, y lo mismo sucede para MDF y MDB.

• Para asegurar la continuidad en el movimiento del móvil se establece un tiempo de protección de 62 mseg. en la que se mantiene al móvil en movimiento mientras recibe y valida otra trama. Una vez transcurrido este tiempo sin recepción de una trama válida se detiene el móvil desactivando los motores.

Con las consideraciones anteriores se genera el siguiente pseudocódigo:

1. Configuración del microcontrolador: Puertos y registros. 2. Almacenamiento del código de identificación, ID, y el código

de canales en la memoria RAM. 3. Inicialización de Banderas. 4. Monitoreo de presencia de señal, captura de la trama y

validación en la estructura de la trama. 5. Si se ha encontrado una trama válida pasa al punto 10. 6. Al no encontrar una trama válida verifica si ha transcurrido el

tiempo de seguridad desde su última inicialización. 7. Si ha pasado el tiempo de seguridad se desactivan los

motores. De lo contrario mantiene el último estado de los motores.

8. Se borran los registros en donde se almacenan los bytes de datos recibidos en la trama BYTE_2:BYTE_1.

9. Se borra TMP_BYTE y se regresa al punto 3.

42

10. Se inicializa el Timer que lleva el conteo del tiempo de seguridad, así como la bandera indicadora.

11. Se recupera de la memoria RAM el primer BYTE para compararlo con el byte más significativo recibido.

12. Si el dato recibido coincide con el esperado pasa al punto 14. 13. Si no hay coincidencia se regresa al paso 3. 14. Se recupera de la memoria RAM el segundo byte para

compararlo con el byte menos significativo recibido. 15. Si la comparación con el canal 1 coincide se ejecuta la acción

correspondiente al botón 1 y regresa al paso 3. 16. Se recupera de la memoria RAM el siguiente byte para

compararlo con el byte menos significativo recibido. 17. Si la comparación con el canal 2 coincide se ejecuta la acción

correspondiente al botón 2 y regresa al paso 3. 18. Se recupera de la RAM el siguiente byte para compararlo con

el byte menos significativo recibido. 19. Si la comparación con el canal 3 coincide se ejecuta la acción

correspondiente al botón 3 y regresa al punto 3. 20. No coincide con alguno de los canales y regresa al punto 3. Transmisor Código de Tx y canal Rx Motores en el

Receptor PIN del microcontrolador Correspondiente al botón

Código enviado Canal

Acción del Móvil MIF MIB MDF MDB

PA0 0000 01 1 Giro Der 1 0 0 1 PA1 0000 10 2 Adelante 1 0 1 0 PA2 0001 00 3 Giro Izq 0 1 1 0

No se presiona ninguno En bajo - Sin movimiento 0 0 0 0

Antes de proporcionar los diagramas de flujo que se obtienen a partir del pseudocódigo anterior se requiere establecer para algunos de estos puntos detalles particulares: En relación al punto 2, para llevar a cabo el almacenamiento, en la memoria RAM, del código de identificación, ID, para este par Transmisor-Receptor, y los códigos de los siguientes canales es necesario inicialmente establecer un registro de direccionamiento a la memoria RAM, en este caso el registro XH:XL (registro X de 16 bits). Como los datos de códigos a resguardar son 4, se escogen a las localidades 70h, 71h, 72h y 73h de la memoria RAM para tal fin (Las primeras 60h localidades son asignadas a los registros especiales del microcontrolador), con la siguiente distribución: La parte baja del ID en la localidad 70h, la parte alta del ID y el código del canal 1 en la localidad 71h, la parte alta del ID y el código del canal 2 en la localidad 72h y finalmente la parte alta del ID y el código del canal 3 en la localidad 73h. A continuación se muestra la forma en que se procede a nivel de código esta asignación.

Tabla 6.-Relaciones entre los botones, tramas y actuadores

43

… ;Se almacena en la RAM los códigos de los canales y la validación ;(0070H) <-- 0101 0101 clr XH ldi XL, 0x70 ;Se inicializa apuntador a la RAM ldi AUX, 0x55 ;Se carga código de validación en AUX ; st X+, AUX ;Almacena en la localidad 70h de la RAM (0101 0101) ;el dato e incrementa el apuntador a la RAM (X+) <-- AUX ldi AUX, 0x05 ;Carga en AUX el dato 0000 0101 perteneciente a xxxx xx01 ;Donde las x es el canal y el 01 pertenecen a la validación st X+, AUX ;Almacena en la RAM el dato del código del canal 1 e inc

;apuntador ldi AUX, 0x09 ;Carga en AUX el código del canal 2: 0000 1001 st X+, AUX ldi AUX, 0x11 ;Código 0001 0001 Canal 3 st X+, AUX … En relación al punto 4, las tareas de monitoreo de presencia de señal, captura de la trama y la validación de la estructura de la trama serán asignadas a la subrutina RECEIVE. En relación a los puntos 6, 7 y 10, referente al tiempo de seguridad, éste se implementa con el timer TCNT0, con la configuración del preescalable del microcontrolador y con un procedimiento de interrupción, generada por el “desbordamiento” del TCNT0. De manera que al entrar a la rutina de interrupción se inicializa una bandera, por la cual se estará sensando su estado en el programa principal, indicadora de que ha ocurrido un tiempo de 62 mseg. El preescalador se configura de tal forma que la frecuencia de oscilación del reloj principal sea dividido entre 1000 (Para una frecuencia de oscilación de 1 MHz, implica que los incrementos al timer TCNT0 se llevará a cabo cada milisegundo, que es el inverso de 1 kHz). Así, para medir un tiempo de 62 mseg. se configura al timer TCNT0 con el valor del complemento a dos de 62 en decimal. Es decir, se carga el valor de C2h en TCNT0 (C2h es el complemento a dos de 3Eh = 62 dec). A continuación se muestra a nivel de código las secciones referentes a la configuración del timer-counter, a la habilitación global de las interrupciones y a la subrutina de interrupción. En éstos será necesario manipular registros de configuración como TCNT0 (registro Timer-Counter), TIMSK (Habilita Interrupción de desbordamiento) y TCCR0 (Configuración del reloj preescalador), así como el uso de la instrucción “SEI” para la habilitación global de las interrupciones.

44

… .org OV F0addr ;declaración de la interrupción RJMP TIEMPO_SEGURO ; T/C0 VECTOR overflow, salta a el código cuando se genera

;interrupción …

;inicalización del preescalador LDI AUX,$C2 ; inicio del contador en c2 hex (194d) hasta ff(255d) OUT TCNT0,AUX ; carga el timer/counter LDI AUX,(1<<TOIE0) ; habilitacion de la interrupcion OUT TIMSK,AUX ; de ovf LDI AUX,$05 ; reloj preescalador = clk/1024 OUT TCCR0,AUX

;interrupción cada 1 ms SEI ;habilita interrupciones … ;código que activa BANDERAS cada vez que transcurren 62 ms TIEMPO_SEGURO: SER BANDERAS LDI AUX, 0xC2 OUT TCNT0,AUX ;Inicializa Timer para que transcurran 62 ms RETI … En relación a los puntos 15, 17 y 19, referente a la ejecución de la acción correspondiente al botón 1, botón 2 y botón 3, éstas se encargan de activar los motores para llevar a cabo el movimiento deseado. Para el botón 1:

• Activa Motor Izquierdo Adelante. • Activa Motor Derecho Atrás.

Para el botón 2: • Activa Motor Izquierdo Adelante. • Activa Motor Derecho Adelante.

Para el botón 3: • Activa Motor Izquierdo Atrás. • Activa Motor Derecho Adelante.

En la figura 36 se muestra inicialmente el diagrama de flujo del programa principal del receptor, en la que se plantean bloques generales que permiten dar un panorama de los pasos seguidos por el algoritmo. Mientras que en la figura 37a, 37b y 38 se muestran con más detalle estos pasos.

45

Fig. 36.- Diagrama de Flujo del Resumen del Programa Principal

46

Fig. 37 a).- Diagrama de Flujo del Programa Principal a detalle

47

Subrutina RECEIVE. La subrutina RECEIVE se encarga del monitoreo de presencia de señal, la captura de la trama y el análisis de su estructura; es decir, que tenga un Preámbulo, un Header, 16 datos y un tiempo de Guarda, como se estableció en la subsección: Protocolo de Transmisión RF. El algoritmo para comenzar la captura de la trama, inicialmente busca el inicio de ésta. Para ello el microcontrolador debe identificar sobre su terminal receptora (Bit 0 del Puerto A, PA0) un 1 lógico (Recuerde que la línea de transmisión se encuentra inactiva en un 0 lógico). Una vez ubicado este nivel de 1 lógico se supone el comienzo de la trama y pasa a la sección encargada de buscar el Header. A pesar de que al inicio de la trama están los pulsos del preámbulo, cada vez que la

a) b) c)

Fig. 38 a) Acción BOTON_1, b) Acción BOTON_2 y c) Acción BOTON_3

Fig. 37 b).-Continuación del Diagrama de Flujo del Programa Principal a detalle

48

señal pasa de un 1 lógico a un 0 lógico, el algoritmo supone el inicio del Header. Para que el programa identifique que se trata del Header y no alguno de los pulsos del Preámbulo, cada cambio de 1 a 0 lógico se hecha a andar un contador, que termina su conteo con la transmisión de 0 a 1 lógico. Si el valor de este contador se encuentra entre dos valores de datos previamente definidos, lo valida como el Header. De lo contrario sigue buscando el Header. Una vez validado el Header, se usa de alguna manera este conteo (Que representa a 10 Te, siendo Te la unidad de tiempo elemental y con una tolerancia del 20 %) para ser usado como referencia para sincronizar los tiempos de muestreo para la captura de los 16 bits de datos a recibir. De manera que los pulsos del Preámbulo sirven para sincronizar la señal con el receptor. Para llevar a cabo el muestreo de los datos, éstos se muestrean a la mitad de cada pulso (Recuerde que por cada bit transmitido se manda un nivel de 1 lógico, después el nivel del bit dato y finalmente un 0 lógico). Cada bit de dato recibido se introduce en un registro de corrimiento de 16 bits (BYTE_2:BYTE_1). Se implementa una subrutina llamada Rot_Shift para llevar a cabo el almacenamiento y corrimiento de los bits recibidos. Para que sea posible, fuera de esta subrutina, identificar si el formato fue válido o no se inicializa a 0 la bandera de acarreo para indicar Formato válido y a 1 para indicar Formato no válido. Recibe Preámbulo.

1. Verificar el pin RF y si no está a 1 lógico, indicar Formato no valido y Salir.

2. Esperar hasta que el bit RF este a 0 lógico (buscar flanco de bajada), con un tiempo de protección de 6 ms. Recibe posible Header.

3. Al encontrar un flanco de bajada supone que es el Header, inicializar contadores (CONT1:CONT0) para verificar si el Header es válido.

4. Esperar el Flanco de subida e incrementar el contador CONT1:CONT0 (10 ciclos de reloj por cada incremento), al pasar del límite superior, con cuenta de 512d, se le considera no válido y salir.

5. Indicar posible Formato válido. 6. Realizar la división entre 8 para ajustar los incrementos en un

solo registro (CONT0) y no utilizar los dos Contadores. 7. Respaldar el valor de la división en la pila. 8. Verificar si el valor de la división es menor que 35 (límite

inferior), en caso de serlo, recuperar valor de la división, indicar formato no valido y salir.

49

9. En caso de encontrarse en el intervalo de 35 d a 511/8=63 d, asignar a un contador (CONT1) el valor de 16 que son los datos esperados.

10. Recuperar el valor de la división respaldado anteriormente. 11. Copiar en otro contador (CONT2) el valor recuperado.

Recibe Datos.

12. Muestrear a la mitad del primer bit Te/2=200µs. 13. Esperar que en el muestreo RF sea Nivel alto, de lo contrario

salir. 14. Si es Nivel alto esperar un Te=400µs. 15. Muestrear a la mitad del segundo bit y almacenar el bit. 16. Llamar a la subrutina de Rot_Shift que rota a la derecha, y

almacenar el bit recibido. 17. Copiar el segundo bit recuperado en el MSB de la estructura

lineal, ya que este será el código. 18. Esperar un Te=400 µs. 19. Muestrear a la mitad del 3er bit. 20. Si RF no es 0 salir. 21. Si se han leído los 16 bits, indicar formato valido y salir. 22. Si no se han leído los 16 bits esperar el siguiente flanco de

subida, con un tiempo de protección de 4Te. 23. Al encontrar el flanco de subida regresar al punto 12.

IV.10.1 Subrutina Rot_Shift: La rutina Rot_Shift se encarga de rotar el registro de 16 bits BYTE_2:BYE_1, y es donde se van almacenando los bits recibidos. Esta subrutina es invocada por la rutina RECEIVE. La rotación de los bytes BYTE_2:BYTE_1 es como se muestra en la figura 39.

7 0 7 0

X -> -> BYTE_2 BYTE_1 No importa el valor del bit incrustado (X) en MSB del BYTE_2, ya que es en este bit donde se copia el dato recuperado. Los diagramas de flujo de la subrutina RECEIVE se muestran en las figuras 40, 41, 42, 43 y 44. Mientras que la de la rutina Rot_Shift en la figura 45. La codificación en ensamblador se encuentra en el Apéndice C.

Fig. 39.- Rotación de los bits de los registros BYTE_2 y BYTE_1

50

Fig. 40.-Diagrama de Flujo para la Recepción del Preámbulo

51

Fig. 41.-Diagrama de Flujo para la Recepción del Header

52

Fig. 42.-Diagrama de Flujo para la Recepción del bit a nivel Alto

53

Fig. 43.-Diagrama de Flujo para la Recepción del 2do bit (dato)

54

Fig. 44.-Diagrama de Flujo para la Recepción del 3er bit a nivel Bajo

55

V. Conclusiones Este trabajo me permitió desarrollar dos aplicaciones para un mini-Robot, uno con funcionamiento Automático y el otro Manual. Para llevar a cabo estas dos aplicaciones fue necesario resolver algunos problemas electro-mecánicos: Uno de estos fue el ruido que introduce los motores al sistema, que sirven como actuadores para dar movimiento al móvil, y se soluciono utilizando dos fuentes independientes, cada una con 4 baterías, uno para alimentar a los motores y el otro para los demás circuitos. También, se incluyo capacitores para filtrar señales parásitas como la inductancia del motor mismo. Otro problema que se presento son los falsos contactos, por lo que se decidió fabricar conectores y para ello se utilizaron diversos materiales tales como: el cable plano, los pin-Header macho y hembra, los conectores de cable plano y el termofilt, permitiendo obtener un trabajo de calidad electrónica que es menos propenso a fallas y en su caso es más fácil encontrar los puntos en donde se originan éstas. En particular para el mini-Robot Automático, el diseño físico del móvil influyo en su funcionamiento, sobre todo en la selección de la distancia entre los sensores ópticos CNY70 y la superficie a detectar, debido a que la respuesta de los sensores depende directamente de la distancia y la posición que tienen éstos con la superficie a detectar. En relación al mini-Robot Manual, en la parte de la transmisión y Recepción también surgieron varios problemas, uno de ellos se encontró al momento del análisis de la trama, ya que al llegar la última trama y esperar el tiempo de guarda, el móvil sufría un pequeño frenado perceptible, como solución se implemento un tiempo de seguridad de 62 ms suficiente para que no se perdiera la inercia y el móvil continuará con su último estado y no se notará el frenado.

Fig. 45.-Diagrama de Flujo para la rutina Rot_Shift

56

Además para implementar, en el móvil Manual, los 3 Push-Botoms requeridos como control por el usuario, para establecer la trayectoria del móvil, se adapto un “control” de videojuegos de manera que solo tres botones de flecha (En la figura 46 los 4 botones en cruz) se

utilizaron como herramienta bajo el principio de funcionamiento de un switch (abierto-cerrado). La flecha que se encuentra enfrente permite el movimiento del móvil hacia delante, la flecha ubicada a la derecha el movimiento a la derecha y la flecha a la izquierda el movimiento a la izquierda.

Se hace notar que el mini-Robot Manual es una versión modificada del modo Automático, ya que se utilizó el mismo móvil, cambiando algunos componentes en la parte del Hardware y la mayor parte del software. En cuanto al diseño lógico se decidió utilizar un dispositivo AVR, así como su programación en lenguaje ensamblador, ya que este es el dispositivo con el que tengo una mayor familiarización. Sin embargo es posible utilizar cualquier otro microcontrolador. Es importante aclarar que el microcontrolador ATmega8535 en particular, esta por así decirlo “sobrado” para este proyecto, ya que su arquitectura es muy robusta, pero es posible utilizar otro dispositivo con características más limitadas en cuanto a puertos, memoria, y en general otras prestaciones. En cuanto a las modificaciones futuras se observa que no será un gran problema, por ejemplo, los circuitos que fueron conectados a la protoboard, se pueden implementar en un circuito impreso. También es posible remplazar el “control” de videojuegos por un Joystick. Este Robot puede ser alterado posteriormente para que realice una secuencia de pasos programados o más de tres movimientos o funcionar de manera manual y automática al mismo tiempo. En este proyecto se refleja un enorme ámbito de posibles aplicaciones, tanto en la industria, el entretenimiento, etc., por lo que esta abierto a “evolucionar”, con aplicación a nuevas ideas, o simplemente dar seguimiento de futuros cambios de tecnologías, quizá utilizar otros sensores, circuitos más pequeños que consuman menos potencia, etc.

VI. Bibliografía • Angulo José; Romero. “Microcontroladores PIC Diseño práctico de

aplicaciones 2da parte.” Segunda Edición. Editorial Mc Graw Hill. España 2000. ISBN: 84-481-2858-3.

Fig. 46.-Control Family

57

• Palacios, Enrique; Remiro; López. “Microcontrolador PIC16F84. Desarrollo de Proyectos.” Segunda Edición. Editorial Alfa omega-RaMa. México 2006. ISBN: 970-15-1174-3.

En la web:

• www.xataka.com • www.esi2.us.es • www.unipamplona.edu.co • www.jcrada.googlepages.com • http://alcabot.org/seminario2006/Trabajos/VictorManuelLopezManzano.p

df Otros Documentos:

• Datasheet. CNY70. • Datasheet. L293D. • Datasheet. TWS-BS-6 (315 MHz). • Datasheet. RWS-374-3 (315MHz). • Datasheet. ATMEGA8535. • INSTRUCTION SET MANUAL. ATMEGA8535. • Novice. (atmel.com). • Basic Interrupts and I/O. (atmel.com). • Revista: Barco; Imbacuan; Ordoñez. “Construcción de un robot.

seguidor de línea”. Universidad de Nariño.

VII. Apéndice A: Código para el Seguidor de Línea ; <<<<<<<<<<<<<<< SEGUIDOR DE LINEA >>>>>>>>>>>>>>> ; | ; | "MINI-ROBOT" ; | ---- 2 SENSORES ---- ; |Febrero 10 2007 IVAN HUR MOTA NAVARRO ; | ; | ; <<<<<<<<<<<<<<<<<<<<<<< V 1.0 >>>>>>>>>>>>>>>>>>>>>>>> .include "m8535def.inc" .EQU MOTORI =0 ;RUEDA DERECHA ADELANTE PORT C .EQU MOTORD =1 ;RUEDA IZQUIERDA ADELANTE PORT C .EQU LED =7 ;LED INDICADOR DE ENCENDIDO PORTC .EQU SI =0 ;SENSOR IZQUIERDO SIGUE LINEA PORTA .EQU SD =1 ;SENSOR DERECHO SIGUE LINEA PORTA .DEF CONT1 =R16 ;DEFINICION DE REGISTROS CONTADORES .DEF CONT2 =R17 .DEF CONT3 =R18 .DEF AUX1 =R19 ;REGISTRO AUXILIAR .ORG $0000 ; Apunta a la localidad $0000 de la Memoria de Programa RJMP RESET ; Salto a la etiqueta “RESET” RESET:

58

LDI AUX1, LOW(RAMEND) ;INICIALIZACION DE LA PILA- OUT SPL, AUX1 ;EN LA ULTIMA MEMORIA DE LA- LDI AUX1, HIGH(RAMEND) ;RAM OUT SPH, AUX1 ;ACTIVAR AL PUERTO A COMO ENTRADAS LDI AUX1, 0x00 OUT DDRA, AUX1 ;ACTIVAR AL PUERTO C COMO SALIDAS LDI AUX1, 0x83 OUT DDRC, AUX1 SBI PORTC, LED ;ENCIENDE EL LED ON/OFF SIGUE_LINEA: SBIS PINA, SI ;VERIFICA SI EL "SI" ENCONTRO LINEA Y BRINCA ;UNA INSTRUCCION SI HAY LINEA RJMP VER_PARO_DER ;AL NO ENCONTRAR SALTA A LA ETIQUETA SBIS PINA, SD ;VERIFICA EL SENSOR SD Y BRINCA SI DETECTA LINEA RJMP SOLO_PARO_IZQ ;SE DETECTA QUE SOLO IZQUIERDO DETECTO CBI PORTC, MOTORI ;PARA MOTOR IZQ CBI PORTC, MOTORD ;PARA MOTOR DER RJMP SIGUE_LINEA ;REGRESA AL INICIO DEL LOOP VER_PARO_DER: SBIS PINA, SD ;VERIFICA SENSOR DERECHO Y BRINCA UNA INSTRUCCIÓN ;SI ENCONTRO LÍNEA RJMP NO_LINEA ;NINGUN SENSOR DETECTO LINEA SBI PORTC, MOTORI ;ENCIENDE MOTOR IZQ CBI PORTC, MOTORD ;APAGA MOTOR DER RJMP SIGUE_LINEA ;SALTA AL INICIO DEL LOOP SOLO_PARO_IZQ: CBI PORTC, MOTORI ;APAGA MOTOR IZQ SBI PORTC, MOTORD ;ENCIENDE MOTOR DER RJMP SIGUE_LINEA ;SALTA AL INICIO DEL LOOP NO_LINEA: SBI PORTC, MOTORI ;ENCIENDE MOTOR IZQ SBI PORTC, MOTORD ;ENCIENDE MOTOR DER RJMP SIGUE_LINEA

VIII. Apéndice B: Código para la Transmisión ; <<<<<<<<<<<<<<< TRANSMISOR >>>>>>>>>>>>>>> ; | ; | "6 Canales" ; | ---- RF ---- ; | Febrero 10 2008 ; | IVAN HUR MOTA NAVARRO ; | ; <<<<<<<<<<<<<<<<<<<<<<< V 1.0 >>>>>>>>>>>>>>>>>>>>>>>> ; ; .include "m8535def.inc" ;Definición de registros .def AUX = R16 .def rEntrada= R17

59

.def Trama0 = R18

.def Trama1 = R19

.def Repite = R20

.def NUM_BITS = R21

.def CONT1 = R22

.def CONT2 = R23

.def CONT3 = R24

.def CEROS = R25 clr CEROS ;se inicializa el registro a ceros ldi AUX, LOW(RAMEND) ;INICIALIZACION DE LA PILA- out SPL, AUX ;EN LA ULTIMA LOCALIDAD DE LA- ldi AUX, HIGH(RAMEND) ;RAM out SPH, AUX ; clr AUX out DDRA, AUX ;Conf. de port A como entrada A5-A0 ser AUX out PORTA, AUX ;Conf. de las resistencias pull ups ldi AUX, 0x03 ;B0 led, B1 Transmisor out DDRB, AUX ;Conf. de B1-B0 como salida sbi PORTB, 0 ;Activación del led MAIN: ldi Trama0, 0x55 ;b01010101 ldi Trama1, 0x01 ;b00000001 ;se inicializa MSB-0000 0001 0101 0101-lsb ;MAIN: in Rentrada, PINA ;Se lee el puerto A ori Rentrada, $C0 ;Se elimina cualquier ruido de los ultimos 2 bits b11000000 ser AUX ;Se activa a unos el registro auxiliar cp Rentrada, AUX ;Se compara la entrada a unos breq MAIN ;Espera hasta apretarse un boton a nivel bajo ldi Trama1, 0x01 com Rentrada ;Se aplica operación not lsl Rentrada lsl Rentrada ;Desplazamiento doble a la izq del registro or Trama1, Rentrada ;Se concatena Trama1 (2 bits)y Rentrada (6 bits) rcall TRANSMITE rjmp MAIN ;*************************************************** ;Subrrutina:TRANSMITE ;Función:Se encarga de transmitir Trama0 y Trama1, asi como ;el preambulo y el header TRANSMITE: ldi Repite, 0x04 PREAMBULO: sbi PORTB, 1 ;Activa la salida a uno para enviar preambulo rcall RETARDO_400us ;se llama al retardo de Te=400us dec Repite ;decrementa hasta llegar a cero ldi AUX, 0x00 ; cp Repite, AUX ;Verifica si ya no hay repeticiones breq HEADER ;Salta a la cabecera una vez terminada la cabecera cbi PORTB,1 ;Desactiva la salida 1 del puerto B RF rcall RETARDO_400us ;se llama al retardo de Te=400us

60

rjmp PREAMBULO ;salta a enviar otro pulso del preambulo HEADER: cbi PORTB, 1 ;desactiva a 0 el inicio del header rcall RETARDO_4ms ;se llama al retardo del header ldi NUM_BITS, 16 ;inicializa la cuenta de 16 bits de datos DATOS: sbi PORTB, 1 ;envia 1/3 nivel alto del dato rcall RETARDO_400us ror Trama1 ror Trama0 brcc DATO_ES_Z ;se desvia si el acarreo es cero, se activa RF (invertido) cbi PORTB, 1 ;el dato era 1, se invierte RF=0 rjmp SIGUE_3_3 ;salta al envio de la 3ra parte DATO_ES_Z: sbi PORTB, 1 ;el dato era 0, se invierte RF=1 SIGUE_3_3: rcall RETARDO_400us cbi PORTB, 1 ;envia 3/3 nivel bajo rcall RETARDO_400us dec NUM_BITS brne DATOS rcall RETARDO_6ms ret ;*************************************************** ;*************************************************** ;Subrrutina: RETARDO_400us ;Descripción: Esta rutina sirve como retardo de 399us ya que el Te es de 400 us RETARDO_400us: LDI CONT1, 0X04 LOOPE_400us: nop nop LDI CONT2, 23 LOOPI_400us: DEC CONT2 CP CONT2, CEROS BRNE LOOPI_400us DEC CONT1 CP CONT1, CEROS BRNE LOOPE_400us ret ;*************************************************** ;*************************************************** ;Subrrutina: RETARDO_4ms ;Descripción: Esta rutina sirve como retardo de 4.007 ms para enviar el header RETARDO_4ms: LDI CONT1, 40 LOOPE_4ms: nop nop nop nop LDI CONT2, 23 LOOPI_4ms: DEC CONT2 CP CONT2, CEROS BRNE LOOPI_4ms

61

DEC CONT1 CP CONT1, CEROS BRNE LOOPE_4ms ret ;*************************************************** ;*************************************************** ;Subrrutina: RETARDO_6ms ;Descripción: Esta rutina sirve como retardo de 6.007 ms el tiempo de guarda RETARDO_6ms: LDI CONT1, 60 LOOPE_6ms: nop nop nop nop LDI CONT2, 23 LOOPI_6ms: DEC CONT2 CP CONT2, CEROS BRNE LOOPI_6ms DEC CONT1 CP CONT1, CEROS BRNE LOOPE_6ms ret ;***************************************************

IX. Apéndice C: Código para la Recepción ; <<<<<<<<<<<<<<< RECEPTOR DECODIFICADOR >>>>>>>>>>>>>>> ; | ; | "6 Canales" ; | ---- RF ---- ; | Febrero 10 2008 IVAN HUR MOTA NAVARRO ; | ; | ; <<<<<<<<<<<<<<<<<<<<<<< V 1.0 >>>>>>>>>>>>>>>>>>>>>>>> ; ; .include "m8535def.inc" .def AUX = R16 ;Definición del registro auxiliar .def BYTE_1 = R17 ;Definición del BYTE menos significativo del dato .def BYTE_2 = R18 ;Definición del BYTE más significativo del dato .def TMP_BYTE= R19 ;Definición del BYTE temporal .def CONT2 = R20 ;Definición del contador dos .def CONT_TEMP= R21 .def CONT0 = R24 ;Definición del contador cero .def CONT1 = R25 ;Definición del contador uno .def CONTRET1= R28 .def CONTRET2= R29 .def CONTRET3= R30 .def BANDERAS= R31 ;Registro utilizado para el Timer .ORG $0000 RJMP RESET ; REINICIO DE REGISTROS .org OVF0addr rjmp TIEMPO_SEGURO ; T/C0 VECTOR overflow RESET:

62

ldi AUX, LOW(RAMEND) ;INICIALIZACION DE LA PILA- out SPL, AUX ;EN LA ULTIMA LOCALIDAD DE LA- ldi AUX, HIGH(RAMEND) ;RAM out SPH, AUX ; clr AUX out DDRA, AUX ;Conf. del port A como entrada A0 BIT RF ldi AUX, 0xBF ;CONF. DEL PORT B COMO SALIDA 1011 1111 out DDRB, AUX ;B7 LED, (B5, B4, B3,B2,B1,B0) ; (CANAL6,CANAL5,IF,IB,DF,DB) ;IF:Motor izquierdo al frente ;IB:Motor izquierdo atras ;DF:Motor derecho al frente ;DB:Motor derecho atras clr BANDERAS ;Inicializa el registro banderas ;INICALIZACION DEL PREESCALADOR ldi AUX,$C2 ; INICIO DEL CONTADOR EN C2 hex (194d) HASTA FF(255d) out TCNT0,AUX ; CARGA EL Timer/counter ldi AUX,(1<<TOIE0) ; HABILITACION DE LA INTERRUPCION out TIMSK,AUX ; DE OVF ldi AUX,$05 ; RELOJ PREESCALADOR = clk/1024 out TCCR0,AUX ;INTERRUPCIÓN CADA 1 ms SEI ;HABILITA INTERRUPCIONES ;********************************************************************************* ;Se almacena en la RAM los códigos de los canales y la validación ; ;(0070H) <-- 0101 0101 clr XH ldi XL, 0x70 ;Se inicializa apuntador a la RAM ldi AUX, 0x55 ;Se carga código de validación en AUX ; st X+, AUX ;Almacena en la localidad 70h de la RAM (0101 0101) ;el dato e incrementa el apuntador a la RAM (X+) <-- AUX ldi AUX, 0x05 ;Carga en AUX el dato 0000 0101 perteneciente a xxxx xx01 ;donde las x es el canal y el 01 pertenecen a la validación st X+, AUX ;Almacena en la RAM el dato del código del canal 1 e inc apuntador ldi AUX, 0x09 ;Carga en AUX el código del canal 2 0000 1001 st X+, AUX ldi AUX, 0x11 ;Código 0001 0001 Canal 3 st X+, AUX ;---------------------------------------------------------------------------------- clr BYTE_1 ;Inicializa registros clr BYTE_2 sbi PORTB, 7 ;Activación del led M_LOOP: rcall RECEIVE ;Llama a la subrutina receive brcc CHK_CODE ;Verifica la bandera de carry que indica formato valido cpi BANDERAS, 0xFF ;Paso el tiempo de seguridad brne M_LOOP ldi AUX,0x80 ;Si ya paso apagar motores out PORTB,AUX clr BANDERAS ;Inicializa banderas clr BYTE_1 ;Inicializa registros

63

clr BYTE_2 clr TMP_BYTE rjmp M_LOOP ;Nuevamente verifica, ya que no fue formato valido- ;o no se recibio ninguna trama CHK_CODE: ;Se encontro formato válido y va a verificar código ldi AUX, 0xC2 ; out TCNT0,AUX ;Inicializa Timer para que transcurran 56 ms clr BANDERAS clr XH ;inicializa apuntador a la dir 0070H ldi XL, 0x70 ld TMP_BYTE, X+ ;Carga en el reg TEMP_BYTE el dato en la dir 0x0070 "la validación" cp TMP_BYTE, BYTE_1 ;Compara la validación con el byte menos significativo recibido breq CHK_UNO ;Si son iguales brinca a verificar que canal se envio rjmp M_LOOP ;No fue valido el dato regresa a verificar otro CHK_UNO: ld TMP_BYTE, X+ ;Carga en el reg TMP_BYTE el dato de 0071h código del primer canal cp TMP_BYTE, BYTE_2 ;Compara con el código del canal breq BOTON_1 ;Si son identicos salta a ejecutar las instrucciones coorespondientes CHK_DOS: ;Si no fueron iguales pasa a verificar el canal 2 y asi hasta- ;encontrar un canal válido ld TMP_BYTE, X+ cp TMP_BYTE, BYTE_2 breq BOTON_2 CHK_TRES: ld TMP_BYTE, X+ cp TMP_BYTE, BYTE_2 breq BOTON_3 rjmp M_LOOP ;Se encontraron canales validos BOTON_1: ;Movimiento adelante motor izquierdo y atras motor derecho (giro derecho)

; ;adelante atras

ldi AUX, 0x89 ;Activa los pines B0 y B3 1000 10 01 out PORTB, AUX rjmp M_LOOP BOTON_2: ;Movimiento adelante motor izquierdo y adelante motor derecho (adelante) ;adelante adelante ldi AUX, 0x8A ;Activa los pines B1 y B3 1000 10 10 out PORTB, AUX rjmp M_LOOP BOTON_3: ;Movimiento atras motor izquierdo y adelante motor derecho (giro izquierdo) ; ;atras adelante ldi AUX, 0x86 ;Activa los pines B2 y B1 1000 01 10 out PORTB, AUX rjmp M_LOOP

64

;=================================================================================== ; SUB RUTINA "RECEIVE" ; * * * * * RECEPCION DE RF * * * * * ; Identifica el inicio del Header pasando por alto el preambulo, ya que lo desecha, ; calibra la velocidad de transmisión y recibe los 16 bits de datos. Al final ; Indica por medio de la bandera de carry si se encontro una trama con formato válido ;=================================================================================== RECEIVE: sbic PINA, 0 ;Verifica si el bit RF esta encendido (A0) rjmp PREAMBULO SALE: sec ;Activa la bandera de acarreo SREG, C <-- '1' ret PREAMBULO: ldi CONT1, 0x06 ;Almacena un 6 en el contador más externo (6x1mS) RCV_0: ldi CONT0, 200 ;Almacena un 200d en CONT0 para realizar la cuenta de 1mS (200x5uS)=1mS RCV_1: sbis PINA, 0 ;Brinca una instrucción si RF(A0)=1 es un nivel alto del preambulo rjmp SUP_HEADER_INIT ;Salta suponiendo que es el inicio del header al encontrar flanco de bajada dec CONT0 ;Decreemnta contador para realizar la cuenta de 1mS brne RCV_1 ;Si no ha pasado 1mS salta a verificar flanco de bajada dec CONT1 ;Decrementa contador más externo al pasar cada mS brne RCV_0 ;Salat si no han pasdo los 6mS SUP_HEADER_INIT: clr CONT0 ;Se inicializa contador a ceros, borra registro clr CONT1 ;Inicializa contador RCV_3: sbic PINA, 0 ;Brinca si RF=0, supone el inicio del header de 4mS tolerancia de 30% rjmp RCV_6 ;Se encontro un flanco de subida, posiblemente el priemer dato o un pulso- ;del preambulo, si este no ha terminado adiw CONT1:CONT0, 1 ;Incrementa el registro de 16 bits en 1, CONT0 debe ser R24, R26, R28 o R30 nop nop sbrc CONT1, 1 ;Verifica el bit 1 del registro CONT1, ya que si este registro es activado- ;significa que se ha incrementado el registro de 2 bytes 512 veces, que es ;el límite superior permitido para la tolerancia de 30% aprox. 5.2 mS rjmp SALE ;Si sobrepasa 5.2 mS descarta que es un header valido rjmp RCV_3 ;Si no han pasado 5.2 mS verifica nuevamente flanco de subida RCV_6: clc ;Se desactiva a la bandera de carry o se borra ror CONT1 ;Se realiza una rotación a la dercha del byte más significativo, bit 0 pasa a- ;la bandera de Carry ror CONT0 ;Se realiza una rotación a la dercha del byte menos significativo, Bandera ;de Carry pasa al bit 7 de CONT0, practicamente se realiza una división entre 2 ror CONT1 ror CONT0 ;División entre 4 ror CONT1 ror CONT0 ;División entre 8 para verificar límite inferior push CONT0 ;Se respalda en la pila el registro, ya que este se manipula

subi CONT0, 35 ;Límite inferior 35x8x10uS=2.8mS, si el header no pasa este límite, no es ;valido

brmi NO_VALID ;Si el contador no sobrepaso el límite inferior el header no es valido rjmp RCV_7 ;El contador esta en el intervalo de 2.8mS<header<5.2mS NO_VALID: pop CONT0 ;Recupera el CONT0, para que la pila no se desborde

65

rjmp SALE ;Como no fue un Header valido regresa a encontrar otro flanco de subida RCV_7: nop nop nop nop ldi CONT1, 16 ;Total de bits de datos a recibir pop CONT0 ;Se recupera a CONT0 ya que este fue modificado mov CONT2, CONT0 ;Se copia el valor de CONT0 en CONT2 subi CONT2, 7 ;Se resta 5 para el ajuste de tiempo, probablemente CONT0 tiene un 50, ; con esto se tiene un retardo de 200uS, la mitad del bit 1/3 en 'ON' DL1: dec CONT2 ;Se decrementa contador para controlar el momento del siguiente muestreo breq MUESTREO_1_3 rjmp DL1 MUESTREO_1_3: sbis PINA, 0 ;Si detecta un uno, es valido, ya que es lo esperado, es la mitad del bit 1/3 rjmp SALE ;Si no se detecta un 1 no es un formato valido mov CONT2, CONT0 ;El siguiente muestreo es despues de 400mS, a la mitad del bit 2/3 dec CONT2 ;50-1 para ajuste de tiempo, 50x8uS=400uS nop nop nop DL2: nop nop nop nop dec CONT2 ;Decrementa el contador para cumplir el retardo de 400uS breq CHEK_BIT ;Si han transcurrido 400uS salta al muestreo del bit dato rjmp DL2 ;Si no se ha cumplido el retardo regresa a decrementar CHEK_BIT: clt ;Pone la bandera T del registro de banderas a cero "esta invertido" sbis PINA, 0 ;Muestrea el bit o dato que se encuentra en A0 set ;Pone a uno la bandera T si existe un 1 en RF(A0) "esta invertido" ;si RF=1 =>Bit=0 si RF=0 =>1 ROTAR: rcall ROT_SHIFT ;Resguarda los bits recibidos anteriormente con 1 corrimiento a la derecha- ;de BYTE_2:BYTE_1 bld BYTE_2, 7 ;Se copia al bit más significativo del byte 2 el valor existente de la- ;bandera T mov CONT2, CONT0 ;Se actualiza a CONT2 con el valor correspondiente para un Te de CONT0 subi CONT2, 2 ;Se le resta al contador 2, para ajuste de tiempo por las inst precedidas DL3: nop nop nop nop dec CONT2 ;Se realiza el decremento para que se realice el retardo de un Te breq CHEK_0 ;Si ha terminado el retardo pasa a muestrear el bit 3/3 rjmp DL3 ;Sigue dentro del loop para el retardo CHEK_0: sbic PINA, 0 ;Muestrea a la mitad del bit 3/3, que en el formato este debe ser 0 rjmp SALE ;Se detecto un formato no válido, por lo tanto sale dec CONT1 ;Decrementa el contador de bits brne RCV_8 ;Si no se han recibido los 16 bits espera el sig frente de subida clc ret

66

RCV_8: ldi CONT_TEMP, 4 ;Se busca el frente de subida con un tiempo de protección de 4 Te RCV_10A: mov CONT2, CONT0 ;Se copia el valor correspondiente para tener un retardo de un Te RCV_10B: nop nop sbis PINA, 0 ;Espera el flanco de subida, para muestrearlo a la mitad rjmp LOOP_PROTEC ;Si no se ha encontrado el flanco de subida continua en el loop mov CONT2, CONT0 ;Copia el valor del contador en CONT2, se desea que el loop siguiente- ;se ejecute 50 veces equivalente a 200uS subi CONT2, 2 ;Ajuste de tiempo rjmp DL1 LOOP_PROTEC: dec CONT2 ;Decrementa contador interno, para cumplir el retardo brne RCV_10B ;Si no ha terminado el retardo continua en el loop interno dec CONT_TEMP ;Al terminar el retardo decrementa contador más externo brne RCV_10A ;Si no ha terminado el tiempo de protección regresa al loop más externo sec ;Si ya termino el retardo, no es valido el formato- ;Activa la bandera de acarreo SREG, C <-- '1' ret ;=================================================================================== ; SUB RUTINA "ROT_SHIFT" ; * * * * * ROTACION A LA DERECHA * * * * * ; Realiza una rotación a la derecha de los bytes BYTE_2:BYTE_1 visto como un solo ; registro de 16 bits, esto sirve para almacenar los bits recibidos con anterioridad ;=================================================================================== ROT_SHIFT: nop ror BYTE_2 ;Se realiza una rotación a la derecha sin importar el dato que se introduzca- ror BYTE_1 ;por medio de la bandera Carry ya que posteriormente se actualiza ret ;================================================================ ;Interrupción: TIEMPO_SEGURO ;Descripción: Esta interrupción verifica por medio de un timer ;que no hayan transcurrido ;================================================================ TIEMPO_SEGURO: ser BANDERAS ldi AUX, 0xC2 ; out TCNT0,AUX ;Inicializa Timer para que transcurran 62 ms reti