Saltar al contenido principal
LibreTexts Español

28.2: Modo Normal

  • Page ID
    81928
  • \( \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}}\)

    El modo normal (WGM 22:0 son claros) es el modo de operación más simple. El TC simplemente cuenta hasta que se desborda y se vuelve a cero. En caso de desbordamiento, el indicador TOV2 (Timer Overflow) se establece en el registro de indicadores TIFR2. Más precisamente, este bit se establecerá en el mismo ciclo de reloj que cuando el registro temporizador/contador TCNT2 se convierte en cero. No hay restricciones de acceso en TCNT2. Su código podrá sobrescribir el contenido de este registro en cualquier momento con el fin de alterar el comportamiento de conteo.

    A continuación se muestra un ejemplo de código corto. El programa usa TC2 para crear un retardo de tiempo similar a la función delay (). Este retardo se utiliza entonces para parpadear un LED conectado a PORTB.0.

    /* Simple LED blinker using TC2 to create a time delay
       Active high LED connected to PORTB.0 */
    #define LEDMASK 0x01
    #define COUNTOFFSET 15
    
    void setup()
    {
        DDRB |= LEDMASK;
    
        TCCR2A=0;        // normal mode
        TCCR2B=0x07;     // 1024x prescale
    }
    
    void mydelay(int x)
    {
        while(x)
        {
            TCNT2=COUNTOFFSET;                //count up from here to 255 then overflow
            TIFR2=1<<TOV2;                    // clear flag, bit is set on overflow
            while( !(TIFR2&(1<<TOV2)) );      // wait for overflow bit
            x--;
        }
    }
    
    void loop()
    {
        PORTB |= LEDMASK;
        mydelay(120);
        PORTB &= ~LEDMASK;
        mydelay(30);
    }
    

    La función setup () establece la dirección para que salga el pin del controlador LED, coloca TC2 en modo normal y establece el preescalador de reloj en 1024. Esto significa que cada conteo ocurrirá a una velocidad apenas más lenta que 16 kHz dado el reloj de 16 MHz del Uno. La función mydelay () inicializa el registro principal del contador a un valor predefinido (COUNTOFFSET). Contará a partir de ahí hasta 255 tras lo cual se desbordará y establecerá el indicador TOV2. Nos aseguramos de que este bit esté claro antes de continuar usando el comando aparentemente hacia atrás TIFR2=1<<TOV2; Primero aparece que este comando debería establecer el bit flag pero de hecho lo borra (como se verifica en la documentación de Atmel). En este punto estamos ocupados-esperar en este bit esperando que se establezca. En este ejemplo tardará 241 recuentos en desbordarse o cerca de 15 milisegundos. Este proceso se itera entonces x veces para lograr un retardo más largo y variable. Tenga en cuenta que los valores más grandes de COUNTOFFSET producirán tiempos de parpadeo más cortos.


    This page titled 28.2: Modo Normal 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.