Страница 1 из 1

Вопрос по SLEEP в Тиньке13

Добавлено: Пн янв 10, 2022 20:18:13
wws63
С АВР сталкиваюсь редко, и вот понадобилось на время уходить в сон.
Накидал тестовую программу в Студии, где мигает светодиод, а во время паузы между переключениями МК должен засыпать. И вот что то не могу разобраться с просыпанием, что делаю не так.
Буду признателен реальной помощи в разъяснении проблемы.
Проект в Протеусе прилагаю

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

//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);
/***********************************/

ISR(WDT_vect)
    {
		clrbit (WDTCR, WDTIE); // запрет прерывания по ватчдогу
	}
/***********************************************/	
int main(void)
{
	CPU_Init();
	while(1)
	{
		setbit(PORTB, SIG);
		sleep_wdog ();
		clrbit (PORTB, SIG);
		sleep_wdog ();
	}
		
		
 } // окончание бесконечного цикла	
//*************************************************		

		void CPU_Init(void) // инициализация порта
		{
			PORTB = 0b00000000;
			DDRB = 0b00010100; 
		}
//*********************************************************************	
 void WDT_Init(void)
    {
	 wdt_reset(); // сбрасываем	
	 wdt_enable(WDTO_1S); // настройка прескалера на 1s и разрешение работы WDT
	 setbit(WDTCR,WDTIE); // разрешить прерывание от WDT
	 sei(); // enable global interrupts
	 set_sleep_mode(SLEEP_MODE_IDLE); //  
	}        
//*********************************************************************	
 void sleep_wdog (void)
      {
		wdt_reset(); // сбрасываем
		wdt_enable(WDTO_1S); // настройка прескалера на 1s и разрешение работы WDT
		setbit(WDTCR,WDTIE); // разрешить прерывание от WDT
		sei(); // enable global interrupts 
			 
		set_sleep_mode(SLEEP_MODE_IDLE);
		sleep_enable();
		sleep_cpu();
	  }


Re: Вопрос по SLEEP в Тиньке13

Добавлено: Пн янв 10, 2022 21:44:29
VNS
Опишу словами, что нужно сделать… после конфигурации портов конфигурируете работу сторожевого таймера. А именно – настраиваете необходимый предделитель; - разрешаете прерывание по данному таймеру; - разрешаете работу данного таймера; - очищаете флаг прерывания данного таймера; производите сброс данного таймера и разрешаете глобальные прерывания. В теле программы уходите в глубокий сон. В прерывании по сторожевому таймеру (Watchdog Time-Out) повторно разрешаете прерывание (записываете 1 в бит WDTIE регистра WDTCR), затем переключаете светодиод и выходите из прерывания. А так как в теле программы выполняется только уход в сон – МК вновь засыпает до следующего пробуждения. Если в прерывании по сторожевому таймеру не разрешить повторно прерывание то после выхода из прерывания МК перезагрузится (произойдёт reset МК). :)

Re: Вопрос по SLEEP в Тиньке13

Добавлено: Вт янв 11, 2022 18:26:44
wws63
[uquote="VNS",url="/forum/viewtopic.php?p=4158713#p4158713"]Опишу словами, что нужно сделать…[/uquote]
Всё это делал, эффект - ноль.
Нашел схожий примерчик для ардуины, якобы рабочий вариант. Переделал его под студию, эффект тот же. Независимо от настройки ВДТ, при выходе из прерывания - резет МК . :?

Re: Вопрос по SLEEP в Тиньке13

Добавлено: Вт янв 11, 2022 19:15:59
akl
Может FUSE-бит WDTON установлен?

Re: Вопрос по SLEEP в Тиньке13

Добавлено: Вт янв 11, 2022 20:25:41
VNS
[uquote="wws63",url="/forum/viewtopic.php?p=4159369#p4159369"]Всё это делал, эффект - ноль.[/uquote]
Значит, что-то сделали не так, или чего-то не учли... :dont_know: И немаловажно, как напомнил akl необходимо проверить бит WDTON (таймер должен быть отключён).

Давайте проверим так ли это… залейте мой вариант прошивки (по выше изложенному алгоритму).
test.hex
(259 байт) 109 скачиваний
К выводу РВ3 (2) и РВ4 (3) подключены светодиоды. Светодиод РВ3 будет переключатся (триггерный режим) по прерыванию сторожевого таймера. Светодиод РВ4 будет зажигаться при старте программы (такая конфигурация портов), а выключатся при первом пробуждении после выхода из прерывания по сторожевому таймеру. Это сделано для того, чтобы увидеть сбрасывается МК по таймеру или просто пробуждается как задумано.

Если данная прошивка будет работать как написано выше, значит ищите косяк в своём алгоритме. Если будет работать криво, значит необходимо заменить МК.

Re: Вопрос по SLEEP в Тиньке13

Добавлено: Ср янв 12, 2022 04:14:23
wws63
[uquote="akl",url="/forum/viewtopic.php?p=4159399#p4159399"]Может FUSE-бит WDTON установлен?[/uquote]
Кстати, что при установленном, что при сброшенном WDTON, эффект тот же, как в "железе", так и в Протеусе. :shock:

