Diseño e implementación de un taxímetro

download Diseño e implementación de un taxímetro

of 30

Transcript of Diseño e implementación de un taxímetro

  • 7/23/2019 Diseo e implementacin de un taxmetro

    1/30

    Proyecto final Julio 2015 Microprocesadores

    Diseo e implementacinde un taxmetro

    Marco

    Torres

    , B16592Microprocesadores

    Escuela de Ingeniera Elctrica

    Universidad de Costa Rica

    Resumen

    El problema inicial fue el diseo y la implementacin prctica de una aplicacin real utilizando un

    microcontrolador HC12 de Freescale utilizando su lenguaje ensamblador. El taxmetro que se dise tenaque poder tasar el monto a pagar de dos formas, cuando el vehculo estuviera en movimiento (RUN) o

    cuando estuviera en espera (WAIT) adems de poder configurar los parmetros de funcionamiento, los

    cuales son el factor de conversin de las ruedas (para poder adaptar el taxmetro a cualquier vehculo) y los

    precios por kilmetro recorrido y por minuto de espera.

    El proyecto est bastante segmentado en subrutinas de propsito muy especfico, esto ayuda en gran

    manera a entender el funcionamiento del mismo. Adems cada una de las subrutinas que se utilizaron

    estn ampliamente explicadas mediante diagramas de flujo, sus parmetros de entrada y de salida y un

    resumen de su funcionamiento.

    Tambin el documento cuenta con una seccin de clculos, donde se detallan las decisiones de ciertos

    valores que se utilizaron en el diseo, con una seccin de conclusiones y otra de recomendaciones con las

    cuales se espera que ayuden al lector a entender mejor el trabajo y/o mejorar el diseo a futuro.

    Una vez que se estructur el proyecto y se programaron y probaron cada una de las subrutinas por

    aparte los resultados fueron prometedores. La aplicacin funcionaba de manera correcta tal y como se

    esperaba.

    I. Diseo de la aplicacin

    I. Programa principal

    El programa principal es la lnea que lleva al taxmetro a la ejecucin de cada uno de losprocesos que conforman los modos de operacin del mismo de forma secuencial y cclica. A pesarde que est conformado por pocas subrutinas, nunca se ejecutan todas en un mismo modo deoperacin, sino que dependiendo de cmo est operando el taxmetro as se ejecutan unas u otras

    subrutinas. Antes de discutir la estructura del programa se recomienda ver la figura1, donde sepuede detallar su diagrama de flujo.

    Las subrutinas que se vayan a ejecutar desde el programa principal dependen nicamente delvalor que tenga la variable ESTADO, esta indica el estado actual de la mquina. Al ejecutar elprograma por primera vez la variable tiene su valor inicial ($00) es cual corresponde al estadoLIBRE, este modo de ejecucin el programa se desva de l el primer bloque de interrogacin

    1

    mailto:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]:[email protected]
  • 7/23/2019 Diseo e implementacin de un taxmetro

    2/30

    Proyecto final Julio 2015 Microprocesadores

    Figura 1: Programa principal | Diagrama de flujo.

    2

  • 7/23/2019 Diseo e implementacin de un taxmetro

    3/30

    Proyecto final Julio 2015 Microprocesadores

    llamando a la subrutina LIBREy saltando al conectorTAX_DSP_3, luego se llama la subrutinaDESPLEGAR para mostrar en las pantallas el mensaje Librque indica que el taxmetro est enmodo de espera y se vuelve al punto inicial TAX_LAZO_1.

    Cuando la variable ESTADO es $03 el programa se encuentra en el modo CONFIG en elque se le pregunta al usuario por los parmetros del taxmetro. Del diagrama se puede obser-var que en el segundo bloque de interrogacin el programa llama la subrutina CONFIG conla cual el usuario ingresa los parmetros que desee, como estos parmetros se almacenan co-mo variables en binarioes necesario convertirlas a sus valores correspondientes en 7 segmentospor lo que luego se salta al conector TAX_DSP_2 y se llama la subrutina BCD_7SEG y DES-PLEGARpara mostrar en las pantallas los valores ingresados y se vuelve de nuevo al punto inicial.

    Tanto si la variableESTADOvale $01 o $02 el programa no vara sino hasta el tercer bloquede interrogacin, aqu se llama la subrutina MINUTO (para WAIT) o DIST_VEL (para RUN)dependiendo de si el taxi est en movimiento o en espera. Luego de esto se ejecutan las mismas

    subrutinas de PAGAR para calcular el monto a cancelar, SWITCH para alternar los valores amostrar en la pantalla y BIN_BCDpara convertir los valores aBCD,BCD_7SEGy DESPLEGARpara mostrar los valores de inters para el usuario.

    En las secciones siguientes se explican ms a fondo cada una de las subrutinas de atencina interrupciones (ISR por sus siglas en ingls) y posteriormente las subrutinas generales que secitaron anteriormente.

    Es de suma importancia que se entienda que las subrutinas de atencin a interrupciones seejecutan constantemente iniciadas por un evento ajeno al programa principal sin importar donde seencuentre este y que tanto el programa principal como las subrutinas de atencin a interrupcioneso las generales llaman otras subrutinas generales o modifican valores que cambiarn el modo deoperacin del taxmetro. Tambin vale la pena mencionar que por la naturaleza del programaprincipal este no recibe parmetros.

    3

  • 7/23/2019 Diseo e implementacin de un taxmetro

    4/30

    Proyecto final Julio 2015 Microprocesadores

    II. Subrutinas de servicio de interrupciones (ISR)

    Se podra decir que el el taxmetro funciona fluida y constantemente gracias a las ISR, que se

    ejecutan independientemente del programa principal u otras subrutina. En general son generadaspor perifricos pero otras como la ISR_RTIson vitales para la ejecucin de funcionalidades en

    tiempo real o eventos que suceden dado un tiempo determinado.

    II.1. ISR_RTI

    Esta subrutina se encarga de realizar tres tareas, las primeras dos son mutuamente excluyentesy dependen del estado del taxmetro y la tercera se ejecuta siempre. En la figura 2y3 se muestrael diagrama de flujo de esta subrutina. Todos los parmetros de entrada y salida se pasan pormedio de variables en memoria y se listan a continuacin.

    Entrada:

    ESTADO

    SUP_PTA

    COL_MASK

    C_OFF

    R_OFF

    BFF_CANT,

    BFF_TCL

    BFF_TCL+1

    TECLAS+N,

    KEY_TEMP

    SEG_CNT

    SEG

    C_DIG

    CONT_DIG

    SUP_PTH

    Salida:

    KPD_LEIDO

    BFF_TCL+N

    SEG_CNT

    SEG

    C_DIG

    CONT_DIG

    SUP_PTH

    OUT_STAT

    Lo primero que se hace al ser llamada la subrutina es saber en que estado esta pues las

    primeras dos tareas son mutuamente excluyentes. Si el taxmetro no se encuentra en el estadoCONFIG(3) se ejecutan los bloques que estn en celeste (al lado derecho del diagrama) esta partesimplemente cuanta segundos en una variable llamada SEG, cuando la subrutina se llama ciertonmero de veces esta variable se incrementa y al llegar a 60 se reinicia.

    La parte de color verde claro (al lado izquierdo) se encarga de leer el teclado matricial ycolocar las teclas ledas en el buffer de teclas, primero se aplica una mscara al puerto A y selee el puerto, de este modo los botones presionados aparecen como un cero en el patrn que selee. Luego se calcula el desfase correspondiente a las columnas con la subrutina COL_OFFSET,adems se revisa si el patrn ledo tiene algn cero (lo que indica que se presione alguna tecla y

    es distinto de $FF) si no hay ceros se procede calcular la siguiente mscara y revisar la siguiente

    fila. En caso de que se encontrara un cero se debe proceder a rotar el patrn para encontrar

    cual es el botn que se presione buscando el bit que sea igual a cero, cuando se encuentra estebit se calcula el desfase correspondiente a las filas para as guardar el nmero ubicado a par-tir de la posicin TECLAS con el desfase de las columnas y filas, este nmero se guarda en el

    buffer y si hubiese otro cero en el patrn tambin se debe guardar , esto para soportar el roll-over.

    Una vez que se ejecuta alguna de las dos subrutinas mutuamente excluyentes se salta a elpuntoSALTO_RTI_3donde se cambia por medio de la variable CONT_DIGal pantalla o ledsque se debe encender, esto pasa cada dos interrupciones y este periodo lo maneja la variable

    4

  • 7/23/2019 Diseo e implementacin de un taxmetro

    5/30

    Proyecto final Julio 2015 Microprocesadores

    Figura 2: ISR_RTI | Diagrama de flujo 1.

    5

  • 7/23/2019 Diseo e implementacin de un taxmetro

    6/30

    Proyecto final Julio 2015 Microprocesadores

    Figura 3: ISR_RTI | Diagrama de flujo 2.

    C_DIG, luego se decrementa la variableSUP_PTHen caso de que no sea cero, esta suprime losrebotes en los pulsadores conectados al puerto H.

    Finalmente se procede a modificar el registro ATD0CTL5para que inicie el proceso de conver-sion analogico digital.

    II.2. ISR_TC4

    La subrutina ISR_TC4 se encarga nicamente de multiplexar las pantallas 7 segmentos o ledspara poder utilizar el mismo bus de datos al mostrar los valores de inters del usuario y controlarel brillo de los mismo. El nivel de intensidad en las pantallas o leds est determinado por eltiempo que pasen encendidas y apagadas en cada iteracin al desplegar un valor. Vase en lafigura4el diagrama de flujo de esta subrutina. Todos los parmetros de entrada y salida se pasan

    por medio de variables en memoria y se listan a continuacin.

    Entrada:

    CONT_TICS BRILLO OUT_STAT TC4

    6

  • 7/23/2019 Diseo e implementacin de un taxmetro

    7/30

    Proyecto final Julio 2015 Microprocesadores

    Salida:

    CONT_TICS TC4 OUT_STAT

    Figura 4: ISR_TC4 | Diagrama de flujo.

    Esta subrutina genera lo que se podran llamar tics, cada vez que se llama se incrementa lavariable llamadaCONT_TICS, cuando es igual a la variable BRILLOse apagan las pantallas ylos leds y se pone en cero la variable OUT_STATpara indicar que no se deben encender de nuevohasta que CONT_TICS llegue a 20, cuando esto sucede se reinicia CONT_TICS y se habilita

    encender las pantallas o leds. Finalmente se suma al registro TC4 19, para que la interrupcinvuelva a ser llamada en el tiempo preestablecido, este tiempo se detalla en la seccin de clculos.

    II.3. ISR_TC0

    Esta subrutina se encarga de simular los pulsos generados por el sensor de proximidad deltaxi ubicado en las ruedas para medir las distancia recorrida y velocidad. Para esto se utiliza elmdulo de tiempos en modo de comparacin de salidas (output compare) en el canal 0 el cualejecuta esta subrutina dado un tiempo predeterminado el cual es proporcional al valor ledo por

    el convertidor analogico digital (ATD) cuya operacion se explica ms adelante.El diagrama de flujo de esta subrutina se muestra en la figura5.Todos los parmetros de entrada y salida se pasan por medio de variables en memoria y se listana continuacin.

    Entrada:

    ESTADO PUL_CNT PULSOS TC0

    7

  • 7/23/2019 Diseo e implementacin de un taxmetro

    8/30

    Proyecto final Julio 2015 Microprocesadores

    Salida:

    PULSOS PUL_CNT TC0

    Figura 5: ISR_TC0 | Diagrama de flujo.

    Esta subrutina se encarga de simular el sensor de proximidad ubicado en las ruedas, por locual el ltimo bloque del diagrama de flujo corresponde a asignar TC0_CARGAcomo el tiempopara la prxima interrupcin, este valor est determinado por el que se lee en el PAD7 que seconvierte en laISR_ATD, fuera de esto solamente debe de incrementar la variable PULSOScada500 interrupciones cuando el taxmetro est en el estado RUN de lo contrario la subrutina salta alfinal.

    II.4. ISR_ATD

    LaISR_ATDsirve para realizar las conversiones analogico-digitales, cuando se llama calcula elpromedio de cuatro mediciones y lo guarda en la variable POT, luego dependiendo del interruptorPTH7se procede a cambiar la velocidad a la que incrementa la variablePULSOSo variar el brillode las pantallas y los led. En la figura 6se puede ver el diagrama de flujo de esta subrutina.

    Todos los parmetros de entrada y salida se pasan por medio de variables en memoria y se listana continuacin.

    8

  • 7/23/2019 Diseo e implementacin de un taxmetro

    9/30

    Proyecto final Julio 2015 Microprocesadores

    Figura 6: ISR_ATD | Diagrama de flujo.

    Entrada:

    ADR00H ADR01H ADR02H ADR03H

    Salida:

    POT TC0_CARGA K

    Los acciones tomadas dentro de los bloques de asignacin luego del bloque de interrogacinestn explicadas en las parte de clculos.

    9

  • 7/23/2019 Diseo e implementacin de un taxmetro

    10/30

    Proyecto final Julio 2015 Microprocesadores

    II.5. ISR_PTH

    Desde el punto de vista de mquina de estado la ISR_PTHactual como la lgica de prximoestado, esta es la que en base al estado actual y al pulsador que fue presionado calcula el prximoestado y reinicia las variable necesarias.En la figura6se puede ver el diagrama de flujo de esta

    subrutina. Todos los parmetros de entrada y salida se pasan por medio de variables en memoriay se listan a continuacin.

    Entrada:

    ESTADO SUP_PTH PIFH

    Salida:

    ESTADO

    SUP_PTH

    LED

    KMR

    ME

    PULSOS

    A_PAGAR

    SEG

    KM_H.

    Antes de hacer cualquier cambio la subrutina debe de tomar en cuenta el supresor de rebotes(SUP_PTH), si este no es cero se decrementa. Luego dependiendo del estado actual se considera

    si se presionan o no alguno pulsadores; si el taxmetro est enLIBREsolo se cambia de estado sise presiono el boton PTH0 o el PTH3, si est en RUN cambia de estado si se presion PTH1 oPTH2, si est en WAITcambia de estado si se presiono PTH0 o PTH2 y si est en CONFIGnocambia de estado, esto porque salir del estado CONFIGle corresponde a otro subrutina.

    Luego de saltar a los bloques de asignacin de cada estado nuevo se reinician las variables quehagan falta.

    10

  • 7/23/2019 Diseo e implementacin de un taxmetro

    11/30

    Proyecto final Julio 2015 Microprocesadores

    Figura 7: ISR_PTH | Diagrama de flujo.

    11

  • 7/23/2019 Diseo e implementacin de un taxmetro

    12/30

    Proyecto final Julio 2015 Microprocesadores

    III. Subrutinas generales

    En este captulo se detallan ampliamente cada una de las subrutinas generales, estas se suelenllamar desde el programa principal o desde otras subrutinas generales. Estas se podran dividir porfuncionalidad; las subrutinas TECLADO,COL_OFFSET,ROW_OFFSETy BFF_CHECK estn

    directamente relacionadas con el funcionamiento del teclado matricial de la tarjeta, las subrutinasBIN_BCD,SWITCHy DESPLEGARcon el funcionamiento de la pantalla multiplexada mientrasque las dems corresponden al flujo de ejecucin del programa principal.

    III.1. INIC

    Esta subrutina se ejecuta solo una vez al iniciar el programa, se encarga de guardar en lasvariables de todo el programa los valores iniciales para que as sea seguro que el taxmetro inicieen un estado conocido (LIBRE) y configurar los puertos con los cuales el procesador se comunicacon los perifricos.

    A pesar de lo simple que parece si no se sigue cierto orden a la hora de configurar las variablesse puede inducir un error.

    III.2. LIBRE

    Sin ms detalle las subrutinaLIBREsolamente se encarga de colocar en las variables DIG losvalores en 7 segmentos de la palabra Librepara que as la subrutina desplegar muestre la palabraen las pantallas. En la figura8se puede ver el diagrama de flujo de esta subrutina.

    Los parmetros de salida se pasan por medio de variables en memoria y se listan a continuacin.

    Salida:

    DIG1 DIG2 DIG3 DIG4

    Figura 8: LIBRE | Diagrama de flujo.

    12

  • 7/23/2019 Diseo e implementacin de un taxmetro

    13/30

    Proyecto final Julio 2015 Microprocesadores

    III.3. CONFIG

    Esta subrutina se encarga de solicitar al usuario los parmetros del taxmetro, el factor deconversin (FC), el precio por kilmetro recorrido (KMR) y el precio por kilmetro de estera (PM),adems rechaza los valores que no estn dentro del rango permitido.

    Todos los parmetros de entrada y salida se pasan por medio de variables en memoria y se listana continuacin.

    Entrada:

    BCD1

    BCD2

    BCD3

    BCD4

    CFG_CNT

    ST_FLAG

    VALOR

    VALOR_DEF

    INGRESOS

    FC_BCD

    PKM_BCD

    PM_BCD

    BCD_PRE

    BIN_RES

    Salida:

    CFG_CNT FC PKM PM

    Tanto los parmetros de entrada como los de salida son accesados por posiciones de memoria.Antes de entrar en detalles se recomienda ver la figura9donde se muestra el diagrama de flujo deesta subrutina.

    En particular esta subrutina un poco diferente a las dems, esto porque es la nica (a parte delaISR_PTH) que puede modificar la variableESTADO, adems se disearon subestados conlos cuales la subrutinaCONFIG sabe cul parmetro est siendo solicitado y cuales ya fueronsolicitados. Esta subrutina trabaja junto con TECLADOpues cuando el taxmetro est en el modode configuracin laISR_RTIest leyendo las teclas ingresadas por el usuario e ingresarlas a unbuffer y la subrutinaTECLADOest convirtiendo estas teclas en el buffer en nmeros en BCD.

    Como se puede ver en el diagrama lo primero que se hace es colocar en la variablesBCD3yBCD4un $0F para que la subrutina desplegar apague las pantallas de la derecha porque losparmetros son solo de dos dgitos. Luego se pregunta si la variable BCD2 es cero, porque siasi es se debe tambin apagar la pantalla de este dgito igual que los anteriores. Despus sellama la subrutinaTECLADO, como se discutir luego est luego de que se presione la tecla Epone el valor que hay enVALOR(valor dinmico que se muestra en pantalla) en VALOR_DEF(valor definitivo ingresado), antes de validar en nmero ingresado se comprueba si es la primeravez que se ejecuta esta subrutina desde que el taxmetro cambio de estado (para esto sirven lavariable ST_FLAG), de ser as se debe colocar en la variable VALORel parmetro configuradoanteriormente y en los led el patrn correspondiente, la siguiente vez no ser necesario.

    El siguiente paso es conocer si desde que se cambio de estado se ha presionado alguna tecladel teclado matricial, para esto si VALOR_DEFtiene un $FF significa que no se ha presionadoy la subrutina salta al final mientras esto suceda. Una vez se presiona una tecla se pregunta enque subestado se encuentra siCFG_CNTvale cero se est configurandoFC, si vale uno se estconfigurando elPKM y s vale dos PM, en general si el valor ingresado no est dentro del rango

    de valores de cada parmetro se borra el nmero y se espera otro.

    13

  • 7/23/2019 Diseo e implementacin de un taxmetro

    14/30

    Proyecto final Julio 2015 Microprocesadores

    Cuando se recibe un nmero vlido se guarda este valor en su correspondiente variable en BCD(FC_BCD,PMK_BCDy PM_BCD, se cambia el patrn de los led por el que indique el prximo

    parmetro a configurar, se pone como valor dinmico a desplegar (VALOR) el valor anteriordel parmetro a configurar, se declaran ingresados dos nmeros, se borra el valor ingresado

    anteriormente y se incrementa la variable CFG_CNTpara indicar que se debe recibir el prximoparmetro.

    Al aceptar el ultimo parametro (PM) sucede algo diferente, se empiezan a convertir losparmetros enBCD a hexadecimalutilizando la parte de la subrutina que tambin hace la primeraconversin, luego se retorna.

    III.4. TECLADO

    Esta subrutina se encarga de leer las teclas ingresadas en el buffer y convertirlas en nmeros.Todos los parmetros de entrada y salida se pasan por medio de variables en memoria y se listana continuacin.

    Entrada:

    KPD_LEIDO

    BFF_CANT

    BFF_TCL

    BFF_TCL+1

    ENTER

    VALOR

    VALOR_DEF

    INGRESOS

    Salida:

    VALOR VALOR_DEF BCD1 BCD2

    Como se mencion antes esta subrutina opera junto con la ISR_RTI, cuando el taxmetro esten modo CONFIG la ISR_RTI lee las teclas ingresadas en el teclado matricial y las coloca enun buffer de teclas que se encarga de manejar el roll-over. Luego la subrutina TECLADO lee loque hay en este buffer y lo convierte en valores numricos utilizando la tabla TECLAS. Vase su

    diagrama de flujo en la figura10.

    Como no se est analizando la subrutina que llena el buffer con las TECLAS sino la subrutinaque lo vaca, para explicar el funcionamiento suponemos varios casos segn el estado del buffer ylos valores ingresados anteriormente. La variable KPD_LEIDO funciona como un protector de losdatos que se estn leyendo, para la subrutina no lea las teclas hasta que se hayan terminado deingresar o que no se ingresen datos mientras se estn leyendo, adems la subrutinaBFF_CHECKsirve para examinar el contenido de buffer buscando teclas especiales, en caso de que se ingrese

    unaB o unaE se borra el buffer con la excepcin de que con la segunda se pone en alto la variableENTERpara indicar que el valor ingresado en el que el que se debe procesar.

    En caso de que el buffer est vaco o se haya vaciado antes (esto porBFF_CHECK) y si importar

    los ingresos la subrutina salta a borrar el contenido del buffer, en caso de que hayan ingresospero el buffer est vaco sucede lo mismo al igual. El resultado cambia cuando hay uno o ningningreso y el buffer tiene una o dos teclas, si no hubieran ingresos y el buffer tiene una tecla esta seguarda en valor y se incrementa la variable INGRESOS, si fuesen dos teclas es necesario rotar elprimer nmero cuatro veces hacia la izquierda para ingresar el segundo, lo mismo sucede si hay

    un ingreso y el buffer tiene un teclas.

    14

  • 7/23/2019 Diseo e implementacin de un taxmetro

    15/30

    Proyecto final Julio 2015 Microprocesadores

    Figura 9: CONFIG | Diagrama de flujo.

    15

  • 7/23/2019 Diseo e implementacin de un taxmetro

    16/30

    Proyecto final Julio 2015 Microprocesadores

    Figura 10: TECLADO | Diagrama de flujo.

    16

  • 7/23/2019 Diseo e implementacin de un taxmetro

    17/30

    Proyecto final Julio 2015 Microprocesadores

    La segunda parte de la subrutina no solo borra el buffer si no que depende del valor deENTERse guarda la variableVALORen la variable VALOR_DEFpara indicar que no ser modificada yse borra el contenido de VALORe INGRESOS, para este momento el contenido de VALOR_DEFdebe ser analizado por la subrutinaCONFIG, de no ser vlido ser borrado. En el caso de que

    ENTERser cero VALORdebe ser puesto en pantalla, para esto se copian los primeros cuatrobits (LSB) a la variable BCD1 y los ltimos cuatro bits (MSB) a BCD2.

    Vale la pena recalcar que aunque se llame la subrutina TECLADO sea llamada esta solo puedeleer el contenido del buffer si la ISR_RTIse lo permite cambiando el contenido deKPD_LEIDO.

    III.5. COL_OFFSET

    La funcin principal de esta subrutina es calcular el desfase correspondiente a las columnasdel teclado en la tabla TECLAS, esto para poder ubicar el nmero correspondiente a la teclapresionada.Todos los parmetros de entrada y salida se pasan por medio de variables en memoria y se listana continuacin.

    Entrada:

    COL_MASK

    Salida:

    C_OFF

    Vase la figura11para ver el diagrama de flujo de esta subrutina.

    Esta subrutina se basa en la bascara que haya sido aplicada al puerto A al momento de ser

    llamada para calcular el desfase pues los botones del teclado matricial se analizan por columnas.

    III.6. ROW_OFFSET

    As como COL_OFFSET calcula el desfase de las columnas esta subrutina es calcula el desfasecorrespondiente a las filas del teclado en la tabla TECLAS para ubicar el nmero correspondientea la tecla presionada. El parametro de entrada se pasa por el acomulador B y todos los parametrosde salida se pasan por medio de variables en memoria y se listan a continuacin.

    Entrada:

    Bits Rotados (Acomulador B)

    Salida:

    R_OFF

    Vase la figura12para ver el diagrama de flujo de esta subrutina.

    Como la subrutina TECLADO analiza cada columna de teclas por separado para analizarlos bits de las filas cuando se lee el patrn de una columna se rota para analizar las fila de

    17

  • 7/23/2019 Diseo e implementacin de un taxmetro

    18/30

    Proyecto final Julio 2015 Microprocesadores

    Figura 11: COL_OFFSET | Diagrama de flujo.

    Figura 12: ROW_OFFSET | Diagrama de flujo.

    esta columna. El nmero de veces que se ha rotado queda almacenado en el acomulador B yes importante porque indica en qu fila est actualmente. Al momento de llamar la subrutinaROW_OFFSETel desfase se calcula utilizando la asignacin 1, pues en la memoria los valores

    de las teclas estn almacenados linealmente (cuando acaba una fila empieza con la siguiente deizquierda a derecha).

    R_OFF [(B) 1] 3 (1)

    18

  • 7/23/2019 Diseo e implementacin de un taxmetro

    19/30

    Proyecto final Julio 2015 Microprocesadores

    III.7. BFF_CHECK

    El nico propsito de esta subrutina es revisar el buffer de teclas para indicar si se presiono lateclaE o B. Vase la figura13.Todos los parmetros de entrada y salida se pasan por medio de variables en memoria y se listan

    a continuacin. .

    Entrada:

    BFF_TCL

    BFF_TCL+1

    VALOR

    INGRESOS

    BFF_CANT

    Salida:

    INGRESOS VALOR ENTER

    Figura 13: BFF_CHECK | Diagrama de flujo.

    En caso de que el buffer tenga un $0B (ya sea en BFF_TCL o en BFF_TCL+1) se debe borrar elbuffer, en caso de que tenga un $0E (ya sea en BFF_TCL o en BFF_TCL+1) se debe poner un unoen la variableENTER, esto le indicar a la subrutinaTECLADOque las el nmero en la variableVALORdebe ser procesado.

    19

  • 7/23/2019 Diseo e implementacin de un taxmetro

    20/30

    Proyecto final Julio 2015 Microprocesadores

    III.8. DESPLEGAR

    La subrutinaDESPLEGARse encarga de multiplexar los datos de inters en las pantallas ylos leds pero laISR_TC4es la que modifica las variables OUT_STAT y CONT_DIG que son lasque dictan cuando se deben encender las pantallas o leds y cual pantalla o led se debe encender.

    Todos los parmetros de entrada y salida se pasan por medio de variables en memoria y se listana continuacin.

    Entrada:

    K

    BRILLO

    OUT_STAT

    CONT_DIG

    DIG1

    DIG2

    DIG3

    DIG4

    LEDS

    Salida:

    PuertoP Puerto B Puerto J1

    En la figura14se muestra el diagrama de flujo de la subrutinaDESPLEGAR.

    Para la subrutina las variable OUT_STATactual como un habilitador, esto porque una vezque la ISR_TC4 apaga las pantallas o leds esta no debe volver a encenderlos por lo que es laISR_TC4la que controla esta variable. Luego simplemente el programa dependiendo del valor deCONT_DIGas ser la pantalla que encienda, en caso de que sea menor a cuatro se apagan losleds, en el puerto P se pone la mscara adecuada para encender la pantalla deseada y se copia alpuerto B el valor que corresponde a esa pantalla. En caso de que CONT_DIGsea cuatro se apagantodas las pantallas y se encienden los leds pero esta vez se copia la variableLEDSal puerto B.

    III.9. BIN_BCD

    Esta subrutina toma convierte el valor en la posicin de memoria BIN y lo convierte aBCDdividido en cuatro variables; BCD4, BCD3, BCD2 y BCD1 los cuales corresponden a cada dgitode la pantalla.

    Todos los parmetros de entrada y salida se pasan por medio de variables en memoria y selistan a continuacin.

    Entrada:

    BIN

    Salida:

    BCD4 BCD3 BCD2 BCD1

    En la figura15se puede ver el diagrama de flujo de esta subrutina.

    20

  • 7/23/2019 Diseo e implementacin de un taxmetro

    21/30

    Proyecto final Julio 2015 Microprocesadores

    Figura 14: DESPLEGAR | Diagrama de flujo.

    21

  • 7/23/2019 Diseo e implementacin de un taxmetro

    22/30

    Proyecto final Julio 2015 Microprocesadores

    Figura 15: BIN_BCD | Diagrama de flujo.

    22

  • 7/23/2019 Diseo e implementacin de un taxmetro

    23/30

    Proyecto final Julio 2015 Microprocesadores

    III.10. BCD_BIN

    De modo opuesto a la subrutina BIN_BCD,BCD_BINconvierte un nmero en BCD a hexade-cimal. Vase el diagrama de flujo de esta subrutina en la figura 16.Todos los parmetros de entrada y salida se pasan por medio de variables en memoria y se listan

    a continuacin.

    Entrada:

    BCD_PRE

    Salida:

    BIN_RES

    Figura 16: BCD_BIN | Diagrama de flujo.

    23

  • 7/23/2019 Diseo e implementacin de un taxmetro

    24/30

    Proyecto final Julio 2015 Microprocesadores

    Esta subrutina utiliza un algoritmo muy simple que se basa en multiplicar por diez el cuartetosuperior y sumar el cuarteto inferior. Para esto el programa toma el nmero en BCDy lo rota ala derecha cuatro veces, as solo quedar el cuarteto superior. Luego se guarda en un temporalpara ser sumado diez veces en el acomulador B y finalmente con la ayuda de una mscara ($0F)

    se toma el cuarteto inferior y se le suma al nmero calculado anteriormente. Este nmero quedaalmacenado en la variable BIN_RES.

    III.11. MINUTO

    Esta subrutina sirve para calcular los minutos de espera cuando el taxmetro entra al modoWAIT. Vase en la figura17el diagrama de flujo de esta subrutina.Todos los parmetros de entrada y salida se pasan por medio de variables en memoria y se listana continuacin.

    Entrada:

    ME_FLAG SEG ME

    Salida:

    ME_FLAG ME

    Para contar minutos esta subrutina se vara en la variable de la ISR_RTI SEG, se asume quecuandoSEG llega a 59 ha pasado un minuto. Pero como es muy posible que esta subrutina seallamada ms de una vez durante un segundo se coloca una variable llamada ME_FLAGla cualpermite que incrementen los minutos de espera ME solo cuando est en uno. Adems como eltaxmetro slo debe ser capaz de contar hasta 200 minutos cuando la variable ME llega a estenmero se reinicia y empieza a contar desde cero.

    III.12. DIST_VEL

    Esta subrutina sirve para calcular los kilmetros recorridos y la velocidad actual basndose enel factor de conversin (FC) y los pulsos acomulados (PULSOS). Vase en la figura18el diagramade flujo de esta subrutina.Todos los parmetros de entrada y salida se pasan por medio de variables en memoria y se listana continuacin.

    Entrada:

    FC PULSOS TC0_CARGA

    Salida:

    KMR KM_H

    A pesar de que el diagrama de flujo se vea un poco sencillo es importante notar que toda lasubrutina son solamente dos asignaciones, ambas se detallan bien en la parte de clculos.

    24

  • 7/23/2019 Diseo e implementacin de un taxmetro

    25/30

    Proyecto final Julio 2015 Microprocesadores

    Figura 17: MINUTO | Diagrama de flujo.

    25

  • 7/23/2019 Diseo e implementacin de un taxmetro

    26/30

    Proyecto final Julio 2015 Microprocesadores

    Figura 18: DIST_VEL | Diagrama de flujo.

    III.13. PAGAR

    La subrutinaPAGARse utiliza para calcular el monto que debe cancelar el usuario al llegar asu destino, est directamente relacionado a los kilmetros recorridos y a los minutos de espera.En la figura19se puede detallar su diagrama de flujo. Todos los parmetros de entrada y salida

    se pasan por medio de variables en memoria y se listan a continuacin.Entrada:

    PM ME KMR PKM

    Salida:

    A_PAGAR

    Lo primero que hace la subrutina es calcular el monto a pagar por los minutos de espera, estolo almacena en la variable TEMP_A. Luego depende del valor de KMR, si este es menor a dosse debe cobrar solamente el primer kilmetro, si es mayor o igual a dos se debe cobrar el primer

    kilmetro (est siempre vale 10) y los kilmetros recorridos en base al precio por kilmetro ( PKM).Finalmente se suma al monto correspondiente a los kilmetros recorridos el monto de minutos deespera almacenado en la variableTEMP_Ay se almacena en la variable A_PAGAR.

    26

  • 7/23/2019 Diseo e implementacin de un taxmetro

    27/30

    Proyecto final Julio 2015 Microprocesadores

    Figura 19: PAGAR | Diagrama de flujo.

    27

  • 7/23/2019 Diseo e implementacin de un taxmetro

    28/30

    Proyecto final Julio 2015 Microprocesadores

    III.14. SWITCH

    Esta subrutina sirve para cambiar el valor a ser desplegado en las pantallas, cada 15 segundoscambia entre el monto a pagar y el dato de inters. El la figura20se puede observar el diagrama deflujo de esta subrutina. Todos los parmetros de entrada y salida se pasan por medio de variables

    en memoria y se listan a continuacin.

    Entrada:

    SEG ESTADO ME KM_H

    Salida:

    BIN LEDS

    Figura 20: SWITCH | Diagrama de flujo.

    Esta subrutina se basa en el valor que tenga la variable SEG, si esta es menor que 15 o mayora 30 pero menor a 45 el valor a ser desplegado en las pantallas ser A_PAGARpero siSEG esmayor a 45 o mayor a 15 pero menor a 30 de deben a desplegar el dato de inters, este ltimo se

    elige en base al estado en el que se encuentre el taxmetro, si est en RUN se muestraKM_Hperosi este enWAITse muestraME.

    28

  • 7/23/2019 Diseo e implementacin de un taxmetro

    29/30

    Proyecto final Julio 2015 Microprocesadores

    IV. Clculos

    Para el tiempo de interrupcin de la subrutina de atencin a interrupciones RTI se necesita 1

    ms, por lo cual se toman los parmetros N= 74 y M = 1.

    Trti = [(N+ 1) 2M+9]

    1

    8 106 =1,024ms (2)

    Para el contador de segundos de utilizar el tiempo de la interrupcin RTI, por lo que se tieneque dado numero de interrupciones RTI se cumplira un segundo.

    Tseg =Trti A= 1,024ms 977= 1, 000448s (3)

    Para la interrupcin TC4 se toma un numero para mantener la frecuencia de multiplexacin en100Hz / digito-led.

    Ttc4 = B 1oscClock=19 1

    24 106 128= 0,10133ms (4)

    Este tiempo se configura de esta forma para que al usar 20 tics en el contador se cumpla lafrecuencia deseada.

    fmux = 1

    Ttc4 20=493,42Hz = 98,68Hz/digito led (5)

    Finalmente para obtener la velocidad del vehculo se utilizan las siguiente ecuaciones.

    s= r= KMR

    PULSOS=

    1

    FC =2r r=

    1

    2FC (6)

    v= r= r

    t =

    1

    2FC

    2

    TC0_CARGA=

    1

    FC TC0_CARGA[

    m

    s] (7)

    = 1350000

    FC TC0_CARGA[

    km

    h ] (8)

    29

  • 7/23/2019 Diseo e implementacin de un taxmetro

    30/30

    Proyecto final Julio 2015 Microprocesadores

    II. Conclusiones yComentarios

    Una de las ventajas del proyecto y que valdra la pena establecer como una prioridad parafuturos proyectos es la modularidad con la que se dise desde un principio la aplicacin, esto nosolo ayud a ir agregando ms funcionalidades sino tambin a solucionar los problemas que ibanapareciendo.

    Tambin sera importante destacar que el amplio uso del microcontrolador que se utiliz ayuda la bsqueda de informacin necesaria para implementar el diseo adems del gran potencial deesta plataforma pues es una de las ms completas en su nicho.

    En general los diagramas de flujo explican muy bien una idea de lo que quiere que haga unprograma, pero cuando a estos se les agrega rigurosidad en cuanto a su notacin y formalismo sevuelven una poderosa herramienta sobre la cual se puede trabajar en cualquier sistema. Desdeprogramacin de alto nivel hasta bajo nivel.

    III. Recomendaciones

    Como primera recomendacin estara la importancia de tener una idea clara o un plan detrabajo concreto de cmo se llevar a cabo la aplicacin. Esto ayudar con el paso del tiempo yconforme avance el proyecto a evaluar resultados y tomar otras decisiones que mantengan losobjetivos del mismo.

    Aunque no es vital es importante que en todo momento haya congruencia entre los diagramasde flujo de los programas y el cdigo de los mismos, as cuando haya que corregir errores serms sencillo ubicar primero la falla en el diagrama y luego buscarlo en el cdigo.

    Tan importante como el plan de trabajo para el desarrollo del proyecto es tener un plan depruebas que ayude a validar cada mdulo por aparte y aunque no se pueden predecir siempre les

    falla a la hora de unir todos los mdulos el verificar cada uno por aparte ayudar a evitar erroresmas grandes.

    30