Таймеры/счётчики в AVR

Обсуждаем контроллеры компании Atmel.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Таймеры/счётчики в AVR

Сообщение a5021 »

hybroid писал(а):Сообрази мне схему таймера, чтобы твои простые вещи не были простой пургой. Расскажи, как же он к ногам подключается. Все исходные данные есть, только надо подумать.
Вот тебе исходные данные. Изменяй так, чтобы избавиться от waveform generator. Обзывай его хоть "колдовской ебучкой", но чтобы результат был такой же.
Изображение

Еще раз медленно и печально: медитировать над чем-то под названием "блочная диаграмма" у меня решительно нет никакого желания. И каких-то сумасшедших схем изобретать я не собираюсь. Что там нарисовано я понимаю, но это даже не схема. Диаграмма, абстракция, логика взаимодействия внутри канала. Вы же почему-то решили, что это схема и там чуть ли не провода надо рисовать. Я пытаюсь вам втолковать на примере других МК, что никакого waveform generator-а может и не быть, но оказывается это я виляю и прикрываюсь (!) другими производителями. Тужусь представить, как вообще возможно "прикрываться" таким образом, но фантазии моей явно не хватает.

PS. Полистал с горя мануал по 18-ым пичкам, но и там никакого генератора не обнаружилось. Похожий ящик, что у атмеги называется генератором, там именуется блоком управления выходом и это, на мой взгляд, более удачное название для устройства с таким функционалом. Это при том, что к пичкам каких-то особых симпатий я не питаю.
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: Таймеры/счётчики в AVR

Сообщение hybroid »

a5021 писал(а):Что там нарисовано я понимаю, но это даже не схема. Диаграмма, абстракция, логика взаимодействия внутри канала.
Ничерта ты не понимаешь. Самая обычная структурная схема. Изучи что такое "диаграмма", "абстракция"..
a5021 писал(а):Вы же почему-то решили, что это схема и там чуть ли не провода надо рисовать.
Не почему-то, а для чего-то. Чтобы пресечь в корне твоё непонимание работы периферии. Именно, надо чуть ли не провода рисовать. Это тебе не из готовых кусков быдлокодить, надо подумать :dont_know:
a5021 писал(а):там именуется блоком управления выходом и это, на мой взгляд, более удачное название для устройства с таким функционалом.
Вот видишь, сколько открытий чудных. По поводу названий я процитирую себя же:
hybroid писал(а):Обзывай его хоть "колдовской ебучкой", но чтобы результат был такой же.

По поводу твоего мнения, как и что лучше.... всё же надо тебе писать производителю, а не мне. Мне на это тоже плевать, и так нравится. Несмотря на твоё мнение о названиях - он таки есть, и таки не просто квадрат, а что-то делающий квадрат. И не только в AVR, но это по фигу на данный момент. А зачем ты опять полез в другие МК? С этим ещё никак..
Но прогресс виден! Ведь недавно было:
a5021 писал(а):Вы в курсе, что никакого генератора в виде отдельного блока там нет?

Кстати, вот ещё что утверждалось:
a5021 писал(а):Описание генератора формы сигнала (waveform generator) есть, а вот про его выход (или даже выходы, как у автора вопроса) не отыскалось ни пол слова.
Теперь ты выход из ящика видишь хотя бы? Куда идёт? Это наука под названием: "сначала изучать, а потом пиздетьвсех считать идиотами". Иначе можно обдристаться.

Едем далее. Ты не рисуй, раз (предположим) лень. Описывай словестно, как имея тупой счётчик с неменее тупым компаратором получается куча различных вариаций ШИМа. Расскажи, какие, на твой взгляд, заклинания там используются. Т.е. слева имеем счётчик с компаратором, справа имеем ногу на вывод. Вот в середине нам нужно разместить логику работы этой херни, которая ещё имеет данные в регистрах, говорящие ей, что же делать, когда наконец-то компаратор сравнил и хлопнул выходом. Пока будешь думать - может быть поймёшь, что как раз и пытаешься придумать херню, генерирующую (меняющую выход, ага) требуемые импульсы. Т.е. генератор требуемых колебаний. Т.е. генератор колебаний требуемой длительности. Т.е. генератор колебаний требуемой формы, т.к. с утра длительность импульса у прямоугольника ещё меняла его форму по ширине.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Таймеры/счётчики в AVR

Сообщение a5021 »

