Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Необходимо атмегой измерять длину импульса в диапазоне 1..2 мС с максимально возможной точностью.(+)
Отправлено
Dikoy 25 января 2009 г. 01:29
[b]ALL[/b]
Помогите с оптимальным решением.
Необходимо измерять длину импульса в диапазоне 1..2 мС с максимально возможной точностью. Хотя бы разрешение в 500 точек на мС поиметь, а лучше 1000. По двум каналам. Именно длину "единичной" части, т.к. время пребывания сигнала в состоянии "1" отличается от времени пребывания в "0".
Имеем AT90USB1287 (кто не знает, структурно очень близок к атмега128) с кварцем 8 МГц. TIMER1 занят, зато свободен TIMER3 (тоже 16-и битный).
Пока единственная мысль - третий таймер в цикл, в прерывании INTx запоминать его мгновенное значение по подьёму и спаду импульса и вычислять период. Но ИМХО это достаточно громоздко и медленно... Ведь после каждого срабатывания прерывания его надо перенастраивать (на подъём/спад), проверять, какое это срабатывание, первое или второе, а в мейнлупе ещё вычислять период с проверкой на переход таймера через максимум между срабатываниями прерывания и т.д. Боюсь не успеть, ведь период не более 1 мС...
Может есть более быстрый способ? Аппаратно или ещё каким извращенским методом? :)
Составить ответ | Вернуться на конференцию.
Ответы
- гы, в 1989 на голом 8085 4Мгц с дискретом 1 мкс (длина NOPа) мерил без проблем - сканер лазерный штрихкода делали... Поле нопов и прерывание по фронту - адреса в стеке и есть замеры длительности... - basilmak (25.01.2009 13:52:2 89.191.241.224, пустое)
- Там прерывания на ножках по фронту есть? Если есть то настраиваете одну ножку на +/- другую на -/+ и соединяете их вместе. А таймер пусть просто по кругу считает. Можно и одну ножку на изменение сигнала настроить, но тогда обработка чуть больше времени займет. Кстати время обработки прерывания оно скорей на минимальный интервал влияет чем на точность. - F8 (25.01.2009 10:21:31 92.112.133.242, пустое)
- Посмотрите, как в моём частотомере сделано было... - zlogic (25.01.2009 08:35:1 78.85.102.49, пустое, ссылка)
- так надо длину импульса или период ? - nestandart (25.01.2009 02:31:22 87.180.16.160, пустое)
- 1) На счёт успеет ли АВР выполнить кусок программы - межете не сомневаться - успеет да же в ваших условиях. 2) Я бы освободил ещё и 1-й таймер и поднял бы частоту до 16 МГц (тогда дискретность до 4000 вам обеспечена) Естественно, если входной сигнал не синхронен с СГ контроллера - получите дрожание фазы +/-1 период таймера - Юрий_СВ (25.01.2009 02:18:48 217.12.195.250, пустое)
- Используйте режим захвата (capture). Длительность считается беззнаковым вычитанием двух соседних значений регистра захвата. Переполнение при этом учитывать не нужно. - rezident (25.01.2009 01:58:8 77.43.214.25, пустое)
- конечно, аппаратно - koyodza (25.01.2009 01:38:0 77.123.64.94, 286 байт)