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

7.5. Пример создания активного семисегментного индикатора с десятичной точкой. Примитивы для создания индикаторов. Часть вторая – модель.
Для начала предстоит создать графическую модель компонента, которая и будет представлять его в библиотеке, но попутно мы включим туда и свойства активного компонента. Итак, графическую (не симулируемую) модель создаем из того набора, что представлен на предыдущем рисунке вместе с добавленным выводом и десятичной точкой. Как и обычно, выделяем все это рамочкой и нажимаем нашу любимую кнопку Make Device. Именно девайс, символов мы уже насоздавались. И вот тут с самой первой вкладки начинаются новшества. Я уже упоминал, что мы создаем бит-зависимый активный компонент. Зададим ему имя, пусть он 7SEG-COM-ANODE-YEL (больше просто не упишется), префикс можно и не задавать, тут это не критично и делается как всегда.
Приключения начинаются в нижней части окна – Active Component Properties – ведь мы создаем активный компонент. В графе Symbol Name Stem вводим имя наших созданных сегментов. Вводится только общая часть имени, которая слева до первого символа подчеркивания, в нашем случае это SEGYEL. После этого становится доступным для ввода количество состояний – No. of States. Оно численно равно количеству различных видов символов – цифра после первого подчеркивания с учетом нулевого. Это означает, что если у нас номер последнего символа (в нашем случае добавленной десятичной точки) равен семи и нулевой символ – сегмент «а», то в этой графе мы указываем число восемь. Не ошибайтесь с подсчетом в этом месте, иначе один из символов работать не будет. Ну и, наконец, поскольку мы создаем многоэлементный индикатор, в котором каждый символ связан с состоянием определенного вывода компонента, включаем флажок Bitwise – «бит-зависимый» (Рис. 20).
В остальных вкладках функции Make Device можно пока ничего не заполнять и лихо проскочить их до последней, нажимая кнопку Next. На последней вкладке нам необходимо причислить нашу модель к какой-либо группе компонентов, либо создать новую. Я не стал мудрить в данном случае – выбрал из существующих, изменив только описание компонента – графа Device Description. Ну и сохранил это все пока в библиотеке USRDVC (Рис. 21).
Теперь наша модель присутствует в селекторе компонентов, и мы можем поместить ее в проект. Пора приделать к ней дочерний лист, чтобы на нем смоделировать внутреннюю структуру. Тут все, как и прежде – заходим в свойства и устанавливаем галочку Attach hierarchy module. Теперь мы можем спокойно проследовать на дочерний лист и заняться восстановлением структуры модели по файлу 7SEGCOMK.MDF. Если бы мы не добавили еще один элемент – десятичную точку, то можно было бы и вообще использовать этот файл, но теперь нам придется добавить недостающую часть внутренней структуры и для нее. Вообще, для активных Bitwise компонентов рисовать структуры – одно удовольствие. Достаточно воспроизвести структуру для одного символа и затем размножить ее через кнопку Block Copy. На рисунке 22 приведена часть восстановленной по 7SEGCOMK.MDF структуры с дочернего листа нашей модели. Здесь четко просматриваются два одинаковых «канала» для сегмента «A» и для сегмента «B». Каждый канал состоит из примитивов токового пробника RTIPROBE и аналогового выключателя VSWITCH. Всего таких каналов восемь, по числу используемых символов. Все отличие состоит в номере свойства Target Element у токовых пробников IP1…IP8 (на рисунке это свойство ELEMENT специально сделано видимым).
Рассмотрим предназначение элементов одного канала. Аналоговый выключатель в данном включении служит пороговым элементом по напряжению с напряжением включения VON=‹VF›. Напряжение включения VF задано в скрипте *DEFINE и равно 1.5V для всех каналов. Позже, мы пропишем его в свойствах модели с возможностью изменить из основного листа. Кроме того, в свойствах каждого VSWITCH в соответствии с MDF прототипа задано сопротивление в выключенном состоянии Off Resistance ROFF=100k и во включенном On Resistance RON=10. Таким образом, если между левыми и правыми группами выводов VSWITCH приложить напряжение менее полутора вольт, то он не включится и его сопротивление будет 100кОм, а если свыше 1,5В, то он перейдет во включенное состояние с сопротивлением 10 Ом между верхними по схеме выводами. Обратный переход произойдет при напряжении VOFF в нашем случае при 0В. Мы уже рассматривали управляемый ключ VSWITCH в п.4.13 и больше я на нем останавливаться не буду. А вот на свойствах примитива RTIPROBE и его собратьев по назначению остановимся подробнее, так как они являются основой для создания активных индикаторов. Все они расположены в библиотеке Modelling Primitives в подпапке Realtime (Indicators) и назначение их служить пробниками для определения состояний точек (цепей) схемы с выводом результата в виде меняющихся графических символов. Аналоговыми индикаторами являются два из них токовый RTIPROBE и напряжения RTVPROBE (Рис. 23). Соответственно токовый включается в контролируемую цепь последовательно и индицирует ток в ней, а пробник напряжения подключается к двум контролируемым точкам и индицирует напряжение между ними. Текущее состояние (индицируемый символ) определяется по схожим в написании формулам – я привел их на рисунке над соответствующими моделями. В них:
STATE – текущее состояние (отображаемый в данный момент символ);
NUMSTATES – возможное количество состояний (символов индикации) для аналогового индикатора (вспомните восемь разных по свечению состояний светодиода на рисунке 7 из п.7.2 выше) или количество бит-зависимых символов с двумя состояниями для Bitwise индикатора (это то, что мы прописывали на первой вкладке Make Device в графе No. of States на рисунке 20);
CURRENT (или VOLTAGE) – текущее значение тока (напряжения);
MIN и MAX – заданные в свойствах соответственно: минимальное и максимальное значение тока (напряжения).
Ну и сразу же рассмотрим оставшиеся свойства этих примитивов. На рисунке 24 приведено приведено окно свойств пробника напряжения – у него на одно свойство больше, чем у токового.
Load Resistance – нагрузочное сопротивление самого пробника (только для пробника напряжения).
Итак, в нашем случае использован токовый пробник RTIPROBE с установленным MAX=‹ION›, которое в свою очередь в скрипте задано 10mA. Так как мы используем Bitwise режим, то соответствующий символ (сегмент) станет активным (светящимся) в том случае, если ток через пробник стане 10мА или выше, а это произойдет при срабатывании ключа VSWITCH. Вот собственно и весь принцип работы одного канала индикатора.
Ну и несколько слов о цифровых примитивах RTDPROBE. Однобитные примитивы индикаторов ведут себя предсказуемо: если на входе лог. 0, то соответствующий Target Element (символ) не активизирован, если на входе лог. 1, то он активизирован. В той же папке имеются многовходовые RTDPROBE. Детально я их не исследовал, но при беглой логика входов абсолютно непонятна – что-то похожее на исключающее ИЛИ. К сожалению и в HELP на них описание весьма скудное. Соответственно свойства всех рассмотренных примитивов описаны в хелпе ProSPICE Primitives в разделе Real Time Modelling Primitives. Владеющие английским языком могут прочесть в оригинале. Ну а мы вернемся к «нашим баранам», т.е. индикаторам.
Есть еще одна немаловажная «фишка», об которую я в начале освоения Протеуса набил немало шишек. При создании модели индикатора на первой вкладке Make Device мы не указали префикс модели – Reference Prefix. Я пропустил его умышленно, поскольку именно так сделано и у существующих моделей семисегментных индикаторов. Но, со всей ответственностью могу утверждать, что наша активная модель с дочерним листом без него «светиться» не будет. Будет потреблять ток, никаких ошибок и предупреждений не будет, но нормальной работы мы не добъемся, пока не применим «превентивных мер». А сделать над всего-навсего следующее. Либо задать префикс уже в свойствах готовой модели в строке Component Reference, либо, находясь на дочернем листе зайти в верхнем меню Design =› Edit Seet Properties и там задать имя дочернему листу (Рис. 25). Причем имя должно быть обязательно задано только заглавными буквами латиницы или цифрами. Я и тут не стал философствовать, а просто набрал символику индикаторов HG.
Вот теперь можно вернуться на основной лист, подключить соответствующее питание и запустить симуляцию, чтобы убедиться, что наш индикатор работает (Рис.26).
Я умышленно врезал в цепь амперметр, чтобы показать, что наша модель чисто аналоговая. При питании от терминала 5V (по умолчанию) она потребляет ток 4А (!!!). Определяется он в данном случае параллельным включением всех 8 VSWITCH для которых задано сопротивление RON=10 Ом. Учитывайте это в своих разработках, используя подобные модели. Это не относится к индикаторам на основе DLL, о которых речь пойдет позже.
Ну и в заключение нам осталось сформировать файл MDF с дочернего листа нашего проекта, который представлен во вложении в папке Model_with_Child. Как это делается вы уже должны знать наизусть.
Окончательный вариант с отключенным дочерним листом представлен в папке вложения Final_model_with_MDF. Там же лежит и скомпилированный файл 7SEG_POINT_COM_AN.MDF. Теперь нам осталось еще раз пройти процедуру Make Device для модели и на третьей вкладке добавить сам файл MDF (Рис. 27), а также через Blank Item по аналогии с прототипом два свойства ION и VF, которые были у нас в скрипте *DEFINE дочернего листа (Рис 28 и 29 соответственно). Не забудьте открепить сам дочерний лист - снять галочку.
На этом модель полностью готова. Желающие могут перенести ее из USRDVC в какую-либо другую библиотеку, а файл MDF поместить в папку MODELS Протеуса для дальнейшего использования. Далее можете самостоятельно попрактиковаться в «раскрашивании» семисегментных индикаторов. Кстати, если использовать символы, которые мы создали для желтого и только менять цвета, то файл MDF для всех будет один и тот же, т.е. процедуру «приклеивания» дочернего листа повторять уже не придется. Мы просто перекрашиваем сегменты, создаем новый набор символов нужного цвета, затем создаем модель с оригинальным именем и присоединенным набором сегментов нужного цвета, а далее на третьей вкладке добавляем наш MDF и дополнительные два свойства.
Можно также самостоятельно пораскрашивать светодиоды – там и MDF менять не надо, оставляете родной. Я же на этом временно закончу рассмотрение индикаторов и перехожу к теме создания моделей на основе существуюших DLL, т.е. приступаем к созданию ранее представленного и обещанного регулируемого источника питания.
Рисунки 20, 21, 22.
Рисунки 23, 24, 25.
Рисунки 26, 27, 28.
Рисунок 29.
Миниатюры:
Нажмите на изображение для увеличения
Название: Pic_20.gif
Просмотров: 444
Размер:	17.7 Кб
ID:	16263   Нажмите на изображение для увеличения
Название: Pic_21.gif
Просмотров: 400
Размер:	12.5 Кб
ID:	16264   Нажмите на изображение для увеличения
Название: Pic_22.gif
Просмотров: 509
Размер:	15.3 Кб
ID:	16265  

