Code:
 // bis in the display state. see PCF8574 in schematic
// 0: Power
// 1: RS
// 2: RW
// 3: CS (enable)
// 4: D4
// 5: D5
// 6: D6
// 7: D7

       // function set 4 bit
        // this needs to be done without the add_command function
        g_buffer[0] = 0x21;
        g_buffer[1] = 0x21 | (1<<3);
        g_buffer[2] = 0x21;
        twi.write_to_slave(avr::display_address, g_buffer, 3);
        state++;
    case 7:
        return check_twi(state);
    case 8:
        curr_pos = 0;
        add_command(0,0,0x24); // function set line (enable ext. F);
        add_command(0,0,0x09); // set 4 line mode
        add_command(0,0,0x20); // disable extended function again

        twi.write_to_slave(avr::display_address, g_buffer, curr_pos);
        state++;
        return false;
    case 9:
        return check_twi(state);
    case 10:
        // init done
        curr_pos = 0;
        add_command(0,0,0x0F); // display on
        add_command(0,0,0x01); // clear display
        add_command(0,0,0x06); // entry mode set
        twi.write_to_slave(avr::display_address, g_buffer, curr_pos);
        state++;
        return false;
So hab ich mein Display angeschlossen:
https://www.roboternetz.de/community...l=1#post604859

add_command macht:
Code:
void
add_command(unsigned char rs, unsigned char rw, unsigned char value)
{
    unsigned char out = 0x01; // always power

    // high nibble
    out |= (value & 0xF0);

    // rs and rw flags
    if (rs) out |= (1<<1);
    if (rw) out |= (1<<2);

    // toggle e
    out |= (1<<3);
    g_buffer[curr_pos++] = out;

    out &= ~(1<<3);
    g_buffer[curr_pos++] = out;

    // low nibble
    out &= 0x0F;
    out |= ((value & 0x0F) << 4);

    // toggle e
    out |= (1<<3);
    g_buffer[curr_pos++] = out;

    out &= ~(1<<3);
    g_buffer[curr_pos++] = out;
}
Das bedeutet für dich:
RS = low / RW = low

// function set
- Display D5 hochnehmen
- E high
- E low

// add_command(0,0,0x24) // function set line (enable ext. F);
- out nibble=2
- E high
- E low
- out nibble=4
- E high
- E low

Du siehst also wie du das umsetzen kannst...

Das hier ist der Kern meiner Displayroutine.

Gruß
Georg