I2C con PIC32 y MCP4706 no funciona

1

Estamos trabajando en un cargador de batería para una bicicleta eléctrica en este momento, pero creamos prototipos con un kit de PIC32MX695F512H y un DAC MCP4706 soldado en un panel de arranque programado con un PICKIT3. Tenemos algunos otros periféricos trabajando hasta ahora, incluyendo una pantalla LCD de 20x4 también sobre I2C, por lo que al menos eso está funcionando. Nuestro problema es que nuestro DAC funciona con y emite 5 V, independientemente de si tenemos o no un Vref conectado. (el chip por defecto es corto Vref a Vdd si no hay nada conectado a los pines)

La salida del DAC se dirige a un seguidor de voltaje que controla un MOSFET de potencia, lo que permite que una cantidad variable de corriente fluya a la batería según las lecturas de un sensor de corriente (en línea) y un sensor de voltaje a través de los terminales de la batería.

Los fragmentos de código relevantes se adjuntan a continuación:

#define DAC 0x60
.
.
.
// Configure I2C registers
void ConfigI2C()
{
    //1 USES RD10 AS SCL1 AND RD 9 AS SDA1
    /// I2CxCON I2CxSTAT I2CxADD I2CxMSK I2CxTRN I2CxRCV
    I2C1BRG=0x186;                  //390 for 80MHz to 100KHz
    I2C1CONbits.A10M=0;             //Use 7-bit addresses
    I2C1CONbits.DISSLW=1;           //disable slew control for standard
    I2C1CONbits.ACKDT=0;            //Use and ACK not NACK
    I2C1ADD=22;                     //Sets slave address for PIC32
    TRISD=0;                        //Sets Port D to output
    I2C1CONbits.ON=1;               //turn on I2C
}
.
.
.
// Start
void I2C_start(void)
{
    I2C1CONbits.SEN=1;          //send start
    while(I2C1CONbits.SEN){}  //waits till start bit detected
}

void I2C_stop(void)
{
    I2C1CONbits.PEN=1;          //send stop
    while(I2C1CONbits.PEN){}    //waits till stop bit detected
}
.
.
.
void SendI2C3(char addrs,char regis, char data)
{
    char ack;
    I2C_start();
    ack=I2C_write(addrs); //Address for LED is 0x50
    ack=I2C_write(regis); //0xFE for LED
    ack=I2C_write(data);  //0x20to0x7F standard
    I2C_stop();
}

Acabamos de sacar a Vref. Hemos intentado todas las 8 direcciones que puede tener el tablero, y ningún dado.

¿Alguien tiene algún consejo sobre cómo ayudarnos? Hemos estado atrapados en este problema por un par de días. Gracias.

    
pregunta alextoombs

2 respuestas

2

Lo hicimos funcionar hace una o dos semanas, perdón por el retraso. Resulta que el chip estaba frito o mal. Usamos otro tablero de ruptura (es un paquete pequeño que fue un dolor de soldar, y solo tenía una ruptura), soldamos el chip, funciona completamente bien. Marcándolo resuelto.

    
respondido por el alextoombs
0

Está configurando las líneas I2C como salidas.

TRISD=0;                        //Sets Port D to output

Los controladores de salida pueden estar interfiriendo. Intenta configurarlos como entradas. (Esto es lo que tengo que hacer en PIC24).

    
respondido por el Adam Lawrence

Lea otras preguntas en las etiquetas