MCP3221 ADC siempre devuelve cero en Proteus

0

Estoy interconectando PIC18F2320 con MCP3221 ADC sobre I2C. Cuando intento leer el valor convertido de ADC, solo se devuelven ceros. Estoy usando las bibliotecas de MPLAB. ADC está en modo de dirección A5. El voltaje AIN es 2.503 V, lo que debería ser alrededor de 2048 después de la conversión.

El esquema se ve así (perdón por el desastre, había otras cosas alrededor y lo estoy depurando para que no esté limpio, simplemente ignore MAX232, ya que eliminarlo no afecta el resultado):

Laslíneascapturadassevenasí(arribaeselreloj;esfácilobservarlostresgruposde9bcadauno):

El código que estoy usando está siguiendo:

// Set the ports to input, as the manual instructs
TRISCbits.TRISC3 = 1;
TRISCbits.TRISC4 = 1;

// Open I2C in master mode, slew off, as I'm aiming for 100kHz
OpenI2C(MASTER, SLEW_OFF);
SSPADD = 10; // A bit under 100kHz, because the MCU is on 4.1925 MHz

StartI2C();
WriteI2C(0x9B);      // Address of the ADC is 0x9A, 0x01 is read mode
voltage = ReadI2C(); // voltage is a global int; read upper byte
AckI2C();
voltage <<= 8;       // Make room for the lower byte
voltage |= ReadI2C();// Read lower byte
NotAckI2C();
StopI2C();

He intentado agregar un retraso después del byte de dirección, pero el resultado sigue siendo el mismo.

He intentado direccionar solo con 0x9A, en cuyo caso la línea de datos siempre es alta durante la lectura.

¿Alguna otra idea?

    
pregunta Alfis

1 respuesta

1

Para responder mi propia pregunta casi un año después:

El asistente de enseñanza que me dio esta tarea me dijo que este comportamiento es un "error" conocido en Proteus y no es mi culpa. Muy anticlimático.

    
respondido por el Alfis

Lea otras preguntas en las etiquetas