NRF24L01 Kullanımı

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

Burak

#90
Alıntı yapılan: cemilsivas - 02 Ekim 2016, 12:50:07
Ya da fifo status registerinin 0. bitini yani rx_empty bitini mi kontrol etmeliyim? rx_empty 0 ise data vardır gibi. Okuduktan sonra da flush rx ten temizleme yaparım diye düşünüyorum.

Status.6 = 1 ise geçerli bir veri paketi alınmıştır . Gönderirken de tx_ds kontrolünü yaparsın

Burak
Ω Gens Una Sumus Ω

cemilsivas

#91
Burak Hocam. Dediğiniz gibi status registerinin tx_ds bitini kontrol etmeye çalıştım. Elimde 1 lcd olduğu için aynı anda alıcı verici kontrolü yapamıyorum. Önce verici kısmına lcd yi bağladım. Modülün ayarlarını yaptıktan sonra aşağıdaki kodu çalıştırdım.

verigonder:

csn=1'flush tx-rx
veri1=%11100001
veri2=%11100010
shiftout mosi,sck,1,[veri1,veri2]
csn=0

csn=1'status kontrol
adrs=$07
shiftout mosi,sck,1,[adrs]
shiftin miso,sck,0,[veri]
csn=0

lcdout $fe,1,"göndermeden önce"
lcdout $fe,$c0,bin8 veri
adrs=0:veri=0

adrs=%10100000
veri="5"
csn=0
shiftout mosi,sck,1,[adrs,veri]
csn=1

ce=1
pauseus 20
ce=0
adrs=0:veri=0

csn=1'status kontrol
adrs=$07
shiftout mosi,sck,1,[adrs]
shiftin miso,sck,0,[veri]
csn=0

lcdout $fe,1,"gönderdikten sonra"
lcdout $fe,$c0,bin8 veri
end


Bu kodu çalıştırdığımda göndermeden önce de sonra da hep %00001110 değeri geliyor. Auto Ack kapattım(En_aa registerine 0 değeri gönderdim). Sebebi nedir? Yardımcı olursanız sevirim. İyi günler.

Cemil SİVAS

erdogan2734

#92
Alıntı yapılan: Burak GÜNAY - 03 Ekim 2016, 00:14:52
Status.6 = 1 ise geçerli bir veri paketi alınmıştır . Gönderirken de tx_ds kontrolünü yaparsın

Burak

Burak Hocam Merhaba;

BEnim farklı bir sorum olacaktı, diyelimki biz iki farklı pipe kullanmak istedik.
Konfigrasyon ayarlarınıda yaparkende bu ikinci pipenin ayarınıda yaptık.
Veri yollarken normalede

       
ADRS = WR_TX_PLOAD'(A0)
        VERI=10
        CSN=0
        SHIFTOUT mosi, sck, 1,[ADRS]
        SHIFTOUT mosi, sck, 1,[VERI]
        CSN=1
        CE=1
        PAUSEUS 10
        CE=0


Bu tarz bir gönderim pipe0 için sıkıntısız çalışıyor, ancak pipe1 için nasıl bir gönderim yapacağız.
Burada wr_tx_payload değerimi değişecek, burayı pek anlayamadım.?
Yardımcı olursanız sevinirim.

"Aslında soruyu şu şekilde sormam gerekiyordu, 1 verici ile bir den fazla pipeye mesaj yollayabiliyormuyum?
Biraz araştırdığımda bunun mümkün olmadığını gördüm, pipeler sadece multireceiver işlem için kullanılabiliyor. Yinede teşekkürler."


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

Burak

İş sebebiyle şehir dışındayım , yanimda pc yok . Pazardan evvel cevap veremeyecegim .

Burak
Ω Gens Una Sumus Ω

cemilsivas

erdogan hocam siz yardımcı olabilir misiniz?

erdogan2734

#95
Alıntı yapılan: cemilsivas - 07 Ekim 2016, 10:13:32
Burak Hocam. Dediğiniz gibi status registerinin tx_ds bitini kontrol etmeye çalıştım. Elimde 1 lcd olduğu için aynı anda alıcı verici kontrolü yapamıyorum. Önce verici kısmına lcd yi bağladım. Modülün ayarlarını yaptıktan sonra aşağıdaki kodu çalıştırdım.

verigonder:

csn=1'flush tx-rx
veri1=%11100001
veri2=%11100010
shiftout mosi,sck,1,[veri1,veri2]
csn=0

csn=1'status kontrol
adrs=$07
shiftout mosi,sck,1,[adrs]
shiftin miso,sck,0,[veri]
csn=0

lcdout $fe,1,"göndermeden önce"
lcdout $fe,$c0,bin8 veri
adrs=0:veri=0

adrs=%10100000
veri="5"
csn=0
shiftout mosi,sck,1,[adrs,veri]
csn=1

ce=1
pauseus 20
ce=0
adrs=0:veri=0

csn=1'status kontrol
adrs=$07
shiftout mosi,sck,1,[adrs]
shiftin miso,sck,0,[veri]
csn=0

lcdout $fe,1,"gönderdikten sonra"
lcdout $fe,$c0,bin8 veri
end


Bu kodu çalıştırdığımda göndermeden önce de sonra da hep %00001110 değeri geliyor. Auto Ack kapattım(En_aa registerine 0 değeri gönderdim). Sebebi nedir? Yardımcı olursanız sevirim. İyi günler.

Cemil SİVAS


Cemil Hocam MErhaba

Okurken 0x07 verisini yollamıssınız bu doğru, ancak yazarken 0x27 verisini yollamamıssınız.
Bundan dolayı 0xa0 adresine yazıyorsunuz ama 0x07 adresini okuyorsunuz.
Belki 0xa0 adresini okusanız gönderdiğiniz 5 verisini görebilirsiniz.

ce=1
pauseus 20
ce=0
adrs=0:veri=0

Ayrıca bu olaya gerek yok. Bu durumu sadece veri yüklenip kablosuz olarak alıcıya yollarken yapılan bir işlemdir.
Şu anda bunu yapmanız bir şey ifade etmez.

Bu düzeltmeyi yaptığınızda çalışacaktır.

İyi çalışmalar.
Erdoğan
İmkansızın zaman aldığı bir dünya'da bana zorluktan bahsetme!

cemilsivas

Erdoğan hocam. Cevabınız için teşekkür ederim. Amacım irq pinini kullanmadan data gönderildiğini vericinin status registerinden öğrenmek. Ancak birçok deneme yapmama rağmen status registeeinin tx_ds pininin 1 olduğunu göremedim. Datasheette ack açık ise alıcıdan gönderildi datası almadan set edimez diyor. Ben de en_aa registerine 0 değeri gönderdim. Ack kapattım. Ama yine status registeribdeki tx_ds pinini set edemedim. Başka nerede sorun olabilir? Gönderme algoritmasında hata var mı? Teşekkür ederim. İyi çalışmalar.

Cemil SİVAS

erdogan2734

Ben gönderme algoritmasında hata olduğunu düşünmüyorum.
Bu pinin set edilmesi için W_reg adresinde de ayarlamalar yapman gerektiğini düşünüyorum.
Aslında hiç gönderim yapabildinizmi? Yani önce bir gönderim yapsanız daha sonra bu kısımlara geçseniz, en azından rflerin sağlamlık kontrolünü yapmış olursunuz.

Ayrıca ben vericide değilde alıcıda kontrol yapıyorum. (Ben tek yönlü protokolle çalıştığım için) Irq pinini kontrol etmek daha çok işime geliyor. Tabi tercih sizin. Çok fazla yardımcı olamadım. K.bakmayın.
Erdoğan
İmkansızın zaman aldığı bir dünya'da bana zorluktan bahsetme!

cemilsivas

