Bits falsch gesetzt, crc Prüfsumme immer flasch

bool _word = pgm_read_word(&telegrammArray[i][y]);

read_byte(). read_word() liest zwei Bytes aus.

Wieso packst du nicht wenigstens 4 Bit in ein Byte, statt jedes Bit einzeln zu speichern? Dann hat man immer noch die Trennung der Bedeutungen

EDIT: Durch das Lesen von zwei Bytes und die etwas unsaubere Verwendung von bool statt byte handelst du dir leicht Fehler ein:

void setup ()
{
  Serial.begin(115200);  

  bool b1 = 0x1000;
  byte b2 = 0x1000;

  Serial.println(b1);
  Serial.println(b2);
}

Macht:

1
0

bool und byte mögen sehr ähnlich erscheinen. Aber der Compiler behandelt die leicht unterschiedlich da sie unterschiedliche Dinge darstellen