|
Увеличение Длины Поступающих Импульсов, поступил импульс длительностью L, а выдать нужно L+L/K |
|
|
|
Jul 1 2009, 02:09
|
Группа: Новичок
Сообщений: 9
Регистрация: 3-06-09
Из: Хабаровск
Пользователь №: 49 895

|
голову сломал но сделать не могу никак маленький опыт программирования очевидно.
есть задача:
поступают прямоугольные испульсы с частотой от 0 до 150 Гц и скважностью 1. необходимо выдать подобные импульсы но с "плавной" регулировкой частоты (длительности) импульса/паузы и такой же скважностью в сторону увеличения длительности (уменьшения частоты).
т.е. допустим поступил импульс/пауза длительностью L, а выдать нужно L+L/K, где K - коэф-т удлиннения импульса/паузы.
пробовал таймером вызывать цикл счетчика и одновременно выдачи импульса в разных вариациях, но чтото никак
может есть какая идея простая?
буду благодарен за помощь!
|
|
|
|
|
 |
Ответов
|
Jul 1 2009, 11:54
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(IC7K @ Jul 1 2009, 01:09)  есть задача: поступают прямоугольные испульсы с частотой от 0 до 150 Гц и скважностью 2. необходимо выдать подобные импульсы но с "плавной" регулировкой частоты (длительности) импульса/паузы и такой же скважностью в сторону увеличения длительности (уменьшения частоты) Ваша задача распадается на две простые подзадачи: 1) измерение периода входного сигнала и 2) формирование меандра заданной частоты. Вариантов решения подзадач - море...Лаптевых, ниже приведен самый простой. Формируете меандр с помощью прерывания таймера по переполнению, в нём вы должны инвертировать выходной пин и загрузить новое значение полупериода. В основной программе непрерывно измеряете период входного сигнала и соответствующим образом корректируете период таймера. При определенной сноровке можно даже на си залудить.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Jul 2 2009, 00:05
|
Группа: Новичок
Сообщений: 9
Регистрация: 3-06-09
Из: Хабаровск
Пользователь №: 49 895

|
Цитата(=GM= @ Jul 1 2009, 15:54)  Ваша задача распадается на две простые подзадачи: 1) измерение периода входного сигнала и 2) формирование меандра заданной частоты.
Вариантов решения подзадач - море...Лаптевых, ниже приведен самый простой.
Формируете меандр с помощью прерывания таймера по переполнению, в нём вы должны инвертировать выходной пин и загрузить новое значение полупериода. В основной программе непрерывно измеряете период входного сигнала и соответствующим образом корректируете период таймера.
При определенной сноровке можно даже на си залудить. В основной программе непрерывно измеряете период входного сигнала и соответствующим образом корректируете период таймера а как его измерить? частота 16МГц, а таймер занят. а ведь считать то его нужно в единицах таймера получаетсяя по таймеру 16МГц/256=62500 считал длину импулься и тут же параллельно выдавал, и как бы получается так что все сдвигается и накладывается на входной, вобщем запутало меня все это. вопрос о фазе не стоит. вот мой код - скажите где трабл CODE //==========START TIMER PROCESS===================== Timer: CLI
//заносим и выделяем бит скорости из порта С IN PortCVal, PINC ; ANDI PortCVal, 1<<InPortSyg
//выделяем предыдущее состояние бита из порта С MOV temp1, Flags ; ANDI temp1, 1<<InSygFlag
//копируем бит из порта С для проверки изменился ли он MOV temp3, PortCVal EOR temp3, temp1 ; проверяем изменился ли бит //если изменился то пытаемся его продлить BRNE DecDelay ;1x1=0(Z) 0x0=0(Z) 1x0=1 0x1=1 //после задержки инвертируем флаг сигнала LDI temp3,1<<InSygFlag ; EOR Flags, temp3
//вычисляем длительность нового импульса DelL_Next DelH_Next
CalNewDel:
MOV dd16uL, CtrL MOV dd16uH, CtrH //для упрощения задаем фиксированную задержку LDI DelL_Next, $10 LDI DelH_Next, $00 //прибавляем к длительности импульса ADD DelL_Next, CtrL ADC DelH_Next, CtrH //начнем подсчет заново CLR CtrL CLR CtrH
//ПРОДОЛЖИМ ВЫДАЧУ ИМПУЛЬСА DecDelay: DEC DelL_Cur BRNE FollowCount TST DelH_Cur BRNE DecDelayH //Задержка ЗАКОНЧИЛАСЬ, загружаем НОВУЮ MOV DelL_Cur, DelL_Next MOV DelH_Cur, DelH_Next RJMP ActuateSyg DecDelayH: DEC DelH_Cur RJMP FollowCount //АКТУАЛИЗАЦИЯ ТОЛЬКО ПОСЛЕ ЗАДЕРЖКИ!!!!! ActuateSyg: //выделяем предыдущее состояние OutSyg из флага
MOV PortCVal, Flags LDI temp3,1<<OutSygFlag ; AND PortCVal, temp3 EOR PortCVal, temp3 ; EOR Flags, temp3
//актуализация сигнала (изменение на обратный) OUT PORTC, PortCVal //выдача импульса FollowCount: INC CtrL ; и увеличиваем общий счетчик импульсов BRNE SetTimer INC CtrH BRNE SetTimer //ограничиваем длину входного импульса SER CtrL SER CtrH ;Counter=$FFFF SetTimer:
//предустановка периода таймера на 1 тик LDI temp1, $FF ;загружаем старший байт OUT TCNT1H, temp1 ; Старший байт пошел! LDI temp1, $FE ;загружаем младший байт OUT TCNT1L, temp1 ; Младший байт пошел!
RETI
Сообщение отредактировал IC7K - Jul 2 2009, 00:23
|
|
|
|
|
Jul 2 2009, 06:08
|

