PROGRAMACION DE MICROCONTROLADORES PIC UTILIZACION DE HERRAMIENTAS DE DESARROLLO
En esta etapa del curso se plantean los siguientes objetivos: Brindar los conocimientos relativos al uso de las herramientas de desarrollo mas utilizadas. Utilizar dichas herramientas para desarrollar programas que permitan afianzar los conceptos teóricos. Evaluar el comportamiento de los programas realizados en un circuito de evaluación de desarrollo. Objetivos
Al desarrollar una aplicación basada en microcontrolador, es importante seguir una secuencia ordenada de pasos. Esta secuencia se puede resumir en los siguientes puntos: Crear el diseño: en función de las características y performance deseadas, seleccionar el microcontrolador que mejor se ajuste a la aplicación, y luego diseñar la circuitería asociada. Escribir el firmware, que es el software que controlará al hardware. Compilar el software, a fin de convertirlo en un código entendible por el microcontrolador. Testear el código. Es común que un programa no funcione tal cual lo esperado la primera vez, por lo que es necesario detectar y corregir los posibles errores. Grabar el código en el microcontrolador y verificar que se ejecute correctamente en la aplicación final. Pasos en el desarrollo de una aplicación
Para llevar a cabo los pasos anteriores se utiliza lo que se denomina Herramienta de Desarrollo. Se entiende por una Herramienta de Desarrollo a un conjunto de programas que se ejecutan en una PC y que asisten al programador en las tareas de escribir, depurar y programar código para un microcontrolador particular. En este curso utilizaremos la herramienta de desarrollo MPLAB IDE,  la cual es una de las mas completas que existen. Esta herramienta es desarrollada por Microchip como soporte a su línea de microcontroladores. Herramienta de Desarrollo
MPLAB permite al diseñador realizar, entre otras, las tareas de: Creación y edición del código fuente mediante un editor incorporado. Ensamblar, compilar y linkear código fuente. Depurar y controlar el funcionamiento del programa mediante un simulador incorporado. Realizar mediciones de tiempo con el simulador. Observar el valor de las variables del programa. Grabar el programa en el microcontrolador. Herramienta de Desarrollo
Utilización de MPLAB IDE Con el fin de familiarizarnos con el uso de MPLAB, comenzaremos por desarrollar una aplicación sencilla. Comencemos ejecutando MPLAB de la siguiente manera: botón  Inicio>Programas>Microchip>MPLAB   IDE>MPLAB IDE . Hecho esto deberá verse la siguiente ventana:
Antes que nada escribiremos una plantilla, que es un muy reducido archivo de código que se utilizará frecuentemente. Una plantilla se crea por única vez, y se utiliza como punto de partida al desarrollar posteriores proyectos.  Para crear la plantilla haremos lo siguiente: en MPLAB seleccionar  File>New . Con esto se abrirá una ventana de edición en blanco. En la misma escribir el siguiente código (dejando un espacio de tabulación a la izquierda): list p=16F84A ;directiva que define el procesador #include <p16F84A.inc> ;definición de variables específicas del procesador __CONFIG  _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ORG 0x000 ;vector de reset del procesador END ;final del programa A continuación guardamos la plantilla. Seleccionar  File>Save  y guardar el archivo como  D:\ProgPIC\Plantillas\16F84A.asm Utilización de MPLAB IDE
La plantilla debería haber quedado de la siguiente forma: Utilización de MPLAB IDE
Veamos el código escrito. La primera línea es: list p=16F84A ;directiva que define el procesador Esta línea le indica al compilador que el código escrito se aplicará al dispositivo 16F84A de la línea PIC. De esta forma el compilador también sabrá cual es la capacidad de memoria del PIC utilizado, cuales son sus periféricos, etc. En el código también se observa un punto y coma seguido de un texto. Este texto se denomina “comentario”, y sólo sirve a fines de que el programador documente su programa. Todo texto que se encuentre a la derecha de un punto y coma se define como comentario y será ignorado por el compilador. La segunda línea es: # include <p16F84A.inc> ;definición de variables específicas ....... Esta línea le indica al compilador que incorpore las definiciones detalladas en el archivo  p16F84A.inc . En este archivo se definen configuraciones y nombres de los registros del PIC16F84, así como los nombres de los bits más usuales del micro. Estos nombres corresponden a los definidos en la hoja de datos del PIC (por ejemplo TMR0, PORTA, STATUS, etc). Utilización de MPLAB IDE
En la línea siguiente vemos la siguiente expresión: __CONFIG  _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC En esta línea se define la “palabra de configuración” del PIC. La palabra de configuración indica si el código a grabar en el PIC se protegerá contra lectura, si se utilizará el temporizador watch dog, si se habilita el delay de encendido, y que tipo de oscilador se utilizará. Por último vemos dos líneas de código: ORG 0x00 ;vector de reset ....... END ;final del programa Entre estas dos líneas se encontrará el código escrito por el programador. La línea  ORG 0x00  le indica al compilador que el código por debajo de ella debe alojarse a partir de la posición de memoria 0 del PIC, que es la primer posición de memoria que el PIC ejecutará. La línea  END  indica que se ha alcanzado el final del programa, por lo que no debe haber código por debajo de ella. Utilización de MPLAB IDE
Ya creada la plantilla, continuaremos con la creación de un proyecto. Primero cerremos la ventana de la plantilla, con lo que el escritorio del IDE quedará en blanco. Utilización de MPLAB IDE
La manera más sencilla de crear un proyecto es mediante la utilización de un asistente que posee MPLAB. Para iniciar el asistente, seleccionamos  Project>Project Wizard , con lo que se mostrará la pantalla de inicio del mismo: Presionamos el botón Siguiente para continuar con el asistente. Utilización de MPLAB IDE
En la lista desplegable que aparece, seleccionamos  PIC16F84A . Este será el microcontrolador que utilizaremos. Presionamos el botón Siguiente para continuar con el asistente. Utilización de MPLAB IDE
La siguiente pantalla que aparece muestra las herramientas que se utilizarán para compilar y simular el programa En esta lista deben quedar seleccionadas las herramientas  MPASM, MPLINK y MPLIB . Presionamos el botón Siguiente para continuar con el asistente. Utilización de MPLAB IDE
La siguiente pantalla nos pide el nombre y la ubicación del proyecto que queremos crear. Le daremos el nombre  Prueba  y lo guardaremos en la carpeta  D:\ProgPIC\Prueba . Presionamos el botón  Siguiente  para continuar con el asistente. Utilización de MPLAB IDE
A continuación debemos incorporar al proyecto el archivo que contendrá el programa. Para esto cargaremos la plantilla ya creada. Entonces buscamos y seleccionamos el archivo  16F84A.asm  y lo agregamos al proyecto. Luego marcamos la casilla de verificación a la izquierda del archivo, y cambiamos el nombre de  16F84A.asm  a  Prueba.asm . Presionamos el botón Siguiente para continuar con el asistente. Utilización de MPLAB IDE
Por último aparece una pantalla a modo de resumen donde se nos informa el microcontrolador seleccionado, las herramientas de desarrollo y la ubicación del archivo del proyecto. Presionamos el botón  Finalizar  para terminar el asistente. Utilización de MPLAB IDE
El escritorio del IDE quedará con la siguiente apariencia: Cerraremos la ventana  Output , ya que aún no la necesitaremos. Si observamos veremos una ventana  Project , en la que se muestran los archivos que componen el proyecto actual (en este caso solamente el archivo  Prueba.asm ). A fin de comenzar a introducir el código de nuestro programa, haremos doble click sobre el archivo  Prueba.asm . Utilización de MPLAB IDE
Se abrirá entonces una ventana conteniendo el código introducido en la plantilla. Para crear nuestro programa, iremos agregando líneas de código a las ya existentes en la plantilla. Para eso debemos tener definida la función que queremos que realice nuestro programa. Este primer programa será sencillo, sirviendo sólo a fines didácticos. El programa deberá leer el PuertoA del PIC y lo copiará al PuertoB, generará un pequeño retardo de tiempo, y luego repetirá el ciclo continuamente. Utilización de MPLAB IDE
El primer código a escribir debe configurar los dispositivos del PIC. Es decir, si al PuertoA lo leeremos, debemos escribir código para configurarlo como entrada. Al PuertoB lo escribiremos, por lo que lo configuraremos como salida. No utilizaremos interrupciones, así que las deshabilitaremos. Veamos en detalle el código correspondiente. Debajo de la línea  ORG 0x00  agreguemos las siguientes, siempre dejando al menos un espacio de tabulación desde el margen izquierdo: CLRF INTCON ;deshabilito interrupciones BSF STATUS,RP0 ;para acceder al banco1 de registros MOVLW 1F MOVWF TRISA ;PortA como entrada CLRF TRISB ;PortB como salida BCF STATUS,RP0 ;para acceder al banco0 de registros Las líneas anteriores hacen lo siguiente: ponen en 0 el registro INTCON para deshabilitar las interrupciones, ponen en 1 el registro TRISA para configurar el PuertoA como entrada, y ponen en 0 el registro TRISB para configurar el PuertoB como salida. Utilización de MPLAB IDE
Hasta aquí se escribió el código para configurar las entradas/salidas del PIC. Agregaremos ahora las correspondientes al programa en sí, las que son: REP MOVF PORTA,W ;leo PortA en W MOVWF PORTB ;copio W en PortB CLRF 0C ;borro la primer posicion de RAM DLY DECFSZ 0C,F ;decremento la primer posicion de RAM GOTO DLY ;genero retardo de aprox 767 ciclos GOTO REP ;repito el ciclo Vemos aquí que hay dos líneas etiquetadas ( REP  y  DLY ). Una etiqueta es una cadena de texto cualquiera que se utiliza para identificar una línea de código, y se utilizan en conjunción con las instrucciones GOTO y CALL. Analizando el código, vemos que las dos primeras instrucciones se encargan de copiar el PuertoA en el PuertoB, mientras que la tercera, cuarta y quinta línea generan un pequeño retardo de tiempo. La última línea indica que se vuelva a ejecutar la lectura del PuertoA, con lo que se repite el ciclo indefinidamente. Utilización de MPLAB IDE
El programa en su totalidad quedaría de la siguiente manera: Utilización de MPLAB IDE
El siguiente paso es compilar el programa. Primeramente seleccionamos el debugger a utilizar ( Debugger>Select Tool>MPLAB SIM ). Luego compilamos mediante  Project>Make  (o presionamos la tecla F10). Se nos mostrará una ventana la cual informará si la compilación resultó exitosa, o si el código fuente contiene errores. En este caso vemos que la operación fue exitosa. Utilización de MPLAB IDE
El paso siguiente es simular el programa a fin de determinar si el comportamiento del mismo es el esperado. En toda simulación es deseable observar cómo y en que momento se modifican los valores de los distintos registros y variables del microcontrolador. Para esto procederemos a abrir las ventana de registros de funciones especiales ( View>Special Function Registers ) y la ventana de memoria ( View>File Registers ). En la primer ventana se nos muestra el nombre de los registros internos del microcontrolador, junto con el valor que posee en ese momento. En la segunda ventana observamos el mapa de memoria RAM del microcontrolador. En este mapa de memoria aparecen tanto el área de RAM disponible para el programador (dirección inicial 000Ch), así como los registros de funciones especiales (rango 0000h a 000Bh). Por ejemplo, al registro  STATUS  lo podemos ver en la ventana  Special Function Registers , pero como este registro está mapeado en la dirección 0003h, también lo podemos ver en la ventana  File Registers  bajo esta misma dirección. Utilización de MPLAB IDE
Redimensionando y organizando un poco el espacio de trabajo, la pantalla quedaría de la siguiente forma: Utilización de MPLAB IDE
En este punto estamos en condiciones de comenzar la simulación del programa. Se dispone de varias opciones de simulación, aunque la más interesante es la de instrucción por instrucción. Esto se efectúa mediante el menú  Debugger>Step Into , o también presionando la tecla F7, lo cual es una opción más cómoda. Entonces iremos presionando repetidamente la tecla F7, observando cual instrucción se ejecuta, y cómo se reflejan los cambios en el valor de los registros y memoria afectados. Obsérvese que la instrucción a ejecutar es marcada con una flecha verde a su izquierda. Utilización de MPLAB IDE
Al llegar a la porción del programa que genera un retardo de tiempo, vemos que cada vez que presionemos la tecla F7 estaremos dentro de un bucle que irá decrementando el valor almacenado en la posición 000Ch. Cuando este valor llegue a cero, habrá finalizado el retardo de tiempo y el programa continuará su funcionamiento. El inconveniente es que para llegar a cero, deberíamos presionar mas de 500 veces la tecla F7, lo que puede resultar tedioso. Para evitar esto, disponemos de dos opciones. Una de ellas es alterar la posición 000Ch a un valor cercano a cero. Para esto nos situamos encima de la posición 000Ch en la ventana  File Registers , hacemos doble click sobre el valor actual y lo cambiamos a un valor cercano a cero, digamos 2.  Utilización de MPLAB IDE
De esta manera, al continuar con la simulación mediante la tecla F7, llegaremos mas rápido al final del bucle de retardo de tiempo. La segunda opción consiste en no modificar ningún valor, sino indicarle al simulador que ejecute las instrucciones a mayor velocidad hasta que se cumpla alguna condición que le indiquemos. Por ejemplo, vemos que la instrucción que sigue al retardo de tiempo es  GOTO REP . Podemos entonces indicarle al simulador que ejecute la simulación a alta velocidad, pero que se detenga al llegar a la instrucción anterior. Para esto posicionamos el cursor sobre la instrucción  GOTO REP , hacemos click sobre la misma con el botón derecho del mouse, y en el menú contextual que aparece seleccionamos la opción  Run to Cursor .  Utilización de MPLAB IDE
Continuando con la simulación, otra herramienta de utilidad de la que disponemos es aquella que nos permite modificar el valor de los puertos definidos como entrada. En nuestro caso hemos definido al PuertoA como entrada; supongamos que en el pin RA1 de dicho puerto colocaremos un switch cuyas posiciones abierto o cerrado se representan mediante un 0 o un 1 lógico. En ocasiones necesitaremos simular el estado de apertura o cierre de dicho switch para observar cómo responde el programa a dicho estímulo. Para esto MPLAB dispone de lo que se denomina un “controlador de estímulo”. Accedemos al mismo a través del menú  Debbuger>Stimulus Controller , y seleccionamos  New Scenario . Se nos presentará la siguiente ventana: Utilización de MPLAB IDE
En esta ventana definiremos dos acciones: una que nos permita conmutar el pin RA1 a 0 lógico, y otra que lo conmute a 1 lógico. Para esto hacemos click bajo la columna  Pin / SFR  y en la lista desplegable seleccionamos  RA1 . Repetimos la acción bajo la columna  Action  y de la lista seleccionamos  Set Low . Con esto hemos definido la acción que pondrá en 0 a RA1, y esta se ejecutará cada vez que hagamos click en la columna  Fire . Para definir la acción que ponga en 1 a RA1 repetimos el procedimiento anterior, pero esta vez seleccionando  Set High  en la columna  Action Utilización de MPLAB IDE
Una vez que hayamos simulado y depurado el programa, el paso restante es grabar el mismo en la memoria del microcontrolador. En nuestro utilizaremos el grabador PicStart Plus. Para utilizar el grabador, en primer paso debemos seleccionarlo. Esto lo hacemos a través del menú  Programmer>Select Programmer>PICSTART PLUS Utilización de MPLAB IDE
Ya seleccionado el grabador, el paso siguiente es habilitarlo. Menú  Programmer>Enable Programmer Utilización de MPLAB IDE
En este punto ya nos encontramos en condiciones de grabar la memoria del PIC. Previo a esto, es conveniente abrir la ventana  Program Memory , en la cual veremos cada posición de memoria del micro y la instrucción a grabarse en la misma. Utilización de MPLAB IDE
Paso siguiente colocamos el PIC en el zócalo del grabador. Una vez colocado, debemos verificar que la memoria del micro se encuentre borrada a fin de poder grabar nuestro programa. Esto lo hacemos mediante el menú  Programmer>Blank Check All . Utilización de MPLAB IDE
Una vez verificado que el micro se encuentre en blanco, procedemos a grabar el correspondiente programa en su memoria. Para esto utilizamos el menú  Programmer>Program . Utilización de MPLAB IDE
Una vez finalizado el proceso de grabación, debemos deshabilitar el grabador. Para esto accedemos al menú  Programmer>Disable . Utilización de MPLAB IDE
Por último veremos dos directivas de programación que son útiles al programador y que facilitan la lectura de código. Estas son las directivas  EQU y #DEFINE . La directiva  EQU  comúnmente se utiliza para asignar el nombre de una variable a una posición en RAM. Por ejemplo, en nuestro programa utilizamos la posición de RAM 000Ch para almacenar el conteo del retardo de tiempo. Sería más claro referirnos a ella con un nombre más significativo, digamos por ejemplo  CONTEO , en lugar de hacer referencia a la dirección de memoria en sí. Esto lo podemos hacer mediante la directiva  EQU  de la siguiente manera: en el encabezado del programa agregamos la siguiente línea: Utilización de MPLAB IDE
Con esta definición, cada vez que el compilador se encuentre con la expresión  CONTEO , la evaluará por su valor 000Ch. Entonces nuestro programa, que antes tenía la forma: Ahora quedaría: Utilización de MPLAB IDE
La segunda directiva de interés es # DEFINE . Esta se utiliza para definir etiquetas que sustituyen cadenas de texto, es decir que cuando el compilador se encuentre con la etiqueta, la evaluará como la cadena de texto que se haya definido. Esto quedará mas claro con un ejemplo. Digamos que en nuestro programa necesitamos poner en 1 el bit0 de la posición de memoria 000Ch. Esto lo hacemos mediante la instrucción: BSF 0C,0 O, si ya hemos utilizado la directiva EQU, también podría ser:   BSF CONTEO,0 En ocasiones resulta cómodo y mas ordenado para el programador utilizar  una expresión mas reducida. Supongamos que al programador le resulte más claro referirse al bit0 de 000Ch con el nombre BIT0. Esto puede hacerse mediante el uso de  #DEFINE . En el encabezado del programa agregamos la siguiente línea: #define BIT0  0C,0 ;defino bit0 de posición 0C Utilización de MPLAB IDE
O, si ya hemos utilizado la directiva  EQU , también podría ser: #define BIT0  CONTEO,0 ;defino bit0 de CONTEO Entonces el programa se vería de la siguiente manera: Utilización de MPLAB IDE
En esta sección se proponen algunos ejercicios a fin de afianzar los conceptos desarrollados hasta aquí. La metodología propuesta consiste primeramente en plantear y analizar el problema, luego desarrollar y depurar el código utilizando el MPLAB, y por último grabar el firmware en un microcontrolador y evaluar el comportamiento real del programa mediante un circuito de evaluación. El circuito de evaluación posee la siguiente configuración: Las líneas del Puerto A del microcontrolador (RA0 – RA4) se encuentran conectadas a cinco llaves inversoras que sirven como señales de entrada al PIC. Esto implica que el Puerto A debe configurarse como entrada. La línea RB0 del Puerto B se encuentra conectada a un pulsador. Por lo tanto RB0 debe configurarse como entrada. Resolución de Ejercicios El resto del Puerto B (RB1 – RB7) esta conectado a un display de 7 segmentos según la siguiente disposición. Esto implica que RB1 – RB7 deben configurarse como salidas.
Ejercicio 1: Se propone desarrollar un decodificador de BCD a hexadecimal 7 segmentos. Como entradas BCD se utilizan las llaves en las líneas RA0 – RA3. Como salida se utiliza el display de 7 segmentos. El funcionamiento debe ser el siguiente: normalmente, en el display debe visualizarse el dígito hexadecimal que corresponda al código BCD introducido en RA0 – RA4. Debe tenerse en cuenta el estado de RA4, ya que si RA4 se encuentra en 0 entonces el código BCD es válido y debe mostrarse su correspondiente hexadecimal en el display. Pero si RA4 se encuentra en 1 entonces el código BCD ingresado debe considerarse inválido y en el display debe mostrarse un código de error reflejando esta situación. Por último, la línea RB0 debe configurarse como interrupción externa (INT0) a fin de que cada vez que se presione el pulsador en RB0 se genere una interrupción. La interrupción generada por este pulsador debe realizar la siguiente acción: al presionar el pulsador por primera vez se debe congelar el valor mostrado en el display, ignorando cualquier cambio de estado en RA0 – RA4. Con la siguiente pulsación de RB0 se debe descongelar el display, volviendo el programa a su funcionamiento normal. Con cada pulsación en RB0 se debe repetir el ciclo. Resolución de Ejercicios
La tabla de verdad del decodificador es la siguiente: Resolución de Ejercicios
El mapa de la memoria de programa quedaría: Resolución de Ejercicios
Una posible distribución de la memoria RAM podría ser la siguiente: Resolución de Ejercicios
Ejercicio 2: Se dispone de cuatro motores conectados a una misma barra de energía eléctrica. Por razones de limitación de potencia conectada, se debe realizar un enclavamiento que actúe sobre los contactores de los motores o active una alarma en los casos en que la potencia conectada sea igual o superior a los 18 KVA. El estado de conexión o desconexión de los motores se simularán con las entradas RA3 – RA0 (motor desconectado=0, motor conectado=1). La potencia de cada motor es la siguiente: Motor 1 (RA0): 4 KVA. Motor 2 (RA1): 6 KVA. Motor 3 (RA2): 8 KVA. Motor 4 (RA3): 12 KVA. Mientras la potencia conectada a barra sea menor a 18 KVA, el display de la placa de evaluación se mantendrá apagado. Cuando la potencia conectada sea mayor o igual a 18 KVA, en el display se debe mostrar la letra  A  señalizando la condición de alarma. Este ejercicio debe resolverse en dos maneras. La primera debe ser mediante tabla de verdad en memoria RAM, tal como lo realizado en el ejercicio anterior. La segunda solución debe ser mediante evaluación de la función lógica que modela  al sistema (operaciones AND y OR). Resolución de Ejercicios
La tabla de verdad es la siguiente: Resolución de Ejercicios Y la función lógica correspondiente es: A=RA3.RA2+RA3.RA1+RA2.RA1.RA0 1 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 0 0 1 1 1 1 1 0 1 1 0 1 0 1 0 1 0 0 1 0 0 0 0 1 1 1 1 1 0 0 0 1 1 0 0 1 0 1 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 A RA0 RA1 RA2 RA3
Ejercicio 3: En un proceso industrial se debe controlar el nivel de líquido de un depósito, utilizando tres sondas detectoras de nivel (A, B y C) y dos bombas (B1 y B2), con indicadores de nivel y alarma por falla en los detectores : Resolución de Ejercicios
La sonda  A  detecta el mínimo nivel de líquido. Por debajo de este nivel deben apagarse todos los indicadores de nivel señalizando la condición de vacío. Por encima de este nivel debe activarse el indicador de  BAJO . La sonda  B  detecta el nivel óptimo de líquido, y cuando se alcance se debe indicar  LLENO . La sonda  C  detecta el nivel mas alto, por encima de este nivel el depósito se desborda. Al accionarse esta sonda debe indicarse  REBALSE  en el cuadro de indicadores. Las bombas  B1  y  B2  se encargan de reponer el líquido en el depósito, y se activarán o desactivarán según las siguientes condiciones: Nivel de líquido en ascenso: Si el nivel no supera la sonda  A , las dos bombas estarán activadas y los indicadores de nivel permanecerán apagados. Cuando se supere el nivel  A  se accionará la indicación  BAJO  y las dos bombas seguirán funcionando. Cuando se alcance el nivel  B  se indicará  LLENO  y se desactivará la bomba  B2 , siguiendo en funcionamiento  B1 . El indicador  BAJO  permanecerá encendido. Cuando se alcance el nivel  C  se desactivará la bomba  B1 , quedando ambas bombas fuera de servicio. Se accionará el indicador  REBALSE  y se conmutará la secuencia de control pasando a la correspondiente de descenso de líquido. Los indicadores  LLENO  y  BAJO  permanecerán encendidos. Resolución de Ejercicios
Nivel de líquido en descenso: Cuando el nivel del líquido comience a descender desde el nivel  REBALSE , se modificará la lógica de control a fin de evitar continuos arranques y paradas de la bomba  B1  a consecuencia de la variación del nivel de líquido cuando se encuentre próximo a  REBALSE . Las condiciones serán: Cuando el nivel de líquido en bajada se encuentre entre los niveles  C  y  B , ninguna de las dos bombas estará activada. Los indicadores  LLENO  y  BAJO  permanecerán encendidos. Cuando el descenso pase el nivel  B  se activará la bomba  B1  y sólo se señalizará  BAJO . Si el líquido desciende hasta el nivel  A , se activará la bomba  B2  quedando ambas bombas en funcionamiento. Se apagarán los indicadores de nivel, señalizando la condición de vacío, y se modificará la secuencia de control pasando a la correspondiente al ascenso de nivel de líquido. De llegar a producirse un fallo en las sondas de entrada por discordancia, ambas bombas se desactivarán y se señalizará la condición de  ALARMA . La condición de  ALARMA  permanecerá activa (independientemente de la corrección de las sondas de nivel) hasta que se presione el pulsador de reseteo de alarma. Una vez reseteada la alarma, el programa continuará con su funcionamiento normal. Resolución de Ejercicios
Entradas: RA0: sensor  A RA1: sensor  B RA2: sensor  C RB0: reset de alarma (implementar mediante interrupción) Salidas: RB5: bomba  B1 RB7: bomba  B2 RB6: indicador  BAJO RB4: indicador  LLENO RB2: indicador  REBALSE Señalización de Alarma: La alarma (discordancia de sensores de nivel) se señalizará de la siguiente manera: se encenderán los tres indicadores de nivel durante medio segundo, y durante otro medio segundo se apagarán. El ciclo debe repetirse, de forma de lograr un lograr un efecto de parpadeo de los indicadores. La temporización del parpadeo debe implementarse mediante interrupción del TIMER0. Resolución de Ejercicios
Tabla de verdad para líquido en ascenso Resolución de Ejercicios Tabla de verdad para líquido en descenso
Fin de la presentación

Uso Mplab

  • 1.
    PROGRAMACION DE MICROCONTROLADORESPIC UTILIZACION DE HERRAMIENTAS DE DESARROLLO
  • 2.
    En esta etapadel curso se plantean los siguientes objetivos: Brindar los conocimientos relativos al uso de las herramientas de desarrollo mas utilizadas. Utilizar dichas herramientas para desarrollar programas que permitan afianzar los conceptos teóricos. Evaluar el comportamiento de los programas realizados en un circuito de evaluación de desarrollo. Objetivos
  • 3.
    Al desarrollar unaaplicación basada en microcontrolador, es importante seguir una secuencia ordenada de pasos. Esta secuencia se puede resumir en los siguientes puntos: Crear el diseño: en función de las características y performance deseadas, seleccionar el microcontrolador que mejor se ajuste a la aplicación, y luego diseñar la circuitería asociada. Escribir el firmware, que es el software que controlará al hardware. Compilar el software, a fin de convertirlo en un código entendible por el microcontrolador. Testear el código. Es común que un programa no funcione tal cual lo esperado la primera vez, por lo que es necesario detectar y corregir los posibles errores. Grabar el código en el microcontrolador y verificar que se ejecute correctamente en la aplicación final. Pasos en el desarrollo de una aplicación
  • 4.
    Para llevar acabo los pasos anteriores se utiliza lo que se denomina Herramienta de Desarrollo. Se entiende por una Herramienta de Desarrollo a un conjunto de programas que se ejecutan en una PC y que asisten al programador en las tareas de escribir, depurar y programar código para un microcontrolador particular. En este curso utilizaremos la herramienta de desarrollo MPLAB IDE, la cual es una de las mas completas que existen. Esta herramienta es desarrollada por Microchip como soporte a su línea de microcontroladores. Herramienta de Desarrollo
  • 5.
    MPLAB permite aldiseñador realizar, entre otras, las tareas de: Creación y edición del código fuente mediante un editor incorporado. Ensamblar, compilar y linkear código fuente. Depurar y controlar el funcionamiento del programa mediante un simulador incorporado. Realizar mediciones de tiempo con el simulador. Observar el valor de las variables del programa. Grabar el programa en el microcontrolador. Herramienta de Desarrollo
  • 6.
    Utilización de MPLABIDE Con el fin de familiarizarnos con el uso de MPLAB, comenzaremos por desarrollar una aplicación sencilla. Comencemos ejecutando MPLAB de la siguiente manera: botón Inicio>Programas>Microchip>MPLAB IDE>MPLAB IDE . Hecho esto deberá verse la siguiente ventana:
  • 7.
    Antes que nadaescribiremos una plantilla, que es un muy reducido archivo de código que se utilizará frecuentemente. Una plantilla se crea por única vez, y se utiliza como punto de partida al desarrollar posteriores proyectos. Para crear la plantilla haremos lo siguiente: en MPLAB seleccionar File>New . Con esto se abrirá una ventana de edición en blanco. En la misma escribir el siguiente código (dejando un espacio de tabulación a la izquierda): list p=16F84A ;directiva que define el procesador #include <p16F84A.inc> ;definición de variables específicas del procesador __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ORG 0x000 ;vector de reset del procesador END ;final del programa A continuación guardamos la plantilla. Seleccionar File>Save y guardar el archivo como D:\ProgPIC\Plantillas\16F84A.asm Utilización de MPLAB IDE
  • 8.
    La plantilla deberíahaber quedado de la siguiente forma: Utilización de MPLAB IDE
  • 9.
    Veamos el códigoescrito. La primera línea es: list p=16F84A ;directiva que define el procesador Esta línea le indica al compilador que el código escrito se aplicará al dispositivo 16F84A de la línea PIC. De esta forma el compilador también sabrá cual es la capacidad de memoria del PIC utilizado, cuales son sus periféricos, etc. En el código también se observa un punto y coma seguido de un texto. Este texto se denomina “comentario”, y sólo sirve a fines de que el programador documente su programa. Todo texto que se encuentre a la derecha de un punto y coma se define como comentario y será ignorado por el compilador. La segunda línea es: # include <p16F84A.inc> ;definición de variables específicas ....... Esta línea le indica al compilador que incorpore las definiciones detalladas en el archivo p16F84A.inc . En este archivo se definen configuraciones y nombres de los registros del PIC16F84, así como los nombres de los bits más usuales del micro. Estos nombres corresponden a los definidos en la hoja de datos del PIC (por ejemplo TMR0, PORTA, STATUS, etc). Utilización de MPLAB IDE
  • 10.
    En la líneasiguiente vemos la siguiente expresión: __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC En esta línea se define la “palabra de configuración” del PIC. La palabra de configuración indica si el código a grabar en el PIC se protegerá contra lectura, si se utilizará el temporizador watch dog, si se habilita el delay de encendido, y que tipo de oscilador se utilizará. Por último vemos dos líneas de código: ORG 0x00 ;vector de reset ....... END ;final del programa Entre estas dos líneas se encontrará el código escrito por el programador. La línea ORG 0x00 le indica al compilador que el código por debajo de ella debe alojarse a partir de la posición de memoria 0 del PIC, que es la primer posición de memoria que el PIC ejecutará. La línea END indica que se ha alcanzado el final del programa, por lo que no debe haber código por debajo de ella. Utilización de MPLAB IDE
  • 11.
    Ya creada laplantilla, continuaremos con la creación de un proyecto. Primero cerremos la ventana de la plantilla, con lo que el escritorio del IDE quedará en blanco. Utilización de MPLAB IDE
  • 12.
    La manera mássencilla de crear un proyecto es mediante la utilización de un asistente que posee MPLAB. Para iniciar el asistente, seleccionamos Project>Project Wizard , con lo que se mostrará la pantalla de inicio del mismo: Presionamos el botón Siguiente para continuar con el asistente. Utilización de MPLAB IDE
  • 13.
    En la listadesplegable que aparece, seleccionamos PIC16F84A . Este será el microcontrolador que utilizaremos. Presionamos el botón Siguiente para continuar con el asistente. Utilización de MPLAB IDE
  • 14.
    La siguiente pantallaque aparece muestra las herramientas que se utilizarán para compilar y simular el programa En esta lista deben quedar seleccionadas las herramientas MPASM, MPLINK y MPLIB . Presionamos el botón Siguiente para continuar con el asistente. Utilización de MPLAB IDE
  • 15.
    La siguiente pantallanos pide el nombre y la ubicación del proyecto que queremos crear. Le daremos el nombre Prueba y lo guardaremos en la carpeta D:\ProgPIC\Prueba . Presionamos el botón Siguiente para continuar con el asistente. Utilización de MPLAB IDE
  • 16.
    A continuación debemosincorporar al proyecto el archivo que contendrá el programa. Para esto cargaremos la plantilla ya creada. Entonces buscamos y seleccionamos el archivo 16F84A.asm y lo agregamos al proyecto. Luego marcamos la casilla de verificación a la izquierda del archivo, y cambiamos el nombre de 16F84A.asm a Prueba.asm . Presionamos el botón Siguiente para continuar con el asistente. Utilización de MPLAB IDE
  • 17.
    Por último apareceuna pantalla a modo de resumen donde se nos informa el microcontrolador seleccionado, las herramientas de desarrollo y la ubicación del archivo del proyecto. Presionamos el botón Finalizar para terminar el asistente. Utilización de MPLAB IDE
  • 18.
    El escritorio delIDE quedará con la siguiente apariencia: Cerraremos la ventana Output , ya que aún no la necesitaremos. Si observamos veremos una ventana Project , en la que se muestran los archivos que componen el proyecto actual (en este caso solamente el archivo Prueba.asm ). A fin de comenzar a introducir el código de nuestro programa, haremos doble click sobre el archivo Prueba.asm . Utilización de MPLAB IDE
  • 19.
    Se abrirá entoncesuna ventana conteniendo el código introducido en la plantilla. Para crear nuestro programa, iremos agregando líneas de código a las ya existentes en la plantilla. Para eso debemos tener definida la función que queremos que realice nuestro programa. Este primer programa será sencillo, sirviendo sólo a fines didácticos. El programa deberá leer el PuertoA del PIC y lo copiará al PuertoB, generará un pequeño retardo de tiempo, y luego repetirá el ciclo continuamente. Utilización de MPLAB IDE
  • 20.
    El primer códigoa escribir debe configurar los dispositivos del PIC. Es decir, si al PuertoA lo leeremos, debemos escribir código para configurarlo como entrada. Al PuertoB lo escribiremos, por lo que lo configuraremos como salida. No utilizaremos interrupciones, así que las deshabilitaremos. Veamos en detalle el código correspondiente. Debajo de la línea ORG 0x00 agreguemos las siguientes, siempre dejando al menos un espacio de tabulación desde el margen izquierdo: CLRF INTCON ;deshabilito interrupciones BSF STATUS,RP0 ;para acceder al banco1 de registros MOVLW 1F MOVWF TRISA ;PortA como entrada CLRF TRISB ;PortB como salida BCF STATUS,RP0 ;para acceder al banco0 de registros Las líneas anteriores hacen lo siguiente: ponen en 0 el registro INTCON para deshabilitar las interrupciones, ponen en 1 el registro TRISA para configurar el PuertoA como entrada, y ponen en 0 el registro TRISB para configurar el PuertoB como salida. Utilización de MPLAB IDE
  • 21.
    Hasta aquí seescribió el código para configurar las entradas/salidas del PIC. Agregaremos ahora las correspondientes al programa en sí, las que son: REP MOVF PORTA,W ;leo PortA en W MOVWF PORTB ;copio W en PortB CLRF 0C ;borro la primer posicion de RAM DLY DECFSZ 0C,F ;decremento la primer posicion de RAM GOTO DLY ;genero retardo de aprox 767 ciclos GOTO REP ;repito el ciclo Vemos aquí que hay dos líneas etiquetadas ( REP y DLY ). Una etiqueta es una cadena de texto cualquiera que se utiliza para identificar una línea de código, y se utilizan en conjunción con las instrucciones GOTO y CALL. Analizando el código, vemos que las dos primeras instrucciones se encargan de copiar el PuertoA en el PuertoB, mientras que la tercera, cuarta y quinta línea generan un pequeño retardo de tiempo. La última línea indica que se vuelva a ejecutar la lectura del PuertoA, con lo que se repite el ciclo indefinidamente. Utilización de MPLAB IDE
  • 22.
    El programa ensu totalidad quedaría de la siguiente manera: Utilización de MPLAB IDE
  • 23.
    El siguiente pasoes compilar el programa. Primeramente seleccionamos el debugger a utilizar ( Debugger>Select Tool>MPLAB SIM ). Luego compilamos mediante Project>Make (o presionamos la tecla F10). Se nos mostrará una ventana la cual informará si la compilación resultó exitosa, o si el código fuente contiene errores. En este caso vemos que la operación fue exitosa. Utilización de MPLAB IDE
  • 24.
    El paso siguientees simular el programa a fin de determinar si el comportamiento del mismo es el esperado. En toda simulación es deseable observar cómo y en que momento se modifican los valores de los distintos registros y variables del microcontrolador. Para esto procederemos a abrir las ventana de registros de funciones especiales ( View>Special Function Registers ) y la ventana de memoria ( View>File Registers ). En la primer ventana se nos muestra el nombre de los registros internos del microcontrolador, junto con el valor que posee en ese momento. En la segunda ventana observamos el mapa de memoria RAM del microcontrolador. En este mapa de memoria aparecen tanto el área de RAM disponible para el programador (dirección inicial 000Ch), así como los registros de funciones especiales (rango 0000h a 000Bh). Por ejemplo, al registro STATUS lo podemos ver en la ventana Special Function Registers , pero como este registro está mapeado en la dirección 0003h, también lo podemos ver en la ventana File Registers bajo esta misma dirección. Utilización de MPLAB IDE
  • 25.
    Redimensionando y organizandoun poco el espacio de trabajo, la pantalla quedaría de la siguiente forma: Utilización de MPLAB IDE
  • 26.
    En este puntoestamos en condiciones de comenzar la simulación del programa. Se dispone de varias opciones de simulación, aunque la más interesante es la de instrucción por instrucción. Esto se efectúa mediante el menú Debugger>Step Into , o también presionando la tecla F7, lo cual es una opción más cómoda. Entonces iremos presionando repetidamente la tecla F7, observando cual instrucción se ejecuta, y cómo se reflejan los cambios en el valor de los registros y memoria afectados. Obsérvese que la instrucción a ejecutar es marcada con una flecha verde a su izquierda. Utilización de MPLAB IDE
  • 27.
    Al llegar ala porción del programa que genera un retardo de tiempo, vemos que cada vez que presionemos la tecla F7 estaremos dentro de un bucle que irá decrementando el valor almacenado en la posición 000Ch. Cuando este valor llegue a cero, habrá finalizado el retardo de tiempo y el programa continuará su funcionamiento. El inconveniente es que para llegar a cero, deberíamos presionar mas de 500 veces la tecla F7, lo que puede resultar tedioso. Para evitar esto, disponemos de dos opciones. Una de ellas es alterar la posición 000Ch a un valor cercano a cero. Para esto nos situamos encima de la posición 000Ch en la ventana File Registers , hacemos doble click sobre el valor actual y lo cambiamos a un valor cercano a cero, digamos 2. Utilización de MPLAB IDE
  • 28.
    De esta manera,al continuar con la simulación mediante la tecla F7, llegaremos mas rápido al final del bucle de retardo de tiempo. La segunda opción consiste en no modificar ningún valor, sino indicarle al simulador que ejecute las instrucciones a mayor velocidad hasta que se cumpla alguna condición que le indiquemos. Por ejemplo, vemos que la instrucción que sigue al retardo de tiempo es GOTO REP . Podemos entonces indicarle al simulador que ejecute la simulación a alta velocidad, pero que se detenga al llegar a la instrucción anterior. Para esto posicionamos el cursor sobre la instrucción GOTO REP , hacemos click sobre la misma con el botón derecho del mouse, y en el menú contextual que aparece seleccionamos la opción Run to Cursor . Utilización de MPLAB IDE
  • 29.
    Continuando con lasimulación, otra herramienta de utilidad de la que disponemos es aquella que nos permite modificar el valor de los puertos definidos como entrada. En nuestro caso hemos definido al PuertoA como entrada; supongamos que en el pin RA1 de dicho puerto colocaremos un switch cuyas posiciones abierto o cerrado se representan mediante un 0 o un 1 lógico. En ocasiones necesitaremos simular el estado de apertura o cierre de dicho switch para observar cómo responde el programa a dicho estímulo. Para esto MPLAB dispone de lo que se denomina un “controlador de estímulo”. Accedemos al mismo a través del menú Debbuger>Stimulus Controller , y seleccionamos New Scenario . Se nos presentará la siguiente ventana: Utilización de MPLAB IDE
  • 30.
    En esta ventanadefiniremos dos acciones: una que nos permita conmutar el pin RA1 a 0 lógico, y otra que lo conmute a 1 lógico. Para esto hacemos click bajo la columna Pin / SFR y en la lista desplegable seleccionamos RA1 . Repetimos la acción bajo la columna Action y de la lista seleccionamos Set Low . Con esto hemos definido la acción que pondrá en 0 a RA1, y esta se ejecutará cada vez que hagamos click en la columna Fire . Para definir la acción que ponga en 1 a RA1 repetimos el procedimiento anterior, pero esta vez seleccionando Set High en la columna Action Utilización de MPLAB IDE
  • 31.
    Una vez quehayamos simulado y depurado el programa, el paso restante es grabar el mismo en la memoria del microcontrolador. En nuestro utilizaremos el grabador PicStart Plus. Para utilizar el grabador, en primer paso debemos seleccionarlo. Esto lo hacemos a través del menú Programmer>Select Programmer>PICSTART PLUS Utilización de MPLAB IDE
  • 32.
    Ya seleccionado elgrabador, el paso siguiente es habilitarlo. Menú Programmer>Enable Programmer Utilización de MPLAB IDE
  • 33.
    En este puntoya nos encontramos en condiciones de grabar la memoria del PIC. Previo a esto, es conveniente abrir la ventana Program Memory , en la cual veremos cada posición de memoria del micro y la instrucción a grabarse en la misma. Utilización de MPLAB IDE
  • 34.
    Paso siguiente colocamosel PIC en el zócalo del grabador. Una vez colocado, debemos verificar que la memoria del micro se encuentre borrada a fin de poder grabar nuestro programa. Esto lo hacemos mediante el menú Programmer>Blank Check All . Utilización de MPLAB IDE
  • 35.
    Una vez verificadoque el micro se encuentre en blanco, procedemos a grabar el correspondiente programa en su memoria. Para esto utilizamos el menú Programmer>Program . Utilización de MPLAB IDE
  • 36.
    Una vez finalizadoel proceso de grabación, debemos deshabilitar el grabador. Para esto accedemos al menú Programmer>Disable . Utilización de MPLAB IDE
  • 37.
    Por último veremosdos directivas de programación que son útiles al programador y que facilitan la lectura de código. Estas son las directivas EQU y #DEFINE . La directiva EQU comúnmente se utiliza para asignar el nombre de una variable a una posición en RAM. Por ejemplo, en nuestro programa utilizamos la posición de RAM 000Ch para almacenar el conteo del retardo de tiempo. Sería más claro referirnos a ella con un nombre más significativo, digamos por ejemplo CONTEO , en lugar de hacer referencia a la dirección de memoria en sí. Esto lo podemos hacer mediante la directiva EQU de la siguiente manera: en el encabezado del programa agregamos la siguiente línea: Utilización de MPLAB IDE
  • 38.
    Con esta definición,cada vez que el compilador se encuentre con la expresión CONTEO , la evaluará por su valor 000Ch. Entonces nuestro programa, que antes tenía la forma: Ahora quedaría: Utilización de MPLAB IDE
  • 39.
    La segunda directivade interés es # DEFINE . Esta se utiliza para definir etiquetas que sustituyen cadenas de texto, es decir que cuando el compilador se encuentre con la etiqueta, la evaluará como la cadena de texto que se haya definido. Esto quedará mas claro con un ejemplo. Digamos que en nuestro programa necesitamos poner en 1 el bit0 de la posición de memoria 000Ch. Esto lo hacemos mediante la instrucción: BSF 0C,0 O, si ya hemos utilizado la directiva EQU, también podría ser: BSF CONTEO,0 En ocasiones resulta cómodo y mas ordenado para el programador utilizar una expresión mas reducida. Supongamos que al programador le resulte más claro referirse al bit0 de 000Ch con el nombre BIT0. Esto puede hacerse mediante el uso de #DEFINE . En el encabezado del programa agregamos la siguiente línea: #define BIT0 0C,0 ;defino bit0 de posición 0C Utilización de MPLAB IDE
  • 40.
    O, si yahemos utilizado la directiva EQU , también podría ser: #define BIT0 CONTEO,0 ;defino bit0 de CONTEO Entonces el programa se vería de la siguiente manera: Utilización de MPLAB IDE
  • 41.
    En esta secciónse proponen algunos ejercicios a fin de afianzar los conceptos desarrollados hasta aquí. La metodología propuesta consiste primeramente en plantear y analizar el problema, luego desarrollar y depurar el código utilizando el MPLAB, y por último grabar el firmware en un microcontrolador y evaluar el comportamiento real del programa mediante un circuito de evaluación. El circuito de evaluación posee la siguiente configuración: Las líneas del Puerto A del microcontrolador (RA0 – RA4) se encuentran conectadas a cinco llaves inversoras que sirven como señales de entrada al PIC. Esto implica que el Puerto A debe configurarse como entrada. La línea RB0 del Puerto B se encuentra conectada a un pulsador. Por lo tanto RB0 debe configurarse como entrada. Resolución de Ejercicios El resto del Puerto B (RB1 – RB7) esta conectado a un display de 7 segmentos según la siguiente disposición. Esto implica que RB1 – RB7 deben configurarse como salidas.
  • 42.
    Ejercicio 1: Sepropone desarrollar un decodificador de BCD a hexadecimal 7 segmentos. Como entradas BCD se utilizan las llaves en las líneas RA0 – RA3. Como salida se utiliza el display de 7 segmentos. El funcionamiento debe ser el siguiente: normalmente, en el display debe visualizarse el dígito hexadecimal que corresponda al código BCD introducido en RA0 – RA4. Debe tenerse en cuenta el estado de RA4, ya que si RA4 se encuentra en 0 entonces el código BCD es válido y debe mostrarse su correspondiente hexadecimal en el display. Pero si RA4 se encuentra en 1 entonces el código BCD ingresado debe considerarse inválido y en el display debe mostrarse un código de error reflejando esta situación. Por último, la línea RB0 debe configurarse como interrupción externa (INT0) a fin de que cada vez que se presione el pulsador en RB0 se genere una interrupción. La interrupción generada por este pulsador debe realizar la siguiente acción: al presionar el pulsador por primera vez se debe congelar el valor mostrado en el display, ignorando cualquier cambio de estado en RA0 – RA4. Con la siguiente pulsación de RB0 se debe descongelar el display, volviendo el programa a su funcionamiento normal. Con cada pulsación en RB0 se debe repetir el ciclo. Resolución de Ejercicios
  • 43.
    La tabla deverdad del decodificador es la siguiente: Resolución de Ejercicios
  • 44.
    El mapa dela memoria de programa quedaría: Resolución de Ejercicios
  • 45.
    Una posible distribuciónde la memoria RAM podría ser la siguiente: Resolución de Ejercicios
  • 46.
    Ejercicio 2: Sedispone de cuatro motores conectados a una misma barra de energía eléctrica. Por razones de limitación de potencia conectada, se debe realizar un enclavamiento que actúe sobre los contactores de los motores o active una alarma en los casos en que la potencia conectada sea igual o superior a los 18 KVA. El estado de conexión o desconexión de los motores se simularán con las entradas RA3 – RA0 (motor desconectado=0, motor conectado=1). La potencia de cada motor es la siguiente: Motor 1 (RA0): 4 KVA. Motor 2 (RA1): 6 KVA. Motor 3 (RA2): 8 KVA. Motor 4 (RA3): 12 KVA. Mientras la potencia conectada a barra sea menor a 18 KVA, el display de la placa de evaluación se mantendrá apagado. Cuando la potencia conectada sea mayor o igual a 18 KVA, en el display se debe mostrar la letra A señalizando la condición de alarma. Este ejercicio debe resolverse en dos maneras. La primera debe ser mediante tabla de verdad en memoria RAM, tal como lo realizado en el ejercicio anterior. La segunda solución debe ser mediante evaluación de la función lógica que modela al sistema (operaciones AND y OR). Resolución de Ejercicios
  • 47.
    La tabla deverdad es la siguiente: Resolución de Ejercicios Y la función lógica correspondiente es: A=RA3.RA2+RA3.RA1+RA2.RA1.RA0 1 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 0 0 1 1 1 1 1 0 1 1 0 1 0 1 0 1 0 0 1 0 0 0 0 1 1 1 1 1 0 0 0 1 1 0 0 1 0 1 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 A RA0 RA1 RA2 RA3
  • 48.
    Ejercicio 3: Enun proceso industrial se debe controlar el nivel de líquido de un depósito, utilizando tres sondas detectoras de nivel (A, B y C) y dos bombas (B1 y B2), con indicadores de nivel y alarma por falla en los detectores : Resolución de Ejercicios
  • 49.
    La sonda A detecta el mínimo nivel de líquido. Por debajo de este nivel deben apagarse todos los indicadores de nivel señalizando la condición de vacío. Por encima de este nivel debe activarse el indicador de BAJO . La sonda B detecta el nivel óptimo de líquido, y cuando se alcance se debe indicar LLENO . La sonda C detecta el nivel mas alto, por encima de este nivel el depósito se desborda. Al accionarse esta sonda debe indicarse REBALSE en el cuadro de indicadores. Las bombas B1 y B2 se encargan de reponer el líquido en el depósito, y se activarán o desactivarán según las siguientes condiciones: Nivel de líquido en ascenso: Si el nivel no supera la sonda A , las dos bombas estarán activadas y los indicadores de nivel permanecerán apagados. Cuando se supere el nivel A se accionará la indicación BAJO y las dos bombas seguirán funcionando. Cuando se alcance el nivel B se indicará LLENO y se desactivará la bomba B2 , siguiendo en funcionamiento B1 . El indicador BAJO permanecerá encendido. Cuando se alcance el nivel C se desactivará la bomba B1 , quedando ambas bombas fuera de servicio. Se accionará el indicador REBALSE y se conmutará la secuencia de control pasando a la correspondiente de descenso de líquido. Los indicadores LLENO y BAJO permanecerán encendidos. Resolución de Ejercicios
  • 50.
    Nivel de líquidoen descenso: Cuando el nivel del líquido comience a descender desde el nivel REBALSE , se modificará la lógica de control a fin de evitar continuos arranques y paradas de la bomba B1 a consecuencia de la variación del nivel de líquido cuando se encuentre próximo a REBALSE . Las condiciones serán: Cuando el nivel de líquido en bajada se encuentre entre los niveles C y B , ninguna de las dos bombas estará activada. Los indicadores LLENO y BAJO permanecerán encendidos. Cuando el descenso pase el nivel B se activará la bomba B1 y sólo se señalizará BAJO . Si el líquido desciende hasta el nivel A , se activará la bomba B2 quedando ambas bombas en funcionamiento. Se apagarán los indicadores de nivel, señalizando la condición de vacío, y se modificará la secuencia de control pasando a la correspondiente al ascenso de nivel de líquido. De llegar a producirse un fallo en las sondas de entrada por discordancia, ambas bombas se desactivarán y se señalizará la condición de ALARMA . La condición de ALARMA permanecerá activa (independientemente de la corrección de las sondas de nivel) hasta que se presione el pulsador de reseteo de alarma. Una vez reseteada la alarma, el programa continuará con su funcionamiento normal. Resolución de Ejercicios
  • 51.
    Entradas: RA0: sensor A RA1: sensor B RA2: sensor C RB0: reset de alarma (implementar mediante interrupción) Salidas: RB5: bomba B1 RB7: bomba B2 RB6: indicador BAJO RB4: indicador LLENO RB2: indicador REBALSE Señalización de Alarma: La alarma (discordancia de sensores de nivel) se señalizará de la siguiente manera: se encenderán los tres indicadores de nivel durante medio segundo, y durante otro medio segundo se apagarán. El ciclo debe repetirse, de forma de lograr un lograr un efecto de parpadeo de los indicadores. La temporización del parpadeo debe implementarse mediante interrupción del TIMER0. Resolución de Ejercicios
  • 52.
    Tabla de verdadpara líquido en ascenso Resolución de Ejercicios Tabla de verdad para líquido en descenso
  • 53.
    Fin de lapresentación