Дисплей TIC107

TIC 107 trolsoft

Описание дисплея

TIC107 - текстовый двухстрочный 16x2 дисплей с управлением по I2C-интерфейсу. Производится по заказу компании ООO «ГАММА-Санкт-Петербург» Достоинства этого экрана - сравнительно низкая стоимость и более простое подключение и управление (если сравнивать с другими 16x2 экранами на основе контроллера HD44780). Недостаток - сложно достать. Экран управляется контроллером PCF2119

Подключение

Экран имееет 7 выводов вверху плюс две пары крепежных выводов внизу. Назначение верхних выводов следующее (нумерация слева-направо):

1 - SCL, сигнал шины I2c
2 - POR, сброс драйвера. Подключается к выходу микроконтроллера, подача высокого уровня осуществляет сброс контроллера дисплея
3 - SDA, сигнал шины I2c
4 - VDD1, питание +5В
5 - VDD2/VDD3, питание +2.2..4.0В
6 - VSS, земля
7 - VLCD, керамический конденсатор 0.1 мкФ на землю

Схема подключения экрана к МК:

Схема подключения TIC107 к МК

Программирование TIC-107

Дисплей имеет фиксированный адрес на шине IC2 - 0x74.

Обе отображаемые строки хранятся в DDRAM-памяти. Вот карта памяти экрана из даташита:

Карта памяти TIC107

Первая строка хранится по адресу 0×00 - 0×27, вторая - по адресу 0×40 - 0×67. Видимая часть ограничена первыми 16 символами, что соответствует адресам 0×00 - 0x0F и 0×40 - 0x4F.

Инициализация выполняется следующим образом:

#define TIC107_ADDR			0x74    // адрес I2C экрана
#define TIC107_PIN_POR		2       // номер пина, к которому подключен вывод POR (сброс) экрана
#define TIC107_PORT_POR		C       // номер порта

/**
 * Формирует положительный импульс сброса
 */
inline static void LCD_Reset() {
	PORT(TIC107_PORT_POR) |= _BV(TIC107_PIN_POR);
	_delay_ms(5);
	PORT(TIC107_PORT_POR) &= ~_BV(TIC107_PIN_POR);
	_delay_ms(10);
}

/**
 * Выполняет инициализацию экрана
 */
inline static void LCD_Init() {
	i2c_init();

	DDR(TIC107_PORT_POR) |= _BV(TIC107_PIN_POR);

	LCD_Reset();

	i2c_Start();
	i2c_SendAddress(TIC107_ADDR);

	i2c_SendByte(0b00000000);              // Co=0, RS=0
	i2c_SendByte(0b00110100);              // DL=1, M=1, SL=0, H=0
	i2c_SendByte(0b00001100);              // D=1, C=0, B=0
	i2c_SendByte(0b00000110);              // I/D=1, S=0

	i2c_SendByte(0b00110101);              // DL=1, M=1, SL=0, H=1
	i2c_SendByte(0b00000011);              // L=1
	i2c_SendByte(0b00000100);              // P=0, Q=0
	i2c_SendByte(0b00001000);              // IM=0, IB=0
	i2c_SendByte(0b00010000);              // TC1=0, TC2=0
	i2c_SendByte(0b01000010);              // S1=1, S0=0 (4x)
	i2c_SendByte(0b10000000 | 23);         // V=0 (Va)

    i2c_Stop();
}

После инициализации надо настроить контрастность экрана (255-максимальная контрастность):

void LCD_Contrast(uint8_t val) {
	i2c_Start();
	i2c_SendAddress(TIC107_ADDR);


    i2c_SendByte(0b00000000);              // Co=0, RS=0
    i2c_SendByte(0b00110101);              // DL=1, M=1, SL=0, H=1
    i2c_SendByte(0b10000000 | val);        // V=0 (Va)

    i2c_Stop();
}

После этого экран полностью проинициализирован, и можно отображать на нем символы и строки

/**
 * Устанавливает позицию для вывода данных
 * 	x - номер столбца (0..15)
 * 	y - номер строки (0, 1)
 */
void LCD_GotoXY(uint8_t x, uint8_t y) {
	i2c_Start();

	i2c_SendAddress(TIC107_ADDR);
	i2c_SendByte(0b00000000);              // Co=0, RS=0
	i2c_SendByte(0b00110100);              // DL=1, M=1, SL=0, H=0
	uint8_t addr = y == 0 ? 0 : 0x40;
	i2c_SendByte(0b10000000 | (addr+x));       // set DDRAM address
	i2c_Stop();
}

/**
 * Выводит символ в текущую позицию курсора
 */
void LCD_PrintChar(char ch) {
	i2c_Start();
	i2c_SendAddress(TIC107_ADDR);
	i2c_SendByte(0b01000000);              // Co=0, RS=1
	i2c_SendByte(ch+128);
	i2c_Stop();
}

/**
 * Выводит строку в текущую позицию курсора
 */
void LCD_PrintLine(char *str) {
	i2c_Start();
	i2c_SendAddress(TIC107_ADDR);
	i2c_SendByte(0b01000000);              // Co=0, RS=1

	for (uint8_t i = 0; ; i++) {
	    char ch = str[i];
	    if (!ch) {
	        break;
	    }
		i2c_SendByte(ch+128);
	}
	i2c_Stop();
}


Таблица символов

Для отображения символов латинского алфавита, цифр и основных символов надо к их ASCII-коду прибавить 128. После такой трансформации таблица символов выглядит следующим образом (код символа растет слева-направо и сверху-вниз):

Таблица символов TIC107

Символы кириллицы присутствуют не в полном объеме - отсутствуют буквы, которые имеют аналоги по начертанию в латинском алфавите. Для формирования строк с кириллицей я написал небольшой онлайн-конвертер. Введите в поле ниже нужную строку и нажмите Enter.

Строка для конвертации:
Результат:

По ссылкам ниже можно скачать даташит на контроллер PCF2119, исходный код и библиотеку Eagle.

Файлы:
DownloadДаташит PCF2119
DownloadИсходники
DownloadБиблиотека Eagle

Рейтинг: 
0
Голосов еще нет