Fórum témák

» Több friss téma
Fórum » Rádiós adó-vevő modulok
Lapozás: OK   18 / 52
(#) mzozo95 válasza pucuka hozzászólására (») Jún 1, 2012 /
 
SZia!
Az adatfolyam itt is a normál uart, tehát start bit, stop bit, adat bitek? Pontosabban amit a transmitter data lábán "küldök" azoknak a biteknek kellene megjelenni a receiver en is, jól gondolom? Vagy mire gondoltál ezzel:
Idézet:
„A rádiós összeköttetés egyenszintet nem tud átvinni, csak inpulzus sorozatokat.”

Zoltán
(#) pucuka válasza mzozo95 hozzászólására (») Jún 1, 2012 /
 
Idézet:
„még ha a transmitter egység data lábára +5V-t kötök is.”

Hiába kötsz az adó lábára +5V -ot, attól nem fog semmi történni.
Igen, pl. lehet egy UART is akár. De az átküldendő adatfolyamot kell védeni.
(#) mzozo95 válasza pucuka hozzászólására (») Jún 1, 2012 /
 
Szia!
Ha az adó adat lábára 5V van kötve akkor elvileg a vevőnél is 5V nek kellene hogy megjelenjen, nem igaz?

(Az UARnál a +5V akkor van az adat lábon, ha az adott bit értéke=1, vagy ha "adásszünet van").

Zoltán
(#) pucuka válasza mzozo95 hozzászólására (») Jún 1, 2012 /
 
Nem. A vevő bemenetén FSK jel változásnak kell lennie. Ha ez nincs, a vevő egy idő után leáll, mivel nem érzékel jelváltozást. Az UART kimenetén egy jelsorozat jelenik meg, a beírt adatnak megfelelően, a beállított start, és stop bitekkel kiegészítve. Még ez sem biztos, hogy hiba nélkül átmegy, ezért kell az átviendő adatfolyamot Manchester kódolással kódolni, a vevő oldalon dekódolni.
(#) digixtibi hozzászólása Jún 3, 2012 /
 
Ezért érdemes olyan RF modult használni, mely már a Manchester kódolást megoldja. Nagyon jó kis modul az Aurel RTX-MID-3V. Közvetlenül az UART-ra köthető.
(#) mzozo95 válasza pucuka hozzászólására (») Jún 3, 2012 /
 
Tehát akkor nekem kell egy manchester kódoló az adó oldalra(az uartot manchester kódolásra átalakítandó), majd a vevő oldalon egy dekóder(ami manchesterből visszaalakít uart-ra)?

Avr re tud valaki egy jó példaprogramot erre a kódolásra?

Zoltán
(#) mzozo95 válasza mzozo95 hozzászólására (») Jún 3, 2012 /
 
Megtaláltam Topi cikkét, ami ezzel foglalkozik... Bár Ő PIC re írta, amihez sajnos nem értek...

Bővebben: Link

  1. //================================================================
  2. int16 man_encode(int unenc) {
  3. //================================================================
  4. int odd_byte,even_byte,temp;
  5.  
  6. odd_byte=unenc&0xAA;
  7. temp=(~unenc&0xAA)>>1;
  8. odd_byte=odd_byte|temp;
  9.  
  10. even_byte=unenc&0x55;
  11. temp=(~unenc&0x55)<<1;
  12. even_byte=even_byte|temp;
  13. return((int16)odd_byte<<8)|even_byte;
  14. }


Hogyan írja ki a vezérlő adott lábára a kiküldendő kódot? És miért nem kell valamilyen késleltető eljárás?
és miért integert fogad az encoder eljárás, nem csak 0-255 értékű lehet 1 karakter, é lehetne unsigned char is int helyett:

  1. //================================================================
  2. int man_decode(int16 enc) {
  3. //================================================================
  4. int odd_byte,even_byte;
  5.  
  6. odd_byte=(int)(enc>>8);
  7. if((odd_byte&0xAA)^((~odd_byte&0x55)<<1)) {
  8. receive_error=1;
  9. return(0);
  10. } else odd_byte&=0xAA;
  11. even_byte=(int)enc;
  12. if((even_byte&0x55)^((~even_byte&0xAA)>>1)) {
  13. receive_error=1;
  14. return(0);
  15. } else even_byte&=0x55;
  16. receive_error=0;
  17. return(odd_byte|even_byte);
  18. }
(#) mzozo95 hozzászólása Jún 3, 2012 /
 
állományok(főprogram + manchester kódoló)


Arra sikerült rájönnöm, hogy végül a put_c() fügvénnyel küldi az adó lábára a kódot.
De ez a put_c hol van elrejtve? nem találtam sehol ez lenne a megoldás, az adat kiküldésére.
  1. //================================================================
  2. void m_send(char kar) {
  3. //================================================================
  4. int16 i;
  5. int i1,i2;
  6.     i = man_encode(kar);
  7.     i1 = *(&i);
  8.     i2 = *(&i+1);
  9. delay_ms(1);
  10. putc(i1,radio);
  11. putc(i2,radio);
  12. }


AZ adat fogadása pedig egy végtelen ciklusban futtatott m_get lenne?
De megint feltűnik egy ismeretlen, a getc(); függvény és radio változó... Ezel az LCD.c ben lennének definiálva? Ezt az állományt a szerző sajnos nem mellékelte...
  1. //================================================================
  2. int m_get() {
  3. //================================================================
  4. int ln,hn;
  5. int16 i;
  6.   ln = getc(radio);
  7.   hn = timed_getc();
  8.   i = hn<<8; i |= ln;
  9.   ln = man_decode(i);
  10.   return ln;
  11. }
(#) mzozo95 hozzászólása Jún 5, 2012 /
 
Sziasztok! Sajnos sz uart->manchester->uart kódolás még messze van tőlem, ezért eladnám a hibátlan HM-R868S és T868S adó vevő páromat. (újonnan itt lehet megvenni: 1.link2.link)
1600 együtt, üzenetben jelentkezhettek. Remélem valaki hasznát veszi majd!
(#) pontazok válasza mzozo95 hozzászólására (») Jún 5, 2012 /
 
Szerintem ne add fel ilyen gyorsan.
Énis szívok ugyanezzel az adó-vevő párral.
Nekem már működik a kommunikáció, de valami még hibádzik.
Átküldök egy stringet, odaát a karakterek száma megegyezik, de a betűk nem azok amiket én elküldök.
Na a lényeg, hogy egyszer kell megtanulni...
(#) pontazok válasza mzozo95 hozzászólására (») Jún 5, 2012 /
 
Egyébként a putc(); alapfüggvény!
Szóval azt ne keresd a forrásban. A putc() küldi magát a kódolt adatot azaz ez küldi ki a Tx lábra az adatot.
Ez pedig be van építve a CCS-be.
Ennek a párja a getc() ami meg fogadja az Rx lábra érkező jelet.
A függvény amit linkeltél az meg elvégzi a kódolást és a dekódolást ill. a dekódolásnál a hibaellenőrzést.
Azért kell az ellenőrzés hogy ne "egyen" meg minden zavarjelet a PIC. Hanem a fogadott jelekből csak a hasznosat írja ki pl: az LCD-re.
(#) pontazok válasza mzozo95 hozzászólására (») Jún 5, 2012 /
 
Na meg ugye minek a kódolás?
Az adó nem tud folyamatosan magas jelet küldeni.
Tehát ha mondjuk ezt küldenéd hogy 11111111, akkor ez nem menne át, ugyanis az adó csak pár ms-ig képes magas jelet küldeni. De ugye ez a jel manchester kód szerint 1010101010101010. Hátránya hogy fele olyan gyors vele a kommunikáció. De végülis nem kell Mbit/s-os sebesség nekünk. Vizsont így egy magas jel egy alacsonnyal párosul. Amit lehet vezeték nélkül közvetíteni a PIC-ek között.
Amiket leírtam egy-két helyen biztos sántítanak. Én sem foglalkozom túlságosan rég vele. De majd a többi kolega kijavít
Mindenestre szerintem még "szenvedj vele" kicsit. Utána nagy élmény lesz ha működik
"A tanulás gyökere keserű, de gyümölcse édes"
(#) mzozo95 válasza pontazok hozzászólására (») Jún 5, 2012 /
 
Rendben, lehet ez lesz a legjobb, a működési elvét már kezdem érteni, csak az a gond, hogy csak az avr-t ismerem, és ott nem találtam putc() alapfüggvényt... Ha ezt át tudnám valahogy kódolni AVRre, akkor működne a kicsike...

Az m_ send függvényben azért van 2 putc() egymás után, mert először kiküldi az első 8 bináris "számjegyet", utána a másodikat?

De az m_get függvénynél csak 1 getc() van... de utána van egy timed_getc(), ez lenne a második getc(), ami fogadja a második putc() vel kiküldött adatokat?
Ha jól látom, a fogadásnál hn-t "eltoljuk" balra 8 bittel, majd vagy hozzáadjuk az i hez az első beérkezett adatokat, és visszakódoljuk?

Az int16 milyen változó típus?

Ha igen, akkor meg tudnám csinálni az átfordítást...
(#) sargarigo válasza mzozo95 hozzászólására (») Jún 5, 2012 / 1
 
Azért van két putc, mert a manchester kódoló a nyolc bitedből csinál 16-ot, és ezt a 16 bitet küldöd ki kétszer 8 biten.
A vevő oldalon kétszer veszel 8 bitet (ami összesen 16), és a dekódoló ebből csinál 8-at, ami az eredeti átküldött adatod.

A timed_getc elvileg olyan mint a sima, de van neki "time-out"-ja, magyarán nem ragad be ha nem jön neki semmi. De ezt csak a google mondta, ehhez nem értek (én is avr-es vagyok).
(#) pontazok válasza mzozo95 hozzászólására (») Jún 8, 2012 /
 
Jah értem.
Milyen programmal írsz AVR-re programot?
Biztos abban is van putc()-nek megfelelő függvény.
A soros vonalon küldünk adatot a putc() függvénnyel.
Tehát ilyen téren kell keresgélni
(#) sargarigo válasza mzozo95 hozzászólására (») Jún 8, 2012 / 2
 
Nézd csak mim van neked!

rs232.h
  1. #define CLRSCR12// terminal torlese
  2.  
  3. unsigned volatile char ReceivedByte;// fogadott byte
  4.  
  5. // Varakozik a soros port 'kesz' allapotara
  6. void wait_rs232(void);
  7. // Egyetlen byte kuldese
  8. void send_byte(unsigned char abyte);
  9. // szoveglanc kuldese '0' lezarassal
  10. void send_string(unsigned char *s);
  11. // rs232 inditasa
  12. void init_rs232(void);


rs232.c
  1. #include <inttypes.h>
  2. #include <util/delay.h>
  3. #include <avr/io.h>
  4. #include <avr/interrupt.h>
  5.  
  6.  
  7. #define CLRSCR12// terminal torlese
  8.  
  9. #define USART_BAUDRATE 9600// kommunikacios sebesseg
  10. #define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
  11. unsigned volatile char ReceivedByte;// fogadott byte
  12.  
  13. // Varakozik a soros port 'kesz' allapotara
  14. void wait_rs232(void)
  15. {
  16.     while (!(UCSRA & (1 << UDRE)));
  17. }
  18.  
  19. // Egyetlen byte kuldese
  20. void send_byte(unsigned char abyte)
  21. {
  22.     wait_rs232();
  23.     UDR = abyte;
  24. }
  25.  
  26. // Belso hasznalatra. 0..f -ig a szamerteket kuldi ki betukent
  27. void send_nibble2hex(unsigned char abyte)
  28. {
  29.     if (abyte <= 9)
  30. send_byte('0'+abyte);
  31.     else
  32. send_byte('a'+(abyte-10));
  33. }
  34.  
  35. // hexa szamot kuld 00..ff
  36. void send_byte2hex(unsigned char abyte)
  37. {
  38.     send_nibble2hex((abyte&0xf0)>>4);
  39.     send_nibble2hex( abyte&0x0f);
  40. }
  41.  
  42. void send_word2hex(unsigned int aword)
  43. {
  44. send_byte2hex((aword&0xff00)>>8);
  45. send_byte2hex((aword&0x00ff));
  46. }
  47.  
  48. // szoveglanc kuldese '0' lezarassal
  49. void send_string(unsigned char *s)
  50. {
  51.     while (*s)
  52.     {
  53. send_byte(*s);
  54. s++;
  55.     }
  56. }
  57.  
  58. // rs232 megszakitas kezelo. Elmenti a kapott byte-ot, es echo-t kuld
  59. ISR(USART_RXC_vect)
  60. {
  61.  ReceivedByte = UDR; // Fetch the recieved byte value into the variable "ByteReceived"
  62. // UDR = ReceivedByte; // Echo back the received byte back to the computer
  63. }
  64.  
  65. // rs232 inditasa
  66. void init_rs232(void)
  67. {
  68.     UCSRB |= (1 << RXEN) | (1 << TXEN);   // Turn on the transmission and reception circuitry
  69.     UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); // Use 8-bit character sizes
  70.  
  71.     UBRRL = BAUD_PRESCALE; // Load lower 8-bits of the baud rate value into the low byte of the UBRR register
  72.     UBRRH = (BAUD_PRESCALE >> 8); // Load upper 8-bits of the baud rate value into the high byte of the UBRR register
  73.  
  74.     UCSRB |= (1 << RXCIE); // Enable the USART Recieve Complete interrupt (USART_RXC)
  75. }


Ez a motyó pár parancs segítségével kezeli neked a hardveres soros portot. Beállítod a sebességet, inicializálsz, és már mehet is!

Copyright tőlem!
(#) SBahadurD hozzászólása Jún 23, 2012 /
 
Szeretnék építeni egy egyszerű rádiós távirányítót. Főleg akásban használnám pár méter - pár 10 méter távolságig. Vigyen át egy falon keresztül is. Ha lenyomom a gombot az adón, akkor kapcsoljon a relé, amíg le van nyomva a gomb.
Biztonsági szempontok nincsenek, nem kell attól félni, hogy más meg akarja hackelni, vagy ilyesmi, esetleg az okozhat problémát, ha más hasonló frekvenciájú adó is van a közelben, de egyelőre ez sem fontos.

Az adó lehetne valamilyen oszcillátor, aminek a kimenetét egy antennára vezetném.
Kérdés: Milyen frekvenciát és milyen oszcilátort érdemes választani. Én egy egyszerű oszcillátorra gondoltam, amit úgy valósítanék meg, hogy invertert kristállyal visszacsatolok, mint ahogy Topi cikkében is van.
1 Mhz körüli frekvencára gondoltam, hogy a megvalósítással még ne legyenek problémák. (Szórt reaktanciák, parazita reaktanciák.) Milyen antennát ajánlanátok? Hallottam, hogy egy ferritmagos tekercs is jó. Ez igaz?

Vevő: Antenna--sávszűrő--erősítő--AM-demodulátor--tranzisztor, aminek a kollektorkörében van a relé.
Az AM-demodulátornál egy sima diódás burkolódemodulátorra gondoltam.
Erősítőnek elég egy jól beállított tranzisztor, esetleg legyen egy műveleti erősítős kapcsolás?
Sávszűrőnek jó egy -az antennával sorosan kapcsolt- párhuzamos LC kör, vagy az antennával párhuzamosan kapcsolt soros LC kör? Vagy itt is legyen ferritmagos tekercs a vevő egy párhuzamos kondival hangolva?

Ha mégis védeni kell (véletlen(nem rossz szándékú)) külső behatások ellen, akkor jó-e az ötlet, hogy az adást is szaggatom alacsonyabb frekvencián és a vevő áramkörben teszek egy szűrőt erre a frekvenciára is az AM-demodulátor után?

Köszi a segítséget!
(#) _vl_ válasza SBahadurD hozzászólására (») Jún 24, 2012 /
 
Az eredményt akarod, vagy a tudást/tapasztalatot (szívást)?
Ha az eredmény kell, akkor jobban jársz, ha veszel kész RF modult, és raksz mellé valami mikrokontrollert, pl. RFM01-868-D meg RFM02-868-D, van egy rakás ilyen modulka a hestore kínálatában 1-2 rugó körül.
(#) SBahadurD válasza _vl_ hozzászólására (») Jún 24, 2012 /
 
A tudást/tapasztalatot (szívást).
Mellesleg az én ötletem sokkal olcsóbban kivitelezhető, mint ha egy kész modult veszek. (Amin van védelem, nagyobb a hatótávolsága, stb... Nekem ezek most nem kellenek.)
Szerintem pár száz forintból össze lehet hozni az enyémet. Csak pár apró tanács, válasz kéne, mielőtt belevágok.
(#) proba válasza SBahadurD hozzászólására (») Jún 24, 2012 /
 
Adónak vezeték nélküli mikrofon,vevő valami rádió.Ezeket kiegészíted egy 555 hanggenerátorral a vevő oldalon egy 567 PLL -lel.Elméletileg működik játékra valószínű elég.
Esetleg építesz egy rádióvevőt valami üres csatornára ,meg egy adót ,és a zaj a jeled.Ha nincs zaj -nyomod a gombot .
A kínai vezeték nélküli csengők az egyszerűség tárházát tartalmazzák..
(#) SBahadurD válasza proba hozzászólására (») Jún 24, 2012 /
 
Nincs vezeték nélküli mikrofonom. Egy ilyen beszerzése nagyon drága lenne. Persze, építhetnék is, de nekem csak egy oszcillátor kell egyetlen viszonylag pontos frekvencián. Erre szerintem a legjobb megoldás a kvarccal visszacsatolt inverter.
Későbbi fejlesztésnek majd jó ötlet lehet, az 567-es áramkör, de egyelőre az eredeti célomat sikerüljön megvalósítani. Erre várnék ötleteket, főleg az antennával, a frekvenciával és a vevővel kapcsolatban.
(#) horcsab hozzászólása Jún 24, 2012 /
 
Tudna valaki segíteni RFM01, RFM02 modulok párosításában?
Már néhány napja szívat az adatátvitel, mert semmi nem megy át vagy nem jön. A vételi oldalon nem generál megszakítást és akármit állítok be a konfigban nem hajlandó megszaítást generálni. A kapcsolás a HOPE-RF mintában megadott és a program is.
Az adó és vevő modulokon a konfig megy, mert szkóppal ellenőrizve a CLK lábakon a beállított frekvencia jelenik meg.
Van esetleg valakinek működő kódja, amit megosztana?
(#) mzozo95 válasza horcsab hozzászólására (») Jún 24, 2012 /
 
ez sokat segíthet megérteni hogy mi hogy van, és működik is: Bővebben: Link
(#) horcsab válasza mzozo95 hozzászólására (») Jún 24, 2012 /
 
Köszi az infót, de ezt is átolvastam, a kódolás-dekódolás megy. Az a baj, hogy soha nem megy alacsonyba az nIRQ, tehát mintha nem venne adatot. Rengeteg helyen olvastam, hogy a beállítása macerás. A Silabs oldalán is olvastam a doksit ami ebben a vevőben lévő áramkör (valószínűleg) leírása. Ez sem segített.
Írtam a gyártónak is elküldve a kódokat és a kapcs. rajzokat, de még várok a válaszra.
(#) mzozo95 válasza horcsab hozzászólására (») Jún 24, 2012 /
 
Próbáld meg simán, hogy az adó vevő külön tápon van, majd az adó oldalt data lábára VCC-t kötsz, majd testet, a vevő oldalra meg egy nagy ellenállással bekötsz egy ledet a data lábra, nézd meg, hogy viselkedik(lehet hogy hibás a modulod, bár kicsi az esélye)
(#) horcsab válasza mzozo95 hozzászólására (») Jún 24, 2012 /
 
Sajnos nem megy. FIFO-t kilőttem és akkor sem billeg a vevő data lába. Te ezzel a párossal játszottál vagy más fajtával?
(#) mzozo95 válasza horcsab hozzászólására (») Jún 24, 2012 /
 
Én másik fajta, uart-os kittel "játszottam", de még nem fejeztem be a projektet(konkrétan ezzel: HM-R868S HM-T868S ).
(#) horcsab válasza mzozo95 hozzászólására (») Jún 24, 2012 /
 
Amivel Te játszol sokkal egyszerűbb. Sajna nekem ebből van most itthon 2-2 db, ezeket kell elhasználnom.
(#) Biki válasza mzozo95 hozzászólására (») Júl 3, 2012 /
 
Szia mzozo95,
Ugyanezekkel a típusokkal próbálkozok, hasonló problémám van, mint amit a korábbiakban írtál. Ha az adó data bementére pozitív tápfeszt adok, igazából semmi nem történik a vevő oldalon, ahol egy darlington párral vezérelt LED mutatná, hogy van vevő oldali jel vagy nincs. Folyamatosan vibrál a LED, nem tudom az adó bemenetével vezérelni a vevő kimenetét.
Sikerült a HM adó-vevő párost életre keltened, hogy kommunikáljanak? A többiek kódolásról írnak, de nekem csak egy on-off állapotot kellene átvinnem a rádióval (ki-bekapcsolás távvezérlése).
Várnám válaszod és tapasztalatod.
(#) proba válasza Biki hozzászólására (») Júl 3, 2012 /
 
Szerintem moduláció nélkül nem igazán alkalmasak kapcsoló jelének átvitelére.Vezeték nélküli csengőből szedd ki a modulátor demodulátor párost használd azokkal.
Következő: »»   18 / 52
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