что тут не так
- Войдите на сайт для отправки комментариев
Ср, 24/01/2018 - 22:02
Уже какой деньборюсь 644..вот пример скетча
#include <avr/sleep.h>
#include <avr/wdt.h>
volatile boolean f_wdt = 1;
void setup() {
Serial.begin(9600);
DDRD = 0b00001000;
wdt_enable(WDTO_1S);
}
void loop() {
if (f_wdt == 1)
{
Serial.println("_");
f_wdt = 0;
//PORTD = 0b00001000;
//delay(50);
//PORTD = 0b00000000;
}
system_sleep();
}
ISR(WDT_vect)//ОБРАБОТЧИК ПРЕРЫВАНИЯ ОТ ВОТЧДОГА
{
f_wdt = 1;//КОГДА СРАБАТЫВАЕТ ПРЕРЫВАНИЕ ОТ ВОТЧДОГА, ПЕРЕМЕННОЙ ПРИСВАИВАЕТСЯ ЗНАЧЕНИЕ
}
void system_sleep()//КОД СНА
{
ADCSRA = 0;
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_enable();
MCUCR = bit (BODS) | bit (BODSE);
MCUCR = bit (BODS);
sleep_cpu ();
sleep_disable();
}
запускаем...в мониторинге порта нет ничего и п энергопотреблению видно,что мега не спит
убираем комментарии с этих строк
//PORTD = 0b00001000; //delay(50); //PORTD = 0b00000000;
по потреблению мега начинает спать, начинает мигать светодиод и в сериалотображается то,что должно
но что же я делаю не так...
програматор usbasp, от верисии ардуино это не зависит
Выражайтесь яснее.
можно просто
А назад старое значение после этого нуля кто возвращать будет?
Какая? Не 8я ли часом?
Спорное заявление, собираете-то таки в Arduino. Хотя да, верю, не зависит.
Повторяю вопрос, чего вы хотите добиться?
UPD. Судя по алгоритму, требуется приспособить WDT под периодическую пробудку для цикл. действий. Вот рекомендации:
1. На mega8 это невозможно. На mega168/328 у меня был подобный проект, если очень надо - найду.
2. Если есть часы, используйте провод SCW.
3. Если нет часов, держу пари что соблюдать интервал в точно секунду не жизненно необходимо. Делайте внешний генератор на КМОП-инверторах - он неточный, но вашу задачу решит.
4. Лень паять/городить ещё один внешний корпус? Проходили, знаем. Легче прицепить что-то внешнее чем ломать голову, добывая этот функционал из МК. На некоторое он и априори неспособен, в блоках питания например - компаратор и транзисторы всё равно быстрее. Советую это запомнить.
Voodoo Doll, а чего новая аватарка? А как же
я запретил менять сиськи.
???
Распустился народ, пока Клапа дисквалификацию отбывает :(
Ворота,
у меня новое платьена то возникло моё особое настроение, и мне индифферентны чьи-то там запреты.мега у меня 644(прошу прощения,выразился невнятно), в квадратном корпусе, я хочу,чтобы все работало, но работает все не так,я уже писал,что у меня дикие проблемы с выводом в ком порт значений и с записью в еепром
это простенький пример спроблемой,хочу понять, в че проблема
компаратор вроде как сам включается, но в любом случае, если эту строчку убрать,результат тот же самый,ком порт пустой
работает мега от внутреннего генератора, часы и четкие интеревалы мне не нужны
все спаяно и по сути работает,но вотвышеперечисленные проблемы возникают..
Не знаю архитектуру 644 так что не подскажу. Но: интервал WDT - не единственная его настройка. Существует параметр, который задаёт его поведение, в 8 это сразу перезагрузка, в 168 и 328 специальный флаг (который можно отследить) и возможно затем перезагрузка (которую можно отключить). Убедитесь, что в вашем случае перезагрузка не происходит.
В любом случае эксперимент со внешним прерыванием был бы полезен - это позволит оценить работоспособность затеи вообще. А затем уже можно будет решать, какое именно прерывание запускает процесс.
но ведь вся загвоздка в том, что я просто добавляюилиубираю мигание светодиода, поидее вообще это никак не ддолжно влиять, но нет,если добавить мигание,то все работает нормально,если не добавлять,то в порту нет ничего. Даже это мигание стоит после serial.println...просто жесть какая-то