Fórum témák

» Több friss téma
Fórum » NRF24L01+ működése
 
Témaindító: peti634, idő: Jan 24, 2014
Témakörök:
Lapozás: OK   1 / 4
(#) peti634 hozzászólása Jan 24, 2014 /
 
Üdv.
Segítségeteket szeretném kérni a címben szereplő eszköz működtetéséhez.
2 ilyen eszközt szeretnék összekötni, 2db Atmega8, és 2db LCD-m is van hozzá.
Próbáltam a következő kódokat:
Bővebben: Link
Bővebben: Link
Bővebben: Link

A bekötés elvileg jól van, mivel ha kiírja a Channel-t az eszközbe, az helyesen vissza is olvassa, viszont semennyire nem megy a kommunikáció. Az utolsó linknél folyamatosan azt írja hogy nem tudta elküldeni (nem volt visszaigazolás), a fogadó pedig csak vár az adatokra, de semmi nem történik.
Az ardunio-s kódot is átírtam, de nem ment.
Van egy ardunióm (2560), de csak egy darab, így azzal tudom csak tesztelni.

Feltöltöttem az általam használt kódot, hátha valamit elhibázok. Van hozzá egy LCD saját készítésű kódom, de ez nem befolyásolja a működést.
Kérlek segítsetek.
A hozzászólás módosítva: Ápr 19, 2015

NRF24L01+.rar
    
(#) peti634 hozzászólása Jan 25, 2014 /
 
van egy arduniom, oda rákötöttem 2db NRF-et, ők látják egymást.
Viszont amikor az adó egy AVR-en van, akkor már nem megy a dolog, pl help
(#) zoox válasza peti634 hozzászólására (») Ápr 26, 2014 /
 
Szia.
Jutottál valamire azóta a cuccal,mert én is szeretném használni az NRF24L01 modult ,de még csak az adatlapot böngészem de "elég kínai " egyenlőre.
Ja én PIC el szeretném használni ,de ez nem olyan nagy különbség.
(#) peti634 válasza zoox hozzászólására (») Ápr 26, 2014 /
 
igen, sikeresen összetudtam utána már kötni, a gond a kondi volt, vagyis hogy nem volt hozzákötve, mivel amikor adatot akart küldeni, hirtelen leesett a feszültség, így ha egy nagyon minimális kapacitásút, de hozzá kell rakni, az Arduinon pedig van kondi.

Vigyázz a forrasztásra, nekem már sikerült nem egyet megölni, mivel nagyon felmelegíti az NRF chipjét, és egyszerűen megsült tőle.

Mindenképp valami példaprogit ajánlok, úgy sokkal könnyebb lesz tesztelned, és használnod más projekthez.
(#) zoox válasza peti634 hozzászólására (») Ápr 26, 2014 /
 
Én most rendeltem Bővebben: Link és ezt akarom használni csak nem látom át még. Fogalmam nincs hol is kezdjem ?! Hogy beszélgetek az eszközzel ? Azt már látom hogy SPI vel megy a kommunikáció meg van neki RX buffer meg TX buffer de ezeket hogy fogom elérni .......hu még nem látom át nagyon.....esetleg röviden le tudnád írni hogy is müködik ez az egész.Köszi.
(#) peti634 válasza zoox hozzászólására (») Ápr 27, 2014 /
 
Amit tudok ajánlani hogy kezdetben folyamatosan ellenőrizz valamilyen beálított értéket, hogy az NRF nem e reszetelt még e.
Sajnos én kódot nem tudok adni pic-hez, ha gondolod AVR-es forrást esetleg el tudok küldeni.
Röviden:
Egy kezdeti lépést írok le, amitől el lehet később térni.
Mind2 eszközt inicializáld:
SPI inicializálása.
CE láb 0 (vagyis földre állítása)
CSN láb 1(pozitív)

Rádiófrek egyezzen, pl 76.
Mivel 6 csatorna van benne, ebből első kettő engedélyezve, de mi csak az elsőt fogjuk használni.
Ennek a csatornának beállítani hogy hány bájt lesz egy csomag, pl:1

CRC beállítás mind2 ugyan olyan legyen.
Flush RX/TX
A csomagok címmel vannak azonosítva, ezek lehetne 1-3-5 bájt.
A küldő eszköznél az író cím, a fogadó eszköznél pedig jelen esetben a 0. csatorna fogadó cím meg kell hogy egyezzen.

#define NRF24L01p_CONFIG _BV(EN_CRC) | _BV( CRCO )
#define TX_POWERUP write_register(CONFIG, NRF24L01p_CONFIG | ( _BV(PWR_UP)) )
#define RX_POWERUP write_register(CONFIG, NRF24L01p_CONFIG | ( _BV(PWR_UP) | _BV(PRIM_RX) ) )

Két makrót használtam, mely vagy fogadó állapot (RX), vagy küldő állapotba(TX) helyezi az NRF-et.
Kezdetben mind2 eszköz fogadó állapotba legyen, mivel ha túl sokáig van küldő állapotba akkor nekem elkezdett melegedni. CE 1-re állítva elkezd "hallgatni".

A fogadás könnyű:
Ha a STATUS regiszter RX_DR bitje bebillen akkor valamelyik csatornából olvasható adat. Kiolvasás utána RX_DR bitet 1-essel kell visszaírni, ekkor visszaáll alaphelyzetbe, majd ráengedni egy Flush RX/TX.

Küldés:
CE 0-ra állítás, átállítani küldési állapotba (TX_POWERUP), erre hagyni kell 150 ms-ot.
Ezután az SPI-n keresztül kiírod az adatokat a Bufferbe. (W_TX_PAYLOAD)

Most jelenleg küldő állapotba van. CE 1-re állítva elkezdi küldeni az adatokat.
Alapbeállításnál az NRF megszakítás lábánál jelzi meddig kell várnunk.
Ha ezt a lábat földre húzza, akkor valamilyen esemény történt, nem várunk tovább.
CE 0-ra!
Visszaállítjuk fogadó módra.
A OBSERVE_TX regiszterből kiolvashatjuk hogy sikeres volt e az elküldés (TX_DS), vagy több próbálkozás ellenére se lett visszaigazolva a csomag, tehát sikertelen volt az elküldés.
Flush-Flush. Majd CE 1-re engedélyezzük tovább a fogadó módot.

Nem tudom ebből kijössz e, ha nem adj egy e-mail és elküldöm amit tudok.
Arra is vigyázz hogy 3,3 mehet csak a + lábra, de az adatlábakon tolerálja a +5V-ot.
(#) zoox válasza peti634 hozzászólására (») Ápr 27, 2014 /
 
hu... meg huuu..
Na szóval el kell olvasnom még 1x.
... Meg volt.Szóval küldök 1 email cimet (elöre is köszi). zoo.x@c2.hu
Jó kis cucc lesz előbb utóbb csak meg kell ismerni.
(#) Balagemann2031 hozzászólása Jún 30, 2014 /
 
Sziasztok! Én is két nRF24L01-modul közötti kommunikációt szeretnék megvalósítani. Már az elején elakadok ott, hogy nem értem hogyan címezzem a regisztereket. Használtam már SPI-t nokia 3310-es LCD-nek elég volt kiküldeni a parancsot, vagy adatot, de az nRF24L01-nél nem világos, hogy pl a CONFIG regisztert, hogyan érem el. Vagy esetleg minden adat küldésnél elöbb egy címbájt, és utánna az adatbájt?
(#) toto hozzászólása Jún 30, 2014 / 1
 
Szia Balagemann2031!
Az nRF24L01-nél van egy- és kétbájtos kommunikáció is. Az egybájtosnál csak egy command bájtot küldesz ki: pl. a FLUSH_TX (0xE1 - ez kiüríti az adás bufferét), de ebből elég kevés van. A legtöbb esetben regiszterekbe írsz értékeket, itt ugye a regiszter címét követően kiküldöd a kívánt értéket. Egy kis csavar a dologban: az 5 bites regiszter címeket kombinálni kell az írási ill. olvasási paranccsal, hogy tudja az IC, hogy éppen mit akarunk csinálni. Az olvasási parancs: 000AAAAA, ahol A az 5 bites címe a regiszternek. Tehát igazából olvasáshoz csak ki kell küldeni a regiszter címét ( no meg utána az érték bájtot, amit be akarunk írni), mert az első 3 db nulla a parancsban nem változtat az 5 bites címen.
Ha írni akarunk a regiszterbe, akkor viszont az írás paranccsal kell kiegészíteni a cím bájtot. Az írás parancs: 001AAAAA. Tehát a regiszter cím bájtjának 5. bitjét 1-be kell állítani, és így kell kiküldeni.
Valahogy így:
  1. void nRF_writereg(u8 nRFreg, u8 data)           //egy byte irasa nRFreg-be
  2. {
  3.         nRF_CSN_L();                                               //chip select
  4.         spi_send(SPI1, RF24_W_REGISTER|nRFreg); //ha irni akarunk a regiszterbe, a cimet meg kell fejelni az iras paranccsal
  5.         delay_us(1);
  6.         spi_send(SPI1, data);                                    //utana kikuldjuk az adat byte-ot
  7.         while ((SPI_SR(SPI1) & SPI_SR_BSY));          //varunk, hogy az SPI hardver befejezze a muveletet
  8.         nRF_CSN_H();
  9.         delay_us(10);
  10. }
(#) toto válasza toto hozzászólására (») Jún 30, 2014 /
 
Ha nem lenne egyértelmű,
az előző példában az RF24_W_REGISTER értéke 0x20, az nRFreg jelenti a regiszter címet.
Írtam még pár gondolatot az előző hozzászólásomhoz "Módosítás"-sal, de azt a Fórum motorja szépen lenyelte. (?)
Lehet valamit elbénáztam.
A hozzászólás módosítva: Jún 30, 2014
(#) toto válasza toto hozzászólására (») Jún 30, 2014 /
 
...
Máris javítanom kell magam. Előzőleg írtam:
Idézet:
„Tehát igazából olvasáshoz csak ki kell küldeni a regiszter címét ( no meg utána az érték bájtot, amit be akarunk írni),”

A zárójelbe írt gondolat hülyeség volt, bocsi, mivel ha olvasni akarunk, akkor nem akarunk regiszter értéket beírni. Viszont olvasásnál is ki kell küldeni egy második bájtot, ami a "DUMMY" bájt, mindegy mi az értéke. Ez csak arra szolgál, hogy ezzel egy időben a slave nRF24L01 vissza tudja küldeni az olvasni kívánt értéket.
(a módosítás funkcióval továbbra is vannak problémáim)
(#) Balagemann2031 válasza toto hozzászólására (») Jún 30, 2014 /
 
Köszönöm az eddigi információkat! Értelmezem, és kipróbálom! Jelentkezem amint jutottam valamire!
(#) Balagemann2031 válasza Balagemann2031 hozzászólására (») Jún 30, 2014 /
 
Tehát, ha jól értelmezem akkor ha 0x20-at kiküldök, akkor az írást jelent a CONFIG-regbe, majd amit következőnek küldök, az lesz ami beállítgatja a biteket. Olvasásnál pedig csak kiküldöm a 0x00-t (ha a CONFIG-regre vagyok kiváncsi) és még egy bájtot, aminek nincs jelentése, és ez alatt jön be az olvasott adat. Elméletileg így logikus lehet. Köszi a segítséget, jó rávezetés volt!
(#) TalhoSan válasza Balagemann2031 hozzászólására (») Jún 30, 2014 /
 
Hi!
Adok egy linket, ahol egész jól elmagyarázza az NRF24l01 használatát. Nem old meg mindent, de sokat segít.
NRF24L01 használata
(#) toto válasza Balagemann2031 hozzászólására (») Jún 30, 2014 /
 
Igen, jól értetted.
A TalhoSan által linkelt tutorial jónak tűnik, az is segíthet. Továbbá egy csomó forráskód is fellelhető a neten (csak azt nem értem, hogy ha ezeket példának szánják az alkotói, akkor miért nem tudják rendesen kommentelni.) Én is egy-két példaprogramból indultam ki, mikor az nRF IC-vel foglalkoztam. Gondoltam átformázva gyorsan működésre bírhatom a forráskódot, de ezek nálam legtöbbször nem működnek egyből. Most is csak logikai analizátorral, miután megértettem az egész kommunikációt sikerült elindítani az átvitelt.
(#) Balagemann2031 válasza TalhoSan hozzászólására (») Jún 30, 2014 /
 
Köszi a linket, ez tényleg jónak tűnik
(#) Balagemann2031 válasza toto hozzászólására (») Jún 30, 2014 /
 
Én is kísérem analizátorral a kommunikációt, igazából találtam neten sok forrást, de főleg C-ben és PIC-re még kevesebbet. Assemblyben progizok, a C-t csak kihámozgatni tudom.
(#) bbalazs_ válasza Balagemann2031 hozzászólására (») Júl 1, 2014 /
 
Ha erdekel, en csinaltam ezzel kisauto taviranyitot, PIC-el, assemblyben. El tudom kuldeni a forrast es az aramkori rajzot.

Komolyan a chip-pel akarsz dolgozni, ami netto 2e Ft?
Csak mert en a paranyi Hope modulokat valami 400Ft korul vettem.
A hozzászólás módosítva: Júl 1, 2014
(#) Balagemann2031 válasza bbalazs_ hozzászólására (») Júl 1, 2014 /
 
Szia! Bár a Hope modulokat nem ismerem, de már megvan ez a 2 modul és szeretném használni őket Amúgy ha elküldenéd a forráskódot az nagyon szuper lenne! Most épp próbálok kommunikálni vele, de bármit írok neki 0x0E-t küld vissza (gondolom hiba kód), most a SPI beállításán akarok módosítani hátha az a gond. Az emai címem: birbal13@citromail.hu
Előre is köszi!
(#) Balagemann2031 válasza Balagemann2031 hozzászólására (») Júl 1, 2014 /
 
Megoldódott a probléma, a CSN-t bájtonként ki be kapcsolgattam ez volt a baj.
(#) bbalazs_ válasza Balagemann2031 hozzászólására (») Júl 1, 2014 /
 
Sajnos a filmeret meghaladja a citromailes limitedet. Esetleg masik email cim?
Egyebkent a ket modul gyakorlatilag azonos, a Hope is azt a magot hasznalja.
Talan annyi a kulonbseg, hogy a Hope-nal be kell allitani a Bank2-t is az adatlapban megadott ertekekkel.
A hozzászólás módosítva: Júl 1, 2014
(#) Lüke Aladár hozzászólása Aug 20, 2014 /
 
Sziasztok!
Vettem három darab ilyen modult Bővebben: Link, két PIC között szeretném használni, a jelenleg tökéletesen működő vezetékes SPI kommunikáció "leváltására". Átnéztem az adatlapját, végigolvastam ezt a topikot, kerestem egy csomó példaprogramot, de nem tudom konfigurálni . Minden csak Arduinohoz szól, nekem az nincs. Youtube-on van egy csomó videó, ahol PIC-kel, AVR-el gyönyörűen működik a dolog. Forráskód vagy nincs, vagy nem értem .
Hogy kezdjek neki a beállításának? Egyenlőre annyit szeretnék, hogy az egyik csak vevő, a másik csak adó.
(#) toto válasza Lüke Aladár hozzászólására (») Aug 20, 2014 /
 
Szia Aladár! (érdekes neved van )
Én régebben foglalkoztam nRF24L01-gyel, de emlékszem, hogy bénáztam vele néhány napot, és
most megnéztem a kódom. Akkoriban egy USB-s logikai analizátor jó szolgálatot tett, amit 2e-3e forintért lehet venni az interneten.
Kis lépésekben haladtam a kód fejlesztéssel, nem tudtam egyből kommunikálni a két eszközzel.
Első lépésként az SPI-n keresztül próbáld meg kiolvasni a STATUS regisztert, ha rendben van, akkor 0x0E-t kell kapnod. Ez azt jelenti, hogy a kommunikáció rendben, és az nRF24L01 nem döglött, mert válaszol. Ha ez kész, akkor utána lehet konfigurálni az IC-t.
(nem küldök teljes kódot, mert én nem PIC-kel csináltam, no meg azt írtad, hogy az SPI működik. Remélem, a lényeg érthető.)
  1. #define RF24_STATUS      0x07
  2. ...
  3. bool nRF_init(void)
  4. {
  5.         nRF_CE_L();
  6.         nRF_CSN_H();
  7.         if (nRF_readreg(RF24_STATUS)==0x0E) nRF_OK=true;               
  8. //ha vissza tudta olvasni a STATUS regiszter tartalmat, akkor az nRF24L01 rendben csatlakozik
  9. ...
  10. }
  11.  
  12. uint8_t nRF_readreg(uint8_t reg)                //egy byte-ot olvas az nRF reg-bol a mikrokontrollerbe
  13. {                                                  
  14.   uint8_t j,x;
  15.    nRF_CSN_L();
  16.    spi_send(SPI1,reg);
  17.    x=spi_read(SPI1);
  18.    nRF_CSN_H();delay_us(10);
  19.   return x;
  20. }
(#) Lüke Aladár válasza toto hozzászólására (») Aug 26, 2014 /
 
Hello! Bocs, hogy csak ilyen későn válaszolok
Megpróbáltam, amit írtál. Azt gondoltam, hogy a visszaérkező adatot kiküldöm egy portra, és a rajta lévő LED-eken tökéletesen látszik minden. Sajnos mindenre 0xFF a válasz, ha leválasztom az egész eszközt, arra is. Nekem ebből az jött le, hogy nem küld semmit .
Elképzelhető-e olyan, hogy ugyan az NRF bírja az 5V-ot a bemenetén, de a PIC az ő általa küldött 3V környékű (legalábbis a tápja ennyi, ebből gondolom ezt az értéket) jelet nem érzékeli magas szintűnek? Mert csak erre tudok gondolni, a kódod alapján érthető az egész...
(#) toto válasza Lüke Aladár hozzászólására (») Aug 27, 2014 /
 
Igen, sajnos előfordulhat, hogy az 5V/3V szintkülönbség miatt nem megy a kommunikáció. Ha lenne logikai analizátorod, vagy egy szkópod, akkor meg lehetne nézni, hogy mit kap a PIC vissza.
Nálam 5V/3,3V közötti mikrokontrollerekkel stabilan ment a kommunikáció (más hardver, nem nRF chip), de ez típusfüggő. Esetleg megnézheted az adatlapokat is, hogy milyen szintű be/ki feszültségeket fogadnak el.
Végül vannak kétirányú szintillesztők (pl. ebay-en készen is lehet kapni ilyeneket néhány dollárért), amely megoldja az ilyen problémát, de én először megpróbálnám azt a 3 voltot kicsit fentebb tornázni mondjuk 3,3-ra, ott már azért esélyes lenne, hogy működjön. A szkóppal látni ezért lenne jó, hogy mi történik, mert kizárható lenne, hogy az SPI kommunikációval és nem a feszültséggel van baj.
(#) toto válasza Lüke Aladár hozzászólására (») Aug 27, 2014 /
 
A legkézenfekvőbb megoldást elfelejtettem említeni: nem lehet lentebb húzni a PIC tápját? A legtöbb PIC széles tápfesz tartományban működik. Máris megoldódna a problémád.
(#) hadrp hozzászólása Aug 29, 2014 /
 
Sziasztok!

Segítségeteket szeretném kérni, mert eléggé elakadtam ezzel az eszközzel. Már vagy két hete kínlódok vele, de megoldást nem találok rá sehol a neten.
Egy meteorológiai állomás külső szenzorának adatai küldését szeretném megvalósítani vele - kezdetben egy DHT22 szenzor telemetrikus adatait küldené, - ha küldené, amit egy Raspberry dolgozna fel.
Az eszköz Arduino UNO - Arduino Pro mini és Arduino UNO - Raspberry felállásban tökéletesen működik, viszont sima ATMega8-al nem akar menni.

A neten fellelhető megoldások közül egyet találtam - annál vagyok most is leragadva. Sajnos a C nyelv még nem igazán áll kézre, Pythonban programozom főleg, szóval ezzel a kóddal mást nem igazán tudtam csinálni, csak AVR Studio 6-ban lefordítani és egy ProMini TL866CS programozóval "égetni".

Bővebben: Link

ATMega8-16PU-t használtam fel, két darabot (adó és vevő) Fuse bitek mindkét esetben 0xC4 0xD9

A rendszer látszólag működik. Az adó oldal ledje másodpercenként felvillan. Erről csináltam egy logikai analizátorral készített képet, hátha Ti ebből már tudjátok mi lehet a gond. Csatolom ezt is.

A vevő oldalt Putty-al figyelve - amíg nincs rákötve a vevő normális adatokat küld, persze fake értékekkel, viszont amikor a vevő is rajta van, akkor már nem csinál semmit. A terminál képernyő fekete - a receiver led sem világít.
Raspberryn van egy scanner programom rá, de az adott csatornán az sem érzékel aktivitást, azért gondolom, hogy az adó rész lehet a ludas, bár a logikai analizátor ezt talán mégis cáfolja?!

Tiszteletteljes kérésem az lenne, ha kis időtök engedi vessetek már rá egy pillantást, hogy egyáltalán jó ez a program?! Vagy esetleg ha valaki ismer a neten fellelhető megoldást erre, ami működik is, azt hálásan megköszönném!
De az is sokat segítene, hogy ezek után a problémával milyen irányba induljak el, mit nézzek át.

A segítségeteket előre is köszönöm!
(#) peti634 válasza hadrp hozzászólására (») Szept 1, 2014 / 1
 
Üdv.

Nálam is hasonló volt a hiba, egy kondi kellet hozzá, mivel hirtelen leesett a feszültség, és az NRF egyből resetelt is.
Ha jól értem akkor te jelenleg az adó oldalon próbáltad az AVR-t és az nem ment?
Az adó oldali rész registerei mit mondanak? Esetleg rakj össze te egy kommunikációt.
Feltöltöttem egy sajátot, prob6-7 amik működnek, így azokkal elvileg neked is kellene. Szerintem gyakorold a C-t pont az a nyelv, amit itt megfelelően lehet használni

NRF24L01+.rar
    
(#) hadrp válasza peti634 hozzászólására (») Szept 1, 2014 /
 
Szia!

Én már úgy álltam neki, hogy a 10µF kondi ott volt. (Olvastam, hogy Neked is úgy indult csak)
Adó és vevő oldalt is próbáltam AVR-el. A vevő oldal rendben volt - látszólag, de az adó nem akar adni.

Bevallom töredelmesen, a regisztereket még nem igazán analizáltam - nem vagyok még ennyire profi az AVR-ben és nem igazán tudom még, hogy hogyan kell. Haladok, de még nagyon szokatlan a C a Pythonhoz és az Arduino platformhoz képest, bár utóbbira kicsit hasonlít.

Már végső elkeseredésem azon gondolkoztam, hogy az Arduino hex file-t beégetem egy ATMega 328-ba és megvan oldva a dolog (vagy egy Arduino pro mini-be), de fogyasztás szempontjából lehet nem lenne a legszerencsésebb megoldás.

Nagyon szépen köszönöm az forrásokat és az oktató anyagokat! Annak külön örülök, hogy AVR Studioban vannak írva a példák, amire ezidáig forrás filet és oktató anyagot a neten nem sokat találtam még.

Még egyszer köszönöm!
(#) Zaustuv hozzászólása Szept 12, 2014 /
 
Sziasztok!

Arra lennék kíváncsi, hogy ez a chip használ-e hardveres SSFH-t (frekvenciaugrásokat) az adatátvitelnél, mivel amikor rákerestem erre a neten, nem találtam egyértelmű választ. Spektrumanalizátorom pedig szintén nincs, amivel ezt megnézhetném.
Következő: »»   1 / 4
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem