|  |  |  | 
|  | Всё таки таймер... А почему прерывание должно идти с удвоенной частотой и какой, максимально требуемой (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-й передать со входа на выход. Это от задачи зависит. Если не требуется привязка фазы выходного сигнала к опорной частоте, тогда можно и так.
 | 
 | 
|  |  |  |