USO PRACTICO DEL PIC12F675 (III) - PICKEY ELECTRÓNICA

Vaya al Contenido

Menu Principal:

USO PRACTICO DEL PIC12F675 (III)

Uso Practico del PIC12F675 (III)

PROYECTO: MnEBasic (circuito comparador).


En el artículo anterior construimos una Minientrenadora para el PIC12F675 y, en este nuevo número aprenderemos como implementar un puerto serie RS232, para comunicar con nuestro ordenador.

.Tema:

Seguidamente se aprenderá como configurar el puerto serial RS232 (solo Tx) de la entrenadora, para de esta forma poder transferir información al ordenador, que pueden ser datos de temperatura que posteriormente se podran procesar en el PC si se desea. En principio la función principal del puerto RS232 (Tx) de la entrenadora, será la utilidad de depurado de nuestros programas.
Para poner en marcha este puerto antes se debe conocer unos detalles técnicos de este microcontrolador. El PIC12F675 no contiene modulo interno UART (UART por Hardware, UART = Universal Asynchronous Receiver/Transmitter), por lo que el puerto será emulado por Software. La utilización de esta emulación de UART por "Soft" es muy fácil y rápida de implementar en este lenguaje, ya que solo basta con utilizar un par de funciones integradas en el propio lenguaje, una para indicar si los datos serán de entrada "Rx" y la otra de salida "Tx" (en este caso), seguidos del PIN que se utilizará como línea de datos de Tx, velocidad en baudios del puerto y a continuación los datos a ser enviados. Otro punto a tener en cuenta cuando se utiliza la emulación UART es que se generan Bit de una duración determinada, esto requiere poder medir tiempo con una precisión que el oscilador interno del Pic no permite. En este caso el fabricante del chip lo ha dotado de un registro interno para la compensación del error. El error puede llegar a ser de +/-200Khz. El registro que permite calibrar el oscilador interno del PIC se llama OSCCAL y, hay que tener presente que para otra familia de Pic, el nombre del registro será distinto e incluso puede que no exista. El registro de calibrado OSCCAL tiene una longitud de 8 Bit pero solo utiliza los 6 de mayor peso, siendo el estado de los dos de menor peso indiferente. Microchip, que es el fabricante del microcontrolador suministra el valor de calibrado del registro en el propio "micro", este valor lo graba en la ultima posición de memoria de la Flash (memoria de programa) del Pic y, es distinto para cada chip Pic12F675. El valor de calibración no es cargado por el propio "micro", por lo que si se quiere utilizar el usuario tendrá que ocuparse de esta operación, añadiendo una rutina en el programa que realice este trabajo. El propio fabricante indica en el datasheets del Pic como hacerlo y, también indica que el margen de error con este valor queda <2%.

.Finalizando con el registro OSCCAL:

La localización del valor de OSCCAL es guarda por el fabricante en la ultima dirección de la memoria Flash 0x3FF del Pic
, como ya se indico anteriormente pertenece a la memoria de programa y, es la ultima dirección que contiene una instrucción ejecutable, la longitud de cada una de las 35 instrucciones que tiene este "micro" es de 14 BIT. Los 6 BIT más significativos corresponden a la instrucción maquina y, siempre se representará con su código equivalente en nemotécnico, que es más facil de recordar por el programador. Los 8 bit restantes menos significativos contienen el valor del dato, en este caso el valor de calibración. La última instrucción que está en la posición 0x3FF es "RETLW xx" (34xx Hex.), donde xx es el valor de calibración expresado en hexadecimal. Si el programa de control del programador permite configurarlo para que salvaguarde este valor, cada vez que se hace una operación que afecte a la memoria de programa, se activará la opción en él, o en su defecto, hacer como primera operación con el Pic una lectura de su memoria Flash y, una vez localizado el valor escribirlo en una etiqueta adhesiva y pegarlo en el PIC. Paso seguido se adjunta un programa en lenguaje máquina que se encargará de ejecutar la ultima instrucción de la Flash y, guardar el valor en el registro OSCCAL.

Lenguaje en código maquina que recomienda Microchip en el Datasheet del PIC12F675:

BSF STATUS, RP0
; Selecciona Banco 1.
CALL 0x3FFh
; Ejecutar la instrucción de la última posición de la memoria flash.
MOVWF OSCCAL ; Mover el valor al registro de calibración.

BCF STATUS, RP0
; Retornamos al Banco 0.

.Circuito (comparador):

Como ya dijo alguien en alguna ocasión "no solo de PIC vive el hombre", y para seguir con el carácter didáctico de la revista se supondrá que se ha perdido el valor de calibración del oscilador y, se construirá un periférico que permita recuperar el valor con una desviación aproximada del 0.15% inferior a la de Microchip. Este circuito será un generador de onda cuadrada de frecuencia conocida, basado en la red eléctrica española a 50Hz. Al utilizar la red no se necesitará ajuste alguno en nuestro generador. Por supuesto se puede utilizar cualquier otro dispositivo que se tenga a mano ya sea un generador comercial o, simplemente un circuito astable basado en el popular 555, pero en este último se necesitará un instrumento para su calibrado.

