Greetings,
The goal is to log data from a Chargery Battery Management System (BMS).
http://www.chargery.com/doc/Chargery_BMS8T_specification_V3.0.pdf
I've converted the +5V/-5V serial signal out of the BMS to 5V that is read by a Mega pin 19 (RX1).
This is what the data looks like when Mega is reading the stream and then directly outputting to serial monitor.
// ChargerySniffer
#define Serial1_baud 115200
#define RX 1 // RX = pin 19 Mega
const uint32_t DataDelay = 2000; //Delay to determine when data stream ended
uint32_t startMicros;
static boolean busyFlag = false;
void setup()
{
Serial.begin(115200);
Serial.println("Hey There");
Serial1.begin (Serial1_baud);
}
void loop()
{
if (Serial1.available() > 0)
{
int inByte = Serial1.read();
Serial.print(inByte, HEX);
Serial.print(' ');
busyFlag = true;
startMicros = micros();
}
// else
{
if (busyFlag == true && micros() > (startMicros + DataDelay))
{
Serial.println(' ');
busyFlag = false;
}
}
}
Data:
=~=~=~=~=~=~=~=~=~=~=~= PuTTY log 2020.04.09 08:39:22 =~=~=~=~=~=~=~=~=~=~=~=
Hey There
24 24 57 F D 98 2 0 0 0 97 0 97 5F E2
24 24 56 16 C F6 C FD C FE C F9 0 0 0 0 0 48 0 1E 5F 93
68 3A 3A 33 D A
24 24 57 F D 98 2 0 0 0 97 0 97 5F E2
24 24 57 F D 98 2 0 0 0 97 0 97 5F E2
24 24 56 16 C F6 C FD C FE C FA 0 0 0 0 0 49 0 1E 5F 95
24 24 57 F D 98 2 0 0 0 97 0 98 5F E3
24 24 57 F D 98 2 0 0 0 97 0 97 5F E2
68 3A 3A 33 D A
24 24 56 16 C F6 C FD C FE C FA 0 0 0 0 0 49 0 1E 5F 95
24 24 57 F D 98 2 0 0 0 97 0 97 5F E2
24 24 57 F D 98 2 0 0 0 97 0 97 5F E2
24 24 57 F D 98 2 0 0 0 97 0 97 5F E2
24 24 56 16 C F6 C FC C FE C FA 0 0 0 0 0 46 0 1E 5F 91
24 24 57 F D 98 2 0 0 0 97 0 98 5F E3
68 3A 3A 33 D A
24 24 57 F D 98 2 0 0 0 97 0 98 5F E3
24 24 56 16 C F6 C FC C FE C F9 0 0 0 0 0 46 0 1E 5F 90
24 24 57 F D 98 2 0 0 0 97 0 98 5F E3
24 24 57 F D 98 2 0 0 0 97 0 97 5F E2
24 24 56 16 C F6 C FC C FE C FA 0 0 0 0 0 46 0 1E 5F 91
24 24 57 F D 98 2 0 0 0 97 0 97 5F E2
68 3A 3A 33 D A
24 24 57 F D 98 2 0 0 0 97 0 97 5F E2
24 24 56 16 C F7 C FC C FE C F7 0 0 0 0 0 48 0 1E 5F 91
24 24 57 F D 98 2 0 0 0 97 0 97 5F E2
24 24 57 F D 98 2 0 0 0 97 0 97 5F E2
24 24 57 F D 98 2 0 0 0 97 0 97 5F E2
24 24 56 16 C F6 C FE C FE C F9 0 0 0 0 0 46 0 1E 5F 92
68 3A 3A 33 D A
24 24 57 F D 98 2 0 0 0 97 0 98 5F E3
24 24 57 F D 98 2 0 0 0 97 0 98 5F E3
24 24 56 16 C F5 C FD C FE C F9 0 0 0 0 0 43 0 1E 5F 8D
24 24 57 F D 98 2 0 0 0 96 0 98 5F E2
Data begins with a two byte header (0x24, 0x24) and then a 1 byte command (either 0x56 or 0x57), followed by data and finishing up with a check sum. I don't know what's going on with data packet: 68 3A 3A 33 D A . Not a concern.
I'm having problems storing the packets into an array.
My sketch:
// ChargeryArray2
const byte numBytes = 30;
int receivedData[numBytes]; // an array to store the received data
#define RX 1 // RX = pin 19 Mega
void setup()
{
Serial.begin(115200);
Serial.println("Hey There");
Serial1.begin (115200);
}
void loop()
{
getData56();
delay(10);
displayData();
receivedData[1] = 0;
getData57();
delay(10);
displayData();
receivedData[1] = 0;
}
void getData56() { // 0x56 = 86
int inByte;
int inByte0;
int inByte1;
if (Serial1.available() > 0)
{
do {
inByte0 = Serial1.read();
inByte1 = Serial1.read();
} while (inByte0 != 36 && inByte1 != 86); // header = 0x24 = 36
for (int i = 2; i < 21; i++)
{
inByte = Serial1.read();
receivedData[i] = inByte;
}
receivedData[0] = inByte0;
receivedData[1] = inByte1;
}
}
void getData57() { // 0x57 = 87
int inByte;
int inByte0;
int inByte1;
if (Serial1.available() > 0)
{
do {
inByte0 = Serial1.read();
inByte1 = Serial1.read();
} while (inByte0 != 36 && inByte1 != 87); // header = 0x24
for (int i = 2; i < 15; i++)
{
inByte = Serial1.read();
receivedData[i] = inByte;
}
receivedData[0] = inByte0;
receivedData[1] = inByte1;
}
}
void displayData() {
if (receivedData[1] == 86) {
for (int i = 0; i < 21; i++) {
Serial.print(receivedData[i], HEX);
Serial.print(" ");
}
Serial.println();
}
if (receivedData[1] == 87) {
for (int i = 0; i < 14; i++) {
Serial.print(receivedData[i], HEX);
Serial.print(" ");
}
Serial.println();
}
}
Stored data:
=~=~=~=~=~=~=~=~=~=~=~= PuTTY log 2020.04.09 09:16:05 =~=~=~=~=~=~=~=~=~=~=~=
Hey There
24 57 F D 98 2 0 0 0 98 0 99 5F E5
FFFFFFFF 57 FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
24 57 F D 98 2 0 0 0 98 0 9A 5F E6
24 57 F D 98 2 0 0 0 98 0 9A 5F E6
24 57 F D 98 2 0 0 0 99 0 99 5F E6
24 57 F D 98 2 0 0 0 98 0 99 5F E5
24 57 F D 98 2 0 0 0 99 0 99 5F E6
24 57 F D 98 2 0 0 0 99 0 9A 5F E7
24 57 F D 98 2 0 0 0 99 0 9A 5F E7
24 57 F D 98 2 0 0 0 98 0 99 5F E5
24 57 F D 98 2 0 0 0 99 0 99 5F E6
24 57 F D 98 2 0 0 0 98 0 99 5F E5
24 56 16 C F9 C FC C FE C FC 0 0 0 0 0 5A 0 21 5F AD
24 57 F D 98 2 0 0 0 98 0 9A 5F E6
24 57 F D 98 2 0 0 0 99 0 99 5F E6
24 56 16 C F9 C FC C FE C FD 0 0 0 0 0 58 0 24 5F AF
24 56 16 C F9 C FD C FE C FC 0 0 0 0 0 5D 0 24 5F B4
24 57 F D 98 2 0 0 0 99 0 9A 5F E7
24 57 F D 98 2 0 0 0 98 0 99 5F E5
24 57 F D 98 2 0 0 0 98 0 99 5F E5
24 57 F D 98 2 0 0 0 98 0 9A 5F E6
24 57 F D 98 2 0 0 0 98 0 99 5F E5
FFFFFFFF 57 FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
24 57 F D 98 2 0 0 0 99 0 99 5F E6
24 56 16 C F9 C FE C FE C FD 0 0 0 0 FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
24 57 F D 98 2 0 0 0 98 0 9A 5F E6
24 57 F D 98 2 0 0 0 98 0 9A 5F E6
24 57 F D 98 2 0 0 0 99 0 99 5F E6
24 56 16 C F9 C FD C FD C FA 0 0 0 0 FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
24 57 F D 98 2 0 0 0 98 0 99 5F E5
24 57 F D 98 2 0 0 0 98 0 99 5F E5
24 57 F D 98 2 0 0 0 98 0 99 5F E5
24 57 F D 98 2 0 0 0 99 0 9A 5F E7
24 57 F D 98 2 0 0 0 99 0 99 5F E6
24 56 16 C F9 C FE C FD C FC 0 0 0 0 0 5B 0 21 5F AF
Sometimes the data flips out with a series of "FFFFFFFF" when displaying the 0x56 packet.
Thanks for any assistance.