hybroid писал(а):
a5021 писал(а):Что там нарисовано я понимаю, но это даже не схема. Диаграмма, абстракция, логика взаимодействия внутри канала.
Ничерта ты не понимаешь. Самая обычная структурная схема. Изучи что такое "диаграмма", "абстракция"..


Я просто теряюсь, что на это можно ответить. Может вот это?

A block diagram is a diagram of a system in which the principal parts or functions are represented by blocks connected by lines that show the relationships of the blocks.[1] They are heavily used in engineering in hardware design, electronic design, software design, and process flow diagrams.

Block diagrams are typically used for higher level, less detailed descriptions that are intended to clarify overall concepts without concern for the details of implementation. Contrast this with the schematic diagrams and layout diagrams used in electrical engineering, which show the implementation details of electrical components and physical construction.


a5021 писал(а):Вы же почему-то решили, что это схема и там чуть ли не провода надо рисовать.
Не почему-то, а для чего-то. Чтобы пресечь в корне твоё непонимание работы периферии. Именно, надо чуть ли не провода рисовать.

Это входит в противоречие с самим предназначением block diagram, которое, как написано выше "used for higher level, less detailed descriptions that are intended to clarify overall concepts without concern for the details of implementation." Так что провода рисовать тут решительно не получится. Равно, как искать к чему там подключен выход. Это картинка другого уровня абстракции. Хорошо бы это отличать.

Это тебе не из готовых кусков быдлокодить, надо подумать

А что я там в последний раз "из готовых кусков набыдлокодил"?

Вот видишь, сколько открытий чудных. По поводу названий я процитирую себя же:
hybroid писал(а):Обзывай его хоть "колдовской ебучкой", но чтобы результат был такой же.

Не знал, что цитата из себя же является особо неотразимым доказательством.

А зачем ты опять полез в другие МК? С этим ещё никак..

Чего тут только про себя не узнаешь. Я ж в теме про ардуины даже фотки своих устройств постил. Там как раз на том, с чем у меня "еще никак", ШИМ-сигнал используется для плавной регулировки яркости свечения семисегментного индикатора в зависимости от условий освещенности. Не Бог весть какое достижение, но хотя бы что-то. Я может быть вас огорчу, но мои опыты с применением ШИМ для разных целей, гораздо обширнее, чем это могло показаться изначально. Насчет "других МК", я могу, например, в нескольких словах объяснить, что единичным тамошним таймером при помощи ШИМ можно поразрядно регулировать яркость четырехзначного семисегментника. Он конечно же "не делает такой зоопарк ШИМов, как та же ATmega88", но на нем этот фокус делается легко и непринужденно, а вот на атмеге -- дудки. Можем поговорить о том, как при помощи ШИМ выводить звук, как одним каналом ШИМ через мостовой драйвер одновременно управлять и направлением и скоростью вращения мотора, как сэмулировать ИК-пульт, как..., впрочем, что-то я увлекся и может это совсем вам не интересно.

Едем далее. Ты не рисуй, раз (предположим) лень. Описывай словестно, как имея тупой счётчик с неменее тупым компаратором получается куча различных вариаций ШИМа. Расскажи, какие, на твой взгляд, заклинания там используются. Т.е. слева имеем счётчик с компаратором, справа имеем ногу на вывод.

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

Т.е. генератор колебаний требуемой длительности. Т.е. генератор колебаний требуемой формы, т.к. с утра длительность импульса у прямоугольника ещё меняла его форму по ширине.

Это называется коротко и ясно -- ШИМ. Безо всяких "колебаний требуемой формы". Именно поэтому режим таймера у пиков и стм называется PWM-mode, а атмелам зачем-то понадобилось громоздить waveform generation. PWM -- более узкое и конкретное обозначение, а под waveform можно подразумевать вообще любые колебания.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Таймеры/счётчики в AVR

Сообщение ARV »

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

Мой уютный бложик... заходите!
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: Таймеры/счётчики в AVR

Сообщение hybroid »

Ну как всегда, буквоедством заниматься можем, всех тупыми тоже считать можем, а как дело доходит до показать, что же ты знаешь на самом деле - хер там, не просил он это, видишь ли, и ещё стопиццот причин съехать.

ARV: подними очи ваерх и прочти название темы, если не сложно. Твой высер "к делу" вообще не имеет отношения.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Таймеры/счётчики в AVR

Сообщение a5021 »

