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: вопросы и ответы
Присвойте терминалу Component Reference, например U4.ooogo писал(а):...если из проекта убрать виртуальный терминал, то генератор начинает нормально воспроизводить wav файл.
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
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Proteus: вопросы и ответы
1) Proteus не сбрасывает указатель стека после ресета;
2) В одном из циклов всегда срабатывает watchdog-ресет, возможно из-за неправильной эмуляции его периода;
3) После 3х сбросов из-за пунктов 1 и 2 стек ломается.
2) В одном из циклов всегда срабатывает watchdog-ресет, возможно из-за неправильной эмуляции его периода;
3) После 3х сбросов из-за пунктов 1 и 2 стек ломается.
Re: Proteus: вопросы и ответы
Если вы про CLKDIV8, что в Протеусе (по двойному клику на МК) - то там по умолчанию стоит: (0)Programmed.Engineer_Keen писал(а):Проблема решилась? У вас делитель частоты (фьюз CLKDIV8) включен, поэтому и частоты не те, и загрузка процессора совсем маленькая.skeef писал(а):Посмотрел - нет, загрузка 8-16% (при генерации в т.ч.)
Не знаю в чем дело конкретно в этом проекте, только что "собрал" схему из другой книги - генерация прямоугольного импульса также по таймеру - все совпадает (частота полупериоды ...)
В самой программе 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 КБ) 596 скачиваний
-
- s2.jpg
- настройка частотомера
- (66.16 КБ) 484 скачивания
-
- s1.jpg
- схема (остальное подключено к 4 разрядному LED и здесь не используется)
- (90.95 КБ) 565 скачиваний
Processor not found! Software emulation ...
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Proteus: вопросы и ответы
А вы не подумали, что ваша функцияskeef писал(а): Почему так?
PS
Учился получать нужную частоту, и все время получаю вдвое меньше((
Код: Выделить всё
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{ PORTD.5=~PORTD.5; }
Re: Proteus: вопросы и ответы
Стоп, при чем тут деление и таймер?Engineer_Keen писал(а): А вы не подумали, что ваша функцияидентична T-триггеру, который входные импульсы делит на 2?Код: Выделить всё
interrupt [TIM0_COMPA] void timer0_compa_isr(void) { PORTD.5=~PORTD.5; }
В данной функции, насколько я понимаю производится инверсия ПОРТА.
Команда инверсии, опять же ИМНО, выполняется за один такт (ну пусть даже за несколько тактов). Так почему же происходит деление частоты таймера?
Ну или как делать правильно, т.е. чтобы деление не происходило?
Processor not found! Software emulation ...
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 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;
...
ct - глобальная переременная текущий разряд
PCAT и PSEG - порты разрядов и сегментов соответственно
массив cat содержит коды для порта разрядов
bufer - массив содержит коды сегментов для выводимого текущего числа
- Вложения
-
- s4.jpg
- (211.15 КБ) 587 скачиваний
Processor not found! Software emulation ...
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Proteus: вопросы и ответы
Осциллограф к порту подсоедините и покажите осциллограмму или hex выложите.
Re: Proteus: вопросы и ответы
Вы абсолютно правы, не меандр. Надо теперь это все переварить ....Engineer_Keen писал(а):Осциллограф к порту подсоедините и покажите осциллограмму или hex выложите.
Спасибо за помощь
- Вложения
-
- files.rar
- (219.03 КБ) 257 скачиваний
Processor not found! Software emulation ...
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Proteus: вопросы и ответы
Вот наглядная иллюстрация того, о чем я говорил.
А вот что там у вас компилятор намутил, и почему он так выводом управляет, это надо разбираться...
А вот что там у вас компилятор намутил, и почему он так выводом управляет, это надо разбираться...
- Вложения
-
- test32.PNG
- (26.96 КБ) 489 скачиваний
Re: Proteus: вопросы и ответы
Да я уже понял, что на бога надейся, а верблюда привязывай
Спасибо
А еще такой вопрос по теме: шириной этого короткого импульса можно управлять используя программную задержку внутри прерывания, я правильно думаю?
Спасибо
А еще такой вопрос по теме: шириной этого короткого импульса можно управлять используя программную задержку внутри прерывания, я правильно думаю?
Processor not found! Software emulation ...
- Engineer_Keen
- Друг Кота
- Сообщения: 3872
- Зарегистрирован: Пт янв 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


