1 Indholdsfortegnelse.



Relaterede dokumenter
Lyskryds. Thomas Olsson Søren Guldbrand Pedersen. Og der blev lys!

Projekt - RoboNet Del Journal.

Der er derfor, for at alle kan sende, kun tilladt, at sende intermitterende. Altså korte pakker. ( Dette skal dog verificeres!!)

Brugervejledning for Senge- og dørvagt PIR2003

Eksamens spørgsmål i Teknologi (Digital) 3. Semester (i)

TG 8. Indhold: TG8 - Kredsløbsbeskrivelse Gruppemedlemmer: Kim Andersen, Kasper Jensen & Thyge Mikkelsen Dato: Modtaget af: Søren Knudsen

Strømforsyning +/- 12V serieregulator og 5V Switch mode

Betjeningsvejledning Elma 318 Mini automultimeter

Temperaturmåler. Klaus Jørgensen. Itet. 1a. Klaus Jørgensen & Ole Rud. Odense Tekniskskole. Allegade 79 Odense C /

Metal Detektor. HF Valgfag. Rapport.

Journal JTAG: Udarbejde af: Benjamin Grydehøj I samarbejde med PDA Projektgruppen. Elektronikteknologafdelingen på Erhvervsakademi Fyn.

L P. Komfort / Alarm system Installationsvejledning. Tekniske data, symbol forklaringer

Det er nødvendigt for brugeren at læse, forstå og følge vejledningens instruktioner.

1 Indholdsfortegnelse.

Arduino Programmering

Alt elektronik heri er købt via og arduino udviklingssoftware er hentet fra

ARDUINO PROGRAMMERING

Microcontroller, Arduino

GSM SMS Modem MODEL: SA RTU-1 V1.01

Kravspecifikation For. Gruppen

Elektronikken bag medicinsk måleudstyr

Logik Rapport - Alarm. Klaus Jørgensen Itet. 1a. Klaus Jørgensen & Ole Rud 9/ Vejledere: PSS & SKH

Brugervejledning for SCANNER 410SMD

SPIDER Quick guide. DATO: August 2017 FORHANDLER: WASYS A/S. Langebjergvænget Roskilde

Indholdsfortegnelse:

Øvelse. Øvelse. D.1 CMOS-øvelse. Under øvelsen laves notater, som senere bruges i den efterfølgende journal! Opgave 1:

VentilationAlarm EP1 ES 966

Arduino kursus lektion 3:

Indholdsfortegnelse :

AVR MP Ingeniørhøjskolen i Århus Michael Kaalund

Trust Energy Protector 325/525. Brugervejledning

Analog Øvelser. Version. A.1 Afladning af kondensator. Opbyg følgende kredsløb: U TL = 70 % L TL = 50 %

Detter dokument er kun til intern brug og klassificeret som strengt fortroligt. Forfatteren tager forbehold for alle fejl og mangler.

Svane Electronic Universal timer med 2 relæer og 18 funktioner hver 1

Digital elektronisk termostat med afrimning styring. Brugermanual. Læs og arkiver Disse instruktioner

Opslagsbog om computer. Af Erik Veidorf og Mike T. Krogh.

Dansk Mink Papir. Teknisk brugermanual

Microcontroller, Arduino

1 System oversigt Enheder Prioritering af signaler... 4

Montage og brugsanvisning

Manual til PRO DK180

Betjeningsvejledning HT italia IMP57 Impedansadapter

Modbus data modellen er opbygget af fire primære data typer. I nedenstående skema er en kort oversigt over disse.

Undervisningsmateriale til AMU kursus 48114, Grundlæggende elektronik på mobile maskiner, 1. Udarbejdet i 2015

Arduinostyret klimaanlæg Afsluttende projekt informationsteknologi B

Kronback tracers P4+

X88MV. Manual Version 1.26

AM signalet er et automatisk mellemblok signal. Det består af 3 lamper og er opbygget som et U signal med 3 lamper.

Analoge indgange og A/D konvertering. Analoge udgange

Intro til AVR. Mads Pedersen, OZ6HR

DC-Motor Controller. Brugermanual

ELCANIC A/S Counter Type CNT150 Version 2.00 Inkl. PC programmet: Cnt150 Version 3.00 Betjeningsvejledning

Side 2 CS 9452 Brugervejledning. Afsnit Navn Side. 1 Ordforklaring (terminologi) 3. 3 Betjeningsknapper og -lamper 6

Brugermanual for styreskab Master Chain 4.0

STYRING FOR STOKERFYR

Beskrivelse af vejrstation OM1 NETLON NETLON. Dette dokument indeholder en beskrivelse af en vejrstation OM1 fra Netlon.

Nedenstående opgaver er lavet til en Allen-Bradley PLC, men uden videre tilpasses andre PLC typer.

WEA-Base Brugervejledning til vejetransmitter

Beskrivelse af tryghedsalarmen

Jægergårdsgade 152/05A DK-8000 Aarhus C DENMARK AC Motor Controller 370W. Brugermanual

// Definition af porte og funktioner

Switchmode Powersupply. Lasse Kaae 2009 Juni

13:42:32

ELCANIC A/S. ENERGY METER Type ENG110. Version Inkl. PC program: ENG110. Version Betjeningsvejledning

Projekt. Analog Effektforstærker.

Computerens anatomi. Computeren består af mange forskellige dele, i denne opgave vil vi forklare lidt om de vigtigste af dem.

EDR Frederikssund afdeling Almen elektronik kursus. Afsnit 9-9B-10. EDR Frederikssund Afdelings Almen elektronik kursus. Joakim Soya OZ1DUG Formand

Automatisering Af Hverdagen

Program Dokumentation PC Software Skrevet af. Gruppen. Version 1.0

TRÆNINGS COMPUTER PEAK FITNESS R99

L P. Komfort / Alarm system. 8. Tekniske data. LINDGAARD PEDERSEN A/S Banemarksvej 50 B Brøndby Telefon /

CANSAT & ARDUINO step by step

I 2 C BUSSEN KØRER MED ARDUINO IND I FORÅRET

GSM ALARM BASIC. Brugervejledning dansk. Version 1. Side

IR32C: Elektronisk digital termostat med afrimningskontrol for køle-/ frostanlæg med drift inden for lave temperaturområder.

Hold 6 Tirsdag. Kristian Krøier, Jacob Christiansen & Thomas Duerlund Jensen Fag: ELA Lærer: Jan Petersen (JPe) Dato for aflevering: 29.

UniLock System 10. Manual til T550 Secure Radiomodtager og håndsender. Version 2.0 Revision

Indholdsfortegnelse Indledning... 2 Projektbeskrivelse... 2 Dette bruger vi i projektet... 2 Komponenter... 2 Software... 2 Kalibrering...

L P. Komfort / Alarm system. 9. Tekniske data. LINDGAARD PEDERSEN A/S Banemarksvej 50 B Brøndby Telefon /

QUICKVEJLEDNING til multiguard DIN6. Montering

Betjeningsvejledning IQ Control panel

Dette korte foredrag er opdelt i 3 dele: 1. ARDUINO i flere versioner, hvad er det? 2. DEMO-video 3. Din fremtidige Oscillator, SI5351A 4.

MYLOQ 1101 Kodecylinder

Dekoder med 2x2 udgange

Side 1. Installationsvejledning for. systemet. Version 1 December 2004

ysikrapport: Maila Walmod, 1.3 HTX, Rosklide I gruppe med Morten Hedetoft, Kasper Merrild og Theis Hansen Afleveringsdato: 28/2/08

PR 2000 Proximity-læser Art. Nr.: Installationsmanual

KOMPONENT BESKRIVELSE

DCC digital dekoder til magnetiske produkter

Programmering af trådløse modtagere (RF)

Premier. Forforstærkere. Brugervejledning. For modellerne

DGMF Kursus i Digitalcentralen. Rev. 19 / Poul Erik Christiansen. DiMAX 1200Z Digitalcentral

KEB Combivert Frekvensomformer F5-B version (0,37-15kW)

Transkript:

1 Indholdsfortegnelse. 1 Indholdsfortegnelse. 2 2 Forord. 6 3 Indledning.* 6 4 Lidt generelt om vejret. 7 4.1 Om temperaturen.* 7 4.2 Om luftfugtigheden.* 7 4.3 Om lufttrykket.* 8 5 Indsamling af informationer.* 9 6 Udviklingsværktøjer.* 10 7 Brugervejledning. 10 8 Tekniske data. 11 9 Målepunkter. 11 9.1 uprocessor kit. 11 9.2 Temperatur del. 11 9.3 Barometer del. 11 9.4 Hygrometer del. 11 9.5 Display og knapper. 12 10 Tidsplaner for vejrstation. 12 10.1 Planlagt tidsplan for vejrstation. 12 10.2 Sand tidsplan for vejrstation. 12 11 Pris. 13 11.1 uprocessor kit. 13 11.2 Sensor kort. 13 11.3 Display kort. 13 12 Blokdiagram over vejrstation. 14 13 Overordnet beskrivelse.* 15 14 Komponenter i vejrstation. 15 Processor kit. 15 14.1.1 Mikroprocessor 80C31P* 16 14.1.2 Addresselatch 74hc573* 17 14.1.3 EEPROM 27C256-12F1* 17 14.1.4 RAM KM62256DLP7* 17 14.1.5 Seriel I/O MAX232* 17 14.1.6 Spændingssupervisor TL7705ACP* 18 14.1.7 I/O port 82C55A-2* 19 14.1.8 Chipselectkreds PEEL18CV8P-15* 19 14.1.9 Krystal 11,0592 MHz 20

14.2 Sensor kort. 21 14.2.1 Fugtighedssensor Philips* 21 14.2.2 Temperatursensor Smartec SMT160-30-18* 22 14.2.3 Tryksensor Honeywell 142PC30A* 23 14.2.4 Chipselectkreds PEEL18CV8P-15* 23 14.2.5 Timer NE555 23 14.2.6 A/D converter ADC0804LCN 23 14.2.7 Højttaler elektromekanisk 23 14.2.8 On/Off knap 2 STK. Switch, Latching 23 14.2.9 Lysdioder til knapper 2 STK. grøn 23 14.2.10 Trykknapper 5 Stk. Switch Momentar 24 14.3 Display kort. 24 14.3.1 Displays 24*2 24 15 Memorymap. 25 16 Spændings converter. 25 16.1 Lidt om 25 16.2 Astabil multivibrator. 26 16.3 Clamper del. 27 16.4 Ensretter del. 27 17 Lufttryksmåling. 28 17.1 Lidt om 28 18 Analog/digital converter. 29 18.1 Lidt om 29 19 Operationsforstærker. 30 20 Fugtighedsmåling. 30 20.1 Lidt om 30 20.2 Kalibrering af fugtighedssensor. 31 20.3 Formler. 31 20.4 Udregninger. 32 20.4.1 Udregning af kapacitet. 32 20.4.2 Udregning af frekvens. 32 21 Kommentarer til software program. 34 21.1 void INIT(); 34 21.2 void OPSAETNING_AF_DISPLAY_PPI(); 34 21.3 void OPSAET_DISP1(); 34 21.4 void OPSAET_DISP2(); 34 21.5 void OPSAET_TAELLER(); 34 21.6 void UDSKRIV_LAVET_AF_OG_TEGN(); 34 21.7 void UDSKRIV_LAVET_AF(); 35 21.8 void UDSKRIV_TEGN(); 35 Per Bruhn Side 3 / 62 06-01-99

21.9 void OPSAET_IO_PORT(); 35 21.10 void MAAL(); 35 21.11 void UDETEMP(); 35 21.12 void INDETEMP(); 36 21.13 void FUGT(); 36 21.14 void LUFTTRYK(); 36 21.15 void SCAN_KNAPPER(); 36 21.16 void MAALING_AF_UDETEMP(); 37 21.17 void MAALING_AF_INDETEMP(); 37 21.18 void MAALING_AF_PULSBREDDE(); 37 21.19 void MAALING_AF_PULSER(); 37 21.20 void UDREGN_UDSKRIV_AF_UDETEMP(); 38 21.21 void UDREGN_UDSKRIV_AF_INDETEMP(); 38 21.22 void UDREGN_UDSKRIV_FUGT(); 38 21.23 void MAALING_AF_LUFTTRYK(); 38 21.24 void UDREGN_UDSKRIV_LUFTTRYK(); 38 21.25 void LUFTAENDRING(); 39 21.26 void DELAY(int,int); 39 21.27 void LCD1_PLADS(char); 39 21.28 void LCD1_KARAKTER(char,const void * ); 39 21.29 void LCD1_DISPLAY_PRINTF(const char,const char *,...); 39 21.30 void LCD2_PLADS(char); 40 21.31 void LCD2_KARAKTER(char,const void * ); 40 21.32 void LCD2_DISPLAY_PRINTF(const char,const char *,...); 40 21.33 void RESET(); 40 21.34 void INDE_MIN_MAX(); 40 21.35 void MIN_INDE(); 40 21.36 void MAX_INDE(); 40 21.37 void UDE_MIN_MAX(); 41 21.38 void MIN_UDE(); 41 21.39 void MAX_UDE(); 41 21.40 void ALARM(); 41 21.41 void START_LYDALARM() 41 21.42 void STOP_LYDALARM() 41 21.43 interrupt [0x1B] using [1] void T1_int (void) 42 21.44 void main (void) 42 Per Bruhn Side 4 / 62 06-01-99

22 Konklusion. 43 23 Litteraturliste. 44 24 Appendiks A: Diagramtegninger. 45 25 Appendiks B: PEEL programmer. 46 26 Appendiks C: Struktureret program. 47 27 Appendix D: Software program. 48 28 Bilag 1: Relevante datablade. 49 28.1 Datablad: Mikroprocessor 80C31P 49 28.2 Datablad: EEPROM 27C256-12F1 50 28.3 Datablad: RAM KM62256DLP7 51 28.4 Datablad: Addresselatch 74hc573 52 28.5 Datablad: I/O port 82C55A 53 28.6 Datablad: Chipselectkreds PEEL18CV8P-15 54 28.7 Datablad: Seriel I/O MAX232 55 28.8 Datablad: Spændingssupervisor TL7705ACP 56 28.9 Datablad: Philips fugtighedssensor. 57 28.10 Datablad: Tryksensor Honeywell 142PC30A. 58 28.11 Datablad: Temperatursensor Smartec SMT160-30-18. 59 28.12 Datablad: Timer NE555 60 28.13 Datablad: A/D converter ADC0804LCN 61 28.14 Datablad: Operationsforstærker TL072 62 Per Bruhn Side 5 / 62 06-01-99

2 Forord. Denne rapport beskriver alle faser i opbygningen af en vejrstation, det være lige fra udvælgelsen af komponenter, opbygning af elektronikken, udviklingen af softwaren, tidsplaner og problemstillinger. Vejrstationen er blevet fremstillet i samarbejde med Thomas Nielsen, og med bistand fra lærere og andre elever. Rapporten har jeg selv skrevet, men i de tilfælde hvor der sat en * efter overskriften har jeg helt eller delvis lånt noget af det, som Thomas har skrevet. 3 Indledning.* Hvis der er noget vi mennesker kan snakke og diskutere om, så må det være vejret. Lige siden de første mennesker kom på jorden har der gået diskussioner om hvordan vejret bliver i morgen, om en uge eller næste år. Mange mennesker er hver dag afhængige vejret. Piloter, søfolk, landmænd,bare for at nævne nogle, verden over, er nød til at have en præcis melding om vejret i netop deres område, så de kan tilrettelægge deres arbejde på en fornuftig og økonomisk måde. Efterhånden sidder der også mange små vejrstationer i de danske hjem. Før i tiden var det typisk store dyre barometre og termometre der sad på en plade eller direkte på væggen. I dag er det små digitale batteridrevne vejrstationer, der for et par hundrede kroner kan købes i mange butikker. Vi valgte at lave en mikroprocessor styret vejrstation, der kunne måle temperatur inde og ude, luftfugtighed og lufttryk. Det skulle være muligt at gemme min/max temperatur, og der skal være udlæsning til display. Den originale kravspecifikation er at finde som billag til denne rapport. Per Bruhn Side 6 / 62 06-01-99

4 Lidt generelt om vejret. 4.1 Om temperaturen.* Det første termometer blev bygget for 400 år siden. Det var ikke ret præcist, faktisk kunne man ikke se hvad temperaturen var; men kun at den ændrede sig. Det var Galilei Galileo der opfandt dette, først 150 år senere begyndte man at lave skalaer for temperatur. Der findes flere forskellige metoder at måle temperatur på. I Europa bruger vi Celsius grader ( C); mens de i USA benytter fahrenheit ( F). Derudover findes der også Kelvin grader. Vi har valgt at benytte Celsius, da vi er i Danmark. Nedenstående formler bruges til omregning mellem Celsius og fahrenheit grader. x [ C ] = ( 9/5 x + 32) [ F ] x [ F ] = 5/9 ( x 32 ) [ C ] 4.2 Om luftfugtigheden.* Det er sådan at atmosfærisk luft optager vandmolekyler og dermed dannes en fugtighed i luften. Dette fænomen har man naturligt valgt at kalde luftfugtighed. Luftens evne til at mætte sig med vandmolekyler afhænger bl.a. af temperaturen; jo varmere des flere molekyler kan luften optage. g F = abs 3 m Ved 20 C kan luften optage 17g vand pr kubikmeter og ved en stigende temperatur f.eks. 60 C kan luften optage op til 140g pr kubikmeter Per Bruhn Side 7 / 62 06-01-99

4.3 Om lufttrykket.* Jorden er omgivet af atmosfæren, og den skaber et lufttryk der varieres alt efter vejrforholdene. Et højt lufttryk betyder godt stabilt vejr, og modsat betyder et lavt tryk dårligt ustadigt vejr. Lufttrykket er størst ved jorden, og tager af jo længere ud i rummet man kommer. Det første kviksølvbarometer der blev bygget omkring 1644. Senere i 1849, opfandt en franskmand et barometer, der bestod af beholder med 2 fjedrene halve skaller. Alt efter trykket trak skallerne sig ind eller ud og ved hjælp af sindig mekanik blev udsvingene overført til en viser. Der findes flere måder at måle lufttryk i. I Danmark er det hpa, og for få år siden brugte man også mbar ( bruges stadig US). En anden trykmåling er PSI (Pounds per Square Inch). Der findes 3 former for lufttryks måling: 1. Absolute pressure. 2. Differential pressure. 3. Gage pressure. Ved absolut tryk er trykket målt i forhold til en 0 reference. Det er denne form for måling vi bruger i vejrstationen. Differential tryk måles trykforskellen mellem 2 porte. Og den sidste måle form Gage tryk måler et tryk i forhold til atmosfærisk tryk ( i rummet). KiloPascal millibar PSI 40 100 180 400 1000 1800 5 10 15 20 25 30 Omregningstabel for luftfugtighed. Per Bruhn Side 8 / 62 06-01-99

5 Indsamling af informationer.* Som det første vi gjorde, var at undersøge markedet for hvilke typer sensorer der fandtes. Søgningen foregik ved hjælp af Internettet og diverse elektronik kataloger, samt direkte kontakt med leverandøren. Der var ingen problemer med temperatur sensorerne, vi støtte hurtigt på en prisbillig sensor med digital output. Luftfugtighedssensoren var heller ikke noget problem, dem findes der nemlig ikke så mange af, og alle steder vi ledte støtte vi på en Phillips sensor, som totalt dominerede markedet. Problemet var at finde den rigtige tryksensor. De findes i et utal af størrelser og typer, og lige nøjagtig den vi kunne bruge var ingen steder.det blev løst da vi telefonisk kontaktede Honeywell, som netop havde en ny type sensor på markedet der ikke stod opført i nogen af de kataloger vi havde søgt i. Efter vi havde fundet vores sensorer, udarbejde vi en kravspecifikation og brugervejledning som er placeret som bilag i denne rapport. Den endelige vejrstation er opbygget så vidt muligt efter den. Per Bruhn Side 9 / 62 06-01-99

