Amstron писал(а):У меня проблема с измерением температуры DS18b20.
Как Вы объясните, что это не глюк компилятора?
Если вы не видите ошибки у себя, это ещё не означает, что её нет.
Какой компилятор-то был до 4й студии? Какой в 4й студии используете? Какая библиотека для DS18b20?
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Зачем он (этот код) тогда вообще нужен, если программа туда не заходит ?
Что не понятного то? Я специально решил Вам показать что глюк действительно в компиляторе и сообщаю о том, что компиль глючит не смотря на то что код стоит в том месте где программа туда даже не заходит...
Amstron писал(а):Что не понятного то? Я специально решил Вам показать что глюк действительно в компиляторе и сообщаю о том, что компиль глючит не смотря на то что код стоит в том месте где программа туда даже не заходит...
Говорить пока не о чем! Полная картина не ясна! Повторюсь. Вы не сказали какой у вас компилятор (тип, версия), под какой МК, какой библиотекой пользуетесь, какие опции компиляции и т.д. Если хотите объективного ответа, то покажите полные исходники вашего проекта, тогда можно посмотреть, что у вас не так. Иначе разговор не имеет смысла.
Если ещё не читали, то будет полезно: http://bugtraq.ru/forum/faq/general/sma ... tions.html
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
компиль глючит не смотря на то что код стоит в том месте где программа туда даже не заходит...
Это ещё не означает, что глючит компиль. Я вообще поражаюсь на тех, кто накопипастит всякого говнокода в кучу, которую хрен разгребёшь, и начинают бить себя в грудь, на весь форум крича, что глючит компиль, считая себя умнее разрабов компиляторов.
Нельзя начинать свой пост со слов "Глючит компиль", тем более просить Вам это доказать. Докажите Вы, что он глючит, разложите всё по полочкам, приведите неоспоримые факты, тогда и будем обсуждать глюк компиля, а не брызги эмоций, возникших от первой программы.
Третий день мучаюсь с "простым" термометром на ds18b20 - не могу нормально его инициализировать. attiny2313, частота 8 МГц, трехпроводная схема включения датчика. Датчик пробовал заменять - разницы никакой. При попытке инициализации датчик не отвечает. Вот код инициализации:
PORTD = 0;
...
DDRD |= _BV(PD6); // устанавливаем низкий уровень
...
DDRD &= ~_BV(PD6); // отпускаем линию на внешнюю подтяжку
Благодарю, стало адекватно реагировать на наличие/отсутствие датчика. Но всплыла другая проблема.
После получения двух байт с температурой я отсылаю их по ЮАРТу. В терминале же почему-то вместо двух байт приходят пять-шесть Значения чаще всего 0xF8 или 0x78. Чую я, что с задержками у меня что-то не так.
Частота контроллера 8 Мгц с делителем CKDIV8=0. Если поставить делитель, то данные в ЮАРТ будут отсылаться два раза в секунду, несмотря на _delay_ms(1000) между замерами температуры. Сам ЮАРТ настроен на работу на 8 Мгц. F_CPU задефайнил на 8000000.
Спойлер
x8973 писал(а): В терминале же почему-то вместо двух байт приходят пять-шесть Значения чаще всего 0xF8 или 0x78.
Такое может быть, если UART на передающем и приемном конце линии настроены на разные скорости. Нужно безотносительно датчика погонять по тракту тестовые посылки известного содержания и посмотреть что получится.
сначала сто раз "1000 0000", потом сто раз "1000 1000", потом сто раз "1010 1010"... нутыпонел. частота следования единичек (или ноликов, без разницы) - которую для наглядности можно осциллографом, и совсем не обязательно для этого иметь его азиатский модный.
B4 ? После одной из команд search ROM, Match ROM, Skip ROM итп. Но эта команда только скажет, как по мнению датчика он запитан. А для паразитного питания, просто после команды "convert T" надо на шину выдать питание в течении 10 мкс после поступления этой же команды (правда так никто мне и не пояснил, когда этот момент наступает, поэтому, можно его давать сразу же после окончания удерживания лог.0 в последнем тайм-слоте) и держать не менее указанного времени для выбранного датчика и разрешения. Одной секунды хватает для всех случаев.После чего напряжение снимаем (подтяжку оставляем) и выполняем сброс, выбор, чтение скратчпада.
Я понимаю, что трудно найти справочную информацию на изделия отечественного радиопрома, но на далласовскую (максимовскую) продукцию найти, как правило, проблем не составляет. http://www.maximintegrated.com/datashee ... vp/id/2815 <-- там справа, есть ссылка "download" с иконкой pdf-документа, так вот там скачивается даташит, содержащий всю необходимую информацию. Но если, еще что-то не ясно, то можно посмотреть раздел application notes, с поясняющими некоторые моменты статьями.
Конкретно подача паразитного питания приведена на рис.4 "Figure 4. Supplying the Parasite-Powered DS18S20 During Temperature Conversions"
Паразитное питание надо включать только на время преобразования! Во время выполнения сбросов и чтения-записи, должна быть только подтяжка.
т.е. делаем сброс, шлём (для примера) SkipROM, Convert, включаем Сильное питание на шину и держим секунду. Затем выключаем этот Strong PullUp, делаем сброс, SkipROM, Read Scratchpad и... вот оно.