Para sacar el máximo partido a muchos microcontroladores modernos, a menudo es necesario asegurarse de que los periféricos que incorpora el microcontrolador estén configurados correctamente. Esto conlleva en ocasiones su configuración paso a paso antes de interconectarlos.
Este aspecto es especialmente importante cuando el microcontrolador fue escogido porque sus periféricos cubren las necesidades de una aplicación determinada. Si no se presta atención, es posible que los periféricos no proporcionen la salida deseada.
Veamos a modo de ejemplo las familias PIC16F7X y PIC16C7X de microcontroladores de gama media de 8bit de Microchip. El PIC16F7X es un dispositivo flash y el PIC16C7X es un dispositivo programable una sola vez (one-time-programming, OTP). Entre los periféricos para ambos dispositivos se encuentran un convertidor A/D, temporizadores, módulos de captura, comparación y PWM (capture-compare PWM, CCP) y USART (universal synchronous asynchronous receiver transmitter).
Módulo conversor A/D
El módulo convertidor A/D convierte una señal analógica de entrada en el número digital correspondiente de 8bit. La salida del circuito interno de muestreo y retención es la entrada al convertidor, que genera el resultado por aproximaciones sucesivas. La tensión de referencia analógica se puede seleccionar por software tanto a la tensión de alimentación positiva (VDD) del dispositivo como al nivel de tensión de la patilla Vref. El convertidor A/D se distingue por su capacidad de funcionar mientras el dispositivo está en modo dormido. La Fig. 1 muestra un diagrama de bloques del circuito.
El módulo tiene tres registros; los dos registros de control son ADcon0 y ADcon1 y el registro de resultado es ADres. ADcon0 controla el funcionamiento del módulo A/D. Este registro se utiliza para seleccionar la frecuencia del reloj de conversión y el canal analógico. Es donde se determina el inicio y la finalización de la conversión. ADcon1 configura las funciones de las patillas del puerto. Los microcontroladores tienen cinco u ocho patillas de E/S que se pueden configurar como entradas analógicas.
Una vez configurados ADcon0 y ADcon1, el bit go/done de ADcon0 se pone a 1 para iniciar la conversión y a continuación se monitoriza para saber cuándo se completa la conversión. Cuando la conversión A/D ha finalizado, el resultado se carga en el registro ADres, se borra el bit go/done y se activa el bit de aviso de interrupción de conversión A/D (ADif).
Se dispone de un código de muestreo que lee el registro ADres y lo traslada a los módulos USART y CCP. La conmutación entre los dos canales analógicos de entrada se realiza variando el valor de los bits CHS2:CHS0 del registro ADcon0. La Fig. 1 solo muestra AN1 y AN0 pero se puede seleccionar cualquiera de los canales analógicos de entrada mediante CHS2:CHS0.
Temporizadores
Los microcontroladores tienen tres módulos temporizadores – timer0, timer1 y timer2 – cada uno de los cuales puede generar e interrumpir para indicar que se ha producido un evento, como por ejemplo una sobrecarga del temporizador. Timer0 es un temporizador-contador sencillo de 8bit. Timer1 es un temporizador-contador de 16bit formado por dos registros de 8bit que se pueden leer y escribir.
Timer2 es un temporizador de 8bit con un generador de escalas previo y otro posterior, además de un registro de período. Al utilizar ambos generadores de escalas ajustados a sus valores máximos, el tiempo de sobrecarga es el mismo que para un temporizador de 16bit. Timer2 es la base de tiempos de PWM cuando el módulo CCP se usa en modo PWM.
Para el modo PWM, los registros a configurar son el registro de período de timer2 (PR2), el registro de control de timer2 (T2con) y el registro PIR1. La salida de PWM tiene una base de tiempos (período) y un tiempo durante el cual la salida permanece en nivel alto (ciclo de trabajo). La frecuencia del PWM es la inversa del período. El período del PWM se determina escribiendo en el registro PR2.
Módulos de captura, comparación y PWM (CCP)
Existen dos módulos CCP, cada uno de los cuales contiene un registro de 16bit que puede funcionar como registro de captura de 16bit, registro de comparación de 16bit o registro de ciclo de trabajo maestro-esclavo PWM de 10bit. El funcionamiento de los módulos CCP es idéntico excepto para el disparador de eventos especiales.
USART
El módulo USART es uno de los dos módulos E/S serie; el otro es el módulo SSP. El USART también se conoce como interface de comunicaciones serie o SCI. Se puede configurar como un sistema asíncrono full-dúplex que se puede comunicar con dispositivos periféricos como terminales CRT y PC, o bien se puede configurar como sistema síncrono half-dúplex que se puede comunicar con dispositivos periféricos como circuitos integrados A/D o D/A y EEPROM serie.
En el programa de muestra se configura como sistema asíncrono
full-dúplex para comunicarse con un PC. En esta aplicación, el USART solo se usa para transmisión. Los registros que es preciso configurar son el registro generador de velocidad de transmisión (SPBRG), registro de estado y control de transmisión (TXSTA), registro de estado y control de recepción (RCSTA) y registro de datos de transmisión (TXreg).
El SPBRG dedicado de 8bit controla el período de un temporizador de 8bit de funcionamiento libre. En modo asíncrono, un bit también controla la velocidad de transmisión. En modo síncrono, este bit es ignorado.
En TXSTA se seleccionan el modo asíncrono y la transmisión de 8bit. El bit de habilitación de transmisión (TXen) del TXSTA habilita la transmisión y el bit de estado de registro de desplazamiento de transmisión (TRMT) es un bit de solo lectura que indica el estado del registro de desplazamiento de transmisión (TSR). Para iniciar la transmisión es necesario ajustar el bit de habilitación de puerto serie (SPen) en el registro RCSTA. Al escribir sobre el TXreg se inicia la transmisión. El código de ejemplo copia el resultado de la conversión A/D en TXreg. El valor se traslada automáticamente al TSR y a la patilla RC6/TX.
Integración de periféricos
Una vez configurado cada periférico es necesario interconectarlos. El segmento del código del bucle en el programa de ejemplo muestra cómo se conecta cada periférico con los demás. El diagrama de flujo del firmware de la Fig. 2 combina los procesos de configuración e integración.
En primer lugar se inicializan todos los puertos de E/S. También se habilitan los puertos serie para transmisión con el USART y a continuación se configuran los periféricos timer2, convertidor A/D, CCP y USART. Para el convertidor A/D, solo se selecciona un canal analógico de entrada durante el proceso de configuración. Se habilita Timer2 y el programa empieza consultando el bit de aviso TMR2IF. TMR2IF se ajusta siempre que se igualen los registros TMR2 y PR2. Cuando se igualan, se borra TMR2IF por software y se inicia la conversión A/D.
Una vez finalizada la conversión A/D, el programa monitoriza el bit TRMT a configurar, indicando que el registro TSR del USART está vacío y listo para la transmisión. Entonces se escribe el valor de la conversión A/D en los registros TXreg y CCPR2L. Luego se selecciona el siguiente canal analógico y se repite el proceso. Las salidas de USART y CCP se reciben y procesan por medio de dispositivos externos de hardware.
Hardware
La Fig. 3 muestra un diagrama esquemático del hardware. Se trata básicamente de una parte del esquema de la tarjeta de demostración PICDEM 2 Plus con algunos componentes añadidos.
Los potenciómetros de ajuste de RP1 y RP2 se usan para demostrar un método de conmutación entre canales analógicos de entrada. También determinan los niveles de la tensión de entrada que alimentan el convertidor A/D. El LED L1 está conectada a la patilla de salida de PWM, RC1/CCP2, que está en serie con la resistencia limitadora de corriente, R1. U2 es un controlador de línea RS232 que proporciona la conexión eléctrica entre el USART y el conector del puerto serie P1.
Cuando la tensión analógica de entrada alimenta el convertidor A/D, éste convierte la tensión de entrada en el valor digital correspondiente. La entrada procede de AN0 o AN1 dependiendo del canal analógico de entrada configurado. Los resultados digitales se envían luego al USART y al CCP. El USART envía este valor a un programa del terminal serie, el cual visualiza un valor de salida en un determinado formato dependiendo de la configuración del terminal. Del mismo modo, el PWM del CCP varía el ciclo de trabajo del pulso de salida para controlar el brillo de un LED. wPara la transmisión serie y la visualización, la salida del USART se envía al programa del terminal serie conectando el convertidor serie USB-UART al conector de puerto serie en la tarjeta de demostración PICDEM 2 Plus y el puerto USB a un PC, como ilustra la Fig. 4. Se puede utilizar el MCP2200 de Microchip como convertidor serie USB-UART.
Dado que se utilizan dos canales analógicos en el convertidor A/D, también se visualizan dos valores en el monitor del PC. Se utiliza un programa del terminal serie para capturar, controlar y depurar flujos de datos binarios. La velocidad de transmisión se debe fijar en 2400 baudios, con bits de ocho datos, un bit de parada y sin paridad para adaptar la configuración de software del USART. El valor mostrado también se puede ajustar en ASCII, ANSI, hexadecimal, binario u otro tipo de representación numérica, dependiendo de las características del programa del terminal serie.
Conclusión
Para obtener los valores de salidas deseados y visualizarlos, a menudo es necesario configurar cada periférico paso a paso antes de conectarlos entre sí. Es necesario configurar, implementar e integrar el convertidor A/D, los temporizadores, el CCP y el USART para obtener los valores deseados a la salía del A/D y visualizarlos.