что тут не так

AVS
Offline
Зарегистрирован: 11.12.2017

Уже какой деньборюсь 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, от верисии ардуино это не зависит

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

AVS пишет:
какой деньборюсь 644

Выражайтесь яснее.

AVS пишет:

if (f_wdt == 1)

можно просто

if(f_wdt)

AVS пишет:

  ADCSRA = 0;

А назад старое значение после этого нуля кто возвращать будет?

AVS пишет:
мега

Какая? Не 8я ли часом?

AVS пишет:
програматор usbasp, от верисии ардуино это не зависит

Спорное заявление, собираете-то таки в Arduino. Хотя да, верю, не зависит.

Повторяю вопрос, чего вы хотите добиться?

UPD. Судя по алгоритму, требуется приспособить WDT под периодическую пробудку для цикл. действий. Вот рекомендации:

1. На mega8 это невозможно. На mega168/328 у меня был подобный проект, если очень надо - найду.

2. Если есть часы, используйте провод SCW.

3. Если нет часов, держу пари что соблюдать интервал в точно секунду не жизненно необходимо. Делайте внешний генератор на КМОП-инверторах - он неточный, но вашу задачу решит.

4. Лень паять/городить ещё один внешний корпус? Проходили, знаем. Легче прицепить что-то внешнее чем ломать голову, добывая этот функционал из МК. На некоторое он и априори неспособен, в блоках питания например - компаратор и транзисторы всё равно быстрее. Советую это запомнить.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Voodoo Doll, а чего новая аватарка? А как же

Клапауций 112 пишет:

я запретил менять сиськи.

???

Распустился народ, пока Клапа дисквалификацию отбывает :(

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Ворота, у меня новое платье на то возникло моё особое настроение, и мне индифферентны чьи-то там запреты.

AVS
Offline
Зарегистрирован: 11.12.2017

мега у меня 644(прошу прощения,выразился невнятно), в квадратном корпусе, я хочу,чтобы все работало, но работает все не так,я уже писал,что у меня дикие проблемы с выводом в ком порт значений и с записью в еепром

это простенький пример спроблемой,хочу понять, в че проблема

компаратор вроде как сам включается, но в любом случае, если эту строчку убрать,результат тот же самый,ком порт пустой

работает мега от внутреннего генератора, часы и четкие интеревалы мне не нужны

все спаяно и по сути работает,но вотвышеперечисленные проблемы возникают..

Voodoo Doll
Voodoo Doll аватар
Offline
Зарегистрирован: 18.09.2016

Не знаю архитектуру 644 так что не подскажу. Но: интервал WDT - не единственная его настройка. Существует параметр, который задаёт его поведение, в 8 это сразу перезагрузка, в 168 и 328 специальный флаг (который можно отследить) и возможно затем перезагрузка (которую можно отключить). Убедитесь, что в вашем случае перезагрузка не происходит.

В любом случае эксперимент со внешним прерыванием был бы полезен - это позволит оценить работоспособность затеи вообще. А затем уже можно будет решать, какое именно прерывание запускает процесс.

AVS
Offline
Зарегистрирован: 11.12.2017

но ведь вся загвоздка в том, что я просто добавляюилиубираю мигание светодиода, поидее вообще это никак не ддолжно влиять, но нет,если добавить мигание,то все работает нормально,если не добавлять,то в порту нет ничего. Даже это мигание стоит после serial.println...просто жесть какая-то