87
PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIME BRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS 1

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

  • Upload
    lamnhan

  • View
    225

  • Download
    1

Embed Size (px)

Citation preview

Page 1: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

1

Page 2: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

ÍNDICE.PAG.

CAPITULO I

1.1 OBJETIVOS 41.2 ALCANCES 41.3 JUSTIFICACIÓN 4

CAPITULO II

2.1 INTRODUCCIÓN 5

CAPITULO III3 MICROCONTROLADOR PIC 63.1 PIC 63.2 LOS PIC16F8XX 63.3 EL PIC16F877A 73.4 CARACTERÍSTICAS RELEVANTES DEL PIC16F877A 93.5 ARQUITECTURA DEL PIC16F877A 103.6 ARQUITECTURA INTERNA DEL PI16F877A 113.7 ORGANIZACIÓN DE LA MEMORIA 133.8 PRINCIPALES REGISTROS SFR 153.9 CLASIFICACIÓN DE INSTRUCCIONES 213.10 DIVISIÓN DE INSTRUCCIONES 22

3.10.1 INSTRUCCIONES QUE MANEJAN REGISTROS 223.10.2 INSTRUCCIONES QUE MANEJAN BITS 233.10.3 INSTRUCCIONES DE BRINCA 233.10.4 INSTRUCCIONES QUE MANEJAN OPERADORES INMEDIATOS 243.10.5 INSTRUCCIONES DE CONTROL Y ESPECIALES 24

CAPITULO IV

4.1 COMUNICACIÓN SERIAL ASÍNCRONA 254.2 MODO ASÍNCRONO 254.3 GENERADOR DE BAUDIOS 254.4 TRANSMISOR ASÍNCRONO 264.5 RECEPTOR ASÍNCRONO 27

CAPITULO V

5.1 HERRAMIENTAS 295.2 INTRODUCCIÓN A MPLAB 295.3 USO DE MPLAB 30

2

Page 3: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

CAPITULO VI

6.1 CONCEPTOS DE ROBÓTICA 386.2 ROBOTS INDUSTRIALES 386.3 CLASIFICACIÓN DE ROBOTS 396.4 BRAZO ROBÓTICO K-680 39

CAPITULO VII7.1 DESARROLLO 417.2 COMUNICACIÓN COMPUTADORA-PIC16F877A 417.3 SOFTWARE DEL BRAZO 42

7.3.1 ARCHIVOS FUENTE DE C 437.3.2 ARCHIVOS ENSAMBLADOR 45

7.4 HARDWARE DEL BRAZO 46

CAPITULO VIII

8.1 INTERFACE DE USUARIO 49

CAPITULO IX

9.1 CONCLUSIONES 529.2 BIBLIOGRAFÍA 529.3 REFERENCIAS ELECTRÓNICAS 53

APÉNDICE A 54

APÉNDICE B 74

3

Page 4: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

CAPITULO I

1.1 OBJETIVOS.

Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El diseño debe ser capaz de cubrir los siguientes requerimientos: El usuario podrá mover en tiempo real cada uno de los motores (uno a la vez). El brazo robotizado podrá ejecutar rutinas de movimiento previamente establecidas.

• Consolidar los conocimientos adquiridos a lo largo de la carrera y aplicarlos al diseño del sistema antes mencionado.

• Elaborar el presente reporte con la finalidad de que otra persona logre reproducir el

mismo sistema de control, con resultados similares o iguales a los obtenidos en este proyecto.

1.2 ALCANCES.

El desarrollo de la automatización, especialmente en los procesos en línea, ha permitido al hombre facilitar sus labores e incrementar su productividad. Los brazos robotizados se utilizan principalmente para trabajos repetitivos que requieran precisión o para labores que ponen en peligro la vida humana o las dos cosas al mismo tiempo. Por lo que el alcance de este proyecto es diseñar un sistema de control de un brazo robotizado que pueda ser manejado por un usuario de una forma fácil, eficiente, practica y a bajo costo, esto con la ayuda del PIC 16F877A.

1.3 JUSTIFICACIÓN.

El diseño y desarrollo de mejoras en la automatización en las industrias, en la medicina o en los hogares hace que el uso de robots sea más frecuente, por lo que estos tienden a ser cada día más sofisticados pero a su vez la interacción con las personas debe de ser más cómoda, por lo que se tienen que buscar mejores sistemas de control.

Tenemos que los microcontroladores son circuitos integrados que poseen todas las características de un computador completo. Puede ser programado para que cumpla una tarea determinada a muy bajo costo. También pueden tener extensas áreas de aplicación, por lo que se exige un gigantesco trabajo de diseño y fabricación. Aprender a manejar y aplicar microcontroladores sólo se consigue desarrollando tácticamente diseños reales. Un ejemplo de ellos es el famoso PIC16F877A de la familia PIC16F8X.

Por los beneficios en costos y versatilidad que representa la utilización del PIC16F877A para la manipulación de sistemas de control, lo elegimos para el desarrollo de este proyecto.

4

Page 5: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

CAPITULO II

2.1 INTRODUCCIÓN.

La automatización es algo prácticamente imprescindible en el mundo de la industria actual, dados los niveles de productividad, fiabilidad y rentabilidad que han de cumplir los productos elaborados a fin de ser competitivos en el mercado.

Los sistemas propuestos por el mercado actual están apoyados por el empleo de las más conocidas marcas en lo que respecta a sensores. Estos elementos se conectan a potentes unidades PLC (“Controladores Lógicos Programable”) que son las encargadas de procesar la información del mundo exterior en tiempo real, soportando además las comunicaciones con un Centro de Control y aceptando las más diversas topologías de conectividad.

Las aplicaciones típicas para estos sistemas son las de automatización de procesos, aplicaciones para Control, Telemando y Telemetría en instalaciones fabriles, hidráulicas y residenciales.

Los controladores lógicos programables (PLC’s) presentan una serie de ventajas de control que posibilitan amortizar su valor a muy corto plazo. Ofrecen un completo rango en los últimos avances de la tecnología de automatización. El uso de Controladores Lógicos Programables (PLC), comienza en las plantas envasadoras, automotrices o de procesos químicos, y actualmente se extiende más allá del contexto de las industrias hacia aplicaciones tales como sistemas de alarmas, controles de iluminación de centros comerciales o controles de temperatura y humedad en invernaderos. En este momento se puede comentar que en procesos industriales complejos, en los que interviene información de varios sensores, los sistemas de control combinan una gran cantidad de bloques funcionales para controlar que las diferentes máquinas (cintas transportadoras, grúas, estampadoras, brazos mecánicos, etc.) funcionen siguiendo una determinada secuencia de trabajo. Cuando es necesario realizar cambios en la secuencia del proceso (para introducir modificaciones en los productos) es preciso diseñar y construir nuevos circuitos y nuevos cableados entre los elementos de control: esta tarea lleva tiempo y en la producción todo tiempo tiene su costo.

Existen dispositivos electrónicos que permiten modificar conexiones entre elementos simplemente pulsando las teclas en un teclado. Las conexiones se "programan". Estos dispositivos reciben la información de los sensores y envían la información a los elementos de salida, de acuerdo con el programa almacenado.

El desarrollo de la automatización, especialmente en los procesos en línea, ha permitido al hombre facilitar sus labores e incrementar su productividad. Los brazos robóticos se utilizan principalmente para trabajos repetitivos que requieran precisión o para labores que ponen en peligro la vida humana o las dos cosas al mismo tiempo.

5

Page 6: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

Para realizar estas funciones es importante dotar al brazo de las herramientas necesarias para su correcto control. Como todo sistema, se tiene variables de entrada, de salida y el proceso requerido para manejar estar señales así como una retroalimentación, para configurar un sistema de lazo cerrado estable.

CAPITULO III

3. MICROCONTROLADOR PIC.

3.1 PIC.

Un microcontrolador es un Circuito Integrado Programable o Programable Integrated Circuit (PIC) que contiene todos los componentes de un computador, se emplea para realizar una tarea determinada para la cual ha sido programado. • Dispone de procesador, memoria para el programa y los datos, líneas de entrada y salida de datos y suele estar asociado a múltiples recursos auxiliares. • Puede controlar cualquier cosa y suele estar incluido en el mismo dispositivo que controla. - Máquinas expendedora de productos. - Controles de acceso tanto de personas como de objetos - Máquinas, herramientas, motores y temporizadores. - Sistemas autónomos de control, incendio, humedad, temperatura. etc. - Telefonía, Automatismos, Medicina, Automoción, etc. etc.

Para el usuario que por primera ocasión estudia microcontroladores, resulta más sencillo aprender primero a lo referente a la construcción interna del dispositivo y la arquitectura general de los microcontroladores y una vez dominada pasar entonces a los detalles electrónicos de la circuitería y la programación.

3.2 LOS PIC16F87X.

Casi todos los fabricantes de microprocesadores lo son también de microcontroladores, en el mercado existen una serie de marcas bastante conocidas y reconocidas como es el caso de Microchip, Motorola, Hitachi, etc. Hemos seleccionado a Microchip y en particular la serie 16F87X, los motivos para usar este dispositivo sobran, el principal de ellos es la abundante información y herramientas de diseño existente en el mercado (tanto local como internacional). También salta a la vista el hecho que es sencillo en el manejo y contiene un buen promedio elevado en los parámetros (velocidad, consumo, tamaño, alimentación).

Los PIC16F87X forman una subfamilia de microcontroladores PIC (Peripheral Interface Controller) de gama media de 8 bits. Cuentan con memoria de programa de tipo EEPROM Flash, lo que permite programarlos fácilmente usando un dispositivo programador de PIC. Esta característica facilita sustancialmente el diseño de proyectos, minimizando el tiempo empleado en programar los microcontroladores.

Esta subfamilia consta de los siguientes modelos que varían de acuerdo a prestaciones, cantidad de terminales y encapsulados:

6

Page 7: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

PIC16F870PIC16F871PIC16F872PIC16F873APIC16F874APIC16F876APIC16F877A

3.3 EL PIC16F877A.

La "A" final de los modelos PIC16F873A, PIC16F874A, PIC16F876A y PIC16F877A indica que estos modelos cuentan con módulos de comparación analógicos.El hecho de que se clasifiquen como microcontroladores (MCU) de 8 bits hace referencia a la longitud de los datos que manejan las instrucciones, y que se corresponde con el tamaño del bus de datos y el de los registros de la CPU.

Se trata de versiones mejoradas del PIC16F84, muy empleado en proyectos sencillos, de educación y de entrenamiento.

El diagrama de las terminales del PIC16F877A se muestra en la figura 2, en la tabla 2 una descripción resumida de cada una de estas entradas.

Figura 1. Terminales de PIC16F877A.

7

Page 8: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

Donde:

PIN DESCRIPCIÓN

OSC1/CLKIN(9) Entrada para el oscilador o cristal externo.

OSC2/CLKOUT(10)

Salida del oscilador. Este pin debe conectarse al cristal o resonador. En caso de usar una red RC este pin se puede usar como tren de pulsos o reloj cuya frecuencia es 1/4 de OSC1

MCLR/VPP/THV(1)

Este pin es el reset del microcontrolador, también se usa como entrada o pulso de grabación al momento de programar el dispositivo.

RA0/AN0(2) Puede actuar como línea digital de E/S o como entrada analógica del conversor AD (canal 0)

RA1/AN1(3) Similar a RA0/AN0

RA2/AN2/VREF-(4) Puede actuar como línea digital de E/S o como entrada analógica del conversor AD (canal 2) o entrada negativa de voltaje de referencia

RA3/AN3/VREF+(5) Puede actuar como línea digital de E/S o como entrada analógica del conversor AD (canal 3) o entrada positiva de voltaje de referencia

RA4/T0CKI (6) Línea digital de E/S o entrada del reloj del timer 0. Salida con colector abierto

RA5/SS#/AN4(7) Línea digital de E/S, entrada analógica o selección como esclavo de la puerta serie síncrona.

RB0/INT(21) Puerto B pin 0, bidireccional. Este pin puede ser la entrada para solicitar una interrupción.

RB1(22) Puerto B pin 1, bidireccional.

RB2(23) Puerto B pin 2, bidireccional.

RB3/PGM(24) Puerto B pin 3, bidireccional o entrada del voltaje bajo para programación

RB4(25) Puerto B pin 4, bidireccional. Puede programarse como petición de interrupción cuando el pin cambia de estado.

RB5(26) Puerto B pin 5, bidireccional. Puede programarse como petición de interrupción cuando el pin cambia de estado.

RB6/PGC(27) Puerto B pin 6, bidireccional. Puede programarse como petición de interrupción cuando el pin cambia de estado. En la programación serie recibe las señales de reloj.

RB7/PGD(28) Puerto B pin 7, bidireccional. Puede programarse como petición de interrupción cuando el pin cambia de estado. En la programación serie actúa como entrada de datos

RC0/T1OSO/T1CKI(11)

Línea digital de E/S o salida del oscilador del timer 1 o como entrada de reloj del timer 1

RC1/T1OSI/CCP2(12)

Línea digital de E/S o entrada al oscilador del timer 1 o entrada al módulo captura 2/salida comparación 2/ salida del PWM 2

8

Page 9: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

PIN DESCRIPCIÓN

RC2/CCP1(13) E/S digital. También puede actuar como entrada captura 1,/salida comparación 1/ salida de PWM 1

RC3/SCK/SCL(14)

E/S digital o entrada de reloj serie síncrona /salida de los módulos SP1 e I2C.

RC4/SDI/SDA(15)

E/S digital o entrada de datos en modo SPI o I/O datos en modo I2C

RC5/SDO(16) E/S digital o salida digital en modo SPI

RC6/TX/CK(17) E/S digital o patita de transmisión de USART asíncrono o como reloj del síncrono

RC7/RX/DT(18) E/S digital o receptor del USART asíncrono o como datos en el síncrono

RD0/PSP0-RD7/PSP7(19-22, 27-30)

Las ocho patitas de esta puerta pueden actuar como E/S digitales o como líneas para la transferencia de información en la comunicación de la puerta paralela esclava. Solo están disponibles en los PIC 16F874/7.

RE0/RD#/AN5(8)

E/S digital o señal de lectura para la puerta paralela esclava o entrada analógica canal 5.

RE1/WR#/AN6(9)

E/S digital o señal de escritura para la puerta paralela esclava o entrada analógica canal 6.

RE2/CS#/AN7 E/S digital o señal de activación/desactivación de la puerta paralela esclava o entrada analógica canal 7.

VSS(8,19) Tierra.

VDD(20,32) Fuente (5V).Tabla 1. Descripción de las terminales del PIC16F877A.

3.4 CARACTERÍSTICAS RELEVANTES DEL PIC16F877A.

• Memoria de programa ROM de 8192 x 14 bytes (8K x 14).• Memoria de datos RAM de 368 bytes (368 x 8).• Memoria de datos EEPROM de 256 bytes (256 x 8).• Cinco puertos (33 líneas de E/S).

PORTB, PORTC y PORTD de 8 bits cada uno. PORTA de 6 bits. PORTE de 3 bits.

• Tres temporizadores. Uno de 16 bits (Timer1: TMR1). Dos de 8 bits (Timer0: TMR0, y Timer2: TMR2). Un WDT.

• Convertidor A/D con cinco canales de entrada y 10 bits de resolución. Dispone de un multiplexor que permite aplicar, a la entrada del CAD, diversas señales analógicas desde sus pines.

• Catorce posibles fuentes de interrupción.

9

Page 10: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

• El registro de interrupciones, INTCON, contiene algunos bits que actúan como banderas y otros como bits de permiso para que se pueda generar la interrupción.

• Dos módulos CCP (Capture/Compare/PWM). Son capaces de capturar y comparar impulsos. La captura y la comparación se efectúan con una resolución de 16 bits. Comparador analógico:

Internamente se dispone de un Amplificador operacional que actúa como comparador entre una señal fija de referencia y otra variable que se aplica por una de sus terminales.

La salida del comparador proporciona un nivel lógico 1 ó 0 según una señal sea mayor o menor que la otra.

• Estructura basada en cuatro bancos de 128 bytes.• Puerto serial síncrono (SSP) e interfaz de comunicación serial (SCI). La típica USART,

orientada a la comunicación entre subsistemas o máquinas (RS-232) y la MSSP, destinada a la comunicación entre diversos circuitos integrados y que admite el protocolo I2C y SPI.

