SlideShare una empresa de Scribd logo
1 de 33
PROGRAMACIÓN Y SIMULACIÓN DE
ROBOT SCARA
Lenguaje ensamblador
B. Amauri Montoya Duhart
Ernesto Álvarez Casillas
Jessica Ramírez Bustamante
Julio Cesar de la Rosa Montalvo
Víctor García Alfaro
Prof. José Eduardo Chairez Veloz
09/12/14
1
Contenidos
CONTENIDOS 1
RESUMEN 3
INTRODUCCIÓN 3
OBJETIVO 5
MARCO TEÓRICO 6
LENGUAJE ENSAMBLADOR 6
MICROCONTROLADORES Y PIC’S 7
RELOJ Y MODOS DE DIRECCIONAMIENTO 8
TIMER 0 10
JUEGO DE INSTRUCCIONES 12
DESARROLLO 14
ANÁLISIS DEL PROBLEMA 14
DIAGRAMA DE FLUJO 16
PROGRAMA 18
ENSAMBLE DEL PROGRAMA 21
DIAGRAMA Y SIMULACIÓN 22
RESULTADOS 22
FUNCIONAMIENTO 22
RESTRICCIONES 26
2
CONCLUSIONES PERSONALES 28
AMAURI 28
ERNESTO 28
JESSICA 28
JULIO 29
VÍCTOR 29
CONCLUSIÓN FINAL 30
REFERENCIAS 31
3
Resumen
En este trabajo presentamos de una manera clara y estructurada el proceso de desarrollo
de un programa en lenguaje ensamblador para el control de posición de los actuadores
de un robot SCARA, basado en el repertorio del PIC16F84A manufacturado por
Microchip, así como el diseño esquemático del circuito eléctrico y la posterior simulación
del firmware generado, dentro del software Proteus 8.
El programa resuelve la siguiente problemática:
Se tienen tres actuadores y una posición deseada fija para cada uno de ellos, las
posiciones de cada motor están dadas por el número de vueltas de los motores. El
programa se inicia detectado un objeto en un punto a través de un switch. Después, los
motores comenzaran a moverse hasta la posición dada. Entonces enciende un LED que
indica cuando el motor ha llegado a su posición. El programa se reinicia después de 4
segundos, listo para detectar un nuevo objeto.
Introducción
El lenguaje ensamblador es un lenguaje de programación de bajo nivel para las
computadoras, microprocesadores, microcontroladores y otros circuitos integrados
programables. Implementa una representación simbólica de los códigos-máquina
binarios y otras constantes necesarias para programar una arquitectura dada al CPU.
Esta representación es usualmente definida por el fabricante de hardware, y está basada
en los mnemónicos que simbolizan los pasos de procesamiento (las instrucciones), los
registros del procesador, las posiciones de memoria y otras características del lenguaje.
4
Los lenguajes ensambladores fueron primero desarrollados en la década de 1950,
cuando fueron referidos como lenguaje de programación de segunda generación, un
ejemplo el SOAP; era un lenguaje ensamblador de 1957 para el computador IBM 650,
fue utilizado principalmente en los inicios del desarrollo del software, cuando aún no se
contaba con potentes lenguajes de alto nivel y los recursos eran limitados. Actualmente
se utiliza con frecuencia en ambientes académicos y de investigación, especialmente
cuando se requiere la manipulación directa de hardware, alto rendimiento, o un uso de
recursos controlado y reducido.
Por otra parte, la robótica es un sinónimo de progreso y desarrollo tecnológico; los países
y las empresas que cuentan con una fuerte presencia de robots no solamente consiguen
una extraordinaria competitividad y productividad, sino también transmiten una imagen
de modernidad, en los países más desarrollados. Las inversiones en tecnologías
robóticas han crecido de forma significativa y muy por encima de otros sectores. No
obstante, el conocimiento sobre robótica de la mayoría de la sociedad es muy limitado.
Desafortunadamente, las inversiones en la investigación en robótica han ido
disminuyendo en el mundo los últimos años, lo que contrasta con el incremento de los
esfuerzos investigadores en esta área, la robótica tiene como intención final
complementar o sustituir las funciones de los humanos, alcanzando, en algunos
sectores, aplicaciones masivas. En el contexto industrial, donde se utilizan con notable
éxito desde hace varias décadas.
El presente trabajo es un intento de nuestra parte, como ingenieros en formación, por
dejar antecedentes introductorios en el tema de la robótica y el diseño de firmware para
sistemas embebidos orientados al uso en robóica.
5
Objetivo
Objetivo general: integrar de manera exitosa los conocimientos logrados a lo largo del
curso acerca de hardware y programación en lenguaje ensamblador, para poder
completar el análisis de un problema de ingeniería determinado, identificando entradas
y salidas del sistema, generando un algoritmo de solución e implementando la solución
obtenida en un fichero fuente que se pondrá a prueba mediante la simulación en Proteus
del fichero objeto construido a partir de éste.
Objetivos específicos:
 Descomponer un problema dado en partes menores, más fáciles de analizar,
siguiendo una metodología establecida.
 Identificar entradas y salidas de un sistema.
 Desarrollar un algoritmo de solución al problema.
 Traducir el algoritmo desarrollado a lenguaje ensamblador.
 Ensamblar el fichero fuente producido en un fichero objeto en lenguaje
máquina.
 Diseñar el esquema del circuito que resolverá el problema y probar el
