Работа с ЖКИ на контроллере HD44780 и его аналогах
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
А у тебя STM-ка на какой частоте работает? Индикатор устройство медленное, может из-за высокой частоты строб очень короткий получается, попробуй его удлинить.
- rus084
- Друг Кота
- Сообщения: 3443
- Зарегистрирован: Вт июн 28, 2011 12:11:50
- Откуда: Россия,Ставропольский край, ст.Бекешевская
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
вот весь файл http://svn.code.sf.net/p/rusefi/code/tr ... _HD44780.c
работает на 168мгц , но задержки есть в коде
работает на 168мгц , но задержки есть в коде
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Задержки именно на ширину импульса строба? Я бы это проконтролировал осциллографом. Там строб должен быть не менее 1мкс.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
rus084, гляньте тут http://forum.chipmk.ru/index.php/topic/ ... -lcd-16x2/ , возможно поможет чем...
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Я бы проверил работу процедурки "lcdSleep(int period)" она ответственна за формирование коротких выдержек и делает это циклом "вхолостую". Компилятор мог просто почикать этот цикл в целях оптимизации т.к. результат работы цикла не востребован. Может быть, было бы проще реализовать задержки на таймерах.
И все-таки, надо бы проверить ширину импульса строба в железе.
И все-таки, надо бы проверить ширину импульса строба в железе.
- rus084
- Друг Кота
- Сообщения: 3443
- Зарегистрирован: Вт июн 28, 2011 12:11:50
- Откуда: Россия,Ставропольский край, ст.Бекешевская
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Спойлер
Код: Выделить всё
static void lcdSleep(int period) {
if (BUSY_WAIT_DELAY) {
// this mode is useful for displaying messages to report OS fatal issues
int ticks = 168000000 / 1000000 * period;
int a = 0;
for (int i = 0; i < ticks; i++)
a += i;
// the purpose of this code is to fool the compiler so that the loop is not optimized away
chDbgCheck(a != 0, "true");
} else {
chThdSleepMicroseconds(period);
}
}цикл используется для работы , когда ОС перестанет работать , типа синего экрана смерти .
а chThdSleepMicroseconds(int period) это функция задержки в нормальном режиме
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
В индикаторе используется именно она для формирования строба а не какая-то другая.
И вообще с шустрыми процами надо быть всегда на стороже, на выводах уровни могут не успевать установится а ты даешь строб - это тоже плохо, нужно ждать некоторое время между выдачей данных на шину и началом строба. В даташите это все описано в виде диаграмм. На низкоскоростных камушках оно получается само собой, но на этом шустрике это может оказаться не так. Надо внимательно рассмотреть диаграмму, соответствуют ли все временные интервалы спецификации на индикатор. Может там у тебя все сейчас на грани и внутри индикатора создается race condition электрических сигналов, из-за которого он то работает(задержки чуть больше критических) то не работает.
И вообще с шустрыми процами надо быть всегда на стороже, на выводах уровни могут не успевать установится а ты даешь строб - это тоже плохо, нужно ждать некоторое время между выдачей данных на шину и началом строба. В даташите это все описано в виде диаграмм. На низкоскоростных камушках оно получается само собой, но на этом шустрике это может оказаться не так. Надо внимательно рассмотреть диаграмму, соответствуют ли все временные интервалы спецификации на индикатор. Может там у тебя все сейчас на грани и внутри индикатора создается race condition электрических сигналов, из-за которого он то работает(задержки чуть больше критических) то не работает.
- rus084
- Друг Кота
- Сообщения: 3443
- Зарегистрирован: Вт июн 28, 2011 12:11:50
- Откуда: Россия,Ставропольский край, ст.Бекешевская
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
я замотал в скотч провода и их перепутал
сделал такой патч
и все идеально пока работает
сделал такой патч
Спойлер
Код: Выделить всё
Index: hw_layer/lcd/lcd_HD44780.c
=============
--- hw_layer/lcd/lcd_HD44780.c (revision 2732)
+++ hw_layer/lcd/lcd_HD44780.c (working copy)
@@ -190,16 +190,16 @@
lcd_HD44780_write(0x80);
chThdSleepMicroseconds(40);
- lcd_HD44780_write(0x08); // display and cursor control
+ lcd_2x16_write_command(0x08); // display and cursor control
chThdSleepMicroseconds(40);
- lcd_HD44780_write(LCD_HD44780_DISPLAY_CLEAR);
+ lcd_2x16_write_command(LCD_HD44780_DISPLAY_CLEAR);
chThdSleepMilliseconds(2);
- lcd_HD44780_write(LCD_HD44780_SHIFT_CURSOR_RIGHT);
+ lcd_2x16_write_command(LCD_HD44780_SHIFT_CURSOR_RIGHT);
chThdSleepMilliseconds(2);
- lcd_HD44780_write(LCD_HD44780_DISPLAY_ON);
+ lcd_2x16_write_command(LCD_HD44780_DISPLAY_ON);
lcd_HD44780_set_position(0, 0);
}
и все идеально пока работает
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Всем привет, дошел до освоения LCD, с инициализацией разобрался сразу, писал свою либу по даташиту, сейчас вот решил оптимизировать.
Первое с чем столкнулся, не могу поставить задержку delay_us(1) , компилятор ругается: constant out of range. Принимает минимум 2 микросекунды.
Вопрос почему, и второй как сделать задержку в 300-500 ns (наносекунд), возможно есть несколько вариантов ?
Первое с чем столкнулся, не могу поставить задержку delay_us(1) , компилятор ругается: constant out of range. Принимает минимум 2 микросекунды.
Вопрос почему, и второй как сделать задержку в 300-500 ns (наносекунд), возможно есть несколько вариантов ?
- Пахнет котом, - подумал Штирлиц.
- Зачем он нюхает мою лапу? - подумал кот.
- Зачем он нюхает мою лапу? - подумал кот.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
olegleon писал(а):Вопрос почему, и второй как сделать задержку в 300-500 ns (наносекунд), возможно есть несколько вариантов ?
asm("nop") - задержка, равная 1 такту процессора.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
rus084 писал(а):Что у вас за мк?
mega8, 16MHz значит один такт (nop) 62.5 ns тогда многоговато нопов надо для задержки в 500 ns
- Пахнет котом, - подумал Штирлиц.
- Зачем он нюхает мою лапу? - подумал кот.
- Зачем он нюхает мою лапу? - подумал кот.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
а вы работайте с нормальными компиляторами и нормальными библиотеками, и будет вам счастье.
WinAVR содержит "функцию" _delay_us(), которая с приемлемой точностью отрабатывает микросекундные задержки.
WinAVR содержит "функцию" _delay_us(), которая с приемлемой точностью отрабатывает микросекундные задержки.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
хорошо, но все же остается открытым вопрос, как сделать задержки в наносекундах (300ns). Тот же строб E у LCD надо передергивать с периодом в 500 ns/
Не, можно и с 10us, но это же две большие разницы, 300ns и 10us.
Изучаю для себя, а для себя хочется хорошо, а не как-нибудь.
(писал чуть выше, уже библиотека рабочая, просто решил все оптимизировать по даташиту)
Не, можно и с 10us, но это же две большие разницы, 300ns и 10us.
Изучаю для себя, а для себя хочется хорошо, а не как-нибудь.
- Пахнет котом, - подумал Штирлиц.
- Зачем он нюхает мою лапу? - подумал кот.
- Зачем он нюхает мою лапу? - подумал кот.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
вы ничего не путаете?olegleon писал(а):Тот же строб E у LCD надо передергивать с периодом в 500 ns
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
ну как бы есть такой докУмент, HD44780.pdf , который из 60-ти страниц, так в нем на 52стр. есть тайминги операций записи, Enable cycle time = 500ns min,
как бы максимумом не ограничено, но повторюсь, хочу по максимуму оптимизировать.
Возможно в чем-то я ошибаюсь или не правильно с графиком разобрался, направте на путь истинный, коли сошел я с него.
как бы максимумом не ограничено, но повторюсь, хочу по максимуму оптимизировать.
Возможно в чем-то я ошибаюсь или не правильно с графиком разобрался, направте на путь истинный, коли сошел я с него.
- Пахнет котом, - подумал Штирлиц.
- Зачем он нюхает мою лапу? - подумал кот.
- Зачем он нюхает мою лапу? - подумал кот.
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Может не так прочли даташит на индикатор и там написано что 500нс это МИНИМАЛЬНАЯ длительность импульса строба? Индикатор довольно медленный, 500нс импульс соответствует меандру частотой 1Мгц. При 8Мгц тактовой делаю паузу в 2-3 NOP-а и работает все замечательно. Сами команды дрыгания ножкой занимают 2 такта. Ну можешь всадить десяток NOP-ов, или вызвать процедуру пустую - переход по адресу вызова и немедленный возврат займет 16 тактов минимум.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
ссылочку дайте - давненько не брал я в руки шашекдаташитовolegleon писал(а):ну как бы есть такой докУмент, HD44780.pdf , который из 60-ти страниц, так в нем на 52стр. есть тайминги операций записи, Enable cycle time = 500ns min
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
как бы в яндексе первая по запросу.
https://www.sparkfun.com/datasheets/LCD/HD44780.pdf
Есть и на русском
http://cxem.net/doc/mc/HD44780-rus.pdf там на 13 стр. есть такая же таблица временных характеристик.
https://www.sparkfun.com/datasheets/LCD/HD44780.pdf
Есть и на русском
http://cxem.net/doc/mc/HD44780-rus.pdf там на 13 стр. есть такая же таблица временных характеристик.
- Пахнет котом, - подумал Штирлиц.
- Зачем он нюхает мою лапу? - подумал кот.
- Зачем он нюхает мою лапу? - подумал кот.
- Леонид Иванович
- Друг Кота
- Сообщения: 4779
- Зарегистрирован: Сб апр 02, 2011 12:40:46
- Откуда: Минск
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Все правильно, для HD44780 при Vcc = 4.5 - 5.5 В минимальный период ENABLE составляет 500 нс, минимальная длительность ВЫСОКОГО уровня на ENABLE составляет 230 нс. Но есть ли смысл гнаться за предельной скоростью?
