Дисплей 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_PORT    2       // номер пина, к которому подключен вывод POR (сброс) экрана
#define TIC107_PORT_PORT   C       // номер порта

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

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

  DDR(TIC107_PORT_PORT) |= _BV(TIC107_PIN_PORT);

  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
Голосов еще нет