CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
C@at
Вымогатель припоя
Сообщения: 652
Зарегистрирован: Вс ноя 13, 2011 16:42:05
Откуда: Украина

Re: CodeVision AVR в вопросах и ответах

Сообщение C@at »

Сериг вот здесь viewtopic.php?f=25&t=72077 немного обсуждалось подключение датчиков на разные пины. (сообщения от Леонид Иваныча)
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Volgol_555 »

Вижу 2 варианта: 1) Вывести ROM код каждого датчика на дисплей и затем подправить программу!
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 в вопросах и ответах

Сообщение Apparatchik »

TovsCat писал(а):А вот, что бы, работали датчики на разных пинах, это по видимому надо уметь написать самому такой код, кто нибудь имеет пример такого кода?

Много уважаемый ARV написал такую библиотеку. Исходники можно найти тут, по моиму "термостат меньше не бывает", но я не уверен. Уверен только в том что библиотека есть и я ею пользуюсь.
«И всё-таки она вертится!»
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: CodeVision AVR в вопросах и ответах

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

Сериг писал(а):Тогда как вы сне предлагаете на одну линию датчики вешать?

Как насчёт такого варианта: один датчик в паразитном режиме, другой — с полноценным питанием. Проверка питания датчика осущ-ся спец. командой.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Volgol_555 »

Я не понимаю, из-за чего проблема??? 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! - я думаю этого достаточно!
Самое гениальное - всегда самое простое
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

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

Gudd-Head писал(а):Проверка питания датчика осущ-ся спец. командой.
Судя по вопросам Сериг'а, он далёк от команд. А если бы сел и разобрался с 1-wire, что не так уж и сложно, то давно бы уже реализовал свою задачу. Для многих, банальная лень разбираться в протоколах и интерфейсах, превращается в кучу геморроя, отнимающего кучу времени. А всего-то нужно часик погуглить информацию и пару часиков посидеть и почитать.
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: CodeVision AVR в вопросах и ответах

Сообщение ut1wpr »

Аlex писал(а):Судя по вопросам Сериг'а, он далёк от команд. А если бы сел и разобрался с 1-wire, что не так уж и сложно, то давно бы уже реализовал свою задачу. Для многих, банальная лень разбираться в протоколах и интерфейсах, превращается в кучу геморроя, отнимающего кучу времени. А всего-то нужно часик погуглить информацию и пару часиков посидеть и почитать.
На мой взгляд, система с множеством датчиков на одной линии имеет один довольно неприятный момент. А именно. Идентификация датчика в привязке к конкретному оборудованию.
Лазерные серийники мы сосчитаем, а как мы определим, к какому, скажем, насосу-двигателю он принадлежит? Заводить базу со связами? Эти связи легко разрушаются путем перестановки датчиков из "одной географии" в другую. Привязка же датчиков к пинам имеет свою жесткость. Становится слегка пофигу, какой у того датчика серийник. Достаточно знания, что он находится на пятом пине второго порта. :) Хотя и накладываются ограничения на количество обслуживаемых датчиков.
Все остальные замечания по изучению протоколов и пониманию - абсолютно правильные. К подобному состоянию приводит использование чужих библиотек без вникания в их суть. мы уже не рах предупреждали начинающих коллег о скрытом вреде такого подхода. В результате имеем метания в поисках нужной библиотеки в случае малейшего отклонения от функционала используемой.
С уважением,
Виктор.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: CodeVision AVR в вопросах и ответах

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

ut1wpr писал(а):Лазерные серийники мы сосчитаем, а как мы определим, к какому, скажем, насосу-двигателю он принадлежит? Заводить базу со связами? Эти связи легко разрушаются путем перестановки датчиков из "одной географии" в другую.

Благо 18В20 имеет энергонезависимую память, в которую можно записать "местоположение" датчика, не заморачиваясь с серийником.
Ну а вообще да, когда ног дофига, можно и по одному датчику на каждую ногу повесить, и тянуть целую косу проводов. Правда, при этом, очевидно теряется вся прелесть 1-Wire. Ведь есть же датчики с I²C интерфейсом, который в МК реализован аппаратно.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

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

ut1wpr, полностью с Вами согласен. Многим проще тратить время на поиски каких-то непонятных им библиотек, которые могут и не заработать или не подойти, и от которых знаний в голове совершенно не прибавится, чем потратить время на чтение литературы.
По этому, лучше выучить и создавать свой код, хоть по одной линии, хоть по десяти....
Аватара пользователя
avreal
Опытный кот
Сообщения: 842
Зарегистрирован: Чт дек 31, 2009 19:27:45
Откуда: Бровари, Україна
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение avreal »

