Skocz do zawartości

Problem z komunikacją Mega32 RF24L01+


bluehais

Pomocna odpowiedź

Witam,
Mam sobie nadajnik i odbiornik i kod dla nadajnika:

'/http://avrproject.ru
'/2012
$regfile = "m32def.dat"
$crystal = 12000000
$baud = 19200
$hwstack = 40
$swstack = 20
$framesize = 40

Config Adc = Single , Prescaler = Auto , Reference = Avcc

'=== Declare sub routines
Declare Sub R_register(byval Command As Byte , Byval C_bytes As Byte)
Declare Sub W_register(byval C_bytes As Byte)

'=== Constante ===
'Define nRF24L01 interrupt flag's
Const Idle_int = &H00                                       'Idle, no interrupt pending
Const Max_rt = &H10                                         'Max #of Tx Retrans Interrupt
Const Tx_ds = &H20                                          'Tx Data Sent Interrupt
Const Rx_dr = &H40                                          'Rx Data Received

'SPI(nRF24L01) commands

Const Read_reg = &H00                                       'Define Read Command To Register
Const Write_reg = &H20                                      'Define Write Command To Register
Const Rd_rx_pload = &H61                                    'Define Rx Payload Register Address
Const Wr_tx_pload = &HA0                                    'Define Tx Payload Register Address
Const Flush_tx = &HE1                                       'Define Flush Tx Register Command
Const Flush_rx = &HE2                                       'Define Flush Rx Register Command
Const Reuse_tx_pl = &HE3                                    'Define Reuse Tx Payload Register Command
Const Nop_comm = &HFF                                       'Define No Operation , Might Be Used To Read Status Register
'SPI(nRF24L01) registers(addresses)
Const Config_nrf = &H00                                     'Config' register address
Const En_aa = &H01                                          'Enable Auto Acknowledgment' register address
Const En_rxaddr = &H02                                      'Enabled RX addresses' register address
Const Setup_aw = &H03                                       'Setup address width' register address
Const Setup_retr = &H04                                     'Setup Auto. Retrans' register address
Const Rf_ch = &H05                                          'RF channel' register address
Const Rf_setup = &H06                                       'RF setup' register address
Const Status = &H07                                         'Status' register address
Const Observe_tx = &H08                                     'Observe TX' register address
Const Cd = &H09                                             'Carrier Detect' register address
Const Rx_addr_p0 = &H0A                                     'RX address pipe0' register address
Const Rx_addr_p1 = &H0B                                     'RX address pipe1' register address
Const Rx_addr_p2 = &H0C                                     'RX address pipe2' register address
Const Rx_addr_p3 = &H0D                                     'RX address pipe3' register address
Const Rx_addr_p4 = &H0E                                     'RX address pipe4' register address
Const Rx_addr_p5 = &H0F                                     'RX address pipe5' register address
Const Tx_addr = &H10                                        'TX address' register address
Const Rx_pw_p0 = &H11                                       'RX payload width, pipe0' register address
Const Rx_pw_p1 = &H12                                       'RX payload width, pipe1' register address
Const Rx_pw_p2 = &H13                                       'RX payload width, pipe2' register address
Const Rx_pw_p3 = &H14                                       'RX payload width, pipe3' register address
Const Rx_pw_p4 = &H15                                       'RX payload width, pipe4' register address
Const Rx_pw_p5 = &H16                                       'RX payload width, pipe5' register address
Const Fifo_status = &H17                                    'FIFO Status Register' register address


Dim D_bytes(33) As Byte , B_bytes(33) As Byte               'Dim the bytes use for SPI, D_bytes = outgoing B_bytes = Incoming
Dim Temp As Byte , W As Word
Dim Packet_count As Byte



'=== Config hardware ===
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 16 , Noss = 1

'Software SPI is NOT working with the nRF24L01, use hardware SPI only, but the SS pin must be controlled by our self

Config Pinb.1 = Output                                      'CE pin is output
Config Pinb.4 = Output                                      'SS pin is output
Config Pinb.3 = Input                                       'IRQ pin is input

Ce Alias Portb.1
Ss Alias Portb.4
Irq Alias Pinb.3

'ďîäęëţ÷ĺíčĺ ńâĺňîäčîäîâ číäčęŕöčč
Config Portd.5 = Output
Config Portd.6 = Output
Red_led Alias Portd.5
Green_led Alias Portd.6



Dim Byte0 As Byte
Dim Byte1 As Byte
Dim Sign As String * 1
Dim T As Byte
Dim T1 As Byte
Dim T2 As Byte

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



Red_led = 1
Green_led = 1
Waitms 20
Red_led = 0
Green_led = 0
Waitms 60
Red_led = 1
Green_led = 1
Waitms 20
Red_led = 0
Green_led = 0


Spiinit                                                     'init the spi pins

Set Ce
Waitms 10                                                   'Wait a moment until all hardware is stable
Reset Ce                                                    'Set CE pin low
Reset Ss                                                    'Set SS pin low (CSN pin)


Print "TX_device"                                           'Send to terminal who i'm

Red_led = 1

D_bytes(1) = Flush_tx                                      'Flush the TX_fifo buffer
Call W_register(1)
D_bytes(1) = Write_reg + Status                            'Reset the IRQ bits
D_bytes(2) = &B00110000
Call W_register(2)
Red_led = 0



Do


                                                      'Main loop for TX

Green_led = 1

Incr Packet_count                                           'Increase the send packet counter, for test only

If Packet_count > 254 Then Packet_count = 0

Gosub Setup_tx                                              'Setup the nrf24l01 for TX
D_bytes(1) = Wr_tx_pload                                   'Put 5 bytes in the TX pload buffer
D_bytes(2) = T1                                            'Byte 1   - îňďđŕâë˙ĺěŕ˙ ňĺěďĺđŕňóđŕ
D_bytes(3) = &HBB                                          'Byte 2  - îńňŕëüíűĺ 4 áŕéňŕ ěîćíî ňŕęćĺ čńďîëüçîâŕňü â ńâîčő öĺë˙ő
D_bytes(4) = &HCC                                          'Byte 3
D_bytes(5) = &H11                                          'Byte 4
D_bytes(6) = Packet_count                                  'Byte 5
Call W_register(6)                                          'Write 6 bytes to register

Waitms 2

Set Ce                                                      'Set CE for a short moment to transmit the fifo buffer
Waitms 1                                                    '
Reset Ce                                                    '
Waitms 100                                                  'Some delay to read the output on the terminal, line can be removed for max. speed

W = 0                                                      'Counter for time out



 Do

 Red_led = 1

 If Irq = 0 Then
  Call R_register(status , 1)
  Temp = B_bytes(1) And &B01110000                         'Mask the IRQ bits out the status byte

  Select Case Temp                                         'Which IRQ occurs
   Case Max_rt                                             'MAX_RT
     Print "Maximum number of TX retries, Flushing the TX buffer now !"
     D_bytes(1) = Flush_tx                                 'Flush the TX buffer
     Call W_register(1)
     D_bytes(1) = Write_reg + Status
     D_bytes(2) = &B00010000                               'Clear the MAX_RT IRQ bit
     Call W_register(2)
     Waitms 10
     Red_led = 0
     Exit Do
   Case Tx_ds                                              'TX_DS
     Print "Packet " ; Packet_count ; " send and ACK received."
     D_bytes(1) = Write_reg + Status
     D_bytes(2) = &B00100000                               'Clear the TX_DS IRQ bit
     Call W_register(2)
     Waitms 10
     Red_led = 0
     Exit Do
   Case Else                                               'Other IRQ ??
     Print "Other irq " ; Bin(temp)
     D_bytes(1) = Flush_tx                                 'Flush the TX buffer
     Call W_register(1)
     D_bytes(1) = Write_reg + Status
     D_bytes(2) = &B00110000                               'Clear both MAX_RT, TX_DS bits
     Call W_register(2)
  End Select
 End If

 Waitms 1                                                  'Time out waiting for IRQ 1ms * 100
 Incr W                                                    'Increment W
  If W > 200 Then                                          'Waited for 200ms
   Print "No irq response from RF24L01 within 100ms"
   Exit Do                                                 'Exit the wait loop
  End If



 Loop

Loop

'=== Sub routines ===
Sub W_register(byval C_bytes As Byte)                       'Write register with SPI
Reset Ss                                                    'Manual control SS pin, set SS low before shifting out the bytes
Spiout D_bytes(1) , C_bytes                                'Shiftout the data bytes trough SPI , C_bytes is the amount bytes to be written
Set Ss                                                      'Set SS high
End Sub

Sub R_register(byval Command As Byte , Byval C_bytes As Byte) As Byte       'C_bytes = Count_bytes, number off bytes to be read
Reset Ss                                                    'Manual controle SS pin, set low before shifting in/out the bytes
Spiout Command , 1                                         'First shiftout the register to be read
Spiin B_bytes(1) , C_bytes                                 'Read back the bytes from SPI sended by nRF20L01
Set Ss                                                      'Set SS back to high level
End Sub


Setup_tx:                                                   'Setup for TX

D_bytes(1) = Write_reg + Tx_addr                           'TX adress
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 adress for 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 for pipe0
D_bytes(2) = &H01
Call W_register(2)
D_bytes(1) = Write_reg + En_rxaddr                         'Enable RX adress for pipe0
D_bytes(2) = &H01
Call W_register(2)
D_bytes(1) = Write_reg + Rf_ch                             'Set RF channel
D_bytes(2) = 40
Call W_register(2)
D_bytes(1) = Write_reg + Rf_setup                          'Setup RF-> Output power 0dbm, datarate 2Mbps and LNA gain on
D_bytes(2) = &H0F
Call W_register(2)
D_bytes(1) = Write_reg + Config_nrf                        'Setup CONFIG-> PRX=0(TX_device), PWR_UP=1, CRC 2bytes, Enable CRC
D_bytes(2) = &H0E
Call W_register(2)
Return

i kod odbiornika:

'/http://avrproject.ru
'/2012
$regfile = "m16def.dat"
$crystal = 12000000
$baud = 19200
$hwstack = 40
$swstack = 20
$framesize = 40




'ęîíôčăóđŕöč˙ äčńďëĺ˙
'===============================================================================================================
Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.1 , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5
Config Lcd = 16 * 2
Cursor Off
Cls

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


'=== Declare sub routines
Declare Sub R_register(byval Command As Byte , Byval C_bytes As Byte)
Declare Sub W_register(byval C_bytes As Byte)

'=== Constante ===
'Define nRF24L01 interrupt flag's
Const Idle_int = &H00                                       'Idle, no interrupt pending
Const Max_rt = &H10                                         'Max #of Tx Retrans Interrupt
Const Tx_ds = &H20                                          'Tx Data Sent Interrupt
Const Rx_dr = &H40                                          'Rx Data Received
'SPI(nRF24L01) commands

