Sestavený www server z kitu EvB 4.3, obsahujícího AVR ATmega32 a síťového modulu AND-ETH v2
Co vše budeme potřebovat ?
Pro zdárné sestavení a oživení webového serveru s kitem EvB 4.3 budeme potřebovat následující díly a moduly :
- vývojový kit EvB 4.3 osazený ATmega32 nebo ATmega644p [1][2]
- modul síťového (ethernet) rozhraní AND-ETH s obvodem ENC28J60 [2]
- min. 6 ks propojovacích vodičů [2]
- volnou přípojku do internetu
- programovací prostředí BASCOM
Jak je zřejmé z předchozího odstavce, použijeme zdrojové kódy pro webový server, vytvořené v jazyce BASIC v programovacím prostředí BASCOM [3]. V tomto případě ovšem nevystačíme s DEMO licencí, neboť výsledný přeložený kód má kolem 16 kB (demoverze nabízí pouze 2 kB, popř. 4 kB). Touto velikostí je také pro webový server nevyhovující mikrokontrolér ATmega16, se kterým sice lze realizovat první pokusy se síťovým rozhraním [4], ale pro skutečný www server je jeho kapacita paměti malá.
Síťový modul AND-ETH v2
Velmi vhodným a zajímavým doplňkem kitu EvB je modul síťového rozhraní AND-ETH, osazený obvodem ENC28J60 – obr. vlevo. Tento obvod, jehož blokové schéma je na obr.2, komunikuje s libovolným (v našem případě Atmel AVR) mikrokontrolérem pomocí sériového rozhraní SPI. Obvod má vše potřebné pro splnění specifikace IEEE 802.3. Obsahuje nutné mechanismy pro filtrování příchozích paketů, obsahuje taktéž interní DMA jednotku pro rychlý tok dat a hardwarovou podporu výpočtu kontrolních součtů. Komunikace je zajištěna pomocí dvou přerušení a SPI sběrnice na standardní rychlosti síťového rozhraní 10 Mbps. Obvod má dva výstupy pro LED – zelenou a žlutou, které jsou vestavěny v konektoru RJ45 spolu s oddělovacím a převodním transformátorem.
Pro tento modul ve spojení s vývojovým kitem EvB existují vzorové příklady a aplikace jak pro prostředí BASCOMu (Basic), tak i WinAVR (GNU GCC) (jazyk C) – webový server, FTP, (S)NTP protokol pro zjišťování přesného času pomocí serverů, vysílající přesnou časovou informaci. Můžete používat i svoje vlastní spojení pomocí TCP paketů a UDP datagramů.
Modul AND-ETH je nastaven pro používání s logickými úrovněmi 5 V (odvozeno od napájecího napětí 5 V). Deska modulu však obsahuje stabilizátor napětí, který lze deaktivovat propojením dvou plošek a modul tak může pracovat s napájecí napětím i logickými úrovněmi 3,3 V. Modul používá pro připojení 10pinový konektor (2 x 5 pinů v klasickém rastru 2,54 mm). Na spodní straně DPS každého modulu je popsána funkce a přiřazení pinů.
Obr. 2: Blokové schéma obvodu ENC28J60
Začínáme …
Jako první krok doporučuji instalaci prostředí BASCOMu. Program lze koupit přímo na stránkách výrobce [5] jako tzv. download verzi za cenu 89 EUR. Bohužel bez instalace BASCOMu v plné verzi nemůžeme dále pokračovat.
Nyní se budeme věnovat hardwaru. Přichystáme si minimálně 6 ks propojovacích vodičů. Zde je kritická jejich délka, vzhledem k rychlosti komunikace po SPI sběrnici. Pokud použijeme originální, je to v pořádku, využíváte-li svoje, délka vodičů by neměla překročit 15 cm. Osobně jsem zkoušel délku propojovacích vodičů cca 29 cm, s touto délkou již ale nefungovala komunikace pro kit EvB a ETH modul. Další vodiče budeme potřebovat v případě využití rozšířených funkcí, tedy 1 ks na spojení s teplotním čidlem, 1 ks pro spojení s kontrolní LED a 6 ks vodičů pro připojení LCD displeje.
Modul AND-ETHv2 a kit EvB 4.3 zapojíme následovně:
AND-ETH | kit EvB |
---|---|
pin 4 - SO | PB6 - MISO |
pin 5 - SI | PB5 - MOSI |
pin 6 - SCK | PB7 – SCK |
pin 7 - /CS | PB4 - /SS |
pin 9 - Vcc | +5VDC |
pin 10 - GND | GND |
Pro čtení teploty a případně i pro ladění doporučuji ještě zapojit LCD displej, teplotní čidlo DS18B20 a jednu LED pro kontrolu běhu programu následovně:
ATmega 32 (644p) | LCD - kit EvB |
---|---|
PC7 | D7 |
PC6 | D6 |
PC5 | D5 |
PC4 | D4 |
PC3 | E |
PC2 | RS |
DS18B20 připojte na PD4
libovolnou LED připojte na PB0
Touto konfigurací máme připraven jednak modul AND-ETH a také základní zapojení pro otestování funkčnosti propojení teplotního čidla a LCD displeje vzorovou aplikací, která je v mikrokontroléru nahrána, popř. si ji můžete stáhnout ze stránek prodejce kitu [6].
Testujeme správné nastavení prostředí BASCOMu
Pokud nám v tomto propojení vodičů pracuje originální program, distribuovaný s novými kity (ke stažení dle příslušného typu mikrokontroléru zde [6]), vidíme nápis „Program testowy“ a potom zobrazení hodin, RC kódu (pouze verze ATmega32) a teplotu, jenž koresponduje s obvyklou teplotou okolí, můžeme se pustit do úpravy programu pro webový server. Zde bude nyní záležet na tom, jaký typ programátoru použijeme.
Máme-li k dispozici jeden z následujících programátorů, bude situace snažší:
- AVR ICP910 based on the AVR910.ASM application note
- STK200 ISP programmer from Atmel
- The PG302 programmer from Iguana Labs
- The simple cable programmer from Sample Electronics
- KITSRUS KIT122 Programmer
- MCS Universal Interface Programmer
- STK500 programmer and Extended STK500 programmer.
- Lawicel BootLoader
- USB-ISP Programmer
- MCS Bootloader
- PROGGY
Osobně doporučuji STK500 a jeho klony, dostupné taktéž na [2]. Je to rychlý, ověřený a spolehlivý programátor. Pokud tedy vlastníme jedno z těchto zařízení, zvolíme ho z hlavního menu Options->Programmer a vybereme z nabídky. Nastavíme patřičné údaje, předpokládám proto již určitou obecnou znalost prostředí, programování a hlavně programátoru, který používáme. Např. u programátoru STK500 volíme COM port, na který je programátor připojen a dále cestu k programovacímu SW pro STK500, tedy většinou složku s instalovaným AVR Studiem, např. "D:\Program Files\Atmel\AVR Tools\STK500\Stk500.exe" – obr.3
Obr. 3: Nastavení programátoru STK500 v prostředí BASCOMu
Pokud programátor nemáme, nevadí, všechny mikrokontroléry jsou v kitu EvB předprogramovány tzv. bootloaderem, ovládaným pomocí programu AND-Load. Tento program je dostupný na stránce podpory prodejce [6]. Potřebujete poslední verzi – ver. 3.2, kterou lze ovládat pomocí příkazového řádku. Stáhneme program do počítače a umístíme EXE soubor do známé složky. Dále zvolíme v prostředí BASCOMu hl. menu Options->Programmer a vybereme External programmer. Na záložce „Other“ zadáme cestu k programu AND-Load a vyplníme pole Parameter. Důležité je zvolit možnost „Use HEX file“, neboť BASCOM po kompilaci standardně vytvoří soubor BIN, nikoli HEX, který je pro AND-Load program nutný – obr. 4, v tomto případě je EvB kit připojen na COM7.
Obr. 4: Nastavení Externího programátoru - AND-Load programu, využívajícího bootloader pro vývojový kit EvB 4.3
Správnou funkci nastavení prostředí BASCOMu a propojení mikrokontroléru s LCD displejem, teplotním čidlem a kontrolní LED ověříme nejdříve jednoduchým programem, který si můžete stáhnout v příkladech [7].
$regfile = "m32def.dat"
'$regfile = "m644def.dat"
$crystal = 16000000
'Zapojeni LCD pinu do mikrokontroleru
' BL = PortC.1
' Rs = PortC.2
' E = PortC.3
'Db4 = PortC.4
'Db5 = PortC.5
'Db6 = PortC.6
'Db7 = PortC.7
Config Lcdpin = Pin , Rs = Portc.2 , E = Portc.3 , Db4 = Portc.4 , Db5 = Portc.5 , Db6 = Portc.6 , Db7 = Portc.7
Config Lcd = 16 * 2
Config 1wire = Portd.4 'pripojeni teplotniho cidla DS16B20
Config Portb.0 = Output
Led Alias Portb.0
'pro teplomer
Dim Temp(9) As Byte
Dim X As Byte
Dim Celsius As Integer
Dim T As Single
Set Portc.1
Cls 'smaz LCD display
Lcd "Hello world." 'zobraz do horniho radku
Wait 3
Cls
Locate 1 , 1
Lcd "Teplota"
Cursor Off
Do
Set Led
1wreset
1wwrite &HCC
1wwrite &H44
Waitms 400
Reset Led
Waitms 400
1wreset
1wwrite &HCC
1wwrite &HBE
For X = 1 To 9
Temp(x) = 1wread()
Next
Celsius = Makeint(temp(1) , Temp(2))
T = Celsius / 16
Locate 2 , 1
Lcd Fusing(t , "##.#") + " C"
Loop
Program nedělá nic světoborného – nejdříve definujeme správný typ mikrokontroléru, správný kmitočet řídicího oscilátoru, pomocí Config nastavíme připojení LCD, čidla teploty na 1wire sběrnici a port B0 nastavíme jako výstupní – je na něm zapojena kontrolní LED. Vypíšeme na LCD klasickou hlášku „Hello world“ a potom do horního řádku zobrazíme text „Teplota“ a do spodního periodicky zasíláme po 1-wire sběrnici požadavek na čtení teploty, blikneme s LED, přečtenou teplotu převedeme, naformátujeme a zobrazíme. Tímto ověříme správné zapojení.
Před samotnou kompilací pomocí F7 je nutné na prvním nebo druhém řádku zdrojového souboru správně nastavit, zda se jedná o kompilaci programu pro mikrokontrolér ATmega32 nebo ATmega644 – direktiva „$regfile”. Pomocí apostrofu označte řádek, který se nepoužije. Dokud se Vám nepodaří úspěšně přeložit (stiskem F7) a naprogramovat (stiskem F4) mikrokontrolér, je zbytečné se pouštět do oživení projektu www serveru.
Spouštíme www server
Testovací program se podařilo oživit, na displeji se vypisuje teplota a pravidelně bliká LED. Nastává závěrečná část pokusu. Stáhněte si do složky s Vašimi BASCOM projekty následující dva soubory [7] – jeden je soubor BAS s www serverem (m32_www_server.bas), druhý je definiční soubor (enc28j60.inc) pro ethernetový řadič, použitý v modulu AND-ETH. Soubory jsou umístěny v archivu zde. Najdete je také na [6] v sekci Příklady ze zveřejněných článků. Oba soubory je nutné mít ve stejné složce.
Úkolem www serveru je generovat obrazovku jako na obr. 5. Vidíte zde formulář, obsahující zadání hesla, dále list nabídek, datum, čas, teplotu a obsazený prostor TCP/IP zásobníku v paměti mikrokontroléru. Jednak musí www server generovat vlastní stránku na zobrazení, ta je uložena na samém konci zdrojového souboru – viz. dále, a také se www server snaží kontaktovat časový server SNTP a získat aktuální čas a datum.
Obr. 5: Výsledná stránka www serveru, vytvořeného kitem EvB 4.3 a modulem AND-ETH
Správná činnost serveru, založeného na tomto zdrojovém kódu, je podmíněna správným nastavením následujících tří síťových údajů (parametrů):
- IP adresy našeho serveru
- IP adresy časového serveru SNTP
- při použití routeru také jeho MAC adresy
Pro základní komunikaci s www serverem stačí nastavit pouze správnou IP adresu v rozsahu podsítě, kde je www server připojen. Nebudeme mít sice správně zobrazený čas ani datum, ale budeme moci ovládat LED při zadání správného hesla a stisknutí tlačítka „OK“. Na řádcích 313 – 316 vyplníme požadovanou IP adresu, kterou se bude modul hlásit v naší síti. Při správné činnosti serveru obdržíme na této adrese při použití příkazu PING samozřejmě odezvu. MAC adresa AND-ETH adaptéru se nastavuje na řádcích 304 – 309. Můžeme tam nechat původní hodnoty.
WWW server využívá nešifrovanou informaci z SNTP časových serverů. Bohužel jich stále ubývá, zůstávají většinou šifrované, ale přesto jsem nalezl ještě nějaké nešifrované. Následující IP adresa nešifrovaného serveru byla ověřena 31.10.2010, najdete ji na řádcích 936 – 939, zní 132.246.11.227 a PINGem si můžete ověřit její dostupnost. Aby k ní náš www server mohl přistupovat, nastavíme ještě MAC adresu routeru, na který se musí při pokusu navázat spojení – adresa je na řádcích 901 – 906.
Po kompilaci (F7) (připomínám pomocí $regfile na začátku programu nastavit správný typ mikrokontroléru – uvedený příklad je pro ATmega32) a naprogramování (F4) bude svítit na síťovém konektoru RJ-45 zelená LED, pokud spustíme příkaz PING na náš server, musí při dotazech periodicky problikávat žlutá dioda. Je-li vše v pořádku, můžeme do prohlížeče zadat IP adresu serveru a uvidíme zmíněnou obrazovku na obr.5. Heslo pro ovládání LED je na řádku 1147 a zní „asdfgh“. Při správném zadání hesla můžeme rozsvěcovat a zhasínat LED po stisku tlačítka „OK“. Pro ladicí účely program poskytuje taktéž výstup na sériovém portu EvB kitu, na který si můžete připojit terminál, nastavený na rychlost 19200 bd. Vše, co na terminálu uvidíte, je vypisováno příkazem „Print“.
Generovaná www stránka vychází z této předlohy, je umístěna na konci zdrojového kódu – od řádku 1373. Je samozřejmě na Vás, jak si ji upravíte, doporučuji však nastudovat HTML standardy, aby Vaší vygenerované stránce rozuměl příslušný prohlížeč:
' htmlcode
'
Htmlcode:
Data "HTTP/1.0 200" , &H0D , &H0A , &H0D , &H0A
Data "<html>"
Data "<head>"
Data "<meta content=" , &H22 , "no cache" , &H22 , " http-equiv=" , &H22 , "Pragma" , &H22 , ">"
Data "<title>EvB 4.3 s modulem AND-ETH v2</title>"
Data "</head>"
Data "<body vlink=" , &H22 , "#ffffff" , &H22 , " link=" , &H22 , "#ffffff" , &H22 , " alink=" , &H22 , "#ffffd0" , &H22 , ">"
Data "<form method=" , &H22 , "POST" , &H22 , ">"
Data "Heslo:<input type=" , &H22 , "password" , &H22 , " name=" , &H22 , "pass" , &H22 , "><br>"
Data "Akce:<select name=" , &H22 , "pole" , &H22 , ">"
Data "<option value=" , &H22 , "LEDON" , &H22 , ">LED zapnout</option>"
Data "<option value=" , &H22 , "LEDOFF" , &H22 , ">LED vypnout</option>"
Data "</select><br>"
Data "<input type=" , &H22 , "submit" , &H22 , " value=" , &H22 , "OK" , &H22 , ">"
Data "</form>"
'Data "<br>Aktualny stav:"
'Data "state "
Data "<br>Datum: "
Data "date "
Data "<br>Cas: "
Data "time "
Data "<br>Teplota: "
Data "temp "
Data "sizeused"
Data "</body>"
Data "</html>"
Data "endblock"
Interaktivitu (odesílání informací od uživatele k serveru) pomocí „Submit“ tlačítka ošetříte v části kódu 1105 – 1168, kde se analyzuje GET metoda, a tedy i obdržená data. Např. na řádku 660 je ošetřeno volání PING.
Pro hlubší studium a pochopení doporučuji tento článek [4] na webu Ben’s HobbyCorner, ze kterého taktéž uvedený příklad vychází a kde je postupně vysvětleno hodně ze síťové terminologie a práce s protokolem TCP/IP pro začátečníky. Najdete zde i jednodušší příklady, vysvětlující základy síťové komunikace, které lze zkoušet i na jednodušším mikrokontroléru ATmega16.
Článek ukázal velmi snadné řešení www serveru, založené na vývojovém kitu EvB, osazeném mikrokontrolérem ATmega32 nebo ATmega644p ve spojení s modulem síťového rozhraní AND-ETH. Zdrojový soubor celého serveru je napsán v jazyce Basic, takže je snadno pochopitelný pro všechny úrovně programátorů a tvůrců embedded systémů.
Vývojový kit i síťový modul si můžete objednat přes internet na adrese http://shop.onpa.cz/. Pro čtenáře HW serveru, kteří do 15.12.2010 uvedou do poznámky na objednacím formuláři heslo „HW server“ je připravena jednorázová sleva 100 Kč na USB programátor STK500v2 (cena programátoru po slevě je 399 Kč s DPH) při současném objednání vývojového kitu EvB 4.3 Mega32 nebo Mega644p v jedné objednávce. Dále můžete pořídit zvýhodněnou sestavu kitu EvB 4.3 a modulu síťového rozhraní AND-ETH – hledejte v e-shopu [2] nabídku „Zvýhodněné sestavy“. Při současném nákupu kitu EvB a modulu AND-ETH ušetříte až 150 Kč. Poštovné se při platbě předem a nákupu nad 1399 Kč neplatí.
Ondřej Pavelka
vyvoj@onpa.cz
www.onpa.cz
Literatura a odkazy :
[1] článek na HW serveru - http://hw.cz/teorieapraxe/programovani/art3679-hardwarove-pomucky-pro-podporu-vyvoje-aplikaci-s-mikrokontrolery-a
[2] e-shop s kity EvB a příslušenstvím - http://shop.onpa.cz/
[3] BASCOM-AVR – výrobce, http://www.mcselec.com/
[4] Ben’s HobbyCorner, http://members.home.nl/bzijlstra/software/examples/enc28j60.htm
[5] BASCOM – eshop, http://www.mcselec.com/index.php?page=shop.product_details&flypage=shop.flypage&product_id=86&category_id=5&option=com_phpshop&Itemid=1
[6] Podpora pro EvB kity a příslušenství - http://shop.onpa.cz/?podpora,28
[7] Příklady pro tento článek - http://shop.onpa.cz/index.php?priklady-kit-EvB-clanky,34
Komentáře
pěkný článek, jen tak
pěkný článek, jen tak dál. děkuji že tyto články píšete
Dobrý den prosím vás skoušeli
Dobrý den prosím vás skoušeli jsme to s kamarádem ale nejde nám to na atmegu644 idkyž prepíšeme typ procesoru hlásí to chybu na řádku 599 nemohli by jste nám nějak poradit ? emmail okosi@seznam.cz
Mac adresa routeru
Mohl/i by jste mi poradit jak převést mac adresu mého routeru:"74EA3AA29DA4" do správného formátu:
T_enetpacketdest1 = &H1C
T_enetpacketdest2 = &HF0
T_enetpacketdest3 = &H7E
T_enetpacketdest4 = &HE7
T_enetpacketdest5 = &HEE
Děkuji