NRF24L01 Kullanımı

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

erdogan2734

  Hocam Merhaba;

  Başlangıç için bir program yazmaya çalıştım.
  Kontrol edip hatalarımı belirtirseniz çok sevinirim.
  16f887 portb.6 bacagına bağlı tusa bastığımızda 1 verisini göndermeye çalıştım.
  Program aşağıdaki gibidir.
'****************************************************************
'*  Name    : NRF24+TX.BAS                                      *
'*  Author  : [İLK DENEME]                                      *
'*  Notice  : Copyright (c) 2016 [select VIEW...EDITOR OPTIONS] *
'*          : All Rights Reserved                               *
'*  Date    : 28.06.2016                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
@ __config _CONFIG1, _MCLRE_ON & _LVP_OFF & _PWRTE_ON &_INTRC_OSC_NOCLKOUT & _WDT_OFF & _CP_ON
@ __config _CONFIG2, _WRT_OFF & _BOR21V & _BOR40V
define OSC 4
ANSEL = %00000000 ' Make AN0-AN7 digital                       
ANSELH= %00000000 ' Make AN8-AN13 digital                     
CM1CON0=0         ' C1 Komparatör iptal                                 
CM2CON0=0         ' C2 Komparatör iptal                                 
WPUB=0            ' PORTB pullup lar kapalı 
OPTION_REG.7 = 0
'SSCLK           var SSPCON.0  'SPI CLOCK
'SSPEN           VAR SSPCON.5  'SSP EN-DIS BIT   
'CKP             VAR SSPCON.4  'CLOCK POLARITY SELCEKT     
'SMP             VAR SSPSTAT.7 'DATA IMPUT SAMPLE BIT     
'CKE             VAR SSPSTAT.6 'CLOCK EDGE SELECKT BIT     
'BF              VAR SSPSTAT.0 'BUFFER BIT
'************************NRF24 KOMUTLARI**********************************
READ_REG     var byte    '// 0x00  '//Define read command to register
WRITE_REG    var byte    '// 0x20  '// Define write command to register
WRITE_REG1   VAR BYTE 'REG01 EN_AA
WRITE_REG2   VAR BYTE 'REG03 AW
WRITE_REG3   VAR BYTE 'REG04 RETR
WRITE_REG4   VAR BYTE 'REG05 RF_CH
WRITE_REG5   VAR BYTE 'REG06 RF_SETUP
WRITE_REG6   VAR BYTE 'REG07 STATUS
WRITE_REG7   VAR BYTE 'REG10 TX_ADDR
WRITE_REG8   VAR BYTE 'REG0A RX_ADDR
WRITE_REGA   VAR BYTE 'REG1C DYNPD
WRITE_REGB   VAR BYTE 'REG1D FEATURE

RD_RX_PLOAD         var byte    ' RX payload register address
WR_TX_PLOAD         var byte    ' TX payload register address
FLUSH_TX            var byte    ' flush TX register command
FLUSH_RX            var byte    ' flush RX register command
REUSE_TX_PL         var byte    ' reuse TX payload register command
R_RX_PL_WID         VAR BYTE    ' read RX spi_array width for the top Rx spi_array in the FIFO         
W_ACK_PAYLOAD       VAR BYTE    ' RX mode: write spi_array to be transmitted with ACK packet mask for last 3 bits in range 000 - 101         
W_TX_PAYLOAD_NOACK  VAR BYTE    ' Disable auto ACK on the specific packet         
NRF_NOP             VAR BYTE    ' Reuse last sent spi_array

RFKANAL VAR BYTE
RFADRES VAR WORD
RFSET   VAR BYTE
RFSETR  VAR BYTE

