Главная » Статьи » Как подключить

Опрос большого количества датчиков DS18B20 в Bascom-AVR
  Датчики 18B20 от фирмы Dallas хороши тем, что подключаются по шине 1-Wire и занимая всего один вывод микроконтроллера, можно обработать большое количество устройств. Bascom-AVR тоже имеет в своем инструментарии команды, позволяющие легко работать с большим числом устройств 1-wire. В этом примере будет приведен опрос 4 датчиков 18B20, висящих на одной линии.  

 Каждому устройству протокола 1-wire при производстве присваивается уникальный идентификационный код, который позволяет определять устройство на шине. Ведущее устройство (микроконтроллер в нашем случае) при сканировании шины записывает номера найденных устройств и при опросе начинает опрос в порядке очереди начиная с наименьшего адреса устройства. 

 В Bascom-AVR поиск устройств ведется по командам

Dsid1(1) = 1wsearchfirst()
Dsid2(1) = 1wsearchnext()
Dsid3(1) = 1wsearchnext()

 Переменным  Dsid1, Dsid2,  Dsid3  присвоятся значения адреса найденных устройств. Затем по этим адресам будут опрашиваться устройства. 

        

 

 

$regfile = "m8def.dat"
$crystal = 1000000

Config Lcdpin=Pin, Rs=Portb.7,E=Portb.6,Db4=Portb.5,Db5=Portb.4,Db6=Portb.3,Db7=Portb.2
Config Lcd = 16 * 2
Cursor Off
Cls

Config 1wire = Portc.2

Dim Ss As String * 6
Dim I1 As Integer
Dim I2 As Integer
Dim I3 As Integer
Dim I4 As Integer
Dim Dsid1(8) As Byte
Dim Dsid2(8) As Byte
Dim Dsid3(8) As Byte
Dim Dsid4(8) As Byte


Deflcdchar 0 , 232 , 244 , 232 , 227 , 228 , 228 , 227 , 224
  'градус Цельсия      
Deflcdchar 1 , 31 , 27 , 19 , 27 , 27 , 27 , 17 , 31
          'символ 1 
Deflcdchar 2 , 31 , 17 , 21 , 29 , 27 , 23 , 17 , 31           'символ 2
Deflcdchar 3 , 31 , 17 , 29 , 25 , 29 , 29 , 17 , 31            'символ 3 
Deflcdchar 4 , 31 , 23 , 21 , 21 , 17 , 29 , 29 , 31            'символ 4

'считываем адреса устройств на шине 1-Wire 
Dsid1(1) = 1wsearchfirst()
Dsid2(1) = 1wsearchnext()
Dsid3(1) = 1wsearchnext()
Dsid4(1) = 1wsearchnext()


Do
   1wreset                                             'запускаем опрос всех датчиков
   1wwrite &HCC
   1wwrite &H44

Waitms 750

'после ожидания начинаем считывать датчики
'---------------------------------
   1wreset
   1wwrite &H55
   1wverify Dsid1(1)
                   'адрес первого датчика 
   1wwrite &HBE
   I1 = 1wread(2)
'---------------------------------
   1wreset
   1wwrite &H55
   1wverify Dsid2(1)
                     'адрес второго датчика 
   1wwrite &HBE
   I2 = 1wread(2)
   '------------------------------
   1wreset
   1wwrite &H55
   1wverify Dsid3(1)
                     'адрес третьего датчика
   1wwrite &HBE
   I3 = 1wread(2)
'---------------------------------
   1wreset
   1wwrite &H55
   1wverify Dsid4(1)
                  'адрес четвертого датчика
   1wwrite &HBE
   I4 = 1wread(2)

   Gosub conversion

   Cls
   Locate 1 , 1
   Lcd Chr(1) ; Ss ; Chr(0)

   I1 = I2

   Gosub Conversion

   Locate 2 , 1
   Lcd Chr(2) ; Ss ; Chr(0)

   I1 = I3

   Gosub Conversion

   Locate 1 , 9
   Lcd Chr(3) ; Ss ; Chr(0)

   I1 = I4

   Gosub Conversion

   Locate 2 , 9
   Lcd Chr(4) ; Ss ; Chr(0)

Loop

