viernes, 22 de julio de 2016

PWM


Una señal PWM es una forma de onda digital binaria de una determinada frecuencia y ciclo de trabajo (duty cycle) variable.

 Si se considera que el nivel 0 representa OFF y el nivel 1 representa ON, la potencia que consume la carga será directamente proporcional a la duración del pulso, esto puede observarse en la siguiente imagen:













Una señal PWM se caracteriza por una base de tiempo (período) y un tiempo durante el cual la salida tiene un nivel alto (ciclo de trabajo). La frecuencia es el inverso del período.

 Los registros a utilizar, ya mencionados en el glosario de términos son: PR2, T2CON, CCPxL, CCPxCON. El CCP, es el registro que puede operar registro de captura, registro de comparación, registro de ciclo de servicio PWM, es necesario señalar que el PWM, esta relacionado con el Timer2
Obsérvese la siguiente tabla:








El modulo del CCP: CCP1 formado por dos registros de 8 bits: CCPR1 : CCPR1L (bits menos significativos) y CCPR1H (bits más significativos), el registro CCP1CON permite controlar las operaciones de este módulo. CCP2: es el segundo registro del módulo CCP (CCPR2) está formado por dos registros de 8 bits: CCPR2: CCPR2L (bits menos significativos) y CCPR2H (bits más significativos), el registro CCP2CON permite controlar las operaciones de este módulo. 




























Momento en el que el PWM coloca en 0 el timer 2, y como se coloca en 1(ciclo de trabajo) 































 Periodo del PWM 


El periodo es especificado por el registro PR2 del timer 2, el mismo puede ser calculado por la siguiente ecuación:



 Cuando el TMR2=PR2, ocurre: 


  •  Timer 2, es puesto en 0  CCPx es puesto en 1 (excepto si el ciclo de trabajo=0%, el pin no será seteado) 
  •  El ciclo del PWM es guardado desde CCPRxL a CCPRxH 

 Ciclo de trabajo 

  • El ciclo de trabajo de una señal periódica es el ancho relativo de su parte positiva en relación con el período. Expresado matemáticamente:




  • D es el ciclo de trabajo, t es el tiempo en que la función es positiva (ancho del pulso) y T es el período de la función  
  • La construcción típica de un circuito PWM se lleva a cabo mediante un comparador con dos entradas y una salida. Una de las entradas se conecta a un oscilador de onda dientes de sierra, mientras que la otra queda disponible para la señal moduladora.



Para trabajar con el ciclo de trabajo en el pic, se utilizan las siguientes formulas:

 




Resolución del PWM La resolución determina el número de ciclos disponibles dado por un periodo. Por ejemplo para 10 bits de resolución que es lo que posee el 16f887 cuando el PR2 es 256 pueden obtenerse un resultado de 1024 ciclos discretos, mientras que 8 bits 256 ciclos discretos. El valor de la resolución puede calcularse mediante la siguiente formula:


Es de vital importancia señalar que si el valor de ancho de pulso es mayor que el periodo asignado al PWM, este permanecerá sin cambio. 



 Configuración de registros en pic16f887 para PWM: (Pulse Width Modulation) modulador por ancho de banda.

Ccp1con datasheet para pwm







Ccp2con datasheet para pwm




T2con datasheet para pwm 




Pr2 datasheet para pwm







Otros parámetros que deben tomarse en cuenta: 

Funcionamiento en modo de suspensión :en modo de reposo, el registro TMR2 no va a aumentar y el estado del módulo sin cambios. si el pin ccpx está impulsando un valor, éste seguirá impulsando ese valor. cuando el dispositivo se activa, TMR2 continuará desde su estado previo.


 Cambios en la Frecuencia del Reloj: es importante señalar que la frecuencia del pwm deriva del clock, por tanto si hacemos cambios en el clock del dispositivo, tambien habran cambios en el pwm.
 Efectos del Reset: si ocurre algun reseteo forzado en la entrada de cualquiera de los modos, se resetearan los estados del ccp.


 Configuración para la operación PWM 

Los siguientes pasos deben tomarse cuando se configura el módulo CCP para la operación PWM:

 1-Desactivar el pin PWM (ccpx) controladores de salida como entrada al establecer el bit asociado Tris

 2-Establecer el período de pwm cargando el registro PR2

3-Configurar el módulo CCP para el modo PWM cargando el registro TCP COM con los valores apropiados

4-set the PWM duty cycle by loading the CCPRxL register and DCxB  bits of the CCPxCON register.

5-Configurar e iniciar el TIMER2

-Borrar el bit indicador de interrupción TMR2IF del registro PIR1
-Accione el valor Timer2 preescalar cargando los T2CKPs bits del registro T2CON
-Permitir Timer2 activando el bit del registro TMR2ON Y T2CON

6-Permitir la salida PWM después de un nuevo ciclo PWM ha comenzado

-Esperar hasta que (se establece TMR2IF bit del registro PIR1) desbordamientos Timer2
-Permitir que el controlador de salida de pin CCPx desactivando el bit asociado Tris







































  

miércoles, 20 de julio de 2016

Timer 2


El timer 2 solo puede ser utilizado como temporizador no contador, consta de 8 bits por lo que sus valores pueden aumentar desde 0 a 255. Ademas este modulo cuenta con un registro RP2 que marca el valor máximo que puede alcanzar la cuenta del registro TMR2. 

Diagrama de Funcionamiento del TIMER 2

Configuracion de los registros 

  • El bit7 no se utiliza por lo que se le pone a 0.
  • los bits de 6 al 3 mediante las combianciones de estos bits se elige el postcaler, el postcaler puede tener valores del 1 al 16.
  • El bit 2 al poner este bit a 1 se habilita el uso del timer2, si se pone a 0 el timer estara deshabilitado.
  • Los bits 1 y 0 mediante las combinaciones de estos bits se elige el prescaler, el prescaler puede tener los valores del 1, 4 o 16. 



Detalles relacionados con sus registros:
  • En el momento de encender una fuente de alimentación, el registro PR2 contiene el valor. 

  • Tanto el pre-escalador como el post-escalador se borran al escribir en el registro TMR2. 

  • Tanto el pre-escalador como el post-escalador se borran al escribir en el registro T2CON. 

  • Al producirse cualquier reinicio, como puede anticiparse, tanto el pre-escalador como el post-escalador se borran.

 

Cálculo de Temporizaciones
La temporización máxima que puede alcanzar el Timer 2 es la misma que alcanza el Timer 0.
PR2=  (TMR2 ∗FOSC)/(4∗POSTSCALER∗PREESCALER)  -1



MÓDULOS CCP
 


  • El modo captura permite el acceso al estado actual de un registro que cambia su valor constantemente. El registro del temporizador Timer1.
  • El modo de compracaion compara constantemente los valores de los registros. Uno de ellos es el registro del temporizador Timer1.
  • PWM (modulacion por ancho de pulso) puede generar señales de frecuencia y de ciclo de trabajo variados por uno o mas pines de salida. 
  • El microcontrolador PIC16F887 dispone de dos modulos CCP - CCP1 y CCP2, ambos son identicos en modo normal de funcionamiento.



MÓDULO CCP1




Una parte central es el registro CCPR1 de 16 bits que consiste en los registros CCPR1L y CCPR1H. Se utiliza para capturar y comparar sus valores con los números almacenados en el registro del temporizador Timer1 (TMR1H y TMR1L).

 Si está habilitado por software, puede ocurrir el reinicio del temporizador Timer1, al igualarse los valores en modo de Comparación. El módulo CCP1 puede generar señales PWM de frecuencia y de ciclo de trabajo variados.
 




CCP1 EN MODO DE CAPTURA


 En este modo, el registro del temporizador Timer1 (que consiste en los TMR1H y TMR1L) se copia al registro CCP1 (que consiste en los CCPR1H y CCPR1L).
-El pin RC2/CCP1 debe estar configurado como entrada. 
-El Timer 1 debe funcionar como temporizador o contador síncrono.





Detención de flancos 

 Cada flanco ascendente (1 -> 0) en el pin RC2/CCP;
Cada flanco descendente (0  -> 1) en el pin RC2/CCP1;
Cada cuatro flanco ascendente (0  -> 1) en el pin RC2/CCP1; y
Cada decimosexto flanco descendente (0 -> 1) en el pin RC2/CCP1.


 En caso de que el módulo CCP1 esté en modo de captura, puede producirse una interrupción no deseada. Para evitarlo, antes de que ocurra un cambio en el registro de control se deben poner a 0 tanto el bit que habilita la interrupción CCP1IE, como el bit de bandera CCP1IF. 


 Las interrupciones no deseadas pueden producirse al cambiar el valor del pre-escalador. Para evitarlo, el módulo CCP1 debe estar apagado temporalmente antes de cambiar el valor del pre-escalador.




CONFIGURACIÓN DE CCP1CON


  • El valor para seleccionar modo de CAPTURA es  0b 000001xx 
  • El valor para seleccionar modo de COMPARACION es 0b000010xx 



MODULO CCP2


 Con exclusión de los nombres diferentes de los registros y de los bits, este módulo es similar del módulo CCP1 operando en modo normal.

 La única diferencia significativa entre ellos es el funcionamiento en modo de comparación del módulo CCP2. La diferencia se refiere a la señal de reinicio del temporizador T1. 

Si el convertidor A/D está habilitado, al igualarse los valores de los registros TMR1 y CCPR2, la señal de reinicio del temporizador T1 iniciará automáticamente la conversión A/D.




El registro CCP2CON. 

Es similar al módulo anterior, este circuito también está bajo el control de los bits del registro de control. Esta vez es el registro CCP2CON.



Bits 5, 4: (bits menos significativos del ciclo de trabajo de PWM), se utilizan sólo en modo PWM y representan dos bits menos significativos de un número de 10 bits. Este número determina el ciclo de trabajo de la señal PWM. Los demás 8 bits se almacenan en el registro CCPR2L. 


 Bits 3-0:(bits de selección de modo del módulo CCP2) determina el modo del módulo CCP2.


REGISTRO CCP2CON







martes, 19 de julio de 2016

Timer 0


El Timer 0 es un circuito síncrono, temporizador/contador ascendente de 8 bits, cuando trabaja con el reloj del PIC se le suele llama temporizador y cundo los pulsos los recibe de una fuente externa a través de la patilla RA4/TOCKI se le llama contador.



 Generación de interrupción opcional en el desbordamiento. 


 Selección del flanco para el reloj externo.

Se debe configurar así:

1. Ingresar al banco 1
2. Configurar el timer 0 (Contador o timer)
3. Regresar al banco 0 4. Cargar el valor del timer 0 (iniciar la cuenta)


 Cuando el modulo funciona como temporizador el registro TMR0 se incremente en cada ciclo de instrucción (Sin preescalamiento).


 Cuando se escribe el registro TMR 0, el microcontrolador debe esperar 2 ciclos para la instrucción para que comience a contar.
 Como se aprecia en la parte superior derecha está presente un MUX. El MUX es controlado por el bit TOCS, si es 0 el modulo opera como temporizador; si es 1 como contador de eventos. 


 El bit TOCS pertenece al registro OPTION_REG y es el bit 5. 


 Cuando el modulo trabaja como contador de eventos del registro TMR 0 incrementa su valor cada vez que aparece un flanco en el pin RA4/TOCKI. 


 La selección del tipo de flanco (Subida o bajada) dependerá de la programación del bit TOSE (registro OPTION_REG bit 4). Si TOSE es 0 trabaja con flanco de subida si es 1 con flanco de bajada. 



 El preescaler es mutuamente excluyente y compartido por el TIMER 0 y el Watchdog. No es leíble ni escribible. El preescaler es como un divisor de frecuencia programable. Como se aprecia puede conectarse en serie al módulo TIMER 0 (dependiendo de los valores de TOCS y PSA). Supongamos que el módulo TIMER 0 funciona como contador de eventos y el preescaler está habilitado. 
 Si el valor es 1:1, eso significa que cada pulso que ingrese incrementara el valor en el registro TMR 0 (el valor máximo de cuentas será 256). Si el preescaler vale 1:8 por cada 8 eventos que sucedan solo aumentara una cuenta del registro TMR 0 (el valor máximo de cuentas será 8x256). 


 El valor del preescaler depende de los bits PS2 (bit 2), PS1 (bit 1) y PS0 (bit 0) del registro OPTION_REG. El bit PSA (bit 3) del registro INTCON define si el preescaler funciona con el watchdog o con el TIMER 0. 


 • PS0, PS1 y PS2: Configuración del preescaler. El preescaler es un divisor de pulsos que está a la entrada del Timer-contador. El prescaler divide el número de pulsos que le entran al timer-contador o al Wachtdog. El factor de división es el siguiente (según los valores de PS2, PS1 y PS0 respectivamente 

 • PSA: Bit de asignación de prescaler. Si está a "1" el prescaler se asigna a WDT (Wachtdog), si está a "0" se asigna al TMR0. 

• TOSE: Bit de selección del tipo de flanco para el TMR0. A "1" se incrementa TMR0 por flanco descendente de RA4, a "0" se incrementa TMR0 por flanco ascendente de RA4. 

• TOCS: Selecciona la entrada de reloj de TMR0. A "1" la entrada de reloj de TMR0 es por flanco de la patilla RA4, a "0" la entrada de reloj de TMR0 es por ciclo de reloj interno. 

 Pero el PIC también permite que se produzca una interrupción por desbordamiento del TMR0. 


Cuando se produce una interrupción el programa abandona temporalmente lo que estaba haciendo para atender la subrutina de interrupción, pero antes guarda en una región especial de la memoria llamada pila la dirección de la siguiente instrucción de programa, para que cuando acabe la subrutina de interrupción pueda seguir ejecutando el programa por donde se había quedado.

 El registro que configura todas las interrupciones es el INTCON, como veis está mapeado en los dos bancos, una cosa muy útil cuando se trabaja en ensamblador para no tener que cambiar de banco constantemente para su configuración, pero que en C no es necesario saber ya que es el compilador el que se encarga de gestionar esto de una manera transparente para el programador. 

 Bueno como veis hay varias variables que podemos utilizar a nuestro antojo para utilizar este recurso del PIC, la fórmula que las relaciona es la siguiente:





Timer 1

El Timer1 es un temporizador/contador ascendente parecido al TMR0, pero con algunas peculiaridades que lo hacen muy interesante a la hora de incluir temporizaciones en nuestros programas.
La primera de ellas, es que se trata de un contador de 16 bits cuyo valor se almacena en dos registros de 8 bits el TMR1H y el TMR1L, ambos registros se pueden leer y escribir su valor durante la ejecución del programa.

Cuando el Timer1 está habilitado, el valor de esos registros se incrementan desde 0000h a FFFFh y una vez que llega a su máximo valor empieza otra vez desde 0 avisándonos de ello por medio de la bandera TMR1F .
Si está activa la interrupción por desbordamiento del Timer 1 al desbordarse el contador, el programa entra en la función de tratamiento a la interrupción por desbordamiento del Timer1.

El diagrama de bloques es el siguiente:




 PRINCIPALES CARACTERÍSTICAS DEL TMR1


Algunas características de este Timer son las siguientes:  
·         El Timer1 puede funcionar con un oscilador externo y trabajar a una frecuencia distinta a la del oscilador principal del PIC.
·         Al igual que el TMR0 el Timer1 puede operar en dos modos: como temporizador y como contador. El modo de funcionamiento está determinado por el tipo de reloj seleccionado (interno -->temporizador, externo -->contador), lo configuramos por medio del bit TMR1CS del registro TICON. Cuando está en modo contador su valor se incrementa en cada flanco de subida de la señal de reloj externa.
·         El tiempo que se tarda en incrementarse el contador se le suele llamar paso, el paso del contador depende de la frecuencia del oscilador y del prescaler seleccionado.
·         La fórmula para determinar los tiempos del Timer1 cuando es utilizado como temporizador (Reloj interno) es la siguiente:


·         El paso del contador vendrá determinado por:


Paso_Contador= 4/Frecuencia Oscilación.Prescaler

·         El Timer1 se puede habilitar o deshabilitar por medio del bit TMR1ON del registro T1CON.
·         Posee un pre-escalador de 3 bits
·         Funcionamiento síncrono o asíncrono
·         Interrupción opcional de desbordamiento de FFFFh a 0000h
·         Posible reiniciación desde módulos CCP
·         Fuente de reloj para módulo de captura/comparación


Un dibujo con los bits de configuración del registro TICON, lo tenéis en la figura de abajo:




COMPUERTA DE TEMPORIZADOR TMR1
El pin TG1 o la salida del comparador C2 pueden ser una fuente de los pulsos que pasan por la compuerta del temporizador Timer1. Se configuran por software. Esta compuerta permite que el temporizador mida directamente la duración de los eventos externos al utilizar el estado
lógico del pin T1G o los eventos analógicos al utilizar la salida del comparador C2. Para medir
duración de señal, basta con habilitar esta compuerta y contar los pulsos que pasan por ella.

 

REGISTRO DE CONTROL DEL TMR1


T1GINV= Inversor de compuerta del TMR1
TMR1GE= Determina si la compuerta formada por el pin T1G o salida del comparador C2  C2OUT) estará activa o no.
T1CKPS1  Y T1CKPS0=  Selección de rango del divisor de frecuencias
T1OSCEN=Selección de entradas cuando impulsos proceden de reloj externo
T1SYNC=Selección de fuente de impulsos de contaje.
TMR10N= Permisos de prohibición y funcionamiento


