NRF24L01 Kullanımı

Başlatan erdogan2734, 26 Haziran 2016, 00:07:04

Dtmf

alısumer hocam nrfmodulun (4) ve (-) ucları arasına 10uf kondansator koydunuzmu ben koymamıstım calısmıyor du baglayınca calıstı antenlı PA versıyonu ıle 1800m acık alanda cektı tabı ardunıo ıle calıstırdım pıc ıle denemedım

alisumer

#151
nrf için olan regilator modullerden kullanıyorum hocam onlarda gerek yok diye biliyorum.genede bir denerim.sanırım benim sorunum alıcı kısmında anladığım kadarı ile verici çok ince ayar istemiyor payloda veriyi atıp ce ye puls verince gönderiyor txflash ı da yapıyorum yeni veri yüklemeden.alıcı kısımda okunan değer nedir diye gelen veriyi seri çıkışla PC terminal programından takip ediyorum status registeri gönderiyor sanki gelen veri gönderdiğim analog okuma verisi ile paralel değişen bir veri göremiyorum.Alıcıda R_RX_PAYLOAD ı
     CSN     = 0
        SSPBUF  = $E2
        CALL    ALL1
        CSN     = 1
        PAUSEUS   3
        CSN     = 0
        SSPBUF  = $61
        CALL    ALL1
        A2      = SSPBUF  
        SSPBUF  = $00
        CALL    ALL1
        B2      = SSPBUF
        CSN     = 1 
        PAUSEUS   1  
  şeklinde gönderiyorum bunun karşılığında nrf miso dan bana iki byte veri göndermesini bekliyorum ilki vericiden gönderdiğim veri ikincisi status registerin bilgisi gelen ilk veriyi B2 değişkenine aktarıyorum ikinci veriyi de A2 diye değişkene atadığım kodu da denedim iki ayrı veri geliyor doğru ama ikiside benim gönderdiğim POT verisi değil arada bir kendiliğinden değişen başka veriler bu arada SSPBUF  = $E2 rx flash komutu kullanmadan da denedim o da hüsren balatayı sıyırdım kavrama yok :)
Hep meraktan

alisumer

 ;D  ;D  ;D  ;D  Bir aydır mosı mıso bağlantılarını yanlış yaptığımdan çalışmıyormuş ya cıhaz mosı nedır ya adam gıbı sdı sdo ısım verseler karıştırmazdım gibi bi bahanem var içimi rahatlatıyor :)
Hep meraktan

Dtmf

#153
Alisumer basardigin ici sevindim 😊 mahsuru yoksa programi paylasabirmisin ardunio ile calistiriyoruz ok.ama pic ile calistirmak icin bize bir isik olsun ne dersin😊

alisumer

nrf ayar kısmını paylaşırım yazılımı siz yazarsınız kendi programınıza göre hem asm hem basıc te denedim çalışıyor ayarlar donanımsal spı kullandım .
NRF:
        'CE      = 1    
        CSN     = 0
        PAUSEUS 6
        SSPBUF  = $FF
        CALL    GONDER
        PAUSEUS 6
        CSN     = 1
        PAUSEUS 6
        CSN     = 0
        PAUSEUS 6
        SSPBUF  = $20       'CONFIG    0011 1111
        CALL    GONDER      'power ON,prx
        SSPBUF  = $3F
        CALL    GONDER
        PAUSEUS 6
        CSN     = 1
        PAUSEUS  6
        CSN     = 0
        PAUSEUS 6
        SSPBUF  = $21       ' EN_AA
        CALL    GONDER      ' 0000 0011
        SSPBUF  = $03
        CALL    GONDER
        PAUSEUS 6
        CSN     = 1
        PAUSEUS   6
        CSN     = 0
        PAUSEUS 6
        SSPBUF  = $22        ' EN_RXADDR: 0000 0011
        CALL    GONDER
        SSPBUF  = $03
        CALL    GONDER
        PAUSEUS 6
