Именно такой файл __.c текста программы на Си нужно использовать, ведь к нему привязаны данные в файле .cof
Указываем симулятору частоту тактирования МК - у нас она 1МГц .CLOCK 1meg Указание виртуальному ЗАПОМИНАЮЩЕМУ осциллографу хранить данные симуляции за последние 2000 мс до остановки симуляции. .STORE 2000m
Это время можно не указывать, но могут получаться очень большие файлы с результатами симуляции.
Указываем название узлов и напряжения питания и "земли" .POWER VDD = 5 VSS = 0
Описание подключения светодиода - от питания МК ---|>|--- к резистору 430 Ом и другой вывод резистора к ножке PB0 МК
; ========================= ; LED diodes D2 and current limiting resistor R1
D1 VDD res16; LED diode 1 on control panel.
Теперь зададим некоторое число определяющее время отсчета таймера при симуляции - я выбрал число для задержки 28 сек:
; ======================= ; 12-bit digit for timer 0000 1000 1100 = 140 ; x 0,2 = 28 sec
Для имитации замкнутых контактов SW1 и SW2 будем использовать резисторы 1 Ом от "земли" (VSS) к соответствующим ножкам МК.
На ножках МК к которым ни чего не подключено (точнее подключены разомкнутые контакты SW1 и SW2) будут лог "1" за счет включенной "подтяжке" к + питания МК.
R0 VSS PD0 1 R1 VSS PD1 1
R4 VSS PD4 1 R5 VSS PD5 1
R6 VSS PC0 1
R8 VSS PC2 1 R9 VSS PC3 1 R10 VSS PC4 1 R11 VSS PC5 1
Добавляем кнопку SW3
; ======================= ; SW3 === K0 on ControlPanal
K0 PD6 VSS LATCHED ; SW3 key toggles from open to closed as you press it.
Использовали кнопку "0" на клавиатуре 4х4 в "Контрол пэнел" и подключили ее по схеме таймера - к ножке PD6 МК и "общему" проводу устройства.
Кнопка с фиксацией (слово LATCHED), т.е. ее состояние меняется при каждом нажатии мышкой и остается таким до следующего нажатия.
Для моделирования подключения нагрузки мы используем кнопку "С" на клавиатуре 4х4 и резистор 1 МОм
; ======================= ; Load simulation
KC PB2 VSS LATCHED;
R20 VDD PB2 1M;
;if but. "C" was pressed - load looks like was been broken! ;if but. "C" was pressed once more - load looks like was been good!
В начале программы кнопки разомкнуты и на ножку-вход PB2 будет поступает напряжение питания через резистор 1 МОм - значит на ней будет лог. "1" значит программа будет считать что нагрузка исправна.
Если нажать кнопку "С" то ее контакты замкнутся и PB2 окажется заземленной на ней появятся физический 0 вольт и соответственно лог. "0" - это соответствует случаю не исправной цепи нагрузки
Кнопку "F" подключим к ножке PD7 позволяет выбрать включать ли нагрузку только на 2 секунды или включить ее и не выключать. ; ======================= ; How long IRLxxxx will state ON
KF PD7 VSS LATCHED;
; if button "F" was pressed - IRLxxxx ; will turn ON forefer Если кнопку "F" не трогать, то она будет разомкнута и значит к ножке PD7 ни чего не будет подключено, подтяжка создас на ней "1" и значит транзистор будет включаться только на 2 сек.
Если кнопку "F" нажать, то она замкнет ножку PD7 на "землю" и транзистор будет включен после отработки таймером заданного времени "навсегда".
Запускаем симулятор VMLAB:
1) В меню "прожект" выбираем "открыть проект":

Рисунок 3.5 Открываем созданный файл для симуляции в Vmlab
2) теперь проект нужно " отбилдить " - как я это называю. Меню " прожект " далее " ребилд ол-л " - должны получить сообщение об успехе:

Рисунок 3.6 Сообщение об успешной симуляции
5) Измерение времени выдержки таймера. По начальному положению кнопок в симуляторе у нас нагрузка транзистора исправна и SW3 разомкнут. Кроме того мы как бы выбрали переключателями число 140 соответствующее времени отсчета 28 секунд.
Нам нужно измерить время задержки таймера, т.е. нужно сделать остановку перед циклом отсчета времени,
while (time_val > 1){
записать на бумажку время с момента запуска программы - оно отображается в правом нижнем углу симулятора, например так:
дождаться завершения цикла и включения транзистора, сразу остановиться и опять записать время. Найдя разность двух записей мы определим реальную задержку отработанную таймером.
6) давайте расставим пару точек останова.
Первую "точку останова" поставим так как на третьем рисунке выше, т.е. перед началом цикла while отсчета времени таймером.
Вторую "точку останова" поставим после включения транзистора, на строчке включения светодиода:

Рисунок 3.7 1-ая точка останова
Запускаем программу:
Кликнув на иконку - "зеленый светофор":

Рисунок 3.8 Результат симуляции программы
После прохождения определенного времени. Останавливаем симуляцию и переходим в окно Scope. В данном окне выставляем горизонтальные и вертикальные пределы для того чтобы лучше рассмотреть ход выполнения программы.
Date: 2016-01-20; view: 662; Нарушение авторских прав Понравилась страница? Лайкни для друзей: |
|
|