'************************NRF24 KOMUTLARI**********************************
READ_REG            = $00
WRITE_REG           = $20 'REG00 KON.
WRITE_REG1          = $21 'REG01 EN_AA
WRITE_REG2          = $23 'REG03 AW
WRITE_REG3          = $24 'REG04 RETR
WRITE_REG4          = $25 'REG05 RF_CH
WRITE_REG5          = $26 'REG06 RF_SETUP
WRITE_REG6          = $27 'REG07 STATUS
WRITE_REG7          = $30 'REG10 TX_ADDR
WRITE_REG8          = $2A 'REG0A RX_ADDR
WRITE_REGA          = $1C 'REG1C DYNPD
WRITE_REGB          = $1D 'REG1D FEATURE


RD_RX_PLOAD         = $61
WR_TX_PLOAD         = $A0
FLUSH_TX            = $E1
FLUSH_RX            = $E2
REUSE_TX_PL         = $E3
R_RX_PL_WID         = $60             
W_ACK_PAYLOAD       = $A8             
W_TX_PAYLOAD_NOACK  = $B0               
NRF_NOP             = $FF               




'************************NRF24 KOMUTLARI**********************************
INCLUDE "modedefs.bas"

SYMBOL IRQ   =PORTB.0
symbol CE    =PORTB.1
SYMBOL CSN   =PORTB.2
SYMBOL SCK   =PORTB.3
SYMBOL MOSI  =PORTB.4
SYMBOL MISO  =PORTB.5
SYMBOL TUS   =PORTB.6
SYMBOL LED   =PORTB.7

TRISA   = %00000000: PORTA = %00000000
TRISB   = %01000000: PORTB = %00000000
TRISC   = %00000000: PORTC = %00000000     
TRISD   = %00000000: PORTD = %00000000
TRISE   = %00000000: PORTE = %00000000

ADRS  VAR BYTE :ADRS=0
VERI  VAR BYTE :VERI=0








BASLA:
CSN=0
CE=1
PAUSE 250
GOSUB KANALSEC
GOSUB NRFAYAR
GOSUB FLUSHRX

   
   
    TEST:
   
    IF TUS=0 THEN
    TOGGLE LED
    GOSUB NRFPOWERUP
    GOSUB TRANSFER
    GOSUB NRFPOWERDOWN
    WHILE TUS=0:WEND
    ENDIF
    LED=0
   
    PAUSE 200
    GOTO TEST

'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'KANAL SEC>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
KANALSEC:
RFKANAL= $02
RFADRES= 11987
RFSET  = $26
RFSETR = $38

RETURN 
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'NRF AYAR>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
NRFAYAR:

CE=0
CSN=0
ADRS = WRITE_REG
VERI = $48
GOSUB NRFGONDER
CSN=1

CSN=0
ADRS = WRITE_REG1
VERI = $01
GOSUB NRFGONDER
CSN=1

CSN=0
ADRS = WRITE_REG2
VERI = $02
GOSUB NRFGONDER
CSN=1

CSN=0
ADRS = WRITE_REG3
VERI = RFSETR
GOSUB NRFGONDER
CSN=1

CSN=0
ADRS = WRITE_REG4
VERI = RFKANAL
GOSUB NRFGONDER
CSN=1

CSN=0
ADRS = WRITE_REG5
VERI = RFSET
GOSUB NRFGONDER
CSN=1

CSN=0
ADRS = WRITE_REG6
VERI = $70
GOSUB NRFGONDER
CSN=1

CSN=0
ADRS = WRITE_REG7
VERI = RFADRES.LOWBYTE
GOSUB NRFGONDER
VERI = RFADRES.HIGHBYTE
GOSUB NRFGONDER
CSN=1

CSN=0
ADRS = WRITE_REG8
VERI = RFADRES.LOWBYTE
GOSUB NRFGONDER
VERI = RFADRES.HIGHBYTE
GOSUB NRFGONDER
CSN=1

CSN=0
ADRS = WRITE_REGA
VERI = $01
GOSUB NRFGONDER
CSN=1


CSN=0
ADRS = WRITE_REGB
VERI = $06
GOSUB NRFGONDER
CSN=1

RETURN
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'NRF AYAR>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
FLUSHTX:
VERI=FLUSH_TX
CSN=0
SHIFTOUT miso, sck, 1,[VERI]
CSN=1
RETURN
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'FLUSH TX>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
FLUSHRX:
VERI=FLUSH_RX
CSN=0
SHIFTOUT miso, sck, 1,[VERI]
CSN=1
RETURN
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'FLUSH RX>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
NRFPOWERUP:
CSN=0
ADRS = WRITE_REG
VERI = $4A
GOSUB NRFGONDER
CSN=1
PAUSEUS 3000
GOSUB FLUSHTX
RETURN
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'NRFPOWERUP>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
NRFPOWERDOWN:
CSN=0
ADRS= WRITE_REG
VERI= $48
GOSUB NRFGONDER
CSN=1
RETURN
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'NRFPOWERDOWN>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TRANSFER:
ADRS = WR_TX_PLOAD
VERI = $01

CSN=0
GOSUB NRFGONDER
CSN=1
CE=1
PAUSEUS 20
CE=0

RETURN
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
NRFGONDER:
SHIFTOUT miso, sck, 1,[ADRS]
SHIFTOUT miso, sck, 1,[VERI]
pause 50
return

END






Erdoğan
İmkansızın zaman aldığı bir dünya'da bana zorluktan bahsetme!

Burak

Programda bir anlam bütünlüğü yok açıklamalar da yeterli değil , ben şahsen hiçbirşey anlamadım , programı ya kendin yazdın yada hazır yazılmış bir yazılımı modifiye ettin artık orasını bilemiycem, ayrıca yazdıklarımı okumuyorsun çünkü ne demiştim ?
Alıntı YapMISO pini giriş diğer tüm pinler çıkış olmak zorunda bu pin için pull-up kullanıp kullanmamak devrenin gürültü immünitesine göre yapılması gereken bir seçimdir ama normalde pull-up kullanılmaması gerekir ..
Sen MISO olarak sembolize ettiğin pini çıkış olarak ayarlamışsın(PORTB.5) ve ayrıca SHIFTOUT ile MISO olarak sembolize ettiğin pini kullanmışsın  , MISO : Master in Slave out demek , yani bu sembolü SHIFTIN ile kullanman gerek SHIFTOUT ile de MOSI olarak atama yaptığın pini kullanman gerek ki algoritma oluşturmada kafan karışmasın ... Bağlantılarıda kimi ne şekilde adlandırdıysan o şekilde yapman gerek ..

Benim önerim sıfırdan herşeyiyle kendin anlayacağın bir biçimde yazılım oluşturmak ..Ayrıca RF haberleşme yapmaya başlamaktan ziyade öncelikle nRF'in kayıtçılarına ulaşım sağlayıp bu kayıtçılara yazma okuma yaptırmayı ve LCD'de görüntülemeyi denemeni öneriririm ..

Son olarak SHIFTOUT ve SHIFTIN komut kullanım şeklini iyice bir araştır ;

SHIFTOUT DataPin,ClockPin,Mode

Buradaki mode parametresi çok önemli , bu değeri SPI zamanlama çizge diyagramlarından ve datasheet'teki açıklamalardan çıkartman gerekiyor .. Bu işlemciyi opere etmiş C dilinde birçok örnek var yani bunu PBP'de yazma zorunluluğu diye birşey yok .. Ben sadece tek hakim olduğum dilde oturup kimseden yardım almadan datasheeti okudum ve kodu yazdım çünkü bu RF işlemciye çok ihtiyacım vardı .. Ben sana kodun doğru yanlış diyerek bir yönlendirmede bulunamam .. Sadece Teknik nüans'lar ile ilgili konularda öneride bulunabilirim .. Mesela daha önce sorulmuş örnek bir soru : Acaba hangi adrese veri geldiğini nasıl kontrol edebiliyoruz ?

