Jste zde

IQRF prakticky <RF - SPI> tunel

Kity_250.jpg

Již déle než dva roky mají čtenáři tohoto serveru možnost sledovat sérii článků na téma IQRF prakticky. S delší odmlkou se vracím s další praktickou ukázkou jak IQRF moduly využít. Dnes nebudeme využívat téměř žádnou inteligenci, kterou nám výrobce poskytuje. Vytvoříme si jednoduchý RF-SPI tunel.

Úvodem

O tom jak SPI na modulech IQRF pracuje jsme si již říkali v jednom z loňských dílů našeho miniseriálu. Prakticky jde o jednoduchý stavový automat, kde je zabudována veškerá inteligence již přímo v systému a uživatel pouze testuje příznaky a vkládá do, případně vybírá data z určeného bufferu. Rovněž komunikace vzduchem byla již několikrát probrána, opět jde pouze o využití předem připravených funkcí. Nic tedy nebrání vytvoření obousměrného tunelu rozhranní RF a SPI. Uvedený zdrojový kód pochází z absolvenské práce Bc. Stanislava Dubce a byl publikován s jeho souhlasem.

#include "includes/template-basic.h"
#pragma optimize 1

void APPLICATION()
{
  // nastaveni WTD
  WDTCON = 0b0000.1111;			
  OPTION |= 0b0000.1111;	

  // nastaveni dob pro bliknuti LED
  setOnPulsingOUT2(5);
  setOffPulsingOUT2(10);
	
  // povoleni SPI
  enableSPI(); 
  // vymazani WDT
  clrwdt();
  // nastaví výkon na maximum
  setTXpower(7);
  
while (1)
	{
    clrwdt(); 
    // přečte status sb. SPI
    getStatusSPI();
    // pokud přišel paket                   
    if (_SPIRX) 
    {    // a CRC není v pořádku
         if (!_SPICRCok)
            // zpráva se zahodí
            goto restartSPI;
        // jinak jsou přesunuta data do SPI bufferu...
        bufferRF[0] = bufferCOM[0];
        bufferRF[1] = bufferCOM[1];
        bufferRF[2] = bufferCOM[2];
        // blikne LEDkou   
        pulseLED();
        // nastaví délku RF paketu na 1
        DLEN = 3;  
        // odešle RF paket
	PIN = 0;
        RFTXpacket();
               
        restartSPI:
        // restart st. automatu
        startSPI(0);               
    } // konec podminky
    
    clrwdt(); 
    // pokud přišel RF paket
    if	(RFRXpacket())		
		{			 
      pulseOUT2();    
      bufferCOM[0] = bufferRF[0];
      bufferCOM[1] = bufferRF[1];
      bufferCOM[2] = bufferRF[2];
      startSPI(3); 
      clearBufferINFO();
      copyBufferINFO2RF();
		}    
	} // konec while
}// konec app


// *********************************************************************

Jak je vidět na uvedené aplikaci není vůbec nic složitého, na začátku je provedeno nastavení předděličky pro WDT, což zajistí dostatek času pro zpracování přijatých paketů ze vzduchu i SPI. Následně, tak jak je zvykem je povoleno SPI a nastaven maximální vysílaní výkon. Při retranslaci SPI-RF je možné předpokládat, že nastavení maximálního vysílaného výkonu je zcela v pořádku. Nechybí nezbytné vynulování VDT.

Aplikace pokračuje nekonečnou smyčkou, kdy v první části jsou zpracovávány přijaté pakety rozhranní SPI, to už jsme dělali v pátém díle IQRF Prakticky. V tomto příkladě je pak buffer tříprvkový, proto jsou přesouvány tři bajty z SPI do bufferu RF. Není-li však přijat žádný SPI paket, nebo je poškozen, pak je tato část přeskočena a aplikace pokračuje rovnou vynulováním WDT a následně zpracování příjmu z RF. Opět i tento úkol jsme již několikrát  prováděli.

Aplikaci pro retranslaci mezi rozhraními SPI a RF máme tedy hotovou, jak jednoduché...

Na závěr si dovolím upozornit, že MICRORISC uvedl na webu IQRF novou refereční příručku k funkcím systému OS 2.09 čímž jistě potěšil řadu uživatelů, kterým doposud chyběl obsáhlý popis funkcí OS. Příručka dopodrobna popisuje jejich použití a návratové hodnoty, stejně tak možnosti ovlivnění klíčových registrů. Nechybí ani jednoduché příklady využití.

DOWNLOAD & Odkazy

Hodnocení článku: