Работа с ЖКИ на контроллере HD44780 и его аналогах
Прошу Модератора "вынести в шапку темы" строку: После INIT-а надо дать команду "включить индикатор"
С Уважением, Альберт (Albert_V).
- Реклама
а я бы попросил вас либо быть внимательнее, либо пользоваться готовыми решениями, коих больше, чем требуется.Albert_V писал(а):Прошу Модератора "вынести в шапку темы" строку: После INIT-а надо дать команду "включить индикатор"
Последний раз редактировалось ARV Вс фев 22, 2015 07:02:15, всего редактировалось 1 раз.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 10
- Зарегистрирован: Сб ноя 22, 2014 22:41:49
Купил на ибее....... Дисплей 1602А контроллер SPLC780D. Методы инициализации для HD44780 тут не работают. Что только не пробовал
Может кто имел дело с дисплеями на данном контроллере.
"Подключал к меге16"
Может кто имел дело с дисплеями на данном контроллере.
"Подключал к меге16"
А зачем вы покупали то, что заведомо не сможете подключить?ТОХЫЧ писал(а):Купил на ибее.......
А может вы не правильно его инициализировали?ТОХЫЧ писал(а):Методы инициализации для HD44780 тут не работают.
Ну судя по даташиту это тоже самое, что и в этой теме. Т.е. запустить его просто. Для чего следует внимательно почитать эту тему. Я когда свой первый раз запускал похожий дисплей прочитал все страницы, потом начал задавать вопросы.ТОХЫЧ писал(а):SPLC780D
А вы могли бы перечислить подробно, что испробовали? И фотки показать, как подключали.
З.Ы. Вот даташит: http://www.hebeiltd.com.cn/lcm.datashee ... 80D_DS.pdf
http://caxapa.ru/120373.html
Станислав
- Сообщения: 10
- Зарегистрирован: Сб ноя 22, 2014 22:41:49
Давайте не будем...А зачем вы покупали то, что заведомо не сможете подключить?
Собственно это и есть суть вопроса.А может вы не правильно его инициализировали?
Даташит прочтен от корки до корки. Подключал как по 4 так и по 8. Задержки выставлял в точности с указанными в даташите.
Для начала хочу уточнить какой кварц нужен для работы микроконтроллера с данным дисплеем и нужен ли он вообще.
P.S. код чуть попозже.
- Реклама
Кварц на ваше усмотрение. Просто для формирования задержек при инициализации надо будет вычислить время в зависимости от частоты тактирования.
Задержки можно делать больше, чем указано в даташите.
С Протеусом вообще рекомендую связываться в самом крайнем случае. Т.к. в нем бывает и работает все, а на деле в железе будут одни ошибки. Протеус-Зло.
И проверьте на каком порту сидит дисплей в Меге16, иногда забывают отключать ДЖИТАГ, который у нее по умолчанию всегда включен.
А изначально, подключите питание к дисплею и потенциометр на контрастность. Попробуйте без всяких МК просто настроить контраст, чтобы было слегка видно закрашенные квадратики в верхней строке. А уже после этого мучить МК, чтобы наконец-то что-то показывать стало. ))))
Примерно так пока.
На каком языке хоть код???
Задержки можно делать больше, чем указано в даташите.
С Протеусом вообще рекомендую связываться в самом крайнем случае. Т.к. в нем бывает и работает все, а на деле в железе будут одни ошибки. Протеус-Зло.
И проверьте на каком порту сидит дисплей в Меге16, иногда забывают отключать ДЖИТАГ, который у нее по умолчанию всегда включен.
А изначально, подключите питание к дисплею и потенциометр на контрастность. Попробуйте без всяких МК просто настроить контраст, чтобы было слегка видно закрашенные квадратики в верхней строке. А уже после этого мучить МК, чтобы наконец-то что-то показывать стало. ))))
Примерно так пока.
На каком языке хоть код???
Станислав
добавляйте "по моему мнению", ибо это очень-очень-очень предвзятое утверждение.СКАЗОЧНИК писал(а):Протеус-Зло.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
... и по мнению еще очень многих )
Ситуация, согласитесь, отнюдь не в пользу этого самого протеуса.
Был написан некий код для HD44780. Который, вроде бы, работал в симуляторе. Но не проверялся в железе.
Теперь куплен ЖКИ на полном аналоге этого контроллера, но с ранее писанным кодом, который, повторюсь, НЕ проверялся в железе, он не работает.
Ну и кто из них ?..
Ситуация, согласитесь, отнюдь не в пользу этого самого протеуса.
Был написан некий код для HD44780. Который, вроде бы, работал в симуляторе. Но не проверялся в железе.
Теперь куплен ЖКИ на полном аналоге этого контроллера, но с ранее писанным кодом, который, повторюсь, НЕ проверялся в железе, он не работает.
Ну и кто из них ?..
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
Мало инфы. Схема подключения, код?ТОХЫЧ писал(а):Дисплей 1602А контроллер SPLC780D.
Может, у вас тупо не хватает напряжения для контрастности.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
вы знаете, сколько людей в год погибает от ран, нанесенных умышленно или по неосторожности отверткой? так что, следует признать, что отвертка - зло?abc писал(а):... и по мнению еще очень многих )
Ситуация, согласитесь, отнюдь не в пользу этого самого протеуса.
протеус - это инструмент, и очень хороший инструмент! со своими функциями он справляется если не на отлично, то на сверхтвердую четверку с плюсом, имхо. если кто не умеет использовать этот инструмент, или паче чаяния надеется, что профессиональный инструмент из любого ламера сделает Билла Гейтса - это его проблемы, а не проблемы инструмента
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 10
- Зарегистрирован: Сб ноя 22, 2014 22:41:49
Код: Выделить всё
#define F_CPU 8000000UL// Внутренний генератор
#include <avr/io.h>
#include <util/delay.h>
// Подключение: К портуВ
// RS-B0, RW-GND, E-B1, D4-B4, D5-B5, D6-B6, D7-B7
#define PORTLC PORTB // Порт подключения к ЖКИ
#define DDRLC DDRB // Определяем направленность вход/выхода порта
#define poryd 0b11110011// Определяем подключенные ножки порта к ЖКИ
#define E PB1 // Нога подключенная для передачи строба подтверждения передачи данных
#define RS PB0 // Нога для (команда или данные) передачи данных
#define E1 PORTLC |= _BV (E); // E=1
#define E0 PORTLC &= ~_BV (E); // E=0
#define RS1 PORTLC |= _BV (RS); //RS=1
#define RS0 PORTLC &= ~_BV (RS); //RS=0
void command_lcd (unsigned char cmd)
{
PORTLC = (cmd & 0xF0); // Передаем старший полубайт *1111 0000
RS0; // Для передачи комманды
E1; // Подтверждение передачи данных
_delay_us (2); // Небольшая задержки для обработки команды контроллером ЖКИ
E0; // Окончание импульса строба
PORTLC = ((cmd & 0x0F) << 4); // Передаем младший полубайт * 0000 1111
RS0;
E1;
_delay_us (2);
E0;
_delay_us (2);
}
void Initialization (void) // Определяем функцию инициализации //
{
DDRLC = poryd; // подключенные к жки устанавливаем в 1- выходы, два не использующихся оставляем как входы
PORTLC = 0x00; // устанавливаем на выходах 0, где по условию RS and RW также должны быть = 0.
_delay_ms (20); // Wait time > 15 ms
command_lcd (0x30); // 0011 0000 rw=0, rs=0
_delay_ms (5); // Wait time > 4.1 ms
command_lcd (0x30); // 0011 0000 rw=0, rs=0
_delay_us (120); // Wait time > 100 us
command_lcd (0x30); // 0011 0000 rw=0, rs=0
command_lcd (0x20); // 0010 0000 rw=0, rs=0
command_lcd (0x20); // 0010 0000 rw=0, rs=0
command_lcd (0xc0); // 1100 0000 rw=0, rs=0
command_lcd (0x10); // 0001 0000 rw=0, rs=0 Display clear
command_lcd (0x60); // 0110 0000 rw=0, rs=0 Entry mode set
}
...........
int main(void)
{
Initialization ();
InstallationCursor (4, 2);
_delay_us (50);
PrintString ("Hello" );
}
Не полный аналог.Теперь куплен ЖКИ на полном аналоге этого контроллера
Последний раз редактировалось ТОХЫЧ Пн мар 30, 2015 10:42:55, всего редактировалось 1 раз.
ТОХЫЧ, повторюсь: напряжение питания? При выкручивании контраста на максимум закрашенные квадратики появляются?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Сообщения: 10
- Зарегистрирован: Сб ноя 22, 2014 22:41:49
Да с контрастом все ок. При включении верхняя строка заполняется квадратами.Gudd-Head писал(а):ТОХЫЧ, повторюсь: напряжение питания? При выкручивании контраста на максимум закрашенные квадратики появляются?
- Сообщения: 10
- Зарегистрирован: Сб ноя 22, 2014 22:41:49
Подключал к порту D так что jtag не мешает поскольку он на С.СКАЗОЧНИК писал(а): И проверьте на каком порту сидит дисплей в Меге16, иногда забывают отключать ДЖИТАГ, который у нее по умолчанию всегда включен.
У меня скорее проблема с задержками и командами в самой функции иннициализации.
А это вся программА? А где основной цикл? Я уже плохо Си помню, однако, не могу понять в какой последовательности все происходит... 
Станислав
Добавьте внутрь command_lcd в самое начало задержку 50..100 мкс, а то у Вас команды идут подряд одна за другой, и дисплей их тупо не успевает обработать. А статус Вы не читаете. Между двумя стробами в command_lcd тоже небольшая задержка не помешает.ТОХЫЧ писал(а):Код: Выделить всё
command_lcd (0x20); // 0010 0000 rw=0, rs=0 command_lcd (0x20); // 0010 0000 rw=0, rs=0 command_lcd (0xc0); // 1100 0000 rw=0, rs=0
Последний раз редактировалось WiseLord Пн мар 30, 2015 11:07:52, всего редактировалось 1 раз.
- Сообщения: 10
- Зарегистрирован: Сб ноя 22, 2014 22:41:49
Нет не вся. Это и есть суть вопроса ИнициализацияСКАЗОЧНИК писал(а):А это вся программА? А где основной цикл?
.А статус Вы не читаете
Нет RW на GND
Первые три команды инициализации не надо передавать вторую тетраду. Только старший полубайт.
Станислав
Да, посмотрел ещё раз внимательнее. Инициализация совсем неправильная.
Первые три command_lcd (0x30) и последующая command_lcd (0x20) должны выполняться с одним стробом (в 8-битном режиме), и только последующие уже с двумя стробами (в 4-битном). А так у Вас инициализация идёт чёрти-как, в микросхему идут не 0x30 - delay - 0x30 - delay - 0x30 - delay - 0x20 инициализирующие данные, а что-то вроде 0x30 - 0x00 - delay - 0x30 - 0x00 - delay - 0x30 - 0x00 - delay - 0x20 - 0x00.
P.S. 2 СКАЗОЧНИК: разошлись на полминуты
Ну а предыдущее моё сообщение по поводу задержек в начале command_lcd (ввиду отсутствия здесь чтения статуса) тоже примите к сведению.
Первые три command_lcd (0x30) и последующая command_lcd (0x20) должны выполняться с одним стробом (в 8-битном режиме), и только последующие уже с двумя стробами (в 4-битном). А так у Вас инициализация идёт чёрти-как, в микросхему идут не 0x30 - delay - 0x30 - delay - 0x30 - delay - 0x20 инициализирующие данные, а что-то вроде 0x30 - 0x00 - delay - 0x30 - 0x00 - delay - 0x30 - 0x00 - delay - 0x20 - 0x00.
P.S. 2 СКАЗОЧНИК: разошлись на полминуты
Ну а предыдущее моё сообщение по поводу задержек в начале command_lcd (ввиду отсутствия здесь чтения статуса) тоже примите к сведению.
и вот эта лишняя одна
Код: Выделить всё
command_lcd (0x20); // 0010 0000 rw=0, rs=0У меня используется команда для очистки дисплея 0000 0001... (хотя, это может быть только у меня так, забыл уже. )))))
Последний раз редактировалось СКАЗОЧНИК Пн мар 30, 2015 11:32:57, всего редактировалось 1 раз.
Станислав