firmware generado en dicho esquema.
6
Marco teórico
Lenguaje ensamblador
Se denomina lenguaje máquina a la serie de datos que la parte física de la computadora
o hardware, es capaz de interpretar. Una computadora digital o, mejor dicho, su parte
física, sólo distingue datos de tipo binario, es decir, constituidos por dos únicos valores
a los que se denomina valor 0 y valor 1. Para representar datos que contengan una
información se utilizan una serie de unos y ceros cuyo conjunto indica dicha información.
La información que hace que el hardware de la computadora realice una determinada
actividad se llama instrucción. Por consiguiente, una instrucción es un conjunto de unos
y ceros. Las instrucciones así formadas equivalen a acciones elementales de la máquina,
por lo que al conjunto de dichas instrucciones que son interpretadas directamente por la
máquina se denomina lenguaje máquina. Vemos, pues, que la forma de indicar a la
máquina lo que debe hacer es totalmente diferente de la indicar a un ser humano lo
mismo, por lo que deben emplearse sistemas de traducción de una forma a otra.
Las ventajas de esto son evidentes, ya que para el hombre resulta más fácil manipular
grupos de caracteres y la traducción se hace de manera automática.
Al grupo alfabético se le denomina mnemotécnico o mnemónico, y existirá un mnemónico
por cada instrucción. Se le da este nombre porque sirve para recordar con mayor facilidad
el conjunto de instrucciones de una determinada máquina.
De esta forma aparecieron los lenguajes ensambladores (Assembler, en inglés). Poco a
poco, con el avance de la programación (Software), estas primeras y sencillas ayudas se
fueron haciendo más complejas, permitiendo que, además de los mnemónicos
correspondientes a la operación a realizar, se pudieran emplear otros para indicar, por
ejemplo, los operandos. También se introdujo la posibilidad de indicar a la computadora
la dirección de un salto en la secuencia de ejecución de un programa mediante la
utilización de etiquetas.
7
A los programas que permiten pasar del programa escrito de esta manera (programa
fuente, en ensamblador) al lenguaje máquina también se les denomina normalmente
ensambladores. Estos traductores, como ya se ha dicho, se fueron complicando cada
vez más para que la labor del programador fuera más fácil, incluyendo los denominados
directivos del ensamblador, que son órdenes o informaciones que el programador da al
traductor, no instrucciones de lenguaje máquina.
El programador de lenguaje ensamblador debe conocer perfectamente el sistema físico
(Hardware) de la máquina con que trabaja, pues aunque emplee mnemónicos y
etiquetas, éstas sirven para indicar una posición de memoria determinada, un registro o
cualquier otra parte de la máquina. Por eso se dice que el lenguaje ensamblador es un
lenguaje de bajo nivel, es decir, ligado con el hardware concreto de una determinada
máquina. Éste trabaja con variables, constantes e instrucciones simbólicas, y es el
traductor quien las transforma en las direcciones apropiadas. (Paszniuk, 2013)
Microcontroladores y PIC’s
En el mundo de las computadoras existe una infinidad de términos y clasificaciones de
los sistemas empleados. Un ejemplo de esto es la categorización de microprocesadores
y microcontroladores.
Un microprocesador (µP) es la unidad informática que lleva a cabo el procesamiento de
datos, es decir, las operaciones y el control de estos. Consiste en una unida lógico-
aritmética, una unidad de control y registros que son memoria interna y sencilla del
microprocesador. Sin embargo, de nada serviría la información que el µP produce si no
se puede comunicar al exterior para usarla en algún proceso. Entonces el dispositivo del
µP debe conectarse a memoria externa y a dispositivos periféricos para la entrada y
salida de datos (I/O’s) mediante buses de datos, control y dirección. Nótese que ninguno
de estos elementos mencionados forma parte del dispositivo del µP, son todos ajenos a
él. (Tocci)
8
Para algunas aplicaciones, resulta más conveniente tener la memoria y los I/O’s
integrados junto con otras funciones dentro de un mismo circuito. Esto es lo que se
conoce como microcontrolador (µC). La principal diferencia entre un µP y un µC es que
el segundo es básicamente un sistema cerrado, integra todo lo necesario dentro de sí
mimo, conectado a través de buses internos. Esto, a su vez, lo hace un sistema limitado
a sólo ciertas aplicaciones. Se puede entender que un µP es más general, mientras que
los µC’s son para sistemas específicos.
Dentro de los µC’s más conocidos se
halla la gama PIC (Peripheral Interface
Controller) creada y manufacturada por
Microchip. En especial está el
PIC16F84A, un poderoso µC de 8bits con
tiempos ejecución de 200 ns, 35
instrucciones y una memoria
Flash/EEPROM CMOS; en un empaquetado de 18 pines. (Microchip, s.f.)
Entre sus usos, se hallan aplicaciones automotrices, industriales, de sensores remotos
de baja potencia y de seguridad.
Reloj y modos de direccionamiento
Un µC contiene dentro un µP, así que la función del reloj en el primero será similar a
aquella en el segundo. Los µP’s operan como máquinas secuenciales, esto significa que
las salidas que produzcan dependerán del orden en que reciben sus entradas. Para
poder seguir el rastro de este orden es necesario sincronizar el sistema de alguna
manera, por esto se utiliza un reloj.
En el µP, el reloj se encarga de proporcionar la sincronización a los datos tal que las
operaciones sólo se hagan coincidir con determinados pulsos del reloj. Mientras no haya
pulso alguno, no se llevará a cabo ninguna actividad.
9
Además del µP, algunos otros elementos internos del µC también son secuenciales y
requieren de un reloj para funcionar. Algunos ejemplos son los convertidores analógico-
digitales y digital-analógicos y los puertos para comunicación serial.
La señal de reloj se puede obtener a partir de un oscilador de cristal de cuarzo conectado
al dispositivo, un oscilador RC o de un oscilador con cristal integrado TTL. (Práctica No.1)
Los modos de direccionamiento de un procesador son las diferentes formas de
transformación del campo de operando de la instrucción en la dirección del operando.
Existen varias técnicas de direccionamiento con la finalidad de dar versatilidad al
programador y de reducir el número de bits del campo de operando. Hay cinco modos
generales de direccionamiento: implícito, inmediato, directo, indirecto y relativo.
Modo de direccionamiento implícito
En este tipo de direccionamiento, el operando se especifica en la misma definición de la
instrucción. El operando puede ser un registro, cuando la operación se refiere a un
registro particular, o un operando de la pila, cuando la operación se realiza siempre en
la cima de ésta.
Modo de direccionamiento inmediato
Consiste en el valor del operando situado en el campo de operando mismo. Es usado en
la inicialización de registros con valores constantes.
Modo de direccionamiento directo
En este modo, el campo de operando contiene ya la dirección de memoria del operando.
Es útil cuando los programas siempre se sitúan en la misma zona de memoria
(ordenadores pequeños), ya que puede dificultar su relocalización, que es la
independencia del código con respecto a su situación de memoria. También se usa con
direcciones de sistema o I/O que no cambian.
10
Modo de direccionamiento indirecto
Aquí, el campo de operando contiene una dirección en donde se sitúa la dirección
efectiva del operando. La primera dirección puede ser un registro que contenga la
dirección de memoria con el operando; este es el caso de los punteros.
Modo de direccionamiento relativo
Es útil para generar programas con código relocalizable, pues considera la diferencia
entre la ubicación del operando y algún punto de referencia en la memoria, guardado en
un registro. El punto de referencia suele ser el registro contador de programa. En este
caso, el campo de operando contiene un desplazamiento u offset. (Departamento de
informática)
Timer 0
El Timer 0 es un módulo temporizador/contador de 8 bits que cuenta con un preescalador
programable también de 8 bits. Puede funcionar como temporizador o como contador.
En modo temporizador el valor del registro TMR0 se incrementa con cada ciclo de
instrucción (o cada X ciclos dependiendo del preescalador). En modo contador el valor
del registro TMR0 se incrementa en cada flanco (ascendente o descendente) del pin
RA4/T0CKI. En ambos casos al desbordarse (pasar de 0xFF a 0x0) el registro TMR0 la
bandera de interrupción del Timer 0 (bit T0IF del registro INTCON) se pone a 1.
El modo temporizador se selecciona poniendo a cero el bit T0CS del registro
OPTION_REG. Poniendo a uno ese bit el modulo trabaja en modo contador, en este
modo de operación además se debe seleccionar si el incremento se producirá en cada
flanco ascendente o descendente, al poner a cero el bit T0SE del registro OPTION_REG
se selecciona el filo ascendente.
11
El preescalador es compartido por el Timer 0 y por el Watchdog. Se asigna a un módulo
o a otro mediante el bit PSA del registro OPTION_REG. Poniendo el bit a 1 el
preescalador se asigna al Watchdog y poniendolo a 0 el preescalador se asigna al Timer
0. El valor del preescalador se selecciona con los bits PS2:PS0 de la siguiente manera:
PS2:P20 TMR0 WDT
000 1:2 1:1
001 1:4 1:2
010 1:8 1:4
011 1:16 1:8
100 1:32 1:16
101 1:64 1:32
110 1:128 1:64
111 1:256 1:128
Tabla 1
En modo temporizador el Timer 0 incrementa su cuenta en cada ciclo de instrucción. Este
modo sirve para generar temporizaciones y bases de tiempo de la misma forma que los
retardos por software, sin embargo las temporizaciones con el Timer 0 pueden ser más
exactas y además se cuenta con la ventaja de que el módulo puede trabajar mediante
interrupciones así que el programa puede ejecutar otras instrucciones mientras se realiza
la temporización. (El temporizador Timer 0 en los microcontroladores PIC., n.d.)
12
La temporización que se puede obtener con este módulo se obtiene de la siguiente
relación:
𝑇 = 𝑇𝑖𝑛𝑠𝑡 𝑃𝑆(256 − 𝑝𝑟𝑒𝑐𝑎𝑟𝑔𝑎)
Donde:
𝑇: temporización obtenida
𝑇𝑖𝑛𝑠𝑡: 4/frecuencia de oscilación
𝑃𝑆: preescalador, si se asigna al Watchdog, tendrá valor de 1
𝑝𝑟𝑒𝑐𝑎𝑟𝑔𝑎: valor inicial del TMR0
La temporización máxima utilizando el oscilador interno del PIC16F84A es:
𝑇 𝑀 = 1 × 10−6(256)(256 − 0) = 65.536 𝑚𝑠
Juego de instrucciones
El juego de instrucciones de un microprocesador o microcontrolador es el conjunto de
entradas binarias que producen acciones definidas durante un ciclo de instrucción. Un
juego de instrucciones es para el microcontrolador lo mismo que una tabla de verdad es
para una puerta lógica, un registro de desplazamiento o un sumador. Por supuesto, las
acciones que realiza un microcontrolador con cada instrucción son más complejas que
las que realizan los dispositivos y puertas antes mencionados.
Las instrucciones de los microcontrolador PIC cumplen con las siguientes condiciones:
 Juego de instrucciones reducido
 Sencillas y rápidas
 Ortogonalidad
 Formato uniforme de las instrucciones
 Formato uniforme de los datos
