Перейти к содержанию

Использование Счетчика И Таймера Мк


Рекомендуемые сообщения

Здравствуйте. Подскажите такие две вещи. Я вроде многое уже понимаю в деле программирования МК. Но вот еще 2 момента отелось бы уточнить.

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

И другой момент, как использовать таймер МК, для изменения ширины импульсов при Широтно импульсном модулировании (ШИМ).

Буду очень признателен)

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

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

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

Вообще - все описано в даташите на конкретный МК.

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

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

Для этого надо насторить тактовые импульсы от внешнего источника, выстановить предделитель. и поехал считать, прерывания обрабатывать незабывай.

И другой момент, как использовать таймер МК, для изменения ширины импульсов при Широтно импульсном модулировании (ШИМ).

Буду очень признателен)

Молча, ШИМ, добивается путем загрузки в регистр "счета" по прерывании таймера.

Пишу на Си CCS PICC для PIC, CVAVR для AVR, и иногда IAR для NEC. Особенно привык к SIM300dz.

ICQ: 288449055

Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Считает счетчик, "железка".

А ты в программе читаешь его регистр состояния.

После того, как прочитал, проще его "сбросить", записав в этот регистр 0

Это для того, что-бы при следующем чтении получить нормальный результат.

Как советовать, так все чатлане ...

Ссылка на комментарий
Поделиться на другие сайты

я так понимаю.. счетчик - железка.. которая уже встроена в МК,,, ?? а адрес и наименование регистра состояния счетчика нада смотреть в даташите для конкретно МК?

Ссылка на комментарий
Поделиться на другие сайты

Правильно понимаешь.

Регистры и режимы работы в даташите.

Современные таймеры/счетчики навороченные, режимов работы может быть несколько.

Обычно такие:

- Подсчет внешних событий

- Формирование временного интервала

- Генерация меандра

- Широтно-Импульсная Модуляция

Может быть какой ни будь сложный режим, иногда связывают 2 таймера/счетчика, в общем каждый производитель изощряется по своему.

Но простейшие режимы у всех более-менее похожи.

Как советовать, так все чатлане ...

Ссылка на комментарий
Поделиться на другие сайты

Чтобы использовать счетчик в режиме счета, необходимо выставить источник сигнала для него - внешний вывод, предделитель лучше отключить совсем, если тебе хватает 8-битного счетчика чтобы он не переполнялся между считываниями. Если же есть насущная необходимость счета в 16 битах ... это позволяет сделать второй 16-битный таймер, но он обычно в контроллере единственный способный работать в режиме ШИМ, и к тому же обладает небольшим быстродействием. Так вот если действительно нужно подсчитывать первым таймером в 16-битном режиме, тогда нужно использовать предделитель. Фишка только в том, что значение из предделителя считать невозможно, оно устанавливается лишь методом досчета, т.е. подаем на вход счетчика внешне импульсы и считаем их до тех пор пока значение записанное в регистре таймера не изменится, потом вычитаем это число из 256 и получаем то что было записано в предделителе. Но у этого метода есть минус - во время досчета внешние импульсы игнорируются.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Alexeyslav, мы в данном случае не знаем о каком процессоре идет речь.

Не у всех МК таймеров/счетчиков 1*8 + 1*16, имеются и с большим числом.

Иногда можно пару 8-битных объединить в 16-битный.

Есть МК у которых вообще нет 8-битных таймеров/счетчиков, только 16-битные.

Но применительно к самым простым МК, и возможным вариантам применения их счетчиков, ты расписал хорошо.

Автор наверняка спасибо скажет.

Изменено пользователем Migray

Как советовать, так все чатлане ...

Ссылка на комментарий
Поделиться на другие сайты

