Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

31/03/2010 #1

Avatar de seaarg

Consulta Vref en ADC PIC16F873
Estoy programando un micro PIC16F873, utilizando el conversor ADC en 10 bits. El lenguaje es CCS C.

En mi diseño, tengo un voltaje a medir que varia entre 2.7 y 3.15 volts aproximadamente.

A fin de obtener la mayor precision posible, configure lo siguiente:
setup_adc_ports(AN0_VREF_VREF);

Con esto estoy intentando decir que A0 es la entrada del ADC, A3 es la referencia high y A2 es la referencia low.

En proteus (isis) intento simular una conversion (que emite el valor por rs232 a una terminal) poniendo un generador DC en A2 de 2.5 volts y uno en A3 de 3.5 volts.

Sin embargo, me tira siempre como valor leido un 0. Si pongo A2 a 0 volts ahi si empieza a leer valores, cuyo maximo (1024) solo lo obtengo si pongo A3 en 0,5 volts.

La consulta es: ¿Estoy haciendo bien las cosas? quiza sea el simulador que lo hace mal pero no estoy seguro. ¿Entendi bien la idea de que el voltaje que haya en A3 sera el maximo voltaje y representa 1024, y el de A2 el minimo y representa 0?
02/04/2010 #2

Avatar de ByAxel

Respuesta: Consulta Vref en ADC PIC16F873
Pondrías el código para ver, puede que el simulador no soporte esa función, que tal si revisas las limitaciones que tiene el simulador con respecto a los PIC16
02/04/2010 #3

Avatar de seaarg

Respuesta: Consulta Vref en ADC PIC16F873
Este es el codigo en CCS C

unsigned int16 value;
set_tris_a(0b11111101);
set_tris_b(0b11111111);
set_tris_c(0b10111011);
output_a(0x00);output_b(0x00);output_c(0x00);
set_tris_a(0b11111111);

setup_adc_ports(AN0_VREF_VREF);
setup_adc(ADC_CLOCK_DIV_32);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_wdt(WDT_18MS);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);

do {
restart_wdt();
value = read_adc();
printf("V: %Lu ", value);
delay_ms(10);
} while(TRUE);

Si te referias al codigo ASM generado, avisame y separo la parte ASM que configura el ADC.

¿Tenes alguna referencia sobre dichas limitaciones? Quiza pueda ser una limitacion el problema.
03/04/2010 #4

Avatar de ByAxel

Respuesta: Consulta Vref en ADC PIC16F873
Lo probé y realmente no veo el problema, solo agregué #use y funcionó a la primera con los voltajes 2.5 en AN2 y 3.5 en AN3, dando como resultado 512 en el terminal al poner 3.0V en AN0.

Código PHP:
#device adc=10  // Esto después de declarar el chip.

#use fast_io(a)
#use fast_io(b)
#use fast_io(c)

int16 value;

void main()
{
   
set_tris_a(0b11111101);
   
set_tris_b(0b11111111);
   
set_tris_c(0b10111011);  
   
output_a(0x00); output_b(0x00); output_c(0x00);
   
set_tris_a(0b11111111);
   
   
setup_adc_ports(AN0_VREF_VREF);
   
setup_adc(ADC_CLOCK_DIV_32);
   
setup_spi(SPI_SS_DISABLED);
   
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   
setup_wdt(WDT_18MS);
   
setup_timer_1(T1_DISABLED);
   
setup_timer_2(T2_DISABLED,0,1);
   
   do{
      
delay_ms(10);
      
value read_adc();
      
printf("V: %Lu \r"value);
   }while(
TRUE);



Es probable que sea la versión; en mi caso estoy usando el Proteus 7.6 SP4 y CCS 4.093.

Con respecto a las limitaciones puedes revisar el archivo HELP "PIC16" que se encuentra en
C:\Program Files\Labcenter Electronics\Proteus 7 Professional\HELP
03/04/2010 #5

Avatar de seaarg

Respuesta: Consulta Vref en ADC PIC16F873
Efectivamente Carlos, el problema era la version de proteus (6), con la 7 funciona perfectamente.

Muchas gracias!
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

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