středa 21. října 2015

Power Consumption aneb měření spotřeby BLE modulu

Po nějaké době se vracím k BLE modulu od Cypressu a to proto, že chci změřit průměrnou spotřebu proudu při tzv. advertisingu neboli hledání připojitelných zařízení.

Pro zopakování, existují tři typy zařízení s Bluetooth technologií: Bluetooth, Bluetooth Smart a Bluetooth Smart Ready
Bluetooth - klasické zařízení ve verzi nižší než 4.Bluetooth Smart - sensory na baterii (krokoměry, měření srdečního tepu, BlueGEO)Bluetooth Smart Ready - nejvyšší třída zařízení, které komunikuje se všemi druhy Bluetooth (mobilní telefon, tablet, chytré televize)
Pokud by byla spotřeba konstantní, stačilo by připojit ampermetr a změřit ji. Module ale používám v ztv. Deep Sleep režimu, kdy spí a každých 100 ms se probudí a umožní připojení k BLE zařízení.
Možnosti jsou dvě, použít vhodný (tzv. SHUNT) rezistor a pomocí měření úbytku napětí na něm sledovat graf osciloskopu a ten vyhodnotit.

Takže pro měření pulsní spotřeby je nutné použít něco lepšího než jen ampermetr.
Výsledek (hlavně měření spotřeby BLE modulu) může vypadat např. takto:




BLE modul se SHUNT rezistorem 

Nebo, použít něco lepšího, máte-li po ruce.
Já mám k dispozici:

DC Power Supply Portable Device Battery/ Charger Simulator 2308 od Keithley

Což je skvělý přístroj, pokud potřebujete měřit pulsní spotřebu nebo simulovat chování baterie (umožňuje např. nastavit vnitřní odpor v rozmezí 0 až 1 ohm po setině) a výsledek stejného měření jako předchozí vypadá následovně:



BLE modul měření na battery simulátoru

Jak je vidět, měření proudu je mnohem přesnější a detailnější.
Takže po připojení osciloskopu, konkrétně jsem použil MSO2024B od Textronixu.

Po nastavení a zachycení potřebných pulsů následovalo uložení na Flash disk a přestávka na kafe. Osciloskop ukládal cca 1.2 milionu hodnot asi 10 minut.

Po uložení do CSV (Comma Separated Values) následoval pokus o zpracování v Excelu :) Ten byl ale slepou kolejí, neboť Excel zvládá zpracovat 32 000 hodnot a pokud je jich více, musí se rozdělovat do bloků a i přesto s tím měl problémy, aby vykreslil graf.

Ukázka zpracovaných dat vypadal následovně:
Vzpomenul jsem na program Gnuplot a data zpracoval v něm.


Z grafu lze vidět jednotlivé úkony při vysílání (více info od výrobce). Vysílání trvá cca 4.5 ms a opakuje se každých 100 ms. Maximální proud (po přepočtu z poměru mezi napětí je 17 mA).

Následovalo určení plochy (v grafu fialovou barvou), aby se dala spočítat spotřeba. Příkazy pro Gnuplot jsou uvedeny na konci.

Možnosti byly dvě, určit funkci a spočítat plošný integrál nebo si spočítat střední hodnotu a odchylku zanedbat. Jakožto technik se vydávám druhou cestou... a dělám si poznámky na papír:





Takže mám něco jako na obrázku vlevo nahoře a po použití Gnuplotu dostávám hodnoty, díky kterým spočtu plochu pod křivkou, která je 36 % z plochy dané časem 4.5 ms a výškou pulsu 21.1 V.

Jelikož je vysílá jen 4.5 ms, tak dalších 95.5 ms modul spí je úplně vypnutý (téměř úplně). Takže po přepočtu dostávám průměrnou spotřebu 288.4 uA

Srovnávám se sejmutou charakteristikou z oscila od výrobce:


Jeho tabulkovou hodnotou z datasheetu:




A hodnotou spočtenou z Excel formuláře, který výrobce nabízí ke stažení:



Hodnoty mnou změřené a vypočtené jsou celkem podobné.

Moje: 288 uA
Výrobce tabulková hodnota: 262 uA
Výrobce Excel makro: 265 uA


Pozn: Nakonec bylo ve vyvíjené aplikaci potřeba vysílání jen každou vteřinu a spotřeba se dostala na 28 uA (logicky, když je čas deset krát delší) a to je krásné :).
________________________________________________________________________________




Gnuplot - ovládání

Program lze ovládat pomocí jednotlivých polože z menu nebo příkazy psát přímo na řádek (bodobně jako Matlab.



Otevřeme si soubor s daty a pomocí příkazů:

set title 'Power consumption'                                   // název grafu
set xlabel 'time(s)'                                                    // název X osy
set ylabel 'voltage(V)'                                              // název Y osy
set yrange [-1:25]                                                    // nastavení Y osy

set xrange [0:0.01]                                                  // nastavení X osy
set grid ytics mytic                                                 // zapnutí gridu v Y ose
set mytics 5                                                            // počet děličů gridu v Y ose - rozdělí části na 5 dílů
set grid xtics mxtic                                                // zapnutí gridu v X ose
set mxtics 10                                                         // počet děličů gridu v X ose - rozdělí části na 10 dílů
set grid lt 1 lw 1 lc rgb "#880000"                       //nastavení barvy a typu gridu
plot 'test2.csv' using 1:2 with lines, 'test2.csv' using 1:3 with lines            //vykreslí grafy pro Y1 a Y2

Statistika - dělá statistiku pro každý sloupec dat

plot "graf1.txt" using 1:2 with boxes                     //graf s boxičkami
stats "graf1.txt"                                                      //statistika



čtvrtek 12. března 2015

Bluetooth Low Energy (BLE) od Cypress

Bluetooth Low Energy (BLE) od Cypress

Minulý týden mě navštívil vyslanec firmy Cypress a dnes se mi do rukou (za přispění Future Electronics z Prahy) dostal jejich kit CY8CKIT-042-BLE Bluetooth® Low Energy (BLE) Pioneer Kit



Kit tedy slouží k osahání si HW a SW potřebného k vývoji BLE zařízení.
Obsahuje:

- BLE Pioneer Baseboard preloaded with CY8CKIT-142 PSoC 4 BLE module
- CY5671 PRoC BLE Module
- CY5670 - CySmart USB Dongle (BLE Dongle)
- Quick start guide
- USB Standard A to Mini-B cable
- Four jumper wires (4 inch) and two proximity sensor wires (5 inch)
- Coin cell (3V CR2032)

Poznámka pro neznalé, Cypress nabízí modul PSoC a PRoC. Rozdíl je v tom, že PSoC (červený modul na obrázku) je Programmable System on Chip a obsahuje CY8C4247LQI-BL483. Máte tak k dispozici celý Cortex M0 včetně všech rozhraní.


PRoC (černý modul) je Programmable Radio-on-Chip. PSoC a obsahuje CYBL10563-56LQXI. Zde je omezený počet funkcí a rozhraní. I když je zajímavé, že je cena vyšší...

Zajímavé je srovnání počtu součástek nutných k vytvoření antény:

Praktické seznámení s kitem

Nejprve musím uznat, že se mi líbí balení kitu v plastové krabici, vše uspořádáno jak má být včetně Quick start guide. Instalační ISO jsem si stáhl a nainstaloval dle pokynů. Po instalaci se nabídla aktualizace všech částí a vše proběhlo hladce a samo... paráda! Mnoho výrobců by se mohlo učit...








středa 11. března 2015

Baterie 3.6V/14Ah za 79 kč

Narazil jsem na pěknou nabídku u GME.cz, kde nabízí: Baterie lithiová Lisun CR1 D 3,6V 14000mAh za cenu 79 kč



Odkaz na GME



Zajímavá je kapacita udávaná u GME a to 14 Ah, přičemž originál má 19 Ah (že by v GME vyprodávali trochu vybité baterie?). Za tu cenu je to ale paráda. 

Tutéž lze koupit i na Ebay, jen v jiném obalu za cca 240 kč. 


úterý 10. března 2015

Bluetooth Low Energy (BLE) s HM-10 (Texas Instruments CC2541)

Dlouhou dobu používám levné Bluetooth moduly HM-05 s verzí BT 2.1. Nedávno jsem si chtěl vyzkoušet BT Low Energy, kterou nabízí od verze 4.0. Proto jsem si opatřil modul HM-10 od firmy Jnhuamao z Ebay za cenu cca 170 kč.

Modul obsahuje chip od Texaských Nástrojáren CC2540/1, napájecí napětí je 2 až 3.7 V, rozměry 27x13 mm.


Po připojení k UARTu modulu dle schématu:



lze tento ovládat AT příkazy. Z nejzajímavějších uvádím:


Postup ke zprovoznění jako Peripheral:
"AT" - kontrola, zda je modul OK
"AT+RENEW" - reset do defaultního nastavení (ROLE0, MODE0)
"AT+NAMEjmeno" - změní jméno BLE
"AT+ROLE0" - nastavení jako slave (piripheral)
"AT+MODE1" - přeposílá data po připojení, jinak reaguje na UART
"AT+TYPE2" - nutnost vždy zadat PIN při připojení
"AT+PWRM0" - auto SLEEP režim
"AT+RESET" - reset pro uložení parametrů




Další příkazy:

"AT+PASS?" - zjištení PINu
"AT+PASS123456 - natavení PINu na 123456
"AT+MODE0" - 
bez připojení: HM-10 reaguje na AT příkazy z UARTu
           - po připojení: přeposílá data
"AT+MODE1" - jako MODE0, navíc nastavuje výstupy, čte vstupy
"AT+MODE2" - jako MODE1, ale nečte vstupy

"AT+TYPE0" - připojení bez zadání PINu
"AT+TYPE1" - připojení zadáním PINu

Sleep režim: - slibuje spotřebu 60 uA ~ 1.5 mA
                     - ze SLEEP režimu se lze dostat dvěma způsoby (odesláním řetězce delšího než 80 znaků přes UART; stiskem tlačítka na déle než 1 sekundu)

"AT+SLEEP" - přejde do SLEEP režimu

Spotřeba:

Standardní režim - 9 mA
SLEEP režim      - 0.2 mA, LED dioda je OFF

Ve SLEEP režimu je HM-10 viditelné a po připojení se samo probudí. Po odpojení se do SLEEP režimu NEUVEDE, je třeba ho uspat! Proto existuje auto-sleep funkce.

"AT+PWRM0" - auto SLEEP režim
"AT+PWRM1" - bez SLEEP režimu

Po odpojení se sám uspí, což výrazně šetří baterii. 

Power režimy:

Test: Zařízení 1 m od BLE má sílu signálu při různých Power režimech v závorce.

"AT+POWE0" - nastavení výkonu antény na -23 Db (RSSI = -93 dBm)
"AT+POWE1" - nastavení výkonu antény na -6 Db  (RSSI = -76 dBm)
"AT+POWE2" - nastavení výkonu antény na 0 Db   (RSSI = -74 dBm)
"AT+POWE3" - nastavení výkonu antény na 6 Db   (RSSI = -68 dBm)

Je tedy vidět, jak se síla signálu zvyšuje se zvyšujícím se parametrem POWEx (čím vyšší, číslo x, tím větší výkon a nižší záporný parametr RSSI).
Parametr v datasheetu tedy odpovídá měření (srovnání POWE3 je o 6 dB větší než POWE2, což měřením bylo prokázáno (74 - 68 = 6)).
Zajímavé bylo, že spotřeba energie byla při všech režimech stejná... a to jak s auto-sleep režimem, tak i bez něho.

Upgrade FirmWare:

Upgrade FW je snadná záležitost, postačí nahrát nový bootloader přes UART.
1) Stáhnout si nový FW včetně instalačního nástroje ze stránek Huamao Technology
2) Připojit přes UART a zadat AT příkaz "AT+SBLUP", čímž se modul přepne do režimu nahrávání nového FW



3) Odpojíte UART! Jako Admin spustíte staženou aplikaci, vyberete port a stažený BIN soubor.
4) Tlačítkem "Load Image" zahájíte nahrání nového bootloaderu. Po ukončení se objeví hláška o úspěchu.
5) Ověření úspěšnosti provedete příkazem "AT+VERS?" přes UART.



neděle 8. února 2015

Printscreen na Raspberry Pi



Občas je potřeba uložit obsah obrazovky z Maliny, například pro obrázek na blog...

Pěkně pracuje program SCReenshOT neboli Scrot .

Instalace je snadná:

sudo apt-get install scrot

a použití ještě snažší:

scrot

udělá fotku obrzaovky a uloží ji s aktuálním časem a datem do home adresáře. 

Pokud příkaz modifikujete:

scrot -d 5 obrazek.png

pak udělá screen shot za 5 vteřin a uloží ho pod definovaným názvem. Paráda...

OLED display s SSD1306 a Raspberry Pi



Máme-li na Raspberry Pi zprovozněnu I2C sběrnici, můžeme se pustit do připojení OLED displeje a něco pěkného si zobrazit.

Displej si připojíme k Malině následovně:

VCC na pin 1 (3V3)
SDA na pin 3 (GPIO02)
SCL na pin 5 (GPIO03)
GND na pin 9 (GND)



Sluchátka, flash disk a bluetooth dongle nejsou potřeba


Pěkné příklady použití nabízí Lada Ovocná a tak je využijeme.

sudo apt-get update
sudo apt-get install build-essential python-dev python-pip


sudo pip install RPi.GPIO

přidáme pěknou knihovnu pro práci s obrázky Python Imaging Library

sudo apt-get install python-imaging python-smbus

a od Lady z GitHubu přidáme příklady a ovladače:

sudo apt-get install git
git clone https://github.com/adafruit/Adafruit_Python_SSD1306.git
cd Adafruit_Python_SSD1306
sudo python setup.py install


Příklady se nám nainstalují do Home složky a když do ní vejdeme, najdeme složku Examples, kde si otevřeme ukázkový shapes.py (nejlépe opět editorem nano)

sudo nano shapes.py

a vybereme správný display, který používáme. Takže odkomentujeme řádek a uložíme

disp = Adafruit_SSD1306.SSD1306_128_64(rst=RST)

a pak si jako root pustíme upravený příklad.

sudo python shapes.py


Videoukázka zde:






I2C na Raspberry Pi



Sběrnici I2C známe a připojit skrze ni snímače a zobrazovače je super.

Pro zprovoznění této sběrnice na Malině je třeba udělat pár věcí.


1) Nejprve si nainstalujeme potřebné nástroje:

sudo apt-get install python-smbus
sudo apt-get install i2c-tools



2) Poté si I2C povolíme v configu:


sudo raspi-config

a v Advanced option si najdeme I2C, kterou povolíme.


3) Aby nám I2C dobře fungovala, je vhodné přidat dva řádky do modules ve složce etc, nejlépe v editoru nano:

sudo nano /etc/modules

přidáme řádky:

i2c-bcm2708
i2c-dev


4) V souboru raspi-blacklist.conf příkazem:

sudo nano /etc/modprobe.d/raspi-blacklist.conf

zakomentujeme řádky přidáním # před každý příkaz

5) V souboru config.txt příkazem

sudo nano /boot/config.txt

přidáme dva řádky:

dtparam=i2c1=on
dtparam=i2c_arm=on



a restartujeme např. příkazem sudo shutdown -r now

Po restartu je vhodné vyzkoušet, zda je I2C funkční a zařízení je připojeno. To uděláme příkazem:


sudo i2cdetect -y 1

který nám vypíš připojená zařízení.