дерганье ноги по таймеру Attiny 13

TechNickUSA

✩✩✩✩✩✩✩
13 Июл 2021
13
0
Имеется attiny 13, задача дёргать ногой PB3 раз в час или около того, сейчас даже на 10 минут не работает
Сделано для принудительной активации zigbee датчика температуры с экраном от tuya.
Когда время в районе минуты всё нормально работает, но когда больше attiny зависает либо перезагружается, в общем ведёт себя не стабильно.
загрузчик MicroCore прошиваю через Arduino nano as ISP
IMG_20210713_170610.jpg
code_language.lua:
int a = 600;
void setup() {

  pinMode(PB3, OUTPUT);
  digitalWrite(PB3, HIGH);
  delay(200);
  digitalWrite(PB3, LOW);
  digitalWrite(PB3, HIGH);
  delay(500);
  digitalWrite(PB3, LOW);
}


void loop() {
  if (a < 1) {

    digitalWrite(PB3, HIGH);
    delay(500);
    digitalWrite(PB3, LOW);
    a = 10;
  }
  else {
    a = a - 1;
    delay(1000);
  }
}
Куда копать ?
 

TechNickUSA

✩✩✩✩✩✩✩
13 Июл 2021
13
0
@Геннадий П, тоже самое, просто виснет. Данный вариант скетча попытка уйти от проблемы но ничего не помогает.
 

poty

★★★★★★✩
19 Фев 2020
3,228
939
@TechNickUSA, сделайте через millis(). Не знаю, что там с delay в Attiny, как-то не приходилось им пользоваться.
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,964
632
44
@TechNickUSA, Повесь второй светодиод на свободный пин. И каждую итерацию цикла моргай им. Может цикл в какой то момент зависает.
Либо просто цикл чуть изменить:
C++:
else {
    a = a - 1;
    delay(1000);
    digitalWrite(PB3, LOW);
  }
Чтобы он хоть что то делал в else. Может компилятор слишком агрессивно оптимизирует и выкидывает else потому что в нем ничего не происходит.

Можешь еще изменить volatile int a = 600;
 
Изменено:

TechNickUSA

✩✩✩✩✩✩✩
13 Июл 2021
13
0
@bort707,
действительно не сделал, посмотрел как у людей собраноу кого через резистор 1 ком у кого 10 ком, не подскажите где в даташите правильный номинал ?