Таймер2

Green
Offline
Зарегистрирован: 01.10.2015

Что то не могу въехать... И, как бы, раньше понимал, а теперь вот... забыл). Или лыжи теперь перестали ехать...( Ужос.
Есть таймер 2. Хочу иметь (и имею) на пине 3 (OC2B) частоту. Не пойму сейчас только отчего она там есть!
 

#define FREQ 4000000

void setup() {
  pinMode(3, OUTPUT);
  TCCR2A = 1<<COM2B0 | 1<<WGM21;
  TCCR2B = 1;
  OCR2A  = F_CPU / 2 / FREQ - 1
}

Но ведь, согласно ДШ, в режиме CTC, в формировании импульсов на OC2B (pin 3) участвует только OCR2B, который в моём случае вообще не упоминается! Однако, работает. Или нет? Пчему? Какие мысли?

rkit
Offline
Зарегистрирован: 23.11.2016

Потому что ты работаешь в среде arduino ide, может быть?

Green
Offline
Зарегистрирован: 01.10.2015

Да. Пофигу.

b707
Offline
Зарегистрирован: 26.05.2017

Green пишет:

Пчему? Какие мысли?

OCR2A = TOP ?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Да, похоже OCR2B в этом режиме не используется..

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

dimax пишет:

Да, похоже OCR2B в этом режиме не используется..

мне вот другое интересно, что за чудак твои высказывания минусует, это что-то личное из зависти или он по жизни такой?...

Upper
Offline
Зарегистрирован: 23.06.2020

ua6em пишет:

dimax пишет:

Да, похоже OCR2B в этом режиме не используется..

мне вот другое интересно, что за чудак твои высказывания минусует, это что-то личное из зависти или он по жизни такой?...

А какой вариант вам кажется более подходящим в случае если - OCR2B в этом режиме ИСПОЛЬЗУЕТСЯ.

а. что-то личное
б. из зависти
в. он по жизни такой.

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

ua6em пишет:

dimax пишет:

Да, похоже OCR2B в этом режиме не используется..

мне вот другое интересно, что за чудак твои высказывания минусует, это что-то личное из зависти или он по жизни такой?...

Какой то обиженный, похоже )))

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Upper пишет:

А какой вариант вам кажется более подходящим в случае если - OCR2B в этом режиме ИСПОЛЬЗУЕТСЯ.

Тогда можно просто написать, что используется , задаёт на каком такте  toggle делать.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

электротехника наука о контактах или они есть там где их не должно быть или их нет там где должно быть )))

Green
Offline
Зарегистрирован: 01.10.2015

dimax пишет:

Да, похоже OCR2B в этом режиме не используется..


Вот только сейчас поимел доступ к компу.(
​Да, в том то и дело, что OCR2B я не использую совсем. OCR2A задаёт TOP.
Но ведь, согласно схемы, именно OCR2B задаёт сравнение с TCNT2!
И именно от него формируется частота на OC2B.

wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

Коллеги! Если в ДШ что-то не написано прямым текстом, то стоит посмотреть на блок-схемы. В компаре-юнит передается сигнал "компаре матч", а на какую ногу его выводить и выводить ли хоть на какую - задается в строчке №5 у Федора. Выводить - на ногу "Б".

Картинка 17-3 по ЭТОМУ ДШ: https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-M...

Upper
Offline
Зарегистрирован: 23.06.2020

Green пишет:

Но ведь, согласно схемы, именно OCR2B задаёт сравнение с TCNT2!
И именно от него формируется частота на OC2B.

Не понимаю, что вас удивляет. Все так и происходит. OCR2B после ресета равен 0 и именно этот 0 сравнивается с TCNT2 и при равенстве инвертирует выход. Запишите в OCR2B значение больше чем TOP и генерации не будет.

Green
Offline
Зарегистрирован: 01.10.2015

Меня удивляет то, что согласно схемы в ДШ, в формировании на выходе 3 (ОС2B) у меня OCR2B не участвует, а участвует OCR2A только.
У меня это железо работает уже года 3 как, не меньше. Но я сейчас посмотрел на это "как баран на новые ворота", и не смог понять почему оно так работает... И до сих пор не могу въехать.(

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

5 TCCR2A = 1<<COM2B0 | 1<<WGM21;

WGM2 WGM1 WGM0 Timer/Counter Mode of Operation TOP    Update of OCRx at TOV Flag Set on

0         1        0         CTC                                           OCRA Immediate             MAX

Вы же сами указали дергать ногой B при достижении OCRA ...

Схема там для разных таймеров, но видимо таймеру 2 подрезали крылья и там вообще нет сравнения с OCRB.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Komandir, дык разобрались же уже. Счётчик тикает до OCR2A, а заданное действие совершает при совпадении с OCR2B.  Тоже кстати часто  замечаю, что какие-то нюансы в ДШ либо вовсе не указаны, либо описаны так, что фик поймёшь сразу.. 

Green
Offline
Зарегистрирован: 01.10.2015

Но OCR2B ведь не задан! Он равен 0. Именно это меня и смущает.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Green пишет:

Но OCR2B ведь не задан! Он равен 0. Именно это меня и смущает.

дотикал до OCR2A, обнулился, в этот момент совпало с OCR2B ... правильно?

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Где вы увидели OCRB ???

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

ua6em пишет:

дотикал до OCR2A, обнулился, в этот момент совпало с OCR2B ... правильно?

Если OCR2B был по дефолту =0, то да, обнуление точно совпадёт с ногодрыгом.

Green
Offline
Зарегистрирован: 01.10.2015

Upper пишет:

Не понимаю, что вас удивляет. Все так и происходит. OCR2B после ресета равен 0 и именно этот 0 сравнивается с TCNT2 и при равенстве инвертирует выход. Запишите в OCR2B значение больше чем TOP и генерации не будет.


Меня удивляет то, что ОСR2B у меня совсем не участвует, хотя должен! Как прикажете это понимать?
У меня справляется OCR2A, и справляется успешно. Но, согласно описания в ДШ, этого не видно! И именно в этом мой вопрос к сообществу.

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Green в №18 таблица из ДШ с режимами работы второго таймера - где там вы нашли OCRB ? Или у нас разные ДШ ?

Green
Offline
Зарегистрирован: 01.10.2015

Нет, ДШ не разные. Но посмотрите схему (в #10) формирования на выходе OC2B. От чего она зависит?

Kakmyc
Offline
Зарегистрирован: 15.01.2018

А в режиме FastPWM частота через ICR2 не задаётся ?

Ps. Посмотрел, у второго таймера такого регистра нет...

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Green но сброс таймера то происходит только по значению из OCR2A. В OCR2B по любому какое то число есть и видимо оно меньше чем число из OCR2A и сравнение срабатывает, но с частотой заданной в OCR2A. Меняя число в OCR2B в пределах от 0 до OCR2A - можно сдвигать сигнал на OC2B относительно сигнала на OC2A, но частота и форма сигнала будет одинаковой.

Green
Offline
Зарегистрирован: 01.10.2015

Kakmyc, меня интересует только CTC режим.
Komandir, да, сброс происходит по значению из OCR2A. Но я не вижу при чём здесь OCR2B!
Мужики, всем спасибо за разъяснения! Я хоть и тормоз, но таки всё понял.)))