miércoles, 20 de julio de 2016

El módulo CCP PWM

Con este modo de trabajo, se consiguen impulsos lógicos cuya anchura del nivel alto es de duración variable. El módulo CCPx donde x puede ser 1 o 2 dependiendo, se logra obtener por el pin CCPx una salida digital mediante su registro TRISC correspondiente, una señal periódica, con parte de la señal en alto y parte de la señal en bajo o toda la señal en alto o toda la señal en bajo.
La parte de la señal obtenida por el pin CCPx que está en alto se conoce como ciclo de trabajo y es representado por el valor almacenado en el registro CCPRxL, el tiempo que la señal está a nivel bajo se conoce como periodo de la señal y es representado por el valor almacenado en el registro PR2.
Para esta forma de trabajo del módulo CCP se hace uso del TMR2 y de su registro PR2. El valor almacenado en el registro CCPRxL que es el valor que representa el ciclo de trabajo de la señal PWM que se mantiene a 1, se cargará en el registro CCPxH.
El valor del registro CCPxH se compara permanentemente con el valor que va tomando el registro TMR2 y cuando se hacen iguales el pin CCPx se pondrá a nivel bajo, de esta manera se fija el ancho de pulso, y como el TMR2 seguirá aumentando de valor, hasta que este se haga igual nuevamente al valor almacenado en el registro PR2, momento en el cual el registro TMR2 se hará igual a 0 y el ciclo anterior volverá a repetirse.
Para obtener la salida PWM por el pin CCPx de tienen que cargar el periodo de la señal mediante un valor en el registro PR2 y además establecer un ciclo de trabajo mediante un valor cargado en el registro CCPRxL.
El tiempo que dura la onda es:
Período = [(PR2) + 1] • 4 • Tos • Valor Predivisor TMR2
Y para la anchura de pulso:
Anchura de impulsos = (CCPR1L:CCP1CON<5:4>) • Tosc • Valor Predivisor TMR2


Referencia Bibliográfica:
Milan Verle (2008). PIC Microcontrollers – Programming in Assembly. Editorial MikroElektronika.

El módulo CCP Comparación

En esta forma de trabajar el módulo CCP2 lo que hace es comparar continuamente el valor que va tomando el temporizador TMR1 (el cual tiene que haber sido configurado como temporizador), con un valor almacenado previamente en los registros CCPR2H yCCPR2L del módulo CCP, cuando ocurre la comparación al igualarse ambos valores, se producirá una interrupción en donde ocurre lo que se quiere en el pin 16. Cuando coinciden ambos valores, acontece uno de los siguientes eventos de acuerdo con la programación de los bits CCP1M3-0:

1. Pasa a nivel alto

2. Pasa a nivel bajo
3. No cambia su estado pero se produce una interrupción

Programa: 

Referencia Bibliográfica:

Milan Verle (2008). PIC Microcontrollers – Programming in Assembly. Editorial MikroElektronika

Módulo CCP Captura

Trabajará con el módulo CCP1 y lo que hace es guardar en sus registros CCPR1H y CCPR1L, (8 bits correspondientes a cada caso) el valor que se encuentra en el registro TMR1 justo cuando en el PIN 17 o pin CCP1 ocurre un evento determinado. Es importante mencionar que este pin tiene que ser configurado como una entrada digital mediante el registro TRISC correspondiente.Los eventos que pueden ocurrir sobre la pata para que se produzca la captura del valor TMR, serán:

1. Un flanco ascendente
2. Un flanco descendente
3. Cada 4 flancos ascendentes
4. Cada 16 flancos ascendentes

Mientras que si se usa el módulo CPP2, cualquiera de los sucesos o eventos mencionados para el módulo CCP1 provocarán una captura, solo que en este caso sucederán para sus registros CCPR2H y CCPR2L y el suceso tiene que suceder en el pin 16.



Tabla N° 1 - CCP2 y CCP1

Referencia Bibliográfica:
Milan Verle (2008). PIC Microcontrollers – Programming in Assembly. Editorial MikroElektronika

Introducción a CCP

Los microcontroladores disponen de dos módulos CCP, llamados CCP1 y CCP2, de los cuales cuentan 16 bits cada uno, es importante resaltar que a cada uno le corresponde un pin en específico, para el módulo CCP1 el pin 17 o RC2 y el módulo CCP2 el pin 16 o RC1, que solo se diferencian en un disparo especial.

Estos realizan tres funciones diferentes:

Modo captura:
se toma una pareja de uno de los módulos, siendo esta la que capture el valor almacenado en el Timer 1 cuando ocurre un evento en el pin RC2 o RC1.

Modo comparación: el valor que almacene el Timer 1 de 16 bits con algún valor previamente cargado en una pareja de registros de un módulo se compararan, cuando ambas funciones coincidan se producirá un evento en la pata RC2 o en la RC1, dependiendo del módulo.

Modo modulación por anchura de pulsos (PWM): en este caso se controla la señal dentro del intervalo de ancho de pulso en un nivel alto (1).

Cada uno de los módulos CCP1 y CCP2, cuentan con unos registros para su manipulación los cuales son:
El registro CCPxCON donde x será 1 o 2 dependiendo del módulo CCP utilizado, mediante el cual se controla el modo de trabajo.
Los registros CCPRxH y CCPRxL ambos de 8 bits actúan como uno solo y se puede considerar como un registro de 16 bits que es donde se guardan los valores obtenidos mediante el módulo CCP.
Es común provocar interrupciones mediante el módulo CCP por lo que en estos casos hay que tener en cuenta el uso de los registros INTCON, PIE1 y PIR1 para el módulo CCP1 y PIE2 y PIR2 para el módulo CCP2.

Tabla N°1 - Resumen general de las interacciones en los módulos CCP

Referencia Bibliográfica:
Milan Verle (2008). PIC Microcontrollers – Programming in Assembly. Editorial MikroElektronika

Programa para una señal cuadrada


;**************************************************************
; PROGRAMA DE GENERACIÓN DE ONDA CUADRADA
;**************************************************************

; Esta sección de programa se encarga de generar una señal ;cuadrada que será mostrada por el BIT 0, del PORTB, RB0. La ;lógica de este programa será poner una línea en alto un ;determinado tiempo y luego poner otra línea en bajo con la misma ;cantidad de tiempo

GENERACION
BSF PORTB,0
MOVF BASEPERIODO,W
MOVWF CONTADOR1


REPITE
CALL RETARDO
DECFSZ CONTADOR1,F
GOTO REPITE
BCF PORTB,0
MOVF BASEPERIODO,W
MOVWF CONTADOR1


REPITE1
CALL RETARDO
DECFSZ CONTADOR1,F
GOTO REPITE1
GOTO GENERACION

lunes, 18 de julio de 2016

Características generales de los timers del PIC 16F87X


TMR0:
Es un contador/temporizador de 8 bits.
Leible y escribible.
Reloj externo o interno.
Selección de flanco en el reloj externo.
Predivisor de la frecuencia del reloj programable.
Generación de interrupción opcional en el desbordamiento.

TMR1:
Es un contador/temporizador de 16 bits.
Leible y escribible.
Selección de reloj interno y externo.
Interrupción opcional por el desbordamiento de FFFFh a 0000h.
Posible reinicializacion desde los módulos CCP.

TMR2:
Es un temporizador de 8 bits.
Dispone de un registro de período de 8 bits (PR2).
Leible y escribible.
Predivisor de frecuencia programable.
Postdivisor de frecuencia programable.
Interrupcion opcional al coincidir TMR2 Y PR2.
Posibilidad de generar impulsos al modo SSP.

Referencia bibliográfica:
Microcontroladores PIC: Diseño práctico de aplicaciones, TOMO II. (2006) J.M. Angulo Uzcategui S, Romero Yesa, I. Angulo Martínez; McGraw Hill; 2° edición.

domingo, 17 de julio de 2016

Información general de Timer 2

El temporizador 2, del PIC 16F887, es de 8 bits y solo cumple la función como temporizador. En su estructura posee un preescalador y un postcalador, ambos circuitos forman parte de un divisor de frecuencia de entrada y salida. Este cuenta con el registro TMR2, este registro tiene asociado un registro llamado PR2 de 8 bits, que siempre estará comparándose con el temporizador. En el registro PR2 se cargará el número de veces que se quiere que el registro TMR2 aumente de valor, cuando el valor del registro TMR2 llegue a ser igual al valor cargado en el registro PR2, el módulo comparador, encargado de comparar ambos registros, generarán un pulso de salida, poniéndose el registro TMR2 en 0, para luego ser enviado al PWM

Usualmente el temporizador 2 es usado como base de tiempo para la generación de la señal PWM, (así como también se emplea como base de tiempo interna para medir eventos en aplicaciones). Cuando el registro TMR2 se pone en 0, el postcalador luego de dividir la señal, pondrá en 1 la bandera de interrupciones TMR21F.

Luego el módulo PWM usará la salida del comparador como base de tiempo para hacer funcionar el PWM.

También puede hacer funcionar el módulo MSSP (Master Synchronous Serial Port) que es aquel módulo que puede ser configurado para trabajar en dos modos de comunicación: SPI (Serial Peripheral Interfase) e I2C (Inter-Integrated Circuit). Ambos modos pueden usarse para comunicarse con otros dispositivos compatibles con estos protocolos de comunicación. La configuración correcta de este módulo para el temporizador 2, se podrá usar como base de tiempo para generar la señal SCK o SCL.

Fig. 1 – Representación del funcionamiento Timer 2

La configuración de temporizador del timer 2, cuenta con lo que se conoce como preescalador y también con un postcalador.

Lo que hacen es que la frecuencia de trabajo FOSC se divida por el preescalador y a la vez por el postcalador si se utilizan ambos a la vez se logra que el temporizador tarde un poco más en aumentar su valor en una unidad. El registro que representa a este temporizador, es:

Tabla N°1 – Registro T2CON

Descripción de los bits del registro T2CON:


· U-O (Bit 7): no se utiliza por lo que se le pone a 0.
· TOUTPS0, TOUTPS1, TOUTPS2 y TOUTPS3 (Bits 6-3): mediante las combinaciones de estos bits se elige el postcaler, el poscaler puede tener los valores del 1 al 16.
· TMR2ON (Bit 2): al poner este bit a 1 se habilita el uso del timer2 PIC, si se pone a 0 el timer2 PIC estará deshabilitado.
· T2CKPS1 y T2CKPS0 (Bits 1-0): mediante las combinaciones de estos bits se elige el prescaler, el prescaler puede tener los valores del 1, 4 y 16

En la siguiente tabla se ve los valores que hay que dar a estos bits para obtener los diferentes valores de los prescaler y el postcale para el timer2 PIC.


 
Fig. 1 – Configuración de bits para función deseada en el timer 2

Programa:

Referencias bibliográficas:
Electrónica y microcontroladores. Editorial USERS
Microcontroladores, programación y aplicaciones. Editorial USER

sábado, 16 de julio de 2016

Información general del Timer 1

El timer 1 es un temporizador y contador de 16 bits, que posee un registro llamado TMR1, es aquí donde se guardan los valores cuando es utilizado como temporizador, sus valores aumentaran de uno en uno entre 0 y 65535 con cada 4 ciclos de reloj. Donde el par de registros TMR1 se incrementan en cada ciclo de instrucción, de modo tal que se selecciona poniendo a 0 el bit TMR1CS del registro T1CON.
 
En modo contador el par de registros TMR1 se incrementa en cada flanco ascendente de una señal de reloj externa, este modo se selecciona poniendo a 1 el bit TMR1CS del registro T1CON, todo esto ocurre cuando entra alguna señal que a el pin T1CKI.

Es importante acotar que el registro TMR1, puede ser preescalado para que el tiempo en su incremento de valor, sea una unidad mayor, el timer1 PIC cuando alcanza su valor máximo de 65535 se reinicia, volviendo a incrementar sus valores de 0 a 65535, además cuando llega a su valor máximo y se reinicia puede producir una interrupción, lo cual se decide por programa. La programación del Timer1 PIC como contador se hace mediante los siguientes bits:



