NRF24L01 Kullanımı

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

Recep TÜRKYILMAZ

Merhaba ETE hocam. Benim sorum şu şekilde olacak, eğer yardımcı olursanız çok ama çok şükran kalacağım. Benim elimde alıcı ve verici olarak iki adet nRF24L01+ wireless entegresi var. Bu entegreleri alıcı ve verici olarak ayarlıyorum. Frekansları ayarlıyorum. Adresleri ayarlıyorum ve alıcı ile vericiyi haberleştiriyorum. Ancak sıkıntım şurada ki vericiden 6 byte uzunluğunda veri yolluyorum. Alıcıda da datapipe 0 alıcı kanalı ve 6 byte datapipe 0 uzunluğu olarak ayrlıyorum. Verici 6 byte uzunluğunda veri gönderiyorum. Daha sonra alıcı tarafında status regısterının RX_DR bitini kontrol ediyorum. Veri gelmişse RX_PAYLOAD'dan veriyi okuyorum. Aldığım 6 byte uzunluğundaki veinin her biri aynı değeri alıyor. Yani BYTE_0=1 BYTE_1=1 BYTE_2=1 BYTE_3=1 BYTE_4=1 BYTE_5=1. Bu neden kaynaklanıyor olabilir. Onlarca program yazdım, yani yazılımda herhangi bir sıkıntı yok ama yinede böyle bi durum ile karşı karşıyayım. Yardımınız için teşekkürler.
Merak etmek, Başarı getirir.

ete

NRF konusunda tecrübem yok. Tecrübesi olan arkadaşlar cevap verecek durumdalar sa verirler.
Ete

Recep TÜRKYILMAZ

Teşekkürler ETE hocam. Burak hocam bilgilendirmenizi bekliyorum...
Merak etmek, Başarı getirir.

erdogan2734

#123
Recep Bey Merhaba;
Şimdi aslında bu konuda benimde soru işaretlerim olmuştu, ve ben farklı bir yöntemle çözmüştüm.
Burada durum şu, siz pipe 0 için 5 byte ayarlaması yaptığınız da bence aslın da data genişliğini 5 byte olarak ayarlıyoruz.(Beş farklı byte ayarlaması yapmıyoruz. Datasheete bakmadım farklı durumlar olabilir.)
Örneğin bir byte 0-255 arası değer alacakken biz bunu 5 byte yaparak 40 bit 'lik  bir değer göndermiş oluyoruz.
Bunu kesinlikle 5 ayrı byte olarak düşünmeyelim.Gönderdiğiniz değerin sayısal olarak karşılığını bana yazarsanız size daha rahat yardımcı olabilirim.

Örneğin ben ismimin baş harflerini karşıya yolluyordum, adreslemek için "E","R","D"  beraber düşündüğümüzde 3 byte, ayrı ayrı düşündüğümüzde tek byte olarak karşımıza çıkıyor.
Okurken  her gelen byte değerini farklı bir birime atamanız ve bunları birleştirmeniz gerekebilir.

Örneğin AL1,AL2,AL3,AL4,AL5 message = AL1+AL2+AL3+AL4+AL5 gibi.

Şu anda tamamen program algoritmanı bilmeden yorum yapıyorum, yorumun yanlış yönlendirebilir. Alıcı kısmında veri alış kısmını ve gönderdiğin reel veriyi, bizle paylaşırsan daha mantıklı yorum yapabilirim.

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

Recep TÜRKYILMAZ

Erdoğan hocam ben bu sistemi baskül işi için kullanacağım. Sürekli olarak gönderdiğin değer değişecek. 24 bit ADC var bunun ham değerini okuyup karşıya göndereceğim. sizin deyiminizle bu 24/8=3 byte oluyor. Şimdi bunu karşıda okuma yaparken 24bit tek seferde okumam gerekiyor o zaman. Yani alıcı da okuma yaptığımda 24 bitlik bir değişkenin içine bunu tek seferde okuyup atıyacağım. Daha sonrada 3 parçaya böleceğim. Doğrumudur acaba.
Merak etmek, Başarı getirir.

erdogan2734

Yollarken veriyi 3'e bölmeniz gerekir, ancak biz örneğin word değeri yollarken biliyorsunuz, high_byte yada low_byte şeklinde yolluyoruz.
Size kendi mantığınız da okuyup ona göre  işlem yapmalısınız.
Bana kalırsa gönderim ve alım şekliniz şu şekilde olmalı.

Shiftout [Veri1,Veri2,Veri3]

Alma şekli

Shiftin[al1,al2,al3]   Daha sonra mantık çerçevesinde toplama yapılarak işlem yapılır.

Umarım yardımcı olmuşumdur.
Erdoğan
İmkansızın zaman aldığı bir dünya'da bana zorluktan bahsetme!

Recep TÜRKYILMAZ

Arkadaşlar yaşadığım problemi çözdüm ve sistemi sonuca uğraştırdım. Aşağıda verici ve alıcı kodları olucak yalnız regıster ayarlama kodları olmayacak.
---VERİCİ KODU---

Chip_Select=0
     Soft_SPI_Write(FLUSH_TX)
Chip_Select=1