• Puerto paralelo esclavo (PSP). Comunicación que es más rápida que la comunicación en serie, pero que hipoteca muchas líneas de E/S; ocho del puerto D y tres del puerto E.

• Arquitectura Harvard.• Arquitectura tipo RISC (Conjunto Reducido de Instrucciones de Computadora).• Procesador segmentado o Pipeline.• Soporta Xtal 20MHz. • Voltaje de Operación: 2.0 hasta 5.5VDC.• 2 Timers de 8 bits• 1 Timer 16 bits

3.5 ARQUITECTURA DEL PIC16F877A

EL PIC16F877A de Microchip pertenece al tipo de procesador RICS que es un procesador de instrucciones reducidas, se caracteriza por que el número de instrucciones es pequeño y además casi todas se realizan en la misma cantidad de tiempo. Este tipo de procesador emplea una arquitectura Harvard lo que significa que trabaja las zonas de memoria de programa y datos en forma separada.

En el siguiente diagrama se muestra la arquitectura Von Neumann frente a la Harvard:

10

Page 11: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

Diagrama 1. Arquitectura Von Neumann vs. Harvard.

En ambas arquitecturas observamos bloques de memoria, cada bloque tiene posiciones y cada posición un valor. Para recoger o dejar un valor en una determinada posición es necesario primero indicar cuál es la dirección a leer o escribir de la memoria, en consecuencia hay un grupo de líneas que nos permiten hacer esa función conocida como el bus de direcciones, también existe un bus de datos que son líneas paralelas por donde discurren los valores de cada dirección. En el caso de la arquitectura Von Neumann podemos apreciar que existe un único bus de direcciones y de datos. Podemos apreciar como cada posición de memoria tiene una dirección, a su vez la memoria se divide en memoria de programa (conocida como ROM) y memoria de datos (conocida como RAM). En el caso de la arquitectura Harvard existen dos bloques de memoria separados. Un bloque para instrucciones y otro para datos. Note como hay dos buses independientes de direcciones y el bus de instrucciones solo tiene una dirección, a diferencia del bus de datos que es de naturaleza bidireccional. Todo esto sugiere que puede existir una dirección por ejemplo la 0. Entonces tenemos una instrucción en la posición 0 y también un dato en la 0. En el caso de la arquitectura Von Neumann esa dirección es de programa o de instrucción pero no de ambas. La arquitectura Harvard mejora el ancho de banda por que el bus de datos es de 14 bits frente a los de 8 de un bus tradicional Von Neumann por tanto en una sola lectura puede llevar mayor cantidad de datos.

3.6 ARQUITECTURA INTERNA DEL PIC16F877A

La estructura interna de este PIC es como se muestra en la figura 2, que se presenta a continuación:

11

Page 12: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

Figura 2. Arquitectura del PIC16F877A.

Se han señalado que el microcontrolador posee varios elementos en forma interna: el procesador, memoria de programa, memoria de datos, periféricos, contadores.

Se observa el siguiente diagrama de bloques del PIC16F877A para una mejor comprensión de este.

12

Page 13: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

Diagrama 2. Arquitectura interna del PIC16F877A.

En el diagrama 2 podemos identificar la memoria del programa en la parte superior izquierda con 8K posiciones por 14 bits, también esta presenta la memoria de datos (RAM) de 368 posiciones por 8 bits. La memoria EEPROM 256 posiciones x 8 bits. El procesador propiamente dicho está formado por la ALU (unidad aritmética lógica) el registro de trabajo W. Tenemos los periféricos I/O Port A, B, C, D, E el TMR0 (temporizador contador de eventos), TMR1 y TMR2 entre otros módulos. También se cuenta con un registro de instrucción que se carga cada vez que la ALU solicita una nueva instrucción a procesar. En la parte intermedia se encuentran algunos bloques como son el Status Reg. que es el registro de estado encargado de anotar el estado actual del sistema, cada vez que se ejecuta una instrucción se llevan a cabo cambios dentro del microcontrolador como desborde, acarreo, etc. Cada uno de esos eventos está asociado a un BIT de este registro. Existe un registro de vital importancia que se llama el Program Counter o contador de programa este registro indica la dirección de la instrucción a ejecutar. El registro en cuestión no es necesariamente secuencial, esto es no se incrementa necesariamente de uno en uno ya que puede darse el caso en el que salte dependiendo si hay una instrucción de bifurcación de por medio o puede haber alguna instrucción de llamada a función y/o procedimiento. También se observa el bloque de la pila, la función de la pila es ser un buffer temporal en el que se guarda el contador de programa cada vez que se suscita una llamada a un procedimiento y/o función (incluyendo interrupciones). Por tanto el nivel de anidamiento es de hasta 8 llamadas. También está presente el FSR reg., que es el registro que cumple una función similar a la del contador de programa direccionando en este caso la RAM, el FSR es un puntero a una dirección de la RAM. La aparición de multiplexores se debe a que los datos pueden tener diferentes fuentes. Cuando se programa el microcontrolador se debe siempre tener en mente que es lo que él hace. Cuando se prende asume un valor por defecto, el contador de programa asume la posición cero por tanto el microcontrolador toma la instrucción que se encuentra en esa posición en la memoria de programa y la ejecuta. Al momento de ejecutarla procede a informar si se ha llevado a cabo alguna operación en particular registrándola en el registro de estado (STATUS). Si la instrucción es de salto o bifurcación evaluará las condiciones para saber si continua o no con la siguiente instrucción, en caso que no sea así saltará a otra posición de memoria. En caso que el programa haga un llamado a una función guardará en la pila el valor del contador de programa ejecutará la rutina y al momento que termina restituirá el valor correspondiente para seguir con la siguiente instrucción.

3.7 ORGANIZACIÓN DE LA MEMORIA

La memoria se divide en memoria de datos y programa. La de datos a su vez se divide en: SFR (Special Function Register) Registros de propósito especial, son registros que ayudan a configurar el hardware interno así como sirven para escribir o leer valores de los diferentes componente que constituyen el microcontrolador. Por ejemplo el registro “trisa” que nos permite configurar el modo de trabajo de las líneas del puerto A.

13

Page 14: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

GFR (General Function Register) Registros de propósito general, son posiciones de memoria que podemos usar para almacenar valores que emplean nuestros programa. La memoria RAM está dividida en cuatro bancos. Antes de acceder a un registro al escribir un programa (para leer o cambiar su contenido), es necesario seleccionar el banco que contiene ese registro. Más tarde vamos a tratar los bits del registro STATUS utilizados para selección del banco. Para simplificar el funcionamiento, los SFR utilizados con más frecuencia tienen la misma dirección en todos los bancos, lo que permite accederlos con facilidad.

Tabla 3.7. Bancos de la memoria.

También tenemos una memoria EEPROM, con 256 posiciones, para acceder a la memoria no podemos leer o escribir directamente es decir colocar la dirección y obtener o dejar el

14

Page 15: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

valor. Para trabajarla debemos apoyarnos en registros adicionales de tal forma que la usamos indirectamente.

El contador de programa tiene 13 bits con los cuales se pueden direccionar 8K posiciones. Cuando levantamos el microcontrolador el contador de programa siempre apunta a una dirección conocida como el VECTOR DE RESET, la dirección es la posición de memoria 0000h. También existe otro vector llamado de VECTOR DE INTERRUPCIONES que ocupa la posición 0004h. Cuando se lleva a cabo una petición de interrupción el contador de programa va automáticamente a esa posición en busca de la instrucción que atienda la petición de interrupción. Como se ha mencionado la pila trabaja con el contador de programa cada vez que hay una instrucción de llamada a procedimiento o función (call) el contador de programa se almacena allí y va en busca de la rutina, cuando acaba la rutina (con la ejecución de una instrucción return, retfie o retlw) se restituye el valor del contador de programa, la capacidad de la pila es de 8 posiciones en caso que tengamos un desborde (ej. 9 llamadas anidadas) la pila se dice que se desborda y vuelve a 0. Por tanto hemos de pensar que la pila también cuenta con un contador que indica cual es la siguiente dirección vacía.

3.8 PRINCIPALES REGISTROS SFR.

Las siguientes líneas describen los principales registros SFR del microcontrolador PIC16F877A. Los bits de cada registro controlan los circuitos diferentes dentro del chip, así que no es posible clasificarlos en grupos especiales. Por esta razón, se describen junto con los procesos que controlan.

REGISTRO STATUS

El registro STATUS contiene: el estado aritmético de datos en el registro W, el estado RESET, los bits para seleccionar el banco para los datos de la memoria. IRP - Registro de selección de Banco (usado para direccionamiento indirecto) RP1, RP0 - Registro de selección de banco (usado para direccionamiento directo).

R P 1 R P 0 B A N C O A C T I V O

0 0 Banco 0

0 1 Banco 1

1 0 Banco 2

1 1 Banco 3

Tabla 3.8.1. Registro de selección de banco.

15

Page 16: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

TO - Time-out bit (bit de salida del temporizador perro guardián) PD - Power-down bit (bit de apagado) Z - Zero bit (bit cero) DC - Digit carry/borrow bit (bit de acarreo/préstamo de dígito) cambia al sumar o al

restar si ocurre un "desbordamiento" o un "préstamo" en el resultado. C - Carry/Borrow bit (bit de acarreo/préstamo) cambia al sumar o al restar si ocurre un

"desbordamiento" o un "préstamo" en el resultado, o sea si el resultado es mayor de 255 o menor de 0.

REGISTRO OPTION_REG

El registro OPTION_REG contiene varios bits de control para configurar el pre - escalador del Temporizador 0/WDT, el temporizador Timer0, la interrupción externa y las resistencias pull-up en el puerto PORTB. RBPU - Port B Pull up Enable bit (resistencia Pull Up Puerto B) INTEDG - Interrupt Edge Select bit (bit selector de flanco activo de la interrupción

externa) T0CS - TMR0 Clock Source Select bit (bit selector de tipo de reloj para el Timer0) T0SE - TMR0 Source Edge Select bit (bit selector de tipo de flanco en TOCKI)

selecciona el flanco (ascendente o descendente) contado por el temporizador Timer0 por el pin RA4/T0CKI.

PSA - Prescaler Assignment bit asigna el pre-escalador (hay sólo uno) al temporizador o al WDT.

PS2, PS1, PS0 PRESCALER RATE SELECT BITS (BIT SELECTOR DEL VALOR DEL DIVISOR DE FRECUENCIA)

El valor del divisor de frecuencia se selecciona al combinar estos tres bits. Como se muestra en la siguiente tabla, el valor del divisor de frecuencia se le asigna al temporizador (Timer0) o al temporizador perro guardián (WDT).

PS2 PS1 PS0 TMR0 WDT

0 0 0 1:2 1:1

0 0 1 1:4 1:2

0 1 0 1:8 1:4

0 1 1 1:16 1:8

1 0 1 1:64 1:32

16

Page 17: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

1 1 0 1:128 1:64

1 1 1 1:256 1:128

Tabla 3.8.2. Valor del divisor de frecuencia.

Para conseguir el valor del divisor de frecuencia 1:1 cuando el temporizador Timer0 cuenta pulsos, el preescalador debe ser asignado al WDT. En consecuencia, el temporizador Timer0 no utiliza el pre-escalador, sino que cuenta directamente los pulsos generados por el oscilador, lo que era el objetivo.

REGISTROS DEL SISTEMA DE INTERRUPCIÓN

Al llegar la petición de interrupción, no significa que una interrupción ocurrirá automáticamente, puesto que debe ser habilitada por el usuario (por el programa) también. Por esta razón, hay bits especiales utilizados para habilitar o deshabilitar interrupciones. Es fácil de reconocerlos por las letras IE contenidas en sus nombres (Interrupt Enable - Interrupción habilitada). Además, cada interrupción se asocia con otro bit denominado bandera que indica que una petición de interrupción ha llegado sin verificar si está habilitada. Asimismo, se reconocen con facilidad por las dos últimas letras contenidas en sus nombres - IF (Interrupt Flag - Bandera de interrupción).

Como hemos visto, toda la idea es muy simple y eficiente. Al llegar la petición de interrupción, primero el bit de bandera se pone a uno.Si el bit IE apropiado está a cero (0), esta condición será ignorada completamente. De lo contrario, ocurre una interrupción. Si varias fuentes de interrupción están habilitadas, es necesario detectar la activa antes de que la rutina de interrupción se ponga a ejecutar. La detección de la fuente se realiza al comprobar los bits de las banderas.Cabe destacar que los bits de cada bandera no se ponen a cero automáticamente, sino por el software, mientras que la ejecución de la rutina de interrupción continúa ejecutándose. Si no hacemos caso a este detalle, ocurrirá otra interrupción inmediatamente después de volver al programa principal, aunque no hay más peticiones de ejecución. Simplemente, la bandera, así como el bit IE, se quedan en uno.Todas las fuentes de interrupción típicas para el microcontrolador PIC16F877A se muestran en la siguiente página. Fíjese en lo siguiente:

El bit GIE habilita/deshabilita simultáneamente las interrupciones no enmascaradas. El PEIE bit habilita/deshabilita las interrupciones no enmascaradas de periféricos. Esto

no se refiere al temporizador Timer0 y a las fuentes de interrupción del puerto PORTB.

Para habilitar una interrupción causada por el cambio del estado lógico en el puerto PORTB, es necesario habilitarla para cada bit por separado. En este caso, los bits del registro IOCB se comportan como los bits IE de control.

REGISTRO INTCON

17

Page 18: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

El registro INTCON contiene varios bits de habilitación y de bandera para el desbordamiento en el registro TMR0, e interrupciones por el cambio del estado en el puerto PORTB y las interrupciones externas en el pin INT.

GIE - Global Interrupt Enable bit - (bit de habilitación de interrupciones globales) controla simultáneamente todas las fuentes de interrupciones posibles.

PEIE - Peripheral Interrupt Enable bit (bit de habilitación de interrupciones periféricas) es similar al bit GIE, sin embargo controla interrupciones habilitadas por los periféricos. Eso significa que no influye en interrupciones causadas por el temporizador Timer0 o por el cambio del estado en el puerto PORTB o por el cambio en el pin RB0/INT.

T0IE - TMR0 Overflow Interrupt Enable bit (bit de habilitación de interrupciones por el desbordamiento del temporizador Timer0) controla interrupciones causadas por el desbordamiento del Timer0.

INTE - RB0/INT External Interrupt Enable bit (bit de habilitación de la interrupción externa en RB0) controla interrupciones causadas por el cambio del estado lógico en el pin de entrada RB0/INT (interrupción externa).

RBIE - RB Port Change Interrupt Enable bit (bit de habilitación de interrupciones por cambios en el puerto PORTB). Cuando se configuran como entradas, los pines en el puerto PORTB pueden causar una interrupción al cambiar el estado lógico (no importa si se produce bajada o subida de tensión, lo que importa es que se produce un cambio). Este bit determina si una interrupción va a ocurrir.

T0IF - TMR0 Overflow Interrupt Flag bit (bit de bandera de interrupción por el desbordamiento del Timer0) detecta el desbordamiento en el registro del temporizador Timer0, o sea el contador se pone a cero.

INTF - RB0/INT External Interrupt Flag bit (bit de bandera de interrupción externa en INT) detecta el cambio en el estado lógico en el pin INT.

RBIF - RB Port Change Interrupt Flag bit (bit de bandera de interrupción por cambio en el puerto RB) detecta cualquier cambio del estado lógico de alguno de los pines de entrada en el puerto PORTB.

REGISTRO PIE1

El registro PIE1 contiene los bits de habilitación de interrupciones periféricas.

18

Page 19: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

ADIE - A/D Converter Interrupt Enable bit (bit de habilitación de interrupciones del convertidor A/D).

RCIE - EUSART Receive Interrupt Enable bit (bit de habilitación de interrupciones de recepción del EUSART).

TXIE - EUSART Transmit Interrupt Enable bit (bit de habilitación de interrupciones de transmisión del EUSART).

