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

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

1 6

Какими способами (алгоритмами) можно сформировать поточнее вот такой ряд частот (меандр), Гц: 33,33, 66,66, 133,33, 166,66, 233,33, 266,66, 333,33? Видно конечно, что частоты отличаются на 33,33 Гц, но не подряд... Тип МК наверное не принципиален, т.к. интересуют способы (алгоритмы) как с помощью встроенных дополнительных устройств (например таймеров), так и без.

 

Берёте 9333.3(3) Гц и делите на 28, 35, 40, 56, 70, 140, 280.

 

Обычно 200кГц делят на три. Если со стандарта 1мГц, то на 15.....

 

Деление - это ведь непростая операция для МК, может ещё есть какие-нибудь менее затратные способы (алгоритмы)?

 

Digital: Деление - это ведь непростая операция для МК
А Вам что, МК жалко ? Перетрудится бедняга ?
Вам же не числа надо делить, а частоту.
К стати, какая погрешность допустима ?

 

Digital: Деление - это ведь непростая операция для МК, может ещё есть какие-нибудь менее затратные способы (алгоритмы)? А не используется арифметическое деление, оно тут реально не приложимо.. Исходной опорой является тактовый генератор контроллера. Далее: используется ИЛИ внутренний таймер с заданным коэффициентом пересчета, ИЛИ (если это основное занятие для контроллера), можно просто число тактов (команд) в циклической программе задать, для получения необходимого периода.

 

Vlad_Petr: А не используется арифметическое деление, оно тут реально не приложимо
Tadas: Вам же не числа надо делить, а частоту.
Я подумал что предлагается делить именно числа (мало ли какой способ имелся ввиду). Мне бы немного расшифровывать предлагаемое ;) Перезагружать коэффициент деления в регистр таймера это мне понятно.

Tadas: К стати, какая погрешность допустима ?
Чуть меньше 1%.

 

А все частоты нужны одновременно ?

 

Нет, надо циклически, поочередно друг за другом, с задержкой (интервалом) около 5 секунд между частотами.

 

Digital: Перезагружать коэффициент деления в регистр таймера это мне понятно.
Ну так это и есть ответ на вопрос
Надо организовать прерывание от таймера, чтобы оно шло с удвоенной частотой, в каждом прерывании инвертировать бит порта и перезагружать коэффициент.
Далее можно отсчитывать время выдержки для данной частоты и по истечении оного менять коэффициент на следующий.