Всё по DS18(B/S)20.
- Сообщения: 171
- Зарегистрирован: Вс июн 17, 2012 16:32:42
Переключать быстрее запрет на прерывания не даёт. А чужой исходник для меня---потёмки. Я в своем-то с трудом разбираюсь.
- Реклама
- Сообщения: 173
- Зарегистрирован: Вт дек 21, 2010 21:18:52
В моем устройстве с подключенными датчиками глюков нет.
С не подключенными датчиками, через 5 минут, на экране абракадабра, устройство виснет.
В чем может быть проблема?
Библиотека датчика стандартная.
С не подключенными датчиками, через 5 минут, на экране абракадабра, устройство виснет.
В чем может быть проблема?
Библиотека датчика стандартная.
Значит не стоит так часто и на долго запрещать прерыванияeduardo писал(а):Переключать быстрее запрет на прерывания не даёт
Где-то в этой теме уже обсуждали опрос датчика + динамическую индикацию.
В программе.Amstron писал(а):В чем может быть проблема?
- Сообщения: 173
- Зарегистрирован: Вт дек 21, 2010 21:18:52
У меня контроллер мега 168, работает на частоте 16 Мгц.
За одну секунду АЦП опрашивается примерно 1200 раз.
Проблема такая: не измеряется температура (датчик цифровой DS18b20) из за частого опрашивания АЦП.
Если закоментировать измерения АЦП, то температура измеряется.
Я думаю проблему можно решить так: запретить прерывания по окончанию преобразования АЦП. Как это сделать?
Второй вариант: не мерить АЦП в момент измерения температуры. Как это сделать?
Подскажите свои варианты! Заранее огромное спасибо!
За одну секунду АЦП опрашивается примерно 1200 раз.
Проблема такая: не измеряется температура (датчик цифровой DS18b20) из за частого опрашивания АЦП.
Если закоментировать измерения АЦП, то температура измеряется.
Я думаю проблему можно решить так: запретить прерывания по окончанию преобразования АЦП. Как это сделать?
Второй вариант: не мерить АЦП в момент измерения температуры. Как это сделать?
Подскажите свои варианты! Заранее огромное спасибо!
- Реклама
Самый правильный вариант для Вас :
Если это Вам не пойдёт, то единственным вариантом будет написание своих функций для работы с датчиком и запретом с восстановлением прерываний на время каждого тайм-слота для записи и чтения линии. Тогда всё будет работать "как часы".
Но если Вы используете стандартную библиотеку от CVAVR, то измерение будет откладываться на 750 Мс, т.е. на всё время преобразования. Глупо они сделали.Второй вариант: не мерить АЦП в момент измерения температуры. Как это сделать?
Если это Вам не пойдёт, то единственным вариантом будет написание своих функций для работы с датчиком и запретом с восстановлением прерываний на время каждого тайм-слота для записи и чтения линии. Тогда всё будет работать "как часы".
- Сообщения: 173
- Зарегистрирован: Вт дек 21, 2010 21:18:52
У меня время измерения температуры 100 мС.
Мне это подойдет!
Пусть будет так: когда пришло время мерить температуру, то АЦП не измеряем.
Как осуществить?
Мне это подойдет!
Пусть будет так: когда пришло время мерить температуру, то АЦП не измеряем.
Как осуществить?
Последний раз редактировалось Аlex Вс ноя 24, 2013 21:22:01, всего редактировалось 1 раз.
Причина: -
Причина: -
Запрещать прерывание на время измерения температуры. Это если измерения идут в прерывании.
ЗЫ: И перестаньте цитировать предыдущее сообщение, это запрещено правилами форума !
ЗЫ: И перестаньте цитировать предыдущее сообщение, это запрещено правилами форума !
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
USART свободный? http://kibermaster.net/rabota-s-shinoy- ... b20-k-avr/Amstron писал(а):Подскажите свои варианты
Да и вообще, совет - уходите от CVAVR, не зарьтесь на встроенные библиотеки и не думайте, что будет проще. От незнания внутренностей этих библиотек, проблем наживёте ещё больше, чем без их использования.
Вот, кстати, делал когда-то человеку пример - http://forum.cxem.net/index.php?showtop ... try1263038 ТАм использован CVAVR, реализованы свои функции работы 1-Wire + динамическая индикация. Может кому-нибудь пригодится.
ИМХО, это всё лишнее для МК, проще реализовать самому интерфейс 1-Wire.oleg110592 писал(а):USART свободный? http://kibermaster.net/rabota-s-shinoy- ... b20-k-avr/
Вот, кстати, делал когда-то человеку пример - http://forum.cxem.net/index.php?showtop ... try1263038 ТАм использован CVAVR, реализованы свои функции работы 1-Wire + динамическая индикация. Может кому-нибудь пригодится.
- Сообщения: 173
- Зарегистрирован: Вт дек 21, 2010 21:18:52
есть у меня вот такое прерывание:А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]); //читаем температуру с выбранного датчика
Это время выполнения функции ds18b20_temperatureкак узнать что датчик начал измерять и когда закончит?
Она запускает преобразование, ждёт его окончания и читает температуру. Всё это время программа тупо висит в этой функции, ещё и с запретом прерываний.
Я говорю - глупо сделали разрабы, многие наступают на эти грабли.
- Сообщения: 173
- Зарегистрирован: Вт дек 21, 2010 21:18:52
По крайней мере одно прерывание точно работает: interrupt [TIM0_OVF] void timer0_ovf_isr(void) //прерывание по перепонению TC/0Аlex писал(а):Это время выполнения функции ds18b20_temperature
Она запускает преобразование, ждёт его окончания и читает температуру. Всё это время программа тупо висит в этой функции, ещё и с запретом прерываний.
У меня на нем идет динамическая индикация на светодиодах. Цифирки горят всегда.
Значит запрет прерываний Вам не подойдёт. Разбирайтесь с 1-Wire и пишите свои функции. посмотрите выше по ссылке пример, может пригодится. Можете взять его за основу, там в функциях есть запрет на время тайм-слота.Amstron писал(а):У меня на нем идет динамическая индикация на светодиодах. Цифирки горят всегда.
- Сообщения: 173
- Зарегистрирован: Вт дек 21, 2010 21:18:52
Был глюк когда не было подключено ни одного датчика.
Устройство висло.
Выход из положения следующий:
Запред измерения температуры когда не подключено ни одного датчика
if (MAX_DEVICES != 0)
{
datchik_temp [nomer_datchika] = ds18b20_temperature(&rom_code[nomer_datchika][0]); //читаем температуру с выбранного датчика
}
Устройство висло.
Выход из положения следующий:
Запред измерения температуры когда не подключено ни одного датчика
if (MAX_DEVICES != 0)
{
datchik_temp [nomer_datchika] = ds18b20_temperature(&rom_code[nomer_datchika][0]); //читаем температуру с выбранного датчика
}
- Сообщения: 173
- Зарегистрирован: Вт дек 21, 2010 21:18:52
Проблема следующая:
Без подключенной библиотеки DS18B20.h, устройство работает отлично.
Устройство мериет постоянно АЦП (в сек 1200 раз). Контроллер мега168, частота 16 мГц.
Как только стоит подключить библиотеку DS18B20.h, индикатор начинает нервно мигать, температура не измеряется, постоянно выдает НОЛЬ!
Индикатор семисегментный 4 разряда светодиодный, разряды выключаются в прерывании.
Если я удаляю часть кода в программе , не обязательно эту часть, то температура начинает измеряться.
В чем проблема? Объем программы от флеш памяти занимает 91 %, глобальных переменных 280 байт.
Куда копать????
Без подключенной библиотеки DS18B20.h, устройство работает отлично.
Устройство мериет постоянно АЦП (в сек 1200 раз). Контроллер мега168, частота 16 мГц.
Как только стоит подключить библиотеку DS18B20.h, индикатор начинает нервно мигать, температура не измеряется, постоянно выдает НОЛЬ!
Индикатор семисегментный 4 разряда светодиодный, разряды выключаются в прерывании.
Если я удаляю часть кода в программе , не обязательно эту часть, то температура начинает измеряться.
В чем проблема? Объем программы от флеш памяти занимает 91 %, глобальных переменных 280 байт.
Куда копать????
Чё?Amstron писал(а):Устройство мериет постоянно АЦП (в сек 1200 раз).
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Amstron писал(а):Как только стоит подключить библиотеку DS18B20.h, индикатор начинает нервно мигать, температура не измеряется, постоянно выдает НОЛЬ!
Игнорируем советы ?Аlex писал(а):Разбирайтесь с 1-Wire и пишите свои функции.посмотрите выше по ссылке пример, может пригодится. Можете взять его за основу, там в функциях есть запрет на время тайм-слота.
- Сообщения: 173
- Зарегистрирован: Вт дек 21, 2010 21:18:52
Возможно ошибаюсь. Не важно на самом деле...Gudd-Head писал(а):Чё?
По Вашей ссылке ходил.Аlex писал(а):Игнорируем советы ?
Ни чего дельного не нашол.
Выложите сюда последний реализ рабочего проекта, а то по той ссылке я все перепробывал и не чего не помогло.
Последний раз редактировалось Gudd-Head Ср ноя 27, 2013 10:55:55, всего редактировалось 1 раз.
Причина: Склеил и лишнее удалил
Причина: Склеил и лишнее удалил
Я не про ссылки и проекты, а про самостоятельное изучение интерфейса. Он прост как 5 копеек, нужно просто сесть и почитать. Быстрее бы уже разобрались, чем тыкать наобум и надеяться на авось...