Отказ рисовать провода на диаграмме -- это не попытка съехать, а попытка вежливо намекнуть, что сама постановке задачи выполнена крайне безграмотно.
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: Таймеры/счётчики в AVR

Сообщение hybroid »

Как уж вертится :dont_know: Я ж тебе показал альтернативу - пиши словами. Или не корчи из себя знатока, если не представляешь, как оно работает.
Сам же говорил, что "в двух словах" - не сложно. Слушаю :)
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Таймеры/счётчики в AVR

Сообщение a5021 »

На вопросы, которые предусматривают возможность ответов, я уже ответил, а на некоторые не по одному разу. Вопросы вида "а нарисуйка мне провода вон на той диаграмме устно", не подразумевают сколь-нибудь осмысленного ответа на них в силу бессмысленности самой постановки. Знатока из себя не корчу, говорю то, что знаю и в чем абсолютно уверен. Чего и вам желаю.
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: Таймеры/счётчики в AVR

Сообщение hybroid »

Ты даже не соображаешь, что там несколько сложнее "проводов". :facepalm:
Ясненько. Запел нежно, как соловей. Ты, главное, сам свои слова помни, когда в очередной раз приспичит отвечать на вопросы.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Таймеры/счётчики в AVR

Сообщение a5021 »

hybroid писал(а):Ты даже не соображаешь, что там несколько сложнее "проводов". :facepalm:

Когда вы требовали рисовать провода, вы этого еще не знали что-ли?

Ты, главное, сам свои слова помни, когда в очередной раз приспичит отвечать на вопросы.

Да не переживайте вы за меня. У меня-то, как раз, все хорошо и с таймерами и с МК разных семейств.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Таймеры/счётчики в AVR

Сообщение ARV »

hybroid писал(а):Твой высер "к делу" вообще не имеет отношения.
культурного человека видно сразу.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Enceladus
Первый раз сказал Мяу!
Сообщения: 27
Зарегистрирован: Чт сен 24, 2015 14:58:09

Re: Таймеры/счётчики в AVR

Сообщение Enceladus »

Всем здравствуйте. Помогите пожалуйста советом.
Микроконтроллер: ATmega32. Используемый таймер: T1 (16 bit).

Я хочу включть оба прерывания по сравнению причем первое просто обрабатывается а второе должно сбрасывать таймер. Вопрос: может ли OCR1A быть меньше OCR1B? Просто сброс по сравнению есть только на канал А. В итоге вопрос в том может ли прерывание В сработать раньше чем А (знечение в регистре В меньше) а по А обработать прерывание и сбросить счетчик? Спасибо
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Таймеры/счётчики в AVR

Сообщение a5021 »

Каналы не имеют предопределенной очередности срабатывания. Зависит только от содержимого регистров сравнения.
gavrasio
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Пн июн 01, 2015 15:23:01

Re: Таймеры/счётчики в AVR

Сообщение gavrasio »

Задача состоит в том, что необходимо в момент инициализации таймера (до начала счёта) установить на выходе OCnx таймера ноль. Тривиальнейшая задача инициализации.

Вы, в принципе, ответили на этот вопрос сами. (COMnx1,COMnx2):(1,0)-Сбрасывается в 0 при прямом счете и устанавливается в 1 при обратномсчете (неинвертированный ШИМ-сигнал), (1,1)-Устанавливается в 1 при прямом счете и сбрасывается в 0 при обратномсчете (инвертированный ШИМ-сигнал). Естественно, исходное значение здесь определяется однозначно.
gavrasio
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Пн июн 01, 2015 15:23:01

Re: Таймеры/счётчики в AVR

Сообщение gavrasio »

Enceladus писал(а):
Я хочу включть оба прерывания по сравнению причем первое просто обрабатывается а второе должно сбрасывать таймер. Вопрос: может ли OCR1A быть меньше OCR1B? Просто сброс по сравнению есть только на канал А. В итоге вопрос в том может ли прерывание В сработать раньше чем А (знечение в регистре В меньше) а по А обработать прерывание и сбросить счетчик? Спасибо

Прерывание по таймеру может быть только одно( определённого вида). А вот в обработчике этого прерывания делайте, что Вашей душе угодно. Но не забывайте, что счётчик у таймера один и он сбрасывается как и для OCR1A, так и для OCR1B. Так что, пока он не сброшен, обрабатывайте, что угодно.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Таймеры/счётчики в AVR

Сообщение a5021 »

