TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: ekaminante en 05 de Abril de 2005, 14:40:00

Título: programa A/D para un 877
Publicado por: ekaminante en 05 de Abril de 2005, 14:40:00
amigos necesito sensar temperatura y mostrala en un lcd, alguno de ustedes me puede ayudar con un programa que realice la conversion A/D?.  les agracezco.
Título: RE: programa A/D para un 877
Publicado por: gfp en 05 de Abril de 2005, 17:32:00
///////////////////////////// DIRECTIVAS DE PREPROCESADO /////////////////////////////
#include <16F876.h> // Dispositivo a utilizar
#device adc=8 // Resolución de 8 bits para el conversor ADC
#fuses HS,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT // Fusibles
#use delay(clock=10000000) // Velocidad del cristal
// Con la siguiente directiva,se optimiza código,ya que el compilador asume que en cada momento que accedemos al puerto B,
// este está configurado adecuadamente(como entrada ó como salida) para la acción que vamos a ejercer sobre él
// Si no añadimos esta directiva,cada vez que accedamos al puerto,el compilador generará código para
// asegurar que el puerto esté configurado como salida si lo que vamos a hacer es escribir en él y viceversa
#use fast_io(B)
////////////////////////////////////// GLOBALES //////////////////////////////////////
// Estos parámetros son visibles desde todo el código,por eso se les llama globales.
// Al ser constantes,lo más práctico es declararlas aquí.
   const int escala = 255; // Escala del conversor ADC (8 bits)
   const float v_max = 25.2; // Voltaje máximo que entrega mi fuente
////////////////////////////////////// RUTINAS ////////////////////////////////////////

   // Como se observa en la cabecera,los nombres de los parámetros no tienen por qué ser iguales
   // que los de la llamada ( calcula_voltaje(valor,voltaje) ),pero sí deben estar en el mismo
   // orden.
   // "voltaje",al ser de entrada-salida,debe llevar el símbolo "&" delante
   void calcula_voltaje(int val,float &voltaje)
   {
   // "escala" y "v_max" son parámetros globales,por eso son visibles dentro
   // de esta rutina(y en todo el código).Si no lo fueran,al no estar declarados dentro de ella ni
   // ser parámetros de entrada ó entrada-salida como los de la cabecera,se produciría
   // error al compilar
   voltaje = (val*v_max)/escala;
   }
/////////////////////////////////////// PRINCIPAL //////////////////////////////////////
void main()
{

   int valor; // La declaración de variables SIEMPRE debe ir lo primero
   float voltaje; //
   set_tris_B(0b00000000); // Puerto B configurado como salida
   port_b_pullups(FALSE); // Desactivamos pull-ups del puerto B
   setup_adc_ports(RA0_RA1_RA3_ANALOG); //Configura A0,A1 y A3 como entradas analógicas y Vdd como voltaje de referencia
   setup_adc(ADC_CLOCK_INTERNAL); // Reloj para el conversor
   set_adc_channel(0); // Seleccionamos el canal 0 (RA0)
   for(;;) // Bucle infinito,que se ejecuta de forma indefinida
   {
   valor = read_adc(); // Capturamos señal analógica que entra por el canal previamente seleccionado (RA0)
   // Esta rutina tiene a "valor" como parámetro de entrada y a "voltaje" como parámetro de entrada-salida.
   // "valor",al ser de entrada,podrá ser utilizado por la rutina pero NO podrá ser modificado.
   // "voltaje",al ser de entrada-salida,si puede ser modificado dentro de la rutina
   calcula_voltaje(valor,voltaje); // Le mandamos el parámetro "valor" y nos devuelve "voltaje"
   delay_ms(10); // Retardo de un 10 ms
   }
}

gfp :-)
Título: RE: programa A/D para un 877
Publicado por: ekaminante en 06 de Abril de 2005, 08:25:00
gracias voy a intentarlo.