Proteus: вопросы и ответы
Re: Proteus: вопросы и ответы
Engineer_Keen & Murka спасибо за помощь.
- Реклама
Re: Proteus: вопросы и ответы
Roman Venom писал(а): Вы неправильно меня поняли... Я не использую команды положить/извлечь. Прерывания, подпрограммы естессно присутствуют. Как же без них?И никаких недоразумений со стеком не было... Кстати ещё вот что. Были непонятные баги когда прерывания срабатывали во время операций положить/извлечь в ОЗУ.
Вот это-то и непонятно - как можно использовать прерывания ( подпрограммы еще с трудом могу представить ) без положить/извлечь ( push/pop ) ? Ведь начало любого прерывания - это
push r16
in r16,SREG
push r16
......
В отличие от x86 и многих других процессоров, AVR при входе в прерывание не сохраняет слово состояния, и это надо делать ручками, иначе после возврата из прерывания можем получить измененные N Z V C с непредсказуемыми последствиями. Ну и какими-то регистрами в обработчике Вы пользуетесь - после возврата им надо отдать прежнее содержимое. Мне неловко говорить Вам банальные вещи, наверняка вы это знаете, но как тогда без push/pop в обработчике ? Может, и проблемы с записью/чтением памяти тоже с этим связаны? За 15 лет занятий микроконтроллерами всякого было у меня, но такого - никогда.
nsl2004 писал(а): Протеус рулит.
И не только он
- Roman Venom
- Сверлит текстолит когтями
- Сообщения: 1135
- Зарегистрирован: Сб июл 11, 2009 18:42:21
- Откуда: Украина, г.Николаев
Re: Proteus: вопросы и ответы
Jack_A
На счёт непредсказуемого изменения флагов вы абсолютно правы, плюс это вроде как хороший тон программирования на ассемблере. Но я занимаюсь МК АВР относительно недавно, поэтому некоторые шалости допускаю. Что же касается проблем с записью/чтением, то я так и не понял почему они возникали, т.к. этот кусок кода был расположен не в подпрограммах(там и в прерываниях проблем не было), а в основном цикле.
Оффтоп, конечно. Но надеюсь поможет кому-то.
Вот это-то и непонятно - как можно использовать прерывания ( подпрограммы еще с трудом могу представить ) без положить/извлечь ( push/pop ) ? Ведь начало любого прерывания - это
push r16
in r16,SREG
push r16
......
В отличие от x86 и многих других процессоров, AVR при входе в прерывание не сохраняет слово состояния, и это надо делать ручками, иначе после возврата из прерывания можем получить измененные N Z V C с непредсказуемыми последствиями. Ну и какими-то регистрами в обработчике Вы пользуетесь - после возврата им надо отдать прежнее содержимое. Мне неловко говорить Вам банальные вещи, наверняка вы это знаете, но как тогда без push/pop в обработчике ? Может, и проблемы с записью/чтением памяти тоже с этим связаны? За 15 лет занятий микроконтроллерами всякого было у меня, но такого - никогда.
На счёт непредсказуемого изменения флагов вы абсолютно правы, плюс это вроде как хороший тон программирования на ассемблере. Но я занимаюсь МК АВР относительно недавно, поэтому некоторые шалости допускаю. Что же касается проблем с записью/чтением, то я так и не понял почему они возникали, т.к. этот кусок кода был расположен не в подпрограммах(там и в прерываниях проблем не было), а в основном цикле.
Оффтоп, конечно. Но надеюсь поможет кому-то.
Успех - императив!
- Engineer_Keen
- Друг Кота
- Сообщения: 3871
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Proteus: вопросы и ответы
Jack_A писал(а):Ведь начало любого прерывания - это
push r16
in r16,SREG
push r16
А я использую вместо стека для хранения SREG свободный регистр (если таковой имеется), так и стек не используется и быстрее код выполняется (in-out, вместо push,in,push-pop,out,pop).
Re: Proteus: вопросы и ответы
Engineer_Keen писал(а):Jack_A писал(а):Ведь начало любого прерывания - это
push r16
in r16,SREG
push r16
А я использую вместо стека для хранения SREG свободный регистр (если таковой имеется), так и стек не используется и быстрее код выполняется (in-out, вместо push,in,push-pop,out,pop).
Тоже вариант. Но надо быть уверенным, что этот регистр не изменится не только программой, но и самим железом в процессе работы. А выигрыша я что-то не вижу : IO в IO напрямую не перекинешь, все равно через РОН - в чем выигрыш?
- Реклама
Re: Proteus: вопросы и ответы
Roman Venom писал(а):Что же касается проблем с записью/чтением, то я так и не понял почему они возникали, т.к. этот кусок кода был расположен не в подпрограммах(там и в прерываниях проблем не было), а в основном цикле.
Оффтоп, конечно. Но надеюсь поможет кому-то.
А ему пофиг, где расположена инструкция - в основном цикле или в п/п. Прерывание - штука асинкронная, и где застанет, там и прервет, и если обработчик накосячен, то и в основном цикле бед натворит - будь здоров.
- Engineer_Keen
- Друг Кота
- Сообщения: 3871
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Proteus: вопросы и ответы
Jack_A писал(а): Тоже вариант. Но надо быть уверенным, что этот регистр не изменится не только программой, но и самим железом в процессе работы.
Ну так я и говорю, если есть свободный регистр. И контроль за неизменяемостью естественно обязателен. Но например прерывания друг друга не прерывают (если не извращаться с многоуровневыми) и в каждом обработчике можно спокойно это использовать.
Jack_A писал(а): А выигрыша я что-то не вижу : IO в IO напрямую не перекинешь, все равно через РОН - в чем выигрыш?
Код: Выделить всё
PUSH R16
IN R16,SREG
PUSH R16
...
POP R16
OUT SREG,R16
POP R16
;6 байт, 10 тактов
Код: Выделить всё
IN TMP_S,SREG
...
OUT SREG,TMP_S
;2 байта, 2 такта
- Coviraylhik
- Мучитель микросхем
- Сообщения: 420
- Зарегистрирован: Чт июн 03, 2010 23:06:12
Re: Proteus: вопросы и ответы
Здраствуйте, Подскажите, что не так смоделировано в proteuse дозатор жидкости индикация есть, предустановки литров выставляются , а счет не идет?

