Всё по DS18(B/S)20.

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
eduardo
Нашел транзистор. Понюхал.
Сообщения: 171
Зарегистрирован: Вс июн 17, 2012 16:32:42

Re: Всё по DS18(B/S)20.

Сообщение eduardo »

Переключать быстрее запрет на прерывания не даёт. А чужой исходник для меня---потёмки. Я в своем-то с трудом разбираюсь.
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

Re: Всё по DS18(B/S)20.

Сообщение Amstron »

В моем устройстве с подключенными датчиками глюков нет.
С не подключенными датчиками, через 5 минут, на экране абракадабра, устройство виснет.


В чем может быть проблема?
Библиотека датчика стандартная.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Аlex »

eduardo писал(а):Переключать быстрее запрет на прерывания не даёт
Значит не стоит так часто и на долго запрещать прерывания :)
Где-то в этой теме уже обсуждали опрос датчика + динамическую индикацию.

Amstron писал(а):В чем может быть проблема?
В программе.
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

Re: Всё по DS18(B/S)20.

Сообщение Amstron »

так и думал...
Последний раз редактировалось Аlex Вс ноя 24, 2013 20:44:13, всего редактировалось 1 раз.
Причина: Не цитируйте полностью предыдущее сообщение !!!
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

Re: Всё по DS18(B/S)20.

Сообщение Amstron »

У меня контроллер мега 168, работает на частоте 16 Мгц.
За одну секунду АЦП опрашивается примерно 1200 раз.
Проблема такая: не измеряется температура (датчик цифровой DS18b20) из за частого опрашивания АЦП.
Если закоментировать измерения АЦП, то температура измеряется.

Я думаю проблему можно решить так: запретить прерывания по окончанию преобразования АЦП. Как это сделать?

Второй вариант: не мерить АЦП в момент измерения температуры. Как это сделать?

Подскажите свои варианты! Заранее огромное спасибо!
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Аlex »

Самый правильный вариант для Вас :
Второй вариант: не мерить АЦП в момент измерения температуры. Как это сделать?
Но если Вы используете стандартную библиотеку от CVAVR, то измерение будет откладываться на 750 Мс, т.е. на всё время преобразования. Глупо они сделали.
Если это Вам не пойдёт, то единственным вариантом будет написание своих функций для работы с датчиком и запретом с восстановлением прерываний на время каждого тайм-слота для записи и чтения линии. Тогда всё будет работать "как часы".
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

Re: Всё по DS18(B/S)20.

Сообщение Amstron »

У меня время измерения температуры 100 мС.
Мне это подойдет!
Пусть будет так: когда пришло время мерить температуру, то АЦП не измеряем.
Как осуществить?
Последний раз редактировалось Аlex Вс ноя 24, 2013 21:22:01, всего редактировалось 1 раз.
Причина: -
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Аlex »

Запрещать прерывание на время измерения температуры. Это если измерения идут в прерывании.

ЗЫ: И перестаньте цитировать предыдущее сообщение, это запрещено правилами форума !
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Всё по DS18(B/S)20.

Сообщение oleg110592 »

Amstron писал(а):Подскажите свои варианты

USART свободный? http://kibermaster.net/rabota-s-shinoy- ... b20-k-avr/
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Аlex »

Да и вообще, совет - уходите от CVAVR, не зарьтесь на встроенные библиотеки и не думайте, что будет проще. От незнания внутренностей этих библиотек, проблем наживёте ещё больше, чем без их использования.

oleg110592 писал(а):USART свободный? http://kibermaster.net/rabota-s-shinoy- ... b20-k-avr/
ИМХО, это всё лишнее для МК, проще реализовать самому интерфейс 1-Wire.
Вот, кстати, делал когда-то человеку пример - http://forum.cxem.net/index.php?showtop ... try1263038 ТАм использован CVAVR, реализованы свои функции работы 1-Wire + динамическая индикация. Может кому-нибудь пригодится.
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

Re: Всё по DS18(B/S)20.

Сообщение Amstron »

Аlex писал(а):Запрещать прерывание на время измерения температуры. Это если измерения идут в прерывании.



есть у меня вот такое прерывание:

Спойлерinterrupt [ADC_INT] void adc_isr(void) //прерывание по окончании преобразования

{
adc_data=ADCW; //результат переносим в ads_data
};


В основном цикле есть у меня вот такое:
Спойлер//Инициализация входа АЦП для изм борт напряжения
ADMUX=0b00000101; // bit 7,6=1 - внутр. ИОН= 5 в, bit 3,2,1,0 канал АЦП-adc5
ADCSRA=0b10001111; // бит 7 - разрешить, бит 0..2 частота преобразования, 3 бит - разрешить прерывание


