CodeVision AVR в вопросах и ответах
Re: CodeVision AVR в вопросах и ответах
Сериг вот здесь http://radiokot.ru/forum/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 в вопросах и ответах
Много уважаемый ARV написал такую библиотеку. Исходники можно найти тут, по моиму "термостат меньше не бывает", но я не уверен. Уверен только в том что библиотека есть и я ею пользуюсь.TovsCat писал(а): А вот, что бы, работали датчики на разных пинах, это по видимому надо уметь написать самому такой код, кто нибудь имеет пример такого кода?
«И всё-таки она вертится!»
- 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
Вот тема с исчерпывающий обсуждением http://radiokot.ru/forum/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
Вот тема с исчерпывающий обсуждением http://radiokot.ru/forum/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 в вопросах и ответах
Благо 18В20 имеет энергонезависимую память, в которую можно записать "местоположение" датчика, не заморачиваясь с серийником.ut1wpr писал(а):Лазерные серийники мы сосчитаем, а как мы определим, к какому, скажем, насосу-двигателю он принадлежит? Заводить базу со связами? Эти связи легко разрушаются путем перестановки датчиков из "одной географии" в другую.
Ну а вообще да, когда ног дофига, можно и по одному датчику на каждую ногу повесить, и тянуть целую косу проводов. Правда, при этом, очевидно теряется вся прелесть 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 в вопросах и ответах
Там нет ограничений, в дэфайне можно задать сколько угодно. Ограничение будет лишь в размере RAM примененного контроллера.Volgol_555 писал(а): ...CVavr ограничивает это число в 8! - я думаю этого достаточно!
- 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:
только вот вопрос о переносимости кода останется открытым.
\x60 здесь это символ номер 60 втаблице символов ASCII
Код: Выделить всё
eeprom unsigned char saved_value =56;//Объявляем переменную по умолчанию
unsigned char value
//в начале работы
value=saved_value;
////////---------- разное,работаем с переменной value
//конец работы
saved_value=value;//сохраняем значение
Так это же та самая строка разве не понятно?Читайте справку по printf();что такое 2 Tepјoјeїpa 1\x60C?
\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 писал(а):Хотя и накладываются ограничения на количество обслуживаемых датчиков.
С уважением,
Виктор.
Виктор.


