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) );
EDITAR: Estaba confundido por el hecho de que TCCR1A y TCCR1B son registros diferentes que están configurados para el mismo temporizador.
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:
COM1A1
y COM1A0
están en registroTCCR1A
CS11
y WGM13
están enTCCR1B
TCCR1A
y TCCR1B
son 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 COM1A1
es simplemente un alias para el número 7
, por lo que es un COM1A0
alias para el número 6
, WGM13
es un alias para el número 4
y CS11
para 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.
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:
nombreúnicoaquí
Napster