как узнать что датчик начал измерять и когда закончит?
температуру опрашиваю вот так, каждые две секунды:

datchik_temp [nomer_datchika] = ds18b20_temperature(&rom_code[nomer_datchika][0]); //читаем температуру с выбранного датчика
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Аlex »

как узнать что датчик начал измерять и когда закончит?
Это время выполнения функции ds18b20_temperature :)
Она запускает преобразование, ждёт его окончания и читает температуру. Всё это время программа тупо висит в этой функции, ещё и с запретом прерываний.
Я говорю - глупо сделали разрабы, многие наступают на эти грабли.
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

Re: Всё по DS18(B/S)20.

Сообщение Amstron »

Аlex писал(а):Это время выполнения функции ds18b20_temperature :)
Она запускает преобразование, ждёт его окончания и читает температуру. Всё это время программа тупо висит в этой функции, ещё и с запретом прерываний.


По крайней мере одно прерывание точно работает: interrupt [TIM0_OVF] void timer0_ovf_isr(void) //прерывание по перепонению TC/0
У меня на нем идет динамическая индикация на светодиодах. Цифирки горят всегда.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Аlex »

Amstron писал(а):У меня на нем идет динамическая индикация на светодиодах. Цифирки горят всегда.
Значит запрет прерываний Вам не подойдёт. Разбирайтесь с 1-Wire и пишите свои функции. посмотрите выше по ссылке пример, может пригодится. Можете взять его за основу, там в функциях есть запрет на время тайм-слота.
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

Re: Всё по DS18(B/S)20.

Сообщение Amstron »

Был глюк когда не было подключено ни одного датчика.
Устройство висло.

Выход из положения следующий:

Запред измерения температуры когда не подключено ни одного датчика
if (MAX_DEVICES != 0)
{
datchik_temp [nomer_datchika] = ds18b20_temperature(&rom_code[nomer_datchika][0]); //читаем температуру с выбранного датчика
}
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

Re: Всё по DS18(B/S)20.

Сообщение Amstron »

Проблема следующая:

Без подключенной библиотеки DS18B20.h, устройство работает отлично.
Устройство мериет постоянно АЦП (в сек 1200 раз). Контроллер мега168, частота 16 мГц.

Как только стоит подключить библиотеку DS18B20.h, индикатор начинает нервно мигать, температура не измеряется, постоянно выдает НОЛЬ!
Индикатор семисегментный 4 разряда светодиодный, разряды выключаются в прерывании.

Если я удаляю часть кода в программе , не обязательно эту часть, то температура начинает измеряться.

В чем проблема? Объем программы от флеш памяти занимает 91 %, глобальных переменных 280 байт.

Куда копать????
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Всё по DS18(B/S)20.

Сообщение Gudd-Head »

Amstron писал(а):Устройство мериет постоянно АЦП (в сек 1200 раз).

Чё?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Аlex »

Amstron писал(а):Как только стоит подключить библиотеку DS18B20.h, индикатор начинает нервно мигать, температура не измеряется, постоянно выдает НОЛЬ!
Аlex писал(а):Разбирайтесь с 1-Wire и пишите свои функции.посмотрите выше по ссылке пример, может пригодится. Можете взять его за основу, там в функциях есть запрет на время тайм-слота.
Игнорируем советы ? :)
Amstron
Нашел транзистор. Понюхал.
Сообщения: 173
Зарегистрирован: Вт дек 21, 2010 21:18:52

Re: Всё по DS18(B/S)20.

Сообщение Amstron »

Gudd-Head писал(а):Чё?

Возможно ошибаюсь. Не важно на самом деле...
Аlex писал(а):Игнорируем советы ? :)

По Вашей ссылке ходил.
Ни чего дельного не нашол.
Выложите сюда последний реализ рабочего проекта, а то по той ссылке я все перепробывал и не чего не помогло.
Последний раз редактировалось Gudd-Head Ср ноя 27, 2013 10:55:55, всего редактировалось 1 раз.
Причина: Склеил и лишнее удалил
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Всё по DS18(B/S)20.

Сообщение Аlex »

111.rar
(130.07 КБ) 215 скачиваний
:)

Я не про ссылки и проекты, а про самостоятельное изучение интерфейса. Он прост как 5 копеек, нужно просто сесть и почитать. Быстрее бы уже разобрались, чем тыкать наобум и надеяться на авось...
Ответить

Вернуться в «Периферия»