Bu tarz sorular dışındakiler kod yazmaya yönelik syntax ve algoritma kurmaya giriyor ve ben bu konuda maalesef yardımcı olamayacağım (üzülerek kendimce bazı sebeplerim olduğu için)
Son olarak lütfen kendi kodunu kendin oluştur internetteki örneklerle ne işlemciye hakim olabilirsin nede yazılıma çünkü benim internette incelediğim birçok C kodu bile desteksiz ve sürekli çalışma pozisyonu için yetersiz yani endüstriyel değil ..

Burak
Ω Gens Una Sumus Ω

erdogan2734

 Hocam Merhaba;

Programı kendim, farklı dilde çalışan bir programı örnek alarak yazdım.
Ben size bana bir program yazın verin ben kullanayım diye bir şey demiyorum, zaten böyle bir şey benim işime yaramaz.

MISO ve MOSI pinlerini karıştırmışım. Ben bu pinleri NRF'ye göre değil işlemciye göre ayarlama yaptığım için bir yanlışlık yapmışım.

Evet haklısınız C dilinde bir çok örnek var, ardunio ile millet video falan yolluyor hatta, ama içeriğini bilmediğim bir yazılım benim işime yaramaz.

Anlaşılan sizden yazılımsal algoritma oluşturma açısından bir yardım alamayacağım, ETE hocamızın aksine siz sadece ürün özellikleri ve
program komutları hakkında bilgi vereceksiniz. Buda sizin tercihiniz saygı duyarım. Haklısınız öncelikle lcd de yazı yazdırarak adreslere veri yazıp okumayı denemeliyim. Öncelikle oraya bir ulaşmalıyım.

Teşekkür ederim.




Erdoğan
İmkansızın zaman aldığı bir dünya'da bana zorluktan bahsetme!

Burak

Alıntı YapBen size bana bir program yazın verin ben kullanayım diye bir şey demiyorum, zaten böyle bir şey benim işime yaramaz.
Ben böyle bir şey dediğini iddia etmedim zaten.

Alıntı YapAnlaşılan sizden yazılımsal algoritma oluşturma açısından bir yardım alamayacağım, ETE hocamızın aksine siz sadece ürün özellikleri ve program komutları hakkında bilgi vereceksiniz.

Bazı ticari veya güvenlik limitlemeleri sebebiyle bu forumda istenilsede yardımda bulunulmayan birçok konu mevcuttur , zaman zaman Erol hocamızında emeğine binayen ücretsiz kullanıma açmadığı uygulamalar mevcuttur  bu yüzden "ETE hocamızın aksine siz sadece ürün özellikleri ve program komutları hakkında bilgi vereceksiniz" ifadesini benim forum aktivitem adına genellemiş olursun ki bu hiç doğru bir ifade değil .. Aksine algoritma geliştirme ve çözümleme konularında temel MCU ve yazılım çalışma prensiplerine severek katkıda bulunduğumu , forumda eğer bir gezindiysen rahatlıkla anlayabilirsin ..

Burak
Ω Gens Una Sumus Ω

erdogan2734

Burada bilgi paylaşımı dışında gönül kırma yada yanlış anlaşılma durumuna düşmek benim en son tercihimdir.
Genelleme yaptığımı düşünüyorsunuz, ancak ben sadece NRF24 için konuşuyorum.
Bu tarz durumları konuşup ne sizde yanlış bir algı oluşturmak nede zaman kaybı yaşamak istemiyorum, zaten biliyorsunuz bu tarz projelerde  zaman çok önemli.

Sonuç olarak son düzeltme mesajınızda bahsettiğiniz şeylere yoğunlaşacağım, okuduğum yada yazdığım veriyi lcd de görmek mantıklı.
En azından veri yazabiliyor muyum yada okuya biliyor muyum bunları görmem gerek.

