|
|
  |
Инициализация LCD, Возможно ли повторно инициализировать LCD в работающей программе? |
|
|
|
Feb 12 2008, 20:42
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Для реинициализации символьных LCD при зависаниях и сбоях лучше сразу предусмотреть ключ в питании LCD. Потому, что "защелкивание" только снятием/подачей питания "лечится". Реинициализировать же чисто программно тоже можно. По крайней мере можно попробовать Процедуру реинициализации нужно начинать с программирования ширины шины данных. Трижды передать код 0x30, а на четвертый раз 0x38 для 8-ми битной шины или 0x28 для 4-битной шины (младший нибл я указал 8 для случая, если используется двух-/четырех-строчный дисплей и фонт 5*8) . Причем в случае использования 4-х битного подключения код 0x30 передавать не ниблами (0x3, 0x0, 0x3, 0x0, 0x3, 0x0) как ожидалось бы, а как для 8-ми битного режима. (0x3, 0x3, 0x3). Передавать код инициализации нужно конечно же с учетом сдвига, если используются не самые младшие пины порта МК.
|
|
|
|
|
Feb 12 2008, 22:27
|
Частый гость
 
Группа: Участник
Сообщений: 136
Регистрация: 2-01-06
Пользователь №: 12 772

|
Цитата(Сергей Борщ @ Feb 12 2008, 22:44)  Выполнить правильно процедуру инициализации. Вот тут посмотрите: http://electronix.ru/forum/index.php?s=&am...st&p=143374Программа рабочая,т.к. работает не один год. Без повторной инициализации все хорошо. Напр. при старте программы .... lcdinit(); .... ===== все отлично========= ... lcdinit(); lcdinit(); ..... =======два черных рядка на LCD======== Причем не квадратики наложена информация,т.е. инициализация прошла, но что-то ее сбило. Нажимаю RESET CPU. Снова старт программы и ... lcdinit(): ... =========все хорошо======= И так программа нормально работает до тех пор, пока я не пытаюсь произвести инициализацию для перестраховки от сбоев(по истечению времени или по нажатию кнопки) Такое ощущение, что LCD запоминает что-то при инициализации, а после RESET CPU сбрасывает. Хотф не пойму как RESET CPU влияет на LCD
|
|
|
|
|
Feb 12 2008, 22:32
|

Просто Che
    
Группа: Свой
Сообщений: 1 567
Регистрация: 22-05-07
Из: ExUSSR
Пользователь №: 27 881

|
Цитата Возможно ли повторно инициализировать LCD в работающей программе? Не только возможно, но и ИМХО, необходимо делать это периодически. Правда при этом наблюдается легкое подмигивание, если применяется 4-х разрядная шина, но это можно объявить фичей У различных контроллеров ЖКИ эта процедура может слегка отличаться, в основном по временнЫм параметрам. Я на такое нарывался, когда при смене типа или производителя ЖКИ переставала нормально работать программная инициализация. Приходилось искать "улучшенный" алгоритм. А то, что у ЖКИ модулей могут слетать настройки - так это общеизвестно. Единственный контр.сигнал - BUSY может нормально выдаваться, а отображения на ЖКИ может не быть! Считать настройки из модуля для проверки нельзя, поэтому приходится периодически его переинициализировать на ходу. Я это обычно делаю каждые 5-10 секунд. Можно делать и реже, но за 5 минут, как показывает практика, ближайшие customers уже успевают добежать до телефона и позвонить со словами: "ВАШ ПРИБОР СЛОМАЛСЯ!!!" to rezident: "защелкивания" LCD ни разу не наблюдал, так что в необходимости ключа на питание сильно сомневаюсь. Насчет того, что бывают случаи, когда модуль нельзя вывести из зависа программно - сомнительно, хотя отрицать такую возможность не буду. Но мне такие ЖКИ не попадались. Отладку процедур инициализации я обычно провожу так - выдираю и вставляю кабель ЖКИ (или сам модуль) прямо под питанием, на ходу. Восстановление работоспособности модуля должно происходить через 5-10 сек, при вызове прогр. переинициализации. А иначе грош цена такой программе!
|
|
|
|
|
Feb 12 2008, 23:05
|
Частый гость
 
Группа: Участник
Сообщений: 136
Регистрация: 2-01-06
Пользователь №: 12 772

|
Цитата(Baser @ Feb 13 2008, 00:32)  Не только возможно, но и ИМХО, необходимо делать это периодически. Я тоже к этому пришел. Но получается, что lcdinit() нормально работает только один раз (вначале), а при повторном вызове сбивает настройки LCD. Что это? Плохо написана программа инициализации?
|
|
|
|
|
Feb 12 2008, 23:17
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(Baser @ Feb 13 2008, 03:32)  to rezident: "защелкивания" LCD ни разу не наблюдал, так что в необходимости ключа на питание сильно сомневаюсь. Насчет того, что бывают случаи, когда модуль нельзя вывести из зависа программно - сомнительно, хотя отрицать такую возможность не буду. Но мне такие ЖКИ не попадались. Статическое электричество это довольно занимательная штука. Особенно, когда по ТУ корпус прибора, имеющий внешние металлические элементы (переднюю панель, например), нельзя соединять с общим проводом самого устройства и LCD в частности. Цитата(IF_P @ Feb 13 2008, 04:05)  Но получается, что lcdinit() нормально работает только один раз (вначале), а при повторном вызове сбивает настройки LCD. Что это? Плохо написана программа инициализации? Не видя исходный текст этой "программы инициализации", можно делать абсолютно любые умозаключения. Только помогут ли они?
|
|
|
|
|
Feb 13 2008, 07:54
|
Частый гость
 
Группа: Участник
Сообщений: 136
Регистрация: 2-01-06
Пользователь №: 12 772

|
Цитата(rezident @ Feb 13 2008, 01:17)  Не видя исходный текст этой "программы инициализации", можно делать абсолютно любые умозаключения. Только помогут ли они? Вот исходный текст программы. Режим LCD - 4 разрядный. Цитата(IF_P @ Feb 13 2008, 09:06)  Вот исходный текст программы. Режим LCD - 4 разрядный. Уточнение по управляющим сигналам.
|
|
|
|
|
Feb 13 2008, 08:04
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(IF_P @ Feb 13 2008, 09:54)  Вот исходный текст программы. Режим LCD - 4 разрядный. Вы спросили совета. Во втором и третьем ответах вам дали разжеванный как для ребенка ответ, что именно и в какой последовательности нужно делать в процессе инициализации. В десятом(!) сообщении вы выкладываете исходник, в котором эти рекомендации нифига не выполнены и спрашиваете "почему не работает?". Да вот потому и не работает, что инициализация у вас сделана неправильно! Помогать дальше не буду - разбирайтесь сами, информации в этой ветке вам дали достаточно.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Feb 13 2008, 09:31
|
Частый гость
 
Группа: Участник
Сообщений: 136
Регистрация: 2-01-06
Пользователь №: 12 772

|
Цитата(Сергей Борщ @ Feb 13 2008, 10:04)  Вы спросили совета. Во втором и третьем ответах вам дали разжеванный как для ребенка ответ, что именно и в какой последовательности нужно делать в процессе инициализации. В десятом(!) сообщении вы выкладываете исходник, в котором эти рекомендации нифига не выполнены и спрашиваете "почему не работает?". Да вот потому и не работает, что инициализация у вас сделана неправильно! Помогать дальше не буду - разбирайтесь сами, информации в этой ветке вам дали достаточно. Прошу извинить, что, возможно, задал лишние вопросы. Но железо на работе, а я писал с домашнего компа. Сегодня буду разбираться.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|