Autor Tema: Pin A/D haciendo el tonto  (Leído 1965 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado _Romeo

  • PIC10
  • *
  • Mensajes: 6
Pin A/D haciendo el tonto
« en: 19 de Abril de 2005, 13:59:00 »
Hola buenas,

hoy probando, probando me he encontrado con un problema gordo:

tengo la salida de un filtro de Butterworth conectada directamente a la entrada de uno de los canales de conversión A/D de un microcontrolador 16F876. La cuestión es que cuando enciendo el sistema, la salida del filtro que en teoría debería dar un resultado cercano a 1,30v, me baja a aproximadamente 0,11 voltios. Si quito el PIC de su zócalo el filtro funciona bien, lo que me lleva a pensar que, viendo el valor que tengo en el pin del A/D, pudiera ser que tuviese ese pin configurado como salida y que estuviese sacándome por ahí un 0 lógico. Aunque no sé por qué, porque el programa en principio lo veo correcto. Ahí lo dejo, por si me quereís echar un cable:


#include <16F876.h>
#device ADC=10
#fuses XT, NOWDT, NOPROTECT, PUT
#USE DELAY(clock = 4000000)
#include <STDLIB.h>

#DEFINE  FREC_PWM 3910
#DEFINE  R_MAX 838         //resistencia máxima que pueden alcanzar
                           //los sensores a una temperatura de 450º
#DEFINE  CTE_PROP 1
#DEFINE  Ro 650.0          //resistencia inicial del sensor
#DEFINE  Co 0.000679       //cte sensor

long  lec_consigna,  //Lectura de consigna
      conv1,         //valores de conversion
      conv2;
int flag_timer = 0;



#int_rtcc
void clock_isr()
{
   flag_timer = 1;
}

main()
{

long Temp,         //temperatura de consigna
     Adc1 = 1023;
                  //ciclo de trabajo de los PWM
                  //Adc_max = 4000000 / FREC_PWM = 1023

int16       R_consigna,            //resistencia de heater consignada
          R_medida1;   //" " medida
float       vh1 = 0;            //tension heater1 y heater2
float       ih1;                  //intensidad heater1 y heater2
int16     copia_ih1;

//set_tris_a(0xFF);  <- (Nota: esto lo he añadido más tarde para asegurar pin como entrada)
setup_port_a(ALL_ANALOG);
setup_adc(ADC_CLOCK_DIV_32);


setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256);
set_rtcc(226);             //195 si frec muestreo ~62.5 Hz
                           //226 si frec muestreo de ~130Hz
enable_interrupts(int_rtcc);

setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_16, 16, 1);

enable_interrupts(global);

while (1)
{
   set_pwm1_duty(Adc1);

   if(flag_timer)
   {

      //lazo de control: se obtienen tensión e intensidad del heater y se
      //calcula la resistencia de heater. Después se procede a un control P

      set_adc_channel(0);
      delay_us(20);
      lec_consigna = Read_ADC();    // <-el canal 0 es el que da problemas, a partir de ahí el resto no funciona
 
     
         //control P y actualización de DC

          (...)

         }

         }
 

}


Gracias por llegar hasta aquí Giño

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: Pin A/D haciendo el tonto
« Respuesta #1 en: 20 de Abril de 2005, 19:35:00 »
Buenas.

NO se si es problema de soft, porque de C no controlo mucho.

Lo que si controlo es que a mi me paso algo parecido, y era de que había quemado la entrada del PIC y estaba cortocircuitada a masa. Compruebalo con un polímetro. Si te da menos de 700 ohmios a masa, es que está quemada esa entrada.


 

anything