Ce programme recherche les circuits DS2438 de surveillance batterie sur le bus 1-wire puis effectue la lecture des données brutes dans les registres des circuits trouvés.
Si SERIAL_LOG_ENABLE
est défini, les valeurs sont affichées sur la liaison série, dans ce cas, l'implémentation choisie pour la gestion du bus 1-wire ne peut pas utiliser l'UART (donc OW_DRIVER_POLLED_PIO
est obligatoire).
Si FLOAT_MES_ENABLE
est défini, la conversion des valeurs brutes en valeurs réelles est effectuée (et leur affichage si SERIAL_LOG_ENABLE
défini) en utilisant RSENS comme résistance de mesure de courant.
Voilà ce que cela donne pour 2 DS2438 sans convertion en valeurs réelles:
#,id
0,26A2FA17020000B9
1,26BEF517020000F0
2 DS2438 devices found
v0,i0,t0,f0,c0,d0,v1,i1,t1,f1,c1,d1
420,-2,5496,0,1,15,522,-5,5600,0,0,138
420,-1,5480,0,1,15,521,-6,5584,0,0,138
Il est prévu pour une carte mto-template, le fichier avrio-board-ow.h dans le répertoire board devra être adapté pour une autre carte.
#include <stdio.h>
#include <avr/pgmspace.h>
#include <avrio/ow-ds2438.h>
#include <avrio/delay.h>
#include <avrio/led.h>
#include <avrio/assert.h>
#include <avrio/tc.h>
#include <avrio/osc.h>
#define SERIAL_LOG_ENABLE //< Valide l'affichage des valeurs sur liaison série
#define BAUDRATE 115200
#define PORT "tty0" // UART0
#define MAX_DEVICES 2 // Nombre max de DS2438 sur le bus 1-wire
#define RSENS 25E-3 // Valeur de la résistance de mesure de courant
#if defined(SERIAL_LOG_ENABLE) && defined(OW_DRIVER_POLLED_UART)
#error Unable to use UART for serial bus and 1-wire bus !
#endif
#ifdef FLOAT_MES_ENABLE
#endif
#ifdef SERIAL_LOG_ENABLE
#define PDEBUG(fmt,...) printf_P(PSTR(fmt),##__VA_ARGS__)
.dbits = 8,
.parity = 'N',
.sbits = 1,
.flow = SERIAL_FLOW_NONE,
};
#else
#define PDEBUG(fmt,...)
#endif
int
main (void) {
int ret, n, nd = 0;
#ifdef SERIAL_LOG_ENABLE
stdout = serial_port;
#endif
sei();
do {
}
while (n < 0);
for (uint8_t i = 0; i < n; i++) {
ds2438[nd] = d;
for (int8_t j = 0; j < 8; j++) {
}
putchar ('\n');
nd++;
}
}
PDEBUG (
"%d DS2438 devices found\n\n", nd);
for (uint8_t i = 0; i < nd; i++) {
PDEBUG (
"v%d,i%d,t%d,f%d,c%d,d%d", i, i, i, i, i, i);
putchar ( (i < (nd - 1)) ? ',' : '\n');
}
for (;;) {
for (uint8_t i = 0; i < nd; i++) {
#ifdef FLOAT_MES_ENABLE
#else
#endif
putchar ( (i < (nd - 1)) ? ',' : '\n');
}
}
return 0;
}