Свежие обсуждения
Микроконтроллеры

Как сформировать ряд частот, Гц (33,33, 66,66, 133,33....)

1 2 6

Всё таки таймер... А почему прерывание должно идти с удвоенной частотой и какой, максимально требуемой (333,33Гц)? Отсчитывать время выдержки в основном цикле программы имеете ввиду?

 

Digital: Всё таки таймер... А почему прерывание должно Тут уже разумно говорить в приложении к конкретной структуре выбранного контроллера...

 

Vlad_Petr: ИЛИ (если это основное занятие для контроллера), можно просто число тактов (команд) в циклической программе задать, для получения необходимого периода.
Имеется ввиду программирование на ассемблере?

 

Vlad_Petr: Тут уже разумно говорить в приложении к конкретной структуре выбранного контроллера...
Без более-менее ясного алгоритма не могу конкретно выбрать тип МК (хотя МК широкого применения сейчас очень сходны по начинке, просто разный объём памяти и кол-во портов). Ну получается что разные специалисты в принципе сошлись на сходном решении - значит так общепринято на практике, буду получать частоты коэффициентами.

 

Digital: Имеется ввиду программирование на ассемблере? Разумеется..и это так естественно..

 

Digital: ип МК наверное не принципиален, т
Digital: Без более-менее ясного алгоритма не могу конкретно выбрать тип МК

Значит выбирайте микроконтроллер со встроенным ШИМ генератором, и не ломайте голову.

 

Да не надо никакого таймера! Tadas же всё сказал -
Tadas: Вам же не числа надо делить, а частоту.
Я вон почти не работал с МК, и то знаю, что по сути тут надо имитировать счётчик-делитель. Т.е. нужно определять наличие импульса, и пропускать на выход каждый 3-й, 8-й, 15-й и т.д. Это возможно без таймеров, и даже с некварцованной рабочей частотой МК, лишь бы она была много больше считаемой... А чтобы на выходе был меандр, то выпускать вдвое бОльшую частоту, деля её потом триггером, или, опять же по совету Tadasa -
Tadas: Надо организовать прерывание от таймера, чтобы оно шло с удвоенной частотой,
С таким алгоритмом справится почти любой МК, лишь бы у него был достаточный запас по быстродействию.

 

Digital: А почему прерывание должно идти с удвоенной частотой и какой,
Да потому, что выход надо инвертировать дважды за период.
Все делается чисто на прерывании таймера, никаких циклов считать не надо, таймер сам сосчитает, ассемблер или С - никакой разницы.
Ведь речь идет об очень низких частотах - десятки - сотни герц.
Вот если бы речь шла о сотнях кГц - тогда дело другое, тут уж пришлось бы показать искусство - см напр. тему про DDS генератор.
Там GM как раз показал виртуозный пример того, что в пределе может дешевенький МК.

 

Tadas: Все делается чисто на прерывании таймера, никаких циклов считать не надо,
Tadas, или я Вас неправильно понял, или Вы меня... Вот я предлагаю - считать импульсы программно. Что такое, допустим, поделить на 159? Это значит - отсчитать 158 входных импульсов, ничего с ними не делая, а 159-й передать со входа на выход. Всё, на выходе получается последовательность тех же импульсов, но в 159 раз реже! Зачем здесь нужен таймер? Я же говорю, здесь даже не нужна кварцованная тактовая частота МК - главное, чтобы по ней был большой запас. Для нынешних МК это не проблема даже для входа порядка 1 мгц.

 

Спец: Вот я предлагаю - считать импульсы программно. Что такое, допустим, поделить на 159? Это значит - отсчитать 158 входных импульсов, ничего с ними не делая, а 159-й передать со входа на выход. Это от задачи зависит. Если не требуется привязка фазы выходного сигнала к опорной частоте, тогда можно и так.