Estoy intentando que una entrada analógica funcione en mi microcontrolador. Estoy usando el PIC 24FJ128GA204 . El problema es que una entrada específica no funciona, mientras que otra sí funciona.
Quiero que el pin 26, AN9 / C3INA / RP15 / T3CK / T2CK / CTED6 / CN11 / RB15, sea la entrada. Otras entradas analógicas parecen funcionar bien, pero cuando configuro el pin de entrada como AN9, los resultados parecen estar flotando, incluso si conecto a tierra la entrada. Las muestras que recibo: 3987, 3987, 3988, 3989, 3989, 3987, etc. A continuación se muestra el código que estoy usando:
void initAD(){
//Pin used for ADC is pin 26 = RB15 = AN9
TRISBbits.TRISB15 = 1; //RB15 is input
ANSBbits.ANSB15 = 1; //analog mode
AD1CON1bits.MODE12 = 1; //set 12 bit mode operation
AD1CON1bits.SSRC = 0b0111; //auto-convert
AD1CON1bits.ASAM = 1; //SAMP bit is auto-set
AD1CON2 = 0; //AD1CON2 all 0
AD1CON2bits.PVCFG = 0b00; //00 = Vss, 01 = External VREF+
AD1CON2bits.NVCFG0 = 0; //AVSS
AD1CON3bits.SAMC = 0b11111; //Auto sample time = 31 TAD
AD1CON3bits.ADCS = 0b00000101; //AD conversion clock 5*Tcy = TAD
AD1CHSbits.CH0NA = 0; //negative is VREF-/AVSS
AD1CHSbits.CH0SA = 0b01001; //channel A AN9
AD1CHSbits.CH0NB = 0; //negative is VREF-/AVSS
AD1CHSbits.CH0SB = 0b01001; //channel B AN9
AD1CSSL = 0; //No scanned inputs
AD1CON1bits.ADON = 1; //enable AD module
}
y:
uint16_t ADread(){
while(!AD1CON1bits.DONE);
return(ADC1BUF0);
}
Gracias por leer. Si tienes alguna sugerencia, sería genial.