Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Ds18B20. Работа с несколькими датчиками


Ds18B20. Работа с несколькими датчиками

Сообщений 1 страница 30 из 82

1

Доброо времени суток!
Помогите плиз решить такую проблему: нужно  круглосуточно мерить температуру в 6 точках, и при этом знать какой где датчик. С измерением Т проблем нет, во всех точках.
Остановился на алгоритме поочерёдного поиска и запоминания серийников в ЕЕПРОМ,с последующим присвоением номеров и выборкой. Может у кого есть кусочек кода для примера????

0

2

Код:
'*************************************************
'* Code to test DS18x20
'* The 1-wire bus pin is Port B.4
'* Tested 14th Dec 2008 with Bascom 1.11.9.1
'*
'* Will handle multiple DS18S20 or DS18B20 devices
'* Brett England
'*************************************************

$regfile = "m8def.dat"
$crystal = 8000000                                          ' we are using this frequency

Declare Sub Convallt                                        ' Convert T on ALL sensors
Declare Sub Meas_to_cel(offset As Byte)
Declare Sub Temp_to_decicel
Declare Sub Disp_temp(cnt As Byte , Offset As Byte)

' Up to 8 devices - each having an 8 byte ROMID
Const Max1wire = 8
Dim Dsid(64) As Byte                                        ' Dallas ID 64bit inc. CRC
Dim Sc(9) As Byte                                           ' scratch pad
Dim Cnt1wire As Byte                                        ' Number of 1-wire devices found

Dim Cel As Integer
Dim Cel_frac_bit As Byte
Dim Subzero As Byte
Dim Temp As Integer

'Temp variables
Dim B As Byte
Dim B1 As Byte
Dim B2 As Byte
Dim I As Byte
Dim W As Word

Const Ds18b20_conf_reg = 4

' constant to convert the fraction bits to cel*(10^-4)
Const Ds18x20_fracconv = 625

' DS18x20 ROM ID
Const Ds18s20_id = &H10
Const Ds18b20_id = &H28

' COMMANDS
Const Ds18x20_convert_t = &H44
Const Ds18x20_read = &HBE
Const Ds18x20_write = &H4E
Const Ds18x20_ee_write = &H48
Const Ds18x20_ee_recall = &HB8
Const Ds18x20_read_power_supply = &HB4

'LCD config
Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
Config Lcd = 16 * 1a

Config 1wire = Pb.4                                         ' DS1820 on Port B.4 (mega8 pin 18)

Cursor Off
Cls

Lcd "1-wire DS18x20"
Wait 1
Cls

' Gather ROM ID for all 1-wire devices
Cnt1wire = 1wirecount()
If Cnt1wire > Max1wire Then
  Cnt1wire = Max1wire
End If

B = 1
Dsid(b) = 1wsearchfirst()
For I = 1 To Cnt1wire
  B = B + 8
  Dsid(b) = 1wsearchnext()
Next

' Show what we found on the bus
B1 = 1
B2 = 8
For I = 1 To Cnt1wire
  Cls
  If Dsid(b2) = Crc8(dsid(b1) , 7) Then
    Lcd "CRC OK sensor " ; I
    Waitms 500
    Cls
    Lcd "ROM ID "
    For B = B1 To B2
      Lcd Hex(dsid(b))
    Next
  Else
    Lcd "CRC BAD sensor " ; I
  End If
  Wait 1
  B1 = B1 + 8
  B2 = B2 + 8
Next

' Monitor temperature sensors
Do
  Convallt
  Waitms 750

  B = 1
  For I = 1 To Cnt1wire

    If Dsid(b) = Ds18s20_id Or Dsid(b) = Ds18b20_id Then    ' Only process TEMP sensors
      1wverify Dsid(b)                                      'Issues the "Match ROM "
      If Err = 1 Then
        Cls
        Lcd "18x20 not on bus"                              'where did it go?
      Elseif Err = 0 Then
        1wwrite Ds18x20_read
        Sc(1) = 1wread(9)
        If Sc(9) = Crc8(sc(1) , 8) Then
          Call Disp_temp(i , B)
          If I < Cnt1wire Then                              ' if more 1-wire devices.
             Wait 1
          End If
        End If
      End If
    End If

    B = B + 8
  Next

Loop

End

'Makes the Dallas "Convert T" command on the 1w-bus configured in "Config 1wire = Portb. "
'WAIT 200-750 ms after issued, internal conversion time for the sensor
'SKIPS ROM - so it makes the conversion on ALL sensors on the bus simultaniously
'When leaving this sub, NO sensor is selected, but ALL sensors has the actual
'temperature in their scratchpad ( within 750 ms )
Sub Convallt
 1wreset                                                    ' reset the bus
 1wwrite &HCC                                               ' skip rom
 1wwrite Ds18x20_convert_t
End Sub

'   output is:
'   - cel full celsius
'   - fractions of celsius in millicelsius*(10^-1)/625 (the 4 LS-Bits)
'   - subzero =0 positiv / 1 negativ
Sub Meas_to_cel(offset As Byte)
 Dim Meas As Word

 Meas = 0
 Meas = Makeint(sc(1) , Sc(2))

 ' 18S20 is only 9bit upscale to 12bit
 If Dsid(offset) = Ds18s20_id Then
   Meas = Meas And &HFFFE
   Shift Meas , Left , 3
   B1 = 16 - Sc(6)
   B1 = B1 - 4
   Meas = Meas + B1
 End If

 If meas.15 = 1 Then
   Subzero = 1
   ' convert to +ve, (two's complement)++
   Meas = Meas Xor &HFFFF
   Incr Meas
 Else
   Subzero = 0
 End If

 If Dsid(offset) = Ds18b20_id Then
   B1 = Sc(ds18b20_conf_reg)
   ' clear undefined bit for != 12bit
   If B1.5 = 1 And B1.6 = 1 Then                            ' 12 bit
    ' nothing
   Elseif B1.6 = 1 Then                                     ' 11 bit
     Meas = Meas And &HFFFE
   Elseif B1.5 = 1 Then                                     '10 bit
     Meas = Meas And &HFFFC
   Else                                                     ' 9 bit
     Meas = Meas And &HFFF8
   End If
 End If

 Cel = Meas
 Shift Cel , Right , 4
 Cel_frac_bit = Meas And &HF
End Sub

' input: cel, cel_frac_bit, subzero
' output: temp (as decicelsius)
' ie 289 = 28.9C
Sub Temp_to_decicel
  Temp = Cel_frac_bit * Ds18x20_fracconv
  Temp = Temp / 1000
  Cel = Cel * 10
  Temp = Temp + Cel
  If Subzero = 1 Then
     Restore Rounding
     For B1 = 1 To 8
        Read B2
        If Cel_frac_bit = B2 Then
          Incr Temp
          Exit For
        End If
     Next
  End If
End Sub

' Display the temperature
' INPUT: temp
Sub Disp_temp(cnt As Byte , Offset As Byte)
  Call Meas_to_cel(offset)
  Call Temp_to_decicel

  Cls
  Lcd "TEMP " ; Cnt ; " "
  If Subzero = 1 Then
    Lcd "-"
  Else
    Lcd "+"
  End If

  W = Temp / 10
  B1 = Temp Mod 10
  Lcd W ; "." ; B1
  Lcd " C"
End Sub

Rounding:
Data 1 , 3 , 4 , 6 , 9 , 11 , 12 , 14

Слишком мудрено, но сделано качественно

+1

3

Спасибо! Буду ковырять.

0

4

Ковыряю этот код, при компиляции 9.21 кБ получается... как уменьшить можно?

0

5

maxab написал(а):

при компиляции 9.21 кБ получается

hex или bin?

0

6

Hex

0

7

MACTEPok написал(а):

Слишком мудрено, но сделано качественно

Если кто чего в этом коде может обяснить где считываются  номера датчиков которые потом можно записать в память мк  , если не трудно прокоментируйте пожалуйста это в програме на руском .

Отредактировано olegkaras (2018-06-15 23:52:19)

0

8

olegkaras написал(а):

Если кто чего в этом коде может обяснить где считываются  номера датчиков которые потом можно записать в память мк  , если не трудно прокоментируйте пожалуйста это в програме на руском .

Вот здесь Исследование Ds18b20 (датчик температуры)
Пост 2.
Комментов навалом... ;)

Применительно к приведенному тут коду:

Cnt1wire = 1wirecount()                              - Подсчет количества 1-Wire устройств на линии
If Cnt1wire > Max1wire Then
  Cnt1wire = Max1wire
End If

B = 1
Dsid(b) = 1wsearchfirst()                             - Считывание ID первого из откликнувшихся
For I = 1 To Cnt1wire
  B = B + 8
  Dsid(b) = 1wsearchnext()                          - Считывание ID следующих
Next

Считывание ID будет выполняться не по очередности подключения, а в порядке, определяемом характеристиками конкретных устройств.
Например, из 4 устройств на линии они могут прочитаться в порядке 3-1-2-4, могут 4-1-2-3...

Я считывал ID поштучно, списывая полученные данные вручную.

Отредактировано Nord (2018-06-16 00:15:23)

0

9

Nord написал(а):

Например, из 4 устройств на линии они могут прочитаться в порядке 3-1-2-4, могут 4-1-2-3...

Вот тут нужно ПОЯСНИТЬ, чтобы небыло непоняток - если эти ЧЕТЫРЕ датчика не менялись, определение и считывание Id будет ВСЕГДА одинаковым, т.е. если датчики считались (first-next) в порядке 3-1-2-4 то и при последующих операциях они будут считываться в ТОМ-ЖЕ порядке. Если кому непонятен алгоритм определения Id OneWire - в инете есть Русское описание алгоритма.
Коротко могу пояснить алгоритм:
Если у нас (к примеру) первый бит у датчиков ОДИНАКОВ - то инверсия этих битов и OR даст одно и то-же число, 0 или 1.
Если бит не одинаковы, инверсия и OR даст 1.
Механизм сначала определяет первый датчик и он всегда будет определяться как первый (если датчики не менялись)
Далее второй и тд...

0

10

olegkaras
Чем закончилась эпопея с нечитаемым датчиками ?

0

11

Nord написал(а):

olegkaras
Чем закончилась эпопея с нечитаемым датчиками ?

Разбираюсь как подправить код под ds18s20.

0

12

olegkaras написал(а):

Разбираюсь как подправить код под ds18s20

А у вас точно датчики DS18S20?

0

13

olegkaras написал(а):

Разбираюсь как подправить код под ds18s20.

Есть уверенность, что S20 ?
ID подтверждают ?

0

14

Я подключал датчик к контролеру мастер кит BM8036 и он работает . а этот контролер работает по моему только с ds18b,s20 датчиками . Аесли я датчик подключаю к градуснику который работает только с ds18b20 то показывает 0 градусов.

Отредактировано olegkaras (2018-06-20 19:05:08)

0

15

olegkaras написал(а):

Я подключал датчик к контролеру мастер кит BM8036 и он работает . а этот контролер работает по моему только с ds18b,s20 датчиками . Аесли я датчик подключаю к градуснику который работает только с ds18b20 то показывает 0 градусов.

Вот, если честно, то не знаю и знать не хочу, что за "мастер кит BM8036 "... ;)

Просто, тупо, на МК - что датчики отвечают ?

0

16

olegkaras написал(а):

если я датчик подключаю к градуснику который работает только с ds18b20 то показывает 0 градусов.

Если бы был DS18S20 то показывал бы не 0 градусов, а не ту температуру что на самом деле.

0

17

Вот ещё один "наступил" на грабли  :D
Со мной то-же это было, но только давно. Мой тебе совет - разбей всю работу с датчиками на подпрограммы. Их будет не много.
1 - определение ID и сохранение их либо по ID , либо по собственным номерам (1-комната, 2-чердак,3-улица... к примеру) с записью этих ID в EEPROM или в контроллер.
2 - команда для старта измерения ВСЕХ датчиков без паузы в 755мс
3 - команда выбора датчика по номеру (см. п. 1)
4 - команда чтения RAM датчика и вычисление температуры и CRC
5 - служебная процедура для конфигурирования (записи в EEPROM датчика) точности, алармов и флагов (кури даташит!)
Всё!
В базе данных ID датчиков я добавил флаговое поле, в котором есть флаг присутствия датчика на шине, точность его измерения и флаг новый-старый (кури даташит!)
По первому байту ID определяется ТИП устройства 1-Wire, поэтому подпрограммы будут в той или иной степени универсальны!
На каждом этапе работь обязательно КОНТРОЛИРОВАТЬ отклик датчиков на команду Reset ну и естественно CRC !!!
Девайс, который был запилен мной ещё зимой работает до сих пор и не было ни одного сбоя, даже если происходило повреждение шлейфа 18В20 или сбой питания или КЗ или другая аварийная ситуация.
///
Библу и исходник не выкладываю потому, что большинство жизненно-важных библиотек переписано лично мной, либо написано с "нуля". Да, и в основном эти вещи пишутся нестандартно и с применением "извратов" на чистом ассемблере, что довольно трудно для понимания а комментариев там нет.
Что-бы не быть голословным - поищите тут лично мою библу для LCD20х4 - в ней работают одновременно несколько дисплеев, корректно работает управление подсветкой и с зимы до этого времени небыло ни одного глюка с дисплеем.

+1

18

Покажите в каком месте править код чтоб работал DS18S20 ?

Код:
$regfile = "m32def.dat"       ' мега32
$crystal = 8000000
$baud = 4800
$hwstack = 120      ' default use 32 for the hardware stack
$swstack = 120      ' default use 10 for the SW stack
$framesize = 120    ' default use 40 for the frame space

Config Timer0 = Timer , Prescale = 1024       'настройка прерывания Pulse по таймеру
On Timer0 Pulse:
Enable Interrupts
Enable Timer0

Config Watchdog = 2048
Start Watchdog

'********************* Установки Дисплея и Инициализация ***********************

Nokia_spi_data Alias Portc.4 : Config Portc.4 = Output       'SDA       - можно задать любую ножку
Nokia_spi_clock Alias Portc.7 : Config Portc.7 = Output       'SCLK        - можно задать любую ножку
Nokia_cs Alias Portc.5 : Config Portc.5 = Output       'CS         - можно задать любую ножку
Display_reset Alias Portc.6 : Config Portc.6 = Output       'LCD_RESET  - можно задать любую ножку
Display_reset = 1
Nokia_cs = 1

Declare Sub Nokia_init()
Declare Sub Nokia_clear()
Declare Sub Nokia_text(byval Nokia_x As Byte , Byval Nokia_y As Byte , Byval Nokia_text As String , Byval Nokia_inversion As Byte)
Declare Sub Nokia_picture(bylabel Nokia_label As Word)

Dim W As Iram Word At 8 Overlay
Dim Nokia_data_9 As Integer

Call Nokia_init()   ' Инициализируем дисплей


'*******************************************************************************
Config Portb.3 = Input , Portb.4 = Input , Porta.0 = Input , Portb.6 = Input , Portb.2 = Input
Set Portb.3 : Set Portb.4 : Set Porta.0 : Set Portb.6 : Set Portb.2
Plus_xk Alias Pinb.3 : Minus_xk Alias Pinb.4 : Plus_mk Alias Pina.0 : Minus_mk Alias Pinb.6 : Ok Alias Pinb.2

Config 1wire = Portd.7 : Ds18b20 Alias Pind.7


Dim I1 As Integer , T_xk As Integer , I1_sum As Integer
Dim I2 As Integer , T_k_xk As Integer
Dim I3 As Integer , T_mk As Integer
Dim I4 As Integer
Dim I5 As Integer , T_k_mk As Integer
Dim I6 As Integer
Dim T_kom_xk As Byte , T_kom_mk As Byte , Bk_kom_xk As Integer , Bk_kom_mk As Integer , T_kom_xk_nov As Byte , T_kom_mk_nov As Byte , Bk_kom_xk_nov As Integer , Bk_kom_mk_nov As Integer

Dim T_kom_xk_eram As Byte , T_kom_mk_eram As Byte , Bk_kom_xk_eram As Integer , Bk_kom_mk_eram As Integer

'Dim T_kom_xk_eram As Eram Byte , T_kom_mk_eram As Eram Byte , Bk_kom_xk_eram As Eram Integer , Bk_kom_mk_eram As Eram Integer

Dim Strin_univ As String * 6
Dim Plus_xk_2 As Bit , Minus_xk_2 As Bit , Plus_mk_2 As Bit , Minus_mk_2 As Bit , Pod_4 As Bit , Pod_5 As Bit , Pod_6 As Bit , Pod_7 As Bit , Pod_8 As Bit , Pod_9 As Bit , Pod_10 As Bit , Pod_11 As Bit , Menu As Word , Ok_2 As Bit

Dim Number_1_eram As Byte , Number_2_eram As Byte , Number_3_eram As Byte , Number_4_eram As Byte , Number_5_eram As Byte , Number_6_eram As Byte

'Dim Number_1_eram As Eram Byte , Number_2_eram As Eram Byte , Number_3_eram As Eram Byte , Number_4_eram As Eram Byte , Number_5_eram As Eram Byte , Number_6_eram As Eram Byte
Dim Kursor_1 As Byte , Kursor_2 As Byte , Kursor_3 As Byte , Kursor_4 As Byte , Kursor_5 As Byte , Kursor_6 As Byte , Kursor_7 As Byte , Kursor_8 As Byte , Kursor_9 As Byte , Kursor_10 As Byte , Kursor_11 As Byte , Kursor_12 As Byte , Kursor_13 As Byte , Kursor_14 As Byte , Kursor_15 As Byte
Dim Kursor_16 As Byte , Kursor_17 As Byte , Kursor_18 As Byte , Kursor_19 As Byte , Kursor_20 As Byte , Kursor_21 As Byte , Kursor_22 As Byte , Kursor_23 As Byte
Dim Number_1 As Byte , Number_1_nov As Byte , Number_2 As Byte , Number_2_nov As Byte , Number_3 As Byte , Number_3_nov As Byte , Number_4 As Byte , Number_4_nov As Byte , Number_5 As Byte , Number_5_nov As Byte , Number_6 As Byte , Number_6_nov As Byte
Dim Uskor_1 As Byte , Uskor_2 As Byte
Dim Errord1 As Bit , Errord2 As Bit , Errord3 As Bit , Errord4 As Bit , Errord5 As Bit , Errord6 As Bit
Dim A As Byte , B As Byte , C As Byte , D As Byte
Dim Count1 As Byte , Sec_1 As Integer , Pusk_1 As Bit , Count2 As Byte , Sec_2 As Integer , Pusk_2 As Bit , Count3 As Byte , Sec_3 As Byte , Pusk_3 As Bit
Dim Ust_xk As Integer , Ust_mk As Integer , Ust_xk_nov As Integer , Ust_mk_nov As Integer , Ust_xk_eram As Integer , Ust_mk_eram As Integer
Dim Kursor_24 As Byte , Kursor_25 As Byte , Kursor_26 As Byte , Kursor_27 As Byte , Kursor_28 As Byte , Kursor_29 As Byte , Kursor_30 As Byte , Kursor_31 As Byte , Kursor_32 As Byte , Kursor_33 As Byte , Kursor_34 As Byte , Kursor_35 As Byte
Dim Kursor_36 As Byte , Kursor_37 As Byte , Kursor_38 As Byte , Kursor_39 As Byte , Kursor_40 As Byte , Kursor_41 As Byte , Kursor_42 As Byte , Kursor_43 As Byte , Kursor_44 As Byte , Kursor_45 As Byte
Dim Pauza As Integer
 Dim Pod_100 As Bit , Pod_101 As Bit , Pod_102 As Bit , Pod_103 As Bit
 Dim K1 As Byte , Er_1 As Byte , K2 As Byte , Er_2 As Byte , K3 As Byte , Er_3 As Byte , K4 As Byte , Er_4 As Byte , K5 As Byte , Er_5 As Byte , K6 As Byte , Er_6 As Byte
 Dim Hh As Byte , Mm As Byte , Ss As Byte , Sec_razm As Integer , Temp_tena As Integer
 Dim Pusk_4 As Bit , Count4 As Byte , Pusk_5 As Bit , Count5 As Byte
 Dim Hh_eram As Byte , Hh_nov As Byte , Mm_eram As Byte , Mm_nov As Byte , Sec_razm_eram As Integer , Sec_razm_nov As Integer
 Dim Ust_cikl As Byte , Ust_cikl_nov As Byte , Ust_cikl_eram As Byte , Ust_time_razm As Integer , Ust_time_razm_nov As Integer , Ust_time_razm_eram As Integer , Ust_time_min As Integer , Ust_time_min_nov As Integer , Ust_time_min_eram As Integer , Ust_time_max As Byte , Ust_time_max_nov As Byte , Ust_time_max_eram As Byte

 Dim 1_id_ds18b20(8) As Byte
 Dim 2_id_ds18b20(8) As Byte
 Dim 3_id_ds18b20(8) As Byte
 Dim 4_id_ds18b20(8) As Byte
 Dim 5_id_ds18b20(8) As Byte
 Dim 6_id_ds18b20(8) As Byte

'-------------------------------------------------------------------------------
 Dim Adres_id_ds18b20 As Word


 Declare Sub Opros_id_ds18b20()

 Declare Function Zapros_kolichestva_ds18b20() As Integer       'Функция запроса количества датчиков Ds18b20 на линии
 Dim Kolichestvo_ds18b20 As Integer       'Word/Integer переменная для посчета количества датчиков на линии

 Declare Sub Save_eeprom_id_ds18b20()
 Dim Id_ds18b20(8) As Byte

 Declare Sub Reading_eeprom_id_ds18b20()

Config Portd.3 = Output , Portd.4 = Output , Portd.5 = Output , Portd.6 = Output

Komp_xk Alias Portd.3 : Komp_mk Alias Portd.4 : Fan_xk Alias Portd.5 : Fan_mk Alias Portd.6
Контроль Alias Porta.4 : Config Контроль = Output
Контроль_2 Alias Portb.7 : Config Контроль_2 = Output
Тен Alias Portd.0 : Config Тен = Output
'===============================================================================
'     Настройка прерывания INT0 и TIMER1, детекция перехода фазы через "0"
'===============================================================================
 'Настраиваем вывод на вход и подтягиваем к "-", но этой подтяжки мало, смотреть схему
  Config Pind.2 = Input : Reset Portd.2

 'Прерывание срабатывает по нарастанию уровня   Rising (по переднему фронту) ; Falling (по заднему фронту) ; Low Level (по низкому уровню)
  Config Int0 = Rising

 'Ссылка на подпрограмму обработчика прерывания INT0, переход фазы через "0"
  On Int0 Обработка_прерывания_int0 Nosave       ' После прерывания идем в подпрограмму обработки прерывания

  'Eifr.intf0 = 1                                            ' Сбрасываем флаг прерывания INT0
  Enable Int0       ' Разрешаем прерывания INT0

Enable Timer1

Call Nokia_clear()  'очищаем дисплей
'считываем адреса устройств на шине 1-Wire
                                            ' ищем колличество устройств  на линии



Readeeprom Number_1_eram , 80
Number_1 = Number_1_eram       'чтение уставки номера первого дадчика
 Number_1_nov = Number_1

Readeeprom Number_2_eram , 90
Number_2 = Number_2_eram       'чтение уставки номера второго дадчика
 Number_2_nov = Number_2

Readeeprom Number_3_eram , 100
Number_3 = Number_3_eram       'чтение уставки номера третьего дадчика
 Number_3_nov = Number_3

Readeeprom Number_4_eram , 110
Number_4 = Number_4_eram       'чтение уставки номера четвертого дадчика
 Number_4_nov = Number_4

Readeeprom Number_5_eram , 120
Number_5 = Number_5_eram       'чтение уставки номера пятого дадчика
 Number_5_nov = Number_5

Readeeprom Number_6_eram , 130
 Number_6 = Number_6_eram       'чтение уставки номера шестого дадчика
 Number_6_nov = Number_6

Readeeprom T_kom_xk_eram , 140
 T_kom_xk = T_kom_xk_eram       'чтение уставки - темп. вк.обдува  комп ХК
 T_kom_xk_nov = T_kom_xk

Readeeprom T_kom_mk_eram , 150
 T_kom_mk = T_kom_mk_eram       'чтение уставки - темп. вк.обдува комп MК
 T_kom_mk_nov = T_kom_mk

 Readeeprom Bk_kom_xk_eram , 160
  Bk_kom_xk = Bk_kom_xk_eram       'чтение уставки -  вк./от комп (время) ХК
 Bk_kom_xk_nov = Bk_kom_xk

 Readeeprom Bk_kom_mk_eram , 170
 Bk_kom_mk = Bk_kom_mk_eram       'чтение уставки -  вк./от комп (время) MК
 Bk_kom_mk_nov = Bk_kom_mk

 Readeeprom Ust_xk_eram , 180
 Ust_xk = Ust_xk_eram       'чтение уставки -  темп ХК
 Ust_xk_nov = Ust_xk

 Readeeprom Ust_mk_eram , 190
 Ust_mk = Ust_mk_eram       'чтение уставки -  темп MК
 Ust_mk_nov = Ust_mk

 Readeeprom Ust_cikl_eram , 200
 Ust_cikl = Ust_cikl_eram       'чтение уставки -  цыкл расморозки в часах MК
 Ust_cikl_nov = Ust_cikl

 Readeeprom Ust_time_razm_eram , 210
 Ust_time_razm = Ust_time_razm_eram       'чтение уставки -  время разморозки в секундах
 Ust_time_razm_nov = Ust_time_razm

 Readeeprom Ust_time_min_eram , 220
 Ust_time_min = Ust_time_min_eram       'чтение уставки -  минимальная температура при которой разрешается разморозка
 Ust_time_min_nov = Ust_time_min

 Readeeprom Ust_time_max_eram , 230
 Ust_time_max = Ust_time_max_eram       'чтение уставки -  максимальная температура при которой отключается разморозка
 Ust_time_max_nov = Ust_time_max

 Readeeprom Hh_eram , 240
 Hh = Hh_eram       'чтение часов - время работы компресора МК (до разм)
 Hh_nov = Hh

 Readeeprom Mm_eram , 250
 Mm = Mm_eram       'чтение минут - время работы компресора МК ( до разм)
 Mm_nov = Mm

 Readeeprom Sec_razm_eram , 260
 Sec_razm = Sec_razm_eram       'чтение секунд - время работы тена     (времяразм)
 Sec_razm_nov = Sec_razm

 Sec_1 = Bk_kom_xk
Sec_2 = Bk_kom_mk

Контроль = 1
'Ss = 20
 'mm=58

Kolichestvo_ds18b20 = 1wirecount()       'Запрос количества датчиков Ds18b20 на линии

Do



 If Pod_10 = 0 Then



'*******************************************************************************
'********* Подпрограмма чтения ID DS18B20 из EEPROM контроллера ****************
'*******************************************************************************
'-------------------------------------------------------------------------------

'-------------------------------
  Adres_id_ds18b20 = 28
'-----------------------

    For A = 1 To Kolichestvo_ds18b20



      For B = 1 To 8

        Readeeprom Id_ds18b20(b) , Adres_id_ds18b20


          Select Case Adres_id_ds18b20
            Case 10 To 19 : 1_id_ds18b20(b) = Id_ds18b20(b)
            Case 20 To 29 : 2_id_ds18b20(b) = Id_ds18b20(b)
            Case 30 To 39 : 3_id_ds18b20(b) = Id_ds18b20(b)
            Case 40 To 49 : 4_id_ds18b20(b) = Id_ds18b20(b)
            Case 50 To 59 : 5_id_ds18b20(b) = Id_ds18b20(b)
            Case 60 To 69 : 6_id_ds18b20(b) = Id_ds18b20(b)


            Case Else
          End Select

           Incr Adres_id_ds18b20
         Next B
       Adres_id_ds18b20 = Adres_id_ds18b20 + 2
      Waitms 250    'Пауза ~ 500ms


    Next A



If A >= Kolichestvo_ds18b20 Then
Pod_10 = 1


End If


End If



'****************** ПОИСК ДАТЧИКОВ *******************
If Menu = 11 Or Pod_9 = 1 Then

Pod_9 = 1

'********* Подпрограмма поиска и записи ID DS18B20 в EEPROM контроллера ********
'*******************************************************************************
'-------------------------------------------------------------------------------

'--------------------------------------------
'========= Первый датчик ==========
  Id_ds18b20(1) = 1wsearchfirst()       'Посылаем запрос и получаем ответ в виде 8-ми байтного адреса первому датчику
'==================================
     D = 1



    Adres_id_ds18b20 = 10       'Начинаем с 10 адреса (просто для удобства (первый датчик - 10 адрес, второй датчик - 20 адрес и т.д. ))
      For B = 1 To 8       'Работаем с 8 байтами первого, считанного ID DS18B20

          Writeeeprom Id_ds18b20(b) , Adres_id_ds18b20       'Записываем в установленную ранее ячейку памяти контроллера
         Waitms 5   'Пауза ~ 5ms
        Incr Adres_id_ds18b20       'Увеличиваем адрес на 1
      Next B        'Повторяем для всего значения считанного ID  первого датчика
     Waitms 250     'Пауза ~ 500ms


'------- Следующие  датчики --------
  For D = 2 To Kolichestvo_ds18b20
'===================================
    Id_ds18b20(1) = 1wsearchnext()       'Посылаем запрос и получаем ответ в виде 8-ми байтного адреса следующему датчику
'===================================
      Adres_id_ds18b20 = Adres_id_ds18b20 + 2       'Увеличиваем адрес на 2, что-бы получить следующий, целый десяток(для удобства)


        For B = 1 To 8       'Работаем с 8 байтами следующего, считанного ID DS18B20

          Writeeeprom Id_ds18b20(b) , Adres_id_ds18b20       'Записываем в установленную ранее ячейку памяти контроллера
            Waitms 5       'Пауза ~ 5ms
          Incr Adres_id_ds18b20       'Увеличиваем адрес на 1
        Next B      'Повторяем для всего значения считанного ID следующего датчика
      Waitms 250    'Пауза ~ 500ms


  Next D            'Переходим к поиску следующего датчика
If D >= Kolichestvo_ds18b20 Then
Pod_9 = 0
Menu = 10
Pod_10 = 0
End If


End If

If Pauza = 1 Then
1wreset             'запускаем опрос всех датчиков
   1wwrite &HCC
   1wwrite &H44
'Waitms 350
End If
Pauza = Pauza + 1

'** моточасы МК**
 If Ss > 59 Then : Mm = Mm + 1 : Ss = 0
 End If
 If Mm > 59 Then : Hh = Hh + 1 : Mm = 0
 End If
'** Управление разморозкой**

If Hh >= Ust_cikl And Ust_time_min < Temp_tena Then : Тен = 0 : Hh = 0 : Mm = 0 : Ss = 0 : Sec_razm = 0 : Pusk_5 = 0       ' запрещаем разморозку если компресор отработал установленное время и температура испарителя  больше установленной
End If
If Hh >= Ust_cikl And Ust_time_min >= Temp_tena Then : Тен = 1 : Pusk_5 = 1       'включаем тен и выключаем компресора, пуск таймера работы тена если компресор отработал установленное время и температура испарителя не больше установленной
Else
Тен = 0
End If

If Sec_razm >= Ust_time_razm Then : Тен = 0 : Hh = 0 : Mm = 0 : Ss = 0 : Sec_razm = 0 : Pusk_5 = 0       'если время работы тена больше уставки то прекращаем разморозку
End If


'** меню настроек**
Ok_2 = Ok
Plus_xk_2 = Plus_xk
Minus_xk_2 = Minus_xk
Plus_mk_2 = Plus_mk
Minus_mk_2 = Minus_mk


If Ok_2 = 0 And Pod_4 = 0 Then

If Menu > 20 And Menu < 30 Or Menu > 30 And Menu < 40 Then       ' Вход в выполнение действий меню   №2  (выбор номера датчика)
Menu = Menu * 10
Call Nokia_clear()  'очищаем дисплей
End If

If Menu > 40 And Menu < 50 Then       ' Вход в выполнение действий меню   №2  (выбор номера датчика)
Menu = Menu * 10
Call Nokia_clear()  'очищаем дисплей
End If

If Menu = 10 Or Menu = 20 Or Menu = 30 Or Menu = 40 Or Menu = 50 Then       ' Вход в подменю №1,2
Menu = Menu + 1
Call Nokia_clear()  'очищаем дисплей
End If

If Menu = 0 Then    ' Вход в меню
Menu = 10
Call Nokia_clear()  'очищаем дисплей
End If



