MCCA1P2 opdracht 3.

© Harry Broeders.

Deze pagina is bestemd voor Technische Informatica studenten van de THRijswijk die de minor Elektrotechniek volgen.

Bierkelder.

Volgens de informatieve belgische website http://www.dma.be/P/bier/0_4.htm is de beste bewaarplaats voor bier een koele kelder (4 tot 10 °C). Een student die niet beschikt over een koele kelder heeft de volgende oplossing bedacht.

De temperatuurmeter geeft een analoge spanning af. Deze spanning wordt via ingang PE0 in de 68HC11 ingelezen. Het verwarmings- en koelelement worden met een digitale uitgang (0V = uit, 5V = aan) aangestuurd. De uitgang PB0 van de 68HC11 wordt gebruikt om het verwarmingselement aan te sturen en de uitgang PB1 wordt gebruikt voor het koelelement. De LED is verbonden met de uitgang PB2 van de 68HC11. Op de LCDisplay moet bij elke verandering van toestand één van de volgende teksten verschijnen:

Om te voorkomen dat de verwarming of koeling steeds aan en dan weer uitgeschakeld wordt, moet slechts (ongeveer)1x per minuut de temperatuur worden gemeten. De LED moet knipperen om aan te geven dat de installatie goed functioneert. Ongeveer 1 seconde aan en 1 seconde uit.

De temperatuur wordt gemeten met behulp van een NTC weerstand WNC2013 van Western Electronic Components Corporation. Deze NTC weerstand is opgenomen in de  volgende schakeling:

Uin=5V, R0 = 47K, RT = NTC en Uuit is verbonden met PE0 van de 68HC11. De specificaties van de NTC WNC2013 kun je via deze link vinden.

Schrijf een programma voor de 68HC11 zodanig dat:

Test dit programma met behulp van de EVM kast en het keine uitbreidingskastje.

Uitleg en tips.

Om het verwarmings- en koelelement op het juiste moment aan te sturen is het niet nodig om in je programma de temperatuur te bepalen. Je kunt met behulp van wat rekenwerk en de tabellen van de NTC bepalen bij welke uitgangswaarden van de ADC (Analog Digital Converter) van de 68HC11 het verwarmings- en/of koelelement aan/uit geschakeld moet worden.

In de specificaties van de NTC WNC2013 is gegeven dat de Dissipation Constant 2 mW/°C bedraagd. Doordat er stroom door de NTC loopt warmt deze zichzelf op. Deze zogenaamde "self-heating" veroorzaakt een meetfout. De dissipation constant geeft aan dat er 2 mW vermogen nodig is om de temperatuur van de NTC met 1 °C te laten stijgen. De gekozen NTC heeft bij 25 °C een weerstand van 20K. Als R0 47K wordt gekozen en Uin 5V bedraagt dan is het opgenomen vermogen in de NTC bij 25 °C 0,11 mW. De fout ten gevolge van self-heating is in dit geval dus te verwaarlozen.

In het keine kastje dat aan de EVM kast gekoppeld is bevindt zich een potentiometer. Met deze potentiometer kun je de spanning op PE0 varieren. De potentiometer vervangt dus bij het testen de temperatuurmeter.

De potentiometer kan ook gesimuleerd worden door de THRSim11 simulator (menu View, Sliders E port).

De LCD en de LED kan in de THRSim11 simulator gesimuleerd worden met de I/O box (menu View, I/O box).

Paul Zandbergen heeft als stageopdracht een simulatie van de bierkelder gemaakt. Deze simulator kun je als plug-in toevoegen aan THRSim11. Op de THR kun je deze plug-in meteen gebruiken (Menu: Connect, Beerbasement). Als deze plug-in nog niet is geinstalleerd dan kun je hem downloaden vanaf http://bd.eduweb.hhs.nl/thrsim11/comp.htm#beerbasement.

Aanpak.

Je kunt natuurlijk gewoon achter een PC gaan zitten hacken.... maar een meer systematische aanpak levert hoogstwaarschijnlijk sneller een beter resultaat op! Maak eerst een ontwerp van je programma voordat je gaat coderen (b.v. in de vorm van een PSD). Probeer niet het gehele probleem in een keer op te lossen maar verdeel het probleem in deelproblemen en los deze 1 voor 1 op. Deze methode wordt functionele decompositie, of ook wel verdeel en heers, genoemd. Maak een stappenplan en maak een schatting van de tijd die je denkt voor elke stap nodig te hebben zodat je een goede tijdsplanning kunt maken. Een voorbeeld van een stappenplan voor het maken van deze opdracht zou kunnen zijn:

  1. Het programma moet meerdere dingen "schijnbaar" tegelijkertijd doen. Bedenk welke delen van het progamma in het hoofdprogramma worden uitgevoerd en welke op interrupt basis. Bijvoorbeeld:
  2. Ontwerp een programma dat een regel tekst b.v. "Hallo daar!" op de LCD zet met behulp van de functies waarmee het LCD kan worden aangestuurd. Implementeer en test dit programma.
  3. Ontwerp een interrupt gestuurd programma dat 1x per seconde uitgang PB2 inverteert zodat de LED knippert. Implementeer en test dit programma.
  4. Ontwerp een uitbreiding op het programma uit stap 3 dat 1x per minuut de analoge spanning op ingang PE0 inleest en indien nodig het verwarmings- of het koelelement aan/uit schakelt. Bedenk dat je kunt bepalen of er een minuut is verstreken door de seconden die verstreken zijn te tellen.  Implementeer en test dit programma.
  5. Combineer de programma's uit stap 2 en stap 4 en zet de juiste tekst op het LCD als de toestand veranderd:

Bedenk dat het bovenstaande stappenplan slechts een voorbeeld is! Voor sommige studenten zijn de stappen te groot (zij hebben meer tussenstappen nodig) voor andere studenten zijn de stappen juist te klein. Je kunt ook een andere aanpak kiezen. Maak dus een persoonlijk stappenplan! Maak ook een tijdsplanning (10 uur per week moet je nog zelf plannen). Plan ook wat je tijdens de ingeroosterde practicumuren wilt doen! Maak voordat je een (deel)programma gaat coderen eerst een ontwerp op papier (b.v. in de vorm van een PSD of in de vorm van een stukje pseudo-code).

Simulator tips.

Het is verstandig om het aansturen van de LED en het uitvoeren van de meeting tijdens het gebruik van de simulator veel vaker te laten plaatsvinden. Het simuleren van 1 minuut kost uren!