La entrada ADC específica no funciona en el PIC PIC24FJ128GA202 de Microchip, otras entradas funcionan bien

3

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.

    
pregunta BlackPhanth0m

4 respuestas

5

Tuve el mismo problema ...

PIC24FJ128GA204 Familia Silicata Errata y aclaración de la hoja de datos

AN9 se ha eliminado de todos los 28 pines. Diagramas y tablas. Este canal analógico es no implementado en dispositivos de 28 pines.

Pero la hoja de datos no se repara ...

    
respondido por el arsi
2

El código me parece correcto. Verifique el resto de su código para ver si accidentalmente asignó alguna salida periférica digital a este canal. Mejor aún, en lugar de publicar fragmentos de código, escriba un breve bosquejo que muestre solo este problema en particular, es decir, conf.bits plus main con AD init y poll y nada más. También sería útil saber cómo se realiza la prueba.

    
respondido por el Oleg Mazurov
0

¿Usas DMA?

Estás leyendo ADCBUF0 todo el tiempo.

Creo que algunos dsPICs tienen ADCBUFx dedicado para cada pin analógico, otros solo usan ADCBUF0 para cada conversión.

También necesitas configurar otras cosas ...

Dígale a adc que escanee canales:

AD1CON2bits.CSCNA = 1; // ENTRADAS DE ESCANEADO PARA CH0 +

Indique a adc que convierta, por ejemplo, CH0:

AD1CON2bits.CHPS = 0; // CONVERTIR CH0

Seleccione qué canales escanear:

  • AD1CSSH
  • AD1CSSL

Los canales analógicos y si tiene dos ADC a bordo, ambas configuraciones deben ser idénticas para los registros:

  • AD1PCFGH
  • AD1PCFGL
  • AD2PCFGH
  • AD2PCFGL

El dsPIC ADC puede ser una molestia para configurar.

    
respondido por el iggy
-2

La entrada analógica AN9 no existe en este dispositivo

    
respondido por el JOBIN JOSEPH

Lea otras preguntas en las etiquetas