De grootste uitdaging in ons project was het schrijven en het doen werken van de software bedoeld voor de microcontroller. Het leek ons het meest efficiënt de deelfuncties van de thermostaat eerst apart te testen en te laten werken. Om dan uiteindelijk vanuit die verschillende modules het totaalprogramma op te bouwen. Concreet betekent dit dat we volgende demo-deel-programma‘s realiseerden.
Feitelijk maakten we gebruik van nog andere kleine programma‘s, bijvoorbeeld om het correct functioneren van de knoppen te controleren. Omdat dat nogal simplistische programma‘s voorstellen, hebben we ze niet in onze website opgenomen.
Uiteindelijk bekwamen we volgend programma dat de werking van de thermostaat regelt: Code
Hieronder volgt een korte uitleg over de werkingsprincipes van de verschillende deelprogramma’s die nodig zijn om de thermostaat optimaal te laten functioneren.
Klok
Dit programma maakt gebruik van het principe van een interrupt. Het basisconcept van een interrupt is dat men een timer van 0 tot een vastliggende waarde laat gaan, waarbij telkens de timer deze bepaalde waarde bereikt er een interrupt wordt gegenereerd. Tijdens deze interrupt wordt het hoofdprograma onderbroken en wordt de code uitgevoerd die te vinden is na de interruptvector, aangegeven door het commando ORG 04.
In ons programma maken we gebruik van Timer0 die een interrupt genereert bij het gelijk worden aan FF (= 255). Vermits we weten dat de PIC aangestuurd wordt met een kristal met een frequentie van 4 MHz en deze frequentie bij het binnenkomen van de OPIC wordt gedeeld door 4, kunnen we dus besluiten dat de PIC instructies uitvoert met een frequentie van 1 MHz. Verder weten we ook dat Timer0 van 0 tot 255 gaat. We kunne dus concluderen dat de frequentie van een interrupt gelijk is aan:
Als we dan als Prescaler waarde 16 kiezen en de interrupt 255 keer laten optreden hebben we in theorie dus een freuquentie van 1 Hz en dus een tijd van 1 seconde.
LCD-sturing
Om een display te kunnen aansturen zijn er een hele reeks van commando’s nodig om het scherm te initialiseren. Hieronder volgt een kort overzicht van de te volgen stappen om de hier gebruikte display (Hitachi HD44780U, 2x8 bits). Alle commando’s worden via de data lines naar de display gestuurd waarbij RS = 0, zodat de display weet dat wat volgt geen characters, maar commando’s zijn.
Commando |
Beschrijving |
00111000 |
Function Set: fontgrootte, instellen dat de 2 data lijnen bruikbaar zijn en bepalen dat we de characters als 8 bits zullen versturen |
00001110 |
Display On/Off: de display en de cursor activeren |
00000110 |
Entry Mode: bepalen dat de cursor bij elk nieuw character moet incrementeren (concreet: opschuiven naar links) |
00000001 |
Clear Display: voorgaande data op de display wissen |
00000010 |
Go Home: de cursor laten terugkeren naar de uiterst linkse positie |
11000000 |
Next line: naar de 2de 8 bit datalijn gaan |
Temperatuursregeling
Het principe van de temperatuursregeling is zeer eenvoudig. Eerst wordt er bepaald, naargelang de mode waarin de thermostaat wordt gezet, of in dat bepaald tijdsinterval de thermostaat moet werken. Dan wordt de gemeten temperatuur vergeleken met het ingestelde temperatuursinterval, afgebakend door Tmax en Tmin, en zal de thermostaat hiernaar handelen door Heating, Cooling of Off naar de display te sturen.
Het vergelijken van zowel de huidige tijd als temperatuur met de ingestelde waarde gebeurt softwarematig op dezelfde manier. Om dit te illustreren volgt hier een kort voorbeeld van de temperatuursregeling. We gebruiken het commando subwf om de ingestelde, Tmax, van de gemeten waarde af te trekken (gemeten – ingesteld). Als dit verschil groter is dan 0, is de Carry-bit gelijk aan 1 en moeten we dus koelen. Vice versa is de Carry = 0 bij een verschil kleiner dan 0 en moet er vervolgens gecontroleerd worden of de temperatuur niet onder Tmin is gedoken.
Temperatuurslezing
Het meten van de temperatuur gebeurt met behulp van de TC77 digitale temperatuurs sensor. Deze chip biedt de temperatuur aan als een 13-bit getal waarbij 1 bit het teken bepaald en de overige 12 de waarde zelf. De least significant bit komt overeen met een temperatuur va 0.0625ºC. De chip wordt aangezet door de CS-pin gelijk te stellen aan 0. Vervolgens wordt de temperatuur bit per bit binnengehaald door telkens de waarde van SCK te veranderen. Als SCK = 0 wordt er geen data ingelezen door de PIC en bij SCK = 1 is er de datatransfer van juist 1 temperatuurs bit. Dit kloksignaal wordt door ons handmatig ingesteld in de software.