Проект в proteuse прилагаю.
Проект в proteuse прилагаю.
Некакого перимирия, Некаких мирных шагов навстречу и периговоров.
Re: Proteus: вопросы и ответы
Coviraylhik писал(а):Подскажите, что не так смоделировано в proteuse дозатор жидкости индикация есть, предустановки литров выставляются , а счет не идет?
1. В схеме нет четкого формирования импульсов. Это может быть критично для симуляции, в реальном устройстве должно работать.
2. Чтобы накапал литр должно поступить некоторое количество импульсов.
В Ваш проект добавил генератор импульсов (для наглядности 10 Гц) и счет работает.
- Вложения
-
- Дозатор.zip
- (21.72 КБ) 255 скачиваний
- Coviraylhik
- Мучитель микросхем
- Сообщения: 420
- Зарегистрирован: Чт июн 03, 2010 23:06:12
Re: Proteus: вопросы и ответы
С генератором стало понятно, что у меня не получалось.
На вход PD4 должно быть подано 40 импульсов , и тогда счёт уменьшается на единицу.
Устройство нормально моделируется.
Спасибо.
На вход PD4 должно быть подано 40 импульсов , и тогда счёт уменьшается на единицу.
Устройство нормально моделируется.
Спасибо.
Некакого перимирия, Некаких мирных шагов навстречу и периговоров.
Re: Proteus: вопросы и ответы
Engineer_Keen писал(а):Ну так я и говорю, если есть свободный регистр. И контроль за неизменяемостью естественно обязателен.
О, я сразу не въехал - я думал, речь идет о регистре НЕИСПОЛЬЗУЕМОГО ВНЕШНЕГО УСТРОЙСТВА ( я как-то и такой изврат пытался замутить, не помню уже - из каких побуждений ), а не о неиспользуемом РОН. Но тут нужно бдительно следить, потому что если приходится модифицировать код, можно забыть, что этот регистр "горячий"
Я думаю, нам простят, что слегка отклонились от Протеуса, но в конце-то концов - мы ведь не про футбол и не про девочек
Proteus: подключить к схеме питание 12В.
Добрый день всем, нарисовал схемку и нужно запитать к примеру 12В, как это сделать в Proteus? Спасибо.
Последний раз редактировалось linch Пт мар 18, 2011 17:43:56, всего редактировалось 1 раз.
- Engineer_Keen
- Друг Кота
- Сообщения: 3871
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Proteus: подключит к схеме питание 12В.
Вообще-то для протеуса отдельная тема есть... Но ладно. 8-я по счету пиктограмма слева - terminals mode, в ней выбираем power, ставим в схему, в свойствах пишем "+12V", все.
Re: Proteus: подключит к схеме питание 12В.
Engineer_Keen писал(а):Вообще-то для протеуса отдельная тема есть... Но ладно. 8-я по счету пиктограмма слева - terminals mode, в ней выбираем power, ставим в схему, в свойствах пишем "+12V", все.
Это та я знаю но там нет пункта свойства! Нашел батарею... Спасибо
Re: Proteus: подключит к схеме питание 12В.
linch писал(а):Это та я знаю но там нет пункта свойства!
У всех есть, а у Вас нету. Все по Proteus задают вопросы в специально созданной теме, а Вы новую заводите для вопроса, требующего ответа в несколько слов... Какая-то система уже вырисовывается...
- Вложения
-
- Edit.png
- (11.3 КБ) 1545 скачиваний
Re: Proteus: подключит к схеме питание 12В.
Сори что написал отдельную тему! Да делал я так как Вы показали, писал +12В, результата нет, вольтметр напряжения не видит
Спасибо! Разберусь.
Re: Proteus: подключит к схеме питание 12В.
linch писал(а):...Разберусь.
Должно получиться вот так:
- Вложения
-
- Power.png
- (1.67 КБ) 1491 скачивание
Re: Proteus: подключит к схеме питание 12В.
linch писал(а):Вот
Давайте уж проект, будем вместе разбираться.
Re: Proteus: подключит к схеме питание 12В.
Да это не совсем проект. Спасибо.
- Вложения
-
- GG.jpg
- (81.44 КБ) 493 скачивания
Последний раз редактировалось linch Пт мар 18, 2011 19:11:52, всего редактировалось 1 раз.


