Hola, estoy haciendo un programa que me genere una señal PWM (Pulse-width modulation, lo que viene siendo una señal cuadrada). El programa lo tengo configurado así:
En este ejemplo que tengo hecho, el período de la señal PWM es de 1 milisegundo. Si quiero generar una señal PWM con un período de 1 segundo y con esta misma fuente de reloj, el valor que le debería meter a TA0CCR0 sería 999999, valor demasiado grande ya que el valor máximo de TA0CCR0=FFFFh=65535.
No sé como hacer esto, si alguien me puede ayudar sería de gran ayuda.
Un saludo y muchas gracias.
Código:
void configuroPWM(void)
{
P1DIR|=BIT6; //P1.6 como salida
P1SEL|=BIT6; //Permite al pin 1.6 ser salida especial-> TA0.1
//Timer0_A, capture: CCI1A input, compare: Out1 output
//A continuación, configuramos el Timer_A
TA0CCR0 = 999; //PWM de 1KHz, tiene un periodo de 1milisegundo.
TA0CCR1=500; // ciclo de trabajo (tiempo que la señal está a nivel alto) del 50%, la señal
//está a nivel alto 0.5milisegundos.
TA0CTL = TASSEL_2+MC_1; //Elegimos como fuente de reloj SMCLK(TASSEL_2) que nos //da una frecuencia de 1MHz
//y que cuente en modo ascendente. ACLK -> TASSEL_1. CAP=0, //estamos en modo comparación.
TA0CCTL1 = OUTMOD_7; //Configuramos la salida en modo Reset/Set
//la salida se pone a 0 cuando la cuenta llegue al valor de //TACCR1(duty cycle)
//y se pone a 1 cuando la cuenta llega al valor TACCR0 (periodo)
//si queremos un PWM de frecuencia 1Khz, por ejemplo, simplemente tendremos
//que dividir (frecuencia_del_reloj_elegido(en este caso SMCLK=1MHz)/1Khz)-1=TACCR0.
//En este caso, frecuencia_del_reloj_elegido=1.1MHz
//En este caso he elegido un duty cicle del 25%
}
void main(void) {
WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ; // SMCLK = DCO = 1MHz
configuroPWM();
_BIS_SR(LPM0_bits + GIE);
}
En este ejemplo que tengo hecho, el período de la señal PWM es de 1 milisegundo. Si quiero generar una señal PWM con un período de 1 segundo y con esta misma fuente de reloj, el valor que le debería meter a TA0CCR0 sería 999999, valor demasiado grande ya que el valor máximo de TA0CCR0=FFFFh=65535.
No sé como hacer esto, si alguien me puede ayudar sería de gran ayuda.
Un saludo y muchas gracias.