AHTOXA 18 16 ноября, 2011 Опубликовано 16 ноября, 2011 · Жалоба Принесли дисплей, из тех. данных есть название, красивая картинка и распиновка:) Ну, думаю, раз ничего не пишут, значит стандартный, HD44780-совместимый. Подключаю, запускаю, и вижу вот что: Это строка "H E L L O!" (Букву "H" я укрупнил). Столбцы в буквах переставлены - четвёртый столбец встал на первое место. При этом пятый, последний столбец находится уже на следующем знакоместе (этого не видно на фото). Вторая строка не отображается, вместо неё пробегают и тут же исчезают какие-то точки. Судя по всему, инициализация более-менее проходит (я могу включить/выключить курсор, поменять шрифт, и пр.), обмен идёт нормально (выводятся именно те буквы, которые я передаю. Это не проблема отдельного экземпляра, я попробовал два дисплея. Вот такая ерунда. Вопросы у меня такие: кто-нибудь встречался с такими дисплеями? Что это может быть? Брак? Вот на всякий случай код: enum { LCD_CLEAR = 0x01, LCD_HOME = 0x02, ENTRY_MODE_SET = 0x04, ENTRY_MODE_INCREMENT = 0x02, ENTRY_MODE_DECREMENT = 0x00, ENTRY_MODE_SHIFT_RIGHT = 0x01, ENTRY_MODE_SHIFT_LEFT = 0x03, DISPLAY_CTL = 0x08, DISPLAY_CTL_BLINK_ON = 0x01, DISPLAY_CTL_CURSOR_ON = 0x02, DISPLAY_CTL_DISPLAY_ON = 0x04, FUNCTION_SET = 0x20, DATA_LENGTH_8_BIT = 0x10, DATA_LENGTH_4_BIT = 0, ONE_LINE = 0, TWO_LINES = 0x08, FONT_5x10 = 0x04, FONT_5x8 = 0, LCDLINE1 = 0x80, LCDLINE2 = 0xC0 }; #define LCD_RS B, 0, H #define LCD_RW B, 1, H #define LCD_E B, 2, H static void set_command_mode() { off(LCD_RS); } static void set_data_mode() { on(LCD_RS); } static void set_write_direction() { off(LCD_RW); } static void write_bus(uint8_t value) { PORTA = value; } static void strobe() { on(LCD_E); __asm__ __volatile__ ("nop"); off(LCD_E); } static void write_data(uint8_t value) { set_data_mode(); write_bus(value); strobe(); delay_ms(4); } static void write_command(uint8_t value) { set_command_mode(); write_bus(value); strobe(); delay_ms(4); } void Hd44780_init() { off(LCD_E); set_write_direction(); direct(LCD_RS, O); direct(LCD_RW, O); direct(LCD_E, O); DDRA = 0xFF; delay_ms(41); // wait more than 40ms after VCC rises to 2.7 V write_command(FUNCTION_SET | DATA_LENGTH_8_BIT); delay_ms(5); // wait more than 4.1ms write_command(FUNCTION_SET | DATA_LENGTH_8_BIT); delay_ms(1); // wait more than 0.1ms write_command(FUNCTION_SET | DATA_LENGTH_8_BIT); write_command(FUNCTION_SET | DATA_LENGTH_8_BIT | TWO_LINES | FONT_5x8); write_command(LCD_CLEAR); write_command(ENTRY_MODE_SET | ENTRY_MODE_INCREMENT); write_command(DISPLAY_CTL | DISPLAY_CTL_DISPLAY_ON); } void Hd44780_putchar(char ch) { write_data(ch); } void Hd44780_puts(char const* s) { while (*s) Hd44780_putchar(*s++); } void Hd44780_cls() { write_command(LCD_CLEAR); } void Hd44780_gotoXY(int line, int pos) { uint8_t cmd = (line == 1) ? LCDLINE1 : LCDLINE2; cmd += (pos - 1); write_command(cmd); } int main (void) { for (;;) { Hd44780_init(); Hd44780_cls(); Hd44780_gotoXY(1, 1); Hd44780_puts("H E L L O!"); Hd44780_gotoXY(2, 1); Hd44780_puts("1234567890"); delay_ms(1000); } return 0; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 17 ноября, 2011 Опубликовано 17 ноября, 2011 · Жалоба Дополнительная информация. Контроллер - точно HD44780-совместимый, я проверил все команды - всё отрабатывает. И курсор, и мигание курсора, и сдвиг вправо/влево, и переключение шрифта - всё работает. Вторую строку тоже нашёл, она оказалась не по адресу 0xC0, как обычно, а сразу вслед за первой, по адресу 0x80+20. Но вот глюк никуда не делся... Похоже, брак :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 17 ноября, 2011 Опубликовано 17 ноября, 2011 · Жалоба Посмотри внимательно , нет следов , что его разбирали Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
halfdoom 0 17 ноября, 2011 Опубликовано 17 ноября, 2011 · Жалоба Вот такая ерунда. Один NOP на строб может быть маловато, в похожем четырехстрочном дисплее минимальная длительность сигнала 'E' была 500нс. И команды он отрабатывал за 400-700мкс, а не за 40, как обычный 44780. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mov 3 17 ноября, 2011 Опубликовано 17 ноября, 2011 · Жалоба http://electronix.ru/forum/index.php?showtopic=90322 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 17 ноября, 2011 Опубликовано 17 ноября, 2011 · Жалоба Посмотри внимательно , нет следов , что его разбирали Не, это COG-дисплей, его не разобрать никак. Стекляшка с напылённым кристаллом. Один NOP на строб может быть маловато, в похожем четырехстрочном дисплее минимальная длительность сигнала 'E' была 500нс. И команды он отрабатывал за 400-700мкс, а не за 40, как обычный 44780. Я пробовал удлинять, без результата. Аж до двух миллисекунд:) Да и проходят команды-то. Он же всё понимает, только отображает криво. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gte 6 17 ноября, 2011 Опубликовано 17 ноября, 2011 · Жалоба Дополнительная информация. Контроллер - точно HD44780-совместимый, я проверил все команды - всё отрабатывает. На сайте нет полного описания. Пишите производителю, спросите тип контроллера и описание на контроллер. Если известен тип контроллера, ищите производителя и смотрите у него. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
halfdoom 0 17 ноября, 2011 Опубликовано 17 ноября, 2011 · Жалоба Он же всё понимает, только отображает криво. Так оно так и было, при укороченном E все отображалось, но лез мусор и курсор позиционировался куда попало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ruslan1 17 17 ноября, 2011 Опубликовано 17 ноября, 2011 · Жалоба Я пробовал удлинять, без результата. Аж до двух миллисекунд:) Да и проходят команды-то. Он же всё понимает, только отображает криво. Как вариант, контроллер не полностью совместим с 44780, точнее является его модификацией, требующей специальных команд инициализации. Дергайте в первую очередь продавца. Пока нет четких данных о типе контроллера- ничего сказать нельзя, только домыслы строить. Еще может быть у вас неправильно выбрана матрица символов (возможны 5x10 и 5x8), или брак(китайская отбраковка, партия в пару тысяч штук). Если на место этого индикатора подключаете обычный 5-вольтовый LCD, все нормально? (только подсветку отключите, иначе в LCD подсветка навернется) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 17 ноября, 2011 Опубликовано 17 ноября, 2011 · Жалоба Так оно так и было, при укороченном E все отображалось, но лез мусор и курсор позиционировался куда попало. А у меня не мусор, а именно те символы, которые я передаю. И позиционируется правильно. Чуете разницу? :) Как вариант, контроллер не полностью совместим с 44780, точнее является его модификацией, требующей специальных команд инициализации.Не представляю, как в протокол 44780 впихнуть дополнительные команды. Там есть четыре битика, все их возможные комбинации я проверил.Дергайте в первую очередь продавца. Пока нет четких данных о типе контроллера- ничего сказать нельзя, только домыслы строить.Продавец смог найти только тот же листочек, что есть по ссылке в первом сообщении темы:) Наверное дёргать недостаточно, надо попинать:)Еще может быть у вас неправильно выбрана матрица символов (возможны 5x10 и 5x8), или брак(китайская отбраковка, партия в пару тысяч штук).Матрицы символов я переключал, работает, но не спасает. Боюсь, что вариант с отбраковкой - самый вероятный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mp41 0 17 ноября, 2011 Опубликовано 17 ноября, 2011 · Жалоба Тут даже если специально хотел бы сделать такое специфично кривое отображение, то не понятно как... А попробуйте вывести что-нибудь из пользовательских символов, которых 8 штук. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 17 ноября, 2011 Опубликовано 17 ноября, 2011 · Жалоба Знакомый рассказыл что несколько лет назад они поставили в прибор Винстаровский OLED 20x2, глюков небыло, но в течении года вышли из стоя все, причем имено сам дисплей (колба). Может с тех пор технология и улучшилась, но тогда им пришлось менять на LCD. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 17 ноября, 2011 Опубликовано 17 ноября, 2011 · Жалоба А попробуйте вывести что-нибудь из пользовательских символов, которых 8 штук. Вот, символы - одна полная строка точек, две строки, три... восемь строк. Вверху с разбивкой пробелами, внизу - подряд. На второй строке заметно "взаимное проникновение" символов:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mp41 0 17 ноября, 2011 Опубликовано 17 ноября, 2011 · Жалоба Будто внутренняя разводка на столбцы неправильная... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 18 17 ноября, 2011 Опубликовано 17 ноября, 2011 · Жалоба Очень на то похоже. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться