arduino

Pozdrav grupi.

Udaljenost je max. 10m. debljina zida je cca 0,5m.

koristio project iz njihovog oglednog primjera s 3 led i 3 tastera.

Hvala unaprijed.

Reply to
JoeSoftDJ
Loading thread data ...

S NRF24L01+ modulima (zelenima s 10 pinova) takva komunikacija radi bez ikakvih problema i preko vise zidova i na vecoj udaljenosti a ako uzmes one s antenama (crni s 8 pinova) onda udaljenost na otvorenom moze biti i preko kilometra. Obavezno mora cip biti plus verzija jer se razlikuje od cipa koji u imenu nema 'plus'. Ti su cipovi odlicni jer omogucavaju automatsko slanje ACK paketa za potvrdu prijema s CRC checksum-om tako da u predajniku mozes provjeriti da li je paket primljen i da li je primljen ispravno. Osim toga postoji i automatsko ponovno slanje paketa u slucaju da je doslo do greske u komunikaciji ili je paket iz nekog razloga bio izgubljen (broj ponovnih slanja se moze podesiti na nula do najvise 15 puta). Pa ipak, meni je najkorisnija mogucnost koju taj cip omogucava ACK payload - mogucnost da se u ACK paket za povrdu prijema ubaci dodatni paket podataka tako da prijemnik moze odasiljati podatke bez potrebe za privremenim prebacivanjem u TX mode.

Jedan NRF cip moze na jednoj frekvenciji istovremeno slusati 6 drugih cipova i svaki kanal ima svoj buffer za 3 paketa. Cip su napravili Nordic Semiconductor koji su zasluzni i za nastanak Atmelovih mikrokontrolera.

Library-ji koje ces naci na internetu iskoristavaju samo mali dio mogucnosti tovoga cipa tako da ces, ako ti zatrebaju i sve ostale, morati detaljno prouciti datasheet pa u library dodati stvari koje ti trebaju - a najbolje je ako napises svoj library koji ce biti prilagodjen onome sta ti treba.

Za pocetno experimentiranje moze probati raditi po ovome:

formatting link

iako taj driver nije bas najbolji (u komentarima mozes pronaci moje ispravke) i ne uzima u obzir situacije kada treba obrisati samo pojedinacne interrupt flag-ove nego ih brise sve istovremeno a to ne moze raditi kada se koristi ACK palyload mode. Takodjer, taj library koristi pakete fixne duzine a kada se koristi ACK paload onda se da bi to moglo raditi najprije mora omoguciti dynamic payload mode.

Na stranicama proizvodjaca je forum gdje ljudi koji su radili na razvoju tovog cipa odgovaraju na svako postavljeno pitanje a u puno slucajeva u odgovoru napisu i kod s primjerom kako su zamislili da se odredjene stvari naprave.

Cip mozes koristiti tako da na mikrokontroler spojis i interrupt liniju pa da dogadjaje obradjujes u interrup rutini - ili da tu liniju ne koristis nego da interrupt flag-ove ocitavas na isti nacin kako se s tim cipom i komunicira - preko SPI bus-a.

--
Let There Be Light 
Custom LED driveri prema specifikacijama 
 Click to see the full signature
Reply to
Chupo

Zahvaljujem. Isprobam pa ako bude pitanja javim se. lp

17.11.2016. u 11:54, Chupo je napisao/la:
Reply to
JoeSoftDJ

Nema problema. Osnovno koristenje NRF24L01+ nije toliko komplicirano ali ako hoces iskoristiti naprednije mogucnosti i napraviti da sve skupa radi i u rubnim uvjetima (npr. predajnik ima antenu pa prijemnik odaslani paket procita ali prijemnik nema antenu pa se ACK paket izgubi) onda se treba malo potruditi. Ako se RX ili TX buffer u nekom trenutku napuni komunikacija ce sigurno prestati a opet ne smijes brisati buffer prije nego dovrsetka odredjenih sekvenci tako da treba dobro prouciti kako cip funkcionira pa prema tome napraviti napraviti driver za komunikaciju.

