Estamos trabajando en un cargador de batería para una bicicleta eléctrica en este momento, pero estamos creando prototipos con una placa de kit PIC32MX695F512H y un DAC MCP4706 soldado en una placa de conexión, programada con un PICKIT3. Tenemos algunos otros periféricos que funcionan hasta ahora, incluida una pantalla LCD de 20x4 también sobre I2C, así que al menos eso funciona. Nuestro problema es que nuestro DAC funciona y emite 5 V, independientemente de si tenemos o no un Vref conectado. (el chip por defecto corta Vref a Vdd si no hay nada conectado a los pines)
La salida del DAC va a un seguidor de voltaje que controla un MOSFET de potencia, lo que permite que fluya una cantidad variable de corriente a la batería según las lecturas de un sensor de corriente (en línea) y un sensor de voltaje en 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 Vref. Probamos las 8 direcciones que puede tener el tablero, y ningún dado.
¿Alguien tiene algún consejo sobre cómo ayudarnos? Hemos estado atascados en este problema durante un par de días. Gracias.
Lo hicimos funcionar hace una o dos semanas, perdón por la demora. Resulta que el chip estaba frito o malo. Usamos otra placa de conexión (es un paquete pequeño que fue difícil de soldar y solo tenía una conexión), soldamos el chip y funciona completamente bien. Marcandolo solucionado.
Está configurando las líneas I2C como salidas.
TRISD=0; //Sets Port D to output
Los controladores de salida pueden estar interfiriendo. Intente configurarlos como entradas. (Esto es lo que tengo que hacer en PIC24.)
Gustavo Litovsky
alextoombs
Kaz
Kaz
alextoombs