13
Cada microprocesador o microcontrolador posee su propio juego de instrucciones en él
y su propia arquitectura interna. Por lo tanto, un programa escrito para determinado
modelo no funcionará en otro modelo distinto.
El repertorio completo de instrucciones del PIC16F84A se muestra en la imagen
siguiente. (Microchip, s.f.)
14
Desarrollo
En esta sección se lleva a cabo el trabajo medular del proyecto. El método que se seguirá
se enumera a continuación.
1. Análisis inicial acerca de los requisitos del problema y asignación de
entradas y salidas.
2. Diagrama de flujo para el desarrollo del algoritmo.
3. Programación en lenguaje ensamblador, se incluye el código fuente.
4. Ensamble del código fuente en un código objeto útil.
5. Diseño del diagrama esquemático y simulación del programa dentro del
mismo.
Análisis del problema
Se repite la descripción del problema dada en el resumen:
Se tienen tres actuadores y una posición deseada fija para cada uno de ellos, las
posiciones de cada motor están dadas por el número de vueltas de los motores. El
programa se inicia detectado un objeto en un punto a través de un switch. Después, los
motores comenzaran a moverse hasta la posición dada. Entonces enciende un LED que
indica cuando el motor ha llegado a su posición. El programa se reinicia después de 4
segundos, listo para detectar un nuevo objeto.
15
A partir de dicha descripción, se identifica que habrá dos entradas, para el sensor de
proximidad y para el sensor de giro de los motores. También se identifican seis salidas,
tres para cada motor y tres para sus respectivos indicadores de posición. Se decide
emplear una salida adicional como indicador de estado de espera Finalmente, se
muestra la asignación de entradas y salidas en la tabla siguiente.
Entrada Pin
Detector de proximidad RA0
Contador de vueltas RA4 (T0CKI)
Salida Pin
Indicador de posición 1 a 3 RB0-RB2
Motor 1 a 3 RB3-RB5
Indicador de espera RB7
Tabla 2
16
Diagrama de flujo
TRISA ← 0xFF
TRISB ← 0x00
Guardar posiciones
deseadas (P1, P2, P3)
Encender Motor 1
Apagar LED 1
Configurar TMR0
como contador
Compara TMR0 con
P1
Inicio
RA1 == 1
Leer RA1
TMR0 == P1
1
1
Apagar Motor 1
Encender LED 1
Configurar TMR0
como contador
Encender Motor 2
Apagar LED 2
2
Sí
No
No
Sí
4
17
Compara TMR0 con
P3
Fin
TMR0 == P3
3
Apagar Motor 3
Encender LED 3
Configurar TMR0
como temporizador
4 s
No
Sí
Compara TMR0 con
P2
TMR0 == P2
2
Apagar Motor 2
Encender LED 2
Configurar TMR0
como contador
Encender Motor 3
Apagar LED 3
3
No
Sí
4
18
Programa
Al final, se produjo el siguiente fichero fuente, a partir de la traducción del algoritmo
mostrado en el diagrama de flujo a lenguaje ensamblador.
PROCESSOR P = 16F84A ; Indica el modelo de PIC a emplear
RADIX HEX ; Define la base numérica para las
; literales
__CONFIG H'3FF1' ; Define frecuencia de 4 MHz
;******************************************************************************************
STATUS EQU 0x03 ; Dirección de Status
TMR0 EQU 0x01 ; Dirección de TMR0
OPTION_REG EQU 0x81 ; Dirección de OPTION_REG
INTCON EQU 0x0B ; Dirección de INTCON
TRISA EQU 0x85 ; Dirección TRISA
TRISB EQU 0x86 ; Dirección TRISB
PORTA EQU 0x05 ; Dirección PORTA
PORTB EQU 0x06 ; Dirección PORTB
pos1 EQU 0x08 ; Posición de motor 1
pos2 EQU 0x0A ; Posición de motor 2
pos3 EQU 0x04 ; Posición de motor 3
w EQU 0x00 ; Registro w
z EQU 0x02 ; Zero flag
COUNT EQU 0x0C ; Cuenta
;******************************************************************************************
ORG 0 ; Directiva de procesador que indica
; dirección de inicio de código
;******************************************************************************************
IO_Setup
bsf STATUS, 5 ; Direcciona al banco 1 con STATUS_5
clrf TRISB ; PORTB salida
movlw 0x1F ; 5 entradas
movwf TRISA ; PORTA entrada
bcf STATUS, 5 ; Direcciona al banco 0 con STATUS_5
clrf PORTA ; Inicializar
clrf PORTB ; Inicializar
main
bsf STATUS, 5 ; Direcciona al banco 1 con STATUS_5
movlw b'11101000' ; Configuración: no pull-ups,
; flancos de subida, CLK interno
; prescaler 1:1 para TMR0 (se asigna a WDT)
movwf OPTION_REG ; Cargar configuración
bcf STATUS, 5 ; Direcciona al banco 0 con STATUS_5
19
Pulsa
bsf PORTB, 7 ; PORTB_7 para indicar standby
nop ; Retardo para que sea visible el LED
nop ; Retardo para que sea visible el LED
nop ; Retardo para que sea visible el LED
nop ; Retardo para que sea visible el LED
bcf PORTB, 7 ; PORTB_7 para indicar standby
nop ; Retardo para que sea visible el LED
nop ; Retardo para que sea visible el LED
nop ; Retardo para que sea visible el LED
nop ; Retardo para que sea visible el LED
btfsc PORTA, 0 ; Pregunta si el pulsador está oprimido
goto Pulsa ; Si no lo está, continúa revisándolo
Motor1_ON
clrf TMR0 ; Reinicia TMR0
movlw 0x08 ; Enciende motor 1, apaga LED 1
movwf PORTB ; Escribe en la salida
TMR0_1
movf TMR0, w ; Copia TMR0 para comparar
xorlw pos1 ; x xor x = 0
btfss STATUS, z ; Si son iguales, hay bandera de cero
goto TMR0_1 ; Sigue contando
Motor1_OFF
movlw 0x01 ; Apaga motor 1, enciende LED 1
movwf PORTB ; Escribe en la salida
Motor2_ON
clrf TMR0 ; Reinicia TMR0
movlw 0x10 ; Enciende motor 2, apaga LED 2
iorwf PORTB ; Escribe en la salida
TMR0_2
movf TMR0, w ; Copia TMR0 para comparar
xorlw pos2 ; x xor x = 0
btfss STATUS, z ; Si son iguales, hay bandera de cero
goto TMR0_2 ; Sigue contando
Motor2_OFF
movlw 0x03 ; Apaga motor 2, enciende LED 2
movwf PORTB ; Escribe en la salida
Motor3_ON
clrf TMR0 ; Reinicia TMR0
movlw 0x20 ; Enciende motor 3, apaga LED 3
iorwf PORTB ; Escribe en la salida
TMR0_3
movf TMR0, w ; Copia TMR0 para comparar
xorlw pos3 ; x xor x = 0
btfss STATUS, z ; Si son iguales, hay bandera de cero
goto TMR0_3 ; Sigue contando
Motor3_OFF
movlw 0x07 ; Apaga motor 3, enciende LED 3
movwf PORTB ; Escribe en la salida
20
Delay_4s
bsf STATUS, 5 ; Direcciona al banco 1 con STATUS_5
movlw b'11000111' ; Configuración: no pull-ups,
; flancos de subida, CLK interno
; prescaler 1:256 para TMR0
movwf OPTION_REG ; Cargar configuración
bcf STATUS, 5 ; Direcciona al banco 0 con STATUS_5
clrf TMR0 ; Inicializa
clrf COUNT ; Prepara cuenta
for1
TMR0_Wait
btfss INTCON, 2 ; Prueba si hay sobreflujo TMR0
goto TMR0_Wait ; Si no, sigue esperando
incf COUNT ; Cada que cuente hasta 255, COUNT++
bcf INTCON, 2 ; Reset INT0IF
movf COUNT, w ; Copia COUNT para comparar
xorlw 0x3D ; Cuando llegue a 61, 3.997 s
btfss STATUS, z ; Si son iguales, Z flag
goto for1 ; Si no, sigue esperando
RST
clrf PORTB ; Reinicia sistema
nop ; Retardo
nop ; Retardo
nop ; Retardo
nop ; Retardo
goto main ; Endless loop
nop ; Necesario para depurar última instrucción
END ; Fin
21
Ensamble del programa
El proceso que se debe seguir para obtener un archivo objeto que se pueda grabar en la
memoria del PIC queda explicado gráficamente a continuación. En general, se seguirá
este procedimiento siempre que se lleve a cabo el desarrollo de un programa orientado
a sistemas embebidos.
Escritura
del código
fuente
Ensamble
del código
fuente
Revisión y
correción
de errores
Obtención
y grabado
de código
objeto
(.hex, .bin)
22
Diagrama y simulación
Dentro del software de descripción de hardware y diseño esquemático, Proteus, se
realizó un circuito que satisficiera con los requisitos del problema. Además, se probó en
éste el programa antes mostrado.
Resultados
Funcionamiento
Una vez terminado el diseño esquemático, se pudo poner a prueba el programa que se
escribió. Los resultados se mostrarán en una secuencia de imágenes que presentan
cada etapa del funcionamiento del sistema para las siguientes posiciones:
Motor Posición (número de vueltas)
1 16
2 10
3 8
Tabla 3
23
1. Inicio de sistema, espera que se presione el botón. Un LED indica estado de
stand-by.
2. Se presionó el botón (el sensor detectó un objeto); comienza a moverse el
primer motor. Un contador ayuda a verificar el número de vueltas que ha
completado el motor.
24
3. Luego de que el primer motor alcanza su posición, se enciende el segundo.
Nuevamente, un contador muestra las vueltas del motor.
4. Cuando el segundo motor alcanza su posición, el tercero comienza su
movimiento.
25
5. Una vez que los tres motores han completado el número de vueltas
correspondiente, todos se hallan en su posición y se encienden tres LED’s
que indican el final del programa. Comienza un retardo de cuatro segundos
(se verifica en el temporizador de la esquina superior derecha).
6. Finalmente el programa se reinicia, en espera del próximo objeto.
26
Restricciones
En nuestro sistema se hallaron dos problemáticas. La primera de ellas se relaciona con
el esquema empleado para la simulación. En éste, se emplea un generador de pulsos
con una frecuencia de 5 Hz. El inconveniente consiste en que la sincronización entre el
primer motor y el contador de vueltas no coincide en todo momento. En algunas corridas
de simulación, el contador se atrasa una vuelta (el número es mayor a mayores
frecuencias). La causa de esto es que el contador se reinicia con flancos ascendentes
del botón y el retraso en la simulación del retorno del mismo se reflejaba en el contador.
La solución aplicada fue cambiar el reinicio del contador por flancos de bajada. Así, el
problema no volvió a ocurrir y se pudo aumentar la frecuencia de trabajo de los motores
a 10 Hz, como inicialmente se había diseñado.
27
Nuestro segundo obstáculo está relacionado con la programación. Se encontró que el
valor que se asigna a __Config afecta el funcionamiento del programa.
En la hoja de datos del PIC16F84A se puede ver que existen bits de configuración que
le permiten al usuario personalizar aspectos del dispositivo de acuerdo a la aplicación.
Estos bits determinan el modo que empleará el dispositivo cuando se enciende. Dentro
del ensamblador de MPASM existe una característica que permite asignar estos bits de
configuración dentro del código fuente a través de la directiva __Config.
La posición de estos bits varía entre un modelo y otro. En la especificación de la
programación del PIC16F84A se halla su palabra de configuración particular. La imagen
siguiente muestra cómo está construida dicha palabra y qué significa cada bit.
En nuestro caso, el valor que causaba conflicto era 0x3FFD. Según se aprecia en la
imagen anterior, esto activa al Wathcdog y a un temporizador de arranque.
28
Conclusiones personales
Amauri
A lo largo de la realización de este proyecto, aprendí a desarrollar firmware orientado al
PIC16F84A que resuelva algún problema de ingeniería planteado. Encontré que la
escritura de un programa en lenguaje ensamblador, aunque específica para cada µP o
µC empleado, de acuerdo a su repertorio particular, sigue un esquema común, con
mnemónicos similares y una lógica de programación parecida. Encuentro que la
programación de hardware en lenguaje ensamblador dota al diseñador de amplio control
sobre el comportamiento del sistema, sin embargo, también aparecen dificultades que
no se resuelven con la misma rapidez y simplicidad que en lenguajes de alto nivel.
Ernesto
Jessica
En la realización de este trabajo se consiguieron los objetivos propuestos logrando
programar el PIC16F84A para la simulación del robot aplicando todo el conocimiento
adquirido en la investigación y elaboración del marco teórico, para el lenguaje de dicho
programa se puede concluir que es un lenguaje de alto nivel y puede resultar útil para un
lenguaje ensamblador ya que ahorra tiempo en su programación, depuración y
simulación en todas las gama altas y ciertos PIC, por otra parte al implementar el
programa firmware podemos decir que funciona como el nexo entre las instrucciones que
llegan al robot desde el exterior simulado y sus diversas partes que lo constituyen.
29
Julio
Víctor
Programar en lenguaje ensamblador no es diferente a utilizar otros lenguajes debido a
que las capacidades de los programas están limitados por las prestaciones del hardware
y de las capacidades del programador, por lo tanto puedo concluir que la forma en que
se resuelven los problemas en programación depende de las habilidades del
programador.
30
Conclusión final
En este trabajo se aprendió la conveniencia de programar en un lenguaje de bajo nivel,
como lo es el lenguaje ensamblador. También se comprobaron las desventajas que
programar a un nivel tan cercano a la máquina puede implicar.
El lenguaje ensamblador provee un dominio alto sobre el funcionamiento del hardware y
permite controlar el cauce del programa, así como aumentar la eficiencia de código y de
tiempo; sin embargo, demanda un alto precio, pues exige que el programador tenga
profundo conocimiento acerca del dispositivo que utiliza y, al mismo tiempo, lo limita,
debido a que las instrucciones, registros y prestaciones son específicas del hardware,
por lo que se debe realizar todo un nuevo proceso de aprendizaje al programar un
dispositivo diferente.
Así, un gran peso del trabajo de diseño recae en las habilidades del programador para
entender hardware y detectar problemas de diseño durante la depuración de código, y
también de su capacidad de adaptación y aprendizaje.
Finalmente, verificamos la importancia de la comunicación entre un sistema embebido y
su mundo exterior, en particular aquellos sistemas embebidos orientados a la robótica,
pues es de trascendental importancia que el controlador reciba información de su entorno
para poder corregir el curso de su operación y resolver el problema para el cuál se
concibió su uso.
Podemos decir que los objetivos planteados en este proyecto se cumplieron
satisfactoriamente, con base en el dominio logrado en la programación en lenguaje
ensamblador de un microcontrolador y en los resultados obtenidos en nuestra solución,
cuyo rendimiento resuelve la situación que le dio origen y no presenta problemas de
funcionamiento.
31
Referencias
Departamento de informática. (s.f.). Modos de direccionamiento. Obtenido de
www.infor.uva.es/~bastida/OC/modos.pdf
Detmer, R. (2001). Introduction to 80x86 assembly language and computer architecture.
Jones & Bartlett Computer Science.
El lenguaje ensamblador del PIC16F84A. (s.f.). Recuperado el octubre de 2014, de
Dispositivos lógicos microprogramables:
http://perso.wanadoo.es/pictob/ensamblador.htm
El temporizador Timer 0 en los microcontroladores PIC. (s.f.). Obtenido de Circuitos
electrónicos: http://www.circuitoselectronicos.org/2011/04/el-temporizador-timer-
0-en-los.html
Microchip. (s.f.). PIC16F84A. Obtenido de Microchip products:
http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en010230
32
Paszniuk, R. (27 de abril de 2013). Introducción al lenguaje ensamblador. Obtenido de
Programación:
http://www.programacion.com.py/escritorio/ensamblador/introduccion-al-
lenguaje-ensamblador
Práctica No.1. (s.f.). Obtenido de Universidad autónoma de San Luis Potosí:
http://galia.fc.uaslp.mx/~cantocar/microprocesadores/PRACTICAS__Z80_PDF_
S/1_RELOJ_Y_RESET.PDF
Reiniertl. (26 de junio de 2008). Introducción a los temporizadores. Obtenido de
WikiTrónica: http://electronica.wikia.com/wiki/Introducción_a_los_temporizadores
Tocci, R. (s.f.). Digital Systems: Principles and Applications. Prentice Hall.
Wikipedia. (s.f.). Controlador lógico programable. Obtenido de Wikipedia:
http://es.wikipedia.org/wiki/Controlador_lógico_programable

Más contenido relacionado

La actualidad más candente

Carro seguidor de luz... Electronica y digital
Carro seguidor de luz... Electronica y digital Carro seguidor de luz... Electronica y digital
Carro seguidor de luz... Electronica y digital Eduardo Arévalo Angamarca
 
Configuracion de multivibradores
Configuracion de multivibradoresConfiguracion de multivibradores
Configuracion de multivibradoresCristian Peña
 
Componentes electrónicos-análogos-y-digitales
Componentes electrónicos-análogos-y-digitalesComponentes electrónicos-análogos-y-digitales
Componentes electrónicos-análogos-y-digitalesjhon garcia
 
Control de motor a paso con flip flop jk
Control de motor a paso con flip flop jkControl de motor a paso con flip flop jk
Control de motor a paso con flip flop jkfrancisco javier
 
Programación visual y orientada a eventos
Programación  visual y orientada a eventosProgramación  visual y orientada a eventos
Programación visual y orientada a eventosMario Martinez Alvarez
 
P. estructurada vs. programación orientada a objetos
P. estructurada vs. programación orientada a objetosP. estructurada vs. programación orientada a objetos
P. estructurada vs. programación orientada a objetosGeovanny Yungán
 
Antecedentes de los controladores lógicos programables
Antecedentes de los controladores lógicos programablesAntecedentes de los controladores lógicos programables
Antecedentes de los controladores lógicos programablesAngel Ng
 
Lenguajes de programación en robótica
Lenguajes de programación en robótica �Lenguajes de programación en robótica �
Lenguajes de programación en robótica Laureano Zantedeschi
 
ARQUITECTURA DE UN MICROPROCESADOR
ARQUITECTURA DE UN MICROPROCESADORARQUITECTURA DE UN MICROPROCESADOR
ARQUITECTURA DE UN MICROPROCESADORRAFAEL HONORES VERA
 
Proyecto: Brazo mecanico con servomotor, potenciometro y arduino
Proyecto: Brazo mecanico con servomotor, potenciometro y arduinoProyecto: Brazo mecanico con servomotor, potenciometro y arduino
Proyecto: Brazo mecanico con servomotor, potenciometro y arduinoUTEQ
 
Aplicaciones de la robotica
Aplicaciones de la roboticaAplicaciones de la robotica
Aplicaciones de la roboticaMarcos Herrera
 
Proyecto mecatronica industrial control de servomotores
Proyecto mecatronica industrial control de servomotoresProyecto mecatronica industrial control de servomotores
Proyecto mecatronica industrial control de servomotoresAdrián Fernández Samalea
 
Programacion de un PLC
Programacion de un PLCProgramacion de un PLC
Programacion de un PLCkmorillo073
 

La actualidad más candente (20)

Carro seguidor de luz... Electronica y digital
Carro seguidor de luz... Electronica y digital Carro seguidor de luz... Electronica y digital
Carro seguidor de luz... Electronica y digital
 
Configuracion de multivibradores
Configuracion de multivibradoresConfiguracion de multivibradores
Configuracion de multivibradores
 
Brazo Robótico
Brazo RobóticoBrazo Robótico
Brazo Robótico
 
Componentes electrónicos-análogos-y-digitales
Componentes electrónicos-análogos-y-digitalesComponentes electrónicos-análogos-y-digitales
Componentes electrónicos-análogos-y-digitales
 
Control de motor a paso con flip flop jk
Control de motor a paso con flip flop jkControl de motor a paso con flip flop jk
Control de motor a paso con flip flop jk
 
Programación visual y orientada a eventos
Programación  visual y orientada a eventosProgramación  visual y orientada a eventos
Programación visual y orientada a eventos
 
P. estructurada vs. programación orientada a objetos
P. estructurada vs. programación orientada a objetosP. estructurada vs. programación orientada a objetos
P. estructurada vs. programación orientada a objetos
 
Compuertas logicas
Compuertas logicasCompuertas logicas
Compuertas logicas
 
Ejercicios ladder
Ejercicios ladderEjercicios ladder
Ejercicios ladder
 
Manual pc simu
Manual pc simu  Manual pc simu
Manual pc simu
 
Antecedentes de los controladores lógicos programables
Antecedentes de los controladores lógicos programablesAntecedentes de los controladores lógicos programables
Antecedentes de los controladores lógicos programables
 
Lenguajes de programación en robótica
Lenguajes de programación en robótica �Lenguajes de programación en robótica �
Lenguajes de programación en robótica
 
ARQUITECTURA DE UN MICROPROCESADOR
ARQUITECTURA DE UN MICROPROCESADORARQUITECTURA DE UN MICROPROCESADOR
ARQUITECTURA DE UN MICROPROCESADOR
 
Proyecto: Brazo mecanico con servomotor, potenciometro y arduino
Proyecto: Brazo mecanico con servomotor, potenciometro y arduinoProyecto: Brazo mecanico con servomotor, potenciometro y arduino
Proyecto: Brazo mecanico con servomotor, potenciometro y arduino
 
Aplicaciones de la robotica
Aplicaciones de la roboticaAplicaciones de la robotica
Aplicaciones de la robotica
 
Automatizacion robotica
Automatizacion roboticaAutomatizacion robotica
Automatizacion robotica
 
Sistemas electromecanicos
Sistemas electromecanicosSistemas electromecanicos
Sistemas electromecanicos
 
62999778 el-grafcet-practica-y-aplicaciones
62999778 el-grafcet-practica-y-aplicaciones62999778 el-grafcet-practica-y-aplicaciones
62999778 el-grafcet-practica-y-aplicaciones
 
Proyecto mecatronica industrial control de servomotores
Proyecto mecatronica industrial control de servomotoresProyecto mecatronica industrial control de servomotores
Proyecto mecatronica industrial control de servomotores
 
Programacion de un PLC
Programacion de un PLCProgramacion de un PLC
Programacion de un PLC
 

Similar a Programación Y Simulación De Robot SCARA, documento

Programacion ensamblador-procesadoresk
Programacion ensamblador-procesadoreskProgramacion ensamblador-procesadoresk
Programacion ensamblador-procesadoreskJohann Chambilla
 
Monicaaa 9 b
Monicaaa 9 bMonicaaa 9 b
Monicaaa 9 bmoniika16
 
Programa informático
Programa informáticoPrograma informático
Programa informáticotomorrowland
 
Mi Lenguaje de Programacion
Mi Lenguaje de ProgramacionMi Lenguaje de Programacion
Mi Lenguaje de Programacionmel_15
 
Visual basic terminado[1]
Visual basic terminado[1]Visual basic terminado[1]
Visual basic terminado[1]Jalil Segura
 
Visual basic terminado[1]
Visual basic terminado[1]Visual basic terminado[1]
Visual basic terminado[1]Jalil Segura
 
Lenguaje Ensamblador00
Lenguaje Ensamblador00Lenguaje Ensamblador00
Lenguaje Ensamblador00Car_00_01
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensambladorCar_00_01
 
Ensamblador
EnsambladorEnsamblador
EnsambladorCEUNISAL
 
Diana marcela arias escobar
Diana marcela arias escobarDiana marcela arias escobar
Diana marcela arias escobarmarcelayuyeimi
 
Diana marcela arias escobar
Diana marcela arias escobarDiana marcela arias escobar
Diana marcela arias escobarmarcelayuyeimi
 
Analista-programador Cobol - Módulo 1.3
Analista-programador Cobol - Módulo 1.3Analista-programador Cobol - Módulo 1.3
Analista-programador Cobol - Módulo 1.3natachaceleste
 
Introduccion a la programación I Parte
Introduccion a la programación I Parte Introduccion a la programación I Parte
Introduccion a la programación I Parte Yelixa Araque Angulo
 
Introduccion a la Programación I parte
Introduccion a la Programación I parte Introduccion a la Programación I parte
Introduccion a la Programación I parte Yelixa Araque Angulo
 

Similar a Programación Y Simulación De Robot SCARA, documento (20)

Programacion ensamblador-procesadoresk
Programacion ensamblador-procesadoreskProgramacion ensamblador-procesadoresk
Programacion ensamblador-procesadoresk
 
Monicaaa 9 b
Monicaaa 9 bMonicaaa 9 b
Monicaaa 9 b
 
Programa informático
Programa informáticoPrograma informático
Programa informático
 
Mi Lenguaje de Programacion
Mi Lenguaje de ProgramacionMi Lenguaje de Programacion
Mi Lenguaje de Programacion
 
00026966
0002696600026966
00026966
 
Lenguajes de desarrollo (programación)
Lenguajes de desarrollo (programación)Lenguajes de desarrollo (programación)
Lenguajes de desarrollo (programación)
 
Visual basic terminado[1]
Visual basic terminado[1]Visual basic terminado[1]
Visual basic terminado[1]
 
Visual basic terminado[1]
Visual basic terminado[1]Visual basic terminado[1]
Visual basic terminado[1]
 
Proyecto fernando compiladores 1
Proyecto fernando compiladores 1Proyecto fernando compiladores 1
Proyecto fernando compiladores 1
 
Lenguaje Ensamblador00
Lenguaje Ensamblador00Lenguaje Ensamblador00
Lenguaje Ensamblador00
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
 
Ensamblador
EnsambladorEnsamblador
Ensamblador
 
Diana marcela arias escobar
Diana marcela arias escobarDiana marcela arias escobar
Diana marcela arias escobar
 
Clasificacion de los lenguajes abel
Clasificacion de los lenguajes abelClasificacion de los lenguajes abel
Clasificacion de los lenguajes abel
 
Diana marcela arias escobar
Diana marcela arias escobarDiana marcela arias escobar
Diana marcela arias escobar
 
Consulta
ConsultaConsulta
Consulta
 
Mipag web
Mipag webMipag web
Mipag web
 
Analista-programador Cobol - Módulo 1.3
Analista-programador Cobol - Módulo 1.3Analista-programador Cobol - Módulo 1.3
Analista-programador Cobol - Módulo 1.3
 
Introduccion a la programación I Parte
Introduccion a la programación I Parte Introduccion a la programación I Parte
Introduccion a la programación I Parte
 
Introduccion a la Programación I parte
Introduccion a la Programación I parte Introduccion a la Programación I parte
Introduccion a la Programación I parte
 

Más de Bronson Duhart

AirRay. Un sistema de vuelo autónomo.
AirRay. Un sistema de vuelo autónomo.AirRay. Un sistema de vuelo autónomo.
AirRay. Un sistema de vuelo autónomo.Bronson Duhart
 
Interfaz mioeléctrica, presentación
Interfaz mioeléctrica, presentaciónInterfaz mioeléctrica, presentación
Interfaz mioeléctrica, presentaciónBronson Duhart
 
Evaluacion ambiental sobre pilas
Evaluacion ambiental sobre pilasEvaluacion ambiental sobre pilas
Evaluacion ambiental sobre pilasBronson Duhart
 
Control de un robot de dos grados de libertad mediante visión
Control de un robot de dos grados de libertad mediante visiónControl de un robot de dos grados de libertad mediante visión
Control de un robot de dos grados de libertad mediante visiónBronson Duhart
 
Programación Y Simulación De Robot SCARA, presentación
Programación Y Simulación De Robot SCARA, presentaciónProgramación Y Simulación De Robot SCARA, presentación
Programación Y Simulación De Robot SCARA, presentaciónBronson Duhart
 
Diseño, simulación y control de la dinámica de un robot planar de dos grados ...
Diseño, simulación y control de la dinámica de un robot planar de dos grados ...Diseño, simulación y control de la dinámica de un robot planar de dos grados ...
Diseño, simulación y control de la dinámica de un robot planar de dos grados ...Bronson Duhart
 
Diseño, simulación y control de la dinámica de un robot planar de dos grados ...
Diseño, simulación y control de la dinámica de un robot planar de dos grados ...Diseño, simulación y control de la dinámica de un robot planar de dos grados ...
Diseño, simulación y control de la dinámica de un robot planar de dos grados ...Bronson Duhart
 

Más de Bronson Duhart (7)

AirRay. Un sistema de vuelo autónomo.
AirRay. Un sistema de vuelo autónomo.AirRay. Un sistema de vuelo autónomo.
AirRay. Un sistema de vuelo autónomo.
 
Interfaz mioeléctrica, presentación
Interfaz mioeléctrica, presentaciónInterfaz mioeléctrica, presentación
Interfaz mioeléctrica, presentación
 
Evaluacion ambiental sobre pilas
Evaluacion ambiental sobre pilasEvaluacion ambiental sobre pilas
Evaluacion ambiental sobre pilas
 
Control de un robot de dos grados de libertad mediante visión
Control de un robot de dos grados de libertad mediante visiónControl de un robot de dos grados de libertad mediante visión
Control de un robot de dos grados de libertad mediante visión
 
Programación Y Simulación De Robot SCARA, presentación
Programación Y Simulación De Robot SCARA, presentaciónProgramación Y Simulación De Robot SCARA, presentación
Programación Y Simulación De Robot SCARA, presentación
 
Diseño, simulación y control de la dinámica de un robot planar de dos grados ...
Diseño, simulación y control de la dinámica de un robot planar de dos grados ...Diseño, simulación y control de la dinámica de un robot planar de dos grados ...
Diseño, simulación y control de la dinámica de un robot planar de dos grados ...
 
Diseño, simulación y control de la dinámica de un robot planar de dos grados ...
Diseño, simulación y control de la dinámica de un robot planar de dos grados ...Diseño, simulación y control de la dinámica de un robot planar de dos grados ...
Diseño, simulación y control de la dinámica de un robot planar de dos grados ...
 

Último

CONSTRUCCIONES II - SEMANA 01 - REGLAMENTO NACIONAL DE EDIFICACIONES.pdf
CONSTRUCCIONES II - SEMANA 01 - REGLAMENTO NACIONAL DE EDIFICACIONES.pdfCONSTRUCCIONES II - SEMANA 01 - REGLAMENTO NACIONAL DE EDIFICACIONES.pdf
CONSTRUCCIONES II - SEMANA 01 - REGLAMENTO NACIONAL DE EDIFICACIONES.pdfErikNivor
 
SOUDAL: Soluciones de sellado, pegado y hermeticidad
SOUDAL: Soluciones de sellado, pegado y hermeticidadSOUDAL: Soluciones de sellado, pegado y hermeticidad
SOUDAL: Soluciones de sellado, pegado y hermeticidadANDECE
 
183045401-Terminal-Terrestre-de-Trujillo.pdf
183045401-Terminal-Terrestre-de-Trujillo.pdf183045401-Terminal-Terrestre-de-Trujillo.pdf
183045401-Terminal-Terrestre-de-Trujillo.pdfEdwinAlexanderSnchez2
 
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfPresentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfMirthaFernandez12
 
Flujo potencial, conceptos básicos y ejemplos resueltos.
Flujo potencial, conceptos básicos y ejemplos resueltos.Flujo potencial, conceptos básicos y ejemplos resueltos.
Flujo potencial, conceptos básicos y ejemplos resueltos.ALEJANDROLEONGALICIA
 
Edificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCEdificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCANDECE
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxEduardoSnchezHernnde5
 
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023ANDECE
 
3039_ftg_01Entregable 003_Matematica.pptx
3039_ftg_01Entregable 003_Matematica.pptx3039_ftg_01Entregable 003_Matematica.pptx
3039_ftg_01Entregable 003_Matematica.pptxJhordanGonzalo
 
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...Francisco Javier Mora Serrano
 
Fisiología del Potasio en Plantas p .pdf
Fisiología del Potasio en Plantas p .pdfFisiología del Potasio en Plantas p .pdf
Fisiología del Potasio en Plantas p .pdfJessLeonelVargasJimn
 
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIACLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIAMayraOchoa35
 
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdfAnthonyTiclia
 
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdfLEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdfAdelaHerrera9
 
Fijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSEFijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSEANDECE
 
CE.040 DRENAJE PLUVIAL_RM 126-2021-VIVIENDA.pdf
CE.040 DRENAJE PLUVIAL_RM 126-2021-VIVIENDA.pdfCE.040 DRENAJE PLUVIAL_RM 126-2021-VIVIENDA.pdf
CE.040 DRENAJE PLUVIAL_RM 126-2021-VIVIENDA.pdfssuserc34f44
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALKATHIAMILAGRITOSSANC
 
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdfTAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdfAntonioGonzalezIzqui
 
Tiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo IITiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo IILauraFernandaValdovi
 
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPSEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPJosLuisFrancoCaldern
 

Último (20)

CONSTRUCCIONES II - SEMANA 01 - REGLAMENTO NACIONAL DE EDIFICACIONES.pdf
CONSTRUCCIONES II - SEMANA 01 - REGLAMENTO NACIONAL DE EDIFICACIONES.pdfCONSTRUCCIONES II - SEMANA 01 - REGLAMENTO NACIONAL DE EDIFICACIONES.pdf
CONSTRUCCIONES II - SEMANA 01 - REGLAMENTO NACIONAL DE EDIFICACIONES.pdf
 
SOUDAL: Soluciones de sellado, pegado y hermeticidad
SOUDAL: Soluciones de sellado, pegado y hermeticidadSOUDAL: Soluciones de sellado, pegado y hermeticidad
SOUDAL: Soluciones de sellado, pegado y hermeticidad
 
183045401-Terminal-Terrestre-de-Trujillo.pdf
183045401-Terminal-Terrestre-de-Trujillo.pdf183045401-Terminal-Terrestre-de-Trujillo.pdf
183045401-Terminal-Terrestre-de-Trujillo.pdf
 
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdfPresentación Proyecto Trabajo Creativa Profesional Azul.pdf
Presentación Proyecto Trabajo Creativa Profesional Azul.pdf
 
Flujo potencial, conceptos básicos y ejemplos resueltos.
Flujo potencial, conceptos básicos y ejemplos resueltos.Flujo potencial, conceptos básicos y ejemplos resueltos.
Flujo potencial, conceptos básicos y ejemplos resueltos.
 
Edificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRCEdificio residencial Becrux en Madrid. Fachada de GRC
Edificio residencial Becrux en Madrid. Fachada de GRC
 
Flujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptxFlujo multifásico en tuberias de ex.pptx
Flujo multifásico en tuberias de ex.pptx
 
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
Centro Integral del Transporte de Metro de Madrid (CIT). Premio COAM 2023
 
3039_ftg_01Entregable 003_Matematica.pptx
3039_ftg_01Entregable 003_Matematica.pptx3039_ftg_01Entregable 003_Matematica.pptx
3039_ftg_01Entregable 003_Matematica.pptx
 
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
Hanns Recabarren Diaz (2024), Implementación de una herramienta de realidad v...
 
Fisiología del Potasio en Plantas p .pdf
Fisiología del Potasio en Plantas p .pdfFisiología del Potasio en Plantas p .pdf
Fisiología del Potasio en Plantas p .pdf
 
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIACLASE 2 MUROS CARAVISTA EN CONCRETO  Y UNIDAD DE ALBAÑILERIA
CLASE 2 MUROS CARAVISTA EN CONCRETO Y UNIDAD DE ALBAÑILERIA
 
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
2. UPN PPT - SEMANA 02 GESTION DE PROYECTOS MG CHERYL QUEZADA(1).pdf
 
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdfLEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
LEYES DE EXPONENTES SEMANA 1 CESAR VALLEJO.pdf
 
Fijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSEFijaciones de balcones prefabricados de hormigón - RECENSE
Fijaciones de balcones prefabricados de hormigón - RECENSE
 
CE.040 DRENAJE PLUVIAL_RM 126-2021-VIVIENDA.pdf
CE.040 DRENAJE PLUVIAL_RM 126-2021-VIVIENDA.pdfCE.040 DRENAJE PLUVIAL_RM 126-2021-VIVIENDA.pdf
CE.040 DRENAJE PLUVIAL_RM 126-2021-VIVIENDA.pdf
 
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONALCHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
CHARLA DE INDUCCIÓN SEGURIDAD Y SALUD OCUPACIONAL
 
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdfTAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
TAREA 8 CORREDOR INTEROCEÁNICO DEL PAÍS.pdf
 
Tiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo IITiempos Predeterminados MOST para Estudio del Trabajo II
Tiempos Predeterminados MOST para Estudio del Trabajo II
 
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIPSEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
SEGURIDAD EN CONSTRUCCION PPT PARA EL CIP
 

Programación Y Simulación De Robot SCARA, documento

  • 1. PROGRAMACIÓN Y SIMULACIÓN DE ROBOT SCARA Lenguaje ensamblador B. Amauri Montoya Duhart Ernesto Álvarez Casillas Jessica Ramírez Bustamante Julio Cesar de la Rosa Montalvo Víctor García Alfaro Prof. José Eduardo Chairez Veloz 09/12/14
  • 2. 1 Contenidos CONTENIDOS 1 RESUMEN 3 INTRODUCCIÓN 3 OBJETIVO 5 MARCO TEÓRICO 6 LENGUAJE ENSAMBLADOR 6 MICROCONTROLADORES Y PIC’S 7 RELOJ Y MODOS DE DIRECCIONAMIENTO 8 TIMER 0 10 JUEGO DE INSTRUCCIONES 12 DESARROLLO 14 ANÁLISIS DEL PROBLEMA 14 DIAGRAMA DE FLUJO 16 PROGRAMA 18 ENSAMBLE DEL PROGRAMA 21 DIAGRAMA Y SIMULACIÓN 22 RESULTADOS 22 FUNCIONAMIENTO 22 RESTRICCIONES 26
  • 3. 2 CONCLUSIONES PERSONALES 28 AMAURI 28 ERNESTO 28 JESSICA 28 JULIO 29 VÍCTOR 29 CONCLUSIÓN FINAL 30 REFERENCIAS 31
  • 4. 3 Resumen En este trabajo presentamos de una manera clara y estructurada el proceso de desarrollo de un programa en lenguaje ensamblador para el control de posición de los actuadores de un robot SCARA, basado en el repertorio del PIC16F84A manufacturado por Microchip, así como el diseño esquemático del circuito eléctrico y la posterior simulación del firmware generado, dentro del software Proteus 8. El programa resuelve la siguiente problemática: Se tienen tres actuadores y una posición deseada fija para cada uno de ellos, las posiciones de cada motor están dadas por el número de vueltas de los motores. El programa se inicia detectado un objeto en un punto a través de un switch. Después, los motores comenzaran a moverse hasta la posición dada. Entonces enciende un LED que indica cuando el motor ha llegado a su posición. El programa se reinicia después de 4 segundos, listo para detectar un nuevo objeto. Introducción El lenguaje ensamblador es un lenguaje de programación de bajo nivel para las computadoras, microprocesadores, microcontroladores y otros circuitos integrados programables. Implementa una representación simbólica de los códigos-máquina binarios y otras constantes necesarias para programar una arquitectura dada al CPU. Esta representación es usualmente definida por el fabricante de hardware, y está basada en los mnemónicos que simbolizan los pasos de procesamiento (las instrucciones), los registros del procesador, las posiciones de memoria y otras características del lenguaje.
  • 5. 4 Los lenguajes ensambladores fueron primero desarrollados en la década de 1950, cuando fueron referidos como lenguaje de programación de segunda generación, un ejemplo el SOAP; era un lenguaje ensamblador de 1957 para el computador IBM 650, fue utilizado principalmente en los inicios del desarrollo del software, cuando aún no se contaba con potentes lenguajes de alto nivel y los recursos eran limitados. Actualmente se utiliza con frecuencia en ambientes académicos y de investigación, especialmente cuando se requiere la manipulación directa de hardware, alto rendimiento, o un uso de recursos controlado y reducido. Por otra parte, la robótica es un sinónimo de progreso y desarrollo tecnológico; los países y las empresas que cuentan con una fuerte presencia de robots no solamente consiguen una extraordinaria competitividad y productividad, sino también transmiten una imagen de modernidad, en los países más desarrollados. Las inversiones en tecnologías robóticas han crecido de forma significativa y muy por encima de otros sectores. No obstante, el conocimiento sobre robótica de la mayoría de la sociedad es muy limitado. Desafortunadamente, las inversiones en la investigación en robótica han ido disminuyendo en el mundo los últimos años, lo que contrasta con el incremento de los esfuerzos investigadores en esta área, la robótica tiene como intención final complementar o sustituir las funciones de los humanos, alcanzando, en algunos sectores, aplicaciones masivas. En el contexto industrial, donde se utilizan con notable éxito desde hace varias décadas. El presente trabajo es un intento de nuestra parte, como ingenieros en formación, por dejar antecedentes introductorios en el tema de la robótica y el diseño de firmware para sistemas embebidos orientados al uso en robóica.
  • 6. 5 Objetivo Objetivo general: integrar de manera exitosa los conocimientos logrados a lo largo del curso acerca de hardware y programación en lenguaje ensamblador, para poder completar el análisis de un problema de ingeniería determinado, identificando entradas y salidas del sistema, generando un algoritmo de solución e implementando la solución obtenida en un fichero fuente que se pondrá a prueba mediante la simulación en Proteus del fichero objeto construido a partir de éste. Objetivos específicos:  Descomponer un problema dado en partes menores, más fáciles de analizar, siguiendo una metodología establecida.  Identificar entradas y salidas de un sistema.  Desarrollar un algoritmo de solución al problema.  Traducir el algoritmo desarrollado a lenguaje ensamblador.  Ensamblar el fichero fuente producido en un fichero objeto en lenguaje máquina.  Diseñar el esquema del circuito que resolverá el problema y probar el firmware generado en dicho esquema.
  • 7. 6 Marco teórico Lenguaje ensamblador Se denomina lenguaje máquina a la serie de datos que la parte física de la computadora o hardware, es capaz de interpretar. Una computadora digital o, mejor dicho, su parte física, sólo distingue datos de tipo binario, es decir, constituidos por dos únicos valores a los que se denomina valor 0 y valor 1. Para representar datos que contengan una información se utilizan una serie de unos y ceros cuyo conjunto indica dicha información. La información que hace que el hardware de la computadora realice una determinada actividad se llama instrucción. Por consiguiente, una instrucción es un conjunto de unos y ceros. Las instrucciones así formadas equivalen a acciones elementales de la máquina, por lo que al conjunto de dichas instrucciones que son interpretadas directamente por la máquina se denomina lenguaje máquina. Vemos, pues, que la forma de indicar a la máquina lo que debe hacer es totalmente diferente de la indicar a un ser humano lo mismo, por lo que deben emplearse sistemas de traducción de una forma a otra. Las ventajas de esto son evidentes, ya que para el hombre resulta más fácil manipular grupos de caracteres y la traducción se hace de manera automática. Al grupo alfabético se le denomina mnemotécnico o mnemónico, y existirá un mnemónico por cada instrucción. Se le da este nombre porque sirve para recordar con mayor facilidad el conjunto de instrucciones de una determinada máquina. De esta forma aparecieron los lenguajes ensambladores (Assembler, en inglés). Poco a poco, con el avance de la programación (Software), estas primeras y sencillas ayudas se fueron haciendo más complejas, permitiendo que, además de los mnemónicos correspondientes a la operación a realizar, se pudieran emplear otros para indicar, por ejemplo, los operandos. También se introdujo la posibilidad de indicar a la computadora la dirección de un salto en la secuencia de ejecución de un programa mediante la utilización de etiquetas.
  • 8. 7 A los programas que permiten pasar del programa escrito de esta manera (programa fuente, en ensamblador) al lenguaje máquina también se les denomina normalmente ensambladores. Estos traductores, como ya se ha dicho, se fueron complicando cada vez más para que la labor del programador fuera más fácil, incluyendo los denominados directivos del ensamblador, que son órdenes o informaciones que el programador da al traductor, no instrucciones de lenguaje máquina. El programador de lenguaje ensamblador debe conocer perfectamente el sistema físico (Hardware) de la máquina con que trabaja, pues aunque emplee mnemónicos y etiquetas, éstas sirven para indicar una posición de memoria determinada, un registro o cualquier otra parte de la máquina. Por eso se dice que el lenguaje ensamblador es un lenguaje de bajo nivel, es decir, ligado con el hardware concreto de una determinada máquina. Éste trabaja con variables, constantes e instrucciones simbólicas, y es el traductor quien las transforma en las direcciones apropiadas. (Paszniuk, 2013) Microcontroladores y PIC’s En el mundo de las computadoras existe una infinidad de términos y clasificaciones de los sistemas empleados. Un ejemplo de esto es la categorización de microprocesadores y microcontroladores. Un microprocesador (µP) es la unidad informática que lleva a cabo el procesamiento de datos, es decir, las operaciones y el control de estos. Consiste en una unida lógico- aritmética, una unidad de control y registros que son memoria interna y sencilla del microprocesador. Sin embargo, de nada serviría la información que el µP produce si no se puede comunicar al exterior para usarla en algún proceso. Entonces el dispositivo del µP debe conectarse a memoria externa y a dispositivos periféricos para la entrada y salida de datos (I/O’s) mediante buses de datos, control y dirección. Nótese que ninguno de estos elementos mencionados forma parte del dispositivo del µP, son todos ajenos a él. (Tocci)
  • 9. 8 Para algunas aplicaciones, resulta más conveniente tener la memoria y los I/O’s integrados junto con otras funciones dentro de un mismo circuito. Esto es lo que se conoce como microcontrolador (µC). La principal diferencia entre un µP y un µC es que el segundo es básicamente un sistema cerrado, integra todo lo necesario dentro de sí mimo, conectado a través de buses internos. Esto, a su vez, lo hace un sistema limitado a sólo ciertas aplicaciones. Se puede entender que un µP es más general, mientras que los µC’s son para sistemas específicos. Dentro de los µC’s más conocidos se halla la gama PIC (Peripheral Interface Controller) creada y manufacturada por Microchip. En especial está el PIC16F84A, un poderoso µC de 8bits con tiempos ejecución de 200 ns, 35 instrucciones y una memoria Flash/EEPROM CMOS; en un empaquetado de 18 pines. (Microchip, s.f.) Entre sus usos, se hallan aplicaciones automotrices, industriales, de sensores remotos de baja potencia y de seguridad. Reloj y modos de direccionamiento Un µC contiene dentro un µP, así que la función del reloj en el primero será similar a aquella en el segundo. Los µP’s operan como máquinas secuenciales, esto significa que las salidas que produzcan dependerán del orden en que reciben sus entradas. Para poder seguir el rastro de este orden es necesario sincronizar el sistema de alguna manera, por esto se utiliza un reloj. En el µP, el reloj se encarga de proporcionar la sincronización a los datos tal que las operaciones sólo se hagan coincidir con determinados pulsos del reloj. Mientras no haya pulso alguno, no se llevará a cabo ninguna actividad.
  • 10. 9 Además del µP, algunos otros elementos internos del µC también son secuenciales y requieren de un reloj para funcionar. Algunos ejemplos son los convertidores analógico- digitales y digital-analógicos y los puertos para comunicación serial. La señal de reloj se puede obtener a partir de un oscilador de cristal de cuarzo conectado al dispositivo, un oscilador RC o de un oscilador con cristal integrado TTL. (Práctica No.1) Los modos de direccionamiento de un procesador son las diferentes formas de transformación del campo de operando de la instrucción en la dirección del operando. Existen varias técnicas de direccionamiento con la finalidad de dar versatilidad al programador y de reducir el número de bits del campo de operando. Hay cinco modos generales de direccionamiento: implícito, inmediato, directo, indirecto y relativo. Modo de direccionamiento implícito En este tipo de direccionamiento, el operando se especifica en la misma definición de la instrucción. El operando puede ser un registro, cuando la operación se refiere a un registro particular, o un operando de la pila, cuando la operación se realiza siempre en la cima de ésta. Modo de direccionamiento inmediato Consiste en el valor del operando situado en el campo de operando mismo. Es usado en la inicialización de registros con valores constantes. Modo de direccionamiento directo En este modo, el campo de operando contiene ya la dirección de memoria del operando. Es útil cuando los programas siempre se sitúan en la misma zona de memoria (ordenadores pequeños), ya que puede dificultar su relocalización, que es la independencia del código con respecto a su situación de memoria. También se usa con direcciones de sistema o I/O que no cambian.
  • 11. 10 Modo de direccionamiento indirecto Aquí, el campo de operando contiene una dirección en donde se sitúa la dirección efectiva del operando. La primera dirección puede ser un registro que contenga la dirección de memoria con el operando; este es el caso de los punteros. Modo de direccionamiento relativo Es útil para generar programas con código relocalizable, pues considera la diferencia entre la ubicación del operando y algún punto de referencia en la memoria, guardado en un registro. El punto de referencia suele ser el registro contador de programa. En este caso, el campo de operando contiene un desplazamiento u offset. (Departamento de informática) Timer 0 El Timer 0 es un módulo temporizador/contador de 8 bits que cuenta con un preescalador programable también de 8 bits. Puede funcionar como temporizador o como contador. En modo temporizador el valor del registro TMR0 se incrementa con cada ciclo de instrucción (o cada X ciclos dependiendo del preescalador). En modo contador el valor del registro TMR0 se incrementa en cada flanco (ascendente o descendente) del pin RA4/T0CKI. En ambos casos al desbordarse (pasar de 0xFF a 0x0) el registro TMR0 la bandera de interrupción del Timer 0 (bit T0IF del registro INTCON) se pone a 1. El modo temporizador se selecciona poniendo a cero el bit T0CS del registro OPTION_REG. Poniendo a uno ese bit el modulo trabaja en modo contador, en este modo de operación además se debe seleccionar si el incremento se producirá en cada flanco ascendente o descendente, al poner a cero el bit T0SE del registro OPTION_REG se selecciona el filo ascendente.
  • 12. 11 El preescalador es compartido por el Timer 0 y por el Watchdog. Se asigna a un módulo o a otro mediante el bit PSA del registro OPTION_REG. Poniendo el bit a 1 el preescalador se asigna al Watchdog y poniendolo a 0 el preescalador se asigna al Timer 0. El valor del preescalador se selecciona con los bits PS2:PS0 de la siguiente manera: PS2:P20 TMR0 WDT 000 1:2 1:1 001 1:4 1:2 010 1:8 1:4 011 1:16 1:8 100 1:32 1:16 101 1:64 1:32 110 1:128 1:64 111 1:256 1:128 Tabla 1 En modo temporizador el Timer 0 incrementa su cuenta en cada ciclo de instrucción. Este modo sirve para generar temporizaciones y bases de tiempo de la misma forma que los retardos por software, sin embargo las temporizaciones con el Timer 0 pueden ser más exactas y además se cuenta con la ventaja de que el módulo puede trabajar mediante interrupciones así que el programa puede ejecutar otras instrucciones mientras se realiza la temporización. (El temporizador Timer 0 en los microcontroladores PIC., n.d.)
  • 13. 12 La temporización que se puede obtener con este módulo se obtiene de la siguiente relación: 𝑇 = 𝑇𝑖𝑛𝑠𝑡 𝑃𝑆(256 − 𝑝𝑟𝑒𝑐𝑎𝑟𝑔𝑎) Donde: 𝑇: temporización obtenida 𝑇𝑖𝑛𝑠𝑡: 4/frecuencia de oscilación 𝑃𝑆: preescalador, si se asigna al Watchdog, tendrá valor de 1 𝑝𝑟𝑒𝑐𝑎𝑟𝑔𝑎: valor inicial del TMR0 La temporización máxima utilizando el oscilador interno del PIC16F84A es: 𝑇 𝑀 = 1 × 10−6(256)(256 − 0) = 65.536 𝑚𝑠 Juego de instrucciones El juego de instrucciones de un microprocesador o microcontrolador es el conjunto de entradas binarias que producen acciones definidas durante un ciclo de instrucción. Un juego de instrucciones es para el microcontrolador lo mismo que una tabla de verdad es para una puerta lógica, un registro de desplazamiento o un sumador. Por supuesto, las acciones que realiza un microcontrolador con cada instrucción son más complejas que las que realizan los dispositivos y puertas antes mencionados. Las instrucciones de los microcontrolador PIC cumplen con las siguientes condiciones:  Juego de instrucciones reducido  Sencillas y rápidas  Ortogonalidad  Formato uniforme de las instrucciones  Formato uniforme de los datos
  • 14. 13 Cada microprocesador o microcontrolador posee su propio juego de instrucciones en él y su propia arquitectura interna. Por lo tanto, un programa escrito para determinado modelo no funcionará en otro modelo distinto. El repertorio completo de instrucciones del PIC16F84A se muestra en la imagen siguiente. (Microchip, s.f.)
  • 15. 14 Desarrollo En esta sección se lleva a cabo el trabajo medular del proyecto. El método que se seguirá se enumera a continuación. 1. Análisis inicial acerca de los requisitos del problema y asignación de entradas y salidas. 2. Diagrama de flujo para el desarrollo del algoritmo. 3. Programación en lenguaje ensamblador, se incluye el código fuente. 4. Ensamble del código fuente en un código objeto útil. 5. Diseño del diagrama esquemático y simulación del programa dentro del mismo. Análisis del problema Se repite la descripción del problema dada en el resumen: Se tienen tres actuadores y una posición deseada fija para cada uno de ellos, las posiciones de cada motor están dadas por el número de vueltas de los motores. El programa se inicia detectado un objeto en un punto a través de un switch. Después, los motores comenzaran a moverse hasta la posición dada. Entonces enciende un LED que indica cuando el motor ha llegado a su posición. El programa se reinicia después de 4 segundos, listo para detectar un nuevo objeto.
  • 16. 15 A partir de dicha descripción, se identifica que habrá dos entradas, para el sensor de proximidad y para el sensor de giro de los motores. También se identifican seis salidas, tres para cada motor y tres para sus respectivos indicadores de posición. Se decide emplear una salida adicional como indicador de estado de espera Finalmente, se muestra la asignación de entradas y salidas en la tabla siguiente. Entrada Pin Detector de proximidad RA0 Contador de vueltas RA4 (T0CKI) Salida Pin Indicador de posición 1 a 3 RB0-RB2 Motor 1 a 3 RB3-RB5 Indicador de espera RB7 Tabla 2
  • 17. 16 Diagrama de flujo TRISA ← 0xFF TRISB ← 0x00 Guardar posiciones deseadas (P1, P2, P3) Encender Motor 1 Apagar LED 1 Configurar TMR0 como contador Compara TMR0 con P1 Inicio RA1 == 1 Leer RA1 TMR0 == P1 1 1 Apagar Motor 1 Encender LED 1 Configurar TMR0 como contador Encender Motor 2 Apagar LED 2 2 Sí No No Sí 4
  • 18. 17 Compara TMR0 con P3 Fin TMR0 == P3 3 Apagar Motor 3 Encender LED 3 Configurar TMR0 como temporizador 4 s No Sí Compara TMR0 con P2 TMR0 == P2 2 Apagar Motor 2 Encender LED 2 Configurar TMR0 como contador Encender Motor 3 Apagar LED 3 3 No Sí 4
  • 19. 18 Programa Al final, se produjo el siguiente fichero fuente, a partir de la traducción del algoritmo mostrado en el diagrama de flujo a lenguaje ensamblador. PROCESSOR P = 16F84A ; Indica el modelo de PIC a emplear RADIX HEX ; Define la base numérica para las ; literales __CONFIG H'3FF1' ; Define frecuencia de 4 MHz ;****************************************************************************************** STATUS EQU 0x03 ; Dirección de Status TMR0 EQU 0x01 ; Dirección de TMR0 OPTION_REG EQU 0x81 ; Dirección de OPTION_REG INTCON EQU 0x0B ; Dirección de INTCON TRISA EQU 0x85 ; Dirección TRISA TRISB EQU 0x86 ; Dirección TRISB PORTA EQU 0x05 ; Dirección PORTA PORTB EQU 0x06 ; Dirección PORTB pos1 EQU 0x08 ; Posición de motor 1 pos2 EQU 0x0A ; Posición de motor 2 pos3 EQU 0x04 ; Posición de motor 3 w EQU 0x00 ; Registro w z EQU 0x02 ; Zero flag COUNT EQU 0x0C ; Cuenta ;****************************************************************************************** ORG 0 ; Directiva de procesador que indica ; dirección de inicio de código ;****************************************************************************************** IO_Setup bsf STATUS, 5 ; Direcciona al banco 1 con STATUS_5 clrf TRISB ; PORTB salida movlw 0x1F ; 5 entradas movwf TRISA ; PORTA entrada bcf STATUS, 5 ; Direcciona al banco 0 con STATUS_5 clrf PORTA ; Inicializar clrf PORTB ; Inicializar main bsf STATUS, 5 ; Direcciona al banco 1 con STATUS_5 movlw b'11101000' ; Configuración: no pull-ups, ; flancos de subida, CLK interno ; prescaler 1:1 para TMR0 (se asigna a WDT) movwf OPTION_REG ; Cargar configuración bcf STATUS, 5 ; Direcciona al banco 0 con STATUS_5
  • 20. 19 Pulsa bsf PORTB, 7 ; PORTB_7 para indicar standby nop ; Retardo para que sea visible el LED nop ; Retardo para que sea visible el LED nop ; Retardo para que sea visible el LED nop ; Retardo para que sea visible el LED bcf PORTB, 7 ; PORTB_7 para indicar standby nop ; Retardo para que sea visible el LED nop ; Retardo para que sea visible el LED nop ; Retardo para que sea visible el LED nop ; Retardo para que sea visible el LED btfsc PORTA, 0 ; Pregunta si el pulsador está oprimido goto Pulsa ; Si no lo está, continúa revisándolo Motor1_ON clrf TMR0 ; Reinicia TMR0 movlw 0x08 ; Enciende motor 1, apaga LED 1 movwf PORTB ; Escribe en la salida TMR0_1 movf TMR0, w ; Copia TMR0 para comparar xorlw pos1 ; x xor x = 0 btfss STATUS, z ; Si son iguales, hay bandera de cero goto TMR0_1 ; Sigue contando Motor1_OFF movlw 0x01 ; Apaga motor 1, enciende LED 1 movwf PORTB ; Escribe en la salida Motor2_ON clrf TMR0 ; Reinicia TMR0 movlw 0x10 ; Enciende motor 2, apaga LED 2 iorwf PORTB ; Escribe en la salida TMR0_2 movf TMR0, w ; Copia TMR0 para comparar xorlw pos2 ; x xor x = 0 btfss STATUS, z ; Si son iguales, hay bandera de cero goto TMR0_2 ; Sigue contando Motor2_OFF movlw 0x03 ; Apaga motor 2, enciende LED 2 movwf PORTB ; Escribe en la salida Motor3_ON clrf TMR0 ; Reinicia TMR0 movlw 0x20 ; Enciende motor 3, apaga LED 3 iorwf PORTB ; Escribe en la salida TMR0_3 movf TMR0, w ; Copia TMR0 para comparar xorlw pos3 ; x xor x = 0 btfss STATUS, z ; Si son iguales, hay bandera de cero goto TMR0_3 ; Sigue contando Motor3_OFF movlw 0x07 ; Apaga motor 3, enciende LED 3 movwf PORTB ; Escribe en la salida
  • 21. 20 Delay_4s bsf STATUS, 5 ; Direcciona al banco 1 con STATUS_5 movlw b'11000111' ; Configuración: no pull-ups, ; flancos de subida, CLK interno ; prescaler 1:256 para TMR0 movwf OPTION_REG ; Cargar configuración bcf STATUS, 5 ; Direcciona al banco 0 con STATUS_5 clrf TMR0 ; Inicializa clrf COUNT ; Prepara cuenta for1 TMR0_Wait btfss INTCON, 2 ; Prueba si hay sobreflujo TMR0 goto TMR0_Wait ; Si no, sigue esperando incf COUNT ; Cada que cuente hasta 255, COUNT++ bcf INTCON, 2 ; Reset INT0IF movf COUNT, w ; Copia COUNT para comparar xorlw 0x3D ; Cuando llegue a 61, 3.997 s btfss STATUS, z ; Si son iguales, Z flag goto for1 ; Si no, sigue esperando RST clrf PORTB ; Reinicia sistema nop ; Retardo nop ; Retardo nop ; Retardo nop ; Retardo goto main ; Endless loop nop ; Necesario para depurar última instrucción END ; Fin
  • 22. 21 Ensamble del programa El proceso que se debe seguir para obtener un archivo objeto que se pueda grabar en la memoria del PIC queda explicado gráficamente a continuación. En general, se seguirá este procedimiento siempre que se lleve a cabo el desarrollo de un programa orientado a sistemas embebidos. Escritura del código fuente Ensamble del código fuente Revisión y correción de errores Obtención y grabado de código objeto (.hex, .bin)
  • 23. 22 Diagrama y simulación Dentro del software de descripción de hardware y diseño esquemático, Proteus, se realizó un circuito que satisficiera con los requisitos del problema. Además, se probó en éste el programa antes mostrado. Resultados Funcionamiento Una vez terminado el diseño esquemático, se pudo poner a prueba el programa que se escribió. Los resultados se mostrarán en una secuencia de imágenes que presentan cada etapa del funcionamiento del sistema para las siguientes posiciones: Motor Posición (número de vueltas) 1 16 2 10 3 8 Tabla 3
  • 24. 23 1. Inicio de sistema, espera que se presione el botón. Un LED indica estado de stand-by. 2. Se presionó el botón (el sensor detectó un objeto); comienza a moverse el primer motor. Un contador ayuda a verificar el número de vueltas que ha completado el motor.
  • 25. 24 3. Luego de que el primer motor alcanza su posición, se enciende el segundo. Nuevamente, un contador muestra las vueltas del motor. 4. Cuando el segundo motor alcanza su posición, el tercero comienza su movimiento.
  • 26. 25 5. Una vez que los tres motores han completado el número de vueltas correspondiente, todos se hallan en su posición y se encienden tres LED’s que indican el final del programa. Comienza un retardo de cuatro segundos (se verifica en el temporizador de la esquina superior derecha). 6. Finalmente el programa se reinicia, en espera del próximo objeto.
  • 27. 26 Restricciones En nuestro sistema se hallaron dos problemáticas. La primera de ellas se relaciona con el esquema empleado para la simulación. En éste, se emplea un generador de pulsos con una frecuencia de 5 Hz. El inconveniente consiste en que la sincronización entre el primer motor y el contador de vueltas no coincide en todo momento. En algunas corridas de simulación, el contador se atrasa una vuelta (el número es mayor a mayores frecuencias). La causa de esto es que el contador se reinicia con flancos ascendentes del botón y el retraso en la simulación del retorno del mismo se reflejaba en el contador. La solución aplicada fue cambiar el reinicio del contador por flancos de bajada. Así, el problema no volvió a ocurrir y se pudo aumentar la frecuencia de trabajo de los motores a 10 Hz, como inicialmente se había diseñado.
  • 28. 27 Nuestro segundo obstáculo está relacionado con la programación. Se encontró que el valor que se asigna a __Config afecta el funcionamiento del programa. En la hoja de datos del PIC16F84A se puede ver que existen bits de configuración que le permiten al usuario personalizar aspectos del dispositivo de acuerdo a la aplicación. Estos bits determinan el modo que empleará el dispositivo cuando se enciende. Dentro del ensamblador de MPASM existe una característica que permite asignar estos bits de configuración dentro del código fuente a través de la directiva __Config. La posición de estos bits varía entre un modelo y otro. En la especificación de la programación del PIC16F84A se halla su palabra de configuración particular. La imagen siguiente muestra cómo está construida dicha palabra y qué significa cada bit. En nuestro caso, el valor que causaba conflicto era 0x3FFD. Según se aprecia en la imagen anterior, esto activa al Wathcdog y a un temporizador de arranque.
  • 29. 28 Conclusiones personales Amauri A lo largo de la realización de este proyecto, aprendí a desarrollar firmware orientado al PIC16F84A que resuelva algún problema de ingeniería planteado. Encontré que la escritura de un programa en lenguaje ensamblador, aunque específica para cada µP o µC empleado, de acuerdo a su repertorio particular, sigue un esquema común, con mnemónicos similares y una lógica de programación parecida. Encuentro que la programación de hardware en lenguaje ensamblador dota al diseñador de amplio control sobre el comportamiento del sistema, sin embargo, también aparecen dificultades que no se resuelven con la misma rapidez y simplicidad que en lenguajes de alto nivel. Ernesto Jessica En la realización de este trabajo se consiguieron los objetivos propuestos logrando programar el PIC16F84A para la simulación del robot aplicando todo el conocimiento adquirido en la investigación y elaboración del marco teórico, para el lenguaje de dicho programa se puede concluir que es un lenguaje de alto nivel y puede resultar útil para un lenguaje ensamblador ya que ahorra tiempo en su programación, depuración y simulación en todas las gama altas y ciertos PIC, por otra parte al implementar el programa firmware podemos decir que funciona como el nexo entre las instrucciones que llegan al robot desde el exterior simulado y sus diversas partes que lo constituyen.
  • 30. 29 Julio Víctor Programar en lenguaje ensamblador no es diferente a utilizar otros lenguajes debido a que las capacidades de los programas están limitados por las prestaciones del hardware y de las capacidades del programador, por lo tanto puedo concluir que la forma en que se resuelven los problemas en programación depende de las habilidades del programador.
  • 31. 30 Conclusión final En este trabajo se aprendió la conveniencia de programar en un lenguaje de bajo nivel, como lo es el lenguaje ensamblador. También se comprobaron las desventajas que programar a un nivel tan cercano a la máquina puede implicar. El lenguaje ensamblador provee un dominio alto sobre el funcionamiento del hardware y permite controlar el cauce del programa, así como aumentar la eficiencia de código y de tiempo; sin embargo, demanda un alto precio, pues exige que el programador tenga profundo conocimiento acerca del dispositivo que utiliza y, al mismo tiempo, lo limita, debido a que las instrucciones, registros y prestaciones son específicas del hardware, por lo que se debe realizar todo un nuevo proceso de aprendizaje al programar un dispositivo diferente. Así, un gran peso del trabajo de diseño recae en las habilidades del programador para entender hardware y detectar problemas de diseño durante la depuración de código, y también de su capacidad de adaptación y aprendizaje. Finalmente, verificamos la importancia de la comunicación entre un sistema embebido y su mundo exterior, en particular aquellos sistemas embebidos orientados a la robótica, pues es de trascendental importancia que el controlador reciba información de su entorno para poder corregir el curso de su operación y resolver el problema para el cuál se concibió su uso. Podemos decir que los objetivos planteados en este proyecto se cumplieron satisfactoriamente, con base en el dominio logrado en la programación en lenguaje ensamblador de un microcontrolador y en los resultados obtenidos en nuestra solución, cuyo rendimiento resuelve la situación que le dio origen y no presenta problemas de funcionamiento.
  • 32. 31 Referencias Departamento de informática. (s.f.). Modos de direccionamiento. Obtenido de www.infor.uva.es/~bastida/OC/modos.pdf Detmer, R. (2001). Introduction to 80x86 assembly language and computer architecture. Jones & Bartlett Computer Science. El lenguaje ensamblador del PIC16F84A. (s.f.). Recuperado el octubre de 2014, de Dispositivos lógicos microprogramables: http://perso.wanadoo.es/pictob/ensamblador.htm El temporizador Timer 0 en los microcontroladores PIC. (s.f.). Obtenido de Circuitos electrónicos: http://www.circuitoselectronicos.org/2011/04/el-temporizador-timer- 0-en-los.html Microchip. (s.f.). PIC16F84A. Obtenido de Microchip products: http://www.microchip.com/wwwproducts/Devices.aspx?dDocName=en010230
  • 33. 32 Paszniuk, R. (27 de abril de 2013). Introducción al lenguaje ensamblador. Obtenido de Programación: http://www.programacion.com.py/escritorio/ensamblador/introduccion-al- lenguaje-ensamblador Práctica No.1. (s.f.). Obtenido de Universidad autónoma de San Luis Potosí: http://galia.fc.uaslp.mx/~cantocar/microprocesadores/PRACTICAS__Z80_PDF_ S/1_RELOJ_Y_RESET.PDF Reiniertl. (26 de junio de 2008). Introducción a los temporizadores. Obtenido de WikiTrónica: http://electronica.wikia.com/wiki/Introducción_a_los_temporizadores Tocci, R. (s.f.). Digital Systems: Principles and Applications. Prentice Hall. Wikipedia. (s.f.). Controlador lógico programable. Obtenido de Wikipedia: http://es.wikipedia.org/wiki/Controlador_lógico_programable