Jedna od stvari koja nije bas ocita je da ako koristis ACK payload mode onda ce RX ACK paket s payload-om vratiti odmah, ali ACK kojega mu TX mora vratiti kao potvrdu prijema payload-a nece se poslati automatski nego ce se ACK poslati prilikom prve sljedece komunikacije u smjeru od predajnika prema prijemniku - a to moze biti i nakon par sati. Sve to vrijeme prije nego se u RX-u primi ACK od strane TX-a se u RX-u ne smije iz buffer-a maknuti zadnji paket koji je poslan (ACK + payload) jer se inace nakon primljenog ACK od strane TX-a CRC nece imati s cim usporediti. S obzirom da buffer moze u jednom trenutku sadrzavati najvise 3 paketa onda se u slucajevima da se komunicira s vise cipove istovremeno mora voditi briga o tome da u buffer-u uvijek ima jedno slobodno mjesto. Ako se desi da se ACK ne procita niti nakon maximalnog broja ponovnih slanja (ako uopce koristis automatsko ponavljanje paketa koji nije primljen) onda se iz TX buffer-a zadnji TX paket nece obrisati automatski pa ga, nakon detekcije preko flag-ova koji govore da je ACK izgubljen, da bi se daljnja komunikacija mogla odvijati treba obrisati programski.

Ima jos par takvih stvari - jednom kad slozis komunkaciju ces primijetiti da ce se vjerojatno desiti situacija kada komunikacija u jednom trenutu prestane a ponovno ces ju moci pokrenuti jedino ako resetiras NRF cip - to ce biti znak da nesta nisi uzeo u obzir i da zbog toga u nekom od buffer-a vise nema nijednog mjesta.

Ja sam za debuggiranje komunikacije na RX spojio 4x20 char LCD na kojem se ispisuju stanja NRF flag-ova u obliku:

TX_FULL MAX_RT TX_DS RX_DR TF RT DS DR FF TX_FULL ^ | -- FIFO_STATUS

Taj mi je prikaz omogucio da shvatim koje slucajeve nisam pokrio pa sam onda malo po malo dodavao rutine koje vode racuna i o tim situacijama.

--
Let There Be Light 
Custom LED driveri prema specifikacijama 
 Click to see the full signature
Reply to
Chupo

zahvaljujem na korisnim informacijama lp

17.11.2016. u 18:20, Chupo je napisao/la:
Reply to
JoeSoftDJ

Chupo,

Jozo

098/252-884

17.11.2016. u 18:20, Chupo je napisao/la:

Reply to
JoeSoftDJ

Sorry ali vrijeme mi ne dozvoljava objasnjavanje korak po korak jer radim na 2 uredjaja. S Arduino library-jem mozes jednostavno ostvariti komunikaciju a pisanje specificnog drivera nije trivijalno. Arduino nisam koristio ali koristenje gotovog library-ja ne bi trebao biti problem. Ako pak hoces napraviti svoj driver onda kreni od onog linka kojega sam ti dao. Najprije uspostavi SPI komunikaciju i ocitaj status registar i kad dobijes 0x0e je to znak da SPI komunikacija radi.

Nakon toga probas u neki registar cipa upisati neki podatak pa ga procitati tako da provjeris da li radi i pisanje i citanje. Onda ides korak po korak, najprije TX konfiguriras za slanje paketa fixne duzine i posaljes par byte-ova pa u prijemniku provjeris da li ih primas.

Ali ako do sad nisi radio driver za SPI komunikaciju onda je najbolje da za pocetak koristis Arudino ili da uzmes AVR Studio pa isprobas funkcije sa spomenutog linka - za ovu drugu metodu ces morati detaljno prouciti datasheet od NRF24L01+ cipa a podrazumijeva se da sve u vezi mikrokontrolera kojeg koristis znas vec od ranije i da znas kako debuggirati program - ja sam npr. za debuggiranje TX-a preko RS232 spojio na PC pa debug poruke slao u terminal a za debuggiranje RX-a sam, ko sta sam reko, stavio ekran i slozio prikaz stanja flag-ova.

Osim toga provjeri da li to sta ti treba mozes ostvariti i s NodeMCU koji se lako programira preko Arduino IDE-a a za kojega ima puno gotovih primjera:

formatting link

Na eBay-u tih modula ima po $3 a na njima je ESP8266@80 MHz koji moze istovremeno raditi i kao access point i kao server a kad ga koristis s bootloader-om preko Arduino IDE-a onda imas skoro 1 MB slobodne programske memorije i 80 kB RAM-a. U Arduino IDE-u pod Examples imas par desetaka primjera za ESP8266 i vrlo je moguce da s minimalnim izmjenama nekog od tih primjera mozes postici to sta ti treba.

--
Let There Be Light 
Custom LED driveri prema specifikacijama 
 Click to see the full signature
Reply to
Chupo

hvala nas uputi. Jozo

23.11.2016. u 0:47, Chupo je napisao/la:
Reply to
JoeSoftDJ

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.