Const Read_reg = &H00                                       'Define Read Command To Register
Const Write_reg = &H20                                      'Define Write Command To Register
Const Rd_rx_pload = &H61                                    'Define Rx Payload Register Address
Const Wr_tx_pload = &HA0                                    'Define Tx Payload Register Address
Const Flush_tx = &HE1                                       'Define Flush Tx Register Command
Const Flush_rx = &HE2                                       'Define Flush Rx Register Command
Const Reuse_tx_pl = &HE3                                    'Define Reuse Tx Payload Register Command
Const Nop_comm = &HFF                                       'Define No Operation , Might Be Used To Read Status Register
'SPI(nRF24L01) registers(addresses)
Const Config_nrf = &H00                                     'Config' register address
Const En_aa = &H01                                          'Enable Auto Acknowledgment' register address
Const En_rxaddr = &H02                                      'Enabled RX addresses' register address
Const Setup_aw = &H03                                       'Setup address width' register address
Const Setup_retr = &H04                                     'Setup Auto. Retrans' register address
Const Rf_ch = &H05                                          'RF channel' register address
Const Rf_setup = &H06                                       'RF setup' register address
Const Status = &H07                                         'Status' register address
Const Observe_tx = &H08                                     'Observe TX' register address
Const Cd = &H09                                             'Carrier Detect' register address
Const Rx_addr_p0 = &H0A                                     'RX address pipe0' register address
Const Rx_addr_p1 = &H0B                                     'RX address pipe1' register address
Const Rx_addr_p2 = &H0C                                     'RX address pipe2' register address
Const Rx_addr_p3 = &H0D                                     'RX address pipe3' register address
Const Rx_addr_p4 = &H0E                                     'RX address pipe4' register address
Const Rx_addr_p5 = &H0F                                     'RX address pipe5' register address
Const Tx_addr = &H10                                        'TX address' register address
Const Rx_pw_p0 = &H11                                       'RX payload width, pipe0' register address
Const Rx_pw_p1 = &H12                                       'RX payload width, pipe1' register address
Const Rx_pw_p2 = &H13                                       'RX payload width, pipe2' register address
Const Rx_pw_p3 = &H14                                       'RX payload width, pipe3' register address
Const Rx_pw_p4 = &H15                                       'RX payload width, pipe4' register address
Const Rx_pw_p5 = &H16                                       'RX payload width, pipe5' register address
Const Fifo_status = &H17                                    'FIFO Status Register' register address
'Various
Const True = 1
Const False = 0


'=== Config hardware ===
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 1

'Software SPI is NOT working with the nRF24L01, use hardware SPI only, but the SS pin must be controlled by our self



Config Pinb.1 = Output                                      'CE pin is output
Config Pinb.4 = Output                                      'SS pin is output
Config Pinb.3 = Input                                       'IRQ pin is input

Ce Alias Portb.1
Ss Alias Portb.4
Irq Alias Pinb.3

'ďîäęëţ÷ĺíčĺ ńâĺňîäčîäîâ číäčęŕöčč
Config Portb.0 = Output

Red_led Alias Portb.0





Red_led = 1

Waitms 20
Red_led = 0

Waitms 60
Red_led = 1

Waitms 20
Red_led = 0




Spiinit                                                     'init the spi pins

Set Ce
Waitms 10                                                   'Wait a moment until all hardware is stable
Reset Ce                                                    'Set CE pin low
Reset Ss                                                    'Set SS pin low (CSN pin)
Dim D_bytes(33) As Byte , B_bytes(33) As Byte               'Dim the bytes use for SPI, D_bytes = outgoing B_bytes = Incoming
Dim Temp As Byte , W As Word
Dim Packet_count As Byte





Goto Main_rx

Main_rx:

Print "Receiver rady!"
Print ""

Lcd "NRF24L01+DS18B20"
Lowerline
Lcd "AVRproject.ru"

Wait 2



Call R_register(status , 1)                                 'Read STATUS register
Reset Ce                                                    'Set CE low to access the registers
Gosub Setup_rx                                              'Setup the nRF24L01 for RX
Waitms 2                                                    'Add a delay before going in RX
Set Ce                                                      'Set nRF20L01 in RX mode

Do                                                          'Main loop for RX

If Irq = 0 Then                                             'Ĺńëč íŕ âűâîäĺ IRQ íčçęčé óđîâĺíü â áóôĺđ ďđčĺěíčęŕ ÷ňî-ňî ďîďŕëî

Red_led = 1

Reset Ce                                                   'Receiver must be disabled before reading pload

Do                                                         'Loop until all 3 fifo buffers are empty
Call R_register(rd_rx_pload , 5)                           'Read 5 bytes RX pload register

'âűâîä đĺçóëüňŕňîâ
 '===============================================================================================================
Print "Temperature: " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))       'Print the pload

Cls
Lcd "NRF24L01+DS18B20"
Lowerline
Lcd "T: " ; B_bytes(1) ; "C"                               'ňĺěďĺđŕňóđŕ




Call R_register(fifo_status , 1)                           'Read FIFO_STATUS
Loop Until B_bytes(1).0 = True                             'Test or RX_EMPTY bit is true, RX FIFO empty

