Некорректно отрабатывает задержка на millis()

Пока, единственное, что хочется сделать, перекинуть чип, но нет возможности, вот и сижу х. страдаю.

Мошт фьюзами кварц на внутренний перевести - без паяльника его исключить.
Я, правда, не знаю как. Но отсечь максимум от камня нужно.

Переводил, на внутрений 8 мгц, начинает вроде сигать в х2, как положено, но при этом опять глюк за глюком, и ты прав, он (глюк этот) не переодичен…

3 нога не должна на земле быть и 6 не должна быть на +5

Что это меняет, если порт не трогать, по умолчанию он же вход?

Почему нано PB с али, работает как надо?

Другая кристаллическая решетка ))

1 лайк

Ага, или другой АСМ код заливаю Я))

А если попробовать без прерываний и усарта? Задействовать счётчик как таймер и по нему мигать светодиодом примерно 5-10 Гц. Визуально нестабильность хорошо видно будет. Либо тупо любой пин в цикле 10101. Осциллом смотреть.
Как вариант перевести в режим тактирования от внешнего генератора. И помуружить от 0 до N Гц.

Я предлагаю проверить без прерываний:

void setup() {
  cli();
  pinMode(13, OUTPUT);
  for (uint8_t i = 0; i < 3 * 2; i++) {
    digitalWrite(13, !digitalRead(13));
    _delay_ms(100);
  }
}

void loop() {
  digitalWrite(13, !digitalRead(13));
  _delay_ms(1000);
}

Или проверял?

Миллис/микрос все равно тикать будет, он же в ините прям запускается на таймере.
Это надо прям с майна без сетупов и за-cli() ить сразу МК.

Так у меня ж без миллис. И таймеров соответственно.

Это надо прям с майна без сетупов и за-cli() ить сразу МК.

В этом варианте всё работает как надо.

int main () {
  cli();
  pinMode(13, OUTPUT);
  for (uint8_t i = 0; i < 3 * 2; i++) {
    digitalWrite(13, !digitalRead(13));
    _delay_ms(100);
  }

  while (1) {
    digitalWrite(13, !digitalRead(13));
    _delay_ms(1000);
  }
  return 0;
}

Я вижу, что без дилея. Он, конечно, миллис не будет юзать и функция чтения софтварного счётчика выкинется, но сам хардварный счётчик все равно в ините должен будет быть инициализирован и начать дергать ISR, где идёт счёт миллисов.

Не будет дёргать, потому что прерывания запрещаем в сетапе.

Через какое-то время - да, но сначала подергает.
Мы же хотим локализовать место бага неявной природы. Я бы начал с нулевой конфигурации, потом добавлял функционал. А так - неведомый фотон может успеть проскочить в ячейку за неск. тактов. ))

Потом в майн можно уже докидывать куски инита и наблюдать, когда поплохеет.

Посмотри под кроватью, вдруг такой завалялся…мало ли, забыл закрыть.


А на резонаторе конденсаторы в норме?

А, ну если фитон, тогда да.)
Инит устанавливает делитель и разрешает счёт ТС0, а он в 0-ле по сбросу.
А тут, бац. Ещё ничего не насчитав (не говоря уже о переполнении), мы сразу после инита, в сетапе первым делом запрещаем прерывания.
Можно и как у BOOM-а, без разницы. Только там нет смысла запрещать прерывания - они и так запрещены.
И этот вариант работал, только напрямую с портами.

Ну вот, уже начинает шустрить по транзисторам. Какой-нить коротит там и капец.

Вобщем, в данном случае, я сторонник последовательного наращивания нагрузки без размышлений о том, что в какой последовательности отработает, если все оставить на месте.

Без разницы с какой стороны заходить.) Обычно быстрее находится при бинарном поиске. Из далёкой практики: плата с кучей мс, искать нет возможности. Разделил пополам - заменил половину, проверил. Если не работает - оставшиеся пополам…