SSPIE - Master Synchronous Serial Port (MSSP) Interrupt Enable bit - (bit de habilitación de la interrupción del puerto serie síncrono maestro (MSSP) habilita generar una petición de interrupción después de cada transmisión de datos por el módulo de comunicación serie síncrona (modo SPI o I2C).

CCP1IE - CCP1 Interrupt Enable bit (bit de habilitación de la interrupción del módulo 1 de Comparación/Captura/PWM - CCP1) permite generar una petición de interrupción en el módulo CCP1 utilizado para procesamiento de la señal PWM.

TMR2IE - TMR2 to PR2 Match Interrupt Enable bit (bit de habilitación de la interrupción de igualdad entre TMR2 y PR2).

TMR1IE - TMR1 Overflow Interrupt Enable bit (bit de habilitación de la interrupción de desbordamiento del temporizador Timer1) habilita generar una petición de interrupción después de cada desbordamiento en el registro del temporizador Timer1, o sea el contador se pone a cero.

REGISTRO PIE2

El registro PIE2 también contiene varios bits de habilitación de interrupciones.

OSFIE - Oscillator Fail Interrupt Enable bit (bit de habilitación de la interrupción de fallo en el oscilador)

C2IE - Comparator C2 Interrupt Enable bit (bit de habilitación de la interrupción del comparador C2)

19

Page 20: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

C1IE - Comparator C1 Interrupt Enable bit (bit de habilitación de la interrupción del comparador C1)

EEIE - EEPROM Write Operation Interrupt Enable bit (bit de habilitación de la interrupción de escritura en la memoria EEPROM)

BCLIE - Bus Collision Interrupt Enable bit (bit de habilitación de la interrupción de colisión de bus)

ULPWUIE - Ultra Low-Power Wake-up Interrupt Enable bit (bit de habilitación de la interrupción para salir del modo de ultra bajo consumo - la reactivación)

CCP2IE - CCP2 Interrupt Enable bit (bit de habilitación de la interrupción del módulo 2 de Comparación/Captura/PWM (CCP2)

REGISTRO PIR1

El registro PIR1 contiene los bits de banderas de interrupción.

ADIF - A/D Converter Interrupt Flag bit (bit de bandera de la interrupción del convertidor A/D)

RCIF - EUSART Receive Interrupt Flag bit (bit de bandera de la interrupción de recepción del EUSART)

TXIF - EUSART Transmit Interrupt Flag bit (bit de la interrupción de transmisión del EUSART)

SSPIF - Master Synchronous Serial Port (MSSP) Interrupt Flag bit (bit de bandera de la interrupción de puerto serie síncrono maestro)

CCP1IF - CCP1 Interrupt Flag bit (bit de bandera de la interrupción del módulo 1 de Comparación/Captura/PWM (CCP1).

TMR2IF - Timer2 to PR2 Interrupt Flag bit (bit de bandera de la interrupción de igual dad entre el temporizador Timer2 y el registro PR2)

TMR1IF - Timer1 Overflow Interrupt Flag bit (bit de bandera de la interrupción de desbordamiento del temporizador Timer1)

REGISTRO PIR2

El registro PIR2 contiene los bits de banderas da la interrupción.

20

Page 21: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

OSFIF - Oscillator Fail Interrupt Flag bit (bit de bandera de la interrupción de fallo en el oscilador)

C2IF - Comparator C2 Interrupt Flag bit (bit de bandera de la interrupción del comparador C2)

C1IF - Comparator C1 Interrupt Flag bit (bit de bandera de la interrupción del comparador C1)

EEIF - EE Write Operation Interrupt Flag bit (bit de bandera de la interrupción de la operación de escritura en la memoria EEPROM)

BCLIF - Bus Collision Interrupt Flag bit (bit de bandera de la interrupción de colisión de bus en el MSSP)

ULPWUIF - Ultra Low-power Wake-up Interrupt Flag bit (bit de bandera de la interrupción para salir del modo de ultra bajo consumo - la reactivación)

CCP2IF - CCP2 Interrupt Flag bit (bit de la interrupción del módulo 2 de Comparación/Captura/PWM - CCP2)

REGISTRO PCON

El registro PCON contiene solamente dos bits de banderas utilizados para diferenciar entre un Power-on reset (POR), un Brown-out reset (BOR), un reinicio por el temporizador perro guardián (WDT) y un reinicio externo por el pin MCLR.

ULPWUE - Ultra Low-Power Wake-up Enable bit (bit de habilitación para salir del modo de ultra bajo consumo - la reactivación)

SBOREN - Software BOR Enable bit (bit de habilitación del BOR por software) POR - Power-on Reset Status bit (bit de estado Power - on reset) BOR - Brown-out Reset Status bit (bit de estado Brown - out reset)

3.9 CLASIFICACIÓN DE INSTRUCCIONES.

Todos los modelos de microcontroladores PIC responden a la arquitectura RISC. No solo implica que el número de instrucciones que es capaz de interpretar y ejecutar sea pequeño

21

Page 22: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

(en el caso del PIC16F877A que consta de 35instrucciones), sino también que consta de las siguientes características:

1. Las instrucciones son simples y rápidas2. Las instrucciones son ortogonales. Apenas tiene restricciones en el uso de operadores3. La longitud de las instrucciones y los datos es constante.

Todas las instrucciones tienen la misma longitud, 14 bits en los PIC 16X8X, y todos los datos son de un byte. La arquitectura Harvard aísla la memoria de instrucciones de la de datos.

Los diferentes formatos que admiten las instrucciones, se clasifican en cinco grandes grupos, atendiendo al tipo de operación que desarrollan, estos son:

1. Operaciones orientadas a manejar registros de tamaño byte.

Se divide en tres campos:• Campo de código OP de 6 bits.• Campo de la dirección del operando fuente (f) de 7bits.• Campo que define el operando destino (d) de 1 BIT.

2. Operaciones orientadas a manejar bits.

Este formato consta de tres campos:• Campo de código OP de 4 bits• Campo de la dirección del registro fuente de 7 bits.• Campo de la posición del BIT en el registro y es de 3bits.

3. Operaciones que manejan un valor inmediato o literal.

Constas de solo dos campos:• Campo del código OP con 6 bits.• Campo del valor inmediato (k) con 8 bits.

4. Operaciones incondicionales de control del flujo del programa.

Este tipo instrucciones efectúan al contenido del contador de programa y sirven para romper la secuencia ordenada de las instrucciones del programa. Consta de dos campos:

• campo del código OP de 3 bits• Campo de la dirección del salto que se carga en el contador de programa de 11 bits.

5.- Operaciones de salto condicional.

22

Page 23: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

Se dispone de pocas instrucciones que cuando se cumplen una condición dan un brinco (skip). Un brinco es un salto muy pequeño, es decir que solo se salta una instrucción, la que hay detrás de la condicional.

3.10 DIVISIÓN DE INSTRUCCIONES.

Las instrucciones de dividen en instrucciones que manejan registros, que manejan Bits, de brinco, instrucciones que manejan operadores inmediatos e instrucciones de control y especiales.

3.10.1 INSTRUCCIONES QUE MANEJAN REGISTROS.

Responden a la sintaxis mnemónico f, d, siendo f y d los dos operadores fuente y destino.

El registro f viene reverenciado por la dirección de 7 bits que ocupa, mientras que el destino solo por 1, cuando vale O es el registro W y si vale 1 es el destino fuente.

La siguiente tabla muestra las instrucciones que manejan registros.

SINTAXIS OPERACIÓN CICLOSSEÑALIZADORE

SADDWF f, d Suma W y f 1 C, DC, ZANDWF f, d AND W con f 1 ZCLRF f borra f (pone los bits en cero) 1 ZCLRW Borra W 1 ZCOMF f, d Complementa f (invierte) 1 ZDECF f, d Decrementa f 1 ZINC f, d Incrementa f 1 ZIORWF f, d OR entre W y f 1 ZMOVF f, d Mueve f 1 ZMOVWF f, d Mueve W y f 1 …NOP No opera (no hace nada) 1 …RLF f, d Rota f a la izquierda a través del cero 1 CRRF f, d Rota f a la derecha a través del cero 1 CSUBWF f, d Resta W y f 1 C, DC, ZSWAPF f, d Intercambia 1 …XORWF f, d XOR de W y f 1 ZTabla 3.10.1. Instrucciones que manejan registros.

3.10.2 INSTRUCCIONES QUE MANEJAN BITS

23

Page 24: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

Solo hay dos instrucciones en este grupo. Una de ellas pone a 1 (bsf) cualquier BIT de un registro, mientras que la otra pone a O (bcf).

SINTAXIS OPERACIÓN CICLOS SEÑALIZADORESBCF f, d Borra BIT de f 1 …BSF f, d Pone a 1 el BIT de f 1 …

Tabla 3.10.2. Instrucciones que manejan Bits.

3.10.3 INSTRUCCIONES DE BRINCO.

En los PIC de gama media, solo existen cuatro instrucciones de salto condicional. Dos de ellas según su valor (1 o 0) brincan o no, sólo se saltan la instrucción siguiente a la condición. Las dos instrucciones restantes incrementan o decrementan un registro y la posibilidad del brinco se efectúan si con esa operación el valor del registro ha llegado a cero. Tardan 2 ciclos de instrucciones cuando brinca y un ciclo cuando no se realiza el brinco.

SINTAXIS OPERACIÓN CICLOS SEÑALIZADORESBTFSC f, d Explora un BIT de f y brinca si vale 0 1 (2) …BTFSS f, d Explora un BIT de f y brinca si vale 1 1(2) …DEFSZ f, d Decrementa f y si es 0 brinca 1(2) …INCFSZ f, d Decrementa f y si es 1 brinca 1(2) …

Tabla 3.10.3. Instrucciones de brinco.

3.10.4 Instrucciones que manejan operadores inmediatos.

Consta de seis instrucciones que realizan una operación con un valor inmediato de 8 bits, el cual solo tiene dos campos: el del Código OP (6 bits) y el del operador inmediato (8bits).

SINTAXIS OPERACIÓN CICLOS SEÑALIZADORESADDLW k Suma inmediata con W 1 C, DC, ZANDLW k AND inmediato con W 1 ZIORLW k OR inmediato con W 1 ZMOVLW k Mueve a W a un valor inmediato 1 …SUBLW k Resta W de un valor inmediato 1 C, DC, ZXORLW k OR exclusiva con W 1 …

Tabla 3.10.4. Instrucciones que manejan operadores inmediatos.

3.10.5 INSTRUCCIONES DE CONTROL Y ESPECIALES.

24

Page 25: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

En este grupo se incluyen las instrucciones que rompen la secuencia normal del programa porque alteran el contenido del PC, y las instrucciones especiales.

Entre las instrucciones de control se encuentran cinco: GOTO, CALL, RETURN, RETLW, RETFIE. Mientras que en las instrucciones especiales se encuentran dos: CLRWDT y SLEEP.

SINTAXIS OPERACIÓN CICLOS SEÑALIZADORESCALL k Llamada a subrutina 2 TO #, PD#CLRWDT Borra o refresca el perro guardián 1 …GOTO k Salto incondicional 2 …RETFIE Retorno de interrupciones 2 …RETLW k Retorno a subrutina y carga W= k 2 …RETURN Retorno de subrutina 2 …SLEEP Pasa al modo de reposo 1 TO #, PD#

Tabla 3.10.5. Instrucciones de control y especiales.

CAPITULO IV

4.1 COMUNICACIÓN SERIAL ASÍNCRONA.

Entre las herramientas que disponen EL PIC16F877A se encuentra el USART, llamado SCI (Serial Comunications Interface), puede funcionar como un sistema de comunicación bidireccional, adaptándose a multitud de periféricos y dispositivos que transfieren información de forma serial, tales como un ordenador. También puede trabajar en modo unidireccional para soportar periféricos como memorias, conversores, etc.

El USART (Transmisor/Receptor Síncrono/Asíncrono Serie) puede trabajar de dos formas: • Asíncrono (Bidireccional)• Síncrono (Unidireccional) En el modo asíncrono, la comunicación serie del USART el PIC16F877A está soportada por las líneas RC6/TX/CK y RC7/RX/DT por las que se mueven los bits a la frecuencia interna de reloj. En el modo síncrono, los bits de información circulan en ambos sentidos por la línea DT a la frecuencia de los impulsos que genere el maestro por la línea CK. 4.2 MODO ASÍNCRONO. En esta forma de comunicación serial, se usa la norma RS-232-C, donde cada palabra de información o dato se envía independientemente de los demás. Suele constar de 8 o 9 bits y van precedidos por un BIT de START (inicio) y detrás de ellos se coloca un BIT de STOP (parada), de acuerdo con las normas del formato estándar NRZ (Non Return-to-Zero)

25

Page 26: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

Los bits se transfieren a una frecuencia fija y normalizada. La USART transmite y recibe primero el BIT menos significativo. La USART en modo asíncrono contiene los siguientes elementos: Generador de BaudiosCircuito de MuestreoTransmisor AsíncronoReceptor Asíncrono 4.3 GENERADOR DE BAUDIOS. Para el protocolo asíncrono RS-232-C, la frecuencia en baudios (bits por segundo) a la que se realiza la transferencia se debe efectuar a un valor normalizado: 330, 600, 1200, 2400, 4800, 9600, 19200, 38400, etc. Para generar esta frecuencia, el USART dispone de un generador de frecuencia en Baudios, BRG, cuyo valor es controlado por el contenido grabado en el registro SPBRG. Aparte del valor X cargado en el registro SPBRG, la frecuencia en baudios del generador depende del BIT BRGH del registro TXSTA. En el caso de que BRGH = 0 se trabaja en baja velocidad y si BRGH = 1 se trabaja en alta velocidad. Según este BIT se obtendrá el valor de una constante K necesaria en la determinación de la frecuencia de funcionamiento.

Donde: X es el valor cargado en el registro SPBRG.Si BRG = 0, baja velocidad y K = 64Si BRG = 1, baja velocidad y K = 16

4.4 TRANSMISOR ASÍNCRONO. La figura muestra el diagrama por bloques de la sección de transmisión del USART en modo asíncrono.

26

Page 27: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

Figura 4.4. Transmisor asíncrono. El dato que se desea transmitir por el USART se deposita en el registro TXREG y a continuación se traspasa al registro de desplazamiento TSR, que va sacando los bits secuencialmente y a la frecuencia establecida. Además, antes de los bits, el dato de información incluye un BIT de inicio y después de sacar todos los bits añade un BIT de parada. El USART receptor recibe, uno a uno, los bits, elimina los de control y los de información una vez que han llenado el registro de desplazamiento RSR los traslada automáticamente al registro RCREG, donde quedan disponibles para su posterior procesamiento. Si se observa el diagrama de bloques de la sección transmisora del USART. El núcleo está constituido por el registro de desplazamiento TSR, que obtiene el dato desde el registro TXREG y luego lo va desplazando y sacando bit a bit, en serie, por la línea RC6/TX/CK. El primer bit que sale es el de menos peso. El dato a transferir se carga por software en TXREG y se transfiere al TSR en cuanto se haya transmitido el bit de parada del dato anterior. LA transferencia entre los dos registros se realiza en un ciclo y entonces el señalizador TXIF se pone a 1, para advertir que el registro de transmisión se ha vaciado. También en este momento puede producirse una interrupción si se ha posibilitado el uso de interrupciones. Cuando se escribe otro dato sobre TXREG, l señalizador TXIF se pone a 0. El bit TRMT sirve para indicar el estado del registro TSR y vale 1 cuando está vacío. La secuencia de pasos a seguir para una transmisión en el USART es la siguiente: • Configurar las líneas RC6/TX/CK como salida y RC7/RX/DT como entrada.• Asignar SYNC=0 y SPEN=1 para activar el USART como asíncrono.• Si se va a trabajar con interrupción, asignar TXIE=1, además de habilitar las

interrupciones.• Si el dato consta de 9 bits, en lugar de los 8 típicos, asignar el bit TX9=1. El noveno bit

se colocará en TX9D (TXSTA)• Se carga el valor adecuado en el registro SPBRG, para producir la frecuencia de trabajo

deseada. Hay que controlar el bit BRGH (alta y baja velocidad)• Activar la transmisión con TXEN = 1. El bit TXIF tendrá valor 1; ya que TXREG se

encuentra vació.• Cargar en TXREG el dato a transmitir. • Comienza la transmisión.

4.5 RECEPTOR ASÍNCRONO. La figura muestra el diagrama de bloques de la sección receptora del USART

27

Page 28: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

Figura 4.5. Receptor asíncrono.

Los datos se reciben en serie, bit a bit, por la línea RC7/RX/DT y se van introduciendo secuencialmente en el registro de desplazamiento RSR que funciona a una frecuencia 16 veces más rápida que la de trabajo (baud rate). Cuando el dato consta de 9 bits hay que programar el bit RX9 = 1 y el noveno bit de información se colocará en el bit RX9D del registro RCSTA.

Figura 4.5.1. Receptor asíncrono completo.

Una vez que el modo asíncrono ha sido seleccionado, la recepción es habilitada colocando a 1-lógico el bit CREN (RCSTA<4>). El corazón de la recepción serial es el registro de corrimiento de recepción (RSR). Después de detectar el bit de parada el dato presente en RSR es transferida al registro RCREG (si es que está vacío). Si la transferencia ha sido completada con éxito el RCIF (PIR1<5>) es puesto a 1-lógico. Si lo deseamos podemos usar esta característica para trabajar interrupciones. Para ello deberemos habilitar el bit

28

Page 29: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

RCIE (PIE1<5>). El bit RCIF solo es de lectura y colocado a 0-lógico por hardware, es decir cuando el registro RCREG está vacío. Al parecer el registro RCREG es un solo registro pero no es así, el registro RCREG es una suerte de pila de dos posiciones. Por tanto es capaz de almacenar 2 datos (bytes) y mantener un tercer dato en RSR. Si la pila está llena y se llena el RSR (tercer dato) es decir llega el bit de stop de ese tercer dato el microcontrolador procede a colocar a 1-lógico el bit OERR (over run error bit) y el valor presente en RSR se pierde. De darse esta situación lo que debemos hacer es rescatar los dos datos que están en la pila de RCREG. Luego resetear el OERR, para eso es necesario resetear el bit CREN (ponerlo a 0-lógico y luego a 1-lógico). Cuando se activa el bit OERR las transferencias de RSR a RCREG son deshabilitadas por lo tanto debemos cumplir con hacer el reset del bit CREN para normalizar la recepción. Hay otro bit que también es importante señalar y es el bit FERR (RCSTA<2>) error de frame o trama o marco. El bit FERR se coloca a 1-lógico si detecta un 0-lógico como bit de parada. Por lo tanto antes de leer lo que contiene el registro RCREG es necesario revisar el valor de los bits FERR y OERR. La siguiente es la secuencia de pasos a realizar para configurar la recepción asíncrona: • Inicializar el registro SPBRG con el valor apropiado que genere los baudios necesarios.

Colocar un valor al bit BRGH en función, si se va o no a transmitir en alta velocidad.• Habilitar la puerta serial asíncrona colocando a 0-lógico el bit SYNC y a 1-lógico el bit

SPEN.• Si se va a trabajar con interrupción, asignar RCIE=1, además de habilitar las

interrupciones.• Habilitar la recepción colocando a 1-lógico el bit CREN.• El bit RCIF se colocará a 1-lógico cuando un dato llegue completo al microcontrolador

y una interrupción se generará si es que se ha reseteado el bit RCIE.• Leer el registro RCSTA para obtener el valor del noveno bit (si es que está trabajando

con 9 bits de datos) y determinar si hubo error en la comunicación (revisar los bits OERR y FERR).

• Si no hubo error lea los 8 bits de datos del registro RCREG.• Si no hubo algún error resetear el bit CREN.

CAPITULO V

5.1 HERRAMIENTAS.

Para programar es necesario contar con herramientas en hardware y software, en el mercado existen muchas herramientas que van de ensambladores a simuladores, y emuladores.

Un ejemplo de una herramienta es el IDE que es un entorno de desarrollo integrado (en inglés integrated development environment). Un IDE es un entorno de programación que ha sido empaquetado como un programa de aplicación, es decir, consiste en un editor de código, un compilador, un depurador y un constructor de interfaz gráfica (GUI). Los IDEs pueden ser aplicaciones por sí solos o pueden ser parte de aplicaciones existentes. El

29

Page 30: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

lenguaje Visual Basic, por ejemplo, puede ser usado dentro de las aplicaciones de Microsoft Office, lo que hace posible escribir sentencias Visual Basic en forma de macros para Microsoft Word.Los IDE proveen un marco de trabajo amigable para la mayoría de los lenguajes de programación tales como C++, Python, Java, C#, Delphi, Visual Basic, MPLAB etc. En algunos lenguajes, un IDE puede funcionar como un sistema en tiempo de ejecución, en donde se permite utilizar el lenguaje de programación en forma interactiva, sin necesidad de trabajo orientado a archivos de texto.

5.2 INTRODUCCIÓN A MPLAB.

El MPLAB es un "Entorno de Desarrollo Integrado" (Integrated Development Environment, IDE) que corre en "Windows", mediante el cual se pueden desarrollar aplicaciones para los microcontroladores de las familias PIC 16/17. Con el MPLAB se pueden escribir, depurar y optimizar los programas de diseños con PIC 16/17. El MPLAB incluye un editor de texto, un simulador y un organizador de proyectos.

Para comenzar un programa desde cero para luego grabarlo, en MPLAB los pasos a seguir son:1. Crear un nuevo archivo con extensión .ASM y nombre cualquiera.2. Crear un Proyecto nuevo eligiendo un nombre y ubicación.3. Agregar el archivo .ASM.4. Elegir el microcontrolador a utilizar desde SELECT DEVICE del menú CONFIGURE.

Una vez realizado esto, se está en condiciones de empezar a escribir el programa respetando las directivas necesarias y la sintaxis para luego compilarlo y grabarlo en el PIC.

Por otra parte el MPLAB, también soporta al emulador PICMASTER y a otras herramientas de desarrollo de Microchip como el PICSTAR-Plus.

Con el MPLAB se puede:• Depurar sus programas fuentes.• Detectar errores automáticamente en sus programas fuente para editarlos.• Depurar los programas utilizando puntos de corte (breakpoints) mediante valores de los

registros internos.• Observar el flujo del programa con el simulador MPLAB-SIM Ó seguirlo en tiempo

real utilizando el emulador PICMASTER.• Realizar medidas de tiempo utilizando un cronometro.• Mirar variables en las ventanas de observación.• Encontrar respuestas rápidas a sus preguntas, utilizando la ayuda en línea del MPLAB.

5.3 USO DE MPLAB.

Cada vez que se use el MPLAB para programar aplicaciones se debe ejecutar la siguiente secuencia de pasos:

30

Page 31: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

1. Ingresar al MPLAB:

Inicio-> Programas-> Microchip MPLAB-> MPLAB o haga doble clic sobre el icono del programa en el escritorio:

2. Crear un proyecto:

Primero con ayuda del explorador de WINDOWS cree una carpeta de trabajo: c:\Archivos de Programa\MPLAB\PROYECTO La idea es contar con una carpeta en la cual coloquemos nuestros trabajos. El MPLAB cuenta, como toda aplicación en WINDOWS, con una barra de menús, una barra de iconos y una de estado en la parte inferior. Abra el menú PROJECT y elija la opción NEW. Asigne un nombre al proyecto (por ejemplo papb) y asegúrese que el proyecto sea creado en la carpeta CURSO además el campo DEVELOPMENT MODE debe estar con la opción MPLAB-SIM 16F877A. Como lo muestra la siguiente figura: Presione el botón OK.

31

Page 32: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

3. Editar el programa Ahora que contamos con el recipiente el siguiente paso consiste en adicionar el código; para eso nos apoyaremos en el editor. Abra un nuevo archivo: Ingrese al menú EDIT y elija la opción NEW. Notara como se muestra un documento nuevo. Ingrese el código en ensamblador que necesita como lo muestra la siguiente figura:

Ahora guarde el archivo. Asegúrese que se cree en la misma carpeta donde está el proyecto (CURSO) coloque un nombre (PAPB.ASM) con extensión ASM:

Ahora incluya el archivo “papb.asm” como parte del proyecto. Menú PROJECT y elija la opción EDIT PROJECT Haga clic en el botón ADD NODE , use la ventana para seleccionar el archivo “papb.asm”

32

Page 33: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

4. Ensamble el programa Una vez que el programa esta listo llamamos al ensamblador (MPASMWIN): Menú PROJECT y elija la opción BUILD ALL. Si el código esta libre de errores aparecerá una ventana similar a la siguiente. Si ha cometido algún error de sintaxis el MPASMWIN le indicara en una ventana la línea y el error a fin que lo solucione. Corríjalo y vuelva a compilar hasta que no haya problemas.

5. Mostrar los datos relevantes Antes de entrar al modo de simulación debe asegurarse que el proyecto tiene habilitado el simulador (MPSIM). Ingrese al menú OPTIONS elija DEVELOPMENT MODE

33

Page 34: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

Para observar lo que va a suceder en el microcontrolador debemos abrir las ventanas que nos muestran los datos relevantes para ello ingrese al menú WINDOWS observará las siguiente figura:

Por el momento solo habilitaremos las siguientes ventanas: • Special Function Register: Nos

muestra los registros de configuración del microcontrolador

• File Register. Nos muestra la zona de memoria de datos (GFR+SFR)

• Stopwatch: Muestra un clock para la evolución del programa paso a paso

• Stack: Muestra la pila

Una vez abiertas las ventanas hay que ordenarlas en la pantalla (works pace) a fin que se vean a la vez:

Recuerde que el microcontrolador tiene un registro llamado PC (contador de programa) que le indica que instrucción debe ejecutar (puede ver parte del valor en la ventana Special Function Register - pcl). Cada uno de los item dentro del submenú RUN le indica a la simulación que debe hacer con el contador de programa.

34

Page 35: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

6. Simulación La simulación propiamente dicha se hace a través del menú DEBUG:

Si presiona la opción RESET (F6) el programa se detiene y el contador de programa se va a 0 (vector de reset). Vamos a ejecutar el programa instrucción por instrucción. Para ello ejecute la opción STEP (F7) note como es que aparece un cursor en la ventana de editor y algunos valores de las demás ventanas se han modificado (los valores que se han modificado siempre aparecen en color rojo). Para continuar con la simulación paso a paso vuelva a ejecutar la opción STEP (F7) y observe que pasa en la pantalla.

35

Page 36: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

Ahora resetear el programa (opción RESET -F6). Otra forma de ver como es la evolución del programa sin necesidad de apretar la secuencia paso a paso es a través de la opción ANIMATE. Ejecútela y observe que es lo que pasa. Para salir del estado de animación es necesario usar la opción HALT (F5) del submenú run o presione el icono del semáforo rojo. También contamos con una opción que hace que el microcontrolador corra el programa libremente esa es la opción RUN (F9) o presione el icono del semáforo verde, cuando ejecute esta acción note como la barra de estado (parte baja de la pantalla) cambia de color a amarillo. Para salir elija nuevamente la opción HALT.

7. Modificando las entradas El MPLAB cuenta con opciones que nos permiten variar las entradas durante la simulación a fin de observar el comportamiento del programa. Ingrese al menú DEBUG y seleccione el submenú SIMULATOR STIMULUS, observará que presenta cuatro opciones. Por el momento trabajaremos con la primera. Elija ASYNCHRONOUS STIMULUS.

Observará la siguiente ventana:

36

Page 37: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

Podemos asignar a cada botón (de los 12 disponibles) uno de los pines del PIC. Haga clic con el botón derecho del mouse sobre alguno de los botones (menú de contexto) podemos asignar el botón a un pin y además definirá el tipo de estímulo.

• Pulse, equivale a ingresar un pulso en el pin• Low, equivale a colocar 0 en el pin• High, equivale a colocar 1 en el pin• Toggle, es un interruptor que oscila entre 1 y 0. Si lo

presiona una vez irá a 0 si lo presiona de nuevo irá a 1 y así sucesivamente.

Tome 4 botones y asígnelos a RA0, RA1, RA2 y RA3 asegúrese que sean del tipo Toggle, como lo muestra la figura adjunta. Note como la ventana queda flotando no la cierre ubíquela en alguna zona de la pantalla que no estorbe la visibilidad de la pantalla.

Para probar que funciona ingrese al menú DEBUG elija STEP y continué hasta que el programa entre en el bucle de lector escritura. Haga un clic sobre uno de los botones recién creados y vuelva a avanzar en la simulación (presione F7). Notará como es que el valor del puerto A en la ventana de SPECIAL FUNCTION REGISTER ha variado:

Modifique el estado de cada uno de los botones y simule el programa para ver que sucede. También es posible combinar el ASYNCHRONOUS STIMULUS con la opción ANIMATE del submenú DEBUG. Para ello resetear el programa, a continuación active la opción ANIMATE (mantenga abierta la ventana de ASYNCHRONOUS STIMULUS). Ahora haga clic sobre los botones asignados a RA0-4.

37

Page 38: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

CAPITULO VI

6.1 CONCEPTOS DE ROBÓTICA.

38

Page 39: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

De forma general, la robótica se define corno: El conjunto de conocimientos teóricos y prácticos que permiten concebir, realizar y automatizar sistemas basados en estructuras mecánicas poli articuladas, dotados de un determinado grado de "inteligencia" y destinados a la producción industrial o a la sustitución del hombre en muy diversas tareas. Un sistema robótico puede describirse, como "Aquel que es capaz de recibir información, de comprender su entorno a través del empleo de modelos, de formular y de ejecutar planes, y de controlar o supervisar su operación". La robótica es esencialmente pluridisciplinaria y se apoya en gran medida en los progresos de la microelectrónica y de la informática, así como en los de nuevas disciplinas tales como el reconocimiento de patrones y de inteligencia artificial.

6.2 ROBOTS INDUSTRIALES

Un robot industrial tal como se define en la norma ISO 8373 es:Un control automático, un manipulador reprogramable, polivalente programable en tres o más ejes, los cuales pueden ser fijos o móviles en el lugar para su uso, en aplicaciones de automatización industrial esto significa que los puntos a tomar en cuenta son:

• Reprogramable: cuyos movimientos programados o las funciones auxiliares pueden ser modificados sin alteraciones físicas.

• Multipropósito: susceptible de ser adaptado a una aplicación diferente con alteraciones físicas.

• Alteraciones físicas: la alteración de la estructura mecánica o sistema de control, excepto para los cambios de cintas de programación, ROM, etc.

• Eje: la dirección se utiliza para especificar el movimiento del robot en un modo lineal o rotativo.

Por otro lado los robots de servicio no tienen una definición estricta de aceptación internacional, que, entre otras cosas, que delimita a partir de otros tipos de equipos, en particular, el robot manipulador industrial. IFR, sin embargo, han adoptado una definición preliminar:Un robot de servicio es un robot que opera semi o totalmente autónoma para realizar servicios útiles para el bienestar de los seres humanos y equipos, excluyendo las operaciones de fabricación.Con esta definición, la manipulación de los robots industriales también podrían ser considerados como robots de servicio, siempre que se instalen en las operaciones de fabricación. Los robots de servicio pueden o no puede estar equipado con una estructura de brazo como es el robot industrial. A menudo, pero no siempre, los robots de servicio son móviles. En algunos casos, los robots de servicio consisten en una plataforma móvil en el que uno o varios brazos están conectados y controlados en el mismo modo que los brazos del robot industrial.Debido a su multitud de formas y estructuras, así como áreas de aplicación, robots de servicio no son fáciles de definir.

6.3 CLASIFICACIÓN DE ROBOTS

39

Page 40: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

En la actualidad los robots se usan de manera extensa en la industria, siendo un elemento indispensable en una gran parte de los procesos de manufactura. Impulsados principalmente por el sector del automóvil, los robots han dejado de ser máquinas misteriosas propias de la ciencia-ficción para ser un elemento más de muchos de los talleres y líneas de producción.Por su propia definición el robot industrial es multifuncional, esto es, puede ser aplicado a un número, en principio ilimitado, de funciones. No obstante, la práctica ha demostrado que su adaptación es óptima en determinados procesos (soldadura, paletización, etc.) en los que hoy día el robot es sin duda alguna, la solución más rentable.Junto con estas aplicaciones, ya arraigadas, hay otras novedosas en las que si bien la utilización del robot no se realiza a gran escala, si se justifica su aplicación por las condiciones intrínsecas del medio de trabajo (ambientes contaminados, salas asépticas, construcción, etc.) o la elevada exigencia en cuanto a calidad de los resultados (medicina, etc.). Estos robots se han venido llamando robots de servicio.

La Federación Internacional de la Robótica (IFR) estableció en 1998 una clasificación de las aplicaciones de la Robótica en el sector manufacturero:

• Manipulación en fundición.• Manipulación en moldeado de plásticos.• Manipulación en tratamientos térmicos.• Manipulación en la forja y estampación.• Soldadura.• Aplicación de materiales.• Mecanización.• Otros procesos.• Montaje.• Paletización.• Medición, inspección, control de calidad.• Manipulación de materiales.

6.4 BRAZO ROBÓTICO K-680

El brazo robótico que se usó en este proyecto es el k-680 de STEREN. Este brazo posee cinco motores de c.d., que son los motes que se controlan para el movimiento en cinco grados de libertad del brazo.

Las características técnicas del brazo son:

• Abertura máxima de la tenaza: 1,77 pulgadas• Movimiento vertical de la tenaza: 120°

40

Page 41: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

• Movimiento vertical de la parte superior del brazo: 120°• Movimiento vertical de la parte inferior del brazo: 180°• Movimiento horizontal de la base del brazo: 270°• Alimentación: 6 Vcc.

A continuación se muestra una imagen de dicho brazo.

Figura 6.4. Brazo robótico de steren k-680.

CAPITULO VII

7.1 DESARROLLO

41

Page 42: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

El control del brazo robótico se realiza a través de una interfaz programada en lenguaje C que se encarga de mandar señales o datos de control al PIC167877A por medio del puerto serial de la PC.

Para que estos datos puedan fluir entre la PC y el brazo se necesitan interfaces que conecten ambos equipos. Para ello, se usó un PIC que lee, y envía esta información a los motores del brazo, todo esto es a través de un protocolo de comunicación establecido entre la PC y el PIC.

Dicho de otra forma la información sale de la PC por el puerto COM1, llega al PIC16F877A, en donde es procesada y enviada para su amplificación por medio de un arreglo de puentes Darlington para finalmente llegar a cada uno de los motores y llevar a cabo cada uno de los movimientos elegidos por el usuario, en la siguiente figura se muestra la estructura general del sistema de control.

Figura 7.1. Sistema de control del Brazo Robótico.

7.2 COMUNICACIÓN COMPUTADORA-PIC16F877A.

La comunicación serial con la computadora se implementó a través del modulo USART (Universal Synchronous Asynchronous Receiver Transmitter) del PIC 16F877A, como ya se explico en capítulo IV y haciendo uso a la teoría tenemos que para esta comunicación serial se estable que esta queda con las siguientes características:

Velocidad: 2400 baudios. Sin bit de paridad. 8 bits de datos. 1 bit de paro.

En esta forma de comunicación serial, se usa la norma RS-232, donde cada palabra de información o dato se envía independientemente de los demás. Donde para este caso consta de 9 bits de acuerdo con las normas del formato estándar NRZ (Non Return-to-Zero).

Es decir una vez abierta la interfaz de comunicaciones de datos digitales como lo es el puerto COM1 la PC empieza a transmitir la información la cual es transmitida bit a bit,

42

Page 43: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

enviando uno a la vez. En este caso, se envía en primer lugar una señal inicial anterior al primer bit de cada byte, para la palabra codificada. Una vez enviado el código correspondiente, se envía inmediatamente una señal de stop después de cada palabra codificada. Donde la señal de inicio (start) sirve para preparar al mecanismo de recepción o receptor, la llegada y registro de un símbolo, mientras que la señal de stop sirve para predisponer al mecanismo de recepción para que tome un descanso y se prepare para la recepción de la nueva palabra.

Se usa la típica transmisión start-stop que se usa en la transmisión de códigos ASCII a través del puerto RS-232, el envió de palabras al PIC se puede ver como en la figura siguiente:

Figura 7.2. Transmisión PC-PIC.

7.3 SOFTWARE DEL BRAZO.

Para poder llevar a cabo el sistema de control del brazo robótico fue necesario desarrollar una serie de programas que interactuaran entre si, por parte de la PC usamos lenguaje C y en el PIC lenguaje ensamblador.

Es requisito indispensable tener bases sobre programación en C, ya que en esta redacción no se encontraran elementos de gran ayuda para aprender a programar en C, pero los programas en este lenguaje están debidamente comentados en el apéndice A, por lo que no es difícil comprender el comportamiento del programa, los conocimientos previos que se recomienda tener es saber como manejar de archivos, o los requerimientos mínimos son el saber como compilar y ejecutar un archivo en lenguaje C.

Para los archivos en ensamblador se dió una explicación breve en los capítulos anteriores, esta explicación abarco las instrucciones que se usaron así como el manejo de MPLAB para los archivos en ensamblador.

A continuación se habla de estos archivos para una mejor comprensión de cada uno de ellos, reiterando que en los apéndices A y B se encuentran estos debidamente comentados.

7.3.1 ARCHIVOS FUENTES DE C

A continuación se presenta una breve descripción del diagrama a bloques de los archivos fuentes de “C” necesarios para establecer la comunicación serial entre la computadora y el microcontrolador PIC16F877A.

43

Page 44: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

Los archivos con los que se deben de contar son: COM.H, COM.C y MENU.C. Estos archivos deben de encontrarse en la misma carpeta, por que se usan como #include en COM.C y en MENU.C, cabe señalar que los códigos de estos archivos se encuentran en el Apéndice A.

A continuación se muestra una representación gráfica de cómo se relacionan dichos archivos:

Figura 7.3.1. Relación de archivos de C requeridos para la comunicación serial.

También se presenta una breve explicación de la función de los archivos mencionados anteriormente:

COM.H

Este archivo contiene definiciones de las estructuras, constantes y prototipos de funciones utilizadas por el código de la interfaz RS-232 incluido en el archivo COM.C. El programa define un buffer de 256 bytes utilizado para los buffers I/O, simplificando la actualización de los apuntadores. Define una estructura para el puerto COM y contiene la definición de las direcciones de la USART.

COM.C

Contiene un grupo de definiciones que son usadas para acceder a los registros y los bits de la USART.

Contiene la subrutina de atención a la interrupción (ISR).

Contiene la subrutina para abrir el puerto RS-232 y la que configura los parámetros del puerto (velocidad de transmisión, bit de paridad, número de bits de datos y el número de bits de paro).

La ISR identifica el tipo de interrupción (de transmisión o recepción).

44

Page 45: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

La ISR de transmisión verifica que el buffer de transmisión este vacío, sino envía el siguiente dato del buffer a la UART para ser transmitido. Cuando el buffer está vacío, la interrupción por transmisión se deshabilita.

La ISR de recepción se llama cuando se lee un dato. Si el buffer de recepción no está lleno, lo almacena, sino es así, lo descarta.

Antes de salir del programa, cierra el puerto COM y desactiva las interrupciones del puerto.

MENU.C

Este archivo contiene el procedimiento main () para el programa que controla las opciones para el control del brazo robótico.

Hace las llamadas de las subrutinas para abrir el puerto de comunicaciones COM1 y definir la velocidad de transmisión, el bit de paridad, el número de bits de datos y de paro.

Una vez que se ha abierto el puerto COM1, se despliega el siguiente menú:

o F1 - Movimiento Manual

o F2 - Reproducir Rutina

o ESC- Salir del menú

La opción F1 - Movimiento Manual despliega el siguiente submenú:

o F1 - Mover Motor 1

o F2 - Mover Motor 2

o F3 - Mover Motor 3

o F4 - Mover Motor 4

o F5 - Mover Motor 5

o ESC- Salir del menú

- A su vez cada uno de estos menús despliega las siguientes opciones:

1) Mover a la derecha2) Mover a la izquierda3) DetenerESC- Salir de configuración.

