| |  | | | |
Датчики DS18*20 и все что с ними связанно (1 просматривает)
|
|
TOPIC: Датчики DS18*20 и все что с ними связанно
|
ICETUX (Пользователь)
Новичок
Постов: 23
|
| Датчики DS18*20 и все что с ними связанно 12.03.2010 12:55 |
Репутация: 0   |
|
Здравствуйте форумчане. Темы похожей не нашел здесь, поэтому решил создать. Тема такая: собираю систему защиты блока питания усилителя на МК AT90S8515, для контроля температуры планирую использовать датчики DS1820, планирую разместить 7-10 датчиков на отдельные выходы МК, затем опрашивать их в цикле и в зависимости от наибольшей температуры регулировать скорость вращения кулеров с помощью ШИМ канала. Подскажите пожалуйста кто работал с такими датчиками их лучше использовать с таким подключением как я указал выше или лучше объеденить в сеть, а затем опрашивать? И еще вопрос после того, как датчик получил команду на конвертацию температуры полученное значение сохраняется во внутреннем регистре датчика до следующего запроса или удаляется?
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
ARV (Администратор)
Администратор
Постов: 1871
|
| В ответ на: Датчики DS18*20 и все что с ними связанно 12.03.2010 13:58 |
Репутация: 166   |
можно и так и эдак, в основе выбора должна быть какая-то важная причина сделать именно так. вот вы почему решили разнести их по портам? это ведь лишние резисторы на подтяжки... ну и немного удивляет количество датчиков для защиты блока питания... не многовато ли? дело, конечно, не мое, но странно все-таки  что касается значения температуры, то оно сохраняется во внутреннем ОЗУ датчика до запуска очередного измерения или отключения питания.
Не стыдно не знать, стыдно не учиться
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
ICETUX (Пользователь)
Новичок
Постов: 23
|
| В ответ на: Датчики DS18*20 и все что с ними связанно 12.03.2010 21:35 |
Репутация: 0   |
|
Да ARV вы правы причина действительно в таком решении есть, мне просто как новичку в деле программирования МК показалось немного сложным работать с сетью датчиков на шине. По количеству датчиков все просто, просто мы с товарищем собираем усилитель звука, а датчики темперытуры планируем установить на теплоотводящих пластинах транзисторов,усилителей мощности.Может кто подскажет ответы на следующие вопросы: - если на шине несколько датчиков то по команде поиск адресов ответ в каком формате будет выдан на Мк; - достаточно ли в начале программы найти все устройства на шине, записать их в переменные, а затем использовать их при опросе; - после того как активируется конкретное устройство на шине все дальнейшие команды на конвертацию, чтение запись будут касаться только этого датчика или как-то иначе. - и как посоветуете сохранять результаты преобразований от датчиков для дальнейшего сравнения, в регистрах или лучше выделить под это дело память МК.
Кстати ARV отдельное вам спасибо за статью по программированию датчиков и описании работы шины i-wire на ассемблере, очень помогла, одна из самых адекватных, которые доводилось читать. Так что кто планирует работать с i-wire обязательно читать, снимает кучу вопросов.
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
ARV (Администратор)
Администратор
Постов: 1871
|
| В ответ на: Датчики DS18*20 и все что с ними связанно 13.03.2010 10:10 |
Репутация: 166   |
вы тогда прочтите и общую статью об интерфейсе, возможно, тогда и вопросов меньше будет по логике работы с сетью датчиков. а пока вот ответы на ваши вопросы: 1. говорить о "команде" поиска особо и не стоит, т.к. ответ на эту команду весьма хитрый. лучше говорить о функции поиска устройств (библиотечная ф-я для 1-wire). так вот, функция поиска при каждом вызове возвратит вам или адрес (8 байт) очередного девайса на шине, или 0, если больше девайсов нету. т.е. ее надо вызывать в цикле до тех пор, пока все устройства не будут найдены. разумеется, возвращенные адреса надо где-то сохранять. 2. именно так: сначала нашли все, а потом используем. но такой подход верен только для стационарной системы, в которой количество девайсов на шине постоянно и не меняется в процессе работы (ваш случай). если же девайсы на ходу подконнекчиваются и отключаются - надо искать всякий раз перед обращением или избрать иной алгоритм работы. 3. до подачи сигнала RESET работа ведется только с "активированным" по адресу устройством. 4. советую писать программу на Си и, соответственно, не ломать голову над местом хранения данных - храните их в переменных или массивах, а конкретное место выберет компилятор. рекомендую так же задуматься над другим подходом к работе с кучей датчиков. сначала вы при помощи компьютера определяете адрес каждого вашего датчика, и помечаете каждый датчик, например, краской. в итоге вы имеете табличку типа "синий - адрес 0022003440560, красный - адрес 485623863, и т.д.". затем вы распаиваете свои датчики по схеме, при этом вы уже знаете, температуру какого узла будет мерить синий или иной датчик. в программе своей вы жестко забиваете таблицу адресов ваших датчиков, и пишите ее уже зная, какой адрес какую температуру выдает (синий - левый канал, красный - правый, зеленый - блок питания и т.д.). при этом вам не надо искать датчики, нет путаницы с тем, как понять, какой адрес какой узел измеряет (что неизбежно, если вы будете искать датчики в программе), если откажет какой-то датчик - вы сразу узнаете, какой именно. минус тут тоже есть: если датчик откажет и его вы замените - придется перекомпилировать программу, т.е. записать его адрес в нее заново. Содержимое поста отредактировано: ARV, в: 13.03.2010 10:12
Не стыдно не знать, стыдно не учиться
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
ICETUX (Пользователь)
Новичок
Постов: 23
|
| В ответ на: Датчики DS18*20 и все что с ними связанно 23.03.2010 12:37 |
Репутация: 0   |
|
Доброго времени суток! ARV огромное спасибо за ссылку на статью, очень полезна. Но вот по ходу дела возникли еще некоторые вопросы, возможно немного смешные и немного не в тему, сильно не пинайте новичка в деле прграммирования МК. Как уже писал хочу использовать около 10 датчиков DS1820 МК AT90S8515 но кроме опроса датчиков и регулирования скорости кулера по ШИМ каналам планирую управлять питанием блока питания, через кнопку сеть. Вопрос такой: - если посадить эту кнопку на вывод INT0 и назначить на него прерывание а затем например между замерами температур с разных датчиков разрешать прерывания для МК и соответственно отслеживать нажатие кнопки "сеть" или же лучше отслеживать состояние вывода МК программно или же при таком количестве датчиков контроль температуры сделать на одном МК, а все остальное на другом дополнительном МК.
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
ARV (Администратор)
Администратор
Постов: 1871
|
| В ответ на: Датчики DS18*20 и все что с ними связанно 24.03.2010 08:10 |
Репутация: 166   |
|
так что вы от меня-то хотите? на сколько у вас хватит опыта программирования - так и делайте. я с кнопками по прерываниям не заморачиваюсь, до сего дня обходился программным опросом.
Не стыдно не знать, стыдно не учиться
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
ICETUX (Пользователь)
Новичок
Постов: 23
|
| В ответ на: Датчики DS18*20 и все что с ними связанно 22.04.2010 18:06 |
Репутация: 0   |
|
Доброго времени суток всем! Продолжаю ботроться со своим девайсом. Возник вопрос, может кто сталкивался. Как я выше писал датчиков DS1820 у меня 7-8 штук, схему решил реализовать на каждую ногу МК по датчику. Как я понял из статьи от ARV (познавательно спасибо) сброс RESET шины и ожидание ответа от датчика по времени где-то 0,9 мкс, затем анализируем флаг Z (есть датчик или ошибка). Вопрос вот в чем: Возможно ли подавать сигнал RESET сразу на несколько датчиков и соответственно реализовать проверку на наличие или это не реально, т.к ответ от датчика может поступить в интервале от 60-240мкс и отследить какой из датчиков ответил точно невозможно, т.е делать только так: проверяем один датчик, ждем ответа, ели все ок, то следующий датчик и т.д.???
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
ARV (Администратор)
Администратор
Постов: 1871
|
| В ответ на: Датчики DS18*20 и все что с ними связанно 22.04.2010 19:04 |
Репутация: 166   |
думаю, что возможно, только придется в нужном промежутке "опроса" делать многократное считывание порта и двоиичное И между считанными значениями, примерно так: | Code: | PORTB = 0; // к этому порту подключены датчики
DDRB = 255; // выдаем во все 8 линий низкий уровень
delay(RESET_TIME); // отрабатываем длительность импульса RESET
DDRB = 0; // отпускаем все линии
delay(RESPONCE_TIME); // ждем интервал перед ответами
char result = 0xFF; // это переменная для хранения "ответов"
for(char i=0; i<25; i++){ // 25 раз будем опрашивать
result &= PINB;
delay(3); // задержка между опросами
}
// теперь в result будут 0 в тех битах, по линиям которых были ответы от датчиков
|
вот как-то так примерно
Не стыдно не знать, стыдно не учиться
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
ICETUX (Пользователь)
Новичок
Постов: 23
|
| В ответ на: Датчики DS18*20 и все что с ними связанно 28.04.2010 12:22 |
Репутация: 0   |
ARV Спасибо за полезный совет. Продолжаю биться со своим девайсом. Вопрос не много не в тему, но в рамках устройства. Подскажите, пишу процедуру выключения управляемого устройства, нужно остановить кулеры управляемые ШИМ (OC1A, OC1  .Если сделать так: OUT TCCR1B,0<<CS12|0<<CS11|0<<CS10; остановить таймер счетчик OUT TCCR1A,0<<COM1A0|0<<COM1A1|0<<COM1B0|0<<COM1B1;отцепить выводы от таймера то эта команда сбросит состояние выводов (OC1A,Oc1  или их нужно еще отдельно обнулять?
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
ARV (Администратор)
Администратор
Постов: 1871
|
| В ответ на: Датчики DS18*20 и все что с ними связанно 28.04.2010 14:26 |
Репутация: 166   |
|
с чего произойдет изменение регистра, к которому вы не обращаетесь? разумеется, OCRxx останутся неизменными.
Не стыдно не знать, стыдно не учиться
|
|
|
|
Для добавления сообщений Вы должны зарегистрироваться или авторизоваться.
|
|
|
|
| | |  |
|