Un colombiana tomado a lazar
Enviado por shneyder • 29 de Septiembre de 2015 • Ensayo • 2.509 Palabras (11 Páginas) • 165 Visitas
PROYECTO ASCENSOR
CIRCUITOS DIGITALES II
Manuel Galindo, Giovanni López
manuelgalindo@unicauca.edu.co; gilopez@unicauca.edu.co
Programa de Ingeniería en Electrónica y Telecomunicaciones - FIET
Universidad del Cauca
Popayán – Colombia
[pic 1]
I. INTRODUCCION
Los microcontroladores fueron pensados para control, tienen la capacidad de trabajar con procesos simples, pero continuos, sin problemas de ejecución a largo plazo. Un ascensor es un entorno óptimo para un microcontrolador pues tiene que recibir señales digitales de diferente tipo (pulsadores), señales analógicas (sensores) y salidas digitales (indicadores, interruptores, etc)
El diseño electrónico de un ascensor no resulta complicado, pero cuando se quieren optimizar los procesos de ejecución para sacarle el mejor provecho y que sea funcional para los usuarios ya no resulta tan fácil, muchas tareas de comparación para optimizar dificultan los procesos de diseño.
II. DESARROLLO
La primera etapa consistió en la lectura de los pulsadores, sin embargo cuando en las simulaciones tanto en MPLAB SIM como en ISIS solo se ejecutaba una sola tarea a la vez y resultaba interrumpida por cualquier solicitud en los teclados, lo primero fue implementar una memoria para almacenar dichas tareas. Se resume el proceso de lectura así:
*Lectura de teclado interno:
-barrido pin a pin con los pines asociados a los botones de la cabina.
- Almacenamiento en un bit asociado en un registro llamado CABINA
* Lectura teclado interno:
-barrido pin a pin con pines asociados a los botones exteriores
-almacenamiento de valor asociado a la tarea en registro ext
-comparación de valor ext con valores en registro ext0…ext4, si esta repetido se descarta la lectura en ext
-comparación para detectar algún espacio libre en la pila entre ext0…ext4 si no hay espacios descarta ext, si hay programa ext en donde haya espacio y termina la lectura
Cuando termina la lectura se inicia una subrutina de nombre Ejecutor de tareas, este inicialmente verifica si alguna tarea en la pila ext, si la hay ejecuta una instrucción de decodificación ya que en la pila se almacena un valor codificado, este valor decodificado libera un valor que indica al piso que debe ir a recoger el pasajero y si quiere subir o bajar. Hecho esto se verifica si hay alguna instrucción en el vector CABINA; si lo hay pasa a una rutina de selección de prioridad, si no pasa a ejecutar simplemente lo que hay en la pila. Cuando no hay nada en la pila ext pero si en el vector CABINA, pasa a ejecutar lo que se encuentra en el vector cabina.
Terminado lo anterior inicia la parte de ejecución de tareas, primero la propuesta era un selector de prioridad, sin embargo la gran cantidad de comparaciones resulto complicada y en algunos casos se presentaban errores de ejecución en la pila de hardware (stack), en algunos casos retornaba la pila de forma incorrecta a zonas del código que generaban loops (ciclos cerrados), por tanto se tuvo que desechar esta parte durante el desarrollo y continuar con otras partes necesarias para la ejecución.
Para continuar con el desarrollo se estableció un código que pasa directamente las tareas de la cabina y los botones exteriores hacia el comparador. Se compara el piso en que encuentra la cabina contra el piso al que se quiere ir. Se recurre al bit Z y al bit C para hacer esta comparación, si el bit Z se pone en 1, eso significa que el piso al que se quiere ir y el piso actual son los mismos, por tanto debe parar el motor y retornar al bucle; en caso contrario pasa a ver el bit C, cuando C esta en 1, eso significa que la cabina se encuentra por debajo de donde se quiere ir, cuando es positivo significa que está por encima y por ende la cabina tiene que bajar, se muestra el código:
PISO > valor de piso donde está la cabina
PISOF > valor de piso a donde se quiere ir
PISOR > valor temporal para la ejecución
Comparador_piso
movfw PISOF
movwf PISOR
comf PISOR,F
movlw 0x01
addwf PISOR,F
movfw PISO addwf PISOR,F
btfsc STATUS,Z
call Motor_parar
btfsc STATUS,Z goto limpieza
btfsc STATUS,C call Motor_bajar
call Motor_subir
return
En términos generales esta es la columna principal del código, lo demás son aditamentos para administrar los pines, polarizar el motor y manejar el visualizador 7 segmentos.
A nivel de hardware, se asignaron los pines de manera que fuera más cómoda para el montaje físico. Se muestran cómo se asignaron en la siguiente lista:
Puertos
Pulsadores exteriores para llamar a la cabina:
Subir_1 (RC0)
Bajar_2 (RC1)
Subir_2 (RC2)
Bajar_3 (RC3)
Subir_3 (RD0)
Bajar_4 (RD1)
Teclado numérico ubicado en la cabina del ascensor:
Cabina_P4 (RC4)
Cabina_P3 (RC5)
Cabina_P2 (RC6)
Cabina_P1 (RC7)
Botón de emergencia para bloquear puertas y detener cabina.
Emergencia (RD2)
Entradas para los sensores de la cabina. Cabe aclarar que se emplearon fotorresistencias, pero se ajustaron de manera que cambiaran en voltajes que representen niveles lógicos. Es decir, cuando no está obstruido el sensor hay una entrada de 0.9V (cero lógico), cuando hay una obstrucción, el voltaje llega a un nivel de 4.5V (1 lógico).
...