Impulzus

 
A Budapesti Műszaki és Gazdaságtudományi Egyetem Villamosmérnöki és Informatikai Kar Hallgatói Képviseletének lapja
Random cikkajánló

Törd át korlátaid!

"Nem, nem akartam öngyilkos lenni ..."

Ha nincs Benedek, nincs szeretet!

"A Mester kezet fogott velem!"

Színes programnyelvekről álmodom

Álmomban a BME új angol szakán lettem tanár. Az angol szakra magyar nyelven felvételiztek a diákok. Nagy volt az érdeklődés, csak a legjobbak jutottak be az új angol szakra, amely méltán tekintette magát az ország elitszakjának.

Máshol

Otthonunkban a természet – bemutatkozik a TeOTT

A Villamoskari Hallgatói Képviselet

Schönherz 40 éves öregtalálkozó

A hagyományokat felelevenítendő, lehetőség lesz megint "fényesíteni a szoborot".

Sport hírek

Heltai Jenő: Altató mese egy ébresztőóráról

Krumplihámozó

Takarékos webszerver

A mikrokontrollerekkel, beágyazott rendszerekkel foglalkozó kollégák mindennapos problémája, hogy az általuk létrehozott eszköz hogyan kommunikáljon a nagyvilággal, mondjuk egy PC-vel. Az egyszerű és elterjedt megoldás a soros port: a legtöbb kontroller hardveresen támogatja. A soros porttal viszont sok baj van: lassú, nem ad tápot, a maximális vezetékhossz kicsi, és a legújabb hordozható PC-ken már nincs is soros port. Csak idő kérdése, és az asztali gépekről is eltűnik. A párhuzamos port hasonló eset: ugyan legalább egy nagyságrenddel gyorsabb, de cserébe több vezetéket kell bekötni, és szoftveresen kell lekezelni az adatátvitelt. Az USB egy nagy előrelépés: gyors, tápfeszültséget is ad, többféle adatátvitel közül is választhatunk. 2-3 ezer Ft-ért lehet beszerezni univerzális USB-illesztő IC-t, amely 8 bites buszra vagy i2c-re fordít. Sajnos a kis vezetékhossz itt is korlátozó tényező, ráadásul esetenként kénytelenek vagyunk PC oldali USB drivert írni.

Az igazán elegáns megoldás az Ethernet: mikrokontrolleres készülékünk egy százméteres UTP kábel végén lóg, és az adatokat (mérési eredményeket, vezérlési információkat) otthonról, egy webböngészőn keresztül nézegethetjük. Még tápegység sem kell a végpontra, hiszen a TX/RX vezetékpárok mellett marad még 4 vezeték, amibe tápot és földet patch-elhetünk, ez a PoE (Power over Ethernet). Lehet, hogy meglepően hangzik, de néhány ezer forintos költségvetésből, kommersz alkatrészekből gond nélkül össze lehet hozni az Ethernetet.

A jól ismert 8 bites PIC-ekkel kezdtem hozzá, ehhez illesztettem Realtek 8019-et. Ez utóbbi chipet 1500 Ft-ért lehet kapni, de akár le is lehet szedni egy régi hálókártyáról (hőlégfúvóval, borotvapengével, ami épp akad). Ethernet transzformátort sajnos nem lehet kapni kis tételben, úgyhogy itt szintén a kiforrasztás a módszer. Mivel a Realtek százlábú, ezért mindenképpen nyákot kell készíteni, a próbapanel nem praktikus. A képen látható 6x10 centis eszköz nyákja a V2-ben készült. Igazából csak a két soros port miatt ilyen nagy: ha a méretre optimalizáltam volna, és csak Ethernet lenne rajta, 3x4 centi is lehetne (kontroller a hátoldalon, a Realtek és egy RJ45-tel egybeépített transzformátor az előoldalon). Nyáktervezéshez Eagle-t használtam (szabadon letölthető, linuxos is van, kicsi, gyors, egyszerű).

Elmondható, hogy egy PIC-en működő minimális webszerverhez minden adva van: a gyártó, a Microchip honlapjáról letölthető a PicdemNet kapcsolási rajza és a Microchip TCP/IP forráskódja. Ha ezt valaki megépíti, biztosan sikerélménye lesz. A dolog akkor válik igazán érdekessé, ha a meglévő áramkört és a szoftvert átszabjuk a saját igényeink szerint, valamint kijavítjuk a hibákat. A TCP/IP kód szintén minimális méretű, nagyon sokat lehet belőle tanulni. Persze bug és strukturális hiba is akad benne, de nem ez a lényeg: segítségével gyorsan beleláthatunk a TCP/IP működésébe. Mitől stack a TCP/IP stack, hogyan ágyazódnak egymásba a különböző protokollok adathalmazai, melyik fejlécben van IP cím, és melyikben MAC address: ez mind-mind olyan információ, mely már ismerős valahonnan, de csak akkor érti meg igazán az ember, ha programozza is. Elméleti hálózatismeretünk alaposabb tudássá válhat ezen egyszerű és áttekinthető TCP/IP kód tanulmányozásával. Nézzük először, hogy a kapcsoláson mit kell módosítani:

– A Microchipnél rosszul tudják, hogy a TX és RX ledet hogy kell bekötni, fordított logikájú a kapcsoláson. Új alkalmazás fejlesztésénél zavaró, ha épp akkor világít egyszerre mindkét led, ha nincs adatforgalom.

– A Realtek INT0 lába be van kötve a PIC-re, de ezt a szoftver nem használja ki. Nem is tudná, mert szoftverből nem lehet interrupt módba kapcsolni a Realteket, ehhez egy soros EPROM-ot kell illeszteni hozzá (ez megvan minden hálókártyán, ebben tárolódik a MAC address is, és nem a Realtek-ben, ahogy a közhiedelem tartja).

– Ha mégis szeretnénk interruptot (ami sokkal elegánsabb megoldás, mint a ciklikus ellenőrizgetés, hogy jött-e adat), akkor megtehetjük, hogy bekötjük az EEDI, EEDO és EESK lábakat a kontrollerre. Így megtakarítjuk a 9346-ost, mert szoftverből szimulálhatjuk az adatátvitelét (128 byte, és csak bekapcsoláskor).

A kód sokkal több fejtörést okoz. Tényleg csak arra jó, amire kitalálták: a kísérletező kedvű fejlesztő letölti, kipróbálja, és örül. Először is írjunk át két konstanst az ICMP kódban valami 60-nál nagyobb értékre, hogy linuxról is lehessen pingetni az eszközünket! Érdemes bővíteni a meglévő TCPPut eljárást, hogy ne csak bájtosan lehessen adatot küldeni. Sajnos a PIC elég lassú jószág még 40 MHz-en is (hiába állítja a Microchip, hogy "high speed microcontroller", ne higgyük el nekik, gondolatban mindig osszuk el 4-gyel az órajelet). Módosítás nélkül a TCP adatküldésben 17 kByte/sec a csúcs, ezt könnyedén a két-háromszorosára növelhetjük. A legnagyobb probléma, hogy mindenre állapotgépet kell írni. Ha például kliens módban használom a stack-et (letöltök egy fájlt valahonnan), akkor nem tehetem meg, hogy egymás után hívogatom a TCPConnect, TCPPut, TCPGet eljárásokat. Ahhoz, hogy működjön a dolog, mindig vissza kell adni a vezérlést a fő ciklusnak, ahol lekezelődik az összes adatcsomag, és összeáll a TCP adatfolyam. Néhol még időzítésre is szükség van.

A TCP/IP beágyazott alkalmazásának az a nagy előnye, hogy nem eshet meg az a csúfság, hogy nagyobb sebességgel küldik az adatot, mint ahogy azt fel tudnánk dolgozni. A protokoll része ugyanis a csúszóablakos eljárás, azaz a fogadó oldal tájékoztatja a küldőt, hogy a következő lépésben maximálisan mennyi adatot tud fogadni. Az adatfolyam hibamentes is, gond esetén a fogadó nem ad ACK-ot, a küldő pedig újraküldi a csomagot.

Mai szemmel nézve a hardverigény nem túl nagy: egy PIC18F452-es kontrollerrel (32 kByte flash, 1,5 kByte RAM) bőségesen megoldható az Ethernet, ha nem túl összetett az alkalmazás, amit hálózatra kötünk. Ha azonban komplett hálózati alkalmazást fejlesztünk C-ben, akkor érdemes PIC18F6720-szal kezdeni (128 kByte flash, 3,5 kByte RAM). A webszerver kódja és memóriaigénye is kicsi, egyetlen korlátozó tényező a háttértár. Flash-ben vagy soros EEPROM-ban tárolhatjuk a page-et, ez utóbbinál ftp-vel tölthetjük fel az anyagot. Lehetőség van CGI scriptek futtatására is! Sajnos azok a PIC-ek, amikben 128 kByte flash van, nem mennek 40 Mhz-en, csak 25-ön. Van még mit fejlesztenie a Microchipnek... Némi szoftveres munkával kiválthatjuk a PIC programozó hardvert is: mivel ezek a kontrollerek önprogramozóak, ezért megtehetjük, hogy Etherneten keresztül töltünk le szoftverfrissítést!

Ha újra az alapoktól kezdve kellene Ethernetet építenem kontrollerből, valószínűleg nem PIC-kel tenném. Zavaró, hogy a PIC processzora lassú és elavult, a fejlesztőrendszere (Mplab) egészen gyakran produkál vicces hibákat, a hardveres debugger (ICD2) csak egy töréspontot támogat, meglepően lassan dolgozik, és a drivere is bugos (kilépek, belépek, kihúzom, bedugom, és már működik is).

Atmel Atmega 128 alapokra épül az Ethernut projekt, szabadon letölthető a kapcsolás és a real time operációs rendszer forráskódja is.

(http://www.ethernut.de)

Magáról a kontrollerről annyit, hogy gyorsabb, fejlettebb és olcsóbb, mint a PIC-es megfelelői. Neten sokféle megoldással találkozhatunk, például van abszolút minimálmegoldás is: az Ethernetet egy régi, ISA-s hálókártya képviseli, a kontroller lábait pedig közvetlenül kötik a csatlakozósorra :).

Remélhetőleg a fentiekkel sikerült meghoznom a kedvet a barkácsoláshoz, ha valakinek konkrét kérdése van a témában, mail-ben elérhet!

bereg@impulzus.com