Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
Obě strany předchozí revize Předchozí verze Následující verze | Předchozí verze | ||
2015:p2p-rfm12b [2016/01/17 23:35] Petr Prachař |
2015:p2p-rfm12b [2016/01/17 23:56] (aktuální) Petr Prachař |
||
---|---|---|---|
Řádek 6: | Řádek 6: | ||
===== Hardware ===== | ===== Hardware ===== | ||
==== RFM12B ==== | ==== RFM12B ==== | ||
- | Jedná se o univerzální poloduplexní transceiver pracující v ISM pásmu. Nosný kmitočet lze nastavit do pásem 433 MHz, 868 MHz a 915 MHz. Komunikační rychlost by dle katalogového listu měla dosahovat rychlosti až 115,2 kb/s při použití digitálního filtru a až 256 kb/s při použití analogového filtru. Modul ke komunikaci využívá FSK modulaci, přičemž kmitočtový zdvih lze nastavovat v rozmezí 15 kHz – 240 KHz. Maximální výstupní výkon při použití antény se vstupní impedancí 50 Ω je 5 dBm a lze jej snižovat s krokem 2,5 dB až na hodnotu -12,5 dBm. Modul je vybaven SPI rozhraním, který slouží k jeho řízení a k přenosu dat z/do připojeného kontroléru. | + | Jedná se o univerzální poloduplexní transceiver pracující v ISM pásmu. Nosný kmitočet lze nastavit do pásem 433 MHz, 868 MHz a 915 MHz. Komunikační rychlost by dle katalogového listu měla dosahovat rychlosti až 115,2 kb/s při použití digitálního filtru a až 256 kb/s při použití analogového filtru. Modul ke komunikaci využívá FSK modulaci, přičemž kmitočtový zdvih lze nastavovat v rozmezí 15 kHz – 240 KHz. Maximální výstupní výkon při použití antény se vstupní impedancí 50 Ω je 5 dBm a lze jej snižovat s krokem 2,5 dB až na hodnotu -12,5 dBm. Modul je vybaven SPI rozhraním, který slouží k jeho řízení a k přenosu dat z/do připojeného kontroléru.{{ :2015:rfm12b_868s2.jpg?nolink&300 |}} |
==== FRDM KL25Z ==== | ==== FRDM KL25Z ==== | ||
K řízení modulů a ke komunikaci s počítačem byl využit vývojový kit FDRM KL25Z, na kterém je osazen 32-bitový mikrokontrolér Kinetis MKL25Z128 od firmy Freescale Semiconductor (respektive NXP). Maximální takt tohoto mikrokontroléru je 48 MHz. Pro programování procesoru je na desce integrováno rozhraní OpenSDA, které zároveň realizuje virtuální COM port, který je v projektu využit k řízení komunikace. | K řízení modulů a ke komunikaci s počítačem byl využit vývojový kit FDRM KL25Z, na kterém je osazen 32-bitový mikrokontrolér Kinetis MKL25Z128 od firmy Freescale Semiconductor (respektive NXP). Maximální takt tohoto mikrokontroléru je 48 MHz. Pro programování procesoru je na desce integrováno rozhraní OpenSDA, které zároveň realizuje virtuální COM port, který je v projektu využit k řízení komunikace. | ||
+ | {{ :2015:frdm.png?nolink&300 |}} | ||
+ | ===== Řešení ===== | ||
- | |||
- | ===== Řešení ===== | ||
- | ==== Vývojové prostředí. ==== | ||
==== Zapojení ==== | ==== Zapojení ==== | ||
Modul byl pomocí vodičů připojen k vývojové desce. Ke komunikaci mezi moduly je vyžadováno 5 vodičů, napájení bylo také vyvedeno z vývojové desky. Zapojení komunikačních vodičů je následující: | Modul byl pomocí vodičů připojen k vývojové desce. Ke komunikaci mezi moduly je vyžadováno 5 vodičů, napájení bylo také vyvedeno z vývojové desky. Zapojení komunikačních vodičů je následující: | ||
- | RFM12B______KL25Z\\ | + | RFM12B......KL25Z\\ |
- | SCK_________PTD1 (SPI CLK)\\ | + | SCK.........PTD1 (SPI CLK)\\ |
- | SDI_________PTD2 (SPI MOSI)\\ | + | SDI..........PTD2 (SPI MOSI)\\ |
- | SDO_________PTD3 (SPI MISO)\\ | + | SDO.........PTD3 (SPI MISO)\\ |
- | nSEL________PTD0 (SPI CS)\\ | + | nSEL........PTD0 (SPI CS)\\ |
- | nIRQ________PTD5 (interupt request)\\ | + | nIRQ........PTD5 (interupt request)\\ |
+ | Toto zapojení bylo zvoleno kvůli původnímu záměru využít hardwarové SPI rozhraní, přestože nakonec bylo SPI implementováno softwarově, zapojení bylo ponecháno.\\ | ||
+ | Jako anténa sloužil při testování obyčejný drát délky přibližně 8,6 cm což zhruba odpovídá λ/4 pro kmitočet 868 MHz.\\ | ||
+ | Moduly mají ještě několik dalších komunikačních pinů, ty však v tomto projektu nebyly využity | ||
+ | ==== Vývojové prostředí. ==== | ||
Původním záměrem bylo řešit projekt pomocí online vývojového prostředí mbed.org, protože jsou zde k dispozici knihovny pro použitý modul. Bohužel ani s jednou ze dvou testovaných knihoven se mi nepodařilo zprovoznit ani základní komunikaci. Důvod nefunkčnosti zřejmě nebyl v knihovnách, protože obě byly relativně dost používané, ale někde v mém kódu, chybu se však nepodařilo najít. Proto jsem přistoupil k použití vývojového prostředí Kinetis Design Studio s rozšířením Procesor Expert. | Původním záměrem bylo řešit projekt pomocí online vývojového prostředí mbed.org, protože jsou zde k dispozici knihovny pro použitý modul. Bohužel ani s jednou ze dvou testovaných knihoven se mi nepodařilo zprovoznit ani základní komunikaci. Důvod nefunkčnosti zřejmě nebyl v knihovnách, protože obě byly relativně dost používané, ale někde v mém kódu, chybu se však nepodařilo najít. Proto jsem přistoupil k použití vývojového prostředí Kinetis Design Studio s rozšířením Procesor Expert. | ||
Pro projekt jsem vytvořil vlastní knihovnu funkcí, sestavenou dle katalogového listu RFM12B. Některé funkce pak byly částečně inspirovány knihovnou dostupnou na mbed.org. | Pro projekt jsem vytvořil vlastní knihovnu funkcí, sestavenou dle katalogového listu RFM12B. Některé funkce pak byly částečně inspirovány knihovnou dostupnou na mbed.org. | ||
Řádek 436: | Řádek 439: | ||
return; | return; | ||
</code> | </code> | ||
+ | |||
Poslední zmíněná funkce byla navržena na poslední chvíli a nebyla otestována na hardwaru, je však jednoduchá a neměl by s ní být problém. | Poslední zmíněná funkce byla navržena na poslední chvíli a nebyla otestována na hardwaru, je však jednoduchá a neměl by s ní být problém. | ||
+ | |||
+ | Ovládání je řešeno pomocí dedikovaných kláves: | ||
+ | <code c> | ||
+ | void UART_OnRxChar(void) | ||
+ | { | ||
+ | /* Write your code here ... */ | ||
+ | char c; | ||
+ | |||
+ | uint8_t i; | ||
+ | UART_RecvChar(&c); | ||
+ | UART_SendChar(c); | ||
+ | |||
+ | |||
+ | //unsigned char TXdata[16]={"ABCDEFGHIJKLMNO\0"}; | ||
+ | switch(c) | ||
+ | { | ||
+ | case('n'): | ||
+ | sendTEST(1); | ||
+ | break; | ||
+ | case('m'): | ||
+ | menu(); | ||
+ | break; | ||
+ | case('r'): | ||
+ | flags=resend; | ||
+ | break; | ||
+ | case('a'): | ||
+ | RTTmeasure(); | ||
+ | break; | ||
+ | case('d'): | ||
+ | dataRATEmenu(); | ||
+ | flags=DRset; | ||
+ | break; | ||
+ | case('p'): | ||
+ | powerMenu(); | ||
+ | flags=Pset; | ||
+ | break; | ||
+ | /* case('f'): | ||
+ | deviationMenu; | ||
+ | flags=DEVset; | ||
+ | break; | ||
+ | */ case('t'): | ||
+ | sendTEST(0); | ||
+ | break; | ||
+ | case('c'): | ||
+ | flags=0; | ||
+ | menu(); | ||
+ | break; | ||
+ | } | ||
+ | |||
+ | if(c>'0' && c<'9' &&(flags==DRset)) setDataRate(c,&flags); menu(); | ||
+ | if(c>'0' && c<'9' &&(flags==Pset)) setDataRate(c,&flags); menu(); | ||
+ | // if(((c>='0' && c<='9')||(c>='A' && c<='F')) &&(flags==DEVset)) setDeviation(c,&flags);menu(); | ||
+ | } | ||
+ | </code> | ||
+ | |||
==== Video ==== | ==== Video ==== | ||
Na videu je zachycena funkčnost bezdrátového spoje na vzdálenost několika metrů, pro demonstraci chybovosti při krátké vzdálenosti jsou z modulů odstraněny antény. | Na videu je zachycena funkčnost bezdrátového spoje na vzdálenost několika metrů, pro demonstraci chybovosti při krátké vzdálenosti jsou z modulů odstraněny antény. | ||
- | https://www.youtube.com/watch?v=uUN8_ADpIJE&feature=youtu.be | + | h{{youtube>uUN8_ADpIJE?medium}} |