Определение перехода ~220 через "0"
- DrWatson
- Опытный кот
- Сообщения: 890
- Зарегистрирован: Вт янв 20, 2009 14:49:08
- Откуда: Гондурас, Мурманск
Вот пример с использованием компаратора МК. Компаратор с диодами D1-D4 - эквивалентная (почти) схема компаратора МК. Конденсатором C1 подбирается запаздывание переключения компаратора по отношению к переходу через ноль. Если верить Протеусу, никаких ложных срабатываний.
- Вложения
-
- 220Sync.rar
- (13.46 КБ) 528 скачиваний
- Если вы такие умные, то почему тогда строем не ходите?
ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης
ἓν οἶδα ὅτι οὐδὲν οἶδα (с) Σωκράτης
- Реклама
- Krik99
- Потрогал лапой паяльник
- Сообщения: 375
- Зарегистрирован: Вс мар 04, 2007 13:14:25
- Откуда: Украина
- Контактная информация:
начал разбираться немного в протэусе, ну вот у меня срабатывает прерывание каждый раз когда полуволна переходит через 0, а дальше интересно узнать алгоритм кто как делает задержку перед подачей управляющего импульса?
PS. пока пробовал простийшим delay отсчитывать 5мс после перехода через 0, и на осцилограме видно что срезано половина полуволны.
PS. пока пробовал простийшим delay отсчитывать 5мс после перехода через 0, и на осцилограме видно что срезано половина полуволны.

- Реклама
- Yellow Tiger
- Сверлит текстолит когтями
- Сообщения: 1148
- Зарегистрирован: Вт июл 08, 2008 12:24:17
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Уважаемый, Krik99, на Вашем сайте еще в январе этого года появилась статья RC5 декодер на Tiny2313, с вашим авторством и благодарностью Goodefine за исходники и помощь в их переделке. думаю там есть пример использования таймера.......
P.S. Вот нашел еще одну статью с исходником "предельно понятным" (так написано в статье
) с использованием таймера 0
я же поясню, если частота контроллера 16МГц, таймер работает на прескалере 256, а обработчик прерывания занимает меньше 256 тактов (числа для примера), то никакой роли в задержке этот обработчик не сыграет!!! тааймер будет считать тактами равными 16мкс, а один такт контроллера 62,5 наносекунды.
P.S. Вот нашел еще одну статью с исходником "предельно понятным" (так написано в статье
Уважаемый, Yellow Tiger, и все таки вы не прояснили как же это может повлиять.Krik99 писал(а):Опубликовано: 18.05.2009
Автор: Krik99.....
.....На программе останавливаться не буду, так как в исходниках всё предельно ясно. Исходники на Си.
я же поясню, если частота контроллера 16МГц, таймер работает на прескалере 256, а обработчик прерывания занимает меньше 256 тактов (числа для примера), то никакой роли в задержке этот обработчик не сыграет!!! тааймер будет считать тактами равными 16мкс, а один такт контроллера 62,5 наносекунды.
Ставим плюсы: )
- Yellow Tiger
- Сверлит текстолит когтями
- Сообщения: 1148
- Зарегистрирован: Вт июл 08, 2008 12:24:17
Пардон, мне казалось, сказанного достаточно. Исправляюсь...ibiza11 писал(а):и все таки вы не прояснили как же это может повлиять.
С одной стороны, следует стремиться каждый стандартный участок кода писать только один раз - так, чтобы он годился для будущих применений. Скажем, вместо того, чтобы всякий раз подсчитывать константу для таймера и вписывать её в текст процедуры прерывания, легче сформулировать что-то похожее на:
Код: Выделить всё
.equ XTAL = 8000000 ;XTAL frequency, HZ
.equ TimPrsc = 256 ;Timer prescaler
.equ SysClk = XTAL/TimPrsc;System Clock
.equ Prolog = 8 ;Tacts expenses
.equ Delay = 0.005 ;Delay required
.equ TimInit = (SysClk*Delay - Prolog)/TimPrscС другой стороны, это не только экономит время при написании, но также экономит время и при отладке - если при решении следующей задачи временные интервалы будут другими, то тот же самый код (а многие именно скопируют код из предыдущего проекта - зачем писать снова то, что уже было написано?) будет выдавать неверные интервалы, и на обнаружение причины уйдет некоторое время. А вот правильно написанные определения это учтут автоматически, и для частоты 8МГц, прескейлера 64, 8 тактов накладных расходов и необходимой задержки 100мкс дадут значение для загрузки – 12, а не 13, как было бы без учета накладных расходов. Благодаря такому поведению, эти определения как раз-таки можно копировать из проекта в проект, можно вообще перенести в инклуд-файл и больше не мучить clip board.
Особенно мешают такие "роли не сыграет" начинающим - у них еще нет "домашних заготовок" и приходится все делать наново, но на все внимания не хватает и в результате - каждая неучтенная мелочь может обернуться неприятным сюрпризом.
Только речь шла не о длине тела процедуры обработки прерывания, а о накладных расходах на включение таймера, который используется в качестве источника калиброванной временной задержки:ibiza11 писал(а):обработчик прерывания занимает меньше 256 тактов
Krik99 писал(а):...срабатывает прерывание ... когда полуволна переходит через 0, а дальше интересно узнать алгоритм кто как делает задержку перед подачей управляющего импульса?
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
конечно хорошо иметь формулу для автоматического подсчета. я считаю сам один раз и больше ничего не меняю.
TimInit = (SysClk*Delay - Prolog)/TimPrsc
подставим числа:
TimInit = (8000000/256*0,005 - 8 )/256 = простите, херня какая то...
посчитаю по-своему:
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. неважно где идет настройка, в прерывании или в основном цикле. это моя неточность конечно, но я имел в виду именно настройку таймера.
TimInit = (SysClk*Delay - Prolog)/TimPrsc
подставим числа:
TimInit = (8000000/256*0,005 - 8 )/256 = простите, херня какая то...
посчитаю по-своему:
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. неважно где идет настройка, в прерывании или в основном цикле. это моя неточность конечно, но я имел в виду именно настройку таймера.
Ставим плюсы: )
- Yellow Tiger
- Сверлит текстолит когтями
- Сообщения: 1148
- Зарегистрирован: Вт июл 08, 2008 12:24:17
Да, пока переносил в пост, что-то изменилось... Но сути сказанного это не меняет - я не о значениях прескейлера говорил и не о порядке подсчета.ibiza11 писал(а):херня какая то...
А вот формулы эти полезно самому написать (вооружившись ДШ), а не списывать у кого-либо.ibiza11 писал(а):формулу поправьте для новичков, ато скопируют и будут мозг ломать.
P.S.
Не бережете вы себя... или не доверяете подсчет ассемблеру?ibiza11 писал(а):я считаю сам один раз и больше ничего не меняю.
- ibiza11
- Поставщик валерьянки для Кота
- Сообщения: 1900
- Зарегистрирован: Сб фев 21, 2009 13:11:40
- Откуда: Москва
Yellow Tiger писал(а):Не бережете вы себя... или не доверяете подсчет ассемблеру?
Ставим плюсы: )
Re:
aahz - если можно плату и описание в студию.aahz писал(а):вот схема регулятора, предлагаемого "мастер кит". он универсальный. может работать регулятором мощности и терморегулятором.


