Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: DS18B20 and ATTiny2313
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Интерфейсы
Arlleex
Цитата
// sensor_write_1_0 - функция записи 1/0
// bit - 0/1 => запись 0/1
void sensor_write_1_0(uint8_t bit)
{
if (bit==0)
{
DDRB=DDRB | (1<<DQ); // запись 0
_delay_us(100); // задержка 100мкс
DDRB=DDRB & 0xFE; // запись 1
}
else if (bit==1)
{
DDRB=DDRB | (1<<DQ); // запись 0
DDRB=DDRB & 0xFE; // запись 1
_delay_us(100); // задержка 100мкс
}
}
// sensor_read_1_0 - функция чтения 1/0
uint8_t sensor_read_1_0(void)
{
// объявление переменных
uint8_t bit; // данные DQ
DDRB=DDRB | (1<<DQ); // запись 0
DDRB=DDRB & 0xFE; // запись 1
bit=PINB & 0x1; // чтение состояния линии DQ
_delay_us(100); // задержка 100мкс
if (bit==0x1)
{
return 1; // возвращение 1
}
else if (bit==0x0)
{
return 0; // возвращение 0
}
}

Сопрягаю микроконтроллер ATTiny2313 с датчиком температуры DS18b20.
Сам процесс записи и чтения бита - вверху.
Но собственно вопрос - при отладке обнаружил, что не работают данные функции. Возможно не совпадают временные интервалы протокола 1-WIRE.
Для удобства приведу временные диаграммы:
kovigor
Цитата(Arlleex @ Jan 29 2012, 01:24) *
Для удобства приведу временные диаграммы:


Причин может быть миллион. Не хочется вникать в чужой проект. Скачайте CodeVision, с ним поставляется рабочая библиотека для этого датчика ...
haker_fox
QUOTE (Arlleex @ Jan 29 2012, 05:24) *
Для удобства приведу временные диаграммы:

Протокол 1-wire достаточно прост, если работать с одним устройством. Попробуйте разобраться самостоятельно, либо найдите в инете примеры, их очень много. У меня датчик опрашивается даже под операционной системой...
Удачи!
Arlleex
Цитата(haker_fox @ Jan 29 2012, 13:10) *
Протокол 1-wire достаточно прост, если работать с одним устройством. Попробуйте разобраться самостоятельно, либо найдите в инете примеры, их очень много. У меня датчик опрашивается даже под операционной системой...
Удачи!

Да вот и пытаюсь разобраться самостоятельно. Все делаю как в протоколе (учитывал время выполнения операций, для "опускания" некоторых временных интервалов).
Но ничего толкового не получается.
Ладно, буду дальше разбираться, перекапывать весь код, спасибо sm.gif
kovigor
Цитата(Arlleex @ Jan 29 2012, 15:09) *
Да вот и пытаюсь разобраться самостоятельно. Все делаю как в протоколе (учитывал время выполнения операций, для "опускания" некоторых временных интервалов).
Но ничего толкового не получается.
Ладно, буду дальше разбираться, перекапывать весь код, спасибо sm.gif


Банальный и простой, как песня, совет. Возьмите осциллограф и детально изучите временные диаграммы, формируемые вашим кодом. Хотя бы уже потому, что даже при логической правильности оного оптимизатор способен изменить диаграммы на шине до неузнаваемости ...
_Pasha
Если в таком стиле писАть, Вы сами себя запутаете, вернее уже.
А кто будет при передаче, когда начальный импульс подаёте, задержку на время >1мкс вставлять? Пушкин?
Arlleex
Цитата(_Pasha @ Jan 29 2012, 16:03) *
Если в таком стиле писАть, Вы сами себя запутаете, вернее уже.
А кто будет при передаче, когда начальный импульс подаёте, задержку на время >1мкс вставлять? Пушкин?

Там строчка одна следующей команды выполняется более чем за 1мкс (у меня частота МК 1МГц). Поэтому там она не нужна.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.