Tabla N°1 – Tabla de registros de Timer 1



Fig. 1 – Descripción de Bits del PIC. Fuente: Datasheet Microchip

T1GINV y TMR1GE (Bits 7-6): trabajan con la puerta del timer y la abren.
T1CKPS (Bits 5-4): son para elegir un preescalador, mediante las combinaciones de estos bits se pueden elegir los prescaler 1, 2, 4 u 8.
T1OSCEN (Bit 3): es para cuando se quiere conectar un oscilador independiente al timer1 PIC, este ocilador se debe colocar entre el pin T1OSO (pin 15) y el pin T1OSI (pin16) para esto hay que poner este bit a 1.
T1SYNC (Bit 2): es para hacer que el timer1 PIC cuando es programado como contador trabaje en forma sincronizada con el sistema interno del pic.
TMR1CS (Bit 1): con este bit se elige si el timer como contador o como temporizador, al poner este bit a 1 se elige la opción de contador, al ponerlo a 0 se elige la opción de temporizador.
TMR1ON (Bit 0): al poner este bit a 1 se habilita el uso del timer y cuando este bit está a 0 lo desactiva



Fig. 2 – Diagrama del Timer 1 como temporizador.


Fig. 3 – Diagrama del Timer 1 como contador. 

Programas:

Referencias bibliográficas:
Electrónica y microcontroladores. Editorial USERS
Microcontroladores, programación y aplicaciones. Editorial USERS
 

viernes, 8 de julio de 2016

Información general del Timer 0

El timer 0 es un registro de carácter especial ubicado en la posición 1 de la memoria RAM.

 
Fig. 1 – Diagrama del funcionamiento del Timer 0

El Timer 0 puede incrementarse automáticamente por medio de los ciclos internos del reloj o por los pulsos externos que entran en un pin del microcontrolador. Cuando este temporizador comienza su operación se incrementa con cada ciclo de máquina o por una fuente que entra en el pin TOCKI.

Un registro a tomar en cuenta para la configuración del timer 0 es el registro OPCIÓN. Este registro va a establecer las condiciones iniciales con las que trabajará el programa. Posee varios bits que configuran los circuitos de los temporizadores, las interrupciones y las resistencias pull-up.

El timer 0, puede configurarse en modo contador y temporizador. El modo de temporizador se selecciona por el bit TOSC del registro OPCIÓN (TOSC: “0” temporizador, “1” contador).

Los bits se almacenan en el registro OPCIÓN. Descripción de cada uno de los bits de este registro:

Tabla N°1 – Registro OPTION_REG PIC 16F887.


· RBPU (Resistencia Pull Up del puerto PORTB):  
0 ­ Resistencias pull up del puerto PORTB están deshabilitadas.
1 Pines del puerto PORTB pueden estar conectados a las resistencias pull­up.

· INTEDG ­ (Selector de flanco de la interrupción INT)
0­ Interrupción por flanco ascendente en el pin INT.
1 Interrupción por flanco descendente en el pin INT.

· RTS (Fuente de señal TMR0)
0 ­ Ciclo de instrucción interno, como temporizador.
1 ­ Transición en el pin RA4/TOCK, como contador.

· RTE ­ (Flanco de la señal del TMR0)
0 ­Incrementa en flanco descendente en el pin TMR0.
1 Incrementa en flanco ascendente en el pin TMR0.

· PSA ­ (Bit de asignación del pre­escalador)  
0 ­ TMR0, Contador/Temporizador
1 ­ Circuito de vigilancia WDT

Cuando se asigna el preescalador al temporizador/contador se debe poner a cero el bit PSA del registro. La configuración del pre-escalador es:

· PS2, PS1, PS0 (Bit selector del valor del divisor de frecuencias) El valor del divisor de frecuencias se ajusta al combinar estos bits. Como se muestra en la Tabla N° 1, la misma combinación de bits proporciona los diferentes valores del divisor de frecuencias para el temporizador/contador y el temporizador perro guardián, respectivamente.

