Цитата
// 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.
Для удобства приведу временные диаграммы:
Эскизы прикрепленных изображений