Lib LTC2944

Fork of LTC2944 by ltc2944_team

LTC2944.cpp

Committer:
gr66
Date:
2017-05-17
Revision:
1:378dc5a174ce
Parent:
AS5600.cpp@ 0:ec69fa9832e5

File content as of revision 1:378dc5a174ce:

// LTC2944 V1.0
// 07/03/2017  GR :
#include "LTC2944.h"
//Serial pc(USBTX, USBRX);  // I/O terminal PC



LTC2944::LTC2944(PinName sda, PinName scl) : i2c(sda,scl),pc(USBTX, USBRX)
{
    address=0xC8;   // adresse I2C
    //i2c.frequency(400000);
}
void LTC2944::setRsense(float r)
{
    rsense=r;
}
//
void LTC2944::setMode(unsigned char m)
{
    dataw[0]=0x01;  // registre B control
    i2c.write(address,dataw,1,1);  // positionnement de l'adresse
    i2c.read(address,datar,1);    // lecture du registre
    pc.printf("valm1 %x \n",datar[0]);
    dataw[1]=(datar[0]&~0xC0)|(m<<6);
    i2c.write(address,dataw,2);  // ecriture
    i2c.write(address,dataw,1,1);  // positionnement de l'adresse
    i2c.read(address,datar,1);    // lecture du registre
    pc.printf("valm2 %x \n",datar[0]);
}
//
void LTC2944::setPrescaler(unsigned char p)
{
    dataw[0]=0x01;  // registre B control
    i2c.write(address,dataw,1,1);  // positionnement de l'adresse
    i2c.read(address,datar,1);    // lecture du registre
    pc.printf("valp1 %x \n",datar[0]);
    dataw[1]=(datar[0]&~0x38)|(p<<3);
    i2c.write(address,dataw,2);  // ecriture
    i2c.write(address,dataw,1,1);  // positionnement de l'adresse
    i2c.read(address,datar,1);    // lecture du registre
    pc.printf("valp2 %x \n",datar[0]);
}
//
void LTC2944::setImin(float imin)
{
    dataw[0]=0x12;  // registre B control
    i2c.write(address,dataw,1,1);  // positionnement de l'adresse
    i2c.read(address,datar,2);    // lecture du registre
    pc.printf("valImin1 %x %x \n",datar[0],datar[1]);
    short val=(short)((imin*rsense*32767/64)+32767);
    dataw[1]=(char)(val>>8);
    dataw[2]=(char)(val&0x00FF);
    i2c.write(address,dataw,3);  // ecriture
    i2c.write(address,dataw,1,1);  // positionnement de l'adresse
    i2c.read(address,datar,2);    // lecture du registre
    pc.printf("valmin2 %x %x \n",datar[0],datar[1]);
}

void LTC2944::setImax(float imin)
{
    dataw[0]=0x10;  // registre B control
    i2c.write(address,dataw,1,1);  // positionnement de l'adresse
    i2c.read(address,datar,2);    // lecture du registre
    pc.printf("valImax1 %x %x \n",datar[0],datar[1]);
    short val=(short)((imin*rsense*32767/64)+32767);
    dataw[1]=(char)(val>>8);
    dataw[2]=(char)(val&0x00FF);
    i2c.write(address,dataw,3);  // ecriture
    i2c.write(address,dataw,1,1);  // positionnement de l'adresse
    i2c.read(address,datar,2);    // lecture du registre
    pc.printf("valmax2 %x %x \n",datar[0],datar[1]);
}
//
float LTC2944::getVoltage(void)
{
    dataw[0]=8;  // adresse de la tension
    i2c.write(address,dataw,1,1);  // positionnement de l'adresse
    i2c.read(address,datar,2);    // lecture du registre de deux octets
    return((((unsigned short)(datar[0])<<8)+datar[1])*70.8/0xFFFF);
}

float LTC2944::getCurrent(void)
{
    dataw[0]=0xE;  // adresse de la tension
    i2c.write(address,dataw,1,1);  // positionnement de l'adresse
    i2c.read(address,datar,2);    // lecture du registre de deux octets
    unsigned short value=((unsigned short)(datar[0])<<8)|(unsigned short)datar[1];
    return(((float)(value)-32767.0)*64./rsense/32767.0);
}

unsigned short LTC2944::getAccumulatedCharge(void)
{
    dataw[0]=0x2;  // adresse de la tension
    i2c.write(address,dataw,1,1);  // positionnement de l'adresse
    i2c.read(address,datar,2);    // lecture du registre de deux octets
    return(((unsigned short)(datar[0])<<8)|(unsigned short)datar[1]);

}
unsigned char LTC2944::getStatus(void)
{
    dataw[0]=0x0;  // adresse status
    i2c.write(address,dataw,1,1);  // positionnement de l'adresse
    i2c.read(address,datar,1);    // lecture du registre de deux octets
    return(datar[0]);

}
unsigned char LTC2944::alertResponse(void)
{
    i2c.read(0x18,datar,1);    // lecture du registre de deux octets


    return( datar[0]);
}