Erdoğan Hocam. Bugün lcd ekran aldım. Onu da alıcıya bağlayıp alcının status registerini kontrol edeceğim.

Bu zamana kadar hiç gönderim yapamadım. Alıcı verici olaeak da çalıştırdım ama olmadı. Denemelere devam edeceğim. Daha benim iki ay olmadı. ☺ :-)
Hocam versiğiniz her bilgi yol aldırıyor bana. Cevaplarınız için çok teşekkür ederim.

Cemil SİVAS

erdogan2734

Alıntı yapılan: cemilsivas - 08 Ekim 2016, 12:55:48
Erdoğan Hocam. Bugün lcd ekran aldım. Onu da alıcıya bağlayıp alcının status registerini kontrol edeceğim.

Bu zamana kadar hiç gönderim yapamadım. Alıcı verici olaeak da çalıştırdım ama olmadı. Denemelere devam edeceğim. Daha benim iki ay olmadı. ☺ :-)
Hocam versiğiniz her bilgi yol aldırıyor bana. Cevaplarınız için çok teşekkür ederim.

Cemil SİVAS

Önemli değil hocam mutlaka çalışacak.
Ama biraz emek gerek. Ben biraz dağılmış konumdayım çok  fazla bakamiyorum. Ama tavsiyem bi kere bile olsa bi veri transferi yapın. Gerisi çorap söküğü gibi gelir.
Erdoğan
İmkansızın zaman aldığı bir dünya'da bana zorluktan bahsetme!

cemilsivas

Erdoğan Hocam;
Uzun ve yorucu çalışmalar sonucu kod eksikliğinden kaynaklı hatayı buldum ve gece 12:30'da veri iletişimini gerçekleştirdim Elhamdülillah. Yalnız ben 5 verisini gönderdim. Gelen 53 verisiydi. Sanırım o da veri tipinden kaynaklanıyor.

Hocam datasheeti karıştırırken dynamic payload kayıtçılarını gördüm. Sanırım siz ses iletiminde bu kayıtçılarla çalıştınız. dynamic payload'ın esprisi biz w_tx_payload'a veri yüklediğimizde kendi direk gönderim yapması mıdır? Alıcının da ırq pinine bakmadan direk alması mıdır?

est32

Alıntı yapılan: cemilsivas - 10 Ekim 2016, 12:04:17
Erdoğan Hocam;
Uzun ve yorucu çalışmalar sonucu kod eksikliğinden kaynaklı hatayı buldum ve gece 12:30'da veri iletişimini gerçekleştirdim Elhamdülillah. Yalnız ben 5 verisini gönderdim. Gelen 53 verisiydi. Sanırım o da veri tipinden kaynaklanıyor.

Hocam datasheeti karıştırırken dynamic payload kayıtçılarını gördüm. Sanırım siz ses iletiminde bu kayıtçılarla çalıştınız. dynamic payload'ın esprisi biz w_tx_payload'a veri yüklediğimizde kendi direk gönderim yapması mıdır? Alıcının da ırq pinine bakmadan direk alması mıdır?
çünkü 5 karakterinin ascii karşılığı 53 tür.
örnek ascii tablosu:
http://www.asciitable.com/

erdogan2734

Alıntı yapılan: cemilsivas - 10 Ekim 2016, 12:04:17
Erdoğan Hocam;
Uzun ve yorucu çalışmalar sonucu kod eksikliğinden kaynaklı hatayı buldum ve gece 12:30'da veri iletişimini gerçekleştirdim Elhamdülillah. Yalnız ben 5 verisini gönderdim. Gelen 53 verisiydi. Sanırım o da veri tipinden kaynaklanıyor.

Hocam datasheeti karıştırırken dynamic payload kayıtçılarını gördüm. Sanırım siz ses iletiminde bu kayıtçılarla çalıştınız. dynamic payload'ın esprisi biz w_tx_payload'a veri yüklediğimizde kendi direk gönderim yapması mıdır? Alıcının da ırq pinine bakmadan direk alması mıdır?

Tebrik ederim. 5 sayısınının decimal karşılığı 53 olması lazım, yada ascii diyelim.
Gördüğünüz şey normal. Ben dynamic payload kullanmadım.
Şu anda statik kullanıyorum. Ama bu kısmı kullanan örnekler gördüm fakat deneme fırsatım olmadı.
Alıcının IRQ pinine bakıp bakmaması tamamen senin elinde olan bir şey, yani ırq pinini kullanmak senin elinde.
Bu durumun onunla alakası olduğunu sanmıyorum.

Tebrik ederim. Bu arada şu anda 250kbs- 1Mbt- 2Mbt değerlerini de denemeni tavsiye ederim.
Ben antenli alıcı ve vericide 250mt 1Mbt veri transferi çok rahat yaptım.
250kbs' de denemedim daha uzağa gideceğinden eminim.

Birde retransmit olayını denemeni tavsiye ederim, mesela ben şu anda retransmit olayını kullanmıyorum.
Sende denemelisin.

İyi çalışmalar.
Erdoğan
İmkansızın zaman aldığı bir dünya'da bana zorluktan bahsetme!

cemilsivas

Erdoğan Hocam;
Birkaç gündür dediğiniz denemeleri yaptım. Mesafe ölçümünü yapamadım. Gönderdiğim ve aldığım veri tiplerini de değiştirip 5 verisini karşı tarafa geldi.
Şu an ack'li gönderim yapmaya çalışıyorum. Vericinin tx_ds pinini gönderimden sonra aktif olmasını istiyorum. Gönderim yaparken alıcının rx_dr bitini 1 olarak okuyabiliyorum. Ama vericinin tx_ds pinini 1 olarak okuyamadım. Datasheetten anladığım kadarıyla eğer auto ack aktifse sanırım alıcının vericiye alındı verisi göndermesi gerekiyor. Bu sayede vericinin tx_ds pini de aktif olacak.

Bunun için iki modülde de feature registerinin ilk iki bitini 1 yaptım. Bundan sonra alıcıda w_ack_payload komutunu mu göndermem gerekiyor? Ya da nerede göndermem gerekiyor? Fikirlerinizi bekliyorum. İyi çalışmalar.

Cemil SİVAS



erdogan2734

Alıntı yapılan: cemilsivas - 13 Ekim 2016, 09:53:43
Erdoğan Hocam;
Birkaç gündür dediğiniz denemeleri yaptım. Mesafe ölçümünü yapamadım. Gönderdiğim ve aldığım veri tiplerini de değiştirip 5 verisini karşı tarafa geldi.
Şu an ack'li gönderim yapmaya çalışıyorum. Vericinin tx_ds pinini gönderimden sonra aktif olmasını istiyorum. Gönderim yaparken alıcının rx_dr bitini 1 olarak okuyabiliyorum. Ama vericinin tx_ds pinini 1 olarak okuyamadım. Datasheetten anladığım kadarıyla eğer auto ack aktifse sanırım alıcının vericiye alındı verisi göndermesi gerekiyor. Bu sayede vericinin tx_ds pini de aktif olacak.

Bunun için iki modülde de feature registerinin ilk iki bitini 1 yaptım. Bundan sonra alıcıda w_ack_payload komutunu mu göndermem gerekiyor? Ya da nerede göndermem gerekiyor? Fikirlerinizi bekliyorum. İyi çalışmalar.

Cemil SİVAS





Cemil Hocam MErhaba;

ACK'li gönderim hiç yapmadım, daha doğrusu ihtiyacım olmadığı için denemedim.
Bu konuda Burak_GÜNAY hocamızın yardımı olabilir.
Ben aslında kendisine bize dinamik payload olayından da bahsetmesini isteyeceğim.

İyi çalışmalar.
Erdoğan
İmkansızın zaman aldığı bir dünya'da bana zorluktan bahsetme!

Powered by EzPortal