Работа с ЖКИ на контроллере HD44780 и его аналогах

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Alexeyslav »

А у тебя STM-ка на какой частоте работает? Индикатор устройство медленное, может из-за высокой частоты строб очень короткий получается, попробуй его удлинить.
Аватара пользователя
rus084
Друг Кота
Сообщения: 3443
Зарегистрирован: Вт июн 28, 2011 12:11:50
Откуда: Россия,Ставропольский край, ст.Бекешевская
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение rus084 »

вот весь файл http://svn.code.sf.net/p/rusefi/code/tr ... _HD44780.c

работает на 168мгц , но задержки есть в коде
Меня зовут Димон .
Изображение
Изображение
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Alexeyslav »

Задержки именно на ширину импульса строба? Я бы это проконтролировал осциллографом. Там строб должен быть не менее 1мкс.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Аlex »

rus084, гляньте тут http://forum.chipmk.ru/index.php/topic/ ... -lcd-16x2/ , возможно поможет чем...
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Alexeyslav »

Я бы проверил работу процедурки "lcdSleep(int period)" она ответственна за формирование коротких выдержек и делает это циклом "вхолостую". Компилятор мог просто почикать этот цикл в целях оптимизации т.к. результат работы цикла не востребован. Может быть, было бы проще реализовать задержки на таймерах.
И все-таки, надо бы проверить ширину импульса строба в железе.
Аватара пользователя
rus084
Друг Кота
Сообщения: 3443
Зарегистрирован: Вт июн 28, 2011 12:11:50
Откуда: Россия,Ставропольский край, ст.Бекешевская
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение rus084 »

Спойлер

Код: Выделить всё

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 и его аналогах

Сообщение Alexeyslav »

В индикаторе используется именно она для формирования строба а не какая-то другая.
И вообще с шустрыми процами надо быть всегда на стороже, на выводах уровни могут не успевать установится а ты даешь строб - это тоже плохо, нужно ждать некоторое время между выдачей данных на шину и началом строба. В даташите это все описано в виде диаграмм. На низкоскоростных камушках оно получается само собой, но на этом шустрике это может оказаться не так. Надо внимательно рассмотреть диаграмму, соответствуют ли все временные интервалы спецификации на индикатор. Может там у тебя все сейчас на грани и внутри индикатора создается race condition электрических сигналов, из-за которого он то работает(задержки чуть больше критических) то не работает.
Аватара пользователя
rus084
Друг Кота
Сообщения: 3443
Зарегистрирован: Вт июн 28, 2011 12:11:50
Откуда: Россия,Ставропольский край, ст.Бекешевская
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение rus084 »

я замотал в скотч провода и их перепутал
сделал такой патч
Спойлер

Код: Выделить всё

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);
 }

и все идеально пока работает
Меня зовут Димон .
Изображение
Изображение
Аватара пользователя
olegleon
Родился
Сообщения: 15
Зарегистрирован: Ср янв 22, 2014 17:44:19
Откуда: Одесса

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение olegleon »

Всем привет, дошел до освоения LCD, с инициализацией разобрался сразу, писал свою либу по даташиту, сейчас вот решил оптимизировать.
Первое с чем столкнулся, не могу поставить задержку delay_us(1) , компилятор ругается: constant out of range. Принимает минимум 2 микросекунды.
Вопрос почему, и второй как сделать задержку в 300-500 ns (наносекунд), возможно есть несколько вариантов ?
- Пахнет котом, - подумал Штирлиц.
- Зачем он нюхает мою лапу? - подумал кот.
Аватара пользователя
rus084
Друг Кота
Сообщения: 3443
Зарегистрирован: Вт июн 28, 2011 12:11:50
Откуда: Россия,Ставропольский край, ст.Бекешевская
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение rus084 »

Что у вас за мк?
Меня зовут Димон .
Изображение
Изображение
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение WiseLord »

olegleon писал(а):Вопрос почему, и второй как сделать задержку в 300-500 ns (наносекунд), возможно есть несколько вариантов ?

asm("nop") - задержка, равная 1 такту процессора.
Аватара пользователя
olegleon
Родился
Сообщения: 15
Зарегистрирован: Ср янв 22, 2014 17:44:19
Откуда: Одесса

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение olegleon »

rus084 писал(а):Что у вас за мк?


mega8, 16MHz значит один такт (nop) 62.5 ns тогда многоговато нопов надо для задержки в 500 ns
- Пахнет котом, - подумал Штирлиц.
- Зачем он нюхает мою лапу? - подумал кот.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение ARV »

а вы работайте с нормальными компиляторами и нормальными библиотеками, и будет вам счастье.
WinAVR содержит "функцию" _delay_us(), которая с приемлемой точностью отрабатывает микросекундные задержки.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
olegleon
Родился
Сообщения: 15
Зарегистрирован: Ср янв 22, 2014 17:44:19
Откуда: Одесса

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение olegleon »

хорошо, но все же остается открытым вопрос, как сделать задержки в наносекундах (300ns). Тот же строб E у LCD надо передергивать с периодом в 500 ns/
Не, можно и с 10us, но это же две большие разницы, 300ns и 10us.
Изучаю для себя, а для себя хочется хорошо, а не как-нибудь. :) (писал чуть выше, уже библиотека рабочая, просто решил все оптимизировать по даташиту)
- Пахнет котом, - подумал Штирлиц.
- Зачем он нюхает мою лапу? - подумал кот.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение ARV »

olegleon писал(а):Тот же строб E у LCD надо передергивать с периодом в 500 ns
вы ничего не путаете?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
olegleon
Родился
Сообщения: 15
Зарегистрирован: Ср янв 22, 2014 17:44:19
Откуда: Одесса

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение olegleon »

ну как бы есть такой докУмент, HD44780.pdf , который из 60-ти страниц, так в нем на 52стр. есть тайминги операций записи, Enable cycle time = 500ns min,
как бы максимумом не ограничено, но повторюсь, хочу по максимуму оптимизировать.
Возможно в чем-то я ошибаюсь или не правильно с графиком разобрался, направте на путь истинный, коли сошел я с него.
- Пахнет котом, - подумал Штирлиц.
- Зачем он нюхает мою лапу? - подумал кот.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Alexeyslav »

Может не так прочли даташит на индикатор и там написано что 500нс это МИНИМАЛЬНАЯ длительность импульса строба? Индикатор довольно медленный, 500нс импульс соответствует меандру частотой 1Мгц. При 8Мгц тактовой делаю паузу в 2-3 NOP-а и работает все замечательно. Сами команды дрыгания ножкой занимают 2 такта. Ну можешь всадить десяток NOP-ов, или вызвать процедуру пустую - переход по адресу вызова и немедленный возврат займет 16 тактов минимум.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение ARV »

olegleon писал(а):ну как бы есть такой докУмент, HD44780.pdf , который из 60-ти страниц, так в нем на 52стр. есть тайминги операций записи, Enable cycle time = 500ns min
ссылочку дайте - давненько не брал я в руки шашекдаташитов :)))
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
olegleon
Родился
Сообщения: 15
Зарегистрирован: Ср янв 22, 2014 17:44:19
Откуда: Одесса

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение olegleon »

как бы в яндексе первая по запросу.
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 нс. Но есть ли смысл гнаться за предельной скоростью?
Ответить

Вернуться в «Периферия»