Pièce jointe « capitulo1j.sgml »

Téléchargement

        <sect1 id="timer1" xreflabel="timer1">
                <title>M&oacute;dulo timer1</title>
                <para>Autor: Santiago Gonzalez</para>
                <para>Correo: santigoro en gmail.com</para>
                <para>Aqu&iacute; se muestran las funciones para trabajar con el timer1 de los PIC16F.
                </para>

                <sect2 id="timer1init" xreflabel="timer1_init">
                <title>timer1_init</title>
                <para>
        Inicializa timer1 con reloj interno (modo timer) o externo (modo counter).
        El modo counter puede ser sincronizado con el reloj del pic o as&iacute;ncrono.
        </para>
                <screen>
        void timer1_init(unsigned char set_mode);
                </screen>
                <para>
                set_mode Establece el modo de funcionamiento.
                </para>
                <screen>
        TIMER_INTERN    :Usa reloj interno.
        COUNTER_SYNC    :Usa reloj/est&iacute;mulo externo (modo counter), s&iacute;ncrono.
        COUNTER_ASYNC   :Usa reloj/est&iacute;mulo externo (modo counter), as&iacute;ncrono.

        timer1_init(TIMER_INTERN);
                </screen>
                <para>
                Pone a 0 la cuenta del timer1 y borra flag de interrupciones.
                </para>
                </sect2>

                <sect2 id="timer1enable" xreflabel="timer1_enable">
                <title>timer1_enable</title>
                <para>Habilita (inicia la cuenta) el timer1.</para>
                <screen>
        #define timer1_enable()     T1CONbits.TMR1ON = 1
                </screen>
                <para>
                En modo timer el contador se incrementa en cada ciclo de intrucciones (Fosc./4)
                si no se usa el prescaler.
        En modo COUNTER el incremento se produce en el flanco de subida
        de la señal de referencia.
                </para>
                </sect2>


                <sect2 id="timer1disable" xreflabel="timer1_disable">
                <title>timer1_disable</title>
                <para>Deshabilita (para la cuenta) el timer1.</para>
                <screen>
        #define timer1_disable()    T1CONbits.TMR1ON = 0
                </screen>
                </sect2>


                <sect2 id="timer1oscenable" xreflabel="timer1_osc_enable">
                <title>timer1_osc_enable</title>
                <para>Habilita el uso de oscilador externo, conectado entre T1OSO y T1OSI.</para>
                <screen>
        #define timer1_osc_enable()     T1CONbits.T1OSCEN = 1
                </screen>
                <para>
                Los pines T1OSO y T1OSI son configurados como entradas, 
        ingnorando la configuraci&oacute;n de TRIS de esos pines.
        Se toma el flanco de subida de la señal en T1OSI.
                </para>
                </sect2>


                <sect2 id="timer1oscdisable" xreflabel="timer1_osc_disable">
                <title>timer1_osc_disable</title>
                <para>Deshabilita el uso de oscilador externo.</para>
                <screen>
        #define timer1_osc_disable()    T1CONbits.T1OSCEN = 0
                </screen>
                <para>
        En este caso se toma el flanco de subida de la señal en T1OSO.
                </para>
                </sect2>


                <sect2 id="timer1setprescaler" xreflabel="timer1_set_prescaler">
                <title>timer1_set_prescaler</title>
                <para>
                Establece el valor del prescaler.
                </para>
                <screen>
        void timer1_set_prescaler(unsigned char set_presc);
                </screen>
                <para>set_presc Establece el valor del prescaler.</para>
                <para>Las posibles opciones son: </para>
                <screen>
        T1_PRESC_DIV_1  // Frecuencia de ciclo de instrucciones (FOSC/4)
        T1_PRESC_DIV_2  // (FOSC/4) del PIC dividido entre 2
        T1_PRESC_DIV_4  // (FOSC/4) del PIC dividido entre 4
        T1_PRESC_DIV_8  
                </screen>
                <para>
                Cualquier operaci&oacute;n de escritura en el registro TMR1L ó TMR1H automaticamente
                pone a 0 el contador del prescaler, aunque mantiene su configuraci&oacute;n.
                </para>
                </sect2>


                <sect2 id="timer1write" xreflabel="timer1_write">
                <title>timer1_write</title>
                <para>Establece (escribe a TMR1L y TMR1H) el valor del contador del timer1.</para>
                <screen>
        void timer1_write(unsigned int set_count);
                </screen>
                <para>set_count Establece el valor del contador del timer1.</para>
                </sect2>


                <sect2 id="timer1read" xreflabel="timer1_read">
                <title>timer1_read</title>
                <para>Lee el valor del contador del timer1.</para>
                <screen>
        unsigned int timer1_read(void);
                </screen>
                <para>Devuelve un valor de tipo int (16 bites).</para>
                </sect2>

                <sect2 id="ejemplotimer1" xreflabel="Ejemplo timer1">
                <title>Ejemplo M&oacute;dulo timer1</title>
                <para> para compilar necesitas los siguientes comandos </para>
                <para>
                <screen>
Ejemplo de compilacion : ./compila.sh ej_timer1.c 16f877a
                </screen>
                </para>
                <para> ej_timer1.c </para>
                <screen>
/**
 *  \file 
 *  \brief Ejemplo para trabajar con timer1.h
 *  \author     Santiago Gonzalez
 *  \date       Enero-2009
 *  \version    v0.01
 *  \par Leeme:
 *  Diagrama Esquematico: PIC_GCC_LIBRARY_PATH/schematics/pdf/
 *  Ejemplo de compilacion : ./compila.sh ej_timer1 16f877a . 
 *  Ejemplo de utilizaci&oacute;n de las funciones del m&oacute;dulo TIMER1.
 *  v&aacute;lido para la familia 16f,
 *  En este ejemplo se utiliza el timer1 junto con un contador por software,
 *  para hacer un led parpadeante que var&iacute;a en velocidad: 
 *  conectar un led u otra salida a RB7.
 *  El led parpadear&aacute; en r&aacute;fagas de 10, acelerando su velocidad en cada r&aacute;faga,
 *  a 4 velocidades distintas, correspondientes a los 4 posibles valores del prescaler.
 */

#include &lt;pic/p16f877a.h>
#include &lt;timer1.h>

void parpadeo()                             // Rutina que hace 10 parpadeos de led
{
    unsigned char contador = 0;

    while ( contador < 10 )
    {
        while (timer1_read() < 32767)      // mitad del tiempo encendido
            PORTBbits.RB7 = 1;

        while (timer1_read() > 32767)      // mitad del tiempo apagado
            PORTBbits.RB7 = 0;

        contador++;
    }  
}

int main(void) 
{       
    TRISBbits.TRISB7 = 0;                 // RB7 como salida
    PORTBbits.RB7 = 0;

    timer1_init(TIMER_SYNC);              // Inicia timer1 modo timer

bucle:

    timer1_set_prescaler(T1_PRESC_DIV_8); // Establece prescaler en frecuencia de instrucciones / 8
    timer1_enable();                      // Inicia la cuenta
    parpadeo();                           // LLama a la rutina que hace 10 parpadeos
    timer1_disable();                     // Para el timer1
    timer1_write(0);                      // Pone timer1 a 0

    timer1_set_prescaler(T1_PRESC_DIV_4); // Establece prescaler en frecuencia de instrucciones / 4
    timer1_enable();
    parpadeo();
    timer1_disable();
    timer1_write(0);

    timer1_set_prescaler(T1_PRESC_DIV_2); // Establece prescaler en frecuencia de instrucciones / 2
    timer1_enable();
    parpadeo();
    timer1_disable();
    timer1_write(0);

    timer1_set_prescaler(T1_PRESC_DIV_1); // Establece prescaler en frecuencia de instrucciones / 1
    timer1_enable();
    parpadeo();
    timer1_disable();
    timer1_write(0);

    goto bucle;

}

                </screen>
        </sect1>

Fichiers joints

Pour vous référer aux pièces jointes d'une page, utilisez attachment:filename, comme indiqué ci-dessous dans la liste de fichiers. N'utilisez pas l'URL du lien [get], car elle peut changer et donc être facilement cassée.
 Tous les fichiers | Fichiers sélectionnés supprimer déplacer vers la page copier vers la page

Vous n'êtes pas autorisé à joindre un fichier à cette page.

Site hébergé sur un Cloud Public IKOULA Ikoula