Du Initialisierst das Ding als 8-Bit, schickst die Daten aber *immer* im 4-Bit-Format. Vielleicht ist es das ja?

Sende mal als erstes nach einem Reset das _4Bit, und zwar nur eine Übertragung, also nur das High-Nibble, das die Information trägt. Danacherst "normale" Kommunikation mit immer High- und Low-Nibble.