D_bytes(1) = Write_reg + Status                            'Reset the RX_DR status bit
D_bytes(2) = &B01000000                                    'Write 1 to RX_DR bit to reset IRQ
Call W_register(2)
Set Ce                                                     'Enable receiver again
Waitms 2

End If

'Gosub Dump_registers                                        'Unremark me for debugging

Red_led = 0

Loop
Return



'=== Sub routines ===
Sub W_register(byval C_bytes As Byte)                       'Write register with SPI
Reset Ss                                                    'Manual control SS pin, set SS low before shifting out the bytes
Spiout D_bytes(1) , C_bytes                                'Shiftout the data bytes trough SPI , C_bytes is the amount bytes to be written
Set Ss                                                      'Set SS high
End Sub

Sub R_register(byval Command As Byte , Byval C_bytes As Byte) As Byte       'C_bytes = Count_bytes, number off bytes to be read
Reset Ss                                                    'Manual controle SS pin, set low before shifting in/out the bytes
Spiout Command , 1                                         'First shiftout the register to be read
Spiin B_bytes(1) , C_bytes                                 'Read back the bytes from SPI sended by nRF20L01
Set Ss                                                      'Set SS back to high level
End Sub


Setup_rx:                                                  'Setup for RX
D_bytes(1) = Write_reg + Rx_addr_p0                        'RX adress for 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)                                          'Send 6 bytes to SPI
D_bytes(1) = Write_reg + En_aa                             'Enable auto ACK for pipe0
D_bytes(2) = &H01
Call W_register(2)
D_bytes(1) = Write_reg + En_rxaddr                         'Enable RX adress for pipe0
D_bytes(2) = &H01
Call W_register(2)
D_bytes(1) = Write_reg + Rf_ch                             'Set RF channel
D_bytes(2) = 40
Call W_register(2)
D_bytes(1) = Write_reg + Rx_pw_p0                          'Set RX pload width for pipe0
D_bytes(2) = 5
Call W_register(2)
D_bytes(1) = Write_reg + Rf_setup                          'Setup RF-> Output power 0dbm, datarate 2Mbps and LNA gain on
D_bytes(2) = &H0F
Call W_register(2)
D_bytes(1) = Write_reg + Config_nrf                        'Setup CONFIG-> PRX=1(RX_device), PWR_UP=1, CRC 2bytes, Enable CRC
D_bytes(2) = &H0F
Call W_register(2)
Return



Dump_registers:                                            'Dumps all nRF24L01 registers to the terminal, handy for debugging
Print "* Dump nRF24L01 Registers *"
Call R_register(config_nrf , 1)
Print "CONFIG : " ; Bin(b_bytes(1))
Call R_register(en_aa , 1)
Print "EN_AA : " ; Bin(b_bytes(1))
Call R_register(en_rxaddr , 1)
Print "EN_RXADDR : " ; Bin(b_bytes(1))
Call R_register(setup_aw , 1)
Print "SETUP_AW : " ; Bin(b_bytes(1))
Call R_register(setup_retr , 1)
Print "SETUP_RETR : " ; Bin(b_bytes(1))
Call R_register(rf_ch , 1)
Print "RF_CH : " ; B_bytes(1)
Call R_register(rf_setup , 1)
Print "RF_SETUP : " ; Bin(b_bytes(1))
Call R_register(status , 1)
Print "STATUS : " ; Bin(b_bytes(1))
Call R_register(observe_tx , 1)
Print "OBSERVE_TX : " ; Bin(b_bytes(1))
Call R_register(cd , 1)
Print "CD : " ; Bin(b_bytes(1))
Call R_register(rx_addr_p0 , 5)
Print "RX_ADDR_P0 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(rx_addr_p1 , 5)
Print "RX_ADDR_P1 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(rx_addr_p2 , 5)
Print "RX_ADDR_P2 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(rx_addr_p3 , 5)
Print "RX_ADDR_P3 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(rx_addr_p4 , 5)
Print "RX_ADDR_P4 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(rx_addr_p5 , 5)
Print "RX_ADDR_P5 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(tx_addr , 5)
Print "TX_ADDR : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(rx_pw_p0 , 5)
Print "RX_PW_P0 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(rx_pw_p1 , 5)
Print "RX_PW_P1 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(rx_pw_p2 , 5)
Print "RX_PW_P2 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(rx_pw_p3 , 5)
Print "RX_PW_P3 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(rx_pw_p4 , 5)
Print "RX_PW_P4 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(rx_pw_p5 , 5)
Print "RX_PW_P5 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(fifo_status , 1)
Print "FIFO_STATUS : " ; Bin(b_bytes(1))
Return

Nie ma między nimi komunikacji. Gdzie może być błąd?

Link do komentarza
Share on other sites

oczekuję by nadajnik wysyłał wartość zmiennej a odbiornik ją odbierał i wyświetlał na lcd

Config Pinb.1 = Output 'CE pin is output

Config Pinb.4 = Output 'SS pin is output

Config Pinb.3 = Input 'IRQ pin is input

między RF a uC dla nadajnika i i odbiornika jest:

pin CE jest podłączony do PB.1

pin CSN jest podłączony do PB.4

pin IRQ jest podłączony do PB.3

działało mi to wcześniej po przeróbce oryginału (wywaliłem 1wire) ale teraz nie działa

[ Dodano: 23-05-2016, 22:20 ]

oryginał odbiornika:

'/http://avrproject.ru
'/2012
$regfile = "M8def.dat"
$crystal = 16000000
$baud = 19200
$hwstack = 40
$swstack = 20
$framesize = 40