La opción F2 - Reproducir Rutina. Repite los movimientos realizados en la opción F1 (Movimiento Manual).

45

Page 46: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

Al seleccionar la opción “ESC- Salir del menú” se llama a la subrutina que cierra el puerto de comunicaciones.

Los pasos detallados de cada una de las ventanas se explicaran con mayor claridad en el capítulo 8.

7.3.2 ARCHIVOS ENSAMBLADOR.

Antes de intentar codificar es conveniente revisar algunos conceptos breves de las partes que componen un programa en ensamblador para el PIC16F877 usando el MPLAB. Además de las instrucciones que necesitamos (explicadas en el capítulo III) es necesario revisar las directivas de compilación que son comandos que permiten mejorar la programación. • DIRECTIVA ORG [<etiqueta>] ORG <exp>

Sirve para indicar la dirección de memoria en la cual será colocada, el código generado a continuación. Si el ORG no es indicado, se empieza en la dirección 0. Ejemplo ORG 0x04nop

Indica que el siguiente “nop” se colocará en la dirección 0x04 de la dirección de programa.

• DIRECTIVA EQU <identificador> EQU <expresión>

Permite asignar el valor de expresión al identificador. El general el identificador es un nombre que le es más familiar al programador. Ejemplo: CONF_ADCON1 EQU b'00000110'Crea el identificador CONF_ADCON1 con valor 0x06 • DIRECTIVA ENDEs de uso obligatorio y siempre se coloca al final del programa sirve para marcar el final del programa. El MPLAB solo reconoce las líneas que estén escritas previas a la aparición de la directiva END. • DIRECTIVA LIST Sirve para indicarle al MPLAB cual es el formato del archivo *.list dentro de los parámetros esta el tipo de procesador que se va a emplear. Ejemplo:list p=16F877

