Карма: 12
Рейтинг сообщений: 38
Зарегистрирован: Вс май 21, 2006 16:07:59 Сообщений: 1230 Откуда: Алтай
Рейтинг сообщения:0
С АВР сталкиваюсь редко, и вот понадобилось на время уходить в сон. Накидал тестовую программу в Студии, где мигает светодиод, а во время паузы между переключениями МК должен засыпать. И вот что то не могу разобраться с просыпанием, что делаю не так. Буду признателен реальной помощи в разъяснении проблемы. Проект в Протеусе прилагаю
Код:
//ATtiny13 SLEEP_test #include <avr/io.h> #include <avr/wdt.h> // здесь организована работа с ватчдогом #include <avr/sleep.h> // здесь описаны режимы сна #include <avr/interrupt.h> // работа с прерываниями #include "bitop.h" #define F_CPU 1200000UL //Частота генератора 9600000/8 #include <util/delay.h> //---------- #define SIG 2 //---------- unsigned char FLAG = 0; //---------- void CPU_Init(void); void sleep_wdog (void); /***********************************/
Опишу словами, что нужно сделать… после конфигурации портов конфигурируете работу сторожевого таймера. А именно – настраиваете необходимый предделитель; - разрешаете прерывание по данному таймеру; - разрешаете работу данного таймера; - очищаете флаг прерывания данного таймера; производите сброс данного таймера и разрешаете глобальные прерывания. В теле программы уходите в глубокий сон. В прерывании по сторожевому таймеру (Watchdog Time-Out) повторно разрешаете прерывание (записываете 1 в бит WDTIE регистра WDTCR), затем переключаете светодиод и выходите из прерывания. А так как в теле программы выполняется только уход в сон – МК вновь засыпает до следующего пробуждения. Если в прерывании по сторожевому таймеру не разрешить повторно прерывание то после выхода из прерывания МК перезагрузится (произойдёт reset МК).
Всё это делал, эффект - ноль. Нашел схожий примерчик для ардуины, якобы рабочий вариант. Переделал его под студию, эффект тот же. Независимо от настройки ВДТ, при выходе из прерывания - резет МК .
К выводу РВ3 (2) и РВ4 (3) подключены светодиоды. Светодиод РВ3 будет переключатся (триггерный режим) по прерыванию сторожевого таймера. Светодиод РВ4 будет зажигаться при старте программы (такая конфигурация портов), а выключатся при первом пробуждении после выхода из прерывания по сторожевому таймеру. Это сделано для того, чтобы увидеть сбрасывается МК по таймеру или просто пробуждается как задумано.
Если данная прошивка будет работать как написано выше, значит ищите косяк в своём алгоритме. Если будет работать криво, значит необходимо заменить МК.
Давайте проверим так ли это… залейте мой вариант прошивки (по выше изложенному алгоритму).
К выводу РВ3 (2) и РВ4 (3) подключены светодиоды. Светодиод РВ3 будет переключатся (триггерный режим) по прерыванию сторожевого таймера. Светодиод РВ4 будет зажигаться при старте программы (такая конфигурация портов), а выключатся при первом пробуждении после выхода из прерывания по сторожевому таймеру. Это сделано для того, чтобы увидеть сбрасывается МК по таймеру или просто пробуждается как задумано.
Фото картинки Протеуса, эффекта нет, как при WDTON =1, так и = 0
Вы проверяли у себя в симуляторе или "железе"? Вечером могу попробовать проверить в железе, но что то сомневаюсь, что будет по другому чем в Протеусе. Сейчас пробовал с одним диодом такой вариант, картинка как у вас на выводе.
Ваш вариант в "железе" работает , а вот в Протеусе не хочет. Попробую этот вариант сделать на Си, так хотел внедрить этот кусок в код для игрушки. Сова у меня стоит в прихожей, при появлении человека плавно разгораются и тухнут глазки. Старенького повербанка хватает на месяц, вот и задумал во время всех временных задержек, а их достаточно, чтобы тинька засыпала. Может и аккумулятора тогда на полгода хватит Вывод: В Протеусе проверять связку вачдога и слипа нельзя, врёт безбожно
Симуляторами не пользуюсь, так как однажды протеус "взорвал мозг"... с тех пор проверяю исключительно на железе… свою прошивку также проверил на своей девборде... замечаний не обнаружил, светодиод на РВ3 мигает как задумано. МК не перегружается от сторожевого таймера, а только просыпается как и положено.
свою прошивку также проверил на своей девборде... замечаний не обнаружил, светодиод на РВ3 мигает как задумано. МК не перегружается от сторожевого таймера, а только просыпается как и положено.
Ваш вариант в железе работает А исходник ваш можно посмотреть?
Заголовок сообщения: Re: Вопрос по SLEEP в Тиньке13
Добавлено: Чт янв 13, 2022 09:45:35
Сверлит текстолит когтями
Карма: 12
Рейтинг сообщений: 38
Зарегистрирован: Вс май 21, 2006 16:07:59 Сообщений: 1230 Откуда: Алтай
Рейтинг сообщения:0
Всех форумчан принявших участие в обсуждении проблемы, благодарю за дельную помощь и советы. Проблема решена, ошибки найдены и устранены. Теперь вместо 1.5 мА в обычном режиме работы, ток МК в состоянии сна снижен до 4 мкА.
В моей схеме, с одним светодиодом, если при выключенном светодиоде потребление - 1,5мА, то при вЫключеном светодиоде и уходе на это время МК в сон - 5мкА.
Сейчас этот форум просматривают: veso74 и гости: 32
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения