Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
15.08.2011, 21:35
|
|
Прописка
Регистрация: 16.01.2007
Адрес: Astana KZ
Сообщений: 243
Сказал спасибо: 48
Сказали Спасибо 38 раз(а) в 32 сообщении(ях)
|
Как измерить временой интервал?
Эмулирую однопроводный интерфейс, в часности датчик DS18D20. Надо при запросе кода датчика послать ответ из 8-ми байт.
Сначала надо отследить сброс линии (это низкий уровень от 480 до 700 микросек).
Далее идет Старт бит 1-4 мксек и после 15 микросек определяем от ведущего ноль или единица на линии. Ждем следующий старт бит. Если пришло 0х33 то посылаем ответ серийного номера из 8-ми байт. С посылкой легче, временые промежутки не отслеживаем, орентируемся по старт битам.
Так вот вопрос - как измерить интервал низкого уровня от 1 до 700 микросекунд. Понятно что по прерываниям, надо задействовать ТМР0 (или 16ти разр таймер), но как более подробно сделать.
Пишу на Си. Камень 16F628
|
|
|
Сказали "Спасибо" russo_turisto
|
|
|
15.08.2011, 21:55
|
|
Гражданин KAZUS.RU
Регистрация: 03.12.2004
Сообщений: 932
Сказал спасибо: 824
Сказали Спасибо 609 раз(а) в 216 сообщении(ях)
|
Re: Как измерить временой интервал?
я не пишу под ПИКи давно, но алгоритм, думаю, будет схож:
инициализация таймера, сброс, проверка "тиков", выполение по совпадению
Самый простой и понятный способ. Возможно и по прерыванию
|
|
|
Сказали "Спасибо" aleksandr-zh
|
|
|
15.08.2011, 22:27
|
|
Прописка
Регистрация: 16.01.2007
Адрес: Astana KZ
Сообщений: 243
Сказал спасибо: 48
Сказали Спасибо 38 раз(а) в 32 сообщении(ях)
|
Re: Как измерить временой интервал?
а как измерить длителность нулевого импульса между спадом и подъемом на ножке. Если задействовать INT PORTB.0 то прерывание настраивается по фронту или спаду сигнала. Допустим прерывание сделал по спаду (начало импульса), пошло тикание счетчика. А как остановить его на подьеме импульса?
|
|
|
Сказали "Спасибо" russo_turisto
|
|
|
15.08.2011, 22:42
|
|
Прописка
Регистрация: 11.10.2008
Сообщений: 132
Сказал спасибо: 8
Сказали Спасибо 35 раз(а) в 30 сообщении(ях)
|
Re: Как измерить временой интервал?
Прямо в обработчике 'по-спаду' переконфигурировать на прерывание 'по-нарастанию'.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо Nfc за это сообщение:
|
|
|
15.08.2011, 22:42
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,539
Сказал спасибо: 172
Сказали Спасибо 1,561 раз(а) в 811 сообщении(ях)
|
Re: Как измерить временой интервал?
Решили сразу на 2-х форумах писать
|
|
|
|
15.08.2011, 23:31
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Как измерить временой интервал?
отправил нолик, снял нолик, подождал 30мкс (если память еще при мне) - опросил порт.
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
15.08.2011, 23:32
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,539
Сказал спасибо: 172
Сказали Спасибо 1,561 раз(а) в 811 сообщении(ях)
|
Re: Как измерить временой интервал?
Сообщение от Easyrider83
|
отправил нолик, снял нолик, подождал 30мкс (если память еще при мне) - опросил порт.
|
Ему ведомого надо имитировать.
|
|
|
|
15.08.2011, 23:37
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: Как измерить временой интервал?
Сообщение от realid
|
Ему ведомого надо имитировать.
|
А... Ну тут тоже, думаю, ничего сложно нет. Все сделать в прерывании. Если частота контроллера небольшая, время отрегулировать несколькими командами NOP. Если прерывание за 30-50мкс отработает, то и фиг с ним.
|
|
|
Сказали "Спасибо" Easyrider83
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 20:22.
|
|