46

Page 47: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

• DIRECTIVA INCLUDE include <file> Sirve para incluir en el ensamblado el archivo indicado por el parámetro “file”. Es como si el “file” fuera parte del archivo, como si se hubiera situado en la posición en la cual la directiva aparece. El parámetro “file” puede incluir el path o camino en el cual se encuentra el fichero a incluir. En caso se omita asumirá los directorios del MPLAB y del archivo fuente. Ejemplo include <p16f877.inc> Incluye el archivo “p16F877.inc” que contiene las etiquetas genéricas del PIC16F877. Los archivos ensamblador se encuentran en el Apéndice B, y en él se encuentran detallados cada uno de los pasos a seguir en los diferentes procesos del código.

Se incluye una macro en el archivo ASM, en la cual se hace la elección de bancos por medio del registro STATUS, además se encuentran más instrucciones que nos servirán a lo largo del programa ensamblador Proyecto.asm.

Después de la complicación de Proyecto.asm, se tiene que grabar el PIC16F877A con ayuda del grabador PICSTAR PLUS de Microchip.

7.4 HARDWARE DEL BRAZO.

El armado del brazo se lleva a cabo con ayuda del instructivo contenido en el Kit del brazo k-680 de Steren.

Para llevar a cabo el armado del circuito para el control del brazo robótico se necesitan los siguientes materiales y equipo:Lista de materiales (Simbología basada en el diagrama del circuito armado de la figura 7.4)C1 a C5 Capacitores de 1μFC6 y C7 Capacitores de 33ηFD1 a D5 Diodos 1N4001 (configuración en Puente Darlington)J1 Conector DB9J2 Puerto MOTORESJ3 Puerto SENSORESR0 a R5 Resistencias de 1KΩSW1 DipSwitchU1 Driver Para Rx y Tx Serial MAX232U2 Micro controlador PIC16F877AU3 a U5 Driver Buffer L293BX Oscilador De Cristal 4MHz

El diagrama de conexión para el control del brazo robótico se presenta a continuación:

47

Page 48: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

Figura 7.4. Esquema de conexiones para el control del brazo robóticoEn donde el conector DB9 se conecta como se puede observar al MAX232 estableciendo de esa forma la interfaz entre la PC y el PIC16F877A, se puede ver que se usa el registro TXD

48

Page 49: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

para la transmisión y el registro RXD para la recepción, esto de acuerdo con lo visto en el capítulo IV con respecto a transmisión serial.

Teniendo en cuenta las características mencionadas de transmisión como son:

Velocidad: 2400 baudios. Sin bit de paridad. 8 bits de datos. 1 bit de paro.

De igual forma que en la entrada del PIC, se observa que la salida se amplifica haciendo uso de Drivers Buffers (L293B) y de diodos 1N4001 en configuración de Puente Darlington, y de esta forma llegar a los motores para un mejor funcionamiento:

En la figura 7.4 se tiene el puerto de sensores (J3), de los que no se había hablado ya que durante las pruebas en el brazo se observó que se necesitaba un límite de paro para los motores, ya que sin este límite las partes plásticas de los motores podrían sufrir daños cuando el motor girara indefinidamente, ya que por la estructura externa del brazo esto no puede suceder, un ejemplo de esto serían las tenazas, cuando estas han cerrado o abierto por completo el chasis del brazo no permita que se abran más y ocasiona que si los motores siguen girando las partes plásticas se desgasten rápidamente y no funciona de una forma correcta, es por ese motivo que nos dimos a la tarea de cambiar el software dentro del código en ensamblador para que permitiera tener sensores, que registraran a los motores cuando estos están en su límite de trabajo. Cuando los sensores se encienden automáticamente se apagan los motores que se encuentran en un límite de trabajo esto con la finalidad de no sufrir desgaste.

CAPITULO VIII

49

Page 50: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

8.1 INTERFACE DE USUARIO.

Una vez obtenido todos los elementos de hardware y software, se procede a explicar la interface de usuario, que como ya se mencionó, fue implementada en C. La pantalla inicial es la que se muestra en la figura siguiente, en esta nos da la bienvenida y espera que se oprima una tecla si se comprueba que el puerto COM1 se abrió con éxito.

Figura 8.1. Pantalla inicial.

Una vez presionada una tecla, aparece el menú principal en el cual se puede seleccionar el movimiento manual del brazo o reproducir una rutina previamente grabada.

Figura 8.2. Plantilla principal.

En caso de seleccionar la opción “F1 – MOVIMIENTO MANUAL” se despliega el siguiente menú.

50

Page 51: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

Figura 8.3. Menú de selección de los motores.

Una vez que se ha seleccionado alguno de los motores, se pide que se seleccione el tipo de giro:

Figura 8.4. Menú de sentido de giro de los motores.

Al oprimir el número uno, en este caso para el motor 1 la tenaza del brazo abrirá de forma lenta ya que cada vez que se oprime el uno, el PIC envía un pulso al motor uno, que se mueve de acuerdo a los pulsos recibidos. Esto pasa con cada uno de los cinco motores que se encuentran en el brazo, es decir el movimiento de los motores es en tiempo real pero uno a la vez, si se desea salir para mover otro motor se presionará la tecla ESC del teclado para regresar al menú de selección de los motores.

Después de haber movido uno o varios motores, estos movimientos quedan registrados en el programa para que se pueda llevar a cabo una rutina. Es decir se graba la rutina moviendo los motores del brazo en tiempo real (uno a la vez), después de tener un

51

Page 52: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

movimiento del brazo, este puede llevar a cabo la rutina las veces que se quiera usando presionando F2 en el menú o plantilla principal como se observa en la figura.

Figura 8.5. Reproducción de una rutina.

La rutina se reproducirá después de que el brazo se resetee (vuelva a un punto de partida), esta rutina se lleva a cabo y en la pantalla aparece:

Figura8.6. Termino de reproducción de rutina.

Lo que significa que esta esperando otra indicación ya sea para reproducir una vez más la rutina o para grabar una diferente o tal vez mover manualmente el brazo.

52

Page 53: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

CAPÍTULO IX

9.1 CONCLUSIONES.

Se pudo plasmar y consolidar los conocimientos adquiridos a lo largo de la carrera al aplicarlos al diseño del sistema de control para un brazo robótico, esto al hacer uso de las herramientas que se nos proporcionaron en cada una de las unidades de enseñanza aprendizaje (UEA) de esta institución. Ya que nos basamos en gran medida en temas vistos en varias UEA´s, como lo son digitales 1, 2 y 3 y las diferentes materias de electrónica y circuitos eléctricos, por mencionar solo algunas.

Hablando del brazo robótico nos fue posible cumplir con los objetivos planteados para este proyecto. Se logró implementar la interfaz que permite al usuario mover los cinco motores del brazo robótico y poder establecer una rutina, la cual puede ser reproducida las veces que el usuario desee.El único inconveniente que no se pudo resolver a cabalidad fue la precisión de los giros de los motores, ya que al ser estos de corriente directa no giran en la misma proporción a pesar que se les proporcione voltaje por períodos iguales de tiempo. Debido a lo anterior, la reproducción de la rutina no es una réplica exacta de la grabada por el usuario.Con este proyecto se consolidaron los conocimientos adquiridos a lo largo de la carrera y aplicarlos al diseño del sistema antes mencionado.

Esperamos que la elaboración del presente reporte cumpla con la finalidad de que otra persona logre reproducir el mismo sistema de control, con resultados similares o iguales a los obtenidos en este proyecto.

9.2 BIBLIOGRAFÍA

Manual PIC 16F87X Microchip (Manual de referencia)

Microcontroladores PIC, la solución en un chip J. Ma. Angulo Usategui, E. Martín Cuenca y J. Angulo Martínez Editorial Paraninfo, 1997

Aplicaciones de los microcontroladores PIC de Microchip J. Ma. Angulo Usategui, E. Martín Cuenca y J. Angulo Martínez Editorial McGraw Hill, 1998

Microchip PIC Microcontrollers Data Book, Microchip Technology Inc. Microchip, The embedded control solutions company, 1997 Turbo C/C++ Manual de Referencia

53

Page 54: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

Herbert Schildt Ed. Mc. Graw Hill, 1992

Practical computer vision using C J.R. Parker. John Wiley & Sons Inc., 1994

C++ Builder 3 Francisco Charte Ojeda Anaya Multimedia, 1999

Aprendiendo Borland C++ builder 3 en 21 días Kent Reisdorph Prentice Hall, 1999

Electrónica: Teoría de Circuitos. Robert L. Boylestad, Louis Nashelsky Prentice Hall, 1999

9.3 REFERENCIAS ELECTRÓNICAS.

http://www.microchip.com http://www.microelect.com http://www.fairchildsemi.com http://www.grayhill.com www.ifr.org http://skyscraper.fortunec ty.com/email/250/pic.,,tm http://members.aol.com/-ht-a/Fickpci/pic.htm http://www.qsl.net/lzZrr/pic.htrnl http://www.microchip.com/ http://ranier.hq.nasa.gov/telerobotics_page/coolrobots.htmi http: //mem bers.xoom.com/carlos~76/ro bo t/ http://www.chi.itesm.mx/-cim/robind/robotica.htmi http://sunserv.f ei.uv.mx/ro bot/ro bot. Htm http://www.eien.utah.edu/-osantos/robotica.htmi http://ranier.oact.hq.nasa.gov/teierobotics.hitmi. 1997 . http://robotics.eecs.berkeley.edu/-mcenk/medicai/index.htmi . http://www.aircenter.net/gaia/

54

Page 55: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

APÉNDICE A

*************************************************************************El archivo COM.H es:

/*Este archivo contiene las definiciones de estructuras, constantes, * prototipos y la función necesaria para utilizar el RS-232 interfaz de código * suministrado en COM.C. Debe ser incluido para cualquier rutina de uso de los * procedimientos COM.C./ * * Esta estructura define el buffer de 256 bytes utilizados para * buffers de I / O por las rutinas de COM. Mediante el uso de un tamaño * de buffer de 256 bytes, la actualización de los índices se simplifica. * /typedef struct { char buffer[256]; unsigned char write_index; unsigned char read_index; } BUFFER;/ * * Esta estructura define un puerto COM. Se inicializa * Cuando el puerto se abre con port_open (). * /typedef struct { void (interrupt far * old_vector)(); int uart_base; int irq_mask; int interrupt_number; BUFFER in; BUFFER out;} PORT ;/ * * El ifdef M_186 es la comprobación de Microsoft C / QuickC. * Borland y Microsoft difieren ligeramente en los nombres de * algunos de los nombres de los procedimientos específicos de DOS, y la * solución que se hace aquí. * /#ifdef M_I86#define inportb inp#define outportb outp#define getvect _dos_getvect#define setvect _dos_setvect#define enable _enable

55

Page 56: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

#endif/ * * Los prototipos de función completos. Todas estas * rutinas en realidad residen en COM.C. * /PORT *port_open( int address, int interrupt_number );void port_set( PORT *port, long speed, char parity, int data, int stopbits);void port_close( PORT *port );int port_putc( unsigned char c, PORT *port );int port_getc( PORT *port );/ * * Estas son las direcciones de nivel UART e interrupciones. * Los números para los dos puertos COM IBM compatibles. * /#define COM1_UART 0x3f8#define COM1_INTERRUPT 12#define COM2_UART 0x2f8#define COM2_INTERRUPT 11

***********************************************************************Fin del archivo COM.H***********************************************************************

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++El archivo COM.C es:

/ * Este archivo contiene todo el código para implementar una completa * interfaz por interrupciones de uno de los COM RS-232 * puertos en una PC compatible con IBM. * /#include <stdio.h>#include <stdlib.h>#include <dos.h>#include <conio.h>#include 'C:\Dev-Cpp\include\COM.H'/ * * En este grupo se define y crea todas las definiciones utilizadas * para acceder a los registros y campos de bits en la UART8250. * dado que las definiciones sólo se utilizan en COM.C, * no se incluyen en el fichero de cabecera, donde COM.H * que normalmente cabría esperar. * /#define RBR 0 /* Recepción */

56

Page 57: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

#define THR 0 /* para la transmisión */#define IER 1 /* habilitación de interrupción del registro */#define IER_RX_DATA 1 /* habilitación del bit de registro RX */#define IER_THRE 2 /* habilitación del bit de registro TX */#define IIR 2 /* registro de interrupciones ID */#define IIR_MODEM_STATUS 0 /* Estadísticas del modem*/#define IIR_TRANSMIT 2 /* Transmitir interrupción*/#define IIR_RECEIVE 4 /* Recibir interrupción ID */#define IIR_LINE_STATUS 6 /* Línea de estadísticas interrumpir ID */#define LCR 3 /* Línea de registros de control */#define LCR_DLAB 0x80 /* Divisores de acceso a bit */#define LCR_EVEN_PARITY 0x8 /* establece paridad 'E' bits */#define LCR_ODD_PARITY 0x18 /* Establece paridad 'O' bits */#define LCR_NO_PARITY 0 /* Establece paridad 'N' bits */#define LCR_1_STOP_BIT 0 /* para un bit de parada */#define LCR_2_STOP_BITS 4 /* para 2 bits de parada */#define LCR_5_DATA_BITS 0 /* Establece 5 bits de datos */#define LCR_6_DATA_BITS 1 /* lo mismo pero con 6 bits */#define LCR_7_DATA_BITS 2 /* con 7 bits */#define LCR_8_DATA_BITS 3 /* con 8 bits */#define MCR 4 /* Modem de control de registros */#define MCR_DTR 1 /* Bit para activar DTR */#define MCR_RTS 2 /* Bit para RTS */#define MCR_OUT1 4 /* Bit para OUT1 */#define MCR_OUT2 8 /* Bit para OUT2 */#define LSR 5 /* Línea de estado de registro */#define MSR 6 /* estado del Modem de registro */#define DLL 0 /* Divisor de cierre LSB */#define DLM 1 /* Divisor de cierre MSB *//* * Constantes utilizadas para este programa */#define INT_CONTROLLER 0x20 /* La dirección de 8259*/#define EOI 0x20 /* comando de fin de enteros*/#define BREAK_VECTOR 0x23 /* el vector CTRL-BREAK */

/ * * Estos son dos variables estáticas usadas en COM.C. com es el puntero al puerto * en el que será atendido por la ISR. El antiguo controlador apunta a romper la * combinación de teclas CTRL-BREAK que estaba en el lugar antes de que el puerto * fuese abierto. Se restaurará cuando el puerto está cerrado. * /static PORT *com = NULL;static void ( interrupt far * old_break_handler )();/ * * Esta rutina intercepta el vector CTRL-BREAK. este * Evita que el programa termina antes de tener un

57

Page 58: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

* Posibilidad de apagar las interrupciones COM. Este controlador se * Nada, pero que podría ser utilizado para establecer un indicador de * Es el momento de abortar. * /void interrupt far break_handler(){

}/ * * Esta es la rutina de interrupción para el puerto COM. * Se encuentra en un bucle de lectura de la interrrupt registro de identificación, entonces * servicio de uno de los cuatro diferentes tipos de interrupciones. * Tenga en cuenta que ni siquiera deberíamos obtener el estado de módem y línea * interrumpe en esta implementación, sino que quedan son * en mejoras para más adelante. * /static void interrupt far interrupt_service_routine(){ unsigned char c;

enable(); for ( ; ; ) { switch ( inportb( com->uart_base + IIR ) ) {/ * * Si la interrupción actual se debe a una línea de estado del módem * El cambio, el MSR se lee para eliminar la interrupción, pero * Nada más se puede hacer. * / case IIR_MODEM_STATUS : inportb( com->uart_base + MSR ); break;/ * * Si la interrupción se debe a la transmisión con registros está listo para otro carácter, * primero compruebe para ver si todos los caracteres se quedan en el búfer de salida. Si no * es así, interrupciones de transmisión están desactivados. De lo contrario, el siguiente * carácter es extraído de la memoria intermedia y escrito a la UART. * / case IIR_TRANSMIT : if ( com->out.read_index == com->out.write_index ) outportb( com->uart_base + IER, IER_RX_DATA ); else { c = com->out.buffer[ com->out.read_index++ ]; outportb( com->uart_base + THR, c ); } break;

58

Page 59: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

/ * * Cuando un carácter nuevo viene y genera una interrupción, es leída adentro.

* Si hay espacio en el bloque de entrada, se guarda, de otra manera es descartada. * / case IIR_RECEIVE : c = (unsigned char) inportb( com->uart_base+RBR ); if ((com->in.write_index+1 ) != com->in.read_index) com->in.buffer[ com->in.write_index++ ] = c ; break;/ * * Todo esto hace el código se lee el registro de estado de línea, a * Claro el origen de la interrupción. * / case IIR_LINE_STATUS : inportb( com->uart_base + LSR ); break;/ * * Si no hay interrupciones de validez de izquierda a servicio, una EOI * Se escribe en el controlador de interrupciones 8259, y el * Sale de la rutina. * / Default: outportb( INT_CONTROLLER, EOI ); return; } }}

/ * * Esta rutina abre un puerto RS-232. Esto significa asigna espacio para una estructura * de puerto, inicializa los buffers de entrada y salida, almacena la dirección de la UART y * el número de interrupción. Luego obtiene y almacena el vector de interrupción * configurado actualmente para el UART entonces instala su propia. También establece * un controlador para interceptar el controlador CTRL-BREAK. Finalmente, le dice al * controlador de interrupciones 8259 para empezar a aceptar las interrupciones en la línea * IRQ que utiliza este puerto COM. * /

PORT *port_open( int address, int int_number ){ unsigned char temp; PORT *port;

if ((port = malloc( sizeof( PORT ))) == NULL) return( NULL );

59

Page 60: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

com = port; port->in.write_index = port->in.read_index = 0; port->out.write_index = port->out.read_index = 0; port->uart_base = address; port->irq_mask = (char) 1 << (int_number % 8 ); port->interrupt_number = int_number; port->old_vector = getvect( int_number ); setvect( int_number, interrupt_service_routine ); old_break_handler = getvect( BREAK_VECTOR ); setvect( BREAK_VECTOR, break_handler ); temp = (char) inportb( INT_CONTROLLER + 1 ); outportb( INT_CONTROLLER + 1, ~port->irq_mask & temp ); return (port);}/ * * Esta rutina establece los parámetros de funcionamiento de un * puerto después de que se ha abierto. Esto significa que se establece la * velocidad de transmisión, paridad, el número de bits de datos, y el número de * bits de parada. Las interrupciones están deshabilitadas antes de la rutina * comienza a cambiar registros, y luego se vuelve a habilitar después de * completar los cambios. * /void port_set( PORT *port, long speed, char parity, int data, int stopbits ){ unsigned char lcr_out; unsigned char mcr_out; unsigned char low_divisor; unsigned char high_divisor;/ * * Lo primero es deshabilitar todas las interrupciones del puerto. * EE sólo en caso de que sus caracteres estén en una sesión allí listo para * generar una interrupción. * / outportb (port->uart_base + IER, 0); inportb (port->uart_base);/ * * Escribir la velocidad significa en primer lugar que permite activar el divisor * los registros cierre, a continuación, escribir la de 16 bits int divisor * a dos pasos, a continuación, desactivar el seguro divisor para el otro * registros se puede acceder normalmente. */ low_divisor = (char) (115200L / speed ) & 0xff; high_divisor = (char) ((115200L / speed ) >> 8);

60

Page 61: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

outportb( port->uart_base + LCR, LCR_DLAB ); outportb( port->uart_base + DLL, low_divisor ); outportb( port->uart_base + DLM, high_divisor ); outportb( port->uart_base + LCR, 0 );/ * * Configuración del registro de la línea de control se establece la * paridad, el número de bits, y el número de bits de parada. * / if ( parity== 'E' ) lcr_out = LCR_EVEN_PARITY; else if ( parity == 'O' ) lcr_out = LCR_ODD_PARITY; else lcr_out = LCR_NO_PARITY;

if ( stopbits == 2 ) lcr_out |= LCR_2_STOP_BITS;

if ( data == 6 ) lcr_out |= LCR_6_DATA_BITS; else if ( data == 7 ) lcr_out |= LCR_7_DATA_BITS; else if ( data == 8 ) lcr_out |= LCR_8_DATA_BITS;

outportb( port->uart_base + LCR, lcr_out );/ * * Me dirijo a RTS y DTR, así como OUT2. OUT2 es necesario * para permitir que las interrupciones en las tarjetas de PC compatible. * / mcr_out = MCR_RTS | MCR_DTR | MCR_OUT2 ; outportb( port->uart_base + MCR, mcr_out );/ * * Por último, reinicie las interrupciones del receptor, y la salida. * / outportb( port->uart_base + IER, IER_RX_DATA );}/ * * Con el fin de cerrar el puerto, lo primero es deshabilitar las interrupciones en la UART, * a continuación, deshabilitar las interrupciones de la línea IRQ de la UART en el * controlador de interrupciones 8259. Se quitan todas las DTR, RTS, y OUT2. El * programa de gestión de interrupciones previo de la UART está recuperado, y el viejo * manipulador de suspensión está recuperado. Finalmente, la estructura de datos del * puerto se libera, y las cosas deben regresar a la normalidad. * /

void port_close( PORT *port )

61

Page 62: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

{ unsigned char temp;

outportb( port->uart_base + IER, 0 ); temp = (unsigned char) inportb( INT_CONTROLLER + 1 ); outportb( INT_CONTROLLER + 1, port->irq_mask | temp ); setvect( port->interrupt_number, port->old_vector ); setvect( BREAK_VECTOR, old_break_handler ); outportb( port->uart_base + MCR, 0 ); free( port );}/ * * Esta rutina se utiliza para enviar un único carácter a * la UART. Si hay espacio en el registro de salida, el carácter * se inserta en el registro. A continuación la rutina comprueba si las interrupciones de * transmisión están actualmente habilitados para la UART. Si no es así, ellos son *habilitados así el ISR verá este nuevo carácter. * /int port_putc( unsigned char c, PORT *port ){ if (( port->out.write_index+1 ) == port->out.read_index) return( -1 ); port->out.buffer[ port->out.write_index ] = c; port->out.write_index += 1; if (( inportb( port->uart_base + IER ) & IER_THRE) == 0 ) outportb( port->uart_base+IER,IER_THRE | IER_RX_DATA); return( c );}/ * * Esta rutina comprueba si hay un caracter * disponible en el registro de entrada para el puerto especificado. * Si existe, se retiró y regresó a la * función que llama. * /int port_getc(PORT *port){ if ( port->in.write_index == port->in.read_index ) return( -1 ); else return( port->in.buffer[ port->in.read_index++ ] );}

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Fin del archivo COM.C++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

62

Page 63: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&El archivo MENU.C se presenta a continuación:/*Archivo: Menu2.cDescripción: Este archivo es el encargado del control de los 5 motores del brazo robótico de sterenAutores: Morelos Mora Jaime, Chávez Miguel Juan CarlosFecha: junio de 2011*/

/*Librerías usadas de C*/#include <stdio.h>#include <stdlib.h>#include <dos.h>#include <conio.h>

# define TAMAX 10000

/*Librería de usuario*/#include "C:\TurboC\CODE\COM.C" /*En caso de ser necesario se debe de actualizar la ruta en que se encuentra el archivo COM.C*/

/*Declaración de funciones y procedimientos que usa este archivo*/

int menu_opciones(); void Procesos_opciones (int opc, int *contador, int movimientos [TAMAX]);int menu_Manual (); void Procesos_Manual (int opc, int arreglo [TAMAX], int *contador);int menuDireccion();

