Easyelectronics.ru

Электроника для всех
Текущее время: 26 ноя 2020, 21:16

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Одновременное измерение с датчика DS18B20 и входа АЦП
СообщениеДобавлено: 17 сен 2020, 13:25 
Только пришел

Зарегистрирован: 07 сен 2020, 11:53
Сообщения: 7
Снова здравствуйте!
Такой вопрос: пытаюсь реализовать одновременную работу DS18B20 и измерения напряжения с входа АЦП. Подскажите пожалуйста, как правильно это реализуется? Внизу прикрепляю свой код, но пока он работает некорректно.
Заранее спасибо!

Show длинный код прячем в спойлере. Финский


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Одновременное измерение с датчика DS18B20 и входа АЦП
СообщениеДобавлено: 17 сен 2020, 13:49 
Старожил
Аватара пользователя

Зарегистрирован: 18 июн 2011, 16:29
Сообщения: 1971
Откуда: Докучаевск-Волноваха
некорректно - это как?
на время чтения одного бита по 1-wire рекомендуется запрещать прерывания.
функцию чтения байта из термометра лучше сделать в виде конечного автомата, а задержку реализовать на таймере. или вообще не тупить в delay, а сделать опрос пина на котором датчик висит.
вывод на индикатор через одно место сделан, без обид;) вечером покажу свой вариант

_________________
Хранитель форума


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Одновременное измерение с датчика DS18B20 и входа АЦП
СообщениеДобавлено: 17 сен 2020, 13:55 
Только пришел

Зарегистрирован: 07 сен 2020, 11:53
Сообщения: 7
Некорректно работает индикация - разряды индикатора смешиваются между собой.
К критике я отношусь нормально и готов слушать советы более опытных людей.
Надеюсь, вечером увижу ваш пример и попробую разобраться с ним.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Одновременное измерение с датчика DS18B20 и входа АЦП
СообщениеДобавлено: 17 сен 2020, 14:03 
Старожил
Аватара пользователя

Зарегистрирован: 18 июн 2011, 16:29
Сообщения: 1971
Откуда: Докучаевск-Волноваха
в двух словах - при входе в прерывание первым делом нужно принудительно гасить текущий разряд, а потом выводить следующий. за каждый вход в прерывание выводите по одному разряду.

_________________
Хранитель форума


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Одновременное измерение с датчика DS18B20 и входа АЦП
СообщениеДобавлено: 17 сен 2020, 20:25 
Старожил
Аватара пользователя

Зарегистрирован: 18 июн 2011, 16:29
Сообщения: 1971
Откуда: Докучаевск-Волноваха
Цитата:
. В режиме внешнего питания ведущее устройство может определить состояние операции преобразования с помощью слота чтения. При не законченной операции состояние шины будет низкого уровня, по завершению преобразования на шине будет высокий уровень. При ”паразитном питании” такой способ отслеживания процесса преобразования не возможен.

это можно использовать вместо delay_ms(750);

_________________
Хранитель форума


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Одновременное измерение с датчика DS18B20 и входа АЦП
СообщениеДобавлено: 17 сен 2020, 23:37 
Старожил
Аватара пользователя

Зарегистрирован: 18 июн 2011, 16:29
Сообщения: 1971
Откуда: Докучаевск-Волноваха
Show Хедер для индикатора

где-то в main определяем буфер (массив) для хранения выводимых данных, размер массива = числу разрядов индикатора.
volatile unsigned char buffer[4];
Разбираем число на разряды и складываем его в буфер:
Код:
buffer[0] = rpm/1000;
buffer[1] = rpm%1000/100;
buffer[2] = rpm%1000%100/10;
buffer[3] = rpm%10;

Таким образом, в каждом элементе массива buffer находится десятичное число, которое соответствует битовой маске в массиве symbols, которую нужно вывести в порт СЕГМЕНТОВ, чтобы отобразилась эта десятичная цифра.
и выводим содержимое буфера на индикатор:
Show Прерывание по таймеру, для вывода символа
За каждый заход в прерывание выводится одна цифра, при достижении счетчика разрядов числа, бОльшего, чем число разрядов индикатора, он обнуляется.
Если массив с символами хранится в RAM, это немного ускоряет вывод, но занимает оперативку
Тогда вместо SEG_PORT = pgm_read_byte(&symbols[buffer[razr]]); пишем SEG_PORT = symbols[buffer[razr]];, ну и вывод разрядов тоже изменяется.

Таскаю эти дефайны из проекта в проект, не только на AVR, позволяет за считанные секунды изменить подключение к портам МК, выводить разные буквенные и прочие символы, просто добавляя новый дефайн, можно динамически добавлять десятичную точку. В общем, если непонятно - срашивайте, отвечаем :)


Вложения:
7seg.h [3.41 Кб]
Скачиваний: 32

_________________
Хранитель форума
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Одновременное измерение с датчика DS18B20 и входа АЦП
СообщениеДобавлено: 18 сен 2020, 15:19 
Только пришел

Зарегистрирован: 07 сен 2020, 11:53
Сообщения: 7
С хедером и прерыванием плюс минус разобрался. Единственное, подойдет ли этот хедер под 9-разрядный индикатор?
В вашем коде все сегменты "висят" на одном порту, разряды - на другом. Я у себя использовал PORTD для сегментов, PORTB и PORTC для разрядов. Пока не совсем понимаю, возможно ли это реализовать (объединить два порта для разрядов в одном хедере) с помощью вашего кода.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Одновременное измерение с датчика DS18B20 и входа АЦП
СообщениеДобавлено: 18 сен 2020, 15:25 
Только пришел

Зарегистрирован: 07 сен 2020, 11:53
Сообщения: 7
Show


Вчера днём удалось немного продвинуться. Чтение памяти с DS18B20 я вывел в прерывание по таймеру - читает каждые 750 мс.
Но теперь появилась проблема того, что каждые 750 мс мерцает случайный разряд на индикаторе (светится ярче, чем все остальные).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Одновременное измерение с датчика DS18B20 и входа АЦП
СообщениеДобавлено: 18 сен 2020, 15:27 
Старожил
Аватара пользователя

Зарегистрирован: 18 июн 2011, 16:29
Сообщения: 1971
Откуда: Докучаевск-Волноваха
можно подумать, в прерывании если счетчик разрядов выходит за пределы одного порт, то переключать вывод в другой порт
в массиве разрядов addr сделать битмаски и для второго порта
а вообще, рекомендую посмотреть в сторону драйверов TM1637, TM1650 и им подобных. Когда разрядов больше 6, то уже приходится их чаще выводить, чтобы не падала яркость, или снижать сопротивления резисторов в сегментах, для увеличения тока.

_________________
Хранитель форума


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Одновременное измерение с датчика DS18B20 и входа АЦП
СообщениеДобавлено: 18 сен 2020, 21:28 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3693
Откуда: Новосибирск
Тут обсуждали. Есть примеры. И мои. Я спать, завтра на работу, пока ознакомьтесь с примерами, вопросы записывайте в тетрадку.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Одновременное измерение с датчика DS18B20 и входа АЦП
СообщениеДобавлено: 18 сен 2020, 23:17 
Старожил
Аватара пользователя

Зарегистрирован: 18 июн 2011, 16:29
Сообщения: 1971
Откуда: Докучаевск-Волноваха
Цитата:
Но теперь появилась проблема того, что каждые 750 мс мерцает случайный разряд на индикаторе (светится ярче, чем все остальные).
неудивительно:)
вы убрали задержку из функции измерения температуры, но перенесли в прерывание вызов 3х(!) функций, в каждой из которых есть задержки:))

_________________
Хранитель форума


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Одновременное измерение с датчика DS18B20 и входа АЦП
СообщениеДобавлено: 19 сен 2020, 09:25 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3693
Откуда: Новосибирск
Финский вы забыли. Это очередной новичок.
ТС-у. Для затравки - псевдопараллельная работа программных модулей. Ближайший аналог - Windows. Как все программы работают "параллельно"? Все процессы дробятся. Диспетчер перключает задачи "быстро-быстро", так, что пользователю кажется, что все программы выполняются одновременно. Это видимое.
Невидимое - диспетчер задач дробит выполнение всех задач на временные отрезки. То есть, каждая задача выполняется, скажем, каждые 100 мкс. Это от балды, но принцип, думаю понятен. В итоге, пользователю кажется, что все программы выполняются одновременно.
Этот же принцип переносится на микроконтроллеры. Все функции-процессы дробятся. Условиями, флагами, состояниями конечных автоматов. Цель - раздробить все процессы, чтобы с запасом выполнять итерацию основного цикла за системный такт.
Думаю, теперь ТС-у есть о чем подумать, поискать информацию. Пока откланиваюсь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Одновременное измерение с датчика DS18B20 и входа АЦП
СообщениеДобавлено: 01 окт 2020, 09:15 
Заглядывает иногда

Зарегистрирован: 23 сен 2020, 05:17
Сообщения: 41
Не в обиду ТС. Можно я здесь просто поулыбаюсь для тех, кто в теме. :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: emax


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB