V tom článku si ukážeme praktické použití. Uděláme teploměr s čidlem DS18B20, který bude v pravidelných intervalech odesílat data na thingspeak.com. Thingspeak je otevřená cloud platforma pro různá zařízení co sbírají data. Výhodu je, že odeslání dat je velmi jednoduché, není třeba žádná složitá autentizace. Z dat se automaticky vytváří graf. Je možné je pak exportovat. Nejdříve si musíte na thingspeak.com založit účet a vytvořit kanál kam budeme odesílat data. K danému kanálu je třeba získat API klíč pro zápis.
Zapojení je velmi jednoduché:
Dále pomocí IDE nahrajeme dva subory ds1820.lua a init.lua.
Soubor ds1820.lua čte teplotu z čidla a odesílá metodou GET data na server thingspeak.com. Zde nastavte váš API klíč pro zápis a periodu jak často chcete data odesílat. Výchozí hodnota je 1 minuta.
-- ds1820.lua
-- Measure temperature and post data to thingspeak.com
-- 2014 OK1CDJ
--- Temp sensor DS18B20 is conntected to GPIO0
pin = 3
ow.setup(pin)
counter=0
lasttemp=-999
function bxor(a,b)
local r = 0
for i = 0, 31 do
if ( a % 2 + b % 2 == 1 ) then
r = r + 2^i
end
a = a / 2
b = b / 2
end
return r
end
--- Get temperature from DS18B20
function getTemp()
addr = ow.reset_search(pin)
repeat
tmr.wdclr()
if (addr ~= nil) then
crc = ow.crc8(string.sub(addr,1,7))
if (crc == addr:byte(8)) then
if ((addr:byte(1) == 0x10) or (addr:byte(1) == 0x28)) then
ow.reset(pin)
ow.select(pin, addr)
ow.write(pin, 0x44, 1)
tmr.delay(1000000)
present = ow.reset(pin)
ow.select(pin, addr)
ow.write(pin,0xBE, 1)
data = nil
data = string.char(ow.read(pin))
for i = 1, 8 do
data = data .. string.char(ow.read(pin))
end
crc = ow.crc8(string.sub(data,1,8))
if (crc == data:byte(9)) then
t = (data:byte(1) + data:byte(2) * 256)
if (t > 32768) then
t = (bxor(t, 0xffff)) + 1
t = (-1) * t
end
t = t * 625
lasttemp = t
print("Last temp: " .. lasttemp)
end
tmr.wdclr()
end
end
end
addr = ow.search(pin)
until(addr == nil)
end
--- Get temp and send data to thingspeak.com
function sendData()
getTemp()
t1 = lasttemp / 10000
t2 = (lasttemp >= 0 and lasttemp % 10000) or (10000 - lasttemp % 10000)
print("Temp:"..t1 .. "."..t2.." C\n")
-- conection to thingspeak.com
print("Sending data to thingspeak.com")
conn=net.createConnection(net.TCP, 0)
conn:on("receive", function(conn, payload) print(payload) end)
-- api.thingspeak.com 184.106.153.149
conn:connect(80,'184.106.153.149')
conn:send("GET /update?key=YOURKEY&field1="..t1.."."..t2.." HTTP/1.1\r\n")
conn:send("Host: api.thingspeak.com\r\n")
conn:send("Accept: */*\r\n")
conn:send("User-Agent: Mozilla/4.0 (compatible; esp8266 Lua; Windows NT 5.1)\r\n")
conn:send("\r\n")
conn:on("sent",function(conn)
print("Closing connection")
conn:close()
end)
conn:on("disconnection", function(conn)
print("Got disconnection...")
end)
end
-- send data every X ms senconds to thing speak
tmr.alarm(0, 60000, 1, function() sendData() end )
Soubor initi.lua - se spustí automaticky po restartu. Připojí se k nastavené WIFI síti a počká na přidělení IP adresy a pak spustí skript ds1820.lua. Ve skriptu je třeba nastavit vaši síť.
--init.lua
print("Setting up WIFI...")
wifi.setmode(wifi.STATION)
--modify according your wireless router settings
wifi.sta.config("SSDID","PASSWORD")
wifi.sta.connect()
tmr.alarm(1, 1000, 1, function()
if wifi.sta.getip()== nil then
print("IP unavailable, Waiting...")
else
tmr.stop(1)
print("Config done, IP is "..wifi.sta.getip())
dofile("ds1820.lua")
end
end)
Zdrojové kódy je možné také sthnout zde: https://github.com/ok1cdj/ESP8266-LUA/tree/master/Thermometer-DS18B20-Thingspeak
Jak je vidět ESP8266 s LUA firmwarem je použitelné pro různé aplikace. Není problém v něm napsat jednoduchý klient i server, připojit různé periférie (momentálně 1-wire nebo i2c).
28. prosince 2014
25. prosince 2014
ESP8266: WI-FI a internet do každého zařízení IV.
Lua je odlehčený, reflexivní, imperativní a procedurální programovací jazyk navržený jako skriptovací jazyk s rozšiřitelnou sémantikou. Název je odvozen z portugalského slova pro měsíc. Jeho celá implementace se vejde do 100 kB. Pokud umíte něco naprogramovat v PHP nebo Pythonu nebude pro vás LUA žádný problém.
1. Proměnné
Rozlišujeme dva druhy proměnných. Globální a lokální. Globální existují všude a lokální pouze v bloku (funkci) kde vznikly. Název proměnné by měl začínat vždy písmenem a pozor jsou rozlišována velká a malá písmena.
Proměnné můžou být těchto typů: nill - nic, prázdná hodnota, čísla, znaky, stav (true/false - 0/1), řetězce, tabulky, funkce.
Příklad:
i=nill
k=1
flag=true
bname="ahoj"
2. Komentáře a klíčová slova
-- komentář
Klíčová slova:
and break do else elseif
end false for function if
in local nil not or
repeat return then true until
while
3. Podmínky, funkce, cykly
Podmínka if
1. if condition then
block
end
2. if condition then
block1
else
block2
end
3. if condition1 then
block1
elseif condition2 then
block2
elseif condition3 then
block3
else
block4
end
Funkce
1. function Name()
block
end
2. Name = function()
block
end
Cykly
1. for variable = beginning, end, step do
block
end
2. for variable, name in table do
block
end
3. while condition do
block
end
4. repeat
block
until condition
Není cílem popsat ze celou syntaxi jazyka LUA. Chtěl jsem pouze na příkladech ukázat, že je přehledná a jednoduchá. Více informací o jazyce LUA je v češtině třeba na root.cz nebo je k dispozici i kniha v češtině.
NodeMCU API implementuje rozhraní k funkcím čipu, kompletní popis je zde ve wiki.
Několik ukázek práce s API
Manipulace s GPIO
pin = 1
-- nastaví pin jako výstup
gpio.mode(pin,gpio.OUTPUT)
-- nastaví pin na log 1
gpio.write(pin,gpio.HIGH)
-- přečte a vypíše hodnotu pin
print(gpio.read(pin))
Jednoduchý webserver
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
conn:on("receive",function(conn,payload)
print(payload)
conn:send("<h1> Hello, NodeMcu.</h1>")
end)
conn:on("sent",function(conn) conn:close() end)
end)
Jak je vidět i vytvoření jednoduchého web serveru díky dobré implementaci v API zabere pár řádek kódu.
V příštím díle si ukážeme jak udělat WIFI teploměr s uploadem dat na thingspeak.com.
1. Proměnné
Rozlišujeme dva druhy proměnných. Globální a lokální. Globální existují všude a lokální pouze v bloku (funkci) kde vznikly. Název proměnné by měl začínat vždy písmenem a pozor jsou rozlišována velká a malá písmena.
Proměnné můžou být těchto typů: nill - nic, prázdná hodnota, čísla, znaky, stav (true/false - 0/1), řetězce, tabulky, funkce.
Příklad:
i=nill
k=1
flag=true
bname="ahoj"
2. Komentáře a klíčová slova
-- komentář
Klíčová slova:
and break do else elseif
end false for function if
in local nil not or
repeat return then true until
while
3. Podmínky, funkce, cykly
Podmínka if
1. if condition then
block
end
2. if condition then
block1
else
block2
end
3. if condition1 then
block1
elseif condition2 then
block2
elseif condition3 then
block3
else
block4
end
Funkce
1. function Name()
block
end
2. Name = function()
block
end
Cykly
1. for variable = beginning, end, step do
block
end
2. for variable, name in table do
block
end
3. while condition do
block
end
4. repeat
block
until condition
Není cílem popsat ze celou syntaxi jazyka LUA. Chtěl jsem pouze na příkladech ukázat, že je přehledná a jednoduchá. Více informací o jazyce LUA je v češtině třeba na root.cz nebo je k dispozici i kniha v češtině.
NodeMCU API implementuje rozhraní k funkcím čipu, kompletní popis je zde ve wiki.
Několik ukázek práce s API
Manipulace s GPIO
pin = 1
-- nastaví pin jako výstup
gpio.mode(pin,gpio.OUTPUT)
-- nastaví pin na log 1
gpio.write(pin,gpio.HIGH)
-- přečte a vypíše hodnotu pin
print(gpio.read(pin))
Jednoduchý webserver
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
conn:on("receive",function(conn,payload)
print(payload)
conn:send("<h1> Hello, NodeMcu.</h1>")
end)
conn:on("sent",function(conn) conn:close() end)
end)
Jak je vidět i vytvoření jednoduchého web serveru díky dobré implementaci v API zabere pár řádek kódu.
V příštím díle si ukážeme jak udělat WIFI teploměr s uploadem dat na thingspeak.com.
24. prosince 2014
ESP8266: WI-FI a internet do každého zařízení III.
V minulém díle jsme rozchodili alternativní LUA firmware NodeMCU a připojili modul k WIFI. Teď můžeme začít psát vlastní programy. Ve firmware je implementovaný jednoduchý filesystém. Pro programy a další soubory máme k dispozici cca 150 kB. LUA příkazy můžeme psát přímo do konzole. Tak se nám neuchovají pro příští použití. Lepší bude ukládat je do souboru.
Soubor vytvoříme takto:
-- otevře 'test.lua' in 'a+' mode
file.open("test.lua", "a+")
-- zapíše slovo 'pokus' na konec souboru
file.writeline('pokus')
file.close()
Tímto způsobem můžeme vytvářet soubory. Ale jak vidíte, je to poměrně krkolomné. Výhodnější bude když si pořídíme nějaké vývojové prostředí, které se o zápis souborů postará za nás. Vývojových prostředí jsem vyzkoušel několik. Nejpropracovanější a nejvíce rozvíjené jsou teď asi dvě.
Lua loader - aplikace pro Windows (funguje i na Linuxu od Wine)
Obě aplikace jsou si dost funkčně podobné. ESPlorer umožňuje posílat i AT příkazy pro originální firmware a je připraven i pro použití s dalšími alternativními firmwary.
V příštím díle si ukážeme základy syntaxe jazyka LUA a API NodeMCU firmwaru.
Soubor vytvoříme takto:
-- otevře 'test.lua' in 'a+' mode
file.open("test.lua", "a+")
-- zapíše slovo 'pokus' na konec souboru
file.writeline('pokus')
file.close()
Tímto způsobem můžeme vytvářet soubory. Ale jak vidíte, je to poměrně krkolomné. Výhodnější bude když si pořídíme nějaké vývojové prostředí, které se o zápis souborů postará za nás. Vývojových prostředí jsem vyzkoušel několik. Nejpropracovanější a nejvíce rozvíjené jsou teď asi dvě.
Lua loader - aplikace pro Windows (funguje i na Linuxu od Wine)
ESPlorer - multiplatformní aplikace, vyžaduje Javu verze 8. Funguje na WIN i Linuxu.
V příštím díle si ukážeme základy syntaxe jazyka LUA a API NodeMCU firmwaru.
23. prosince 2014
ESP8266: WI-FI a internet do každého zařízení II.
V tomto článku popíšu jak do ESP8266, konkrétně modulu verze ESP-01 (do ostatních verzí to bude podobné) nahrát alternativní firmware. Já jsem začal používat firmware NodeMCU. Tento firmware je podle mě asi nejdál ze všech. Včera byly k tomuto firmware zveřejněny i zdrojové kódy což jeho vývoj asi ještě urychlí. Tento firmware v sobě obsahuje skriptovací jazyk LUA. V tomto jazyce pak můžeme psát svoje vlastní programy.
Pozor, celý modul je napájen z 3.3V a GPIO porty netolerují napětí 5V. Odběr při komunikaci přes WIFI může být až 250mA a napájení z interního stabilizátoru USB převodníku nemusí stačit pro správnou funkci a je třeba použít externí napájení.
Modul zapojíme podle schématu. Zatím nepřipojujeme GPIO0 na zem a vyzkoušíme nejdříve nějakým terminálovým programem (např. Coolterm) zda nám modul komunikuje i s originálním firmware. Rychlost by měla být 115200 bd (u některých hodně starých verzí 57600 bd). Na AT+GMR by měl vrátit verzi fw.
Stáhneme aktuální firmware z:
https://github.com/nodemcu/nodemcu-firmware/tree/master/pre_build/0.9.4/512k-flash
Nejčastěji se vyskytují moduly s 512k flash pamětí, ale jsou k dispozici i pro jiné velikosti.
Nyní budeme potřebovat nějaký nástroj pro nahraní nového firmware.
Pro Linux např. https://github.com/themadinventor/esptool
Pro windows např. https://github.com/nodemcu/nodemcu-flasher
Modul připojíme podle schématu a GPIO0 připojíme na zem a a pak teprve připojíme napájení.
V linuxu použijeme příkaz:
./esptool.py -p /dev/<path-to-serial> write_flash 0x000000 nodemcu_512k.bin
Ve WIN nahrajeme aplikací.
Po odpojení GPIO0 a resetu napájení by měl modul začít komunikovat rychlostí 9600 bd.
Můžeme zkusit zadat příkazy pro připojení k WIFI a vypsání IP adresy.
Základní připojení k WIFI síti:
print(wifi.sta.getip())
--0.0.0.0
wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","password")
print(wifi.sta.getip())
--192.168.18.110
Modul by se měl připojit a získat IP adresu z DHCP serveru. Nyní můžeme začít vytvářet svoje vlastní programy.
V příštím díle si ukážeme jak s modulem efektivně komunikovat a jak vytvářet vlastní scripty.
Pozor, celý modul je napájen z 3.3V a GPIO porty netolerují napětí 5V. Odběr při komunikaci přes WIFI může být až 250mA a napájení z interního stabilizátoru USB převodníku nemusí stačit pro správnou funkci a je třeba použít externí napájení.
Zapojení modulu pro flash firmware |
Stáhneme aktuální firmware z:
https://github.com/nodemcu/nodemcu-firmware/tree/master/pre_build/0.9.4/512k-flash
Nejčastěji se vyskytují moduly s 512k flash pamětí, ale jsou k dispozici i pro jiné velikosti.
Nyní budeme potřebovat nějaký nástroj pro nahraní nového firmware.
Pro Linux např. https://github.com/themadinventor/esptool
Pro windows např. https://github.com/nodemcu/nodemcu-flasher
Modul připojíme podle schématu a GPIO0 připojíme na zem a a pak teprve připojíme napájení.
V linuxu použijeme příkaz:
./esptool.py -p /dev/<path-to-serial> write_flash 0x000000 nodemcu_512k.bin
Ve WIN nahrajeme aplikací.
Po odpojení GPIO0 a resetu napájení by měl modul začít komunikovat rychlostí 9600 bd.
Můžeme zkusit zadat příkazy pro připojení k WIFI a vypsání IP adresy.
Základní připojení k WIFI síti:
print(wifi.sta.getip())
--0.0.0.0
wifi.setmode(wifi.STATION)
wifi.sta.config("SSID","password")
print(wifi.sta.getip())
--192.168.18.110
Modul by se měl připojit a získat IP adresu z DHCP serveru. Nyní můžeme začít vytvářet svoje vlastní programy.
V příštím díle si ukážeme jak s modulem efektivně komunikovat a jak vytvářet vlastní scripty.
22. prosince 2014
ESP8266: WI-FI a internet do každého zařízení I.
Co je vlastně ESP8266 ? Modul pro převod sériové linky na WI-FI. Řeknete si, takových modulů na trhu je, ale tento se dá pořídit pod 5 USD. Ano, do 100 Kč včetně poštovného, pořídíte modul, který připojíte pomocí 4 vodičů ke stávajícímu zařízení a můžete komunikovat po WI-FI. Podporuje módy v b/g/n, zabezpečení WPA/WPA2 a umí pracovat jako Station nebo AP. Přisel na trh jaře tohoto roku jak jinak než z Číny. Na začátku byl k dispozici jen čínský datasheet a nic moc informací. Nyní na internetu kupa informací a je uvolněno SDK a tím pádem je možné psát vlastní firmware. A také s několik alternativních firmware již objevilo. Ty to posouvají o hodně dál. Už není třeba připojovat další MCU, ale lze celý modul využít samostatně. Co vím tak jsou k dispozici například - Nodemcu LUA, Nodelua, Frankenstein, Micropython. Některé jsou ještě hodně syrové. Nejdále je momentálně asi Nodemcu LUA.
U všech věcí kolem ESP8266 probíhá momentálně bouřlivý vývoj. Hodně informací je možné nalézt na fóru esp8266.com.
V příštím článku článku popíšu jak do modulu nahrát alternativní firmware, konkrétně Nodemcu LUA a vytvořit jednoduché zařízení připojené do internetu.
Různé verze, dnes jich je k dispozici asi 12 |
Zapojení vývodů ESP-01 |
V příštím článku článku popíšu jak do modulu nahrát alternativní firmware, konkrétně Nodemcu LUA a vytvořit jednoduché zařízení připojené do internetu.
5. listopadu 2014
Let bálonu CDJ-1
Po zkušenostech z vývoje trackerů pro Stratocaching jsem se rozhodl vypustit vlastní balón. Nejlevnější a nejschůdnější se mi jevila varianta PICO balónu. Jedná se párty balón o průměru 36" a trackerem co nejnižší hmotnosti. V zahraničí létá poměrně hodně balónů této kategorie, protože pro ně není třeba žádné povolení. Tracker je zařízení, které dokáže vysílat udaje o poloze balónu pomocí GPS a vysílače (v našem případe 430MHz a RTTY a CW). Já jsem použil Picotracker v 3.1, který vychází z trackeru Radima OM2AMR z stsproject.net (stejný tracker letěl už 2x při Stratocahingu). Tracker obsahuje vysílač postavený na RFM22b pro pásmo 430 MHz, GPS uBlox MAX 7 a procesor ATMEGA328. Celý systém je napájen z jedné AA baterie Energizer Lithium Ultimate a měniče na 1.8V. Klíčovou věcí celého trackeru je spotřeba. Podařilo se mi implementovat power save mode pro GPS a tím ještě ušetřit docela dost energie. Anténa 1/4 GP a výkon byl nastaven na 20mW. Celý projekt je Open Source a je možné si ho stáhnout na GITHubu.
Start byl naplánován na sobotu 1.11.2014 z QTH OL7C na Blatenském vrchu. Počasí přálo. Balón jsem nafoukl héliem na tah 2g. To by mělo zaručit, že vystoupá do 5-6 km a poletí v takzvaném floatu. Startovní hmotnost trackeru byl 29g. Start se podařil.
Ihned po startu jsem začal dekódovat telemetrii. Po vystoupání začalo přijímacích stanic přibývat. Program pro příjem (DL-FLDIGI) odesílá data na internet a aktuální polohu balónu lze sledovat na spacenear.us/tracker. Balón přeletěl celou republiku a pak pokračoval směrem do Polska. Během letu ho přijímaly stanice z OK,OM,SP, DL. Po 39 hodinách a 24 minutách letu nad SP se tracker odmlčel. Baterie v tu dobu měl už jen 0.75V. Za tu dobu balón uletěl 832km. V následujících grafech je vidět kompletně průběh letu.
Pro příští start se chystám ještě snížit hmotnost a spotřebu trackeru.
Děkuji všem, kteří balón sledovali a hlavně Radimovi OM2AMR z stsproject.net za cenné rady k celému projektu.
Tracker těsně před uzavřením |
Dráha letu |
Napětí baterie a teplota |
Výška, rychlost |
Výška teplota |
Děkuji všem, kteří balón sledovali a hlavně Radimovi OM2AMR z stsproject.net za cenné rady k celému projektu.
29. října 2014
Sledovaní balónů pomocí RTL-SDR na Linuxu
Nejdříve je třeba rozchodit RTL-SDR:
apt-get install rtl-sdr
Do souboru /etc/modprobe.d/blacklist.conf přidáme řádek:
blacklist dvb_usb_rtl28xxu
Otestujeme pomocí:
rtl_test
Nainstalujem GQRX:
apt-get install gqrx-sdr
Příjem máme vyřešen. Pro dekódování potřebujeme DL-FLDIGI, cože je upravená verze FLDIGI. Ta obsahuje komunikaci s serverem a před nastavené parametry pro dekódování konkrétního letu. Instalace DL-FLDIGI na Ubuntu je detailně popsána zde. Je třeba ho kompilovat ze zdrojových kódů.
Dále je třeba vyřešit propojení audio cesty z výstupu GQRX do vstupu DL-FLDIGI. Jedna z možností je použít propojovací kablík mezi vstup a výstup zvukovky. Na systémech se zvukovým systémem alsa by mělo jít vytvořit virtuální propojení pomocí alsa-loop. Na systémech s pulse audio lze požít pavucontrol.
Konfigurace DL-FLDIGI je detailně popsána zde (Slovensky nebo Anglicky).
31. srpna 2014
Upgrade miniVNA - Bluetooth modul
Vlastním staří model miniVNA a jsem s ním spokojen. Při měření venku mi vadí nosit s sebou notebook. Dan YO3GXX vytvořil SW pro Android a popsal na svých stránkách úpravu miniVNA pro připojení přes Bluetooth. Jeho úprava je dost radikální a už dále neumožňuje používat USB připojení kabelem. Já se snažil o co nejlevnější a nejednodušší úpravu s co nejmenším zásahem do miniVNA.
Co budeme potřebovat ? Základem je Bluetooth modul HC-06 s i s adaptérem. Dá se koupit např. na EBay za cca 5 USD.
Protože miniVNA používá komunikační rychlost 115200 bd, a modul má výchozí nastavení 9600. Je třeba ho nejdříve přenastavit. To uděláme pomocí převodníku USB UART TTL a nějakého terminálového programu.
Co budeme potřebovat ? Základem je Bluetooth modul HC-06 s i s adaptérem. Dá se koupit např. na EBay za cca 5 USD.
Bluetooth modul HC-06 s adaptérem |
Je třeba do modulu poslat tento AT příkaz pro změnu rychlosti:
AT+BAUD2
Odpověď by měla být OK115200.
Dále můžeme změnit jméno zařízení pomocí AT+NAMEminivna.
Tím je Bluetooth modul připraven.
Nyní už nám jen zbývá do volného prostoru umístit Bluetooth modul a připojit napájení na J6 a RX, TX Bluetooth modulu na J4. Dále je třeba do krabičky z boku.vyvrtat otvor aby přepínač byl přístupný i po zavření krabičky. Mezi USB a Bluetooth připojením volíme tímto přepínačem.
V Android marketu stáhneme aplikaci a nainstalujeme. V telefonu nebo tabletu spárujeme Bluetooth a můžeme začít používat.
MiniVna rozebereme. Původní miniVna umožňovalo kromě USB připojení tak připojení pomocí sériové linky RS232. K přepínání slouží posuvný přepínač, který přepíná RX,TX procesoru mezi USB a sériovou linkou. Ten využijeme. Pro sériovou linku byl na desce převodník MB3221. Ten je potřeba z desky odstranit (horký vzduch nebo jednoduše odřezat nožičky nožem a pak vyčistit licnou). To je jediný radikálnější zásah.
Odstraněný MB3221 |
Dále je připojíme přepínač na původní konektor, který sloužil pro připojení sériové linky.
Propojení na konektor sériové linky. |
Finální připojení modulu |
Ukázka obrazovky aplikace |
Nyní máme v miniVNA zachované obě varianty připojení. Jednoduchou úpravou jsme si rozšířili možnosti hlavně při měření venku. Pokud miniVNA používáme v dílně přes USB kabel stačí jen přepnout přepínač. Pro napájení bezdrátové verze používám power banku určenou pro nabíjení mobilních telefonů.
10. srpna 2014
Programátor ATTiny4/5/9/10/20/40
ATTiny4/5/9/10/20/40 jsou nejmenší procesory z rodiny AVR od firmy ATMEL. Občas se hodí nějaký úplně malinký MCU v malém pouzdře třeba SOT23-6. Pro tvorbu SW je možné použit assemblem v AVR studiu. Trošku problém je, že tyto MCU využívají programovací rozhraní TPI. Na internetu je návod jak naprogramovat tyto MCU jen pomocí FTDI převodníku a AVRDude. Programování je velmi pomalé (desítky vteřin na 1kb) a funguje jen pod linuxem se speciální verzí AVRDude. Já jsem využil jinou možnost a to programovaní pomocí dnes hodně rozšířeného Arduina. Vytvořil jsem destičku (shield), která jde nasadit přímo na Arduino UNO. Umožňuje připojit ATTiny4/5/9/10 přimo položením na desku (přichycením např kolíčkem) nebe přes redukci na DIP. Pro větší MCU s rozhraním TPI jsou vyvedeny signály na konektoru.
Konstrukce je velmi jednoduchá. Pokud chceme použít všechny vývody je třeba zakázat RESET na MCU. Pro opětovné programovaní pak musíme použít HV programovaní. Přepínač mezi LV a HV programováním je umístěn na desce. Arduino je třeba pak napájet z 12V.
Programovací SW pro Arduino umí jen několik základních příkazů. Po připojení MCU by se měl na sériové lince (rychlost 9600) objevit:
NVM enabled
Potom jsou zadávat příkazy:
D = dump memory, vypíše paměť MCU
E = erase chip. Smaže MCU
P = write program. Programuje MCU, po zadaní tohoto příkazu pošlete HEX soubor po sériové lince (stačí vložit ze schránky)
S = set fuse. Nastavuje pojistky
C = clear fuse.Maže pojistky
H = zapne HV programování
T = přepíná jestli je HV programovaní při log 0 nebo 1
R/r = reset
Kompletní balík s programem pro Arduino a soubory pro Eagle si můžete stáhnout zde.
Stavebnici je možné zakoupit na Hamshop.cz.
Schéma zapojení |
Plošný spoj |
Programovací SW pro Arduino umí jen několik základních příkazů. Po připojení MCU by se měl na sériové lince (rychlost 9600) objevit:
NVM enabled
Potom jsou zadávat příkazy:
D = dump memory, vypíše paměť MCU
E = erase chip. Smaže MCU
P = write program. Programuje MCU, po zadaní tohoto příkazu pošlete HEX soubor po sériové lince (stačí vložit ze schránky)
S = set fuse. Nastavuje pojistky
C = clear fuse.Maže pojistky
H = zapne HV programování
T = přepíná jestli je HV programovaní při log 0 nebo 1
R/r = reset
Kompletní balík s programem pro Arduino a soubory pro Eagle si můžete stáhnout zde.
Stavebnici je možné zakoupit na Hamshop.cz.
23. května 2014
Kde vyrábím plošné spoje ?
Poslední dobou přišlo větší množství dotazů na to jak a kde si nechávám vyrábět plošné spoje. Zkusím tady popsat jednotlivé služby, které využívám. Jedná se výhradně o zahraniční služby. Bohužel vzhledem k cenám a různým poplatkům za přípravu výroby už žádné české výrobce nepoužívám. Pro srovnání ceny budu uvádět cenu dvouvrstvé prokovené desky 5x5 cm s potiskem a maskou včetně dopravy do ČR.
Americký výrobce. Produkuje plošné spoje ve výborné kvalitě. Objednání online na https://oshpark.com/.
Vstupní data bere ve formátu EAGLE nebo GERBER.
Cena 5 USD za čtvereční palec (2.54 x 2.54cm) a 3 ks. V ceně je i poštovné.
Cena za 1 desku 5x5 cm je 6.4 USD včetně poštovného.
Výhody:
Cena 9.9 USD za 5 x 5 cm a 10 ks. Poštovné se platí zvlášť. Cena poštovného pro tuto zásilku 8.13 USD
Cena 14 USD za 5 x 5 cm a 10 ks. Poštovné v ceně.
Americký výrobce. Produkuje plošné spoje ve výborné kvalitě. Objednání online na https://oshpark.com/.
Vstupní data bere ve formátu EAGLE nebo GERBER.
Cena 5 USD za čtvereční palec (2.54 x 2.54cm) a 3 ks. V ceně je i poštovné.
Cena za 1 desku 5x5 cm je 6.4 USD včetně poštovného.
Výhody:
- kvalita - špičková kvalita, desky jsou zlacené
- rychlost dodání - od objednání po doručení do ČR se doba pohybuje kolem 10-12 dní
- výroba umožňuje frézování uvnitř desky (sloty)
- bere rovnou formát EAGLE
- není hranice minimální velikosti desky, opravdu platíme jen za přesnou plochu
Nevýhody:
- vyšší cena
- k dispozici pouze fialová maska
Zhodnocení: Výborná služba, vhodná pro prototypy a velmi malé desky. Malé destičky vycházejí výborně cenově.
Výroba v Číně. Dobrá kvalita. Vstupní formát GERBER. Objednání online na https://www.seeedstudio.com/service/index.php?r=site/pcbService
Cena 9.9 USD za 5 x 5 cm a 10 ks. Poštovné se platí zvlášť. Cena poštovného pro tuto zásilku 8.13 USD
Cena za 1 desku 5x5 cm je 1.83 USD včetně poštovného.
Výhody:
Cena 9.9 USD za 5 x 5 cm a 10 ks. Poštovné se platí zvlášť. Cena poštovného pro tuto zásilku 3.9 USD
Výhody:
- nízká cena
- dobrá kvalita
- lze objednat i věší množství desek a cena pak mírně klesá
Nevýhody:
- doba dodání může dosáhnout i 1 měsíce
- vyšší cena poštovného
- zlacení, jiná barva masky jsou za příplatek
- pokud je deska menší než 5x5cm stejně zaplatíme jako za 5x5cm
- minimální odběr 10ks
Zhodnocení: Kvalitní služba vhodná pro menší série.
Výroba v Číně. Dobrá kvalita. Vstupní formát GERBER. Objednání online na
Cena 9.9 USD za 5 x 5 cm a 10 ks. Poštovné se platí zvlášť. Cena poštovného pro tuto zásilku 3.9 USD
Cena za 1 desku 5x5 cm je 1.38 USD včetně poštovného.
Výhody:
Výhody:
- nízká cena
- nízká cena poštovného
- dobrá kvalita
- lze objednat i věší množství desek a cena pak mírně klesá
- při objednání Open source desky dostanete 2 ks navíc zdarma
Nevýhody:
- doba dodání 3 týdny
- zlacení, jiná barva masky jsou za příplatek
- pokud je deska menší než 5x5cm stejně zaplatíme jako za 5x5cm
- minimální odběr 10ks
Zhodnocení: Shodná služba jako u Seeed studia, cena se liší pouze o cenu poštovného.
Seeed studio a Itead studio zřejmě používají stejnou továrnu pro výrobu. Kvalita desek je shodná.
Výroba v Číně. Nová služba. Zatím jsem ji použil 2x. Dle informací z internetu je občas problém s přesností soutisku potisku. Vstupní formát GERBER. Objednání online na http://dirtypcbs.com/
Zajímavé je, že barvy masky jsou bez příplatku. Dále se pak nemusíte nikde registrovat. O stavu objednávky chodí SMS nebo informace na Twitter.
Cena 14 USD za 5 x 5 cm a 10 ks. Poštovné v ceně.
Cena za 1 desku 5x5 cm je 1.4 USD včetně poštovného.
Výhody:
Výhody:
- nízká cena
- poštovné v ceně
- možnost výběru libovolné barvy masky za stejnou cenu
- možnost výroby šablony pro SMD k desce za 30 USD
Nevýhody:
- doba dodání 3 týdny
- pokud je deska menší než 5x5cm stejně zaplatíme jako za 5x5cm
- občas problematická kvalita potisku
- minimální odběr 10ks
Zhodnocení: Služba srovnatelná s ostatními. Pokud potřebujete levné desky s jinou barvou masky než zelenou tak doporučuji.
Celkově se tady ceny pohybují od 128 Kč do 28Kč za jednu desku 5x5 cm včetně dopravy do ČR. Nejrychlejší, nejkvalitnější, ale i nejdražší je Ohspark. Ceny čínských výrobců jsou prakticky vyrovnané. Při objednání z Číny je třeba počítat s delší dobou dodání. Samozřejmě je možné si připlatit za expresní přepravu, ale to už zase posouvá cenu hodně nahoru. Data pro čínské výrobce je třeba důkladně kontrolovat GERBER data. Pokud v nich bude nějaká chyba nikdo Vás na nic neupozorní a může se stát, že desky budou nepoužitelné.
23. dubna 2014
ARDUINO UNO DDS Shield verze 1.1
Před pár měsící jsem zde popsal DDS shield pro Arduino UNO. Teď je k dispozici nová verze, která přináší několik vylepšení. By přidán jumper JP2 pro uvolnění externího přerušení. Na tento problém, jsem narazil při vývoji SW pro WSPR maják, kde externí přerušení potřebuji. Dále byla přidána možnost možnost volby napájení jumperem, nyní lze napájet výstupní zesilovač přímo z pinu VIN Ardunina.
Stavebnici je možné zakoupit na Hamshop.cz.
Schéma zapojení |
Plošný spoj |
1. dubna 2014
Paperduino Tiny
Paperduino Tiny je velmi levná a snadno postavitelná Arduino kompatibilní deska s USB.
Paperduino Tiny nepoužívá plošný spoj, ale je celé postavené na tvrdém papíře. Místo plošného spoje si vytisknete šablonu a tu nalepíte na tvrdší papír a můžete stavět.
Kompletní návod, jak na to, najdete na paperduino.eu.
Paperduino Tiny nepoužívá plošný spoj, ale je celé postavené na tvrdém papíře. Místo plošného spoje si vytisknete šablonu a tu nalepíte na tvrdší papír a můžete stavět.
Kompletní návod, jak na to, najdete na paperduino.eu.
16. března 2014
Přijímač ADS-B z DVB-T tuneru (RTL-SDR) na Raspberry Pi
Vývoj SW pro SDR přijímače z DVB-T tunerů s čipem Realtek RTL2832U (RTLSDR) se poslední dobou posouvá velmi dopředu a je k dispozi spousta SW pro dekódování různých služeb. Tunery jsou k dostání velmi levně jak na eBay tak i v našich obchodech. Ve spojení s Raspberry Pi může vzniknout velmi levný přijímač ADS-B s www rozhraním. Já jsem použil tuner Sencor SDB 522RT. Pozor, ne každý tuner na 1090 MHz funguje.
Nejdříve je třeba rozchodit na Raspberry RTL-SDR.
Editujte /etc/modprobe.d/raspi-blacklist.conf a přidejte tam následující řádky:
blacklist dvb_usb_rtl28xxu
blacklist rtl_2832
blacklist rtl_2830
Tím se se zbavíme ovladačů z kernelu pro DVB-T. Je třeba udělat reboot.
Dále je třeba na instalovat potřebný SW pro běh a kompilaci:
sudo apt-get -y install git cmake build-essential libusb-1.0 libusb-1.0-0-dev libpulse-dev libx11-dev libpulse-dev libx11-dev python-pkg-resources qtcreator libtool autoconf automake libfftw3-dev
Stáhneme a zkompilujeme dump1090:
Nejdříve je třeba rozchodit na Raspberry RTL-SDR.
Editujte /etc/modprobe.d/raspi-blacklist.conf a přidejte tam následující řádky:
blacklist dvb_usb_rtl28xxu
blacklist rtl_2832
blacklist rtl_2830
Tím se se zbavíme ovladačů z kernelu pro DVB-T. Je třeba udělat reboot.
Dále je třeba na instalovat potřebný SW pro běh a kompilaci:
sudo apt-get -y install git cmake build-essential libusb-1.0 libusb-1.0-0-dev libpulse-dev libx11-dev libpulse-dev libx11-dev python-pkg-resources qtcreator libtool autoconf automake libfftw3-dev
Nyní budeme kompilovat RTL-SDR:
cd ~/
git clone git://git.osmocom.org/rtl-sdr.git
cd rtl-sdr
mkdir build
cd build
cmake ../ -DINSTALL_UDEV_RULES=ON
make
sudo make install
sudo ldconfig
cd ~/
git clone git://git.osmocom.org/rtl-sdr.git
cd rtl-sdr
mkdir build
cd build
cmake ../ -DINSTALL_UDEV_RULES=ON
make
sudo make install
sudo ldconfig
Stáhneme a zkompilujeme dump1090:
cd ~/
git clone https://github.com/antirez/dump1090.git
git clone https://github.com/antirez/dump1090.git
cd dump1090
make
Spustíme příkazem:
./dump1090 --net --enable-agc --interactive --metric
Na obrazovce terminálu uvidíme přijímaná letadla.
Sejmutá obrazovka při příjmu (originální anténa od tuneru umístěná v místnosti) |
Do www rozhraní se připojíme IP_adresa:8080. Tam pak vidíme letadla na mapě a po kliknutí na šipku se nám zobrazí podrobné informace.
Samozřejmě leze spustit dump1090 i na pozadí. Mě to zatím na Rapsberry poměrně často padá, ale jak jsem se dočetl na internetu je to problém napájení přes USB přímo z Rapsberry. Někdo to reší napájeným USB hubem. Někdo upravuje napájení přímo v Raspberry. Až toto vyřeším tak řešení popíšu... Určitě bude také dobré vyrobit anténu přímo pro pásmo ADS-B. Pokud máte někdo s příjmem ADS-B na RTL-SDR zkušenosti tak prosím pište do komentářů...
9. března 2014
AVR ATtiny fusebit doktor
Docela často pracuji s mikroprocesory AVR řady ATtiny. Občas se stává, že potřebuji použít vývod resetu jako I/O port (RSTDISBL) a pak procesor už nejde naprogramovat a nebo si špatně spočítám hodnoty pojistek a procesor také přestane komunikovat s programátorem. K resetu pojistek je třeba použít programátor, který podporuje HVP.Na internetu jsem objevil jednoduchý přípravek, který umí vrátit pojistky do výchozího stavu. Podporuje většinu obvodů řady ATtiny. Zapojení je velice jednoduché. Srdcem je ATtiny2313 a okolo je jen pár součástek.
Ovládání je velmi jednoduché. Stačí připojit procesor, který chceme vrátit do původního stavu a stisknout tlačítko START. Pokud vše proběhne jak má, rozsvítí se zelená LED.
Obsah procesoru včetně zdrojových kódů je na stránkách autora. Přípravek jsem si vyráběl hlavně por svoji potřebu, ale zbylo mi pár plošných spojů. Pokud by měl někdo zájem, je možné plošný spoj zakoupit na hamshop.cz.
Přidat popisek |
Přidat popisek |
Obsah procesoru včetně zdrojových kódů je na stránkách autora. Přípravek jsem si vyráběl hlavně por svoji potřebu, ale zbylo mi pár plošných spojů. Pokud by měl někdo zájem, je možné plošný spoj zakoupit na hamshop.cz.
12. ledna 2014
ARDUINO UNO DDS Shield
Momentálně se dají koupit levné osazené DDS moduly s AD9850. Tak vznikl tento Shield s DDS pro Arduino UNO. Kromě prostoru pro DDS modul je zde také oddělovací zesilovač, který je schopný dát podle kmitočtu 2-3 Vpp do 50 Ohm zátěže. Dále je zde dělička s 74AC74 plánovaná pro IQ výstup pro SDR (plánuji další desku s jednoduchým SDR podobným Softrocku). Shield jde přímo nasadit na Arduino UNO. Je možné ho použít jako signální generátor, VFO nebo třeba jako QRSS nebo WSPR maják. Tento DDS Shield je také kompatibilní s projektem OCCAM od M0XPD, který vyšel v minulém SPRATu.
Osazení je jednoduché. Nejdříve je třeba začít s SMD součástkami na spodní straně desky. Pak je třeba osadit všechny konektory a nakonec zapájet DDS modul. Pro DDS modul není možné použít konektory a je třeba ho zapájet co nejníže nad plošný spoj. Jinak ztratíme možnost přidávat nad desku další moduly (shieldy).
Seznam součástek:
Zde je ukázkový kód, který zinicializuje DDS modul a začne generovat 10 MHz. Další programy budou v budoucnu následovat. Je možné jich získat spoustu také na internetu.
Ukázkový kód pro Arduino:
/*
* A simple single freq AD9850 Arduino test script
* Original AD9851 DDS sketch by Andrew Smallbone at www.rocketnumbernine.com
* Modified for testing the inexpensive AD9850 DDS modules
* 9850 datasheet at http://www.analog.com/static/imported-files/data_sheets/AD9850.pdf
* Use freely
*/
#define W_CLK 2 // Pin 2 - connect to AD9850 module word load clock pin (CLK)
#define FQ_UD 3 // Pin 3 - connect to freq update pin (FQ)
#define DATA 4 // Pin 4 - connect to serial data load pin (DATA)
#define RESET 5 // Pin 5 - connect to reset pin (RST).
#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }
// transfers a byte, a bit at a time, LSB first to the 9850 via serial DATA line
void tfr_byte(byte data)
{
for (int i=0; i<8; i++, data>>=1) {
digitalWrite(DATA, data & 0x01);
pulseHigh(W_CLK); //after each bit sent, CLK is pulsed high
}
}
// frequency calc from datasheet page 8 = <sys clock> * <frequency tuning //word>/2^32
void sendFrequency(double frequency) {
int32_t freq = frequency * 4294967295/125000000; // note 125 MHz clock on 9850
for (int b=0; b<4; b++, freq>>=8) {
tfr_byte(freq & 0xFF);
}
tfr_byte(0x000); // Final control byte, all 0 for 9850 chip
pulseHigh(FQ_UD); // Done! Should see output
}
void setup() {
// configure arduino data pins for output
pinMode(FQ_UD, OUTPUT);
pinMode(W_CLK, OUTPUT);
pinMode(DATA, OUTPUT);
pinMode(RESET, OUTPUT);
pulseHigh(RESET);
pulseHigh(W_CLK);
pulseHigh(FQ_UD); // this pulse enables serial mode - Datasheet page 12 figure //10
}
void loop() {
sendFrequency(10.e6); // freq 10.00000 MHz
while(1);
}
Stavebnici je možné zakoupit na Hamshop.cz.
Osazení je jednoduché. Nejdříve je třeba začít s SMD součástkami na spodní straně desky. Pak je třeba osadit všechny konektory a nakonec zapájet DDS modul. Pro DDS modul není možné použít konektory a je třeba ho zapájet co nejníže nad plošný spoj. Jinak ztratíme možnost přidávat nad desku další moduly (shieldy).
Schéma zapojení |
Plošný spoj |
Pohled na spodní stranu plošného spoje |
Součástka | Hodnota |
C1 | 100nF |
C2 | 100nF |
C3 | 100nF |
C4 | 100nF |
IC1 | 74AC74D |
M1 | DDS Module |
OUT | BNC konektor |
Q1 | 2n2222 |
Q2 | 2n2222 |
R1 | 1k |
R2 | 100 |
R3 | 1k |
R4 | 470 |
Zde je ukázkový kód, který zinicializuje DDS modul a začne generovat 10 MHz. Další programy budou v budoucnu následovat. Je možné jich získat spoustu také na internetu.
Ukázkový kód pro Arduino:
/*
* A simple single freq AD9850 Arduino test script
* Original AD9851 DDS sketch by Andrew Smallbone at www.rocketnumbernine.com
* Modified for testing the inexpensive AD9850 DDS modules
* 9850 datasheet at http://www.analog.com/static/imported-files/data_sheets/AD9850.pdf
* Use freely
*/
#define W_CLK 2 // Pin 2 - connect to AD9850 module word load clock pin (CLK)
#define FQ_UD 3 // Pin 3 - connect to freq update pin (FQ)
#define DATA 4 // Pin 4 - connect to serial data load pin (DATA)
#define RESET 5 // Pin 5 - connect to reset pin (RST).
#define pulseHigh(pin) {digitalWrite(pin, HIGH); digitalWrite(pin, LOW); }
// transfers a byte, a bit at a time, LSB first to the 9850 via serial DATA line
void tfr_byte(byte data)
{
for (int i=0; i<8; i++, data>>=1) {
digitalWrite(DATA, data & 0x01);
pulseHigh(W_CLK); //after each bit sent, CLK is pulsed high
}
}
// frequency calc from datasheet page 8 = <sys clock> * <frequency tuning //word>/2^32
void sendFrequency(double frequency) {
int32_t freq = frequency * 4294967295/125000000; // note 125 MHz clock on 9850
for (int b=0; b<4; b++, freq>>=8) {
tfr_byte(freq & 0xFF);
}
tfr_byte(0x000); // Final control byte, all 0 for 9850 chip
pulseHigh(FQ_UD); // Done! Should see output
}
void setup() {
// configure arduino data pins for output
pinMode(FQ_UD, OUTPUT);
pinMode(W_CLK, OUTPUT);
pinMode(DATA, OUTPUT);
pinMode(RESET, OUTPUT);
pulseHigh(RESET);
pulseHigh(W_CLK);
pulseHigh(FQ_UD); // this pulse enables serial mode - Datasheet page 12 figure //10
}
void loop() {
sendFrequency(10.e6); // freq 10.00000 MHz
while(1);
}
Stavebnici je možné zakoupit na Hamshop.cz.
Přihlásit se k odběru:
Příspěvky (Atom)