Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

29/01/2008 #1


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
29/01/2008 #2


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
29/01/2008 #3


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.
30/01/2008 #4


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
30/01/2008 #5


No se nada de PICs, pero fijate que tiopepe123 te escribió channel con doble N, y no con N simple como lo escribiste tu.
30/01/2008 #6


muy observador damian aveces los problemas son las cosas mas tontas

gracias^^
30/01/2008 #7


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.
30/01/2008 #8


Pero que vista teneis...

Yo lo copie directamente del help.
Tambien seria interesante meterle un
set_tris_a(0xff); por si acaso
12/02/2008 #9


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
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.