реклама на сайте
подробности

 
 
> 1-wire Интерфейс, Assembler'ные подпрограмы для начинаюших
3state-systems
сообщение Apr 11 2007, 19:48
Сообщение #1


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 11-04-07
Из: Россия, Бурятия, Улан-Удэ
Пользователь №: 26 954



Здравствуйте,
Изучаю микроконтроллеры для себя, решил изучить интерфейс 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
3state-systems
сообщение Apr 13 2007, 17:18
Сообщение #2


Участник
*

Группа: Новичок
Сообщений: 18
Регистрация: 11-04-07
Из: Россия, Бурятия, Улан-Удэ
Пользователь №: 26 954



Часа два разбирался с вашей универсальной подпрограммой обмена битами, вроде разобрался но для новичка конечно это жесть smile.gif
Так значит имеем 100пудовые подпрограммы для первого уровня

Код
.equ DataPort =PIND;Порту к которому подключена шина
.equ DataPin  =5      ;Пин к которому подключена шина 1-wire bus
;DataPort=PIN(x);
;DataPort+1=DDR(x)
;DataPort+2=PORT(x)



    Restart:                       ;Сброс всех устройств
     cbi DataPort+2,DataPin;PORTx = 0, подготовить к работе
     sbi DataPort+1,DataPin;DDRx = 1, Настроить линию на выход - посадить линию в 0
     rcall delay480              ;задержка в 480мкс
     cbi DataPort+1,DataPin;Настроить линию на вход = отпустить линию
     rcall delay70                ;задержка в 70мкс
     clt                               ;Очистить флаг Т регистра Sreg 0 = Все нормально
     sbic DataPort, DataPin      ;Пропустить следущию команду если бит равен "0"
     set                                  ;Записать "1" в регитр Sreg флаг Т=1 - нет устройств на шине
     rcall delay410                  ;задержка в 410мкс
    ret                                   ;[хотя RCALL и следом за ним RET можно заменить на один RJMP delay410]

    WriteBit0:                           ;Запись Бита "0"
     clt
     rjmp ExchangeBit
    WriteBit1:                           ;Запись Бита "1"
    ReadBit:                     ;Чтение Бита
     set
         ExchangeBit:                 ;Передаваемый бит в T
          sbi DataPort+1,DataPin  ;DDRx = 1, Настроить линию на выход - посадить линию в 0
         rcall delay6                   ;задержка в 6мкс
         BRTC    Write_0            ;Если передается ноль - оставить ногу посаженной в 0
         cbi DataPort + 1, DataPin;Настроить линию на вход = отпустить линию
         Write_0:
          rcall delay9                   ;задержка до точки чтения
          clt                                ;Очистить флаг Т
          sbic DataPort,DataPin    ;Пропустить следущию команду если линия притянута к 0
          set
          rcall delay45                  ;задержка в 45мкс
          cbi DataPort+1,DataPin ;Настроить линию на вход = отпустить линию
          rcall delay10                 ;задержка 10мкс - пауза между битами и возвратиз подпрограммы. В флаге T - считанный бит
    ret


Restart -Сброс всех устройств
WriteBit0 - Запись Бита "0"
WriteBit1 - Запись Бита "1"
ReadBit - Чтение Бита


Сообщение отредактировал 3state-systems - Apr 13 2007, 17:20
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 3state-systems   1-wire Интерфейс   Apr 11 2007, 19:48
- - Kuzmi4   2 3state-systems - с 1-Wire интерфейсом не сталкив...   Apr 12 2007, 10:24
- - Сергей Борщ   Цитата(3state-systems @ Apr 11 2007, 18...   Apr 12 2007, 12:46
- - 3state-systems   Так сейчас закодил первый уровень вот что получил...   Apr 12 2007, 20:57
|- - Сергей Борщ   Цитата(3state-systems @ Apr 12 2007, 19...   Apr 12 2007, 22:45
- - 3state-systems   ЦитатаКстати, я ориентируюсь на ассемблер IAR, а в...   Apr 13 2007, 09:47
|- - Сергей Борщ   Цитата(3state-systems @ Apr 13 2007, 08...   Apr 13 2007, 12:36
- - 3state-systems   Цитата(3state-systems @ Apr 13 2007, 08:47) * Да к...   Apr 13 2007, 15:26
|- - Сергей Борщ   Цитата(3state-systems @ Apr 13 2007, 14...   Apr 13 2007, 16:50
- - 3state-systems   Так добрались до байт черновой вариант такой .def ...   Apr 13 2007, 20:35
|- - Сергей Борщ   Для начала отступление: я вас обманул. Вот тут:Цит...   Apr 14 2007, 10:37
- - 3state-systems   а где сдесь модераторы?, можно эту тему перенести ...   Apr 13 2007, 22:19
|- - zltigo   Цитата(3state-systems @ Apr 13 2007, 21...   Apr 14 2007, 11:11
- - 3state-systems   Цитатано обратите внимание, что по brcs Writebit1 ...   Apr 14 2007, 11:29
- - 3state-systems   Так вот вторая версия ОБМЕН БАЙТОМ КодReadByte...   Apr 15 2007, 11:09
|- - Сергей Борщ   Цитата(3state-systems @ Apr 15 2007, 10...   Apr 15 2007, 11:15
|- - 3state-systems   Цитата(Сергей Борщ @ Apr 15 2007, 11:45) ...   Apr 15 2007, 11:18
|- - Сергей Борщ   Цитата(3state-systems @ Apr 15 2007, 10...   Apr 15 2007, 15:25
|- - 3state-systems   Цитата(Сергей Борщ @ Apr 15 2007, 15:55) ...   Apr 15 2007, 19:01
- - 3state-systems   КодExchangeBit: ;Обмен битом передавае...   Apr 15 2007, 15:25
- - 3state-systems   Так вот что получилось Сетевой уровень бета подпро...   Apr 17 2007, 17:54
|- - Сергей Борщ   Цитата(3state-systems @ Apr 17 2007, 16...   Apr 17 2007, 19:14
|- - 3state-systems   Цитата(Сергей Борщ @ Apr 17 2007, 19:44) ...   Apr 18 2007, 10:40
|- - Сергей Борщ   Цитата(3state-systems @ Apr 18 2007, 09...   Apr 18 2007, 18:12
|- - 3state-systems   Цитата(Сергей Борщ @ Apr 18 2007, 18:42) ...   Apr 19 2007, 09:02
- - xemul   По окончании ResetPulse мастер по-любому не должен...   Apr 19 2007, 10:21
|- - 3state-systems   Цитата(xemul @ Apr 19 2007, 10:51) По око...   Apr 19 2007, 16:18
|- - xemul   Цитата(3state-systems @ Apr 19 2007, 16...   Apr 19 2007, 17:15
|- - 3state-systems   Цитата(xemul @ Apr 19 2007, 17:45) ЗЗЫЖ ч...   Apr 19 2007, 17:40
|- - xemul   Цитата(3state-systems @ Apr 19 2007, 17...   Apr 19 2007, 18:18
- - 3state-systems   Так вот что у нас получилось Половина пути уже про...   Apr 24 2007, 21:01
- - Svin62   Граждане! А кто-нить пробовал, вместо таблетки...   Dec 14 2008, 20:27


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 03:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01544 секунд с 7
ELECTRONIX ©2004-2016