Fórum témák

» Több friss téma
Fórum » RFM73 modul programozása
 
Témaindító: Topika, idő: Aug 28, 2013
Lapozás: OK   2 / 3
(#) mark.budai válasza bbalazs_ hozzászólására (») Márc 15, 2015 /
 
A SwitchToTxMode függvényben van a CE vezérlés, a függvény végén 1-re húzza. Lehet, hogy a Send függvény végén le kéne húzni 0-ra?
Ráakasszam a szkópot a CE lábra? Lehet, hogy rendelek egy logikai analizátort, ha azt rádrótozom az rfm lábaira, akkor egy időben látni lehetne, hogy mi mit csinál.
(#) bbalazs_ válasza mark.budai hozzászólására (») Márc 15, 2015 /
 
Idezem a datasheetet

4.5 TX Mode
 PTX device (PRIM_RX=0)
The TX mode is an active mode where the PTX device transmits a packet. To enter this mode from power down mode, the PTX device must have the PWR_UP bit set high, PRIM_RX bit set low, a payload in the TX FIFO, and a high pulse on the CE for more than 10μs.
En legalabbis igy ertelmeztem.

Szoval valszeg, amikor te atkapcsolod adasra, akkor meg ures a TX FIFO.
Probalj egy CEhigh, szunet 10ms,CElow utasitast kiadni az irasod utan, hatha jobb lesz.
Nezzuk az aramfelvetelt.
A hozzászólás módosítva: Márc 15, 2015
(#) bbalazs_ válasza mark.budai hozzászólására (») Márc 16, 2015 /
 
Esetleg meg annyi, hogy ha majd ado-vevokent fogod a modult hasznalni, akkor celszeru csak annyi idore lefoglalni a csatornat, amig adsz, utana a vevo reszere erdemes felszabaditani azt, en ezert alkalmaztam a lenti megoldast.

Nalad a forraskodban ha a CE-t alacsonyra huzod, utana nincs, ami visszahuzza, mert tobbszor nincs adasra kapcsolas a ciklusban.
(#) mark.budai válasza bbalazs_ hozzászólására (») Márc 16, 2015 /
 
Most így néz ki a Send függvény.
  1. void Send(void) //adó függvény
  2. {
  3.       UINT8 i,fifo_sta;
  4.       UINT8 temp_buf[32];
  5.  
  6.       for(i=0;i<17;i++)
  7.             temp_buf[i]=tx_buf[i]; //a küldendo 17 byte eltárolása
  8.      
  9.       SwitchToTxMode(); //adó üzemmód
  10.       fifo_sta=SPI_Read_Reg(FIFO_STATUS);   //FIFO állapotának lekérdezése
  11.       if((fifo_sta&FIFO_STATUS_TX_FULL)==0)//ha nem üres (TX_EMPTY=1 => full)
  12.       {
  13.             HI_CE();
  14.             HI_RED_LED(); //akkor bekapcsol a piros LED 30 miliszekundumig
  15.             SPI_Write_Buf(W_TX_PAYLOAD_NOACK_CMD, temp_buf, 17); //adatok FIFO-ba írása
  16.             delay_ms(30);
  17.             LOW_CE();
  18.             LOW_RED_LED();
  19.             delay_ms(30);
  20.       }
  21. }

Az áramfelvétel 0.39mA. A vevő még mindig nem vesz tudomást az adóról.
Egyelőre az egyik modult csak adóként, a másikat csak vevőként használom, de ha működik, ki tudja később mire használom majd..
(#) bbalazs_ válasza mark.budai hozzászólására (») Márc 16, 2015 /
 
Mark, az adopufferbe iras UTAN kell a pulzust kiadni...
Szoval MIUTAN feltoltotted a puffert.

Nezegetted mar az adatlapot vagy csak a peldaprogram alapjan probalkozol?

Ja, es szerintem az adasra kapcsolas magasan hagyja a CE bitet....

Tehat ha mindenaron a rutinokkal akarsz bohockodni, akkor MIUTAN feltoltotted a puffert, kerj egy adas rakapcsolast, aztan varj 10us-t, utana kapcsolj olvasasra.
A hozzászólás módosítva: Márc 16, 2015
(#) mark.budai válasza bbalazs_ hozzászólására (») Márc 16, 2015 /
 
Ja, értem, szóval ez után a sor után kellett volna írnom?
SPI_Write_Buf(W_TX_PAYLOAD_NOACK_CMD, temp_buf, 17);
Megtettem, de ugyan az a jelenség. Rendelek 16F690-es pic-eket és összerakom, az eredeti programot beégetve. Ha azzal működik, akkor megpróbálom visszaírni úgy az eredeti programot, hogy nekem jó legyen, sajnos fogalmam sincs, hogy abban a formában milyen fordítóval tudnám lefordítani, mert a CCS C Compilernek nem tetszik az egész.. Ha valaminek, akkor annak működnie kell, amit a gyártó közölt hozzá.
(#) bbalazs_ válasza mark.budai hozzászólására (») Márc 16, 2015 /
 
Az egyaltalan nem biztos. Mikrochipék nem arrol hiresek.

Ugy ertetted, hogy spi writebuf utan tettel egy switchtotx aztan 10us varakozas utan switchtorx? Mert en igy.
(#) mark.budai válasza bbalazs_ hozzászólására (») Márc 16, 2015 /
 
Na, talán lesz valami. A CE láb vezérlését írtam be, azzal nem adott, de most beleírtam a switchtotx és rx függvényeket, így már felveszi az áramot, a műszer 14mA körüli értéket mutat, így meg is van az a huszon pár mA, amit az adatlap ír.
A vevő viszont még mindig nem veszi, az IRQ lábon sincs feszültség változás, teljesen tápfeszültségen van, szóval semmit sem vesz. Ezzel mi lehet a probléma?
(#) bbalazs_ válasza mark.budai hozzászólására (») Márc 16, 2015 /
 
A megfelelo cimu pipeline-t kell olvasni.
Stimmelnie kell a 2Mbps/1Mbps-nek, a csatornaszamnak, es a vevo- es az ado cimenek is. Ezeket elore be kell irnod, mielott elkuldesz barmit.
Maskulonben nem vesz semmit. Adatlapban megtalalod. Aztan az ACK/NOACK is stimmeljen.

Egyebkent siman olvashatsz a megfelelo vevopufferbol, hogy megjott-e. De ha a fenti dolgok nem stimmelnek, akkor egyaltalan be sem teszi. Az IRQ-t szerintem egyelore ne hasznald.

Szoval ahelyett, hogy kritika nelkul atveszed a peldaprogramot, probald megerteni a mukodeset, hogy mit miert csinal, parhuzamosan az adatlap ertelmezesevel.

Ja es ami az egyiknel adocim, az a masiknal ertelemszeruen vevocim.
Ha megnezed a progimat, ott minden assembly ellenere kommenteztem, hogy melyik melyik nevu csati, - adonal es vevonel egyarant - igy azonosithatod, atnevezheted oket, amire te szeretned.
A hozzászólás módosítva: Márc 16, 2015
(#) mark.budai válasza bbalazs_ hozzászólására (») Márc 25, 2015 /
 
Elég sok kihagyás után végre volt időm ezzel is foglalkozni.
Nos a sebesség, a csatornaszám és a címek stimmelnek, mert tulajdonképpen ugyan az a forráskód, csak a main függvényben az adónál a Send, a vevőnél pedig a Receive rutinra hivatkozok, ennyi a különbség a kettő között.
Az adócím és a vevőcím az én forráskódom elején egy változóban van megadva, és mindkét helyen azt használja, szóval az sem térhet el.
Átírtam a vevő rutint, hogy már akkor jelezze a vételt, ha új adat került a fifo-ba, de itt sem villog a led, így már oda sem érkezik meg, nem csak az ellenőrzésen akad meg. Pedig reméltem, mert azzal lehetne mit kezdeni.. Megint ott vagyok, hogy minden stimmel, de valami mégse.
(#) bbalazs_ válasza mark.budai hozzászólására (») Márc 25, 2015 /
 
Elsokent erdemes lenne egy olyan rutint irnod, ami kiolvassa a kiolvashato regiszterekbol a dolgokat es ezt osszevethetned az ado es a vevo oldalan.

A vevo aramfelvetele hogy alakul? Mert vetelkor szinten 10mA nagysagrendunek kell lennie.

Ugye, az ado cime es a vevo cime a ket kulon PIC eseten felcserelodik...

Szoval szerintem vagy nem vesz (ugyanugy standby-ban van, mint az ado volt) vagy a cimzes nem megfelelo, vagy abban az ACK modban van, ami nem kellene.

Kuldtem neked a taviranyitos kisautom kodjat, ott benne van, hogy mi az ado cime es mi a vevo cime. Ha esteleg azokat a megfelelo helyre beirod (ezert kellene visszaolvasni), akkor sem megy?
(#) mark.budai válasza bbalazs_ hozzászólására (») Márc 26, 2015 /
 
Ezt a kiolvasható regiszterből való kiolvasást nem igazán értem. Hogy tudom kiolvasni?

Az adó és a vevő címe felcserélődik? Szóval kettő címnek kéne lennie? Nekem egy változóban van meghatározva egy cím, ami így néz ki.
  1. const UINT8 RX0_Address[]={ 0x34,0x43,0x10,0x10,0x01 };//0A - pipe0 vételi címei és a Tx adási címei

Később, az RFM73_Initialize rutinban a SwitchCFG(0) után (azaz amikor a Bank0-t használja), van a programban egy ilyen rész:
  1. for(j=0;j<5;j++) //Bank0 0A regisztere: az 5 byte-os pipe0 címe
  2. WriteArr[j]=RX0_Address[j];
  3. SPI_Write_Buf((WRITE_REG|10),&(WriteArr[0]),5);
  4.  
  5. for(j=0;j<5;j++) //Bank0 10 regisztere: a Tx cím ugyanaz kell legyen mint a pipe0 vételi címe
  6. WriteArr[j]=RX0_Address[j];
  7. SPI_Write_Buf((WRITE_REG|16),&(WriteArr[0]),5);

Itt azt írja, hogy a Tx címnek meg kell egyeznie a pipe0 vételi címével. (Én csak pipe0-t használok.)
(#) bbalazs_ válasza mark.budai hozzászólására (») Márc 26, 2015 /
 
Hat hogy nem irod, hanem olvasod az adott regisztert. Mint mikor pl a statust ellenorzod.

Igen, de a vevo tx cime mas kell, hogy legyen, mint az adoe. Azon kivul a vevo Rx1-es csatornajaba kell irni az ado tx cimét. Az rx0 az az ACK fogadasara valo.
(#) mark.budai válasza bbalazs_ hozzászólására (») Márc 26, 2015 /
 
Tudok így hozzáadni egy másik címet, hogy csak írok egy új változót neki, és a változó nevét beírom a megfelelő helyre? Vagy a bank regiszterekben is át kell írni valamit, hogy elfogadja az új címeket?
(#) bbalazs_ válasza mark.budai hozzászólására (») Márc 26, 2015 /
 
Sajnos a C-ben nem tudok segiteni, azt hittem, neked ez nem okoz gondot.
A regiszterbe siman beirhatod, nem lesz baja. Engedelyezve van a
vetel a megfelelo csatornan a 0x22-es regiszterben?
A 0x23-as regiszterben az adonal es a vevonel is 3 vagy 5 byte-os cimet allitottal?
(#) mark.budai válasza bbalazs_ hozzászólására (») Márc 28, 2015 /
 
Nem is a C-vel van a probléma, mert beírni be tudom, csak az volt a kérdés, hogy nem baj-e, ha két címet használok, a bank regisztereken nem kell változtatnom? De ezek szerint nem.
A vétel engedélyezést nem találom, melyik regiszterről van szó? Az adatlapban se találom, hogy melyik ez.
Beírom a másik címet is, és meglátjuk, hogy mi lesz.
(#) bbalazs_ válasza mark.budai hozzászólására (») Márc 31, 2015 /
 
Bocsi, nem 22-es, hanem 2-es regiszter (csak en mar az iras parancsot hozzaadtam, attol lett 22). Ott van a data pipe enable bitszinten. Ezt legalabb 3-ra kell allitani (b'00000011') a 0. es az elso engedelyezesehez.

Tehat vesz fel a vevo rendesen aramot? Mert akkor legalabb vesz. Ha a cimek is jol vannak beallitva es az engedelyezes is megtortent, akkor mar vennie kellene adatot is.
(#) mark.budai válasza bbalazs_ hozzászólására (») Jún 12, 2015 /
 
Eléggé elhanyagoltam mostanában a témát.
Meguntam, hogy nem működik az egész, és vettem Attiny26L mikrovezérlőket, amiket Áron is használt, és az ő által fordított hexeket beégettem az avr-ekbe. Érdekes módon, ugyan azt csinálja, mint a pices áramköreim: Az adó oldalon villog a led, a vevő oldal semmit nem csinál. Lehet, hogy rossz modulokat küldtek a chipcad-től? Kétszer is rendeltem, egyik rendelésből valóak sem működnek..
(#) bbalazs_ válasza mark.budai hozzászólására (») Jún 12, 2015 /
 
Nagyon valoszinutlen. Esetleg a tap es a fold koze rakj egy 100nF kondit.

Aron rf70-est hasznalt vagy rf73-at?
(#) bbalazs_ válasza mark.budai hozzászólására (») Jún 12, 2015 /
 
Es a kapcsolas is tokeletesen megegyezik?
(#) bbalazs_ válasza bbalazs_ hozzászólására (») Jún 12, 2015 /
 
Hany volttal taplalod meg az ic-t es hannyal a modult? Milyen regulatort hasznalsz?
(#) mark.budai válasza bbalazs_ hozzászólására (») Jún 13, 2015 /
 
Szia! Usbisp- ről tápláltam 3.3V-tal. De megvan a hiba, az AVR-esnél egy figyelmetlenség miatt nem volt jó a nyákterv, a modul két kivezetését nem jó helyre kötöttem be. Megcsináltam a picest is, a változók elnevezései zavartak meg, ez sajnon nem "szabvány" a fordítókban, és az uint32 helyett 16 bites változót definiált. Kijavítottam, már működik az is szépen. A hatótávja valóban elég gyatra, de amire most nekem kell, arra teljesen elegendő.
(#) bbalazs_ válasza mark.budai hozzászólására (») Jún 13, 2015 /
 
A hatotav valtoztathato, a dB erteket tedd maximumra az adonal (ha csak egyiranyu). Cserebe tobbet fogyaszt. Az antennat is barkacsolhatod kicsit, pontos hosszra hangolva.
De 100m-t akkor sem fog vinni, max. iranyitott antennaval.
Ezeket foleg belterre terveztek, egy szobara.
250Ft, szoval szerintem a hulyenek is megeri.
(#) Ktulu válasza bbalazs_ hozzászólására (») Jún 13, 2015 /
 
Mégis hol 250Ft?
(#) bbalazs_ válasza Ktulu hozzászólására (») Jún 13, 2015 /
 
Jo, az rfm70-es volt annyi, ez horribilis 370 most. En vettem vagy huszat anno, annyiert.
Bővebben: Link
(#) Ktulu válasza bbalazs_ hozzászólására (») Jún 13, 2015 /
 
OK, én itt néztem: Bővebben: Link
(#) bbalazs_ válasza Ktulu hozzászólására (») Jún 13, 2015 /
 
Meg szoktam nezni a datumot. Az evet minimum.
(#) mark.budai hozzászólása Júl 1, 2015 /
 
Egy ideje használom, tesztelgetem a modulokat. De a vevő oldal áramfelvétele sajnos túl nagy (20mA körül, folyamatosan) ezt nem engedhetem meg a tápellátás módja miatt. Mit tudok vele kezdeni? Vegyem le az érzékenységet? Az nem baj, ha az adónak nyélgázon kell menni, mert ritkán van adás, és ott nem számít annyira.
Más: Mennyire lenne stabil, ha a modul a tápot is a pic egyik kimenetéről kapná? Mert az áramigénye miatt simán ráköthetném, és csak akkor kapcsolom be a modult, ha kell.
(#) bbalazs_ válasza mark.budai hozzászólására (») Júl 1, 2015 /
 
Ha a feladat megengedi, hogy az ado szoljon elotte, ha adni akar majd, akkor eleg a vevot rovid idokozokre bekapcsolni, mikozben az ado hosszu sorozatokkal probal kapcsolatot teremteni, majd ha erzekeli, hogy majd adas jon, akkor teljesen vetelre allitani, a transzmisszio utan ujbol visszaalitani erre a figyelo modra.
A vevo erzekenysege szerintem nem allithato, de valoszinuleg nem is befolyasolja az aramigenyt.
A kapcsolas ELVILEG lehetseges a PIC adatlabarol, de szerintem egy pirinyo FET sot23-as tokban odafer, mondjuk 150-200mA terhelhetoseggel. Egy hibafaktorral kevesebb.
A modult elkuldheted alvo allapotba is, akkor elvileg uA a felvetele, ugyanakkor gyorsan ebred.
A feladat fuggvenyeben erdemes ezeket fontolora venni.
(#) mark.budai válasza bbalazs_ hozzászólására (») Júl 1, 2015 /
 
Köszi a választ!
Értem, hogy mit mondasz, de sajnos a késés nem igen játszható meg, elég sok bosszúságot okozna.
Ránézek erre az alvó módra, úgy már nagyon jó lenne, sajnos a használat közbeni áramfelvétel még mindig problémát okoz, de lehet, hogy a tápláláson kéne módosítani, most egy CR2032-ről megy, lehet, hogy valami combosabb áramforrást kell keresnem.
Következő: »»   2 / 3
Bejelentkezés

Belépés

Hirdetés
Lapoda.hu     XDT.hu     HEStore.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