atmega32u4 generar reloj usando timer4

0

Tengo un atmega32u4 con 8Mhz e intento generar una señal de reloj con 1,2 o 4 MHz usando el temporizador 4 y enviarlo en PD6 (! OC4D)

Para el temporizador 1 y en PB5 (OC1A) usé el modo CTC:

TCNT1=0;

// Toggle OC1A on Compare Match
TCCR1A = 0x00;
bitSet(TCCR1A, COM1A0);

// Clear Timer on Compare Match
TCCR1B = 0x00;
bitSet(TCCR1B, WGM12);


//8Mhz
// Set frequency (0 = 4Mhz, 1 = 2MHz, 3 = 1MHz)
OCR1A = <value>;

// No prescaling
bitSet(TCCR1B, CS10);

pero timer4 no tiene este CTC para OC4D (¿o me equivoqué de la hoja de datos?)

¿Hay otra forma de crear esa salida?

    
pregunta Steve

1 respuesta

0

Encontré la siguiente solución para el problema:

// reset timer4
OCR4C = 0;
OCR4D = 0;

TCCR4A = 0x00;
TCCR4B = 0x00;
TCCR4C = 0x00;
TCCR4D = 0x00;

TCNT4=0;

// Toggle OC4D on Compare Match | enable PWM
TCCR4C = _BV(COM4D0) | _BV(PWM4D);


// Clear Timer on Compare Match
TCCR4D = _BV(WGM41);

// set lock bit for sync update
TCCR4E = _BV(TLOCK4);

// Set compare value
OCR4C = CLOCKCYCLE*2;
OCR4D = CLOCKCYCLE;

// No prescaling
TCCR4B = _BV(CS10);
    
respondido por el Steve

Lea otras preguntas en las etiquetas