Pièce jointe « capitulo1f.sgml »

Téléchargement

        <sect1 id="adc" xreflabel="adc">
                <title>M&oacute;dulo ADC</title>
                <para>Autor: Santiago Gonzalez</para>
                <para>Correo: santigoro en gmail.com</para>
                <para>
                        Entender la conversi&oacute;n Anal&oacute;gico-Digital: 
                        <ulink url="http://es.wikipedia.org/wiki/Conversion_analogica-digital">aqui</ulink>
                </para>
                <para>Aqu&iacute; se muestran las funciones para trabajar con el modulo ADC 10 bits Interno de los PIC16F87X.
                </para>
                <sect2 id="adcinit" xreflabel="adc_init">
                <title>adc_init</title>
                <para>
                Inicia el m&oacute;dulo ADC con la confiraci&oacute;n establecida 
                en los parametros de entrada: frecuencia de oscilador y configuraci&oacute;n de entradas.
                El m&oacute;dulo ADC quedar&aacute; configurado y listo para usar, pero ser&aacute; activado hasta 
                que se habra un canal para evitar consumo innecesario de corriente.</para>
                <screen>
        void adc_init(unsigned char set_fosc, unsigned char set_channel);
                </screen>
                <para>set_fosc Establece la frecuencia de adc.</para>
                <para>Las posibles opcines son: </para>
                <screen>
        FRECUENCIA DE OSCILADOR ADC:

        FOSC_DIV_2      // Frecuencia de oscilador del PIC / 2
        FOSC_DIV_4      
        FOSC_DIV_8      
        FOSC_DIV_16     
        FOSC_DIV_32     
        FOSC_DIV_64     
        FOSC_RC // Oscilador interno del m&oacute;dulo ADC
                </screen>
                <para>
                set_channel Define que pines se usar&aacute;n como entradas anal&oacute;gicas
                o como Vref externa.
                Cuando solo se define un pin como voltaje de referencia, este ser&aacute; Vref+, 
                referencia positiva y estar&aacute; en RA3, cuando se definen dos entradas como Vref
                la positiva ser&aacute; RA3 y la negativa RA2.</para>
                <para>Las posibles opcines son: </para>
                <screen>
        CONFIGURACION DE ENTRADAS Y Vref(PCFG en ADCON1) 
        
        A8_R0           // 8 entradas Anal&oacute;gicas y 0 como Vref (Vref+ = Vdd , Vref- = Ground)
        A7_R1           // 7 entradas anal&oacute;gicas y Vref+ en AN3
        A5_R0            
        A4_R1   
        A3_R0   
        A2_R1   
        A0_R0   
        A6_R2           // 6 entradas Anal&oacute;gicas, Vref+ en AN3 y Vref- en AN2
        A6_R0
        A5_R1   
        A4_R2   
        A3_R2   
        A2_R2
        A1_R0   
        A1_R2   
                </screen>
                <para>
                Consultar el Datasheet del pic utilizado para ver canales diponibles,
                no se deben inicializar canales no implementados en el modelo de pic a usar,
                por ejemplo, el pic16f876a solo tiene 5 canales ADC, nunca usar A6_R0 en este pic.
                </para>
                </sect2>


                <sect2 id="adcsetchannel" xreflabel="adc_set_channel">
                <title>adc_set_channel</title>
                <para>Establece configuraci&oacute;n de pines de entrada ADC y Vref</para>
                <screen>
        void adc_set_channel(unsigned char set_channel);
                </screen>
                <para>
                set_channel Define que pines se usar&aacute;n como entradas anal&oacute;gicas
                o como Vref externa.
                Cuando solo se define un pin como voltaje de referencia, este ser&aacute; Vref+, 
                referencia positiva y estar&aacute; en RA3, cuando se definen dos entradas como Vref
                la positiva ser&aacute; RA3 y la negativa RA2.</para>
                <para>Las posibles opcines son las mismas que en adc_init: A2_R1 , etc. </para>
                </sect2>


                <sect2 id="adcopen" xreflabel="adc_open">
                <title>adc_open</title>
                <para>Abre canal seleccionado y activa m&oacute;dulo ADC</para>
                <screen>
        void adc_open(unsigned char channel);
                </screen>
                <para>channel Establece el canal ADC a leer</para>
                <para>Las posibles opciones son: </para>
                <para>
                <screen>
        CHANNEL_0  
        CHANNEL_1  
        CHANNEL_2  
        CHANNEL_3  
        CHANNEL_4  
        CHANNEL_5  
        CHANNEL_6  
        CHANNEL_7 
                </screen>
                </para>
                </sect2>


                <sect2 id="adcread" xreflabel="adc_read">
                <title>adc_read</title>
                <para>Lee un canal previamente abierto</para>
                <screen>
        unsigned int adc_read(void);
                </screen>
                </sect2>


                <sect2 id="adcclose" xreflabel="adc_close">
                <title>adc_close</title>
                <para>Cierra m&oacute;dulo ADC.</para>
                <screen>
        void adc_close(void);
                </screen>
                <para>
                La configuraci&oacute;n queda tal como se inicializ&oacute; la &uacute;ltima vez,
                se puede volver a activar el m&oacute;dulo ADC mediante adc_open(channel), 
                sin ejecutar adc_init()
                </para>
                </sect2>


                <sect2 id="ejemploadc" xreflabel="Ejemplo ADC">
                <title>Ejemplo de M&oacute;dulo ADC</title>
                <para> para compilar necesitas los siguientes comandos </para>
                <para>
                <screen>
Ejemplo de compilacion : ./compila.sh ej_adc_87Xa.c 16f877a
                </screen>
                </para>
                <para> ej_adc_87Xa.c </para>
                <screen>
/*
Ejemplo de utilizaci&oacute;n de las funciones del m&oacute;dulo ADC.
v&aacute;lido para la familia 16f87Xa,
Se utiliza el canal 0, 
conectar los voltajes a convertir 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 mayor que 1/2 Vdd.
*/
#include &lt;pic/p16f877a.h>
#include &lt;adc.h>

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

        adc_init( FOSC_DIV_32, A1_R0);          // Inicializa m&oacute;dulo ADC
        adc_open(CHANNEL_0);                    // Abre canal 0 ADC

        while (1)
        {       
                if (adc_read() > 512 )
                        PORTBbits.RB7 = 1;      // Enciende led
                else
                        PORTBbits.RB7 = 0;      // Apaga led
        }       
}
        </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