LCD1602/HD44780 на OLED1602/WS0010

Crazof
Offline
Зарегистрирован: 21.06.2018

Добрый день. 

Проект работающий на LCD 1602. Необходимо подправить для работы с OLED 1602.

Решения в интернете есть, для LiquidCrystal, но библиотека в проекте не стандартная (авторская).

Кусок кода 

	/*
	 * if we are an lcd, we use a backlight PWM wire
	 */
	//if (display_type == DISP_TYPE_LCD) {
		pinMode(myBacklightPin, OUTPUT);      // pwm backlight
	//}
}


// our init routine
void 
LCDI2C4Bit::init(void)
{
	// set a mutex so that the IR isr won't do anything
	// while we are doing lcd i/o
	lcd_in_use_flag = 1;

	dataPlusMask = 0;  // clear our mask

	// set up the MCP port expander chip (not yet talking to
	// the lcd at this point)
	SetMCPReg(MCP_REG_IOCON, 0x0C);
	delay(50);
	SetMCPReg(MCP_REG_IODIR, myInputKeysMask);
	delay(50);
	SetMCPReg(MCP_REG_GPPU, myInputKeysMask);
	delay(50);

	SendToLCD(0x03); 
	delay(5);

	SendToLCD(0x03);
	delayMicroseconds(100);

	SendToLCD(0x03);
	delay(5);

	SendToLCD(0x02);

	WriteLCDByte(0x28);

	// display ON, no cursor, no blink
	WriteLCDByte(0x0C);
	delayMicroseconds(60);

	// clear display
	command(0x01);

	// TODO: try this for vfd's and verify the brightness bits
	// actually work
	// command(B00101010);	// last 2 bits are min brightness

	lcd_in_use_flag = 0;	// clear that mutex
				// (so that the IR isr CAN now do things)
}


void
LCDI2C4Bit::SetInputKeysMask(byte input_keys_mask)
{
	myInputKeysMask = input_keys_mask;
}


#ifdef LOCAL_MCP_DRIVER
// write one byte to LCD (via i2c)
void 
LCDI2C4Bit::SetMCPReg(byte reg, byte val)
{
	i2c_write(lcd_i2c_address, reg, val);
}


// read 1 byte from LCD (via i2c)
byte
LCDI2C4Bit::GetMCPReg(byte reg)
{
	byte	val = 0;

	i2c_read(lcd_i2c_address, reg, &val);
	return val;
}
#endif	// LOCAL_MCP_DRIVER


// 2 extra lines on the MCP chip that we can map to soft pushbuttons
byte
LCDI2C4Bit::ReadInputKeys(void)
{
	byte	data;
	data = GetMCPReg(MCP_REG_GPIO);

	return data;
}


// lower layer routine that does the enable-bit 'wrapping' of
// a 4 bit parallel transaction
void 
LCDI2C4Bit::SendToLCD(byte data) 
{
	data |= dataPlusMask;
	SetMCPReg(MCP_REG_OLAT, data);
	delayMicroseconds(9);

	data ^= 0x80; // 'enable' bit ON on LCD
	SetMCPReg(MCP_REG_OLAT, data);
	delayMicroseconds(9);

	data ^= 0x80; // 'enable' bit OFF on LCD
	SetMCPReg(MCP_REG_OLAT, data);
	delayMicroseconds(9);
}


// higher layer interface; this takes an 8-bit data and makes 2 calls to
// send to the lcd, 4 bits at a time
void 
LCDI2C4Bit::WriteLCDByte(byte bdata)
{
	// set a mutex so that the IR isr won't do anything
	// while we are doing lcd i/o
	lcd_in_use_flag = 1;

	SendToLCD(bdata >> 4);
	delayMicroseconds(9);

	SendToLCD(bdata & 0x0F);
	delayMicroseconds(9);

	lcd_in_use_flag = 0;	// clear that mutex
				// (so that the IR isr CAN now do things)
}


// 'write' sends character data, setting RS high (the other routine, 'commands'
// sends non-char data)
void 
LCDI2C4Bit::write(byte value) 
{
	dataPlusMask |= 0x10; // RS is set
	WriteLCDByte(value);
	dataPlusMask ^= 0x10; // RS is cleared
}


// 'command' leaves RS low when it sends bytes
void 
LCDI2C4Bit::command(byte command)
{
	// RS - leave low
	WriteLCDByte(command);
	delayMicroseconds(800);
}

 

sadman41
Offline
Зарегистрирован: 19.10.2016

WS0010 - это же винстар? Дисплей будет предоставлен для проверки?

Crazof
Offline
Зарегистрирован: 21.06.2018

Да, это Winstar. С предоставлением дисплея надо подумать. Вам придётся макет собирать. Минимум
MCP23008 подключать D4-D7 через неё идёт.

Crazof
Offline
Зарегистрирован: 21.06.2018

Блин, как с телефона хреново писать. С предоставлением *

sadman41
Offline
Зарегистрирован: 19.10.2016

Интересное развитие событий.
Пишите детали на work.sadman@gmail.com

b707
Offline
Зарегистрирован: 26.05.2017

Не, ну можно и без " предоставления", если ТС готов бесконечно тестировать все новые варианты . Мы с одним клиентом написали друг другу 69 мэйлов, прежде чем железо согласилось работать с моим кодом :)

Crazof
Offline
Зарегистрирован: 21.06.2018

Давайте email. Попробуем.

Crazof
Offline
Зарегистрирован: 21.06.2018

И тишина...

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018
Crazof
Offline
Зарегистрирован: 21.06.2018

Писал. Тишина.

sadman41
Offline
Зарегистрирован: 19.10.2016

О... это меня андроид со своей автокоррекцией подставил.

wrk.sadman@gmail.com

Crazof
Offline
Зарегистрирован: 21.06.2018

sadman41 пишет:

О... это меня андроид со своей автокоррекцией подставил.

wrk.sadman@gmail.com


Инфу я скинул на почту. Всё открывается?

sadman41
Offline
Зарегистрирован: 19.10.2016

В ящике ничего, в спаме ничего. Прохождение проверил с яндекса...

b707
Offline
Зарегистрирован: 26.05.2017

gmail испортился. он теперь не позволяет вкладывать в письмо архивы zip rar и тому подобное, причем определяет по содержимому, а не по расширению

Crazof
Offline
Зарегистрирован: 21.06.2018

Странно. Сейчас попробую ещё раз.

sadman41
Offline
Зарегистрирован: 19.10.2016

b707 пишет:

gmail испортился. он теперь не позволяет вкладывать в письмо архивы zip rar и тому подобное, причем определяет по содержимому, а не по расширению

Есть такое уже давненько. Но при этом он предупреждает, что заблокировал пересылку. Тайком в ведро не выкидывает.

Crazof
Offline
Зарегистрирован: 21.06.2018

Отправил

sadman41
Offline
Зарегистрирован: 19.10.2016

Давайте я вам напишу, что ли...

Crazof
Offline
Зарегистрирован: 21.06.2018

Попробуйте. crazoff@mail.ru
А я сейчас на обменник скину.

Crazof
Offline
Зарегистрирован: 21.06.2018

На тестовые письма ответил

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

b707 пишет:

gmail испортился. он теперь не позволяет вкладывать в письмо архивы zip rar и тому подобное, причем определяет по содержимому, а не по расширению

Есть такое. Выхожу из положения архивированием с паролем, пароль в тексте письма указываю. Ну или как второй вариант - файлообменник.

Crazof
Offline
Зарегистрирован: 21.06.2018

Ссылку на обменник указал в письме