DS1990A

Обсуждаем цифровые устройства...
Аватара пользователя
Cyrix
Нашел транзистор. Понюхал.
Сообщения: 159
Зарегистрирован: Пт июн 22, 2007 15:17:23
Откуда: Россия г.Мурманск
Контактная информация:

Сообщение Cyrix »

uldemir писал(а):На уровне моего понимания к коду претензий нет.
Но попробуй добавить контрольные распечатки к каждому действию. И если есть осциллограф, пробник, посмотри - проскакивают ли импульсы. Не стесняйся вставлять паузы - 1-wire допускает. Кстати, можно ли endif не ставить в таком синтаксисе? Я знаю, что бейсик не C, но все же?
в таком синтаксе, если условие записано в одну строку, на Visual Basic-е end if можно и не ставить - тут как мне кажется дело в другом, после команды F0h и перед посыланием двух бит в ds1990a должно быть ещё что-то, это что-то или пауза или ещё какой-то бит, так или иначе в документации к ds1990a об этом ничего не сказано - я так понимаю специально не сказано! Мол дескать догадаетесь сами, если конечно не застрелитесь!
Реклама
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

другом, после команды F0h и перед посыланием двух бит в ds1990a должно быть ещё что-то, это что-то или пауза или ещё какой-то бит, так или иначе в документации к ds1990a об этом ничего не сказано - я так понимаю специально не сказано! Мол дескать догадаетесь сами, если конечно не застрелитесь!
Прими, что даташит верен. это работает и проверено многими, в том числе и мной, и неоднократно. потому я и советую проконтролировать чтобы БИТЫ посылались строго: ни одного лишнего, ни одного пропущенного. Например, вначале, у меня создалось впечатление, что нет подтверждения бита после чтения двух бит. Потому что чтение - это запись 1. Поэтому прочитанную последовательность 10 10 11 - можно рассмотреть так: 101 011 - т.е. если действительно невыполняется DSOutBit - все происходит верно - передача 1/подтверждение 1, передача 0/подтверждение 1. Может тип данных не сравнивается? хм... хотя если ты получаешь "отвалился" - похоже что сравнивается.
Реклама
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

Потому что чтение - это запись 1
Потому что чтение - это запись 1
Потому что чтение - это запись 1
КТО БУДЕТ ЧИТАТЬ ТО, ЧТО МЫ ЗАПИСАЛИ?????????????????
После DSoutBit - надо сбросить принятые данные! Изучи внимательнее функцию DSOutByte. особенно тот момент где про эхо.
Аватара пользователя
Cyrix
Нашел транзистор. Понюхал.
Сообщения: 159
Зарегистрирован: Пт июн 22, 2007 15:17:23
Откуда: Россия г.Мурманск
Контактная информация:

Сообщение Cyrix »

uldemir писал(а):
Потому что чтение - это запись 1
Потому что чтение - это запись 1
Потому что чтение - это запись 1
КТО БУДЕТ ЧИТАТЬ ТО, ЧТО МЫ ЗАПИСАЛИ?????????????????
После DSoutBit - надо сбросить принятые данные! Изучи внимательнее функцию DSOutByte. особенно тот момент где про эхо.

Код: Выделить всё


    Dim R(64)
    Dim By(64)
    
Text1.Text = ""
    Call DSReset                              'даём сброс
    Call DSOutByte(&HF0)                   'даём команду поиска ROM
         
         For i% = 0 To 63

        R(i%) = DSInTwoBit
         
         If R(i%) = 1 Then
         Call DSOutBit(True)
         By(i%) = 1
         mscDev.InBufferCount = 0   'чистим входной буфер
            Do 'чистим выходной буфер
            Loop Until mscDev.OutBufferCount = 0
         End If
         
         If R(i%) = 2 Then
         Call DSOutBit(False)
         By(i%) = 0
         mscDev.InBufferCount = 0 ' чистим входной буфер   
            Do '                         чистим выходной буфер
            Loop Until mscDev.OutBufferCount = 0
         End If
         
         If R(i%) = 3 Then
         MsgBox "Отвалилась!"
         Exit For
         End If
Next i%

    
  For i% = 0 To 63
  Debug.Print By(i%);
  Next i%
чистил я и входной и выходной буфер и до записи двух бит и после, оставлял чистку только входного буфера, оставлял чистку только выходного буфера - всё равно результат один и тот же - первый раз функция DSInTwoBit возвращает 1 - подтверждаю 1, втророй раз опять единицу, опять подтверждаю - третий раз возвращает твёрдую "3" - ну тут приехали...

Кстати таблетка жива и здорова - другие программы ищут её по F0h на 5 с плюсом - быстренько так обнаруживают, аж зло берёт! :evil:

P.S. уже бьюсь головой о стену... ещё немножко и пробью дыру к соседям!
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

Не пользуй функцию DSoutBit. Напиши другую функцию которая посылает один бит и давит эхо. Примерно так как я сделал из DSInByte поменяв 7 на 1 в циклах, только здесь надо чтобы тело цикла выполнялось только 1 раз. Например так: (я тупо выбросил цикл и 7 поменял на 0)

Код: Выделить всё

Private Sub DSendBit(DSBit As Boolean) 'подпрограмма вывода бита
        If DSBit Then
            mscDev.Output = Chr$(&HFF)   'передаем 1
        Else
            mscDev.Output = Chr$(&H0)    'передаем 0
        End If
        Do 'ждем когда выходной буфер очистится
        Loop Until mscDev.OutBufferCount = 0
    TMInTime# = Now + TimeSerial(0, 0, 1) / 18 ' 1/18 секунды на ответ
    Do 'ждем когда придет все эхо, с учетом тайм-аута
    Loop Until (mscDev.InBufferCount > 0) Or (TMInTime# < Now)
    mscDev.InBufferCount = 0    'обнуляем эхо в приемном буфере
End Sub
Замени в предыдущем примере DSOutBit на DSendBit - imho должно заработать.
Реклама
Аватара пользователя
Cyrix
Нашел транзистор. Понюхал.
Сообщения: 159
Зарегистрирован: Пт июн 22, 2007 15:17:23
Откуда: Россия г.Мурманск
Контактная информация:

Ура-а-а-а-а-а-а-а-а-а!!!!!!!!!!!!!!!!! Заработало-о-о-о-о!!!

Сообщение Cyrix »

uldemir писал(а):Не пользуй функцию DSoutBit. Напиши другую функцию которая посылает один бит и давит эхо. Примерно так как я сделал из DSInByte поменяв 7 на 1 в циклах, только здесь надо чтобы тело цикла выполнялось только 1 раз. Например так: (я тупо выбросил цикл и 7 поменял на 0)
Замени в предыдущем примере DSOutBit на DSendBit - imho должно заработать.
Дорогой uldemir!!! Я не знаю, что ты такое сделал - НО ВСЁ ЗАРАБОТАЛООООООО!!!!!!!!!!!!!!!! УРААААААААААА!!!!!!!!!!!! Ты маг и волшебник!!!!!!!!!!! С этой минуты я нарекаю тебя МАСТЕРОМ-СЕНСЕЕМ по Visual Basic 6.0!!! Спасибо тебе огромное!!! За тебя дружище!!! :beer: :beer: :beer:
Реклама
Ответить

Вернуться в «Цифровая техника»