¿Cuál es la diferencia entre TCCR1A y ​​TCCR1B [cerrado]

Tuve un error en la configuración de PWM para el atmega8 porque no configuré mi registro correctamente. Pero pensé que el temporizador 1 es el temporizador 1, sin importar si es TCCR1A o TCCR1B. ¿Por qué puedo configurar todo el temporizador 1 usando solo TCCR1A de esta manera?

TCCR1A  = ((1 << COM1A1) | (1 << COM1A0) (1 << CS11) | (1 << WGM13) );

Ficha de datos

EDITAR: Estaba confundido por el hecho de que TCCR1A y ​​TCCR1B son registros diferentes que están configurados para el mismo temporizador.

Tus preguntas no me quedan claras. Por favor escriba más detalladamente y explique mejor. Además, el chip atmega específico y un enlace a la hoja de datos siempre es algo bueno para agregar a la pregunta.
Hice mi mejor esfuerzo para explicarlo arriba. Básicamente, por qué no puedo hacer PWM así: TCCR1A = ((1 << COM1A1) | (1 << COM1A0) (1 << CS11) | (1 << WGM13) );

Respuestas (2)

En primer lugar, creo que te perdiste un |símbolo:

TCCR1A  = ((1 << COM1A1) | (1 << COM1A0) (1 << CS11) | (1 << WGM13) );

TCCR1A  = ((1 << COM1A1) | (1 << COM1A0) | (1 << CS11) | (1 << WGM13) );

Segundo:

  • Bits COM1A1y COM1A0están en registroTCCR1A
  • Bits CS11y WGM13están enTCCR1B

TCCR1Ay TCCR1Bson registros diferentes, pero funcionan en el mismo temporizador, timer1. Configuran un comportamiento diferente y se ubican en registros separados, simplemente porque todos los bits no caben en un solo byte.

Observe que COM1A1es simplemente un alias para el número 7, por lo que es un COM1A0alias para el número 6, WGM13es un alias para el número 4y CS11para 1. Depende de usted, el usuario, verificar si está escribiendo los bits correctos en los registros correctos. El compilador no verifica esto por usted.

Por ejemplo, las siguientes tres líneas tendrán el mismo código ensamblador resultante:

TCCR1A = ( 1 << COM1A1 );
TCCR1A = ( 1 << PB7 );
TCCR1A = ( 1 << ICNC1 );

Las tres líneas darán como resultado las siguientes dos instrucciones de montaje idénticas:

ldi r24, 0x80
out 0x2F, r24

TCCR1(A|B) no se puede acceder como un solo registro de 16 bits como TCNT1(H|L)can.

Wow, gracias, esta era la respuesta que estaba buscando.

Creo que te falta configurar el registro de dirección de datos del pin de salida PWM en salida (DDRx) y se debe configurar un valor en el ICR1.

De la hoja de datos sobre DDR:

"Si uno o ambos bits COM1B1:0 se escriben en uno, la salida OC1B anula la funcionalidad de puerto normal del pin de E/S al que está conectado. Sin embargo, tenga en cuenta que el bit de registro de dirección de datos (DDR) correspondiente al Se debe configurar el pin OC1A o OC1B para habilitar el controlador de salida".

Por lo tanto, debe configurar DDR al configurar los bits COM1A1 y COM1A0.

De la hoja de datos sobre el conteo:

"En el modo PWM de corrección de fase y frecuencia, el contador se incrementa hasta que el valor del contador coincide con el valor en ICR1 (WGM13:0 = 8)"

Esto significa que el registro ICR1 en su caso será el valor que debe ajustar ya que solo configuró WGM13:

ICR1 WGM13