avr-gcc ds18b20 не находит
Re: avr-gcc ds18b20 не находит
Резистор на 4.7кОм. Но питание не паразитное. Подключено на макетке к линии питания просто и ясно все. 4.7 кОм в таком случае по инструкции.
- Реклама
Re: avr-gcc ds18b20 не находит
Я наверное в бронепоезде, не то, что в танке. Но подрубить этот долбанный датчик так и не смог. Даже несколько купил, на всякий случай. Вот код сброса:
Вопрос. Ранее я часто видел
_delay_ms(480) и подобные конструкции. Датчик с такими задержками определялся раз в тысячу лет...то есть вообще ниогда, остальное наводки судя по всему. Недавно на немецких сайтах (я уже и на китайских попасся, задрало уже, скоро выкину эту дрянь и заменю на термопару!) нашел такое _delay_ms(0.480) или даже delay_us(480) делают сами функции, так как там задержки не в миллисекундах (ms), а микросекундах (us).
Где правда? В русских доках и кодах везде миллисекунды (ms) и вообще ничерта у меня не работает, никак, никогда, ни при каких вариантах примерах либах и положении луны! В немецких и некоторых других кодах микросекунды и работает отлично...определяется датчик, но температуру я считать так и не смог...сил уже нет возится.
Разъясните. И еще...я очень устал искать по настоящему работающий прямо сейчас на железе и простой (что бы видно было как команды на порты подавать) код, не зависящий ни от каких сторонних либ (у меня avr-gcc и там нету ds1820.h OneWire.h и прочих готовостей). Киньте в приложении к посту, правда больше сил нет искать, помогите.
Заранее спасибо.
Код: Выделить всё
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 и прочих готовостей). Киньте в приложении к посту, правда больше сил нет искать, помогите.
Заранее спасибо.
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: avr-gcc ds18b20 не находит
Вот код, где-то содрал (спасибо автору), переношу из проекта в проект - все работает. Для ИАР, но там легко названия портов изменить.
Re: avr-gcc ds18b20 не находит
Там то же везде delay_us!!! Мать перемать, дрова в смятку! Там микросекунды на обмен!!!!!!!
Вот почему во всем коде, что я видел везде так все через жопу работает и куча вопросов "у меня не пашет" и тем куча, а код что пашет сделан итерациями!!!! Я три недели трахал свой мозг через угол. Неужели в документации!!! Ошибки, или может быть просто устарели данные и датчики теперь в микросекундах работают? Не понимаю.
Но микросекунда гараздо логичнее...один сеанс связи по 1вире, длинной в секунду, для восмимегагерцового МК это дикость.
Большое спасибо, буду проверять.
Для конвертации iar2gcc есть заголовок. В приложении к посту.
Вот почему во всем коде, что я видел везде так все через жопу работает и куча вопросов "у меня не пашет" и тем куча, а код что пашет сделан итерациями!!!! Я три недели трахал свой мозг через угол. Неужели в документации!!! Ошибки, или может быть просто устарели данные и датчики теперь в микросекундах работают? Не понимаю.
Но микросекунда гараздо логичнее...один сеанс связи по 1вире, длинной в секунду, для восмимегагерцового МК это дикость.
Большое спасибо, буду проверять.
Для конвертации iar2gcc есть заголовок. В приложении к посту.
- Вложения
-
- iar2gcc.h
- (6.98 КБ) 315 скачиваний
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: avr-gcc ds18b20 не находит
Насколько помню, по документации, время преобразования датчика составляет 750ms. В вышеприведенном коде посылается команда SKIP_ROM, затем команда CONVERT_TEMP, затем ждем 1 секунду - данные точно готовы - можно считывать. Когда-то давно для PIC микроконтроллеров писал сам по документации и примерам (там вроде было для 51 микроконтроллеров) тоже все прекрасно работало.
Могут быть проблемы если в микроконтроллере используются прерывания (например для динамической индикации) - программные задержки не выдерживаются. В таком случае работу с датчиком надо производить между прерываниями или запрещать прерывания, что может сказаться но работе индикатора. Еще недавно использовал этот код в Кодевижене - так он так все заоптимизировал, что датчик не работал. Пришлось поставить перед куском кода #pragma optsize- и в конце #pragma optsize+, только тогда все нормально заработало.
Могут быть проблемы если в микроконтроллере используются прерывания (например для динамической индикации) - программные задержки не выдерживаются. В таком случае работу с датчиком надо производить между прерываниями или запрещать прерывания, что может сказаться но работе индикатора. Еще недавно использовал этот код в Кодевижене - так он так все заоптимизировал, что датчик не работал. Пришлось поставить перед куском кода #pragma optsize- и в конце #pragma optsize+, только тогда все нормально заработало.
- Реклама
Re: avr-gcc ds18b20 не находит
Вожусь. Я нашел еще кучу кода и везде используется _delay_us
Само преобразование длится 750 ms но вот тайминги в таймслотах это именно us, а
в тех либах, что я мучил...и они не работали было и тут ms.
Вот в чем была причина судя по всему. Еще проверить надо.
Вот монументальный труд на тему:
http://www.siwawi.arubi.uni-kl.de/avr_p ... index.html
Судя по всему причину я нашел. Вот, например код сброса правильный:
А вот так будет неправильно и как обычно (в куче мест именно так!) делают, более того, если в даташит глянуть, там тайминги то же в ms.
Наконец то свет в конце колодца.
Само преобразование длится 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);
Код: Выделить всё
OW_OUT_LOW();
OW_DIR_OUT(); // pull OW-Pin low for 480us
_delay_ms(480);Re: avr-gcc ds18b20 не находит
Так я еще и не знал устройства свой макетной платы! Это моя первая схема 
Оказывается линии питания у нее разделены на две части. То есть две длинные полосы порезанные на пополам.
Часть контактов я повесил на одно "питание", где питания не было, а часть на другое.
Все это работало только за счет того, что ток с портов МК тек на "второе питание"...я их все по умолчанию в 1
выставил. В общем все это вообще работать не должно было
Но теперь надо будет проверить как оно будет в нормальном виде пахать...или не пахать.
Нашел я это, разобрав макетную плату...никакой инструкции с ней не было.
Собрал и теперь снова схему соберу и проверю.
Оказывается линии питания у нее разделены на две части. То есть две длинные полосы порезанные на пополам.
Часть контактов я повесил на одно "питание", где питания не было, а часть на другое.
Все это работало только за счет того, что ток с портов МК тек на "второе питание"...я их все по умолчанию в 1
выставил. В общем все это вообще работать не должно было
Но теперь надо будет проверить как оно будет в нормальном виде пахать...или не пахать.
Нашел я это, разобрав макетную плату...никакой инструкции с ней не было.
Собрал и теперь снова схему соберу и проверю.
Re: avr-gcc ds18b20 не находит
Проверил. Все работает. Все дело было в макетной плате, устройство которой я не знал.
Там было на коробке нарисовано, две линии питания, а на самом деле их там четыре
Градусы показывает и с нужной точностью, все адекватно и правильно.
Пока разбирался, я столько всего просмотрел и прочел, что это оказалось очень полезно
Осталось собрать все в железе и повесить на стенку.
Там было на коробке нарисовано, две линии питания, а на самом деле их там четыре
Градусы показывает и с нужной точностью, все адекватно и правильно.
Пока разбирался, я столько всего просмотрел и прочел, что это оказалось очень полезно
Осталось собрать все в железе и повесить на стенку.
Re: avr-gcc ds18b20 не находит
Собрал. Работает.
Исходный проект: http://radiokot.ru/lab/controller/18/
Многое переделал. Моя схема проще в десять раз.
Программа то же...правда показывает только целые градусы...мне больше не надо.
Исходный проект: http://radiokot.ru/lab/controller/18/
Многое переделал. Моя схема проще в десять раз.
Программа то же...правда показывает только целые градусы...мне больше не надо.
- Вложения
-
- termoind-x.pdf
- Это разводка.
- (13.25 КБ) 220 скачиваний
-
- main.c
- Это код программы.
- (7.45 КБ) 352 скачивания
-
- termoind.ps
- Это принципиальная схема. Примерно так все.
- (128.17 КБ) 334 скачивания


