DS1990A
- Cyrix
- Нашел транзистор. Понюхал.
- Сообщения: 159
- Зарегистрирован: Пт июн 22, 2007 15:17:23
- Откуда: Россия г.Мурманск
- Контактная информация:
DS1990A
Всем привет!!!
Кто знает как можно прочитать ds1990a по команде F0h ?
огромная просьба не давать ссылки на сайты типа http://www.maxim-ic.com и прочие - всё это лажа!
Я понял принцип чтения по команде F0h и сам могу объяснить кому угодно, но мне необходимо написать программу на Visual Basic-ке для чтения ROM ds1990a по команде F0h. И ещё просьба - команду 33h не предлагать - я этой командой уже всё прочитал, она работает на ура!
Если у кого-то уже есть готовый пример работы ds1990a через com порт, поделитесь пожалуйста!
Кстати о птичках - с недавних пор домофоны стали читать таблетку не по 33h а именно по F0h!!!!!!!!!!!!! чтобы исключить клоны и прочие эмуляторы там всякие!
Кто знает как можно прочитать ds1990a по команде F0h ?
огромная просьба не давать ссылки на сайты типа http://www.maxim-ic.com и прочие - всё это лажа!
Я понял принцип чтения по команде F0h и сам могу объяснить кому угодно, но мне необходимо написать программу на Visual Basic-ке для чтения ROM ds1990a по команде F0h. И ещё просьба - команду 33h не предлагать - я этой командой уже всё прочитал, она работает на ура!
Если у кого-то уже есть готовый пример работы ds1990a через com порт, поделитесь пожалуйста!
Кстати о птичках - с недавних пор домофоны стали читать таблетку не по 33h а именно по F0h!!!!!!!!!!!!! чтобы исключить клоны и прочие эмуляторы там всякие!
- Реклама
- Alexey1969
- Вымогатель припоя
- Сообщения: 622
- Зарегистрирован: Чт мар 05, 2009 05:31:16
- Откуда: г. Кемерово
- Контактная информация:
- Alexey1969
- Вымогатель припоя
- Сообщения: 622
- Зарегистрирован: Чт мар 05, 2009 05:31:16
- Откуда: г. Кемерово
- Контактная информация:
Читал вот этим http://autobills.ru/1w_read_VB6.html
- Cyrix
- Нашел транзистор. Понюхал.
- Сообщения: 159
- Зарегистрирован: Пт июн 22, 2007 15:17:23
- Откуда: Россия г.Мурманск
- Контактная информация:
Alexey1969 писал(а):Читал вот этим http://autobills.ru/1w_read_VB6.html
Ой народ, ну мяу-ё-маё а, ну ёлки-палки - ну этот проект читает по команде 33h и по 0Fh - это аналогичные команды! Речь идёт о побитном чтении! ПО Б-И-Т-Н-О-М! андестенд ми?
Работает по следующему принципу - даём сброс, даём команду F0h даём два такта и входной буфер com порта заполняется следующими значениями: 1 0 - это значит, что в ROM находится единица, сразу же выдаём таблетке единицу в качестве подтверждения, если получили 0 1 - значит, что в ROM находится 0, опять выдаём подтверждение, но уже не 1 а 0, если получили 1 1 - это значит, что устройство не ответило, отвалилось, сгорело, сгорел com порт и т.д. и т.п., если получили 0 0, это значит, что мы очень хитрые и подключили на шину два устройства и они оба ответили... и всё это 64 раза - получаем 8 байт информации ROM!!! - Так работают современные домофоны, таким образом они отсеивают клоны и эмуляторы!!!
P.S. Почему меня все считают тормозом перестройки???
- Реклама
- Cyrix
- Нашел транзистор. Понюхал.
- Сообщения: 159
- Зарегистрирован: Пт июн 22, 2007 15:17:23
- Откуда: Россия г.Мурманск
- Контактная информация:
Pe3ucTop писал(а):А возникли сложности переделать данную Вам программу под нужный вам протокол ??
Прочитал статейку, понял всё довольнотаки легко
В протоколы обмена не вникал, с удовольствием готов помочь.
Если можете разъясните разницу принципов чтения (алгоритмов), есть идеи по переделки существующей программы..
Сложности возникли сразу же!
Существующая программа http://autobills.ru/1w_read_VB6.html читает ds1990a по команде 33h - хорошо читает! Качественно! Красиво! И код красивый и оптимизирован до безобразия. Дело не в этом - вся беда в том, что я прекрасно понимаю как дать команду F0h и как потом прочитать побитно НО чего-то не получается... а именно вот что: Даю сброс, даю команду F0h, даю два такта инструкцией Call DSOutBit (True), затем жду когда что нибудь свалится во входной буфер mscDevCount > 1, ну и к примеру получаю два бита 1 и 0 - отвечаю таблетке 1 Call DSOutBit (True) и повторяю всё это 64 раза - всё было бы хорошо, НО! 1-я пара бит = 1 0, вторая = 1 0 и после 2-й пары бит я получаю 1 1 - а это означает, что устройство не ответило, потому что сгорело или отвалилось - но это всё чушь, устройство на месте и всё с ним в полном порядке! Вот в чём может быть затык?
Если у кого нибудь есть адаптер и кому интересно могу скинуть проект, над которым я мучаюсь - если интересно конечно...
Ну если устраивает, переделай Function DSInByte() в аналогичную функцию которая читает и возвращает только два бита (там только циклы укоротить) и на базе DSoutByte функцию передающую один бит. а дальше дело только техники и пиротехники: читаем 2 бита, посылаем 1, читаем 2, посылаем 1. Сам я с бейсиками не дружу - готового решения не дам.Существующая программа http://autobills.ru/1w_read_VB6.html читает ds1990a по команде 33h - хорошо читает!
А, вот где, возможно, ошибка:
Внимательнее изучайте диаграмму - после F0 читаются 2 бита, а потом мастер посылает один бит указывая по какому дереву пойдет поиск дальше.Даю сброс, даю команду F0h, даю два такта инструкцией Call DSOutBit (True), затем жду когда что нибудь свалится во входной буфер mscDevCount > 1
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18592
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
речь идет об ответе на команду SEARCH_ROM - команде, которая позволяет обнаружить адреса всех одновременно подключенных 1-wire девайсов. у меня на сайте есть моя утилитка, которая позволяет через СОМ-порт выполнять поиск 1-wire девайсов. можете найти ее и скачать - будет как раз (говоря по-вашему) побитное чтение.Cyrix писал(а):Ой народ, ну мяу-ё-маё а, ну ёлки-палки - ну этот проект читает по команде 33h и по 0Fh - это аналогичные команды! Речь идёт о побитном чтении! ПО Б-И-Т-Н-О-М! андестенд ми?
хотя я не понимаю - адрес-то один и тот же, вам оно зачем? что так, что эдак - считаете одно и то же...
кстати, в апноуте от производителя есть полный исходник на Си алгоритма поиска адресов - просто возьмите 1 в 1 его и откомпилируйте - и будет работать
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Cyrix
- Нашел транзистор. Понюхал.
- Сообщения: 159
- Зарегистрирован: Пт июн 22, 2007 15:17:23
- Откуда: Россия г.Мурманск
- Контактная информация:
Не-не... если попытаться что-то прочитать сразу же после команды F0h то в буфере будет "ничего не будет" и система подвиснет ожидая эти самые два бита. После F0h надо насильно дать два такта в ds1990a, чтобы она (ds1990a) в свою очередь выдала эти два бита, а уж потом читать из буфера и подтверждать первый бит.... как-то так.uldemir писал(а):Внимательнее изучайте диаграмму - после F0 читаются 2 бита, а потом мастер посылает один бит указывая по какому дереву пойдет поиск дальше.
жду мастера-сенсея по Visual Basic
- Cyrix
- Нашел транзистор. Понюхал.
- Сообщения: 159
- Зарегистрирован: Пт июн 22, 2007 15:17:23
- Откуда: Россия г.Мурманск
- Контактная информация:
Это где это???ARV писал(а):у меня на сайте есть моя утилитка, которая позволяет через СОМ-порт выполнять поиск 1-wire девайсов. можете найти ее и скачать - будет как раз (говоря по-вашему) побитное чтение.
Домофоны читают ключ именно по F0h, таким образом они отсеивают клоны и эмуляторы, я хочу сделать полный эмулятор ds1990a.ARV писал(а): хотя я не понимаю - адрес-то один и тот же, вам оно зачем? что так, что эдак - считаете одно и то же...
Не могу сообразить как оттуда перебросить в Visual Basic, так-как совершенно незнаю Си.ARV писал(а): кстати, в апноуте от производителя есть полный исходник на Си алгоритма поиска адресов - просто возьмите 1 в 1 его и откомпилируйте - и будет работать
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18592
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
это здесьCyrix писал(а):Это где это???
я мог бы вам помочь, если бы вы работали с Си: я давно сделал библиотеку для поддержки slave-устройств 1-wire, которые умеют реагировать на команды поиска. совсем недавно (вчера) MOLCHEC протестировал ее и собрал с ее помощью свой какой-то девайс страшно нужный ему. но раз вы любите ВижуалВасика - увы...Cyrix писал(а):Домофоны читают ключ именно по F0h, таким образом они отсеивают клоны и эмуляторы, я хочу сделать полный эмулятор ds1990a.
могу порекомендовать осваивать Си. хотя даже зачатков навыков программиста достаточно, чтобы разобраться в алгоритме и "тупо" переформатировать операторы. я это делал для Pascal (Delphi) - просто заменяя {} на Begin End и операторы = на :=, & на AND и так далее.Cyrix писал(а):Не могу сообразить как оттуда перебросить в Visual Basic, так-как совершенно незнаю Си.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Сенсея по вижуалу здесь может не оказаться. Но не понимаю в чем проблема? Там же все сделано тупо - через ком-порт, в полнючем соответствии с далласовской апнотой.Cyrix писал(а):uldemir писал(а): Не-не... если попытаться что-то прочитать сразу же после команды F0h то в буфере будет "ничего не будет" и система подвиснет ожидая эти самые два бита. После F0h надо насильно дать два такта в ds1990a, чтобы она (ds1990a) в свою очередь выдала эти два бита, а уж потом читать из буфера и подтверждать первый бит.... как-то так.
жду мастера-сенсея по Visual Basic :(
Код: Выделить всё
Private Function DSInTwoBit() As Byte 'подпрограмма ввода 2 бит
Dim Buf() As Byte
Dim By As Byte
mscDev.InBufferCount = 0 'очищаем входной буфер
For I% = 0 To 1
Call DSOutBit(True)
Next I%
TMInTime# = Now + TimeSerial(0, 0, 1) / 18 ' 1/18 секунды на ответ
Do 'ждем когда на вход что нибудь придет, с учетом тайм-аута
Loop Until (mscDev.InBufferCount > 1) Or (TMInTime# < Now)
'проверяем, весь ли байт пришел
If mscDev.InBufferCount <= 1 Then
'байт не целиком, подставляем пучтой символ и выходим
mscDev.InBufferCount = 0 'обнуляем буфер
DSInByte = &HFF
Exit Function
End If
Buf = mscDev.Input 'читаем буфер
For I% = 0 To 1
If Buf(I%) = &HFF Then
By = By + 2 ^ I%
End If
Next I%
DSInByte = By
End Function- Cyrix
- Нашел транзистор. Понюхал.
- Сообщения: 159
- Зарегистрирован: Пт июн 22, 2007 15:17:23
- Откуда: Россия г.Мурманск
- Контактная информация:
огромное спасибо uldemir! но к сожалению после 2-й пары бит от устройста я получаю 1 1 - тоесть устройство сгорело, отвалилось или com порт сгорел, естественно ничего из перечисленного не происходит.
Тоесть первая пара 1 0, вторая пара 1 0, а третья пара бит 1 1 - уже всё перепробовал, незнаю даже в чём может быть дело...
Тоесть первая пара 1 0, вторая пара 1 0, а третья пара бит 1 1 - уже всё перепробовал, незнаю даже в чём может быть дело...
- Cyrix
- Нашел транзистор. Понюхал.
- Сообщения: 159
- Зарегистрирован: Пт июн 22, 2007 15:17:23
- Откуда: Россия г.Мурманск
- Контактная информация:
ARV писал(а):[... но раз вы любите ВижуалВасика - увы...
могу порекомендовать осваивать Си. хотя даже зачатков навыков программиста достаточно, чтобы разобраться в алгоритме и "тупо" переформатировать операторы. я это делал для Pascal (Delphi) - просто заменяя {} на Begin End и операторы = на :=, & на AND и так далее.
Быть может Вы и правы, возможно мне просто нужно начать изучать Си
А после первой пары бит ты посылаешь подтверждение кого хочешь иметь?Cyrix писал(а):огромное спасибо uldemir! но к сожалению после 2-й пары бит от устройста я получаю 1 1 - тоесть устройство сгорело, отвалилось или com порт сгорел, естественно ничего из перечисленного не происходит.
Тоесть первая пара 1 0, вторая пара 1 0, а третья пара бит 1 1 - уже всё перепробовал, незнаю даже в чём может быть дело...
Если тебе пришло 0, 1 - значит есть устройство с 0 в данном бите, то мастер должен послать "0", и читать следующие 2 бита. Если пошлёшь "1", то таблетка подумает, что ее это не касается и отсохнет - вот тогда и получишь "11". Помоему так: Если DSInTwoBit возвращает 1 - надо послать 1, Если 2 - то посылаем 0, Если 0 - у нас развилка: в зависимости от посланного выберется одна или другая ветвь, ну а если 3 - сам знаешь - приехали.
Хм. Мне даже понравилось. Мож тоже поставить вижуал?
- Cyrix
- Нашел транзистор. Понюхал.
- Сообщения: 159
- Зарегистрирован: Пт июн 22, 2007 15:17:23
- Откуда: Россия г.Мурманск
- Контактная информация:
uldemir писал(а): Хм. Мне даже понравилось. Мож тоже поставить вижуал?
ну конечно же после первой пары бит я посылаю 1 и после второй пары бит тоже посылаю 1 и если бы мне приходило 0 1 я бы посылал 0, но мне приходит 1 0...
мистика какя-то...
кстати специалистов по Си - целая куча, а вот так чтобы взять и написать что нибудь на Visual Basic - так все попрятались!
- Cyrix
- Нашел транзистор. Понюхал.
- Сообщения: 159
- Зарегистрирован: Пт июн 22, 2007 15:17:23
- Откуда: Россия г.Мурманск
- Контактная информация:
Код: Выделить всё
Dim R(128)
Dim Buf() As Byte
Dim By As Byte
Text1.Text = ""
Call DSReset 'выдаем сброс
Call DSOutByte(&HF0) 'команда на поиск ПЗУ таблетки
R(0) = DSInTwoBit
If R(0) = 1 Then Call DSOutBit(True)
If R(0) = 2 Then Call DSOutBit(False)
If R(0) = 3 Then MsgBox "отвалилась!"
R(1) = DSInTwoBit
If R(1) = 1 Then Call DSOutBit(True)
If R(1) = 2 Then Call DSOutBit(False)
If R(1) = 3 Then MsgBox "отвалилась!"
R(2) = DSInTwoBit
If R(2) = 1 Then Call DSOutBit(True)
If R(2) = 2 Then Call DSOutBit(False)
If R(2) = 3 Then MsgBox "отвалилась!"
For bt = 0 To 2
Debug.Print R(bt);
Next bt
что я не так делаю?
Wrong! Если посмотреть в конце учебника ответы, то тебе первая пара должна быть 1 0, а вторая 0 1. Если мне склероз не изменяет, то первый идет байт family code (01h) начиная с младшего бита. am i right?Cyrix писал(а):ну конечно же после первой пары бит я посылаю 1 и после второй пары бит тоже посылаю 1 и если бы мне приходило 0 1 я бы посылал 0, но мне приходит 1 0...
- Cyrix
- Нашел транзистор. Понюхал.
- Сообщения: 159
- Зарегистрирован: Пт июн 22, 2007 15:17:23
- Откуда: Россия г.Мурманск
- Контактная информация:
Да Вы правы на 100% я этот феномен сразу же обнаружил! Сначала идёт фамильный код устройства а это 00000001, тоесть я должен получать такие пары 1 0, 0 1, 0 1, 0 1.... и так до 8-мого бита, а я получаю неизвестно что - 1 0, 1 0 и 1 1 - крандец какой-то!uldemir писал(а):Wrong! Если посмотреть в конце учебника ответы, то тебе первая пара должна быть 1 0, а вторая 0 1. Если мне склероз не изменяет, то первый идет байт family code (01h) начиная с младшего бита. am i right?Cyrix писал(а):ну конечно же после первой пары бит я посылаю 1 и после второй пары бит тоже посылаю 1 и если бы мне приходило 0 1 я бы посылал 0, но мне приходит 1 0...
На уровне моего понимания к коду претензий нет.
Но попробуй добавить контрольные распечатки к каждому действию. И если есть осциллограф, пробник, посмотри - проскакивают ли импульсы. Не стесняйся вставлять паузы - 1-wire допускает. Кстати, можно ли endif не ставить в таком синтаксисе? Я знаю, что бейсик не C, но все же?
Но попробуй добавить контрольные распечатки к каждому действию. И если есть осциллограф, пробник, посмотри - проскакивают ли импульсы. Не стесняйся вставлять паузы - 1-wire допускает. Кстати, можно ли endif не ставить в таком синтаксисе? Я знаю, что бейсик не C, но все же?


