St.-Jozefinstituut Geel
Geïntegreerde proef Microwebserver Elektuur Naam: Liekens Pieter-Jan 2008 – 2009
Klas: T3Ic6
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
2
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
St.-Jozefinstituut Geel
Geïntegreerde proef Microwebserver Elektuur Naam: Liekens Pieter-Jan 2008 – 2009
Klas: T3Ic6
3
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
Woord vooraf Ik ben Pieter-Jan Liekens, ik zit in het laatste jaar Industriële ICT. Voor ik in deze richting terecht kwam heb ik twee jaar elektriciteit elektronica gevolgd. Daarna werd ik op een opendeurdag in deze school geboeid door mijn huidige richting. Ik wil alvast de school bedanken dat ik deze opleiding heb mogen genieten, omdat deze richting als doorstroming bedoeld is en deze niet overal beschikbaar is. Graag zou ik nog enkele mensen willen bedanken. Thomas Smets, mijn klastitularis en begeleider in dit eindwerk. De persoon bij wie ik een heel jaar terecht kon voor vragen en oplossingen. Tim Vanstreels waar ik altijd bij terecht kon voor alle andere vragen. Ook wil ik Dirk Tormans bedanken voor de uitleg over I²c, Mevrouw Vandenboer en Ivo De Pooter voor het nakijken en verbeteren van dit dossier. Ten slotte wil ik ook mijn klasgenoten bedanken voor de steun tijdens dit schooljaar.
4
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
Samenvatting Het eindwerk dat ik gekozen heb behandelt een microwebserver uit het tijdschrift Elektuur. Het gaat hier over een Flexgate II -kit bestaande uit een microcontrollerbordje en een netwerkuitbreiding. Hierbij heb ik dan nog een I²C – uitbreiding toegevoegd. Doorheen het eindwerk ben ik verscheidene problemen tegengekomen. Dit gaande van hardwarematige problemen welke eenvoudig op te lossen zijn, tot softwarematige problemen waar de oplossing vaak niet zo voor de handliggend is (programmagrootte). De scriptie begint bij de blokschema’s waar kort de principiële werking en de praktische opbouw besproken wordt. Daarna komen we aan de bespreking van de hardware; waar het grootste deel van de hardware componenten besproken is. Ook worden de praktische verbindingen, de poorten, het geheugen enz. besproken. Vervolgens komen we aan de software. Dit gaat van de installatie van de programma’s tot het gebruik alsook de programmatie van de code.
5
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
1 Inhoudsopgave 1
INHOUDSOPGAVE ............................................................................................................6
2
FIGUREN ...........................................................................................................................7
3
TABELLEN .........................................................................................................................8
4
INLEIDING .........................................................................................................................9
4.1 4.2 4.2.1
Blokschema ......................................................................................................................9 Doelstellingen ................................................................................................................11 Opbouw .......................................................................................................................... 12
5
HARDWARE ....................................................................................................................13
5.1 5.1.1 5.2 5.3 5.3.1 5.3.2 5.4 5.4.1 5.4.2 5.4.3 5.4.4 5.4.5
Microcontrollerbord .......................................................................................................13 Geheugen ....................................................................................................................... 16 Netwerkuitbreiding ........................................................................................................19 I²C uitbreiding.................................................................................................................20 Schema ........................................................................................................................... 21 Board .............................................................................................................................. 23 I²C ...................................................................................................................................25 Het Concept .................................................................................................................... 25 Het protocol .................................................................................................................... 25 I²c definities .................................................................................................................... 26 I²C start stop condities ................................................................................................... 26 Databits geldigheid ......................................................................................................... 27
6
SOFTWARE .....................................................................................................................28
6.1 6.1.1 6.1.2 6.2 6.2.1 6.2.2 6.2.3 6.2.4
Installatie van de programma’s ......................................................................................28 Installatie µc51................................................................................................................ 29 Installatie TI downloader ................................................................................................. 31 Gebruik van de programma’s .........................................................................................32 Makewiz ......................................................................................................................... 32 Jfe editor......................................................................................................................... 33 Ti downloader ................................................................................................................. 35 Sld51 ............................................................................................................................... 37
7
PROGRAMMATIE ............................................................................................................38
7.1 7.1.1 7.2 7.2.1 7.2.2
C-code ............................................................................................................................38 Elm_flex.c ....................................................................................................................... 38 Html ...............................................................................................................................42 Home.html ...................................................................................................................... 42 Reply.html ...................................................................................................................... 46
6
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
8
STUKLIJST .......................................................................................................................47
9
LIJST MET GEBRUIKTE AFKORTINGEN .............................................................................47
10
LITERATUURLIJST ............................................................................................................48
11
BESLUIT ..........................................................................................................................50
2 Figuren Figuur 1: Principe-Blokschema ............................................................................................................9 Figuur 2: Standaard homepage microwebserver ............................................................................... 10 Figuur 3: Opbouw microwebserver ................................................................................................... 12 Figuur 4: Microwebserver hardware ................................................................................................. 13 Figuur 5: Nullmodemkabel ................................................................................................................ 14 Figuur 6: Microcontroller schema ..................................................................................................... 15 Figuur 7: Programma - grootte .......................................................................................................... 16 Figuur 8: Programma - geheugen adressering ................................................................................... 16 Figuur 9: Geheugenindeling .............................................................................................................. 17 Figuur 10: Netwerkkaart opgebouwd rond de CS8900 ...................................................................... 19 Figuur 11: PCF8574P 8 bits I/O expander .......................................................................................... 20 Figuur 12: Schema I/O Expander ....................................................................................................... 21 Figuur 13: Foto I²C-uitbreiding .......................................................................................................... 22 Figuur 14: Board I/O Expander .......................................................................................................... 23 Figuur 15: Sub-D kabel ...................................................................................................................... 23 Figuur 16: Connector aansluitingen ................................................................................................... 24 Figuur 17: I2C peripherals ................................................................................................................. 25 Figuur 18: I2C stopcondities .............................................................................................................. 26 Figuur 19: Datageldigheid ................................................................................................................. 27 Figuur 20: I2C klokcondities .............................................................................................................. 27 Figuur 21: CD Microwebserver .......................................................................................................... 28 Figuur 22: uC51 error ........................................................................................................................ 29 Figuur 23: uC51 admin rights ............................................................................................................ 29 Figuur 24: uC51 compatibiliteitsmodus ............................................................................................. 30 Figuur 25: Setup complete .............................................................................................................. 31 Figuur 26: Setup complete ................................................................................................................ 30 Figuur 27: Ti Downloader Complete .................................................................................................. 31 Figuur 28: Makewiz icoon ................................................................................................................. 32 Figuur 29: Makewiz venster .............................................................................................................. 32 Figuur 30: Select Mak file .................................................................................................................. 32 Figuur 31: Write JFE-Workspace File ................................................................................................. 33 Figuur 32: Jfe icoon ........................................................................................................................... 33 Figuur 33: Jens File Editor venster ..................................................................................................... 34 7
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
Figuur 34: I²C headers ....................................................................................................................... 34 Figuur 35: : Ti downloader icoon ....................................................................................................... 35 Figuur 36: Ti Downloader venster ..................................................................................................... 36 Figuur 37: Sld51 icoon ....................................................................................................................... 37 Figuur 38: Sld51 terminal venster...................................................................................................... 37 Figuur 39: Homepage microwebserver.............................................................................................. 42 Figuur 40: Html target ....................................................................................................................... 45 Figuur 41: Reply pagina microwebserver ........................................................................................... 46
3
Tabellen
Tabel 1: Flash grootte ....................................................................................................................... 17 Tabel 2: Flash bereik ......................................................................................................................... 18 Tabel 3: PCF8574P toewijzing............................................................................................................ 20 Tabel 4: I²C definities ........................................................................................................................ 26 Tabel 5: Downloader parameters ...................................................................................................... 35 Tabel 6: Stuklijst................................................................................................................................ 47
8
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
4 Inleiding 4.1 Blokschema
Figuur 1: Principe-Blokschema
Door een netwerkconnectie op te zetten tussen de microwebserver en een pc (lokaal of internet), kan men via een internetbrowser naar de homepage van de microwebserver surfen. Vanuit de homepage kunnen we communiceren met de microcontroller waardoor er I/O mogelijk is. Het sturen van gegevens over de I²C –bus met als doel, het aansturen van relais met daaraan bijvoorbeeld een waterkoker, koffiezet, lamp of zelfs verwarming.
9
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
Figuur 2: Standaard homepage microwebserver
Dit is de standaardwebpagina die in de microwebserver zit. Wanneer we op de link Online data klikken, kunnen we de temperatuur aflezen en de klok instellen. De volgende link is de Setup-pagina. Op deze pagina kunnen we leds aanschakelen welke zich op de microwebserver bevinden. Led 3 en 4 welke zich kunnen we dan op deze pagina met behulp van een vinkje aan- of uitschakelen. De volgende link opent een nieuw venster welke ons naar de producenten van het microcompiler programma stuurt. De laatste link opent eveneens een nieuw venster welke ons doorverwijst naar Texas Instruments. Dit zijn de makers van de microcontroller (welke centraal staat op onze microwebserver). In het eindwerk heb ik een eigen pagina ontworpen voor de microwebserver waarop ik mijn microwebserver kan aansturen. (Deze pagina is te bekijken in de programmatie van de software met bijbehorende screenshots en programmacode.) Over de I²C-bus van de microcontroller kunnen we data zenden. Deze data kan door middel van een extra printje relais gaan schakelen. Hierdoor zijn we in staat processen rechtstreeks op netspanning aan te sturen. Enkele toepassingen kunnen zijn, het aan- en uitschakelen van een lamp, koffiezet, waterkoker. Noem maar op, de mogelijkheden zijn eindeloos.
10
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
4.2 Doelstellingen Bij het maken van dit eindwerk had ik de volgende doelstellingen:
Dieper in de code van microwebserver gaan. o o
Een handleiding schrijven voor de microwebserver. o o
Vanaf de installatie, met behulp van screenshots; tot gebruik. Bespreking componenten.
Eigen pagina schrijven voor de microwebserver. o o
C HTML
Eventuele interfacepagina met eigen lay-out. Kennis Dreamweaver(HTML) uitbreiden.
Een print maken en deze aansturen via I²c. o o
Cursus zelfstudie programma Eagle. Eigen print boren, etsen.
Uiteindelijk is het idee om vanop afstand. - Een ander land, thuis of werk...- een proces the monitoren, toegang tot data te krijgen (aquiseren) en eventueel aan te passen. Voorlopig gaan we vanuit het lokale netwerk op de microwebserver werken. Ik zoek met dit eindwerk mijn kennis op vlak van hardware, netwerken en software te verruimen maar bovenal zelfstandiger te leren werken.
11
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
4.2.1 Opbouw
Figuur 3: Opbouw microwebserver
De opbouw bestaat uit drie grote delen. Het microcontrollerbord met bijbehorende netwerkuitbreiding en de I²C-Uitbreiding. Met behulp van de I²C-Uitbreiding zal ik in staat zijn tot 8 relais te sturen. Deze relais schakelen rechtstreeks 230V. Vanaf de pagina van de microwebserver kan ik dan rechtstreeks met behulp van een vinkje de desbetreffende relais in of uit – schakelen. Hier kan ik dan een waterkoker, koffiezet, verwarming, licht … met aan- en uitzetten.
12
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
5 Hardware
Figuur 4: Microwebserver hardware
De hardware bestaat uit twee delen. Het linkse deel is het microcontrollerbordje opgebouwd rond de MSC120 van Texas instruments. Het rechtse is de netwerkuitbreiding opgebouwd rond de CS8900A van Cirrus Logic. Samen vormen deze de Flexgate II Microwebserver van Elektuur. De print (figuur 4) is uitgevoerd met een ‘gaatjesbord-gedeelte’, zodat er buiten de ruimte op het MSC1210-bord extra mogelijkheden zijn voor eigen applicaties. Verder zijn er twee extra Leds en een drukknop op het LAN- bord geplaatst. De connector voor de verbinding met het ‘moederbord’ is precies zo neergezet dat de uitbreiding zowel naast als onder het bord geplaatst kan worden. In het laatste geval kunnen de twee printen met behulp van afstandsbusjes ‘gesandwiched’ worden. (Het geheel werkt op 7.5 – 9 V.) (De opbouw en totstandkoming van het microwebserverbordje worden slechts gedeeltelijk toegelicht omdat ik meer aandacht besteed heb in de werking en de programmatie.)
5.1 Microcontrollerbord De MSC1210 is de microcontroller. Deze vormt het middelpunt van onze webserver. In deze microcontroller zal het programma worden geladen met behulp van de seriële poort, een nullmodemkabel en enkele programma’s (JFE– editor om code aan te passen, en Ti-downloader voor het programma te uploaden). Deze poort, ook wel programmapoort genoemd maakt een verbinding met onze microcontroller door middel van het Rs232-protocol. De kabel, een zogenaamde nullmodemkabel zal de verbinding opstellen tussen de PC en het MSC1210-bord. Deze kabel heeft aan beide kanten een 9-polige vrouwelijke sub-D-connector. Verder zijn de verbindingen tussen 1 en 4, 2 en 3 en tenslotte 7 en 8 gekruist zoals te zien is in figuur 5.
13
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
Figuur 5: Nullmodemkabel
Bovendien zijn in beide connectoren aansluitingen 1 en 6 direct met elkaar verbonden. In de figuur is de pennummering van een 9-polige connector nog eens weergegeven (vooraanzicht) en is aangegeven hoe een nulmodemkabel gemaakt moet worden. Om er zeker van te zijn dat de juiste kabel wordt gebruikt, dienen de verbindingen altijd met een ohmmeter of geleidingstester gecontroleerd te worden.
14
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
Figuur 6: Microcontroller schema
15
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
5.1.1 Geheugen
In figuur 9 zien we een geheugenindeling zoals deze in de MSC121x toegepast wordt. De geheugenindeling van de microcontroller bestaat uit twee delen; “program memory” waar in onze C- en Assemblycode komen te zitten en het tweede deel “data memory” waar onze Html-code in komt te zitten. In tabel 1 en 2 ziet u de grootte en het bereik van de flash partities. Voor de verdere adressering en meer informatie hierover kan u terecht in de handleiding van de microwebserver “MSC1210(Handleiding)”. Om toch een idee te geven van hoe het er in de praktijk uitziet na het compileren is in figuur 7 en 8 de uitvoer weergeven die onderaan in ons terminalvenster te zien is wanneer we ons programma gecompileerd hebben. Dit compileren gebeurt in het programma JFE, welke later in dit dossier nog aan bod komt.
Figuur 7: Programma - grootte
Figuur 8: Programma - geheugen adressering
Aangezien er maar 16384 bytes of 16,38 KB beschikbaar is in deze programmeeromgeving, bestaat een groot deel van de tijd in het efficiënt schrijven. Meebepaalt, moeten we ons programma zo schrijven dat we enkel de essentiële onderdelen behouden om zo tot onze basis-code te komen. Deze basis-code gaan we vervolgens uitbreiden om zo uiteindelijk ons volledig programma te schrijven.
*Aanvankelijk neemt het standaardprogramma 99,57 % van ons totale geheugen in beslag!
16
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
Figuur 9: Geheugenindeling
Tabel 1: Flash grootte
17
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
Tabel 2: Flash bereik
18
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
5.2 Netwerkuitbreiding
Figuur 10: Netwerkkaart opgebouwd rond de CS8900
Dit schema bevat de netwerkuitbreiding, welke opgebouwd is rond de Ethernet-driver CS8900A (zie het schema in figuur 10). Zoals gebruikelijk bij netwerkkaarten zijn er twee Leds (D1 en D2) die de status van de netwerkverbinding aangeven. D1 licht telkens 6 ms op als er een datapakket ontvangen of verstuurd wordt, of als er een botsing (collision) tussen twee pakketten optreedt. De tweede LED, D2 geeft aan dat de CS8900A correcte link-pulsen ontvangt. Deze pulsen worden bij Ethernet gebruikt om zender en ontvanger te synchroniseren, als dit lukt is D2 dus aan. De netwerkchip is verder voorzien van een complete 10BASE-T transceiver. 10BASE-T is de standaard voor 10 Mbit/s Ethernet over twisted-pair. Er zijn slechts een paar externe componenten nodig. De transformator (direct voor de RJ45-connector) zorgt voor de galvanische scheiding.
19
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
5.3 I²C uitbreiding
Figuur 11: PCF8574P 8 bits I/O expander
Symbool A0 A1 A2 P0 P1 P2 P3 Vss P4 P5 P6 P7 INT SCL SDA Vdd
Pin 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Beschrijving adres ingang 0 adres ingang 1 adres ingang 2 quasi-bidirectioneel I/O 0 quasi-bidirectioneel I/O 1 quasi-bidirectioneel I/O 2 quasi-bidirectioneel I/O 3 grond / massa quasi-bidirectioneel I/O 4 quasi-bidirectioneel I/O 5 quasi-bidirectioneel I/O 6 quasi-bidirectioneel I/O 7 interrupt uitgang (actief laag) seriële klok lijn seriële data lijn voeding
Tabel 3: PCF8574P toewijzing
20
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
5.3.1 Schema
Figuur 12: Schema I/O Expander
Voeding Op de print van de I²C uitbreiding wordt een wisselspanning van 230V aangelegd. Hierna een transformator geplaatst welke een wisselspanning van 230 volt gaat omvormen naar 15 volt wisselspanning. De bruggelijkrichter vormt de wisselspanning om van 15Volt wissel naar een gelijkspanning. Hierna zal de afvlakcondensator (220µF) de pulserende spanning afvlakken. Hierna komen we bij onze spanningsstabilisator; ‘LM7812’ met bijbehorende ontstoorcondensators. Deze gaat de afgevlakte gelijkspanning omvormen naar 12. Deze spanning gaat de relais en de leds voeden. Vervolgens komen we bij de tweede spanningsstabilisator ‘LM7805’. Deze gaat de Ic voorzien van een 5V spanning. (Ook hier staat een ontstoorcondensator bij.)
I/O Expander Adres ingangen: A0, A1, A2 worden met behulp van jumpers in- of uitgeschakeld. Dit bepaalt het adres van de I2C… Seriële Ingangen SDA, SCL bepalen de klok en de data. Deze bepalen uiteindelijk welke uitgangen in- of uitgeschakeld worden. Spanningen afkomstig van de microwebserver boven 5V worden afgevlakt met behulp van de zenerdiode.
21
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
Uitgangen: P0 tot en met P7. Schakelen een stroom naar de transistor welke al dan niet de transistor zal schakelen. - Een led werkende op 12V zal (nu beginnen) branden. -Een relais met daarop een schakeling zal rechtstreeks de 230V schakelen. (Vrijloopdiode over het relais gaat de tegen-EMK die de in de relais ontstaat bij het uitschakelen, beperken tot 0.7V)
Figuur 13: Foto I²C-uitbreiding
Hierboven ziet u een foto van de I²C uitbreiding. Centraal in deze uitbreiding staat het ic ‘PCF8574P’ . Dit Ic is een serieel naar parallel – omzetter. Deze uitbreiding krijgt over I²C een 8-bits code serieel toegestuurd en zet deze parallel uit op zijn uitgangen. In de praktijk zal dit een kleine stroom zijn welke gaat vloeien wanneer we een uitgang schakelen. Deze stroom zal dan op zijn beurt een relais en een led schakelen.
22
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
5.3.2 Board
Figuur 14: Board I/O Expander
In de rechterbovenhoek sluiten we op een kroonsteentje onze 230V aan. Onderaan zie je eveneens kroonsteentjes. Deze worden zoals eerder vermeld, geschakeld met behulp van een relaiscontact. (Aan deze kroonsteentjes kan men bijvoorbeeld een lamp hangen.) In de boven – linkerhoek ziet u de Sub-D connector welke ik ga gebruiken om de I²c verbindingen op te stellen. Dit gebeurt doormiddel van 3 lijnen: SDA, SCL en GND.
Figuur 15: Sub-D kabel
23
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
Deze kabel zal ik gebruiken om mijn 3 lijnen: SDA, SCL en GND door te verbinden.
Figuur 16: Connector aansluitingen
Dit is de connector welke zich op de microwebserver bevindt. Aan bovenkant is een uitsparing welke er voor zorgt dat de kabel niet verkeerd in de connector gestoken kan worden.
24
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
5.4 I²C
5.4.1 Het Concept
Figuur 17: I2C peripherals
Patent Philips - Afkorting : inter-ic bus: i*i*C (ook 2-wire interface genoemd)
Seriële bus, bi-directioneel
Twee leidingen: SDA (serial data) en SCL (Serial Clock)
Master en slave principe – ook Multimaster mogelijk
3 snelheden: o Slow (under 100 Kbps) o Fast (400 Kbps) o High-speed (3.4 Mbps) – I2C v.2.0
Afstanden tot 3 meter
Langzamere op het bussysteem aangesloten chips kunnen wachttijden afdwingen.
D.m.v. een botspreventie systeem (CSMA/CD) kunnen meerdere microprocessoren op dezelfde bus worden aangesloten en onderling communiceren.
5.4.2 Het protocol
Zodra de bus vrij is, kan een master de bus in beslag nemen door een startconditie te genereren. De eerste byte die nu verzonden wordt, bevat het 7-bits I²c-adres samen met het R/W-bit. Is het geadresseerde IC op de bus aanwezig, dan reageert het met een ACK-puls. De datauitwisseling kan daarna beginnen.
25
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
Was de R/W-puls '0', dan stuurt de master data naar de slave totdat hij geen ACK-puls meer ontvangt of alle data verzonden is. Was de R/W-puls ' 1', dan genereert de master klokpulsen gedurende welke de slave zijn data kan verzenden. Na ieder ontvangen byte genereert de master (deze is nu ontvanger) een ACK-puls. Tot slot kan de master de bus weer vrij maken door een stopconditie te genereren.
5.4.3 I²c definities
Naam Transmitter Receiver Master
Beschrijving Het apparaat dat data gaat versturen. Het apparaat dat data gaat krijgen. Het apparaat dat de verzending inititialiseert, het kloksignaal Genereert en de transmissie beëindigt.
Slave Synchronization
Het apparaat dat geadresseerd is als slave. De procedure die ervoor zorgt dat twee apparaten met elkaar gesynchroniseerd zijn.
Tabel 4: I²C definities
5.4.4 I²C start stop condities •
Start /stop conditie is alleen mogelijk als de SCL-lijn hoog is (“1”)
•
Startconditie wordt bepaald door een dalende flank (1>0) op de SDA lijn
•
Stopconditie wordt bepaald door een stijgende flank (0>1) op de SDA lijn.
Figuur 18: I2C stopcondities
26
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
5.4.5 Databits geldigheid
Figuur 19: Datageldigheid
•
Als de SCL-lijn hoog is (“1”), moet de data stabiel zijn en mag dan niet van waarde veranderen.
•
Data mag alleen veranderen als de SCL-lijn laag (“0”) is.
•
Data mag door ontvanger dus alleen worden gelezen als SCL lijn hoog (“1”) is.
Figuur 20: I2C klokcondities
27
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
6 Software 6.1 Installatie van de programma’s De benodigde software kan je vinden op de bijgeleverde cd. Open de cd “ Microwebserver”.
Figuur 21: CD Microwebserver
Merk op dat software vaak updates krijgt en dat de versie die op het internet staat misschien een grotere programmacode toelaat dan er ruimte voorzien is in de microwebserver. Aangezien deze software ontwikkeld is voor Windows 2000; moeten er enkele stappen gevolgd te worden voor men de software geïnstalleerd krijgt. Ook is het best enige ruimte op de C-schijf te voorzien.
28
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
6.1.1 Installatie µc51 Ga naar het pad: \Software\uc51. Dubbelklik op uc51inst.exe -Wanneer u volgende error krijgt:
Figuur 22: uC51 error
Dient u de volgende stappen te ondernemen: -Zorg ervoor dat u voldoende bevoegdheden heeft (administrator bevoegdheid) - Voer de installatie uit onder de compatibiliteitsmodus. Rechtsklik, uitvoeren als..
Figuur 23: uC51 admin rights
29
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
Figuur 24: uC51 compatibiliteitsmodus
Rechstklik, eigenschappen. Ga vervolgens naar het tabblad Compatibiliteit en vink “Dit programma in de compatibiliteitsmodus uitvoeren” aan. Selecteer vervolgens Windows 2000.
Wanneer de installatie succesvol is zal u deze berichtgeving krijgen.
Figuur 25: Setup complete
Figuur 26: Setup complete
30
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
6.1.2 Installatie TI downloader Ga naar het pad: \Software\Downloaders\Downloader .1.1.12\ Dubbelklik nu op Setup.exe Klik nu door, wanneer de installer vraagt naar het installatiepad, verwijst u gewoon naar de standaardwaarden ( Dit is standaard de c-schijf). Wanneer de installatie succesvol is zal u deze berichtgeving krijgen:
Figuur 27: Ti Downloader Complete
U bent nu klaar om de geïnstalleerde programma’s te gebruiken.
31
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
6.2 Gebruik van de programma’s De microwebserver werkt alleen in een TCP/IP-netwerk. Net zoals alle andere computers in een TCP/IP-netwerk krijgt ook deze microcomputer een uniek adres, het IP-adres. Voor we aan de slag kunnen met het programmeren van de controller, moet dit adres handmatig bepaald worden. De microwebserver werkt namelijk niet met automatische toekenning van adressen. Standaard is het IP-adres ingesteld op 192.168.1.156. Dit is een adres uit een reeks die speciaal gereserveerd is voor netwerken die niet direct met Internet verbonden zijn. Abonnees op ADSL of kabelinternet zullen in huis een dergelijke reeks gebruiken. Adressen die de vorm 10.0.0.x hebben, behoren bijvoorbeeld ook tot deze categorie. In ieder geval moet dus zelf gecontroleerd en bepaald worden welke adresreeks wordt gebruikt en welk adres beschikbaar is om aan de server toe te kennen.
6.2.1 Makewiz
Figuur 28: Makewiz icoon
Figuur 29: Makewiz venster
Nadat de µC-compiler is geïnstalleerd, dient eerst een ‘workspace’ gecreëerd te worden met MakeWiz. Dit doen we door op de knop Select *.Mak file… te drukken.
Figuur 30: Select Mak file
32
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
Open in MakeWiz het bestand C:\uC51\src\msc1210\elfm_flex\elf_flex.mak. Verander vervolgens iets in de tekst (zet er bijvoorbeeld een eigen versienummer bij), zodat de Save-knop wordt vrijgegeven. Vink het vakje ‘Write JFE-Workspace File’ aan en sla het bestand op (figuur 31).
Figuur 31: Write JFE-Workspace File
6.2.2 Jfe editor
Figuur 32: Jfe icoon
Nu openen we het programma JFE: start/alle programma’s/uC51/JFE.
We klikken bovenaan op: File> Open workspace. En openen het volgende pad: c:/uc51/src/msc1210/elm_flex/elm_flex.wsp. Nu gaan we het IP veranderen naar één dat in ons subdomein toegelaten is. Hiervoor maken we gebruik van IP Scanner, om de vrije adressen in ons netwerk te kunnen zien http://www.radmin.com/download/index.php
In overleg met de netwerkbeheerder is het volgende IP-adres gekozen: 192.168.101.250. Nu gaan we dit in de code aanpassen door de regel Compose Ip te wijzigen: COMPOSE_IP(my_ip,192.168,1,250). Merk op dat het wel degelijk komma’s zijn die de verschillende getallen van elkaar scheiden en dus geen punten.
33
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
Figuur 33: Jens File Editor venster
Hierna moeten we alle bestanden – headers - kopiëren naar onze workspace map. (Deze headers moeten gekopieerd te worden vanuit de \I2C_BUS workspace map, naar de \MSC120\ map.). We moeten ook de library (bibliotheek) toevoegen aan onze mak file, zodat de µC-Compiler de gedeclareerde I²C verwijzingen kan terugvinden. Dit doen we door in de locatie: C:\uC51\src\msc1210\elm_flex. Rechts te klikken op het bestand elm_flex.mak, en vervolgens op bewerken te klikken. Hierna kunnen we de opdrachtregel, L51LIBS = -li2c_lib.lib toevoegen en het bestand opslaan. Vervolgens gaan we de I²C headers in onze code toevoegen.
Figuur 34: I²C headers
Hierna gaan we de eigenlijke C- code programmeren welke de I²C tot stand doet komen, alsook de webpaginas. Deze code is volledig te bekijken in de bijlagen. Wanneer de code volledig geschreven is gaan we over naar de volgende stap. Een ‘Workspace’ die met MakeWiz is gemaakt, zorgt ervoor dat in JFE drie speciale knoppen te zien zijn, namelijk ‘MAKE’, ‘RE-MAKE’ en ‘DL.BAT’.
34
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
Met ‘MAKE’ wordt het project gecompileerd, waarbij alleen de bestanden die daadwerkelijk veranderd zijn opnieuw verwerkt worden. Dit is de gebruikelijke en ook snelste manier om de benodigde HEX-file voor de microprocessor te genereren. ‘REMAKE’ is nodig als er iets verandert dat niet in de ‘Workspace’ zit, zoals bijvoorbeeld header-bestanden (.h). Met dit commando wordt dus alles opnieuw gecompileerd. Merk op dat de programmagrootte beperkt is en dat we hierdoor begrensd zijn in de vrijheid van programmatie.
6.2.3 Ti downloader
Figuur 35: : Ti downloader icoon
Met ‘DL.BAT’ kan tenslotte het resultaat naar het MSC-bord worden gestuurd. In feite is dit niets anders dan het starten van een batch-bestand waaraan JFE een parameter meegeeft. Deze parameter is telkens de naam van het doelbestand, hier ‘ELM_FLEX’ (dus zonder extensie). In het batch-bestand – dat ook in de projectmap staat – wordt dan de exacte opdrachtregel gegeven die het ‘downloaden’ naar het MSC-bord in gang zet. Hier is dat ‘download /F%1.hex /X11 /P1 /T/B9600’.
Parameter
Verklaring
%1.hex
Dit is de HEX-file die op het MSC1210-bord zal worden gedownload
/X11
Dit is de 11MHz klokfrequentie
/P1
Hier kan men de COM-poort wijzigen
/T
Deze parameter opent de terminal
/B9600
De baudrate is ingesteld op 9600 baud
Tabel 5: Downloader parameters
In ieder geval moet ook niet vergeten worden jumpers J1 en J2 op het MSC1210bord te plaatsen (J3 moet open blijven). Als J1 en J2 afwezig zijn, is het bord namelijk beveiligd tegen resetten en veranderen van de firmware via de PC. Tot slot is natuurlijk nog een nulmodem-kabel nodig om het bord met de PC te verbinden, maar dat spreekt voor zich.
35
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
Als de downloader geïnstalleerd is, DL.BAT eventueel aangepast is (COM-poort en/of pad naar downloader), het bord op de juiste poort van de PC aangesloten is en van voedingsspanning voorzien is, kan eindelijk ‘DL.BAT’ aangeklikt worden in JFE.
Als alles goed gaat, meldt het MSC1210-bord zich met een korte tekst en als de tekst ‘
’ hier niet bij zit, is het Ethernet-bordje ook herkend! Verder moet nu een rode LED op het MSC-bord langzaam knipperen. *Vergeet na het downloaden niet de jumpers weer te verwijderen!
Figuur 36: Ti Downloader venster
Met de vinkjes kunnen we onderandere aanpassen of er een terminalvenster geopend wordt. In dit venster kunnen commando’s afgedrukt worden afgedrukt. (Natuurlijk kunnen we ook een van de bijgeleverde terminals gebruiken zoals Sld51.)
36
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
6.2.4 Sld51
Figuur 37: Sld51 icoon
Figuur 38: Sld51 terminal venster
Dit is één van de aparte terminalprogramma’s waarmee we de uitvoer en requests (opvragingen) van onze microwebserver kunnen zien. Deze uitvoer is te lezen in de code als ’printf( ) ’. Een praktisch voorbeeld: printf("Scanning I2C-bus adresses 2,4,6,...250,252,254\n"); printf("Found response at adr. 64 if result equals 0 = >%u\n",res); my_mac[0],my_mac[1],my_mac[2],my_mac[3],my_mac[4],my_mac[5],"); printf("My MAC: %02x:%02x:%02x:%02x:%02x:%02x\n", my_mac[0],my_mac[1],my_mac[2],my_mac[3],my_mac[4],my_mac[5],"); printf("My IP: %u.%u.%u.%u\n",my_ip.bytes[0],my_ip.bytes[1],my_ip.bytes[2],my_ip.bytes[3]," ***");
Deze code zorgt ervoor dat de eerste vier regels op de terminal afgedrukt worden.
37
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
7 Programmatie 7.1 C-code 7.1.1 Elm_flex.c /************************************************************************* * ELM_FLEX.C - ELEKTOR-EINDWERK * * (C) 2004 PIETER-JAN LIEKENS , WWW.MYPIXELPERFECT.COM * * MSC1210 @ 11.0592 MHz *************************************************************************/ #include <stdio.h> #include #include // SFR #include // ROM Routines #include "utility.h" // Utility functions for accessing the A/D #include "elmet.h" // special ELMET routines and constants // Webserver Headers #include "..\..\flexgate\tcpip\net.h" // Basic network handling (public) #include "..\..\flexgate\tcpip\web_serv.h" // Webserver //I2c Headers #include "i2c_ll.h" // Low-Level Routines #include "i2c_eepr.h" // E2prom Access with fixed address #include "i2c_rtc.h" // E2prom Access with fixed address
/*********************************************************************** * Declaratie van de webdata (Pagina’s) **********************************************************************/ extern code uchar home[]; extern code uchar reply[]; /*********************************************************************** * Declaratie van de dynamische data en variabelen. ***********************************************************************/ uint id_num=0; // Numerieke ID uint hits_num=0; // Numerieke Hit-Counter uint som_num=0; //Numerieke I2C-Counter char som[6] = "0";
/********************************************************************************** * MAIN **********************************************************************************/ 38
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
void main(void){ uint res; uchar i; uchar socket; xdata uchar *pc;
init_msc1210(); i2c_reset(); printf("Scanning I2C-bus adresses 2,4,6,...250,252,254\n"); res=i2c_slavepresent(64)>>8; // Error code is in the Highbyte if (res=0) printf("Found response at adr. 0 = %u\n",res); i2c_sendstop(); // DeSelect Slave for(;;){ puts("*** MINI-WEBSERVER - Eindwerk LIEKENS PJ 2008-2009 ***"); puts("*** TCP/IP DATE " __DATE__ ", "__TIME__ " ***"); // A HTTP-Server with only passive sockets requires only an IP address COMPOSE_IP(my_ip,192,168,101,250); if(Init_net()) puts(""); // Init Variables, Counter, ... printf("*** MAC: %02x:%02x:%02x:%02x:%02x:%02x\n", my_mac[0],my_mac[1],my_mac[2],my_mac[3],my_mac[4],my_mac[5]," ***"); printf("*** IP: %u.%u.%u.%u\n",my_ip.bytes[0],my_ip.bytes[1],my_ip.bytes[2],my_ip.bytes[3]," ***");
// Enable ALL (or less) Sockets as General Server HTTP at port 80 for(i=0;i<MAX_SOCK;i++) SOCKET_SETUP(i,SOCKET_TCP,80,FLAG_PASSIVE_OPEN); // Initialise A/D at last... set_adval_bip(0x78,EVREF|EBUF|VREFH|GAIN_8); // Vref on 2.5V, Buff on, BOD off, PGA 1 // * Now Net is ready to start * for(;;){ // ENOUGH TIME IN THIS LOOP FOR OTHER JOBS... WDSERV(); // Serve Watchdog about every 3 seconds! (see elmet.h) res=poll_webserver(); if((res&0xFF00) ==EVENT_HTTP_REQUEST){ socket=(uchar)res; pc=webpage_name(); // get name of requested page printf("Request '%s'\n",pc); // Show requested page (enable for Debug)
39
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
switch(*pc){ case 'r': som_num=0; for(;;){ // Reply-Page: Parse Arguments i=url_getarg_no(); if(!i) break; pc=url_getarg_str(); printf("Arg A%u: '%s'\n",i,pc); // Opt. Show Args... (Enable for Debug) switch(i){ case 0: som_num=0; break; case 1: som_num += 1; break; case 2: som_num += 2; break; case 3: som_num += 4; break; case 4: som_num += 8; break; case 5: som_num += 16; break; case 6: som_num += 32; break; case 7: som_num += 64; break; case 8: som_num += 128; break; } } if(i2c_selectslave(64)&0xFF00) puts("No PCF8574! (1)"); else { printf("Send "); printf(" ",som); printf(" to PCF, Result: %u\n",i2c_setbyte(som_num)); i2c_sendstop(); } sprintf(som,"%u",som_num); webpage_bind(socket,reply); 40
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
break; default: webpage_bind(socket,home); } }else if(res==EVENT_SOCKET_IDLETIMER){ RED_LED^=1; // *** BLINK LED *** } } // for(;;) } }
ELM_FLEX.C de plek waar de gebruiker de server configureert. In de lus waarin de eigenlijke server ‘draait’, wordt telkens als een pagina wordt opgevraagd, gecontroleerd of er bepaalde parameters aan de URL worden meegegeven. Zoals te zien is in de code (elm_flex.c) verblijft het programma in een oneindige for-lus. Regelmatig wordt poll_webserver() aangeroepen. De FlexGate TCP/IP-stack werkt met ‘events’. De microwebserver reageert alleen op EVENT_HTTP_REQUEST (pagina wordt opgevraagd) en EVENT_SOCKET_IDLETIMER (telkens ongeveer om de 0,5 s). Als een client een pagina benadert, wordt eerst de naam opgevraagd met webpage_name(). Met webpage_bind() wordt dan de overeenkomstige pagina voor het antwoord gereed gezet. Alle pagina’s die beschikbaar zijn moeten van tevoren als array extern code uchar worden gedeclareerd (zie ELM_FLEX.C). Als de opgevraagde pagina verder geen dynamische data bevat, zou dit alles zijn. Met dynamische gegevens bedoelen we bijvoorbeeld meetgegevens die van het processorbord afkomstig zijn. Deze gegevens kunnen eenvoudig in een webpagina opgenomen worden. En omgekeerd: Via een webpagina kun je de uitgangen van de processor op afstand besturen. Er is natuurlijk nog veel meer te vertellen over het Internet-gedeelte van de software (de TCP/IPstack), maar dat zou hier te ver voeren. Als je er dieper in wilt duiken, kijk dan eens naar de handleiding van de stack. Deze zit bij de μC-compiler en staat in de map SRC\FLEXGATE\.
Als er bijvoorbeeld een HTML-document zoals REPLY.HTML wordt opgevraagd, wordt met url_getarg_no() bepaald hoeveel parameters er met de URL mee werden gegeven. Met url_getarg_pc() wordt de inhoud bepaald. Zoals gezegd zijn alleen de argumenten ‘A1’…‘A255’, respectievelijk ‘a1’…‘a255’ toegestaan. Let op bij het kopiëren van de argumenten in lokale variabelen, er mag niet meer data gekopieerd worden dan de gedeclareerd is voor die variabele. Denk hier vooral aan bij strings in C: de laatste ‘0’-byte telt ook mee!
41
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
7.2 Html 7.2.1 Home.html
Figuur 39: Homepage microwebserver
42
Liekens PJ.
Eindwerk Microwebserver
2008-2009 – T3Ic6
PJ's MicroWebserver <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <style type="text/css">
|
<strong>home.html <iframe name="frametje" src="" width="100%" height="20" frameborder="0" style="background-color: #666666;" scrolling="no"> Met behulp van de I²c uitbreiding bent u in staat tot 8 relais te sturen. Deze relais schakelen rechtstreeks 230V. Vanaf deze pagina van de microwebserver kan ik dan rechtstreeks met behulp van een vinkje de desbetreffende relais in of uit - schakelen. Hier kan ik dan een waterkoker, koffiezet, verwarming, licht … mee kan aanzetten/uitzetten. |
|
|
Om gegevens van het microprocessorbord via webpagina’s zichtbaar te maken, moeten in de HTMLcode variabelen opgenomen worden. Deze worden dan tijdens het uitvoeren van de webpagina door de server gevuld met actuele gegevens. Met de Flexgate TCP/IP-stack is dit geen enkel probleem. Het ‘@’-teken geeft een variabele aan. Wilt u het ‘@’- teken zelf gebruiken in een HTML-pagina, schrijf dan ‘@@’ in de code. De stack zal automatisch op de plekken waar een variabele in de code staat de overeenkomstige C-variabele invullen. Deze C-variabele moet altijd van het type string zijn (dus een arrayvan char). Natuurlijk moet de gebruiker ook via het web gegevens in de microcontroller kunnen veranderen. Bij HTML worden hiervoor zogenaamde formulieren gebruikt. Hier passen we de ‘GET’-methode toe: