реклама на сайте
подробности

 
 
> Увеличение Длины Поступающих Импульсов, поступил импульс длительностью L, а выдать нужно L+L/K
IC7K
сообщение Jul 1 2009, 02:09
Сообщение #1





Группа: Новичок
Сообщений: 9
Регистрация: 3-06-09
Из: Хабаровск
Пользователь №: 49 895



голову сломал но сделать не могу никак маленький опыт программирования очевидно.

есть задача:

поступают прямоугольные испульсы с частотой от 0 до 150 Гц и скважностью 1.
необходимо выдать подобные импульсы но с "плавной" регулировкой частоты (длительности) импульса/паузы и такой же скважностью в сторону увеличения длительности (уменьшения частоты).

т.е. допустим поступил импульс/пауза длительностью L, а выдать нужно L+L/K, где K - коэф-т удлиннения импульса/паузы.


пробовал таймером вызывать цикл счетчика и одновременно выдачи импульса в разных вариациях, но чтото никак

может есть какая идея простая?

буду благодарен за помощь!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
=GM=
сообщение Jul 1 2009, 11:54
Сообщение #2


Ambidexter
*****

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



Цитата(IC7K @ Jul 1 2009, 01:09) *
есть задача: поступают прямоугольные испульсы с частотой от 0 до 150 Гц и скважностью 2.
необходимо выдать подобные импульсы но с "плавной" регулировкой частоты (длительности) импульса/паузы и такой же скважностью в сторону увеличения длительности (уменьшения частоты)

Ваша задача распадается на две простые подзадачи: 1) измерение периода входного сигнала и 2) формирование меандра заданной частоты.

Вариантов решения подзадач - море...Лаптевых, ниже приведен самый простой.

Формируете меандр с помощью прерывания таймера по переполнению, в нём вы должны инвертировать выходной пин и загрузить новое значение полупериода. В основной программе непрерывно измеряете период входного сигнала и соответствующим образом корректируете период таймера.

При определенной сноровке можно даже на си залудить.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
IC7K
сообщение Jul 2 2009, 00:05
Сообщение #3





Группа: Новичок
Сообщений: 9
Регистрация: 3-06-09
Из: Хабаровск
Пользователь №: 49 895



Цитата(=GM= @ Jul 1 2009, 15:54) *
Ваша задача распадается на две простые подзадачи: 1) измерение периода входного сигнала и 2) формирование меандра заданной частоты.

Вариантов решения подзадач - море...Лаптевых, ниже приведен самый простой.

Формируете меандр с помощью прерывания таймера по переполнению, в нём вы должны инвертировать выходной пин и загрузить новое значение полупериода. В основной программе непрерывно измеряете период входного сигнала и соответствующим образом корректируете период таймера.

При определенной сноровке можно даже на си залудить.


В основной программе непрерывно измеряете период входного сигнала и соответствующим образом корректируете период таймера
а как его измерить? частота 16МГц, а таймер занят. а ведь считать то его нужно в единицах таймера получается

я по таймеру 16МГц/256=62500 считал длину импулься и тут же параллельно выдавал, и как бы получается так что все сдвигается и накладывается на входной, вобщем запутало меня все это.

вопрос о фазе не стоит. вот мой код - скажите где трабл wassat.gif

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
Go to the top of the page
 
+Quote Post
=GM=
сообщение Jul 2 2009, 12:33
Сообщение #4


Ambidexter
*****

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



Цитата(IC7K @ Jul 1 2009, 23:05) *
В основной программе непрерывно измеряете период входного сигнала и соответствующим образом корректируете период таймера
а как его измерить? частота 16МГц, а таймер занят. а ведь считать то его нужно в единицах таймера получается
вопрос о фазе не стоит. вот мой код - скажите где трабл

Задвинем на время ваш код на дальнюю полку, он не для среднего ума (:-).

Измерить период входного сигнала можно так.

1) Ждёте начало входного импульса, т.е. перепада 0-1.

2) Читаете текущее значение таймера currtime.

3) Вычисляете pulselength=currtime-prevtime.

4) Сохраняете текущее время prevtime=currtime.

5) Переходите к пункту 1.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
IC7K
сообщение Jul 2 2009, 23:19
Сообщение #5





