Wir arbeiten derzeit an einem Batterieladegerät für ein Elektrofahrrad, aber Prototyping mit einer PIC32MX695F512H-Bausatzplatine und einem MCP4706-DAC, die auf eine Breakout-Platine gelötet und mit einem PICKIT3 programmiert wurden. Wir haben bisher ein paar andere Peripheriegeräte, die alle funktionieren, einschließlich eines 20x4-LCD, auch über I2C, also funktioniert zumindest das. Unser Problem ist, dass unser DAC mit 5 V arbeitet und 5 V ausgibt, unabhängig davon, ob wir eine Vref angeschlossen haben oder nicht. (Der Chip schaltet standardmäßig Vref auf Vdd, wenn nichts mit den Pins verbunden ist)
Der Ausgang des DAC geht an einen Spannungsfolger, der einen Leistungs-MOSFET steuert, wodurch eine variable Strommenge zur Batterie fließen kann, basierend auf Messwerten von einem Stromsensor (Inline) und einem Spannungssensor an den Batterieanschlüssen.
Relevante Codeschnipsel sind unten angehängt:
#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();
}
Wir bekommen nur Vref raus. Wir haben alle 8 Adressen ausprobiert, die das Brett haben kann, und keine Würfel.
Hat jemand einen Tipp, wie er uns helfen kann? wir stecken seit ein paar Tagen an diesem Problem fest. Danke.
Wir haben es vor etwa ein oder zwei Wochen zum Laufen gebracht - entschuldigen Sie die Verzögerung. Es stellte sich heraus, dass der Chip entweder frittiert oder schlecht war. Wir haben ein anderes Breakout-Board verwendet (es ist ein winziges Paket, das schwer zu löten war und nur einen Breakout hatte), den Chip angelötet, funktioniert ganz gut. Gelöst markieren.
Sie konfigurieren die I2C-Leitungen als Ausgänge.
TRISD=0; //Sets Port D to output
Möglicherweise stören die Ausgangstreiber. Versuchen Sie, sie als Eingänge zu konfigurieren. (Das ist, was ich auf PIC24 tun muss.)
Gustavo Litowski
alextoombs
Kaz
Kaz
alextoombs