Например TDA7294

Форум РадиоКот • Просмотр темы - DS1990A
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Вт мар 03, 2026 16:16:23

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 26 ]    , 2
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 14, 2009 21:33:18 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Пт июн 22, 2007 15:17:23
Сообщений: 159
Откуда: Россия г.Мурманск
Рейтинг сообщения: 0
uldemir писал(а):
На уровне моего понимания к коду претензий нет.
Но попробуй добавить контрольные распечатки к каждому действию. И если есть осциллограф, пробник, посмотри - проскакивают ли импульсы. Не стесняйся вставлять паузы - 1-wire допускает. Кстати, можно ли endif не ставить в таком синтаксисе? Я знаю, что бейсик не C, но все же?


в таком синтаксе, если условие записано в одну строку, на Visual Basic-е end if можно и не ставить - тут как мне кажется дело в другом, после команды F0h и перед посыланием двух бит в ds1990a должно быть ещё что-то, это что-то или пауза или ещё какой-то бит, так или иначе в документации к ds1990a об этом ничего не сказано - я так понимаю специально не сказано! Мол дескать догадаетесь сами, если конечно не застрелитесь!


Вернуться наверх
 
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 14, 2009 23:22:48 
Друг Кота
Аватар пользователя

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


Вернуться наверх
 
 Заголовок сообщения:
СообщениеДобавлено: Сб ноя 14, 2009 23:29:14 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1400
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7347
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Цитата:
Потому что чтение - это запись 1
Цитата:
Потому что чтение - это запись 1
Цитата:
Потому что чтение - это запись 1

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


Вернуться наверх
 
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 15, 2009 11:04:29 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Пт июн 22, 2007 15:17:23
Сообщений: 159
Откуда: Россия г.Мурманск
Рейтинг сообщения: 0
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. уже бьюсь головой о стену... ещё немножко и пробью дыру к соседям!


Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
 Заголовок сообщения:
СообщениеДобавлено: Вс ноя 15, 2009 11:29:15 
Друг Кота
Аватар пользователя

Карма: 50
Рейтинг сообщений: 1400
Зарегистрирован: Пт авг 28, 2009 21:34:30
Сообщений: 7347
Откуда: 845-й км.
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Не пользуй функцию 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 должно заработать.


Вернуться наверх
 
 Заголовок сообщения: Ура-а-а-а-а-а-а-а-а-а!!!!!!!!!!!!!!!!! Заработало-о-о-о-о!!!
СообщениеДобавлено: Вс ноя 15, 2009 12:00:41 
Нашел транзистор. Понюхал.
Аватар пользователя

Зарегистрирован: Пт июн 22, 2007 15:17:23
Сообщений: 159
Откуда: Россия г.Мурманск
Рейтинг сообщения: 0
uldemir писал(а):
Не пользуй функцию DSoutBit. Напиши другую функцию которая посылает один бит и давит эхо. Примерно так как я сделал из DSInByte поменяв 7 на 1 в циклах, только здесь надо чтобы тело цикла выполнялось только 1 раз. Например так: (я тупо выбросил цикл и 7 поменял на 0)
Замени в предыдущем примере DSOutBit на DSendBit - imho должно заработать.


Дорогой uldemir!!! Я не знаю, что ты такое сделал - НО ВСЁ ЗАРАБОТАЛООООООО!!!!!!!!!!!!!!!! УРААААААААААА!!!!!!!!!!!! Ты маг и волшебник!!!!!!!!!!! С этой минуты я нарекаю тебя МАСТЕРОМ-СЕНСЕЕМ по Visual Basic 6.0!!! Спасибо тебе огромное!!! За тебя дружище!!! :beer: :beer: :beer:


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 26 ]    , 2

Часовой пояс: UTC + 3 часа


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y