MICB2 opdracht 1 OUD.

© Harry Broeders.

Deze pagina is bestemd voor studenten van de THRijswijk groep EH2.

Let op! Dit is een oude pagina uit de tijd dat bij MICB2 nog met assembler werd gewerkt. Tegenwoordig gebruiken we C!

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. De PC kan via een seriele verbinding met de 68HC11 verbonden worden (hoeft dus niet). De PC kan gebruikt worden om te communiceren met het besturingsprogramma dat door de 68HC11 uitgevoerd wordt. Vanuit de PC wordt een commando naar de 68HC11 gestuurd waarna de 68HC11 een antwoord naar de PC terugstuurd. Op dit moment is nog maar 1 commando gedefinieerd maar dat kan in de toekomst nog uitgebreid worden. Als de PC het karakter '?' naar de 68HC11 stuurt dan moet 1 van de 3 volgende antwoorden worden teruggestuurt:

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 seriele poort van de HC11 (PD0 = RxD en PD1 = TxD) is in het kleine kastje dat aan de EVM kast gekoppeld is verbonden met een seriele kabel. Deze kabel moet je verbinden met de COM poort van de PC. Op de PC moet je dan een terminal emulatieprogramma draaien om met de seriele poort van de HC11 te kunnen praten (gebruik bijvoorbeeld t:\mcb\terminal.exe).

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

De terminal kan in de THRSim11 simulator gesimuleerd worden met de seriele receiver en transmitter (menu View, Serial receiver en Serial Transmitter).

Je kunt het programma s.s19 gebruiken om de seriele verbinding met tussen de PC en de 68HC11 te testen. Dit testprogramma stuurt alle seriele karakters (9600 Baud, 10 bit mode) die via de seriele ingang (PD0 = RxD) binnenkomen weer terug via de seriele uitgang (PD1 = TxD).

Paul Zandbergen heeft als stageopdracht een simulatie van de bierkelder gemaakt. Deze simulator kun je als plug-in toevoegen aan THRSim11. Je kunt deze bierkelder simulatie 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 gebruik van de technieken die je bij het project PHW1 hebt geleerd! 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" via de seriële poort verzend. Implementeer en test dit programma.
  3. Ontwerp een programma dat wacht totdat een karakter via de seriële poort wordt ontvangen en test of dit een ? is. Als dit zo is moet een regel tekst via de seriële poort worden verzonden. Daarna moet het programma weer wachten totdat een karakter via de seriële poort wordt ontvangen. Implementeer en test dit programma.
  4. Onderzoek hoe je een periodieke interrupt kunt opwekken. (Dit blijkt relatief eenvoudig met de RTC (Real Time Clock) functie van de 68HC11, zie het boek van Miller.)
  5. Ontwerp een interrupt gestuurd programma dat 1x per seconde uitgang PB2 inverteert zodat de LED knippert. Bedenk dat je in de RTC interrupt service routine de RTC interrupts kunt tellen en op die manier kunt bepalen of er 1 seconde is verstreken. Implementeer en test dit programma.
  6. Ontwerp een uitbreiding op het programma uit stap 5 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.
  7. Combineer de programma's uit stap 3 en stap 6 en stuur de juiste tekst terug als een ? wordt ontvangen:

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, de seriële communicatie kan bijvoorbeeld ook op interrupt basis werken. Maak dus een persoonlijk stappenplan! Maak ook een tijdsplanning (8 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!