Предлагаю свой вариант реализации опроса DS18s20 с помощью Atmega8.
Сделано на ассемблере в AVR Studio. Кварц 14.745 . Для синхронизации
1-Wire использую Timer2, если использовать другой кварц используемые
значения надо пересчитывать. задействованы две ножки PIND,3 (кнопка)
и PINC,4(шина 1-Wire). PINC,4 подтянута к питанию резистором 5к1 и
подключена к DS18s20. Если PIND,3 занулить и подать питание на схему,
то в EEPROM начиная с адрес 0x0000 можно увидеть адрес DS18s20
(7 байтов) плюс байт CRC. Записав эти 8 байтов в адрес 0x0010,
подав логическую 1 на PIND,3, после в EEPROM начиная с адреса
0x0070 можно увидеть содержимое Scratchpad-а (8 байтов+1 байт CRC
и ASCII десятки и единицы температуры)
Есть некоторая диагностика: в ячейке памяти ONE_WIRE_STAT
код завершения операции на шине 1Wire успешно 0xf0
0xe1 - превышено время ожидания импульса присутствия
0xe2 - импульс присутствия пришел слишком рано
0xe3 - импульс присутствия длиннее требуемого
0xe4 - импульс присутствия короче требуемого
0xe5 - при чтении нуля слишком долго удерживалась в нуле шина
0xe6 - не совпала CRC
На столе работают 4 датчика их адреса в EEPROM
0x0010, 0x0020, 0x0030, 0x0040 ,буду измерять температуру в 4
точках помещения. Знак температуры не анализирую. Есть косяк,
при включении выдается 85, так как у меня такого быть не может,
то значение 85(десятичное) игнорируется.
Нажмите для просмотра прикрепленного файла