Регистрация | Вход
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 2 из 3«123»
Модератор форума: demanik 
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Сброс и инициализация дисплея16x2 (Помогите!!!)
Сброс и инициализация дисплея16x2
S_moke Дата: Ср, 06.02.2013, 15:04  |                                                                                                                Сообщение # 16
Группа: Проверенные
Ранг:  Начал соображать
Сообщений: 20
Репутация: 1   ±
Замечания:   ±
На сайте с 16.08.2011

Статус: Offline

mikhail09p! Спасибо большое! Ваш код реально помог!

Добавлено (06.02.2013, 15:04)
---------------------------------------------
На этом считаю тему закрытой.
Спасибо всем откликнувшимся на проблему и ОСОБЕННОЕ СПАСИБО Mikhail09! Теперь дисплеи в устройствах не глючат (глючат, конечно, но там где нужно - происходит инициализация и все встает на свои места)!
[url=http://www.picbasic.ru/forum/5-1281-1][/url]

ЯНДЕКС Дата: 06.02.2013
555serg Дата: Ср, 07.12.2016, 18:09  |                                                                                                                Сообщение # 17
Группа: Проверенные
Ранг:  Пытаюсь разобраться
Сообщений: 55
Репутация: 0   ±
Замечания:   ±
На сайте с 12.12.2011

Статус: Offline

Приветствую всех участников форума. Возникла необходимость производить пере инициализацию
дисплея в процессе его работы без отключения питания дисплея. Отдельное спасибо mikhail09p
за то что навел на правильную мысль, и предоставил готовое решение задачи. Хочу уточнить 
один момент, в его фрагменте кода;
 
Delay MS 50
Print $FE, $20

Delay MS 50
Print $FE, $28

Delay MS 50
Print $FE, $0C
Delay MS 50
Print $FE, $01
Delay MS 20
Print $FE, $06
Delay MS20

- первые две команды ( function set ), судя по даташиту должны быть одинаковыми, т.е.
 Delay MS 50
 Print $FE, $28

 Delay MS 50
 Print $FE, $28
- это мы настраиваем, - четырех разрядную шину данных; режим развертки - две строки; и режим
 матрицы 5х10 
- но в авторском варианте, они разные. Кто может объяснить, почему сделано именно так?
 И еще, совсем для тех кто в танке, зачем нужна посылка $FE сразу после команды Print.
 Ее роль и что таким образом мы посылаем на индикатор.
 Спасибо всем не равнодушным!
dimitriy-bc Дата: Пн, 12.12.2016, 18:35  |                                                                                                                Сообщение # 18
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 198
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

555serg, здравствуйте! Проблема с символьными индикаторами у меня постоянно. Если дополнительная инициализация даст положительные результаты, то просьба сообщить!!!
555serg Дата: Пн, 12.12.2016, 23:57  |                                                                                                                Сообщение # 19
Группа: Проверенные
Ранг:  Пытаюсь разобраться
Сообщений: 55
Репутация: 0   ±
Замечания:   ±
На сайте с 12.12.2011

Статус: Offline

Доброго вечера dimitriy-dc. Есть некоторая информация для вас. Сначала ожидал пока кто нибудь 
из спецов, растолкует мне мой вопрос. Потом стало самому не в терпеж, и сделал сам все как по
датасшиту. А именно, первые две строчки инициализации - одинаковые. К стати, может это у меня
только так, но по авторскому коду пере инициализация происходила нормально через раз. При 
следующем отображении текста появлялись ' крокозябры ', а потом экран вообще тух. Конечно
я не на шутку обеспокоился так как никто раньше не упоминал о таком недоразумении. В общем
вот мной проверенный код:

   '----- проведем процедуру пере - инициализацию индикатора -----  
  Print Cls              ' если не включить перед процедурой пере инициализации очистку экрана, то
                             ' в процессе этой инициализации наблюдались светящиеся точки и разный му-
                             ' сор на экране
  
  For i = 1 To 50
  DelayMS 1
  Next 
  Print $fe, $28       ' команда - funktion set - а именно, четырехразрядная шина данных, две строки,
                              ' 5x10 точек размер знака.
  
  
  For i = 1 To 50
  DelayMS 1
  Next  
  Print $fe, $28       ' вторая команда - дублирует первую
  
  
  For i = 1 To 50
  DelayMS 1
  Next  
  Print $fe, $0c       ' дальше команда - Display ON/OFF Control - отображение включено, курсор в
                              ' виде подчеркивания - выключен, курсор в виде мерцающего знакоместа -
                              ' выключен
  
  
  For i = 1 To 50
  DelayMS 1
  Next
  Print $fe, $01      ' команда - Clear Display - попросту это очистка дисплея
  
  For i = 1 To 20
  DelayMS 1
  Next
  Print $fe, $06     ' дальше команда - Entry Mode Set - это у нас - режим увеличения счетчика AC
                            ' на единицу, а так же не производим сдвиг изображения
  
  For i = 1 To 20    
  DelayMS 1
  Next
  Print $FE,$2A    ' этой командой я выбираю нужную мне страницу шрифтов - англо - русскую, у меня
                            ' индикатор WEH001602A
  Print Cls
  For i = 1 To 50 
  DelayMS 1
  Next
  
 Если в твоей проге нет прерываний, то убери циклы FOR - NEXT, а в место них просто поставь
 команду задержки DelayMS со значением по количеству циклов после каждой конкретной команды.
 В моей программе есть прерывания поэтому сделано так. Пробуй. Удачи тебе !
dimitriy-bc Дата: Вт, 13.12.2016, 10:47  |                                                                                                                Сообщение # 20
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 198
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

555serg, здравствуйте! Перечисленный набор команд запускаете перед каждым выводом информации на индикатор или через определенный отрезок времени?

Цитата 555serg ()
Если в твоей проге нет прерываний, то убери циклы FOR - NEXT, а в место них просто поставь команду задержки DelayMS со значением по количеству циклов после каждой конкретной команды.

 а в чем разница?

Сообщение отредактировал dimitriy-bc - Вт, 13.12.2016, 11:15
555serg Дата: Вт, 13.12.2016, 23:51  |                                                                                                                Сообщение # 21
Группа: Проверенные
Ранг:  Пытаюсь разобраться
Сообщений: 55
Репутация: 0   ±
Замечания:   ±
На сайте с 12.12.2011

Статус: Offline

Изначально в моей программе инициализация была в начале кода - с помощью стандартных
пред определений. По ходу программы индикация меняла свое смысловое наполнение, и все
работало на ура. Все это происходило сразу в железе на столе, но в реальных условиях в окру-
жении промышленных помех иногда начал сбоить LED индикатор. На данном форуме подсказали
как в принципе возможно с этим бороться, поэтому решил перед каждым новым выводом текста
на экран проводить пере инициализацию дисплея.
По поводу прерываний и необходимости в циклах FOR - NEXT. Если вы в программе используете
прерывания, то соответствующим образом в теле основного цикла проги как то реагируете на эти
прерывания. Но если в добавок к этому вы примените структуру DelayMC, то ваш основной цикл
затормозится до момента завершения работы по генерации этой паузы. Таким образом, даже
если обработчик прерываний исправно отрабатывает эти прерывания вы не в силах вовремя
принять решение - отреагировать на эти прерывания, у вас программа занимается отработкой
паузы. Все это справедливо для случая, когда  в обработчике прерывания вы не занимаетесь
ни чем кроме как самим прерыванием, то есть его флагом ( флагами ).
Вы лучше сами опишите свою  проблему, что у вас не так?
Еще не указал, что в контексте данного кода - в теле каждого из циклов, вы можете принимать
необходимые решения по флагам случившихся прерываний. Это могут быть разные счетчики
или таймеры реального времени. Как то так.

Сообщение отредактировал 555serg - Ср, 14.12.2016, 00:06
dimitriy-bc Дата: Ср, 14.12.2016, 12:04  |                                                                                                                Сообщение # 22
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 198
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

555serg, здравствуйте! Спасибо за ответы! Проблема у меня та же, что и у Вас (я так понял была). При использовании в промышленных помещениях ЖКИ, индикаторы  периодически зависают (иногда с раздражающей периодичностью).
Если эта дополнительная инициализация помогает, то замечательно. Единственное жаль 1/4 сек. каждый раз терять, да и не всегда это позволительно. Хотя в принципе можно время задержки заполнять полезным участком программы.
По поводу прерываний, я Вас понял.
555serg Дата: Ср, 14.12.2016, 16:10  |                                                                                                                Сообщение # 23
Группа: Проверенные
Ранг:  Пытаюсь разобраться
Сообщений: 55
Репутация: 0   ±
Замечания:   ±
На сайте с 12.12.2011

Статус: Offline

dimitriy-bc, здравствуйте. Рад что чем то смог  вам помочь. По поводу заполнения полезным кодом 
участков с вынужденной задержкой - вы все правильно поняли ! У вас обычный LCD, или светодиодный
OLED ? 
 И еще, может вы мне Дмитрий, если не ошибаюсь поможете ? Так как смотрю что все профи молчат, а
может быть перешли на другие камни и языки программирования ? У меня такой вопрос, когда нам 
необходимо послать на индикатор какую либо команду, то мы делаем это с помощью протоновской
команды PRINT, а дальше выставляем нужное нам восьми битное значение. Видно что дальше, уже
в готовом коде (ассемблерном), компилятор сам для четырехбитного интерфейса, выставляет вначале
старший полубайт, а затем младший. Если я не прав поправьте меня. А как быть если по даташиту
необходимо отправить не один или два целых байта, а три полубайта ? С CLD и OLED работаю не 
так давно, поэтому еще не полностью в теме.
dimitriy-bc Дата: Ср, 14.12.2016, 16:41  |                                                                                                                Сообщение # 24
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 198
Репутация: 1   ±
Замечания:   ±
На сайте с 19.03.2012

Статус: Offline

555serg, пока особо помочь не могу. Сам пытаюсь разобраться.
anatol Дата: Ср, 14.12.2016, 22:26  |                                                                                                                Сообщение # 25
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 551
Репутация: 14   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Цитата 555serg ()
А как быть если по даташитунеобходимо отправить не один или два целых байта, а три полубайта ?
Что-то не встречалось такое wacko
555serg Дата: Чт, 15.12.2016, 10:46  |                                                                                                                Сообщение # 26
Группа: Проверенные
Ранг:  Пытаюсь разобраться
Сообщений: 55
Репутация: 0   ±
Замечания:   ±
На сайте с 12.12.2011

Статус: Offline

anatol, спасибо что отреагировали ! По поводу индикатора WH1602A вы правы, в его даташите в
режиме четырехбитного интерфейса все ровно - по два полубайта, а между ними задержки.
А вот в индикаторе WEH001602A для работы в четырехбитном режиме в начале процедуры
инициализации - необходимо послать три полубайта.
Файлы прикрепил.
Прикрепления: WEH001602AGPP5N.pdf(1294Kb) · LCD-WH1602A.pdf(334Kb)

Сообщение отредактировал 555serg - Чт, 15.12.2016, 10:47
anatol Дата: Чт, 15.12.2016, 12:30  |                                                                                                                Сообщение # 27
Группа: Проверенные
Ранг:  Разобрался
Сообщений: 551
Репутация: 14   ±
Замечания:   ±
На сайте с 10.02.2010

Статус: Offline

Ухожу в аут - переустановка системы.
И где? вы нашли полубайты? На стр. 33 (4 битный режим) и ниже указаны команды, на стр. 36 расшифровка буковок в командах. Знак "х" - любое значение. Таким образом младшие 4 разряда просто не воспринимаются дисплеем. После того как дисплей перейдет в 4-х битный режим - все отальное передается полубайтами последовательно.
Таким образом это стандартная инициализация дисплея. Не забудьте указать правильную кодовую страницу, иначе будут иероглифы.
555serg Дата: Чт, 15.12.2016, 16:52  |                                                                                                                Сообщение # 28
Группа: Проверенные
Ранг:  Пытаюсь разобраться
Сообщений: 55
Репутация: 0   ±
Замечания:   ±
На сайте с 12.12.2011

Статус: Offline

Сразу честно написал, что я - в танке. Ну тогда получается что компилятор ЛЮБОЕ наше восьми битное число для четырехбитного интерфейса постоянно преобразует в два полубайта ?
holyuser Дата: Чт, 15.12.2016, 18:16  |                                                                                                                Сообщение # 29
Группа: Проверенные
Ранг:  Могу и подсказать
Сообщений: 247
Репутация: 5   ±
Замечания:   ±
На сайте с 12.12.2007

Статус: Offline

Это зависит от строки Declare LCD_Interface = ?
555serg Дата: Чт, 15.12.2016, 18:58  |                                                                                                                Сообщение # 30
Группа: Проверенные
Ранг:  Пытаюсь разобраться
Сообщений: 55
Репутация: 0   ±
Замечания:   ±
На сайте с 12.12.2011

Статус: Offline

Да, есть предопределение Declare LCD_Interface 4 . То есть, сразу на два полубайта ?
Форум Picbasic.ru » Программирование МК » Proton PicBasic » Сброс и инициализация дисплея16x2 (Помогите!!!)
Страница 2 из 3«123»
Поиск: