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

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

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

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

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

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


 
Опции темы
Непрочитано 10.10.2012, 00:22  
123ksn
Вид на жительство
 
Аватар для 123ksn
 
Регистрация: 09.10.2012
Сообщений: 327
Сказал спасибо: 124
Сказали Спасибо 71 раз(а) в 38 сообщении(ях)
123ksn на пути к лучшему
По умолчанию Re: Вопросы и замечания по топику - FAQ по PROTEUS

Может плохо искал, но не нашёл как сделать из PATTERN GENERATOR или Виртуального терминала генератор потока символов в формате протокола RS232 (USART) что бы подать его на USART-вход МК. Единственное, что я нашёл - это предлагают подключить протеус к COM порту ПК и из какой-нибудь терминалки передавать из COM порта поток символов. Можно конечно, но это как из пушки по воробьям. Кто-то спросит зачем? В проекте информация от USART обрабатывается в прерывании. В зависимости от поступившей информации очень сильно меняется алгоритм обработки. Поэтому хочется забить канал потоком информации (в том числе и ошибочной) и посмотреть успеет ли программа обработать такую ситуацию.
Реклама:
123ksn вне форума  
Непрочитано 11.10.2012, 07:06  
Halex07
Супер-модератор
 
Аватар для Halex07
 
Регистрация: 03.05.2007
Сообщений: 2,695
Сказал спасибо: 28
Сказали Спасибо 4,509 раз(а) в 956 сообщении(ях)
Halex07 на пути к лучшему
По умолчанию Re: Вопросы и замечания по топику - FAQ по PROTEUS

Сообщение от 123ksn Посмотреть сообщение
Может плохо искал, но не нашёл как сделать из PATTERN GENERATOR или Виртуального терминала генератор потока символов в формате протокола RS232 (USART) что бы подать его на USART-вход МК.
Вот это действительно стрельба из пушки по воробъям, хотя с PATTERN GENERATOR и можно проделать такое, используя один разряд из восьми (последний на сегодня материал в FAQ). А искать надо было поближе:
Proteus 7 Professional\SAMPLES\Generator Scripts\Serial Data Generator.DSN
Halex07 вне форума  
Эти 2 пользователя(ей) сказали Спасибо Halex07 за это сообщение:
123ksn (11.10.2012), bmwxmiha (11.10.2012)
Непрочитано 11.10.2012, 23:34  
bmwxmiha
Прохожий
 
Регистрация: 16.10.2008
Сообщений: 3
Сказал спасибо: 1
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
bmwxmiha на пути к лучшему
По умолчанию Re: Вопросы и замечания по топику - FAQ по PROTEUS

Сообщение от Halex07 Посмотреть сообщение
Начните с прочтения вот этого:http://microcap-model.narod.ru/modelling.htm
Всем начинающим рекомендую.
огромное спасибо! всё стало понятно!
bmwxmiha вне форума  
Непрочитано 12.10.2012, 10:55  
123ksn
Вид на жительство
 
Аватар для 123ksn
 
Регистрация: 09.10.2012
Сообщений: 327
Сказал спасибо: 124
Сказали Спасибо 71 раз(а) в 38 сообщении(ях)
123ksn на пути к лучшему
По умолчанию Re: Вопросы и замечания по топику - FAQ по PROTEUS

Большое спасибо за помощь с генератором RS232 (USART) в протеусе. Он мне здорово помог. Обнаружилось, что код перестаёт правильно работать из-за переполнения стека. Но встал другой вопрос: Как отследить момент переполнения стека? Как известно, в PIC16F87X такой возможности нет. Где-то читал, что MPLAB при переполнении стека выдаёт соответствующее ругательство, но настроить в stimulus генератор RS232 (USART) не умею, хоть и прочитал файл 11016. Вы помогли информацией по генератору RS232 (USART) в протеусе. Помогите, пожалуйста, ещё раз. Как отследить момент переполнения стека в протеусе? Да, протеус у меня 7.7 sp2 rus.

Последний раз редактировалось 123ksn; 12.10.2012 в 10:57. Причина: забыл указать свой протеус
123ksn вне форума  
Непрочитано 12.10.2012, 15:45  
Алекс Василич
Прописка
 