End

Conversion:
 I1 = I1 * 10
 I1 = I1 \ 16
 Ss = Str(i1)
 Ss = Format(ss , "0.0")
Return

 

  Очередь по которой будут сканироваться датчики и выводится показания, зависят только от уникального номера устройства.  Но если потребуется опрашивать датчики только в определенном порядке, тогда нужно будет узнать уникальные номера, и отправлять их в нужном порядке. 

 

 

 

 Скачать проект в Proteus

 А здесь представляем вашему вниманию двухканальный термометр с возможностью фиксировать максимумы/минимумы температур, которым с нами поделился товарищ 4ester

 

Категория: Как подключить | Добавлено: 27.05.2012
Просмотров: 40322 | Комментарии: 57 | Рейтинг: 4.9/14
Всего комментариев: 571 2 »
57 max   (16.11.2017 17:00) [Материал]
На соседнем форуме есть: http://bascomavr.3bb.ru/viewtopic.php?id=1129
Нужно войти под своим аккаунтом.

56 olegkaras   (16.11.2017 15:42) [Материал]
Подскажите как записать считанный из ds18b20 серийный номер в память МК и потом считать из памяти?

55 olegkaras   (01.11.2017 12:13) [Материал]
Поменял частоту на 8 МГц и все за работало. И такой вопрос , как сделать чтобы при отключении одного датчика остальные оставались на своих местах ?

0  
54 exersizze   (31.10.2017 20:42) [Материал]
хз, проверяйте соединения, фьюзы, датчики.

53 olegkaras   (31.10.2017 16:04) [Материал]
Почему с откомпелированной прошивкой контроллер не находит датчики ?

52 Aisek   (25.07.2017 17:05) [Материал]
Сделал в протеусе симуляцию кажет отрицательную температуру. Откуда? Если в коде не предусмотрено измерение отрицательной температуры.

0  
51 exersizze   (08.02.2017 18:18) [Материал]
rulezzznv, в самом конце, в архиве с файлом протеуса есть и скомпилированный файл.

50 rulezzznv   (07.02.2017 12:42) [Материал]
Парни киньте пожалуйста готовый hex на этлт проект у каво есть. Спасибо

49 T1nK   (19.01.2014 18:14) [Материал]
Ну, я понимаю, что все не должно быть все уж очень сложно, но тем не менее первый раз собрав схему, что называется, "в железе" и не увидев ничего кроме горящего светодиода Power на FT232RL становится как-то грустно. Тем более что два дня плясок с бубном вокруг макетной платы и COM порта ничего не дали.

48 exersizze   (19.01.2014 17:39) [Материал]
Все доступно, кнопка создания новой темы форума располагается сверху справа.
Создайте например вот здесь http://avrproject.ru/forum/15
Ну если начнете вникать то разберетесь помаленьку, там ничего сверхестественного нет)

47 T1nK   (19.01.2014 16:35) [Материал]
Хотел на форуме вопрос задать, но создание темы мне почему-то недоступно.
В какую тему мне лучше написать что комментарии тут не забивать?..

46 T1nK   (19.01.2014 16:14) [Материал]
Прочитал обе статьи, но первую вообще не понял, как впрочем и вторую (дыры в описании действий).
Возможно для электронщика и понятно что как делать, а для меня, как человека о электронике мало что знающего, в них ничего не понятно.
А описание действий с софтом слишком расплывчато с пропуском шагом - в общем то же ни о чем.
Буду дальше гуглить, может через недельку-другу чего нагуглится :((((

45 exersizze   (19.01.2014 14:07) [Материал]
Судя по описанию у вас не программатор, а простой конвертер USB в последовательный RS232. Но по большому счету разница между программатором на FT232 и преобразователем несущественные. Рекомендую ознакомится вот с этим http://easyelectronics.ru/skorost....ra.html

у меня есть материал на использование такого преобразователя, но с использованием загрузчика (бутлоадера) http://avrproject.ru/publ....1-0-109

44 T1nK   (19.01.2014 00:37) [Материал]
Есть ли на сайте статья по настройку BASCOM для программирования через FT232RL и подключению последнего в МК (к тому же ATmega8, например) ?

43 T1nK   (18.01.2014 20:16) [Материал]
Наконец проект собран и отлажен, по крайней мере в ISIS все работает.
На днях пришла и посылка с программатором FT232RL. Искал схему подключения в интернете, но видимо плохо, потому что ничего не нашел...

Ссылку на ebay не кидаю, на случай если это запрещено, но называется он там "FT232RL USB to Serial adapter module USB TO 232 for Arduino"). Контакты в порядке следования - GDN, CTS, 5V, TXD, RXD, DTR.

Подскажите пожалуйста как подключить FT232RL к ATmega8A-PU?
У схемы пока не будет своего питания (чуть позже определюсь - 3V или 5V), так что пока запитывать буду от FT232RL - понятно что GDN к GDN, а 5V к VCC.

42 max   (12.01.2014 10:31) [Материал]
Bascom-AVR 1.11.9.8

41 T1nK   (12.01.2014 02:27) [Материал]
При использование всех файлов из прикрепленного архива все прекрасно работает.

Попробовал сделать свой проект с нуля - не работает.
Попытался проект и код повторить - не работает.
Долго не мог понять в чем косяк пока не попытался запустить проект пересобрав HEX в своем BASCOM 2.0.7.5 после чего и в исходном проекте температура стала отображаться 0.0 со всех датчиков не зависимо от их показаний.
Увидел что исходный HEX и пересобранный отличаются - мой меньше на 307 байт.

В какой версии BASCOM собирался проект ?
Или BASCOM нужно как-то настроить для сборки проекта ?

40 Vitek1977   (04.01.2014 14:38) [Материал]
более менее запустил по варварски.
do
Config 1wire = Portd.3
1wreset
1wwrite &HCC
1wwrite &HBE
Tx = 1wread(2)
Tx = Tx * 10
Tx = Tx \ 160
1wreset
1wwrite &HCC
1wwrite &H44
Config 1wire = Portd.4
1wreset
1wwrite &HCC
1wwrite &HBE
Ty = 1wread(2)
Ty = Ty * 10
Ty = Ty \ 160
1wreset
1wwrite &HCC
1wwrite &H44
Config 1wire = Portd.5
1wreset
1wwrite &HCC
1wwrite &HBE
Tz = 1wread(2)
Tz = Tz * 10
Tz = Tz \ 160
1wreset
1wwrite &HCC
1wwrite &H44
End If
..........
loop
но есть другой правильный вариант, толком не могу найти, все вокруг да около.

39 Vitek1977   (03.01.2014 20:28) [Материал]
всем привет. а есть ли возможность подключение датчиков на разные пины, как их опрашивать? то есть организовать 2-3 канала 1wire.

38 sivan   (27.09.2013 19:16) [Материал]
1wverify Dsid1(1) 'адрес первого датчика

Я вот думаю, насколько такая проверка надежна. Уникальный код по даташиту 48-битный. А сравниваем лишь 8 бит. Иными словами, какова вероятность, что попадутся датчики с одинаковым этим байтом?

37 exersizze   (31.03.2013 12:53) [Материал]
Он получается при преобразовании, в общем остаток от деления на 16
Код
I1 = I1 * 10
I1 = I1 \ 16

36 Антошин   (31.03.2013 10:56) [Материал]
Подскажите пожалуйста,каким образом программа вычисляет десятую долю градуса?Просто
мне встречалась программа с очень хитрой и формулой вычисления.Как это
реализовано здесь?

35 exersizze   (27.01.2013 22:41) [Материал]
С дисплея данные не читаются,  поэтому думаю что такое вполне возможно

34 ssql   (27.01.2013 13:37) [Материал]
Уважаемые товарищи, такой вопрос - а можно параллельно 1-му экрану подключить еще один? Просветите))

33 Vitek1977   (19.12.2012 16:11) [Материал]
в том та и дело что нет переменных под такой адрес. максимум же 4 байта. туда же скинул файл. http://avrproject.ru/forum/5-31-1 несудите строго, эт первый проект у меня, занимает 98% в меге8, пришлось настройку гистерезиса котла убрать чтоб влезла, оставил постоянное значение. аппарат работает две недели, нареканий не было, выдерживает в помещение температуру +-0.3 градуса. на улице температура за это время -20...-40 была

32 pchela5   (19.12.2012 10:53) [Материал]
Если мне не изменяет память - так адрес датчика не является переменной byte - размерность у него поболее. Посему у тебя и получилось только таким образом. PS В даташите указано, что уникальный адрес - 64 разряда. Кинь программку то в форум - поделись.

31 Vitek1977   (18.12.2012 19:36) [Материал]
победил я это дело, но увеличением программы. нормально работает только если ,без исключения весь массив датчика записать в eeprom
Dim Ram31 As Eram Byte
Dim Ram32 As Eram Byte
Dim Ram33 As Eram Byte
Dim Ram34 As Eram Byte
Dim Ram35 As Eram Byte
Dim Ram36 As Eram Byte
Dim Ram37 As Eram Byte
Dim Ram38 As Eram Byte
.
.
Nomdat3(1) = Ram31
Nomdat3(2) = Ram32
Nomdat3(3) = Ram33
Nomdat3(4) = Ram34
Nomdat3(5) = Ram35
Nomdat3(6) = Ram36
Nomdat3(7) = Ram37
Nomdat3(8) = Ram38
DO
.
.
If Pinb.3 = 0 Then
'считываем адреса устройств на шине 1-Wire
Nomdat1(1) = 1wsearchfirst() '1
Nomdat2(1) = 1wsearchnext()
Nomdat3(1) = 1wsearchnext()
Ram31 = Nomdat3(1)
Ram32 = Nomdat3(2)
Ram33 = Nomdat3(3)
Ram34 = Nomdat3(4)
Ram35 = Nomdat3(5)
Ram36 = Nomdat3(6)
Ram37 = Nomdat3(7)
Ram38 = Nomdat3(8)
и так для каждого датчика :( массив eeprom создать не дает
Dim Ram3 As Eram Byte(8)
может кто подскажет как можно упростить этот вариант программы.
за то добился чего хотел, при повторном включение я сигнал с датчиков могу вообще прервать, после подключаю все работает все показания на месте, в программе я реализовал выбор датчиков по назначению так же с записью в eeprom

30 Vitek1977   (18.12.2012 17:17) [Материал]
спасибо за прогу, там все понятно, но как сохранить адреса датчиков так я и не пойму, пробовал всяко, я так понимаю адреса при считывании пишутся в первую ячейку массива, даю команду на запись этих ячеек в eeprom. сразу через bascom проверяю ячейки без изменения. буду дальше колдовать. инфы в нете нормальной нет, сандартное описание двух видов обращения к eeprom с простой переменной,

29 pchela5   (18.12.2012 10:42) [Материал]
Файл с программой разместил тут: http://avrproject.ru/forum/5-31-1

28 Vitek1977   (17.12.2012 17:30) [Материал]
и так пробовал, эфект тот же, при перезапуске err по датчикам.
без записи в eeprom как в программе указанной на этой странице, все работает нормально, че не так не пойму. вроде что та массивом не то делаю, с простыми переменными сохраняюсь в eeprom без проблем и читаю.
Dim Nomdat1(8) As Byte
Dim Nomdat2(8) As Byte
Dim Nomdat3(8) As Byte
$eeprom
Nomdat1default:
Data 100%
$data
Readeeprom Nomdat1(1) , Nomdat1default
$eeprom
Nomdat2default:
Data 100%
$data
Readeeprom Nomdat2(1) , Nomdat2default
$eeprom
Nomdat3default:
Data 100%
$data
Readeeprom Nomdat3(1) , Nomdat3default
.
.
1wreset
1wwrite &H55
1wverify Nomdat1(1) '1
1wwrite &HBE
Dd = 1wread(2)
.
.
.

If Pinb.3 = 0 Then
'считываем адреса устройств на шине 1-Wire
Nomdat1(1) = 1wsearchfirst() '1
Nomdat2(1) = 1wsearchnext()
Nomdat3(1) = 1wsearchnext()
Writeeeprom Nomdat1(1) , Nomdat1default
Writeeeprom Nomdat2(1) , Nomdat2default
Writeeeprom Nomdat3(1) , Nomdat3default

1-30 31-57
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]






авторизация