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

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

1 6

Digital: Это имеете ввиду в начале самого обработчика прерывания от таймера другие все прерывания запрещать, а при выходе из него снова разрешать?

Это и так делается автоматически (хотя в некоторых архитектурах прерывания более высокого уровня остаются разрешены). Я имел ввиду глобальный запрет.

Digital: А можете объяснить поподробнее, что это означает и каким образом достигается

Процессор останавливается и ждет какого-либо события. Частный случай - уход в "спящий" режим. Это достигается либо специальными командами, либо изменением битов в соответствующих регистрах управления. Без привязки к конкретной архитектуре разговор получается абстрактным.

Digital: Просто я раньше сталкивался с изменением периода меандра

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

Digital: В обработчике прерывания ... были ещё операторы сравнения. Разница от случая к случаю не была постоянной. А бороться с этим на 100% не получалось,

В этом, отчасти, и заключается искусство программирования. Достигается, как сказал Tadas: надо считать такты, вылизывать все программные петли, втыкать куда надо нопы, жуть

 

IDiod, подтвердите или опровергните, пожалуйста - моё предложение проходит? Имею ввиду простейший алгоритм, не требующий ни таймера, ни прерываний, ни даже кварцованной тактовой частоты, а только лишь большой (желательно многократный) запас по тактовой частоте МК над входным сигналом. Если он есть, то можем работать в режиме опроса входного сигнала, в петлю опроса входит счёт количества импульсов и сравнение этого количества с коэффициентом деления (точнее, его половиной), а при равенстве инверсия выходного сигнала. Я так понимаю, что если коэф. деления постоянен, то вариации числа шагов программы отсутствуют, и выходная частота будет жёстко привязана ко входной - джиттер будет минимален. И разумеется, он будет тем меньше, чем выше тактовая, а при 33 гц это можно обеспечить на много порядков. Отсутствие прерываний и прочего - залог простоты программирования и отсутствия ошибок.

 

IDiod: Терминологический вопрос - что считать периодом меандра.
Ну т.е. получаемый период отличался от требуемого в течении одного-двух тактов. Изменялась, чаще в сторону увеличения, длительность импульса. Скважность сигнала в эти моменты уже не была равна двум.

IDiod: изменение местоположений фронтов
IDiod: дрожание фронтов (т.н. "джиттер")

Просто уточню, для правильного мною понимания, другими словами - это уход привязки фронтов выходного сигнала к фронтам тактового генератора, т.е. когда они перестают совпадать?

 

Спец: Отсутствие прерываний и прочего - залог простоты программирования и отсутствия ошибок.
С точностью до наоборот

 

Спец: моё предложение проходит?

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

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

 

Digital: Просто уточню, для правильного мною понимания, другими словами - это уход привязки фронтов выходного сигнала к фронтам тактового генератора, т.е. когда они перестают совпадать?

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

 
1 6