PORT *port;/*Apuntador global para la manipulación del puerto COM1*/

int main(){ int opc,opc1;/*Para guardar el valor de la opción seleccionada*/ int c; /*Para guardar el valor del carácter leído, en su código ASCII*/ int contador=0; int mov[TAMAX]={10};

/*SE PROCEDE A ABRIR EL SERIAL */

clrscr();/*Limpia la pantalla*/

63

Page 64: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

port = port_open ( COM1_UART, COM1_INTERRUPT ); /*Se abre el puerto*/ if ( port== NULL ) {

printf("ERROR AL INTENTAR ABRIR EL PUERTO!\n"); exit(1);

} else {

port_set( port,2400L, 'N', 8, 1 ); /*Se establece la configuración del puerto*/printf("\n Puerto COM1: ABIERTO\n");printf("\n Para comenzar presiona cualquier tecla");getch();clrscr();

}

while(1) {

opc1=menu_opciones();

if(contador==0 && opc1==60){ printf("\n\nGrabe una rutina primero!!!!!!!!!!!!!!!!!!!!!\n"); getch();}else{

c=11;/*PARA RESETEAR*/port_putc( (unsigned char) c, port);Procesos_opciones(opc1,&contador,mov);

}

if (opc1 == 27) {port_close( port ); /*Se cierra el puerto*/break;

}}

return( 0 ); /*Fin del programa principal*/

}

64

Page 65: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

/****************************************************************

FUNCIONES Y PROCEDIMIENTOS

****************************************************************//* Descripción : Esta función manda a desplegar las dos opciones para manipular el brazo robótico */

int menu_opciones()

{

int opc,opc1;do{clrscr();printf("\n\n\t\t\tBienvenido\n");printf("\n\n\t\tBrazo Robótico\n");printf("\n \t F1 - MOVIMIENTO MANUAL");printf("\n \t F2 - REPRODUCIR RUTINA");printf("\n\n \t ESC- Salir de configuración\n");printf("\n \tSeleccione una opción: ");setbuf(stdin, NULL);opc=getch();

if (opc!=27){

opc1=getch();}else{

opc1=opc;} }while(!(opc1==59 || opc1==60 || opc1==27 ));

return (opc1);}

/* Descripción : Este procedimiento manda a llamar las rutinas para el movimiento manual o ejecuta la rutina grabada */

65

Page 66: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

void Procesos_opciones(int opc, int *contador,int movimientos[TAMAX]){

int opc1=0, cont=0,c,opc2=0;long int i=0;

switch(opc){

case 59:{ do{/*MOVIMIENTO MANUAL*/

opc1=menu_Manual();

Procesos_Manual(opc1,movimientos,contador);/* contador=*contador+aux;*/

} while(opc1 !=27);

break; }

case 60:{ /*SEMI-AUTOMATICO*/

printf("\n contador:%d ",*contador);c=11;/*PARA RESETEAR*/port_putc( (unsigned char) c, port);printf("\n Presione una tecla despues de resetear: ");getch();for(cont=1; cont<=*contador;cont++){

c=movimientos[cont]; port_putc( (unsigned char) c, port); printf("\n mov=% d",movimientos[cont]);

for(i=1; i<=9000050;i++){

/*Pierde tiempo*/}c=10;port_putc( (unsigned char) c, port);

}

printf("\n Desea grabar nueva rutina: 0: no 1:si \n");scanf("%d",&opc2);if (opc2==1){ for(i=0; i<=*contador;i++) {

66

Page 67: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

movimientos[i]=10; } (*contador)=0;}

break; }

}

}

/* Descripción: Esta función manda a imprimir en pantalla las diferentes opciones para el control de los motores */

int menu_Manual (){ int opc,opc1; do{ clrscr(); printf("\n\n\t\t\tBienvenido\n"); printf("\n\n\t\tBrazo Robótico\n"); printf("\n \t F1 - MOVER MOTOR 1"); printf("\n \t F2 - MOVER MOTOR 2"); printf("\n \t F3 - MOVER MOTOR 3"); printf("\n \t F4 - MOVER MOTOR 4"); printf("\n \t F5 - MOVER MOTOR 5"); printf("\n\n \t ESC- Salir de configuracion\n"); printf("\n \tSeleccione una opción: "); setbuf(stdin, NULL); opc=getch(); if (opc!=27) { opc1=getch(); } else { opc1=opc; } }while(!(opc1==59 || opc1==60 ||opc1==61 ||opc1==62 ||opc1==63 || opc1==27 ));

return (opc1);}

67

Page 68: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

/* Descripción: Este procedimiento manda la instrucción al PIC para mover el motor seleccionado por el usuario*/void Procesos_Manual(int opc, int arreglo[TAMAX], int *contador){

int opc1=0, c;long int i=0;

switch(opc){

case 59:{ /*MOTOR 1*/

do{clrscr();printf("\n\t\t MOTOR 1");

opc1 = menuDireccion();

if(opc1==49)/*Mover a la derecha Motor 1*/ {

(*contador)++;c=1;arreglo[*contador]=c; port_putc( (unsigned char) c, port);printf("\n\n\t\t\tDerecha\n");

for(i=0; i<=7000000;i++){

/*Pierde tiempo*/}c=10; /*Manda a parar los motores*/port_putc( (unsigned char) c, port);

} else if(opc1==50)/*Mover a la izquierda*/ { (*contador)++; c=0;

arreglo[*contador]=c;port_putc( (unsigned char) c, port);printf("\n\n\t\t\tIzquierda\n");

68

Page 69: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

for(i=0; i<=7000000;i++){

/*Pierde tiempo*/}

c=10;port_putc( (unsigned char) c, port);/*getch();*/

} else if(opc1==51)/*PARAR*/ {

(*contador)++; c=10;

arreglo[*contador]=c;port_putc( (unsigned char) c, port);printf("\n\n\t\t\tApagado\n"); /*getch();*/

}

}while(opc1!=27); break; }

case 60:{/* MOTOR 2*/

do{clrscr();printf("\n\t\t MOTOR 2");

opc1 = menuDireccion(); if(opc1==49)/*Mover a la derecha*/ { (*contador)++; c=2; arreglo[*contador]=c; port_putc( (unsigned char) c, port); printf("\n\n\t\t\tDerecha\n");

for(i=0; i<=7000000;i++){

/*Pierde tiempo*/}c=10;port_putc( (unsigned char) c, port);

69

Page 70: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

} else if(opc1==50)/*Mover a la izquierda*/ { (*contador)++; c=3;

arreglo[*contador]=c;port_putc( (unsigned char) c, port);printf("\n\n\t\t\tIzquierda\n");for(i=0; i<=7000000;i++){

/*Pierde tiempo*/}

c=10;port_putc( (unsigned char) c, port);/*getch();*/

} if(opc1==51)/*PARAR*/ {

(*contador)++; c=10;

arreglo[*contador]=c;port_putc( (unsigned char) c, port);printf("\n\n\t\t\tApagado\n");/*getch();*/

}}while(opc1!=27);

break;}

case 61:{/* MOTOR 3*/

do{clrscr();printf("\n\t\t MOTOR 3");

opc1 = menuDireccion(); if(opc1==49)/*Mover a la derecha*/ { (*contador)++; c=4; arreglo[*contador]=c; port_putc( (unsigned char) c, port); printf("\n\n\t\t\tDerecha\n"); for(i=0; i<=7000000;i++)

{

70

Page 71: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

/*Pierde tiempo*/}c=10;port_putc( (unsigned char) c, port);/*getch();*/

} else if(opc1==50)/*Mover a la izquierda*/ { (*contador)++; c=5;

arreglo[*contador]=c;port_putc( (unsigned char) c, port);printf("\n\n\t\t\tIzquierda\n");for(i=0; i<=7000000;i++){

/*Pierde tiempo*/}c=10;port_putc( (unsigned char) c, port);/*getch();*/

} if(opc1==51)/*PARAR*/ { (*contador)++; c=10;

arreglo[*contador]=c;port_putc( (unsigned char) c, port);printf("\n\n\t\t\tApagado\n");/*getch();*/

}}while(opc1!=27);

break;}

case 62:{/* MOTOR 4*/

do{

clrscr();printf("\n\t\t MOTOR 4\n");

opc1 = menuDireccion(); if(opc1==49)/*Mover a la derecha*/ {

(*contador)++;

71

Page 72: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

c=6; arreglo[*contador]=c; port_putc( (unsigned char) c, port); printf("\n\n\t\t\tDerecha\n"); for(i=0; i<=7000000;i++)

{/*Pierde tiempo*/

}c=10;port_putc( (unsigned char) c, port);/*getch();*/

} else if(opc1==50)/*Mover a la izquierda*/ { (*contador)++; c=7;

arreglo[*contador]=c;port_putc( (unsigned char) c, port);printf("\n\n\t\t\tIzquierda\n");for(i=0; i<=7000000;i++){

/*Pierde tiempo*/}c=10;port_putc( (unsigned char) c, port);/*getch();*/

} if(opc1==51)/*PARAR*/ {

(*contador)++; c=10;

arreglo[*contador]=c;port_putc( (unsigned char) c, port);printf("\n\n\t\t\tApagado\n");/*getch();*/

}}while(opc1!=27);

break;}

case 63:{/* MOTOR 5*/

do{

72

Page 73: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

clrscr();printf("\n\t\t MOTOR 5");

opc1 = menuDireccion(); if(opc1==49)/*Mover a la derecha*/ { (*contador)++; c=8; arreglo[*contador]=c;

port_putc( (unsigned char) c, port); printf("\n\n\t\t\tDerecha\n"); for(i=0; i<=7000000;i++)

{/*Pierde tiempo*/

}c=10;port_putc( (unsigned char) c, port);/*getch();*/

} else if(opc1==50)/*Mover a la izquierda*/ { (*contador)++; c=9;

arreglo[*contador]=c;

port_putc( (unsigned char) c, port);printf("\n\n\t\t\tIzquierda\n");for(i=0; i<=7000000;i++){

/*Pierde tiempo*/}c=10;port_putc( (unsigned char) c, port);/*getch();*/

} if(opc1==51)/*PARAR*/ { (*contador)++; c=10;

arreglo[*contador]=c;port_putc( (unsigned char) c, port);printf("\n\n\t\t\tApagado\n");/*getch();*/

73

Page 74: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

}}while(opc1!=27);

break;}}

}

/* Descripción: Esta función permite seleccionar el tipo de giro a realizar*/

int menuDireccion()

{ int opc1; do{ /* clrscr();*/

printf("\n");printf("\n \t1) MOVER A LA DERECHA ");printf("\n \t2) MOVER A LA IZQUIERDA ");printf("\n \t3) DETENER ");

printf("\n \tESC-Regresar al menu anterior\n");printf("\n \tSeleccione una opción: ");setbuf(stdin, NULL);opc1=getche();

}while(!(opc1==49 || opc1==50 || opc1==51 || opc1==27));return (opc1);}

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&Fin del archivo MENU.C&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

74

Page 75: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

APÉNDICE B

En al apéndice siguiente se encuentra todo el código ensamblador del programa en ASM, que se grabó en el PIC16F877A para el control del brazo robótico, también se encuentra la macros

Primero presentamos la macros la cual debe de ir incluida en los archivos donde se tenga la dirección del código principal llamado Proyecto.asm.

;============================================================================; Nombre del Archivo: macros.asm.; Archivo que contiene un conjunto de macros;============================================================================;----------------------------------------------------------------------------; Macro del Banco 0; Selección del Banco 0; Nombre: banco0;----------------------------------------------------------------------------banco0MACRO

BCF STATUS, RP0BCF STATUS, RP1ENDM

;----------------------------------------------------------------------------; Macro del Banco 1; Selección del Banco 1; Nombre: banco1;----------------------------------------------------------------------------banco1MACRO

BSF STATUS, RP0BCF STATUS, RP1ENDM

;----------------------------------------------------------------------------; Macro del Banco 2; Selección del Banco 2; Nombre: banco2;----------------------------------------------------------------------------banco2MACRO

BCF STATUS, RP0BSF STATUS, RP1ENDM

75

Page 76: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

;----------------------------------------------------------------------------; Macro del Banco 3; Selección del Banco 3; Nombre: banco3;----------------------------------------------------------------------------banco3MACRO

BSF STATUS, RP0BSF STATUS, RP1ENDM

;----------------------------------------------------------------------------; Macro para transferir un número a un registro; número ---> registro; Nombre: MOVLF;----------------------------------------------------------------------------MOVLF MACRO número, registro

MOVLW númeroMOVWF registroENDM

;----------------------------------------------------------------------------; Macro para transferir el contenido de un registro fuente al registro destino; registro_fuente ---> registro_destino; Nombre: MOVFF;----------------------------------------------------------------------------MOVFF MACRO reg_fuente, reg_destino

MOVFreg_fuente, WMOVWF reg_destinoENDM

;----------------------------------------------------------------------------; Macro para transferir el contenido de un registro al acumulador; registro ---> W; Nombre: MOVFW;----------------------------------------------------------------------------MOVFWX MACRO registro

MOVFregistro, WENDM

;----------------------------------------------------------------------------; Macro que realiza el corrimiento hacia la derecha sin involucrar el Carry; RotIzq(registro) ---> registro; Nombre: RRFSC;----------------------------------------------------------------------------RRFSC MACRO registro

RRF registro, WRRF registro, FENDM

;----------------------------------------------------------------------------; Macro que realiza el corrimiento hacia la izquierda sin involucrar el Carry; RotDer(registro) ---> registro

76

Page 77: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

; Nombre: RLFSC;----------------------------------------------------------------------------RLFSC MACRO registro

RLF registro, WRLF registro, FENDM

;----------------------------------------------------------------------------

A continuación se encuentra el programa en ensamblador del proyecto:

;===================================================================; PROYECTO DE INGENIERÍA ELECTRÓNICA; "BRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC"; Nombre del Programa: proyecto.asm.; Programa que permite el control de los 5 motores del brazo robótico de steren; Autores: ; Morelos Mora Jaime Matricula: 205216250; Chávez Miguel Juan Carlos Matricula: 204324424; UAM IZTAPALAPA ;===================================================================

LIST p=16F877a ; Introduce el modelo del PIC que se usa; Es una directiva del ensamblador.

Radix Hex ; Indica la base en hexadecimal#include <P16f877a.inc> ; Definición de los SFR y sus bits.#include <macros.asm> ; Declaración de macros.

__config _XT_OSC & _WRT_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_OFF & _LVP_OFF & _CPD_OFF & _CP_OFF & _DEBUG_OFF

errorlevel 1 ; También puede ser 2.

;-------------------------------------------------------------------; Declaración de localidades de memoria y registros especiales; Zona de etiquetas;-------------------------------------------------------------------; Declaraciones de variables en la RAM;-------------------------------------------------------------------W_TEMP EQU 0x21 ; Respalda el reg de trabajo, W, cuando ocurre una interrupción.STATUSR EQU 0x22 ; Respaldar el STATUS register en una interrupción.

; Se incluye el banco en uso antes de la interrupción.

77

Page 78: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

PCLAT_T EQU 0x23 ; Respalda el registro PCLATH.FSR_TMP EQU 0x24 ; Respalda el registro FSR.

Addr EQU 0X26 ; Para indicar la dirección de la EEPROM en la que se ; escribirá

ValorEP EQU 0X27 ; Valor a grabar en la EEPROMBandera EQU 0X28Puerto EQU 0X29

;-------------------------------------------------------------------; Definiciones;-------------------------------------------------------------------#DEFINE RXtris TRISC, 7 ; Puerto de entrada RS232, RC7 del Puerto C.#DEFINE TXtris TRISC, 6 ; Puerto de salida RS232, RC6 del Puerto C.;-------------------------------------------------------------------; Inicio del programa Principal.;-------------------------------------------------------------------reset ORG 0 ; Comando que indica al ensamblador la dirección de la memoria

; de programa donde sitúa la siguiente instrucción.

GOTO inicio ; Salta al inicio del programaORG 4 ; Comando que indica al ensamblador la dirección de la memoria

; de programa donde sitúa la siguiente instrucción.; Esta es direccionada cuando se presenta una interrupción.

GOTO ISR ; Salta a la rutina que atiende la interrupciónORG 5 ; Comando que indica al ensamblador la dirección

