Вот пример с использованием компаратора МК. Компаратор с диодами D1-D4 - эквивалентная (почти) схема компаратора МК. Конденсатором C1 подбирается запаздывание переключения компаратора по отношению к переходу через ноль. Если верить Протеусу, никаких ложных срабатываний.
Зарегистрирован: Вс мар 04, 2007 13:14:25 Сообщений: 375 Откуда: Украина
Рейтинг сообщения:0
начал разбираться немного в протэусе, ну вот у меня срабатывает прерывание каждый раз когда полуволна переходит через 0, а дальше интересно узнать алгоритм кто как делает задержку перед подачей управляющего импульса?
PS. пока пробовал простийшим delay отсчитывать 5мс после перехода через 0, и на осцилограме видно что срезано половина полуволны.
Зарегистрирован: Вс мар 04, 2007 13:14:25 Сообщений: 375 Откуда: Украина
Рейтинг сообщения:0
ibiza11 писал(а):
:shock: а что непонятно каким способом еще можно задержку сделатЬ?
Таймером ещё можно, или циклом с delay, просто хочу узнать какой метод используют большинство чтобы не изобретать велосипед. Если таймером то хотяб формулу для расчёта частоты.
Зарегистрирован: Вс мар 04, 2007 13:14:25 Сообщений: 375 Откуда: Украина
Рейтинг сообщения:0
И всётаки хотелось бы помотреть готовые решения, так как чего изобретать велосипед заного... если есть ссылки на подобные устройства поделитесь плиз, желательно что-бы было на Си, так как на асм не бум-бум.
Уважаемый, Krik99, на Вашем сайте еще в январе этого года появилась статья RC5 декодер на Tiny2313, с вашим авторством и благодарностью Goodefine за исходники и помощь в их переделке. думаю там есть пример использования таймера.......
Опубликовано: 18.05.2009 Автор: Krik99..... .....На программе останавливаться не буду, так как в исходниках всё предельно ясно. Исходники на Си.
Уважаемый, Yellow Tiger, и все таки вы не прояснили как же это может повлиять.
я же поясню, если частота контроллера 16МГц, таймер работает на прескалере 256, а обработчик прерывания занимает меньше 256 тактов (числа для примера), то никакой роли в задержке этот обработчик не сыграет!!! тааймер будет считать тактами равными 16мкс, а один такт контроллера 62,5 наносекунды.
Зарегистрирован: Вс мар 04, 2007 13:14:25 Сообщений: 375 Откуда: Украина
Рейтинг сообщения:0
to ibiza11 да не про настройку таймера вопрос был... я просил поделиться исходником или ссылкой на пример регулятора, а потом уже что-нить сообразим. Так как что-то нечего толкового не нагуглил.
и все таки вы не прояснили как же это может повлиять.
Пардон, мне казалось, сказанного достаточно. Исправляюсь...
С одной стороны, следует стремиться каждый стандартный участок кода писать только один раз - так, чтобы он годился для будущих применений. Скажем, вместо того, чтобы всякий раз подсчитывать константу для таймера и вписывать её в текст процедуры прерывания, легче сформулировать что-то похожее на:
и использовать в дальнейшем (только последовательность будет немного сложнее ). С другой стороны, это не только экономит время при написании, но также экономит время и при отладке - если при решении следующей задачи временные интервалы будут другими, то тот же самый код (а многие именно скопируют код из предыдущего проекта - зачем писать снова то, что уже было написано?) будет выдавать неверные интервалы, и на обнаружение причины уйдет некоторое время. А вот правильно написанные определения это учтут автоматически, и для частоты 8МГц, прескейлера 64, 8 тактов накладных расходов и необходимой задержки 100мкс дадут значение для загрузки – 12, а не 13, как было бы без учета накладных расходов. Благодаря такому поведению, эти определения как раз-таки можно копировать из проекта в проект, можно вообще перенести в инклуд-файл и больше не мучить clip board. Особенно мешают такие "роли не сыграет" начинающим - у них еще нет "домашних заготовок" и приходится все делать наново, но на все внимания не хватает и в результате - каждая неучтенная мелочь может обернуться неприятным сюрпризом.
ibiza11 писал(а):
обработчик прерывания занимает меньше 256 тактов
Только речь шла не о длине тела процедуры обработки прерывания, а о накладных расходах на включение таймера, который используется в качестве источника калиброванной временной задержки:
Krik99 писал(а):
...срабатывает прерывание ... когда полуволна переходит через 0, а дальше интересно узнать алгоритм кто как делает задержку перед подачей управляющего импульса?
посчитаю по-своему:
F=8МГц, T=125нс, Pre=64, тогда Tтаймера=125нс*64=8мкс
Delay=100мкс.
12тиков*8мкс=96мкс
13тиков*8мкс=104мкс
в любом из случаев не сходится на 4мкс. Чтобы было точно, прескалер уменьшают, следовательно и учитывают те такты которые тратятся на выполнение.
8команд*125нс=1мкс, это меньше, чем 4мкс на которые все равно не сходится интервал. в любом случае будет либо 95мкс либо 105мкс, что отличаются от необходимого на 5мкс.
формулу поправьте для новичков, ато скопируют и будут мозг ломать.
p.s. неважно где идет настройка, в прерывании или в основном цикле. это моя неточность конечно, но я имел в виду именно настройку таймера.
Не бережете вы себя... или не доверяете подсчет ассемблеру?
мне беречь себя рано, да и во времени я не особо ограничен) пользуюсь формулами только при подборе, а если он не требуется, не пишу формул Хотя правильнее писать, чтобы потом разобрался кто нибудь в моем исходнике. А я и так разберусь)
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения