189 похожих чатов

Чо-То у меня крыша едет. Взялся помочь одному человеку с

его ардуино проектом. Настраиваю прерывание по совпадению счётчика TCNT2 с регистром сравнения OCR2A и сброс счётчика при этом совпадении. Предделитель 1024. В итоге, почему-то не имеет значение, что находится в регистре OCR2A, счётчик стоит на нуле и прерывание срабатывает каждые 1024 такта. То есть ведёт себя так, словно в OCR2A находится ноль, но это не так, я проверял.

Вопросы и ответы:

Может я случайно настроил сброс счётчика по OCR2B ?
Нет, вроде бы такого режима даже нет в ATmega328. Но для верности я пробовал загонять в OCR2B то же значение, что и в OCR2A.

Может в регистрах TCCR2A и TCCR2B оказываются какие-то другие значения?
Нет, пробовал выводить в цикле в консоль значения всех регистров, связанных с этим счётчиком.

Этот же код работает, если использовать его вне среды Ардуино?
Таки да! Изначально использовал его в WinAVR.

Ну хз, может Ардуина при компиляции оборачивает код прерывания в какой-то свой враппер, который мою функцию прерывания вызывает реже?
Не может быть, так как прерывание наоборот срабатывает чаще, чем нужно, а также, напоминаю, TCNT2 стоит на нуле.

А компилятор никаких предупреждений не выдаёт?
Никак нет!


Кстати, странный факт, с которым я столкнулся чуть ранее перед этим: почему-то по умолчанию в ардуине предделитель этого счётчика настроен на 64, а не на остановку счётчика, как должно быть.

1 ответов

12 просмотров

https://www.instructables.com/id/Arduino-Timer-Interrupts/

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
3
Карта сайта