Pod_4 = 1
Else                'Иначе
'If Menu >= 200 Then
'Menu = 0                                                    'Иначе
'End If                                                      'выход из условия
If Ok_2 = 1 And Pod_4 = 1 Then
Pod_4 = 0           'Иначе
End If              'выход из условия
End If


   '** кнопка плюс ХК**
If Plus_xk_2 = 0 Then
If Pod_5 = 0 Then


 If Menu = 0 Then : Ust_xk = Ust_xk + 1       'уставка температурі ХК
If Ust_xk >= 10 Then : Ust_xk = -2
End If
End If



If Menu = 210 Then : Number_1 = Number_1 + 1       'выбор номера дадчика ХК
If Number_1 > 6 Then : Number_1 = 1
End If
End If

If Menu = 220 Then : Number_2 = Number_2 + 1       'выбор номера дадчика КОМП.ХК
If Number_2 > 6 Then : Number_2 = 1
End If
End If

If Menu = 230 Then : Number_3 = Number_3 + 1       'выбор номера дадчика МК_верх
If Number_3 > 6 Then : Number_3 = 1
End If
End If

If Menu = 240 Then : Number_4 = Number_4 + 1       'выбор номера дадчика МК.низ
If Number_4 > 6 Then : Number_4 = 1
End If
End If

If Menu = 250 Then : Number_5 = Number_5 + 1       'выбор номера дадчика КОМП.ХК
If Number_5 > 6 Then : Number_5 = 1
End If
End If

If Menu = 260 Then : Number_6 = Number_6 + 1       'выбор номера дадчика ПОМЕЩЕНИЕ
If Number_6 > 6 Then : Number_6 = 1
End If
End If

If Menu = 310 Then : T_kom_xk = T_kom_xk + 1       'уставка- вкл. обдува компресора ХК
If T_kom_xk > 120 Then : T_kom_xk = 0
End If
End If

If Menu = 320 Then : T_kom_mk = T_kom_mk + 1       'уставка- вкл. обдува компресора МК
If T_kom_mk > 120 Then : T_kom_mk = 0
End If
End If

If Menu = 330 Then : Bk_kom_xk = Bk_kom_xk + 1       'уставка- вкл.  компресора ХК
If Bk_kom_xk > 999 Then : Bk_kom_xk = 0
End If
End If

If Menu = 340 Then : Bk_kom_mk = Bk_kom_mk + 1       'уставка- вкл.  компресора МК
If Bk_kom_mk > 999 Then : Bk_kom_mk = 0
End If
End If

If Menu = 410 Then : Ust_cikl = Ust_cikl + 1       'уставка- цыкл расморозки в часах MК
If Ust_cikl > 100 Then : Ust_cikl = 0
End If
End If

If Menu = 420 Then : Ust_time_razm = Ust_time_razm + 1       'уставка- время разморозки в секундах
If Ust_time_razm > 999 Then : Ust_time_razm = 0
End If
End If

If Menu = 430 Then : Ust_time_min = Ust_time_min + 1       'уставка- минимальная температура при которой разрешается разморозка
If Ust_time_min > 0 Then : Ust_time_min = -15
End If
End If

If Menu = 440 Then : Ust_time_max = Ust_time_max + 1       'уставка- максимальная температура при которой отключается разморозка
If Ust_time_max > 20 Then : Ust_time_max = 0
End If
End If


If Menu > 20 And Menu < 30 Then       'уставки выбора датчиков
If Menu > 25 Then
Menu = 21
Else
Menu = Menu + 1
End If
End If

If Menu > 30 And Menu < 40 Then       'уставки темп. комп ХК,МК и время
If Menu > 33 Then
Menu = 31
Else
Menu = Menu + 1
End If
End If

If Menu > 40 And Menu < 50 Then       'уставки розморозки
If Menu > 43 Then
Menu = 41
Else
Menu = Menu + 1
End If
End If


'If Menu >= 11 And Menu <= 19 Or Menu >= 21 And Menu <= 29 Then       'уставки выбора датчиков
'If Menu >= 26 Then
'Menu = 21
'Else
'Menu = Menu + 1
'End If
'Else
'If Menu > 9 And Menu < 29 Then : Menu = Menu + 10
'End If
'End If

If Menu = 10 Or Menu = 20 Or Menu = 30 Or Menu = 40 Then : Menu = Menu + 10       'уставки выбора датчиков

End If


Pod_5 = 1
End If

If Menu <> 0 Then
If Uskor_1 > 30 Then : Pod_5 = 0       'ускорение
Else
Uskor_1 = Uskor_1 + 1
End If
End If

Else                'Иначе                                                 'выход из условия
Pod_5 = 0
Uskor_1 = 0         'выход из условия
End If


'** кнопка минус ХК**
If Minus_xk_2 = 0 Then
If Pod_6 = 0 Then

If Menu = 0 Then    ': Ust_xk = Ust_xk - 1                      'уставка температурі ХК
If Ust_xk <= -2 Then : Ust_xk = 10
Else
Ust_xk = Ust_xk - 1
End If
End If

If Menu = 210 Then  ': Number_1 = Number_1 - 1                'выбор номера дадчика ХК
If Number_1 <= 1 Then : Number_1 = 6
Else
      : Number_1 = Number_1 - 1
End If
End If

If Menu = 220 Then  ': Number_2 = Number_2 - 1                'выбор номера дадчика КОМП.ХК
If Number_2 <= 1 Then : Number_2 = 6
Else
Number_2 = Number_2 - 1
End If
End If

If Menu = 230 Then  ': Number_3 = Number_3 - 1                'выбор номера дадчика МК.верх
If Number_3 <= 1 Then : Number_3 = 6
Else
Number_3 = Number_3 - 1
End If
End If

If Menu = 240 Then  ': Number_4 = Number_4 - 1                'выбор номера дадчика МК.низ
If Number_4 <= 1 Then : Number_4 = 6
Else
Number_4 = Number_4 - 1
End If
End If

If Menu = 250 Then  ': Number_5 = Number_5 - 1                'выбор номера дадчика КОМП.ХК
If Number_5 <= 1 Then : Number_5 = 6
Else
Number_5 = Number_5 - 1
End If
End If

If Menu = 260 Then  ': Number_6 = Number_6 - 1                'выбор номера дадчика ПОМЕЩЕНИЕ
If Number_6 <= 1 Then : Number_6 = 6
Else
Number_6 = Number_6 - 1
End If
End If

If Menu = 310 Then  ': T_kom_xk = T_kom_xk - 1                'уставка- вкл. обдува компресора ХК
If T_kom_xk <= 0 Then : T_kom_xk = 120
Else
T_kom_xk = T_kom_xk - 1
End If
End If

If Menu = 320 Then  ': T_kom_mk = T_kom_mk - 1                'уставка- вкл. обдува компресора MК
If T_kom_mk <= 0 Then : T_kom_mk = 120
Else
T_kom_mk = T_kom_mk - 1
End If
End If

If Menu = 330 Then  ': Bk_kom_xk = Bk_kom_xk - 1              'уставка- вкл.  компресора ХК
If Bk_kom_xk <= 0 Then : Bk_kom_xk = 999
Else
Bk_kom_xk = Bk_kom_xk - 1
End If
End If

If Menu = 340 Then  ': Bk_kom_mk = Bk_kom_mk - 1              'уставка- вкл.  компресора MК
If Bk_kom_mk <= 0 Then : Bk_kom_mk = 999
Else
Bk_kom_mk = Bk_kom_mk - 1
End If
End If

If Menu = 410 Then  ': Cikl_razm = Cikl_razm - 1              'уставка- цыкл расморозки в часах MК
If Ust_cikl <= 0 Then : Ust_cikl = 100
Else
Ust_cikl = Ust_cikl - 1
End If
End If

If Menu = 420 Then  ': Time_razmor = Time_razmor - 1          'уставка- время разморозки в секундах
If Ust_time_razm <= 0 Then : Ust_time_razm = 999
Else
Ust_time_razm = Ust_time_razm - 1
End If
End If

If Menu = 430 Then  ': Tem_min_razm = Tem_min_razm - 1        'уставка- минимальная температура при которой разрешается разморозка
If Ust_time_min <= -15 Then : Ust_time_min = 0
Else
Ust_time_min = Ust_time_min - 1
End If
End If

If Menu = 440 Then  ': Tem_max_razm = Tem_max_razm - 1        'уставка- максимальная температура при которой отключается разморозка
If Ust_time_max <= 0 Then : Ust_time_max = 20
Else
Ust_time_max = Ust_time_max - 1
End If
End If



If Menu > 20 And Menu < 30 Then       'уставки выбора датчиков
If Menu < 22 Then
Menu = 26
Else
Menu = Menu - 1
End If
End If

If Menu > 30 And Menu < 40 Then       'уставки темп. комп ХК,МК и время
If Menu < 32 Then
Menu = 34
Else
Menu = Menu - 1
End If
End If

If Menu > 40 And Menu < 50 Then       'уставки разморозки
If Menu < 42 Then
Menu = 44
Else
Menu = Menu - 1
End If
End If

'If Menu >= 11 And Menu <= 19 Or Menu >= 21 And Menu <= 29 Then
'If Menu <= 21 Then
'Menu = 26
'Else
'Menu = Menu - 1
'End If
'Else

'If Menu > 11 And Menu < 31 Then : Menu = Menu - 10
'End If
'End If

If Menu = 20 Or Menu = 30 Or Menu = 40 Or Menu = 50 Then : Menu = Menu - 10       'уставки выбора датчиков

End If

Pod_6 = 1
End If

If Menu <> 0 Then
If Uskor_2 > 30 Then : Pod_6 = 0       'ускорение
Else
Uskor_2 = Uskor_2 + 1
End If
End If
Else                'Иначе                                                 'выход из условия
Pod_6 = 0
Uskor_2 = 0         'выход из условия
End If

'** кнопка плюс МК**
If Plus_mk_2 = 0 And Pod_7 = 0 Then

If Menu = 0 Then : Ust_mk = Ust_mk + 1       'уставка температурі МК
If Ust_mk >= 0 Then : Ust_mk = -20
End If
End If

Pod_7 = 1
Else                'Иначе

If Plus_mk_2 = 1 And Pod_7 = 1 Then
Pod_7 = 0           'Иначе
End If              'выход из условия
End If

'** кнопка минус МК/Выход**
If Minus_mk_2 = 0 And Pod_8 = 0 Then

If Menu = 0 Then : Ust_mk = Ust_mk - 1       'уставка температурі МК
If Ust_mk <= -20 Then : Ust_mk = -1
End If
End If

If Menu = 10 Or Menu = 20 Or Menu = 30 Or Menu = 40 Or Menu = 50 Then       'выход из меню
Menu = 0
Call Nokia_clear()  'очищаем дисплей
End If

If Menu > 10 And Menu < 20 Then       'выход из подменю №1
Menu = 10
Call Nokia_clear()  'очищаем дисплей
End If

If Menu > 20 And Menu < 30 Then       'выход из подменю   №2
Menu = 20
Call Nokia_clear()  'очищаем дисплей
End If

If Menu > 30 And Menu < 40 Then       'выход из подменю   №3
Menu = 30
Call Nokia_clear()  'очищаем дисплей
End If

If Menu > 40 And Menu < 50 Then       'выход из подменю   №4
Menu = 40
Call Nokia_clear()  'очищаем дисплей
End If

If Menu > 50 And Menu < 60 Then       'выход из подменю   №5
Menu = 50
Call Nokia_clear()  'очищаем дисплей
End If

If Menu > 200 And Menu < 500 Then       'выход из выполнение действий меню   №2  (выбор номера датчика)
Menu = Menu / 10


      '***заносим в память номера датчиков  ХК ***

If Number_1_nov <> Number_1 Then       ' если уставка новая не равна старой
Number_1_nov = Number_1       'уставка новая  равна старой
Number_1_eram = Number_1
 Writeeeprom Number_1_eram , 80       'здесь заносим в память уставку
Else                'Иначе
End If              'выход из условия

   '***заносим в память номера датчиков  КОМП.ХК ***

If Number_2_nov <> Number_2 Then       ' если уставка новая не равна старой
Number_2_nov = Number_2       'уставка новая  равна старой
Number_2_eram = Number_2
Writeeeprom Number_2_eram , 90       'здесь заносим в память уставку
Else                'Иначе
End If              'выход из условия

'***заносим в память номера датчиков  МК_верх ***
If Number_3_nov <> Number_3 Then       ' если уставка новая не равна старой
Number_3_nov = Number_3       'уставка новая  равна старой
Number_3_eram = Number_3
 Writeeeprom Number_3_eram , 100       'здесь заносим в память уставку
Else                'Иначе
End If              'выход из условия

'***заносим в память номера датчиков  МК_низ ***
If Number_4_nov <> Number_4 Then       ' если уставка новая не равна старой
Number_4_nov = Number_4       'уставка новая  равна старой
Number_4_eram = Number_4
Writeeeprom Number_4_eram , 110       'здесь заносим в память уставку
Else                'Иначе
End If              'выход из условия
'***заносим в память номера датчиков  КОМП.МК ***
If Number_5_nov <> Number_5 Then       ' если уставка новая не равна старой
Number_5_nov = Number_5       'уставка новая  равна старой
Number_5_eram = Number_5
Writeeeprom Number_5_eram , 120       'здесь заносим в память уставку
Else                'Иначе
End If              'выход из условия
'***заносим в память номера датчиков  ПОМЕЩЕНИЕ ***
If Number_6_nov <> Number_6 Then       ' если уставка новая не равна старой
Number_6_nov = Number_6       'уставка новая  равна старой
Number_6_eram = Number_6
Writeeeprom Number_6_eram , 130       'здесь заносим в память уставку
Else                'Иначе
End If              'выход из условия

'***заносим в память уставку - темп. вк.обдува комп ХК ***
If T_kom_xk_nov <> T_kom_xk Then       ' если уставка новая не равна старой
T_kom_xk_nov = T_kom_xk       'уставка новая  равна старой
T_kom_xk_eram = T_kom_xk
Writeeeprom T_kom_xk_eram , 140       'здесь заносим в память уставку
Else                'Иначе
End If              'выход из условия

'***заносим в память уставку - темп. вк.обдува комп MК ***
If T_kom_mk_nov <> T_kom_mk Then       ' если уставка новая не равна старой
T_kom_mk_nov = T_kom_mk       'уставка новая  равна старой
T_kom_mk_eram = T_kom_mk
 Writeeeprom T_kom_mk_eram , 150       'здесь заносим в память уставку
Else                'Иначе
End If              'выход из условия

'***заносим в память уставку -  вк. комп XК ***
If Bk_kom_xk_nov <> Bk_kom_xk Then       ' если уставка новая не равна старой
Bk_kom_xk_nov = Bk_kom_xk       'уставка новая  равна старой
Bk_kom_xk_eram = Bk_kom_xk
 Writeeeprom Bk_kom_xk_eram , 160       'здесь заносим в память уставку
Else                'Иначе
End If              'выход из условия

'***заносим в память уставку -  вк. комп MК ***
If Bk_kom_mk_nov <> Bk_kom_mk Then       ' если уставка новая не равна старой
Bk_kom_mk_nov = Bk_kom_mk       'уставка новая  равна старой
Bk_kom_mk_eram = Bk_kom_mk
 Writeeeprom Bk_kom_mk_eram , 170       'здесь заносим в память уставку
Else                'Иначе
End If              'выход из условия

'***заносим в память уставку -  цыкл расморозки в часах MК  ***
If Ust_cikl_nov <> Ust_cikl Then       ' если уставка новая не равна старой
Ust_cikl_nov = Ust_cikl       'уставка новая  равна старой
Ust_cikl_eram = Ust_cikl
 Writeeeprom Ust_cikl_eram , 200       'здесь заносим в память уставку
Else                'Иначе
End If              'выход из условия

'***заносим в память уставку -  время разморозки в секундахК  ***
If Ust_time_razm_nov <> Ust_time_razm Then       ' если уставка новая не равна старой
Ust_time_razm_nov = Ust_time_razm       'уставка новая  равна старой
Ust_time_razm_eram = Ust_time_razm
 Writeeeprom Ust_time_razm_eram , 210       'здесь заносим в память уставку
Else                'Иначе
End If              'выход и

'***заносим в память уставку -  минимальная температура при которой разрешается разморозка  ***
If Ust_time_min_nov <> Ust_time_min Then       ' если уставка новая не равна старой
Ust_time_min_nov = Ust_time_min       'уставка новая  равна старой
Ust_time_min_eram = Ust_time_min
 Writeeeprom Ust_time_min_eram , 220       'здесь заносим в память уставку
Else                'Иначе
End If              'выход и

'***заносим в память уставку -  максимальная температура при которой отключается разморозка  ***
If Ust_time_max_nov <> Ust_time_max Then       ' если уставка новая не равна старой
Ust_time_max_nov = Ust_time_max       'уставка новая  равна старой
Ust_time_max_eram = Ust_time_max
 Writeeeprom Ust_time_max_eram , 230       'здесь заносим в память уставку
Else                'Иначе
End If              'выход и

'Ust_time_razm As Byte  Ust_time_min As Byte ,  , Ust_time_max As Byte


Call Nokia_clear()  'очищаем дисплей
End If

Pod_8 = 1
Else                'Иначе

If Minus_mk_2 = 1 And Pod_8 = 1 Then
Pod_8 = 0           'Иначе
End If              'выход из условия
End If



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

 '***заносим в память уставку -  темп ХК ***
If Ust_xk_nov <> Ust_xk Then       ' если уставка новая не равна старой
Ust_xk_nov = Ust_xk 'уставка новая  равна старой
Ust_xk_eram = Ust_xk
 Writeeeprom Ust_xk_eram , 180       'здесь заносим в память уставку
Else                'Иначе
End If

'***заносим в память уставку -  темп МК ***
If Ust_mk_nov <> Ust_mk Then       ' если уставка новая не равна старой
Ust_mk_nov = Ust_mk 'уставка новая  равна старой
Ust_mk_eram = Ust_mk
 Writeeeprom Ust_mk_eram , 190       'здесь заносим в память уставку
Else                'Иначе
End If



'***Управление компресором ХК ***
If T_xk > Ust_xk Then       'пуск Таймера 1 задержки включения/выключения ХК  №1

If Pod_101 = 0 Then : Sec_1 = Bk_kom_xk : Pod_101 = 1 : Pusk_1 = 1 : Pod_100 = 0       ' №2
End If              '№2
If Sec_1 <= 0 Or Komp_xk = 1 Then : Komp_xk = 1 : Pusk_1 = 0       '№5    вкл компр
End If              '№5

Else

If Pod_100 = 0 Then : Sec_1 = Bk_kom_xk : Pod_100 = 1 : Pusk_1 = 1 : Pod_101 = 0       ' №3
End If              '№3

If Sec_1 <= 0 Or Komp_xk = 0 Then : Komp_xk = 0 : Pusk_1 = 0       '№4   откл компр
End If              '№4
End If              '№1

'***Управление компресором МК ***
If T_mk > Ust_mk Then       'пуск Таймера 2 задержки включения/выключения МК  №1

If Pod_102 = 0 Then : Sec_2 = Bk_kom_mk : Pod_102 = 1 : Pusk_2 = 1 : Pod_103 = 0       ' №2
End If              '№2
If Sec_2 <= 0 Or Komp_mk = 1 Then : Komp_mk = 1 : Pusk_2 = 0       '№5    вкл компр
End If              '№5

Else

If Pod_103 = 0 Then : Sec_2 = Bk_kom_mk : Pod_103 = 1 : Pusk_2 = 1 : Pod_102 = 0       ' №3
End If              '№3

If Sec_2 <= 0 Or Komp_mk = 0 Then : Komp_mk = 0 : Pusk_2 = 0       '№4   откл компр
End If              '№4
End If              '№1

'***Управление обдувом ХК ***
If T_k_xk >= T_kom_xk Then       '  №1
Fan_xk = 1
Else
Fan_xk = 0
End If              '№1

'***Управление обдувом МК ***
If T_k_mk >= T_kom_mk Then       '  №1
Fan_mk = 1
Else
Fan_mk = 0
End If              '№1

'Bk_kom_xk
'Pusk_1 = 1 And Sec_1 <> 0 Then           'условые-Таймер 1 задержки включения ХК
'Sec_1



Strin_univ = Str(sec_1)       'выводим на ЛСД таймер включения ХК:
         Strin_univ = Format(strin_univ , "000")
         Call Nokia_text(0 , 8 , "ХК=" , Kursor_8)       ' отображаем датчик №6 в меню выбор датчиков
         Call Nokia_text(4 , 8 , Strin_univ , 0)
         Call Nokia_text(9 , 8 , "С" , 0)


         Strin_univ = Str(sec_2)       'выводим на ЛСД таймер включения MК:
         Strin_univ = Format(strin_univ , "000")
         Call Nokia_text(9 , 8 , "МК=" , Kursor_8)       ' отображаем датчик №6 в меню выбор датчиков
         Call Nokia_text(12 , 8 , Strin_univ , 0)
         Call Nokia_text(15 , 8 , "С" , 0)




If Pauza = 30 Then
'после ожидания начинаем считывать датчики
'---------------------------------
   '1wreset
'   1wwrite &H55
   If Number_1 = 1 Then : 1wverify 1_id_ds18b20(1)
   End If
   If Number_1 = 2 Then : 1wverify 2_id_ds18b20(1)
   End If
   If Number_1 = 3 Then : 1wverify 3_id_ds18b20(1)
   End If
   If Number_1 = 4 Then : 1wverify 4_id_ds18b20(1)
   End If
   If Number_1 = 5 Then : 1wverify 5_id_ds18b20(1)
   End If
   If Number_1 = 6 Then : 1wverify 6_id_ds18b20(1)
   End If
   If Err = 1 Then  ' проверим на ошубку чтения с 1 датчика и перейдем к подпрограмме
   If Er_1 > 3 Then : Errord1 = 1
   Else
   Er_1 = Er_1 + 1
   End If
   Else
   Errord1 = 0
   Er_1 = 0
   End If
   1wwrite &HBE
   I1 = 1wread(2)