Нажмите на изображение для увеличения
Название: Pic_23.gif
Просмотров: 413
Размер:	15.5 Кб
ID:	16266   Нажмите на изображение для увеличения
Название: Pic_24.gif
Просмотров: 395
Размер:	12.7 Кб
ID:	16267   Нажмите на изображение для увеличения
Название: Pic_25.gif
Просмотров: 375
Размер:	6.7 Кб
ID:	16268  

Нажмите на изображение для увеличения
Название: Pic_26.gif
Просмотров: 479
Размер:	12.4 Кб
ID:	16269   Нажмите на изображение для увеличения
Название: Pic_27.gif
Просмотров: 404
Размер:	15.0 Кб
ID:	16270   Нажмите на изображение для увеличения
Название: Pic_28.gif
Просмотров: 368
Размер:	15.8 Кб
ID:	16271  

Нажмите на изображение для увеличения
Название: Pic_29.gif
Просмотров: 360
Размер:	16.1 Кб
ID:	16272  
Вложения:
Тип файла: rar 7_5.rar (25.1 Кб, 824 просмотров)
Halex07 вне форума  
Эти 23 пользователя(ей) сказали Спасибо Halex07 за это сообщение:
Andrik75 (03.01.2011), Asub0 (20.12.2011), bobby1968 (09.01.2011), bozhko (09.01.2011), EKuzmich (10.03.2011), gena1959 (29.12.2010), gerashchenkovd (18.03.2011), kittec (29.12.2010), kot-69 (29.12.2010), miron53 (30.12.2010), parcshin (23.04.2011), ReLe1 (14.08.2011), skver (06.01.2011), Tischon (21.01.2011), Traan (16.09.2013), UAIE (10.01.2011), valvlad (13.05.2011), vik64 (20.05.2011), vladh (02.01.2011), ДимаК (21.06.2011), Прохожий2 (23.06.2011)