|
0 / 0 / 0
Регистрация: 28.03.2016
Сообщений: 3
|
||||||
Как увеличить время опроса DS18B20?19.03.2012, 22:10. Показов 17420. Ответов 17
Метки нет (Все метки)
Делаю что-то типа домашней метеостанции на ATMEGA8 в CVAVR.
Вызов функций измерения в непрерывном цикле:
delay_ms, то задерживается измерение остальных параметров тоже. Пробовал считывать показания по прерыванию таймера, у меня не получилось. Что-то не соображу, как сделать, что бы считывание температуры с DS18B20 происходило раз в 2-3 минуты, а остальные измерения проводить непрерывно?
0
|
||||||
| 19.03.2012, 22:10 | |
|
Ответы с готовыми решениями:
17
проблема с запуском опроса DS18B20
Как увеличить размерность кода (увеличить время работы потока) |
|
0 / 0 / 0
Регистрация: 10.08.2010
Сообщений: 1,264
|
|
| 19.03.2012, 22:17 | |
|
1)Конечные автоматы
2)нелинейное программирование 3) Отказаться от убого компилятора и освоить кооператив/ртос/многозадачную ОС.
0
|
|
|
0 / 0 / 0
Регистрация: 08.08.2010
Сообщений: 3,180
|
|
| 19.03.2012, 22:20 | |
|
а 3-е здесь причем?
0
|
|
|
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 3,496
|
||||||
| 19.03.2012, 22:20 | ||||||
|
Семь раз отъешь, один раз отпей Можно ввести "коэфиициент опрашиваемости". Десять раз опросить всё, один раз опросить температуру.
Или всё же таймер. Только таймер должен не производить измерение, а устанавливать флаг. Тогда ваш цикл будет выглядеть как-то-так
0
|
||||||
|
1 / 1 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
|
||||||
| 19.03.2012, 22:53 | ||||||
|
как уже выше посоветовали вот код с коэффициентом опрашиваемости. будет проще чем таймер, но тогда ты не сможешь разобраться с таймерами)
0
|
||||||
|
vdb
|
|
| 20.03.2012, 00:24 | |
|
(null) протупил
Один хрен, зачем лишнее условие, и почему бы просто взвод бита в счетчике не проверить. |
|
|
0 / 0 / 0
Регистрация: 04.03.2011
Сообщений: 594
|
|
| 20.03.2012, 01:13 | |
|
ОС или таймер-счетчик. Я выбрал второе, звучит круто, пацаны оценили. Но делал и вторым способом - нормуль
0
|
|
|
0 / 0 / 0
Регистрация: 28.03.2016
Сообщений: 3
|
||
| 20.03.2012, 01:14 | ||
А с таймером я понимаю так: по прерыванию включать счетчик, когда достигнет определенного значения - выставлять флаг. Но на время опроса датчика (примерно 850mS) нужно прерывание запретить? И как это сделать?
0
|
||
|
0 / 0 / 0
Регистрация: 04.03.2011
Сообщений: 594
|
||
| 20.03.2012, 01:17 | ||
В само время измерения 850мс контроллер может крутить любые задачи.
0
|
||
|
0 / 0 / 0
Регистрация: 28.03.2016
Сообщений: 3
|
|||||||
| 20.03.2012, 01:35 | |||||||
В само время измерения 850мс контроллер может крутить любые задачи. Так?
0
|
|||||||
|
0 / 0 / 0
Регистрация: 04.03.2011
Сообщений: 594
|
||||||||||||
| 20.03.2012, 12:05 | ||||||||||||
0
|
||||||||||||
|
0 / 0 / 0
Регистрация: 28.03.2016
Сообщений: 3
|
||||||
| 20.03.2012, 20:25 | ||||||
|
Пробовал в железе все варианты и везде одно и то же, показания аналоговых датчиков на индикаторе мигают с бешенной скоростью.
Когда опрос DS18 происходит непрерывно, все показывает нормально, но датчик завышает температуру на 1-1,5 градуса. Что-то не так в программе, а что-не пойму? На всякий случай выкладываю исходник, может поможете разобраться?
0
|
||||||
|
0 / 0 / 0
Регистрация: 07.03.2009
Сообщений: 12
|
|
| 21.03.2012, 10:41 | |
|
Кстати если нужно измерять разные датчики с разной частотой, чтобы не заводить на каждый свой counter, не заморачиваться с обнулением и т.п, можно ввести один и проверять в условии срабатывания датчика - на остаток от деления на нужную нам задержку(когда ноль - значит опрашиваем).
Хотя в мк так не делал.. просто рассказал как обычно делаю на компьютере..
0
|
|
|
SWK
|
|||||||
| 21.03.2012, 12:14 | |||||||
Один из таймеров (обычно хватает 8-битного с предделителем) крутится непрерывно, и настроен например на 1мс (удобно брать круглые значения). В обработчике его прерывания сделано несколько программных счетчиков, которые проверяются на 0, если не 0 - декрементируются. Если мало задержки одного байта (до 255мс), использую для счетчика 2х байтовую переменную (дает 65,535 сек - это уже больше минуты). Можно и 4х байтовую... Отдельным задачам, что крутятся постоянно в главном цикле, достаточно для формирования своей задержки кинуть какое - то значение в один из таких программных таймеров, и на каждом проходе проверять его на 0. Главный цикл обычно крутится с периодом, меньшим периода этого системного таймера (в зависимости от выполняемых задач это время может меняться, но все равно обычно меньше 1 мс). Для управления ходом выполнения задач использую биты состояния (флаги), собранные для удобства в слова состояния программы. Подробности можете посмотреть в темах о моем роботе, там и исходники были. Вот например обработчик прерывания системного таймера ходового контроллера:
Иногда делаю также один их программных таймеров с периодом 1 сек, от которого декрементируются другие программные таймеры уже с дискретностью 1 сек (например, для часов и календаря, или организации задержек в секундах ). |
|||||||
|
0 / 0 / 0
Регистрация: 28.03.2016
Сообщений: 3
|
|
| 21.03.2012, 21:50 | |
|
Всем спасибо, с программой разобрался! Возник у меня может и глупый вопрос. С точки зрения нагрузки процессора или быстродействия что лучше, использовать 8-битный таймер настроенным на 1мс и потом формировать требуемую задержку, или 16-битный таймер на 1sec и, соответственно, задержка будет меньше?
0
|
|
|
1 / 1 / 0
Регистрация: 18.01.2012
Сообщений: 1,418
|
|
| 22.03.2012, 01:14 | |
|
если кратность временных интервалов не требуется меньше 1 секунды, то использовать 16ти битный счетчик экономичнее с точки зрения процессорного времени. Если есть такой свободный в контроллере, то почему бы и нет.
Экономичнее почему: Толи у нас прерывания каждую миллисекунду, толи в 1000 раз реже - раз в одну секунду. Допустим каждое прерывание выполняется 500 наносекунд (число взял с неба). За одну секунду получаем экономию 999прерываний * 500нс = 0.4995 милисекунды процессорного времени. Но для данной задачи не думаю что эта экономия будет заметна.
0
|
|
|
SWK
|
||
| 22.03.2012, 02:33 | ||
Также надо учитывать, что прерывания и таймеры - довольно ценный ресурс. И даже если таймеров 2, 3, или даже 4 штуки, - они обычно имеют разные, часто уникальные, параметры. Например, один из них имеет встроенный генератор для часового кварца, другой - может использоваться для ШИМ, у некоторых есть гибко настраиваемые предделители... То есть постоянно приходится искать компромисс, что куда использовать. Поэтому часто предлагаемое мной, (давно проверенное временем), решение проблемы задержек с помощью всего лишь одного из аппаратных таймеров (да к тому же наименее навороченного, из самых простых), на котором организуется любое количество программных таймеров, с использованием также всего лишь одного прерывыания, позволяет здорово упростить формирование задержек любой длительности. Использование же двух и более таймеров для этого - удается только в простых программах. В более сложных обычно железо используется более экономно. Для задержек порядка секунд есть еще вариант. Например, есть на плате часы DS1307 или аналогичные. У них есть выход, на котором обычно можно задать одну из частот, от 1 Гц до килогерц. Можно, например, настроить этот выход на выдачу секундных импульсов, и завести их на одно из внешних прерываний контроллера. (Так, например, сделано в Центральном Контроллере моего робота). В обработчике этого прерывания можно сделать программно кучу секундомеров, а также - и более длинные, например, минутные, и даже часовые, таймеры. А также, например, раз в секунду, или реже, считывать показания тех же часов, полностью... Сверяя с ними, например, планировщик долговременных заданий, расписанных заранее, хоть на целый год. |
||
|
0 / 0 / 0
Регистрация: 28.03.2016
Сообщений: 3
|
|
| 22.03.2012, 22:38 | |
|
Все подробно объяснили, всем большое спасибо!
Тему можно закрывать!
0
|
|
| 22.03.2012, 22:38 | |
|
Помогаю со студенческими работами здесь
18
Как увеличить время сессии? Как увеличить время сессии? Как увеличить время выполнения запроса Как увеличить время исполнения скрипта? как увеличить время работы батареи? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes.
А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения
развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит:
токи, напряжения и их 1 и 2 производные при t = 0;. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|