'        CSN     = 1
'        PAUSEUS   6         
'        CSN     = 0
'        PAUSEUS 6
'        SSPBUF  = $50
'        CALL    GONDER
'        SSPBUF  = $73
'        CALL    GONDER
'        PAUSEUS 6
        
        CSN     = 1                                              
        PAUSEUS   6
        CSN     = 0
        PAUSEUS 6
        SSPBUF  = $23           'SETUP_AW  0000 0011 5 BYTE ADRES
        CALL    GONDER
        SSPBUF  = $03
        CALL    GONDER
        PAUSEUS 6
        CSN     = 1                                              
 
        PAUSEUS   6
        CSN     = 0
        PAUSEUS 6
        SSPBUF  = $24           'SETUP_RETR OTOTEKRAR GÖNDERME İPTAL
        CALL    GONDER
        SSPBUF  = $00
        CALL    GONDER
        PAUSEUS 6
        CSN     = 1 
        PAUSEUS   6
        CSN     = 0
        PAUSEUS 6
        SSPBUF  = $25            'RF_CH    2400 + $35 MHZ
        CALL    GONDER
        SSPBUF  = $35
        CALL    GONDER
        
        PAUSEUS 6
        CSN     = 1                                             
        PAUSEUS   6
        CSN     = 0
        PAUSEUS 6
        SSPBUF  = $26            'RF_SETUP = 0db,1mbps,LNA default değerler
        CALL    GONDER
        SSPBUF  = $07
        CALL    GONDER
        PAUSEUS 6
        CSN     = 1
        PAUSEUS   6
        CSN     = 0
        PAUSEUS 6
        SSPBUF  = $27            'STATUS KESME BAYRAKLARI RESET
        CALL    GONDER
        SSPBUF  = $70
        CALL    GONDER
        PAUSEUS 6
        CSN     = 1
        PAUSEUS   6
        CSN     = 0
        PAUSEUS 6
        SSPBUF  = $2A            'RX_ADDR_P0 
        CALL    GONDER
        SSPBUF  = $53
        CALL    GONDER
        SSPBUF  = $53
        CALL    GONDER
        SSPBUF  = $53
        CALL    GONDER
        SSPBUF  = $53
        CALL    GONDER
        SSPBUF  = $54
        CALL    GONDER
        PAUSEUS 6
        CSN     = 1 
        PAUSEUS   6
        CSN     = 0
        PAUSEUS 6
        SSPBUF  = $30         'TX_ADDR
        CALL    GONDER
        SSPBUF  = $53
        CALL    GONDER
        SSPBUF  = $53
        CALL    GONDER
        SSPBUF  = $53
        CALL    GONDER
        SSPBUF  = $53
        CALL    GONDER
        SSPBUF  = $54
        CALL    GONDER
        PAUSEUS 6
        CSN     = 1
        PAUSEUS   6
        CSN     = 0
        PAUSEUS 6
        SSPBUF  = $31          'GÖNDERİLECEK BYTE UZUNLUĞU 
        CALL    GONDER
        SSPBUF  = $0A
        CALL    GONDER
        PAUSEUS 6
        CSN     = 1
        PAUSEUS   6
        CSN     = 0
        PAUSEUS 6
        SSPBUF  = $E2           'RX FIFO SİLME
        CALL    GONDER 
        PAUSEUS 6
        CSN     = 1
        PAUSEUS 6
        CSN     = 0
        PAUSEUS 6
        SSPBUF  = $E1         'TX FİFO SİLME
        CALL    GONDER      

        PAUSEUS 6
        CSN = 1 
        CE = 1 
        PAUSE 20 
        GOTO HESAP       
Registerlere değişken atamadım benim kafamı daha fazla karıştrıyor diye isteyen yazarsa daha kısa olabilir bu kodlar nrfnin alıcı kısmı için verici kısmı için sadece config registerde rx-tx mod seçme bitini 0 yaparsınız başka ayara gerek yok bu arada ben IRQ kesme ayağını kullanıyorum alıcı için gene config registerde kesme maskeleme bitleri var onlardan alım tamamlandığında ve gönderim tamamlandığında aktif olan bayraklar var onları açık bırakırsınız aktif düşük çıkış aldığınıda rx için alım tamamlanmış olduğunu anlar ona göre fifoları okur txiçin de gönderim tamamlanmış ACK veri rx den alınmış olur ona göreyeni veri gönderirsiniz
Hep meraktan