Как правило, нормально т.е. напрямую с вывода может работать только первый таймер, остальные синхронные... и перед подачей на сам аппаратный счетчик проходит через вентиль тактируемый тактовой частотой генератора самого контроллера, что делает очень сложным отлавливание таким образом очень коротких импульсов, да и быстродействие остальных счетчиков по внешнему выводу обычно невелико если первый таймер способен считать с частотой до 25Мгц, то вторые - не более 1-2Мгц а то и сотни килогерц (по даташиту).

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

"Как правило" и "по даташиту" можно говорить после того, как автор темы напишет, с каким семейством, или хотя-бы с МК какой фирмы он работает.

Нельзя утверждать что таймер может работать только на 20 МГц, ведь есть МК и на 64 МГц и на 200 МГц тактовой.

Возможно что там и таймеры более скоростные.

Или про приоритет первого таймера.

Загляни в даташит на 78K0R, раздел 6 "Таймеры" и скажи, чем отличаются эти 6 таймеров в части подсчета внешних импульсов.

Как советовать, так все чатлане ...

Ссылка на комментарий
Поделиться на другие сайты

Вот смотрите, мне нужно осуществить такую операцию -

есть 2 источника сигналов (импульсов) - мы их подаем на 2 входа МК, 2-мя разными счетчиками считаем импульсы с каждого входа,

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

Т.е. получается нужно сразу 3 счетчика...

используя я МК Tiny2313...

Можно ведь такое реализовать?

Ссылка на комментарий
Поделиться на другие сайты

Сначала читаем Гайка М3 и ТЗ на разработку

Потом думаем.

Очень сильно думаем.

Выбираем проц под задачу.

Учитывая что в тини 2 таймера, а для твоей задачи лучше применить проц с 3 таймерами, то придется подобрать что-то другое.

Как советовать, так все чатлане ...

Ссылка на комментарий
Поделиться на другие сайты

а вот мне еще нужно будт ШИМ релаизовывать.. и тоже таймер) может мне проще дл тех двух источников импульсов завести отделные счетчики.. и с них на порты ввода...???

а считать секунду и реализовывать ШИМ на этих двух таймерах?

Изменено пользователем rekrut683
Ссылка на комментарий
Поделиться на другие сайты

А может просто выбрать нормальный проц?

Или вообще все на таймерах и ШИМ-контроллере, т.е. вообще без МК?

Не Тиной единой живы микроконтроллеры.

Если не хочешь ядро менять, посмотри на Меги.

А можно и на продукцию других производителей обратить внимание.

А то получается так, "есть у меня тини, хочу прикрутить к своему устройству, а зачем - не знаю".

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

Изменено пользователем Migray

Как советовать, так все чатлане ...

Ссылка на комментарий
Поделиться на другие сайты

ну понятно... я так понял осталдьное дело уже за мной... но еще одно НО.. охото то все подешевле сделать...)) а можно и на ШИМ-контроллере... не посоветуете како-либо,, с двумя входами ошибки,,, т.е. чтобы он по раности этих входов изменял ШИМ,, а то придется к нему еще пристраивать устр-во сравнения двух аналоговых сигналов

Ссылка на комментарий
Поделиться на другие сайты

Учитывая что в тини 2 таймера, а для твоей задачи лучше применить проц с 3 таймерами, то придется подобрать что-то другое.

У автора задача-то простенькая. И вовсе не обязательно для подсчёта использовать 2 аппаратных таймера. Вполне можно считать и програмно, заведя входные сигналы на внешние прерывания. Тем более, что больше МК ничем глобальным заниматься и не будет.

зы:Если кто пропустил, задача типа "в одну трубу втекает, из другой вытекает", а меряем частоту с датчиков потока жидкости....

Изменено пользователем YurkaM
Ссылка на комментарий
Поделиться на другие сайты

У меня была мысль так считать.... но я до конца не понял.... как это релизовать

я так понимаю, что н ужно считать сколько раз "1" смениться "0" на каждом входе, правильно? в течении секунды...которая будет здаваться аппаратным таймером?

смена "1" на "0" означает, что один импульс пришел! так?

Ссылка на комментарий
Поделиться на другие сайты

Все конечно хорошо, но с какой частотой вращается вертушка?

Отсюда можно вытащить характеристики импульса.

После этого посмотреть, справится п/п прерывания с такими импульсами или нет?

Т.е. это будет зависить от потока и конструкции датчика.

Когда я занимался дозатором, то через прерывание проц не успевал отрабатывать, считали счетчиком.

Хотя там был всего один расходомер, один двигатель на кран, датчик температуры и обмен с хостом по медленному 485 каналу.

Я не зря опять выложил "Гайку ...", как всегда начали решать задачу не с той стороны.

Давайте определим все исходные данные, которые и определят возможные варианты схемы/программы.

Как советовать, так все чатлане ...

Ссылка на комментарий
Поделиться на другие сайты

объясните еще, что вы называете прерываниями? п\п - ето подпрограмма?

выходной сигнал до 300 Гц.... т.е это макимальная частота вращения, следовательнои импульсов....

я уже бы хотел начать заниматься.. эти делом...

но очу чтобы вы действительно мне подсказали лучший вариант.))

Ссылка на комментарий
Поделиться на другие сайты

п/п - это действительно подпрограмма

Прерывание - процесс остановки выполнения основной программы и переход на нужную п/п с последующим возвратом в основную программу.

Контроллер прерываний есть в любом микроконтроллере.

Соответсвующими битами конфигурации его можно настроить на вызов п/п прерывания при переподе 1/0 или 0/1 на входе прерывания.

Т.е. пришел перепад, проц кинулся в п/п, прибавил единичку к переменной, проверил состояние и вернулся обратно.

На метание туда-обратно и собственно обработку требуется некоторое время.

300 Гц это 3,(3) мсек, время достаточно большое, там много чего можно успеть.

В принципе для одного канала счетчика вполне можно пойти по этому пути.

Но при реализации 2 каналов счета нужно учитывать, что возможен одновременный приход 2 импульсов.

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

Особенно сложно то, что мы не можем сказать что один канал прерывания имеет приоритет над другим, тут нам важны оба канала :(

В данном случае я все-же подумал-бы о большем числе таймеров/счетчиков.

В принципе возможны и внешние счетчики, если кроме тини в магазине больше ничего нет.

Как советовать, так все чатлане ...

Ссылка на комментарий
Поделиться на другие сайты

Но при реализации 2 каналов счета нужно учитывать, что возможен одновременный приход 2 импульсов.

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

Если во время обработки одного прер. приходит второе, то флажок всё равно поставится и как только первое обработали, сразу обработаем и второе. Т.е. мы его никак не прозеваем (уж при частотах-то в 300 Гц !!), ну если только за время обработки одного, на второй вход придут 2 или более импульсов... Во всяком случае, если писать на асме, то эта самая обработка (инкремент регистра или двойного регистра) займет единицы микросекунд. - какие проблемы??

Ссылка на комментарий
Поделиться на другие сайты

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

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

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

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

Почему-то все упорно хотят навешать на МК чего-нибудь ещё... Зачем???????? Если трезво посмотреть на задачу - эта 2313 справиться со всем и ещё ресурсов останется выше крыши. И чё вы так шарахаетесь от прерываний, как от чумы не понятно... Ну давайте тогда вообще сделаем на транзисторах счётчики, узел сравнения и ещё ШИМ. В МК понапихано столько всего, - дык пускай он трудится!

кстати там надо не забыть что количество тактов которое необходимо таймеру для отсчета ровно 1 секунды должно быть несколько меньше расчетного т.к.

Во-первых, оцените возможную погрешность. Пусть грубо (очень) промахнёмся на 10 лишних тактов. При 8Мгц тактовой это 1.25 мкс!

Во-вторых, в данном случае - секунда это вообще не принципиально (даже многовато). Тут нет задачи приводить к каким-то стандартным единицам.

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы публикуете как гость. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...