Los módulos en los que pondremos mayor atención esta vez, serán en el modulo de conversión A/D y las interrupciones periféricas y globales.
El objetivo del programa es controlar el encendido y apagado de una bomba de agua que llena un tanque. Para el funcionamiento del sistema el usuario debe configurar el sistema gracias a los botones de selección, lo que le permite seleccionar entre 3 modos de funcionamiento diferentes:
- Modo semi-manual: Permite encender o apagar la bomba de forma manual, sin embargo, el sistema tiene una protección contra el derrame de líquido por la que cuando el nivel superior esté detectado, apaga la bomba y no permite que se vuelva a encender.
- Modo discreto: Este modo automático permite encender la bomba cuando el nivel esté al mínimo, y apagar la bomba cuando se detecte el nivel superior (funcionamiento de histéresis).
- Modo escalonado: Este modo de funcionamiento permite seleccionar al usuario el nivel al que desea conservar el tanque. Existen 4 niveles diferentes (mínimo, 1/3, 2/3 y máximo)
Entradas del sistema
El sistema recibe entradas por el puerto B y el puerto A:
PORT | Bit | Nombre | Descripción |
---|---|---|---|
PORTA | RA0 | A0 | Entrada analógica - Sensor de nivel |
PORTB | RB2 | +/enc | Botón de selección "+" o encender la bomba |
RB3 | -/apa | Botón de selección "-" o apagar la bomba | |
RB4 | conf | Botón de configuración | |
RB5 | inf | Detector de nivel inferior | |
RB6 | sup | Detector de nivel superior |
Salidas del sistema
El sistema envía las siguientes señales como salida:
PORT | Bit | Nombre | Descripción |
---|---|---|---|
PORTB | RB0 | bomba | Énvía la señal de activación del relevador que enciende la bomba |
PORTC | RC7 | estado | Muestra el estado del sistema. Si estado=1 ; el sistema está en funcionamiento Si estado=0 ; el sistema está en modo de configuración |
RC6 | manual | Permite visualizar el programa seleccionado. Si manual=1 ; el programa seleccionado es el programa manual Si discreto=1 ; el programa seleccionado es el programa discreto Si escalon=1 ; el programa seleccionado es el programa escalon | |
RC5 | discreto | ||
RC4 | escalon | ||
RC3 | niv3 | Permite visualizar el nivel de agua actual: niv3 representa el nivel máximo niv0 representa el nivel mínimo niv1 y niv2 pueden ser configurados como niveles intermedios en el modo de funcionamiento escalonado | |
RC2 | niv2 | ||
RC1 | niv1 | ||
RC0 | niv0 |
Recursos del microcontrolador.
Se utilizará la conversión A/D para conocer el nivel actual de agua en el modo escalonado. Configuraremos la conversión A/D para activar la interrupción (ADIE).
También utilizaremos la interrupción por cambio en el PORTB (RBIE), razón por la cual hemos seleccionado como entradas el puerto B en esos bits específicos (pues esta interrupción solo se ejecuta cuando cambian los bits de la nible más significativa)
Observaciones para la implementación
- Habrá que tener cuidado con las interrupciones, pues al utilizar dos interrupciones diferentes, tendremos que saberlas identificar (pues la interrupción ejecuta siempre la misma subrutina, no importando qué interrupción se haya lanzado).
- Recordar que la rutina de interrupción puede suceder en cualquier momento, y que los registros no necesariamente conservarán su valor tras el retorno de interrupción, por lo que si se utilizan registros importantes, será necesario guardarlos y respaldarlos al inicio y al final de la rutina de interrupción (ver página 130 del manual PIC16F87X y página 154 del manual PIC16F87XA)
- Existe una característica particular en los modelos PIC16F876/877. Las primeras 16 casillas de memoria RAM (0x20 a 0x2F) son comunes en todos los bancos. Esta característica puede ser de utilidad si es que en la rutina de interrupción y en el programa principal se utilizan diversos bancos, ya que esto evita tener que conocer el banco en el que se encuentra uno (y es de vital importancia al guardar el contexto en una interrupción)
Comentarios finales.
Recuerden que la implementación de una solución tecnológica no está limitada por un solo método. Todos los métodos son correctos mientras resuelvan la solicitud del cliente (quien encargó la solución) por lo tanto, mientras se ejecuten los programas como dice la descripción, todas las soluciones son correctas.
La única diferencia entre soluciones puede ser la optimización, la velocidad, la seguridad y la protección contra errores del sistema.
Archivos para descargar:
Simulación en Proteus
Archivos para descargar:
Simulación en Proteus
No hay comentarios:
Publicar un comentario