Страница 2 из 2
Re: avr-gcc ds18b20 не находит
Добавлено: Вс янв 15, 2012 17:58:51
3DRaven
Резистор на 4.7кОм. Но питание не паразитное. Подключено на макетке к линии питания просто и ясно все. 4.7 кОм в таком случае по инструкции.
Re: avr-gcc ds18b20 не находит
Добавлено: Пн фев 20, 2012 17:51:48
3DRaven
Я наверное в бронепоезде, не то, что в танке. Но подрубить этот долбанный датчик так и не смог. Даже несколько купил, на всякий случай. Вот код сброса:
Код: Выделить всё
DDRC |= _BV(PC0);//1
PORTC &= ~_BV(PC0);//0
_delay_ms(0.488);
DDRC &= ~_BV(PC0);//0
_delay_ms(0.72);
if (!(PINC & _BV(PC0))) {
_delay_ms(0.424);//завершение таймслота
return 1;//Есть
} else {
_delay_ms(0.424);
return 0;//Нету
}
Вопрос. Ранее я часто видел
_delay_ms(480) и подобные конструкции. Датчик с такими задержками определялся раз в тысячу лет...то есть вообще ниогда, остальное наводки судя по всему. Недавно на немецких сайтах (я уже и на китайских попасся, задрало уже, скоро выкину эту дрянь и заменю на термопару!) нашел такое _delay_ms(0.480) или даже delay_us(480) делают сами функции, так как там задержки не в миллисекундах (ms), а микросекундах (us).
Где правда? В русских доках и кодах везде миллисекунды (ms) и вообще ничерта у меня не работает, никак, никогда, ни при каких вариантах примерах либах и положении луны! В немецких и некоторых других кодах микросекунды и работает отлично...определяется датчик, но температуру я считать так и не смог...сил уже нет возится.
Разъясните. И еще...я очень устал искать по настоящему работающий прямо сейчас на железе и простой (что бы видно было как команды на порты подавать) код, не зависящий ни от каких сторонних либ (у меня avr-gcc и там нету ds1820.h OneWire.h и прочих готовостей). Киньте в приложении к посту, правда больше сил нет искать, помогите.
Заранее спасибо.
Re: avr-gcc ds18b20 не находит
Добавлено: Пн фев 20, 2012 18:47:07
oleg110592
- 1w.zip
- (2.46 КБ) 163 скачивания
Вот код, где-то содрал (спасибо автору), переношу из проекта в проект - все работает. Для ИАР, но там легко названия портов изменить.
Re: avr-gcc ds18b20 не находит
Добавлено: Пн фев 20, 2012 22:06:53
3DRaven
Там то же везде delay_us!!! Мать перемать, дрова в смятку! Там микросекунды на обмен!!!!!!!
Вот почему во всем коде, что я видел везде так все через жопу работает и куча вопросов "у меня не пашет" и тем куча, а код что пашет сделан итерациями!!!! Я три недели трахал свой мозг через угол. Неужели в документации!!! Ошибки, или может быть просто устарели данные и датчики теперь в микросекундах работают? Не понимаю.
Но микросекунда гараздо логичнее...один сеанс связи по 1вире, длинной в секунду, для восмимегагерцового МК это дикость.
Большое спасибо, буду проверять.
Для конвертации iar2gcc есть заголовок. В приложении к посту.
Re: avr-gcc ds18b20 не находит
Добавлено: Пн фев 20, 2012 22:40:51
oleg110592
Насколько помню, по документации, время преобразования датчика составляет 750ms. В вышеприведенном коде посылается команда SKIP_ROM, затем команда CONVERT_TEMP, затем ждем 1 секунду - данные точно готовы - можно считывать. Когда-то давно для PIC микроконтроллеров писал сам по документации и примерам (там вроде было для 51 микроконтроллеров) тоже все прекрасно работало.
Могут быть проблемы если в микроконтроллере используются прерывания (например для динамической индикации) - программные задержки не выдерживаются. В таком случае работу с датчиком надо производить между прерываниями или запрещать прерывания, что может сказаться но работе индикатора. Еще недавно использовал этот код в Кодевижене - так он так все заоптимизировал, что датчик не работал. Пришлось поставить перед куском кода #pragma optsize- и в конце #pragma optsize+, только тогда все нормально заработало.
Re: avr-gcc ds18b20 не находит
Добавлено: Пн фев 20, 2012 23:40:18
3DRaven
Вожусь. Я нашел еще кучу кода и везде используется _delay_us
Само преобразование длится 750 ms но вот тайминги в таймслотах это именно us, а
в тех либах, что я мучил...и они не работали было и тут ms.
Вот в чем была причина судя по всему. Еще проверить надо.
Вот монументальный труд на тему:
http://www.siwawi.arubi.uni-kl.de/avr_p ... index.html
Судя по всему причину я нашел. Вот, например код сброса правильный:
Код: Выделить всё
OW_OUT_LOW();
OW_DIR_OUT(); // pull OW-Pin low for 480us
_delay_us(480);
А вот так будет неправильно и как обычно (в куче мест именно так!) делают, более того, если в даташит глянуть, там тайминги то же в ms.
Код: Выделить всё
OW_OUT_LOW();
OW_DIR_OUT(); // pull OW-Pin low for 480us
_delay_ms(480);
Наконец то свет в конце колодца.
Re: avr-gcc ds18b20 не находит
Добавлено: Вт фев 21, 2012 08:13:20
3DRaven
Так я еще и не знал устройства свой макетной платы! Это моя первая схема

Оказывается линии питания у нее разделены на две части. То есть две длинные полосы порезанные на пополам.
Часть контактов я повесил на одно "питание", где питания не было, а часть на другое.
Все это работало только за счет того, что ток с портов МК тек на "второе питание"...я их все по умолчанию в 1
выставил. В общем все это вообще работать не должно было

Но теперь надо будет проверить как оно будет в нормальном виде пахать...или не пахать.
Нашел я это, разобрав макетную плату...никакой инструкции с ней не было.
Собрал и теперь снова схему соберу и проверю.
Re: avr-gcc ds18b20 не находит
Добавлено: Вт фев 21, 2012 20:06:02
3DRaven
Проверил. Все работает. Все дело было в макетной плате, устройство которой я не знал.
Там было на коробке нарисовано, две линии питания, а на самом деле их там четыре

Градусы показывает и с нужной точностью, все адекватно и правильно.
Пока разбирался, я столько всего просмотрел и прочел, что это оказалось очень полезно

Осталось собрать все в железе и повесить на стенку.
Re: avr-gcc ds18b20 не находит
Добавлено: Чт фев 23, 2012 11:28:29
3DRaven
Собрал. Работает.
Исходный проект:
http://radiokot.ru/lab/controller/18/
Многое переделал. Моя схема проще в десять раз.
Программа то же...правда показывает только целые градусы...мне больше не надо.