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.

