Fórum témák

» Több friss téma
Fórum » RFM12BS
 
Témaindító: Thowra, idő: Márc 6, 2009
Lapozás: OK   2 / 12
(#) Lucifer válasza TWS hozzászólására (») Dec 13, 2009 /
 
A státuszregiszter visszaolvasgatása önmagában nekem nem vezetett eredményre. Gondolom valamit inicializálni kell előtte, de annyira nem mélyedtem bele, mert sikerült működésre bírnom. Az előzőekben említett könyvtárat ajánlani tudom, mert elég jól működik, amióta a lentebb említett hibákat kijavították.
(#) djdry válasza Lucifer hozzászólására (») Feb 13, 2010 /
 
Hali...
Én már vagy egy éve nyaggatok Ilyen RFM12B modult és teljes sikerrel. Arra kell figyelni, hogy a kimenetei OC azaz open collectorosak így fel kell 10K ellenállással vinni a Vdd-re. Pontosabban az FSK, NIRQ, lábakat, de jó ha az SDO labat is, így kevesebb a szívás vele. Én speciel komplett PIC modult hoztam össze egy haverommal, ami egy include és egy macro fájlból áll. Tutin megy.

Üdv mindenkinek!
(#) Gatery válasza djdry hozzászólására (») Feb 15, 2010 /
 
Szia!

Elvileg az rfm12b -nek a lábian van weak pull up resistor (133k).

Esetleg ha még van benned segítő szándék akkor én is és gondolom a többiek is szívesen fogadnák a segítségedet. Esetleg valami bővebbet a modulról, főként a kódról.
Hogy kétirányu e a kapcsolat pl.

Illetve hogy mennyire zajos neked az adás, milyen messze megy, milyen sebességen?
És hogyan köszübölitek ki a hibás adatátvitel miatti bítokat? Gondolom checksum, de az nem valami megbízható.

Szóval ha neked tényleg megy akkor szívesen vennénk a segítségedet!
(#) pucuka válasza Gatery hozzászólására (») Feb 15, 2010 /
 
Minden adatátviteli rendszerben alkalmaznak vonali kódolást, ami lassítja ugyan a tényleges adatátviteli sebességet, de egyben biztonságossabbá teszi. A vonali kódolás mindíg az átviteli út tulajdonságainak egfelelő. Pl. semilyen átvitel nem visel el hosszú ideig azonos jeleket, sok 000000 -t vagy 1111111 -et, ezért valamilyen kódolást alkalmazni kell, és akkor már olyat, ami hibajavítási tulajdonsággal rendelkezik. többnyire redundanciával.
Ezeknél arádiós modemeknél többnyire Manchester kódolást alkalmaznak, ha végigolvasod a hasonló topikokat, láthatsz példákat is rá. A kódolást, dekódolást a mikrovezérlő programmja végzi (általában) Bővebben: Link
Vezetékes átvitelnél probléma a hosszú vezeték feltöltödése is, ezért ott bipoláris kódolást használnak, pl. HDB3, AMI
Ami a rádiós összeköttetést illeti, azt ki lehet számolni, az adatlapon megadott max adótejesítményből, és a vevőérzékenységből, a használt antennák nyereségei (veszteségei)ből, valmint az átviteli út csillapításaiból
(#) Gatery válasza pucuka hozzászólására (») Feb 15, 2010 /
 
Köszönöm a hozzászólásod!

Igen én is Menchesterre gondoltam előszőr.

Bár ameddig még nincs meg a teljes framework, addig ezt a részét nem implementálom.

Most még a lelkivilágát nézem az IC-nek és sok olyan dolgot találtam amit az adatlap nem ír....pl a küldés előtt ha az nFFs lábat nullába visszük majd küldés után vissza akkor lényegesebben kevesebb lesz a hiba.

Az a datátvitelt meg csak elméletben tudod kiszámolni. Ok hogy a fizikája képes a megadott sebességre, de lehet hogy maga a kód az ami behatárol.
Névlegesen hogy ugye mondjuk az adatráta lehet hogy 38kbps de minden byte elé kell írni a syn kódot meg a csomag elé a preamble szóval ezért kérdeztem hogy mekkora data rate-t sikerült elérni...

meg persze ok hogy csinált egy könyvtárad hozzá, mi nagyon nemes dolog...csak azt szerettem volna még ebből megtudni, hogy pollingol vagy interuptal csinálja, illetve hardweres vagy softwares az spi.


Mostani problémám, hogy az adásnál nekem nem akar feljönni a nIRQ láb, 10k -val tápra van kötve.
Ezért mikor a bytokat küldöm akkor ugye elvileg ez a láb low jele jelzi hogy a TX buffer üres és írhatok. De mivel ez nem lesz táp így állandóan flood van...

(#) Gatery hozzászólása Feb 16, 2010 /
 
Sziasztok!

Na elég szépen megy a dolog...de azért még nem minden tiszte.
PIC-et használok:

A küldés kódja a következő

void RFSend(unsigned char data){
unsigned int tmp=0;
while(nIRQ) {}
tmp=Write_SPI(0);
nFFS=1; Write_SPI(0xB800+data); nFFS=0;
Delay_us(280);


}

Az érdekesség az, hogy az nIRQ láb valahogy nem azt csinálja amit kell...vagy én nem tudom hogy hogyan kéne mennie...
Szóval ha kiveszem a késleltetést akkor nem látom az oscilloszkópon a jelét az nIRQ-nak és az átmenő adatok is nullák.
Ha benn van a késleltetés akkor meg látszik hogy mozog az nIRQ, nem 280us-ig tehát attól független.

Csak azt nem értem ha meg kell várni az adat kiküldését akkor minek van IRQ láb?


(#) Gatery válasza djdry hozzászólására (») Feb 18, 2010 /
 
Szia!

Esetleg nem osztanád meg velünk a könyvtáradat?
Bevallom most jól jönne!

Előre is köszönöm! (Köszönjük, a többi forumozó nevében is.)
(#) mtibi77 válasza Gatery hozzászólására (») Feb 21, 2010 /
 
Hali
Én is küzdök már 1 hete rfm12b-868-smd modullal, nem sok sikerrel. a status regiszterre csak nullák jönnek vissza. Úgyhogy örülnék egy működő kódnak. PicBasicben nyomom, úgyhogy ha sikerülne elindítanom, akkor szívesen visszaosztom a basic kódot.
(#) pipi válasza Gatery hozzászólására (») Feb 21, 2010 /
 
nem lehet hogy az nirq lassan vált vissza, a programod hamarabb újra a rfsend rutint hívja, mielőtt az előző átvitel irq-ja visszaállna?
(#) Gatery válasza mtibi77 hozzászólására (») Feb 22, 2010 /
 
Szia!


Pár tapasztalat. Az RFM12B jalű moduloknak a lábait nem open collectorosak. Nem kell már nekik felhúzó ellenállás.
Pár jó tanács.
Az nRES lábat érdemes lekötni és nem programból rángatni.
Amikor elkeztem vele dolgozni akkor alacsony frekis SPI-vel dolgoztam. Akkor elindult, gyorsítottam az SPI-n és már nem ment, pedig a kódban nem volt időzítés. A status regisztert haszáltam kiolvasásra.
Nekem az IRQ-láb nem akart rendesen menni, helyette érdemesebb használni a status regisztert, vagy az FFIT-lábat.

Küldésnél ne feledjétek küldenk a syncron bítokat a preambulum után.
Illetve gy kis érdekesség 1sync word esetén minten adat előtt kellett küldenem a syn-et.
De 2 sync word esetén csak az elején utánna bármennyi byte átjöhetett burstben.

Illetve ami még segített, annak elenére hogy adatasheet azt írja hogy a status regisztert reseteli olvasáskor ez nem míndíg törénik meg. Nálam azt hozta helyre hogy a fifo-t minden csomag után resetelem.

Én az rfm12b-433-as modult használtam.
192kbit/s-et sikerült vele elérnem. Stabilan. Drótantennával, nagyon nem tudtam sétárgatni vele. De vasbeton épületen belül kb olyan 50 métert vitt még elég gyorsan utána radikálisan lelassult az adatfolyam.
Lehet hogy alacsonyabb sebességen jobb a hatótávolság. De nekem ennyi is elég.

Sok sikert mindenkinek!

És csak egy megjegyzés, valahogy nem díjazom azon embereket akik csak beszólogatnak hogy "én már egy éve használok ilyeneket, haverral már komplett könyvtárunk van hozzá". Mert ez nem segítség hogy: bibibíííí nekem megy.
Az ilyeneket lazán warn-al jutalmaznám, mér azt megértem hogy nem adja ki a könyvtárat mert ok...azt én se tenném szívesen. De hogy még kódrészletet sem...na mind 1.

Ja igen nekem néha volt holyan hogy nem akart adni a modul bekapcsoláskor, csak akkor mikor újraprogrmoztam!

És sajnos azt kell hogy mondjam hogy addig nem érdemes átlépni az ic rf részére amíg a status regiszter kiolvasása nem megy....
Ügyelni kell az DOUT CLK alapállapotára. És hogy full duplex a kapcsolat, tehát miközben írsz ő már löki is a biteket.
(#) pipi hozzászólása Feb 23, 2010 /
 
Sziasztok!
mekkora hatótávolság érhető el az rfm12b, ill. rfm12bp (500mW) modullal? más moduloknál is látok dBm teljesítmény megadásokat, de nem tudom kb. hatótávra kalkulálni
(#) Gatery válasza pipi hozzászólására (») Feb 23, 2010 /
 
Az rfm12b-el látótvolság esetén 100m-150m körül, alacsony bitrátán.

A nagyobb teljesítményűvel nincs tapasztalatom.
(#) boldivi válasza boldivi hozzászólására (») Feb 23, 2010 /
 
"Sziasztok! Kitettem az adót a harmadik emeleti erkélyünkre. 474m-ig volt türelmem elsétálni, aztán visszajöttem. Hibátlanul átmentek néhány bájtos adatcsomagok. "

Ha jól emlékszem ennél a tesztnél 4800bps-t használtam.

Jó lenne összefoglalni és így egyértelművé tenni a modul/IC működését.
Pl.:

Glory:
"Én arra emlékszem így néhány év távlatából, hogy az IA4420-nál amikor az ember fel inicializálja és beállítgat mindent, valami parancsot kétszer kellett kiküldeni neki, mert elsőre nem mindig működött. "

Továbbá Gatery tapasztalataiban leírtak.

Hibás az adatlap? Nem tér ki mindenre? Vagy arról lenne szó, hogy bizonyos időzítéseket nem tanulmányoztunk rendesen és azért van ez a bizonytalannak tűnő viselkedés?

Én a lábakat használom jelenleg, pár készüléket készítettem itthonra, 19200bps-t használok és hibátlanul működnek. De szeretnék majd elérni nagyobb sebességeket is.
(#) pipi válasza boldivi hozzászólására (») Feb 23, 2010 /
 
Szia! Ezt a távolságot rfm12b, vagy 12bp modullal nézted?. Csak tájékoztatásképpen: az rfm12bp modulnak nincs fcc bevizsgálása (a 12b-nek van), és a gyártó nem is tervezi. Szóval ha termékbe megy, csak óvatosan... A CE jelölés gondolom egyikre sincs, még nem jártam utána. Valaki próbálta már beméretni milyen fel/alharmonikusokon, mekkorát sugároz?
Köszi Gaterynek is a tájékoztatást.
(#) boldivi válasza pipi hozzászólására (») Feb 23, 2010 /
 
Szia!

Egész pontosan erről van szó:

RFM12B-433-S2
(#) Gatery válasza pipi hozzászólására (») Feb 24, 2010 /
 
Készítettem egy képet a Spektrumáról.

A vivőfrekvencia kereken 433-ra van állítva.

Power Output: Max
Deviation: 120kHz


Szerintem nagyon korrekt kis jele van.

PICT0001.JPG
    
(#) pipi válasza Gatery hozzászólására (») Feb 24, 2010 /
 
Köszi, a hatótáv miatt nekem a 12bp 500mW-os kellene. Ekkora teljesítmény csak a 869.4MHz-nél engedélyezett. A spektruma egyébként nem itt, hanem a fel ill. alharmonikusoknál az érdekes. Találtam radiocrafts-os 500mW modult, ennek legalább van CE jelölése, az ára sajnos húzós
(#) (Felhasználó 4577) hozzászólása Márc 5, 2010 /
 
Sziasztok!

Szeretnék összehozni egy adó-vevő párost az RFM12B-868-DRFM12B-868-D Transciever-el.

Volna pár kérdésem a vezérlésével kapcsolatban, néhány dolog nem világos.

Az adatlapban látható kód jól látom, hogy valamiféle szoftveres SPI buszt használ?
Melyikkel jobb vezérelni, hardveressel vagy szoftveressel?
Az adatlapban a 11. oldaltól kezdődően látom a konfigurációs leírásokat.
Hogyan vannak ezek a bitek?
Nem igazán értem, ha lennének regiszterek, mint az AVR-eknél pl a DDRD, akkor sokkal egyszerűbb volna. Hogyan kell 1-es állásba tennem például a e l: Enable TX register-t?

Van egy sejtésem a dologról.
Ezek sorrendben vannak? Pl 1. bit, amit kiküldök, 2. bit, amit kiküldök, stb.?
Akkor úgy kell az e l: Enable TX register-t 1-esbe állítani, hogy 0000000100000001?
Az utolsó 8 bit pedig üres, az utolsó egyes. Miért? Azok fix értékek, fixen azokat kell elküldeni?
Vagy éppen onnan tudja az Transciever, hogy milyen parancsot küldök ki (Configuration Setting Command, Power Management Command, stb.)?

Olvastam, hogy küldéskor, vagy fogadáskor az egyik lábat valamilyen szintre kell billenteni. Melyik is ez a láb?

A HEStore-ban ezt írják: "Analog and digital signal strength indicator (ARSSI/DRSSI)"
Ennek segítségével a vett jelerősséget tudom mérni?
Erről semmit sem találtam az adatlapban. Hol olvashatok róla többet?
(#) boldivi válasza (Felhasználó 4577) hozzászólására (») Márc 6, 2010 /
 
Szia!

A 11. oldal azzal kezdi, hogy milyen sorrendben kell a biteket kiküldeni. Én azt javaslom, hogy először maradj a szoftveres SPI-nél, ha ez működik áttérhetsz hardveresre. Előnye, hogy amíg az adatátvitel tart, addig a CPU futtatja tovább a programodat.
Amit kérdezel az a "Configuration Setting Command". Az egyes parancsokat a felső bitek határozzák meg. Látod az alapértelmezett értéket (POR - Power-On Reset). Ha ezt a parancsot kiküldöd, minden bit-et be kell állítanod kiküldés előtt. Ezeket célszerű a programodban előre definiálni az átláthatóság kedvéért is.
Tehát még egyszer: beállítod az összes bitet (ahogy írtam a programod ezeket változókban tárolja) és kiküldöd az adott parancsot. Ugye ha tárolsz pl egy alapértelmezést minden beállításról, akkor logikai műveletekkel módosíthatod az adott bitet, majd az adatot elküldöd a modulnak.
Pl.:
szeretnéd az Enable Tx register bitet 1-re állítani:
ConfigurationSettingCommand |= 128;
kikapcsolni:
ConfigurationSettingCommand &= ~128;

Én úgy oldottam meg, hogy minden egyes parancs külön függvény.
A 434MHz-es modulomnál ezt használom:
  1. void tx_mode(void) {
  2.         rfxx_wrt_cmd(0x8239);   //*8239 for Tx, 82D9 for Rx (+4 eb, LowBattEn)
  3. }
  4.  
  5. void rx_mode(void) {
  6.         rfxx_wrt_cmd(0x82D9);   //*8239 for Tx, 82D9 for Rx (+4 eb, LowBattEn)
  7. }
  8.  
  9. void rf12_off(void) {
  10.         rfxx_wrt_cmd(0x8201);   //Stand By
  11. }
  12.  
  13. void rf12_send(unsigned char aByte) {
  14.         while(nIRQ_HI());
  15.         rfxx_wrt_cmd(0xb800+aByte);
  16. }

Küldés alatt az nSEL bemenetet kell alacsony szintre tenni - ha erre gondoltál?
Ha visszalapozol, megtalálod az IC-t ami a modulban van és annak az adatlapját.
(#) (Felhasználó 4577) válasza boldivi hozzászólására (») Márc 6, 2010 /
 
Köszönöm a választ!
Így már majdnem minden világos.

Még azt nem tudom, hogy hogyan kell vele küldeni és fogadni. Gondolom mindig a TX és RX-et kell engedélyezni és tiltani, mikor mit. Ugye?

Az nSEL-t mindig magas szintre kell billenteni, amikor küldök neki adatot, nem? Az a Chip Select volna, arra az esetre, ha több SPI-s eszközt kötnék egy buszra?

A Te forráskódod publikus? Esetleg megosztanád velem?
(#) boldivi válasza (Felhasználó 4577) hozzászólására (») Márc 6, 2010 /
 
Amire nekem kell arra jó. Még lehet szépíteni, bővíteni, optimalizálni, de egyelőre ezt használom.
Az "&& rf_stop == 0" részt kitörölheted. Ez a ciklusból való kilépésre szolgál ha kell. 433MHz-es modulhoz írtam.
Definíciós példa:
  1. #define nSEL            (1<<6)  //PD6   out
  2. #define nIRQ            (1<<0)  //PB0   in
  3. #define RF_SDO          (1<<1)      //PB1       in
  4. #define PORT_nSEL PORTD
  5. #define PORT_SDIN PORTD
  6. #define PORT_RF_SDO PINB
  7. #define PORT_SCK PORTC

Ne felejtsd le beállítani az adatirány regisztereket!
Az nSEL alacsony szinten aktív (negativeSelect).

rfm12b.h
    
(#) (Felhasználó 4577) válasza boldivi hozzászólására (») Márc 6, 2010 /
 
Köszönöm!

Ha megjöttek a modulok, akkor megpróbálom majd saját erőből beállítani. Bár pár helyen fogalmam sincs, hogy mit kell beállítani, pl kell valamilyen kondenzátor értéket is, Bandwidth, stb.

Inkább a hardveres SPI-t használnám, azt jobban szeretem és szerintem stabilabb is.

Hány MHz-es órajelet enged meg maximum az SPI-n?

Az hogy lehet, hogy a HEStore-ba fel van tüntetve az adó-vevő moduloknál a nevében hogy pl: RFM12B-868-D.
A 868 azt jelentené, hogy csak 868MHz-en megy? De fel lehet konfigurálni pl 915-re is, ugye?
(#) pucuka válasza (Felhasználó 4577) hozzászólására (») Márc 6, 2010 /
 
A 868 MHz az 868, nem lehet "programmozni" 915 MHz re. Az egy másik verzió.
A 915 MHz nálunk erre a célra nem engedélyezett, ilyen (elvileg) forgalomba sem hozható.
(#) (Felhasználó 4577) válasza pucuka hozzászólására (») Márc 6, 2010 /
 
Akkor a konfigurációs biteknél 868MHz-et kell kiválasztani (Select Band)?
És mi van, ha 915-öt választok ki?
(#) djdry hozzászólása Márc 6, 2010 /
 
Hali mindenki.

Bocsi hogy csak most írok, de nem voltam elérhető egy ideig.
Persze a kapcsolat 2 irányú, mint kérdezték is. A távolság ideális Quad antennával kb 1000m volt nyilt terepen, de városban 500m-et simán viszi. Minden ASM- nyelven van megírva és szoftveres SPI-t használ. Én 434 MHz-s modult használok jelenleg is.
(#) djdry hozzászólása Márc 6, 2010 /
 
Ja azt elfelejtette, hogy nem használok semmi kódolát, és tökre jól megy FSK modulációban. Ez nekem nem volt gond, ge ha valakinek kell a kódolás is, arra is van sw modulom. Én most spec egy PCF8563 RTC-vel görcsölök, ami mindíg kihal, ha indulás után rögtön nem állítom be az óráját. Utánna újrabeállítani nem tudom, mert zagyvaság jön ki belőle. ha erre tud valaki valamit. szóljon.
(#) (Felhasználó 4577) válasza djdry hozzászólására (») Márc 6, 2010 /
 
Megosztod velünk a Quad antenna tervét?
(#) djdry hozzászólása Márc 6, 2010 /
 
Persze:
434MHZ-re:

Melegér 16,4cm
És 4db testszál Szintén 16,4cm.

GndPlane.pdf
    
(#) djdry hozzászólása Márc 6, 2010 /
 
Kb ehhe hasonló az enyém is.
(#) (Felhasználó 4577) válasza boldivi hozzászólására (») Márc 9, 2010 /
 
A main rész hogyan néz ki?
Mit kell még pontosan beállítani a main-ben?

A frekvenciát és a tx_mode vagy rx_mode függvényt meghívni?

Azt tervezem, hogy először csak működjön, értsek meg mindent szépen lassan, aztán egy picit átszerkesztem a programot.
Következő: »»   2 / 12
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