Pièce jointe « capitulo1g.sgml »

Téléchargement

        <sect1 id="comp" xreflabel="comp">
                <title>M&oacute;dulo Comparadores.</title>
                <para>Autor: Santiago Gonzalez</para>
                <para>Correo: santigoro en gmail.com</para>
                <para>
                Aqu&iacute; se muestran las funciones para trabajar 
                con los dos comparadores internos de los PIC16F87X.
                </para>


                <sect2 id="compinit" xreflabel="comp_init">
                <title>comp_init</title>
                <para>Inicia el m&oacute;dulo comparadores</para>
                <screen>
        void comp_init(unsigned char set_config));
                </screen>
                <para>set_config Define entradas anal&oacute;gicas y Vref,</para>
                <para>Las posibles opciones son: </para>
                <para>
                <screen> 
         COMP_RESET         
         COMP1_OUT              // Comparador 1 con salida por RA4
         TWO_COMP               // Dos comparadores independientes
         TWO_COMP_OUT           // Dos comparadores independientes, salidas por RA4 y RA5
         TWO_COMP_COMREF        // Dos comparadores con entrada com&uacute;n: RA3
         TWO_COMP_COMREF_OUT    // Dos comparadores, entrada com&uacute;n RA3, salidas RA4 RA5
     TWO_COMP_MULTI4_VREF   // Dos comparadores con Vref interna, 4 entradas multiplexadas
         COMP_OFF
                </screen>
                </para>
                </sect2>


                <sect2 id="compsetmultiplex" xreflabel="comp_set_multiplex">
                <title>comp_set_multiplex</title>
                <para>Establece que entradas son conectadas en el modo multiplexado </para>
                <screen>
        comp_set_multiplex(unsigned char set_switch);
                </screen>
                <para>set_switch determina que canales son multiplexados.</para>
                <para>Las posibles opciones son: </para>
                <screen>
         RA0_RA1           
         RA2_RA3
                </screen>
                </sect2>


                <sect2 id="compsetvref" xreflabel="comp_set_vref">
                <title>comp_set_vref</title>
                <para>Esta funci&oacute;n cambia el valor de Vref inerna, si previamente
                ha sido iniciado el uso de Vref interna con: comp_vref_mode().</para>
                <screen>
        void comp_set_vref(unsigned char set_vref);
                </screen>
                <para>
                set_vref determina el valor de Vref interna, en porcentaje de Vpp, 
                por ejemplo: comp_Vref_mode(RA0_RA1, VREF_65)
                activa las entradas RA0 y RA1 con Vref interna com&uacute;n al 65% de Vpp.
                Son válidos valores entre VREF_0 y VREF_75 , aunque en la práctica no 
                se obtendrán valores superiores a un 70% de Vdd y este módulo solo es capaz 
                de generar 30 valores distintos de Vref, así que el porcentaje seleccionado 
                se redondea al valor más próximo.
                La precisión es menor por debajo del 25% de Vdd.
                Para más detalles consultar el datasheet del pic utilizado. 
                </para>
                <para>
                Para comprobar el funcionamiento y exactitud de Vref interna se puede activar
                el bit 6 CVROE de CVRCON, quedando conectada Vref a RA2:
                </para>
                <screen>
                CVRCONbits.CVROE = 1;  //ahora Vref está presente en RA2
                </screen>
                <para>
                Esta salida se puede usar como fuente variable de voltaje (D-A), aunque de alta impedancia,
                para conseguir mayor capacidad de corriente se puede usar un amplificador operacional
                como segidor de voltaje.
                </para>
                </sect2>


                <sect2 id="compinv" xreflabel="comp_inv">
                <title>comp_inv</title>
                <para>Invierte o no las salidas de los comparadores</para>
                <screen>
        void comp_inv(unsigned char set_inv);
                </screen>
                <para>set_inv define si las salidas de comparadores se invierten o no</para>
                <para>Las posibles opciones son: </para>
                <para>
                <screen>
         NO_INV    
         C1_INV
         C2_INV
         C1_C2_INV 
                </screen>
                </para>
                </sect2>


                <sect2 id="comp1read" xreflabel="comp1_read">
                <title>comp1_read</title>
                <para>Esta funci&oacute;n lee la salida del comparador 1,
                los posibles valores son 0 o 1.</para>
                <screen>
        void comp1_read();
                </screen>
                </sect2>


                <sect2 id="comp2read" xreflabel="comp2_read">
                <title>comp2_read</title>
                <para>Esta funci&oacute;n lee la salida del comparador 2,
                los posibles valores son 0 o 1.</para>
                <screen>
        void comp2_read();
                </screen>
                </sect2>


                <sect2 id="compreset" xreflabel="comp_reset">
                <title>comp_reset</title>
                <para>Esta funci&oacute;n resetea el m&oacute;dulo Comparadores,</para>
                <para>el m&oacute;dulo queda activo pero la lectur&aacute; ser&aacute; 0.</para>
                <screen>
        void comp_reset(void);
                </screen>
                </sect2>


                <sect2 id="compoff" xreflabel="comp_off">
                <title>comp_off</title>
                <para>
                Esta funci&oacute;n apaga el m&oacute;dulo Comparadores,
                evitando el consumo innecesario de corriente.
                <screen>
        void comp_off(void);
                </screen>
                </para>
                </sect2>


                <sect2 id="ejemplocomp" xreflabel="Ejemplo comp">
                <title>Ejemplo de M&oacute;dulo Comparadores</title>
                <para> para compilar necesitas los siguientes comandos </para>
                <para>
                <screen>
Ejemplo de compilacion : ./compila.sh ej_comp_87Xa.c 16f877a
                </screen>
                </para>
                <para> ej_comp_87Xa.c </para>

                <screen>
/*
 *  Ejemplo de utilizaci&oacute;n de las funciones del m&oacute;dulo comparadores.
 *  v&aacute;lido para la familia 16f87Xa,
 *  En este ejemplo se utiliza el comparador 1 con Vref interna al 50% de Vdd, 
 *  conectar voltaje a comparar a RA0,
 *  conectar un led u otra salida a RB7.
 *  RB7 se pondr&aacute; en estado alto (Vdd) cuando la tensi&oacute;n en RA0 sea menor que el 50% de Vdd.
*/

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

int main(void) 
{       
    TRISAbits.TRISA0 = 1;           // A0 como entrada
    TRISAbits.TRISA3 = 1;           // A3 como entrada
    TRISBbits.TRISB7 = 0;           // B7 como salida


    comp_init( TWO_COMP_MULTI4_VREF ); // Inicia comparadores en modo multiplexado con Vref interna

    comp_set_vref( VREF_50 );         // Establece Vref en 50% Vdd

    while (1)
    {    
        if ( comp1_read() == 1 )    // lee comparador 1  = comprueba bit C1OUT de registro CMCON
            PORTBbits.RB7 = 1;      // Enciende led
        else
            PORTBbits.RB7 = 0;      // Apaga led
    }   
}
                </screen>
                </sect2>        

        </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