Saltar al contenido principal
LibreTexts Español

29.5: Interrupciones internas — Modo CTC

  • Page ID
    82313
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Este ejemplo también implica cambiar un pin de salida arbitrario, aunque el pin OCNx podría ser cuggybacked si se desea. En lugar de PWM, este ejemplo varía la frecuencia de una onda cuadrada usando el modo Clear Timer on Compare (CTC). Este modo simplemente cuenta hasta el valor almacenado en el registro de coincidencia de comparación de salida (OCR2A) y luego se restablece de nuevo a cero.

    /* Timer/Counter Interrupt Example
       Uses CTC mode (Clear Timer on Compare)
    */
    
    #define ARBPINMASK 0x01
    #define COMPARE_MATCH 128
    
    void setup()
    {
        DDRB |= ARBPINMASK;
    
        // enable output driver for OC2A for piggyback!
        DDRB |= 0x08;
    
        TCCR2A = (1<<COM2A0); // non PWM, OC2A pin toggle on compare match
        TCCR2A |= (1<<WGM21); // add CTC mode, Top=OCR2A
    
        TCCR2B = 0x07;        // 1024x prescale
    
        OCR2A = COMPARE_MATCH;
    
        TIMSK2 = (1<<OCIE2A); // enable compare match interrupt
    }
    
    ISR(TIMER2_COMPA_vect)
    {
        PORTB ^= ARBPINMASK;
    }
    
    void loop()
    {
    }
    

    Tenga en cuenta que se debe establecer un nuevo bit en el registro de máscara de interrupción del temporizador/contador, a saber OCIE2A (Activación de interrupción de comparación de salida para la unidad 2A). El Registro de Comparación de Salida (OCR2A) se establece con un valor fijo pero nuevamente, esto podría ser establecido por una variable. Un valor COMPARE_MATCH de 128 produce una frecuencia de onda cuadrada de un poco más de 60 Hz. Al reducir a la mitad el valor a 64, aproximadamente se duplicará la frecuencia hasta aproximadamente 120 Hz.


    This page titled 29.5: Interrupciones internas — Modo CTC is shared under a CC BY-NC-SA 4.0 license and was authored, remixed, and/or curated by James M. Fiore via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.