6 Udviklingsværktøjer.* Der blev af skolen stillet en række værktøjer til rådighed. Til udvikling af softwaren anvendte vi Borlands C++ compiler version 4.5. Protels EDA Client 3.2 til diagramtegning og til udvikling af PEEL og EEPROM brugte vi en EEPROM brænder med tilhørende software. For ikke at skulle brænde en ny EEPROM hele tiden kunne vi låne en 8 bits EPROM Emulator. Diagramtegning og softwareudvikling er udarbejdet på en Pc 266Mhz også stillet til rådighed af TSR. Derudover har vi brugt et 20 MHz Oscilloscope, universal counter og multimeter til måle og fejlfindingtest Derudover blev der stillet et utal af databøger samt andet litteratur til rådighed. For at kunne benytte compileren skulle en dongle monteres på LPT porten. 7 Brugervejledning. Vejrstationen viser i den øverste linie til venstre den aktuelle ude temperatur. I midten, min. ude temperatur, og til højre, max. ude temperatur. I den anden linie vises den aktuelle inde temperatur til venstre. I midten, min. inde temperatur og til højre, max. inde temperatur. Min. og max. Temperatur resettes ved at man, f.eks. ved min. inde trykker man knappen min. inde ned og trykker samtidig på reset. Trykker man kun på reset og gør det i 3 sek. vil alle min/max værdier resettes. I 3 linie vises i venstre side lufttrykket, og i højre side, om lufttrykket har været stigende, faldende eller jævnt i de sidste 2 timer. I 4 linie vises i venstre side luftfugtigheden inde, og i højre side vil der blinke frost, hvis der er under 2 c, blinke storm hvis der er under 960 hpa, eller blinke frost/storm, hvis der er under 2 c og under 960 hpa. Der er en knap til akustisk frostalarm, og en til akustisk stormalarm. Er knapper trykket ind er akustisk alarm til, og er den ude er akustisk alarm fra. På RS232 porten kan der udtages data til pc eller tilsluttes et kit med vindhastighed, vindretning og regnmåler. Per Bruhn Side 10 / 62 06-01-99

8 Tekniske data. Vejrstationen viser både ude og inde temperatur, samtidig med minimum og maksimum temperatur, der kan nulstilles hver for sig. Den viser barometerstand, og om lufttrykket har været stigende, faldende eller jævnt inden for de sidste 2 timer. Den har hygrometer (luftfugtighed) Den har akustisk frostalarm, og der blinker frost i displayet. Den har akustisk storm alarm, og der blinker storm i displayet. Den har afbryder til akustisk alarm, til henholdsvis frost og storm. Den har et udtag til dataopsamling. Den har mulighed for et udvidelseskit med vindhastighed, vindretning og regnmåler. Temperatur fra 40 til +100 C Barometerstand fra 900 til 1155 hpa Hygrometer fra 30 til 90 % fugtighed Frost alarm ved 2 C Stormvarsels alarm ved 960 hpa 9 Målepunkter. 9.1 uprocessor kit. I uge 39 skulle up kittet, ved hjælp af et lille testprogram, kunne tænde og slukke lysdioder der er sat på I/O portene. 9.2 Temperatur del. I uge 40 skulle temperaturdelen testes. Dette blev gjort ved hjælp af en frekvenstæller, da det er en frekvens der kommer på udgangen af temperatur trinnet. Frekvensen varierer i forhold til temperaturen. Variationer af temperaturen blev lavet med loddekolbe ved at ånde på den og den blev lagt ud i kulden. 9.3 Barometer del. I uge 43 skulle barometerdelen testes. Dette blev gjort ved at puste på, og suge fra føleren. Og ved at trykke på følerens indgang, det ændrer udgangssignalet på fra føleren. 9.4 Hygrometer del. I uge 45 skulle hygrometerdelen testes. Dette blev gjort ved at måle en varierende frekvens, alt efter fugtigheden, på udgangen af timer NE555. Det blev gjort ved at vi åndede på føleren. Per Bruhn Side 11 / 62 06-01-99

9.5 Display og knapper. I uge 46 skulle display og knapper testes. Dette blev gjort ved at trykke på en knap og knappens funktion vises i begge displays (f.eks. temp min). Testen skulle udføres på alle knapper. 10 Tidsplaner for vejrstation. 10.1 Planlagt tidsplan for vejrstation. ARBEJ\UGE 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 Research X X X X X UP kit X X X X X F Temp del X X E Baro del R X X X Hygro del I X X X Disp/knapper X X E X Software X X X X X X X X X X Rapport X X X X X X X X X X X X X X X X 10.2 Sand tidsplan for vejrstation. ARBEJ\UGE 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 Research X X X X X UP kit X X X X X X F Temp del X X E X Baro del R X X X Hygro del X I X X X Disp/knapper X X X E X X X X X Software X X X X X X X X X X X Rapport X X X X X X X X X X X X X X X X Per Bruhn Side 12 / 62 06-01-99

11 Pris. 11.1 uprocessor kit. CPU 80C31P RS 635-820 30,45 EEPROM 27C512-12F1 RS 497-662 45,85 RAM KM62256DLP7 F 794-144 26,46 LATCH 74HC573 RS 643-512 11,80 VOLTOVERVÅGNING TL7705ACP F 414-116 9,45 SERIEL I/O MAX232 RS 655-290 21,94 I/O PORT 82C55A-2 RS 631-250 40,85 PEEL PEEL18CV8P-15 F 702-936 26,21 KRYSTAL 11,0592 MHz RS 311-732 7,85 D-CONNECTOR 9 POL RS 139-2502 2,80 50 PINS STIK RS 471-092 26,10 11.2 Sensor kort. FUGTIGHEDSSENSOR PHILIPS RS 141-8632 110,65 TEMP SENSOR SMT160-30-18 F 640-438 91,22 TEMP SENSOR SMT160-30-18 F 640-438 91,22 TRYK SENSOR 142PC30A HONEYWE 803,00 TIMER NE555 F 409-376 2,47 A/D CONVERTER ADC0804LCN F 396-187 44,89 HØJTTALER ELEKTROMEKANISK RS 228-1627 28,30 TRYKKNAP 5 STK. SWITCH MOMEN F 143-355 92,20 ON/OFF KNAP 2 STK. SWITCH, LATCHING F 150-585 93,96 INDIKATOR 2 STK. GRØN F 146-218 12,30 DIVERSE 100,00 11.3 Display kort. DISPLAY 20*2 F 325-405 215,33 DISPLAY 20*2 F 325-405 215,33 I ALT 2150,63 Per Bruhn Side 13 / 62 06-01-99

12 Blokdiagram over vejrstation. BLOKDIAGRAM OVER VEJRSTATION FUGTIGH PS Ne55 FØLE RS232 up kit UDE FØLE FØLE INDE DISPLAY V/ F DISPLAY AM BAROMET FØLE KNAPP Per Bruhn Side 14 / 62 06-01-99

13 Overordnet beskrivelse.* µprocessor kit Sensorer Knapper Displays Fig.1. Simpelt blokdiagram over vejrstationen. Vejrstationen består af 3 kort. Et mikroprocessor kit, opbygget omkring en 80C31 processor, et kort hvorpå der er sat 2 displays (20*2 dots), og til sidst et kort hvorpå sensorerne og den elektroniske tilpasning sidder. På dette kort sidder også min/max samt reset knapperne. Disse 3 kort vil i de efterfølgende kapitler blive beskrevet nærmere. Til projektet hører en diskette med programmet Vejrstation. Programmet er udviklet i C sproget og er nødvendigt for at vejrstationen skal fungere. Software vil blive beskrevet og forklaret ved hjælp af struktur diagrammer og almindelig tekst. 14 Komponenter i vejrstation. 14.1 µprocessor kit. Mikrocontroller kittet var det første der blev bygget, hvilket også vel var naturligt, da må betegnes som hjertet i vejrstationen. Da kittet var færdigt blev det testet ved hjælp af en testprom udviklet af en tidligere elev. Testprommen der blev brugt kunne få I/O porten på µ-processoren til at stå og toggle, og dermed kunne det meste af kortet testes for fejl.. For at teste PEEL og PPI kredsene laver vi et lille program der skrev ud til de 3 porte på PPI en.* Per Bruhn Side 15 / 62 06-01-99

14.1.1 Mikroprocessor 80C31P* Vejrstationens mikrocontroller er en 80C31, det var en lærerne havde bestemt at vi skulle bruge til vores projekt, det er en controller med fire I/O-porte, to 16 bits timere/tællere. Til adressering er der 16 bit, hvoraf de første 8 (a0-a7) også virker som data bus. 11,059 MHz Xtal1 port 0 Xtal2 80C31 Port 1 Port 3 Port 2 Symbol for 80C31. Port 0. Multiplexet adresse og data bus (ad0-ad7). Port 1. I/O port. Port 2. Adresse bus (a8-a15). Port 3. I/O port eller port med følgende alternative ben: TxD Data transmit RxD Data receive. INT0* Ekstern interrupt 0. INT1* Ekstern interrupt 1 T0 Indput til intern Timer/Counter 0. T1 Indput til intern Timer/Counter 1. WR* Write puls RD*. Read puls For at 80C31 eren kan fungere skal den have forbundet et krystal mellem X1 og X2 (ben 18 og 19). Dette krystal skal være på mellem 1,6 og 12Mhz, og hvis man agter at benytte den indbyggede UART anbefales det at benytte et krystal på 11,059MHz. Per Bruhn Side 16 / 62 06-01-99

