Go Back   EcoModder Forum > EcoModding > Instrumentation > OpenGauge / MPGuino FE computer
Register Now
 Register Now
 

Reply  Post New Thread
 
Submit Tools LinkBack Thread Tools
Old 10-23-2012, 09:49 PM   #1 (permalink)
EcoModding Lurker
 
Join Date: Oct 2012
Location: Michigan
Posts: 2
Thanks: 0
Thanked 0 Times in 0 Posts
Changing I/O Pins

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?

  Reply With Quote
Alt Today
Popular topics

Other popular topics in this forum...

   
Old 10-24-2012, 12:36 AM   #2 (permalink)
EcoModding Lurker
 
Join Date: Oct 2012
Location: Michigan
Posts: 2
Thanks: 0
Thanked 0 Times in 0 Posts
Doh! Found the pin problem with the previous code chunk, but still not working... ugh!



void LCD::tickleEnable() {
// send a pulse to enable PB4
PORTB |= (1 << 4);
delayMicroseconds2(1); // pause 1 ms according to datasheet
PORTB &= ~(1 << 4);
delayMicroseconds2(1); // pause 1 ms according to datasheet
}

void LCD::cmdWriteSet() { //set enable (PB4) low and DI(PB2) low
PORTB &= ~(1 << 4);
delayMicroseconds2(1); // pause 1 ms according to datasheet
PORTB &= ~(1 << 2);
}

byte LCD:ushNibble(byte value) { //db7=PC2, db6=PC1, db5 = PC0, db4 = PB5
value & 128 ? PORTB |= (1 << 5) : PORTB &= ~(1 << 5);
value <<= 1;
value & 128 ? PORTC |= (1 << 0) : PORTC &= ~(1 << 0);
value <<= 1;
value & 128 ? PORTC |= (1 << 1) : PORTC &= ~(1 << 1);
value <<= 1;
value & 128 ? PORTC |= (1 << 2) : PORTC &= ~(1 << 2);
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) {
PORTB |= (1 << 4); //di on pb4
value = pushNibble(value);
tickleEnable();
value = pushNibble(value);
tickleEnable();
delay2(5);
}

  Reply With Quote
Reply  Post New Thread






Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.
Content Relevant URLs by vBSEO 3.5.2
All content copyright EcoModder.com