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

 
 
> 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 17 2007, 17:54
Сообщение #2


Участник
*

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



Так вот что получилось
Сетевой уровень бета подпрограмки
Еще надо реализовать проверку флага Т после сброса на наличие ошибки в линии
Код
SkipROM:               [color=#FF0000];Пропуск ПЗУ[/color]
rcall Restart        ;Сброс всех устройств на шине
ldi ByteBus,0xCC  ;Загрузка кода команды
rcall WriteByte;Запись команды на шину
ret
        
ReadROM:                  [color=#FF0000];Чтение ПЗУ [/color]
rcall Restart            ;Сброс всех устройст на шине
ldi ByteBus,0x33    ;Загрузка кода команды
rcall WriteByte      ;Запись команды на шину
LDI R30,low(idROM)  ;Младший байт - В регистровую пару грузим адрес первой ячейки куда            
LDI R31,high(idROM) ;Старший байт
LDI Counter,8         ;Организуем цикл на принятие 64бит Id кода
ReadLoop:          ;Цикл
  rcall ReadByte     ;Читаем один байт
  st Z+,Bytebus             ;Сохраняем в Памяти, указатель увеличиваем на 1
  dec Counter         ;Уменьшаем счетчик цикла
Brne ReadLoop    ;Цикл пока счетчик не стал равен 0
ret
    
MatchROM:                  [color=#CC0000];Совпадение ПЗУ[/color]
rcall Restart          ;Сброс всех устройст на шине
ldi ByteBus,0x55;Загрузка кода команды
rcall WriteByte     ;Запись команды на шину
LDI R30, low(idROM);Младший байт - В регистровую пару грузим адрес первой ячейки
LDI R31, high(idROM);Старший байт
LDI Counter,8        ;Организуем цикл на запись 64бит Id кода в шину
ReadLoop:         ;Цикл
  ld Z+,Bytebus        ;Загружаем в ригистр из Памяти, указатель увеличиваем на 1
  rcall WriteByte     ;Пишем один байт
  dec Counter             ;Уменьшаем счетчик цикла
Brne ReadLoop    ;Цикл пока счетчик не стал равен 0
ret


Ну и осталась самая мудренная из всех команд
SEARCH ROM (ПОИСК ПЗУ) F0H Получение идентификационных данных о всех стройствах на шине
есть пошаговая инструкция на русском и блок схема работы этой команды
очень сложная команда и не понятно где хранить id микросхем неужели в EEPROM?
от этой реализации команды изменится и алгоритм работы MatchROM

Сергей Борщ огромное спасибо за помощь новичкам!
Разбираюсь с задержками... может таймеры?

Сообщение отредактировал 3state-systems - Apr 17 2007, 17:58
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   Часа два разбирался с вашей универсальной подпрогр...   Apr 13 2007, 17:18
- - 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, 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
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


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


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