Proteus: вопросы и ответы
Re: Proteus: вопросы и ответы
GND горчичник на симуляцию не влияет. Причина в том что пример для ARESa - разводка ПП.
Re: Proteus: вопросы и ответы
пытаюсь запустить проект отсюда http://steelrats.net/articles.php?article_id=194 генератор не воспроизводит wav файл

пробовал запихнуть ему другой wav файл ведет себя аналогично, подскажите в чем может быть дело?
XP SP3, Proteus 7.9 SP1 ENG, если из проекта убрать виртуальный терминал, то генератор начинает нормально воспроизводить wav файл.

пробовал запихнуть ему другой wav файл ведет себя аналогично, подскажите в чем может быть дело?
XP SP3, Proteus 7.9 SP1 ENG, если из проекта убрать виртуальный терминал, то генератор начинает нормально воспроизводить wav файл.
Re: Proteus: вопросы и ответы
ooogo писал(а):...если из проекта убрать виртуальный терминал, то генератор начинает нормально воспроизводить wav файл.
Присвойте терминалу Component Reference, например U4.
Re: Proteus: вопросы и ответы
Добрый день ув. форумчане. В протеус работаю недавно, поэтому строго не судите. Уже недели две пытаюсь схему собрать (http://ra4nal.qrz.ru/battery.shtml), вроде почти собрал (по поводу правильности не знаю, т.к. некоторые элементы заменял) но ошибок куча. Ошики по мк. ATtiny15L, что-то вроде "program stack overflow", "program stack underflow"... Прошивку уже готовую брал, обязана быть правильной. Где я сделал ошибку? Уверен что ошибку сделал я)
п.с уж очень надеюсь на Вашу помощь!
п.с уж очень надеюсь на Вашу помощь!
- Вложения
-
- ЗУ-attiny15l.rar
- (81.96 КБ) 208 скачиваний
Re: Proteus: вопросы и ответы
Soir писал(а):Присвойте терминалу Component Reference, например U4.
Спасибо, помогло, а то час просидел уже головой об стол начал биться!
Re: Proteus: вопросы и ответы
firewall писал(а):Ошики по мк. ATtiny15L, что-то вроде "program stack overflow", "program stack underflow"... Прошивку уже готовую брал, обязана быть правильной. Где я сделал ошибку? Уверен что ошибку сделал я)
Не спешите посыпать себе голову пеплом.
Тут как раз похоже на ошибку в прошивке. Возможно в железе она и проскакивает безнаказанно (это в общем-то предупреждение), а Proteus здесь более строгий. Хотя, конечно, бывает и Proteus ошибается. По крайней мере, Вашей ошибки я здесь не вижу. Для более точного диагноза надо ковыряться в прошивке, только дело это хлопотное...
- Murka
- Мучитель микросхем
- Сообщения: 441
- Зарегистрирован: Ср июн 03, 2009 00:20:21
- Откуда: Новороссия ЛНР Рубежное -> РФ Калуга
- Контактная информация:
Re: Proteus: вопросы и ответы
Soir, да там, кажись, в модели тини_15 глюк по стеку, я не долго долбался купил тини_13 и переделал всё под неё.
Политика России будет выглядеть неоднозначной до тех пор, пока не будет решен исход битвы.
Свободу можно завоевать, можно просрать, но высидеть свободу нельзя! ©
Всё, что меня не убивает - делает большую ошибку!
Не зли меня!!!
Свободу можно завоевать, можно просрать, но высидеть свободу нельзя! ©
Всё, что меня не убивает - делает большую ошибку!
Не зли меня!!!
Re: Proteus: вопросы и ответы
Murka писал(а):Soir, да там, кажись, в модели тини_15 глюк по стеку, я не долго долбался купил тини_13 и переделал всё под неё.
Вполне может быть.
Я проверил несколько прошивок взятых из сайта автора для этого МК, но для других устройств - та же история. Наобум взятых из Internet - такого нет.
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Proteus: вопросы и ответы
1) Proteus не сбрасывает указатель стека после ресета;
2) В одном из циклов всегда срабатывает watchdog-ресет, возможно из-за неправильной эмуляции его периода;
3) После 3х сбросов из-за пунктов 1 и 2 стек ломается.
2) В одном из циклов всегда срабатывает watchdog-ресет, возможно из-за неправильной эмуляции его периода;
3) После 3х сбросов из-за пунктов 1 и 2 стек ломается.
Re: Proteus: вопросы и ответы
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 ...
Re: Proteus: вопросы и ответы
Вот код, во вложении простая схема и некоторые настройки
(тескт немного посокращал по вертикали)
Размышления:
Кварц 4MHz. Делю делителем до 3906 kHz (TCCR0A=0x02; TCCR0B=0x05;). Таймер более не считает (OCR0A=0x00; OCR0B=0x00;), т.е. сразу происходит прерывание. Частота на выходе должна составлять 3906, а частотомер показывает ровно вдвое меньше: 3906/2=1953
Почему так?
PS
Учился получать нужную частоту, и все время получаю вдвое меньше
((
(тескт немного посокращал по вертикали)
Код: Выделить всё
#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: вопросы и ответы
skeef писал(а):Почему так?
PS
Учился получать нужную частоту, и все время получаю вдвое меньше((
А вы не подумали, что ваша функция
Код: Выделить всё
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{ PORTD.5=~PORTD.5; }
идентична T-триггеру, который входные импульсы делит на 2?
Re: Proteus: вопросы и ответы
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: вопросы и ответы
Таймер ваш "совпадает" с частотой F, с этой-же частотой происходит инверсия пина PD5. Первое совпадение - пин в 1, второе - в 0, третье в 1, четвертое в 0. Вот и получается что на нем частота в 2 раза меньше. И не важно за сколько тактов происходит инверсия (таки да, за 1 - ASM("SBI PIND,PD5")).
Можете убедиться: приведите функцию к виду пин в 1 - ASM("NOP") - пин в 0, и частота будет как рассчитывали, но уже не меандр. Хотите меандр - делайте частоту в 2 раза больше.
На будущее. Не обязательно для такого режима использовать прерывание. Достаточно правильно настроить TCCR0A (старшие 4 бита, см. таблицу в даташите) и контроллер сам будет дергать ногой при совпадении - экономим память и такты (особенно если нужны частоты повыше).
Можете убедиться: приведите функцию к виду пин в 1 - ASM("NOP") - пин в 0, и частота будет как рассчитывали, но уже не меандр. Хотите меандр - делайте частоту в 2 раза больше.
На будущее. Не обязательно для такого режима использовать прерывание. Достаточно правильно настроить TCCR0A (старшие 4 бита, см. таблицу в даташите) и контроллер сам будет дергать ногой при совпадении - экономим память и такты (особенно если нужны частоты повыше).
Re: Proteus: вопросы и ответы
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: вопросы и ответы
Осциллограф к порту подсоедините и покажите осциллограмму или hex выложите.
Re: Proteus: вопросы и ответы
Engineer_Keen писал(а):Осциллограф к порту подсоедините и покажите осциллограмму или hex выложите.
Вы абсолютно правы, не меандр. Надо теперь это все переварить ....
Спасибо за помощь
- Вложения
-
- files.rar
- (219.03 КБ) 255 скачиваний
Processor not found! Software emulation ...
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Proteus: вопросы и ответы
Вот наглядная иллюстрация того, о чем я говорил.
А вот что там у вас компилятор намутил, и почему он так выводом управляет, это надо разбираться...
А вот что там у вас компилятор намутил, и почему он так выводом управляет, это надо разбираться...
- Вложения
-
- test32.PNG
- (26.96 КБ) 488 скачиваний
Re: Proteus: вопросы и ответы
Да я уже понял, что на бога надейся, а верблюда привязывай
Спасибо
А еще такой вопрос по теме: шириной этого короткого импульса можно управлять используя программную задержку внутри прерывания, я правильно думаю?
Спасибо
А еще такой вопрос по теме: шириной этого короткого импульса можно управлять используя программную задержку внутри прерывания, я правильно думаю?
Processor not found! Software emulation ...
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Proteus: вопросы и ответы
В принципе правильно (хотя в прерывании желательно задержек не делать), но вот я сейчас смотрю дизассемблированный кусок кода и вижу что там какой-то пипец
Ну для начала, компилятор оказывается не знает, что у тини2313 порт можно переключать регистром PIN и вместо одной команды фигачит:
Дальше он там что-то читает из флеша и в итоге PD5 все-равно ставится в 1, я так понимаю это из-за того, что вы определили на управление индикатором ноги порта D (PCAT?), но при выводе не разделяете из маской. Наверняка если вы перепишите массив cat чтобы в нем неиспользованные биты были не 1, а 0, то осциллограмма изменится на: _|_|_|_|_|_|_
В общем нужно делать что-то вроде: PCAT = (PORTD & 0x70)|cat[ct], и чтобы в массиве cat были 0 в старших 4 разрядах.
Ну для начала, компилятор оказывается не знает, что у тини2313 порт можно переключать регистром PIN и вместо одной команды фигачит:
Код: Выделить всё
SBIS $12,$05
RJMP $+06
CBI $12,5
RJMP $+4
SBI $12,5
Дальше он там что-то читает из флеша и в итоге PD5 все-равно ставится в 1, я так понимаю это из-за того, что вы определили на управление индикатором ноги порта D (PCAT?), но при выводе не разделяете из маской. Наверняка если вы перепишите массив cat чтобы в нем неиспользованные биты были не 1, а 0, то осциллограмма изменится на: _|_|_|_|_|_|_