в таком синтаксе, если условие записано в одну строку, на Visual Basic-е end if можно и не ставить - тут как мне кажется дело в другом, после команды F0h и перед посыланием двух бит в ds1990a должно быть ещё что-то, это что-то или пауза или ещё какой-то бит, так или иначе в документации к ds1990a об этом ничего не сказано - я так понимаю специально не сказано! Мол дескать догадаетесь сами, если конечно не застрелитесь!uldemir писал(а):На уровне моего понимания к коду претензий нет.
Но попробуй добавить контрольные распечатки к каждому действию. И если есть осциллограф, пробник, посмотри - проскакивают ли импульсы. Не стесняйся вставлять паузы - 1-wire допускает. Кстати, можно ли endif не ставить в таком синтаксисе? Я знаю, что бейсик не C, но все же?
DS1990A
- Cyrix
- Нашел транзистор. Понюхал.
- Сообщения: 159
- Зарегистрирован: Пт июн 22, 2007 15:17:23
- Откуда: Россия г.Мурманск
- Контактная информация:
- Реклама
Прими, что даташит верен. это работает и проверено многими, в том числе и мной, и неоднократно. потому я и советую проконтролировать чтобы БИТЫ посылались строго: ни одного лишнего, ни одного пропущенного. Например, вначале, у меня создалось впечатление, что нет подтверждения бита после чтения двух бит. Потому что чтение - это запись 1. Поэтому прочитанную последовательность 10 10 11 - можно рассмотреть так: 101 011 - т.е. если действительно невыполняется DSOutBit - все происходит верно - передача 1/подтверждение 1, передача 0/подтверждение 1. Может тип данных не сравнивается? хм... хотя если ты получаешь "отвалился" - похоже что сравнивается.другом, после команды F0h и перед посыланием двух бит в ds1990a должно быть ещё что-то, это что-то или пауза или ещё какой-то бит, так или иначе в документации к ds1990a об этом ничего не сказано - я так понимаю специально не сказано! Мол дескать догадаетесь сами, если конечно не застрелитесь!
- Cyrix
- Нашел транзистор. Понюхал.
- Сообщения: 159
- Зарегистрирован: Пт июн 22, 2007 15:17:23
- Откуда: Россия г.Мурманск
- Контактная информация:
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%
Кстати таблетка жива и здорова - другие программы ищут её по F0h на 5 с плюсом - быстренько так обнаруживают, аж зло берёт!
P.S. уже бьюсь головой о стену... ещё немножко и пробью дыру к соседям!
Не пользуй функцию DSoutBit. Напиши другую функцию которая посылает один бит и давит эхо. Примерно так как я сделал из DSInByte поменяв 7 на 1 в циклах, только здесь надо чтобы тело цикла выполнялось только 1 раз. Например так: (я тупо выбросил цикл и 7 поменял на 0)
Замени в предыдущем примере DSOutBit на DSendBit - imho должно заработать.
Код: Выделить всё
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- Реклама
- Cyrix
- Нашел транзистор. Понюхал.
- Сообщения: 159
- Зарегистрирован: Пт июн 22, 2007 15:17:23
- Откуда: Россия г.Мурманск
- Контактная информация:
Ура-а-а-а-а-а-а-а-а-а!!!!!!!!!!!!!!!!! Заработало-о-о-о-о!!!
Дорогой uldemir!!! Я не знаю, что ты такое сделал - НО ВСЁ ЗАРАБОТАЛООООООО!!!!!!!!!!!!!!!! УРААААААААААА!!!!!!!!!!!! Ты маг и волшебник!!!!!!!!!!! С этой минуты я нарекаю тебя МАСТЕРОМ-СЕНСЕЕМ по Visual Basic 6.0!!! Спасибо тебе огромное!!! За тебя дружище!!!uldemir писал(а):Не пользуй функцию DSoutBit. Напиши другую функцию которая посылает один бит и давит эхо. Примерно так как я сделал из DSInByte поменяв 7 на 1 в циклах, только здесь надо чтобы тело цикла выполнялось только 1 раз. Например так: (я тупо выбросил цикл и 7 поменял на 0)
Замени в предыдущем примере DSOutBit на DSendBit - imho должно заработать.


