Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 21.05.2011, 09:26  
Halex07
Супер-модератор
 
Аватар для Halex07
 
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,508 раз(а) в 956 сообщении(ях)
Halex07 на пути к лучшему
По умолчанию Re: FAQ (ЧаВО) по PROTEUS для начинающих и не только

8.9. О параметрах анимации и моделировании динамической индикации с помощью индикаторов на базе LEDMPX.DLL.

Я вновь возвращаюсь к теме отображения динамической индикации в ISIS, потому что теперь, когда мы знаем принцип работы многоразрядных индикаторов на основе LEDMPX.DLL, пора поставить огромный и жирную точку на этом вопросе. Для начала проведем несколько экспериментов с моделью матрицы 16х16 из предыдущего раздела. Воспользуемся примитивами сдвиговых регистров SHIFTREG_16 и соберем простейший «бегущий огонь» (Рис. 98 ).
В качестве тактового генератора используем DCLOCK из Generator Mode. При таком включении мы должны иметь светящуюся точку, скользящую слева направо по столбцам и постепенно переходящую сверху вниз по строкам (пример Takt_25Hz.DSN в папке Bad_Examples\DOT_MATRIX вложения).
Запустим симуляцию кнопкой Step или Pause, чтобы встать на нулевой отсчет времени. Этот момент зафиксирован на рисунке 98. В соответствии с прописанными в свойствах INIT=1 для U1 и INIT=0x7FFF для U2 регистры приняли заданные значения, и загорелась верхняя левая точка индикатора. Выполним шаг кнопкой Step. Согласно SingleStepTime (Рис. 99) наш симулятор продвинется на 50мс.
При этом должна загореться вторая точка в строке, а первая погаснуть. Но тут нас ждет весьма неожиданный сюрприз (Рис. 100).
По логическим уровням вроде все верно, низкий на строке R1 и высокий на колонке C2, а горят сразу две точки вместо одной. Сколько бы мы далее не нажимали кнопку Step, время будет прибавляться по 50ms, но светиться всегда будут две, а иногда даже три точки, т.е. мы имеем «размазанную» индикацию. Что же произошло – глюк Протеуса? Конечно глюк, но спровоцированный нами. Для начала еще раз заглянем в меню System =› Set Animation Option и вспомним, что означают и как соотнесены параметры, обведенные красной рамкой на Рис. 99.
Frames per Second (Кадры в секунду) – частота обновления окна программы при воспроизведении анимации (мультфильма, если так будет понятнее), запущенной кнопкой Play. Подчеркну, что этот параметр для окна основного поля ISIS, где расположена наша схема, а не всего экрана монитора. По умолчанию это значение равно 20Гц, из чего несложно сделать расчет, что один фрейм соответствует 1000/20=50мс. Данный параметр в ISISможно менять в пределах от 10 до 50мс, дальше ограничения ISISне позволят этого сделать.
Time step per Fram e– временной интервал анимации, приходящийся на один фрейм. Обратите внимание, что если мы разделим все те же 1000мс (1секунда) на значение этого параметра по умолчанию 50мс, то получим частоту 20Гц, ту же, что и в предыдущем параметре.
Single Step Time – временной интервал анимации, приходящийся на один шаг, выполняемый по кнопке Step. По умолчанию он установлен равным предыдущему параметру, но при желании можно поставить и отличающееся значение.
Также хочу напомнить, что установленные параметры анимации сохраняются в текущем проекте, так что если вы сохранили проект и открыли новый, то там они снова встанут в значения по умолчанию, т.е. соответственно 20Гц, 50мс и 50мс. Это соотношение 20 кадров в секунду и 50мс выбрано неспроста. Как гласит ProSPICE Help, оно обеспечивает наиболее гладкое зрительное восприятие симуляции в реальном времени в большинстве случаев и при этом не перегружает ЦП компьютера дополнительными расчетами активных элементов в кадре.
Теперь создадим цифровой график нашей индикации и попробуем разобраться по нему в причинах глюка. На этот график (Рис. 101) для наглядности я нанесу границы наших фреймов (кадров) через каждые 50мс красными вертикальными линиями. Кроме того, с помощью дополнительного генератора я имитировал время стробирования нашего индикатора Trigger Time, равное по умолчанию 1мс.
Обратите внимание на первые три фрейма. В каждом фрейме мы имеем по два активных сигнала (лог. 1) знакомест-колонок С1…С4. Поскольку информация в строке не меняется, она имеет одно и то же значение для всех кадров , относящихся к первой строке. Модель LEDMPX.DLL стробирует активность элемента с периодичностью 1ms, т.е. в кадре (фрейме) длительностью 50ms опрос выполняется 50 раз, и, если встречается совпадение лог. 0 на строке матрицы и лог. 1 на знакоместе-колонке – зажигается соответствующая точка. У нас бы и при старте две точки загорелись, но мы стояли на временном отсчете 0, и поэтому LEDMPX просто еще не успела «отработать» на второе знакоместо С2.
Именно такая же чехарда с «наползанием» разрядов-знакомест друг на друга творится, когда мы запускаем проекты с динамической индикацией на сегментных индикаторах, если не принять превентивных мер. Выражаясь словами телевизионщиков, мы имеем «сбитую кадровую синхронизацию». Если мы увеличим тактовую частоту задающего генератора (соответствующие примеры в папке Bad_Samples\DOT_MATRIX вложения), то в кадр будут попадать уже не два разряда, а больше и в конечном итоге (пример с генератором 100 kHz) мы получим уже на втором шаге симуляции полностью светящуюся матрицу. Это одна из причин неадекватной динамической индикации в ISIS.
Прежде, чем мы пойдем дальше - полезный совет владельцам «медленных компьютеров», подтвержденный примерами в папке Bad_Samples\DOT_MATRIX вложения.

СОВЕТ: Обратите внимание на то, что часть примеров в папке Bad_Samples имеет на конце индекс Lite – облегченные. Еще раз вернемся к рисунку 99, а конкретно к двум установленным флажкам в правой части свойств анимации. Первый из них – Show Voltage & Currenton Probes? – отвечает за показ значений напряжений и токов у установленных в проекте пробников-зондов. Второй – Show Logic State on Pins? – отвечает за показ тех самых сине-красных квадратиков логического состояния выводов у цифровых моделей. Так как с некоторого времени мне приходится часть материала готовить на нетбуке с тактовой 1,6 ГГц и слабенькой видеокартой, то даже некоторые примеры с чисто цифровой симуляцией грузят бедного «нетбуку» на все 100%. Так вот, убрав эти флажки, я снижаю загрузку ЦП до приемлемого уровня. Это заметно и на мощных компьютерах, можете убедиться самостоятельно, запустив одноименные примеры из папки с индексом Lite и без такового. Примите на вооружение данный прием, хотя он наиболее эффективен только при большом количестве пробников и «многоногих» цифровых моделей в проекте.

Итак, для того, чтобы привести рассмотренный выше пример в норму, возникает естественное желание покрутить «ручку частоты кадров», чтобы границы кадров совпали с фронтами смены знакомест-колонок С1…С4. В данном случае мы можем позволить себе такую роскошь. При заданной нами для входного генератора частоте 25Гц время свечения (длительность единичного импульса) на входах столбцов индикатора Cxсоставляет 40 мс. Зададим для Timestep per Frame и Single Step Time это значение. Чтобы сохранить соотношение между Time step per Frame и Frames per Second пересчитаем последнее 1000/40=25 кадров в секунду. Для сохранения эффекта реального времени задаем Frames per Second найденное значение 25, пока мы еще не выходим за рамки заданных ограничений от 10 до 50. Запускаем симуляцию, но нужного эффекта не получаем, по-прежнему светятся по две точки. Можно и дальше изменять значения этих параметров, но эффекта это не даст. В конечном итоге мы упремся в верхнее ограничение 50 для параметра кадров в секунду, и дальнейшее снижение таймстепов приведет только к замедлению смены картинок анимации. Правда, справедливости ради надо отметить, что нагрузка на ЦП компьютера при этом начнет снижаться, так что в ряде случаев – это тоже полезно. Снизится загрузка и замедлится мультфильм если мы будем просто менять один из параметров, например, уменьшать время Time step per Frame, не затрагивая при этом частоту кадров в секунду.
Кроме того, сейчас мы экспериментируем с одним светящимся объектом-точкой, а представьте, что у нас сегментный индикатор на несколько знакомест, где надо видеть одновременно все разряды. Это уменьшение Time step per Frame до границ одного разряда даст нам мелькающие по очереди отдельные разряды и испортит целостность восприятия нашего «Ну, погоди». Вероятно, многие уже сталкивались с таким вариантом, а для тех, кто желает полюбоваться на примеры - вложение в папке BAD_EXAMPLES\MC соответственно для AVRcкодом на Си в CodeVision и для PIC с кодом в CCS PICС. Конечно же, для обеспечения стабильного периода смена разрядов индикации загнана в прерывание по переполнению таймера 0, а частота выбрана заведомо низкой, чтобы можно было «поиграть» с параметрами анимации в ISIS. На основании этих примеров уже можно сделать важные выводы.
Для того, чтобы при многоразрядной динамической индикации получить реальную картинку необходимо, чтобы кадр анимации в симуляторе захватывал полный цикл индикации, т.е. длительность кадра должна быть не менее суммы длительностей индикации всех разрядов.
Ну и второй, не менее важный момент, который неоднократно рассматривался на форуме и до меня – наиболее простой метод получить стабильный цикл индикации, это смена разрядов в прерывании по переполнению одного из таймеров микроконтроллера. Именно нестабильность периода индикации, который зависит от подаваемой на вход частотомера Денисова измеряемой частоты, приводила к срыву картинки в рассмотренном в самом начале FAQпримере. Там мы побороли этот глюк другим методом, которого коснемся чуть ниже. Кстати, если кто-то захочет воспользоваться кодом из примеров индикации в реальном устройстве, хочу остановиться еще на одном моменте. Я делал все исключительно для примера и соответственно упрощенно – только индикация. Поэтому у меня отсутствует запрет на прерывания в начале обработчика и разрешение в конце. В реальном девайсе это может сыграть злую шутку, если в момент обработки прерывания по таймеру прилетит еще одно с более высоким приоритетом. Об этом тоже нелишне помнить.
Ну а пока вернемся к примеру с DOTMATRIX индикатором и проанализируем – почему по-прежнему светятся две точки? Вот тут и выходит на первый план параметр Minimum Trigger Time модели на основе LEDMPX.DLL. Попробую объяснить это графически, поскольку чисто словесное описание этого момента, как я не пытался, получается слишком запутанным для понимания. Обратимся к рисунку 102. Здесь я условно принял, что граница фреймов Frame1 (бирюзовый фон) и Frame2 (бледно-зеленый фон) совпадают с фронтами смены сигналов по строкам R1 и R2 и по столбцам – С1 и С2, т.е. выполняется условие рассмотренное выше.
По умолчанию Minimum Trigger Time для нашего индикатора задано равным 1мс, т.е. для одного кадра длительностью 50мс LEDMPX.DLL рассчитывает состояние выводов индикатора 50 раз. Причем нет никакой гарантии, что границы стробирования Minimum Trigger Time будут четко совпадать с границами кадров и смены знакомест и очередной строб не заползет большей своей частью в соседний разряд (знакоместо). Я даже допускаю мысль, что внутри интервала TriggerTimeпрограммист заложил усреднение нескольких рассчитанных значений, поэтому и нарисовал дополнительные красные стробы. Если бы я писал модель, то вероятно так бы и сделал. Но в реальности очень похоже на то, что «первую скрипку» тут играет конечное значение Trigger Time, т.е. как бы задний фронт этого интервала. Как мы помним, на основании рассчитанных данных LEDMPX принимает решение о том, какие активные элементы должны светиться в данном кадре. А теперь посмотрим на интервал обозначенный цифрой 2. Какое решение выдаст LEDMPX для этого интервала? Он вроде бы относится к первому кадру, но цепляет данные и для R2 и C2. Естественно, это вызовет подсвечивание в данном кадре активных элементов соседнего знакоместа. А теперь применим гашение на границе смены разрядов, ну и кадров естественно. Для этого просто достаточно убрать данные, например на шине R на интервале длительностью чуть больше нашего Minimum Trigger Time (Рис. 103).
Вот и вся операция. Интервал 2, хоть и заползает на второй кадр, но засветки данных из соседнего знакоместа не даст – для него отсутствуют активные сигналы в строке R, а следующий уже полностью относится ко второму кадру. Причем, как мы убедились на примере частотомера в начале FAQ, такой прием работает и при нестабильном периоде индикации. Большого умственного напряжения это не требует. Например, в листингах на Си примеров для микроконтроллеров во вложении к этому разделу вначале обработчика прерывания стоит закомментированной всего одна строка, которая убирает сигнал с порта, управляющего сегментами на момент переключения порта знакомест. Вот она то и даст этот эффект.
Ну а сейчас мы обойдем этот момент другим путем. Правда, сразу оговорюсь, что этот прием работает только при стабильном периоде индикации. Давайте подумаем, а надо ли стробировать данные 50 раз за период индикации, если они при этом не меняются? Возьмем, да и приравняем Minimum Trigger Time к длительности активного сигнала для знакоместа. Вот именно равное значение в данном случае не работает, но стоит чуть-чуть увеличить Minimum Trigger Time, например, длительность сигнала знакоместа равна 10мс, а значение Trigger Time мы установим равным 10,001мс, и картинка приходит в норму. Попробую объяснить, почему такое происходит. При равных значениях видимо по-прежнему сказывается захват соседнего знакоместа. Если же Minimum Trigger Time чуть больше длительности знакоместа, сбой тоже происходит, но совпадение фазы сигналов настолько редко, что на общем фоне большого количества кадров этот сбой практически не мешает зрительному восприятию картинки. Иногда мелькнет неадекватная информация, и опять нормальное отображение. Причем, еще раз подчеркну, в данном случае речь идет не о полном цикле индикации, а именно о длительности одного знакоместа. Примеры использования данного приема в папке вложения GOOD_EXAMPLES. В случае с активной матрицей мы при равных длительности кадра и сигнале столбца со значением Minimum Trigger Time чуть большим, чем сигнал столбца получаем единственную светящуюся точку как в шаге, так и при запущенной кнопкой Play симуляции. В случае многоразрядного сегментного индикатора если долго и внимательно смотреть на индикатор, то можно засечь проскок наложения разрядов, но общей картине восприятия он не мешает.
Ну и чтобы окончательно покончить с этим вопросом, подытожим вышесказанное.
Для симуляции динамической индикации в ISISв любом случае наиболее предпочтителен способ гашения индикатора на момент смены разрядов (знакомест). При этом длительность интервала гашения должна быть хотя бы чуть больше длительности параметра Minimum Trigger Time, который установлен для индикатора.
При стабильном периоде индикации можно попробовать добиться желаемого эффекта, установив параметр Minimum Trigger Time чуть больше длительности активного сигнала одного знакоместа.
Еще один важный момент, который я чуть не упустил. В своих примерах я использовал индикацию с минимальной частотой, чтобы можно было отследить изменение параметров анимации. На деле же динамическую индикацию стараются сделать с частотой выше 50 Гц, чтобы исключить мерцание реальных индикаторов. Естественно, подогнать параметры анимации ISISпод один период индикации в таких случаях нам не удастся из-за программных ограничений Протеуса, но задать длительность кадра таким, чтобы в него входило некоторое целое количество периодов можно и даже желательно. Для этого достаточно исследовать индикацию с помощью цифрового графика, как это сделано в приведенных примерах. Дальше все построено на банальной арифметике.
Ну и в заключение несколько слов о том, каким выбрать Minimum Trigger Time. На него, в отличие от параметров анимации, нет жестких ограничений. Тут тоже все зависит от конкретного построения схемы и программы динамической индикации. В большинстве случаев все работает и с параметрами по умолчанию, но иногда приходится повозиться. В сторону уменьшения значение ограничено лишь тем, что при маленьком значении на индикаторе начнут светиться данные соседних знакомест (Рис. 104). В сторону увеличения Minimum Trigger Timeограничено длительностью кадра анимации и если превысит его, то у нас просто начнутся пропуски данных – хаотичное моргание отдельных разрядов (Рис. 105), или индикация будет отсутствовать. Если применяется гашение при смене разрядов, то значение Minimum Trigger Time надо установить меньше, чем интервал гашения.
Эти примеры расположены в папке MC_Tr_Time вложения. Соответствующие пояснения даны в комментариях на поле проектов. Ну а я завершаю окончательно и бесповоротно материал о динамической индикации в Протеусе и надеюсь больше к этому вопросу не возвращаться. Теперь вы знаете все о поведении моделей LEDMPX при симуляции, а выбор метода реализации динамической индикации остается за вами. Ну а мы переходим к не менее интересному материалу, который уже давно заждался, – индикаторы на базе LCDMPX.DLL.
Рисунки 98, 99, 100.
Рисунки 101, 102, 103.
Рисунки 104, 105.
Миниатюры:
Нажмите на изображение для увеличения
Название: Pic_98.gif
Просмотров: 693
Размер:	100.7 Кб
ID:	21886   Нажмите на изображение для увеличения
Название: Pic_99.gif
Просмотров: 389
Размер:	28.2 Кб
ID:	21887   Нажмите на изображение для увеличения
Название: Pic_100.gif
Просмотров: 450
Размер:	54.8 Кб
ID:	21888  

Нажмите на изображение для увеличения
Название: Pic_101.gif
Просмотров: 429
Размер:	17.7 Кб
ID:	21889   Нажмите на изображение для увеличения
Название: Pic_102.gif
Просмотров: 350
Размер:	23.3 Кб
ID:	21890   Нажмите на изображение для увеличения
Название: Pic_103.gif
Просмотров: 323
Размер:	25.3 Кб
ID:	21891  

Нажмите на изображение для увеличения
Название: Pic_104.gif
Просмотров: 488
Размер:	13.8 Кб
ID:	21892   Нажмите на изображение для увеличения
Название: Pic_105.gif
Просмотров: 521
Размер:	15.5 Кб
ID:	21893  
Вложения:
Тип файла: rar 8_9.rar (628.0 Кб, 1020 просмотров)
Реклама:

