Микроконтроллеры | Как сформировать ряд частот, Гц (33,33, 66,66, 133,33....) |
|
---|---|---|
Digital, допустим, нужно 33,33 Герца Таймер должен срабатывать с удвоенной частотой и передергивать для меандра состояние вывода. |
|
|
Охо-хо...что называется, Моня, зачем нам эти шутки ? Какие проценты, какие прерывания? Для выдачи меандра 33,3(3) Гц нужен период 30000 мкс, или 15000 мкс на полмеандра. Ставите таймер1 в СТС моду, СОМ1А=01 (альтерация OC1A), в регистр OCR1A записываете 15000, на выходе ОС1А имеете свой меандр. Проц 100% свободен, ему остаётся только выждать 5с, дождаться альтерации и записать новое значение в OCR1A. |
|
|
Это конечно хорошо, но если автор выберет МК другого семейства ? |
|
|
Кажется, он говорил, что тип МК не принципиален. Взять 6-ногую аврку, типа ATtiny10, разместить на конце спички... |
|
|
хм... Когда меня просят выдать 33,33 герца, я воспринимаю это, как 33,3300 а не 33,3333.... Поэтому и начал в первую очередь проценты считать. |
|
|
Всё равно, об одном проценте речь не идёт. Для частоты 33,3300 Гц таймер может иметь период или 30002, или 30003, погрешность будет порядка 0,003%. |
|
|
Когда есть много мнений, это радует. Думаю, что прежде всего лучше узнать принцип решения задачи, а как именно его реализовать это дело второстепенное, способы, как правило, будут разные и по точности в том числе. Спасибо всем отвечающим. |
|
|
А если взять (дополнительный) МК-р младшего семейства с таймером, для генерации и прикинуть так: 1. Запрограммировать таймер на генерацию прерываний каждые 1,5мс для получения меандра с периодом 3мс - это получится наибольшая требуемая частота 333,33 Гц, с допустимой погрешностью +0,003(3) Гц; Погрешность будет складываться из точности тактового генератора плюс погрешность от разницы в 0,003(3) Гц, т.е. несколько больше 0,01%. Правда ещё останется время обработки самого прерывания, но им можно наверное и пренебречь, т.к. до 1% ещё далеко. Вроде бы логически всё должно получиться? |
|
|
Digital: .Вроде бы логически всё должно получиться? Digital: 2. .. т.е. пропускать ненужные прерывания; Digital: : 3. ..т.е. отключать выход таймера Digital: Правда ещё останется время обработки самого прерывания 1. Запретить все остальные прерывания Последнее связано с тем, что длительности исполнения команд могут быть разными, а при поступлении запроса на прерывание текущая команда обычно исполняется до конца. Даже если зациклить основной поток команд единственной командой (вроде jmp), то и тогда возможны случаи, когда запросы на прерывания могут приходиться на разные стадии выполнения этой команды. Впрочем, все это впишется в ваши "1%". Непостоянство времени реакции повлияет только на дрожание фронтов (т.н. "джиттер"), но никак не на частоту генерируемого сигнала. |
|
|
Отключать выход таймера - это имелось ввиду, сооответствующей командой в самом прерывании прекращать переводить состояние вывода из "0" в "1" и обратно (например установить вывод в "0" или третье состояние), на требуемое время. Пропускать ненужные прерывания - имелся ввиду логический пропуск, т.е. сравнение с требуемым числом и при совпадении переключение вывода. IDiod: Запретить все остальные прерывания IDiod: Остановить основной поток команд. |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |