Pièce jointe « capitulo1f.sgml »
Téléchargement<sect1 id="adc" xreflabel="adc"> <title>Módulo ADC</title> <para>Autor: Santiago Gonzalez</para> <para>Correo: santigoro en gmail.com</para> <para> Entender la conversión Analógico-Digital: <ulink url="http://es.wikipedia.org/wiki/Conversion_analogica-digital">aqui</ulink> </para> <para>Aquí 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ódulo ADC con la confiración establecida en los parametros de entrada: frecuencia de oscilador y configuración de entradas. El módulo ADC quedará configurado y listo para usar, pero será 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ódulo ADC </screen> <para> set_channel Define que pines se usarán como entradas analógicas o como Vref externa. Cuando solo se define un pin como voltaje de referencia, este será Vref+, referencia positiva y estará en RA3, cuando se definen dos entradas como Vref la positiva será 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ógicas y 0 como Vref (Vref+ = Vdd , Vref- = Ground) A7_R1 // 7 entradas analógicas y Vref+ en AN3 A5_R0 A4_R1 A3_R0 A2_R1 A0_R0 A6_R2 // 6 entradas Analó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ó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án como entradas analógicas o como Vref externa. Cuando solo se define un pin como voltaje de referencia, este será Vref+, referencia positiva y estará en RA3, cuando se definen dos entradas como Vref la positiva será 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ó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ódulo ADC.</para> <screen> void adc_close(void); </screen> <para> La configuración queda tal como se inicializó la última vez, se puede volver a activar el módulo ADC mediante adc_open(channel), sin ejecutar adc_init() </para> </sect2> <sect2 id="ejemploadc" xreflabel="Ejemplo ADC"> <title>Ejemplo de Mó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ón de las funciones del módulo ADC. vá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á en estado alto (Vdd) cuando la tensión en RA0 sea mayor que 1/2 Vdd. */ #include <pic/p16f877a.h> #include <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ó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.Vous n'êtes pas autorisé à joindre un fichier à cette page.