Главная » Статьи » Как подключить |
Датчики 18B20 от фирмы Dallas хороши тем, что подключаются по шине 1-Wire и занимая всего один вывод микроконтроллера, можно обработать большое количество устройств. Bascom-AVR тоже имеет в своем инструментарии команды, позволяющие легко работать с большим числом устройств 1-wire. В этом примере будет приведен опрос 4 датчиков 18B20, висящих на одной линии.
Каждому устройству протокола 1-wire при производстве присваивается уникальный идентификационный код, который позволяет определять устройство на шине. Ведущее устройство (микроконтроллер в нашем случае) при сканировании шины записывает номера найденных устройств и при опросе начинает опрос в порядке очереди начиная с наименьшего адреса устройства. В Bascom-AVR поиск устройств ведется по командам Dsid1(1) = 1wsearchfirst() Переменным 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
Очередь по которой будут сканироваться датчики и выводится показания, зависят только от уникального номера устройства. Но если потребуется опрашивать датчики только в определенном порядке, тогда нужно будет узнать уникальные номера, и отправлять их в нужном порядке.
А здесь представляем вашему вниманию двухканальный термометр с возможностью фиксировать максимумы/минимумы температур, которым с нами поделился товарищ 4ester.
| |
Просмотров: 40322 | Комментарии: 57 | Рейтинг: 4.9/14 |
Всего комментариев: 57 | 1 2 » | ||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||
1-30 31-57 | |||||||||||||||||||||||||||||
Проекты [46] |
Как подключить [32] |
Инструменты [3] |
Полезная информация [18] |
Объявления [3] |