'ęîíôčăóđŕöč˙ äčńďëĺ˙
'===============================================================================================================
Config Lcdpin = Pin , Rs = Portc.0 , E = Portc.1 , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portd.4 , Db7 = Portd.6
Config Lcd = 16 * 2
Cursor Off
Cls

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


'=== Declare sub routines
Declare Sub R_register(byval Command As Byte , Byval C_bytes As Byte)
Declare Sub W_register(byval C_bytes As Byte)

'=== Constante ===
'Define nRF24L01 interrupt flag's
Const Idle_int = &H00                                       'Idle, no interrupt pending
Const Max_rt = &H10                                         'Max #of Tx Retrans Interrupt
Const Tx_ds = &H20                                          'Tx Data Sent Interrupt
Const Rx_dr = &H40                                          'Rx Data Received
'SPI(nRF24L01) commands

Const Read_reg = &H00                                       'Define Read Command To Register
Const Write_reg = &H20                                      'Define Write Command To Register
Const Rd_rx_pload = &H61                                    'Define Rx Payload Register Address
Const Wr_tx_pload = &HA0                                    'Define Tx Payload Register Address
Const Flush_tx = &HE1                                       'Define Flush Tx Register Command
Const Flush_rx = &HE2                                       'Define Flush Rx Register Command
Const Reuse_tx_pl = &HE3                                    'Define Reuse Tx Payload Register Command
Const Nop_comm = &HFF                                       'Define No Operation , Might Be Used To Read Status Register
'SPI(nRF24L01) registers(addresses)
Const Config_nrf = &H00                                     'Config' register address
Const En_aa = &H01                                          'Enable Auto Acknowledgment' register address
Const En_rxaddr = &H02                                      'Enabled RX addresses' register address
Const Setup_aw = &H03                                       'Setup address width' register address
Const Setup_retr = &H04                                     'Setup Auto. Retrans' register address
Const Rf_ch = &H05                                          'RF channel' register address
Const Rf_setup = &H06                                       'RF setup' register address
Const Status = &H07                                         'Status' register address
Const Observe_tx = &H08                                     'Observe TX' register address
Const Cd = &H09                                             'Carrier Detect' register address
Const Rx_addr_p0 = &H0A                                     'RX address pipe0' register address
Const Rx_addr_p1 = &H0B                                     'RX address pipe1' register address
Const Rx_addr_p2 = &H0C                                     'RX address pipe2' register address
Const Rx_addr_p3 = &H0D                                     'RX address pipe3' register address
Const Rx_addr_p4 = &H0E                                     'RX address pipe4' register address
Const Rx_addr_p5 = &H0F                                     'RX address pipe5' register address
Const Tx_addr = &H10                                        'TX address' register address
Const Rx_pw_p0 = &H11                                       'RX payload width, pipe0' register address
Const Rx_pw_p1 = &H12                                       'RX payload width, pipe1' register address
Const Rx_pw_p2 = &H13                                       'RX payload width, pipe2' register address
Const Rx_pw_p3 = &H14                                       'RX payload width, pipe3' register address
Const Rx_pw_p4 = &H15                                       'RX payload width, pipe4' register address
Const Rx_pw_p5 = &H16                                       'RX payload width, pipe5' register address
Const Fifo_status = &H17                                    'FIFO Status Register' register address
'Various
Const True = 1
Const False = 0


'=== Config hardware ===
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 4 , Noss = 1

'Software SPI is NOT working with the nRF24L01, use hardware SPI only, but the SS pin must be controlled by our self



Config Pind.5 = Output                                      'CE pin is output
Config Pinb.2 = Output                                      'SS pin is output
Config Pind.7 = Input                                       'IRQ pin is input

Ce Alias Portd.5
Ss Alias Portb.2
Irq Alias Pind.7

'ďîäęëţ÷ĺíčĺ ńâĺňîäčîäîâ číäčęŕöčč
Config Portb.0 = Output

Red_led Alias Portb.0





Red_led = 1

Waitms 20
Red_led = 0

Waitms 60
Red_led = 1

Waitms 20
Red_led = 0




Spiinit                                                     'init the spi pins

Set Ce
Waitms 10                                                   'Wait a moment until all hardware is stable
Reset Ce                                                    'Set CE pin low
Reset Ss                                                    'Set SS pin low (CSN pin)
Dim D_bytes(33) As Byte , B_bytes(33) As Byte               'Dim the bytes use for SPI, D_bytes = outgoing B_bytes = Incoming
Dim Temp As Byte , W As Word
Dim Packet_count As Byte





Goto Main_rx

Main_rx:

Print "Receiver rady!"
Print ""

Lcd "NRF24L01+DS18B20"
Lowerline
Lcd "AVRproject.ru"

Wait 2



Call R_register(status , 1)                                 'Read STATUS register
Reset Ce                                                    'Set CE low to access the registers
Gosub Setup_rx                                              'Setup the nRF24L01 for RX
Waitms 2                                                    'Add a delay before going in RX
Set Ce                                                      'Set nRF20L01 in RX mode

Do                                                          'Main loop for RX

If Irq = 0 Then                                             'Ĺńëč íŕ âűâîäĺ IRQ íčçęčé óđîâĺíü â áóôĺđ ďđčĺěíčęŕ ÷ňî-ňî ďîďŕëî

Red_led = 1

Reset Ce                                                   'Receiver must be disabled before reading pload

Do                                                         'Loop until all 3 fifo buffers are empty
Call R_register(rd_rx_pload , 5)                           'Read 5 bytes RX pload register

'âűâîä đĺçóëüňŕňîâ
 '===============================================================================================================
Print "Temperature: " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))       'Print the pload

Cls
Lcd "NRF24L01+DS18B20"
Lowerline
Lcd "T: " ; B_bytes(1) ; "C"                               'ňĺěďĺđŕňóđŕ




Call R_register(fifo_status , 1)                           'Read FIFO_STATUS
Loop Until B_bytes(1).0 = True                             'Test or RX_EMPTY bit is true, RX FIFO empty

D_bytes(1) = Write_reg + Status                            'Reset the RX_DR status bit
D_bytes(2) = &B01000000                                    'Write 1 to RX_DR bit to reset IRQ
Call W_register(2)
Set Ce                                                     'Enable receiver again
Waitms 2

End If

'Gosub Dump_registers                                        'Unremark me for debugging

Red_led = 0

Loop
Return



'=== Sub routines ===
Sub W_register(byval C_bytes As Byte)                       'Write register with SPI
Reset Ss                                                    'Manual control SS pin, set SS low before shifting out the bytes
Spiout D_bytes(1) , C_bytes                                'Shiftout the data bytes trough SPI , C_bytes is the amount bytes to be written
Set Ss                                                      'Set SS high
End Sub

Sub R_register(byval Command As Byte , Byval C_bytes As Byte) As Byte       'C_bytes = Count_bytes, number off bytes to be read
Reset Ss                                                    'Manual controle SS pin, set low before shifting in/out the bytes
Spiout Command , 1                                         'First shiftout the register to be read
Spiin B_bytes(1) , C_bytes                                 'Read back the bytes from SPI sended by nRF20L01
Set Ss                                                      'Set SS back to high level
End Sub


Setup_rx:                                                  'Setup for RX
D_bytes(1) = Write_reg + Rx_addr_p0                        'RX adress for 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)                                          'Send 6 bytes to SPI
D_bytes(1) = Write_reg + En_aa                             'Enable auto ACK for pipe0
D_bytes(2) = &H01
Call W_register(2)
D_bytes(1) = Write_reg + En_rxaddr                         'Enable RX adress for pipe0
D_bytes(2) = &H01
Call W_register(2)
D_bytes(1) = Write_reg + Rf_ch                             'Set RF channel
D_bytes(2) = 40
Call W_register(2)
D_bytes(1) = Write_reg + Rx_pw_p0                          'Set RX pload width for pipe0
D_bytes(2) = 5
Call W_register(2)
D_bytes(1) = Write_reg + Rf_setup                          'Setup RF-> Output power 0dbm, datarate 2Mbps and LNA gain on
D_bytes(2) = &H0F
Call W_register(2)
D_bytes(1) = Write_reg + Config_nrf                        'Setup CONFIG-> PRX=1(RX_device), PWR_UP=1, CRC 2bytes, Enable CRC
D_bytes(2) = &H0F
Call W_register(2)
Return



Dump_registers:                                            'Dumps all nRF24L01 registers to the terminal, handy for debugging
Print "* Dump nRF24L01 Registers *"
Call R_register(config_nrf , 1)
Print "CONFIG : " ; Bin(b_bytes(1))
Call R_register(en_aa , 1)
Print "EN_AA : " ; Bin(b_bytes(1))
Call R_register(en_rxaddr , 1)
Print "EN_RXADDR : " ; Bin(b_bytes(1))
Call R_register(setup_aw , 1)
Print "SETUP_AW : " ; Bin(b_bytes(1))
Call R_register(setup_retr , 1)
Print "SETUP_RETR : " ; Bin(b_bytes(1))
Call R_register(rf_ch , 1)
Print "RF_CH : " ; B_bytes(1)
Call R_register(rf_setup , 1)
Print "RF_SETUP : " ; Bin(b_bytes(1))
Call R_register(status , 1)
Print "STATUS : " ; Bin(b_bytes(1))
Call R_register(observe_tx , 1)
Print "OBSERVE_TX : " ; Bin(b_bytes(1))
Call R_register(cd , 1)
Print "CD : " ; Bin(b_bytes(1))
Call R_register(rx_addr_p0 , 5)
Print "RX_ADDR_P0 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(rx_addr_p1 , 5)
Print "RX_ADDR_P1 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(rx_addr_p2 , 5)
Print "RX_ADDR_P2 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(rx_addr_p3 , 5)
Print "RX_ADDR_P3 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(rx_addr_p4 , 5)
Print "RX_ADDR_P4 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(rx_addr_p5 , 5)
Print "RX_ADDR_P5 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(tx_addr , 5)
Print "TX_ADDR : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(rx_pw_p0 , 5)
Print "RX_PW_P0 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(rx_pw_p1 , 5)
Print "RX_PW_P1 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(rx_pw_p2 , 5)
Print "RX_PW_P2 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(rx_pw_p3 , 5)
Print "RX_PW_P3 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(rx_pw_p4 , 5)
Print "RX_PW_P4 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(rx_pw_p5 , 5)
Print "RX_PW_P5 : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5))
Call R_register(fifo_status , 1)
Print "FIFO_STATUS : " ; Bin(b_bytes(1))
Return

oryginał nadajnika