ut1wpr писал(а):Хотя и накладываются ограничения на количество обслуживаемых датчиков.
Можно попробовать подключить их через достаточно низкоомные мультиплексоры типа 74HC4051. Правда, при «по пину на датчик» можно их и одновремённо опрашивать, а с коммутатором не выйдет. Зато легко добавить каналы.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
Аватара пользователя
rs39
Открыл глаза
Сообщения: 53
Зарегистрирован: Сб май 07, 2011 14:35:24
Откуда: Россия

Re: CodeVision AVR в вопросах и ответах

Сообщение rs39 »

Volgol_555 писал(а):...CVavr ограничивает это число в 8! - я думаю этого достаточно!

Там нет ограничений, в дэфайне можно задать сколько угодно. Ограничение будет лишь в размере RAM примененного контроллера.
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Volgol_555 »

Ясно - это мое упущение :)
Самое гениальное - всегда самое простое
TovsCat
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пт апр 27, 2012 15:48:35

Re: CodeVision AVR в вопросах и ответах

Сообщение TovsCat »

Человек только и спросил, как два датчика подключить на разные пины?, на что каждый высказался наф*г такое подключение нужно, лучше считывай у датчиков индификатор и заранее прописывай его для нужного датчика в нужное местоположение... здорово, этого как раз многие и не знали.
Елы -палы, ну не знаете как датчики подключаются на разные пины, зачем демагогию разводить, и доказывать как они прекрасны на одной линии.
Число постов по делу 0.5 штук , самим не смешно, умники!

Код: Выделить всё

Подключение датчиков на разные биты порта

Такой фокус с библиотекой для датчика ds18b20 не получиться, т.к. компилятор не будеть понимать с какого именно бита одного и такого же порта происходит обращение к датчику. В случае с собственно написанной библиотекой успех будет положительным, т.к. мы сами определяем с какого бита производить обращение к датчику ds18b20.
Аватара пользователя
Volgol_555
Потрогал лапой паяльник
Сообщения: 301
Зарегистрирован: Пт сен 23, 2011 13:13:51
Откуда: Минск
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение Volgol_555 »

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

Re: CodeVision AVR в вопросах и ответах

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

В случае с собственно написанной библиотекой успех будет положительным, т.к. мы сами определяем с какого бита производить обращение к датчику 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];
Спасибо!
Аватара пользователя
Сериг
Это не хвост, это антенна
Сообщения: 1451
Зарегистрирован: Пт фев 19, 2010 19:39:28
Откуда: Москва

Re: CodeVision AVR в вопросах и ответах

Сообщение Сериг »

И еще такой вопрос :)))
В EEPROM можно записать не 0 или 1 в определенную ечейку,а значение переменной?
Если да-буду очень благодарен за отрывок кода с применением данной функции!
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение vitalik_1984 »

Это же элементарно с CVAVR:

Код: Выделить всё


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 раз.
В поисках истины человек развивается.
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: CodeVision AVR в вопросах и ответах

Сообщение ut1wpr »

Gudd-Head писал(а):Благо 18В20 имеет энергонезависимую память, в которую можно записать "местоположение" датчика, не заморачиваясь с серийником.
Нет у него такой памяти.
теряется вся прелесть 1-Wire. Ведь есть же датчики с I²C интерфейсом, который в МК реализован аппаратно.
Прелесть 1-wire не в возможности "гирлянды развешивать", а именно в уникальных возможностях самих датчиков в сочетании с неплохо продуманным протоколом и теневым питанием.
Применение датчиков с I2C протоколом на те же расстояния и в тех же условиях невозможно.
А вообще-то, проблемы архитектуры и топологии - это проблемы автора вопроса. Лично я не знаком с полными и окончательными требованиями и условиями его проекта. Потому и не лез в обсуждения, просто напомнил про слабые стороны "гирляндирования". :)
С уважением,
Виктор.
ut1wpr
Вымогатель припоя
Сообщения: 581
Зарегистрирован: Ср янв 05, 2011 10:03:18

Re: CodeVision AVR в вопросах и ответах

Сообщение ut1wpr »

avreal писал(а):
ut1wpr писал(а):Хотя и накладываются ограничения на количество обслуживаемых датчиков.
Можно попробовать подключить их через достаточно низкоомные мультиплексоры типа 74HC4051. Правда, при «по пину на датчик» можно их и одновремённо опрашивать, а с коммутатором не выйдет. Зато легко добавить каналы.
Через MUX/DEMUX организовать можно, правда, я не пробовал. Возможно, неплохо должно работать. Действительно, неизвестно, какое окажет влияние сопротивление открытого канала. Не проверял, а интересно... :)
С уважением,
Виктор.
Ответить

Вернуться в «AVR»