СКАЗОЧНИК писал(а):Не могу сказать, что мне хватило 15 минут, чтобы написать свою библиотечку...
Да.... было дело на несколько страниц.
В результате, Вы выложили для всех исходники своих библиотек.
Здесь делов то, изменить вывод данных из вашей опубликованной библиотеки.
Видимо и это уже сложно, если спрашивают о наработках и библиотеках.
Возможно, что это банальная лень... Или просто страх перед неизведанным. ) Но мне нравится наступать на свои грабли и быть первооткрывателем.
А если серьезно, то я думал, почему бы не взять библиотеку от Ди-Халта и не попробовать сделать лучше? Ну, получилось что получилось, результатом я очень доволен.
И куда бы я побрел без вашей лично и всеобщей помощи?! А теперь, когда пришло осознание, как это работает, хочется по мере возможности помочь и другим сделать тоже самое.
СКАЗОЧНИК писал(а):...мне нравится наступать на свои грабли и быть первооткрывателем....
...хочется по мере возможности помочь и другим сделать тоже самое...
И это правильно.
Лично я никогда не пользуюсь чужими библиотеками. Создал сам - знаешь как это работает.
На мой взгляд, можно/нужно помогать тем, у кого есть желание что-то изучать.
Народ долгое время собирал информацию по данному дисплею. На фото изображен модуль на котором разводка сделана 4 битной.
Долго мучился с его инициализацией, и когда вроде бы в протеусе все заработало, на живой железки обнаружилась проблема с повторной инициализацией. После нажатия на кнопку сброса контролера на дисплее был мусор.
В итоге хочу предложить вам код для AVR STUDIO 6.(0-2) 100% рабочий для данного дисплея. Не боящийся повторной инициализации. Соответственно в режиме 4 бита, код совместим с модулем ARDUINO UNO R3 (ATMEGA328)
void LCD_INIT()
{
RS_DISABLE;
LCD_WRITE_NIBBLE(0b00110000); // 0_0_1_DL_N_F_0_0 (0010 N(0-1на строка, 1-2ве строки)000) 00101000
LCD_WRITE_NIBBLE(0b00110000);
LCD_WRITE_NIBBLE(0b00110000);
LCD_WRITE_NIBBLE(0b00100000);
LCD_WRITE_DATA(0b00000001); // очистка дисплея
LCD_WRITE_DATA(0b00101000);
LCD_WRITE_DATA(0b00001000); // полное выключение дисплея
LCD_WRITE_DATA(0b00000100); // сдвиг курсора отключен
LCD_WRITE_DATA(0b00001100); // включение дисплея
RS_ENABLE;
}
// ЗАПИСЬ ПОЛУБАЙТА
void LCD_WRITE_NIBBLE(unsigned char TEMP_NIBBLE) {
PORTD |= TEMP_NIBBLE; // запись в порт
_delay_ms(2);
E_ENABLE;
_delay_ms(4);
E_DISABLE;
_delay_ms(2);
PORTD &= ~(TEMP_NIBBLE);
_delay_ms(2);
}
// ФУНКЦИЯ ОТПРАВКИ СИМВОЛА
void LCD_WRITE_CHAR(unsigned char TEMP_WRITE_CHAR) {
RS_ENABLE;
LCD_WRITE_DATA(TEMP_WRITE_CHAR);
}
// ФУНКЦИЯ ОТПРАВКИ КОМАНДЫ
void LCD_WRITE_CMD(unsigned char TEMP_WRITE_CMD) {
RS_DISABLE;
LCD_WRITE_DATA(TEMP_WRITE_CMD);
RS_ENABLE;
}
// ЗАПИСЬ В ПОРТ КОММАНДЫ ИЛИ ДАННЫХ (ОПРЕДЕЛЯЕТСЯ RS), используется в LCD_WRITE_CHAR и LCD_WRITE_CMD
void LCD_WRITE_DATA(unsigned char TEMP_WRITE_DATA) {
LCD_WRITE_NIBBLE(TEMP_WRITE_DATA & 0xF0); // старшый полубайт
LCD_WRITE_NIBBLE(TEMP_WRITE_DATA << 4); //младший полубайт
}
void LCD_OFF() {
LCD_WRITE_CMD(0b00001000);
}
void LCD_ON() {
LCD_WRITE_CMD(0b00001100);
}
// Установка курсора, КУРСОР НЕ СДВИГАЕТСЯ!!! так настроено при инициализации. LINE = 0 - первая строка, 1 - вторая строка.
void LCD_SET_CURSOR(unsigned char LINE, unsigned char POS) {
POS |= 0b10000000;
if (LINE == 0x01)
{
POS |= 0x40;
}
LCD_WRITE_CMD(POS);
}
P.S. На данном модуле есть управление подсветкой что для меня было сюрпризом) т.к. на схеме этого не было, установлен транзистор на катоде подсветки.
можно управлять так:
servmv писал(а):Народ долгое время собирал информацию по данному дисплею.
Долго мучился с его инициализацией, и когда вроде бы в протеусе все заработало, на живой железки обнаружилась проблема с повторной инициализацией. После нажатия на кнопку сброса контролера на дисплее был мусор.
В итоге хочу предложить вам код для AVR STUDIO 6.(0-2) 100% рабочий для данного дисплея. Не боящийся повторной инициализации.
servmv, Где там мучиться? Прочитать документацию на HD44780 и работать с ним "по-честному" было сложно?
У моих заказчиков несколько тысяч изделий с индикаторами на HD44780 работают в круглосуточном режиме более 5-ти лет без рекламаций.
Некоторые операции, во время инициализации, требуют ожидания выполнения. Делается это либо задержками, либо чтением состояния из дисплея.
Но у Вас, по всей видимости, "всё работает" только из-за бешеных задержек в функции LCD_WRITE_NIBBLE.
Albert_V писал(а):Где там мучиться? Прочитать документацию на HD44780 и работать с ним "по-честному" было сложно?
У моих заказчиков несколько тысяч изделий с индикаторами на HD44780 работают в круглосуточном режиме более 5-ти лет без рекламаций.
Для новичков это не так просто как Вы думаете, в инете инфа в основном для ASM или еще хуже для Basic, а самое прикольное все предложенные варианты инициализации давали мусор при повторной инициализации. По поводу инструкций я конечно читаю на EN но приходится "напрягать мозг", а от того что я поделился рабочим кодом, кому-то возможно это поможет, и уж точно хуже не будет.
Не многоваты ли задержки между такими операциями ?
Во вторых, какой смысл от сеих строк
Некоторые операции, во время инициализации, требуют ожидания выполнения. Делается это либо задержками, либо чтением состояния из дисплея.
Но у Вас, по всей видимости, "всё работает" только из-за бешеных задержек в функции.
На первый и третий вопрос, ответ один, визуально задержек не видно, одновременно перезаписывается 3*4 = 12 символов на дисплее(4 быстро изменяемые числа по 3 символа) остальное статично.
На второй вопрос, обнуление порта, было написано в процессе отладки, возможно и лишнее. Ща проверю.
Но это же не значит, что их можно везде и подряд вставлять
10 ms на пол-команды, 20 на команду. Вывести буфер из 16-ти символов - 320 миллисекунд. Круто, чё
Но это же не значит, что их можно везде и подряд вставлять
10 ms на пол-команды, 20 на команду. Вывести буфер из 16-ти символов - 320 миллисекунд. Круто, чё
0.3 сек на вывод? че не так то? Ну ускорил ровно в 2 раза ) 160мс))
Надеюсь, Вы шутите
А если серьёзно - убирайте их оттуда, "от греха подальше" Они там не нужны.
Диплом/курсовик "горит"?
Не думаю. Просто, видимо, человеку захотелось поделиться наработками. И это есть хорошо.
Но и критику, в таком случае, нужно принимать какой она есть. И не игнорировать её, а обсуждать коструктивно, без всяких "а что такого ?" и т.д...