'/http://avrproject.ru
'/2012
$regfile = "M8def.dat"
$crystal = 16000000
$baud = 19200
$hwstack = 40
$swstack = 20
$framesize = 40

'=== Declare sub routines
Declare Sub R_register(byval Command As Byte , Byval C_bytes As Byte)
Declare Sub W_register(byval C_bytes As Byte)

'=== Constante ===
'Define nRF24L01 interrupt flag's
Const Idle_int = &H00                                       'Idle, no interrupt pending
Const Max_rt = &H10                                         'Max #of Tx Retrans Interrupt
Const Tx_ds = &H20                                          'Tx Data Sent Interrupt
Const Rx_dr = &H40                                          'Rx Data Received

'SPI(nRF24L01) commands

Const Read_reg = &H00                                       'Define Read Command To Register
Const Write_reg = &H20                                      'Define Write Command To Register
Const Rd_rx_pload = &H61                                    'Define Rx Payload Register Address
Const Wr_tx_pload = &HA0                                    'Define Tx Payload Register Address
Const Flush_tx = &HE1                                       'Define Flush Tx Register Command
Const Flush_rx = &HE2                                       'Define Flush Rx Register Command
Const Reuse_tx_pl = &HE3                                    'Define Reuse Tx Payload Register Command
Const Nop_comm = &HFF                                       'Define No Operation , Might Be Used To Read Status Register
'SPI(nRF24L01) registers(addresses)
Const Config_nrf = &H00                                     'Config' register address
Const En_aa = &H01                                          'Enable Auto Acknowledgment' register address
Const En_rxaddr = &H02                                      'Enabled RX addresses' register address
Const Setup_aw = &H03                                       'Setup address width' register address
Const Setup_retr = &H04                                     'Setup Auto. Retrans' register address
Const Rf_ch = &H05                                          'RF channel' register address
Const Rf_setup = &H06                                       'RF setup' register address
Const Status = &H07                                         'Status' register address
Const Observe_tx = &H08                                     'Observe TX' register address
Const Cd = &H09                                             'Carrier Detect' register address
Const Rx_addr_p0 = &H0A                                     'RX address pipe0' register address
Const Rx_addr_p1 = &H0B                                     'RX address pipe1' register address
Const Rx_addr_p2 = &H0C                                     'RX address pipe2' register address
Const Rx_addr_p3 = &H0D                                     'RX address pipe3' register address
Const Rx_addr_p4 = &H0E                                     'RX address pipe4' register address
Const Rx_addr_p5 = &H0F                                     'RX address pipe5' register address
Const Tx_addr = &H10                                        'TX address' register address
Const Rx_pw_p0 = &H11                                       'RX payload width, pipe0' register address
Const Rx_pw_p1 = &H12                                       'RX payload width, pipe1' register address
Const Rx_pw_p2 = &H13                                       'RX payload width, pipe2' register address
Const Rx_pw_p3 = &H14                                       'RX payload width, pipe3' register address
Const Rx_pw_p4 = &H15                                       'RX payload width, pipe4' register address
Const Rx_pw_p5 = &H16                                       'RX payload width, pipe5' register address
Const Fifo_status = &H17                                    'FIFO Status Register' register address


Dim D_bytes(33) As Byte , B_bytes(33) As Byte               'Dim the bytes use for SPI, D_bytes = outgoing B_bytes = Incoming
Dim Temp As Byte , W As Word
Dim Packet_count As Byte



'=== Config hardware ===
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 16 , Noss = 1

'Software SPI is NOT working with the nRF24L01, use hardware SPI only, but the SS pin must be controlled by our self

Config Pind.5 = Output                                      'CE pin is output
Config Pinb.2 = Output                                      'SS pin is output
Config Pind.7 = Input                                       'IRQ pin is input

Ce Alias Portd.5
Ss Alias Portb.2
Irq Alias Pind.7

'ďîäęëţ÷ĺíčĺ ńâĺňîäčîäîâ číäčęŕöčč
Config Portd.3 = Output
Config Portd.4 = Output
Red_led Alias Portd.3
Green_led Alias Portd.4



'ďîäęëţ÷ĺíčĺ äŕň÷čęŕ
'====================================================================================
Config 1wire = Portc.0


Dim Byte0 As Byte
Dim Byte1 As Byte
Dim Sign As String * 1
Dim T As Byte
Dim T1 As Byte
Dim T2 As Byte

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



Red_led = 1
Green_led = 1
Waitms 20
Red_led = 0
Green_led = 0
Waitms 60
Red_led = 1
Green_led = 1
Waitms 20
Red_led = 0
Green_led = 0


Spiinit                                                     'init the spi pins

Set Ce
Waitms 10                                                   'Wait a moment until all hardware is stable
Reset Ce                                                    'Set CE pin low
Reset Ss                                                    'Set SS pin low (CSN pin)


Print "TX_device"                                           'Send to terminal who i'm

Red_led = 1

D_bytes(1) = Flush_tx                                      'Flush the TX_fifo buffer
Call W_register(1)
D_bytes(1) = Write_reg + Status                            'Reset the IRQ bits
D_bytes(2) = &B00110000
Call W_register(2)
Red_led = 0



Do


'==============================================================================
'ďîäăîňîâęŕ äŕííűő
'îďđîń äŕň÷čęŕ

Gosub 18b20


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




                                                      'Main loop for TX

Green_led = 1

Incr Packet_count                                           'Increase the send packet counter, for test only