İlginiz için teşekkür ederim, kafa karıştıran konularda sizden destek almayı (sizin kurallarınız çerçevesinde) umuyorum.

Teşekkür ederim.




Erdoğan
İmkansızın zaman aldığı bir dünya'da bana zorluktan bahsetme!

erdogan2734

#20
Burak Hocam Merhaba;
Uzun süren bayram tatilimiz sonrası, nrf24 ile tekrar uğraşmaya başladım.
Bir lcd ve nrf24 877a ile birlikte bir board oluşturdum. Konu üzerinden baya zaman geçti ama sizin dediğiniz gibi öncelikle nrf24 üzerindeki registarlar içerisindeki default ayarlarını okumak istiyorum.

Burada size sormak istediğim soru şudur.?



Örneğin 0x01 registarını okumak istediğimde karşıma gelecek olan default olarak verilen değermidir.
Örneğin bu registar için default değeri %00111111 'dir. Ben lcd üzerinde bu registarı okuduğumda bu değerimi göreceğim.


CSN=0
ADRS =$00
SHIFTin miso, sck, 1,[ADRS]
SHIFTin miso, sck, 1,[VERI]
pauseus 50
CSN=1
    LCDOUT $FE,1           
    LCDOUT $FE,$80,"ADRS =",BIN8 ADRS 
    LCDOUT $FE,$C0,"VERI =",BIN8 VERI
 


Örnek bir kod parçacığıda ekledim.

Şimdiden teşekkür ederim.
Erdoğan
İmkansızın zaman aldığı bir dünya'da bana zorluktan bahsetme!

Burak

#21
Alıntı yapılan: erdogan2734 - 10 Temmuz 2016, 20:31:02
Burak Hocam Merhaba;
Uzun süren bayram tatilimiz sonrası, nrf24 ile tekrar uğraşmaya başladım.
Bir lcd ve nrf24 877a ile birlikte bir board oluşturdum. Konu üzerinden baya zaman geçti ama sizin dediğiniz gibi öncelikle nrf24 üzerindeki registarlar içerisindeki default ayarlarını okumak istiyorum.

Burada size sormak istediğim soru şudur.?



Örneğin 0x01 registarını okumak istediğimde karşıma gelecek olan default olarak verilen değermidir.
Örneğin bu registar için default değeri %00111111 'dir. Ben lcd üzerinde bu registarı okuduğumda bu değerimi göreceğim.


CSN=0
ADRS =$00
SHIFTin miso, sck, 1,[ADRS]
SHIFTin miso, sck, 1,[VERI]
pauseus 50
CSN=1
    LCDOUT $FE,1           
    LCDOUT $FE,$80,"ADRS =",BIN8 ADRS 
    LCDOUT $FE,$C0,"VERI =",BIN8 VERI
 


Örnek bir kod parçacığıda ekledim.

Şimdiden teşekkür ederim.

Evet POR durumunda bu değeri görmen gerek register'da ama halen SPI komutlarına ve datasheet'e hakim değilsin çünkü yeterince okumamışsın , okuma emri vermeden okuma yaptırma girişiminde bulunuyosun ..  Bu şekilde nRF sana cevap veremez çünkü henüz ne yapması gerektiğini bilmiyor ..

Burak
Ω Gens Una Sumus Ω

erdogan2734

Alıntı yapılan: Burak GÜNAY - 11 Temmuz 2016, 11:51:18
Evet POR durumunda bu değeri görmen gerek register'da ama halen SPI komutlarına ve datasheet'e hakim değilsin çünkü yeterince okumamışsın , okuma emri vermeden okuma yaptırma girişiminde bulunuyosun ..  Bu şekilde nRF sana cevap veremez çünkü henüz ne yapması gerektiğini bilmiyor ..

Burak

Burak Hocam Merhaba;

Haklısınız ,zaten bir çok şeyi tekrardan okumam gerek çünkü anımsayamadım.
Ayrıca SPI için bugün çalışma yapacağım. Öncelikle SPI konusuna hakim olmam gerek.
SHIFTOUT DataPin,ClockPin,Mode  buradaki mode parametresine iyice hakim olmam gerek.
Bakalım okuma yapabilirsem bilgi vereceğim.


Erdoğan
İmkansızın zaman aldığı bir dünya'da bana zorluktan bahsetme!

yolcu27

merhaba arkadaşlar bende 2 adet sipariş ettim bu modüllerden.

alıcı verici olarak seri iletişim ile bu modülleri kullanabilir miyim?  yani bir butona bastıgımda karşıya 1 verisi gidince bunu seri iletişimden okuyup ona göre led yakacağım.

Burak

Soru buysa , evet SPI protokolu kullanarak istedigin her turlu veriyi gondermek icin bu modulleri kullanabilirsin ..

Burak
Ω Gens Una Sumus Ω

ete

Bu  soru aynen F16 koltuğuna otursam uçurabilirmiyim sorusunun karşılığı gibi olmuş.
F16 uçmak için yapılmış ama yalnızca eğitimini almış bilen kişiler uçurabiliyor.
NRF24L01 modül olarak kablosuz haberleşme amacı ile yapılmış modüller. Dolayısıyla bunları kullanarak haberleşme yapabilirsin. Ama tabiri caiz ise F16 kadar da komplike cihazlar. Kabarık bir Data sheet'i var ve iyice okuyup öğrenmeden kullanmak gerçekten zor. Bilenlerden bilgi almanızda çok kolay değil. Zira uğraşan, bir sürü emek verip saatlerce data sheet inceleyip sistemi çözmüş bir sürü deneme yapmış ve sonunda haberleşmeyi sağlayabilimiş. Ama modülün özelliği nedeni ile çeşitli çalışma şekillerinden kendisine uygun olanı seçmiş. Başka bir modda çalışma yeniden uğraşma ve inceleme gerektiriyor bu ise saatlerce uğraşma demek oluyor. Bu nedenle bu modülle uğraşmak isteyenlerin kesinlikle teknik ingilizceden anlamaları gerekiyor. İngilizceden anlamakda da yeterli değil. Data sheeti su gibi okuyup yutmak gerekiyor. Bu aletin kullanımı tamamen registerler aracılığı ile yapılıyor. En basit bir haberleşme ortamı yaratmak için bile bir sürü register ayarlaman gerekiyor. Bak önceki mesajlara bir register okuması yapacağın zaman önce okuma yapacağını modüle söylemen gerekiyor. Çok protokollü bir alet. Bilmeyen yada kendine güvenmeyen buna bulaşmasın çünki burada sorular sorarak da çözmek zor bu moülleri. Örnek programlar vermiştim. Onlar çalışan programlar ama belirli amaçlar için çalışıyorlar. Dolayısıyla sizin amacınıza uygun hale getirmeniz gerekir.

Ete

erdogan2734

#26
Ete Hocam Merhaba;

Burak Hocam sağolsun yol gösteriyor, bende elimden geldiğince cihaza hakim olmaya çalışıyorum. Dediğiniz gibi gerçekten zor bir cihaz.
Kendine ait registerları var, mutlaka bir kütüphane oluşturmamız gerek ayrıca her şeyden önce SPI haberleşmeye çok iyi hakim olmak gerek.
Ürün datasheet okudukça hayran kalınacak cinsten, bu zamana kadar kullandığımız 433 Mghz rf ler ile alkası yok.
İşin diğer bir boyutu bu konu ile ilgili c ve özellikle ardunio dışında pek örnek ve kütüphane yok.
Kendi kütüphanenizi kendiniz oluşturmanız gerek. Bayram öncesi biraz araştırma yaptım, şimdi tekrardan başladım. Üstteki mesajımda olduğu gibi şimdilik sadece registerları okumaya çalışacağım. Daha sonra yazmaya, daha sonrada haberleştirme sağlamaya çalışacağım.