Аватар для Алекс Василич
 
Регистрация: 14.06.2012
Сообщений: 263
Сказал спасибо: 2
Сказали Спасибо 129 раз(а) в 103 сообщении(ях)
Алекс Василич на пути к лучшему
По умолчанию Re: Вопросы и замечания по топику - FAQ по PROTEUS

А вот у PIC-ов этой вот серии нет возможности управлять стеком и контроллировать его. Вся ответственность за переполнение стека лежит целиком на программисте.
В MPLAB-е есть окно Hardware stack с указателем стека. В протеусе тоже есть аналогичное окно. по нему и отслеживай заполнение.
Еще на этапе написания программы нужно следить за тем, чтобы количество переходов в прерывания или по команде call было равно количеству возвратов (return, retlw, retfie). Ну и разумеется, не превышало глубину стека.
В более современных и сложных сериях PIC-ов есть возможность управлять стеком, отслеживать и программно реагировать на его переполнение.
В MPLAB-е, если использовать его собственный симулятор, в случае переволнения стека будет выдано сообщение Stack over flow error occurred from instruction a 0х... с указанием адреса. Сообщение выводится в окне Output.
В протеусе в строке состояния есть simulation log. При ошибке там будет появляться желтый треугольник. Можно просмотреть лог и увидеть, в какой строке произошло переполнение стека.
Можно так же в Configure Diagnostics для PIC установить в параметре Instructio nExecution галочку Suspend simulation whenewer an event is logged - и тогда симуляция приостановится при переполнении стека.

При написании кода нужно категорически избегать конструкций типа таких (красным выделена ошибка):
Код:
odin:
	call dva
	nop
...
dva:
	nop
	goto odin
или

Код:
	goto odin
	nop
...
odin:
	nop
	return
	nop
	goto odin
и любых разновидностей подобного, в том числе, по условию проверки.
или неверный выход из обработки прерывания, типа этого:

Код:
Interrupt:
	nop
	goto odin
	nop
	retfie
...
odin:
	nop
	goto Work
...
Work:
	nop
	goto Work
или же попадание в подпрограмму прерываний иначе, чем непосредственно по прерыванию:

Код:
Interrupt:
	nop
	goto odin
	nop
dva:
	retfie
...
odin:
	nop
	goto dva
...
Work:
	nop
	goto odin
все эти случаи приводят к моментальному (либо постепенному) переполнению стека.
Посмотри в своей программе и найди подобные ошибки. Исправив их, избавишься от переполнения стека.

Последний раз редактировалось Алекс Василич; 12.10.2012 в 17:11.
Алекс Василич вне форума  
Сказали "Спасибо" Алекс Василич
123ksn (12.10.2012)
Непрочитано 12.10.2012, 21:54  
123ksn
Вид на жительство
 
Аватар для 123ksn
 
Регистрация: 09.10.2012
Сообщений: 327
Сказал спасибо: 124
Сказали Спасибо 71 раз(а) в 38 сообщении(ях)
123ksn на пути к лучшему
По умолчанию Re: Вопросы и замечания по топику - FAQ по PROTEUS

Сообщение от Алекс Василич Посмотреть сообщение
В протеусе в строке состояния есть simulation log. При ошибке там будет появляться желтый треугольник. Можно просмотреть лог и увидеть, в какой строке произошло переполнение стека.
Василич, спасибо Вам за такой большой подробный совет. Для меня было полезно следующая информация:
Цитата:
В протеусе в строке состояния есть simulation log. При ошибке там будет появляться желтый треугольник. Можно просмотреть лог и увидеть, в какой строке произошло переполнение стека.
У меня желтого треугольника нет. И в окне лога тоже ругательства нет.Значит это не переполнение стека, хотя все 8 строк в нем заняты и при дальнейшей трассировке(кажется это слово уместно), изменяются только первая и вторая строка.
Цитата:
Можно так же в Configure Diagnostics для PIC установить в параметре Instructio nExecution галочку Suspend simulation whenewer an event is logged - и тогда симуляция приостановится при переполнении стека.
И этого я не знал. Новичёк, однако.
Большое спасибо. Буду думать дальше.
123ksn вне форума  
Непрочитано 13.10.2012, 07:16  
Алекс Василич
Прописка
 