Гуру
     
Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954

|
Цитата(IC7K @ Jul 2 2009, 03:05)  вопрос о фазе не стоит. вот мой код - скажите где трабл  Трабл - всё в том же... Вы, наверное, не внимательно читаете ответы... Вам уже сколько твердили, что не нужно удлиннять импульс. Нужно сгенерить сигнал частотою Fвых=Fвх/К. Запустите два таймера: одним будете определять частоту входного сигнала, другой таймер - в режим генерации частоты (CTC mode, OCn toggle). После определения частоты входного сигнала (методов много - в зависимости от задачи: точности, быстродействия - поищите, это не раз обсуждалось), у второго таймера меняют значения регистров для изменения частоты выходного сигнала. P.S. Извиняюсь... Невнимательно посмотрел: что такое коеффициент К. Выходная частота Fвых=Fвх*К/(K+1)
|
|
|
|
Сообщений в этой теме
IC7K Увеличение Длины Поступающих Импульсов Jul 1 2009, 02:09 AnV22 Цитата(IC7K @ Jul 1 2009, 08:09) поступаю... Jul 1 2009, 02:42 domowoj Как соотносятся входная и выходная частоты? Jul 1 2009, 02:49 dimka76 Цитата(IC7K @ Jul 1 2009, 06:09) необходи... Jul 1 2009, 04:49 domowoj IC7K
А чем "К" будете задавать? Jul 1 2009, 04:54 Dog Pawlowa Цитата(IC7K @ Jul 1 2009, 05:09) голову с... Jul 1 2009, 06:32 IC7K Скважность 1 это пауза равна импульсу по длительно... Jul 1 2009, 06:38 dimka76 Цитата(IC7K @ Jul 1 2009, 10:38) Скважнос... Jul 1 2009, 06:49  ATLab ЦитатаСкважность 1 это пауза равна импульсу по дли... Jul 2 2009, 04:48   IC7K можно вынести в отдельную ветку и там выяснить что... Jul 2 2009, 05:33    ATLab Цитата(IC7K @ Jul 2 2009, 15:33) а что мо... Jul 2 2009, 05:44     IC7K что еще непонятного? если кому то мой вопрос неясе... Jul 2 2009, 05:53      Dog Pawlowa Цитата(IC7K @ Jul 2 2009, 08:53) что еще ... Jul 2 2009, 06:38   dimka76 Цитата(ATLab @ Jul 2 2009, 08:48) другой ... Jul 2 2009, 06:49    Палыч To IC7K
Если у Вас всё ещё остались вопросы, то р... Jul 2 2009, 07:11   Tanya Цитата(ATLab @ Jul 2 2009, 08:48) Куда ка... Jul 2 2009, 13:04    ATLab Цитата(Tanya @ Jul 2 2009, 23:04) А сами-... Jul 2 2009, 13:52     Tanya Цитата(ATLab @ Jul 2 2009, 17:52) Понятие... Jul 2 2009, 14:26      Dog Pawlowa Цитата(Tanya @ Jul 2 2009, 17:26) Однако,... Jul 2 2009, 17:58 Dog Pawlowa Цитата(IC7K @ Jul 1 2009, 09:38) может эт... Jul 1 2009, 07:39 Alex11 Поскольку входная и выходная частоты разные, то во... Jul 1 2009, 07:07 domowoj Цитата(Alex11 @ Jul 1 2009, 14:07) Поскол... Jul 1 2009, 10:41 Dog Pawlowa Цитата(=GM= @ Jul 1 2009, 14:54) При опре... Jul 1 2009, 16:32   ATLab Цитата(Палыч @ Jul 2 2009, 16:08) ... Нев... Jul 2 2009, 07:24  =GM= Цитата(IC7K @ Jul 1 2009, 23:05) В основн... Jul 2 2009, 12:33   IC7K блин я уже пожалел что применил умное слово скважн... Jul 2 2009, 23:19    ATLab Цитата(IC7K @ Jul 3 2009, 09:19) любой ча... Jul 3 2009, 00:56    domowoj Цитата(IC7K @ Jul 3 2009, 06:19) блин я у... Jul 3 2009, 01:54    =AK= Цитата(IC7K @ Jul 3 2009, 08:49) у меня а... Jul 3 2009, 04:10 sigmaN Да.
А что мешает это сделать без _особой_ сноровки... Jul 1 2009, 21:53 akl Здравствуйте.
Можно сделать так
-"навечно... Jul 2 2009, 03:27 domowoj Цитата(akl @ Jul 2 2009, 10:27) Здравству... Jul 2 2009, 14:01 ATLab RE: Увеличение Длины Поступающих Импульсов Jul 2 2009, 06:07 domowoj Ребята, не спорьте!
http://ru.wikipedia.org/wi... Jul 2 2009, 17:52 Tanya Цитата(domowoj @ Jul 2 2009, 21:52) Ребят... Jul 2 2009, 18:24  ATLab Цитата(Tanya @ Jul 3 2009, 04:24) Так там... Jul 2 2009, 22:17   Tanya Цитата(ATLab @ Jul 3 2009, 02:17) P.S. Ст... Jul 3 2009, 03:22    domowoj Цитата(Tanya @ Jul 3 2009, 10:18) Зря Вы ... Jul 3 2009, 03:25     Tanya Цитата(domowoj @ Jul 3 2009, 07:25) В люб... Jul 3 2009, 05:43      ATLab ЦитатаИХМО, для того что бы начать составлять рабо... Jul 3 2009, 07:23       dimka76 Цитата(ATLab @ Jul 3 2009, 11:23) у Вас к... Jul 3 2009, 08:46        =AK= Цитата(dimka76 @ Jul 3 2009, 18:16) Как р... Jul 3 2009, 09:58        rezident Цитата(dimka76 @ Jul 3 2009, 14:46) Как р... Jul 3 2009, 10:51 tyro ИХМО, для того что бы начать составлять работающий... Jul 3 2009, 04:32 GDI Если скважность всегда постоянная, то зачем мерять... Jul 3 2009, 07:31 ATLab Ох не зря я сетовал на образование: почитайте опре... Jul 3 2009, 11:12 dimka76 Цитата(ATLab @ Jul 3 2009, 15:12) физики,... Jul 3 2009, 11:25  rezident Цитата(dimka76 @ Jul 3 2009, 17:25) вот и... Jul 3 2009, 12:53   singlskv Цитата(rezident @ Jul 3 2009, 16:53) А ес... Jul 3 2009, 20:58 =AK= Цитата(ATLab @ Jul 3 2009, 20:42) объясни... Jul 4 2009, 00:21  ATLab Цитата(=AK= @ Jul 4 2009, 10:21) .. на дв... Jul 4 2009, 03:11 mdmitry Уважаемые участники дискуссии! НЕ ПОРА ЛИ ОСТА... Jul 3 2009, 13:57 IC7K большое спасибо всем за ответы, буду пытаться иска... Jul 7 2009, 22:26 Herz Цитата(ATLab @ Jul 3 2009, 09:23) Tanya, ... Jul 8 2009, 08:24 IC7K помогла программа VLAB
код заработал Jul 12 2009, 05:19
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|