Convertidor A/D para termometro con PIC16f876a

Hola buenas
Queria comentaros sobre un conversor A/D que ya me funciona , obtiene la tension por la patilla RA0 que en este caso seria un lm335 el que la aumenta o disminuye la tension segun la temperatura y me saca por lcd ( XºC ), pues bien quiero ampliar esta trabajo introducciendo otro lm335 y el problema que tengo es que no consigo configurar para que la patilla RA1 como entrada analogica, me da erorres de compilacion al configurar asi :

setup_adc_ports(RA1_ANALOG);

con : setup_adc_ports(RA0_ANALOG); funciona bien

tambien puedo poner : setup_adc_ports(ALL_ANALOG); pero claro el resultado de la conversion lo obtengo de : resultado=read_adc();
¿ como podria obtener por separado la conversion de la entrada RA0 y RA1 ?

Gracias por adelantado
Saludos
 
Bueno pues ya he conseguido configurar los puetos de entrada analogicos con:

setup_adc_ports( RA0_RA1_RA3_ANALOG );

aun asi no consigo leer la conversion individual de cada una de las entradas
 
Haces el ?
set_adc_channel(1);


Mira el ex_admm.c
C:\Archivos de programa\PICC\Examples

Y aqui todas combinaciones que puedes configurar tu ADC (puedes abrirlos con el bloc de notas)
C:\Archivos de programa\PICC\Devices



Si quieres mejorar un poco mas en precision, puedes utilizar las REF o sea poner en A2 tension minima y A3 tension maxima.

Con tres resistencias en serie calculas los margenes que te interesan, pero hay un limite
La tension diferencial entre A2 y A3 debe ser de unos 2.5V si no interprete mal el datasheet.
 
Muchas gracias por la información tiopepe

pues no utilizo set_adc_chanel(1); por que al compilar me da error:

undefined identifier set_adc_chanel

mi progrma es el siguiente:

#include<16f876.h>
#device adc=10
#fuses HS,NOPROTECT,NOWDT
#use delay(clock=4000000)
#include <string.h>
#include <lcd.c>
#byte por_b=6
#ORG 0X1F00,0X1FFF{}// reserva la memoria para el bootloader
int y;
unsigned long int resultado,x;
main()
{

lcd_init();
set_tris_b(0x00);
setup_adc_ports( RA0_ANALOG );
setup_adc(ADC_CLOCK_INTERNAL);
//set_adc_chanel(); da error
resultado=read_adc();
while(1)
{

resultado=read_adc();
x=(resultado-559);
y=x/2;
delay_ms(10);
printf(LCD_PUTC,"\f %d%cC",y,223);
delay_ms(50);
}

}
y sobre la tension de referencia no lo utilizo ya que uso la de 5v a 0v y que la tiene por defecto aunque la tensiones con las que voy a jugar son de 2.73v que en el lm335 son 0ºC hasta 3.73v 102ºC
 
A parte de la dos "n" del channel, tambien se tiene que poner el número entre parentesis correspondiente al número del convertidor que quieras leer.
 
Ya sabia yo que esto no iva a ser tan facil

Bueno pues el programa funciona correctamente en proteus y me saca las temperaturas por lcd, pero ahora estoy montando el circuito y no aparece nada en el lcd, se que este dispositivo necesita un tiempo entre instrucciones para que funcione bien y ya no se que hacer le he metido delays en casi todo el programa pero no consigo que se visualiza nada.

el codigo es el siguiente:

Código:
#include<16f876.h>
#device adc=10
#fuses HS,NOPROTECT,NOWDT
#use delay(clock=4000000)
#include <string.h>
#include <lcd.c>
#byte por_b=6

#ORG 0X1F00,0X1FFF{}// reserva la memoria para el bootloader
int y,w;
unsigned long int resultado,x,resultado2,z;
main()
{
set_tris_b(0x00);
delay_ms(40);
set_tris_a(0xff);
lcd_init();
delay_ms(40);
setup_adc_ports( RA0_RA1_RA3_ANALOG );
delay_ms(40);
setup_adc(ADC_CLOCK_INTERNAL);
delay_ms(40);

   while(1)
      {
      set_adc_channel(0);
      delay_ms(10);
      resultado=read_adc();
      delay_ms(10);
      set_adc_channel(1);
      delay_ms(10);
      resultado2=read_adc();
      delay_ms(10);
      x=(resultado-559);
      y=x/2;
      z=(resultado2-559);
      w=z/2;
      delay_ms(10);
      printf(LCD_PUTC,"\f %d%cC",y,223);
      printf(LCD_PUTC,"\n %d%cC",w,223);
      delay_ms(50);
      }

}


Agraderia cualquier detalle que pueda ser de ayuda .
gracias
 
Atrás
Arriba