I've got an Arduino UNO with a seeedstudio shield. I've been attempting to use the LCD that comes with the kit by changing the LCD pins to
D10 -DI/RS
D12 -ENABLE
13 (A0) - DB4
14 (A1) - DB5
15 (A2) - DB6
16 (A3) - DB7
This is the pinout of the shield, I'm plugging in the LCD to BUS2.
So far, I've been unable to get the LCD to work at all.
I changed the following code to this...
Code:
void LCD::tickleEnable() {
// send a pulse to enable PD5
PORTD |= (1 << 10);
delayMicroseconds2(1); // pause 1 ms according to datasheet
PORTD &= ~(1 << 10);
delayMicroseconds2(1); // pause 1 ms according to datasheet
}
void LCD::cmdWriteSet() { //set enable (PB2) low and DI(PB4) low
PORTD &= ~(1 << 10);
delayMicroseconds2(1); // pause 1 ms according to datasheet
PORTD &= ~(1 << 12);
}
byte LCD::pushNibble(byte value) { //db7=A02, db6=A01, db5 = A00, db4 = PB5
value & 128 ? PORTB |= (1 << 13) : PORTB &= ~(1 << 13);
value <<= 1;
value & 128 ? PORTB |= (1 << 14) : PORTB &= ~(1 << 14);
value <<= 1;
value & 128 ? PORTB |= (1 << 15) : PORTB &= ~(1 << 15);
value <<= 1;
value & 128 ? PORTD |= (1 << 16) : PORTD &= ~(1 << 16);
value <<= 1;
return value;
}
void LCD::LcdCommandWrite(byte value) {
value = pushNibble(value);
cmdWriteSet();
tickleEnable();
value = pushNibble(value);
cmdWriteSet();
tickleEnable();
delay2(5);
}
void LCD::LcdDataWrite(byte value) {
PORTD |= (1 << 12); //di on PB4
value = pushNibble(value);
tickleEnable();
value = pushNibble(value);
tickleEnable();
delay2(5);
}
It seems I am still missing something.... Anyone have any ideas?