Хотелось бы чтобы этой ногой дрыгал таймер и гарантировал точную длительность импульса. Но так же важно в момент инициализации установить на этой ноге ноль, в связи с чем и возник вопрос. Если есть возможность, то подскажите пожалуйста, как решить эту тривиальную задачу инициализации.a5021 писал(а):Отключите канал: TCCRnA &= ~(1<<COMnA1) и дрыгайте этой ногой, как вам вздумается.
Таймеры/счётчики в AVR
- B@R5uk
- Собутыльник Кота
- Сообщения: 2896
- Зарегистрирован: Сб ноя 13, 2010 12:53:25
- Откуда: приходит весна?
Re: Таймеры/счётчики в AVR
Re: Таймеры/счётчики в AVR
А у меня вот нет ощущения, что эта задача столь уж тривиальна. Не пойму, вы хотите укорачивать продолжительность импульса прямо по ходу пьесы, т.е. пока таймер еще считает что-ли? Задачу представьте как-то более развернуто.
- B@R5uk
- Собутыльник Кота
- Сообщения: 2896
- Зарегистрирован: Сб ноя 13, 2010 12:53:25
- Откуда: приходит весна?
Re: Таймеры/счётчики в AVR
Задача состоит в том, что необходимо в момент инициализации таймера (до начала счёта) установить на выходе OCnx таймера ноль. Тривиальнейшая задача инициализации.
В принципе, напрашивается использование принудительного сравнения (Force Output Compare for Channel), но в желаемом режиме работы (Fast PWM) эти биты не работают (если верить документации), а гарантии того, что вывод не изменит состояния при смене режима с Normal или CTC на Fast PWM при любых других условиях в документации нет. А даже если не изменит, то кроме смены режима работы таймера придётся ещё сменить режим работы модуля Waveform generator (биты COMnx1:0), что тоже может изменить состояние вывода, и про что в даташите ни слова. Вот я и оказался в тупике.
В принципе, напрашивается использование принудительного сравнения (Force Output Compare for Channel), но в желаемом режиме работы (Fast PWM) эти биты не работают (если верить документации), а гарантии того, что вывод не изменит состояния при смене режима с Normal или CTC на Fast PWM при любых других условиях в документации нет. А даже если не изменит, то кроме смены режима работы таймера придётся ещё сменить режим работы модуля Waveform generator (биты COMnx1:0), что тоже может изменить состояние вывода, и про что в даташите ни слова. Вот я и оказался в тупике.
Re: Таймеры/счётчики в AVR
B@R5uk писал(а):Задача состоит в том, что необходимо в момент инициализации таймера (до начала счёта) установить на выходе OCnx таймера ноль.
До начала счета там и так ноль, если не включен инверсный режим ШИМ.
- B@R5uk
- Собутыльник Кота
- Сообщения: 2896
- Зарегистрирован: Сб ноя 13, 2010 12:53:25
- Откуда: приходит весна?
Re: Таймеры/счётчики в AVR
Ок, на другом канале мне нужна единица. В прочем, не важно, ноль или единица, если есть возможность осуществить инициализацию, то подскажите, пожалуйста, как это сделать?a5021 писал(а):До начала счета там и так ноль, если не включен инверсный режим ШИМ.
Интересное замечание, есть ли подтверждение в даташите (например, для tiny2313)? Потому что у меня именно этот режим.a5021 писал(а):...если не включен инверсный режим ШИМ.
Неужели нет возможности полноценно и однозначно инициализировать периферию микроконтроллера? Куда смотрели разработчики?
Re: Таймеры/счётчики в AVR
B@R5uk писал(а):Интересное замечание, есть ли подтверждение в даташите (например, для tiny2313)? Потому что у меня именно этот режим.
Даташит я читаю, если уже ничего не помогает.
Код: Выделить всё
TCCR1A = (1<<COM1A1) // разрешаем вывод наружу канала А
| (0<<COM1A0) // нет инверсии
| (1<<COM1B1) // разрешаем вывод наружу канала B
| (1<<COM1B0) // есть инверсия
| (1<<WGM11)
| (1<<WGM10);
Неужели нет возможности полноценно и однозначно инициализировать периферию микроконтроллера?
У кого нету? Я вот почему-то отродясь не страдал в этом плане от какой-то неоднозначности.
Куда смотрели разработчики?
А не напрасно вы так-то на разработчиков?
Re: Таймеры/счётчики в AVR
Подскажите, пожалуйста, есть ли в AVR возможность установить выход таймера (OCnx) в желаемое состояние (ноль), когда таймер выключен?
Если Вы произвели инициализазую таймера, - Вы привели всё в исходное состояние. А, когда таймер выключен, - это как. Кто его выключил? Есть команда Sleep. Но это отдельный разговор.
- B@R5uk
- Собутыльник Кота
- Сообщения: 2896
- Зарегистрирован: Сб ноя 13, 2010 12:53:25
- Откуда: приходит весна?
Re: Таймеры/счётчики в AVR
Под "таймер выключен" я подразумеваю, что биты Bit 2:0 – CSn2:0: Clock Select установлены в нули (No clock source, Timer/Counter stopped). Ближе к тексту было бы сказать "таймер остановлен", мой косяк, признаю.
И кого я помощи прошу?
Прямой и инверсный режимы не означают, что порт подключается к выходу таймера на прямую или через инвертор. Различие в режимах заключается в событиях, которые сбрасывают и устанавливают выход генератора формы волны. Читайте документацию.
Не всё, состояния выходов генераторов формы волны изменяется только при наступлении определённых событий, а не при записи в регистры таймера. Я же выше писал об этом. Может я что-то пропустил в документации?gavrasio писал(а):Вы привели всё в исходное состояние
a5021 писал(а):Даташит я читаю, если уже ничего не помогает.
И кого я помощи прошу?a5021 писал(а):CodeWizardAVR позволяет независимо выбирать прямой и инвернсый режим на выходах генерации ШИМ у тини2313.
Прямой и инверсный режимы не означают, что порт подключается к выходу таймера на прямую или через инвертор. Различие в режимах заключается в событиях, которые сбрасывают и устанавливают выход генератора формы волны. Читайте документацию.Re: Таймеры/счётчики в AVR
B@R5uk писал(а):Прямой и инверсный режимы не означают, что порт подключается к выходу таймера на прямую или через инвертор. Различие в режимах заключается в событиях, которые сбрасывают и устанавливают выход генератора формы волны. Читайте документацию.
Да наплевать, что там и куда подключено. Если бит COMnx0 установлен, то сигнал переворачивается так, словно его пропустили через инвертор. События тут никаким боком. Вы учитались видать этим мануалом, что простых вещей сообразить не можете.
Еще раз говорю, опишите задачу подробнее, а то так и будем впотьмах искать сообразно вашему перегрузу от "чтения документации".
- B@R5uk
- Собутыльник Кота
- Сообщения: 2896
- Зарегистрирован: Сб ноя 13, 2010 12:53:25
- Откуда: приходит весна?
Re: Таймеры/счётчики в AVR
Нет, споров пока хватит. Спасибо за участие, дальше сам как-нибудь разберусь.
Re: Таймеры/счётчики в AVR
А споров тут еще никаких и не было. Я пытался, что было сил, вытянуть из вас постановку задачи, но вместо этого вы сначала жаловались на описание, ругали разработчиков, а потом зачем-то отправили меня читать документацию, словно это я у вас спрашивал, как то и как это, а не наоборот.
Мне вот что сейчас подумалось, судя по вашей формулировке "выход генератора формы волны", вы там часом не синус какой-нибудь собрались получать прямо с ноги МК ? Тогда действительно разработчики редкостные мерзавцы, т.к. это невозможно в принципе.
Мне вот что сейчас подумалось, судя по вашей формулировке "выход генератора формы волны", вы там часом не синус какой-нибудь собрались получать прямо с ноги МК ? Тогда действительно разработчики редкостные мерзавцы, т.к. это невозможно в принципе.
Re: Таймеры/счётчики в AVR
Это не его формулировка, а даташита. В корявом переводе, правда. Читайте документациюa5021 писал(а):судя по вашей формулировке "выход генератора формы волны"
И я, например, не вижу проблем получить синус.
По сабжу: гипотетически, инициализация выхода, да и остального, должна наступать при записи соответствующих регистров. Подробности того, что и от чего будет зависеть, надо смотреть на внутренней схеме таймера в МК, которая приводится в даташите. Практически - надо ещё наложить на это остальную писанину даташита и еррату. Если в них иного не оговорено, то записывая необходимые регистры, можно поставить таймер в любую позу до разрешения счёта.
Re: Таймеры/счётчики в AVR
Я не нахожу там никаких "выходов генераторов". Описание генератора формы сигнала (waveform generator) есть, а вот про его выход (или даже выходы, как у автора вопроса) не отыскалось ни пол слова. Не поясните, что вы имели ввиду и в каком именно месте нужно "читать документацию"?hybroid писал(а):Это не его формулировка, а даташита. В корявом переводе, правда. Читайте документациюa5021 писал(а):судя по вашей формулировке "выход генератора формы волны"![]()
И я, например, не вижу проблем получить синус.
Через интегрирующую цепочку? Я тоже не вижу. Только я спрашивал "прямо с ноги МК?" и это существенно меняет вопрос.
Re: Таймеры/счётчики в AVR
Но он ,по твоему ,куда-то должен быть подключен? Не для красоты же он. Некоторые банальные вещи не описываются словами. Зато есть целая таблица, описывающая работу, при каких режимах (биты WGM), какие выводы и по какому событию меняются.a5021 писал(а):Описание генератора формы сигнала (waveform generator) есть, а вот про его выход (или даже выходы, как у автора вопроса) не отыскалось ни пол слова.
Ты не спрашивал, а утверждал. Существенного тут ничего нет, всё равно это будет прямо с ноги, хоть и в модулированном виде. Предполагать в каждом идиота, не знающего о том, что ЦАП там нет, не стоит.a5021 писал(а):Только я спрашивал "прямо с ноги МК?" и это существенно меняет вопрос.

Re: Таймеры/счётчики в AVR
hybroid писал(а):Но он ,по твоему ,куда-то должен быть подключен? Не для красоты же он.
Вы в курсе, что никакого генератора в виде отдельного блока там нет? Waveform generator -- это скорее абстракция, введенная для упрощения понимания некоторых особенностей функционирования таймера. Да и сама waveform generation -- это не генерация формы волны, как может показаться на первый взгляд. Если оперировать на понятийном уровне, то в соответствии с принятой в русскоязычной среде терминологией, waveform generation -- это скорее "формирование временнЫх параметров сигнала", но никак не амплитудных.
Чтобы сразу пресечь возможные расползания по сторонам, могу отослать к описаниям конкурирующих продуктов других производителей. Таймер -- это фактически стандартная периферия современных МК, которая практически во всех современных МК и встречается. И если, например, копнуть доки на какие-нибудь stm8/stm32, то в них не получится найти не только waveform generator, но и waveform generation вообще. Это при том, что тамошняя периферия реализует не только весь традиционный функционал периферии AVR, но и предлагает сверх того.
a5021 писал(а):Предполагать в каждом идиота, не знающего о том, что ЦАП там нет, не стоит.
Уж не помню, в ветке про avr или stm некий товарищ задавался вопросом, как ему при помощи сишных функций printf и scanf писать значения в файл и читать из него обратно. Он собирался это делать голым микроконтроллером на макетке. Мысль о том, что МК имеет встроенный доступ к удаленным файловым системам казалась ему естественной и для использования этой фичи, по мысли вопрошавшего, всего и надо, лишь правильно использовать printf и scanf. Так что насчет знающих и не знающих чего там есть внутри МК, а чего нет, я бы не был столь категоричным.
Re: Таймеры/счётчики в AVR
1. В курсе. И это никакая не абстракция, а весьма настоящая накристальная цифровая схема. Оно там не на волшебном дыме работает. Зато действительно удобно называть и понятно, о чём речь. Просто ШИМ тут явно не достаточно, т.к. генерирует не просто ШИМ, а различные его виды, под различные нужды.
2. У других производителей можем найти или похожее, или длинное словесное описание.
3. И по поводу перевода в курсе, я даже оговорил перевод выше, до того, как ты открыл даташит.
4. Ну попался дурак - и что? Теперь всех дураками считать?
А по теме что? Как там внутренняя структура таймера поживает? Выводы таки подключаются к чему-то?
PS: вообще, вот я Барсука понял, вполне доступно для тех, кто знает как это внутри работает. Если бы ты работал с ПЛИС, то тоже понял бы. Или если бы поинтересовался внутренним устройством периферии.
2. У других производителей можем найти или похожее, или длинное словесное описание.
3. И по поводу перевода в курсе, я даже оговорил перевод выше, до того, как ты открыл даташит.
4. Ну попался дурак - и что? Теперь всех дураками считать?
А по теме что? Как там внутренняя структура таймера поживает? Выводы таки подключаются к чему-то?
PS: вообще, вот я Барсука понял, вполне доступно для тех, кто знает как это внутри работает. Если бы ты работал с ПЛИС, то тоже понял бы. Или если бы поинтересовался внутренним устройством периферии.
Re: Таймеры/счётчики в AVR
hybroid писал(а):И это никакая не абстракция, а весьма настоящая накристальная цифровая схема.
Давайте не будем завязываться на утверждениях, проверить которые у нас нет возможности.
Просто ШИМ тут явно не достаточно, т.к. генерирует не просто ШИМ, а различные его виды, под различные нужды.
Все многообразие "видов ШИМа", применительно к атмеге, состоит из единственного вида цифрового ШИМ-сигнала с выравниванием фронтов по тому или иному критерию. ШИМ-сигнал формирует сам таймер и подвязывать сюда еще какой-то генератор сложноформализуемых свойств -- явная избыточность. Даже на схеме сей генератор изображен в виде черного ящика, чьи свойства почти никак не описаны.
2. У других производителей можем найти или похожее, или длинное словесное описание.
Так как мне претит отправлять кого-либо читать неведомую документацию (в силу заблуждений, мне видится это невежливым), я лучше сразу предложу вам найти то, о чем вы говорите, на схеме таймера STM32:
"Длинное словесное описание", включающее слово generator в RM0008 (в качестве примера) встречается несколько раз в разделах относящихся к схеме генерации опорных сигналов, но ни разу в разделах, имеющих отношение к таймерам (за исключением dead-time generator, но это уже совсем другая песня). Так что уж извините, но ваш пункт 2 полностью ложный.
4. Ну попался дурак - и что? Теперь всех дураками считать?
Считать всех дураками это такой же перебор, как верить в то, что все осведомлены насчет отсутствия ЦАПа в атмеге. Как раз таки неудачная абстракция с waveform generator может привести новичков к мысли, что атмега в состоянии генерировать аналоговый сигнал произвольной формы невыясненным, к моменту начала освоения, способом. Поэтому я и взял на себя труд уточнить это.
А по теме что? Как там внутренняя структура таймера поживает? Выводы таки подключаются к чему-то?
К выходу канала сравнения и подключаются. То, что в мануале атмеги там нарисован некий блок с надписью waveform generator совсем не означает, что именно в нем случается некая генерация. Устройством генерации ШИМ-сигнала является весь таймер целиком, будучи сконфигурированным надлежащим образом. Именно поэтому в МК других производителей не встречаются (я, во всяком случае, не видел) никаких обособленных генераторов внутри таймера. Я бы мог повесить здесь схему канала сравнения от STM32, которая по сравнению с атмеговской прорисована более детально, но не буду этого делать, чтобы не загромождать сообщение. Любопытствующие могут посмотреть Fig. 79-80 на с. 309-310 все того же RM0008. И ведь что интересно: и в атмеге и в стм32 есть таймер, есть каналы сравнения, есть в чем-то схожие регистры, но у атмеги наличествует нечто под названием waveform generator, а у стм32 и близко нет. В этой связи напрашивается законный вопрос -- если все таинство генерации происходит именно в этом генераторе, как остальные МК обходятся без него?
вообще, вот я Барсука понял, вполне доступно для тех, кто знает как это внутри работает.
Я барсука не понял и боюсь, что наблюдая за тем, куда заходит разговор, он вообще не решится больше оппонировать. Апломб вида "вполне доступно для тех, кто знает, как это внутри работает" оставляю на вашей совести. Кто знает, как что-либо работает, обычно умеет в двух словах об этом рассказать, а не только пространно отсылать куда-то вдаль.
- Вложения
-
- stm32_tim2.jpg
- (63.03 КБ) 720 скачиваний
Re: Таймеры/счётчики в AVR
А как по-твоему ещё это может быть реализовано в МК? Слушаю предложения!a5021 писал(а):Давайте не будем завязываться на утверждениях, проверить которые у нас нет возможности.
Если ты мне предложишь ещё разнообразие прямоугольного сигнала - за нобелевкой надо идти. Также выбираются другие настройки, нэ? Куда выводить, в каком виде. TOP/BOTTOM. Сколько там видов ШИМа, напомни?a5021 писал(а):состоит из единственного вида цифрового ШИМ-сигнала с выравниванием фронтов по тому или иному критерию.
Если ты обзовёшь это просто "таймер" - то ты не договоришь и половины функционала.
Опять же, рассказывай, как по-твоему и на какой магии работает тот же ШИМ с коррекцией фазы. Рассказывай на уровне логических схем, т.к. именно её представляет из себя МК с периферией.a5021 писал(а):подвязывать сюда еще какой-то генератор сложноформализуемых свойств -- явная избыточность
Мсье умолчал о возможностях ШИМа названного МК. Он не делает такой зоопарк ШИМов, как та же ATmega88. В силу набортного ЦАПа нет смысла производителю усложнять свои таймеры. Но даже тут можно правые части обвести и обозвать WG. Будешь спорить?a5021 писал(а):о чем вы говорите, на схеме таймера STM32:
Свои мнения высказывай в письменном виде атмелу. Не мне, мне на них насратьa5021 писал(а):неудачная абстракция с waveform generator
Для меня - это очень удачное название.И потом Девидом Блейном работа меняется при смене бит WGM, ога. А их там не один и не пять режимов. Вынести это в отдельный квадрат - право производителя, т.к. это и есть отдельный функционал. Пихать всё в кучу - тоже право производителя. Думать головой надо.a5021 писал(а):К выходу канала сравнения и подключаются. То, что в мануале атмеги там нарисован некий блок с надписью waveform generator совсем не означает, что именно в нем случается некая генерация.
Ты узко понимаешь слово "генератор".a5021 писал(а):никаких обособленных генераторов внутри таймера.
В двух словах: на куче регистров, счётчиках, компараторах, триггерах и мультиплексорах. Внесло ясность? Те, кто знают, обычно в двух словах не говорят, т.к. ни хрена не объяснишь в двух словах тому, у кого нету соответствующей базы.a5021 писал(а):Кто знает, как что-либо работает, обычно умеет в двух словах об этом рассказать
Итог пока таков: waveform генератор таки есть. Ты даже с этим согласен, но считаешь это всем в сборе, хотя таймер просто считает тики, а регистр сравнения их просто сравнивает.. Но почему-то в твоей голове они стоят не рядом, а внутри. Хрен бы с ним, главное что есть.
Давай разбираться с подключением выводов. Их там, кстати, не один может быть, а три канала ШИМ. Рассказывай, куда будешь подключать. К регистру сравнения не устраивает, не получится некоторых видов ШИМа.
Re: Таймеры/счётчики в AVR
Видов ШИМа -- один. Цифровой. Выравниваний -- два: по центру и по фронту. Остальные т.н. "режимы" суть производные от этих двух. Атмеговский ШИМ с коррекцией фазы это счет вверх-вниз (или наоборот) с двумя событиями соответствия. У стм он называется выравниванием по центру. Логических схем МК никто не видел и определенные блоки могут оказаться всем, чем угодно, включая такой неожиданный вариант, как специализированный процессор со своим микрокодом. Ваша фраза "Он не делает такой зоопарк ШИМов, как та же ATmega88" очень опрометчива. Если сюда придут фанаты стм32, то они будут убивать вас и я никак не смогу защитить.
С подключением выводов разобраться не получится, т.к. схемы нет, а гадать не мое ремесло. У стм32 есть более подробная блок-схема и там хотя бы видно, что инверсный и не инверсный режимы это суть пропускания выхода через инвертор или минуя его, что категорически отрицал барсук.
С подключением выводов разобраться не получится, т.к. схемы нет, а гадать не мое ремесло. У стм32 есть более подробная блок-схема и там хотя бы видно, что инверсный и не инверсный режимы это суть пропускания выхода через инвертор или минуя его, что категорически отрицал барсук.
Re: Таймеры/счётчики в AVR
Тебе задали конкретный вопрос выше и ты по нему начал писать конкретную хуйню. Теперь свою хуйню прикрываешь тем, что у других производителей написано иначе. А мне вот насрать на других, говори по делу. И на STM32 насрать, речь об AVR. И на фанатов насрать, пусть бегут куда хотят, нечего тут пугать.
Сообрази мне схему таймера, чтобы твои простые вещи не были простой пургой. Расскажи, как же он к ногам подключается. Все исходные данные есть, только надо подумать.
Вот тебе исходные данные. Изменяй так, чтобы избавиться от waveform generator. Обзывай его хоть "колдовской ебучкой", но чтобы результат был такой же.


Это не мешает тебе утверждать своё категоричное мнение:a5021 писал(а):С подключением выводов разобраться не получится, т.к. схемы нет, а гадать не мое ремесло.
Тут же ты "сообразил" простые вещи? Что поменялось, почему теперь прикрылся производителем?a5021 писал(а):Если бит COMnx0 установлен, то сигнал переворачивается так, словно его пропустили через инвертор. События тут никаким боком. Вы учитались видать этим мануалом, что простых вещей сообразить не можете.
Сообрази мне схему таймера, чтобы твои простые вещи не были простой пургой. Расскажи, как же он к ногам подключается. Все исходные данные есть, только надо подумать.
Вот тебе исходные данные. Изменяй так, чтобы избавиться от waveform generator. Обзывай его хоть "колдовской ебучкой", но чтобы результат был такой же.
Спасибо, но даром не надо. Тебе бы свои слова защититьa5021 писал(а):то они будут убивать вас и я никак не смогу защитить.
