Jste zde

IQRF Prakticky II

Minulým dílem jsme začali seriál o využití inteligentních bezdrátových modulů. Ukázali jsme si, jak jednoduše vytvořit čtyřkanálový dálkový ovladač a to na několika málo řádcích zdrojového kódu. To je ovšem samozřejmě jen jedno z mnoha možných využití. V tomto díle si ukážeme jak využít funkcí pro měření teploty a napájecího napětí. Naměřené hodnoty budeme opět zasílat na druhý modul.

Úvod

Protože jádrem modulu IQRF je procesor PIC16F88 je možné využít jeho AD převodníku k měření analogových veličin. Jednou z nich může být také analogový výstup teploměr MCP9700, který je osazen vedle procesoru. V tomto případě se ovšem nemusíme starat o režii při převodu, protože systém IQRF již obsahuje funkci pro vzorkování a konverzi analogové veličiny z teploměru.

Měření teploty

Jak už bylo uvedeno, pro zjištění hodnoty výstupního napětí teploměru využijeme připravenou funkci systému. Přepočet si ovšem již musíme provést sami, výrobce však na svém webu uvádí příklad, takže jej stačí využít ve vlastní aplikaci:

getTemperature();
teplota.high = ADRESH&0x03;
teplota.low8  = ADRESL;
teplota *= 75;
teplota >>= 8;
teplota -= 50;

První řádek provede nastavení převodníku a samotnou konverzi. Další dva přesunou desetibitovou hodnotu z převodníku do proměnné teplota (8 bitů nižšího bajtu + 2 bity s vyššího bajtu)

Více zajímavé jsou další tři řádky. Pokusím se odvodit postup, jakým asi došli lidé z Microriscu k uvedenému vzorci:

  • Teploměr MPC7900 má na výstupu napětí úměrné teplotě a to podle vzorce: TA = (VOUT – 0,5V) / 10mV.
  • Při napájecím napětí 3V bude vzorec pro výpočet napětí na vstupu převodníku: VIN = 3/1024*ADR
  • Pak můžeme dosadit druhou rovnici do první:
    • TA = (3/1024*ADR – 0,5) / 10mV
    • TA = 300/1024*ADR – 50
    • TA = 75/256*ADR – 50

Stejného výsledku bychom dosáhli samozřejmě dosazením do obou původních rovnic, takto je však výpočet rychlejší a jednodušší.

Kompletní zdrojový kód pro bezdrátový přenos hodnoty teploty je uveden zde:

#include "includes/template-basic.h"
void APPLICATION()
{
    uns16   teplota;
    DLEN = 5;
    while (1)
    {
        clrwdt();
        getTemperature();
        teplota.high8 = ADRESH&0x03;
        teplota.low8  = ADRESL;
        teplota *= 75;
        teplota >>= 8;
        teplota -= 50;
        bufferRF[0] = teplota.low8/10;
        bufferRF[0] += '0';
        bufferRF[1] = teplota.low8%10;
        bufferRF[1] += '0';
        bufferRF[2] = 'C';
        RFTXpacket(); 
        waitDelay(100);
    }
}

Měření napájecího napětí

Pro měření napájecího napětí již výrobce nepřipravil žádné zjednodušení, ovšem ani tato činnost nevyžaduje mnoho úsilí, musíme však již otevřít katalogový list a nastavit registry procesoru. Těmito registry jsou:

  • ANSEL (Nastavení vstupního pinu jako Analogový vstup)
  • ADCON0 (Řídící registr 0 pro A/D převodník)
  • ADCON1 (Řídící registr 1 pro A/D převodník)

#include "includes/template-basic.h"
void APPLICATION()
{
    uns8 pomi;
    DLEN = 3;
    while (1)
    {
        clrwdt();
        ANSEL.1 = 1;
        ADCON0 = 0b0100.1001;
        ADCON1 = 0b1000.0000;
        _OUT2 = 1;
        waitDelay(1);
        GO = 1;
        while(GO);
        _OUT2    = 0;
        bufferRF[0] = ADRESH;
        bufferRF[1] = ADRESL;
        bufferRF[2] = ' ';
        RFTXpacket();
        waitDelay(100);
    }
}

Dle katalogového listu lze takto měřit úbytek na rezistoru k LED modulu. Klesne-li napájecí napětí pod úroveň zaručující správnou funkci stabilizátoru, klesá postupně i toto napětí.

Bohužel výrobce modulů zřejmě nemyslel na to, že by uživatel chtěl měřit i jiné analogové signály a tak nejsou na konektoru vyvedeny další piny, které by sloužily jako vstup AD převodníku. Snad v některé z dalších verzí.

Komunikujeme

Jako vysílač můžeme použít desku vysílače uvedenou v minulém díle. Jako přijímač si dnes uvedeme jinou destičku s převodníkem MAX232. Zapojení není dle mého názoru nutné podrobně popisovat, protože se jedná o katalogové zapojení převodníku.

schéma

DPS

osazovák TOP

osazovák BOTTOM

Rozpiska součástek pro přijímač:

J1,10		kolíková lámací lišta S1G02
J3		CAN9 zásuvka úhlová
C1		Kondenzátor E2M2/100V
C2, C5		Kondenzátor keramický 100nF/50V SMD 1206
C6 - C9		Kondenzátor tantalový SMD[A], 1u
R1		rezistor SMD 1206, 1k
U1		integrovaný stabilizátor LE33CZ
U2		Konektor KON-SIM-01
U4		MAX232, SO16

Softwarová část pro přijímač se také již neobejde bez znalosti některých registrů procesoru PIC a to kvůli nastavení UARTU, které není dosud v modulech IQRF podporováno přímo systémem (na rozdíl od SPI (slave) a I2C (slave). Především bude nutné UART nastavit:

void enableUART()
 {
	TRISB.2 = 1;	// nastaví pin jako vstupní (RX)
	TRISB.5 = 0;	//  nastaví pin jako výstupní (TX)
	SPBRG = 51;      // 9600 baud @ 8MHz 
	TXSTA = 0b00100100; // vysílač: 8bit, tx enabled, async uart
	RCSTA = 0b10010000; // přijímač: enable port, 8bit 
}

Dále je nutné napsat funkci pro odeslání bajtu:

void TxByteUART(uns8 TxByte) { TXREG = TxByte; while (TXIF == 0); // dokud není odvysílán bajt }

Nyní je již možné vytvořit program, který vše co příjme vzduchem odešle UARTem ven:

#include "includes/template-basic.h"
void enableUART(void);
void TxByteUART(uns8);

#pragma optimize 1
void APPLICATION()
{
   WDTCON = 0b0000.1111;
   OPTION |= 0b0000.1111;
   enableUART();

   while (1)
	{
		clrwdt();
 		if	(RFRXpacket())	
		{
                                 TxByteUART (bufferRF[0]); 
                                 TxByteUART (bufferRF[1]); 
                                 TxByteUART (bufferRF[2]);
                                 TxByteUART (0x0A); 
               	               pulseOUT2();
                                 clearBufferINFO();
                                 copyBufferINFO2RF();
		}
	}
}

Program samozřejmě poslouží stejně dobře také pro ladění jakékoliv jiné RF komunikace (například ovladač uvedený v minulém díle).

Veškeré podklady a programy jsou ke stažení pod tímto textem. Příště si ukážeme jak na síťovou komunikaci

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: