to Дмитрий Оленников: прога на сайте, на который ссылку дали. а поскоку я с 1 Wire тоже никогда не работал - буду объяснять с даташита. смотрим даташит аттини - встренного контроллера 1 wire нет, значит придется писать самим этот протокол:
1. 1-Wire это Master/Slave bus, мк есть мастер, датчик - слэйв. Это означает, что мк должен посылать команды и датчик будет на них реагировать. по идее, должен быть механизм адресации слэйвов, чтобы мастер мог выборочно отсылать команды конкретным слэйвам.
2. при включении датчик находится в режиме низкого потребления. Чтобы пробудить его, мк должен отослать команду пробуждения 44h.
3. По получении этой команды датчик просыпается, конвертирует температуру и сохраняет ее в 2-х байтовом регистре. Пока происходит преобразование, датчик отвечает "0", когда преобразование закончено - "1".
Дальше всякая интересная фигня, но она нам вряд ли нужна, запомним тока что конвертнутая температура - это 0 и 1 байты памяти, потом регистр сигнализации, потом пара регистров для чтения температуры и код для проверки. Также смотрим схему подключения датчика, в схеме подключения для теоретического мк использованы 2 выхода Rx и Tx - радуемся, т.к. скорее всего можно будет пользовать обычный USART.
поскоку 1 wire мы не знаем, топаем в раздел описания шины.
Самая важная часть любого "сложного" девайса - это инициализация. Если чип правильно проинициализирован - мы избежим более 50% геммора при отладке. Поэтому внимательно читаем:
мк должен сделать ресет импульс на шину, ему ответят импульсом присутствия, тайминги для импульсов потом будут. Запоминаем.
дальше идут команды для чтения памяти датчика. радуемся, что у нас тока 1 1-Wire девайс, т.к. похоже это упрощает дело. Нам потребуется знать адрес чипа - при одном датчике для этого можно напрямую использовать команду READ_ROM, ее код 33h. Запоминаем.
Также есть соманда Match ROM - пока непонятно потребуется ли нам она, но вроде как именно она нам позволит обратиться к датчику. Запоминаем на всякий случай.
Дальше идут команды функционирования.
44h мы уже знаем.
дальше нам потребуется Read Scratch (BEh) команда для чтения температуры, остальные комнды из этой секции нам похоже нафик не сдались.
дальше тайминги.
смотрим на время инициализирующей последовательности.
дальше тайминги для записи и для чтения.
поскоку проводок у нас один - слоты для записи 0 и 1 различаются.
каждый слот должен длиться минимум 60 мкс. паузы между слотами минимум 1 мкс.
чтобы записать 1, мк должен опустить шину в 0, потом отсоединиться от нее втечение 15 мкс.
чтобы записать 0, мк опускает шину в 0 и удерживает ее в этом состоянии в течение времени всего слота (минимум 60 мкс).
проанализровав это, понимаем, что стандартный USART попользовать не придется
смотрим тайминги для чтения.
там попроще. каждый слот также по 60 мкс, с паузами по 1 мкс. каждый слот инициируется мк, опусканием шины в 0. после 1 мкс, от шины отсоединяемся. если датчик хочет передать 0, шина так в 0 и останется (втечение 15 мкс), если 1 - то датчик от нее отсоединен.
вот и все. дальше даны примеры.
теперь писать это все нада. проанализировав эту шину, имхо, стоит написать 4 функции - драйвер шины (ресет на шине, получение подтверждения на ресет, отсылка байта, получение байта). Вобщем, управление физикой шины. а потом логический уровень (последовательности команд) написать.
to Krazy_killer: по мне так все равно какой.
если у тебя в мк есть контроллер I2C, то бери DS16 - не надо будет драйвер шины писать.
Я просто верю в то, что рушить догмы - лучший способ не стареть.