alisumer

her register arasına ve csn yüksek düşük geçişleri arasına 6us kadar gecikme koydum sadece NRF ayar kısmına zaten PIC bu kısmı ilk açılışta yapıp bir daha dönmüyor buraya normal program kısmında gecikme koymaya gerek yok diyorar ama ben genede bu süreleri koydum çünkü bütün arduino nrf çalışmaları nın osc verileri biraz gecikme gösteriyordu bende işi garantiye aldım ama NRF datasheet ine göre aradaki gecikme 50 ns olsa bile yeterli yani 20 mhz de bile en az 200 ns gecikme koyabileceğimiz için gecikmeye gerek yok ama iletişim inanılmaz hızlı . Birde IRQ kullanmak istemesseniz de her veri gönderdiğinizde size dönen ilk veri status registeri oluyor onu okuyup oradan da değerlendirebilirsiniz yada fıfo status regısterınden uygun bitleri kontrol edip ona göre işlem yapabilirsiniz bi iki satır fazla kod yazarak böylelikle bir bacak fazladan cepte olur,
spi konusunda kafamı en çok karıştıran olay da göndermeile almayı tam kavrayamama olmuştu datayı iyi okuyunca çok zor değil aslında her gönderme sonrasında gelen veri için sspbuf registeri içeriği değişkene aktarılıyor yani sen göndeririken aslında verileri yer değiştiriyoruz alıcıya her bir bit kaydırılırken alıcı kısımdan da bir bit veri verici kısımdaki bufere geliyor.
        CSN     = 0
        PAUSEUS   6
        SSPBUF  = $61   ' rx fifoyu okumak için gönderilen komut,bu komut karşılıında da Status registeri geliyor PİC e istersek bir değişkene koyup işleyebiliriz
        CALL    GONDER
        
        SSPBUF  =   $88  ' bu veri nrf ye onun gnderdiği veriyi okumak için gönderiliyor ne olduğu önemli değil 
        CALL    GONDER
        A2      = SSPBUF  ' buda gnderilen boş data yerine gelen NRF nin fifosundaki kullanacağımız data
Hep meraktan

Dtmf

Asm anlamiyorum basic de olan varsa gonderebilirmisin😊🖒

alisumer

:) zaten basic ile yazılan kod bu malesef basic te donanımsal spi kullanımı için kod yok "sspbuf" kafanı karıştırmasın bu bufer 8 bitlik veriyi hem gönderdiğin hemde aldığın shift register bu registere basicte de asmde de veriyi okumak veya yazmak için bakmalısın
işin sıralaması  diyelim nrfnin config registerine veri yazmak istiyoruz bunun için ilk nce CSN ayağını low a çekiyor ve pic in sspbuf registerine göndermek istediğimiz veriyi yani $20 yazıyoruz sspbuf registerin verileri otomatik olarak göndermesini uygun kesme bayrağına bakarak bekliyoruz,gönderim bitince de hemen ardından nrfnin config registerine vermek istediğimiz değeri göndermek için sspbuf a örneğin $0f değerini gönderiyoruz ve ardından CSN ayağını hıgh yapıyoruz böylece config registere ayar yapmış oluyoruz.bu registere yazma kısmı idi okuma kısmı belki biraz daha karışık gelebilir  ama mantığını kavrayınca basit
diyelim nrf nin FIFO_STATUSregisterini okumak isteyelim bunun için ilk önce R_REGİSTER + FIFO_STATUS registerlerinin değeri olan $00 + $17 yi toplayıp gnderiyoruz CSN low- sspbuf $17 değerini gönderdiğimizde bize her zaman nrf ilk karşılık olarak STATUS registeri göndericek onun peşinden gelecek FIFO_STATUS u da okuyabilmek için boş bir veri daha gndermemiz gerekiyorki o da gelsin onunun için de CSN hala low iken $00 gibi herhangi bir değer nrfye gnderirsek oda bize istediğimiz bilgiyi verecektir bu gelen veriyi de basic için GELEN = SSPBUF  diye bir değişkene atar CSN hıgh yapar ve işlemimizi yaparız 
Hep meraktan

