Страница 1 из 1

Делимся советами, кто собирал Slave 1-Wire

Добавлено: Пн фев 02, 2009 20:22:03
Slawo
Банальная ситуация. На Котике уже не одна ГОТОВАЯ схемка с реализованым Slave 1-Wire (эмуляторы DS1990). Хочу тоже собрать для изучения 1-wire ведомых устройств подобный эмулятор.

Поделитесь советами, как нужно обрабтывать пришедшие перывания от мастера и в каких случаях держать ножки нашего МК входом и выходом и с какими уровнями (0 или 1).

Я использую ножку с прерыванием INT0. Держу ее входом с подтяжкой. Когда приходит импульс Reset от мастера, жду в обработчике прерывания (по счетчику у нас переменная imp = 0, значит это пришел первый импульс) 480+60мкс, настраиваю порт на выход, записываю в него 0 и жду 240 мкс, имитируя Presence. Затем опять настраиваю пин на вход с подтяжкой. Затем пропускаю 8 прерываний (приходит команда чтения ключа) и затем на каждое прерывание если в наших данных нужно передать 0, после 5 мкс после возникновения прерывания, настраиваю пин на выход и держу его в нуле 60 мкс, а если нужно передать 1 то ничего не делаю с пином, просто сдвигаю свои данные на один вправо, чтобы при следующем перывании знать что передавать.

Вот че-то не выходит ничего, в среду в город приеду, найду там еще LPT порт (на ноуте нету такового) и попробую анализатором посмотреть что там на линии происходит.

Может вы сразу что найдете, что за косячек. Или кто как делал?

Добавлено: Пн фев 02, 2009 20:39:22
mackerel
Ну, косячок не косячок, но одна нехорошесть таки есть. С какой стати Вы переключаетесь туда-сюда вход-выход??? Используйте соответствующий бит DDR порта. Пусть у Вас используется порт B разряд 0, например. Тогда установив PORTB.0 = 0, DDRB.0 = 0 имеем на выходе лог.1 от внешней подтяжки (она есть, надеюсь? Обязательно должна быть, причём около 4.7K, насколько я помню!). Теперь устанавливаем DDRB.0 = 1. Что имеем на выходе? Правильно, лог.0! Т.е. значение на выводе инверсно значению DDR.
Так, кстати, и I2C программно эмулируют.

Добавлено: Пн фев 02, 2009 20:44:09
Slawo
Так, пасибки, первая здравая мысль =)
Был не прав, исправлю, я даже домофон с двери оторвал для испытаний, тока его сначала нужно отремонтировать =)

Добавлено: Пн фев 02, 2009 20:54:26
Slawo
Такс.... Так все таки, лучше порт iWire сканировать на на личие изменения состояния с единицы в ноль при передаче мастером данных, или использовать внешнее прерывание INT? В схемке еще динамическая индикация для выбора номера ключа используется.

Добавлено: Пн фев 02, 2009 21:02:18
mackerel
Ну, я бы по прерыванию работал. Да там и делов-то в прерывании, господи... А динамическая индикация сама по себе, по таймерному прерыванию. Конечно, если есть опасение, что "динамическое" прерывание очень длиное - а скорее всего так и есть - при входе в него просто разрешите прерывание от 1-Wire.
Ну, и времена посчитать неплохо бы...

Добавлено: Ср фев 04, 2009 14:20:14
Slawo
О, кстати, крута, лучше разрешать прерывание INT в прерывании от таймера, чем запрещать прерывание от таймера на момент работы 1-Wire. Пасиба, вроде ведь все просто на поверхности, но моск мой атрофировался за каникулы )))

Добавлено: Ср фев 04, 2009 15:45:53
nictrace
о, у меня была где-то прога под windows, читающая таблетку, приложенную к lpt-порту :))

А про эмуль могу сказать - подтяжка осуществляется на стороне замка. А чип хорошо б запитать от самой линии, для этого нужны кондер 4.7 мкф и диод.