14.1.2 Addresselatch 74hc573* Da µ-processoren har en multiplexed adresse/databus er det nødvendigt med en latch der kan styre bus tildelingen. Adresselatchen bliver brugt til at dele den kombinerede adresse/data bus så man får adressebit 8-15 ud for sig selv. IC2 er en 8 bits latch med dette formål. Latchen styres af ALE/P signalet fra µ-processoren som kobles på C benet. 14.1.3 EEPROM 27C256-12F1* IC3 er en EEPROM på 256 KB hvori vejrstationens software er brændt ned i. EEPROM står for Electrical Eraseable Programable Read Only Memory, som betyder at kredsen er en elektrisk sletbar og programmerbar ROM. For ikke at skulle brænde en ny kreds hele tiden anvendte vi en emulator under software udviklingen. Emulatoren virker som en simulator, og derfor kan programmer nemt afprøves. Den monteres mellem programmør Pc en og EEPROM soklen på kittet. Derved kan ens program til stadighed afprøves hvilket jo spare en del tid. 14.1.4 RAM KM62256DLP7* Ram (Random Access Memory) er den flygtige hukommelse, som forsvinder når der slukkes for strømmen. RAM en består af en HM62256 kreds. Som navnet angiver er det en kreds på 256 Kb. Kredsen bliver selekteret af CS0, der kommer når a15 er lav. Se under PEEL afsnittet. 14.1.5 Seriel I/O MAX232* Max 232 er en seriel interface kreds, der omdanner TTL niveauer (0-5volt) til et niveauer som passer til RS232 interface på +-12 volt. Kredsen gør det muligt at benytte den serielle port på µ-processoren. MAX 232 har to sæt serielle ind og udgange (T/R1 og T/R2). På vejrstationen er der kun monteret 1 stk. DB9 stik, derfor benyttes kun den ene T/R1. TXD RXD Per Bruhn Side 17 / 62 06-01-99

14.1.6 Spændingssupervisor TL7705ACP* Spændingssupervisoren overvåger de 5 volt der kommer ind fra forsyningen, og i tilfælde af at der kommer et spændingsfald på 0,5 volt vil den generere en reset puls der kan bruges af up og andre kredse der muligvis blev ustabile af et spændingsfald. Mikrocontroller kittet bliver forsynet ned 13.5 volt, der bliver sat til skrue terminalen (1=ground + 2=Vcc). Forsyningen kører ind på en 7805 (IC5), der er regulerer spændingen ned til +5 volt. 1: Vcc +5 V ind +5 volt ud sense 2: Gnd 3: +5v 13,5 V 1 2 3 reset in reset 7805CT TL7705ACP Spændings overvågningen føler på den +5 volt der kommer ind på sense indgangen. Hvis den falder under threshold niveauet genereres en reset til mikroprocessoren. Tiden der går fra spændingen igen overstiger niveauet og til reset går lav regnes ud på følgende måde (Ct er timings kondensatoren [Farad] der sættes til ben 3 og td : [Sec] er delay tiden Ct td = 1, 3 10 3 Ct sense threshold tid!reset td tid Per Bruhn Side 18 / 62 06-01-99

14.1.7 I/O port 82C55A-2* PPI eller Programmable Peripheral Interface er som navnet antyder et programmerbart interface for ydre enheder. Kredsen har 3 8-bit I/O porte som benævnes port 1,2 og 3. Disse porte kan sættes op til at køre i 3 forskelle modes. Vi benytter mode 0, der er betyder at porten er sat op til basic I/O operations. Hver port kan sættes individuelt sættes op, alt efter hvilket control word der bliver sendt. På PPI en benytter port 1 (bit 1og 2) til vælge temperatur sensor via PEEL en på sensor kortet. Et højt niveau på port1 bit 1 vælger Temp føler 1 og et højt niveau på bit 2 vælger Temp føler 2. Bit 3 er også ført til PEEL en, da vi havde tænkt på at lade fugtigheds sensoren indgå i PEEL selekteringen. Jeg beskriver PEEL kredse nærmere i et senere afsnit. Port 2 og 3 er frie porte der kan benyttes til en evt. udbygning af vejrstationen. 14.1.8 Chipselectkreds PEEL18CV8P-15* På mikro controller kittet bruger jeg en PEEL kreds,som er en programmerbar elektrisk sletbar logik kreds. Denne type kreds er typisk anvendt i µprocessor kredsløb, hvor den fungerer som adresse dekoder. PEEL en kan erstatte op til 200 gates, hvilket gør den fortræffelig til at binde boolske udtryk. Man siger at PEEL en har en reducerings faktor på 10, hvilket betyder at et design der før krævede 10 gates pakker, nu kan erstattes af 1 PEEL kreds. En PEEL kan hedde 18cv8, hvilket betyder at kredsen har 18 indgange og 8 kombinerede ind- og udgange. I1_ clk 1 20 Vcc I2 2 19 IO19 I3 3 18 IO18 I4 4 17 IO17 I5 I6 5 6 16 15 IO16 IO15 I7 7 14 IO14 I8 8 13 IO13 I9 9 12 IO12 Gnd 10 11 I11 PEEL 18cv8 Per Bruhn Side 19 / 62 06-01-99

Når man skal lave en PEEL foregår det i 3 faser: 1) Udledning af boolsk udtryk. 2) Editering/Assemblering og simulering af de boolske udtryk. 3) brænding af kredsen. Til udvikling af en PEEL kreds kræves en EPROM brænder med tilhørende software, samt udviklings software. Vi havde en ALL03 brænder med software til brænding af PEEL kredse og ICT PEEL develoment software til assemblering og simulering. Vejrstationen indeholder 2 stk. PEEL kredse. Den ene sidder på µprocessor kittet og er en 18cv8 PEEL(IC8) se appendiks B, den anvendes som adresse dekoder og PEEL en bruger de 8 højeste adresse ben fra adressebussen samt RD og WR til input, og som output er der defineret 8 stk. chipsselect (CS0-CS7), selv om der er defineret 8 stk. output er det kun 5 der bliver brugt. Appendiks B er en udskrift af udviklingsprogrammet til IC8, og der kan man se såvel input som output defineret; men også de boolske udtryk der er gældende for de enkelte CS. Når A15 er lav (!A15) er RAM en selekteret, ellers gælder nedenstående memorymap. I de tilfælde hvor display1 (CS2) eller display2 (CS3) bliver valgt benyttes A0 og A1 henholdsvis som RS (register select) og W/R (select read or write). Memorymappen blev designet i samråd med de andre studerende, da dette ville lette senere programmering samt evt. fejlfinding. Den anden PEEL sidder på sensor kortet og bruges der lidt anderledes. Det vil jeg komme ind på i kapitlet om sensor kortet. 14.1.9 Krystal 11,0592 MHz Krystallet på 11,0592 er valgt for at det havde en frekvens der passede til RS232 porten Per Bruhn Side 20 / 62 06-01-99

14.2 Sensor kort. På dette kort har vi valgt at sætte sensorerne med deres respektive tilpasningskredsløb. Her er der også blevet plads til min/max og on/off knapperne, samt alarmgiver. Kortet blev først lavet uden PEEL kredsen, men for at spare en timer indgang på µ- processoren valgte vi at sætte en ind. Og som tidligere skrevet er PEEL en god til at sættes op som et gate kredsløb. 14.2.1 Fugtighedssensor Philips* Sensoren er en Philips hudmidity sensor, der alt efter luftfugtigheden giver en kapacitet ud. Sensoren består af en plade belagt med guld, og ved en fugtigheds forandring ændre pladens dielektricitets konstant sig og dermed kapaciteten. 150 140 130 120 110 100 90 80 10 20 30 40 50 60 70 80 90 X-akse = 10-90% Y-akse = 80-150 pf Karakteristika for Philips luftfugtigheds sensor. Som det ses i ovenstående diagram stiger kapaciteten med luftfugtigheden og at kurven ikke lineær. Processoren kan ikke behandle en kapacitet, derfor må udgangssignalet fra sensoren ændres til noget den forstår f.eks. en frekvens. Her valgte vi en Timer kreds NE555, fordi den kan sættes op til at virke som en oscillator med en duty cycle på 50 %. Ideen fik vi bl.a. fra bogen PC wetterstation. Se kapitel 8.2.1 for yderligere information. Per Bruhn Side 21 / 62 06-01-99

14.2.2 Temperatursensor Smartec SMT160-30-18* +5v Smartek digital temperatur sensor. De anvendte temperatur sensorer hedder BS-160 SMARTEK og det er en digital sensor. Da den er digital betyder det at, den har et output der ligger og svinger mellem 0 og 5 volt og 1 4 khz. Så kunne man jo håbe, at det så var sådan, at frekvensen var bestemmende for hvad den aktuelle temperatur; men sådan er det bare ikke. Det er nemlig duty cyclen der bestemmer den aktuelle temperatur, altså forholdet mellem høj og lav puls. For at måle dette forhold anvender vi INT0* indgangen på processoren Når der kommer en høj puls på dette ben aktiveres T0 tælleren og når pulsen igen går lav stoppes den. Vi måler længden på den høje puls for derefter at invertere den lave og måle denne. Det bevirker at vi har et udtryk for både den høje og lave del af frekvensen og ved hjælp af nedenstående formel udregnes så den aktuelle temperatur. Sensoren findes i flere forskellige typer huse. Vi valgte TO18, som er metal versionen. D. C. = 0, 32 + 0, 0047 t Her gælder det at D.C er duty cyclen og t er temperaturen i C. Her er to eksempler : D. C.(0 = 0, 32 + 0, 0047 0 = 0, 32 eller 32 %) Altså hvis temperaturen er 0 C er der forhold mellem høj og lav puls på 32 %. D. C.(100 = 0, 32 + 0, 0047 100 = 0, 79 eller 79 %) Ved 100 C er der en duty cycle på 79 %. Per Bruhn Side 22 / 62 06-01-99