Аватар для Алекс Василич
 
Регистрация: 14.06.2012
Сообщений: 263
Сказал спасибо: 2
Сказали Спасибо 129 раз(а) в 103 сообщении(ях)
Алекс Василич на пути к лучшему
По умолчанию Re: Вопросы и замечания по топику - FAQ по PROTEUS

Сообщение от 123ksn Посмотреть сообщение
Значит это не переполнение стека, хотя все 8 строк в нем заняты и при дальнейшей трассировке(кажется это слово уместно), изменяются только первая и вторая строка.
Ааа, дак все верно, в стеке изначально может содержаться случайная информация.
А определяющим элементом является указатель вершины стека TOS, то есть того места, куда будет помещен адрес возврата. Если он доходит до самого нижнего уровня, то следующий переход по call или прерыванию переместит указатель стека в самую верхнюю позицию и потом именно туда запишется адрес возврата, заменяя старое значение. Это и будет переполнение стека (У PIC16F87X восьмиуровневый стек, то есть, максимум восемь вложенных вызовов).
При возврате (return, retlw, retfie) указатель стека будет перемещаться в обратном направлении. Но, если происходило переполнение на один уровень больше максимума, то в первой ячейке стека записан другой, замененный адрес возврата. Значит, программа не сможет вернуться в то место, откуда началась вся очередь вложенных вызовов и будет работать неправильно.

Если симулятор не выдал предупреждения о переполнении стека, значит, его не происходило. Следовательно, неправильная работа программы происходит по другой причине.

Вот так происходит переполнение стека (красным - лишний вызов, приводящий к переполнению. Синим - с этого места начнется сбой программы при возврате и ее зависание - будет повторяться по кругу) :
Код:
Work:	nop
	call raz
	nop
	goto Work
;-------------------
raz:	call dva
	return
;-------------------
dva:	call tri
	return
;-------------------
tri:	call chetyre
	return
;-------------------
chetyre:
	call pyat
	return
;-------------------
pyat:	call shest
	return
;-------------------
shest:	call sem
	return
;-------------------
sem:	call vosem
	return
;-------------------
vosem:	call devyat
	return
;-------------------
devyat:	nop
	return

Последний раз редактировалось Алекс Василич; 13.10.2012 в 07:32.
Алекс Василич вне форума  
Непрочитано 13.10.2012, 09:36  
123ksn
Вид на жительство
 
Аватар для 123ksn
 
Регистрация: 09.10.2012
Сообщений: 327
Сказал спасибо: 124
Сказали Спасибо 71 раз(а) в 38 сообщении(ях)
123ksn на пути к лучшему
По умолчанию Re: Вопросы и замечания по топику - FAQ по PROTEUS

Сообщение от Алекс Василич Посмотреть сообщение
в стеке изначально может содержаться случайная информация.
Даже подумать о таком не мог! Т.е. программу можно начинать с return и она может и заработать. Понятно, что компилятор не пропустит, но никто не мешает ручками HEX файл "поправить". Был уверен, что происходит стартовая очистка всех регистров. Спасибо.
123ksn вне форума  
Непрочитано 13.10.2012, 09:59  
Алекс Василич
Прописка
 
Аватар для Алекс Василич
 
Регистрация: 14.06.2012
Сообщений: 263
Сказал спасибо: 2
Сказали Спасибо 129 раз(а) в 103 сообщении(ях)
Алекс Василич на пути к лучшему
По умолчанию Re: Вопросы и замечания по топику - FAQ по PROTEUS

Как раз-таки компилятор и пропустит. Он не пропускает синтаксические ошибки, а вот структурные - пропустит без проблем.
Если начать с return, то программа работать будет, но непредсказуемо. Поскольку адрес из стека может быть совершенно неизвестным, то и переход произойдет в совершенно неизвестное место памяти программ, и кто его знает, что там окажется по этому адресу... Если переход будет выполнен в место, где уже нет программного кода, то счетчик команд досчитает до переполнения, сбросится и начнет заново. А в начале - return и опять вылет за пределы полезного кода.
О том, какие регистры очищаются при сбросе по включению питания, можно узнать из даташита контроллера. Скажу, что да-а-алеко не все.
Алекс Василич вне форума  
Сказали "Спасибо" Алекс Василич
123ksn (13.10.2012)
Непрочитано 03.11.2012, 08:47  
nanogul
Прохожий
 