Группа: Новичок
Сообщений: 9
Регистрация: 3-06-09
Из: Хабаровск
Пользователь №: 49 895



блин я уже пожалел что применил умное слово скважность rolleyes.gif

Вы напрасно пытаетесь объяснить автору топика принцип измерения.
Я не поленился, в гугле посмотрел его вопрос на других форумах. Там на аналогичное моему замечание про 0 частоту, он подтверждает: "да, частота может быть нулевой - когда вал остановлен".
Автор явно абсолютно не понимает о чем говорит, и ведь будет пытаться измерять такую частоту.


пятерка гуглу за оперативность bb-offtopic.gif

любой частотомер же показывает 0, значит есть такая частота! будем спорить?

Цитата(=GM= @ Jul 2 2009, 16:33) *
Задвинем на время ваш код на дальнюю полку, он не для среднего ума (:-).


спасибо biggrin.gif он явно не для начинающих

у меня алгоритм такой:

прыгаем по таймеру, в обработчике инкрементируем счетчик сработок таймера, тем самым меряем длину импульса
при перепаде с 0-1 или 1-0 включаем задержку, одновременно вычисляем задержку следующего импульса
одновременно считаем новый импульс

и все это не работает почемуто...
Go to the top of the page
 
+Quote Post
=AK=
сообщение Jul 3 2009, 04:10
Сообщение #6


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(IC7K @ Jul 3 2009, 08:49) *
у меня алгоритм такой:

прыгаем по таймеру, в обработчике инкрементируем счетчик сработок таймера, тем самым меряем длину импульса
при перепаде с 0-1 или 1-0 включаем задержку, одновременно вычисляем задержку следующего импульса
одновременно считаем новый импульс

и все это не работает почемуто...

Нельзя совмещать измерение входных импульсов и выдачу выходных. "Нельзя" не потому что это совсем невозможно, а потому, что это настолько сложно сделать правильно, что совершенно не имеет смысла париться. У вас должно быть 2 раздельных куска кода, один меряет период входной частоты, другой синтезирует выходныe частоты по заданию, полученному в результате измерения.

1. Измерение.

Казалось бы, проще всего по перепаду входного импульса (из 0 в 1, или из 1 в 0, как больше нравится) запоминать значение свободно бегущего аппаратного счетчика. Период равен (текущее значение) - (предыдущее значение).

Однако при больших периодах входного сигнала счетчик начнет переполняться. Чтобы не потерять правильное значение счетчика, необходимо в момент переполнения аппаратного счетчика (по прерыванию) инкрементировать программный счетчик, который станeт расширением аппаратного. Суммарная разрядность этого (аппаратного+программного) счетчика должна быть такой, чтобы переполнения не было хотя бы лет 100. Навскидку, 48 разрядов для частоты 16МГц/256 хватит за глаза. Конечно, при этом придется вычитание (текущее значение) - (предыдущее значение) делать 48-разрядным, зато голова не будет болеть.

Вторая проблема - что делать, если входная частота равна 0? Ведь при этом на вход перестанут поступать импульсы, и измеритель так никогда и не закончит измерение очередного периода. А в это время выходной блок (синтезатор частоты) будет продолжать выдавать какие-то выходные импульсы, поскольку нового задания так никогда и не получит.

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

2. Синтез частоты по заданию.

Это сделать легко, но надо учитывать, что синтезатор обязан регулярно проверять свое задание, поскольку оно может меняться "на лету", пока вых. импульс находится в стадии формирования. При нулевой вх. частоте, когда измеритель все время "подновляет" задание синтезатору, выход должен замереть навечно.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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
|- - Палыч   Цитата(IC7K @ Jul 2 2009, 03:05) вопрос о...   Jul 2 2009, 06:08
||- - ATLab   Цитата(Палыч @ Jul 2 2009, 16:08) ... Нев...   Jul 2 2009, 07:24
|- - ATLab   Цитата(IC7K @ Jul 3 2009, 09:19) любой ча...   Jul 3 2009, 00:56
|- - domowoj   Цитата(IC7K @ Jul 3 2009, 06:19) блин я у...   Jul 3 2009, 01:54
- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th August 2025 - 08:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01483 секунд с 7
ELECTRONIX ©2004-2016