Pièce jointe « capitulo1g.sgml »
Téléchargement<sect1 id="comp" xreflabel="comp"> <title>Módulo Comparadores.</title> <para>Autor: Santiago Gonzalez</para> <para>Correo: santigoro en gmail.com</para> <para> Aquí 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ódulo comparadores</para> <screen> void comp_init(unsigned char set_config)); </screen> <para>set_config Define entradas analó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ún: RA3 TWO_COMP_COMREF_OUT // Dos comparadores, entrada comú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ó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ú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ó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ó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ón resetea el módulo Comparadores,</para> <para>el módulo queda activo pero la lecturá será 0.</para> <screen> void comp_reset(void); </screen> </sect2> <sect2 id="compoff" xreflabel="comp_off"> <title>comp_off</title> <para> Esta función apaga el mó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ó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ón de las funciones del módulo comparadores. * vá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á en estado alto (Vdd) cuando la tensión en RA0 sea menor que el 50% de Vdd. */ #include <pic/p16f877a.h> #include <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.Vous n'êtes pas autorisé à joindre un fichier à cette page.