14.2.3 Tryksensor Honeywell 142PC30A* Tryksensor der måler det absolutte lufttryk fra 0-30 Psi eller 0-2068 hpa. Og med en 8 volts forsyning giver en spænding ud på 0-5 volt, men med en offset på 1 volt ved 8 volt forsyning, så outputspændingen bliver på 1-6 volt. Som tidligere nævnt var det ikke nemt at finde en sensor der kunne bruges. P1 P2 Lufttryks sensor140pc 14.2.4 Chipselectkreds PEEL18CV8P-15* PEEL en på kortet bruges til at vælge temperatur sensor. Indgangs benene 6 og 7 er sat til PPI ens P1 ben 1 og 2. Det er dem der bestemmer hvilken sensor der lukkes igennem og ud på ben 15, det bliver ledt tilbage og AND et med INT0 på ben 9, de kommer så ud på ben 12 og 13, ledt tilbage og OR ret og resultatet kommer ud på ben 16 = out. 14.2.5 Timer NE555 Denne kreds har til formål at generere en frekvens afhængig af kapaciteten fra fugtighedssensoren. Denne type kreds har mange muligheder, og en af dem er generere en frekvens med 50% duty cycle. vi bruger den på denne måde til at få en variabel frekvens ud afhængig af kondensatorens(fugtighedssensoren) størrelse. For at lave en 50% duty cycle kræver det at man den er sat rigtigt op, det kan ses i afsnittet om fugtighedsmåling. 14.2.6 A/D converter ADC0804LCN Analog til digital konverteren bruges til at lave en variabel 0-5 volt om til en 8 bit binær kode. 14.2.7 Højttaler elektromekanisk 14.2.8 On/Off knap 2 STK. Switch, Latching 14.2.9 Lysdioder til knapper 2 STK. grøn Per Bruhn Side 23 / 62 06-01-99

14.2.10Trykknapper 5 Stk. Switch Momentar På sensor kortet er der placeret 5 knapper til styring af min/max temperatur. Knapperne fungerer ved at der lægges 5 volt på en pin på multistikket (S3) via en pull modstand. Fra multistikket er der forbindelse til µ-processorens port 4 (I/O) bit 3-7. Vcc S3 4,7K Gnd 14.3 Display kort. 14.3.1 Displays 24*2 Display kortet indeholder 2 LCD displays på hver 2*24 dots med et 10Kilo s potmeter til at justere lysstyrken. Displayene er af typen LM032L og de er fremstillet af HITACHI. Den første ide vi fik gik ud på at bruge et display; men det blev hurtigt droppet, da de store display er temmelig dyre. Skolen havde displays på 24 * 2 dots derfor valgte vi at bruge disse. 10 K VO EN CS2 D0-D7 RS R/W A0 A1 HITACHI LM032L displays Displayene bliver enablet (valgt) med henholdsvis CS2 for display 1 og CS3 for display 2. Adresse bit 1 (A0) bruges til register select og A1 til R/W, altså om der skal læses eller skrives til displayet. Per Bruhn Side 24 / 62 06-01-99

15 Memorymap. Adresse Bitmønster CS KALD 8000 1000.0000.0000.0000 CS 1 PPI 1 8001 1000.0000.0000.0001 CS 1 PPI 2 8002 1000.0000.0000.0010 CS 1 PPI 3 8003 1000.0000.0000.0011 CS 1 COMM 8100 1000.0001.0000.0000 CS 2 DISP1 ins kode WR 8101 1000.0001.0000.0001 CS 2 DISP 1 data inp WR 8102 1000.0001.0000.0010 CS 2 DISP 1ins kode RD 8103 1000.0001.0000.0011 CS 2 DISP 1 data inp RD 8200 1000.0010.0000.0000 CS 3 DISP 2 ins kode WR 8201 1000.0010.0000.0001 CS 3 DISP 2 data inp WR 8202 1000.0010.0000.0010 CS 3 DISP 2 ins kode RD 8203 1000.0010.0000.0011 CS 3 DISP 2 data inp RD 8300 1000.0011.0000.0000 CS 4 ADC A0 = RS A1 = R/!W 16 Spændings converter. 16.1 Lidt om Vi bruger dette kredsløb til at lave minus spænding til operationsforstærkeren. Det består af en astabil multivibrator, en clamper del, og en ensretter del. +15V +8V R4 680 C3 R5 100K 680pF T1 BC547NPN R6 100K C4 680pF T2 BC547NPN R7 680 R8 560 T3 BD139 PNP R9 56 CL2 2000uF D1 1N4148 D2 1N4148 R10 1,5M D3 1N4148-4V CL3 100uF GND GND Per Bruhn Side 25 / 62 06-01-99

16.2 Astabil multivibrator. Den astabile multivibrator har ingen fast stilling men vil oscillere med en bestemt frekvens og med en firkantkurve. Pulstiden er bestemt af R6 og C4 og er: Pausetiden er bestemt af R5 og C3 og er: T1 = 0, 7 R6 C4 Periodetiden er: T2 = 0, 7 R5 C3 Ttot = T1 + T2 Frekvensen er: F = 1 t tot +8V R4 680 R5 100K R6 100K R7 680 C3 680pF T1 BC547NPN C4 680pF T2 BC547NPN R8 560 GND Pulstiden er bestemt af R6 som er 100KΩ og C4 som er 680pF og er: T1 = 0, 7 100KΩ 680pF = 47, 6µ sec. Pausetiden er bestemt af R5 som er 100KΩ og C3 som er 680pF og er: T2 = 0, 7 100KΩ 680pF = 47, 6µ sec. Periodetiden er puls og pausetiden lagt sammen: T tot = 47, 6µ + 47, 6µ = 95, 2µ sec. Frekvensen er det reciprokke af periodetiden: F 1 = = 95, 2µ 10, 504KHz Multivibratoren vil altså svinge med en frekvens på 10,504 KHz og med en spænding på 0-8 volt. Per Bruhn Side 26 / 62 06-01-99

16.3 Clamper del. Clamper delen får pulserne fra multivibratoren ledt igennem en FET, som virker som strømforstærker, derefter igennem en elektrolytkondensator som laver pulserne om til ±4volt og forbi en diode som flytter spændingen på pulserne ned til 0 til 8 volt. +15V T3 BD139 PNP R8 CL2 560 R9 56 2000uF D1 1N4148 R10 1,5M 16.4 Ensretter del. Pulserne fra clamperdelen bliver derefter ensrettet i denne dobbelte ensretter og derefter glattet ud med elektrolytkondensatoren så vi for en jævnspænding ud på 4 volt. D2 1N4148 D3 1N4148-4V CL3 100uF GND Per Bruhn Side 27 / 62 06-01-99

17 Lufttryksmåling. 17.1 Lidt om Lufttrykket måles ved at man tager outputtet fra lufttrykssensoren og sender det til en analog til digital converter som så konverterer signalet til et 8 bits binært tal, og sender det via databussen til CPU en. Tryksensoren måler det absolutte lufttryk fra 0-30 Psi. 1 Psi er 68,947 millibar eller hectopascal. 30 68,947 = 2068,41 hpa Det vil sige at tryksensoren måler det absolutte lufttryk fra 0-2068,41 hpa. Og med en 8 volts forsyning giver en spænding ud på 0-5 volt, men med en offset på 1 volt ved 8 volt forsyning, så outputspændingen bliver på 1-6 volt. Da vi vil måle lufttryksændringer fra 900-1155 hpa. Bliver vi nødt til at regne lidt på hvilket spændingsområde det er. 2068,41 hpa måles i et område fra 0-5 volt. Hvis vi dividerer 2068,41 med 5 for vi hpa pr. volt. 2068,41 5 = 413,68 hpa pr. volt hvis vi dividerer 1 volt med 413,68 hpa for vi volt pr. 1 hpa.: 1 413,68 = 2,42mV pr. hpa. Vi vil måle fra 900-1155 hpa, hvis vi så ganger de tal med volt pr. hpa vil vi få det område vi skal måle i.: 900 2,42mV = 2,178 volt 1155 2,42mV = 2,795 volt vi skal altså måle i et område fra 2,178-2,795 volt. Det giver et område på 0,617 volt. 2, 795 2, 178 = 0617 volt. Outputtet fra lufttrykssensoren bliver ført ben 6 Vin(+) på ADC en. Per Bruhn Side 28 / 62 06-01-99

18 Analog/digital converter. +5V POT1 10K +5V GND Databus til Cpu 20 Rd og Wr til Cpu Til port 4 på Cpu AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 Fra PEEL IC9 18 17 16 15 14 13 12 11 5 1 2 3 lsbdb0 DB1 DB2 DB3 DB4 DB5 DB6 msbdb7 INTR CS RD WR VccREF IC10 ADC0804 Vin(-) Vin(+) A-GND Vref/2 CLK-R CLK-IN 7 6 8 9 19 4 Fra tryksensor GND R11 10K 150pF C5 Fra Op-amp IC12 GND 18.1 Lidt om Når ADC en får en offset spænding ind på ben 7 og en spænding der er halv så stor som det spændingsområde der skal måles ind på ben 9 ændrer den selv offsettet og forstærker signalet så det bliver 0-5 volt. På ben 4 er CLK-IN der kommer fra et RC led, som genererer sample frekvensen. På ben 5 er!intr der afgiver en høj puls mens ADC en konverterer indputsignalet til en 8 bit binæer kode. På ben 6 er Vin(+) som er signalet (3,178-3,795 volt) fra lufttrykssensoren som skal konverteres. På ben 7 Vin(-) på ADC en kommer offsettet fra POT1 og det skulle være 2,178 volt som vi havde regnet ud tidligere men vi skal lige lægge den ene volt til som sensoren havde i offset, det giver 3,178 volt. 10K POT1 +5V GND På ben 9 (Vref/2) på ADC en kommer der en spænding der skal være det halve af det spændingsområde vi skal måle og det er: 0,617 2 = 0,31 volt. Per Bruhn Side 29 / 62 06-01-99

Den spænding kommer fra operationsforstærkeren TL072 i IC12 På ben 11 18 er DB0-DB7 som er tilsluttet direkte på databussens bit 0-7. På ben 19 er CLK-R der kommer fra et RC led, som genererer sample frekvensen. 19 Operationsforstærker. Den spænding ADC en får på ben 9 (Vref/2), for den fra en operationsforstærker, den for en spænding ind på ben 3 som justeres så udgangen ben1 bliver på 0,31 volt. Operationsforstærkeren er sat op så den giver 1 gangs forstærkning og har en lav udgangs impedans. +5V CL4 1uF R17 4,7K 1 IC12A TL072 8 4 2 3 GND GND -4V GND 10K POT2 +5V 20 Fugtighedsmåling. 20.1 Lidt om Fugtigheden måles med en fugtighedssensor fra Philips, der virker som en variabel kondensator, der bliver på flere pf jo højere fugtighed der er. Fugtighedssensoren er koblet til en timer kreds, der giver en variabel frekvens ud alt efter hvor mange pf kondensatoren er på, jo flere pf jo lavere frekvens kommer der ud af timerkredsen. Det bliver ført til T0 på mikroprocessoren, det er en af de to tællere der er i mikroprocessoren. Per Bruhn Side 30 / 62 06-01-99

20.2 Kalibrering af fugtighedssensor. Kalibreringen af fugtighedssensoren, foregår ved at vikle en våd klud om sensoren, og så måle hvilken frekvens timerkredsen giver ud. Den frekvens siger vi er 90 % fugtighed, dette gøres tre gange. Derefter ligger vi den et tørt sted, og måler så den frekvens tre gange og siger at det er 10 % luftfugtighed. Frekvensen ved 90 % fratrækkes frekvensen ved 10 %, så har vi frekvensændringen, den divideres så med 80 som er forskellen i %, så for vi det tal vi skal bruge som deltal senere. Den aktuelle frekvens trækker vi fra maks. frekvensen og den frekvens vi får divideres med deltallet, for at få det antal % den har flyttet sig. Det trækkes så fra 90, så for man tallet på % luftfugtighed. R3 +5v +5V C1 22nF CL1 10uF 16v 4 2 100K R IC9 8 VCC Q TRIG NE555 DIS 3 7 OUTPUT R2 47K Til T0 på Cpu GND 5 C2 100nF CVolt GND 1 THR 6 Fra fugtighedssensor GND GND 20.3 Formler. For at finde ud af hvilken frekvens der kommer ud af timer kredsen er der de her formler, de er taget fra databladet. Det her er formlen for udregning af den ene pulstid: Her er formlen for den anden pulstid: t 2 = t1 = 0, 693 R3 c F R3 R2I HG R3+ R2 K J For at få frekvensen må man bruge denne formel: 1 F = t + t L NM c Ln R 2 ± 2 R 3 2 R2 ± R3 1 2 O QP Per Bruhn Side 31 / 62 06-01-99

20.4 Udregninger. 20.4.1 Udregning af kapacitet. I databladet for fugtighedssensoren står der at ved 43% luftfugtighed har sensoren en kapacitet på 122pF. Og sensoren ændrer sig med 0,4pF for hver % ændring i luftfugtigheden. Det vil sige, at ved 90% luftfugtighed har sensoren en kapacitet på: c90% = 122 + 47 0, 4 = 140, 8pF og ved 10% luftfugtighed har den en kapacitet på: c10% = 122 33 0, 4 = 108, 8pF 20.4.2 Udregning af frekvens. 20.4.2.1 Udregning af frekvens ved 10% luftfugtighed. Her er udregningen for den første pulstid: Her er udregningen for den anden pulstid: Her er udregningen for frekvensen: t 2 t1 = 0, 693 100K 108, 8pF = 7, 54µ s 100K 47K = 108, 8pF Ln 100K + 47K L NM 47K ± 2 100K 2 47K ± 100K t2 = 31, 97K 108, 8pF Ln 25, 5 Ln 1, 27 t = 11, 27µ s t = 0, 83µ s 2 2 1 1 F = F = 7, 54µ + 11, 27µ 7, 54µ + 0, 83µ F = 53163, KHz F = 119, 474KHz O QP Per Bruhn Side 32 / 62 06-01-99

20.4.2.2 Udregning af frekvens ved 90% luftfugtighed Her er udregningen for den første pulstid: Her er udregningen for den anden pulstid: Her er udregningen for frekvensen: t 2 t1 = 0, 693 100K 140, 8pF = 9, 76µ s 100K 47K = 140, 8pF Ln 100K + 47K L NM 47K ± 2 100K 2 47K ± 100K t2 = 31, 97K 140, 8pF Ln 25, 5 Ln 1, 27 t = 14, 6µ s t = 1, 08µ s 2 2 1 1 F = F = 9, 76µ + 14, 6µ 9, 76µ + 1, 08µ F = 41, 051KHz F = 92, 251KHz O QP Per Bruhn Side 33 / 62 06-01-99

21 Kommentarer til software program. 21.1 void INIT(); --- Her kaldes initaliseringen af display og ppi, og tæller bliver sat --- Først initialiseres displays og ppi kreds. Så udskrives hvem der har lavet programmet, det vises i 2 sekunder. Så udskrives de tegn der skal stå på displayet hele tiden. Så kaldes rutinen der opsætter tæller 1 til at tælle i 100 ms. ----------------------------------------------------------------------------------- 21.2 void OPSAETNING_AF_DISPLAY_PPI(); ------------------------- Opsætning af display ------------------------------ Her kaldes underrutinerne til opsætning af de to display og PPI port kredsen. ----------------------------------------------------------------------------------- 21.3 void OPSAET_DISP1(); --------------------------- Opsætning af display 1 -------------------------- 21.4 void OPSAET_DISP2(); ------------------------- Opsætning af display 2 ---------------------------- 21.5 void OPSAET_TAELLER(); ------------------ Sætter tæller 1 op til at tælle 50 ms --------------------------------- Først sættes variablerne sec og timin til 0 så vi ved hvad der er dem. Så sættes register IE til hex 88, der bestemmer at det er tilladt at få interrupt fra timer1's overløbsflag. Så sættes TMOD registeret til hex 11 som bestemmer hvad mode timerene skal køre i. Så lægges der -46080 i TH0 og TL0, det er 50 ms, og så startes timer 1 ved at sætte TR1 lig med 1. mem1-12 bliver sat til 1, de bruges til ændring i lufttrykket. ----------------------------------------------------------------------------------------------- 21.6 void UDSKRIV_LAVET_AF_OG_TEGN(); ------- Udskriver hvem der har lavet programmet og tegn til displayet ------ Kalder først rutinen der udskriver hvem der har lavet programmet. Så kaldes rutinen der udskriver de tegn der skal stå på displayet hele tiden. ----------------------------------------------------------------------------------------- Per Bruhn Side 34 / 62 06-01-99

21.7 void UDSKRIV_LAVET_AF(); -------------------- Udskriver hvem der har lavet det --------------------------- Her udskrives hvem der hat lavet programmet, det udskrives hver gang at der kommer en master reset eller vejrstationen bliver tændt. Det vil stå på displayet i 10 sekunder. ---------------------------------------------------------------------------------------- 21.8 void UDSKRIV_TEGN(); ------------------------- Udskrivning af gradtegn ------------------------------- Her udskrives de gradtegn, hpa og % tegn som skal stå på displayet hele tiden. --------------------------------------------------------------------------------------- 21.9 void OPSAET_IO_PORT(); ----------------------- Opsætter de 3 porte ----------------------------------------- Her sættes de tre porte på PPI kredsen til output, ved at sende hex 80 til KONTROL på adresse hex 8003, det er defineret i starten af programmet. Så ventes der 50 ms for at den skal have til at udføre det. ----------------------------------------------------------------------------------------- 21.10 void MAAL(); ------------------------- Her kaldes målingerne ---------------------------- Først kaldes inde temperatur rutinen, så udetemperatur målingen, så fugtighedsmålingen og til sidst lufttryksmålingen. ---------------------------------------------------------------------------------- 21.11 void UDETEMP(); ------------------- Her kaldes udetemperatur målingerne --------------------------- Kalder først en rutine der måler udetemperaturen. derefter en rutine der udregner udetemperaturen og udskriver det. Så kaldes MIN_MAX, der undersøger om temperaturen er højere eller lavere end det der er gemt som min eller max. Så kaldes scan knapper, der undersøger om der er trykket på nogle af knapperne. så kaldes alarm rutinen, der undersøger om temperaturen er under 2 C, eller om lufttrykket er under 960 hpa. -------------------------------------------------------------------------------------------- Per Bruhn Side 35 / 62 06-01-99

21.12 void INDETEMP(); ------------------- Her kaldes indetemperaturs målingerne -------------------------- Kalder først en rutine der måler indetemperaturen. derefter en rutine der udregner indetemperaturen og udskriver det. Så kaldes MIN_MAX, der undersøger om temperaturen er højere eller lavere end det der er gemt som min eller max. Så kaldes scan knapper, der undersøger om der er trykket på nogle af knapperne. så kaldes alarm rutinen, der undersøger om temperaturen er under 2 C, eller om lufttrykket er under 960 hpa. ---------------------------------------------------------------------------------------------- 21.13 void FUGT(); -------------------- Her kaldes luftfugtigheds målingerne -------------------------- Kalder først en rutine der måler pulserne der kommer ind på T0 i 100 ms, derefter en rutine der udregner luftfugtigheden og udskriver det. Så kalder den scan knapper, der undersøger om der er trykket på nogle af knapperne. så kalder den alarm rutinen, der undersøger om temperaturen er under 2 C, eller om lufttrykket er under 960 hpa. -------------------------------------------------------------------------------------------- 21.14 void LUFTTRYK(); --------------------- Her kaldes lufttryks målingerne ------------------------------ Kalder først en rutine der måler lufttrykket, derefter en rutine der udregner lufttrykket og udskriver det. Så kalder den luftændring, der regner på om ændringen i lufttrykket har ændret sig de sidste to timer. Så kalder den scan knapper, der undersøger om der er trykket på nogle af knapperne. ------------------------------------------------------------------------------------------ 21.15 void SCAN_KNAPPER(); --------------------------- Scanner knapper ------------------------------------------ Denne rutine undersøger om der er trykket på nogle af knapperne. Først undersøger den om der er trykket på reset, hvis ikke der er det springer den ud igen, men hvis der er det undersøges der om der er trykket på nogle af de andre, hvis der er det springes til den pågældende rutine, der bliver temperaturen så gemt og udskrevet. Hvis der er trykket på reset men ikke nogle af de andre undersøges der om reset bliver trykket ned i 3 sec., hvis den bliver det resettes alle minimum og maximum temperaturerne. ------------------------------------------------------------------------------------------ Per Bruhn Side 36 / 62 06-01-99

21.16 void MAALING_AF_UDETEMP(); ------------------------- Måling af udetemperatur ------------------------------------- Først sættes variablerne pulsxx til 0, så vi er sikre på hvad der er i dem Puls1t og puls2t er puls1 sammentalt 500 gange, det samme gælder for puls2. x er en variabel der bestemmer hvor mange gange løkken skal køre. port_1 er en port på ppi kredsen, og når den for hex 01, så vælge vi temperatur sensor 1. Når den får hex 00 fravælger vi alle sensorerne. --------------------------------------------------------------------------------------------- 21.17 void MAALING_AF_INDETEMP(); ------------------------- Måling af indetemperatur ------------------------------------ Først sættes variablerne pulsxx til 0, så vi er sikre på hvad der er i dem Puls1t og puls2t er puls1 sammentalt 500 gange, det samme gælder for puls2. x er en variabel der bestemmer hvor mange gange løkken skal køre. port_1 er en port på ppi kredsen, og når den for hex 02, så vælge vi temperatur sensor 2. Når den får hex 00 fravælger vi alle sensorerne. --------------------------------------------------------------------------------------------- 21.18 void MAALING_AF_PULSBREDDE(); --------------------------- Måling af pulsbredde -------------------------------------- Her måles pulsbredderne fra temperatursensorerne, det gøres ved at pulserne fra PEEL kredsen ledes ind på INT0. Tælleren er sat op til at være niveau følsom, det gøres i TMOD registeret. Hvis tælleren er startet med TR0 = 1, starter tælleren automatisk når der kommer en høj puls på INT0 og stopper igen når pulsen går lav. P1.1 benet bestemmer om det er en høj eller lav puls der skal komme fra PEEL kredsen, når det er en høj puls der skal komme er P1.1 = 0 og når det er en lav puls er P1.1 = 1 og så invaterer PEEL kredsen signalet. Den første while kommando venter mens pulsen er høj, det er for ikke at begynde med at måle midt i en puls. Så startes tælleren, og vi venter mens pulsen er lav, når den så går høj starter tælleren automatisk. Så gemmes tallet i puls1 og signalet invateres med P1.1 = 1 så måles den lave puls. Tælleren stoppes og tallet gemmes i puls2. -------------------------------------------------------------------------------------------- 21.19 void MAALING_AF_PULSER(); --------------------- Tæller pulse på T0 i 100 millisek. -------------------------- Her tælles hvor mange pulser der kommer ind på T0 benet i 100 ms. Først nulstilles de forskellige variabler og tælleregistrer og i TMOD sættes tæller 0 til at tælle pulser. Så ventes der på at der kommer en secpuls, det er en høj puls, når den kommer startes tæller 0 og secpuls sættes til 0. Så ventes der igen på at der kommer en secpuls, når den kommer stoppes tæller 0. Det gemmes så i pulser. ----------------------------------------------------------------------------------------- Per Bruhn Side 37 / 62 06-01-99

21.20 void UDREGN_UDSKRIV_AF_UDETEMP(); ----------------- Udregning og udskrivning af udetemp --------------------------- Først bliver puls1t divideret med 500, så bliver puls2t divideret med 500. Det gøres for at få et gennemsnit af de 500 målinger. Så divideres puls1t med puls2t for at få duty cycle procenten, procenten sættes ind i en formel fra fabrikanten af temperatursensoren, og resultatet udskrives. ------------------------------------------------------------------------------------------- 21.21 void UDREGN_UDSKRIV_AF_INDETEMP(); ----------------- Udregning og udskrivning af indetemp -------------------------- Først bliver puls1t divideret med 500, så bliver puls2t divideret med 500. Det gøres for at få et gennemsnit af de 500 målinger. Så divideres puls1t med puls2t for at få duty cycle procenten, procenten sættes ind i en formel fra fabrikanten af temperatursensoren, og resultatet udskrives. ------------------------------------------------------------------------------------------- 21.22 void UDREGN_UDSKRIV_FUGT(); ---------------- Udregner og udskriver luftfugtigheden ---------------------------- Her udregnes fugtigheden og så udskrives den. Det gøres ved at man ganger de pulser der er målt i 100 ms med 10 så der fås et antal pulser i et sec. Det tal trækkes så fra 45000, som er tallet for 100 % fugtighed, det tal man så får, divideres så med 100, for skalaen går fra 0-100% fugtighed, og så udskrives det. -------------------------------------------------------------------------------------------- 21.23 void MAALING_AF_LUFTTRYK(); --------------------------- Måler lufttrykket ------------------------------------------ Lufttrykket bliver målt 200 gange og gemt i variablen adctot Først sættes adctot og adc til 0 så vi er sikre på hvad der er i dem. Så sendes hex 01 ud til adc'en via databussen, det gøres for at starte konvateringen af det analoge signal fra lufttryksmåleren, så venter vi mens P1.0 benet er højt, når det går lavt er adc'en færdig med at konvertere og så læser vi resultatet og lægger det til det der er i adctot. ------------------------------------------------------------------------------------------- 21.24 void UDREGN_UDSKRIV_LUFTTRYK(); -------------------- Udregner og udskriver lufttrykket ----------------- Her divideres de 200 målinger fra adc'en med 200 for at få gennemsnittet. Så lægger vi 900 hpa til for det passer med vores hardwareoffset, og så skrives det ud. ------------------------------------------------------------------------------- Per Bruhn Side 38 / 62 06-01-99

21.25 void LUFTAENDRING(); --------------- Udregner og udskriver lufttryksændringer -------------------------- Her udregnes og udskrives om der har været ændringer i lufttrykket, om det er stigende, faldende el stabilt, det sammenligner med lufttrykket 2 timer før, og hvis det er steger el. faldet mere end 10 hpa udskrives stigende eller faldende, hvis ændringen ikke overstiger 10 hpa udskrives stabilt. Det gøres ved at der hver 10 min gemmes en lufttryksmåling i f.eks. luftmem1 og så sammenlignes der med luftmem2 inden den overskrives. De forskellige memorier 1-12 vælges ved at der spørges om mem1 er 1, og hvis den er det vælges den og derefter nulstilles den. Når så man har været igennem den 12 sættes alle mem1-12 til 1, og der begyndes forfra. ------------------------------------------------------------------------------------------- 21.26 void DELAY(int,int); ------------------------- Variabelt delay ------------------------------------------------ Dette er et variabelt delay, hvor man i variablen delay bestemmer hvor mange gange løkken skal køre, og med variablen tid bestemmer hvor lang tid løkken skal tage, hvis tid er -9216 tager løkken 10 millisec., hvis tid er -9 tager løkken 10 mikrosec. -------------------------------------------------------------------------------------------- 21.27 void LCD1_PLADS(char); --------------------- Sender en plads til display 1 -------------------- Sender en pladsinformation ud til display1 på adresse hex 8100. derefter ventes der på at displayet flytter til den angivede plads. ---------------------------------------------------------------------------- 21.28 void LCD1_KARAKTER(char,const void * ); -------------------- Sender en karakter til display 1 ------------------------- Sender en karakter information ud til display1 på adresse hex 8101. derefter ventes der på at displayet er færdig med at skrive karakteren. ------------------------------------------------------------------------------------ 21.29 void LCD1_DISPLAY_PRINTF(const char,const char *,...); --------------------- Udskriver en streng til display 1 -------------------- Per Bruhn Side 39 / 62 06-01-99

21.30 void LCD2_PLADS(char); --------------------- Sender en plads til display 2 -------------------- Sender en pladsinformation ud til display2 på adresse hex 8200. derefter ventes der på at displayet flytter til den angivede plads. ---------------------------------------------------------------------------- 21.31 void LCD2_KARAKTER(char,const void * ); -------------------- Sender en karakter til display 2 ------------------------- Sender en karakter information ud til display2 på adresse hex 8201. derefter ventes der på at displayet er færdig med at skrive karakteren. ------------------------------------------------------------------------------------ 21.32 void LCD2_DISPLAY_PRINTF(const char,const char *,...); ------------------- Udskriver en streng til display 2 ----------------------- 21.33 void RESET(); ---------------------- Resetter min og max temperaturer-- --------------------------- Den her rutine kalder rutinerne for minimum og maximum temperaturerne, der gør det at de gemmer den nuværende ude og inde temperaturer og udskriver dem i min og max. ---------------------------------------------------------------------------------------------- 21.34 void INDE_MIN_MAX(); ---------------------- Min og max inde temperatur -------------------------------- Denne rutine undersøger om inde temperaturen er over eller under den ude temperatur der er gemt i hukommelsen, hvis den er det vil den kalde en rutine der gemmer den aktuelle temperatur i den aktuelle hukommelse og udskrive temperaturen. ------------------------------------------------------------------------------------------ 21.35 void MIN_INDE(); --------------------------- Min inde temperatur ------------------------------------ Her gemmer den minimum indetemperaturen i min_inde hukommelsen og udskriver min_inde temperaturen. ----------------------------------------------------------------------------------------- 21.36 void MAX_INDE(); --------------------------- Max inde temperatur ------------------------------------ Her gemmer den maximum indetemperaturen i max_inde hukommelsen og udskriver max_inde temperaturen. ------------------------------------------------------------------------------------------ Per Bruhn Side 40 / 62 06-01-99

21.37 void UDE_MIN_MAX(); ---------------------- Min og max ude temperatur ------------------------------- Denne rutine undersøger om ude temperaturen er over eller under den ude temperatur der er gemt i hukommelsen, hvis den er det vil den kalde en rutine der gemmer den aktuelle temperatur i den aktuelle hukommelse og udskrive temperaturen. ---------------------------------------------------------------------------------------- 21.38 void MIN_UDE(); -------------------------- Min ude temperatur ------------------------------------ Her gemmer den minimum udetemperaturen i min_ude hukommelsen og udskriver min_ude temperaturen. ---------------------------------------------------------------------------------------- 21.39 void MAX_UDE(); --------------------------- Max ude temperatur ------------------------------------ Her gemmer den maximum udetemperaturen i max_ude hukommelsen og udskriver max_ude temperaturen. ----------------------------------------------------------------------------------------- 21.40 void ALARM(); ------------------------- Kontrollerer alarm ----------------------------------------- Rutinen gør det at den undersøger om udegraderne er under 2 C, hvis de er det vil rutinen udskrive frost i displayet, der undersøges også om lufttrykket er under 960 hpa, hvis den er det udskrives storm i displayet, hvis begge er opfyldt udskrives frost/storm. Alarm == 1 og == 0 bruges til at få det udskrevne til at blinke. ----------------------------------------------------------------------------------------- 21.41 void START_LYDALARM() ------------------------- Starter lydalarm ---------------------------------- 21.42 void STOP_LYDALARM() ------------------------- Stopper lydalarm --------------------------------- Per Bruhn Side 41 / 62 06-01-99

21.43 interrupt [0x1B] using [1] void T1_int (void) ----------- interrupt rutine der sætter tæller 1 til at tælle 50 ms ------------- Hver gang tæller 1 har tal 46080 gange og lig med 50 ms springes der til denne rutine, der først stopper tælleren, genindlæser de 46080 og starter tælleren igen. Så tæller den variablen sec 1 op og når den har nået 2 sættes secpuls til 1, sec nulstilles og timin tælles 1 op, når den så når 6000, som er lig med ti minutter, sættes timinpuls til 1 og timin nulstilles. -------------------------------------------------------------------------------------- 21.44 void main (void) ---------------------- her starter hovedprogrammet ------------------------------- Det starter med at kalde en rutine der initialiserer de to displays og ppi kredsen, og sætter tæller 1 til at tælle 50 ms. Så kaldes inde og ude temperaturmålingen, som foretager en måling og udskriver det, for at få min og max hukommelsen sat rigtigt inden man når til løkken. Så kaldes reset som gemmer min og max i hukommelsen. Så kaldes mål rutinen hvor de forskellige målinger foretages, og den er i en do / while løkke, der er lig med 1, det vil sige at den kører hele tiden. ----------------------------------------------------------------------------------------- Per Bruhn Side 42 / 62 06-01-99

22 Konklusion. Conclusion. Thomas and I have made a weatherstation which shall measure the outdoor and indoor temperature. It shall also measure the air humidity and the air pressure. There is a warning if the temperature goes below 2 C, and if the air pressure goes below 960 hpa, It shows in the display as a blinking text and as a sound, which can be turned off. The temperatures will be shown in the first display. In the first line is the outdoor temperature. To the left the actual temperature, in the middle the minimum temperature and to the right the maximum temperature. In the second line is the indoor temperature in the same way as the outdoor temperature. The air pressure will be shown in the second display, in the first line to the left. It is shown in hectopascal. To the right will be shown what the air pressure is; RISING, STABLE or FALLING. The air humidity will be shown in the second display, second line to the left. It is shown in %. To the right in the second line it will blink; FREEZING, STORM or FREEZING / STORM. There are buttons to clear the temperature memory individually or all at the same time. One of the problems we are having, are how to calibrate the humidity sensor to 0 % humidity and to 100 % humidity. We have tried some different methods, but none of them where accurate enough. I think we need a controlled environment, where there is a stable temperature, and an accurate humidity to calibrate the humidity sensor. The problems with the temperature is that the outdoor temperature sensor gives a unstable output, proberly because of the wire we are using. We haven t made the audio alarm yet, because we still miss the speaker, it is ordered, but it hasn t arrived yet. The measuring of the indoor temperature and the air pressure is working good, and I am satisfied with the work we have done on the Weather station. Per Bruhn, Ringsted, d. 11.11.98 Per Bruhn Side 43 / 62 06-01-99

23 Litteraturliste. Lit.1 Pressure Sensors. BR121/D rev. 6 Motorola Lit. 2 Pressure, Force and Airflow Sensors Catolog 15, august 1996 Honeywell, MICRO SWITCH Sensing and Control Lit. 3 TURBO C++ Finn Elvekjær Systime, 1991 ISBN 87-7783-008-3 Lit. 4 MCS-8051 Microcontroller Henrik Larsen Januar 1995 Revision 3.0 Lit. 5 PC-Wetterstation Per Bruhn Side 44 / 62 06-01-99

24 Appendiks A: Diagramtegninger. 1. Cpu kit. 2. Sensor kort. 3. Display kort. Per Bruhn Side 45 / 62 06-01-99

25 Appendiks B: PEEL programmer. 1. PEEL på Cpu kit. 2. PEEL på sensor kort. Per Bruhn Side 46 / 62 06-01-99

26 Appendiks C: Struktureret program. 1. Hoved program. 2. Inde temp. 3. Ude temp. 4. Fugt og lufttryk. 5. Alarm. 6. Scan knapper. Per Bruhn Side 47 / 62 06-01-99

27 Appendix D: Software program. C-program: void main (void) Side 2 void INIT()....Side 3 void OPSAETNING_AF_DISPLAY_PPI().Side 20 void OPSAET_DISP1() Side 21 void OPSAET_DISP2() Side 21 void OPSAET_TAELLER(). Side 17 void UDSKRIV_LAVET_AF_OG_TEGN() Side 20 void UDSKRIV_LAVET_AF() Side 20 void UDSKRIV_TEGN().. Side 20 void OPSAET_IO_PORT().. Side 21 void MAAL() Side 3 void UDETEMP(). Side 3 void INDETEMP() Side 4 void FUGT().. Side 4 void LUFTTRYK() Side 4 void SCAN_KNAPPER(). Side 16 void MAALING_AF_UDETEMP(). Side 4 void MAALING_AF_INDETEMP() Side 5 void MAALING_AF_PULSBREDDE().. Side 6 void MAALING_AF_PULSER(). Side 10 void UDREGN_UDSKRIV_AF_UDETEMP() Side 5 void UDREGN_UDSKRIV_AF_INDETEMP()... Side 6 void UDREGN_UDSKRIV_FUGT() Side 10 void MAALING_AF_LUFTTRYK() Side 11 void UDREGN_UDSKRIV_LUFTTRYK().. Side 11 void LUFTAENDRING().. Side 11 void DELAY(int,int)..Side 19 void LCD1_PLADS(char). Side 18 void LCD1_KARAKTER(char,const void * )..Side 18 void LCD1_DISPLAY_PRINTF(const char,const char *,...) Side 18 void LCD2_PLADS(char).. Side 19 void LCD2_KARAKTER(char,const void * ) Side 19 void LCD2_DISPLAY_PRINTF(const char,const char *,...) Side 19 void RESET(). Side 17 void INDE_MIN_MAX()... Side 9 void MIN_INDE().. Side 9 void MAX_INDE().... Side 9 void UDE_MIN_MAX().... Side 8 void MIN_UDE()... Side 8 void MAX_UDE().. Side 9 void ALARM()... Side 7 void START_LYDALARM().... Side 8 void STOP_LYDALARM()... Side 8 interrupt [0x1B] using [1] void T1_int (void) Side 17 Per Bruhn Side 48 / 62 06-01-99

28 Bilag 1: Relevante datablade. 28.1 Datablad: Mikroprocessor 80C31P Per Bruhn Side 49 / 62 06-01-99

28.2 Datablad: EEPROM 27C256-12F1 Per Bruhn Side 50 / 62 06-01-99

28.3 Datablad: RAM KM62256DLP7 Per Bruhn Side 51 / 62 06-01-99

28.4 Datablad: Addresselatch 74hc573 Per Bruhn Side 52 / 62 06-01-99

28.5 Datablad: I/O port 82C55A Per Bruhn Side 53 / 62 06-01-99

28.6 Datablad: Chipselectkreds PEEL18CV8P-15 Per Bruhn Side 54 / 62 06-01-99

28.7 Datablad: Seriel I/O MAX232 Per Bruhn Side 55 / 62 06-01-99

28.8 Datablad: Spændingssupervisor TL7705ACP Per Bruhn Side 56 / 62 06-01-99

28.9 Datablad: Philips fugtighedssensor. Per Bruhn Side 57 / 62 06-01-99

28.10 Datablad: Tryksensor Honeywell 142PC30A. Per Bruhn Side 58 / 62 06-01-99

28.11 Datablad: Temperatursensor Smartec SMT160-30-18. Per Bruhn Side 59 / 62 06-01-99

28.12 Datablad: Timer NE555 Per Bruhn Side 60 / 62 06-01-99

28.13 Datablad: A/D converter ADC0804LCN Per Bruhn Side 61 / 62 06-01-99

28.14 Datablad: Operationsforstærker TL072 Per Bruhn Side 62 / 62 06-01-99