PRE-ESCALADOR DEL TMR1
Este es un simple divisor de frecuencias que funciona según el estado de T1CKPS1 y T1CKPS0

T1CKPS1
T1CKPS0
RANGO DEL PREDIVISOR
0
0
1:1
0
1
1:2
1
0
1:4
1
1
1:8

SELECCIÓN DE FUENTE DE RELOJ
El bit TMR1CS del registro T1CON selecciona la fuente de reloj de la siguiente manera:

 

TMR1 EN MODO CONTADOR
El temporizador Timer1 se pone a funcionar como un contador al poner a 1 el bit TMR1CS. Este bit cuenta los pulsos llevados al pin PC0/T1CKI y se incrementa en el flanco ascendente de la entrada del reloj externo T1CKI. Si el bit de control T1SYNC del registro T1CON se pone a 0, las entradas del reloj externo se sincronizarán en su camino al temporizador Timer1.
En otras palabras, el temporizador Timer1 se sincroniza con el reloj interno del microcontrolador y se le denomina contador síncrono.
Al poner en modo de reposo el microcontrolador que funciona de esta manera, los registros del temporizador Timer1H y TMR1L no serán incrementados aunque los pulsos de reloj aparezcan en los pines de entrada. Como el reloj interno del microcontrolador no funciona en este modo, no hay entradas de reloj que se utilicen para la sincronización. De todas formas, el pre-escalador sigue funcionando siempre que haya pulsos de reloj en los pines, porque es un simple divisor de 
frecuencias.