Software beschrijving Epoluthon 2.0 Opgesteld door: Richard Rasker HI-180116
SOFTWARE De software voor Epoluthon v.2.0 bestaat uit vijf van elkaar te onderscheiden delen: een interrupt-service-routine (ISR) voor het afhandelen van timing, de communicatie met het display, het periodiek meten van diverse systeemparameters en het registreren van knopdrukken, diverse algemene subroutines voor het vervullen van specifieke functies, waaronder het omzetten van hexadecimale waarden in decimale tekens, een lijst displaycommando's en -boodschappen in de gewenste taal, een reeks initialisatie-instructies voor het systeem, een zogenoemde hoofdlus, die de feitelijke functionaliteit van het systeem regelt. Deze hoofdlus bevat ook een zogenoemde watchdog-opdracht die de controller een reset geeft wanneer de software blijft hangen. Interrupt Service Routine (ISR) pdtisr.inc Functie Timer Aftelklok A/D-routine I 2 C-engine Knopregistratie Timer-interrupt: 10 ms interval Afgeleide tijdbases: 0,5 seconde, 1 seconde en 10 seconden Deze klok telt tijdperioden af in minuten en seconden, onder meer ten behoeve van desinfectie- en behandelcycli. De maximumtijd bedraagt 90 minuten. Meet zes analoge systeemparameters: AN0: stroom van de led-lichtbron AN1: instelwaarde maximumstroom AN2: stroom van de Peltier-temperatuurregeling AN3: temperatuur AN4: waterkwaliteit (eens per 10 seconden) AN5: waterdruk Verzorgt de communicatie met het display Zet het indrukken en loslaten van bedieningsknoppen om in standaard-events
Algemene subroutines pdtcommon.inc Subroutine disppos display dispok dispstp hex2bcd hexchar enable disable gettrip setpled setheat setpump setstat seterr zet de cursor op een bepaalde displaypositie (gaat over in 'display') accepteert een enkelvoudig nummer en zet dit om in een reeks commando's of tekens toont de boodschap [OK] midden op de onderste displayregel toont de boodschap [STOP] midden op de onderste displayregel converteert twee hexadecimale bytes naar drie BCD-bytes converteert één hexadecimale byte naar ASCII-representatie schakelt de vermogenseindtrappen in schakelt de vermogenseindtrappen uit haalt data binnen van de hardware-tripfunctie stelt de uitgangsspanning in van de led-lichtbron stelt de uitgangsspanning in van de Peltier-temperatuurregeling [polariteit moet nog] stelt de uitgangsspanning in van de waterpomp actualiseert zet de systeemstatus van de hoofdlus handelt foutmeldingen af Definities displaydata pdtdisplay.inc Nr. 00 Variabele data, geïndexeerd vanaf 0x60 via FSR0 / IND0 01 Initialisatiecommando's 02 Initialisatiedata 03 Initialisatiecommando's 04 Initialisatiedata 05 Initialisatiecommando's 06 Initialisatiedata (CGRAM-symbool ) 07 Commando's: clear display + home 08 EPOLUTHON v2.0 09 Nur für Forschung! 0A [OK] 0B Temperatur:
0C C 0D Desinfiziermittel 0E Wasser 0F abpumpen 10 abfüllen 11 Restzeit: 12 Hilfschlauch 13 L--R 14 L--> 15 [STOP] 16 Desinfizieren 17 spülen 18 fertig 19 [PRIME] 1A [RUN] 1B [+/-] 1C Lichtquelle 1D FEHLER: 1E Überdruck 1F Unterdruck 20 Strom 21 im Gehaüse 22 Wasserqualität: 23 Heizung Index # Algemene structuur displaydata Functie 0 Bit 7: data (0) of commando (1) Bit 6-0: aantal elementen (N) 1 Data/commandobyte 1 2 Data/commandobyte 2...... N Data/commandobyte N
Initialisatie RAM-Geheugen A/D-referentie A/D-converter Watchdog PWM-uitgangen I 2 C Timer, interrupts Display Initialisatie-instructies pdtinit.inc Het gehele RAM-gebied in page 1 (0x20 0x7F) krijgt de waarde 00 Alle poorten worden eerst nul gemaakt Zwakke pull-ups voor poort B (bedieningsknoppen) De FVR wordt op 2,048 volt gezet. De analoge ingangen AN0 AN5 voeren weliswaar een spanning tussen 0 en 1 volt, echter de A/Dconverter mag geen lagere referentiespanning dan ca. 1,8 volt hebben. De verschillende digitale in- en uitgangen worden gedefinieerd De A/D-converter wordt ingesteld op een 12-bits 2's-complement resultaat De watchdog-timer krijgt een time-out van 32 ms De analoge ingangen worden gedefinieerd PSMC1-3 worden geïnitialiseerd: 64MHz klok, standaard PWM I 2 C master mode, interrupts aan, 100kHz klok Timer 1 geeft iedere 10 ms een interrupt Boodschap 001-007 naar display Hoofdprogramma statusgestuurd Nr. Display, verloop 0 (Systeemcontrole) ->> (Foutsituatie -> status 100) Knop OK drukken -> status 1 1 Check: niet/wel lichtbron aangesloten Geen lichtbron: status 2 (desinfecteren) Wel lichtbron: status 30 (behandelen) Desinfectie - (geen lichtbron aangesloten) 2 (groene led aan) Knop OK -> pomptijd maximaal -> status 3
3 (pomp aan, gele led aan, water wordt afgevoerd) Na aflopen tijd of knop STOP -> status 4 4 (groene led aan) Knop PRIME -> wegpompen hervatten (status 3) Knop OK -> pomptijd 10 minuten -> status 5 5 (pomp aan, gele led aan) Na aflopen tijd of knop STOP -> status 6 6 (groene led aan) Knop PRIME -> spoelen hervatten (status 5) Knop OK -> pomptijd maximaal -> status 7 7 (pomp aan, gele led aan, desinfectiemiddel wordt afgevoerd) Na aflopen tijd of knop STOP -> status 8 8 (pomp uit, groene led aan) Knop PRIME -> wegpompen hervatten (status 7) Knop OK -> pomptijd 3 minuten -> status 9 9 (pomp aan, gele led aan) Na aflopen tijd of knop STOP -> status 10 10 (pomp uit, groene led aan) Knop PRIME -> spoelen hervatten (status 9) Knop OK -> pomptijd maximaal -> status 11 11 (pomp aan, gele led aan, water wordt afgevoerd) Na aflopen tijd of knop STOP -> status 12 12 = 8 (2) PRIME: status 11, OK: status 13 13 = 9 time-out/stop: status 14 14 = 10 PRIME: status 13, OK: status 15
15 = 11 time-out/stop: status 16 16 = 8 (3) PRIME: status 15, OK: status 17 17 = 9 time-out/stop: status 18 18 = 10 PRIME: status 17, OK: status 19 19 = 11 time-out/stop: status 20 20 (pomp uit, groene led aan) Desgewenst kan lichtbron worden aangesloten [21-29: gereserveerd] Behandeling - (Lichtbron aangesloten) 30 (groene led aan) Knop + / - = één minuut hoger / lager, ingedrukt houden = repeat PRIME: status 31 31 (pomp aan, verwarming aan, lichtbron laag vermogen, gele led aan) Knop + / - = één minuut hoger / lager, ingedrukt houden = repeat time-out/stop: status 30 RUN: status 32 32 (pomp aan, verwarming aan, lichtbron hoog vermogen, rode led aan) STOP: status 31 time-out: status 33 33 (pomp uit, verwarming uit, lichtbron uit, groene led aan) OK: status 0 (misschien nog even info blijven weergeven over behandelduur en type lichtbron?) 50 (doorlopende systeemcontrole, zie ook status 0) 100 (foutmelding via seterr) 200 (demonstratiemodus foutafhandeling)