CodeVision AVR в вопросах и ответах
Re: CodeVision AVR в вопросах и ответах
Сериг вот здесь viewtopic.php?f=25&t=72077 немного обсуждалось подключение датчиков на разные пины. (сообщения от Леонид Иваныча)
- Volgol_555
- Потрогал лапой паяльник
- Сообщения: 301
- Зарегистрирован: Пт сен 23, 2011 13:13:51
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Вижу 2 варианта: 1) Вывести ROM код каждого датчика на дисплей и затем подправить программу!
2) Сделать в устройстве выбор датчиков (т.е. сделать возможность присвоить им в меню порядковые номера самостоятельно)
Кстати на каждом датчике идет уникальный адрес, который является частью РОМ кода! У меня на датчике код B8C520, на дисплее я получаю следующий ROM код 2820C5B8000000D5. - это 8 элементов массива, 3 из которых нам нужно сравнивать с кодом датчика!!!
Для понимаю скажу структуру ROM кода: 8 бит - CRC (контрольный пакет для проверки данных), 48 бит - серийный номер, 8 бит - код семейства (Для DS18B20 - это 28 в 16-м коде).
У тебя уникальный адрес датчика - 1131С4!!!
Датчики одного типа подключать на разные пины совершенно бесмысленно!!!
2) Сделать в устройстве выбор датчиков (т.е. сделать возможность присвоить им в меню порядковые номера самостоятельно)
Кстати на каждом датчике идет уникальный адрес, который является частью РОМ кода! У меня на датчике код B8C520, на дисплее я получаю следующий ROM код 2820C5B8000000D5. - это 8 элементов массива, 3 из которых нам нужно сравнивать с кодом датчика!!!
Для понимаю скажу структуру ROM кода: 8 бит - CRC (контрольный пакет для проверки данных), 48 бит - серийный номер, 8 бит - код семейства (Для DS18B20 - это 28 в 16-м коде).
У тебя уникальный адрес датчика - 1131С4!!!
Датчики одного типа подключать на разные пины совершенно бесмысленно!!!
Самое гениальное - всегда самое простое
- Apparatchik
- Держит паяльник хвостом
- Сообщения: 908
- Зарегистрирован: Вс май 23, 2010 13:55:42
- Откуда: Украина, Александрия
Re: CodeVision AVR в вопросах и ответах
TovsCat писал(а):А вот, что бы, работали датчики на разных пинах, это по видимому надо уметь написать самому такой код, кто нибудь имеет пример такого кода?
Много уважаемый ARV написал такую библиотеку. Исходники можно найти тут, по моиму "термостат меньше не бывает", но я не уверен. Уверен только в том что библиотека есть и я ею пользуюсь.
«И всё-таки она вертится!»
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: CodeVision AVR в вопросах и ответах
Сериг писал(а):Тогда как вы сне предлагаете на одну линию датчики вешать?
Как насчёт такого варианта: один датчик в паразитном режиме, другой — с полноценным питанием. Проверка питания датчика осущ-ся спец. командой.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Volgol_555
- Потрогал лапой паяльник
- Сообщения: 301
- Зарегистрирован: Пт сен 23, 2011 13:13:51
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Я не понимаю, из-за чего проблема??? 1-wire позволяет вешать много различных устройств. В начала программы происходит инициализации всех датчиков (получение ROM кода каждого). Далее мы просто обращаемся к конкретному используя ром код, сохраненный в памяти контроллера. Вот пример с 2-мя датчиками: http://mega-avr.ucoz.ru/publ/ds18b20_co ... 5/1-1-0-15.
Зачем придумывать различные изощрения, когда этот метод проверенный оргомным количеством людей и он реально надежный (у меня у самого висит 2 датчика температуры, один - Т в комнате, второй = Т на улице, причем второй висит на проводе длинной 8 м!).
Автору, следует просто нормально изучить даташит на сей датчик, тем более в интернете полно примеров на различных языках программирования!
http://cxem.net/mc/mc90.php
Вот тема с исчерпывающий обсуждением viewtopic.php?f=20&t=52450
Вот пример программы:
ds18b20_devices=w1_search(0xf0,ds18b20_rom_codes); // инициализация всех датчиков DS18b20
while (1) {
if (ds18b20_devices) {
temp1=ds18b20_temperature(&ds18b20_rom_codes[0][0])*10;
temp2=ds18b20_temperature(&ds18b20_rom_codes[1][0])*10; //если есть второй датчик
sprintf(lcd_buf1,"%i.%u\xdfC ",temp1/10,temp1%10);
sprintf(lcd_buf2,"%i.%u\xdfC ",temp2/10,temp2%10); // вывод на дисплей с точностью до 0,1
lcd_puts(lcd_buf1); lcd_puts(lcd_buf2);
}
}
Можешь вешать сколько угодно таких датчиков на одну линию, правда CVavr ограничивает это число в 8! - я думаю этого достаточно!
Зачем придумывать различные изощрения, когда этот метод проверенный оргомным количеством людей и он реально надежный (у меня у самого висит 2 датчика температуры, один - Т в комнате, второй = Т на улице, причем второй висит на проводе длинной 8 м!).
Автору, следует просто нормально изучить даташит на сей датчик, тем более в интернете полно примеров на различных языках программирования!
http://cxem.net/mc/mc90.php
Вот тема с исчерпывающий обсуждением viewtopic.php?f=20&t=52450
Вот пример программы:
ds18b20_devices=w1_search(0xf0,ds18b20_rom_codes); // инициализация всех датчиков DS18b20
while (1) {
if (ds18b20_devices) {
temp1=ds18b20_temperature(&ds18b20_rom_codes[0][0])*10;
temp2=ds18b20_temperature(&ds18b20_rom_codes[1][0])*10; //если есть второй датчик
sprintf(lcd_buf1,"%i.%u\xdfC ",temp1/10,temp1%10);
sprintf(lcd_buf2,"%i.%u\xdfC ",temp2/10,temp2%10); // вывод на дисплей с точностью до 0,1
lcd_puts(lcd_buf1); lcd_puts(lcd_buf2);
}
}
Можешь вешать сколько угодно таких датчиков на одну линию, правда CVavr ограничивает это число в 8! - я думаю этого достаточно!
Самое гениальное - всегда самое простое
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Судя по вопросам Сериг'а, он далёк от команд. А если бы сел и разобрался с 1-wire, что не так уж и сложно, то давно бы уже реализовал свою задачу. Для многих, банальная лень разбираться в протоколах и интерфейсах, превращается в кучу геморроя, отнимающего кучу времени. А всего-то нужно часик погуглить информацию и пару часиков посидеть и почитать.Gudd-Head писал(а):Проверка питания датчика осущ-ся спец. командой.
Re: CodeVision AVR в вопросах и ответах
На мой взгляд, система с множеством датчиков на одной линии имеет один довольно неприятный момент. А именно. Идентификация датчика в привязке к конкретному оборудованию.Аlex писал(а):Судя по вопросам Сериг'а, он далёк от команд. А если бы сел и разобрался с 1-wire, что не так уж и сложно, то давно бы уже реализовал свою задачу. Для многих, банальная лень разбираться в протоколах и интерфейсах, превращается в кучу геморроя, отнимающего кучу времени. А всего-то нужно часик погуглить информацию и пару часиков посидеть и почитать.
Лазерные серийники мы сосчитаем, а как мы определим, к какому, скажем, насосу-двигателю он принадлежит? Заводить базу со связами? Эти связи легко разрушаются путем перестановки датчиков из "одной географии" в другую. Привязка же датчиков к пинам имеет свою жесткость. Становится слегка пофигу, какой у того датчика серийник. Достаточно знания, что он находится на пятом пине второго порта.
Все остальные замечания по изучению протоколов и пониманию - абсолютно правильные. К подобному состоянию приводит использование чужих библиотек без вникания в их суть. мы уже не рах предупреждали начинающих коллег о скрытом вреде такого подхода. В результате имеем метания в поисках нужной библиотеки в случае малейшего отклонения от функционала используемой.
С уважением,
Виктор.
Виктор.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: CodeVision AVR в вопросах и ответах
ut1wpr писал(а):Лазерные серийники мы сосчитаем, а как мы определим, к какому, скажем, насосу-двигателю он принадлежит? Заводить базу со связами? Эти связи легко разрушаются путем перестановки датчиков из "одной географии" в другую.
Благо 18В20 имеет энергонезависимую память, в которую можно записать "местоположение" датчика, не заморачиваясь с серийником.
Ну а вообще да, когда ног дофига, можно и по одному датчику на каждую ногу повесить, и тянуть целую косу проводов. Правда, при этом, очевидно теряется вся прелесть 1-Wire. Ведь есть же датчики с I²C интерфейсом, который в МК реализован аппаратно.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
ut1wpr, полностью с Вами согласен. Многим проще тратить время на поиски каких-то непонятных им библиотек, которые могут и не заработать или не подойти, и от которых знаний в голове совершенно не прибавится, чем потратить время на чтение литературы.
По этому, лучше выучить и создавать свой код, хоть по одной линии, хоть по десяти....
По этому, лучше выучить и создавать свой код, хоть по одной линии, хоть по десяти....
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Можно попробовать подключить их через достаточно низкоомные мультиплексоры типа 74HC4051. Правда, при «по пину на датчик» можно их и одновремённо опрашивать, а с коммутатором не выйдет. Зато легко добавить каналы.ut1wpr писал(а):Хотя и накладываются ограничения на количество обслуживаемых датчиков.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Re: CodeVision AVR в вопросах и ответах
Volgol_555 писал(а):...CVavr ограничивает это число в 8! - я думаю этого достаточно!
Там нет ограничений, в дэфайне можно задать сколько угодно. Ограничение будет лишь в размере RAM примененного контроллера.
- Volgol_555
- Потрогал лапой паяльник
- Сообщения: 301
- Зарегистрирован: Пт сен 23, 2011 13:13:51
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Ясно - это мое упущение 
Самое гениальное - всегда самое простое
Re: CodeVision AVR в вопросах и ответах
Человек только и спросил, как два датчика подключить на разные пины?, на что каждый высказался наф*г такое подключение нужно, лучше считывай у датчиков индификатор и заранее прописывай его для нужного датчика в нужное местоположение... здорово, этого как раз многие и не знали.
Елы -палы, ну не знаете как датчики подключаются на разные пины, зачем демагогию разводить, и доказывать как они прекрасны на одной линии.
Число постов по делу 0.5 штук , самим не смешно, умники!
Елы -палы, ну не знаете как датчики подключаются на разные пины, зачем демагогию разводить, и доказывать как они прекрасны на одной линии.
Число постов по делу 0.5 штук , самим не смешно, умники!
Код: Выделить всё
Подключение датчиков на разные биты порта
Такой фокус с библиотекой для датчика ds18b20 не получиться, т.к. компилятор не будеть понимать с какого именно бита одного и такого же порта происходит обращение к датчику. В случае с собственно написанной библиотекой успех будет положительным, т.к. мы сами определяем с какого бита производить обращение к датчику ds18b20.- Volgol_555
- Потрогал лапой паяльник
- Сообщения: 301
- Зарегистрирован: Пт сен 23, 2011 13:13:51
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Мы ему предложили другой более простой вариант, т.к. человек явно не знал, что можно вешать несколько на одну ногу и уж тем более, не знал, как в этом случае работать с ними...
Самое гениальное - всегда самое простое
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Ох..ть какую новость ты рассказал. А мы что ему предлагали, в космос слетать ? Посты выше почитай...В случае с собственно написанной библиотекой успех будет положительным, т.к. мы сами определяем с какого бита производить обращение к датчику ds18b20.
- Сериг
- Это не хвост, это антенна
- Сообщения: 1451
- Зарегистрирован: Пт фев 19, 2010 19:39:28
- Откуда: Москва
Re: CodeVision AVR в вопросах и ответах
Еще раз всем мяу!
не могли бы помочь,разъясните вот эти строчки кода
char *_str1="2 Tepјoјeїpa 1\x60C";
что такое 2 Tepјoјeїpa 1\x60C?
вот эту строку sprintf(lcd_buffer_1," t%u=%i.%u\xdfC ",i+1,temp1,temp1%1);
и подскажите пожалуйста как записать в буфер свое значение,вот в этот-
unsigned char lcd_buffer_3[16];
Спасибо!
не могли бы помочь,разъясните вот эти строчки кода
char *_str1="2 Tepјoјeїpa 1\x60C";
что такое 2 Tepјoјeїpa 1\x60C?
вот эту строку sprintf(lcd_buffer_1," t%u=%i.%u\xdfC ",i+1,temp1,temp1%1);
и подскажите пожалуйста как записать в буфер свое значение,вот в этот-
unsigned char lcd_buffer_3[16];
Спасибо!
- Сериг
- Это не хвост, это антенна
- Сообщения: 1451
- Зарегистрирован: Пт фев 19, 2010 19:39:28
- Откуда: Москва
Re: CodeVision AVR в вопросах и ответах
И еще такой вопрос 
В EEPROM можно записать не 0 или 1 в определенную ечейку,а значение переменной?
Если да-буду очень благодарен за отрывок кода с применением данной функции!
В EEPROM можно записать не 0 или 1 в определенную ечейку,а значение переменной?
Если да-буду очень благодарен за отрывок кода с применением данной функции!
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Это же элементарно с CVAVR:
только вот вопрос о переносимости кода останется открытым.
Так это же та самая строка разве не понятно?Читайте справку по printf();
\x60 здесь это символ номер 60 втаблице символов ASCII
Код: Выделить всё
eeprom unsigned char saved_value =56;//Объявляем переменную по умолчанию
unsigned char value
//в начале работы
value=saved_value;
////////---------- разное,работаем с переменной value
//конец работы
saved_value=value;//сохраняем значение
только вот вопрос о переносимости кода останется открытым.
что такое 2 Tepјoјeїpa 1\x60C?
Так это же та самая строка разве не понятно?Читайте справку по printf();
\x60 здесь это символ номер 60 втаблице символов ASCII
Последний раз редактировалось vitalik_1984 Вс окт 21, 2012 20:05:47, всего редактировалось 1 раз.
В поисках истины человек развивается.
Re: CodeVision AVR в вопросах и ответах
Нет у него такой памяти.Gudd-Head писал(а):Благо 18В20 имеет энергонезависимую память, в которую можно записать "местоположение" датчика, не заморачиваясь с серийником.
Прелесть 1-wire не в возможности "гирлянды развешивать", а именно в уникальных возможностях самих датчиков в сочетании с неплохо продуманным протоколом и теневым питанием.теряется вся прелесть 1-Wire. Ведь есть же датчики с I²C интерфейсом, который в МК реализован аппаратно.
Применение датчиков с I2C протоколом на те же расстояния и в тех же условиях невозможно.
А вообще-то, проблемы архитектуры и топологии - это проблемы автора вопроса. Лично я не знаком с полными и окончательными требованиями и условиями его проекта. Потому и не лез в обсуждения, просто напомнил про слабые стороны "гирляндирования".
С уважением,
Виктор.
Виктор.
Re: CodeVision AVR в вопросах и ответах
Через MUX/DEMUX организовать можно, правда, я не пробовал. Возможно, неплохо должно работать. Действительно, неизвестно, какое окажет влияние сопротивление открытого канала. Не проверял, а интересно...avreal писал(а):Можно попробовать подключить их через достаточно низкоомные мультиплексоры типа 74HC4051. Правда, при «по пину на датчик» можно их и одновремённо опрашивать, а с коммутатором не выйдет. Зато легко добавить каналы.ut1wpr писал(а):Хотя и накладываются ограничения на количество обслуживаемых датчиков.
С уважением,
Виктор.
Виктор.