ds18b20, Как задействовать функцию Alarm search?

Обсуждаем цифровые устройства...
Ответить
Аватара пользователя
Magicanin
Нашел транзистор. Понюхал.
Сообщения: 184
Зарегистрирован: Чт янв 13, 2011 11:36:16
Откуда: Красноярский край

ds18b20, Как задействовать функцию Alarm search?

Сообщение Magicanin »

Доброго времени суток Котам, Кошкам и Котятам :)))
Пишу на Bascom как ни странно...
Нужен кусочек кода с применением команды 1wwrite &HEC. Никак немогу вразуметь где его вставить и как им пользоваться. Даташит не соотносится с Bascom, как только не пробовал. Может есть у кого наработки или предложения, весь googl перерыл, вплоть до китайских сайтов.
[size=85][color=#80BF00][b]Извращение это[/b][/color]: программатор - [color=#40BFBF]AVR910 by Prottoss[/color], прошивка - [color=#40BFBF]Doper[/color], драйвер - [color=#40BFBF]Osamu Tamura[/color], называется - [color=#FF0000]STK500[/color]![/size]
Реклама
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: ds18b20, Как задействовать функцию Alarm search?

Сообщение ChipKiller »

чтобы воспользоваться командой ALARM SEARCH [ECh] - нужно сначала задать необходимый диапазон температур. Для этого:
1 делаем сброс
2 передаем команду пропуск ПЗУ - SKIP ROM [CCh]
3 передаем команду запись WRITE SCRATCHPAD [4Eh] и пишем 3 байта, где 1 байт -Верхняя граница температуры, 2-ой байт - нижняя граница и 3-ий байт - регистр конфигурации.

.... и только после этого в ALARM SEARCH [ECh] есть смысл
Magicanin писал(а):Даташит не соотносится с Bascom
Даташит не соотносится ни с каким языком и если выбрали Bascom - это Ваше лично дело, но внимательного чтения Datasheetа никто не отменял.
Реклама
Аватара пользователя
Magicanin
Нашел транзистор. Понюхал.
Сообщения: 184
Зарегистрирован: Чт янв 13, 2011 11:36:16
Откуда: Красноярский край

Re: ds18b20, Как задействовать функцию Alarm search?

Сообщение Magicanin »

Программа моего устройства полностью готова (почти 700 строк)
Все задано и изменяемо.
Вот только не знаю как прочитать флаг с кажной DS'ки
Осталась только функия управления периферией
В даташите написано что эта функция аналогична поиску ROM и на этом все пояснения.
[size=85][color=#80BF00][b]Извращение это[/b][/color]: программатор - [color=#40BFBF]AVR910 by Prottoss[/color], прошивка - [color=#40BFBF]Doper[/color], драйвер - [color=#40BFBF]Osamu Tamura[/color], называется - [color=#FF0000]STK500[/color]![/size]
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: ds18b20, Как задействовать функцию Alarm search?

Сообщение ChipKiller »

... что бы получить нормальный ответ - нужно задать нормальный вопрос ( я же не экстрасенс :)) ) . Как я понял на одной линии висит несколько DS18b20.
Magicanin писал(а):Вот только не знаю как прочитать флаг с кажной DS'ки
флаг устанавливается аппаратно, после подачи команды CONVERT T [44h]
Magicanin писал(а):В даташите написано что эта функция аналогична поиску ROM и на этом все пояснения.
...а больше наверное и не нужно :) Как DS18b20 может сообщить мастер-устройству на запрос ALARM SEARCH [ECh], что у него установлен бит тревоги? ... конечно только своим ROM-кодом (ведь если у нескольких датчиков установлен бит тревоги, то они ответят одновременно и на шине будет конфликт) именно поэтому функция аналогична поиску ROM
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Magicanin
Нашел транзистор. Понюхал.
Сообщения: 184
Зарегистрирован: Чт янв 13, 2011 11:36:16
Откуда: Красноярский край