DELAY_US(25)

Chip_Select=0
     Soft_SPI_Write(W_TX_PAYLOAD)
     Soft_SPI_Write(VERI_1)
     Soft_SPI_Write(VERI_2)
     Soft_SPI_Write(VERI_3)
     Soft_SPI_Write(VERI_4)
     Soft_SPI_Write(VERI_5)
Chip_Select=1

CE=1
DELAY_US(50)
CE=0

---ALICI KODU---

Chip_Select=0
         Soft_SPI_Write(FIFO_STATUS_OKU)
         FIFO_STATUS_GELEN_DEGER=Soft_SPI_Read(FIFO_STATUS_GELEN)
Chip_Select=1

if FIFO_STATUS_GELEN_DEGER.0=0then
     Chip_Select=0
     Soft_SPI_Write(R_RX_PAYLOAD)
     VERI_1=Soft_SPI_Read(OKU_1)
     VERI_2=Soft_SPI_Read(OKU_2)
     VERI_3=Soft_SPI_Read(OKU_3)
     VERI_4=Soft_SPI_Read(OKU_4)
     VERI_5=Soft_SPI_Read(OKU_5)
Chip_Select=1

Chip_Select=0
     Soft_SPI_Write(FLUSH_RX)
Chip_Select=1

end if


NOT: Yardıma ihtiyacı olan arkadaşlar eemrcp0307@gmail.com adresimden mesaj atabilirler. Bana yardımını esirgemeyen ERDOĞAN hocama teşekkür ederim.
Merak etmek, Başarı getirir.

sakin06

Merhaba Arkadaşlar zaman buldukça bu nrf24l01 ile ilgilenmeye çalışıyorum , 1 ve 2mb hızında veri iletişimini sağladım, elimdeki modüller + versiyonu ve bilgi yapraklarında 250kbps de çalıştığını yazıyor, mesafe artırmak amacıyla denedim ama bir türlü çalıştıramadım, 250kbps hızında çalıştırabilen oldu mu acaba?

Burak

Evet ben denedim çalışıyor . Konfigürasyonu dikkatli incelemen gerek ..


Burak
Ω Gens Una Sumus Ω

sakin06

ilginiz için teşekkür ederim,
0x06 registerinde bir karışıklık yapıyorum ama çözemedim, sadece bu yazacı değiştirdiğimde çalışmıyor, acaba 250kbps için diğer yazaçları da değiştirmek gerekiyor mu gerçi epeydir inceliyorum bir tek bu yazacın içeriği değiştirilmiş eski versiyona göre, bir de acaba payload yüküyle alakalı olabilir mi?

sakin06

haklı olarak bu konuda pek detay vermek istemiyorsunuz ama:
6. registeri bilgi yaprağına göre 00100110 kuruyorum, ilk bite dokunma demiş, 5. bit 250kbs modu olarak ayarlıyorum ancak çalıştıramadım

Burak

Bende de aynı şekilde RF_SETUP ayarı .. Başka bi problem var demek ki ..


Burak
Ω Gens Una Sumus Ω

ete

Data sheete bakılırsa verdiğin register değeri doğru ama sanki elndeki + versiyonu bu modda çalışmıyor gibi.
Yalnızca genel data sheet bu bilgiyi vermiş ama diğer bütün dökümanlarda 250kbps özelliğinden bahsedilmemiş. Sebebini bilemiyorum. Ama kesin olan bir şey varki oda verdiğin register değeri doğru. Bunun başka bir ayarıda yok diye hatırlıyorum.

Ete

sakin06

ilginiz için gerçekten çok teşekkür ederim
Son Durum:
bilgi yarpraklarında  6. yazacın ilk bitine dokunma demiş, bu bilgiden hareketle, önce vericinin 6. yazacını okuyup sonran 5. bitini 1 yapıp geri yazdım, zaten resetten gelen konfigürasyon 250kbps hariç kullanıma uygun yani çıkış gücü 0 dm olarak geliyor o yüzden sadece 5. biti değiştirdim, bu esnada alıcı 1mbps de çalışmaya devam ediyordu vericiyi çalıştırdığımda alıcı vericiyi çözdü, alıcı 1mbps verici 256kbps iletişim kurmasına bir anlam veremedim, sonra alıcınında yazacını güncellediğimde çalıştılar ancak mesafede ciddi bir artış olmadı daha doğrusu halen 250kps de çalıştığından emin değilim, bununla uğraşmaya başladığımda elimde + yazan modüller vardı ama ben ilk bilgi yapraklarına göre yani + olmayan ile yazacları kurup çalıştırmıştım, şu an5. bitler 1 ama iletim hızı nedir gerçekten bir bilgim yok, öte yandan LNA nın durumu nedir tamamen bilinmez çünki o bitler kaldırılmış

Burak

Debug yapabiliyorsan bence bi registerları okumayı dene , veriyi yazmıyor olabilirsin .. Yada CSN ve CE logic durumlarınıda incelemenide öneririm .. Tabii yazılımından eminsen .. Farklı bir modül ile de deneyebilirsin ..


Burak
Ω Gens Una Sumus Ω

Powered by EzPortal