اطلاعیه

Collapse
No announcement yet.

[آموزش]راه اندازی ماژول +nRF24L01

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    پاسخ : راه اندازی ماژول +nRF24L01

    با سلام
    امروز اومدم مداری رو که چند روز پیش روی برد بُرد بسته بودمو زدم به تغذیه و بار اول کار کرد! :angry:
    دیگه داشتم مطمئن میشدم که حداقل یکی از ماژول ها سوخته! :angry:
    این ماژول ها طوری طراحی شده که چند روزی اعصاب رو خرد بکنه، بعد اینکه کاملا خرد شد کار کنه! :angry:
    فقط همونطور که بعضی از دوستان گفتن دو سر تغذیه ماژول گیرنده باید یک خازن بزاریم وَ اِلا کار نمیکنه...کسی میدونه چرا ؟؟؟
    از سختی نترس! این سختی هاست که جایگاه و مقام انسان را بالا میبرد...

    دیدگاه


      پاسخ : راه اندازی ماژول +nRF24L01

      من دیگه رسمآ دارم نا امید میشم....آخرین راه حلمم اینه که براش یه pcb بزنم به جای برد برد....امیدوارم اون دیگه جواب بده oo:

      دیدگاه


        پاسخ : راه اندازی ماژول +nRF24L01

        چند نکته رو عرض کنم خدمت دوستان من باب تجربه

        1: آخه مگه میشه به برد بورد هم "اطمینان" کرد؟
        ساده ترین مدارها هم برخی اوقات جواب نمیده!
        چه برسه به اینکه بخوای فرستنده گیرنده ببندی!

        2: هرچند که نمیشه اطمینان کرد اما اولین بار که
        یک پروژه بی سیم با RFM12 بستیم روی برد بورد بود!
        (حدود 3.5 سال پیش)
        جواب داد اما اصلا قابل اطمینان نبود!
        شب میرفتیم صبح میومدیم جواب نمیداد!
        در این حد!

        3: اصلا نباید نا امید شد! اگه قرار به ناامیدی باشه
        پس نباید چیزی کشف بشه یا اختراع بشه یا ساخته بشه
        پس محکم باید ادامه داد!

        4: خاطره
        سه سال و نیم پیش که با دوستم میخواستیم RFM12 رو ببندیم
        مثه الان نبود که کدها باشه
        مدارها باشه
        نکات عملی باشه
        هدر نوشته بشه و ...
        بعد از حدود یک هفته سر و کله زدن با ماژول و میکرو
        یک سایت آلمانی پیدا کردیم (صفحات 15 به بعد در جستجوی گوگل!!! )
        که یک برنامه ی نمونه گذاشته بود
        بستیمش و نوشتیمش
        بعد از سه روز تونستیم راه بندازیمش
        یادمه اولین بار که تونستیم جواب بگیریم
        یه جیغ بلند کشیدیم :wow:
        و ...

        5: یک دفتر دارم بسیاری از نکات عملی که باهاش برخورد میکنم
        یا سوتی هایی که میدم رو
        داخلش مینویسم!
        این دفتر فوق العاده کمک میکنه! ...

        :read:
        1: اللهم صل علي محمد و آل محمد و عجل فرجهم و ...
        2: دانش بهتره يا ثروت؟ بدون شعور هيچکدوم!
        3: دلا معاش چنان کن که گر بلغزد پاي *** فرشته‌ات به دو دست دعا نگه دارد (حافظ)

        دیدگاه


          پاسخ : راه اندازی ماژول +nRF24L01

          نوشته اصلی توسط محمدصادق رستمی
          (صفحات 15 به بعد در جستجوی گوگل!!! )
          محمد جان من خراب این تیکه صحبتتم :biggrin:
          گیرم گلاب ناب شما اصل قمصر است/اما چه سود، حاصل گلآ‌های پرپر است!-از آن زمان که آیینهآ‌گردان شب شُدید*آیینه دل از دَم دوران مکدر است-وقتی بهار، وصله ناجور فصلآ‌هاست*وقتی تبر، مدافع حق صنوبر است-وقتی به دادگاه عدالت، طناب دار*بر صدر میآ‌نشیند و قاضی و داور است-از من مخواه شعرِ تر، ای بیآ‌خبر ز درد!*شعری که خون از آن نچکد ننگ دفتر است!-ای از تبار هرچه سیاهی، سرشتآ‌تان*رنگ جهنم است تمام بهشتآ‌تان
          "گزیده ابیاتی چند از بیداد خراسانی"

          دیدگاه


            پاسخ : راه اندازی ماژول +nRF24L01

            سلام دوستان
            من 2 هفته پیش شروع کردم به مطالعه دیتاشیت و کتابخونه هایی نوشته بودن 4شنبه هفته پیش بعد 2 روز برنامه نوشتن و کار عملی تونستم این ماژول رو راه بندازم با یک مگا 32 و یک مگا8
            فقط یک مشکل دارم این که من میکرو گیرنده رو میزارم که وقتی وقفه اتفاق افتاد (همون پایه IRQ ) بیاد اطلاعات دریافتی رو روی lcd نشون بده. حالا اگه بعد از روشن کردن مدار گیرنده مثلا تا 5ثانیه بعد فرستنده رو روشن کنم اطلاعات رو بفرستم همه چیز خوبه و درست ارسال و دریافت میشه ولی اگه بعد مثلا 20 ثانیه برستنده رو روشن کنم یا گیرنده اصلا چیزی دریافت نمیکنه یا اگر دریافت بکنه و وقفه هم بده مقدار صفر رو برمیگردونه
            میتونید کمکم کنید؟

            دیدگاه


              پاسخ : راه اندازی ماژول +nRF24L01

              نوشته اصلی توسط heidarali
              محمد جان من خراب این تیکه صحبتتم :biggrin:
              میدونی علتش چیه؟ یعنی چرا صفحات 15 ؟
              1: سایتش آلمانی بود و مطالبش هم آلمانی
              اما ما انگلیسی سرچ زده بودیم
              بنابراین خیلی طبیعی بود که اونجاها باشه
              2: هیچوقت نباید نا امید شد!
              برای پیدا کردن یک مطلب مورد نظرم یه بار 40 صفحه از جستجوی گوگل رو بررسی کردم
              تا به جوابم برسم!

              نوشته اصلی توسط saeed210
              فقط یک مشکل دارم این که من میکرو گیرنده رو میزارم که وقتی وقفه اتفاق افتاد (همون پایه IRQ ) بیاد اطلاعات دریافتی رو روی lcd نشون بده. حالا اگه بعد از روشن کردن مدار گیرنده مثلا تا 5ثانیه بعد فرستنده رو روشن کنم اطلاعات رو بفرستم همه چیز خوبه و درست ارسال و دریافت میشه ولی اگه بعد مثلا 20 ثانیه برستنده رو روشن کنم یا گیرنده اصلا چیزی دریافت نمیکنه یا اگر دریافت بکنه و وقفه هم بده مقدار صفر رو برمیگردونه.میتونید کمکم کنید؟
              آفرین که تونستی راه بندازیش
              در فرستنده گیرنده ها بحثی هست به نام
              سنکرون سازی (همزمانی) بین فرستنده و گیرنده
              یک قسمتش مربوط به مدارات داخلی فرستنده/گیرنده ها میشه
              و ما با اون کاری نداریم
              یک قسمت هم مربوط به خود ما میشه.
              آیا شما این موضوع رو رعایت کردی؟
              ...
              :read:
              1: اللهم صل علي محمد و آل محمد و عجل فرجهم و ...
              2: دانش بهتره يا ثروت؟ بدون شعور هيچکدوم!
              3: دلا معاش چنان کن که گر بلغزد پاي *** فرشته‌ات به دو دست دعا نگه دارد (حافظ)

              دیدگاه


                پاسخ : راه اندازی ماژول +nRF24L01

                با سلام
                دوستان من چند سال پیش با بسکام کار کرده بودم الان یکم یادم رفته.

                این برنامه راه اندازی ماژول با بسکامه. چند تا سوال داشتم راجعبه هش لطفا اگر کسی میدونه راهنمایی کنه ممنون میشم.
                کد:
                'in this sample you can send 2 byte numbrical and learn how send more byte of different data
                '------------------------------------------------------------------
                '  Nordic nRF24L01 data link demo in Enhanced Shockburst mode
                '    By shobeir 2012 shobeir90@yahoo.co.uk
                '          Created with Bascom-Avr: 2.0.7.3
                '------------------------------------------------------------------
                
                '$regfile = "M8def.dat"
                $regfile = "xm32a4def.dat"
                '$crystal = 7372800
                $crystal = 32000000
                '$baud = 19200
                $hwstack = 255
                $swstack = 255
                $framesize = 255
                $lib "xmega.lib"
                $external _xmegafix_clear
                $external _xmegafix_rol_r1014
                Config Osc = Enabled , 32mhzosc = Enabled          'We use internal 32MHz
                Config Sysclock = 32mhz , Prescalea = 1 , Prescalebc = 1_1 'Internal 32MHz, no prescaler
                Config Priority = Static , Vector = Application , Lo = Enabled
                
                '=== 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
                'Config Spic = Hard , Master = Yes , Mode = 0 , Clockdiv = Clk16 , Data_order = Msb , Ss = Auto
                
                
                'Software SPI is NOT working with the nRF24L01, use hardware SPI only, but the SS pin must be controlled by our self
                Config Pinb.0 = Output 'test pin
                
                Config Pinc.1 = Output 'CE pin is output
                Config Pinc.4 = Output 'SS pin is output
                Config Portc.5 = Output
                Config Portc.7 = Output
                Set Pinc.4
                Config Pinc.0 = Input 'IRQ pin is input
                Config Pinc.3 = Input 'TX/RX Device _select
                Ddrc = &B1011_1010
                Ce Alias Portc.1
                Ss Alias Portc.4
                Irq Alias Pinc.0
                Txrx_device Alias Pinc.3
                Config Spi = Soft , Din = Pinc.6 , Dout = Portc.5 , Ss = None , Clock = Portc.7 , Spiin = 0 , Mode = 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
                
                Dim Lword As Word , L As Word
                
                If Txrx_device = True Then Goto Main_tx           'Is this the RX or TX device?
                '**********************test
                'Do
                'Portb.0 = Not Portb.0
                'Waitms 300
                'Loop
                '===Main rx==========================================================================================================================
                Main_rx:
                Set Portb.0
                Waitms 200
                Reset Portb.0
                Call R_register(status , 1) 'Read STATUS register
                Print "Rx_device" 'Send to terminal who i'm
                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
                'Portb.0 = 1
                If Irq = 0 Then 'Wait until IRQ occurs, pin becomes low on interrupt
                 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 "Pload : " ; Hex(b_bytes(1)) ; Hex(b_bytes(2)) ; Hex(b_bytes(3)) ; Hex(b_bytes(4)) ; Hex(b_bytes(5)) 'Print the pload
                
                 ' Lword = &H100 * B_bytes(1)
                 ' Lword = Lword Or B_bytes(2)
                    L = 0
                    L = B_bytes(2)
                 Swap L
                    Lword = B_bytes(1) + L
                
                
                
                 If Lword = 65535 Then 'Or B_bytes(2) = 12 Or B_bytes(3) = 12 Or B_bytes(4) = 12 Or B_bytes(5) = 12 Then
                 Portb.0 = Not Portb.0
                 Else
                 Reset Portb.0
                 End If
                
                
                 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
                Loop
                Return
                
                '===Main tx==========================================================================================================================
                Main_tx:
                Print "TX_device" 'Send to terminal who i'm
                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)
                Do 'Main loop for TX
                Incr Packet_count                      'Increase the send packet counter, for test only
                If Packet_count > 254 Then Packet_count = 0
                Gosub Setup_tx                       'Setup the nrf240l01 for TX
                D_bytes(1) = Wr_tx_pload                  'Put 5 bytes in the TX pload buffer
                D_bytes(2) = &HAA                      'Byte 1
                D_bytes(3) = &HBB                      'Byte 2
                D_bytes(4) = &HCC                      'Byte 3
                D_bytes(5) = &H11                      'Byte 4
                D_bytes(6) = Packet_count                  'Byte 5 will be increase every loop
                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
                Waitms 10
                W = 0                            'Counter for time out
                
                Do
                
                'test
                Do
                
                Lword = 65535
                 Portb.0 = Not Portb.0
                 Gosub Setup_tx
                 D_bytes(1) = Wr_tx_pload
                 D_bytes(2) = Lword And &H00FF
                 L = &HFF00 And Lword
                 Swap L
                 D_bytes(3) = L And &H00FF
                 Call W_register(6)
                 Waitms 2
                 Set Ce                          'Set CE for a short moment to transmit the fifo buffer
                 Waitms 1                         '
                 Reset Ce
                 Waitms 100
                 If Irq = 0 Then
                 Call R_register(status , 1)
                      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 If
                
                Loop
                'tested
                
                 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)
                 Exit Do
                 Case Tx_ds                     'TX_DS
                 Print "Packet " ; Packet_count ; " send and ACK received."
                
                '      D_bytes(1) = 12
                '      Call W_register(1)
                
                
                      D_bytes(1) = Write_reg + Status
                      D_bytes(2) = &B00100000             'Clear the TX_DS IRQ bit
                 Call W_register(2)
                 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 > 100 Then 'Waited for 100ms
                 Print "No irq response from RF20L01 within 100ms"
                 Exit Do 'Exit the wait loop
                 End If
                Loop
                Loop
                Return
                
                
                
                '**********************************************************************************************w reg
                '=== 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
                
                '**********************************************************************************************r reg
                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
                
                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
                
                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

                اول این که این D_Byte, B_Byte و .... رو از کجا آورده و مقدار دهی کرده ؟

                دوم یه توضیح مختصر راجعبع Declare و این که بعضی جاها مثلا R_register رو صدا زده !! کجا اون رو آرایه تعریف کرده ؟ و کی مقدار داده که الان اون مقدار ها رو میخونه؟

                سوم این که در سطر های آخر مقدار RF_CH برای تغییر فرکانس کاری فرستنده گیرنده هست. من می خوام به این متغییر پین تغریف کنم که اگه پایه ها صفر و یک و ... بودن از روی اون فرکانسش رو از بیرون تغییر بدم امکانش هست؟

                چهارم این که چطور میتونم از بیرون 8 تا پایه بردارم و 8 بیت 8 بیت بهش داده بدم برای ارسال؟ میدونم چطور پایه اختصاص بدم فقط نمیدونم این که از D_Byte داره میخونه میقذاره بیرون این مقدار پایه ها رو چطور بریزم روی D_Byte که اون ها رو بفرسته .

                خیلی ممنون

                دیدگاه


                  پاسخ : راه اندازی ماژول +nRF24L01

                  اگه کسی جواب سوال منم میدونست ممنون میشم جواب بدید

                  دیدگاه


                    پاسخ : راه اندازی ماژول +nRF24L01

                    اگه منظورتون برده ماژوله آره همین رجیستره و 0db حداکثر بورده . با تغییر مقدار رجیستر میشه برد رو تغییر داد .

                    دیدگاه


                      پاسخ : راه اندازی ماژول +nRF24L01

                      مقدار رجیستر ها رو چطور میشه از بیرون تغییر داد؟؟

                      مثلا میشه یه متغییر تعریف کرد که مقدار 8 تا پین از پایه های میکرو رو بخونه و بگذاره توی رجیستر؟؟؟

                      دیدگاه


                        پاسخ : راه اندازی ماژول +nRF24L01

                        نوشته اصلی توسط محمدصادق رستمی
                        آفرین که تونستی راه بندازیش
                        در فرستنده گیرنده ها بحثی هست به نام
                        سنکرون سازی (همزمانی) بین فرستنده و گیرنده
                        یک قسمتش مربوط به مدارات داخلی فرستنده/گیرنده ها میشه
                        و ما با اون کاری نداریم
                        یک قسمت هم مربوط به خود ما میشه.
                        آیا شما این موضوع رو رعایت کردی؟
                        ...
                        :read:
                        آفرینتون خیلی بهم چسبید
                        راستش این که گفتید نمیدونم چیه :sad: میشه لطف کنید یکم توضیح بدید یا یک لینک براش بدید؟

                        دیدگاه


                          پاسخ : راه اندازی ماژول +nRF24L01

                          از کجا میتونم بفهمم آیا دیتا از فرستنده ارسال میشه یا نه؟؟؟

                          دیدگاه


                            پاسخ : راه اندازی ماژول +nRF24L01

                            من حواسم نبود 5 ولت دادم به ماژول یعنی ماژولم سوخته؟؟

                            دیدگاه


                              پاسخ : راه اندازی ماژول +nRF24L01

                              نوشته اصلی توسط زوار
                              اگه کسی جواب سوال منم میدونست ممنون میشم جواب بدید
                              در مورد سوال شما، در دیتاشیت نوشته:
                              The PA control is used to set the output power from the nRF24L01 power amplifier (PA). In TX mode PA control has four programmable steps, see Table 14. The PA control is set by the RF_PWR bits in the RF_SETUP register.
                              بنابراین شما باید بری و دیتاشیت ر ببینی
                              داخلش نوشته اگه RF_PWR برابر 11 باشه یعنی 0dbm و اگه 10 باشه 6-
                              و اگه 01 باشه 12- و اگه 00 باشه میشه 18- دی بی ام

                              نکته 1 :
                              هر 1 میلی وات برابر با یک dbm هست
                              فرمولشم اینه: 10 ضربدر لگاریتم (توان بر حسب میلی وات) در مبنای 10
                              پس 6- دی بی ام میشه ( 10 به توان 0.6- ) میلی وات یا 0.25 میلی وات و ...

                              نکته 2 :
                              درون دیتاشیت RF_SETUP رو نگاه کن.
                              (نمیدونم تنظیمات هدرش در هدر موجود این سایت چیه
                              اما آدرس رجیسترش H06 هستش)

                              نوشته اصلی توسط Shar01
                              مقدار رجیستر ها رو چطور میشه از بیرون تغییر داد؟؟
                              مثلا میشه یه متغییر تعریف کرد که مقدار 8 تا پین از پایه های میکرو رو بخونه و بگذاره توی رجیستر؟؟؟
                              بله میشه
                              این ماژول قراره برای ما، "داده مد نظرمون" رو ارسال کنه
                              پس این داده مد نظر ما، به شکل های مختلف میتونه باشه:
                              1: خواندن پورت ها
                              2: مقدار ADC
                              3: مقدار تایمر
                              و ...
                              1: اللهم صل علي محمد و آل محمد و عجل فرجهم و ...
                              2: دانش بهتره يا ثروت؟ بدون شعور هيچکدوم!
                              3: دلا معاش چنان کن که گر بلغزد پاي *** فرشته‌ات به دو دست دعا نگه دارد (حافظ)

                              دیدگاه


                                پاسخ : راه اندازی ماژول +nRF24L01

                                نوشته اصلی توسط saeed210
                                راستش این که گفتید نمیدونم چیه :sad: میشه لطف کنید یکم توضیح بدید یا یک لینک براش بدید؟
                                در مورد سنکرون سازی:
                                یکی از موارد قابل توجه و مهم در فرستنده/گیرنده (چه باسیم چه بیسیم)
                                اینه که گیرنده با فرستنده همزمان باشه
                                یعنی گیرنده بداند که چه زمانی و چه مقدار اطلاعات با چه فرمتی به او میرسد!
                                بذارین با مثال قضیه رو باز کنم
                                فرض کنیم شما میخوای مدام چند بایت رو ارسال کنی
                                اما فاصله بین زمان های ارسالت مشخص نیست
                                خب! حالا گیرنده از کجا بفهمه که چه زمانی قراره داده بهش برسه؟
                                و اینکه طول داده چقدره؟ و یا اینکه نوع داده چیه؟
                                یک مرحله سنکرون سازی در خود مدار داخلی فرستنده/گیرنده انجام میشه
                                و ما باهاش کار نداریم
                                که معمولا به سنکرون سازی کلاک معروفه (انواع دیگه هم داره
                                فقط گفتم تا برای دوستان مرور بشه)
                                اما خودمونم باید یک نوع سنکرون سازی انجام بدیم
                                چطوری؟
                                در این مثالی که زدم با استفاده از یک هدر!
                                یعنی بیایم 1 بایت (یا بیشتر) از داده ها رو به هدر اختصاص بدیم!
                                قراره در این هدر چی نوشته بشه؟
                                نوع داده، طول داده، و ... بستگی به کاربرد داره
                                مثلا از 8 بیت، 2 بیت رو به نوع داده و 6 بیت رو به طول داده اختصاص میدیم
                                همچنین میتونیم قرارداد کنیم که همیشه در ابتدای داده ها، یک بایت 0xFF یا 0xAA یا ... میفرستیم
                                بعدشم هدر رو قرار میدیم
                                در کل هدف اینه:
                                گیرنده متوجه بشه که داره براش داده میاد
                                و این داده چقدره
                                و نوع داده چیه و ...

                                بسته به اینکه کار شما چقدر پیچیده یا ساده باشه
                                میشه این بحث رو دقیق تر مشخص کرد
                                سعی کردم یک کلیت از این موضوع رو دست و پا شکسته بگم

                                نکته بعدی هم اینه که بهتره که ابتدا فرستنده روشن بشه و بعد گیرنده
                                و این مستقیما به این بستگی داره که شما چطوری داده ها رو بفرستی
                                با چه فاصله زمانی و ...
                                در غیر اینصورت باید تمهیداتی اندیشید تا مشکلی پیش نیاد!
                                مثلا یکی از این تمهیدات میتونه این باشه:
                                هروقت که فرستنده روشن شد، اول یک ارتباط با گیرنده بگیره
                                و مثلا یک کد خاص رو بفرسته
                                و اگه گیرنده همون کد رو دریافت کرد
                                یک پیغام به فرستنده بده و بعد از اینکه صحت پیغام گیرنده در فرستنده مشخص شد
                                داده های اصلی رد و بدل بشن!
                                (به عبارتی Ack و Nack )
                                1: اللهم صل علي محمد و آل محمد و عجل فرجهم و ...
                                2: دانش بهتره يا ثروت؟ بدون شعور هيچکدوم!
                                3: دلا معاش چنان کن که گر بلغزد پاي *** فرشته‌ات به دو دست دعا نگه دارد (حافظ)

                                دیدگاه

                                لطفا صبر کنید...
                                X