ltc2944_team / LTC2944

Fork of AS5600 by Dock_HubleX

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers LTC2944.cpp Source File

LTC2944.cpp

00001 // LTC2944 V1.0
00002 // 07/03/2017  GR :
00003 #include "LTC2944.h"
00004 //Serial pc(USBTX, USBRX);  // I/O terminal PC
00005 
00006 
00007 
00008 LTC2944::LTC2944(PinName sda, PinName scl) : i2c(sda,scl),pc(USBTX, USBRX)
00009 {
00010     address=0xC8;   // adresse I2C
00011     //i2c.frequency(400000);
00012 }
00013 void LTC2944::setRsense(float r)
00014 {
00015     rsense=r;
00016 }
00017 //
00018 void LTC2944::setMode(unsigned char m)
00019 {
00020     dataw[0]=0x01;  // registre B control
00021     i2c.write(address,dataw,1,1);  // positionnement de l'adresse
00022     i2c.read(address,datar,1);    // lecture du registre
00023     pc.printf("valm1 %x \n",datar[0]);
00024     dataw[1]=(datar[0]&~0xC0)|(m<<6);
00025     i2c.write(address,dataw,2);  // ecriture
00026     i2c.write(address,dataw,1,1);  // positionnement de l'adresse
00027     i2c.read(address,datar,1);    // lecture du registre
00028     pc.printf("valm2 %x \n",datar[0]);
00029 }
00030 //
00031 void LTC2944::setPrescaler(unsigned char p)
00032 {
00033     dataw[0]=0x01;  // registre B control
00034     i2c.write(address,dataw,1,1);  // positionnement de l'adresse
00035     i2c.read(address,datar,1);    // lecture du registre
00036     pc.printf("valp1 %x \n",datar[0]);
00037     dataw[1]=(datar[0]&~0x38)|(p<<3);
00038     i2c.write(address,dataw,2);  // ecriture
00039     i2c.write(address,dataw,1,1);  // positionnement de l'adresse
00040     i2c.read(address,datar,1);    // lecture du registre
00041     pc.printf("valp2 %x \n",datar[0]);
00042 }
00043 //
00044 void LTC2944::setImin(float imin)
00045 {
00046     dataw[0]=0x12;  // registre B control
00047     i2c.write(address,dataw,1,1);  // positionnement de l'adresse
00048     i2c.read(address,datar,2);    // lecture du registre
00049     pc.printf("valImin1 %x %x \n",datar[0],datar[1]);
00050     short val=(short)((imin*rsense*32767/64)+32767);
00051     dataw[1]=(char)(val>>8);
00052     dataw[2]=(char)(val&0x00FF);
00053     i2c.write(address,dataw,3);  // ecriture
00054     i2c.write(address,dataw,1,1);  // positionnement de l'adresse
00055     i2c.read(address,datar,2);    // lecture du registre
00056     pc.printf("valmin2 %x %x \n",datar[0],datar[1]);
00057 }
00058 
00059 void LTC2944::setImax(float imin)
00060 {
00061     dataw[0]=0x10;  // registre B control
00062     i2c.write(address,dataw,1,1);  // positionnement de l'adresse
00063     i2c.read(address,datar,2);    // lecture du registre
00064     pc.printf("valImax1 %x %x \n",datar[0],datar[1]);
00065     short val=(short)((imin*rsense*32767/64)+32767);
00066     dataw[1]=(char)(val>>8);
00067     dataw[2]=(char)(val&0x00FF);
00068     i2c.write(address,dataw,3);  // ecriture
00069     i2c.write(address,dataw,1,1);  // positionnement de l'adresse
00070     i2c.read(address,datar,2);    // lecture du registre
00071     pc.printf("valmax2 %x %x \n",datar[0],datar[1]);
00072 }
00073 //
00074 float LTC2944::getVoltage(void)
00075 {
00076     dataw[0]=8;  // adresse de la tension
00077     i2c.write(address,dataw,1,1);  // positionnement de l'adresse
00078     i2c.read(address,datar,2);    // lecture du registre de deux octets
00079     return((((unsigned short)(datar[0])<<8)+datar[1])*70.8/0xFFFF);
00080 }
00081 
00082 float LTC2944::getCurrent(void)
00083 {
00084     dataw[0]=0xE;  // adresse de la tension
00085     i2c.write(address,dataw,1,1);  // positionnement de l'adresse
00086     i2c.read(address,datar,2);    // lecture du registre de deux octets
00087     unsigned short value=((unsigned short)(datar[0])<<8)|(unsigned short)datar[1];
00088     return(((float)(value)-32767.0)*64./rsense/32767.0);
00089 }
00090 
00091 unsigned short LTC2944::getAccumulatedCharge(void)
00092 {
00093     dataw[0]=0x2;  // adresse de la tension
00094     i2c.write(address,dataw,1,1);  // positionnement de l'adresse
00095     i2c.read(address,datar,2);    // lecture du registre de deux octets
00096     return(((unsigned short)(datar[0])<<8)|(unsigned short)datar[1]);
00097 
00098 }
00099 unsigned char LTC2944::getStatus(void)
00100 {
00101     dataw[0]=0x0;  // adresse status
00102     i2c.write(address,dataw,1,1);  // positionnement de l'adresse
00103     i2c.read(address,datar,1);    // lecture du registre de deux octets
00104     return(datar[0]);
00105 
00106 }
00107 unsigned char LTC2944::alertResponse(void)
00108 {
00109     i2c.read(0x18,datar,1);    // lecture du registre de deux octets
00110 
00111 
00112     return( datar[0]);
00113 }