Lib LTC2944

Fork of LTC2944 by ltc2944_team

Committer:
gr66
Date:
Wed May 17 18:45:40 2017 +0000
Revision:
1:378dc5a174ce
Parent:
AS5600.cpp@0:ec69fa9832e5
Test 2944

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gr66 1:378dc5a174ce 1 // LTC2944 V1.0
gr66 1:378dc5a174ce 2 // 07/03/2017 GR :
gr66 1:378dc5a174ce 3 #include "LTC2944.h"
gr66 1:378dc5a174ce 4 //Serial pc(USBTX, USBRX); // I/O terminal PC
gr66 0:ec69fa9832e5 5
gr66 0:ec69fa9832e5 6
gr66 0:ec69fa9832e5 7
gr66 1:378dc5a174ce 8 LTC2944::LTC2944(PinName sda, PinName scl) : i2c(sda,scl),pc(USBTX, USBRX)
gr66 1:378dc5a174ce 9 {
gr66 1:378dc5a174ce 10 address=0xC8; // adresse I2C
gr66 1:378dc5a174ce 11 //i2c.frequency(400000);
gr66 1:378dc5a174ce 12 }
gr66 1:378dc5a174ce 13 void LTC2944::setRsense(float r)
gr66 0:ec69fa9832e5 14 {
gr66 1:378dc5a174ce 15 rsense=r;
gr66 1:378dc5a174ce 16 }
gr66 1:378dc5a174ce 17 //
gr66 1:378dc5a174ce 18 void LTC2944::setMode(unsigned char m)
gr66 1:378dc5a174ce 19 {
gr66 1:378dc5a174ce 20 dataw[0]=0x01; // registre B control
gr66 1:378dc5a174ce 21 i2c.write(address,dataw,1,1); // positionnement de l'adresse
gr66 1:378dc5a174ce 22 i2c.read(address,datar,1); // lecture du registre
gr66 1:378dc5a174ce 23 pc.printf("valm1 %x \n",datar[0]);
gr66 1:378dc5a174ce 24 dataw[1]=(datar[0]&~0xC0)|(m<<6);
gr66 1:378dc5a174ce 25 i2c.write(address,dataw,2); // ecriture
gr66 1:378dc5a174ce 26 i2c.write(address,dataw,1,1); // positionnement de l'adresse
gr66 1:378dc5a174ce 27 i2c.read(address,datar,1); // lecture du registre
gr66 1:378dc5a174ce 28 pc.printf("valm2 %x \n",datar[0]);
gr66 0:ec69fa9832e5 29 }
gr66 1:378dc5a174ce 30 //
gr66 1:378dc5a174ce 31 void LTC2944::setPrescaler(unsigned char p)
gr66 0:ec69fa9832e5 32 {
gr66 1:378dc5a174ce 33 dataw[0]=0x01; // registre B control
gr66 1:378dc5a174ce 34 i2c.write(address,dataw,1,1); // positionnement de l'adresse
gr66 1:378dc5a174ce 35 i2c.read(address,datar,1); // lecture du registre
gr66 1:378dc5a174ce 36 pc.printf("valp1 %x \n",datar[0]);
gr66 1:378dc5a174ce 37 dataw[1]=(datar[0]&~0x38)|(p<<3);
gr66 1:378dc5a174ce 38 i2c.write(address,dataw,2); // ecriture
gr66 1:378dc5a174ce 39 i2c.write(address,dataw,1,1); // positionnement de l'adresse
gr66 1:378dc5a174ce 40 i2c.read(address,datar,1); // lecture du registre
gr66 1:378dc5a174ce 41 pc.printf("valp2 %x \n",datar[0]);
gr66 1:378dc5a174ce 42 }
gr66 1:378dc5a174ce 43 //
gr66 1:378dc5a174ce 44 void LTC2944::setImin(float imin)
gr66 1:378dc5a174ce 45 {
gr66 1:378dc5a174ce 46 dataw[0]=0x12; // registre B control
gr66 1:378dc5a174ce 47 i2c.write(address,dataw,1,1); // positionnement de l'adresse
gr66 1:378dc5a174ce 48 i2c.read(address,datar,2); // lecture du registre
gr66 1:378dc5a174ce 49 pc.printf("valImin1 %x %x \n",datar[0],datar[1]);
gr66 1:378dc5a174ce 50 short val=(short)((imin*rsense*32767/64)+32767);
gr66 1:378dc5a174ce 51 dataw[1]=(char)(val>>8);
gr66 1:378dc5a174ce 52 dataw[2]=(char)(val&0x00FF);
gr66 1:378dc5a174ce 53 i2c.write(address,dataw,3); // ecriture
gr66 1:378dc5a174ce 54 i2c.write(address,dataw,1,1); // positionnement de l'adresse
gr66 1:378dc5a174ce 55 i2c.read(address,datar,2); // lecture du registre
gr66 1:378dc5a174ce 56 pc.printf("valmin2 %x %x \n",datar[0],datar[1]);
gr66 0:ec69fa9832e5 57 }
gr66 0:ec69fa9832e5 58
gr66 1:378dc5a174ce 59 void LTC2944::setImax(float imin)
gr66 0:ec69fa9832e5 60 {
gr66 1:378dc5a174ce 61 dataw[0]=0x10; // registre B control
gr66 1:378dc5a174ce 62 i2c.write(address,dataw,1,1); // positionnement de l'adresse
gr66 1:378dc5a174ce 63 i2c.read(address,datar,2); // lecture du registre
gr66 1:378dc5a174ce 64 pc.printf("valImax1 %x %x \n",datar[0],datar[1]);
gr66 1:378dc5a174ce 65 short val=(short)((imin*rsense*32767/64)+32767);
gr66 1:378dc5a174ce 66 dataw[1]=(char)(val>>8);
gr66 1:378dc5a174ce 67 dataw[2]=(char)(val&0x00FF);
gr66 1:378dc5a174ce 68 i2c.write(address,dataw,3); // ecriture
gr66 1:378dc5a174ce 69 i2c.write(address,dataw,1,1); // positionnement de l'adresse
gr66 1:378dc5a174ce 70 i2c.read(address,datar,2); // lecture du registre
gr66 1:378dc5a174ce 71 pc.printf("valmax2 %x %x \n",datar[0],datar[1]);
gr66 1:378dc5a174ce 72 }
gr66 1:378dc5a174ce 73 //
gr66 1:378dc5a174ce 74 float LTC2944::getVoltage(void)
gr66 1:378dc5a174ce 75 {
gr66 1:378dc5a174ce 76 dataw[0]=8; // adresse de la tension
gr66 1:378dc5a174ce 77 i2c.write(address,dataw,1,1); // positionnement de l'adresse
gr66 1:378dc5a174ce 78 i2c.read(address,datar,2); // lecture du registre de deux octets
gr66 1:378dc5a174ce 79 return((((unsigned short)(datar[0])<<8)+datar[1])*70.8/0xFFFF);
gr66 0:ec69fa9832e5 80 }
gr66 0:ec69fa9832e5 81
gr66 1:378dc5a174ce 82 float LTC2944::getCurrent(void)
gr66 0:ec69fa9832e5 83 {
gr66 1:378dc5a174ce 84 dataw[0]=0xE; // adresse de la tension
gr66 1:378dc5a174ce 85 i2c.write(address,dataw,1,1); // positionnement de l'adresse
gr66 1:378dc5a174ce 86 i2c.read(address,datar,2); // lecture du registre de deux octets
gr66 1:378dc5a174ce 87 unsigned short value=((unsigned short)(datar[0])<<8)|(unsigned short)datar[1];
gr66 1:378dc5a174ce 88 return(((float)(value)-32767.0)*64./rsense/32767.0);
gr66 0:ec69fa9832e5 89 }
gr66 0:ec69fa9832e5 90
gr66 1:378dc5a174ce 91 unsigned short LTC2944::getAccumulatedCharge(void)
gr66 0:ec69fa9832e5 92 {
gr66 1:378dc5a174ce 93 dataw[0]=0x2; // adresse de la tension
gr66 1:378dc5a174ce 94 i2c.write(address,dataw,1,1); // positionnement de l'adresse
gr66 1:378dc5a174ce 95 i2c.read(address,datar,2); // lecture du registre de deux octets
gr66 1:378dc5a174ce 96 return(((unsigned short)(datar[0])<<8)|(unsigned short)datar[1]);
gr66 0:ec69fa9832e5 97
gr66 1:378dc5a174ce 98 }
gr66 1:378dc5a174ce 99 unsigned char LTC2944::getStatus(void)
gr66 0:ec69fa9832e5 100 {
gr66 1:378dc5a174ce 101 dataw[0]=0x0; // adresse status
gr66 1:378dc5a174ce 102 i2c.write(address,dataw,1,1); // positionnement de l'adresse
gr66 1:378dc5a174ce 103 i2c.read(address,datar,1); // lecture du registre de deux octets
gr66 1:378dc5a174ce 104 return(datar[0]);
gr66 1:378dc5a174ce 105
gr66 0:ec69fa9832e5 106 }
gr66 1:378dc5a174ce 107 unsigned char LTC2944::alertResponse(void)
gr66 1:378dc5a174ce 108 {
gr66 1:378dc5a174ce 109 i2c.read(0x18,datar,1); // lecture du registre de deux octets
gr66 0:ec69fa9832e5 110
gr66 0:ec69fa9832e5 111
gr66 1:378dc5a174ce 112 return( datar[0]);
gr66 0:ec69fa9832e5 113 }