'---------------------------------
   '1wreset
'   1wwrite &H55
   If Number_2 = 1 Then : 1wverify 1_id_ds18b20(1)
   End If
   If Number_2 = 2 Then : 1wverify 2_id_ds18b20(1)
   End If
   If Number_2 = 3 Then : 1wverify 3_id_ds18b20(1)
   End If
   If Number_2 = 4 Then : 1wverify 4_id_ds18b20(1)
   End If           ' проверим на ошубку чтения с 1 датчика и перейдем к подпрограмме
   If Number_2 = 5 Then : 1wverify 5_id_ds18b20(1)
   End If
   If Number_2 = 6 Then : 1wverify 6_id_ds18b20(1)
   End If
   If Err = 1 Then  ' проверим на ошубку чтения с 1 датчика и перейдем к подпрограмме
   If Er_2 > 3 Then : Errord2 = 1
   Else
   Er_2 = Er_2 + 1
   End If
   Else
   Errord2 = 0
   Er_2 = 0
   End If
   1wwrite &HBE
   I2 = 1wread(2)
'   '------------------------------
   '1wreset
'   1wwrite &H55
   If Number_3 = 1 Then : 1wverify 1_id_ds18b20(1)
   End If
   If Number_3 = 2 Then : 1wverify 2_id_ds18b20(1)
   End If
   If Number_3 = 3 Then : 1wverify 3_id_ds18b20(1)
   End If
   If Number_3 = 4 Then : 1wverify 4_id_ds18b20(1)
   End If           ' проверим на ошубку чтения с 1 датчика и перейдем к подпрограмме
   If Number_3 = 5 Then : 1wverify 5_id_ds18b20(1)
   End If
   If Number_3 = 6 Then : 1wverify 6_id_ds18b20(1)
   End If
   If Err = 1 Then  ' проверим на ошубку чтения с 1 датчика и перейдем к подпрограмме
   If Er_3 > 3 Then : Errord3 = 1
   Else
   Er_3 = Er_3 + 1
   End If
   Else
   Errord3 = 0
   Er_3 = 0
   End If
   1wwrite &HBE
   I3 = 1wread(2)
'---------------------------------
   '1wreset
'   1wwrite &H55
   If Number_4 = 1 Then : 1wverify 1_id_ds18b20(1)
   End If
   If Number_4 = 2 Then : 1wverify 2_id_ds18b20(1)
   End If
   If Number_4 = 3 Then : 1wverify 3_id_ds18b20(1)
   End If
   If Number_4 = 4 Then : 1wverify 4_id_ds18b20(1)
   End If           ' проверим на ошубку чтения с 1 датчика и перейдем к подпрограмме
   If Number_4 = 5 Then : 1wverify 5_id_ds18b20(1)
   End If
   If Number_4 = 6 Then : 1wverify 6_id_ds18b20(1)
   End If
   If Err = 1 Then  ' проверим на ошубку чтения с 1 датчика и перейдем к подпрограмме
   If Er_4 > 3 Then : Errord4 = 1
   Else
   Er_4 = Er_4 + 1
   End If
   Else
   Errord4 = 0
   Er_4 = 0
   End If
   1wwrite &HBE
   I4 = 1wread(2)
   '---------------------------------
  ' '1wreset
   '1wwrite &H55
   If Number_5 = 1 Then : 1wverify 1_id_ds18b20(1)
   End If
   If Number_5 = 2 Then : 1wverify 2_id_ds18b20(1)
   End If
   If Number_5 = 3 Then : 1wverify 3_id_ds18b20(1)
   End If
   If Number_5 = 4 Then : 1wverify 4_id_ds18b20(1)
   End If           ' проверим на ошубку чтения с 1 датчика и перейдем к подпрограмме
   If Number_5 = 5 Then : 1wverify 5_id_ds18b20(1)
   End If
   If Number_5 = 6 Then : 1wverify 6_id_ds18b20(1)
   End If
   If Err = 1 Then  ' проверим на ошубку чтения с 1 датчика и перейдем к подпрограмме
   If Er_5 > 3 Then : Errord5 = 1
   Else
   Er_5 = Er_5 + 1
   End If
   Else
   Errord5 = 0
   Er_5 = 0
   End If
   1wwrite &HBE
   I5 = 1wread(2)
   '---------------------------------
   '1wreset
'   1wwrite &H55
   If Number_6 = 1 Then : 1wverify 1_id_ds18b20(1)
   End If
   If Number_6 = 2 Then : 1wverify 2_id_ds18b20(1)
   End If
   If Number_6 = 3 Then : 1wverify 3_id_ds18b20(1)
   End If
   If Number_6 = 4 Then : 1wverify 4_id_ds18b20(1)
   End If           ' проверим на ошубку чтения с 1 датчика и перейдем к подпрограмме
   If Number_6 = 5 Then : 1wverify 5_id_ds18b20(1)
   End If
   If Number_6 = 6 Then : 1wverify 6_id_ds18b20(1)
   End If
   If Err = 1 Then  ' проверим на ошубку чтения с 1 датчика и перейдем к подпрограмме
   If Er_6 > 3 Then : Errord6 = 1
   Else
   Er_6 = Er_6 + 1
   End If
   Else
   Errord6 = 0
   Er_6 = 0
   End If
   1wwrite &HBE
   I6 = 1wread(2)

   Pauza = 0
   Gosub Conversion
   End If


   'Gosub Conversion
         '******************МЕНЮ НАСТРОЕК - ПОИСК и ВЫБОР ДАТЧИКОВ *******************
If Menu <> 0 Then   'Если Меню Не Равно 0 то в первой строке пишем **МЕНЮ**
Call Nokia_text(5 , 1 , "**МЕНЮ**" , 0)
Else
Call Nokia_text(5 , 1 , "АТЛАНТ" , 0)
End If


If Menu = 10 Or Menu = 20 Or Menu = 30 Or Menu = 40 Or Menu = 50 Then
Call Nokia_text(0 , 2 , "1.Поиск датчиков" , Kursor_1)
Call Nokia_text(0 , 3 , "2.Выбор датчиков" , Kursor_2)
Call Nokia_text(0 , 4 , "3.Уставки" , Kursor_15)
Call Nokia_text(0 , 5 , "4.Уставки разм." , Kursor_34)
Call Nokia_text(0 , 6 , "5.Контроль разм." , Kursor_35)
End If

If Menu = 10 Then : Kursor_1 = 1
Else
Kursor_1 = 0
End If
 If Menu = 20 Then : Kursor_2 = 1
 Else
 Kursor_2 = 0
 End If
If Menu = 30 Then : Kursor_15 = 1
 Else
 Kursor_15 = 0
 End If
 If Menu = 40 Then : Kursor_34 = 1
 Else
 Kursor_34 = 0
 End If
 If Menu = 50 Then : Kursor_35 = 1
 Else
 Kursor_35 = 0
 End If

If Menu = 0 Then : Gosub A5
End If
If Menu >= 21 And Menu <= 29 Or Menu >= 210 And Menu <= 290 Then : Gosub A5
End If


'******************МЕНЮ УСТАВОК - ТЕМПЕРАТУРА компр.ХК , МК и время обратного включения *******************
If Menu > 30 And Menu < 40 Or Menu > 300 And Menu < 400 Then
    ' *Уставка - температура включения обдува компресора ХК *
 Strin_univ = Str(t_kom_xk)       '
 Strin_univ = Format(strin_univ , "000")
Call Nokia_text(0 , 2 , "1.t.K.ХК=" , Kursor_16)       '
Call Nokia_text(11 , 2 , Strin_univ , Kursor_20)
Call Nokia_text(14 , 2 , "Гр" , 0)
' *Уставка - температура включения обдува компресора MК *
 Strin_univ = Str(t_kom_mk)       '
 Strin_univ = Format(strin_univ , "000")
Call Nokia_text(0 , 3 , "2.t.K.МК=" , Kursor_17)       '
Call Nokia_text(11 , 3 , Strin_univ , Kursor_21)
Call Nokia_text(14 , 3 , "Гр" , 0)
' *Уставка - время включеня комп ХК *
 Strin_univ = Str(bk_kom_xk)       '
 Strin_univ = Format(strin_univ , "000")
Call Nokia_text(0 , 4 , "3.вк.ХК=" , Kursor_18)       '
Call Nokia_text(9 , 4 , Strin_univ , Kursor_22)
Call Nokia_text(12 , 4 , "С" , 0)
' *Уставка - время включеня комп МК *
 Strin_univ = Str(bk_kom_mk)       '
 Strin_univ = Format(strin_univ , "000")
Call Nokia_text(0 , 5 , "4.вк.МК=" , Kursor_19)       '
Call Nokia_text(9 , 5 , Strin_univ , Kursor_23)
Call Nokia_text(12 , 5 , "С" , 0)






If Menu = 31 Then : Kursor_16 = 1
Else
Kursor_16 = 0
End If

If Menu = 32 Then : Kursor_17 = 1
Else
Kursor_17 = 0
End If

If Menu = 33 Then : Kursor_18 = 1
Else
Kursor_18 = 0
End If

If Menu = 34 Then : Kursor_19 = 1
Else
Kursor_19 = 0
End If

If Menu = 310 Then : Kursor_20 = 1
Else
Kursor_20 = 0
End If

If Menu = 320 Then : Kursor_21 = 1
Else
Kursor_21 = 0
End If

If Menu = 330 Then : Kursor_22 = 1
Else
Kursor_22 = 0
End If

If Menu = 340 Then : Kursor_23 = 1
Else
Kursor_23 = 0
End If

End If
'Ust_time_razm As Byte  Ust_time_min As Byte ,  , Ust_time_max As Byte
'******************МЕНЮ УСТАВОК - РАЗМОРОЗКА *******************
If Menu > 40 And Menu < 50 Or Menu > 400 And Menu < 500 Then
'    ' *Уставка - цикл разморозки МК часы *
 Strin_univ = Str(ust_cikl)       '
 Strin_univ = Format(strin_univ , "000")
Call Nokia_text(0 , 2 , "1.ЦИКЛ раз=" , Kursor_36)       '
Call Nokia_text(12 , 2 , Strin_univ , Kursor_40)
Call Nokia_text(16 , 2 , "ч" , 0)
' *Уставка - время разморозки (сек) MК *
 Strin_univ = Str(ust_time_razm)       '
 Strin_univ = Format(strin_univ , "000")
Call Nokia_text(0 , 3 , "2.вр.раз=" , Kursor_37)       '
Call Nokia_text(10 , 3 , Strin_univ , Kursor_41)
Call Nokia_text(16 , 3 , "с" , 0)
' *Уставка - минимальная температура начало разморозки *
If Ust_time_min < 0 Then
 Kursor_44 = 9
 Else
 Kursor_44 = 10
 Call Nokia_text(9 , 4 , "+" , 0)
 End If

 Strin_univ = Str(ust_time_min)       '
 Strin_univ = Format(strin_univ , "000")
Call Nokia_text(0 , 4 , "3.t.мин=" , Kursor_38)       '
Call Nokia_text(kursor_44 , 4 , Strin_univ , Kursor_42)
Call Nokia_text(15 , 4 , "Гр" , 0)
' *Уставка - максимальная температура конец разморозки *
 Strin_univ = Str(ust_time_max)       '
 Strin_univ = Format(strin_univ , "000")
Call Nokia_text(0 , 5 , "4.t.макс=" , Kursor_39)       '
Call Nokia_text(10 , 5 , Strin_univ , Kursor_43)
Call Nokia_text(15 , 5 , "Гр" , 0)

If Menu = 41 Then : Kursor_36 = 1
Else
Kursor_36 = 0
End If

If Menu = 42 Then : Kursor_37 = 1
Else
Kursor_37 = 0
End If

If Menu = 43 Then : Kursor_38 = 1
Else
Kursor_38 = 0
End If

If Menu = 44 Then : Kursor_39 = 1
Else
Kursor_39 = 0
End If

If Menu = 410 Then : Kursor_40 = 1
Else
Kursor_40 = 0
End If

If Menu = 420 Then : Kursor_41 = 1
Else
Kursor_41 = 0
End If

If Menu = 430 Then : Kursor_42 = 1
Else
Kursor_42 = 0
End If

If Menu = 440 Then : Kursor_43 = 1
Else
Kursor_43 = 0
End If

End If

'******************КОНТРОЛЬ РАЗМОРОЗКИ *******************
If Menu > 50 And Menu < 60 Then
'    ' *Время работы компрессора МК *
 Call Nokia_text(0 , 2 , "1.РАБОТА КОМ. МК" , 0)
 Strin_univ = Str(hh)       '
 Strin_univ = Format(strin_univ , "00")       '
Call Nokia_text(3 , 3 , Strin_univ , 0)
Call Nokia_text(5 , 3 , ":" , 0)
Strin_univ = Str(mm)       '
 Strin_univ = Format(strin_univ , "00")       '
Call Nokia_text(6 , 3 , Strin_univ , 0)
Call Nokia_text(8 , 3 , ":" , 0)
Strin_univ = Str(ss)       '
 Strin_univ = Format(strin_univ , "00")       '
Call Nokia_text(9 , 3 , Strin_univ , 0)


' *контроль - время разморозки (сек) MК *
 Strin_univ = Str(sec_razm)       '
 Strin_univ = Format(strin_univ , "000")
Call Nokia_text(0 , 4 , "2.вр.раз=" , 0)       '
Call Nokia_text(13 , 4 , Strin_univ , 0)
Call Nokia_text(16 , 4 , "с" , 0)
' *контроль - температуры тена *
If Temp_tena < 0 Then
 Kursor_45 = 10
 Else
 Kursor_45 = 11
 Call Nokia_text(10 , 5 , "+" , 0)
 End If

 Strin_univ = Str(temp_tena)       '
 Strin_univ = Format(strin_univ , "000")
Call Nokia_text(0 , 5 , "3.t.тена=" , 0)       '
Call Nokia_text(kursor_45 , 5 , Strin_univ , 0)
Call Nokia_text(15 , 5 , "Гр" , 0)
' *контроль - тен включен/отключен *
If Тен = 1 Then : Call Nokia_text(0 , 6 , "4.ТЕН ВКЛЮЧЕН" , 0)
Else
Call Nokia_text(0 , 6 , "4.ТЕН ОТКЛЮЧЕН" , 0)       '
End If



End If

Reset Watchdog

Loop
End

A5:





 If Ust_xk < 0 Then
 'Ust_xk = Ust_xk * -1
 'Call Nokia_text(12 , 2 , "-" , 0)
 Kursor_24 = 12
 Else
 Call Nokia_text(12 , 2 , "+" , 0)
 Kursor_24 = 13
 End If

 If T_xk < 0 Then
 'I1 = I1 * -1
' Call Nokia_text(4 , 2 , "-" , 0)
 Kursor_28 = 4
 Else
 Kursor_28 = 5
 Call Nokia_text(4 , 2 , "+" , 0)
 End If


 Strin_univ = Str(t_xk)       'выводим на ЛСД первый датчик:
 Strin_univ = Format(strin_univ , "00")
Call Nokia_text(0 , 2 , "ХК=" , Kursor_3)       ' отображаем датчик №1 в меню выбор датчиков
If Errord1 = 1 Then
Call Nokia_text(5 , 2 , "**" , 0)
 Else
Call Nokia_text(kursor_28 , 2 , Strin_univ , 0)
End If
Call Nokia_text(7 , 2 , "Гр" , 0)

If Menu = 0 Then
Strin_univ = Str(ust_xk)       'выводим на ЛСД ХК уставка :
Strin_univ = Format(strin_univ , "00")
Call Nokia_text(kursor_24 , 2 , Strin_univ , Kursor_26)
Call Nokia_text(15 , 2 , "Гр" , 0)
End If

If Menu >= 21 And Menu <= 29 Or Menu >= 210 And Menu <= 290 Then
Strin_univ = Str(number_1)       'выводим на ЛСД номер первого датчика:
Call Nokia_text(16 , 2 , Strin_univ , Kursor_9)       ' отображаем номер датчика
End If
'*******************************************************************************
         If I2 < 0 Then
 'I2 = I2 * -1
' Call Nokia_text(9 , 3 , "-" , 0)
 Kursor_29 = 9
 Else
 Kursor_29 = 10
 Call Nokia_text(9 , 3 , "+" , 0)
 End If


         Strin_univ = Str(i2)       'выводим на ЛСД второй датчик:
         Strin_univ = Format(strin_univ , "000")
          Call Nokia_text(0 , 3 , "КОМП.ХК=" , Kursor_4)       ' отображаем датчик №2 в меню выбор датчиков
         If Errord2 = 1 Then
Call Nokia_text(10 , 3 , "***" , 0)
 Else
Call Nokia_text(kursor_29 , 3 , Strin_univ , 0)
End If
          Call Nokia_text(13 , 3 , "Гр" , 0)
           If Menu >= 21 And Menu <= 29 Or Menu >= 210 And Menu <= 290 Then
           Strin_univ = Str(number_2)
          Call Nokia_text(16 , 3 , Strin_univ , Kursor_10)       ' отображаем номер датчика
          End If
' '*******************************************************************************
     If Ust_mk < 0 Then
 'Ust_xk = Ust_xk * -1
 'Call Nokia_text(12 , 4 , "-" , 0)
 Kursor_25 = 12
 Else
 Call Nokia_text(12 , 4 , "+" , 0)
 Kursor_25 = 13
 End If


         If I3 < 0 Then
 'I3 = I3 * -1
' Call Nokia_text(7 , 4 , "-" , 0)
 Kursor_30 = 7
 Else
 Kursor_30 = 8
 Call Nokia_text(7 , 4 , "+" , 0)
 End If


         Strin_univ = Str(i3)       'выводим на ЛСД третий датчик:
         Strin_univ = Format(strin_univ , "00")
         Call Nokia_text(0 , 4 , "МК.В.=" , Kursor_5)       ' отображаем датчик №3 в меню выбор датчиков
         If Errord3 = 1 Then
Call Nokia_text(8 , 4 , "**" , 0)
 Else
Call Nokia_text(kursor_30 , 4 , Strin_univ , 0)
End If
         Call Nokia_text(10 , 4 , "Гр" , 0)

         If Menu = 0 Then
Strin_univ = Str(ust_mk)       'выводим на ЛСД MК уставка :
Strin_univ = Format(strin_univ , "00")
Call Nokia_text(kursor_25 , 4 , Strin_univ , Kursor_27)
Call Nokia_text(15 , 4 , "Гр" , 0)
End If


         If Menu >= 21 And Menu <= 29 Or Menu >= 210 And Menu <= 290 Then
         Strin_univ = Str(number_3)
         Call Nokia_text(16 , 4 , Strin_univ , Kursor_11)       ' отображаем номер датчика
         End If
' '*******************************************************************************
          If I4 < 0 Then
 'I4 = I4 * -1
' Call Nokia_text(7 , 5 , "-" , 0)
 Kursor_31 = 7
 Else
 Kursor_31 = 8
 Call Nokia_text(7 , 5 , "+" , 0)
 End If

          Strin_univ = Str(i4)       'выводим на ЛСД четвертый датчик:
         Strin_univ = Format(strin_univ , "00")
         Call Nokia_text(0 , 5 , "МК.Н.=" , Kursor_6)       ' отображаем датчик №4 в меню выбор датчиков
         If Errord4 = 1 Then
Call Nokia_text(8 , 5 , "**" , 0)
 Else
Call Nokia_text(kursor_31 , 5 , Strin_univ , 0)
End If
         Call Nokia_text(10 , 5 , "Гр" , 0)
         If Menu >= 21 And Menu <= 29 Or Menu >= 210 And Menu <= 290 Then
         Strin_univ = Str(number_4)
         Call Nokia_text(16 , 5 , Strin_univ , Kursor_12)       ' отображаем номер датчика
         End If
 ' '*******************************************************************************
          If I5 < 0 Then
 'I5 = I5 * -1
' Call Nokia_text(9 , 6 , "-" , 0)
 Kursor_32 = 9
 Else
 Kursor_32 = 10
 Call Nokia_text(9 , 6 , "+" , 0)
 End If

          Strin_univ = Str(i5)       'выводим на ЛСД четвертый датчик:
         Strin_univ = Format(strin_univ , "000")
         Call Nokia_text(0 , 6 , "КОМП.МК=" , Kursor_7)       ' отображаем датчик №5 в меню выбор датчиков
         If Errord5 = 1 Then
Call Nokia_text(10 , 6 , "***" , 0)
 Else
Call Nokia_text(kursor_32 , 6 , Strin_univ , 0)
End If
         Call Nokia_text(13 , 6 , "Гр" , 0)
         If Menu >= 21 And Menu <= 29 Or Menu >= 210 And Menu <= 290 Then
         Strin_univ = Str(number_5)
         Call Nokia_text(16 , 6 , Strin_univ , Kursor_13)       ' отображаем номер датчика
          End If
' '*******************************************************************************
          If I6 < 0 Then
 'I6 = I6 * -1
' Call Nokia_text(8 , 7 , "-" , 0)
Kursor_33 = 8
 Else
Kursor_33 = 9
 Call Nokia_text(8 , 7 , "+" , 0)
 End If

          Strin_univ = Str(i6)       'выводим на ЛСД четвертый датчик:
         Strin_univ = Format(strin_univ , "000")
         Call Nokia_text(0 , 7 , "ТЕН.=.." , Kursor_8)       ' отображаем датчик №6 в меню выбор датчиков
         If Errord6 = 1 Then
Call Nokia_text(9 , 7 , "***" , 0)
 Else
Call Nokia_text(kursor_33 , 7 , Strin_univ , 0)
End If
         Call Nokia_text(12 , 7 , "Гр" , 0)
         If Menu >= 21 And Menu <= 29 Or Menu >= 210 And Menu <= 290 Then
         Strin_univ = Str(number_6)
         Call Nokia_text(16 , 7 , Strin_univ , Kursor_14)       ' отображаем номер датчика
         End If


   ' Strin_univ = Str(menu)                                  'выводим на ЛСД таймер включения ХК:
'         Strin_univ = Format(strin_univ , "000")
'         Call Nokia_text(0 , 8 , "ХК=" , Kursor_8)          ' отображаем датчик №6 в меню выбор датчиков
'         Call Nokia_text(4 , 8 , Strin_univ , 0)
'         Call Nokia_text(8 , 8 , "С" , 0)



'Else                                                        'Иначе
'End If




If Menu = 21 Then : Kursor_3 = 1
Else
Kursor_3 = 0
 End If
If Menu = 22 Then : Kursor_4 = 1
Else
Kursor_4 = 0
 End If
If Menu = 23 Then : Kursor_5 = 1
Else
Kursor_5 = 0
 End If
If Menu = 24 Then : Kursor_6 = 1
Else
Kursor_6 = 0
 End If
If Menu = 25 Then : Kursor_7 = 1
Else
Kursor_7 = 0
 End If
If Menu = 26 Then : Kursor_8 = 1
Else
Kursor_8 = 0
 End If
If Menu = 210 Then : Kursor_9 = 1
Else
Kursor_9 = 0
 End If
If Menu = 220 Then : Kursor_10 = 1
Else
Kursor_10 = 0
 End If
If Menu = 230 Then : Kursor_11 = 1
Else
Kursor_11 = 0
 End If
If Menu = 240 Then : Kursor_12 = 1
Else
Kursor_12 = 0
 End If
If Menu = 250 Then : Kursor_13 = 1
Else
Kursor_13 = 0
 End If
If Menu = 260 Then : Kursor_14 = 1
Else
Kursor_14 = 0
 End If



'Else                                                        'Иначе
'End If
'End If
'T_xk = I1                                                   'Температура ХК
T_mk = I3           'Температура МК верх
T_k_xk = I2
T_k_mk = I5


Return

'Loop



'End




Conversion:
 I1 = I1 * 10       '
 I1 = I1 \ 160      'I1 = I1 \ 16 - градусы до десятой

 K1 = K1 + 1
 I1_sum = I1_sum + I1
 If K1 > 10 Then : T_xk = I1_sum / K1 : K1 = 0 : I1_sum = 0
 End If


 I2 = I2 * 10       '
 I2 = I2 \ 160      'I1 = I1 \ 16 - градусы до десятой


 I3 = I3 * 10       '
 I3 = I3 \ 160      'I1 = I1 \ 16 - градусы до десятой


 I4 = I4 * 10       '
 I4 = I4 \ 160      'I1 = I1 \ 16 - градусы до десятой

 I5 = I5 * 10       '
 I5 = I5 \ 160      'I1 = I1 \ 16 - градусы до десятой

 I6 = I6 * 10       '
 I6 = I6 \ 160      'I1 = I1 \ 16 - градусы до десятой

 Temp_tena = I6
Return

Pulse:
If Count1 > 20 And Pusk_1 = 1 And Sec_1 <> 0 Then       'условые-Таймер 1 задержки включения ХК
Sec_1 = Sec_1 - 1 : Count1 = 0
Else                'иначе
Count1 = Count1 + 1
End If              'выход из услов


If Count2 > 10 And Pusk_2 = 1 And Sec_2 <> 0 Then       'условые-Таймер 2 задержки включения МК
Sec_2 = Sec_2 - 1 : Count2 = 0
Else                'иначе
Count2 = Count2 + 1
End If


Pusk_4 = 1
If Count4 > 1 And Pusk_4 = 1 Then       'условые-Таймер 3 моточасов компресора МК
Ss = Ss + 1 : Count4 = 0
Else                'иначе
If Pusk_4 = 1 Then : Count4 = Count4 + 1
End If
End If

'Pusk_5 = 1
If Count5 > 1 And Pusk_5 = 1 Then       'условые-Таймер 4 время работы тена
Sec_razm = Sec_razm + 1 : Count5 = 0
Else                'иначе
If Pusk_5 = 1 Then : Count5 = Count5 + 1
End If
End If

 If Count3 = 1 And Контроль = 1 Then : Контроль = 0
 End If
 If Count3 > 2 Then
 If Count3 > 3 And Контроль = 0 Then : Count3 = 0 : Контроль_2 = 1       'Заносим В Память

 If Pod_11 = 0 Then
 '***заносим в память часы работы компресора МК  ***
If Hh_nov <> Hh Then       ' если уставка новая не равна старой
Hh_nov = Hh         'уставка новая  равна старой
Hh_eram = Hh
 Writeeeprom Hh_eram , 240       'здесь заносим в память уставку
Else                'Иначе
End If              'выход и
'***заносим в память минуты работы компресора МК  ***
If Mm_nov <> Mm Then       ' если уставка новая не равна старой
Mm_nov = Mm         'уставка новая  равна старой
Mm_eram = Mm
 Writeeeprom Mm_eram , 250       'здесь заносим в память уставку
Else                'Иначе
End If              'выход и

'***заносим в память секунды работы тена  ***
If Sec_razm_nov <> Sec_razm Then       ' если уставка новая не равна старой
Sec_razm_nov = Sec_razm       'уставка новая  равна старой
Sec_razm_eram = Sec_razm
 Writeeeprom Sec_razm_eram , 260       'здесь заносим в память уставку
Else                'Иначе
End If              'выход и
Pod_11 = 1
Waitms 5000
                                                        'reset
End If

 End If
 If Count3 > 3 And Контроль = 1 Then : Count3 = 0
 End If
 End If
 Count3 = Count3 + 1




Return

'===============================================================================
  Обработка_прерывания_int0:
'-------------------------------------------------------------------------------
   'Pusk_3 = 0
   Контроль = 1
   'Sec_3 = 1
   '  Waitms 1
     'Контроль = 0
'-------------------------------------------------------------------------------
  Return
'===============================================================================



'*******************************************************************************
$include "Nokia-1100 Library.inc"       'сама библиотека
'$inc Phone , 293 , "Phone.bgf"                              'картинка №1
'$inc Scull , 657 , "Scull.bgf"                              'картинка №2
'$inc Bunny , 490 , "Bunny.bgf"                              'картинка №3
'*******************************************************************************
'--------------------  Используемые шрифты  ----------------------------------------
'=================================================



'=================================================

0

19

Опять "спёр" чужой код и в очередной раз не можешь разобраться???  :D
Ну сколько же-ж раз говорить-то   --- научись думать СВОЕЙ головой!!!
Вот, почитай для начала:  http://radio-hobby.org/modules/news/art … toryid=716

0

20

olegkaras написал(а):

Покажите в каком месте править код чтоб работал DS18S20 ?

Для начала объясните необходимость многократных повторов этих участков...
Похоже, вы не до конца разобрались с принципами работы устройств 1-Wire...

Код:
If Pauza = 30 Then
'после ожидания начинаем считывать датчики
'---------------------------------
   '1wreset
'   1wwrite &H55
   If Number_1 = 1 Then : 1wverify 1_id_ds18b20(1)
   End If
   If Number_1 = 2 Then : 1wverify 2_id_ds18b20(1)
   End If
   If Number_1 = 3 Then : 1wverify 3_id_ds18b20(1)
   End If
   If Number_1 = 4 Then : 1wverify 4_id_ds18b20(1)
   End If
   If Number_1 = 5 Then : 1wverify 5_id_ds18b20(1)
   End If
   If Number_1 = 6 Then : 1wverify 6_id_ds18b20(1)
   End If
   If Err = 1 Then  ' проверим на ошубку чтения с 1 датчика и перейдем к подпрограмме
   If Er_1 > 3 Then : Errord1 = 1
   Else
   Er_1 = Er_1 + 1
   End If
   Else
   Errord1 = 0
   Er_1 = 0
   End If
   1wwrite &HBE
   I1 = 1wread(2)

Арифметику пересчета в готовую температуру (в конце) пока оставим "на попозже"... ;)

0

21

Это я так реализовал замену одного датчика на другой какой то . Может и не грамотно , если это можно сделать по проще то покажите как .

0

22

olegkaras написал(а):

Это я так реализовал замену одного датчика на другой какой то.

Если сохранить логику, то вынести однотипные участки в подпрограмму.

Все обращения к устройствам 1-Wire начинаются с 1wreset и заканчиваются им же !
В данной программе есть пропуски !

Саму программу разделить по функционалу.
Одна часть листинга - только касаемо дисплея, вторая - чисто по датчикам.
Сейчас перемешано и искать нужное в чужом коде - гиблое дело... ;)

Если нет каких-то команд, которые используются для 18B20, то все будет работать с 18S20.
Вопросы (возможно) будут к арифметике пересчета, но туда я не вникал.

0

23

100% код не сам писал, скачал гдето. Судя по коду автомат для холодильника с кучей бесполезных примочек. Да и стиль написания не очень радует - можно было сделать гораздо компактнее.
Код вычисления температуры находится почти в конце, Conversion называется. Отт там поменяй математику для 18В20 и будет счастье  :D

0

24

olegkaras
С Протеусом дружим ?

0

25

Nord написал(а):

olegkaras
С Протеусом дружим ?

Дружим ,  дело в том что в железе ds18s20 показывает нуль градусов.

0

26

olegkaras написал(а):

Дружим ,  дело в том что в железе ds18s20 показывает нуль градусов.

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

0

27

Ссылка Вот этот пример мне подходит , только как  в нем адреса записать в EEPROM MK и прочитать ?

0

28

olegkaras написал(а):

Вот этот пример мне подходит , только как  в нем адреса записать в EEPROM MK и прочитать ?

В #8 я давал ссылку на "Исследования...", там есть и про EEPROM.

Работа с EEPROM не зависит от периферии.

0

29

Nord написал(а):

В #8 я давал ссылку на "Исследования...", там есть и про EEPROM.

Работа с EEPROM не зависит от периферии.

Да я там и смотрю , там в одном примере запись- чтение , в другом работа с ds18X20 , и к сожалению у меня их скрестить в один не получается.

0

30

olegkaras написал(а):

Да я там и смотрю , там в одном примере запись- чтение , в другом работа с ds18X20 , и к сожалению у меня их скрестить в один не получается.

В приведенном тут же (#18) коде есть работа с EEPROM, уже все "скрещено"... ;)
Что еще "скрещивать" надо ? ;)

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Ds18B20. Работа с несколькими датчиками