Протеус vs. Реальность

Протеус, хоть и умеет вполне прилично симулировать работу цифровых (а в хорошую погоду — даже аналоговых) схем, не лишен огромного числа багов.

Вот простой пример:

Тини2313 имеет 3 пина порта A: A0, A1 — под XTAL и A2 — под ресетом.
Все биты регистров PINA, PORTA и DDRA, начиная с 3го бита — зарезервированы. Всегда читаются как 0, а писать в них нельзя. Это в реальности. А в Протеусе можно.

.include "tn2313def.inc"

sbi DDRB,4  ; Зеленая лампочка - "реальность"
sbi DDRB,2  ; Красная лампочка - "протеус"

sbi PORTA, 3 ;Пробуем поднять несуществующий пин
sbis PORTA,3 ; Если он поднялся, то мы во сне
rjmp Its_real
 sbi PORTB,2 ; А если мы во сне, то зажигаем красную лампочку
rjmp end
Its_real:
 sbi PORTB,4 ; Иначе - зеленую
End:
rjmp end


Это, кстати, самый простой способ понять, что мы под колпаком эмулятора.

Дальше — веселее. Если запустить ШИМ в режиме Fast PWM на высокой частоте (XTAL = 8MHz, предделитель отключен) и загнать в OCR число 255, то на выходе мы получим «пульс трупа». Но не на уровне 5V, как ожидалось, а на уровне земли.
А еще протеус позволяет невозбранно переключать пины, занятые UART.

Как-то при отладке свеженький протеус 7.7 наткнулся на особо хитрый выверт и не просто завис, но схлопнулся не сказав ни слова. К сожалению код, убивающий отладчик, был потерян. А можно было-бы сделать годную антиотладочную систему, убивающую эмулятор при обнаружении.

Кто знает другие баги протеуса?
  • 0
  • 31 мая 2011, 20:31
  • dcoder

Комментарии (10)

RSS свернуть / развернуть
Я долго мучился с тем, что там не учитывается, что считывать с порта можно только через такт, как поменяли направление работы. В протеусе все работало, а на железе нет. Моделировал еще работу с графическим дисплеем, в протеусе все работало, а на железе нет, оказалось, что в протеусе срабатывание было по фронту, хотя вывод был обозначен по срезу, или наоборот, точно не помню.
0
Второе относится скорее к косякам отдельных моделей. А вот первое я пожалуй добавлю в свой список косяков протеуса.
0
Протеус — это посмотреть без сборки. А для анализа есть дизассемблер и симулятор студии на пару с жтагом. Их навернуть посложнее, поэтому некоторые прошивки дают тока на защищенном носителе — самом МК(
0
  • avatar
  • Vga
  • 31 мая 2011, 21:23
Самый лучший способ отладки — в железе. Я всегда собирал все проекты сразу в железе. Протеус установил недавно.

Насчет глюков. Недавно проскакивал пост, где не работали транзисторы, подключенные к разрядам индикатора.
0
>>Дальше — веселее. Если запустить ШИМ в режиме Fast PWM на высокой частоте (XTAL = 8MHz, предделитель отключен) и загнать в OCR число 255, то на выходе мы получим «пульс трупа». Но не на уровне 5V, как ожидалось, а на уровне земли.

Между прочим, не знаю, как в тини, а в меге644 в FastPWM если загнать в ICP (или на что там настроен PWM) значение TOP, то получишь вовсе не «пульс трупа», а импульсы нуля единичной длительности. Так что если нужен весь диапазон ШИМ, то лучше использовать Phase Correct PWM.
0
Даже не знаю, как связно описать тот прикол, что я нашел. На мега32 тестил 1-wire, язаю timer2, срабатывание по совпадению, границы совпадения меняются в зависимости от фазы работы с 1-проводом. Итого, имеем, фаза0 — время0 — срабатывание по времени0, фаза1 — время1 — срабатывание по времени1, фаза2 — время2 (все четко, в регистрах и памяти протеус показывает правильное значение), но при достижении времени1 мы вдруг оказывались в обработчике прерывания таймера, причем уже глубоко в теле, там стоит автомат который перебирает фазы, так вот мы без попадания на вектор, без попадания в минипроцедуру, которая вызывается вектором, без прохода обработчика выбора фазы ветвления сразу оказываемся в нужной под-под-подпроцедуре. И после этого, дальше все идет криво, теперь получаем, при записи времени3, протеус срабатывает по времени2, дальше не тестил, отработал все на задержках, а в железе все на таймерах работает зашибись. Но времени убил хорошо, пока выловил.
0
Кстати не только в протеусе глюки. Я с проблемами при отладки сталкивался в AVR Studio 4, для tiny не работает аналоговый компаратор, говорят такие же косяки с ацп.
0
А как ты в студии проверял компаратор? Там же напряжений нет никаких входных.

То же и с АЦП. Хотя да, режим фри раннинг в мега8 не работает в студии корректно — не перезапускается сам.

Также шим работает некорректно в студии для мега8, должен быть фаст шим, а ведет себя как фазкорректный.
0
Да я пытался просто включала разряды переключал, по идее то можно сравнивать (0 и 5) и (5 и 0), должен разные результаты давать, но похоже там такая штука не прокатывает.
0
Вчера столкнулся с кривой работой UART с виртуальным терминалом в протеусе.
Раз в какое-то время контроллер должен был слать содержание переменной отвечающей за ширину импульса ШИМ. При этом кнопками на внешних прерываниях менялась ширина импульсов — судя по осциллографу, они менялись, но восстанавливались после каждого отправления байта — соответственно и на осциллографе восстанавливалась стандартная ширина импульсов, и в терминале приходило всегда одно и то же число.
Прикол в том, что при каждой отправке байта запускалось прерывание по приему байта. Если закомментить обработчик (Си), то программа висла после второго отправленного байта… Не важно, либо посылалась отдельная переменная, либо пакет из 4-5 байт — программа останавливалась именно после второго байта.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.