Подскажите как грамотно на лету менять частоту генерации на таймере.

plotter1

✩✩✩✩✩✩✩
24 Ноя 2021
20
1
Есть устройство которое на лету корректирует генерируемые им импульсы. За генерацию отвечает первый таймер.
Столкнулся с тем, что если я просто в лупе подсовываю строку OCR1A = "число тактов"; то при малых периодах генерируемые импульсы начинают "размываться" (наблюдаю на осциллографе). Как я понимаю исходя из даташита, это может быть связанно с тем, что новое значение ниже текущей TCNT1 и он вначале досчитывает до переполнения, а только потом начинает работать по новому пределу. Хотя не уверен на 100% И соответственно вопрос возник, есть ли метод смены OCR1A так, чтобы не возникало такой оказии?
У меня есть одна идея, но хочу послушать людей более опытных нежели я.
 
Изменено:

rkit

★★★✩✩✩✩
5 Фев 2021
508
127
генерируемые импульсы начинают "размываться" (наблюдаю на осциллографе)
что должно значить?

Ты можешь сбросить значение таймера, если надо. А лучше взять контроллер с таймерами получше, а AVR выкинуть как безнадежно устаревшее.
 

plotter1

✩✩✩✩✩✩✩
24 Ноя 2021
20
1
что должно значить?
Это значит что вместо стройных кирпичиков начинаем иметь кирпичики с размытыми гранями.
А лучше взять контроллер с таймерами получше, а AVR выкинуть как безнадежно устаревшее.
Вообще не согласен. Нормальный контроллер для рутинных задач. 3 таймера для любых задач хватает.
А переходить на условный стм32 это ещё тратить кучу времени на их освоение, что не так просто учитывая убогость их документации (после атмеговской-то). и таки я не профессиональный разработчик, для меня это всё не семечки.
 

Bruzzer

★★★✩✩✩✩
23 Май 2020
472
133
@plotter1,
Если решать аппаратно, то изучите режим "PWM, Phase and Frequency Correct"

Дополнение. Если сейчас используется режим CTC и минимальный интервал больше 10 мкс (примерно), то можно менять значение OCR1A в прерывании таймера. Режим "PWM, Phase and Frequency Correct" работает для любых длительностей.
 
Изменено:

rkit

★★★✩✩✩✩
5 Фев 2021
508
127
Это значит что вместо стройных кирпичиков начинаем иметь кирпичики с размытыми гранями.
И что это значит? Электрический сигнал не бывает "размытым". Ты осциллограф настрой нормально и захватывай реальное событие.
 

Bruzzer

★★★✩✩✩✩
23 Май 2020
472
133
@plotter1,
Да это специально разработанный производителем метод изменения частоты без ошибок.
 

plotter1

✩✩✩✩✩✩✩
24 Ноя 2021
20
1
Если сейчас используется режим CTC и минимальный интервал больше 10 мкс (примерно), то можно менять значение OCR1A в прерывании таймера.
Вот именно такая идея и у меня возникла. Минимальный период ~60мкс, поэтому времени вагон. А почему 10мкс? Переход в прерывание, и запись нового значения это не более 12 тактов для первого таймера.
 

poty

★★★★★★✩
19 Фев 2020
3,230
940
@plotter1, нужно уточнение. Как часто происходят изменения частоты? Производится ли синхронизация изменения частоты с окончанием периода?
 

bort707

★★★★★★✩
21 Сен 2020
3,058
910
это может быть связанно с тем, что новое значение ниже текущей TCNT1 и он вначале досчитывает до переполнения, а только потом начинает работать по новому
Так и есть.
И что вы хотите с этим сделать? У вас только два варианта - смириться с этим или сбрасывать таймер в момент задания нового OCR. Но в любом случае один период будет неправильным.
 

Эдуард Анисимов

★★★★★★✩
23 Сен 2019
2,407
976
58
Марий-Эл
@plotter1, Вот как раз у STM с этим всё просто. У таймеров есть два режима.
В одном случае запись в счётчик таймера заставляет его сразу начинать считать с новым значением.
Можно сделать что бы счётчик начинал считать с новым значением только после окончания предыдущего счёта.
Так что это Атмел убогие.