Analizador lógico de cuatro señales digitales de entrada realizado mediante microcontroladores avanzados y GLCD
Enviado por Pablo Turmero
Graduación deMicrocontroladores Avanzados Tema: Analizador Lógico de Cuatro Señales Digitales de Entrada Realizado Mediante Microcontroladores Avanzados y GLCD.
Antecedentes: Los Analizadores Lógicos se desarrollaron casi simultáneamente al mismo tiempo que los primeros microcontroladores que salieron al mercado. El Analizador Lógico es una herramienta clave para el desarrollo de los sistemas digitales, aunque existen similitudes con los osciloscopios.
Descripción General Del Proyecto Nuestro proyecto consiste en el PIC 16F887 que básicamente toma 4 señales digitales las que se mostraran en una pantalla GLCD dependiendo de la selección de frecuencia de muestreo para su posterior analisis.
Fundamento Teórico Software: MikroC PRO for PIC v4.15 Proteus v7.1 SP2
Fundamento Teórico Hardware: PIC 16F887 Oscilador interno seleccionable de 8 a 31MHz. Hasta 36 pines de entrada/salida usando el oscilador interno. 14 entradas A/D contra 8 del PIC16F877A. Capacidad Interrupciones, Tres timers/counters (8, 16 y 8 bits). Convertidor A/D de 14 canales, 10 bit. GLCD KS0108 Conformado por una matriz de puntos de visualización de 128 pixeles de largo por 64 pixeles de alto. Su iluminación de fondo es variable RGB, además control de brillo. Fácil manejo con microprocesadores de 8-Bits. Bajo poder de consumo. Contiene dos controladores internos un KS0108B y KS0107B.
Descripción E Implementación Del Proyecto Diagrama de Flujo:
Descripción E Implementación Del Proyecto Convertidor A/D: Dos potenciómetros 0-5v (RA1,RA2) 10 bits. Pot1 selecciona frecuencia y Pot2 selecciona Factor de Multiplicación. Factor de conversión A/D Potenciómetro 1 Factor de conversión A/D Potenciómetro 2
Descripción E Implementación Del Proyecto Uso del Timer1: señales 5Hz-20Hz 0xFFFF = 65535 interrupciones. Cristal externo de 4MHz, es decir 1us cada instrucción. Hasta 65,535ms sin pre-escalador, hasta 524,28ms con pre-escalador. Tomamos 4 muestras de un periodo completo. Ejm: 20Hz, es decir con periodo de 0,05s generaremos interrupciones cada 12,5ms.
Descripción E Implementación Del Proyecto Uso del Timer1: señales 50Hz-2KHz. Tomamos muestras saltando uno o varios periodos dependiendo de la señal que vamos a mostrar. Interrupciones Generadas Saltando un Periodo. Con cuatro periodos de la señal de la entrada podemos graficar un periodo completo en la GLCD.
Descripción E Implementación Del Proyecto Gráficos en la GLCD: Glcd_Dot(x,y,color), función principal para graficar, x toma valores de 0-127, y toma valores de 0-63 y color valores entre 0, 1 y 2. Barrido horizontal hacia la derecha. Se grafica dos pixeles por cada interrupción en cada uno de los cuatro canales. Un periodo completo se grafica en 8 pixeles. GLCD tiene 128 pixeles a lo ancho, por lo que se graficará 16 periodos completos de la señal a la entrada.
Descripción E Implementación Del Proyecto Limitaciones del Proyecto: “Glcd_Dot” tarda aproximadamente 525us. 16 veces “Glcd_Dot” = 8,4ms Tiempo total en ejecutarse función interrupción es de 8,6ms. Se podría graficar señales desde 1.91Hz hasta 116,28Hz, (8,6 – 524,28ms), tomando solo una muestra por periodo. Tomando cuatro muestras por periodo el rango seria de 0,48Hz – 29,07Hz. Procedimiento valido para frecuencias 5, 10 y 20 Hz. Para frecuencias mayores a 20Hz, tomamos muestras saltando 10 periodos de la señal de entrada para poder observar señales de menos frecuencia.
Descripción E Implementación Del Proyecto Limitaciones del Proyecto: Ejm: 50Hz, calculamos un tiempo de interrupción cada 5ms, tomando 4 muestras, pero la limitación de que debe ser entre 8,6ms y 524,28ms no nos permite programarlo así, ya que obtendríamos errores, si saltamos un periodo para tomar cada muestra entonces deberíamos sumar 20ms de un periodo, obteniendo 25ms, valor que se encuentra dentro del rango, pero para frecuencias menores a 50Hz, en este caso, existirán errores.
Descripción E Implementación Del Proyecto Limitaciones del Proyecto: Por esto extendemos la interrupción hasta 10 veces su periodo a fin de conseguir poder observar hasta 10 señales menores a la frecuencia seleccionada. Por lo que la limitación general que tiene nuestro proyecto es que para frecuencias mayores a 20Hz, las gráficas pueden ser de señales con intervalos de frecuencia(f); 1*f/10; 2*f/10; 3*f/10……9*f/10; f y además 2f. Tiempo de cada Interrupción considerando periodos omitidos
Programación del PIC Programa Principal:
Simulaciones y Pruebas Experimentales Implementación en Protoboard:
Simulaciones y Pruebas Experimentales Simulacion en Proteus: Frecuencia: 5Hz CH1: 5Hz. CH2: 3Hz. CH3: 1Hz. CH4: 10Hz.
Simulaciones y Pruebas Experimentales Tarjeta Electrónica PCB:
Simulaciones y Pruebas Experimentales Proyecto Final:
Conclusiones: 1.- Este proyecto ha sido de mucha importancia para ampliar nuestros conocimientos sobre Microcontroladores, principalmente el uso de interrupciones ya sean estás externas o como temporizadores, además el uso de la conversión analógico – digital A/D y el uso de la librería propia de MikroC para graficar en una GLCD. 2.- El analizador lógico nos permite observar varias señales al mismo tiempo a diferencia de un osciloscopio que nos permite observar una o máximo dos señales dependiendo del fabricante, estos analizadores lógicos podemos implementarlos con más señales a la entrada, pero para este proyecto tendría el inconveniente de que aumentaría un poco más las limitaciones por lo que lo ideal fue hacerlo para cuatro señales digitales. 3.- Se desarrollo un analizador lógico usando el PIC16F887 a diferencia de otros microcontroladores más avanzados que por poseer mayor cantidad de memoria se podría grabar en una memoria EPROM para mejor manejo. Con este pic logramos sacar de una forma directa las señales a la GLCD sin ser guardadas en memoria.
Conclusiones: 4.- La limitación para mostrar señales mayores a 20Hz, en la que solo se pueden observar hasta 10 señales de menor frecuencia en intervalos iguales puede ser resuelta saltando más de 100 periodos en cada interrupción, pero esta solución trae consigo el inconveniente que las interrupciones tardaran mucho tiempo más en ejecutarse, tomando en cuenta el tiempo máximo de interrupción es de 524,28ms por 64 veces que grafica a lo ancho de la GLCD tomaría 33,55s, en el caso más largo, lo que es un tiempo demasiado extenso por lo que se prefirió dejarlo con la limitación. 5.-En la realización de este proyecto fue primordial el uso de las interrupciones, que fue el caso al que tuvimos que profundizar para el apropiado uso con las diferentes señales digitales que se puedan presentar a la entrada del dispositivo, específicamente el uso del Timer1. Es de vital importancia la sincronización de las interrupciones con las señales ya que un pequeño margen de error hará que la imagen mostrada en la GLCD no corresponda a la señal de la entrada.
Recomendaciones Investigar el correcto uso de las interrupciones como temporizadores, ya que base de nuestro proyecto las usa y es de mucha importancia su correcto funcionamiento a fin de evitar errores. Revisar los datasheet del el PIC16F887 y de la GLCD, para correcto funcionamiento ya que un error en las conexiones de estos dispositivos puede ocasionar que se quemen o su función sea errónea. Verificar la versión de Software que se usa, en nuestro caso tuvimos una complicación con la GLCD por la versión de MikroC PRO que estábamos usando, gracias al desarrollo de una nueva versión por MIKROELECTRONICA se pudo solucionar estos inconvenientes, de igual manera para el uso de el Software Proteus. Para nuestro proyecto el usuario final deberá entender bien las limitaciones ya que de no hacerlo, puede estar observando imágenes equivocadas que no correspondan a las señales emitidas en la entrada. En lo posible se debe aprovechar al máximo los recursos del pic, en este proyecto para la selección de la frecuencia de muestreo se podía usar un switch rotativo, pero con la deficiencia de que se debían usar mas puertos E/S por lo que lo más adecuado fue usar la conversión A/D con dos potenciómetros y tan solo usando dos puertos E/S del pic.