Что-то вы такое странное говорите. Прерываний у одного таймера может быть много: по одному на каждый канал сравнения, один по переполнению и если есть захват, то по захвату. Никакое прерывание счетчик не сбрасывает, другое дело, что прерывание по переполнению происходит синхронно со сбросом таймера.
Аватара пользователя
hybroid
Друг Кота
Сообщения: 8007
Зарегистрирован: Вс ноя 14, 2010 19:24:26
Откуда: Лукалэнд

Re: Таймеры/счётчики в AVR

Сообщение hybroid »

Изображение




Думаю Вам нужно отдохнуть.
Вот здесь Вам давали хороший совет, но Вы к нему не прислушались.
viewtopic.php?p=2495497#p2495497
aen
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

Re: Таймеры/счётчики в AVR

Сообщение zero648 »

Enceladus писал(а):Микроконтроллер: ATmega32. Используемый таймер: T1 (16 bit).

Я хочу включть оба прерывания по сравнению причем первое просто обрабатывается а второе должно сбрасывать таймер. Вопрос: может ли OCR1A быть меньше OCR1B? Просто сброс по сравнению есть только на канал А. В итоге вопрос в том может ли прерывание В сработать раньше чем А (знечение в регистре В меньше) а по А обработать прерывание и сбросить счетчик? Спасибо

Вам тогда лучше использовать режим 15 счетчика Т1 - Fast PWM с потолком OCR1A. Пишите нужные значения в OCR1B и OCR1A, по OCR1B сработает первое прерывание, а по OCR1A счетчик автоматически сбросится. Чтобы обработать событие по OCR1A нужно ловить переполнение счетчика, т.е. включить прерывание по переполнению TOV1.
gavrasio
Нашел транзистор. Понюхал.
Сообщения: 162
Зарегистрирован: Пн июн 01, 2015 15:23:01

Re: Таймеры/счётчики в AVR

Сообщение gavrasio »

zero648 писал(а):Вам тогда лучше использовать режим 15 счетчика Т1 - Fast PWM с потолком OCR1A. Пишите нужные значения в OCR1B и OCR1A, по OCR1B сработает первое прерывание, а по OCR1A счетчик автоматически сбросится. Чтобы обработать событие по OCR1A нужно ловить переполнение счетчика, т.е. включить прерывание по переполнению TOV1.

Допустим, мы инициализируем Т/С1 так:

Код: Выделить всё

TCCR1A = 0b10110011;  //COM1A1 | COM1A0 | COM1B1 | COM1B0 | - | - | WGM11 | WGM10 |
                                         //ШИМ с точной фазой, 10-ти разрядная(два последних бита),выход OC1A(PB1) сбрасывается в "ноль",
                                //выход OC1B(PB2) сбрасывается в единицу
   TCCR1B = 0b00000001;  //Делитель частоты не используется   
    TIMSK = 0b00000100;   //Прерывание по переполнению Т/С1(бит TOIE1)
    OCR1A = pwm;    //Начальное значение ШИМ( регистр сравнения A)   
   OCR1B = pwm;    //Начальное сравнение ШИМ( регистр сравнения В)

Что мы можем изменить, допустим для OCR1A и вокруг него происходящего в обработчике прерывания кроме его значения? Ничего. С помощью вложенных прерываний это возможно, но они что-то неохотно используются программистами.
Т.е., в данном векторе прерывания переменная, записанная в регистре OCR1A, выполняет функцию задатчика параметра для ШИМ. Для других движений её надо прописывать на другой вектор. Допустим переменную в OCR1A из обработчика прерываний для ШИМ можно перекидывать в обработчик по захвату.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Таймеры/счётчики в AVR

Сообщение a5021 »

zero648 писал(а):Вам тогда лучше использовать режим 15 счетчика Т1 - Fast PWM с потолком OCR1A. Пишите нужные значения в OCR1B и OCR1A, по OCR1B сработает первое прерывание, а по OCR1A счетчик автоматически сбросится. Чтобы обработать событие по OCR1A нужно ловить переполнение счетчика, т.е. включить прерывание по переполнению TOV1.

А вы уверены, что прерывание по переполнению вызывается в этом случае? Мне сейчас лень проверять, но похожий режим CTC top=OCR1A отрабатывает без прерывания по переполнению. Прерывание по совпадению OCR1A, тем не менее вызывается, что и является в этом случае аналогом прерывания по переполнению.
Ответить

Вернуться в «AVR»