Последний раз редактировалось Halex07; 26.06.2011 в 13:19.
Halex07 вне форума  
Эти 14 пользователя(ей) сказали Спасибо Halex07 за это сообщение:
aleksa-yar (26.05.2011), bobby1968 (16.06.2011), bozhko (23.06.2011), cnc10 (23.05.2011), Daddy_Karlo (29.09.2012), grbizly (04.06.2011), lisergin (21.05.2011), malyshevsergey (21.05.2011), parcshin (05.01.2012), ReLe1 (14.08.2011), skver (22.05.2011), switch0 (03.12.2012), Traan (16.09.2013), ДимаК (21.06.2011)
Непрочитано 21.05.2011, 09:43  
Halex07
Супер-модератор
 
Аватар для Halex07
 
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,508 раз(а) в 956 сообщении(ях)
Halex07 на пути к лучшему
По умолчанию Re: FAQ (ЧаВО) по PROTEUS для начинающих и не только

8.10. Знакомимся с моделями на основе LCDMPX.DLL – еще одним вариантом библиотеки для построения цифровых индикаторов в ISIS. Общие принципы построения моделей ЖК индикаторов.

Из названия библиотеки по аналогии с описанной выше напрашивается элементарный вывод, что служит она для создания моделей жидкокристаллических индикаторов (LCD от английского Liquid Crystal Display), и так же как предыдущая мультиплексирована (MPX от multiplexing). Ну, если второй термин себя полностью оправдывает, то LCD в общем то только потому, что она изначально разрабатывалась для имитации ЖК цифровых индикаторов. Но, как мы уже убедились на примере LEDMPX, в которой диодными свойствами и близко не пахнет, аналогично обстоит дело и здесь. LCDMPX тоже обладает только цифровыми свойствами, т.е. тока не «кушает» и имеет только два состояния: активный элемент «горит», активный элемент потушен. Я не стану расписывать здесь теорию управления реальными ЖК индикаторами, для этого есть соответствующая литература. Про особенности конструкций ЖК индикаторов и принципы частотного и фазового управления ими вы можете прочесть в старых справочниках, например:
· МРБ вып. 1122. Пароль Н.В., Кайдаров С.А. Знакосинтезирующие индикаторы и их применение. М., Радио и связь, 1988 г.;
· Вуколов Н.И., Михайлов А.Н.. Знакосинтезирующие индикаторы. Справочник. Под ред. В.П. Балашова. М., Радио и связь, 1987 г.
Особенности управления конкретными реальными ЖК индикаторами необходимо учитывать при разработке своих конструкций, поскольку от этого зависит «продолжительность жизни» вашего индикатора, а модель ISIS построена так, что допускает статическое управление и легко пропустит ошибки, допущенные в динамике. Еще раз хочу подчеркнуть, что пока мы ведем речь о простых индикаторах, у которых имеется один общий вывод для каждой группы сегментов индикатора, просьба «чайников» от электроники не путать с COG-индикаторами, их мы коснемся особо.
В библиотеках ISIS цифровые ЖК индикаторы представлены весьма скромно всего пятью моделями, расположенными в Optoelextronics =› LCD Panels Displays. Объясняется этот факт по-видимому отсутствием спроса на данный тип моделей у легальных «забугорных» пользователей. Нам же, сирым и убогим, выковыривающим ЖК индикаторы из отслуживших свой срок калькуляторов, телефонов и прочей оргтехники отсутствие этих моделей доставляет массу неудобств. Да и китайско-белорусская промышленность до сих пор исправно снабжает Российский рынок сегментными ЖК-индикаторами. Это и широко распространенные индикаторы Минского ОАО "ИНТЕГРАЛ" http://www.integral.by и цифровые ЖК индикаторы китайской фирмы Intech LCD Group http://www.intech-lcd.com/standardpanel.htm. Подчас применение этих сравнительно дешевых индикаторов позволяет весьма существенно сэкономить деньги в простых приложениях типа электронных часов, таймеров, термометров и пр. «бытовухи». Ну и конечно, многим хочется иметь такие модели для предварительной отладки в ISIS. Вот этим мы сейчас и займемся.
Итак, для того чтобы активировать («зажечь») сегменты ЖК индикаторов на базе LCDMPX достаточно подать на них питание (пример индикатора VI-402-DP слева) или логические уровни (пример индикатора VI-332-DP справа) в правильной полярности (Рис. 106).
По сути, этими двумя индикаторами: для часов и для мультиметра и ограничен наш выбор в ISIS. Оставшиеся три в библиотеке – заказные индикаторы для отладочных микроконтроллерных комплектов и практической ценности для рядового пользователя не представляют.
Чуть ниже индикаторов на рисунке я расположил их выводы с подсвеченными именами. Мы можем заметить, что часовой индикатор имеет один общий вывод с именем COM1 и 32 сегментных вывода с именами SEG1…SEG32. Индикатор справа в отличие от первого имеет четыре общих вывода – COM1…COM4 и меньшее количество сегментных. Наталкивает на мысль об аналогии с моделями на основе LEDMPX, рассмотренными ранее, но это не совсем корректно. Дело в том, что в модели LEDMPX, как вы вероятно помните, развертывание знакомест (нумерация) идет слева направо по горизонтали, т.е. общему выводу 1 соответствует левая цифра, выводу 2 вторая слева и далее с шагом шириной в одно знакоместо (цифру из N-сегментов с подложкой-фоном). В модели LCDMPX имеет место относительная двумерная пространственная ориентация по осям Х-Y для сегментов, соответствующих определенному общему выводу с именем COM. На примере VI-332-DP для COM1 и COM4 расположение соответствующих сегментов представлено на рисунке 107. Не очень привычно, но дает более широкие возможности при создании собственных моделей.
Чтобы нам в дальнейшем не путаться выводы «знакомест» (конструктивно это выводы задней пластины ЖК индикатора) COM nот английского «common» – общий, я так и буду называть – общие выводы, потому что термин «знакоместо» здесь весьма условен, ну а выводы сегментов – SEGn так и останутся выводами сегментов. Итак, максимальное количество и тех и других для моделей на основе LCDMPX – 64. Нумерацию можно вести кому как привычнее, т.е. могут существовать SEG1…SEG64 или SEG0…SEG63. Чем ограничение в 64 сегмента чревато в действительности? Среди реально существующих цифровых ЖК индикаторов немного найдется с раздельными общими выводами. Как правило, он один на всю заднюю пластину-подложку. А вот выводов сегментов может оказаться больше, чем допустимый предел. Типичные примеры: таксофонный ИЖЦ13-8/7 (8 цифр с точками и 8 символов надчеркивания над ними) или Intech ITS-E0806 (8 цифр с точками плюс два разделительных двоеточия).
Дальнейшее рассмотрение продолжим на примере VI-332-DP, поскольку он наиболее показателен с точки зрения построения моделей на базе LCDMPX.DLL. Для начала «поколотим его молотком» (Decompose) и посмотрим на состав входящих в него символов, переключив селектор в соответствующее положение кнопкой S слева в меню (Рис. 108 ).
Всего в составе индикатора 23 символа. Символы LCDSEG_0LCDSEG_7 нам уже знакомы по предыдущим семисегментным индикаторам. Это образующие цифру сегменты и десятичная точка. Для примера на рисунке 109 в верхнем ряду приведены первые четыре символа сегментов дополнительно «разобранные на запчасти», чтобы был виден маркер ORIGIN. Здесь тоже никаких новшеств по отношению к остальным сегментным индикаторам за исключением цвета погашенного (с индексом _0) и горящего (с индексом _1) символа.
В нижнем ряду также «разобранные на запчасти» первые четыре дополнительных символа. Здесь я хотел бы заострить ваше внимание на положении маркера ORIGIN, потому что именно с ним будет связано все, что будет изложено ниже, а именно принцип позиционирования символов в моделях на основе LCDMPX.DLL.
Снова вернемся к полноценной модели VI-332-DP и заглянем в ее свойства. В окне Edit Properties установим флажок Edit all properties as text, чтобы увидеть то, что изначально скрыто от посторонних глаз (Рис. 110).
Ниже я полностью привожу те десять строчек (по числу сегментных выводов SEG1…SEG10), которые нас интересуют:
Цитата:
{SEG1=(11,400,50),(9,0,200),(8,0,500),(10,0,800)}
{SEG2=[13,1700,50],[12,1000,50],[22,200,200],[7,250,200]}
{SEG3=[0,900,200],[5,900,200],[4,900,200],[3,900,200]}
{SEG4=(1,900,200),(6,900,200),(2,900,200),(7,950,2 00}
{SEG5=(0,1600,200),(5,1600,200),(4,1600,200),(3,16 00,200)}
{SEG6=(1,1600,200),(6,1600,200),(2,1600,200),(7,16 50,200)}
{SEG7=(0,2300,200),(5,2300,200),(4,2300,200),(3,23 00,200)}
{SEG8=(1,2300,200),(6,2300,200),(2,2300,200),(-1, 0,0)}
{SEG9=(14,2000, 0),(15,2500,0),(16,2700,450),(19, 2700,750)}
{SEG10=(18,2700, 450),(17,2700,450),(20,2700,750),(21, 2700,750)}
Вот это и есть основа позиционирования сегментов и с ней нам сейчас предстоит разобраться. Итак, для начала вспомним, что фигурные скобки в начале и конце каждой строки означают сокрытие текста (HiddenText) и поэтому нас в данный момент мало интересуют. Как вы наверное уже догадались, каждая строка соответствует выводу сегментов, с имени которого она начинается, т.е. SEG1 соответствует одноименному выводу с номером 5, ну а SEG10 – выводу с номером 14. После знака равенства имеются четыре секции по три числа, заключенные в круглые скобки и разделенные запятыми. Именно четыре общих вывода COM имеет данная модель, если кто подзабыл – вернитесь к рисунку 106. Нетрудно догадаться, что левая секция в круглых скобках соответствует выводу с именем COM1, следующая COM2 и т.д. Нам осталось разобраться с тем, что находится внутри круглых скобок. Тут тоже ничего сверхъестественного: первое число – номер n символа LCDSEG_n, второе и третье соответственно положение по осям X и Y в координатах сетки маркера ORIGIN этого символа относительно маркера ORIGIN всей модели (виден в левом верхнем углу на Рис. 108 . Вот именно это я и обозвал выше по тексту заумной фразой двумерная относительная пространственная ориентация. Чтобы было более наглядно, попробую изобразить это на картинке на примере одного символа, например, LCDSEG_9 (Рис. 109) с координатами X=0, Y=200, соответствующего изображению батарейки. Данный символ в соответствии со второй секцией в круглых скобках для строки SEG1= в свойствах должен стать активным при подаче на COM2 логической единицы, а на SEG1 – логического нуля. Проверяем… (Рис. 111).
Как видим, наши предположения полностью подтвердились. Сами изображения маркеров ORIGIN я нанес на рисунок для наглядности. По оси X смещение маркера символа отсутствует, по оси Yравно двум клеткам, т.е. при шаге сетки 100th соответствует числу 200.
Ну и в заключении к этому познавательному материалу, прежде чем мы перейдем к практическому созданию моделей, несколько существенных замечаний.
Первое из них касается описания координат в свойствах модели, а конкретно разделительных запятых. Привычного для обычного текста пробела после запятой, а уж тем более до нее лучше не делать. Это касается как написания координат внутри круглых скобок, так и запятых между секциями. Хотя, если посмотреть на последнюю строчку, мы видим их присутствие в модели в двух местах, но исходя из личного опыта, особенно с более ранними версиями Протеуса, я все же рекомендую их не делать. В ряде случаев наблюдалась неадекватная реакция симулятора на наличие пробелов в свойствах сегментов.
Второе замечание касается относительной координаты по осиY. Предопределяя желание некоторых любителей покричать: «Вот это глюк! Так глюк!», поясняю – реально в последней картинке смещение по Y должно быть отрицательным – ведь оно направлено вниз, и мы столкнемся с этим фактом при построении своих моделей. Почему же стоит положительное число 200? Программисты меня и автора LCDMPX поймут с полуслова – а стоит ли таскать внутри модуля знаковые константы, если они используются только внутри и никак не связаны со всей остальной программой? Поэтому не удивляйтесь, что конструируя свои модели мы будем получать отрицательное смещение по осиY, но скромно забывать при этом о знаке числа.
Ну и последнее, если Вы заглянете самостоятельно в свойства модели часового индикатора VI-402-DP с установленной галочкой, то увидите, что там для описания свойств строки SEG= имеют только одну секцию с координатами, ведь у него только один общий выводCOM1, зато строк сегментов будет гораздо больше. Желающие могут скачать даташиты на эти индикаторы, они доступны при подключенном Интернете при нажатии кнопки Data в свойствах модели, либо через клик правой кнопкой и выборе опции Display datasheet. Правда сразу могу огорчить, на просторах России я этих индикаторов не встречал – не завозят.
Рисунки 106, 107, 108.
Рисунки 109, 110,111.
Миниатюры:
Нажмите на изображение для увеличения
Название: Pic_106.gif
Просмотров: 605
Размер:	70.2 Кб
ID:	22379   Нажмите на изображение для увеличения
Название: Pic_107.gif
Просмотров: 437
Размер:	24.2 Кб
ID:	22380   Нажмите на изображение для увеличения
Название: Pic_108.gif
Просмотров: 449
Размер:	84.8 Кб
ID:	22381  

Нажмите на изображение для увеличения
Название: Pic_109.gif
Просмотров: 426
Размер:	80.7 Кб
ID:	22382   Нажмите на изображение для увеличения
Название: Pic_110.gif
Просмотров: 422
Размер:	66.0 Кб
ID:	22383   Нажмите на изображение для увеличения
Название: Pic_111.gif
Просмотров: 438
Размер:	73.3 Кб
ID:	22384  


Последний раз редактировалось Halex07; 26.06.2011 в 13:21.
Halex07 вне форума  
Эти 16 пользователя(ей) сказали Спасибо Halex07 за это сообщение:
aleksa-yar (14.06.2011), Andriy_O (15.12.2011), bobby1968 (16.06.2011), bozhko (23.06.2011), grbizly (13.06.2011), kittec (06.06.2011), kuksin (31.05.2011), malyshevsergey (06.06.2011), parcshin (05.01.2012), ReLe1 (14.08.2011), sa502 (07.06.2011), timur1009 (08.06.2011), Traan (16.09.2013), vovic.tynda (21.05.2011), ДимаК (21.06.2011)
Непрочитано 06.06.2011, 20:41  
Halex07
Супер-модератор
 
Аватар для Halex07
 
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,508 раз(а) в 956 сообщении(ях)
Halex07 на пути к лучшему
По умолчанию Re: FAQ (ЧаВО) по PROTEUS для начинающих и не только

8.11. «Фальшивая» точка начала координат - наш помощник в деле создания графики индикаторов. Трансформируем модель VI-402-DP в шестиразрядный индикатор ITS-E0809.
Будем считать, что со структурой модели на основе LCDMPX.DLL мы познакомились. Наступил черед практического создания первой самостоятельной модели на основе данной библиотеки. В качестве прототипа для нашей будущей модели я выбрал четырехразрядный часовой ЖК-дисплей VI-402-DP, с которым мы познакомились в предыдущем параграфе. А создадим мы на его основе не какую-нибудь «экзотику», а более распространенный на необъятных просторах нашей Родины шестиразрядный ЖК индикатор ITS-E0809 уже упоминавшийся мною выше китайской фирмы Intech LCD Group. Эти индикаторы до сих пор продаются в ряде Интернет-магазинов, как в России – «Платан», «Чип-Дип», так и в ближнем зарубежье – украинский «Космодром».
Но прежде чем мы перейдем непосредственно к созданию модели хочу рассказать об одной «фишке» Протеуса, именно всего Протеуса, т.к. данная опция работает и в ISIS, и в ARES, в ряде случаев значительно облегчающей жизнь при создании графики моделей. А заключается она в преднамеренной установке «фальшивой» точки начала координат на поле проекта. Данная опция описана в HELP по Universal Keypad Model, и мы будем ее также использовать при создании моделей клавиатуры, а пока я расскажу – как это работает на практике. Для начала «разберем на запчасти» (Decompose) наш прототип VI-402-DP. Я рекомендую вам сразу же увеличить параметры листа проекта (System =› Set Sheet Sizes), хотя бы до A3, так как создание графики требует простора для творчества. Кроме того, неплохо бы сразу выделить полностью все составляющие разбитой модели и через кнопку Block Copy накидать по полю проекта пару-тройку резервных копий разбитой модели, чтобы всегда иметь в запасе «неиспорченные» нашим творчеством запчасти. И еще, перед началом экспериментов убедитесь, что шаг сетки стоит так, как принято по умолчанию – 100th. Более мелкий шаг при создании моделей обычно необходим только при прорисовке мелких деталей графики, а в данном случае он будет только мешать. Итак, совмещаем курсор мышки с центром маркера ORIGIN одной из разбитых моделей в ее левом верхнем углу и нажимаем клавишу с латинской буквой «O» (не путать с нулем!!!). Кстати, переключать раскладку клавиатуры в нашем случае совсем не обязательно, Протеус среагирует адекватно и на русскую «Щ». Что при этом произойдет, показано на рисунке 112.
Как видим, цифровые значения координат в окне программы в правом нижнем углу слегка «полиловели» и приняли нулевое значение. Теперь любое телодвижение мыши будет изменять их значение относительно новой точки отсчета – левого верхнего угла модели или установленного там маркера ORIGIN. Если накануне было «слегка принято на грудь» и «рука мыша дрожать устала», то никогда не поздно вернуться к первоначальному отсчету повторным нажатием клавиши «O». Затем, собрав волю в кулак и сфокусировав зрение на нужной точке можно повторить операцию. Теперь рассмотрим, зачем нам такие мучения…
Поместим из селектора символов какой-нибудь контрастный (засвеченный) символ на соответствующее ему место первой цифры индикатора. В качестве примера я выбрал символ сегмента «А» (верхнего горизонтального). В селекторе символов он у нас фигурирует, как LCDSEG_0_1. Почему я выбрал именно контрастный темный? Да потому, что потом его легко отследить и удалить, хотя при достаточном запасе резервных копий модели можно и не «париться» с этой процедурой. Теперь на этом месте мы его тоже Decompose, чтобы увидеть положение маркера самого символа (Рис. 113).
Наводим курсор на появившийся маркер ORIGIN символа и в правом нижнем углу получаем координаты относительного смещения этого маркера от маркера ORIGIN всей модели. Как я уже упоминал, поскольку смещение вниз, координата Y имеет отрицательное значение, на знак мы не обращаем внимания. Итак, для сегментов первой цифры, мы получили значение 400,200. Если теперь заглянуть в свойства исходного, не разбитого индикатора VI-402-DP при установленном флажке Edit all properties as text, то мы увидим, что для ряда сегментов (SEG1…SEG4 и SEG29…SEG32) использована именно эта пара значений координат. Аналогичным образом определяются координаты для символов остальных знакомест (Рис. 114).
Не надо быть Фурье или Лобачевским, чтобы вывести одну закономерность – для всех символов модели индикатора смещение по оси Y составляет 200th, а интервал по оси X=700th. Именно с таким интервалом нам и предстоит расположить дополнительные две цифры нашей будущей модели. Надеюсь, что вы самостоятельно можете проделать эту работу без подробных комментариев. Вкратце, все сводится к следующему: растягиваем вправо тело-подложку на нужную ширину и, выделив нужный участок графики на разобранной модели, копируем его на новое место. После того, как работа проделана, имеет смысл проверить, что мы не промахнулись в графике, а заодно и сверить координаты добавленных элементов, как мы это только что проделали. Соответственно для пятой и шестой цифр они будут 3200,200 и 3900, 200. Если у вас получилось по другому, значит где-то вы сдвинули знакоместо.
Ну, вот мы и разобрались с «крыльями» нашей модели, пора приниматься за «ноги и хвосты». Для этого нам потребуется даташит индикатора ITS-E0809, который доступен на сайте фирмы Intech LCD Group, по ссылке в предыдущем параграфе. Я же воспользуюсь данными на индикатор из каталога с сайта www.platan.ru. В нем они расположены в более компактной форме и помещаются здесь на одном скриншоте из данной документации (Рис. 115). Меня в данном случае интересует нижняя таблица соответствия выводов индикатора сегментам. Но, сразу предупреждаю, там есть ошибка, которую я поправил красным цветом.
Далее можно идти различными путями. Кому то может понравиться вариант расположения выводов так, как у реального индикатора, а кому то захочется расположить их в один ряд. В данном случае это возможно только с шагом 50th. При этом придется скрыть имена и номера выводов, а для удобства расположить их группами, соответствующими каждой цифре. Итак, приступаем к расстановке выводов. Хотя я и таскал из картинки в картинку выводы от прототипа, но сейчас рекомендую их удалить. Дело в том, что при большом количестве «ног» удобнее и быстрее воспользоваться опцией Property Assignment Tools (PAT), но у нее иногда бывают мелкие глюки именно при замене одного имени на другое. Чтобы обезопасить себя от этого проще поставить свежие выводы без номеров и имен, с ними проблем не бывает, тем более времени это отнимет немного. Поставили пяток выводов, потом обвели их, выделили и … Block Copy столько сколько нужно. Сначала я расположу выводы группами с шагом 100th и на некотором расстоянии от модели, а когда закончу нумерацию и наименование, пододвину на нужные места. Еще один прием, которым я часто пользуюсь в таких случаях, это сохраняю в формате BMP картинку с расположением выводов в данном случае нижнюю таблицу с рисунка 115 и втаскиваю ее в проект с нужным масштабом через File =› Import Bitmap. Этот прием исключит из творческого процесса постоянное перепрыгивание из окна в окно для проверки соответствия номера, названию. Можно, конечно, распечатать на бумаге, тогда будете прыгать глазами экран-бумага-экран. Наверное, этот вариант имеет право на жизнь – зарядка для глаз сохранит зрение, но макулатуры в хозяйстве добавится. Там же имеет смысл расположить одно графическое изображение всех сегментов с надписанными номерами, и просто текстовые строки под группами выводов, которые дополнительно облегчат жизнь при расстановке номеров и имен выводов (Рис.116).
Итак, запускаем PAT, в строке String набираем Name=SEG# а в строке Count меняем стартовое значение с 0 на 1, как показано на том же рисунке 116. Как вы уже догадались, на данном этапе мы будем использовать PAT для операций с выводами (Pin), конкретно сначала для имен NAME, затем для номеров NUM, я выделил желтым цветом это в Help окна PAT. Убеждаемся, что Action оставлено по умолчанию Assign (назначить) и ApplyTo OnClick (по клику мыши), нажимаем кнопку OK. Теперь пробегаемся кликами мышкой по всем выводам сегментов слева направо, общий вывод COM1 мы назовем вручную позже. Затем снова вызываем PAT и набираем в строке String значение NUM=#, опять исправляем Count с 0 на 1 и опять ОК. Дальше строго руководствуемся таблицей и расставляем номера выводов в соответствии с ней, не забывая присвоить номер 1 отдельно стоящему выводу COM1. Что после этого получилось, показано на рисунке 117.
Теперь тщательно проверим, что мы не наделали ошибок и воспользуемся все тем же PAT, чтобы скрыть имена и номера выводов, потому что когда они будут расположены с шагом 50th, текст соседних выводов будет перекрываться. Для этого выделяем мышью все выводы модели и вновь давим кнопку PAT в верхнем меню. В строке String набираем просто NAME, устанавливаем переключатель Assign в положение Hide (скрыть), а Apply To в положение Local Target и нажимаем OK (Рис. 118 ). Аналогично повторно выделяем выводы и повторяем вызов PAT, но вместо NAME ставим NUM, чтобы скрыть номера выводов. Вы наверное уже догадались, что если вместо Hide выбрать Show(показать), то вместо скрытых имен/номеров, получим видимые. Самое время освоить Property Assignment Tools тем, кто этого еще не сделал.
Итак, я установил шаг сетки 50th, сдвинул выводы в группах и придвинул их к модели (Рис 119). Попутно я добавил на изображение модели текстовые строки с подсказкой о назначении выводов. Теперь графика полностью готова к созданию модели индикатора ITS-E0809.



Настал черед процедуры Make Device. Причем на первом этапе я не стану добавлять координаты сегментов, а просто создам устройство с базовым набором свойств для LCDMPX.DLL. Мы уже столько раз проходили Make Device в процессе изучения Протеуса, что, надеюсь, нет смысла приводить скриншоты с подробным видом задаваемых свойств, достаточно описать – что и где задается. На первой вкладке Make Device задаем нашему девайсу имя – ITS-E0809, префикс – U (а кто желает может и H или HG) , а также задаем параметры активного компонента: Symbol Name Stem LCDSEG, количество – 9, устанавливаем флажки бит-зависимости и связи с DLL. Окно с корпусом оставляем не заполненным, а в третьем окне добавляем следующие свойства:
  • Name: PRIMITIVE, Description: Primitive Type,Type: String,Type: Hidden,Default Value: DIGITAL,LCDMPX,Visibility: Hide Name & Value
  • Name: MODDLL, Description: VSM Model DLL,Type: String,Type: Read Only,Default Value: LCDMPX.DLL,Visibility: Hide Name & Value
  • Name:TTRIGMIN, Description: Trigger Time,Type: String,Type: Hidden, Default Value: 1ms,Visibility: Hide Name & Value
  • Name: TRACE, Description: Diagnostic Messages,Type: Trace Mode,Type: Hidden, Default Value: Warning Only, Visibility: Hide Name & Value
Последнее, относящееся к диагностике, можно и не добавлять, чем я и воспользовался в прилагаемом примере. В последнем окне выбираем категорию Optoelectronics, подкатегорию LCD Panels Dysplays, добавляем через кнопку New производителя Intech LCD Group, и что-нибудь типа 6 Digits LCD Panel в описание девайса. Сохраняем все это в нужной библиотеке. Как всегда, свободной для записи является USRDVC, но при желании можно добавить модель к существующим дисплеям – там еще 13 позиций свободно, или создать свою библиотеку дисплеев. О том, как снять защиту записи с библиотек или создать свою говорилось ранее.
В принципе, модель уже «работоспособна» с точки зрения того, что при симуляции не выскакивают ошибки, но и индикации соответственно никакой. Почему я не стал сразу добавлять координаты сегментов? Ну, во-первых, потому что это можно осуществить двумя способами, и я их сейчас опишу, а во-вторых, потому что их много и лучше добавлять их не скопом, а в несколько приемов, проверяя работоспособность на каждом этапе.
Итак, вариант первый – «классический». Описание сегментов добавляем через третье окно Make Device, при этом нам придется каждый раз вводить вручную все параметры. Процесс представлен на рисунке 120.
Для созданной нами модели ITS-E0809 запускаем Make Device, переходим в третье окно и через кнопку New начинаем добавлять Blank Item. Для каждого сегмента нам предстоит руками задать Name, Description, установить Type=Hiddenи в графе Default Value задать номер символа и его координаты вручную. Для всех сегментов, составляющих первую цифру координаты одинаковы и равны 400,200, а вот номер символа будет отличаться. Для верхнего сегмента «а» первой цифры – SEG1 он будет равен _0, а десятичной точке – SEG8 соответствует символ LCDSEG_7. Данный метод хорош тем, что в любой момент можно прекратить добавление сегментов, пройти процедуру Make Device до конца, сохранить изменения и проверить – что и как работает. Для примера на рисунке 121 приведен момент проверки, когда в модели добавлены параметры только для первых четырех сегментов SEG1…SEG4, т.е. сегменты «a, b, c, d» первой цифры. Хотя активные сигналы поданы на все выводы первой цифры, работают только эти сегменты. Таким образом, можно в любой момент проверить свои действия. Но, как видим, процедура ручного ввода при большом количестве активных элементов – довольно рутинное и утомительное занятие.
Второй вариант заключается в том, что данные по сегментам заранее готовятся в любом текстовом редакторе и добавляются сразу, непосредственно в окне All Properties свойств нашей модели (Рис. 122). Тут тоже возможен самоконтроль на любом этапе, а процедура Make Device запускается только один раз, когда все сегменты добавлены и проверены.
Вспомним, что для того чтобы параметры были скрытыми (Hidden) достаточно заключить их в фигурные скобки. Но это относится только к отображению параметров в окне проекта на поле чертежа на месте серого TEXT.За отображение же параметров в окне свойств модели отвечает второй сверху параметр Type на третьей вкладке Make Device. При таком способе добавления свойств он по умолчанию остается Normal. Это означает, что если мы не изменим его на третьей вкладке для каждого сегмента, выбрав из раскрывающегося списка Hidden, то в конечном итоге получим в готовом девайсе параметры SEG выделенными в отдельные строки. На рисунке 123 приведен пример как это выглядит при вызове Edit Device Properties для первых четырех SEG.
А представьте, что таких строк будет почти полста? Окошко растянется больше чем экран компьютера. Поэтому, при этом варианте при запуске Make Device необходимо на третьей вкладке пробежать мышкой по всем добавленным SEG и изменить второй сверху Type на Hidden. Все же это быстрее, чем набирать на клавиатуре.
Можно пойти и на маленькую военную хитрость, чтобы обмануть Протеус. Заглянем в текстовый скрипт «разобранного» индикатора VI-402-DP. Там вначале мы можем найти строки вида:
{SEG1="SEG1",HIDDEN STRING}
{SEG2="SEG2",HIDDEN STRING}
Находятся эти строки в разделе, начинающемся со строки {*PROPDEFS}, а сами свойства в разделе, начинающемся со строки {*COMPONENT}. Таким образом, можно заранее подготовить аналогичный текст в текстовом редакторе для наших 49 сегментов и добавить в окно All Properties перед процедурой Make Device. Применительно к первым четырем сегментам рисунка 123 это будет выглядеть так, как показано на рисунке 124.
Конечно же, второй способ удобнее и практичнее, и лично я всегда пользуюсь им. Если данные готовятся в хорошем текстовом редакторе, то всегда можно воспользоваться «продвинутыми» функциями автозамены в выделенном тексте и прочими удобствами редактирования, а не заниматься тупым «копи-пастом» с последующей рутинной ручной правкой.
Вот, вроде, и все хитрости создания собственной модели ЖК индикатора на основе LCDMPX.DLL. Как вы уже поняли, главным ее отличием от LEDMPX является возможность размещения сегментов по двум координатам, что дает больше возможностей для создания своих моделей. Кроме того, в моделях на основе LEDMPX выводы SEG для каждого «знакоместа» с общим выводом COM индивидуальны, а не объединены, как в LEDMPX. Ну и еще хочу заметить, что в рассматриваемом примере мы воспользовались стандартной расцветкой символов для ЖК (черно-серым вариантом), но это совсем не догма, можно использовать символы и подложку с другой цветовой гаммой и на основе LCDMPX сделать модели светодиодного типа. Единственное, что пока тормозит – это ограничение на 64 сегмента, которое, надеюсь, когда-нибудь Лабцентер расширит, как это было со светодиодной библиотекой.
Ну и в заключение несколько слов о том как добавить даташит к модели. Для этого на соответствующей вкладке процедуры Make Device указываем имя файла даташита. В моем случае это E0809.pdf (Рис. 125).
Это совсем не лишняя информация, особенно, когда у модели скрыты номера и имена выводов. Сам файл даташита должен помещаться в определенной директории. Как определить в какой именно – ясно из рисунка 126. Там показан путь по умолчанию для Windows 7, соответственно у «счастливых» обладателей WindowsXP он будет отличаться. Этот путь в любой момент можно изменить и тогда все скачанные из Интернета даташиты Протеус будет помещать в другую, указанную вами папку. Только не забудьте туда переместить файлы, которые Вы скачали ранее. Ну и конечно в нее же помещаем файл даташита нашей модели, который я поместил во вложении. Если этого не сделать, то Протеус будет пытаться скачать его с сайта Labcenter, где его нет и в помине.
Во вложении отдельно представлен проект с последовательностью создания графической модели и тестовый проект с пробной симуляцией готового девайса. Конечно же, никаких готовых файлов модели там нет. Если вам необходима модель ITS-E0809 в ваших установленных библиотеках, достаточно тупо пройти всю процедуру Make Deviceот начала до конца для готовой модели из проекта TEST.DSN, ничего не меняя. Ну, можете добавить файл даташита на соответствующей вкладке, и в конце выбрать отличную от USRDVC библиотеку, если она у вас уже существует и не защищена от записи.
Мы же далее рассмотрим некий «симбиоз» ЖК модели на основе LCDMPX и схематичной модели контроллера для восполнения отсутствующих в библиотеках реальных индикаторов, например COGс контроллером ML 1001.
Рисунки 112, 113, 114.
Рисунки 115, 116, 117.
Рисунки 118, 119, 120.

Рисунки 121, 122, 123.
Рисунки 124, 125, 126.

Миниатюры:
Нажмите на изображение для увеличения
Название: Pic_112.gif
Просмотров: 509
Размер:	47.6 Кб
ID:	22847   Нажмите на изображение для увеличения
Название: Pic_113.gif
Просмотров: 279
Размер:	53.9 Кб
ID:	22848   Нажмите на изображение для увеличения
Название: Pic_114.gif
Просмотров: 266
Размер:	15.2 Кб
ID:	22849  

Нажмите на изображение для увеличения
Название: Pic_115.gif
Просмотров: 318
Размер:	40.6 Кб
ID:	22850   Нажмите на изображение для увеличения
Название: Pic_116.gif
Просмотров: 282
Размер:	83.3 Кб
ID:	22852   Нажмите на изображение для увеличения
Название: Pic_117.gif
Просмотров: 265
Размер:	48.2 Кб
ID:	22853  

Нажмите на изображение для увеличения
Название: Pic_118.gif
Просмотров: 282
Размер:	71.3 Кб
ID:	22854   Нажмите на изображение для увеличения
Название: Pic_119.gif
Просмотров: 254
Размер:	21.8 Кб
ID:	22855   Нажмите на изображение для увеличения
Название: Pic_120.gif
Просмотров: 260
Размер:	66.0 Кб
ID:	22875  

Нажмите на изображение для увеличения
Название: Pic_121.gif
Просмотров: 261
Размер:	63.9 Кб
ID:	22876   Нажмите на изображение для увеличения
Название: Pic_122.gif
Просмотров: 258
Размер:	4.9 Кб
ID:	22877   Нажмите на изображение для увеличения
Название: Pic_123.gif
Просмотров: 266
Размер:	34.8 Кб
ID:	22878  

Нажмите на изображение для увеличения
Название: Pic_124.gif
Просмотров: 258
Размер:	23.3 Кб
ID:	22879   Нажмите на изображение для увеличения
Название: Pic_125.gif
Просмотров: 292
Размер:	20.3 Кб
ID:	22880   Нажмите на изображение для увеличения
Название: Pic_126.gif
Просмотров: 308
Размер:	52.4 Кб
ID:	22881  

Вложения:
Тип файла: rar 8_11.rar (334.4 Кб, 939 просмотров)

Последний раз редактировалось Halex07; 26.06.2011 в 13:22.
Halex07 вне форума  
Эти 9 пользователя(ей) сказали Спасибо Halex07 за это сообщение:
aleksa-yar (20.06.2011), bobby1968 (22.08.2011), bozhko (23.06.2011), kittec (20.06.2011), kuksin (20.06.2011), malyshevsergey (20.06.2011), parcshin (05.01.2012), Traan (16.09.2013), ДимаК (21.06.2011)
Непрочитано 20.06.2011, 12:44  
Halex07
Супер-модератор
 
Аватар для Halex07
 
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,508 раз(а) в 956 сообщении(ях)
Halex07 на пути к лучшему
По умолчанию Re: FAQ (ЧаВО) по PROTEUS для начинающих и не только

8.12. Реализация «составной» модели ЖК индикатора TIC5231 на основе схематичной модели COG драйвера ML1001 и модели индикатора на основе LCDMPX.DLL в Протеусе.

Возможность воспроизвести в Протеусе обычный сегментный ЖКИ – это конечно замечательно, если количество сегментов невелико, а как быть если мы имеем ЖКИ на 6 или 8 цифр. Занимать под управление таким ЖКИ несколько портов микроконтроллера – это расточительство. В то же время уже давно промышленно выпускаются драйверы для управления ЖКИ как в виде отдельных микросхем, так и интегрированные на стеклянную подложку самого индикатора. Именно последние и носят название – COG от английского Chip On Glass (микросхема на стекле). Характерным представителем таких драйверов является ML1001. На ее основе в свое время тайваньской фирмой Ampire была выпущена серия цифровых сегментных ЖК индикаторов TIC, которые еще до сих пор встречаются в продаже. Реализацию одного из них 6,5-разрядного TIC5231 мы рассмотрим ниже.
Эта модель была разработана около года назад по просьбе одного из участников форума. К сожалению, модели на основе LCDMPX поддерживают управление только от пинов COM и SEG, расположенных на основном листе проекта, и попытка присоединить к модели ЖКИ контроллер, схема которого реализована на дочернем листе не удалась. Именно поэтому родился такой симбиоз: «мухи отдельно – котлеты отдельно». Отдельно была сформирована модель ЖКИ со стандартными ножками COM и SEG и отдельно сделана схематичная модель COGконтроллера ML1001.
Сама модель индикатора (Рис. 127) никаких особенностей не имеет. Стандартный ЖКИ, имеющий один вывод COM и 40 выводов SEG.
Единственное, над чем пришлось потрудиться, это создать графические символы для самого левого «половинчатого» разряда (Рис. 128 ). В результате появились символы отдельно стоящего минуса, урезанного символа надчеркивания и полный знак единицы в виде одного символа, которые и составляют самое левое знакоместо индикатора TIC5231.
Первоначальный вариант графики имел полностью 41 вывод, но немного поразмыслив, я решил, что поскольку отдельно такой индикатор практической ценности не представляет, есть смысл оформить выводы сегментов шиной на 40 разрядов. Это позволяет более компактно располагать индикатор и присоединенный к нему контроллер в проекте.
Хочу также обратить внимание на несколько нестандартную нумерацию сегментов в данном индикаторе (Рис. 129).
Полный даташит находится во вложении, а из расположения сегментов на рисунке из него мы видим, что номер 1 принадлежит сегменту «b» самого правого разряда индикатора, номер 2 – сегменту «g», хотя для нас логичнее было бы, чтобы это были сегменты «a» и «b» соответственно. Об этом не стоит забывать, применяя реальный индикатор, иначе вместо цифр получите полную чехарду с сегментами. В остальном графическая модель особенностей не имеет, т.к. выводы нужны только для «внутреннего» соединения с контроллером, я дал им наименование SEG и нумерацию в соответствии с номерами сегментов реального индикатора. В окончательном варианте это просто 40-разрядная шина SEG[1..40].
Теперь рассмотрим сам драйвер ML1001 и реализацию модели для него. Во вложении имеется как оригинальный даташит от компании Minilogic Device Corporation, так и его перевод выполненный Игорем Данко. Сайт автора перевода на данный момент не работает, поэтому я принял решение включить всю документацию во вложение.
Блок-схема драйвера приведена на рисунке 130. Драйвер имеет в своем составе 40-разрядный сдвиговый регистр с последовательным вводом данных. Данные загружаются с входа DIN по тактовой частоте на входе DCLK. По сигналу на входе LOAD данные переносятся в 40-битный регистр-защелку, с выхода которого распределяются по сегментам индикатора с помощью дополнительных встроенных управляющих схем. С помощью выхода DOUT драйвера можно соединять последовательно, что дает возможность наращивать разрядность индикатора с кратностью 40. Конкретно для индикатора TIC5231 используется один чип, но учитывая, что модель ML1001 может использоваться и для индикаторов с большим количеством разрядов, есть смысл реализовать наличие этого вывода в модели. Кроме того, в реальном чипе имеются встроенный генератор и делитель частоты, но с точки зрения моделирования они нас мало интересуют. Если рассмотреть реальную реализацию в индикаторе (Рис. 131), то имеются только 7 внешних выводов, из которых мы еще не рассмотрели 3.
Ну, с выводами VDD и GND все ясно и без комментариев – это выводы питания, а вывод 7, обозначенный в даташите индикатора, как CHK – это фактически дубль вывода LOAD. Таким образом, для реализации модели нам нужны всего четыре «видимых» вывода: DIN, DCLK, LOAD и DOUT, ну и, конечно, выходная шина на 40 сегментов. В итоге, для начального тестового варианта графическая модель ML1001 имеет вид, представленный на рисунке 132.
Для тестирования лучше использовать вариант с выводами, а после убрать выводы выходов и заменить их шиной. Теперь перейдем к внутренней реализации модели ML1001, т.е. к тому «фаршу», из которого мы слепим нашу «котлету» на дочернем листе. Здесь тоже особых премудростей нет, на дочернем листе я разместил 4 стандартных примитива сдвиговых десятиразрядных регистров и 5 восьмиразрядных регистров-защелок. Фрагмент схемы с
дочернего листа приведен на рисунке 133.
Для того, чтобы согласовать по уровням сигналы с моделью ЖКИ выходы регистров-защелок инвертированы. С выхода QU четвертого регистра сдвига сигнал подается на ножку DOUT. После тестирования этого варианта с дочернего листа был сформирован файл ML1001.MDF. Он будет одинаковым как для графической модели с отдельными выводами на выходе, так и с 40-разрядной шиной.
Для того, чтобы использовать данные модели в своих проектах, поместите файл ML1001.MDF из любой папки вложения в папку MODELS установленного Протеуса, а для моделей индикатора TIC5231 и драйвера ML1001 из проекта TEST.DSN в папке ML1001_final_bus проведите Make Device от начала до конца с сохранением в нужной библиотеке. Мы же в следующем параграфе рассмотрим как «обмануть» Протеус, смоделировав ЖКИ с числом сегментов свыше 64.
Рисунки 127,128,129.
Рисунки 130,131,132.
Рисунок 133.


ВНИМАНИЕ!!! 21.05.2012 произведена замена вложения 8_12.rar с устранением ошибки в модели ML1001. Для выходных лэтчей модели включен режим EDGE. Данные на выходы ML1001 теперь попадают только по положительному фронту на входе LOAD модели.
Миниатюры:
Нажмите на изображение для увеличения
Название: Pic_127.gif
Просмотров: 300
Размер:	18.3 Кб
ID:	23093   Нажмите на изображение для увеличения
Название: Pic_128.gif
Просмотров: 246
Размер:	17.6 Кб
ID:	23094   Нажмите на изображение для увеличения
Название: Pic_129.gif
Просмотров: 243
Размер:	33.2 Кб
ID:	23095  

Нажмите на изображение для увеличения
Название: Pic_130.gif
Просмотров: 258
Размер:	50.4 Кб
ID:	23096   Нажмите на изображение для увеличения
Название: Pic_131.gif
Просмотров: 277
Размер:	38.3 Кб
ID:	23097   Нажмите на изображение для увеличения
Название: Pic_132.gif
Просмотров: 258
Размер:	23.0 Кб
ID:	23098  

Нажмите на изображение для увеличения
Название: Pic_133.gif
Просмотров: 345
Размер:	55.8 Кб
ID:	23099  
Вложения:
Тип файла: rar 8_12.rar (1.25 Мб, 709 просмотров)

Последний раз редактировалось Halex07; 21.05.2012 в 21:05.
Halex07 вне форума  
Эти 15 пользователя(ей) сказали Спасибо Halex07 за это сообщение:
120147 (22.06.2011), aleksa-yar (27.06.2011), bobby1968 (22.08.2011), engjohn (20.06.2011), grbizly (11.08.2011), haruta (22.06.2011), kittec (26.06.2011), malyshevsergey (26.06.2011), ReLe1 (14.08.2011), skver (30.06.2011), soundmix (21.06.2011), Traan (16.09.2013), vale1 (26.06.2011), WjaCHSL (28.06.2011), ДимаК (26.06.2011)
Непрочитано 26.06.2011, 13:05  
Halex07
Супер-модератор
 
Аватар для Halex07
 
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,508 раз(а) в 956 сообщении(ях)
Halex07 на пути к лучшему
По умолчанию Re: FAQ (ЧаВО) по PROTEUS для начинающих и не только

8.13. Модель ЖК индикатора TIC8148 (TIC55) на основе схематичной модели двойного драйвера ML1001 со встроенным генератором.

В качестве «подопытного» кролика для реализации модели с количеством сегментов более 64 я выбрал тоже достаточно распространенный индикатор TIC8148. У него есть брат-близнец – TIC55, так что модель можно смело использовать и для того и для другого индикатора. Данный индикатор представляет из себя 8 восьмерок с точками и спецсимволами в виде 8 галок в нижней строке. Таким образом, мы имеем в сумме 72 светящихся сегмента, что явно превышает возможности LCDMPX.DLL для одного общего входа COM. Даташит, как обычно, находится во вложении, а на рисунке 134 из этого даташита я выделил цветом значимые для нас места. Итак, нумерация цифр самого индикатора справа-налево, т.е. самая левая - цифра 8. Буквенное обозначение сегментов совпадает с общепринятым, но вот десятичная точка обозначена как P (по-видимому, от Point), а символом H обозначен дополнительный символ - галочка в нижней строке.
Вы, конечно, догадались, что 72 сегмента превышают не только возможности LCDMPX, но и возможности одного драйвера ML1001 (40 сегментов), поэтому в реальном индикаторе их 2, включенных последовательно, как рассматривалось выше. А вот если глянуть на таблицу распределения сегментов из того же даташита (Рис. 135), то тут опять начинается «китайская грамота». Немудрено, ведь на Тайване те же лица, только в профиль. Итак, согласно таблице, первому выходу S1 первого драйвера соответствует сегмент 8D – нижний горизонтальный самой левой цифры.
Соответственно по первому тактовому импульсу на входе DCLK мы заносим данные для него, далее согласно строкам таблицы, вплоть до 72-го тактового импульса, который соответствует десятичной точке самой правой цифры, т.е. №1. Об этом следует помнить при написании программ для управления данными индикаторами. Еще хочу обратить ваше внимание на то, что дополнительный символ галочки в этой последовательности предшествует символу десятичной точки данного знакоместа, т.е. перебираются все сегменты, затем галка и уже последней – десятичная точка. Это тоже накладывает некоторые особенности на написание программ. В частности, если даже мы не используем в своем девайсе символы нижних галок. Допустим, для хранения информации о знакоместе используется байтовая переменная: семь бит – сегменты и один бит – информация о точке. При последовательном выводе на индикатор нам придется перед выводом информации о десятичной точке вставлять «пустышку» для сегмента нижней галочки данного знакоместа. Так, что-то я отклонился от темы, это уже особенности программирования, а мы вернемся к нашей модели и начнем с графики.
В качестве символов сегментов я использовал все те же символы от «разобранного» VI-402-DP, но пришлось добавить символ нижней галочки. Кроме того, у нас в индикаторе теперь 8 цифр и для двух правых знакомест появились новые координаты – 4600,200 и 5300,200 (Рис. 136). Шаг по оси Х по-прежнему 700. Ну и еще небольшой «финт» с выводами. Сегменты я сразу же загнал в шину на 24 разряда S[1..24], а общих выводов сделал три COM1, COM2 и COM3, т.е. мы получим индикатор на 72 сегмента, но выводами COM надо управлять попеременно, а сегменты мультиплексировать. Собственно, для этого и существует LCDMPX.DLL.
Теперь небольшое лирическое отступление на тему – почему именно 3 вывода COM, ведь для 72 сегментов по логике достаточно было бы и двух. Я тоже первоначально надеялся, что хватит двух, но в ходе разработки модели выявился один неприятный момент LCDMPX.DLL. Если количество сегментов для одного вывода COM превышает 32, а этих выводов два или более, то при мультиплексировании начинает наблюдаться моргание всех сегментов, относящихся к выводам COM2, COM3 и т.д. И избавиться от этого эффекта всеми известными мне приемами так и не удалось. Так что на будущее примите совет, при моделировании ЖК индикаторов с одним общим выводом можно использовать до 64 сегментов, при моделировании с двумя и более общими выводами количество сегментов для одного общего вывода не должно превышать 32. Чтобы не быть голословным, я оставил во вложении первоначальный вариант с двумя COM в папке BAD_Model_Test. Просто запустите симуляцию и вы увидите, что правая часть сегментов индикатора (с 41-го по 72-й) вместо постоянного свечения мерцает. Поэтому в окончательном варианте я поставил 3 вывода COM, при этом количество сегментов для одного общего вывода получилось 72/3=24, отсюда и соответствующая шина S[1..24].
Теперь нам осталось Make Device нашу модель, как и ранее с основными свойствами, т.е. PRIMITIVE, MODDLLи TTRIGMIN и начинаем добавлять сегменты. Поскольку их тут достаточно много, лучше это делать через заранее подготовленный текстовый файл. В папке вложения 8148_graphic это файл segments_8148.txt. Поскольку у нас 72 светящихся элемента, получились 24 строки SEG, каждая из которых содержит записи для трех сегментов с разными координатами. Например, для SEG1, соответствующего в таблице сегментам S1 и S25 и S49, параметры будут выглядеть так:
{SEG1=(3,400,200),(2,1800,200),(5,3900,200)}
Добавив все сегменты, проверяем себя с помощью теста. Во вложении 8148_graphic\Full_Test_Graphic.DSN с помощью вспомогательной схемы этот процесс слегка «автоматизирован», чтобы можно было отследить последовательность зажигания сегментов в соответствии с таблицей. На этом этап подготовки графической модели индикатора окончен.
Теперь нам надо заняться моделью драйвера, имитирующего 2 последовательно соединенные ML1001. Для компоновки внутренней схемы двух-драйверного управления (назовем модель заранее 2xML1001) я воспользуюсь модифицированными примитивами сдвиговых регистров и защелок. Мы уже ранее проводили такие вариации при моделировании АЦП (п.6.16-6.18). Здесь, существует еще более жесткое ограничение в 32 разряда. Но нам это не помеха, мне требуются примитивы на 24 разряда. Для большей компактности схемы дочернего листа я решил «ужать» входы/выходы разрядов в шины. В результате появились на свет следующие два примитива (Рис. 137).
Выглядят они более компактно, и схема дочернего листа будет иметь более опрятный вид. Надеюсь, что и полная картинка с дочернего листа в результате поместится непосредственно здесь. Теперь создаем графику самого сдвоенного драйвера. Тут тоже все просто. К изображению ML1001 из предыдущего варианта у нас добавились только три управляющих выхода для выводов COM1 и COM2 дисплея (Рис. 138 ).
Как обычно, присоединяем к нашей модели дочерний лист и с помощью вновь созданных примитивов формируем схему двух, соединенных последовательно драйверов (Рис 139).Эта структура отдельно приведена в папке вложения 2xML1001\Structure проект Int_Structure.DSN.
Пожалуй, некоторые нюансы этой схемы заслуживают дополнительных пояснений. На регистрах сдвига U1, U3, U5 организован последовательный сдвиговый регистр на 72 разряда. Чтобы не городить огород с завешиванием управляющих входов на шины с разными логическими уровнями, в свойствах входы UP и OE инвертированы – INVERT=UP,OE. Такой прием позволяет завешиванием всех управляющих входов примитива на землю сделать при этом инвертированные входы вечно активными. Аналогично в буферных регистрах защелках U2, U4, U6 я поступил с входом EN. Так как выходные шины регистров сдвига соединены с входными защелок непосредственно, навешивание меток (лейблов) на них не требуется. Протеус и так поймет и соединит их «один в один», т.е. Q0-D0, Q1-D1, Q3-D3 и т.д. Аналогично для выходов защелок и шинного терминала S[1..24] образуются пары Q0-S1, Q1-S2, но здесь есть одна хитрость, вернее две. Выходы защелок и шинный терминал должны иметь одинаковую разрядность, тогда образуются такие «сдвинутые» по нумерации пары. А еще выходы U2, U4, U6 могут иметь третье (высокоимпедансное) состояние. Этим я воспользовался для коммутации выходов от трех регистров в общую шину. Напомню, что перевод в третье состояние осуществляется по входу OE (OutputEnable). Вот его я и задействовал, чтобы на 24 выхода S1…S24 подавать различные сигналы в зависимости от того, какой из выходов COM активен в данный момент. Еще нам потребуется какой-нибудь встроенный управляющий генератор. С этим тоже не проблема. Вспомните, как мы поступили при моделировании К176ИЕ12. Применяем тот же прием, ставим внутренний цифровой генератор CLOCK, а его параметры пропишем так, чтобы можно было задавать в свойствах модели. По умолчанию они прописаны в скрипте *DEFINE и равны 60 Герц. Этот генератор управляет трехразрядным кольцевым сдвиговым регистром на D-триггерах (U7, U8, U9), первый из них предустановлен в 1 (INIT=1). Этот регистр формирует выходные сигналы COM, а попутно и коммутирует буферные защелки. Тут я не стал мудрить и поставил обычные примитивы триггеров. Ну и еще пару слов о свойствах регистров защелок. Так как нам необходимо иметь активные нули для зажигания сегментов на выходах модели, инвертированы целиком входные шины защелок, т.е. в их свойствах стоит INVERT=EN,D[0..23] (про EN см. выше). В этом варианте можно было инвертировать только входы, т.к. у выходов используется третье состояние и если им задать INVERT, мы его потеряем. Чтобы исключить ложное «подмаргивание» сегментов в момент старта симуляции для защелок применена стартовая предустановка всех разрядов в единицы INIT=0xFFFFFF. Вот и все особенности внутренней структуры сдвоенного драйвера.
После тестирования (во вложении папка With_Child_Sheet) с дочернего листа того проекта компилируем файл 2xML1001.MDF. Тест окончательного варианта драйвера и готовый MDF лежат в папке With_MDF_File. Напомню, что в завершение работы над моделью драйвера необходимо прогнать Make Device для него еще раз и в свойствах на третьей вкладке прописать следующие:
MODFILE=2xML1001.MDF
СLOCK=60
Во вложении это уже сделано. Свойство СLOCK необходимо для того, чтобы можно было в EditProperties сменить частоту внутреннего генератора, поэтому на третьей вкладке Make Device везде задаем ему Normal, ставим ограничение Positive, None-Zero, ну а в Description описываем его как-нибудь попонятнее, я, например, назвал Internal Clock Generator.
На этом я хочу завершить «показательные выступления» с LCDMPX.DLL. Охватить весь мировой ассортимент всевозможных LCD цифровых индикаторов, как вы понимаете, невозможно. Надеюсь, что приведенные примеры позволят вам при необходимости самостоятельно разработать требуемые для конкретного случая модели сегментных или мнемонических ЖК дисплеев. Первоначально я планировал сделать еще материал по HoltekHT1611, но, учитывая, что этот «раритет» практически исчез с рынка и если завалялся у кого, то только потому, что очень неудобен для использования в качестве индикатора – отсутствуют десятичные точки, я решил эту модель не делать. Если уж кому невмоготу, то по этой ссылке:
https://kazus.ru/forums/showpost.php?p=182152&postcount=518
лежит его модель от Soir. В свете новых знаний можете усовершенствовать этот вариант самостоятельно. Мы же переходим к моделям LCD дисплеев на основе контроллера HD44780 в Протеусе.
Рисунки 134. 135, 136.
Рисунки 137, 138, 139.

Миниатюры:
Нажмите на изображение для увеличения
Название: Pic_134.gif
Просмотров: 273
Размер:	25.2 Кб
ID:	23375   Нажмите на изображение для увеличения
Название: Pic_135.gif
Просмотров: 290
Размер:	43.3 Кб
ID:	23376   Нажмите на изображение для увеличения
Название: Pic_136.gif
Просмотров: 260
Размер:	26.5 Кб
ID:	23377  

Нажмите на изображение для увеличения
Название: Pic_137.gif
Просмотров: 257
Размер:	6.4 Кб
ID:	23378   Нажмите на изображение для увеличения
Название: Pic_138.gif
Просмотров: 246
Размер:	4.2 Кб
ID:	23379   Нажмите на изображение для увеличения
Название: Pic_139.gif
Просмотров: 436
Размер:	65.3 Кб
ID:	23380  

Вложения:
Тип файла: rar 8_13.rar (679.5 Кб, 1006 просмотров)

Последний раз редактировалось Halex07; 10.08.2011 в 22:38.
Halex07 вне форума  
Эти 12 пользователя(ей) сказали Спасибо Halex07 за это сообщение:
aleksa-yar (03.07.2011), bobby1968 (22.08.2011), danilych2 (11.06.2014), grbizly (04.07.2011), kittec (03.07.2011), ReLe1 (14.08.2011), Traan (16.09.2013), trew2 (01.07.2011), ДимаК (18.08.2011)
Непрочитано 03.07.2011, 10:40  
Halex07
Супер-модератор
 
Аватар для Halex07
 
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,508 раз(а) в 956 сообщении(ях)
Halex07 на пути к лучшему
По умолчанию Re: FAQ (ЧаВО) по PROTEUS для начинающих и не только

8.14. LCDALFA.DLL – основа построения знакосинтезирующих дисплеев, базирующихся на контроллерах HD44780 и его клонах.

Пожалуй, дисплеи на базе HD44780 – это наиболее востребованная и популярная у начинающих пользователей Протеуса линейка моделей ЖК индикации. На данный момент индикаторы этого типа выпускаются очень многими фирмами-производителями, как в «ближнем» зарубежье – КНР, так и в Европе, Америке и даже в России – МЭЛТ, а цены на наиболее простые, например, 8х2 без подсветки сопоставимы с ценами на сами микроконтроллеры, к которым они подключаются. Поэтому я решил уделить особенностям моделей на основе LCDALFA.DLL немного внимания, чтобы разобрать наиболее часто возникающие проблемы с симуляцией этих моделей, особенно у начинающих.
Итак, все модели, базирующиеся на LCDALFA.DLL, расположены в двух библиотеках ISIS, а именно: Optoelectronics\AlphanumericLCDs – типовые модели на базе HD44780 и Optoelectronics\SerialLCDs – модели с последовательным вводом данных по одному проводу. Ну, что касается последних, то в России они не продаются, хотя любители экзотики могут заказать их через зарубежные Интернет-магазины. Достаточно набрать в любом поисковике фразу Serial LCD Character Display и вы получите массу ссылок на описание и предложения этих дисплеев, поскольку они достаточно популярны у западных разработчиков. Я же приведу здесь только одну ссылку: www.milinst.co.uk – сайт фирмы Milford, модели дисплеев которой и представлены в библиотеке SerialLCDs. А вот здесь: http://www.seetron.com/bpk000.html любители «экзотического секса» могут найти описание той самой дополнительно устанавливаемой платы BPK (от английского Backpack), которая вешается сзади на стандартный дисплей, чтобы он превратился в сериальный. И как это многочисленные наши «братья наши по разуму» до сих пор не содрали сей девайс, и не заполонили им наш рынок, особенно в свете развития проекта Arduino, где эти дисплеи очень популярны у западных разработчиков, ума не приложу. Но хватит о грустном, вернемся к стандартным дисплеям на контроллере HD44780, которыми они нас снабжают в изрядном количестве. Наиболее популярная модель LM016L (2 строки по 16 символов) и окно ее свойств приведены на рисунке 140.
Для начала немного о самой модели. Сразу же слегка «охолоним» начинающих, ножки VSS, VDD и VEE в данной модели приделаны просто, как недостающая часть табуретки. Модель прекрасно работает, даже если они просто висят в воздухе. Нет смысла, если конечно вы просто моделируете, а не разрабатываете печатную плату, в навешивании на них терминалов питания, каких либо батареек, выключателей и уж тем более регулирующих контрастность потенциометров. Кроме лишних «тормозов» при симуляции вы такими действиями ничего не получите, тем более, что регулировка контрастности в модели ISISпросто не реализована, ведь это чисто цифровая программная модель. Выводы RS (RegisterSelection), RW (Read/Write) и E (Enable), а также выводы 8-ми разрядной шины D0…D7 в модели реализованы в полном объеме и используются при симуляции по прямому назначению в соответствии с даташитом.
Теперь заглянем в окно свойств модели на рисунке 140 справа. Здесь я хотел бы остановиться на двух моментах. В Advanced Properties по умолчанию фигурирует тактовая частота контроллера HD44780 Clock Frequency=250kHz. Это стандартная частота для конкретного контроллера от Hitachi, под которую и заданы все временные задержки модели в ISIS. В данном случае речь идет о внешней тактовой частоте обмена с контроллером, обозначенной в даташите как External clock frequency. Однако не стоит забывать о том, какой именно контроллер стоит в том индикаторе, который вы собираетесь использовать. Так, в частности, не менее популярный клон KS066U от Samsung имеет стандартную ExternalClock=270kHz. Соответственно и выдержки времени при инициализации у него можно сделать несколько меньшими, хотя он и работает со стандартными для HD44780. Даташиты на наиболее распространенные HD44780, KS066U и KБ1013ВГ6 есть во вложении. Последний, выпускаемый Зеленоградским НПО «Ангстрем», используется в российских знакосинтезирующих ЖКИ МЭЛТ. Теперь поясню, почему я остановился подробно на этом моменте. Дело в том, что в моделях на основе LCDALFA.DLL заложен внутренний дебаггер (Рис. 141). В случае значительного отклонения во времени управляющих сигналов или отсутствия требуемой команды в программе инициализации дисплея в логе может появиться «горчичник», предупреждающий об этом, но далеко не всегда. Если с компиляторами с языков высокого уровня, где обычно присутствуют стандартные библиотеки для HD44780, такое случается очень редко, то использование в собственных разработках чужих ассемблерных программ инициализации ЖКИ, а уж тем более готовых HEXпрошивок может надолго загнать вас в тупиковое положение. Причем, это совсем не значит, что прошивки не рабочие. Реальные дисплеи на основе данных контроллеров допускают некоторую вольность в обращении к ним. В результате программа, которая многократно повторялась в железе, работает в симуляторе криво, а иногда и вообще не работает. Но, сами понимаете, что написать такую математическую модель, которая будет автоматически предусматривать, что некто Вася или Петя решил подсократить выдержку при инициализации со стандартных для HD44780 более чем 40ms до 12ms, потому что у него под рукой был русский МЭЛТ-овский дисплей практически невозможно, а уж тем более, если часть команд инициализации вообще отсутствует. К счастью, такие опусы легко распознаются в ISIS, даже при отсутствии исходника программы. До сих пор я скромно умалчивал о возможностях встроенного дебагера ISIS, но настала пора напомнить о нем, тем более, что именно в случае с ЖКИ может оказать существенную помощь.
Итак, сегодня в качестве «подопытного кролика» выступает разработка моего земляка А. Шарыпова почти десятилетней давности, которая, судя по многочисленным обсуждениям на различных форумах, до сей поры не потеряла своей актуальности. Это опять частотомер и опять на PIC16F84A. Статья «Экономичный многофункциональный частотомер» была опубликована в октябрьском номере журнала «Радио» за 2002 год. Чтобы не искать, во вложении имеется DJVU вариант этой статьи. Прошивки с исходниками имеются на FTP сервере журнала ftp://ftp.radio.ru/pub/2002/10/sharyp/ , да и так их по сайтам разложено в изрядном количестве. Я буду рассматривать англоязычный вариант прошивки, но и в русском те же «грабли». Собираем упрощенный вариант схемы и запускаем симуляцию с англоязычной прошивкой counter.hex (Рис. 142). Для сравнения в левом верхнем углу приведен вид дисплея из статьи. Как видим, вроде и работает, но нижняя строка полностью отсутствует. Причем, это наблюдается только в Протеусе, в железе вторая строка выводится. Попробуем разобраться – в чем же тут дело?
Конечно, можно загнать наши сигналы обмена с контроллером дисплея в цифровой график и попытаться проанализировать по нему. Но есть более простой и наглядный метод. Переводим тот TRACE, что изображен на рисунке 141 из режима Warning Only (это те самые «горчичники»-предупреждения) в режим в режим Debug (отладка). Самый быстрый способ сделать это – щелкнуть правой кнопкой мышки по дисплею, выбрать Configure Diagnostics (фиолетовый паук) и перевести флажок для дисплея в нужное положение (Рис. 143).
После этого снова запускаем симуляцию и открываем окно Simulation Log щелчком левой кнопки мышки справа от кнопок управления симуляцией. Результат приведен на рисунке 144. Те команды, которые относятся непосредственно к инициализации дисплея, обведены рамкой. Не правда ли, скромный список по сравнению с тем, что приведен в даташитах на контроллеры для четырехбитного интерфейса. И как у нас может вывестись вторая строка, если двухстрочный режим даже не задан (lines=1). Самое интересное, что в железе это работает!!! Исправно выводится текст во вторую строку. Вот такой «запас прочности» у контроллера HD44780. Только вот вопрос – стоит ли всегда надеяться на этот запас по любимому русскому принципу – «авось пронесет»? Вот и получается, что у автора работает, еще у 11 человек тоже, а тот пресловутый тринадцатый, у которого дисплей из «темного китайского подвала» остается в дураках.
Ну и законный вопрос – а можно ли в Протеусе увидеть нижнюю строку этого девайса? Конечно можно, но без кардинального вмешательства в программу – никак. На этот раз имеется исходник, будем надеяться, что я еще не совсем обленился и забыл ассемблер PIC. Мы не будем затрагивать основную часть программы, достаточно подкорректировать начальную инициализацию, а она выполняется единожды при подаче питания на девайс. Для начала заглянем в даташит. Я использовал русский от Ангстремовского контроллера, а красным цветом указал задержки из фирменного HD44780 (Рис. 145).
Для нас значимыми в этой блок-схеме инициализации являются три задержки в 15 и 5 мс и в 100мкс. При подаче команд в 8-ми разрядном режиме. Напомню также, что команда передается при нулевом состоянии RS(RW у нас и так «заземлен») и фиксируется положительным стробом на линии Eконтроллера ЖКИ. Программы инициализации для различных контроллеров несколько отличаются, но, поскольку модель в Протеусе сделана именно под HD44780, я буду руководствоваться его особенностями. Итак, покопавшись в ассемблерном листинге программы, и покрутив исходный вариант частотомера в ISIS, я обнаружил, что интервалы между стробами передачи команд и так достаточно большие около 90 мкс, что почти втрое превышает требуемые по даташиту. Начальную задержку в 15 мс я не стал делать, но желающие могут сформировать ее по аналогии с 5 мс из пачки следующих друг за другом Pausem. Для задержки в 5 мс используется существующая в программе Pausem. В авторском варианте она используется для формирования дополнительной задержки, необходимой, например, при подаче команды Cursor Home контроллеру ЖКИ. По даташиту она должна составлять 1,52 мс (в программе реально чуть больше – около 1,8 мс). Таким образом, три подряд вызова подпрограммы этой задержки дали мне требуемую около 5,4 мс. Несколько сложнее увеличить время между второй и третьей командой 8-ми разрядного интерфейса. В авторской программе имеется подпрограмма посылки строб-импульса по линии E - Enbl. Саму подпрограмму я использовал для передачи старшего нибла команд 8-ми разрядного интерфейса, а часть ее, поставив дополнительную метку Pause25, как подпрограмму задержки. В результате перед авторской инициализацией дисплея добавлен следующий ассемблерный код:
Код:
; **************** ДОБАВЛЕННЫЙ КОД ИНИЦИАЛИЗАЦИИ ЖКИ            ****************
    movlw   0x30         ; Первая команда установки 8-ми битного интерфейса
    movwf           PortB        ; загружаем команду в порт B
    call  Enbl         ; Отсылаем старший нибл в ЖКИ
    call  Pausem       ; Три задержки Pausem в сумме ~5,5 мсек
    call  Pausem
    call  Pausem
; Порт B уже содержит команду 0x30 и не менялся
    call  Enbl         ; Вторая установка 8-ми битного интерфейса
    call  Pause25      ; В дополнительную задержку, чтобы  было ›100 мксек
; Порт B по прежнему содержит команду 0x30 и не менялся
    call  Enbl         ; Третья установка 8-ми битного интерфейса
    movlw   0x20         ; Первая команда установки 4-ми битного интерфейса
    movwf           PortB        ; загружаем команду в порт B
    call  Enbl         ; Отсылаем старший нибл в ЖКИ
; Теперь мы уже в четырехбитном режиме и посылаем следующие команды
; через подпрограмму LEDcom двумя ниблами
    movlw   0x28       ; Установки 4 битн. интерфейс 2 строки 5х7 точек
    call  LEDcom

Надеюсь, тем, кто занимается программированием PIC-контроллеров на ассемблере, все в нем будет понятно из комментариев. Я постарался внести минимальные изменения в авторский вариант, только с целью добиться полной работоспособности частотомера в ISIS. Конечно, если посидеть подольше над программой можно было сделать и поопрятней и покороче, но я не стал с этим заморачиваться, конечный результат достигнут (Рис. 146).
Как видим, теперь начальная инициализация в логе стала выглядеть более похожей на даташит, а на индикаторе стала отображаться «утерянная» строка. Примеры данного частотомера лежат в папке вложения Sharypov соответственно исходный вариант – папка Eng_var и откорректированный – Eng_var_correct. О том как использовать русскоязычный вариант в Протеусе чуть ниже.
В ходе поисков в интернете примеров для данной темы я натолкнулся на сайте Радиокота еще на один частотомер с ЖКИ на контроллере PIC16F628A. Поскольку там проблема индикации в Протеусе несколько другого плана, давайте рассмотрим и этот вариант.
Вот ссылка на саму тему у Кота: http://www.radiokot.ru/circuit/digital/measure/19/ , а здесь: http://www.radiokot.ru/forum/viewtopic.php?t=12555 страницы форума, посвященные обсуждению этой темы. Естественно, это все первоисточники, но данная схема уже благополучно расползлась по всемирной паутине, и вы можете натолкнуться на нее и в других местах. Автор данного девайса тоже не особенно заморачивался, а просто переделал импортную программу, сделанную под более крутой контроллер на дешевый PIC16F628A. И, конечно же он, и многие другие «коты», самостоятельно попробовали симуляцию программы в Протеусе и тоже поймались на простейшей ошибке. Программа сделана изначально под однострочный LCD 16 символов. Если попытаться воспроизвести ее на однострочной модели LCD в ISIS, то половина информации будет отсутствовать, а на модели 16x2 эта информация появиться во второй строке. Тут все дело в некоторой путанице с адресацией для модели 16x1. Этот вариант дисплея нечто вроде «Оки» в линейке АвтоВАЗа, которую «любовно» именовали выкидышем. Дело в том, что это единственный производимый ЖКИ, у которого адресация в строке сделана не подряд, т.е. с первой по восьмую позицию используются адреса DD RAM 00-07, а с девятой по шестнадцатую – 40-47. Если посмотреть на адресацию двухстрочных ЖКИ, то последние совпадают с первыми восьмью второй строки. Отсюда и появляется информация на двухстрочном дисплее. Но здесь уже промашка допущена непосредственно в модели Протеуса и правится она в течение нескольких секунд. Кстати, на адресации в моделях ЖКИ на основе LCDALFA.DLL следует остановиться несколько подробнее, чтобы в дальнейшем она вас не смущала. Так, например, в даташитах популярных двухстрочных дисплеев 16x2 указаны адреса для первой строки – 00-0F, для второй – 40-4F. Для соответствующей модели LM016L в свойствах прописаны адреса 80-8F и С0-CF соответственно (Рис. 147). В чем тут дело? Если внимательно посмотреть в даташит контроллера HD44780, то можно заметить, что установка старшего бита в единицу является признаком обращения к DDRAM, т.е. области памяти знакомест контроллера. Отнимите его из указанных для модели LM016Lадресов и получится стандартная адресация. Теперь вернемся к однострочному ЖКИ на 16 символов, т.е. модели LM020L. В его свойствах для строки Row 1 прописаны адреса 80-8F, ну или в переводе на обычные – 00-0F (подряд!!!). Это уже явный ляпсус Лабцентра, но помочь этому несложно, если заглянуть в Help модели. А там аглицким языком написано, что если адреса в строке идут не подряд, то они записываются диапазонами через пробел. Берем на вооружение данный факт и исправляем в свойствах LM020Lследующим образом: 80-87 С0-С7. Будьте внимательны! Если указанные диапазоны не совпадут с общим количеством символов в строке, ISIS при запуске симуляции пошлет вас в «эротическое путешествие» фразой красного цвета. В папке RadioKot вложения пример частотомера с однострочным ЖКИ 16х1 и реальной индикацией частоты.
Теперь нам осталось разобраться только с модификацией LCDALFA под кириллицу. Изначально в библиотеке заложена таблица с европейским вариантом знакогенератора, а там, как видно из рисунка 147, русский алфавит отсутствует (эта часть таблицы выделена желтым).
Таблица знакогенератора хранится в файле LCDALFA.DLL в виде точечного BMPрисунка размером 104x176 точек и извлечь ее оттуда и заменить на другую соответствующего размера можно любым редактором ресурсов (Restorator, PEExplorer, ResHacker и т.п.), а отредактировать даже в родном виндозном Paint. Но удобнее это сделать с помощью специализированной утилиты charset.exe, написанной нашим соотечественником, который присутствует на форуме под ником Тень и в данное время является штатным сотрудником Labcenter Electronics. Утилита довольно компактная и находится во вложении, а ее окошко приведено на рисунке 148. Пользоваться ей очень просто, с помощью кнопки Open LCDALFA.DLL (1) открываете исходную DLL, если есть необходимость – сохраняете исходный рисунок BMPcпомощью кнопки Save .BMP (4). Затем подгружаете картинку с русским шрифтом с помощью кнопки Open .BMP (3) и сохраняете русифицированную DLL с помощью кнопки Save LCDALFA.DLL (2).
На рисунке в окне программы уже загруженная таблица с русскими символами. Кроме того, можно модифицировать любой символ по своему усмотрению, выбрав его с помощью курсора (показан в левом верхнем углу таблицы). Курсор перемещается с помощью кнопок со стрелками, а выбранный символ отображается в поле модификации. Закрашенные пиксели в нем выглядят утопленными. На днях я проверил успешную работу утилиты на версии Протеуса 7.8. Единственный нюанс, под Windows 7 мне пришлось запустить ее от имени администратора. Ну и еще одна рекомендация – лучше проделать эту операцию в отдельной папке, а модифицированную DLLсохранить в папке MODELS под измененным именем, например, LCDALFARUS.DLL. Тогда можно использовать и тот и другой варианты, либо просто изменив MODDLLв свойствах модели LCDтекущего проекта в режиме Editas text, либо продублировав все имеющиеся модели на базе HD44780 с добавкой RUSна конце и заменив для этих вариантов значение MODDLL на LCDALFARUS.DLL. В последнем случае, уже добавляя модель LCDв проект, выбираем нужный, например, LM016 – западный, LM016RUS - с кириллицей. Готовый вариант LCDALFARUS.DLL для версии 7.8 во вложении в примере Sharypov\Rus_var_correct.
На чем еще хотелось бы заострить ваше внимание. Некоторых смущает, что отсутствуют «хвосты» у символов русского шрифта. Например, если вы будете выводить на дисплей слово «Щука», то увидите «Шука». Тут просто уместно вспомнить, что стандартный вывод для дисплея по умолчанию 5х8 точек (при инициализации в 4-х битном режиме это команда 0x28). Переведите дисплей при инициализации в режим 5х10 (заменив командой 0x2C) и «хвост отрастет».
Из замеченных «глюков» для моделей на основе LCDALFA – это неадекватный по сравнению с даташитом сдвиг экрана аппаратной командой. Так что если планируете использовать дисплей для организации бегущей строки, то лучше это сделать программно или отлаживать сразу в железе, чтоб не напрягать себе мозги неожиданными «заморочками».
Ну, и напоследок немного о модификации. Нет, например, в библиотеках самой дешевой модели 2х8, а хочется иметь. Все просто, разбиваем исходную LM016. Для графики есть одна особенность – маркер ORIGIN находится в центре, поэтому сдвигать (подрезать) экран и «базу» надо будет с двух сторон (Рис. 149).
Как ставить «фальшивку» маркера, вы уже знаете из предыдущего материала, и нетрудно определить, что ширина внутреннего зеленого экрана составляет 1800 пикселей (16 символов плюс два зазора по краям шириною как символ). Дальнейшее – арифметика для первоклассника. Изменить ширину придется как для основного изображения модели, так и символов потушенного и светящегося экрана, задав им соответствующие имена. Ну а при последующем Make Device необходимо на первой вкладке сделать ссылку на эти имена символов в строке Symbol Name Stem, а на третьей подкорректировать значение NUMCOLS (количество колонок) с 16 на 8 и задать новые конечные адреса для первой ROW1 и второй ROW2 строк. Кстати, можно и вообще не править графику, а поправить только адреса и количество колонок, ну и, конечно же, имя модели, но при этом пустые зазоры по краям экрана у вас будут широкими. Мы уже так часто проделывали подобные операции, что я, пожалуй, предоставлю вам самостоятельно поэкспериментировать с данными моделями, чтобы не надоедать лишними нудными подробностями.
Последний комментарий касается четырехстрочных моделей 4х40, которые содержат два контроллера HD44780. В данном случае создается дополнительно Schematic модель.. На дочернем листе модели, с которого компилируется MDF, формируется схема из двух контроллеров, у которых в свойствах присваиваются разные Controller ID (Рис. 150). Все выводы, кроме E объединяются, а их терминалам присваиваются имена E1 и E2. Модели контроллеров находятся в библиотеке LCD Controllers. Соответственно и модель получается смешанная. Хотя она и показывается в библиотеке как Schematic, потому что имеет MDF и в свойствах ссылку на него, но на деле все равно это программная VSM модель, потому что симуляция основана на LCDALFA.DLL.
Дальше пойдет более интересный материал по моделям графических дисплеев, вот там и остановимся на тонкостях, тем более, что приемы редактирования будут похожими, а материал более актуален. Символьные же модели постепенно сдают позиции более популярным графическим ЖК индикаторам.
Рисунки 140,141,142.
Рисункки 143, 144,145.
Рисунки 146,147,148.
Рисунки 149, 150.


Миниатюры:
Нажмите на изображение для увеличения
Название: Pic_140.gif
Просмотров: 675
Размер:	47.4 Кб
ID:	24805   Нажмите на изображение для увеличения
Название: Pic_141.gif
Просмотров: 632
Размер:	28.8 Кб
ID:	24806   Нажмите на изображение для увеличения
Название: Pic_142.gif
Просмотров: 672
Размер:	32.1 Кб
ID:	24807  

Нажмите на изображение для увеличения
Название: Pic_143.gif
Просмотров: 409
Размер:	16.8 Кб
ID:	24808   Нажмите на изображение для увеличения
Название: Pic_144.gif
Просмотров: 483
Размер:	28.3 Кб
ID:	24809   Нажмите на изображение для увеличения
Название: Pic_145.gif
Просмотров: 562
Размер:	53.2 Кб
ID:	24810  

Нажмите на изображение для увеличения
Название: Pic_146.gif
Просмотров: 500
Размер:	19.2 Кб
ID:	24811   Нажмите на изображение для увеличения
Название: Pic_147.gif
Просмотров: 475
Размер:	88.9 Кб
ID:	24812   Нажмите на изображение для увеличения
Название: Pic_148.gif
Просмотров: 393
Размер:	12.3 Кб
ID:	24813  

Нажмите на изображение для увеличения
Название: Pic_149.gif
Просмотров: 497
Размер:	14.7 Кб
ID:	24814   Нажмите на изображение для увеличения
Название: Pic_150.gif
Просмотров: 344
Размер:	12.6 Кб
ID:	24815  
Вложения:
Тип файла: rar 8_14.rar (3.09 Мб, 1309 просмотров)

Последний раз редактировалось Halex07; 10.08.2011 в 22:56.
Halex07 вне форума  
Эти 12 пользователя(ей) сказали Спасибо Halex07 за это сообщение:
aleksa-yar (17.08.2011), danilych2 (11.06.2014), Hostvind (29.01.2012), KawaBaz (04.01.2017), kuksin (19.10.2011), malyshevsergey (11.08.2011), parcshin (05.01.2012), ReLe1 (14.08.2011), skver (27.09.2011), Traan (16.09.2013), ДимаК (18.08.2011)
Непрочитано 10.08.2011, 22:49  
Halex07
Супер-модератор
 
Аватар для Halex07
 
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,508 раз(а) в 956 сообщении(ях)
Halex07 на пути к лучшему
По умолчанию Re: FAQ (ЧаВО) по PROTEUS для начинающих и не только

8.15. Обзор моделей контроллеров графических LCD, входящих в LCDPIXEL.DLL и моделей графических дисплеев на их основе. Особенности графических моделей и некоторые специфические параметры общие для всех моделей графических LCD.

Аналогично тому, как LCDALFA используется для создания знакосинтезирующих дисплеев на основе HD4470, библиотека LCDPIXEL.DLL служит основой для всех графических дисплеев, которые представлены в ISIS. Однако она объединяет функции не одного конкретного контроллера, а сразу нескольких контроллеров LCD с восьмиразрядной шиной данных. Рассмотрим кратко, какие контроллеры реализуются с помощью этой библиотеки.
T6963C(Toshiba) – один из самых «древних» контроллеров LCD, с помощью которого реализуются индикаторы с разрешением до 240x128 пикселей. Хотя данному контроллеру уже полтора десятка лет, дисплеи на его основе до сих пор выпускаются некоторыми производителями. В частности, на клоне этого контроллера RA6993 тайваньской фирмы RAiO TECHNOLOGY INC www.raio.com.tw реализован ряд популярных у нас графических индикаторов фирмы Winstar http://www.winstar.com.tw/products_detail.php?CID=18&lang=ru серий WGи WB. Модель T6963C в ISISне представлена в графическом виде в библиотеке Optoelectronics/LCDControllers, так что о наименовании выводов и параметрах, задаваемых этой модели, можно судить только по представленным в библиотеках реальным моделям. На основе модели этого контроллера выполнены все модели Densitron-овских индикаторов, начинающиеся с LM в библиотеке Graphical LCDs. Для них доступно скачивание англоязычных даташитов при нажатии кнопки Data в окне Edit Properties, поэтому подробно останавливаться на этих моделях я не стану. Английские даташит на T6963C и Aplication Note по использованию во вложении в папке Даташиты, а тех кто «хромает» в английском отправлю на http://www.gaw.ru/html.cgi/txt/lcd/chips/t6963/ , где в онлайн представлен русcкий перевод.
KS0108 (Samsung) – это тоже контроллер «долгожитель», в частности, документация самого Самсунга датируется 1997 годом. Несмотря на это, дисплеи с использованием данного драйвера выпускаются и в настоящее время, в том числе и Российской компанией МЭЛТ http://www.melt.com.ru/ , которая для этих дисплеев использует аналог KS0108 производства ОАО «АНГСТРЕМ» – К145ВГ10. БИС драйвера LCD KS0108 имеет встроенное ОЗУ матрицы и 64-канальный выход, который обычно используется для управления столбцами матрицы. Совместно с KS0108, как правило, применяется дополнительно драйвер строк KS0107, который может управлять 64-мя строками матрицы. Таким образом, одна такая «сладкая парочка» способна обслуживать матрицу 64х64 точки, но чаще встречается комбинация из двух спаренных KS0108 с разделенными выводами CS, которая применяется в дисплеях 128х64 пикселя. Это прародитель многочисленных клонов индикатор AG-12864A от AMPIRE, модель которого представлена в ISISи называется AMPIRE128X64. Аналогичная модель, имеющая не инвертированные входы CS, представлена как LGM12641BS1R. Обе эти модели в библиотеках Протеуса отображаются какSchematic, поскольку для них имеется скомпилированный KS0108X2.MDF в котором и выполнено объединение двух контроллеров KS0108. Файл можно извлечь из DISPLAY.LML с помощью утилиты GETMDF.EXE. Об этом я рассказывал ранее. Модели контроллера KS0108 и тех, о которых речь пойдет ниже,для создания подсхем имеются в библиотеке Optoelectronics/LCDControllers. Англоязычный даташит на контроллер KS0108 есть во вложении, а здесь: http://www.gaw.ru/html.cgi/txt/lcd/chips/ks0108b/index.htm находится русское описание в онлайн.
SED1520 (SeikoEpson) – это японское творение тоже благополучно здравствует с 1998 года. Один драйвер SED1520 способен управлять матрицей 61х16 пикселей или двухстрочным знакосинтезирующим дисплеем формата 12х2, где знакоместо составляет 5х8 точек. На данный момент производителями дисплеев наиболее часто используется тандем из двух контроллеров SED1520, который обеспечивает управление матрицей графического LCDиндикатора 122х32 точки. При этом память контроллера подразделяется на 4 страницы, обращение к которым происходит в зависимости от комбинации битов D0, D1 в соответствующей команде Set Page Address. В библиотеках Протеуса представлен целый ряд моделей на основе данного драйвера: AGM1232G (AZ DISPLAYS INC), EW12A03GLY (EMERGINGDISPLAY), HDM32GS12-B и HDM32GS12Y-3 (обаHANTRONIX). Даташиты на эти экзотические для России LCD доступны для скачивания при нажатии соответствующих кнопок в свойствах моделей. Для нас же больший интерес представляют дисплеи на основе SED1520, которые представлены на отечественном рынке электронных компонентов. В первую очередь это все та же компания МЭЛТ, которая выпускает графические дисплеи формата 122х32 на основе Ангстремовского клона этого драйвера – КБ145ВГ4. И он не единственный. Не менее распространен японский клон драйвера – NJU6450 (JRC http://www.njr.co.jp/english/index.html ), а тот же Winstar выпускает индикаторы на базе тайваньского клона драйвера - SBN1661G (Avant Electronics http://www.avantsemi.com.tw ). Чтобы не раздувать вложение даташитами до непомерных размеров, приведу только ссылку на русскоязычное описание SED1520: http://www.gaw.ru/html.cgi/txt/lcd/chips/sed1520/index.htm и оригинальный даташит от EPSON. Даташиты на клоны желающие могут скачать с сайтов производителей самостоятельно. В последний момент вспомнил про Минское ОАО «ИНТЕГАЛ», которое также выпускает клон NJU6450, именуемый IZ6450, он по размеру не очень большой и на русском, поэтому добавлю во вложение.
SED1565 (SeikoEpson) – это еще один драйвер японской компании, модель которого представлена в ISIS. Контроллер обеспечивает управление матрицей до 65x132 и позволяет работать как с восьмиразрядной параллельной шиной данных, так и с последовательной загрузкой данных. В последнем случае в качестве входа данных SI используется пин D7, а в качестве входа тактового сигнала SCL пин D6. В Протеусе на основе драйвера SED1565 реализован ряд моделей дисплеев формата 128x64 точек. Модели HDG12864F-1 (Hantronix) и NOKIA7110 (96x65 точек) выполнены с последовательным интерфейсом. Для всех моделей дисплеев на базе SED1565 возможно скачивание даташитов при нажатии соответствующей кнопки DATA в окне свойств. В данный момент почти нереально приобрести индикатор с контроллером данного типа, так как он не получил широкого распространения в отличие от предыдущих драйверов. Разве что кому то посчастливиться откопать такой раритет, как Нокия 7110 с исправным дисплеем. Соответственно и русского перевода документации по SED1565 не существует, а английский вариант находится во вложении.
Теперь рассмотрим некоторые особенности построения моделей графических дисплеев, которые могут пригодиться нам в дальнейшем. Для начала немного о графике. Все дисплеи содержат серую подложку с выводами, экран и два символа экрана – погашенный ( _0 в конце имени) и с подсветкой ( _1 в конце имени) (Рис. 150). Маркер ORIGIN общего графического изображения и символов установлен в верхнем левом углу экрана, который у имеющихся в ISISмоделей выполнен либо в зеленых, либо в синих тонах.
Рабочую область светящегося экрана LCDPIXEL.DLL автоматически пропорционально делит на установленное разрешение, оставляя при этом небольшую незанятую окантовку. К примеру, на рисунке 150 слева приведен пример индикатора EW12A03GLY с форматом 122х32 точки. Символы погашенного LCD_122X32_0 и подсвеченного LCD_122X32_1 экранов составляют 1700x500 пикселей. Я «разобрал» (Decompose) эту модель, пропорционально увеличил вдвое ширину и длину символов, сохранив их с другим именем и конечно же увеличил и саму графическую модель. После этого сохранил ее с другим именем и подгрузил в типовой проект из примеров Протеуса EW12A03GLY.DSN из папки SAMPLES\VSM for AVR\AVR and SED1520\ версии 7.8. Что из этого получилось, видно на рисунке 151. Скриншот сделан в момент инверсного вывода, когда фон экрана воспроизводится черным. Здесь видна и нерабочая окантовка и рабочее поле экрана и самое главное – достигнутый эффект. Слева стандартная модель из библиотеки ISIS, справа моя модификация для себя-любимого, «слабовидящего и глухослышащего». Аналогично можно и уменьшить рабочую область дисплея. Пример из Протеуса с моими модификациями в папке Sample_ModDLL вложения. Надеюсь, общая концепция создания графики дисплеев ясна, пойдем дальше.
Теперь немного разберемся с назначаемыми свойствами и параметрами.
MODDLLVSM Model DLL. Ну, наверное, многие уже догадались, что на третьей вкладке Make Device этому свойству для всех графических дисплеев присвоено имя библиотеки LCDPIXEL.DLL. Кроме того, не забывайте на первой вкладке включать галочку LinktoDLL, устанавливать количество символов 2 и прописывать основную часть имени символов погашенного и подсвеченного экрана для вашей модели.
MODFILE - LISA Model File. Этому свойству назначается MDF файл вашей модели, скомпилированный со схемы дочернего листа. LCDPIXEL.DLL поддерживает передачу параметров из MDF, что позволяет создавать модели с двумя и более контроллерами дисплеев. Именно поэтому большинство моделей позиционируются как Schematic. Т.е. на дочернем листе вы создаете внутреннюю структуру модели с использованием моделей контроллеров из библиотеки LCD Controllers, а также можете имитировать аналоговую часть, например нагрузку подсветки дисплея с помощью аналоговых примитивов. Мы этим займемся практически в следующем разделе.
WIDTH и HEIGHT – соответственно ширина и высота рабочего поля экрана индикатора в пикселях. Например, для модели EW12A03GLY они равны соответственно 122 и 32. Когда я менял графику в примере чуть выше, я оставлял эти значения неизменными и симулятор пропорционально увеличивал или уменьшал размеры видимых точек в зависимости от размеров символов экрана моделей. Иными словами, они как бы задают симулятору коэффициент, на который надо поделить размер рабочей области модели, чтобы получить размер точки индикатора в реальных пикселях экрана дисплея компьютера. (Вот это я загнул фразочку!!! Но, если пару раз перечитать, вроде понятно.)
TRACE - Controller Diagnostics (диагностические сообщения контроллера); TRACE_CWR - Command Write Events (сообщения при записи команд); TRACE_MWR -Data Write Events и TRACE_MRD - Data Read Events (соответственно сообщения при записи и чтении данных). Эти параметры относятся к диагностике и отладке модели и по умолчанию носят значения Warning Only (только предупреждения). С TRACE мы уже сталкивались при рассмотрении моделей на HD44780.Для моделей графических дисплеев добавлены еще три отладочных параметра, которые также можно перевести в режим DEBUGи использовать для вывода в лог симуляции дополнительных сообщений о процессе обмена с контроллером дисплея.
Конечно, у некоторых дисплеев есть и дополнительные параметры, назначение которых становится понятным только после детального изучения соответствующих даташитов. Рассматривать здесь каждый досконально я не имею ни времени, ни возможностей, поэтому на этом краткий обзор моделей завершается. А мы перейдем к практическому примеру и попробуем создать модель нашего отечественного графического дисплея, выпускаемого фирмой МЭЛТ на базе контроллера SED1520.
Рисунки 150, 151.
Миниатюры:
Нажмите на изображение для увеличения
Название: Pic_150.gif
Просмотров: 522
Размер:	58.9 Кб
ID:	25469   Нажмите на изображение для увеличения
Название: Pic_151.gif
Просмотров: 578
Размер:	17.3 Кб
ID:	25470  
Вложения:
Тип файла: rar 8_15.rar (2.56 Мб, 1196 просмотров)

Последний раз редактировалось Halex07; 24.08.2011 в 23:56.
Halex07 вне форума  
Эти 18 пользователя(ей) сказали Спасибо Halex07 за это сообщение:
aleksa-yar (04.09.2011), anapogo (31.10.2013), danilych2 (11.06.2014), DjdejE (13.09.2011), grbizly (21.08.2011), haruta (29.08.2011), kittec (25.08.2011), KKurt (21.09.2011), kuksin (19.10.2011), malyshevsergey (25.08.2011), skver (19.08.2011), Traan (16.09.2013), vladh (11.08.2011), wellcom (07.08.2013), YUDSV7 (25.08.2011), ДимаК (10.12.2011)
Непрочитано 25.08.2011, 00:00  
Halex07
Супер-модератор
 
Аватар для Halex07
 
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,508 раз(а) в 956 сообщении(ях)
Halex07 на пути к лучшему
По умолчанию Re: FAQ (ЧаВО) по PROTEUS для начинающих и не только

8.16. Графические LCD на основе контроллера SED1520 в ISIS и их особенности. Моделируем отечественные дисплеи МЭЛТ в Протеусе.

Незавершенный вариант, который позже будет дополнен практикой.


Выбор практического примера на SED1520 выпал не случайно. Во-первых об этом просил один из участников форума, а во-вторых графические дисплеи на основе этого драйвера и его клонов имеют самую низкую стоимость и вполне доступны для приобретения. Конечно, существуют еще дисплеи от сотовых телефонов, которые можно купить еще дешевле, а иногда и просто выдернуть из старого ненужного телефона. Но в этом случае отлаживать устройство придется только в железе. А пайка шлейфов к дисплеям от сотовых, в которых обычно используются миниатюрные нестандартные разъемы, у начинающих может вызвать затруднения. Исключение составляет дисплей Nokia 3310, для которого модель Протеуса существует в природе, но об этом мы поговорим позже. А пока рассмотрим модель драйвера SED1520 и как мы можем адаптировать ее под свои нужды. Все модели драйверов дисплеев находятся в библиотеке Optoelectronics\LCDControllers. Конкретно модель SED1520 и окно ее свойств показаны на рис 152. Даташит SED1520 доступен для скачивания при наличии подключения к Интернет и нажатии соответствующей кнопки.
Как видим, у модели имеются только выводы входов, а выходные сигналы колонок (SEG0…SEG60) и строк (COM0…COM15) уже жестко прописаны в программной модели Протеуса. Это и вызовает некоторое затруднение при моделировании МТ-12232А (МЭЛТ), но оно вполне преодолимо с некоторыми условностями. Для начала немного информации о выводах модели из даташита. Сразу же напомню, что SED1520 может работать в двух режимах: интерфейс с контроллером серии 68xxили интерфейс с контроллером серии 80xx. Нас интересует первый, поскольку он принят стандартом де-факто и для других микроконтроллеров (AVR, PIC). Для наглядности ниже синим цветом указано то, что относится к 68xx, а зеленым то, что относится к 80xx.
· DB[0..7] – двунаправленная восьмиразрядная шина команд/данных.
· A0 – вход драйвера, определяющий что в данный момент передается по шине данных: A0=0 – команда, A0=1 – данные для вывода на индикатор.
· R/W(WR) – вход драйвера. Для 68xxопределяет чтение (R/W=1) из SED1520 или запись (R/W=0) в него. Для 80хх WR=0 при записи сигналы на шине данных стробируются положительным перепадом (передним фронтом) 0=›1 импульса на этом выводе.
· E(RD) – вход драйвера. Для 68xxопределяет тактирование (выбор) данного драйвера. (По E=1 производится запись/чтение в конкретный кристалл – это очень важный для нас сигнал.) Для 80хх RD=0 означает, что шина D0…D7SED1520 направлена на вывод данных.
· CS– вход драйвера. Обычно CS=0. Эффективен при использовании внешнего генератора тактовой частоты.
· RES– вход сброса драйвера. Перепад сигнала на этом входе производит сброс микросхемы драйвера и установку для нее определенного интерфейса. Если был RES=0 и произошел переход 0=›1, то происходит сброс и устанавливается интерфейс 68хх. Если был RES=1 и произошел переход 1=›0, то происходит сброс и устанавливается интерфейс 80хх. (Это тоже очень важный для нас сигнал.)
Теперь заглянем в свойства модели SED1520, а конкретно в раскрывающийся список. С некоторыми параметрами оттуда мы уже знакомы, но в стандартном окне они не видны и мы сможем их увидеть только с установленной галочкой Edit all properties as textили в режиме Make Device на третьей вкладке. Итак, сначала о тех, что видны в раскрывающемся списке:
· Controller Colums (да-да, именно Colums, а не Columns – и у англичан бывают грамматические ошибки)CONTRWIDTH по умолчанию равно 61 – количество колонок (SEG) в контроллере.
· Controller Lines CONTRHEIGHT по умолчанию равно 16 – количество строк (COM) для модели контроллера.
· Controller Display X OffsetBMPXOFF смещение картинки (на экране) по горизонтальной оси X. По умолчанию нулевое.
· Controller Display YOffsetBMPXOFF смещение картинки (на экране) по вертикальной оси Y. По умолчанию нулевое.
· Segments Output Direction ADCMODE направление вывода из памяти драйвера на экран. По умолчанию 0 – прямое, слева направо. При установке в 1 картинка выводится в обратном направлении справа-налево. Это вполне реальный параметр реального контроллера из даташита. Как мы увидим позже, именно с ним будут «заморочки» в МЭЛТ-овских индикаторах.
Остальные параметры имеют свойство Hidden (скрытые) и видны только при установке флажка Edit all properties as text, но среди них есть важные для нас и я их тоже опишу. В первую очередь это уже знакомые нам WIDTH (высота) и HEIGHT (ширина) но теперь уже экрана дисплея в пикселях. По умолчанию они соответственно 16 и 61. Также знакомы нам параметры трассировки: TRACE, TRACE_CWR, TRACE_MWR и TRACE_MRD. Все они по умолчанию Warning Оnly – режим предупреждений. Свойство PRIMITIVE для данной модели имеет значение DIGITAL,SED1520. Свойство MODDLL задано как LCDPIXEL.DLL. Надеюсь, эти свойства не нуждаются в особых комментариях. А вот со следующими двумя мы еще не встречались, поэтому коснусь их подробнее.
· CTRLID – идентификатор контроллера. По умолчанию равен 0x100. Если в модели индикатора используются два или более контроллера, эти значения должны отличаться. Так у нас и будет в наших моделях – второму этот параметр мы присвоим как 0x101.
· RAMSIZE – объем внутренней памяти драйвера в байтах. По умолчанию указан как 320 – это вполне реальное значение и его мы трогать не будем.
Ну, вроде с описанием модели SED1520 пока все, пора приступать к реализации моделей индикаторов на нем. О построении графики моделей дисплеев мы уже говорили выше, но каждая модель графического индикатора имеет еще в свойствах и собственный MDF-файл, в котором реализована схематика соединения контроллеров. Вот о ней и пойдет речь. Для начала возьмем и воспроизведем по извлеченному из DISPLAY.LML файлу MDFсхематику одной из существующих в ISISмоделей на базе SED1520, например, того же EW12A03GLY. Извлеченный MDFи воспроизведенная по нему схема находятся во вложении в папке GLCD_recovery. Эта же схема представлена на рисунке 153.
Структуру модели индикатора EW12A03GLY можно условно разделить на две части: цифровую и аналоговую. Аналоговая часть имитирует нагрузки по выводам питания и подсветки и особенного интереса для нас не представляет, поскольку это в основном обычные резистивные нагрузки, за исключением диода, имитирующего светодиодную подсветку экрана и источника отрицательного напряжения, имитирующего встроенный в этот конкретный индикатор преобразователь напряжения. А вот на цифровой части остановимся отдельно. Мы видим, что в данном случае используются два контроллера SED1520, у которых большинство выводов объединено, а раздельными являются только выводы выбора E1 для левого кристалла и E2 для правого. Для данного конкретного индикатора выводы R/W(WR) завешены на землю, поскольку не производится чтение из контроллеров, а выводы сброса RESнаоборот соединены с питанием и, кроме того, им присвоен параметр INVERT=$RES$ для того, чтобы наш индикатор все время запускался в режиме интерфейса с МК серии 68хх.
Примечание. Напомню, что RES ограниченное с двух сторон знаком доллара означает имя вывода со знаком надчеркивания (инверсный). При таких записях надо быть предельно внимательными, особенно, если вывод имеет длинное имя и только часть из него с надчеркиванием. Например, если вы захотите проинвертировать вывод E у SED1520, то необходимо писать его имя полностью со всеми скобками и т.п., т.е. INVERT=E($RD$). Иначе это свойство работать не будет.
Выводы CS драйверов также завешены на землю, как и в большинстве реальных графических индикаторов на основе спаренных SED1520.
Какие же еще изменения внесены в свойства контроллеров прописанные по умолчанию. Как я уже и предупреждал ранее, для правого контроллера изменен CTRLID=0х101, чтобы кристаллы имели различные идентификаторы. Для обоих кристаллов количество строк CONTRHEIGHT=32 вместо 16. Надеюсь, понятно почему, ведь это индикатор 122х32. По той же причине для правого кристалла, работающего на правую часть экрана индикатора, установлено горизонтальное смещение картинки по оси Xна 61 пиксель - BMPXOFF=61. Еще хотелось бы обратить ваше внимание, что для ряда параметров – ширина и высота экрана, а также параметры отладки конкретные значения заменены на имена параметров в угловых скобках. Если кто-то подзабыл, напомню, что таким образом обеспечена возможность задания значений этим параметрам с основного родительского листа или точнее, в данном случае, из свойств графической модели (Рис. 154).
Особенно хочу отметить, что не стоит пренебрегать заданием этим способом параметров трассировки (отладки) у сложных моделей, каковыми являются индикаторы. Если этого не сделать, то невозможно будет для уже скомпилированной модели включить режим отладки, а он очень важен для нас, в чем мы убедимся чуть ниже.
Ну вот, теперь надеюсь, всем стало ясно, почему программные VSM модели графических дисплеев прописаны как Shematic и имеют собственные MDF файлы. Я не стану больше останавливаться на зарубежных моделях LCD122х32 на основе SED1520, поскольку в большинстве своем они построены почти одинаково с обязательным разнесением входов E для левого и правого кристаллов, т.е. у реального индикатора имеются входы E1 для тактирования левого кристалла и E2 для правого. Для примера на рисунке 155 диаграмма цикла записи из даташита EW12A03GLY, рассмотренного выше. Правда не знаю, зачем производитель этого индикатора приделал там и чтение, хотя и в даташите вывод R/W(WR) четко прорисован на землю.
Из диаграммы видно, что запись команды управления (при сигнале А0=0) или байта данных изображения (при сигнале А0=1) производится по положительному импульсу на входе E1 в левый кристалл и на входе E2 в правый. В других дисплеях возможно и чтение из кристаллов, но при этом учитывается логический уровень на входе R/W(WR), который должен к моменту подачи тактового E при чтении быть в состоянии логической единицы, тогда будет верна нижняя часть диаграммы READ.
Ну а мы переходим к графическим индикаторам «местного пошива» и конкретно займемся дисплеями MT-12232 компании МЭЛТ. Эти дисплеи формата 122х32 точки на основе Ангстремовского клона КБ145ВГ4, совместимого с SED1520, выпускаются с различными буквенными индексами, и уже тут скрывается первый «подводный камень». Дело в том, что индикатор MT-12232B среди остальных выделяется как белая ворона, поскольку выполнен по западным стандартам и полностью совместим по сигналам с большинством европейских и китайских дисплеев на базе SED1520. Он также имеет два раздельных входа тактирования E1 и E2 для разных кристаллов. Временная диаграмма для этого дисплея приведена на рисунке 156. Как видим, все отличие от предыдущей диаграммы в наличии сигнала R/W(WR), обеспечивающего чтение из кристаллов.
Фактически для моделирования этого дисплея достаточно использовать уже существующую модель AGM1232G. Все отличие состоит в 3-м выводе контрастности Vо, который МЭЛТ не задействовал и обратной полярности выводов подсветки BL (19, 20). Поскольку ни то ни другое на процесс вывода данных на индикатор не участвует и реализовано только для имитации аналоговых свойств (нагрузки) эти выводы можно просто оставить «в воздухе». Ну а для тех, кому нужно соответствие «буква в букву» в папке MT12232B вложения находится графическая модель индикатора – поддиректория Model_with_Child. На дочернем листе Model.DSN находится переделанная под MT12232B подсхема AGM1232G (Рис. 157). Скомпилированный с нее файл модели MT12232B.MDF и тестовый проект находятся в подпапкеTest_MT12232B.
Ну а мы далее на примере МТ12232А рассмотрим особенности остальных индикаторов этой серии. Здесь МЭЛТ решил ввернуть свою «изюминку», которая проявляется в особенностях программирования и управления этими дисплеями. Не знаю, насколько это оправдано технологически, но с точки зрения моделирования здесь все становится с ног на голову.
Первая особенность дисплеев с индексами A, С, D и т.д. в отсутствии раздельных выводов E для управления кристаллами. Вывод E в этих индикаторах всего один и используется для тактирования как левого, так и правого контроллера КБ145ВГ4. Для обращения к конкретному кристаллу используется CS. Наличие лог. 1 на нем активирует обращение к левому драйверу, отвечающему за вывод информации в левую часть экрана. Лог. 0 на выводе CS означает работу с правым кристаллом, обслуживающим правую часть экрана.
Вторая особенность как раз и касается правого кристалла. Дело в том, что здесь МЭЛТ использовал еще и обратную последовательность подключения столбцов (колонок) драйвера к сегментам ЖКИ, т.е. выходу SEG00 правого кристалла соответствует 122-я колонка дисплея, а выходу SEG60 – 61-я колонка. Для нормального отображения картинки в правой части дисплея при начальной инициализации контроллеров необходимо для левого кристалла подать команду ADC=0 (прямой вывод) а для правого ADC=1 (обратный вывод) изображения. Эта особенность легко выполнима в реальной жизни, но при моделировании в Протеусе накладывает некоторые ограничения. Модель SED1520 может воспроизводить данные в обратном порядке по команде ADC=1, но выходы SEG мы «перепаять» задом наперед, как в реальном дисплее МЭЛТ не можем – они просто отсутствуют и жестко прописаны в программной модели. Поэтому при моделировании придется в программе инициализации для обоих кристаллов использовать ADC=0, а уже для реального «железного» дисплея перед прошивкой контроллера изменять это значение для одного из кристаллов в единицу. Как правило, инициализация проводится один раз при включении (запуске) устройства, поэтому очень больших проблем данный момент не вызывает. Главное – держать это на контроле и не забыть поменять значение при компиляции реальной прошивки.
Первая же особенность легко преодолима схемотехническим методом. Подсхема для компиляции MDF файла для МТ12232A примет вид как на рисунке 158.
Я специально оставил узел дешифрации сигналаEв первозданном виде, хотя можно было сделать и компактнее, убрав инвертор U4 и задав свойство INVERT для входов D0 элементов U3 и U5. Вообще здесь уместны различные вариации по теме, но у меня заработало уже в таком виде, а большего и не надо. В папке вложения MT12232A,как и длямодели с индексом B, расположены соответствующие Model_with_Child с дочерним листом, содержащим эту схему,и Test_MT12232А, в которой есть и готовый MT12232A.MDF.
Подводя итог этому материалу, хочу немного коснуться особенностей процедуры начальной инициализации и вывода информации на индикаторы МЭЛТ. В сети можно встретить различные варианты этой процедуры. В частности, в даташите на MT12232A производитель рекомендует следующую последовательность операций:
1. после подачи напряжения питания удерживать вывод RES в состоянии логического “0” еще не менее 10 мкс;
2. подать перепад на вывод RES c логического “0” в логическую “1”, длительность фронта не более 10 мкс;
3. ожидать сброса бита RESET в байте состояния или выждать не менее 2 мс;
4. подать команду снятия флага RMW (END);
5. подать команду включения обычного режима работы (Static Drive ON/OFF);
6. подать команду выбора мультиплекса (Duty Select);
7. подать команду включения дисплея (Display ON/OFF).
Первые три операции общие для обоих кристаллов дисплея и выполняются однократно. Они переводят дисплей в режим работы с МК 68xx. Остальные необходимо проделать для каждого кристалла в отдельности, причем в рекомендуемом производителем примере перед операцией 4 для каждого кристалла выдается еще и команда RESET (0xE2). Примеры программ от МЭЛТ находятся во вложении вместе с даташитами. Пункты алгоритма начальной установки, начиная с 4 можно переписать боле подробно следующим образом:
4. подать команду (A0=0, RD/WR=0) сброса RESET (DB7…DB0=0xE2) в левый кристалл (CS=0), стробируем (1-0-1) сигналом E,
подать команду (A0=0, RD/WR=0) сброса RESET (DB7…DB0=0xE2) в правый кристалл (CS=1), стробируем E.
5. подать команду (A0=0, RD/WR=0) сбросаRMW(DB7…DB0=0xEE) в левый кристалл (CS=0), стробируем E,
подать команду (A0=0, RD/WR=0) сброса RMW(DB7…DB0=0xEE) в правый кристалл (CS=1), стробируем E.
6. подать команду (A0=0, RD/WR=0) нормальный режим (DB7…DB0=0xA4) в левый кристалл (CS=0), стробируем E,
подать команду (A0=0, RD/WR=0) нормальный режим (DB7…DB0=0xA4) в правый кристалл (CS=1), стробируем E.
7. подать команду (A0=0, RD/WR=0) выбора мультиплекса 1/32 (DB7…DB0=0xA9) в левый кристалл (CS=0), стробируем E,
подать команду (A0=0, RD/WR=0) выбора мультиплекса 1/32 (DB7…DB0=0xA9) в правый кристалл (CS=1), стробируем E.
8. подать команду (A0=0, RD/WR=0) установки верхней строки в 0 (DB7…DB0=0xС0) в левый кристалл (CS=0), стробируем E,
подать команду (A0=0, RD/WR=0) установки верхней строки в 0 (DB7…DB0=0xС0) в правый кристалл (CS=1), стробируем E.
9. подать команду (A0=0, RD/WR=0) установки обратного соответствия (DB7…DB0=0xA1) (Внимание! Здесь для Протеуса должно быть А0, а для реального индикатора А1) в левый кристалл (CS=0), стробируем E,
подать команду (A0=0, RD/WR=0) установки обратного соответствия (DB7…DB0=0xA0) в правый кристалл (CS=1), стробируем E.
10. подать команду (A0=0, RD/WR=0) включения дисплея (DB7…DB0=0xAF) в левый кристалл (CS=0), стробируем E,
подать команду (A0=0, RD/WR=0) включения дисплея (DB7…DB0=0xAF) в правый кристалл (CS=1), стробируем E.
Инициализацию можно выполнять как в той последовательности, которая указана выше, т.е. поочередно для каждого кристалла по одной команде, так и полностью все процедуры с 4-й по 10-ю сначала для одного (CS=0), а затем для другого (CS=1). Это уже зависит от того, кому как удобнее оформить программу. Необходимо только помнить про 9-й пункт, который в реальности будет отличаться.
К сожалению, все готовые библиотечные фунции на СИ для дисплеев MT12232A, найденные во всемирной паутине содержат те или иные ошибки. В основном это попытки подогнать стандартные функции вывода для дисплеев на базе SED1520 под особенности MT12232A. Поэтому рекомендовать их для использования без внимательного изучения и коррекции я сейчас не могу. Но приведу в качестве примера вывод графического массива с логотипом МЭЛТ, который взят из примера производителя. В примере LOGO.DSN из папки LOGO_MT12232A вложения использован слегка модифицированный пример MT12232-CV приложенный к материалу о драйвере MT12232A c сайта ChipEnable:
http://www.chipenable.ru/index.php/how-connection/103-podkluchenie-mt12232-k-avr.html
К сожалению, рекомендовать полностью использовать данный материал для моделирования дисплея MT12232A в Протеусе не могу, но, во всяком случае, начальная инициализация и вывод графического массива на экран модели проходят корректно, что подтверждается примером (Рис. 159).
Возможно, позже при наличии свободного времени я дополню этот материал новыми примерами, тем более, что сам индикатор у меня теперь есть в наличии и можно будет проверить соответствие модели «железу». А пока мы оставляем данный материал, подводим итог, поскольку уже давно не выкладывалась оффлайн версия материала, и переходим к рассмотрению активных моделей с элементами управления.
Рисунки 152, 153,154.
Рисунки 155, 156,157.
Рисунки 158, 159.
Миниатюры:
Нажмите на изображение для увеличения
Название: Pic_152.gif
Просмотров: 268
Размер:	27.4 Кб
ID:	29993   Нажмите на изображение для увеличения
Название: Pic_153.gif
Просмотров: 271
Размер:	18.9 Кб
ID:	29994   Нажмите на изображение для увеличения
Название: Pic_154.gif
Просмотров: 264
Размер:	28.0 Кб
ID:	29995  

Нажмите на изображение для увеличения
Название: Pic_155.gif
Просмотров: 288
Размер:	23.9 Кб
ID:	29996   Нажмите на изображение для увеличения
Название: Pic_156.gif
Просмотров: 246
Размер:	19.8 Кб
ID:	29997   Нажмите на изображение для увеличения
Название: Pic_157.gif
Просмотров: 254
Размер:	14.6 Кб
ID:	29998  

Нажмите на изображение для увеличения
Название: Pic_158.gif
Просмотров: 568
Размер:	16.0 Кб
ID:	29999   Нажмите на изображение для увеличения
Название: Pic_159.gif
Просмотров: 372
Размер:	7.9 Кб
ID:	30000  
Вложения:
Тип файла: rar 8_16.rar (1.26 Мб, 1074 просмотров)

Последний раз редактировалось Halex07; 04.01.2012 в 12:13.
Halex07 вне форума  
Эти 30 пользователя(ей) сказали Спасибо Halex07 за это сообщение:
123ksn (01.12.2013), 123LancerX (05.12.2011), aleksa-yar (04.01.2012), alex_12 (15.12.2011), artman66 (09.10.2011), bolgar (23.09.2011), danilych2 (11.06.2014), dialog55 (27.09.2011), DK (25.12.2011), georgg (10.12.2018), gerashchenkovd (30.09.2011), grbizly (05.01.2012), kot-69 (04.01.2012), kuksin (03.01.2012), malyshevsergey (04.01.2012), oillukoil (06.12.2011), RADAR62_ (30.11.2011), sweat (30.10.2011), Traan (16.09.2013), Vell65 (08.09.2011), vladh (24.01.2012), wiktorsi (23.11.2011), WjaCHSL (09.09.2011), YUDSV7 (25.08.2011)
Непрочитано 04.01.2012, 12:01  
Halex07
Супер-модератор
 
Аватар для Halex07
 
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,508 раз(а) в 956 сообщении(ях)
Halex07 на пути к лучшему
По умолчанию Re: FAQ (ЧаВО) по PROTEUS для начинающих и не только

Версия PDF последней части FAQ (Разделы 7 и 8 ) для скачивания. Поскольку объем большой, разбита на части:
FAQ_for_Fans_II.rar - содержит сам FAQ в pdf-формате с содержанием и закладками.
Attachment_II.part1.rar Attachment_II.part2.rar - архив всех вложений с примерами к разделам 7 и 8 FAQ. У кого они уже есть, могут не скачивать.
Вложения:
Тип файла: rar FAQ_for_Fans_II.rar (3.43 Мб, 7484 просмотров)
Тип файла: rar Attachment_II.part1.rar (6.68 Мб, 6373 просмотров)
Тип файла: rar Attachment_II.part2.rar (4.12 Мб, 5956 просмотров)

Последний раз редактировалось Halex07; 05.01.2012 в 08:23.
Halex07 вне форума  
Эти 55 пользователя(ей) сказали Спасибо Halex07 за это сообщение:
120147 (11.01.2012), 6ap6oc (14.02.2018), ajsn (11.11.2016), aleksa-yar (05.01.2012), allmaker (15.05.2012), barmaley2010 (29.04.2015), bezobraznic (28.09.2012), bi_max (04.01.2012), bozhko (07.01.2012), Daddy_Karlo (15.01.2012), demjura (12.03.2012), DimAlt (22.04.2012), distor (01.03.2013), Doc63 (25.09.2015), dron2200 (23.01.2012), figor008 (19.04.2012), Firsovich (06.01.2012), Flopix (25.04.2012), gbf1 (26.09.2016), gend (31.05.2013), georgg (10.12.2018), grbizly (11.04.2012), HairedBelly (18.03.2014), KawaBaz (04.01.2017), kittec (05.01.2012), kozeka (20.02.2012), kuksin (24.02.2012), Ladyslav (30.01.2018), mmavkas (27.10.2015), msvell (04.09.2014), NickerS (31.05.2015), parcshin (05.01.2012), pshenan (01.10.2012), pv2 (08.02.2017), Reflect (15.07.2018), Sergey_Vl (09.08.2020), serzh_26 (18.03.2013), Shurik_kor (22.12.2013), skver (20.01.2012), strvv (14.11.2013), switch0 (03.12.2012), S[lver (06.09.2015), ticksp (24.02.2014), Tolik_Odessa (29.03.2012), Traan (16.09.2013), vale1 (05.01.2012), VGP45 (15.04.2013), VO-VAN (01.02.2012), V_andre (16.01.2012), WjaCHSL (07.02.2012), yma62 (19.02.2013)
Непрочитано 05.01.2012, 08:24  
Halex07
Супер-модератор
 
Аватар для Halex07
 
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,508 раз(а) в 956 сообщении(ях)
Halex07 на пути к лучшему
По умолчанию Re: FAQ (ЧаВО) по PROTEUS для начинающих и не только

FAQ (ЧаВО) по PROTEUS для начинающих и не только.

ЧАСТЬ V. PROTEUS для виртуозов.

Небольшое предисловие.
Следующий материал фактически продолжает тему активных компонентов и по логике должен бы находиться в предыдущей части, но она настолько разрослась, что я решил сделать отдельную часть Vи поместить его сюда. Ниже речь пойдет о моделях ISIS, которые содержат элементы управления, позволяющие активно вмешиваться в процесс интерактивного моделирования и в процессе симуляции менять как состояние моделей: кнопки, переключатели и т.п., так и значения некоторых величин, представленных в этих моделях – потенциометры, и всевозможные датчики. Я уже касался данного материала в предыдущем разделе (п.п.8.1-8.5), и мы даже создали несколько моделей с элементами управления. Однако, видимо материал был изложен недостаточно доходчиво и я принял решение продолжить эту тему. Тем более, что там я полностью упустил из виду наличие аналоговых компонентов управления и индикации. Восполним этот пробел. Кроме того, в этой части я надеюсь, наконец, познакомить вас с основами применения встроенного в Протеус языка EasyHDL. В ряде случаев он весьма существенно облегчает жизнь при имитации тех или иных свойств модели. Однако, как вы сами понимаете, для того чтобы применять этот материал на практике при создании моделей необходимы познания не только в области электроники, но и навыки программирования в частности на языке Basic, с которым тесно переплетается EasyHDL. Именно поэтому я и поместил такой подзаголовок для этой части – «Протеус для виртуозов». Итак, приступим…

9.Активные модели с элементами управления.

9.1. Маркеры INCREMENT, DECREMENT и TOGGLE – основа всех активных регулируемых компонентов.
Для начала напомню, что данные маркеры расположены в селекторе, доступном при нажатии кнопки 2D Graphics Markers Mode в левом тулбаре ISIS (Рис. 9-1-1). Как видите, у заголовка селектора отсутствуют дополнительные кнопки, позволяющие перейти в библиотеку выбора, поэтому сразу оговорюсь – добавить сюда плоды собственной фантазии не удастся. Все элементы селектора MARKERS – для Протеуса понятия системные и попытка изменить их вид каким-либо образом бесполезна. Так что примите их такими, какие они есть, а все свои капризы на тему «хочу голубую стрелочку с белой каемочкой» направляйте разработчикам программы, а не на форум, где они останутся безответным мусором.
С маркерами INCREMENT (увеличение) и DECREMENT (уменьшение) мы уже успели бегло познакомиться в предыдущей части. Там мы их успешно использовали для изменения числового значения параметров датчиков, но они применяются не только для этих целей. Маркер TOGGLE (переключатель в виде двухсторонней стрелки) мы еще не применяли, но он тоже широко представлен в активных моделях ISIS. Для примера я выбрал в библиотеках Протеуса различные модели с этими маркерами и разместил их на рисунке 9-1-2. Как видим, в ряде случаев для управления состоянием или значением применяется пара маркеров INCREMENT-DECREMENT– это аналоговые переключатель, джампер, потенциометр и популярный цифровой датчик температуры DS18B20. В других случаях применяется единственный маркер TOGGLE для переключения двух состояний – аналоговая кнопка и цифровой LOGICTOGGLE - отладочный логический переключатель 0-1 из библиотеки DebuggingToools.
Вершиной творческого применения всего набора этих маркеров является модель популярного цифрового датчика температуры и влажности SHT11 и других из этой линейки, в которых TOGGLE используется для выбора изменяемой в данный момент величины, а пара INCREMENT-DECREMENT для ее непосредственного изменения.
Хочу сразу отметить еще пару особенностей применения этих маркеров в моделях ISIS.
Первая из них касается всех вышеперечисленных и состоит в том, что маркеры активны, т.е. позволяют изменять состояние модели даже «при наличии отсутствия пропитанных шпал», т.е. без запуска симуляции. Это означает, что если модель, например, тот же датчик температуры DS18B20 помещен в поле проекта, то с помощью кнопок-маркеров INCREMENT-DECREMENT вы можете заранее до нажатия на кнопку Play или запуска симуляции соответствующего графика пробелом установить датчику нужную температуру. Аналогично можно поступить и с аналоговыми моделями: установить переключатель или потенциометр в нужное положение.
Вторая особенность относится в основном к переключателю TOGGLE. Если этот маркер является единственным для данной модели (те же кнопка BUTTON или логический переключатель LOGICTOGGLE), то его нажатие (клик мышкой) по самому маркеру приводит к фиксируемому переключению в другое положение (состояние). Клик мышкой по самому графическому изображению элемента приводит к нефиксируемому изменению состояния, т.е. кнопка вернется в прежнее состояние, как только вы отпустите левую «мышиную лапку» (Рис. 9-1-3).
Справедливости ради, стоит отметить, что аналогичный клик мышкой по изображению самих элементов с маркерами INCREMENT-DECREMENT, имеющих два состояния, например по выключателю (переключателю) на два положения приводит тоже к переключению в противоположное состояние, но фиксируемому. Однако, если вы попытаетесь проделать этот трюк с переключателем на 3 или больше положений, то ISIS не знает куда его, а заодно и вас «послать» и тихо отдыхает. Там работает только клик по самим маркерам.
Ну и, наконец, нам осталось рассмотреть функционирование маркеров на практике. Взаимодействие INCREMENT-DECREMENT с SETPOINT для изменения цифровых значений мы уже рассматривали в предыдущем разделе на примерах датчика давления и отладочного источника напряжения. Для этого достаточно перечитать п.п.8.2 – 8.5 предыдущего раздела. Я немного коснусь той же модели SHT11, в которой реализовано изменение двух величин: температуры и влажности. В данном случае используется не SETPOINT.DLL, как в тех моделях, которые мы рассматривали ранее, а специально написанная для этих целей DUALSET.DLL. Надеюсь, термин DUALв данном случае понятен и без дополнительных комментариев. Соответственно, если запустить для SHT11 процедуру MakeDevice, то на третьей вкладке мы встретим все параметры от SETPOINT, нов двух экземплярах (Рис. 9-1-4).
Если же заглянуть в файл SHTXX.MDF, соответствующий этой модели, то мы в списке компонентов встретим следующую строку:
Код:
U3,DDOUT,DDOUT_14,MAX1=‹RHMAXACY›,MAX2=‹TMAXACY›,MIN1=‹RHMINACY›,
MIN2=‹TMINACY›,MODDLL=DUALSET.DLL,MODE1=UNSIGNED,
MODE2=UNSIGNED,PRIMITIVE=DIGITAL,SETPOINT1=‹SETPOINT1›,SETPOINT2=‹SETPOINT2›
Конечно, нет смысла искать примитив DDOUT в библиотеках, хотя немного фантазии и можно догадаться, что под этой аббревиатурой скрывается DUAL DIGITAL OUT или двойной цифровой вывод. Но ведь и VOUT тоже не было в списках примитивов, а мы, тем не менее, его сумели воспроизвести и использовать в своих целях. Из той же строки видно, что для DDOUT в качестве параметра MODDLL используется упоминаемая выше библиотека DUALSET.DLL.
Чтобы не терять драгоценное время, я не буду больше отвлекаться на эту модель, особо любознательные пользователи могут попытаться произвести реинкарнацию самостоятельно. Мне этот эксклюзивный примитив как-то был без надобности, а нас ждут более прозаичные, но и более насущные активные модели. И для начала мы рассмотрим – как организованы в ISISмодели обычных включателей/переключателей и потренируемся в изготовлении собственных.
Рисунки 9-1-1, 9-1-2, 9-1-3, 9-1-4
Миниатюры:
Нажмите на изображение для увеличения
Название: PIC 9-1-1.gif
Просмотров: 816
Размер:	47.0 Кб
ID:	30116   Нажмите на изображение для увеличения
Название: PIC 9-1-2.gif
Просмотров: 762
Размер:	13.8 Кб
ID:	30117   Нажмите на изображение для увеличения
Название: PIC 9-1-3.gif
Просмотров: 603
Размер:	8.9 Кб
ID:	30118  

Нажмите на изображение для увеличения
Название: PIC 9-1-4.gif
Просмотров: 636
Размер:	27.0 Кб
ID:	30119  

Последний раз редактировалось Halex07; 07.01.2012 в 08:21.
Halex07 вне форума  
Эти 19 пользователя(ей) сказали Спасибо Halex07 за это сообщение:
aleksa-yar (04.04.2012), artman66 (13.01.2012), bozhko (07.01.2012), CERGEI1982 (05.01.2012), cxxz (05.05.2012), Daddy_Karlo (15.01.2012), DK (05.01.2012), grbizly (14.01.2012), haruta (07.01.2012), kot-69 (07.01.2012), nech53 (06.01.2012), otest (14.01.2012), parcshin (05.01.2012), RADAR62_ (05.01.2012), strannik2039 (16.08.2014), timur1009 (12.01.2012), Traan (16.09.2013), v4575820 (03.04.2012), VO-VAN (07.01.2012)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импульсная зарядка для авто-аккумуляторов (новодел) Falconist Источники питания и свет 1915 14.03.2024 19:56
Linux-ваше мнение Tvenn Делимся опытом 6169 23.08.2015 08:57
Pictiva TM 128 X 64 OLED Module (SSD0323) + AVR + PROTEUS - рабочий проект для начинающих OttoStirliz Микроконтроллеры, АЦП, память и т.д 8 28.05.2010 16:59


Часовой пояс GMT +4, время: 19:54.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot