Jste zde

Vývojový kit AVR EvB 4.3 jako www server za 5 minut

Obr01.jpg

Článek [1] seznámil čtenáře s možnostmi podpory různých výrobců pro vývoj aplikací s mikrokontroléry Atmel AVR. Zmíněny byly vývojové kity AVR Butterfly, AVR STK 500, Arduino a také kit EvB 4.3 ve své poslední revizi 4. Samotný kit EvB 4.3 obsahuje velké množství základních periférií, výrobce kitu EvB nabízí další rozšiřující moduly – např. modul s rozšiřujícími relé pro ovládání silnoproudých (230 VAC) aplikací, RFID modul včetně antény, barevný bodový LCD displej s joystickem a také síťový modul AND-ETH v2, který použijeme do zmiňovaného webového serveru, sestaveného a oživeného za 5 minut.

Sestavený www server z kitu EvB mega32 a síťového modulu AND-ETH v2

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

Síťový modul AND-ETH v2Velmi 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

Propojení modulu AND-ETHv2 a kitu EvB 4.3

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

Propojení pinů mikrokontroléru a LCD

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-po...
[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....
[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

 

PřílohaVelikost
Package icon EvB_www_server.zip12.09 KB
Hodnocení článku: 

Komentáře

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

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