If Packet_count > 254 Then Packet_count = 0

Gosub Setup_tx                                              'Setup the nrf24l01 for TX
D_bytes(1) = Wr_tx_pload                                   'Put 5 bytes in the TX pload buffer
D_bytes(2) = T1                                            'Byte 1   - îňďđŕâë˙ĺěŕ˙ ňĺěďĺđŕňóđŕ
D_bytes(3) = &HBB                                          'Byte 2  - îńňŕëüíűĺ 4 áŕéňŕ ěîćíî ňŕęćĺ čńďîëüçîâŕňü â ńâîčő öĺë˙ő
D_bytes(4) = &HCC                                          'Byte 3
D_bytes(5) = &H11                                          'Byte 4
D_bytes(6) = Packet_count                                  'Byte 5
Call W_register(6)                                          'Write 6 bytes to register

Waitms 2

Set Ce                                                      'Set CE for a short moment to transmit the fifo buffer
Waitms 1                                                    '
Reset Ce                                                    '
Waitms 100                                                  'Some delay to read the output on the terminal, line can be removed for max. speed

W = 0                                                      'Counter for time out



 Do

 Red_led = 1

 If Irq = 0 Then
  Call R_register(status , 1)
  Temp = B_bytes(1) And &B01110000                         'Mask the IRQ bits out the status byte

  Select Case Temp                                         'Which IRQ occurs
   Case Max_rt                                             'MAX_RT
     Print "Maximum number of TX retries, Flushing the TX buffer now !"
     D_bytes(1) = Flush_tx                                 'Flush the TX buffer
     Call W_register(1)
     D_bytes(1) = Write_reg + Status
     D_bytes(2) = &B00010000                               'Clear the MAX_RT IRQ bit
     Call W_register(2)
     Waitms 10
     Red_led = 0
     Exit Do
   Case Tx_ds                                              'TX_DS
     Print "Packet " ; Packet_count ; " send and ACK received."
     D_bytes(1) = Write_reg + Status
     D_bytes(2) = &B00100000                               'Clear the TX_DS IRQ bit
     Call W_register(2)
     Waitms 10
     Red_led = 0
     Exit Do
   Case Else                                               'Other IRQ ??
     Print "Other irq " ; Bin(temp)
     D_bytes(1) = Flush_tx                                 'Flush the TX buffer
     Call W_register(1)
     D_bytes(1) = Write_reg + Status
     D_bytes(2) = &B00110000                               'Clear both MAX_RT, TX_DS bits
     Call W_register(2)
  End Select
 End If

 Waitms 1                                                  'Time out waiting for IRQ 1ms * 100
 Incr W                                                    'Increment W
  If W > 200 Then                                          'Waited for 200ms
   Print "No irq response from RF24L01 within 100ms"
   Exit Do                                                 'Exit the wait loop
  End If




 Loop

Red_led = 0
Wait 1

Loop



'=== Sub routines ===
Sub W_register(byval C_bytes As Byte)                       'Write register with SPI
Reset Ss                                                    'Manual control SS pin, set SS low before shifting out the bytes
Spiout D_bytes(1) , C_bytes                                'Shiftout the data bytes trough SPI , C_bytes is the amount bytes to be written
Set Ss                                                      'Set SS high
End Sub

Sub R_register(byval Command As Byte , Byval C_bytes As Byte) As Byte       'C_bytes = Count_bytes, number off bytes to be read
Reset Ss                                                    'Manual controle SS pin, set low before shifting in/out the bytes
Spiout Command , 1                                         'First shiftout the register to be read
Spiin B_bytes(1) , C_bytes                                 'Read back the bytes from SPI sended by nRF20L01
Set Ss                                                      'Set SS back to high level
End Sub


Setup_tx:                                                   'Setup for TX

D_bytes(1) = Write_reg + Tx_addr                           'TX adress
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 adress for 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 for pipe0
D_bytes(2) = &H01
Call W_register(2)
D_bytes(1) = Write_reg + En_rxaddr                         'Enable RX adress for pipe0
D_bytes(2) = &H01
Call W_register(2)
D_bytes(1) = Write_reg + Rf_ch                             'Set RF channel
D_bytes(2) = 40
Call W_register(2)
D_bytes(1) = Write_reg + Rf_setup                          'Setup RF-> Output power 0dbm, datarate 2Mbps and LNA gain on
D_bytes(2) = &H0F
Call W_register(2)
D_bytes(1) = Write_reg + Config_nrf                        'Setup CONFIG-> PRX=0(TX_device), PWR_UP=1, CRC 2bytes, Enable CRC
D_bytes(2) = &H0E
Call W_register(2)

Return






'îďđîń äŕň÷čęŕ
'=====================================================================

18b20:
1wreset

If Err = 1 Then            'ĺńëč ďđč îďđîńĺ íĺáűëî îňâĺňŕ ńňŕâčě ôëŕă îřčáęč


Red_led = 1



Wait 5

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




Chcę po prostu wysyłać wartość zmiennej z nadajnika do odbiornika i wyświetlać jej wartość

tyle że u mnie nie potrzebne jest 1wire i ten odczyt z czujnika 18b20.

Link do komentarza
Share on other sites

Jak fizycznie połączyłeś moduł nadajnika z resztą układu? Moc masz ustawioną na maksymalną, więc jak jakimiś cienkimi i długimi przewodami to układ może nie działać ze względu na spadki napięcia przy rozpoczynaniu nadawania.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.