Lib LTC2944
Fork of LTC2944 by
Embed:
(wiki syntax)
Show/hide line numbers
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 }
Generated on Tue Jul 12 2022 23:48:51 by
1.7.2
