Jste zde

IQRF Prakticky I

Moduly IQRF byly představeny již v několika článcích na tomto serveru. Protože se jedná o velice zajímavé obvody, bylo by škoda si s nimi nevyrobit něco praktického. První kroky s jakýmkoliv novým systémem jsou pro každého náročné, a proto jsem se rozhodl vydat miniseriál o tom jak s obvody IQRF pracovat. V tuto chvíli se pročítáte prvním z nich.

Úvodem

Jak už bylo napsáno, obvody IQRF jsou založeny na procesorech PIC. Nicméně, kdo PIC nikdy neviděl, nemusí se děsit. Na biflování instrukčního souboru lze rychle zapomenout díky programování v jazyce C, pro který je pro nekomerční použití kompilátor zdarma a také k registrům se mnoho nedostaneme a to především díky předpřipravenému API, které výrobce IQRF implementoval do systému.

Jdeme na to

Ke každé práci potřebujeme softwarové vybavení a samozřejmě samotný hardware, na kterém budeme vyvíjet. Výrobce modulů IQRF nabízí vlastní vývojové prostředky, které můžete shlédnout na webu věnované právě inteligentním bezdrátovým modulům. V sekci Development tools najdete množství programátorů a vývojových desek. Pro naše účely vystačí jediná: CK-USB-2, programátor obvodů IQRF, ostatní vývojové prostředky si vyrobíme.

Na webu je také možné stáhnout kompletní SW, vybavení nutné pro kompilaci kódu, programování a ladění. Balíček se jmenuje Startup Package. Jeho obsahem jsou:

  • Příklady použití IQRF modulů, hlavičkové soubory
  • IQRF IDE – programovací a ladící SW
  • Kompilátor
  • USB ovladače pro výše uvedený programátor

Deska vysílače

Jak už bylo uvedeno, vývojové destičky si můžeme vyrobit sami. První z nich bude deska vysílače, obsahující zdroj 3,3V (například pro napájení klasickou 9V baterií), patici pro modul IQRF TR-868-21, 4 tlačítka a 4 PULL-UP rezistory (nebyly by nutné, je možné připnout interní). Následující schéma ukazuje zapojení popsaného modulu.

Jak je vidět zapojení je velice jednoduché, přesto obsahuje vše, co je pro práci s obvodem potřeba. Následuje zapojení přijímače, které není o mnoho složitější.

Obě desky jsou navrhnuty na jednostranném plošném spoji. Předlohy pro jsou ve formátu PDF v měřítku 1:1

Rozpiska pro vysílač

R1-R4 Rezistor 4k7, 0,6W
S1-S4 Tlačítko P-B1720 (A,B,C…)
J7,J10 Kolíková lámací lišta S1G02
C1 Kondenzátor E2M2/100V
C2 Kondenzátor keramický 100nF/50V
U1 Integrovaný stabilizátor LE33cz
U2 Konektor KON-SIM-01

Rozpiska pro prijímač

R1-R4 Rezistor 1k2, 0,6W
D1-D4 LED-3MM
J7,J10 Kolíková lámací lišta S1G02
C1 Kondenzátor E2M2/100V
C2 Kondenzátor keramický 100nF/50V
U1 Integrovaný stabilizátor LE33cz
U2 Konektor KON-SIM-01

Po zapájení a připojení na zdroj napětí (např. 9V, kterou budeme používat), lze ověřit, zda funguje zdroj 3,3V (LE33cz). Pokud je vše v pořádku, lze zasunout obvod IQRF do patice. Na pinu J10-1 by mělo být napětí 3V, které poskytuje interní stabilizátor modulu. Pokud tomu tak je, propojením pinů J10-1 a J10-2 by měl být spuštěn program nahraný v IQRF.

Software pro vysílač

Jednoduchý vysílač se třemi tlačítky lze vytvořit poměrně jednoduše:

#include "includes/template-basic.h" 
void APPLICATION()
{
      DLEN=4;
      TRISB = 0x36;
      while (1)  {
         clrwdt();
         if (!_SDO) bufferRF[0] = 'A'; else bufferRF[0]='N';
         if (!_SDI) bufferRF[1] = 'A'; else bufferRF[1]='N';
         if (!_SCK) bufferRF[2] = 'A'; else bufferRF[2]='N';
         if (!_SS)  bufferRF[3] = 'A'; else bufferRF[3]='N';
         pulseOUT2();
         RFTXpacket();
         waitDelay(10);
      }    
}

V první části kódu je nastavena délka FR paketu na 4 bajty. Dále jsou nastaveny piny RB1, RB2, RB4 a RB5 na vstupní. Následuje test tlačítek. Pokud je tlačítko stisknuté (log „0“ je do bufferu nastaveno ‘A’, v opačném případě je do bufferu nastaveno ‘N’. Následuje bliknutí jako indikace, že byla odeslána zpráva o stavu tlačítek a paket je odeslán. Celý cyklus je zpožděn 100ms smyčkou.

Software pro přijímač

#include "includes/template-basic.h"                    
void APPLICATION()
{
    TRISB &= ~0x36;
    _SDO = 0;_SDI = 0;_SCK = 0;_SS = 0;
    while (1)
    {
      clrwdt(); 
      if (RFRXpacket())
      {
        if (bufferRF[0]=='A') _SDO = 1; else _SDO = 0;
        if (bufferRF[1]=='A') _SDI = 1; else _SDI = 0;
        if (bufferRF[2]=='A') _SCK = 1; else _SCK = 0;
        if (bufferRF[3]=='A') _SS = 1; else _SS = 0;
      }
    }
}

Zde dochází opět k nastavení pinů RB1, RB2, RB4, RB5, ale tentokrát na výstupní, následuje jejich vynulování. Při příchodu RF paketu, jsou jednotlivé bajty porovnávány a dle nich rozsvěceny (zhasínány LED).

To by bylo pro dnešek o IQRF a jejich praktickém využití vše.

DOWNLOAD & Odkazy

IQRF - Complete platform for RF connectivity and simple way to smarter wireless solutions
                      ... nejenom moduly, ale vse, co je treba k vytvoreni chytrejsich bezdratovych reseni

 
Hodnocení článku: 

Komentáře

Díky moc za článek - pomohl mi k rozjezdu mé aplikace. Prosím tě jak se dají zapnout ty PULL-UPy v Céčku (dovoluje to OS ? zapisovat do OPTION_REG), případně jak se do C vkládají instrukce assambleru. Díky (začátečník v C)

Zdravím, do OPTION registru je možné zapisovat. Například: OPTION = 0b0000.1111 nebo podobně. Pull-upy je možné zapnout interní, ovšem nedoporučuju to. Systém který je v IQRF při volání některých funkcí přenastavuje porty a jejich vlastnosti a to i u těch portů se kterými nemá nic společného. Doporučuji pull-upy interní. Přesto, řízení portu lze provést registrem TRISx = 0xXX. Poté nastavit port do 1. PORTx = 0xXX a nakonec povolit pull-up OPTION.7 = 0;
Mělo by to chodit. Ovšem jen do té doby, než zavoláš nějakou funkci pro měření teploty, práci s RF obvodem a podobně. Pak musíš znovu.