Re: ds18b20, Как задействовать функцию Alarm search?

Сообщение Magicanin »

Может не экстрасенс но раз написано что "с каждой DS'ки" логично что она не одна.
Так же логично что она отвечает ROM'ом. Но поиск ROM'ов ведется командами 1wsearchfirst(), 1wsearchnext(). По другому не умеем.
Так же из даташита известно, флаг (0 or 1) устанавливается восьмым битом ригистров TH и TL.
В ответ на команду &hEC всегда 'FF'
[size=85][color=#80BF00][b]Извращение это[/b][/color]: программатор - [color=#40BFBF]AVR910 by Prottoss[/color], прошивка - [color=#40BFBF]Doper[/color], драйвер - [color=#40BFBF]Osamu Tamura[/color], называется - [color=#FF0000]STK500[/color]![/size]
Реклама
Аватара пользователя
Magicanin
Нашел транзистор. Понюхал.
Сообщения: 184
Зарегистрирован: Чт янв 13, 2011 11:36:16
Откуда: Красноярский край

Re: ds18b20, Как задействовать функцию Alarm search?

Сообщение Magicanin »

Насколько я понял Убийца Чипов :P не знаком с Bascom-AVR, а даташиты по ангельски мы и сами читать умеем.
Теория понятная, как в коде написать - вот в чем вопрос.
[size=85][color=#80BF00][b]Извращение это[/b][/color]: программатор - [color=#40BFBF]AVR910 by Prottoss[/color], прошивка - [color=#40BFBF]Doper[/color], драйвер - [color=#40BFBF]Osamu Tamura[/color], называется - [color=#FF0000]STK500[/color]![/size]
Реклама
Pasipaka
Родился
Сообщения: 1
Зарегистрирован: Пн авг 01, 2011 16:16:19

Re: ds18b20, Как задействовать функцию Alarm search?

Сообщение Pasipaka »

Добрый день. Можно ли вопрос немного в сторону?

Моя проблема:
по команде searchrom F0 не отзываются Ds1820 сенсоры.
У меня на проводе 2 дачтика.
По сбросу они отзываются. При подаче команды searchrom F0, в ответ получаю: FF FF FF FF FF FF FF FE !!! Т.е. пакет, в котором все 1 за иссключением самого младшего бита - 0.
См. осцилограммы.

На команду readrom 33 датчики отзываются вместе и по отдельности каждый.

Что же не так?
Как много времени я убил... Уже думаю, что считаю ром каждого по отдельности и затем зашью в ПО, что не есть гуд. И тогда сразу буду к каждому обращаться, минуя их поиск.
Вложения
readrom33_l.png
(19.5 КБ) 592 скачивания
readrom33_s.png
(7.24 КБ) 492 скачивания
searchrom_f0l.png
(23.18 КБ) 574 скачивания
searchrom_f0s.png
(20.67 КБ) 573 скачивания
Аватара пользователя
Magicanin
Нашел транзистор. Понюхал.
Сообщения: 184
Зарегистрирован: Чт янв 13, 2011 11:36:16
Откуда: Красноярский край

Re: ds18b20, Как задействовать функцию Alarm search?

Сообщение Magicanin »

В моем случае на проводе 9 датчиков ds18b20, с ds1820 дел не имел.
Чтобы не запутаться я им присвоил порядковые номера и сохраняю в EEPROM контроллера в меню инициализации. При смене датчика запоминаю его снова. Как-то по-другому мне в голову не приходило.

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

Sub Init
Cls
Do
W = 1wirecount()
Dsid(1) = 1wsearchfirst()
         If W > 0 Then
   Locate 1 , 3 : Lcd "CeЅcop oІЅapy¶eЅ "
   Locate 2 , 3
   For L = 1 To 8
      Lcd Hex(dsid(l))
   Next

   Locate 3 , 4 : Lcd "CoxpaЅёїД єaє:"
Wait 1
      Do
         If Left_ = 0 Then
         Waitms 300
         Incr P
             If P > 9 Then P = 1
         Elseif Right_ = 0 Then
         Waitms 300
         Decr P
             If P < 1 Then P = 9
         End If
         Locate 4 , 2
         If P = 1 Then Lcd "     y»ёеa       "
         If P = 2 Then Lcd "     ґapa¶       "
         If P = 3 Then Lcd "     ѕoґpeІ      "
         If P = 4 Then Lcd "    єopёгop      "
         If P = 5 Then Lcd "      ·a»        "
         If P = 6 Then Lcd "1№ є-p ѕoгaАa    "
         If P = 7 Then Lcd "1№ є-p oІpaїєa   "
         If P = 8 Then Lcd "2№ є-p ѕoгaАa    "
         If P = 9 Then Lcd "2№ є-p oІpaїєa   "

      Loop Until Menu_ = 0
         L = P - 1
         L = L * 8                                          'вычисление ячейки памяти
         For M = 1 To 8
            K = M + L
            Value = Dsid(m)
            Writeeeprom Value , K
         Next M
   Scw(1) = 30
   Scw(2) = 35
   Scw(3) = &B00111111
   1wreset
   1wverify Dsid(1)
   1wwrite &H4E
   For M = 1 To 3
   1wwrite Scw(m)
   Next M
   Waitms 10
   1wverify Dsid(1)
   1wwrite &H48
   1wreset


      Locate 3 , 4 : Lcd "CoxpaЅeЅo єaє:"

      Wait 2

      Cls

Else
Locate 2 , 2 : Lcd "©cїaЅoіёїe ceЅcop"
End If


Loop
End Sub
...

...
Sub Style1
Locate 1 , 1 : Lcd "Teјѕepaїypa іЅeБЅЗЗ:"
Locate 2 , 1
    Call Gettemperature(1)
    Lcd "©»ёеa  " ; Temp_sign ; X10 ; "," ; X01 ; Chr(3) ; "   "       'текущая темп-ра
Locate 3 , 1
    Call Gettemperature(2)
    Lcd "Ўapa¶  " ; Temp_sign ; X10 ; "," ; X01 ; Chr(3) ; "   "       'текущая темп-ра
End Sub
...

...
Sub Gettemperature(byval Numds As Byte)
  L = Numds - 1
  L = L * 8
For M = 1 To 8
   K = M + L
   Readeeprom Value , K
Dsid(m) = Value
Next M
 1wverify Dsid(1)

 If Err = 1 Then
  'Lcd "Err "                                                'Err = 1 if something is wrong
  X10 = 999
  X01 = 9
  Temperature = 999
  'Call Write_eeprom(20 , 0 )
 Elseif Err = 0 Then                                        'lcd " Sensor found"
   1wwrite &HBE
   Sc(1) = 1wread(2)                                        'read bytes into array
              Temperature = Makeint(sc(1) , Sc(2))          'складываем старший с младшим байты
              Temperature = Temperature * 10
            Temperature = Temperature / 16
            'If Temperature > 999 Then Temperature = 999

         If Sc(2) > 127 Then                                'если отрицательная температура
            Minus = 1
            Temp_sign = "-"
            Temperature = Not Temperature                   'инвертируем
            Temperature = Temperature + 1                   'добавляем еденичку (такая уж процедура...)
         Else
            Minus = 0
            Temp_sign = "+"
         End If
            X10 = Temperature / 10
            N_temp = X10 * 10
            X01 = Temperature - N_temp

 End If
End Sub
...
[size=85][color=#80BF00][b]Извращение это[/b][/color]: программатор - [color=#40BFBF]AVR910 by Prottoss[/color], прошивка - [color=#40BFBF]Doper[/color], драйвер - [color=#40BFBF]Osamu Tamura[/color], называется - [color=#FF0000]STK500[/color]![/size]
Ответить

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