Здравствуйте,
Изучаю микроконтроллеры для себя, решил изучить интерфейс 1-wire
наткнулся на странную ситуацию: вроде и все давно ясно и куча библиотек готовых есть под разные микроконтроллеры на С разных мастей и под Assembler.
И в форумах не одна тема создана, а полной картины по 1-wire[AVR Assembler] как небыло так и нет.
Предлагаю поделится опытом, советом, готовым примером, покритиковать, поддержать и просто высказать свое мнение
Цель: Создание простых, универсальных и ясных подпрограмм для работы с 1-wire
Резюмируя эту тему можна создать неплохую статью для начинающих в рамках проекта AVR для начинающих Electronix.ru
А еще, чтобы не писать лишнего и не терять суть, предполагаю что вся необходимая документация касаемого стандарта интерфейса всем известна, а обсуждать только конкретные решения проблем.
Ну так начнем!
Возьмем в качестве отправной точки (Я начинающий!)
Код
AVR318: Ведущий однопроводной интерфейс 1-Wire компании Dallas (21 страница, пересмотр А, обновление от 09/04)
В рекомендациях показывается, как реализовать 1-проводной ведущий интерфейс с помощью микроконтроллера AVR. Рассмотрено два подхода: полностью программный и с помощью встроенного модуля У(С)АПП
Нас интересует только полностью программный подход
Из него следует:
Что для программной реализации протокола удобно разделить все команды на четыре уровня
УРОВНИ (и команды)
1)Передача и прием отдельных битов
a)Сброс всех устройств на шине [Restart]
B)Запись бита "1" в устройство [WriteBit1]
с)Запись бита "0" в устройство [WriteBit0]
d)Чтение бита из устройства [ReadBit]
2)Передача и прием отдельных байтов
a)Послать байт в устройство [SentByte]
B)Принять байт из устройства [ReseiveByte]
3)Сетевой уровень
a)Чтение ПЗУ [ReadROM]
B)Совпадение ПЗУ [MatchROM]
c)Пропуск ПЗУ [SkipROM]
d)Поиск ПЗУ [SearchRom]
4)Команды для работы с конкретными устройствами например датчик температуры ds1820 series
м некоторые прикладные подпрограммки
a)Вычисление CRC8 (табличная реализация и прямое вычисление)
B)Диагностика ошибок
с)Чтение режима питания микросхем паразитное или отдельное
Так как стандарт основывается на точном соблюдении всех задержек, всего 2 группы
6-64мкс и 470-1000мкс.
Вопрос как универсально сформировать задержки для различных частот задающих кварцов?
Так по теме словесное описанное описание команд первого уровня
Код
Restart:
;Сброс всех устройств
;Подсаживаем линию, задержка на 700мкс
;Задержка в 65мкс, проверка сигнала
;ок =уровень сигнала равен 0 передача управления дальше на3
;error уровень Равен 1 =обрыв линии
;3 формируем задержку в 500мкс проверяем уровень сигнала
;ок =уровень сигнала равен 1
;error уровень равен 0 =линия закорочена
;в переменную помешаем код ошибки и выходи 0=ок
reti
Readbit:
;Чтение чтение одного бита из устройства
;Формируем синхроимпульс, подсаживаем линию =задержка 1мкс отпускаем линию снова задержка 13мкс
;считываем уровень сигнала помешаем кудато
;заполняем слот задержкой в 60-120мкс (60мкс)
reti
writebit0:
;Запись в слот нулевого значения
;подсадить линию
;задержка в 80мкс
;отпустиь линию
;
reti
writebit1:
;Запись в слот единичного значения
;подсадить линию
;задержка в 4,5мкс
;отпустиь линию
;задержка в 75мкс
reti
Сообщение отредактировал 3state-systems - Apr 11 2007, 19:48