82 #define POLL_DELAY 200 98 uint32_t speed = 500000;
100 Serial.begin(115200);
102 if (
doprint) Serial.println(F(
"Detecting Addresses..."));
105 while (*device != NULL)
107 if (
doprint) Serial.print(F(
" Type: "));
108 if (
doprint) Serial.print((*device)->getType());
109 if (
doprint) Serial.print(F(
" Address: "));
110 if (
doprint) Serial.print((*device)->getAddress(), HEX);
112 if (
doprint) Serial.print(F(
", Speed: "));
113 if (
doprint) Serial.print((*device)->getMaxSpeed(), DEC);
117 pmbusNoPec->
enablePec((*device)->getAddress());
118 (*device)->changePMBus(pmbusPec);
121 if (speed > (*device)->getMaxSpeed())
122 speed = (*device)->getMaxSpeed();
127 if (
doprint) Serial.print(
"Changing bus speed to ");
128 if (
doprint) Serial.println(speed, DEC);
132 while ((*device) != 0)
140 Serial.println(F(
"Index,DeviceId,Channel,MfrSpecialId,Time,DeviceAddress,DevicePage,TelemetryCommand,TelemetryType,ValueLength,Value,FloatValue"));
151 Serial.print(F(
","));
153 Serial.print(F(
","));
155 Serial.print(F(
","));
158 Serial.print(F(
"0x"));
159 Serial.print(
id, HEX);
160 Serial.print(F(
","));
163 Serial.print(F(
",0x"));
165 Serial.print(F(
",0x"));
185 while ((*device) != NULL)
189 for (page = 0; page < (*device)->getNumPages(); page++)
191 (*device)->setPage(page);
192 val16 = (*device)->smbus()->readWord((*device)->getAddress(),
STATUS_WORD);
194 Serial.print(page, HEX);
195 Serial.print(F(
",0x"));
197 Serial.print(F(
",STATUS_WORD,2,0x"));
198 Serial.print(val16, HEX);
199 Serial.print(F(
","));
200 Serial.println(val16, DEC);
204 if ((*device)->hasCapability(
HAS_VIN))
206 val16 = (*device)->smbus()->readWord((*device)->getAddress(),
READ_VIN);
208 Serial.print(0x00, HEX);
209 Serial.print(F(
",0x"));
211 Serial.print(F(
",READ_VIN,2,0x"));
212 Serial.print(val16, HEX);
213 Serial.print(F(
","));
217 if ((*device)->hasCapability(
HAS_VOUT))
219 for (page = 0; page < (*device)->getNumPages(); page++)
221 (*device)->setPage(page);
222 val16 = (*device)->smbus()->readWord((*device)->getAddress(),
READ_VOUT);
223 val8 = (*device)->smbus()->readByte((*device)->getAddress(),
VOUT_MODE);
225 Serial.print(page, HEX);
226 Serial.print(F(
",0x"));
228 Serial.print(F(
",READ_VOUT,2,0x"));
229 Serial.print(val16, HEX);
230 Serial.print(F(
","));
235 if ((*device)->hasCapability(
HAS_IIN))
237 for (page = 0; page < (*device)->getNumPages(); page++)
239 (*device)->setPage(page);
240 val16 = (*device)->smbus()->readWord((*device)->getAddress(),
READ_IIN);
242 Serial.print(page, HEX);
243 Serial.print(F(
",0x"));
245 Serial.print(F(
",READ_IIN,2,0x"));
246 Serial.print(val16, HEX);
247 Serial.print(F(
","));
252 if ((*device)->hasCapability(
HAS_IOUT))
254 for (page = 0; page < (*device)->getNumPages(); page++)
256 (*device)->setPage(page);
257 val16 = (*device)->smbus()->readWord((*device)->getAddress(),
READ_IOUT);
259 Serial.print(page, HEX);
260 Serial.print(F(
",0x"));
262 Serial.print(F(
",READ_IOUT,2,0x"));
263 Serial.print(val16, HEX);
264 Serial.print(F(
","));
269 if ((*device)->hasCapability(
HAS_PIN))
271 for (page = 0; page < (*device)->getNumPages(); page++)
273 (*device)->setPage(page);
274 val16 = (*device)->smbus()->readWord((*device)->getAddress(),
READ_PIN);
276 Serial.print(page, HEX);
277 Serial.print(F(
",0x"));
279 Serial.print(F(
",READ_PIN,2,0x"));
280 Serial.print(val16, HEX);
281 Serial.print(F(
","));
286 if ((*device)->hasCapability(
HAS_POUT))
288 for (page = 0; page < (*device)->getNumPages(); page++)
290 (*device)->setPage(page);
291 val16 = (*device)->smbus()->readWord((*device)->getAddress(),
READ_POUT);
293 Serial.print(page, HEX);
294 Serial.print(F(
",0x"));
296 Serial.print(F(
",READ_POUT,2,0x"));
297 Serial.print(val16, HEX);
298 Serial.print(F(
","));
static LT_PMBus * pmbusPec
uint8_t getAddress()
Get the address.
virtual void setSpeed(uint32_t speed)
Set the speed. If > 100000, enable clock stretching.
LTC SMBus Support: Implementation for a shared SMBus layer.
LTC SMBus Support: Implementation for a shared SMBus layer.
static LT_SMBusPec * smbusPec
float lin16_to_float(lin16_t lin16_mant, lin16m_t vout_mode)
void enablePec(uint8_t address)
Enable pec for all transactions.
float lin11_to_float(lin11_t xin)
static LT_PMBusDevice ** devices
static void print_info(LT_PMBusDevice *device, int id)
LTC SMBus Support: Implementation for a LTC3880 Fault Log.
LT_PMBusDevice ** getDevices()
uint16_t readMfrSpecialId()
static LT_PMBus * pmbusNoPec
void changeSpeed(uint32_t speed)
Change the speed of the bus.
LTC PMBus Support: Implementation for a LTC Fault Log.
static LT_PMBusDevice ** device
LTC SMBus Support: Implementation for a shared SMBus layer.
virtual LT_I2CBus * i2cbus(void)=0
Library Header File for LT_PMBusDevice.
void detect()
Detect devices on bus.
static LT_SMBusNoPec * smbusNoPec
static void loop()
Repeats Linduino loop.
LTC PMBus Support: Math conversion routines.
static LT_PMBusDetect * detector
static void setup()
Initialize Linduino.