Tabla N°2 – Combinación de bits para divisor de frecuencias

Notas de interés:

El timer 0 configurado en contador solo funciona con flancos y no con niveles, una configuración para esto sería modificar el Bit 4 de OPCIÓN y al colocarse este en 0, todos los flancos de subida se contarán y poniéndose en 1, pues todo lo contrario al cero.

La fuente de la señal TMR0 puede ser sometida a un proceso de división de frecuencia, que no es más que la división de una frecuencia utilizada por diversos rangos para poder conseguir temporizaciones más largas, además, se transmite en forma simultánea por un solo medio de transmisión.

Ya sabiendo que es una división de frecuencia, esto puede ocurrir en los módulos preescaladores y solo se deberá configurar el bit 3 en 1 del registro OPCIÓN. La única forma de no preescalar el temporizador es asignarle el perro guardian.

Pasos para configurar el timer 0: 1. Asignar el prescalador
2. Configurar el temporizador colocando los bits adecuados en el registro OPCIÓN
3. Para inicializar el temporizador, simplemente se debe escribir un número en el registro TIMER0 o borrarlo. Cuando se ha cargado con un número el temporizador, hará la cuenta desde ese número.
4. El temporizador debe ser argado después de cada sobreflujo para repetidos intervalos de tiempo, si no se hace FF, resultará en cada ocasión.

Usos del Timer “0”:

Para medir tiempo:
Reiniciar el registro TMR0 o escribir un valor conocido en él. El tiempo transcurrido en microsegundos al utilizar el oscilador de 4MHz) se mide al leer el registro TMR0. El bit de bandera T0IF del registro INTCON se pone a uno automáticamente siempre que ocurre el desbordamiento del registro TMR0. En donde se pasa de estar los bits en B’11111111’ a B’00000000’. Esta configuración vendrá dada por un “0” que aún no se ha desbordado y en “1” cuando ocurra todo lo contrario.

Tabla N°3 – Bits del registro INTCON

Para contar pulsos:
La polaridad de pulsos a contar en el pin RA4 se selecciona por el bit RTE del registro OPCIÓN (RTE: “0” Pulsos positivos, “1” Pulsos negativos). Varios pulsos se pueden leer del registro TMR0. El preescalador y la interrupción se utilizan de la misma forma que en el modo de temporizador.

Programas


Referencias bibliográficas:
Ángel A. J. J. (2008). Microcontroladores. Editorial CEKIT S.A. Tomo I, Teoría.
Microchip. (2007). Datasheet PIC16F882/883/884/886/887. U.S.A.

miércoles, 6 de julio de 2016

Introducción a Timers

El presente blog tiene como destino proporcionar la mayor información posible, sobre los temporizadores que posee el PIC16F887, características, función, notas de interés, programas, videos, quizes, operación de trabajo en algunas aplicaciones, etc. Pero para poder hablar sobre estos temporizadores, tenemos que saber bien, qué son los temporizadores, y es que estos desempeñan un papel en el PIC, de circuitos sincrónicos, que ayudarán a llevar el conteo de los pulsos que llegan a su poder para conseguir la entrada de reloj. El PIC16F887, posee tres temporizadores, que se distinguen por su cantidad de registros y funciones.

Es común leer que el Timer 1 es el más versátil de los tres temporizadores, ya que puede usarse para monitorear el tiempo entre las transiciones de una señal ocurridas en un pin de entrada o para controlar de manera precisa el tiempo de transición en un pin de salida. Mientras tanto, el Timer 0, se utiliza para contar eventos externos o generar "interrupciones" que no son más que pequeñas paradas que realiza el PIC durante el desarrollo de un programa.


Y por último, el Timer 2, que no es menos importante, tiene mucha más libertad en su funcionamiento y además de temporizador puede usarse como un controlador de período de una señal de salida en formato de modulación por PWM (Ancho de Pulso), en este caso la salida permanecerá en estado lógico alto durante un porcentaje determinado de cada periodo. Este porcentaje se controla escribiendo en el registro CCP (Capture(Compare/PWM), y el periodo lo maneja el Timer 2.