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
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
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
// 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!