Добавлено after 13 minutes 18 seconds:
test.JPG
(199.49 КБ) 87 скачиваний
[uquote="VNS",url="/forum/viewtopic.php?p=4159452#p4159452"]Давайте проверим так ли это… залейте мой вариант прошивки (по выше изложенному алгоритму).

К выводу РВ3 (2) и РВ4 (3) подключены светодиоды. Светодиод РВ3 будет переключатся (триггерный режим) по прерыванию сторожевого таймера. Светодиод РВ4 будет зажигаться при старте программы (такая конфигурация портов), а выключатся при первом пробуждении после выхода из прерывания по сторожевому таймеру. Это сделано для того, чтобы увидеть сбрасывается МК по таймеру или просто пробуждается как задумано.[/uquote]
Фото картинки Протеуса, эффекта нет, как при WDTON =1, так и = 0
test.JPG
(199.49 КБ) 87 скачиваний
Вы проверяли у себя в симуляторе или "железе"? Вечером могу попробовать проверить в железе, но что то сомневаюсь, что будет по другому чем в Протеусе.
Сейчас пробовал с одним диодом такой вариант, картинка как у вас на выводе.

Re: Вопрос по SLEEP в Тиньке13

Добавлено: Ср янв 12, 2022 08:15:54
akl
Попробовал в железе нижеследующую программу. Режим POWER DOWN, интервал 1сек, ток потребления <5мкА. Переключатель светика на PB0/5 лапа.
SLEEP_PWD_1SEC.zip
(1.09 КБ) 108 скачиваний
Запрограммировал WDTON. На выходе ничего при токе потребления 160мкА. Вернул обратно.

Re: Вопрос по SLEEP в Тиньке13

Добавлено: Ср янв 12, 2022 10:04:42
wws63
[uquote="akl",url="/forum/viewtopic.php?p=4159625#p4159625"]Попробовал в железе нижеследующую программу[/uquote]
Ваш вариант в "железе" работает :beer: , а вот в Протеусе не хочет.
Попробую этот вариант сделать на Си, так хотел внедрить этот кусок в код для игрушки. Сова у меня стоит в прихожей, при появлении человека плавно разгораются и тухнут глазки. Старенького повербанка хватает на месяц, вот и задумал во время всех временных задержек, а их достаточно, чтобы тинька засыпала. Может и аккумулятора тогда на полгода хватит :)
Вывод: В Протеусе проверять связку вачдога и слипа нельзя, врёт безбожно :(

Re: Вопрос по SLEEP в Тиньке13

Добавлено: Ср янв 12, 2022 10:20:22
VNS
[uquote="wws63",url="/forum/viewtopic.php?p=4159602#p4159602"]Вы проверяли у себя в симуляторе или "железе"?[/uquote]
Симуляторами не пользуюсь, так как однажды протеус "взорвал мозг"... с тех пор проверяю исключительно на железе… свою прошивку также проверил на своей девборде... замечаний не обнаружил, светодиод на РВ3 мигает как задумано. МК не перегружается от сторожевого таймера, а только просыпается как и положено.

Re: Вопрос по SLEEP в Тиньке13

Добавлено: Ср янв 12, 2022 11:19:24
wws63
[uquote="VNS",url="/forum/viewtopic.php?p=4159685#p4159685"]свою прошивку также проверил на своей девборде... замечаний не обнаружил, светодиод на РВ3 мигает как задумано. МК не перегружается от сторожевого таймера, а только просыпается как и положено.[/uquote]
Ваш вариант в железе работает :beer:
А исходник ваш можно посмотреть?

Re: Вопрос по SLEEP в Тиньке13

Добавлено: Ср янв 12, 2022 14:31:54
VNS
[uquote="wws63",url="/forum/viewtopic.php?p=4159729#p4159729"]А исходник ваш можно посмотреть?[/uquote]
Можно…
test.png
(29.78 КБ) 101 скачивание
Только он Вам ничего не скажет, так как мы пишем на разных языках. :) Всё что я сделал, описано выше простыми словами. :beer:

Re: Вопрос по SLEEP в Тиньке13

Добавлено: Чт янв 13, 2022 09:45:35
wws63
Всех форумчан принявших участие в обсуждении проблемы, благодарю за дельную помощь и советы.
Проблема решена, ошибки найдены и устранены. Теперь вместо 1.5 мА в обычном режиме работы, ток МК в состоянии сна снижен до 4 мкА.

Re: Вопрос по SLEEP в Тиньке13

Добавлено: Чт янв 13, 2022 11:47:12
VNS
Вы не озвучивали проблему в экономии потребления… а так как светодиод работал во время сна, то у меня не возникло подозрений по данному поводу. :dont_know:

Re: Вопрос по SLEEP в Тиньке13

Добавлено: Чт янв 13, 2022 12:17:08
wws63
[uquote="VNS",url="/forum/viewtopic.php?p=4160404#p4160404"]светодиод работал во время сна[/uquote]
В моей схеме, с одним светодиодом, если при выключенном светодиоде потребление - 1,5мА, то при вЫключеном светодиоде и уходе на это время МК в сон - 5мкА.