Регистрация: 17.02.2010
Сообщений: 7
Сказал спасибо: 30
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
nanogul на пути к лучшему
По умолчанию Re: Вопросы и замечания по топику - FAQ по PROTEUS

Сообщение от Halex07
Если с компиляторами с языков высокого уровня,
где обычно присутствуют стандартные библиотеки для HD44780, такое случается очень редко, то
использование в собственных разработках чужих ассемблерных программ инициализации ЖКИ, а
уж тем более готовых HEX прошивок может надолго загнать вас в тупиковое положение. Причем,
это совсем не значит, что прошивки не рабочие. Реальные дисплеи на основе данных контроллеров
допускают некоторую вольность в обращении к ним. В результате программа, которая многократно
повторялась в железе, работает в симуляторе криво, а иногда и вообще не работает. Но, сами
понимаете, что написать такую математическую модель, которая будет автоматически
предусматривать, что некто Вася или Петя решил подсократить выдержку при инициализации со
стандартных для HD44780 более чем 40ms до 12ms, потому что у него под рукой был русский
МЭЛТ-овский дисплей практически невозможно, а уж тем более если часть команд инициализации
вообще отсутсвует. К счастью, такие опусы легко распознаются в ISIS, даже при отсутствии
исходника программы.
И как у нас может вывестись вторая строка, если двухстрочный режим
даже не задан (lines=1). Самое интересное, что в железе это работает!!! Исправно выводится текст
во вторую строку. Вот такой «запас прочности» у контроллера HD44780. Только вот вопрос – стоит 77
ли всегда надеяться на этот запас по любимому русскому принципу – «авось пронесет»? Вот и
получается, что у автора работает, еще у 11 человек тоже, а тот пресловутый тринадцатый, у
которого дисплей из «темного китайского подвала» остается в дураках.
Ну и законный вопрос – а можно ли в Протеусе увидеть нижнюю строку этого девайса?
Конечно можно, но без кардинального вмешательства в программу – никак.
Раз в железе прошивка работает(у автора, и не только),то для того чтобы, "лишь бы" и в протеусе она должным образом заработала, надо только изменить одну команду movlw b'00000001' на movlw b'00101000' или на movlw 0x28 ; Установки 4 битн. интерфейс 2 строки 5х7 точек.
Вот фрагмент исходника:
......
movlw b'00000010' ;Инициализация ЖКИ
call LEDcom
movlw b'00101000' ;здесь было у автора - movlw b'00000001'
call LEDcom
call Pausem
movlw b'00001100'
call LEDcom
.......
Это вроде бы по проще будет, чем добавлять всю правильную инициализацию по даташиту....видать она и вправду не нужна, (даже если и есть свободное место для команд).
Следовательно, теперь получается, что раз уж и в железе и в протеусе(уже) заработало.... то "тот пресловутый тринадцатый человек, у которого дисплей из «темного китайского подвала»" - "в дураках остатся" уже не должен. Хотя вряд ли бы он и смог раньше остатся в дураках если всё таки в железе у многих (у 11) работает
В железе не проверялось, но думаю что по логике тоже должно работать, ведь изменилась просто одна из посылаемых команд в заведомо рабочей прошивке, которая и заставила отображать вторую строку, в "строгом" и "даташитном" LCDALPHA.DLL из протеуса.
А вобщем FAQ - отличный,и очень полезный! Спасибо!
Вложения:
Тип файла: rar Eng_var_correct.rar (62.8 Кб, 58 просмотров)
__________________
Движения...тока...сопровождаются неслыханным наногулом слышимости.
nanogul вне форума  
 

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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Proteus общие вопросы dosikus Proteus 3363 04.07.2024 00:25
FAQ (ЧаВО) по PROTEUS для начинающих и не только dosikus Proteus 221 07.03.2024 22:45
Вопросы по PROTEUS-у Advanced_LAMER Proteus 372 19.09.2021 01:20
Вопросы по работе с Proteus dosikus Proteus 510 20.12.2007 18:48


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


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