Aclarando mi pregunta un poco. Estamos utilizando una placa PIC32 con un DAC de 8 bits MCP4706, controlado sobre I2C. Si escribimos un valor binario (por ejemplo, 0b00000100) en el DAC, sale como se espera. Sin embargo, estamos tratando de cambiar de manera incremental la salida de voltaje del DAC, que ingresa a un seguidor de voltaje que controla un MOSFET que permite que la corriente fluya desde una fuente de alta corriente a una batería.
Aquí hay un esquema de todo eso. No es perfecto, pero sale del punto.
Un pin analógico mide el valor de salida de un sensor de corriente en línea con la batería, que controla el flujo de corriente, esencialmente. Actualmente, nuestra conversión entre voltaje y corriente se realiza de manera arbitraria, lo cual está bien. Busco obtener valores cada vez mayores del DAC, pero estoy leyendo 0.00V en todo momento desde la salida, a menos que establezca manualmente el valor DAC. Aquí estoy agregando un código diferente:
// Control voltage sent to DAC as a function of Cvolt read from current sensor
void CurrentControl()
{
double current;
// Gets values for Cvolt and Bvolt
getAnalog();
// ARBITRARY CONVERSION, NEED TO CHANGE
current = Cvolt*.0035;
// Current should be between 8A and 9A at all times for safety
if(current <= 8.0)
{
// if current is less than 8A, increase DAC value
shift = shift + 1;
// safety control; keep shift at 255 (max) if it tries to go higher
if(shift > 255)
shift = 255;
// write value to DAC Vout register
SendI2C3(DAC,0b00000000,shift);
}
else if(current >= 9.0)
{
// if current is more than 9A, decrease DAC value
shift = shift - 1;
// safety control; keep shift at 0 if it tries to go lower
if( shift < 0)
shift = 0;
// write value to DAC Vout register
SendI2C3(DAC,0b00000000,shift);
}
}
.
.
.
// Send data to I2C line at given address
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();
}