.Medición del ancho de pulso de una señal de onda cuadrada de 50Hz:

Mediante un comparador de tensión construido con un amplificador operacional (se nombrará como OP) LM741
trabajando con simple tensión. La señal se extrae de la red domestica 220VAC aislada y reducida mediante un pequeño transformador de 220VAC a 12VAC. La tensión es convertida y acondicionada por el OP siendo suministrada por éste a la entrada del Pic con valores TTL.

El comparador de tensión es un detector, estos circuitos se suelen usar para detectar un determinado nivel de tensión.
Esta tensión es fijada mediante otra tensión que llamaremos de referencia. La señal de salida solamente puede tomar dos valores posibles, según el voltaje que se compare sea mayor o menor al de referencia. En este caso la referencia es masa o cero, y al estar el OP trabajando con simple tensión los dos valores de tensión suministrados serán de 0V y <+5V obteniendo una onda cuadrada. En el circuito la finalidad del comparador es tan solo la de convertir una onda senoidal en otra cuadrada con niveles TTL; como se ha mencionado el circuito es simplemente un detector. Así que el terminal negativo del OP se conecta a través de una resistencia de 100K a un pin del secundario del transformador y, el otro pin del transformador será conectado a masa (GND), quedando la señal de 50Hz unida al circuito. La entrada positiva del OP se unirá directamente a masa o negativo. Siempre que la señal de entrada sea mayor que masa, la salida será el voltaje de saturación negativo (en este caso 0V). Si la entrada es cero o menor, la salida es la saturación positiva del amplificador (en este caso <+5V). De igual forma se puede transformar cualquier tipo de señal periódica en una onda cuadrada de la misma frecuencia. Este tipo de transformadores tienden a dar un nivel de tensión mucho más elevado del indicado por el fabricante cuando trabajan en vacío y, teniendo en cuenta que el consumo de la entrada del OP es despreciable, R1 limita la corriente y los diodos D1 y D2 limitan el voltaje quedando el pin 2 del OP protegido de sobretensiones provenientes del transformador.

Nota:
Es fudamental proteger la parte inferior del circuito generador como minimo; con una lamina dieléctrica de cierto grosor para no recibir posibles descargas eléctricas peligrosas de la red.

.Con el Pic programado se obtendrá los siguientes resultados:

El programa va midiendo el ancho de pulso previamente conocido de la señal de onda cuadrada (50Hz), a la vez  que se producen incrementos de una unidad del registro OSCCAL partiendo este desde de cero. Su valor es enviado por el puerto serie en base decimal hasta el hyperterminal u otro programa terminal serie del que se disponga. Al principio lo más normal es no divisar ningún dato hasta que el error entre dentro del margen de tolerancia permitido de la UAR del ordenador para 2400Baudios. El valor terminará parándose en el más próximo, muy por de bajo del 1% aproximadamente un 0.15%. Si se pulsa la tecla (para que la tecla sea leída correctamente por el PIC, previamente la resistencia ajustable estará a su máximo recorrido en sentido del movimiento de las agujas del reloj y, sera pulsada al principio del arranque) del mini entrenador (MnEBasic), se verá en la pantalla del PC el valor para OSCCAL que suministra el fabricante, siempre y cuando no se perdiera previamente. Para poder realizar esta operación se necesita medir tiempo, y para esto se ha empletado el Timer1 (TMR1) del microcontrolador.

Resumiendo;
la tensión de 220VAC de 50Hz de la red es aislada y reducida por el transformador, y esta ultima que suministra el transformador es transformada a onda cuadras de 50Hz por el OP. El periodo de 50Hz = 20mSeg, por lo que se deduce que el ancho de pulso a medir es igual a 20mSeg/2 = 10mSeg.

Para 60Hz los tiempos serian:
Periodo = 1/60Hz = 0.01666Seg.
Pasando a mSeg = 0.01666Seg * 1000 = 16.66 mSeg.
Ancho de pulso = 16.66mSeg/2 = 8.33mSeg.

.Vídeo de funcionamiento (al final de la pagina):

Al principio la MnEBasic esta bloqueada por la señal Vpp que genera el programador, cuando se desactiva esta tensión la minientrenadora se pone a trabajar, y durante un tiempo en el hyperterminal no muestra nada, esto es porque los valores que se van cargando en el registro OSCCAL, todavía no permiten que el reloj interno trabaje dentro del margen de tolerancia de la UAR del PC. Al poco tiempo ya se podrá ver información en la pantalla mostrando valores validos para el registro. Se podrá ver que al final queda estabilizado en el mejor valor, en este caso 84 en decimal (54h).

< Recreación 3D del circuito >

< Esquema del circuito >

<Interconexión de la minientrenadora con el generador de 50Hz>

<Video en el que se puede ver como el programa encuentra el valor del registro OSCCAL>

 
Copyright 2016. All rights reserved.
Regreso al contenido | Regreso al menu principal