Paso 6: Configuración de temporizador/contador 0
Modo CTC puede utilizarse para conmutar la salida OC0A en Pin 2, Puerto B (pin físico 14). Para habilitar la salida de este pin, DDRB debe establecerse adecuadamente. El código de C para esto es igual a configurar una salida para un blinkenlight.DDRB = _BV(PB2); Puerto B2 es una salida.
El siguiente paso es suministrar una señal de reloj y cargar el registro de comparación de salida para producir una forma de onda como una frecuencia. La ecuación para la frecuencia que se da en la hoja de datos (página 72). Términos en la ecuación se describen a continuación. Aquí está la ecuación:
fOC0A = fclk_I/O / 2*N*(1+OCR0A)
Donde fOC0A: = frecuencia de salida
fclk_I/O: = frecuencia de la fuente de reloj
N: = reloj prescale factor
OCR0A: = valor de salida comparar registro de temporizador/contador de 0A.
Reloj de frecuencia de la fuente, fclk_I/O
Esta es la frecuencia de reloj del sistema. El valor predeterminado es 1 MHz. Bits CS00, CS01, y CS02 de TCCR0B control esta selección. Puesto que estos bits también selección el valor de N, se describe a continuación.
Valor del divisor, N
N es el valor utilizado para dividir o prescale, el reloj del sistema. CS01 y CS00 pedacitos y CS02 de TCCR0B controlan de esta selección. Tabla 41 en la página 81 de la hoja de datos del ATtiny2313 describe las combinaciones. Puesto que se desea una frecuencia de 1kHz, bits CS00 y CS01 de TCCR0B se establecerá. Tenga en cuenta que establecer todos los bits de tres en 0, por lo tanto selección de ningún reloj, detiene efectivamente la salida. Este es el método que se utilizará para iniciar y detener la señal sonora.
Valor superior, OCR0A
Este valor es el valor superior para el contador que se carga en la salida de comparar registro de temporizador/contador 0A. Cuando se alcanza este valor, el contador volverá a cero y contando comenzará otra vez hasta que se alcanza la parte superior y el ciclo se repite. SUPERIOR se modifica fácilmente, por lo que la frecuencia de la alarma es fácil de cambiar. Puesto que se desea una frecuencia de cerca de 1 kilociclo, TOP se establece en 7. (Nota el prescaler podría haber establecido en 8, y parte superior situado a 63. Mismo resultado - su opción.)
Frecuencia de salida, fOC0A
Utilizando la ecuación para calcular los resultados de frecuencia de salida en:
fOC0A = 1.000.000 / 2 * 64 * (1 + 7)
fOC0A = 977Hz
Lo suficientemente cerca! Aquí está el código para cargar el registro salida de comparar y la 0B Timer Counter Control Register. Consulte el código real del programa para comprender cómo se utilizan.
OCR0A = 7; Valor de tiempo
TCCR0B = _BV(CS01) | _BV(CS00); Seleccione reloj interno y prescaler = 8
TCCR0B = 0; ninguna fuente de reloj apaga el tono
Ajustar el modo de contador de tiempo
Como último detalle, especificamos el modo de temporizador/contador que deseamos poniendo brocas adecuadas en 0A Timer/Counter Control Register. Se selecciona el modo CTC por bit de configuración WGM01 como se describe en la tabla 40, página 79 de la hoja de datos. Ya que queremos que la salida a alternar cada ciclo, pedacito de COM0A0 también es necesario como se describe en la tabla 34 en la página 77. Aquí está el código:
TCCR0A = _BV(COM0A0) | _BV(WGM01); Modo de Toggle CTC