; de la memoria de programa donde sitúa la siguiente; instrucción. Propiamente el programa principal inicia; en la localidad de memoria 05.

dt "ver1 dic 2010"

inicio banco1 ; Direcciona el Banco 1.MOVLF H'0F', TRISC ; Configura TrisC de manera que la parte baja

; sea de entrada ; y la parte alta de salida.

MOVLF H'00', TRISA ; Configura el puerto A como salidaMOVLF H'00', TRISB ; Configura el puerto B como salidaMOVLF H'00', TRISD ; Configura el puerto D como salidaMOVLF H'07', ADCON1 ; Se configuran los puertos como

; digitales.banco0 ; Direcciona el Banco 0.

MOVLW 0X01 ; Carga el valor 01H en W que es la dirección de la EEPROM ;donde se encuentra el valor de SPBRG

CALL READ_EEPROOM ; Se lee la dirección 01 de la EEPROM

78

Page 79: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

SUBLW D'103' ; Verifica que en SPBRG se tenga la velocidad de 2400 baudios, que ; es la velocidad por default

BTFSS STATUS,Z ; Salta si el valor de SPBRG es 103, es decir la velocidad es de 2400 ; baudios

CALL Escribir_SBRG ; La velocidad no es 2400; por tanto se debe de guardar el ; valor 103 en la dirección 01H de la EEPROM

CALL IniUART ; Inicializa la USART del PIC16877A para una ;comunicación RS232.

banco1 ; Pasa al banco 1.BSF PIE1, RCIE ; Habilita la interrupción de recepción USART.banco0 ; Pasa al banco 0.MOVLW B'11000000' ; INTCON <-- H'C0'. Registro encargado de la

; regulación de las interrupciones.MOVWF INTCON ; GIE(1) Habilita el bit de interrupción global,

; PEIE(1) Habilita todas las interrupciones sin ; máscara.; Todas las demás interrupciones y banderas de ; interrupción se ponen en cero.

MOVLW H'00' ; PIR1 <-- H'00'. RCIF(0) Buffer de recepción ; USART vacio.

MOVWF PIR1 ; TXIF(0) Buffer de transmisión USART lleno.

CLRF Bandera ; Limpia la bandera que indica ciclo ; Este ciclo espera que ocurra una interrupción

NOP GOTO ciclo

;-------------------------------------------------------------------; Rutinas.;-------------------------------------------------------------------; Rutina de inicialización de la USART del PIC16F627 para una comunicación RS232.; Configura los registros de funciones especiales para la comunicación serial.; Comunicación Asíncrona RS-232.; PIE1 : Control de Interrupciones Periféricas.; Subrutina: IniUART.;-------------------------------------------------------------------IniUART banco1 ; Pasa al banco 1.

BSF RXtris ; Terminales RC7<RX> y RC6<TX> como entradas (alta ; impedancia).

BSF TXtris ; Para ser configuradas como líneas de comunicación serial.BCF PIE1, RCIE ; Deshabilita interrupciones de la USART por el momento.BCF PIE1, TXIE

; ******************************************************************; Inicializa el generador de Baudios

79

Page 80: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

; Cuarzo de 4 MHz BRGH = 1 Alta velocidad.; SPBRG - Generador de Baudios.; Valor a cargar en el registro SPBRG (en decimal); Velocidad Valor a cargar Error %; 2,400 baudios 103 0.17; 9,600 baudios 25 0.16; 19,200 baudios 12 0.16; 27,800 baudios 8 3.55; 35,700 baudios 6 6.29; ****************************************************************** banco0 MOVLW 0X01 ; Carga el valor de 01 en W, donde se encuentra el valor de

; SPBRG CALL READ_EEPROOM ;Se lee de la EEPROM el valor de la dirección 01h BANKSEL SPBRG ; Busca el banco donde se encuentra la palabra SPBRG MOVWF SPBRG ; Mueve el valor leído de la EEPROM a SPBRG

; ******************************************************************; Inicialización de registros de transmisión - recepción.; TXSTA - Estado y control de transmisión.; RCSTA - Estado y control de recepción.; TSR - Registro de desplazamiento de transmisión.; ******************************************************************; - TXSTA - Estado y control de transmisión.; ******************************************************************; TXSTA-7- CSRC - Selección reloj - Modo asíncrono no incluye.; TXSTA-6- TX9 - Transmission 9/8 bits. 0 - 8 bits.; TXSTA-5- TXEN - Activa transmisión. 1 - Transmisión activada.; TXSTA-4- SYNC - Modo síncrono/asíncrono. 0 - Modo asíncrono.; TXSTA-3- Reservado.; TXSTA-2- BRGH - Selección velocidad. 1 - Alta velocidad.; TXSTA-1- TRMT - Estado de TSR. 1 - TSR vacío, 0 - TSR no vacío.; TXSTA-0- TX9D - Noveno bit del dato transmitido.; ******************************************************************

MOVLF B'10100100', TXSTA; TXSTA <-- B'00100100'.; TX9 = 0 8 bits, TXEN = 1 Transmisión activada; SYNC = 0 Modo asíncrono, BRGH = 1 Alta velocidad,; TRMT = 0 TSR no vacio.

; ******************************************************************; - RCSTA - Estado y control de recepción.; ******************************************************************; RCSTA-7- SPEN - Activación del puerto serial. 1 - Habilitando RC7/RX y RC6/TX.; RCSTA-6- RX9 - Recepción 9/8 bits. 0 - 8 bits.; RCSTA-5- SREN - No incluye en modo asíncrono.; RCSTA-4- CREN - Configura recepción continua. 1 - Recepción continúa.; RCSTA-3- ADEN - Bit de detección de dirección. 1 - Detección de dirección, 0 - Desactiva detección.

80

Page 81: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

; RCSTA-2- FERR - Bit error de trama. 0 - Sin error.; RCSTA-1- OERR - Bit error de desbordamiento. 0 - Sin error.; RCSTA-0- RX9D - Noveno bit del dato recibido.; ******************************************************************

banco0 ; Pasa al banco 0.MOVLF B'10010000', RCSTA; RCSTA <-- B'10010000'.

; SPEN = 1 Activación del puerto serial,; RX9 = 0 8 bits, CREN = 1 Recepción continua.

RETURN ;===================================================================; Rutina de interrupción; Se procede a dar servicio a la interrupción cuando se encuentra; habilita la interrupción de recepción USART.;===================================================================ISR MOVWF W_TEMP ; Respaldar el acumulador, W.

MOVFSTATUS, W ; Respaldar el STATUS register.MOVWF STATUSR ; Se incluye el banco en uso antes de la interrupción

BCF PIR1, RCIF ; RCIF(0) Buffer de recepción USART vacío.

MOVLW 0 ; Verifica si se desea girar el motor 1 a la derecha SUBWF RCREG,W BTFSC STATUS,Z GOTO Motor_1_der

MOVLW 1 ; Verifica si se desea girar el motor 1 a la izquierda SUBWF RCREG,W BTFSC STATUS,Z GOTO Motor_1_izq

MOVLW 2 ; Verifica si se desea girar el motor 2 a la derecha SUBWF RCREG,W; BTFSC STATUS,Z; GOTO Motor_2_der

MOVLW 3 ; Verifica si se desea girar el motor 2 a la izquierda SUBWF RCREG,W; BTFSC STATUS,Z; GOTO Motor_2_izq

MOVLW 4 ; Verifica si se desea girar el motor 3 a la derecha SUBWF RCREG,W;

81

Page 82: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

BTFSC STATUS,Z; GOTO Motor_3_der

MOVLW 5 ; Verifica si se desea girar el motor 3 a la izquierda SUBWF RCREG,W; BTFSC STATUS,Z; GOTO Motor_3_izq

MOVLW 6 ; Verifica si se desea girar el motor 4 a la derecha SUBWF RCREG,W; BTFSC STATUS,Z; GOTO Motor_4_der

MOVLW 7 ; Verifica si se desea girar el motor 4 a la izquierda SUBWF RCREG,W; BTFSC STATUS,Z; GOTO Motor_4_izq

MOVLW 8 ; Verifica si se desea girar el motor 5 a la derecha SUBWF RCREG,W; BTFSC STATUS,Z; GOTO Motor_5_der

MOVLW 9 ; Verifica si se desea girar el motor 5 a la izquierda SUBWF RCREG,W; BTFSC STATUS,Z; GOTO Motor_5_izq

MOVLW 0xA ; Verifica si se desea apagar los 5 motores SUBWF RCREG,W; BTFSC STATUS,Z; GOTO APAGAR

MOVLW 0xB ; Verifica si se deben de mandar los 5 motores a su posición de inicio SUBWF RCREG,W; BTFSC STATUS,Z; GOTO RESETEAR

;Si llega a esta línea quiere decir que no es ninguna de las 11 funciones esperadas

MOVLF H'00', RCREG CALL RESTAURA ; Manda llamar la rutina para restaurar W y el STATUS

; registerRETFIE ; Fin de interrupción.

82

Page 83: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

;-------------------------------------------------------------------; Manda a posición de origen los 5 motores;-------------------------------------------------------------------

RESETEAR

Res_M5_der MOVLF H'50',PORTD ; Resetea motor 5 todo a la derecha

BTFSS PORTC, 4 ; Si el sensor es uno saltarGOTO Res_M5_der

MOVLF H'00', PORTD ; apaga el motor 4 y 5

Res_M4_izq

MOVLF H'06',PORTD ; Resetea motor 4 todo a la izq.BTFSS PORTC, 3 ; Si el sensor es uno saltar

GOTO Res_M4_izq

MOVLF H'00', PORTD ; apaga el motor 4 y 5

Res_M3_der

MOVLF H'50',PORTB ; Resetea motor 3 todo a la derechaBTFSS PORTC, 2 ; Si el sensor es uno saltar

GOTO Res_M3_der

MOVLF H'00', PORTB ; apaga el motor 2 y 3

Res_M2_der

MOVLF H'05',PORTB ; Resetea motor 2 todo a la derechaBTFSS PORTC, 1 ; Si el sensor es uno saltar

GOTO Res_M2_der

MOVLF H'00', PORTB ; apaga el motor 2 y 3

Res_M1_izq

MOVLF H'06',PORTA ; Resetea motor 1 todo a la izq.BTFSS PORTC, 0 ; Si el sensor es uno saltar

GOTO Res_M1_izq

MOVLF H'00', PORTA ; apaga el motor 1

CALL RESTAURA ; Manda llamar la rutina para restaurar W y el STATUS register

83

Page 84: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

RETFIE

;-------------------------------------------------------------------; Apaga los 5 motores;-------------------------------------------------------------------

APAGARMOVLF H'00', PORTAMOVLF H'00', PORTBMOVLF H'00', PORTDCALL RESTAURA ; Manda llamar la rutina para restaurar W y el STATUS

; registerRETFIE

Motor_1_der

MOVLF H'05',PORTA CALL RESTAURA ; Manda llamar la rutina para restaurar W y el STATUS ; register

RETFIE ; Fin de interrupción.

Motor_1_izq

BTFSS PORTC, 0 ; Si el sensor es uno saltarMOVLF H'06',PORTA

CALL RESTAURA ; Manda llamar la rutina para restaurar W y el STATUS ; register

RETFIE ; Fin de interrupción.

Motor_2_der

BTFSS PORTC, 1 ; Si el sensor es uno saltarMOVLF H'05',PORTB

CALL RESTAURA ; Manda llamar la rutina para restaurar W y el STATUS ; register

RETFIE ; Fin de interrupción.

Motor_2_izq

MOVLF H'06',PORTB CALL RESTAURA ; Manda llamar la rutina para restaurar W y el STATUS

; registerRETFIE

Motor_3_der

84

Page 85: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

BTFSS PORTC, 2 ; Si el sensor es uno saltarMOVLF H'50',PORTB

CALL RESTAURA ; Manda llamar la rutina para restaurar W y el STATUS ; register

RETFIE ; Fin de interrupción.

Motor_3_izq

MOVLF H'60',PORTB CALL RESTAURA ; Manda llamar la rutina para restaurar W y el STATUS

; registerRETFIE ; Fin de interrupción.

Motor_4_der

MOVLF H'05',PORTD CALL RESTAURA ; Manda llamar la rutina para restaurar W y el STATUS

; registerRETFIE ; Fin de interrupción.

Motor_4_izq

BTFSS PORTC, 3 ; Si el sensor es uno saltarMOVLF H'06',PORTD

CALL RESTAURA ; Manda llamar la rutina para restaurar W y el STATUS ; register

RETFIE

Motor_5_der

BTFSS PORTC, 4 ; Si el sensor es uno saltarMOVLF H'50',PORTD

CALL RESTAURA ; Manda llamar la rutina para restaurar W y el STATUS ; register

RETFIE ; Fin de interrupción.

Motor_5_izq

MOVLF H'60',PORTD CALL RESTAURA ; Manda llamar la rutina para restaurar W y el STATUS

; registerRETFIE ; Fin de interrupción.

;------------------------------------------------------------------------; RUTINA DE ESCRITURA DE LA PALABRA SBRG;------------------------------------------------------------------------

85

Page 86: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

;Escribe en la dirección 01 el número 103 para que la velocidad por default sea 2400 baudios

Escribir_SBRG

MOVLW 0X01 ; Carga la dirección donde se encuentra el valor de SPBRG MOVWF Addr ; Carga el valor del 01h en Addr

MOVLW D'103' ; Carga el valor de 103 a W. MOVWF ValorEP ; Carga el valor de 103 en ValorEp CALL Writ_EEPROM ; Escribe la constante de velocidad 103 en la dirección 01h de

; la EEPROM RETURN

;------------------------------------------------------------------------; RUTINA DE LECTURA DE LA EEPROM ;------------------------------------------------------------------------READ_EEPROOM

BANKSEL EEADRMOVWF EEADRMOVLW 0x01BANKSEL EECON1MOVWF EECON1NOPBANKSEL EEDATANOPMOVF EEDATA, Wbanco0

RETURN

;------------------------------------------------------------------------; RUTINA DE ESCRITURA DE LA EEPROM;------------------------------------------------------------------------

Writ_EEPROM BANKSEL EECON1 ; Selecciona el Banco de EECON1 BTFSC EECON1, WR ; Espera a que se complete el proceso de GOTO $-1 ; escritura anterior. banco0 MOVF Addr, W ; Localidad de Memoria EEPROM donde BANKSEL EEADR ; Selecciona el Banco de EEADR MOVWF EEADR ;se desea escribir el nuevo dato banco0 MOVF ValorEP,W ; Dato que se desea almacenar en la BANKSEL EEDATA ; Memoria EEPROM.

86

Page 87: PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS …148.206.53.84/tesiuami/UAMI16057.pdf · Diseñar el sistema de control de un brazo robotizado que posee cinco grados de libertad. El

PROYECTO DE INGENIERÍA ELECTRÓNICA MORELOS MORA JAIMEBRAZO ROBÓTICO CONTROLADO CON MICROCONTROLADOR PIC CHÁVEZ MIGUEL JUAN CARLOS

MOVWF EEDATA BANKSEL EECON1 ; Selecciona el banco de EECON1 BCF EECON1,EEPGD ; Para escribir en la memoria de datos y no en la de programa BSF EECON1,WREN ; Habilita la escritura BCF INTCON,GIE ; Deshabilita todas las interrupciones MOVLW H'55' MOVWF EECON2 ; Escribe H'55' MOVLW H'AA' MOVWF EECON2 ; Escribe H'AA' BSF EECON1, WR ; Inicio de escritura en la EEPROM

BSF INTCON,GIE BCF EECON1,WREN ; Deshabilita escritura RETURN

;------------------------------------------------------------------------; RUTINA QUE RESTAURA EL STATUS REGISTER Y EL ACUMULADOR (W);------------------------------------------------------------------------RESTAURA

MOVFSTATUSR, W ; Restaura el STATUS register.MOVWF STATUSSWAPF W_TEMP, F ; Restaura el acumulador, W.SWAPF W_TEMP, WRETURN

;------------------------------------------------------------------------; VALORES POR DEFAULT EN LA EPROM;------------------------------------------------------------------------; PARÁMETRO DIRECCIÓN; EEPROM ; Velocidad de transmisión 01h

ORG 0X2101 DE D'103',D'1'

END

;-------------------------------------------------------------------; El programa finaliza aquí.;-------------------------------------------------------------------

87