Proteus: вопросы и ответы

Обсуждаем цифровые устройства...
otest
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Re: Proteus: вопросы и ответы

Сообщение otest »

GND горчичник на симуляцию не влияет. Причина в том что пример для ARESa - разводка ПП.
Аватара пользователя
ooogo
Это не хвост, это антенна
Сообщения: 1306
Зарегистрирован: Вс янв 18, 2009 20:51:02

Re: Proteus: вопросы и ответы

Сообщение ooogo »

пытаюсь запустить проект отсюда http://steelrats.net/articles.php?article_id=194 генератор не воспроизводит wav файл
Изображение
пробовал запихнуть ему другой wav файл ведет себя аналогично, подскажите в чем может быть дело?
XP SP3, Proteus 7.9 SP1 ENG, если из проекта убрать виртуальный терминал, то генератор начинает нормально воспроизводить wav файл.
Soir
Друг Кота
Сообщения: 3956
Зарегистрирован: Ср окт 14, 2009 10:37:49
Откуда: Украина

Re: Proteus: вопросы и ответы

Сообщение Soir »

ooogo писал(а):...если из проекта убрать виртуальный терминал, то генератор начинает нормально воспроизводить wav файл.

Присвойте терминалу Component Reference, например U4.
firewall
Родился
Сообщения: 2
Зарегистрирован: Вт мар 13, 2012 18:04:34

Re: Proteus: вопросы и ответы

Сообщение firewall »

Добрый день ув. форумчане. В протеус работаю недавно, поэтому строго не судите. Уже недели две пытаюсь схему собрать (http://ra4nal.qrz.ru/battery.shtml), вроде почти собрал (по поводу правильности не знаю, т.к. некоторые элементы заменял) но ошибок куча. Ошики по мк. ATtiny15L, что-то вроде "program stack overflow", "program stack underflow"... Прошивку уже готовую брал, обязана быть правильной. Где я сделал ошибку? Уверен что ошибку сделал я)

п.с уж очень надеюсь на Вашу помощь!
Вложения
ЗУ-attiny15l.rar
(81.96 КБ) 208 скачиваний
Аватара пользователя
ooogo
Это не хвост, это антенна
Сообщения: 1306
Зарегистрирован: Вс янв 18, 2009 20:51:02

Re: Proteus: вопросы и ответы

Сообщение ooogo »

Soir писал(а):Присвойте терминалу Component Reference, например U4.

Спасибо, помогло, а то час просидел уже головой об стол начал биться! :))
Soir
Друг Кота
Сообщения: 3956
Зарегистрирован: Ср окт 14, 2009 10:37:49
Откуда: Украина

Re: Proteus: вопросы и ответы

Сообщение Soir »

firewall писал(а):Ошики по мк. ATtiny15L, что-то вроде "program stack overflow", "program stack underflow"... Прошивку уже готовую брал, обязана быть правильной. Где я сделал ошибку? Уверен что ошибку сделал я)

Не спешите посыпать себе голову пеплом.
Тут как раз похоже на ошибку в прошивке. Возможно в железе она и проскакивает безнаказанно (это в общем-то предупреждение), а Proteus здесь более строгий. Хотя, конечно, бывает и Proteus ошибается. По крайней мере, Вашей ошибки я здесь не вижу. Для более точного диагноза надо ковыряться в прошивке, только дело это хлопотное...
Аватара пользователя
Murka
Мучитель микросхем
Сообщения: 441
Зарегистрирован: Ср июн 03, 2009 00:20:21
Откуда: Новороссия ЛНР Рубежное -> РФ Калуга
Контактная информация:

Re: Proteus: вопросы и ответы

Сообщение Murka »

Soir, да там, кажись, в модели тини_15 глюк по стеку, я не долго долбался купил тини_13 и переделал всё под неё.
Политика России будет выглядеть неоднозначной до тех пор, пока не будет решен исход битвы.
Свободу можно завоевать, можно просрать, но высидеть свободу нельзя! ©
Всё, что меня не убивает - делает большую ошибку!
Не зли меня!!! :wink:
Soir
Друг Кота
Сообщения: 3956
Зарегистрирован: Ср окт 14, 2009 10:37:49
Откуда: Украина

Re: Proteus: вопросы и ответы

Сообщение Soir »

Murka писал(а):Soir, да там, кажись, в модели тини_15 глюк по стеку, я не долго долбался купил тини_13 и переделал всё под неё.

Вполне может быть.
Я проверил несколько прошивок взятых из сайта автора для этого МК, но для других устройств - та же история. Наобум взятых из Internet - такого нет.
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Proteus: вопросы и ответы

Сообщение Engineer_Keen »

1) Proteus не сбрасывает указатель стека после ресета;
2) В одном из циклов всегда срабатывает watchdog-ресет, возможно из-за неправильной эмуляции его периода;
3) После 3х сбросов из-за пунктов 1 и 2 стек ломается.
Аватара пользователя
skeef
Открыл глаза
Сообщения: 56
Зарегистрирован: Пт июн 17, 2011 12:49:59

Re: Proteus: вопросы и ответы

Сообщение skeef »

Engineer_Keen писал(а):
skeef писал(а):Посмотрел - нет, загрузка 8-16% (при генерации в т.ч.)
Не знаю в чем дело конкретно в этом проекте, только что "собрал" схему из другой книги - генерация прямоугольного импульса также по таймеру - все совпадает (частота полупериоды ...)

Проблема решилась? У вас делитель частоты (фьюз CLKDIV8) включен, поэтому и частоты не те, и загрузка процессора совсем маленькая.


Если вы про CLKDIV8, что в Протеусе (по двойному клику на МК) - то там по умолчанию стоит: (0)Programmed.
В самой программе CLKDIV8 вообще не упоминается. Менял на др значения - ничего не происходит

Кстати, сейчас вот проверил, если у контроллера менять частоту в Advanced Properties - Clock Frequency - то ничего не происходит, контроллер продолжает все относительно первой частоты. Т.е. чтобы изменить частоту контроллера приходится его выкидывать из схемы, вставлять новый и устанавливать уже ему нужную частоту. Тогда все работает верно. Это какая-то особенность Протеуса или нужно где-то что-то нажать?
Последний раз редактировалось skeef Ср мар 14, 2012 12:24:53, всего редактировалось 4 раза.
Processor not found! Software emulation ...
Аватара пользователя
skeef
Открыл глаза
Сообщения: 56
Зарегистрирован: Пт июн 17, 2011 12:49:59

Re: Proteus: вопросы и ответы

Сообщение skeef »

Вот код, во вложении простая схема и некоторые настройки
(тескт немного посокращал по вертикали)

Код: Выделить всё

#include <tiny2313.h>

interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{ PORTD.5=~PORTD.5;  }

void main(void)
{
#pragma optsize-
CLKPR=0x80;    CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

PORTA=0x00;  DDRA=0x00;
PORTB=0x00; DDRB=0xFF;
PORTD=0x00; DDRD=0x7F;

TCCR0A=0x02; TCCR0B=0x05;
TCNT0=0x00;
OCR0A=0x00; OCR0B=0x00;

TCCR1A = TCCR1B = TCNT1H = TCNT1L = ICR1H = ICR1L = OCR1AH = OCR1AL = OCR1BH = OCR1BL = 0x00;

GIMSK = MCUCR = 0x00;
TIMSK=0x01;
USICR=0x00;
ACSR=0x80;

#asm("sei")
while (1)   { };
}

Размышления:
Кварц 4MHz. Делю делителем до 3906 kHz (TCCR0A=0x02; TCCR0B=0x05;). Таймер более не считает (OCR0A=0x00; OCR0B=0x00;), т.е. сразу происходит прерывание. Частота на выходе должна составлять 3906, а частотомер показывает ровно вдвое меньше: 3906/2=1953

