Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Опрос датчика
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
Freeze Anti
Здравствуйте.
У меня есть такая проблема. Мне надо узнать показания датчика, а потом - сравнить их с теми, которые будут через 15 сек.
Используемая микросхема - ATMega32.
alexander55
Цитата(Freeze Anti @ Nov 9 2007, 09:19) *
У меня есть такая проблема. Мне надо узнать показания датчика, а потом - сравнить их с теми, которые будут через 15 сек.

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


Цитата(Freeze Anti @ Nov 9 2007, 09:19) *
Используемая микросхема - ATMega32.

Вопрос задайте в AVR.
Freeze Anti
Так проблема в том, что мне необходимо измерить эти 15сек. Остальная часть программы при этом должна работать.

Если я некорректно выбрал тему, то возможно админы ее перенесут?..
NickNich
Цитата(Freeze Anti @ Nov 9 2007, 09:55) *
Так проблема в том, что мне необходимо измерить эти 15сек. Остальная часть программы при этом должна работать.


Вам знакомы понятия "таймер" и "прерывание"?
alexander55
Цитата(Freeze Anti @ Nov 9 2007, 09:55) *
Так проблема в том, что мне необходимо измерить эти 15сек. Остальная часть программы при этом должна работать.

Если я некорректно выбрал тему, то возможно админы ее перенесут?..

Понятно.
Запустите таймер. По прерыванию от таймера считайте эти прерывания. Вы получите системное время.
Все. biggrin.gif
Сергей Борщ
Цитата(Freeze Anti @ Nov 9 2007, 08:55) *
Так проблема в том, что мне необходимо измерить эти 15сек. Остальная часть программы при этом должна работать.
Вот тут выкладывал пример одной из реализаций. Надо только правильно выбрать размер переменной для счетчика времени.
Bird2
Другой вариант: использовать внешние часы реального времени (RTC), например DS1307 и по шине i2c опрашивать периодически время. При этом можно не только получить интервал, но и просто системное время с энергонезависимым питанием и календарем. Для новичка должно быть интересно...
З.Ы. Если в процессоре встроенный RTC, то можно и без часов, тогда устанавливаем прерывание на RTC = 1 секунде. Календарь формируем сами, если заинтересовало wink.gif
rezident
Цитата(Freeze Anti @ Nov 9 2007, 11:55) *
Так проблема в том, что мне необходимо измерить эти 15сек. Остальная часть программы при этом должна работать.

Настраиваете таймер на определенный интервал времени, соответствующий минимально необходимому. В процедуре прерывания от таймера увеличиваете переменную, выделенную под счетчик временных интервалов на величину интервала вызова прерывания. В основной программе во временную переменную запоминаете текущее значение переменной временных интервалов и затем сравниваете разницу между текущим и запомненным значениями. Если эта разница превысила заданный интервал, то это означает, что время ожидания закончилось.
Для счета времени обычно подходят миллисекундные интервалы (от 1 до 100мс). Соответственно на такой интервал нужно настраивать таймер и прерывания от него. На это же значение нужно увеличивать переменную счетчика временных интервалов, тогда ее значение у вас будет всегда выражено в миллисекундах, а не в каких-то абстрактно-попугайских "тиках" таймера. При этом 16-разрядной беззнаковой переменной хватает для организации счетчика интервалов с временем переполнения больше 1 минуты. Для отсчета бОльших интервалов времени можно использовать 32-разрядную переменную. С помощью такого (32-битного) счетчика в миллисекундных отсчетах можно измерить интервал времени больше, чем 1,5 месяца.
Еще раз обращаю внимание, что в прерывании счетчик времени нужно увеличивать не на 1, а на число соответствующее периоду вызова прерываний, выраженное в миллисекундах (ну или секундах)! Не наступайте на уже пройденные чужие грабли хотя бы в этом месте wink.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.