Autor Tema: Problemas usinando el ADC en dspic33ep256mu806  (Leído 1130 veces)

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

Desconectado mizzard

  • PIC10
  • *
  • Mensajes: 32
Problemas usinando el ADC en dspic33ep256mu806
« en: 05 de Noviembre de 2012, 12:50:36 »
Hola a todos, os comento mi problema.
Estoy desarrollando un prototipo con el dsPIC33EP256MU806, en el cual necesito usar dos entradas analogicas, AN0 -> RB0 y AN1 -> RB1
Para ello uso el compilador PCWHD de CCS version 4.128

El probema es que no consigo leer el valor correcto del ADC (he comprobado con un tester y veo que en el pic deseado llega la tensión que busco) tanto para el canal AN0 y el canal AN1

El dsPIC esta trabajando bien porque uso 4 usarts por hardware y puedo ver las lineas de debug usando fprintf

Adjunto mi primer codigo:

Main.c

Código: [Seleccionar]
void main(){
  unsigned int16 lectura = 0;  
  setup_adc_ports(sAN0 | sAN1 | VSS_VDD);  
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(0);  
   delay_us(READ_SAMPLE_TIMES);
   delay_ms(3000);
   fprintf(DEBUG,"Arranco\r\n");
   while(true){
                
      lectura = read_adc(ADC_START_AND_READ);
      fprintf(DEBUG,"ADC: %lu",lectura);
      delay_ms(1000);
   }
}

Y el segundo (directamente en los registros)

Main.c

Código: [Seleccionar]
void main(){
unsigned int16 lectura = 0;  

ADON = 0;      // ADC off
   AD12B = 0;     // 10 Bits
   FORM_1 = 0;    // unsigned int
   FORM_0 = 0;
    
   VCFG_2 = 0;    // AVdd - AVss
   VCFG_1 = 0;
   VCFG_0 = 0;
   CHPS_1 = 0;    // converts ch0
   CHPS_0 = 0;
    
   ADRC =1;       // Internal clock RC ADC
    
   SAMC_4 = 0;    // 0Tad
   SAMC_3 = 0;
   SAMC_2 = 0;
   SAMC_1 = 0;
   SAMC_0 = 0;
    
   CH0SA_4 = 0;   // AN0
   CH0SA_3 = 0;
   CH0SA_2 = 0;
   CH0SA_1 = 0;
   CH0SA_0 = 0;
    
   ADON = 1;      // ADC ON
delay_ms(3000);
   fprintf(DEBUG,"Arranco\r\n");
   while(true){
                
      lectura = read_adc(ADC_START_AND_READ);
      fprintf(DEBUG,"ADC: %lu",lectura);
      delay_ms(1000);
   }
}


Main.h


Código: [Seleccionar]
// ADC CONFIG
#WORD AD1CON1 = 0x0320         // ADON(15) - AD12B(10) - FORM(9,8)

#BIT ADON = AD1CON1.15
#BIT AD12B = AD1CON1.10
#BIT FORM_1 = AD1CON1.9
#BIT FORM_0 = AD1CON1.8


#WORD AD1CON2 = 0x0322         // VCFG(15,14,13) - CHPS(9,8)

#BIT VCFG_2 = AD1CON2.15
#BIT VCFG_1 = AD1CON2.14
#BIT VCFG_0 = AD1CON2.13
#BIT CHPS_1 = AD1CON2.9
#BIT CHPS_0 = AD1CON2.8


#WORD AD1CON3 = 0x0324         // ADRC(15) - SAMC(12,11,10,9,8)

#BIT ADRC = AD1CON3.15
#BIT SAMC_4 = AD1CON3.12
#BIT SAMC_3 = AD1CON3.11
#BIT SAMC_2 = AD1CON3.10
#BIT SAMC_1 = AD1CON3.9
#BIT SAMC_0 = AD1CON3.8


#WORD AD1CHS0 = 0x0328         // CH0SA(4,3,2,1,0)

#BIT CH0SA_4 = AD1CHS0.4
#BIT CH0SA_3 = AD1CHS0.3
#BIT CH0SA_2 = AD1CHS0.2
#BIT CH0SA_1 = AD1CHS0.1
#BIT CH0SA_0 = AD1CHS0.0

Para ambas configuraciones siempre veo el valor 512

En ambos casos he simplificado el codigo y hay cosas que he omitido, si necesitais ver algo mas en detalle os lo pongo

Teneis idea de como solucionar mi problema?

Agradeceré cualquier sugerencia, muchisimas gracias!