Почему так?
PS
Учился получать нужную частоту, и все время получаю вдвое меньше :(((
Вложения
s3.jpg
настройка контроллера
(107.36 КБ) 595 скачиваний
s2.jpg
настройка частотомера
(66.16 КБ) 484 скачивания
s1.jpg
схема (остальное подключено к 4 разрядному LED и здесь не используется)
(90.95 КБ) 565 скачиваний
Processor not found! Software emulation ...
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Proteus: вопросы и ответы

Сообщение Engineer_Keen »

skeef писал(а):Почему так?
PS
Учился получать нужную частоту, и все время получаю вдвое меньше :(((

А вы не подумали, что ваша функция

Код: Выделить всё

interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{ PORTD.5=~PORTD.5;  }

идентична T-триггеру, который входные импульсы делит на 2?
Аватара пользователя
skeef
Открыл глаза
Сообщения: 56
Зарегистрирован: Пт июн 17, 2011 12:49:59

Re: Proteus: вопросы и ответы

Сообщение skeef »

Engineer_Keen писал(а):А вы не подумали, что ваша функция

Код: Выделить всё

interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{ PORTD.5=~PORTD.5;  }

идентична T-триггеру, который входные импульсы делит на 2?

Стоп, при чем тут деление и таймер?
В данной функции, насколько я понимаю производится инверсия ПОРТА.
Команда инверсии, опять же ИМНО, выполняется за один такт (ну пусть даже за несколько тактов). Так почему же происходит деление частоты таймера?
Ну или как делать правильно, т.е. чтобы деление не происходило?
Processor not found! Software emulation ...
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Proteus: вопросы и ответы

Сообщение Engineer_Keen »

Таймер ваш "совпадает" с частотой F, с этой-же частотой происходит инверсия пина PD5. Первое совпадение - пин в 1, второе - в 0, третье в 1, четвертое в 0. Вот и получается что на нем частота в 2 раза меньше. И не важно за сколько тактов происходит инверсия (таки да, за 1 - ASM("SBI PIND,PD5")).
Можете убедиться: приведите функцию к виду пин в 1 - ASM("NOP") - пин в 0, и частота будет как рассчитывали, но уже не меандр. Хотите меандр - делайте частоту в 2 раза больше.

На будущее. Не обязательно для такого режима использовать прерывание. Достаточно правильно настроить TCCR0A (старшие 4 бита, см. таблицу в даташите) и контроллер сам будет дергать ногой при совпадении - экономим память и такты (особенно если нужны частоты повыше).
Аватара пользователя
skeef
Открыл глаза
Сообщения: 56
Зарегистрирован: Пт июн 17, 2011 12:49:59

Re: Proteus: вопросы и ответы

Сообщение skeef »

Engineer_Keen писал(а):Таймер ваш "совпадает" с частотой F, с этой-же частотой происходит инверсия пина PD5. Первое совпадение - пин в 1, второе - в 0, третье в 1, четвертое в 0. Вот и получается что на нем частота в 2 раза меньше. И не важно за сколько тактов происходит инверсия (таки да, за 1 - ASM("SBI PIND,PD5")).
Можете убедиться: приведите функцию к виду пин в 1 - ASM("NOP") - пин в 0, и частота будет как рассчитывали, не уже не меандр.

Не привык спорить с ГУРУ но, как там .... истина дороже :)
Тогда как вы объясните такой феномен:

Код: Выделить всё

interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
PORTD.5=!PORTD.5;
      PCAT = cat[ct];
      PSEG = bufer[ct];
      ct++;
      if(ct>3) 
         ct = 0;
}

...

TCCR0A=0x02;
TCCR0B=0x05;
TCNT0=0x00;
OCR0A=0x00;
OCR0B=0x00;

...

Я добавил управление динамической индикацией (более ничего не менял) и частота PORTD.5 стала 3906?
ct - глобальная переременная текущий разряд
PCAT и PSEG - порты разрядов и сегментов соответственно
массив cat содержит коды для порта разрядов
bufer - массив содержит коды сегментов для выводимого текущего числа
Вложения
s4.jpg
(211.15 КБ) 587 скачиваний
Processor not found! Software emulation ...
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Proteus: вопросы и ответы

Сообщение Engineer_Keen »

Осциллограф к порту подсоедините и покажите осциллограмму или hex выложите.
Аватара пользователя
skeef
Открыл глаза
Сообщения: 56
Зарегистрирован: Пт июн 17, 2011 12:49:59

Re: Proteus: вопросы и ответы

Сообщение skeef »

Engineer_Keen писал(а):Осциллограф к порту подсоедините и покажите осциллограмму или hex выложите.

Вы абсолютно правы, не меандр. Надо теперь это все переварить ....
Спасибо за помощь :)
Вложения
files.rar
(219.03 КБ) 255 скачиваний
Processor not found! Software emulation ...
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Proteus: вопросы и ответы

Сообщение Engineer_Keen »

Вот наглядная иллюстрация того, о чем я говорил.
А вот что там у вас компилятор намутил, и почему он так выводом управляет, это надо разбираться...
Вложения
test32.PNG
(26.96 КБ) 488 скачиваний
Аватара пользователя
skeef
Открыл глаза
Сообщения: 56
Зарегистрирован: Пт июн 17, 2011 12:49:59

Re: Proteus: вопросы и ответы

Сообщение skeef »

Да я уже понял, что на бога надейся, а верблюда привязывай :)
Спасибо :)
А еще такой вопрос по теме: шириной этого короткого импульса можно управлять используя программную задержку внутри прерывания, я правильно думаю?
Processor not found! Software emulation ...
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3868
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Re: Proteus: вопросы и ответы

Сообщение Engineer_Keen »

В принципе правильно (хотя в прерывании желательно задержек не делать), но вот я сейчас смотрю дизассемблированный кусок кода и вижу что там какой-то пипец :facepalm:
Ну для начала, компилятор оказывается не знает, что у тини2313 порт можно переключать регистром PIN и вместо одной команды фигачит:

Код: Выделить всё

SBIS $12,$05
RJMP $+06
CBI $12,5
RJMP $+4
SBI $12,5

Дальше он там что-то читает из флеша и в итоге PD5 все-равно ставится в 1, я так понимаю это из-за того, что вы определили на управление индикатором ноги порта D (PCAT?), но при выводе не разделяете из маской. Наверняка если вы перепишите массив cat чтобы в нем неиспользованные биты были не 1, а 0, то осциллограмма изменится на: _|_|_|_|_|_|_ :))) В общем нужно делать что-то вроде: PCAT = (PORTD & 0x70)|cat[ct], и чтобы в массиве cat были 0 в старших 4 разрядах.
Ответить

Вернуться в «Цифровая техника»