Bilgi edindikçe buradan paylaşmaya çalışacağım.

Burak Hocam Merhaba;
Mesaj kirliliği olmaması için mesajımın altına ek yapmak istedim.
NRF24 R_register' na ulaşmayı başardım, default değerleri okuyabildim.






Şimdi de yazıp okumaya çalışacağım. Gelişme oldukça burada paylaşacağım.


Erdoğan
İmkansızın zaman aldığı bir dünya'da bana zorluktan bahsetme!

Burak

Cok guzel .. Simdiyse yazma yaptirmayi dene vede ardindan okumayi daha sonrada datasheet'teki rf topolojiyi cozmeye calis ..

Burak
Ω Gens Una Sumus Ω

erdogan2734

Alıntı yapılan: Burak GÜNAY - 13 Temmuz 2016, 11:31:34
Cok guzel .. Simdiyse yazma yaptirmayi dene vede ardindan okumayi daha sonrada datasheet'teki rf topolojiyi cozmeye calis ..

Burak

Hocam Merhaba;
Biraz evvel yazmayı denedim, yazdım.
Daha sonra yazdığım default olmayan değerleri okumayı denedim ve okudum.
Şimdi topolojiyi iyice oturtmak isityorum. O yüzden datasheet okuyorum ve netten bulduğum örnekleri inceliyorum.
Burada bir kaç sorum var cevaplarsanız sevinirim.
Setup_aw  registerinda aw değerini ayarladıktan sonra (adres btye genişliğini) pipelere adres verirken, örneğin "E","R","D" şeklinde adres vermek istiyorum.
Bu harfleri direk örneğin dataout="E" şeklinde mi yoksa bu harfin byte karşılığı şeklindemi TX_addr registerina low byten başlayarak yazmalıyım.
Bu ilk sorum.
İkinci sorum ise w_reg 00 adresindeki mask değerleri 4 ,5,6 bitler.

Bu bitlerin çalışma mantığını tam oturtamadım rica etsem mantığını yazabilirmisiniz.?

İyi çalışmalar.



Erdoğan
İmkansızın zaman aldığı bir dünya'da bana zorluktan bahsetme!

Burak

İkinci sorudan başlayalım cevap vermeye .. nRF'nin IRQ pininden , uygun bir data geldiğinde yada data aktarımı bittiğinde veya Enhanced Shock Burst modu kullanıldığında dikkate alınan ACK ve Auto Retransmit fonksiyonlarının maksimum değerlerine ulaşması durumunda interrupt bayrağı biçiminde okuma yapmak istersen bu değerleri 0 olarak ayarlaman gerekiyor .. Aksi halde 1 olarak kullanman gerekiyor .Yani bu yukarıdaki kondüsyonlar oluşursa bu pinin lojik 0 olması ile bir MCU'nun interrupt bacağı aracılığı yazılımını kesmeye götürebilirsin ama bana sorarsan şu ana kadar ben ihtiyaç duymadım , çünkü zaten 10 Megabit hızında SPI haberleşmesi yapıyorum , yazılımda pause'ta kullanmıyorum ki ayrıca nRF'nin buffer'ları çok katlı ve geniş olduğundan şu ana dek hiç kullanma eğilimine girmedim ..

İlk soruya gelince , Address Width'i ayarladıktan sonra , ön sembol eklerini yani adresleme bilgilerini direkt olarak ASCII biçimde de verebilirsin , istersen byte , bit , hex yada dec biçimde de verebilirsin .. Bu kısım MCU ile alakalı çünkü , sen "E" karakterini derlediğinde hex kodunda o yine hexadecimal biçime dönüştürülüyor .. Yani özgürsün ..

Burak
Ω Gens Una Sumus Ω

Powered by EzPortal