alisumer

2 adet sipariş 24 + pa geldi iletim mesafesine 800 -1000 metre diyorlar daha önceden de iki antensiz 24 + vardı elimde antenli olanı kumanda da antensiz olanını alıcıda kullansam mesafe ne olur deneyen varmı bana açık alanda 400 - 500 metre yeter Bu konuta bir fikri yada tecrübesi olan varsa paylaşırsa sevinirim zire devreyi sadece nrf için tekrar tasarladım sabit olacağı için herşey tekrar sökemek sıkıntı olacak .
bu arada verici için 9 adet analok bacak kullanıyorum 16f690  SPI bacakları osc falan boşta bacak kalmıyor ben 12 kanal kumanda 8 kanal analoğu pot lara bağlamayı düşünüyorum diğer kalan 1 adet analoğu da değişik sabit direnç değerleri ile  4 adet  switch bağlamayı düşünüyorum teorik olarak analog kanal başına bu yöntemle yüze yakın svich sorunsuz bağlanabilir
Hep meraktan

Dtmf

Alisumer ben denedim arazide birbirini goren iki anten ile bilinen bir mesafede 1800 metre cekti


Dtmf

1.ardunio yu nrfPA ya baglayip servoya saga sola komut vermesi icin programladim 2.ardunio ise elimde bir servo ile en son veri alinan noktaya kadar gittim 1800 m idi mesafe

Dtmf

ıyı gunler ete hocam bı sorum olacak alttakı programda CALL GONDER kısmını cozemedım yanı alı sumerın paylastıgı 10.sayfadakı alıcı verıcı programda baktım GONDER: seklınde bır baslık var fakat orada goto $E1 yazıyor ben bu gonder me ısını nasıl yapabılırım

'CE      = 1    
        CSN     = 0
      DelayUS 6
        SSPBUF  = $FF
        Call    GONDER
        DelayUS 6
        CSN     = 1
       DelayUS 6
        CSN     = 0
        DelayUS 6
        SSPBUF  = $20       'CONFIG    0011 1111
        Call    GONDER      'power ON,prx
        SSPBUF  = $3F
        Call    GONDER
        DelayUS 6
        CSN     = 1
        DelayUS 6
        CSN     = 0
        DelayUS 6
        SSPBUF  = $21       ' EN_AA
        Call    GONDER      ' 0000 0011
        SSPBUF  = $03
        Call    GONDER
       DelayUS 6
        CSN     = 1
        PAUSEUS   6
        CSN     = 0
        DelayUS 6
        SSPBUF  = $22        ' EN_RXADDR: 0000 0011
        Call    GONDER
        SSPBUF  = $03
        Call    GONDER
        DelayUS 6 

alisumer

#162
call gonder komutu gonder adlı başlık (label) e git ve oradaki komutları icra et demek gonder başlığı altında asm ile yazılmış.ve sspbuf registerine yuklediğimiz değerlerin gitmesini beklemek için pir1 sspif bayrağını kontrol ettiğimiz komutlar yer alıyor   
GONDER:
ASM
ALL:
        ;""""SPI"""""""                             ;BSF STATUS ,RP0 
       ; BCF     STATUS ,RP0                                             ;BTFSS SSPSTAT ,BF
        BTFSS   PIR1 ,SSPIF
        GOTO    $-1
          
        BCF     PIR1  ,SSPIF
       ; MOVF    SSPBUF ,W                           ; CLRF    SSPBUF       
       ; BSF    _CSN
        RETURN
        ;"""""SERI"""""
        
ENDASM 
Hep meraktan

alisumer

10. sayfada paylaştığım kodlar hesaplamalar hariç tamamı asm kodları ayrıca size basic ile olanı da attım .kafanız karışmasın
Hep meraktan

Dtmf

#164
Peki hocam sspbuf vs ugrasmaktansa reg.ayarlarini yaparken ornegin

Csn=0
shout dta,clk,0,[$61,$00]
Delayms 10
Csn=1
Delayms 10
Csn=0
Shout dta,clk,0,[$2A, $53,$53,$53,$53,$53]
Csn=1
Delayms 10
Yapsam olurmu ?

Powered by EzPortal