Készítette: Bordás Tamás
Cél
A feladat egy HopeRF modulra alapuló RF – UART átalakító létrehozása, mely a modul korlátai között transzparens átjárót biztosít két UART-on kommunikáló eszköz között. Az RF csatorna a két eszköz számára láthatatlan marad, csak az UART felülettel állnak kapcsolatban.
Felhasznált eszközök
- HopeRF RFM12B-433-D modul, az eszköz dokumentációja
wireless_uart_rf12
wireless_uart_rfm12b - Az eszközhöz a gyártó által biztosított (számtalan hibát és elírást tartalmazó) adó és vevő oldali példaprogramja
wireless_uart_code - Egyéb internetes forrásból származó hasznos leírás, és javított példaprogram
wireless_uart_pelda - A modulon található Silabs chip dokumentációja
wireless_uart_si4420 - ATmega16 mikrokontroller
A kapcsolási rajz
A mikrokontroller SPI interfésze került kivezetésre egy 2 mm raszterosztású hüvelysorra, melybe a DIP tokozású rádiós modul csatlakozik. A modul a 3.3V-os tápellátást is innen kapja, melyere megfelelő szűrést (10pF, 100pF, 1uF) kellett alkalmazni, mivel a modul ezt nem tartalmazza. A mikrokontroller JTAG portja egy tüskesorra került kivezetésre. A JTAG használatát a kód komlexitása illetve a modul megfelelő működését szolgáló időzítések beállítása tette indokolttá. Az UART kommunikáció stabilitásának biztosítása érdekében az eszköz egy 8 MHz-es kristályt használ a pontos órajel előállításához. Ezen kívül az eszköz külső csatolófelületet és két státusz LED-et tartalmaz. A MASTER jumper a master illetve slave mód közti választásra szolgál. Master mód esetén az eszköz az első konfigurálásnál UART-on vesz az RF modulon pedig ad. Slave esetben a helyzet fordított. A kommunikáció további menetét illetően ennek nincs jelentősége.
A firmware
A kód két fő részre osztható. Az egyik rész a HopeRF_API, mely a rádiós modult kezelő függvényeket és makrókat tartalmazza. A modult inicializáló és konfiguráló függvények, a küldést és fogadást lekezelő függvények, valamint a belső FIFO kezelő függvények és a két eszköz közti kommunikáció megkezdése előtt szükséges szinkronizációt megvalósító függvények tartoznak ide. A kód hordozhatóságát biztosítja, hogy a makrókat a használt mikrokontroller lábkiosztása szerint átírva, az más projektekhez közvetlenül felhasználható. A másik fő rész a Wireless_UART_firmvare nevet kapta. Itt találhatók az eszköz konkrét működését megvalósító kódrészek, beleértve az UART és SPI interfészek inicializálását, az UART megszakítási rutinokat, továbbá az UART és RF csatornák közti adatátvitelt biztosító állapotgépet és ringbuffert. Az állapotgép biztosítja az eszköz működését. Ez határozza meg az adatátvitel aktuális irányát (UART → RF vagy RF → UART). Erre azért van szükség, mert a modul nem képes egyidőben párhuzamosan adni és venni. Egyszerre csak az egyik irányban használható, irányváltáskor pedig át kell konfigurálni az eszközt, melyhez az előírt illetve kikísérletezett várakozási időket be kell tartani. A ringbuffer szükségességét az RF és UART átvitel sebességének esetleges eltérése, valamint a vett illetve fogadott adatok átmeneti tárolásának szükségessége indokolja.
A forráskód itt érhető el: wireless_uart_src
A protokoll
Az adatátvitel burst-ösen történik. Mind az UART, mind az RF keretfomátum a következő: START_OF_MESSAGE; adatbyte-ok; END_OF_MESSAGE; Az adatbyte-ok számát a nyitó és záró byte között az átviteli sebesség és a ringbuffer mérete korlátozza.
Felhasználás
Az eszköz alkalmas két mikrokontrontrolleres esgység illetve egy PC és egy mikrokontrolleres egység közötti olyan jellegű kommunikációra, mely nem igényel nagy sebességet, állandó kétirányú kapcsolatot és nagy mennyiségű adatátvitelt. Felhasználható lehet távirányításra, esetleg adatgyűjtésre, ahol csak státusz üzenetek cseréje történik. Az eszköz 9600 baud UART sebességgel, 4.8 kbps RF sebességgel és 10-12 méteres távolság mellett lett tesztelve. Ennél természetesen többet is tudhat illetve tud a környezeti feltételektől függően. A kódban az UART és RF oldali kommunikációs sebesség valamint a ringbuffer méret konfigurálható fordítás előtt.