Пожалуйста посоветуйте что можно сделать. Компиляция произведена в Atmel Studio. Симуляция проходит корректно в Proteus. Прошивка HEX файлов в МК также проходит успешно. Однако контроллер не работает. Пробовал прошивать через: USBASP китайскиы- успешно Arduino UNO - успешно
Программами: AVRDUDE Prog - успешно SinaProg 2.1 - успешно
Но все тшетно. Не работает. Напряжение и разводку на макетке проверил неоднократно. Чип был заменен на другой. Без результата.
Насколько я понимаю, маловероятно, что исходник что-то даст. Пассажир же уверяет, что симуляция норм. Нужна еще схема всего устройства и желательно его фото, и разумеется описание, что и как должно работать, и как именно не работает. Ждать ответа при исходных данных, которые дадены, нелепо. Причин может быть огромное количество. Еще можно посоветовать проверить хотя бы сам чип, залив в него простейший блинк, чтобы удостовериться хотя бы в исправности используемых линий портов.
Опишите, что происходит после asm("sleep");// уход в сон
Добавлено after 1 hour 14 minutes 50 seconds:
Код:
// основной отсчет времени ISR (WDT_vect) { if(period_time_out) period_time_out--; if(work_time_out) work_time_out--; WDTCR |= (1<<WDTIE); // разрешаем прерывания по ватчдогу. Иначе будет резет. }
Если попали в прерывание, то оно уже разрешено (в прерывании, обычно, запрещены прерывания, ну оно(прерывание) будет разрешено после выхода из прерывания), так что WDTCR |= (1<<WDTIE); не имеет смысла. Тут возможно надо сбросить флаг, типа мы обработали прерывание WDT и не надо проц. сбрасывать.
Опишите, что происходит после asm("sleep");// уход в сон
Добавлено after 1 hour 14 minutes 50 seconds:
Код:
// основной отсчет времени ISR (WDT_vect) { if(period_time_out) period_time_out--; if(work_time_out) work_time_out--; WDTCR |= (1<<WDTIE); // разрешаем прерывания по ватчдогу. Иначе будет резет. }
Если попали в прерывание, то оно уже разрешено (в прерывании, обычно, запрещены прерывания, ну оно(прерывание) будет разрешено после выхода из прерывания), так что WDTCR |= (1<<WDTIE); не имеет смысла. Тут возможно надо сбросить флаг, типа мы обработали прерывание WDT и не надо проц. сбрасывать.
Касательно вопроса WDTCR |= (1<<WDTIE) думаю ответ в DS (прикрепил) Опять же, я до глубоко разбора алгоритма не дошел. Решил пока запустить чип и начать разбираться и подстраивать под свои цели. Убедившись, что протеус прекрасно отсимулировал, со спокойной совестью перешел к прошивке. При подаче питания, на пару секунд загораеся led POMPA и все. Никакой реакции на кнопку.
Мне интересно, если кто-то уже успел собрать, тоже такая реакция после прошивки?
Если более понятно, куда попадает программа, после выхода из сна. В отладчике это легко отслеживается. В отладчике она ведет себя так, как вы задумали? Если так, то опишите что вы от нее ожидаете, т.е. что она должна делать.
кто умеет пользоваться отладчиком, не задает таких вопросов. ИМХО, конечно.
Добавлено after 13 minutes 15 seconds: Я бы на Reset конденсатор прилепил бы. С одним только резистором нет гарантии, что при подаче/сбое питания проинициализируется всё не кашей. Хотя, конечно, можно на BOR/POR рассчитывать... И инициализацию порта сделал бы полностью, с указанием кнопки, а то вот это вот: DDRB|=(1<<LED) | (1<<POMPA); не ахти, потому что к возможному мусору в DDRB добавляет две единички. Убрать хотя бы |
Добавлено after 4 minutes 55 seconds: Похоже, я догадался: здесь ватчдог будит
Похоже, что увидели суслика. Вот только проблема, после срабатывания прерывания собаки, проц уходит в ресет и обнуляет и по новой инициализирует переменную задержки. Я вообще не увидел настройку собаки до команды sei.
eduard_7 писал(а):
Касательно вопроса WDTCR |= (1<<WDTIE) думаю ответ в DS (прикрепил)
Если то, что подчеркнуто красным, то не попали.
Что поменять в железе потом, когда нормально заработает в протеусе.
Watchdog Interrupt — отдельный асинхронный таймер. Для упрощения я его не показывал на фрагменте схемы 6.1, хотя он там есть. Он ни от чего не зависит и тикает себе с невысокой частотой. В принципе, его можно использовать как дополнительный таймер. Например, выставить на 2 секунды, проснуться, отряхнуться, оглядеться, если ничего подозрительного не произошло, то заснуть опять.
Честно говоря, никогда не рассматривал ватчдог как будильник из сна.
Я только в процессе изучения МК. Учусь на роликах в YouTube на канале уважаемого мной Андрея Фролова (Andrey Frolov). Ролик называется Автомат полива комнатных растений на Attiny13 Перед тем, как обратится на форум, естественно написал Андрею, но к сожалению ответа пока неполучил. Надеюсь, что просмотрев ролик у форума прояснятся многие вопросы и можно будет продвинутся к пониманию проблемы.
"Это полезно для обеспечения безопасности сторожевого таймера при использовании прерывания. Чтобы остаться в Интер- rupt и System Reset Mode, WDTIE необходимо устанавливать после каждого прерывания. Однако это не должно выполняться внутри самой процедуры обслуживания прерываний, так как это может поставить под угрозу функцию безопасности режим сброса системы Watchdog. Если прерывание не будет выполнено до истечения следующего тайм-аута, Будет применен сброс системы."
Как заставить работать в режиме Interrupt Mode я знаю, а вот как в Interrupt and System Reset пока не нашел.
Возможно протеус не совсем корректно симулирует, так в коде есть
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения