$regfile = "attiny2313.dat" $crystal = 1000000 Declare Sub W_register(byval C_bytes As Byte) 'SPI (nRF24L01) команды Const Write_reg = &H20 'Определить Команду Записи В Реестр Const Wr_tx_pload = &HA0 'Определить Tx Полезной Нагрузки Адрес Регистра Const Flush_tx = &HE1 'Определить Флеш Tx Зарегистрировать Команду 'SPI (nRF24L01) регистры (адреса) Const Config_nrf = &H00 'Config адрес регистра Const En_aa = &H01 'Включить Автоматическое Подтверждение регистрации адрес Const En_rxaddr = &H02 'Включено Rx адреса " адрес регистра" Const Rf_ch = &H05 'RF channel' адрес регистра Const Rf_setup = &H06 'РФ Setup " (Настройка) адрес регистра" Const Status = &H07 'Статус " адрес регистра" Const Rx_addr_p0 = &H0A 'rx адрес Pipe0 " зарегистрировать адрес" Const Tx_addr = &H10 'TX address (адрес) Dim D_bytes(6) As Byte , W As Byte 'Config оборудования Config Spi = Soft , Din = Portb.6 , Dout = Portb.5 , Ss = Portb.3 , Clock = Portb.7 'Программное обеспечение SPI НЕ работает с nRF24L01, используйте оборудование SPI только, но эсэсовцы pin-код должен управляться нашей функцией Config Portb.2 = Output : Ce Alias Portb.2 'CE pin is output Config Portb.3 = Output : Ss Alias Portb.3 'SS pin is output Config Pinb.1 = Input : Irq Alias Pinb.1 'IRQ pin is input 'подключение светодиодов индикации Config Portd.4 = Output : Red_led Alias Portd.4 'подключение датчика '==================================================================================== Config 1wire = Portd.0 Dim Byte0 As Byte Dim Byte1 As Byte Dim Sign As String * 1 Dim S As Byte Dim T As Byte Dim T1 As Byte Dim T2 As Byte '================================================================================== Spiinit Do '============================================================================== 'подготовка данных 'опрос датчика Gosub 18b20 '============================================================================== If Sign = "-" Then S = 0 End If If Sign = "+" Then S = 1 End If If Sign = " " Then S = 2 End If Set Ce Waitms 10 Reset Ce Reset Ss Red_led = 1 D_bytes(1) = Flush_tx 'Flush the TX_fifo буфера Call W_register(1) D_bytes(1) = Write_reg + Status 'Reset IRQ бит D_bytes(2) = &B00110000 Call W_register(2) Gosub Setup_tx 'Настройка nrf240l01 для TX D_bytes(1) = Wr_tx_pload 'Положи 5 байт в TX pload буфера D_bytes(2) = S 'Byte 1 - знак температуры D_bytes(3) = T1 'Byte 2 - значение температуры D_bytes(4) = &HCC 'Байт 3 D_bytes(5) = &H11 'Байт 4 D_bytes(6) = W Call W_register(6) 'Запись 6 байт для регистрации Waitms 2 Set Ce 'Set CE на короткий миг, чтобы передать буфер fifo Waitms 1 Reset Ce Red_led = 0 wait 1 Loop 'Sub подпрограмм Sub W_register(byval C_bytes As Byte) 'Пишите зарегистрировать с SPI Reset Ss 'Руководство управления СС контакт, установить СС низких до смещение, байт Spiout D_bytes(1) , C_bytes 'Shiftout байты данных SPI корыта, C_bytes это количество байт, которые будут написаны Set Ss 'Set СС высокого End Sub Setup_tx: 'Подготовка к TX D_bytes(1) = Write_reg + Tx_addr 'TX адрес D_bytes(2) = &H34 D_bytes(3) = &H43 D_bytes(4) = &H10 D_bytes(5) = &H10 D_bytes(6) = &H01 Call W_register(6) D_bytes(1) = Write_reg + Rx_addr_p0 'RX адрес для pipe0 D_bytes(2) = &H34 D_bytes(3) = &H43 D_bytes(4) = &H10 D_bytes(5) = &H10 D_bytes(6) = &H01 Call W_register(6) D_bytes(1) = Write_reg + En_aa 'Enable auto ACK на pipe0 D_bytes(2) = &H01 Call W_register(2) D_bytes(1) = Write_reg + En_rxaddr 'Включить RX адрес для pipe0 D_bytes(2) = &H01 Call W_register(2) D_bytes(1) = Write_reg + Rf_ch 'Настройка каналов D_bytes(2) = 40 'Частота 2440 MГц Call W_register(2) D_bytes(1) = Write_reg + Rf_setup 'Настройка РФ -> Выходной мощности 0 дБм, datarate 2 Мбит / с и МШУ прибыль по D_bytes(2) = &H0F Call W_register(2) D_bytes(1) = Write_reg + Config_nrf 'Настройка CONFIG -> I=0 (TX_device), PWR_UP=1, CRC 2bytes, Включить CRC D_bytes(2) = &H0E Call W_register(2) Return 'опрос датчика температуры '============================================ 18b20: 1wreset ' If Err = 1 Then 'если при опросе небыло ответа ставим флаг ошибки Sign = " " T1 = 255 Else ' иначе, если ошибки не было, продолжаем опрос датчика 1wwrite &HCC ' Выдаем команду чтения ПЗУ 1wwrite &H44 ' Запуск измерения Waitms 750 ' Ждем окончания преобразования 1wreset 1wwrite &HCC 1wwrite &HBE ' Команда чтения ОЗУ датчика Byte0 = 1wread() ' Читаем нулевой байт Byte1 = 1wread() ' Читаем первый байт If Byte1 > 248 Then ' Проверка на отрицательность температуры Byte0 = &HFF - Byte0 Byte1 = &HFF - Byte1 Sign = "-" Else Sign = "+" End If T1 = Byte0 / 16 ' Сдвигаем нулевой байт вправо на 4 бита (2*2*2*2=16) T2 = Byte1 * 16 ' Сдвигаем первый байт влево на 4 бита (2*2*2*2=16) T1 = T1 + T2 ' Формируем результат для вывода на дисплей ' *** Коррекция полученных значений If Sign = "-" Then ' для корректного вывода отрицательных температур T1 = T1 + 1 End If If Sign = "+" And T1 = 0 Then ' убираем знак "+" с нулевой температуры Sign = " " End If End If Return