![]() |
|
If you can't view the Datasheet, Please click here to try to view without PDF Reader . |
|
Datasheet File OCR Text: |
Freescale Semiconductor, Inc. Freescale Semiconductor, Inc... Central Heating Controller using the MC68HC908LJ12 Reference Design Designer Reference Manual M68HC08 Microcontrollers DRM044 Rev. 0, 09/2003 MOTOROLA.COM/SEMICONDUCTORS For More Information On This Product, Go to: www.freescale.com Freescale Semiconductor, Inc. Freescale Semiconductor, Inc... For More Information On This Product, Go to: www.freescale.com Freescale Semiconductor, Inc. Freescale Semiconductor, Inc... Central Heating Controller using the MC68HC908LJ12 Reference Design Designer Reference Manual -- Rev 0 by: AT Electronic Embedded Control Consultants e-business centre Consett Business Park Villa Real Consett Co. Durham DH8 6BP England Telephone: Fax: Email: Web: 44(0) 1207 693920 44(0) 1207 693920 enquires@ateecc.com www.ateecc.com DRM044 -- Rev 0 MOTOROLA Central Heating Controller 3 For More Information On This Product, Go to: www.freescale.com Freescale Semiconductor, Inc. Freescale Semiconductor, Inc... Central Heating Controller 4 DRM044 -- Rev 0 MOTOROLA For More Information On This Product, Go to: www.freescale.com Freescale Semiconductor, Inc. Designer Reference Manual -- DRM044 List of Sections Section 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Section 2. Design Overview . . . . . . . . . . . . . . . . . . . . . . . 17 Section 3. Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Section 4. Software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 Appendix A. Software Routines. . . . . . . . . . . . . . . . . . . . 65 Appendix B. Main Circuit Diagram . . . . . . . . . . . . . . . . 157 Appendix C. Main Circuit Bill of Materials . . . . . . . . . . 159 Appendix D. Programming Circuit Diagram . . . . . . . . . 161 Appendix E. Programming Circuit Bill of Materials . . . 163 Appendix F. PCB Details . . . . . . . . . . . . . . . . . . . . . . . . 165 Freescale Semiconductor, Inc... DRM044 -- Rev 0 MOTOROLA Central Heating Controller List of Sections For More Information On This Product, Go to: www.freescale.com 5 Freescale Semiconductor, Inc. List of Sections Freescale Semiconductor, Inc... Central Heating Controller 6 List of Sections For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Table of Contents Designer Reference Manual -- DRM044 Table of Contents Section 1. Introduction Section 2. Design Overview 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 Internal Temperature Sensing . . . . . . . . . . . . . . . . . . . . . . . . .18 Battery Voltage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 Keyboard Inputs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Output Drivers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .18 LCD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 External Temperature Sensor. . . . . . . . . . . . . . . . . . . . . . . . . . 19 Phase-locked Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Low Voltage Inhibit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Freescale Semiconductor, Inc... Section 3. Hardware 3.1 3.2 3.3 3.4 3.5 3.6 Phase-locked Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 Temperature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26 Climate Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .27 Low Power Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28 Battery Backup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .30 Section 4. Software 4.1 4.2 DRM044 -- Rev 0 MOTOROLA Table of Contents For More Information On This Product, Go to: www.freescale.com Analog to Digital Converter. . . . . . . . . . . . . . . . . . . . . . . . . . . .34 Serial Communications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36 Central Heating Controller 7 Freescale Semiconductor, Inc. Table of Contents 4.3 4.4 4.5 4.6 4.7 4.8 4.9 4.10 4.11 Real Time Clock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37 Phase-lock Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .40 Temperature . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 User Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .43 Climate Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49 Programming Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .52 Low Power Modes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .56 Battery Backup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .59 On-board Flash Programming . . . . . . . . . . . . . . . . . . . . . . . . .60 Freescale Semiconductor, Inc... Appendix A. Software Routines A.1 A.2 A.3 A.4 A.5 A.6 A.7 A.8 A.9 [a2d.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .65 [a2d.h]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .67 [Alarm.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 [Alarm.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .73 [Alarmset.c]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 [Alarmset.h]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 [button.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .82 [button.h]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .95 [Clockset.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 A.10 [Clockset.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 A.11 [Data.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .101 A.12 [declared.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 A.13 [define.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .105 A.14 [Delay.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 A.15 [Delay.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Central Heating Controller 8 Table of Contents For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Table of Contents A.16 [Display.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 A.17 [Display.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 A.18 [extern.h]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .117 A.19 [i2c.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 A.20 [i2c.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 A.21 [interrupt.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .129 A.22 [interrupt.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .131 A.23 [lj12.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .132 A.24 [main.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .139 A.25 [operation.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .141 A.26 [operation.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .146 A.27 [startup.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .147 A.28 [startup.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 A.29 [temperature.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 A.30 [temperature.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .155 Freescale Semiconductor, Inc... Appendix B. Main Circuit Diagram Appendix C. Main Circuit Bill of Materials Appendix D. Programming Circuit Diagram Appendix E. Programming Circuit Bill of Materials Appendix F. PCB Details F.1 F.2 F.3 Component Trace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .165 Component Silk Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Solder Trace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 DRM044 -- Rev 0 MOTOROLA Table of Contents For More Information On This Product, Go to: www.freescale.com Central Heating Controller 9 Freescale Semiconductor, Inc. Table of Contents F.4 Solder Silk Screen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .168 Freescale Semiconductor, Inc... Central Heating Controller 10 Table of Contents For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- DRM044 List of Figures Figure 1-1 2-1 3-1 3-2 3-3 3-4 3-5 3-6 3-7 4-1 4-2 4-3 4-4 4-5 4-6 4-7 4-8 4-9 Title Page Freescale Semiconductor, Inc... The Climate Controller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .16 System Block Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .17 The Printed Circuit Board . . . . . . . . . . . . . . . . . . . . . . . . . . . . .21 MC68HC908LJ12 PLL Connections. . . . . . . . . . . . . . . . . . . . .22 Internal Temperature Sensor and Operational Amplifier Circuit Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 External Temperature Sensor Circuit Diagram (DS1721) . . . .25 Relay Driver Circuit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 Button Simulation Circuit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Supply Circuit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .31 Software Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .33 ADC Register Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .34 Real Time Clock Registers . . . . . . . . . . . . . . . . . . . . . . . . . . . .37 LCD Layout. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Segment Labelling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .46 Button Processing Flow Chart . . . . . . . . . . . . . . . . . . . . . . . . .48 Metroworks Codewarrior Screenshot . . . . . . . . . . . . . . . . . . . . 61 Programming Confirmation. . . . . . . . . . . . . . . . . . . . . . . . . . . .62 During Programming. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 DRM044 -- Rev 0 MOTOROLA List of Figures For More Information On This Product, Go to: www.freescale.com Central Heating Controller 11 Freescale Semiconductor, Inc. List of Figures Freescale Semiconductor, Inc... Central Heating Controller 12 List of Figures For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- DRM044 List of Tables Table 4-1 4-2 4-3 4-4 4-5 Title Page Freescale Semiconductor, Inc... DS1721 Sequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .36 PLL Frequency Table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 LCD Frequency Table. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Bit to Segment Correlation - 1st Digit. . . . . . . . . . . . . . . . . . . . 45 Bit to Segment Correlation - 2nd Digit . . . . . . . . . . . . . . . . . . . 45 DRM044 -- Rev 0 MOTOROLA List of Tables For More Information On This Product, Go to: www.freescale.com Central Heating Controller 13 Freescale Semiconductor, Inc. List of Tables Freescale Semiconductor, Inc... Central Heating Controller 14 List of Tables For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- Central Heating Controller Section 1. Introduction This document details the hardware and software design of a functional time and temperature control system, which combines heating and cooling algorithms to implement an intelligent climate control system. The MC68HC908LJ12 has been selected to perform the control functions, as, in addition to the ample memory size, it contains a fully-featured real-time clock (RTC) and liquid crystal display (LCD) driver module, which greatly simplifies the implementation of these functions. Emphasis has been placed throughout the design on efficient modes of operation during periods of mains failure, to demonstrate the low current consumption of this device when powered by a backup battery. Two methods of temperature measurement have been used in order to demonstrate the flexibility of the device. The internal temperature is detected by an analog sensor, which provides an output voltage proportional to the temperature. The external temperature is measured using a 2-wire serial sensor. The resulting data is decoded by the microcontroller and displayed on the LCD in degrees Celsius. The internal and external temperature readings are also used in an algorithm, which may be used to modify the start of an automatic timing function if desired. This gives the user the opportunity to select a `SMART' mode of operation, whereby the heating or cooling functions are implemented earlier than the user set-time, depending on the ambient internal and external temperatures. Freescale Semiconductor, Inc... DRM044 -- Rev 0 MOTOROLA Central Heating Controller Introduction For More Information On This Product, Go to: www.freescale.com 15 Freescale Semiconductor, Inc. Introduction Freescale Semiconductor, Inc... Figure 1-1. The Climate Controller During normal operation, the internal temperature is displayed on the three right-hand digits. Time-of-day (TOD) and day-of-week (DOW) are displayed in the left-hand digits and chevrons respectively. A 3 V lithium coin cell is used for backup of time keeping functions. Central Heating Controller 16 Introduction For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- DRM044 Section 2. Design Overview Freescale Semiconductor, Inc... INTERNAL TEMPERATURE SENSING BATTERY VOLTAGE 4 KEYBOARD INPUTS RELAYS LEDs 8-DIGIT LCD EXTERNAL TEMPERATURE SENSOR 4 KEYBOARD INPUTS Figure 2-1. System Block Diagram DRM044 -- Rev 0 MOTOROLA Design Overview For More Information On This Product, Go to: www.freescale.com Central Heating Controller 17 Freescale Semiconductor, Inc. Design Overview 2.1 Internal Temperature Sensing The voltage supplied by the internal temperature sensor is conditioned by an operational amplifier and scaled for the input parameters of the analog to digital converter (ADC). The ADC is then used to read this temperature value. 2.2 Battery Voltage To keep the RTC module running during periods of mains supply failure, a 3 V lithium `coin' cell is used. To minimize current drain from the battery, all non-essential outputs, i.e., relay drive, temperature measurement and light-emitting diode (LED) drive signals, are inhibited. The ADC is used to detect if the battery drops below the microcontroller's minimum operating voltage. Under these circumstances, `low battery' is displayed to the user. Freescale Semiconductor, Inc... 2.3 Keyboard Inputs All eight of the designated keyboard inputs are connected to buttons. These buttons are used for the general operation of the controller. 2.4 Output Drivers Port B is used to activate the two climate control relays and two indication LEDs. 2.5 LCD A commercially available LCD has been selected to perform the display functions. This has eight 7-segment digits, each separated by a decimal point (period). In addition to the digits, it contains eight downward-pointing chevrons that are used to indicate weekdays and the operation of the `SMART' mode (please see 4.7.3 SMART -- Intelligent Temperature Prediction for more information). Central Heating Controller 18 Design Overview For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Design Overview External Temperature Sensor 2.6 External Temperature Sensor This is a 2-wire serial device. This allows the sensor to be placed at some distance from the controller with no degradation of signal. 2.7 Phase-locked Loop The phase-locked loop (PLL) feature of the MC68HC908LJ12 enables a low-cost 32.768 kHz crystal, of the type used extensively in digital watches, to be used to obtain a bus frequency of 2 MHz. Freescale Semiconductor, Inc... 2.8 Low Voltage Inhibit The low voltage inhibit (LVI) is used to detect when the mains voltage fails. The microcontroller then powers down before entering STOP mode. Depending on feature implementation, current consumption can be reduced to approximately 30 A. DRM044 -- Rev 0 MOTOROLA Design Overview For More Information On This Product, Go to: www.freescale.com Central Heating Controller 19 Freescale Semiconductor, Inc. Design Overview Freescale Semiconductor, Inc... Central Heating Controller 20 Design Overview For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- DRM044 Section 3. Hardware Freescale Semiconductor, Inc... Figure 3-1. The Printed Circuit Board 3.1 Phase-locked Loop The clock generator module (CGM) generates the system clock signal CGMXCLK, which operates at the crystal-derived frequency of 32.768 kHz. An internal PLL generates the programmable voltage controlled oscillator (VCO) frequency clock and thus determines the bus frequency. A Pierce oscillator configuration is used (Figure 3-2. MC68HC908LJ12 PLL Connections), which uses four external components with the crystal connected directly between the crystal DRM044 -- Rev 0 MOTOROLA Hardware For More Information On This Product, Go to: www.freescale.com Central Heating Controller 21 Freescale Semiconductor, Inc. Hardware amplifier input pin (OSC1) and the crystal amplifier output pin (OSC2). The PLL analog power and ground pins VDDA and VSSA are connected to the same potential as VDD and VSS for correct operation. A filter network is connected to the external capacitor pin (CGMXFC) to filter out phase corrections. Typical values for the network are shown in Figure 3-2. MC68HC908LJ12 PLL Connections. Freescale Semiconductor, Inc... OSC1 OSC2 CGMXFC VDDA VDD DDA VSSA VSSA 10M 330k 32.768kHz 10k 33nF 10nF 100nF 15pF 15pF VSS XTAL OSCILLATOR VSS PLL FILTER NETWORK DECOUPLING CAPACITOR Figure 3-2. MC68HC908LJ12 PLL Connections Central Heating Controller 22 Hardware For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Hardware Temperature 3.2 Temperature 3.2.1 Analog Temperature Measurement The internal temperature sensing is achieved using an LM35. This device gives an output potential of 10 mV/C and is available in several versions, which allow a wide range of temperature ranges to be measured. The device selected for use in the reference design is an LM35DZ which has a commercial specification of 0-100C and an absolute accuracy of 1C. A 5 Vdc supply is used for normal operation of the MC68HC908LJ12; this is derived from a mains power source, and the reference for the ADC is also set to this value. A maximum internal measurement temperature of 40C was considered suitable for the application, and an operational amplifier was used to scale the sensor output voltage to the necessary 0-5 V. Changing the scaling factor of the operational amplifier and making the necessary software changes alters this maximum temperature value. The amplifier amplification factor is determined as follows: Output of sensor @ 40C = 40 * 10 mV = 400 mV Required amplification at this temperature for full scale (Av): 5 V/0.40 = 12.5 A non-inverting configuration has been used, therefore: Av = 1+ Ra/Rb Using preferred resistor values: Av = 1 + 11.5k /1k = 12.5 Using the nearest preferred value components, Ra consists of 10k connected in series with 1k2, Rb = 1k. These resistors have a 1% tolerance value. Freescale Semiconductor, Inc... DRM044 -- Rev 0 MOTOROLA Central Heating Controller Hardware For More Information On This Product, Go to: www.freescale.com 23 Freescale Semiconductor, Inc. Hardware VDD LM35 Vin=10mV/C + 1/2 33202 Vout = (1+Ra/Rb)Vin (1+Ra/Rb)Vin + 1/2 33202 Ra To A2D input VSS Freescale Semiconductor, Inc... - Rb VSS Figure 3-3. Internal Temperature Sensor and Operational Amplifier Circuit Diagram The requirements for the operational amplifier are for single supply, rail-to-rail operation. A 33202 was selected as a suitable device for the task. This is a dual op-amp and the 'second' stage is connected as a non-inverting voltage follower. If required, the internal LM35 may be replaced with another, mounted external to the case. A 3-pin connector provides the necessary power, ground and inputs, whilst a 3-pin, on-board header is used to select one of the two sensors. A screened cable should be used for the external analog sensor, although input signal filtering ensures that the sensor may be mounted several metres from the control unit with no undue signal degradation. Central Heating Controller 24 Hardware For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Hardware Temperature 3.2.2 2-wire, Serial Temperature Sensor The external sensor is a 2-wire serial data device, type DS1721. This provides a wide range of temperature measurement and gives a serial data output, in two's complement format. Up to eight devices may be used on the bus, each hard-wired to a unique address set on three address pins. In this application, only one device is required, therefore address offset zero is selected by connecting all three address pins to Vss. The DS1721 acts as a slave on the bus, and data is requested by and transmitted to the MC68HC908LJ12 via the SDA line, whilst the clock is generated by the microcontroller on the CLK line. A separate 'Thermostat' output is available from this sensor, although this feature is not used in this design. A 4-pin Molex KK connector provides the power, ground, clock and data connections to this device. Freescale Semiconductor, Inc... +5V 10 k VSS 100nF SDA CLK VDD DS1721 A0 A1 A2 Gnd Figure 3-4. External Temperature Sensor Circuit Diagram (DS1721) DRM044 -- Rev 0 MOTOROLA Hardware For More Information On This Product, Go to: www.freescale.com Central Heating Controller 25 Freescale Semiconductor, Inc. Hardware 3.3 User Interface 3.3.1 Liquid Crystal Display Driver To obtain maximum life, together with a wide viewing angle on an LCD, it is necessary to drive it using an alternating current. The LCD driver module on the MC68HC908LJ12 contains all the necessary driver circuitry to make driving a multi-segment LCD very straightforward. The MC68HC908LJ12 allows three arrangements of frontplane/backplane configurations: 26 frontplanes x 4 backplanes (104 segments) 27 frontplanes x 3 backplanes (81 segments) 27 frontplanes x 1 backplane (27 segments) A device with a multiplex ratio of 1/3 was selected for this design, to meet the display requirements listed, together with those of the LCD driver on board the MC68HC908LJ12 (see Motorola Technical Data section 16.3). The part selected for this design is a VARITRONIX VIM838, which has eight 7-segment digits separated by dots, with a downward pointing arrow under each digit. The display is a transflective, twisted nematic type. It is available in a `leaded' format, as used in this design, or a 'zebra stripe' which would be the preferred option for volume production. The operating frequency range is 30-85 Hz. Freescale Semiconductor, Inc... 3.3.2 Button Detection Internal pullup resistors are enabled in software. These resistors have a nominal value of 28k. They are internally terminated to VSS and are individually pulled to VDD via the function switches. Central Heating Controller 26 Hardware For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Hardware Climate Control 3.4 Climate Control 3.4.1 Heating/Cooling 3.4.1.1 Relay Driver Two relays are incorporated to control the output heating/cooling devices, with uncommitted contact ratings of 3 A @ 230 Vac or 30 Vdc. It is envisaged that the relays will provide `pilot' control to external contactors or switching devices, to allow control of much greater electrical loads. The relay coils are driven from output ports PB0 and PB1 of the MC68HC908LJ12 via two bipolar junction transistors (BJT), type BC850. A 'snubber' diode is incorporated in parallel with each relay coil to suppress the back emf produced by the relay coil at switch-off. Freescale Semiconductor, Inc... +12V Rlim PTBx Gnd Figure 3-5. Relay Driver Circuit Rlim is included to limit the transistor base drive current from the microcontroller. DRM044 -- Rev 0 MOTOROLA Hardware For More Information On This Product, Go to: www.freescale.com Central Heating Controller 27 Freescale Semiconductor, Inc. Hardware 3.4.2 Override If the override button is pressed, a check is done to test whether the climate control is running. If it is running, then it is deactivated and the next alarm is loaded into the alarm register. If a program is not running when the override button is pressed, then two variables are set to the current time plus one hour. The OverrideCheck() function then compares the TOD and `override time' variables; when they match, it deactivates the override and the climate control. If a scheduled program starts while the override is running, then the override is disabled and control is passed to the program. See Appendix A.25[operation.c] -- OverrideCheck() and A.7[button.c] -- DecodeButtons() for a more detailed account. Freescale Semiconductor, Inc... 3.5 Low Power Modes Battery life is of great importance in equipment that may experience extended periods of mains failure, for example, in installations that are provided with power from a generator or static inverter. Three possible modes of operation have been considered in the design, in the event of mains supply failure. 3.5.1 Low Current Operation The microcontroller detects the change of state on the input pin, and performs a `low power' mode shutdown, comprising the switching off of all relays, LEDs and external sensors, allowing the display to continue displaying the TOD value. The microcontroller essentially runs in a `reduced function' mode, testing the condition of the power-down input while in a loop cycle. On restoration of the 5 V power supply, the microcontroller returns to normal operation. The current consumption at 3 V, under these conditions, was measured at approximately 3 mA. This may be considered rather high if long periods of power-down are encountered. Central Heating Controller 28 Hardware For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Hardware Low Power Modes 3.5.2 Low Voltage Inhibit -- STOP Mode The LVI module is used to detect when the supply voltage falls below a value of 4.5 V. It generates an interrupt that is used to invoke STOP mode. TOD display updating is inhibited, although the RTC timekeeping functions are maintained and register contents preserved. The message `bAtt' is constantly displayed, to indicate mains failure. The LVI interrupt is still enabled; therefore, when power is restored, the resultant interrupt wakes the microcontroller from STOP mode. This returns the program to normal operation once more. The measured battery current in STOP mode with the LVI module active was approximately 250A. Freescale Semiconductor, Inc... 3.5.3 Keyboard Interrupt -- STOP Mode The LVI module is used to detect power loss and to invoke STOP mode, in a similar manner to that described above, the difference in this case being that, once the power loss is detected, the LVI module is disabled. This results in a further power saving, although the interrupt necessary to waken the microcontroller from STOP mode does not now occur on restoration of the main supply. To circumvent this problem, a BJT has been added to the KB13 input. The base of this transistor is supplied with current, via a series resistor, from the 5 V supply rail. Thus, on restoration of the supply, the transistor simulates a button press and the resulting keyboard interrupt wakes the microcontroller and restores normal operation. On power-up, the base of the transistor is pulled low via a resistor, supplied from the PD0 pin. PD0 is made an input during STOP mode, changing to an output low on power-up. The transistor therefore turns off, allowing the button input to resume its normal function. This method results in a further reduction in standby current, which has been measured at approximately 30A. However, this has the disadvantage of increasing the hardware count. Provision has been made on the printed circuit board for the inclusion of this transistor and its associated drive components. DRM044 -- Rev 0 MOTOROLA Hardware For More Information On This Product, Go to: www.freescale.com Central Heating Controller 29 Freescale Semiconductor, Inc. Hardware Vsupply Vmicro Internal Pull-Up Pullup KB13 Event Set Button PD0 Freescale Semiconductor, Inc... Gnd Figure 3-6. Button Simulation Circuit 3.6 Battery Backup Since the LCD current consumption is very low, it is used to give a visual indication of mains failure by indicating `bAtt'. The switch-over between mains power and battery backup is achieved using two diodes. The diode connected in series with the battery was selected to be a Schottky type to minimize the voltage drop and, hence, increase the useful operating life of the battery. The diode connected in series with the mains-derived supply is a standard silicon diode, type LL4148. To negate the effect of the voltage drop across this diode, a similar device is connected in series with the common terminal of the IC regulator. The effective output from the regulator is: Vsupply Vmicro = Vout(nom) + Vdiode = 5.0 + 0.6 = 5.6 V = Vsupply - Vdiode = 5.6 - 0.6 = 5.0 V ADC channel 2 is used to monitor the condition of the battery during normal operation. The nominal terminal voltage of a new lithium cell is approximately 3.25 V. The ADC is used to detect when the terminal Central Heating Controller 30 Hardware For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Hardware Battery Backup voltage falls below 2.8 V. When this occurs, the display alternates between normal TOD and temperature and `Lo bAtt', at 2-second intervals. Vdiode Vin Vi LM78L05 Vsupply Vmicro Freescale Semiconductor, Inc... Vdiode Schottky Diode Gnd Figure 3-7. Supply Circuit DRM044 -- Rev 0 MOTOROLA Hardware For More Information On This Product, Go to: www.freescale.com Central Heating Controller 31 Freescale Semiconductor, Inc. Hardware Freescale Semiconductor, Inc... Central Heating Controller 32 Hardware For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- DRM044 Section 4. Software Freescale Semiconductor, Inc... MicroStartup Yes Yes LV I Rise No STOP Power Down LV I Fall No Perform Button Action Button Press No Yes Which Mode View Temperature Ext. and User Temperature Display Program Set Clock Set Default Yes Program Set Routine Clock Set Routine Low Battery No Toggle 'Lo Batt' Refresh TOD Heating Operations Read Temperatures No 10ms Sync Yes Figure 4-1. Software Overview DRM044 -- Rev 0 MOTOROLA Software For More Information On This Product, Go to: www.freescale.com Central Heating Controller 33 Freescale Semiconductor, Inc. Software A flowchart of the software is shown in Figure 4-1. 4.1 Analog to Digital Converter Figure 4-2 provides a summary of the ADC registers in the MC68HC908LJ12. Freescale Semiconductor, Inc... Figure 4-2. ADC Register Summary The 10-bit ADC data is stored in bits 1, 0 of address $003D (ADRH) and bits 7-0 of address $003E (ADRL). The data was chosen to be right-justified to allow simple access to the full ten bits by reading from address $003D. The code below shows how both bytes of data can be read as one sixteen bit variable (a2d_bytes). a2d_bytes._8bit.hibyte = ADRH.reg; a2d_bytes._8bit.lobyte = ADRL.reg; a2d_total += a2d_bytes._16bit; Central Heating Controller 34 Software For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Analog to Digital Converter The ADC clock register is initialized in MicroStartUp(). The operating frequency for the ADC lies between 32 kHz and 2 MHz. Therefore, the bus speed is divided by two to give a 1 MHz clock. The ADC is set to perform a conversion only when required. The means of initiating a conversion is to write to the ADC status register. The argument channel is passed to the routine, which selects the appropriate ADC channel. Freescale Semiconductor, Inc... unsigned short int ReadA2D( { unsigned short int union uUNSIGNED_INTEGER unsigned char unsigned char channel ) a2d_total; a2d_bytes; ii; for ( a2d_total = 0, ii = 0; ii < A2D_SAMPLE_COUNT; ii++ ) { ADSCR.reg = 0x00|channel; // a2d interrupts off, clears COCO bit while ( !ADSCR.bit.COCO ) ; // Wait for conversion to complete a2d_bytes._8bit.hibyte = ADRH.reg; // Read high reg first to latch low reg a2d_bytes._8bit.lobyte = ADRL.reg; // Now read lo reg a2d_total += a2d_bytes._16bit; // Update running total } a2d_total /= A2D_SAMPLE_COUNT; return a2d_total; } // Average // Return averaged result // ReadA2D() NOTE: To obtain stable results, the ADC is read eight times and averaged before returning a value. This technique greatly reduces the effects of any external noise or `jitter'. DRM044 -- Rev 0 MOTOROLA Software For More Information On This Product, Go to: www.freescale.com Central Heating Controller 35 Freescale Semiconductor, Inc. Software 4.2 Serial Communications Table 4-1 shows the order in which the master and slave must communicate with each other. The code had to be arranged so that the MC68HC908LJ12 talks to the slave and listens when necessary. Table 4-1. DS1721 Sequence LJ12 Mode TX TX RX TX RX TX TX RX TX RX TX TX RX RX TX RX DS1721 Mode RX RX TX RX TX RX RX TX RX TX RX RX TX TX RX TX Data Comments Freescale Semiconductor, Inc... START ACK 0x51 ACK START ACK 0xAA ACK START ACK <1 data byte> ACK <1 data byte> LJ12 initiates a START condition LJ12 sends DS1721 address, read = 0 DS1721 generates acknowledge bit LJ12 sends start convert T protocol DS1721 generates acknowledge bit LJ12 initiates a repeated START condition LJ12 sends DS1721 address, read = 0 DS1721 generates acknowledge bit LJ12 sends read temperature protocol DS1721 generates acknowledge bit LJ12 initiates a repeated START condition LJ12 sends DS1721 address, read = 1 DS1721 generates acknowledge bit DS1721 transmits MSB of temperature LJ12 generates acknowledge bit DS1721 transmits LSB of temperature NOTE: For more information, please refer to the DS1721 data sheet. A delay function provides an in-line delay while the MC68HC908LJ12 waits for an acknowledge bit or temperature data. The DS1721 operates at a maximum of 400 kHz; therefore, a delay of 5 s was chosen to allow ample time. The main function that performs the above actions is ExternalTemperatureRead(). The DS1721 has a tolerance of 1 degree; therefore, a calibration constant (EXTERNAL_CALIBRATION) exists to compensate (see Appendix A.19 [i2c.c] -- ExternalTemperatureRead()). The Flash capabilities of the MC68HC908LJ12 can allow this calibration value to be inserted as part of the end of line test sequence in a production run, allowing the overall accuracy of the temperature reading to be improved. Central Heating Controller 36 Software For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Real Time Clock 4.3 Real Time Clock The MC68HC908LJ12 has a built in RTC module comprising the registers shown in Figure 4-3. Freescale Semiconductor, Inc... Figure 4-3. Real Time Clock Registers DRM044 -- Rev 0 MOTOROLA Software For More Information On This Product, Go to: www.freescale.com Central Heating Controller 37 Freescale Semiconductor, Inc. Software Each register rolls over after the appropriate number has been reached. As shown in Figure 4-3. Real Time Clock Registers, there are also two alarm registers: minutes and hours. When the RTC hour and minute registers are equal to the alarm registers, the alarm flag is set and can generate an interrupt, if desired. The month, year and chronograph data registers are not used in this application, but may be incorporated, if more advanced timekeeping capabilities are required. There is a wide range of flags available with their associated interrupts, ranging from 10 ms to 1 day. However, only the 10 ms interrupt is used in this application. It is used to synchronize the main loop to 10 ms for precision in control. Although not used in this application, the 10 ms synchronization is useful if other types of `mains synchronous' output switching devices (triacs, for example) are employed (assuming a 50 Hz mains supply). Freescale Semiconductor, Inc... /////////////// // 10ms sync // /////////////// while ( !flags1.bit._10MS ) ; flags1.bit._10MS = 0; // Waiting for interrupt // reset, for next loop iteration The main program runs for about 2 ms per cycle. However, when the temperatures are refreshed (every five seconds) the period increases to about 4 ms per cycle. This is well within the 10 ms interrupt that has been used, and gives ample time for the loop synchronization to occur. RTCCR1 controls which interrupts are active and, in this case: // RTC setup RTCCR2.reg = 0x60; RTCCR1.reg = 0x40; RTCCR2.bit.RTCE = 1; // // // // rtc off, set for 32.768kHz xtal... chronograph setup CHRIE set ...all done, start RTC RTCCR2 is set up for a 32.768 kHz crystal with the chronograph counter cleared and enabled. Once both registers are set, the RTC is initiated. Central Heating Controller 38 Software For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Real Time Clock The TenMsSynchronise() function was set up to toggle variables at different time intervals based on the 10 ms main loop. Toggles are set up for 0.25, 0.5 and 1 second intervals (see Appendix A.25 [operation.c] -- TenMsSynchronise() for a more detailed account). void TenMsSynchronise( void ) { if ( ++_10ms%25 == 0 ) { _0P25sec ^= 0x01; if ( _10ms%50 { SFLASH } == 0 ) ^= 0x01; Freescale Semiconductor, Inc... if ( _10ms%100 == 0 ) { one_second ^= 0x01; _5sectick++; } if ( _10ms >= 200 ) { _10ms = 0; } } } // // // // // // // // // // // // // // // // // // // // // every 0.25s every 0.5s every 1.0s Unsigned char, 256 max reset for next TenMsSynchronise() DRM044 -- Rev 0 MOTOROLA Software For More Information On This Product, Go to: www.freescale.com Central Heating Controller 39 Freescale Semiconductor, Inc. Software 4.4 Phase-lock Loop A 2 MHz bus speed was chosen to keep current drain as low as possible while still allowing the maximum main loop cycle time to remain comfortably inside the 10 ms synchronization. Table 4-2. PLL Frequency Table CGMPCLK (MHz) 8.0 9.8304 10.0 16.0 19.6608 20.0 29.4912 32.0 16.0 8.0 4.0 fBUS (MHz) 2.0 2.5 2.5 4.0 4.9 5.0 7.4 8.0 4.0 2.0 1.0 fRCLK (kHz) 32.768 32.768 32.768 32.768 32.768 32.768 32.768 32.768 32.768 32.768 32.768 R 1 1 1 1 1 1 1 1 1 1 1 N f5 12c 132 1e9 258 263 384 3d1 1e9 f5 7b P 0 0 0 0 0 0 0 0 1 2 3 E 0 1 1 1 2 2 2 2 2 2 2 L d1 80 83 d1 80 82 c0 d0 d0 d0 d0 Freescale Semiconductor, Inc... The code below initializes the PLL at the desired frequency: void InitialisePLL( void ) { PBWC.reg PTCL.reg PMS PMRS.reg PMDS.reg = = = = = 0x80; 0x00; 0x00F5; 0xD1; 0x01; ////////////////////////////////// // auto mode // // settings here... // // as described in... // // the MC68HC908LJ12 // // Rev2.0 data book section // // 8.4.6 page 113 // // turn pll on after settings // // 'set' // ////////////////////////////////// PTCL.bit.PLLON = 1; /////////////////////////////////////////////////// // wait for the required frequency to be reached // /////////////////////////////////////////////////// ServiceWatchDog(); while ( !PBWC.bit.LOCK ); PTCL.bit.BCS = 1; } // pll clock drives CGMOUT // InitialisePLL() Central Heating Controller 40 Software For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Temperature 4.5 Temperature All temperatures are updated every five seconds to prevent display jitter, which is most noticeable with decimal values. In normal mode, the internal temperature is displayed on the right-hand side of the display. The function InsideTemperature() is used to calculate this value. The ADC is read and stored in a variable. This variable is then manipulated to correspond to the maximum and minimum temperature scale. The calculations are shown below: Freescale Semiconductor, Inc... ////////////////////////////////////////////////////////////////////////////// // The internal temperature calculations: // // // // The A2D byte is multiplied by 49 to convert it to 10000 * the input // // voltage. It is then / by 100 to convert it to 100 * the input voltage.// // // // The result is then * by 41 which is the maximum temperature that can // // be read by the A2D, and / by 5 which is the maximum input voltage. // // // // Finally the result is / by 10 to leave it in a manageable form // // // // eg. internal temperature = 26.0CA2D function returns 650 // // (49 * 650)/100 = 316 (316*41)/50 = 259 (0.33% error) // ////////////////////////////////////////////////////////////////////////////// internal_temperature = ( 49 * ReadA2D( CHANNEL0 ))/100; internal_temperature = ( internal_temperature * 41 )/( 5 * 10 ); NOTE: The multiples of 10 are used to allow the integers to represent decimal values. This calculated internal temperature is then manipulated so that there are two variables, one stores any multiples of ten and the other stores the units and decimal values. These are then sent to the DisplayNumbers() function to be displayed on screen. This temperature display can also be called before the five seconds count to refresh the display when in default mode. This is useful when returning to default mode; otherwise it could take up to five seconds to display the internal temperature. The refresh variable is set in order to refresh the display. When the temperature button is held down, the program runs in temperature view mode. The external temperature replaces the internal DRM044 -- Rev 0 MOTOROLA Software For More Information On This Product, Go to: www.freescale.com Central Heating Controller 41 Freescale Semiconductor, Inc. Software temperature and the last or current user temperature is displayed on the left-hand side of the screen. The letters `P' and `E' are also displayed to aid the user in temperature type recognition. While in this mode the user can manually change the desired temperature for the current override or climate cycle by using the increment and decrement buttons. NOTE: This does not affect the stored program in memory. The serial communication returns two bytes of information, the `hibyte' and the `lobyte'. Both are in two's complement form. After conversion, one is subtracted from the `hibyte'. This is because the 0.5 bit is treated as if it were a one by the DS1721. Freescale Semiconductor, Inc... NOTE: For more information, please see the DS1721 data sheet. The `lobyte' is then converted to a decimal as follows: //////////////////////////////// // fractional part processing // //////////////////////////////// dec = 0; if ( lobyte.byte >= 0x10 ) // is bit 4 or greater, set { if ( lobyte.bit.bit7 ) { dec += 5000; // 0.5*10000 } if ( lobyte.bit.bit6 ) { dec += 2500; // 0.25*10000 } if ( lobyte.bit.bit5 ) { dec += 1250; // 0.125*10000 } if ( lobyte.bit.bit4 ) { dec += 625; // 0.0625*10000 } // checking for '0.05' second dec place rounding if ( dec%1000 >= 500 ) // is remainder >= 0.05 { dec += 1000; // 0.1 correction on first decimal } // div by 1000 (not 10000) to dec /= 1000; // produce integer value for first // decimal place Central Heating Controller 42 Software For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software User Interface In a similar manner to the methods used in decoding the internal temperature, the values are manipulated so that they can be sent to the function DisplayNumber() where they are displayed. 4.6 User Interface 4.6.1 Liquid Crystal Display Driver Freescale Semiconductor, Inc... Time of Day Time Day Temperature display Temperature Display Figure 4-4. LCD Layout The LCD has a operating frequency range of 30-85 Hz. The 1/3 duty cycle was selected as the LCD has three backplanes. The 42.7 Hz frequency was therefore selected as being the optimum choice for a 1/3 duty cycle and a 32.768 kHz crystal. Table 4-3. LCD Frequency Table DRM044 -- Rev 0 MOTOROLA Software For More Information On This Product, Go to: www.freescale.com Central Heating Controller 43 Freescale Semiconductor, Inc. Software For optimum optical performance the fast charge selection is set to a time period of LCDCLK/64. This value was derived empirically to achieve a good contrast ratio for the display used. Freescale Semiconductor, Inc... ///////////////////// // Display Startup // ///////////////////// LCDCLK.byte = 0x29; // = 00101001; // ||||||| // |||||||___ Base Clock/Frame Rate // ||||||____ " " " " // |||||_____ " " " " // ||||______ LCD Duty Selection // |||_______ " " " // ||________ Fast Charge // |_________ " " For the LCD control register, the LCD, fast charge and low current options were all enabled and a high bias voltage was applied to obtain the optimum viewing angle. LCDCR.reg // // // // // // // // // // = 0xbc; = 10111100; |||||||| ||||||||___ Contrast Controls |||||||____ " " ||||||_____ " " |||||______ " " ||||_______ Low Current |||________ Fast Charge ||_________ N/A |__________ LCD Enable (1 = enabled) At start-up, the segments are lit for one second as a screen test to confirm that all segments are operational. Central Heating Controller 44 Software For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software User Interface Table 4-4 and Table 4-5 show the relationship between the `control' hexadecimal codes, and the displayed values for the LCD. Table 4-4. Bit to Segment Correlation - 1st Digit 7 -0 0 0 0 0 0 0 0 0 0 0 0 6 D 1 0 1 1 0 1 1 0 1 0 0 0 5 G 0 0 1 1 1 1 1 0 1 1 0 0 LDAT1 4 3 A -1 0 0 0 1 0 1 0 0 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 Hex 2 DP 0 0 0 0 0 0 0 0 0 0 1 0 1 C 1 1 0 1 1 1 1 1 1 1 0 0 0 B 1 1 1 1 1 0 0 1 1 1 0 0 3 -0 0 0 0 0 0 0 0 0 0 0 0 LDAT2 2 1 ^ E 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 0 Hex 0 F 1 0 0 0 1 1 1 0 1 1 0 0 Freescale Semiconductor, Inc... Number 0 1 2 3 4 5 6 7 8 9 DP AN 53 03 71 73 23 72 72 13 73 33 04 00 3 0 2 0 1 1 3 0 3 1 0 4 Table 4-5. Bit to Segment Correlation - 2nd Digit 7 -0 0 0 0 0 0 0 0 0 0 0 0 6 ^ 0 0 0 0 0 0 0 0 0 0 0 1 5 E 1 0 1 0 0 0 1 0 1 0 0 0 LDAT3 4 3 F -1 0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 1 0 1 0 0 0 0 0 Hex 2 D 1 0 1 1 0 1 1 0 1 0 0 0 1 G 0 0 1 1 1 1 1 0 1 1 0 0 0 A 1 0 1 1 0 1 1 1 1 1 0 0 7 -0 0 0 0 0 0 0 0 0 0 0 0 LDAT2 6 5 DP C 0 1 0 1 0 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 0 0 0 Hex 4 B 1 1 1 1 1 0 0 1 1 1 0 0 Number 0 1 2 3 4 5 6 7 8 9 DP AN 35 00 27 07 12 17 37 01 37 13 00 40 3 3 1 3 3 2 2 3 3 3 4 0 The tables also allow direct access to individual segments for displaying a chevron or decimal point; for example: LDAT1.bit.bit2 = 1; DRM044 -- Rev 0 MOTOROLA Software For More Information On This Product, Go to: www.freescale.com Central Heating Controller 45 Freescale Semiconductor, Inc. Software This displays a decimal point on the far right hand digit. SingleDigit Backplane Single Digit Backplane a a Single Digit Frontplane Single Digit Frontplane a a f f e e e e g b BP0 (a, commoned) BP0 (a, bbcommoned) g c BP1 (c, f, commoned) BP1 (c, f, ggcommoned) e e b c Freescale Semiconductor, Inc... d BP2 (d, commoned) BP2 (d, eecommoned) d FP2 (b, commoned) FP2 (b, cccommoned) FP1 (a, d, commoned) FP1 (a, d, gg commoned) FP0 (e, commoned) FP0 (e, f fcommoned) Figure 4-5. Segment Labelling The DisplayNumber() function is used to decode a single integer and display it in the desired location on screen. The number to be displayed and the digit location are passed to the function when it is called. Initially, the function must determine whether the digit number is odd or even so that it can address the correct registers. This is done by taking the modulus of 2 from the number and checking for a one or zero. Once this has been established, the digit variable is altered to accommodate the non-linear relationship between the variable and the registers, resulting from each digit occupying one-and-a-half display registers. if ( digit%2 ) { switch ( digit ) { case 1: digit--;break; case 5: digit++;break; case 7: digit += 2; break; } // odd digit check // Compensates for 1.5 bytes // being used per digit // After the correct sets of registers are addressed, the numeric variable is decoded into its hexadecimal code value, which is then placed into the registers. Central Heating Controller 46 Software For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software User Interface 4.6.2 Button Detection Eight buttons are used in this application. All eight of the designated keyboard pins (PTA bits 0-3 and PTD bits 4-7) are used for this purpose. The function ReadButtons() is called every 10 ms to process a button press. Each button has its own assigned pattern with two additional patterns for simultaneous button presses in temperature view mode. Freescale Semiconductor, Inc... //////////////////// // button decodes // //////////////////// #define DEFAULT_BUTTONS #define BUTTON_1 #define BUTTON_2 #define BUTTON_3 #define BUTTON_4 #define BUTTON_5 #define BUTTON_6 #define BUTTON_7 #define BUTTON_8 #define BUTTON_5_DEC #define BUTTON_5_INC 0xff 0xfe 0xfd 0xfb 0xf7 0xef 0xdf 0xbf 0x7f 0xed 0xeb // // // // // // // // // // // 11111111 11111110 11111101 11111011 11110111 11101111 11011111 10111111 01111111 11101101 11101011 The algorithm used incorporates a button press and a button release routine. The ability to have an auto-scroll is included; this occurs when a button is pressed, and remains pressed for the duration of the de-bounce counter. This condition will occur when performing an adjustment of any time value. A single press and hold of the increment or decrement button will cause the auto-scroll to operate. The auto-scroll feature can be enabled/disabled on any button, as required. The flag that allows this feature is `button_flags.bit.AUTO_SCROLL'. When the flag is set, the auto-scroll feature is enabled. DRM044 -- Rev 0 MOTOROLA Software For More Information On This Product, Go to: www.freescale.com Central Heating Controller 47 Freescale Semiconductor, Inc. Software Read Buttons button press status Freescale Semiconductor, Inc... NO BUTTON PRESS BEING PRESSED RELEASED press detected N Y button pattern back to default N release counter = 0 N Y `button_press_status' = BEING_PRESSED button pattern still default Y N pattern has changed ,but is not default, start again. NO BUTTON PRESS original pressed pattern Y NO BUTTON PRESS N BEING PRESSED Y Y Y debounced yet 1st decode N N Y 10ms main() synchronising point decode button auto scroll enabled N Figure 4-6. Button Processing Flow Chart Central Heating Controller 48 Software For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Climate Control 4.7 Climate Control 4.7.1 Heating/Cooling A `Mode' button allows the selection of one of four modes. * * * * Automatic -- both heating and cooling will be active Heat -- only the heating will be active Cool -- only the cooling will be active Off -- climate control will never be active Freescale Semiconductor, Inc... The mode of operation is indicated by two LED indicators, which also serve to indicate heating/cooling activity by flashing at 1 Hz when active. Relays are used as control devices for the heating and cooling functions. 4.7.2 Override If the override button is pressed, a check is done to test whether the climate control is running. If it is running, then it is deactivated and the next alarm is loaded into the alarm register. If a program is not running when the override button is pressed, two variables are set to the current time plus one hour. The OverrideCheck() function then compares the TOD and `override time' variables. When they match, it deactivates the override and the climate control. If a scheduled program starts while the override is running, then the override is disabled and control is passed to the program. See Appendix A.26 [operation.h] -- OverrideCheck() and Appendix A.7 [button.c] -- DecodeButtons() for a more detailed account. DRM044 -- Rev 0 MOTOROLA Software For More Information On This Product, Go to: www.freescale.com Central Heating Controller 49 Freescale Semiconductor, Inc. Software 4.7.3 SMART -- Intelligent Temperature Prediction The `SMART' function allows the controller to modify the user's activation times to take account of internal and external temperature variations. `SMART' mode aims to achieve the user temperature at the desired time of building occupation. This is independent of external temperature variations, but is limited by the `SMART' prediction cap. When the climate control is activated the user temperature is compared with the internal temperature. If the internal temperature is below the hysteresis band (user temperature - one degree), the heating will switch on, as long as the correct mode is active. If the internal temperature is above or equal to the user temperature, the cooling will activate provided that the correct mode is active. See A.25 [operation.c] -- ClimateControl() for a more detailed account. If the SMART button is pressed, then the SMART chevron will be displayed. When in SMART mode, an algorithm examines the internal, external and desired temperatures, one hour prior to the commencement of the program. A predictive calculation is then performed, based on the following method: A percentage of internal temperature to desired temperature is calculated. The difference of this value from 100% (x) is used below. The ratio of internal temperature and external temperature is taken and multiplied by the previously calculated value, 'x'. This value is then multiplied by a scaling factor of 3, to enable correct operation. Finally this time is subtracted from the programmed 'on time'. The new calculated 'on time' is then loaded into the alarm register. The maximum SMART time is capped at 50 minutes to prevent the user's heating/cooling system from being activated for extended time periods. The actual SMART algorithm is as follows. Freescale Semiconductor, Inc... Central Heating Controller 50 DRM044 -- Rev 0 Software For More Information On This Product, Go to: www.freescale.com MOTOROLA Freescale Semiconductor, Inc. Software Climate Control // user_temperature; // Smart calculations, stage 1 if ( smart_time > 1000 ) // For Smart cooling { // smart_time -= 1000; // } // else // For Smart heating { // smart_time = 1000 - smart_time; // } // smart_time = 3 * (( smart_time * internal_temperature ) / ( 100 * external_temperature )); // Smart calculations, stage 2 smart_time = ( 1000 * internal_temperature ) Freescale Semiconductor, Inc... NOTE: The multiples of 10 are used to allow the integers to represent decimal values. This prevents loss of accuracy in rounding errors. DRM044 -- Rev 0 MOTOROLA Software For More Information On This Product, Go to: www.freescale.com Central Heating Controller 51 Freescale Semiconductor, Inc. Software 4.8 Programming Modes 4.8.1 Clock When in 'clock set' mode, the main program branches to the function Cset(). A switch statement is used to determine which value is being set. The first case is the 'hour set'. Every 0.25 seconds the hour digits toggle on/off to indicate the variable, which is being set. The 0.25 second toggle is used for this purpose, see 4.3 Real Time Clock. On clearing the display, the minute digits and the chevrons are refreshed, so that they do not appear to have turned off. If the increment or decrement buttons are pressed, the ReadButtons() function decodes the button press (see 4.6.2 Button Detection) and alters the hour digit accordingly. As previously mentioned, the increment and decrement are capable of auto-scrolling so the user can keep the button pressed and the corresponding register will scroll round the values. A maximum and minimum cap is already in place in the RTC registers, however, when the maximum is reached, the next increment resets the RTC register to zero. When the minimum is reached, the next decrement sets the register to its maximum value. Freescale Semiconductor, Inc... case HOUR_SET: if ( _0P25sec ) { SFLASH = 1; HRClr(); MINClr(); ChevronRefresh(); } else { ClearDisplay(); LDAT10.bit.bit2 = 1; MINClr(); ChevronRefresh(); } break; // For every other 1/4 of a second // Displays divider decimal point // Refreshes hour digits // Refreshes minute digits // Allows hour digits to flash // Decimal point remains constant // Minute digits refreshed After pressing the `clock set' button, the programming mode switches to `minute set'. This function performs in the same manner as the `hour set', with the exception that the minutes now toggle instead of the hours. Again, the register `rolls over' when required. Central Heating Controller 52 Software For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Programming Modes The next program mode is the Day of Week (DOW). The first thing that is done is to remove all previous chevrons to prevent `ghosting'. The chevron bits can be directly accessed using a `bit set' or `bit clear' (see 4.6.1 Liquid Crystal Display Driver). Again, the 0.25-second toggle is used to make the chevron flash. The increment and decrement buttons move the chevron from Monday through Sunday. Sunday is equal to 0x00 in the DOW register so, when Saturday is reached and the increment button is pressed, the DOW register is reset to zero. Again, a reverse process is implemented for decrement. When the clock set button is pressed again, the set mode returns to default and the main loop no longer branches to the function. There are no variables to store or manipulate, because the clock set function changes the RTC registers directly. Whenever the clock set button is pressed, the RTC second register is reset so that the TOD can be set precisely, if required. Freescale Semiconductor, Inc... 4.8.2 Climate Control Cycles Up to four individual on/off time periods may be set at any point in time. Each period may be set for either a single event up to seven days in advance, or for multiple timing events at the same time each day. The daily settings can be made for weekdays, weekends or individual days. The time setting of a program works in a very similar way to the clock set but with a few additional modes. On entering the alarm set mode, the first screen displayed is `Pr' followed by the number `1' flashing. The increment and decrement buttons can be used to select a program. The maximum number of programs in this application is four. Increasing the data structure and the button cap limits can modify this. NOTE: Any new programs must be added to the enum in define.h before the 'NO_PROGRAM' declaration (see Appendix A.13 [define.h]). The user now has two options. Pressing the `Prog' button will continue to set a new program. However, pressing the temperature/clear button will erase the program that is currently flashing from the stored memory. DRM044 -- Rev 0 MOTOROLA Software For More Information On This Product, Go to: www.freescale.com Central Heating Controller 53 Freescale Semiconductor, Inc. Software Setting the off times equal to the on times does this. The ignore condition is implemented in Alarm.c (see Appendix A.3 [Alarm.c]). After the user has pressed the alarm set button, the DOW selection mode is activated. The selected program number is then displayed followed by `On'. Once in this mode, the user can press the increment and decrement buttons in the same way as the DOW mode in clock set. There are, however, two additional selections. The user can set programs for individual days, Monday-Friday or Saturday-Sunday. This gives flexibility to users who may have the same program patterns for the weekdays but would perhaps prefer the weekends to be different. The next mode is the `On Time' set. This operates in exactly the same way as the clock set function, but it is repeated for `Off Time' set also (see 4.8.1 Clock). Once `Off Time' is activated, the displayed `On' changes to `Off'. After the on and off times are set, the' final mode is the user temperature set. A `t' is then displayed instead of `Off' and a default value of `20' flashes next to a `c'. Again, increment and decrement change this value, which has a maximum of 40 and a minimum of 0. The scaling of the measurement circuitry sets the upper limit. The minimum is set to 0, as the temperature sensor cannot detect negative values, and it is unlikely that the building temperature would fall to that value. If the maximum or minimum is reached, the rollover value is set to a default of 20C. At the end of each mode, the data that has just been set is stored into the `program' structure. The structure stores six different variables: * * * * * * On hour On minute DOW Off hour Off minute Desired temperature Freescale Semiconductor, Inc... Once the temperature has been set, the ProCheck() function is called to check if the new program overlaps with any other programs that have Central Heating Controller 54 Software For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Programming Modes Freescale Semiconductor, Inc... already been stored. The on and off data is converted into two variables by multiplying the hours by 60 and then adding the minutes to this value. These two variables are then checked with the already stored programs, which are converted into the same format (see Appendix A.5 [Alarmset.c] -- ProCheck() for a more detailed account). If an overlap is found, then `Err' is displayed, followed by the stored program, which has the conflict, then `-' followed by the new program number that has been entered. The error screen is displayed for one second. The program is then cancelled by altering the off times to the ignore condition. If no error is found then the program continues as normal. After the ProCheck() function, the Alarm() function is called. The alarm function is used to load the next scheduled program into the alarm registers. When the alarm function is called, a check is done to see if the climate control is running. If it is, then the corresponding `Off time' is loaded into the alarm register in preparation for the program ending. Otherwise, a check is done to determine the next scheduled program. This is done by checking that the DOW is correct and then converting the on times into the same format as mentioned previously in ProCheck(). Once the next on time is loaded into the alarm register, one hour is subtracted and stored in two separate variables for use in the 'SMART' function (see 4.7.3 SMART -- Intelligent Temperature Prediction). The Alarm function is called when: a new alarm has just been programmed, an alarm flag is detected, or at the beginning of a new day. If no programs were active over midnight, the next day's programs would not be loaded into the alarm register. For this reason, the last call has been added. The day flag is checked and, when it is set, as long as a program is not running, the alarm function is called again. The day flag is then reset in preparation for the next day. DRM044 -- Rev 0 MOTOROLA Software For More Information On This Product, Go to: www.freescale.com Central Heating Controller 55 Freescale Semiconductor, Inc. Software 4.9 Low Power Modes 4.9.1 Low Current Operation Firstly, a measurement of the supply voltage should be taken using channel 1 of the ADC. A function PowerFailure() is then needed to detect if the supply voltage has dropped below the desired level. If a reduction is detected, the MC68HC908LJ12 is prepared for low current operation. This is done in a very similar way to preparing for STOP mode (see 4.9.2 Low Voltage Inhibit -- STOP Mode). The climate control relays and LEDs are switched off. Ports B and D are then set to be inputs to reduce any current drain. The ten millisecond interrupt is disabled and the LCD control register (LCDCR) is modified to decrease the bias voltage for battery operation. The program then remains in a loop, refreshing the TOD. Also, `Fail' is displayed on the right-hand side of the display to show that the supply has failed. The program remains in the loop until the supply voltage rises again. Freescale Semiconductor, Inc... void PowerFailure( void ) { if ( LowPower ) { PTB.byte = 0x00; DDRA.reg = 0x00; DDRB.reg = 0x00; DDRD.reg = 0x00; RTCCR1.bit.CHRIE = 0; SFLASH = 1; LCDCR.reg = 0xb0; while ( !PTA.bit.bit5 ) { ServiceWatchDog(); HRClr(); MINClr(); LDAT6.byte = 0x33; LDAT5.byte = 0x03; LDAT4.byte = 0x33; LDAT3.byte = 0x30; LDAT2.byte = 0x03; LDAT1.byte = 0x40; } RTCCR2.bit.CHRCLR = 1; MicroStartUp(); Alarm(); } } // Turn off heating/cooling & LED's // Set all ports to input // // // Disables RTC 100Hz interrupt // Decimal point after hour digits // Adjust LCD to lower power mode // While in low power mode // Refresh TOD // // Display 'FAIL' // // // // // // Reset chronograph counter // Reinitialises the micro // Load next alarm into the register // PowerFailure() Central Heating Controller 56 Software For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Low Power Modes When the supply voltage returns, the program runs the same initialisation routines as the LVI and keyboard methods (see 4.9.2 Low Voltage Inhibit -- STOP Mode). The program then returns to normal operation. 4.9.2 Low Voltage Inhibit -- STOP Mode In this application, the LVI is used to detect when the main supply voltage drops or rises. When a drop in supply voltage is detected, the LVI module generates an interrupt. Within the interrupt routine, the climate control relays and LEDs are switched off. Ports B and D are then set to be inputs to reduce current drain. The LCD is cleared and the control register (LCDCR) is modified to decrease the bias voltage, so that it can be read when operating from the low voltage of the battery. `bAtt' is displayed on the right-hand side of the screen to tell the user that the controller is now running from the battery. In addition to the above, the ten millisecond chronograph interrupt must also be disabled by changing the correct RTC control register (RTCCR1). Once the above has been completed, the MC68HC908LJ12 is brought into STOP mode by calling the function STOP(). Freescale Semiconductor, Inc... #pragma TRAP_PROC void LVI_INTERRUPT( void ) { ServiceWatchDog(); PTB.byte = 0x00; LVISR.bit.LVIIAK = 1; if ( LVISR.bit.LVIOUT ) { DDRB.reg = 0x00; DDRD.reg = 0x00; RTCCR1.bit.CHRIE = 0; ClearDisplay(); LCDCR.reg = 0xb0; LDAT6.byte = 0x36; LDAT5.byte = 0x23; LDAT4.byte = 0x33; LDAT3.byte = 0x36; LDAT2.byte = 0x03; LDAT1.byte = 0x60; STOP(); } else // Turn off heating/cooling & LED's // Resets the interrupt flag // Set ports to input to reduce... // current drain // Disables RTC 100Hz interrupt // Adjust LCD to lower power mode // Displays 'bAtt' // // // // // DRM044 -- Rev 0 MOTOROLA Software For More Information On This Product, Go to: www.freescale.com Central Heating Controller 57 Freescale Semiconductor, Inc. Software { RTCCR2.bit.CHRCLR = 1; MicroStartUp(); Alarm(); } } // LVI_INTERRUPT() // // // // Reset chronograph counter Return micro to previous state Load next alarm into the register. NOTE: The LVIOUT flag is used to detect whether the supply voltage has risen or fallen. When the supply voltage returns, the LVI issues another interrupt to bring the MC68HC908LJ12 out of STOP mode. The interrupt routine then clears the chronograph counter (preventing a ten millisecond interrupt occurring instantly) and runs the initialization function MicroStartUp() (see Appendix A.27 [startup.c]). Once the registers of the MC68HC908LJ12 have been re-initialized, the Alarm() function is called to allow the next program to be loaded into the alarm register. Normal operation is then resumed. Freescale Semiconductor, Inc... 4.9.3 Keyboard Interrupt -- STOP Mode If a keyboard interrupt is required to bring the MC68HC908LJ12 out of STOP mode, then the keyboard interrupts must be initialized before entering STOP mode (see MC68HC908LJ12 Technical Data, page 367). The LVI module should be used in a similar way to above. However, the module then must be disabled to save current consumption. This is done in configuration register one (CONFIG1). By clearing the LVISTOP bit, the LVI module is automatically disabled during STOP mode. See below for the LVI interrupt function. #pragma TRAP_PROC void LVI_INTERRUPT( void ) { ServiceWatchDog(); PTB.byte = 0x00; LVISR.bit.LVIIAK = 1; DDRB.reg = 0x00; DDRD.reg = 0x00; RTCCR1.bit.CHRIE = 0; ClearDisplay(); LCDCR.reg = 0xb0; LDAT6.byte = 0x36; // Turn off heating/cooling & LEDs // Resets the interrupt flag // Set ports to input to reduce... // current drain // Disables RTC 100Hz interrupt // Adjust LCD to lower power mode // Displays 'bAtt' Central Heating Controller 58 Software For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Battery Backup LDAT5.byte LDAT4.byte LDAT3.byte LDAT2.byte LDAT1.byte = = = = = 0x23; 0x33; 0x36; 0x03; 0x60; // // // // // // // // // Mask interrupt flag Enable keyboard interrupts Clear interrupt flag Unmask interrupt flag KBSCR.bit.IMASK = 1; KBIER.byte = 0xff; KBSCR.bit.ACKK = 1; KBSCR.bit.IMASK = 0; STOP(); } // LVI_INTERRUPT() Freescale Semiconductor, Inc... In addition to the LVI interrupt function, a keyboard interrupt function must also be added. When a keyboard interrupt is detected, the MC68HC908LJ12 is brought out of STOP mode and performs the interrupt routine. This routine must re-initialize the MC68HC908LJ12. An example routine is shown below. #pragma TRAP_PROC void KEYBOARD_INTERRUPT( void ) { ServiceWatchDog(); KBSCR.bit.IMASK = 1; KBSCR.bit.ACKK = 1; RTCCR2.bit.CHRCLR = 1; MicroStartUp(); Alarm(); } // This prevents further interrupts // // Reinitialises the micro // Load next alarm into the register // KEYBOARD_INTERRUPT() 4.10 Battery Backup Every five seconds, the backup battery voltage is read using channel 2 of the ADC. This value is then accessed in default mode and compared with a predefined value (see Appendix A.13 [define.h] -- LOWBATT). If the voltage is less than the predefined value then the display toggles every two seconds between the TOD/internal temperature and `Lo bAtt'. void TimeRefresh( void ) { if ( BatteryCheck <= LOWBATT && two_second ) { LDAT12.byte = 0x00; // Clears unused digit LDAT11.byte = 0x03; // Displays 'Lo' DRM044 -- Rev 0 MOTOROLA Software For More Information On This Product, Go to: www.freescale.com Central Heating Controller 59 Freescale Semiconductor, Inc. Software LDAT10.byte = 0x40; LDAT9.byte = 0x26; LDAT8.byte = 0x20; LDAT7.byte = 0x00; LDAT6.byte = 0x36; LDAT5.byte = 0x23; LDAT4.byte = 0x33; LDAT3.byte = 0x36; LDAT2.byte = 0x03; LDAT1.byte = 0x60; } else { LDAT6.byte = 0x00; LDAT5.byte &= 0x0f; MINClr(); HRClr(); Refresh = 1; ChevronRefresh(); } } // // // // Clears unused digit // Displays 'bAtt' // // // // // Freescale Semiconductor, Inc... // Removes the 'b' // // Refresh TOD display // // Refresh internal temperature // TimeRefresh() The predefined value is determined as follows: The minimum recommended voltage for the MC68HC908LJ12 is 3.3 V 10%. Therefore `Lo bAtt' should be displayed when the battery voltage is 2.7 V or less. To convert 2.7 V into ADC counts, it is divided by the reference voltage (4.8 V) and multiplied by 1024 as the ADC is set at 10-bit resolution. This gives a value of 576 counts. 4.11 On-board Flash Programming The compiler used for the project was Metroworks Code Warrior IDE v5.2.1149. The debugging tool that is incorporated into the IDE is very useful. It allows quick and easy communication with the development kit for stepping through the code. Central Heating Controller 60 Software For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software On-board Flash Programming Freescale Semiconductor, Inc... Figure 4-7. Metroworks Codewarrior Screenshot The debugger also has the option to program the MC68HC908LJ12. The following method was used for this project. P&E's programming software was installed (see Motorola's data CD-ROM). The target settings were then changed to the P&E software. To select this, go to the menu `component' --> `set target'. Once there, change the target interface to the `P&E target interface'. The P&E software is then loaded. Once complete, enter programming mode by going to the menu `PEDebug' --> `Mode:' and selecting `In-Circuit Debug/Programming'. To load the project onto the microcontroller, go to `PEDebug' --> `load' and select the project's abs file. The screen should now look similar to the screen shot below. DRM044 -- Rev 0 MOTOROLA Software For More Information On This Product, Go to: www.freescale.com Central Heating Controller 61 Freescale Semiconductor, Inc. Software Freescale Semiconductor, Inc... Figure 4-8. Programming Confirmation Click `yes'. The program will go through the steps of programming the microcontroller as shown below. Central Heating Controller 62 Software For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software On-board Flash Programming Freescale Semiconductor, Inc... Figure 4-9. During Programming When the programming has completed, the small window will disappear. Once the program has been set up in this way, microcontrollers can be programmed using the load command, after they have been connected to the PC's serial port. Provision is made on the printed circuit board (PCB) layout to allow the MC68HC908LJ12 to be programmed `in circuit'. A suitable circuit to interface the device to a PC via an RS232 serial port, is given in Appendix D. Programming Circuit Diagram. This interface is connected to the main board by means of an IDC header and ribbon cable. DRM044 -- Rev 0 MOTOROLA Software For More Information On This Product, Go to: www.freescale.com Central Heating Controller 63 Freescale Semiconductor, Inc. Software Freescale Semiconductor, Inc... Central Heating Controller 64 Software For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- DRM044 Appendix A. Software Routines A.1 [a2d.c] ////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // ////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // ////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : a2d.c // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // a2d routines // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 13/05/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __EXTERN_H_ #include "extern.h" #endif #include #include "delay.h" "a2d.h" Freescale Semiconductor, Inc... ////////////////////////////////////////////////////////////////////////////// // This function returns an averaged analogue value. The averaging is // // currently 8, determined by the value of A2D_SAMPLE_COUNT (in a2d.h) // DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 65 Freescale Semiconductor, Inc. Software Routines // // // NOTE: the summing variable 'a2d_total' is 16 bit, this means we can store // // 32 readings of 0x3ff ie 11 1111 1111. If you want greater averaging then // // make 'a2d_total' an unsigned long. // // // // Argument : analogue channel to read // // Returns : averaged analogue result // ////////////////////////////////////////////////////////////////////////////// unsigned short int ReadA2D( unsigned char channel ) { unsigned short int a2d_total; union uUNSIGNED_INTEGER a2d_bytes; unsigned char ii; Freescale Semiconductor, Inc... for ( a2d_total = 0, ii = 0; ii < A2D_SAMPLE_COUNT; ii++ ) { ADSCR.reg = 0x00|channel; // a2d interrupts off, clears COCO bit while ( !ADSCR.bit.COCO ) ; // Wait for conversion to complete a2d_bytes._8bit.hibyte = ADRH.reg; // Read high reg first to latch low reg a2d_bytes._8bit.lobyte = ADRL.reg; // Now read lo reg a2d_total += a2d_bytes._16bit; // Update running total } a2d_total /= A2D_SAMPLE_COUNT; // Average return a2d_total; // Return averaged result } // ReadA2D() //---------------------------------------------------------------------------- Central Heating Controller 66 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [a2d.h] A.2 [a2d.h] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : a2d.h // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // Header file for 'a2d.c' // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 12/05/00 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __A2D_H_ #define __A2D_H_ #define #define #define #define #define #define #define #define #define #define #define #define #define #define CHANNEL0 CHANNEL1 CHANNEL2 CHANNEL3 CHANNEL4 CHANNEL5 A2D_BANDGAP_REF A2D_VDDA A2D_VSSA A2D_OFF CLEAR_CHANNEL_SEL A2D_SAMPLE_COUNT ShutDownA2D() A2D_STABILISATION 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x1d 0x1e 0x1f 0xe0 8 (ADSCR.reg = A2D_OFF) // ADC power off 16// approx 100us == 200 bus cycles @ 2MHz... // bus speed '16' => 15+(12*16) = 207 bus... // cycles == 103.5us Freescale Semiconductor, Inc... //////////////// // prototypes // DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 67 Freescale Semiconductor, Inc. Software Routines //////////////// unsigned short intReadA2D( unsigned char ); #endif Freescale Semiconductor, Inc... Central Heating Controller 68 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [Alarm.c] A.3 [Alarm.c] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : Alarm.c // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // Alarm routine // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 27/06/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __EXTERN_H_ #include "extern.h" #endif #include #include Freescale Semiconductor, Inc... void Alarm( void ) { struct sPROG_PARAMS* ptr = NULL; unsigned char temp; if ( PRNumber < NO_PROGRAM { ALMR.byte = program[PRNumber].min_off; ALHR.byte = program[PRNumber].hour_off; PRNumber = NO_PROGRAM; PR2 = 1; } // If alarm is currently running // Set off time in alarm register // Initiate override variable DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 69 Freescale Semiconductor, Inc. Software Routines else { for ( ptr = &program[0]; ptr <= &program[3]; ptr++ ) { temp = ptr->dow; if ( temp == 8 ) { if ( 0 < DOWR.byte && DOWR.byte < 6 ) { temp = DOWR.byte; // Load DOW value for Minute - Fri } } else if ( temp == 9 ) { if ( DOWR.byte == 0 || DOWR.byte == 6 ) { temp = DOWR.byte; // Load DOW value for Sat - Sun } } OrderCheck(ptr, temp); // end of 'for' // Call of function to check... // the order of the alarms Freescale Semiconductor, Inc... } if ( program[PRNumber].hour_on == 0 )SHour = 23; else SHour = program[PRNumber].hour_on - 1; // Store Alarm hour - 1 for smart SMin = program[PRNumber].min_on; // Copy of alarm minute for smart PR2 = 0; // Reset override variable } } // Alarm() //------------------------------------------------------------------------------ void OrderCheck( const struct sPROG_PARAMS* ptr, unsigned char dow_check ) { unsigned short int stored_total_on; unsigned short int stored_total_off; unsigned short int alarm_reg_total; unsigned short int current_time_total; if ( dow_check == DOWR.byte ) { stored_total_on =( stored_total_off =( alarm_reg_total =( current_time_total = ( // Is it the Day of the alarm 60 60 60 60 * * * * ptr->hour_on ) ptr->hour_off) ALHR.byte ) HRR.byte ) + + + + ptr->min_on; ptr->min_off; ALMR.byte; MINR.byte; if ( stored_total_on == stored_total_off ) return; // If the on time is equal to the off time (clear/ignore condition) if ( current_time_total < stored_total_on ) { if ( PRNumber < NO_PROGRAM ) // If a program has already been... { // loaded into the alarm register Central Heating Controller 70 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [Alarm.c] if ( stored_total_on < alarm_reg_total ) { ALMR.byte = ptr->min_on; // Set new on time ALHR.byte = ptr->hour_on; // PRNumber = (unsigned char)(ptr - &program[0]); } // Store which program is now is the alarm reg. } else { ALMR.byte = ptr->min_on; // Set new time ALHR.byte = ptr->hour_on; // PRNumber = (unsigned char)(ptr - &program[0]); } // Store which program is now is the alarm reg. } } } // OrderCheck() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... void AlarmFlag( void ) { unsigned char temp; if ( RTCSR.bit.ALMF ) // If the Alarm flag is set { temp = ALHR.reg; // Clears Alarm flag if (PRNumber < NO_PROGRAM) // If alarm is to be activated { Active = 1; // Set heating control variable user_temperature = program[PRNumber].temperature; } // Desired temperature is recalled else // If a program has just ended { Active = 0; // Clear heating control variable PTB.bit.bit0 = 0x00; // Turn off heating PTB.bit.bit1 = 0x00; // Turn off Cooling } Alarm(); } } // AlarmFlag() //------------------------------------------------------------------------------ void NewDayRefresh( void ) { unsigned char temp; if ( RTCSR.bit.DAYF ) { if ( PRNumber >= NO_PROGRAM ) { Alarm (); // If the Day flag is set // If a program is not running // Refresh the alarm register DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 71 Freescale Semiconductor, Inc. Software Routines } temp = DAYR.reg; // DayFlag reset } } // NewDayRefresh() //---------------------------------------------------------------------------- Freescale Semiconductor, Inc... Central Heating Controller 72 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [Alarm.h] A.4 [Alarm.h] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : Alarm.h // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // Header file for 'Alarm.c' // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 27/06/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __Alarm_H_ #define __Alarm_H_ void void void void NewDayRefresh( void ); OrderCheck( const struct sPROG_PARAMS*, unsigned char ); AlarmFlag( void ); Alarm( void ); Freescale Semiconductor, Inc... #endif DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 73 Freescale Semiconductor, Inc. Software Routines A.5 [Alarmset.c] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : Alarmset.c // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // Alarm set routines // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 25/06/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __EXTERN_H_ #include "extern.h" #endif #include #include #include #include #include "Display.h" "button.h" "Delay.h" "Alarm.h" "Alarmset.h" Freescale Semiconductor, Inc... void ModeAlarmSet( void ) { switch ( Aset_mode ) { case PROGRAM_MODE: Program(); break; case WEEK_MODE: Week(); break; // Branch to the current setting Central Heating Controller 74 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [Alarmset.c] case WEEKEND_MODE: Weekend(); break; case DAILY_MODE: case DAILY_MODE_REVERSE: Daily(); break; case HOUR_MODE: AlarmHset(); break; case MINUTE_MODE: AlarmMset(); break; case TEMPERATURE_MODE: AlarmTset(); break; case PROGRAM_CHECK_MODE: ProCheck(); set_mode = MODE_DEFAULT; Aset_mode = DEFAULT; AlarmPRNumber = NO_PROGRAM; if ( !PR2 ) Alarm (); // Refresh alarm register Refresh = 1; // Refresh temperature break; } } // ModeAlarmSet() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... void Program( void ) { ClearDisplay(); LDAT12.byte = 0x33; // Displays "AlarmPRNumber" LDAT11.byte = 0x12; // LDAT10.byte = 0x20; // if ( _0P25sec ) // For every other 1/4 of a second { LDAT9.byte = 0x00; // Allows Program Number to Flash LDAT8.byte &= 0x0f; // } else DisplayNumber( AlarmPRNumber + 1, 6 ); // Displays Program Number } // Program() //------------------------------------------------------------------------------ void Week( void ) { if ( _0P25sec ) { DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 75 Freescale Semiconductor, Inc. Software Routines LDAT12.bit.bit6 LDAT11.bit.bit2 LDAT9.bit.bit6 LDAT8.bit.bit2 LDAT6.bit.bit6 } else { LDAT12.bit.bit6 LDAT11.bit.bit2 LDAT9.bit.bit6 LDAT8.bit.bit2 LDAT6.bit.bit6 = = = = = 0; 0; 0; 0; 0; // Chevrons are Removed, Mon - Fri // // // // = = = = = 1; 1; 1; 1; 1; // Chevrons are Added, Mon - Fri // // // // Freescale Semiconductor, Inc... } } // end of week //------------------------------------------------------------------------------ void Weekend( void ) { if ( _0P25sec ) // For every other 1/4 of a second { LDAT5.bit.bit2 = 1; // Add Chevrons to Sat - Sun LDAT3.bit.bit6 = 1; // } else { LDAT5.bit.bit2 = 0; // Allows chevrons to flash LDAT3.bit.bit6 = 0; // } } // end of weekend //------------------------------------------------------------------------------ void Daily( void ) { volatile union uPORT*ptr = &LDAT1; if ( _0P25sec ) { if ( dow_set == MON || dow_set == WED || dow_set == FRI || dow_set == SUN ) { // Determins Even Digit ptr[dow_set].bit.bit6 = 1; // Adds a Chevron } else ptr[dow_set].bit.bit2 = 1; // Adds a Chevron } else { LDAT12.bit.bit6 = 0; // Clears all chevrons LDAT11.bit.bit2 = 0; // LDAT9.bit.bit6 = 0; // LDAT8.bit.bit2 = 0; // LDAT6.bit.bit6 = 0; // LDAT5.bit.bit2 = 0; // Central Heating Controller 76 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [Alarmset.c] LDAT3.bit.bit6 = 0; // } } // end of Daily //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... void AlarmHset( void ) { MinAlm(); if ( _0P25sec ) { LDAT6.byte = 0x00; LDAT5.byte = 0x00; LDAT4.byte = 0x00; } else HrAlm(); // Displays minute digits // For every other 1/4 of a second // Clears the other digits // // // Display Hour ChevronRefresh(); } // end of AlarmHset //------------------------------------------------------------------------------ void AlarmMset( void ) { HrAlm(); if ( _0P25sec ) { LDAT3.byte = 0x00; LDAT2.byte = 0x00; LDAT1.byte = 0x00; } else MinAlm(); // Displays hour digits // For every other 1/4 of a second // Clears the other digits // // // Display Minutes ChevronRefresh(); } // end of AlarmMset //-----------------------------------------------------------------------------void AlarmTset( void ) { if ( _0P25sec ) { LDAT2.byte &= 0x0f; LDAT3.byte = 0x00; LDAT4.byte = 0x00; LDAT5.byte &= 0xf0; } else TempAlm(); // For every other 1/4 of a second // // Temperature Digits are Cleared // // // Display Temperature ChevronRefresh(); } // end of AlarmTset //------------------------------------------------------------------------------ /////////////////////////////////////////////////////////////////////////////// // This function checks to see if any of the programs overlap each other. If // DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 77 Freescale Semiconductor, Inc. Software Routines // they do, an error message is displayed with the numbers of the programs // // that clash. The latest program is then cancelled/ignored. // /////////////////////////////////////////////////////////////////////////////// void ProCheck( void ) { unsigned short int temp; unsigned short int stored_total_on; unsigned short int stored_total_off; unsigned short int new_total_on; unsigned short int new_total_off; unsigned char error = NO_PROGRAM; unsigned char stored_program; Freescale Semiconductor, Inc... new_total_on = ( 60 * + new_total_off = ( 60 * + program[AlarmPRNumber].hour_on ) program[AlarmPRNumber].min_on; program[AlarmPRNumber].hour_off ) program[AlarmPRNumber].min_off; if ( new_total_on != new_total_off ) { for ( stored_program = 0; stored_program <= 3; stored_program++ ) { if ( AlarmPRNumber != stored_program ) { if ( program[stored_program].dow == 8 )// Mon - Fri { if ( program[AlarmPRNumber].dow == 0 || // Sun program[AlarmPRNumber].dow == 6 || // Sat program[AlarmPRNumber].dow == 9 ) // Sat - Sun { continue; // If dow are not equal, skip... } // the check } if ( program[stored_program].dow == 9 ) // { if (( program[AlarmPRNumber].dow > 0 program[AlarmPRNumber].dow < 6 ) program[AlarmPRNumber].dow == 8 ) { continue; // } // } Sat - Sun && || // DOW > Sunday and ... // DOW < Saturday or... // DOW = Mon - Fri If dow are not equal, skip... the check if ( program[AlarmPRNumber].dow == 8 ) // Mon - Fri { if ( program[stored_program].dow == 0 || // Sun program[stored_program].dow == 6 ) // Sat { continue; // If dow are not equal, skip... } // the check } if ( program[AlarmPRNumber].dow == 9 ) // Sat - Sun Central Heating Controller 78 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [Alarmset.c] { if ( program[stored_program].dow program[stored_program].dow { continue; } } > 0 &&// DOW > Sunday and ... < 6 )// DOW < Saturday or... // If dow are not equal, skip... // the check Freescale Semiconductor, Inc... if ( program[AlarmPRNumber].dow < 8 && program[stored_program].dow < 8 ) { if ( program[AlarmPRNumber].dow != program[stored_program].dow ) { continue; // If dow are not equal, skip... } // the check } = ( 60 * program[stored_program].hour_on ) + program[stored_program].min_on; stored_total_off = ( 60 * program[stored_program].hour_off ) + program[stored_program].min_off; if ( stored_total_on != stored_total_off ) { if (( stored_total_on > new_total_on && stored_total_on < new_total_off ) || // If the new program starts before the stored but the off time overlaps (( stored_total_on < new_total_on ) && ( stored_total_off > new_total_on ) )) // If the new program starts after the stored but the on time overlaps { error = stored_program; continue; } } } } // end of 'for' } if ( error != NO_PROGRAM ) { ClearDisplay(); LDAT12.byte = 0x37; LDAT11.byte = 0x02; LDAT10.byte = 0x20; LDAT9.byte = 0x22; LDAT4.bit.bit5 = 1; DisplayNumber( AlarmPRNumber + 1, 4 ); DisplayNumber( error + 1 , 2 ); for ( temp = 0; temp < 1000; temp++ ) { Delay( _1MS ); ServiceWatchDog(); } // If an error is present stored_total_on // Displays "Err" // // // // Displays "-" // The program that was entered // The conflicting program // 1sec delay to show error message DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 79 Freescale Semiconductor, Inc. Software Routines program[AlarmPRNumber].hour_off = program[AlarmPRNumber].hour_on; program[AlarmPRNumber].min_off = program[AlarmPRNumber].min_on; } // Cancels the program ClearDisplay(); } // ProCheck() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... void HrAlm ( void ) // Hour Alarm Refresh { DisplayNumber(( unsigned char )( Hour%10 ), 3 ); // Second Hour Digit if ( Hour >= 10 ) // If the First Hour Digit != 0 { DisplayNumber(( unsigned char )( Hour/10 ), 4 ); } // Displays the First Hour Digit } // end of HRAlm() //------------------------------------------------------------------------------ void MinAlm ( void ) // Min Alarm refresh { DP = 0; DisplayNumber(( unsigned char )( Minute%10 ), 1 ); // Second Minute Digit DisplayNumber(( unsigned char )( Minute/10 ), 2 ); // First Minute Digit } // end of MINAlm //------------------------------------------------------------------------------ void TempAlm ( void ) { DisplayNumber(( unsigned char )( user_temperature%10 ), 2 ); // Second Temperature Digit if ( user_temperature/10 ) // First Temperature Digit != 0 { DisplayNumber(( unsigned char )( user_temperature/10 ), 3 ); } // First Temperature Digit // Resets the Chevron Variable } // end of TEMPAlm //------------------------------------------------------------------------------ Central Heating Controller 80 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [Alarmset.h] A.6 [Alarmset.h] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : Alarmset.h // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // Header file for 'Alarmset.c' // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 25/06/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __Alarmset_H_ #define __Alarmset_H_ enum { MON_FRI = 0x00, SAT_SUN, SUN, SAT = 0x04, FRI, THU = 0x07, WED, TUE = 0x0a, MON }; Freescale Semiconductor, Inc... void void void void void void void void void void void void ModeAlarmSet( void ); AlarmTset( void ); AlarmMset( void ); AlarmHset( void ); ProCheck( void ); Weekend( void ); Program( void ); TempAlm( void ); MinAlm( void ); Daily( void ); HrAlm( void ); Week( void ); #endif DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 81 Freescale Semiconductor, Inc. Software Routines A.7 [button.c] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : button.c // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // Button routine // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 11/07/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __EXTERN_H_ #include "extern.h" #endif #include #include #include #include #include "Alarmset.h" "Clockset.h" "Display.h" "Alarm.h" "button.h" Freescale Semiconductor, Inc... //////////////////////////////////////////////////////////////////////////////// // Simple 8 bit (byte) button read // // // // Arguments: none // // returns : none // //////////////////////////////////////////////////////////////////////////////// void ReadButtons( void ) { button_pattern = ( PTD.reg & 0xf0 ) + ( PTA.reg & 0x0f ); Central Heating Controller 82 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [button.c] /////////////////////////////////////////////////// // any change to the current button press status // /////////////////////////////////////////////////// switch ( button_press_status ) { case NO_BUTTON_PRESS: DefaultButtons(); break; case BUTTON_PRESSED : PressedButtons(); break; case BUTTON_RELEASED: ReleasedButtons(); break; } } // ReadButtons() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... //////////////////////////////////////////////////////////////////////////////// // This function is called from 'ReadButtons()' which is itself called every // // 'main()' 10ms iteration. // // // // This function is called if the value of 'button_press_status' is // // NO_BUTTON_PRESS. If a press is detected by the variable 'button_pattern' // // not being equal to DEFAULT_BUTTONS then 'button_press_status' is assigned // // to BUTTON_PRESSED. On the next main loop iteration then 'PressedButtons()' // // will be called from 'ReadButtons()'. // // // // Arguments : none // // Returns : none // //////////////////////////////////////////////////////////////////////////////// void DefaultButtons( void ) { if ( button_pattern == DEFAULT_BUTTONS ) { // re-affirmation pressed_pattern = DEFAULT_BUTTONS; button_debounce_counter = 0; button_flags.bit.FIRST_PASS = 0; button_flags.bit.AUTO_REPEAT = 0; } else { /////////////////////////////////////////////////////////////// // OK, a press detected, this is the first recognition of... // /////////////////////////////////////////////////////////////// button_press_status = BUTTON_PRESSED; // state change pressed_pattern = button_pattern; // store for later comparisons } } // DefaultButtons() //------------------------------------------------------------------------------ DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 83 Freescale Semiconductor, Inc. Software Routines //////////////////////////////////////////////////////////////////////////////// // To get to this point some button activity has occured. If the button // // activity has been stable for DEBOUNCE_COUNTER*10ms then the button press // // is accepted and function decoding is performed. If a button is pressed // // and kept pressed further decoding will take place if the autoscroll // // feature has been enabled for that button. This feature is enabled by the // // setting of 'button_flags.bit.AUTO_REPEAT'. // // // // Arguments : none // // Returns : none // //////////////////////////////////////////////////////////////////////////////// void PressedButtons( void ) { /////////////////////////////////////////////// // No longer pressed, back to pull-up values // /////////////////////////////////////////////// if ( button_pattern == DEFAULT_BUTTONS ) { button_press_status = BUTTON_RELEASED; button_release_counter = 2; // initialise 20ms release debounce counter } else { //////////////////////////////////////////////////// // is the button pattern unchanged from last read // //////////////////////////////////////////////////// if ( button_pattern == pressed_pattern ) { // 10ms 'main()' synchronised 'button_debounce_counter' increments here if ( ++button_debounce_counter >= DEBOUNCE_COUNTER ) { if ( !button_flags.bit.FIRST_PASS ) // is this the first debounce... { // ...of this pattern button_flags.bit.FIRST_PASS = 1; // ...yes signal this event button_flags.bit.AUTO_REPEAT = 0; // reset autoscroll DecodeButtons(); // respond to press } else // auto repeat can now occur { // if required /////////////////////////////////////////////////////////////// // same button as for first debounce is still being pressed, // // after (50-DEBOUNCE_COUNTER)*10ms allow auto repeat. // /////////////////////////////////////////////////////////////// if ( button_debounce_counter >= 50 ) // (50-DEBOUNCE_COUNTER)*10ms { // before auto repeat mode button_debounce_counter = 10; // (50-3)*10ms is the effective // repeat speed == 470ms, // approx 2 times per second if (button_flags.bit.AUTO_REPEAT)// do you require auto scroll... { DecodeButtons(); // ...if so keep decoding } } Freescale Semiconductor, Inc... Central Heating Controller 84 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [button.c] } } } else { ///////////////////////////////////////////////////////////////// // pattern is different but something is pressed, start again. // ///////////////////////////////////////////////////////////////// button_press_status = NO_BUTTON_PRESS; pressed_pattern = DEFAULT_BUTTONS; button_debounce_counter = 0; button_flags.bit.FIRST_PASS = 0; button_flags.bit.AUTO_REPEAT = 0; } } // end of 'else' } // PressedButtons() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... /////////////////////////////////////////////////////////////////////////////// // Ok, we think all the buttons are now at their default, initiate a release // // // // Arguments : none // // Returns : none // /////////////////////////////////////////////////////////////////////////////// void ReleasedButtons( void ) { if ( --button_release_counter == 0 ) { if ( set_mode == MODE_VIEWTEMP) { set_mode = MODE_DEFAULT; Refresh = 1; ClearDisplay(); } button_press_status = NO_BUTTON_PRESS; } else { // checking for noise... if ( button_pattern != DEFAULT_BUTTONS ) { button_press_status = BUTTON_PRESSED; // continue as pressed... } } } // ReleasedButtons() //------------------------------------------------------------------------------ ////////////////////////////////////////////////////// // This function does the physical button decoding. // // // // Arguments: none // // returns : none // ////////////////////////////////////////////////////// DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 85 Freescale Semiconductor, Inc. Software Routines void DecodeButtons( void ) { unsigned char temp; Freescale Semiconductor, Inc... switch ( pressed_pattern ) { case BUTTON_1 : // Clock Set Button if ( set_mode == DEFAULT || set_mode == MODE_CLOCKSET ) { set_mode = MODE_CLOCKSET; if ( ++Cset_mode > DOW_SET ) { set_mode = MODE_DEFAULT; Cset_mode = DEFAULT_SET; Refresh = 1; // Refresh temp and smart chevron } else if ( Cset_mode == DOW_SET) { MINClr(); // Refresh Min } } SECR.reg = 0x00; // Resets the second register break; case BUTTON_2 : // Dec Button Decrement(); if ( Cset_mode == DOW_SET )button_flags.bit.AUTO_REPEAT = 0; else button_flags.bit.AUTO_REPEAT = 1; break; case BUTTON_3 : // Inc Button Increment(); if ( Cset_mode == DOW_SET ) button_flags.bit.AUTO_REPEAT = 0; else button_flags.bit.AUTO_REPEAT = 1; break; case BUTTON_4 : // Alarm Set if ( set_mode == DEFAULT || set_mode == MODE_ALARMSET ) { set_mode = MODE_ALARMSET; switch ( Aset_mode ) { case DEFAULT: AlarmPRNumber = PROGRAM_1; Aset_mode = PROGRAM_MODE; break; case PROGRAM_MODE: onoff = 0; Aset_mode = WEEK_MODE; DisplayNumber( AlarmPRNumber + 1, 6 ); break; case WEEK_MODE: // Setting on/off Central Heating Controller 86 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [button.c] Aset_mode DW Hour Minute = = = = HOUR_MODE; MON_FRI; program[AlarmPRNumber].hour_on; program[AlarmPRNumber].min_on; // Hour set to previous hour // Clears the 7th Digit // // Displays "On" // // LDAT11.byte &= 0xf0; LDAT10.byte = 0x00; LDAT9.byte = 0x35; LDAT8.byte = 0x32; LDAT7.byte = 0x22; DisplayNumber( AlarmPRNumber + 1, 8 ); break; Freescale Semiconductor, Inc... case WEEKEND_MODE: DW = SAT_SUN; Aset_mode = HOUR_MODE; Hour = program[AlarmPRNumber].hour_on; Minute = program[AlarmPRNumber].min_on; // Hour set to previous hour LDAT11.byte &= 0xf0; LDAT10.byte = 0x00; LDAT9.byte = 0x35; LDAT8.byte = 0x32; LDAT7.byte = 0x22; DisplayNumber( AlarmPRNumber + 1, 8 ); break; case DAILY_MODE: case DAILY_MODE_REVERSE: DW = dow_set; Aset_mode = HOUR_MODE; Hour = program[AlarmPRNumber].hour_on; Minute = program[AlarmPRNumber].min_on; // Hour set to previous hour LDAT11.byte &= 0xf0; LDAT10.byte = 0x00; LDAT9.byte = 0x35; LDAT8.byte = 0x32; LDAT7.byte = 0x22; DisplayNumber( AlarmPRNumber + 1, 8 ); break; case HOUR_MODE: if ( onoff ) // If This is the Second Time This { // Function has Been Ran program[AlarmPRNumber].hour_off = Hour; // Stores Off Hour Aset_mode = MINUTE_MODE; } else // If This is the First Time This // Clears the 7th Digit // // Displays "On" // // // Clears the 7th Digit // // Displays "On" // // DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 87 Freescale Semiconductor, Inc. Software Routines { // Function has Been Ran program[AlarmPRNumber].hour_on = Hour; // Stores On hour Aset_mode = MINUTE_MODE; Minute = program[AlarmPRNumber].min_on; // Default Minute set to previous switch ( DW ) // Stores DOW as different values { // Mon-Fri = 0x08, Sat-Sun = 0x09 case MON : temp = 0x01;break; // Sun = 0x00, Mon = 0x01, etc. case TUE : temp = 0x02;break; case WED : temp = 0x03;break; case THU : temp = 0x04;break; case FRI : temp = 0x05; break; case SAT : temp = 0x06;break; case SUN : temp = 0x00;break; case SAT_SUN: temp = 0x09; break; case MON_FRI: temp = 0x08;break; default : temp = DOWR.byte; } program[AlarmPRNumber].dow = temp; } break; case MINUTE_MODE: if ( onoff ) // If this is the second time ... { // This function has been ran program[AlarmPRNumber].min_off = Minute; // Stores Off Minute Aset_mode = TEMPERATURE_MODE; user_temperature = 20; // Default temperature is set ClearDisplay(); LDAT11.byte = 0x03; // "t" is displayed LDAT10.byte = 0x60; // LDAT1.byte = 0x60; // "c" is displayed LDAT2.byte = 0x02; // DisplayNumber( AlarmPRNumber + 1, 8 ); ChevronRefresh(); } else // If this is the first time ... { // This function has been ran program[AlarmPRNumber].min_on = Minute; // Stores on minute onoff = 1; // Sets Variable to Indicate on Times Have Been set Aset_mode = HOUR_MODE; LDAT11.byte &= 0xf0; // LDAT11.byte += 0x03; // Displays "Off" LDAT10.byte = 0x53; // LDAT9.byte = 0x33; // LDAT8.byte = 0x03; // LDAT7.byte = 0x30; // ChevronRefresh(); } break; Freescale Semiconductor, Inc... Central Heating Controller 88 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [button.c] case TEMPERATURE_MODE: program[AlarmPRNumber].temperature = user_temperature; // Stores Temperature Aset_mode = PROGRAM_CHECK_MODE; break; } } break; case BUTTON_5 : // Temperature/Clear Button if ( set_mode == MODE_ALARMSET ) { program[AlarmPRNumber].hour_off = program[AlarmPRNumber].hour_on; program[AlarmPRNumber].min_off = program[AlarmPRNumber].min_on; set_mode = MODE_DEFAULT; Aset_mode = DEFAULT; AlarmPRNumber = NO_PROGRAM; Refresh = 1; // Refresh temperature } else if ( set_mode == DEFAULT ) { set_mode = MODE_VIEWTEMP; } break; case BUTTON_5_DEC : // Assigned as decrement for when button_5 being held down Decrement(); button_flags.bit.AUTO_REPEAT = 1; break; case BUTTON_5_INC : // Assigned as increment for when button_5 being held down Increment(); button_flags.bit.AUTO_REPEAT = 1; break; case BUTTON_6 : // Override Button if ( set_mode == DEFAULT ) { if ( PR2 == 1 || Override == 1 ) // If a program or override is ... { // currently running Override = 0; // Reset override Active = 0; // Turn heating/cooling off PR2 = 0; // Reset program variable PTB.bit.bit0 = 0x00; // PTB.bit.bit1 = 0x00; // Alarm(); // Refresh Alarm Register } else { if ( HRR.byte >= 23 ) OverrideH = 0; // Maximum cap for hours else OverrideH = HRR.byte + 1; // Increment to allow override to be on for one hour Freescale Semiconductor, Inc... DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 89 Freescale Semiconductor, Inc. Software Routines OverrideM = MINR.byte; Override = 1; Active = 1; } } break; case BUTTON_7 : if ( set_mode == DEFAULT ) { smart ^= 0x01; Refresh = 1; } break; // Smart Button // Store current minutes // Activate override // Activate heating/cooling // Refresh temp and smart chevron Freescale Semiconductor, Inc... case BUTTON_8 : // Mode Button if ( set_mode == DEFAULT ) { if ( mode++ == OFF ) mode = AUTOMATIC; } break; } } // DecodeButtons() //------------------------------------------------------------------------------ //////////////////////////////////////////////////////////////////////////////// // The switch ( set_mode ) { case MODE_CLOCKSET: switch ( Cset_mode ) { case HOUR_SET: if ( HRR.byte++ >= 23) break; case MINUTE_SET: if ( MINR.byte++ >= 59) break; HRR.byte = 0; MINR.byte = 0; case DOW_SET: if ( DOWR.byte++ >= 0x06 ) DOWR.byte = 0; break; } break; Central Heating Controller 90 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [button.c] case MODE_ALARMSET: switch ( Aset_mode ) { case PROGRAM_MODE: if ( AlarmPRNumber < PROGRAM_4 ) AlarmPRNumber++; // Resets to Minimum if Maximum Reached break; case WEEK_MODE: Aset_mode = WEEKEND_MODE; LDAT12.bit.bit6 = 0; LDAT11.bit.bit2 = 0; LDAT9.bit.bit6 = 0; LDAT8.bit.bit2 = 0; LDAT6.bit.bit6 = 0; break; case WEEKEND_MODE: Aset_mode = DAILY_MODE; dow_set = MON; LDAT5.bit.bit2 = 0; LDAT3.bit.bit6 = 0; break; Freescale Semiconductor, Inc... // Chevrons are Removed, Mon - Fri // // // // // Set starting chevron to Mon // Clears Sat - Sun to allow flash // case DAILY_MODE: case DAILY_MODE_REVERSE: if ( dow_set == MON || dow_set == WED || dow_set == FRI || dow_set == SUN ) { // Determins Even Digit ptr[dow_set].bit.bit6 = 0; // Adds a Chevron } else // Determins Odd Digit { ptr[dow_set].bit.bit2 = 0; // Adds a Chevron } dow_set -= 1; // DOW is Incrmented if ( dow_set == 9 || dow_set == 6 || dow_set == 3 ) { dow_set -= 1; // Pointer is Incremented further.. } // due to 1/3 bytes not being used if ( dow_set == 1 ) { Aset_mode = WEEK_MODE; } break; case HOUR_MODE: if ( Hour++ == 23 ) Hour = 0; break; // Resets to Minimum case MINUTE_MODE: if ( Minute++ == 59 )Minute = 0;// Resets to Minimum break; case TEMPERATURE_MODE: DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 91 Freescale Semiconductor, Inc. Software Routines if ( user_temperature++ == 40 )user_temperature = 20; break; // Resets to Default case PROGRAM_CHECK_MODE: break; } break; case MODE_VIEWTEMP: if (++user_temperature > 40) break; } user_temperature = 20; // Maximum cap for temp Freescale Semiconductor, Inc... } // Increment() //------------------------------------------------------------------------------ //////////////////////////////////////////////////////////////////////////////// // The switch ( set_mode ) { case MODE_CLOCKSET: switch ( Cset_mode ) { case HOUR_SET: if ( HRR.byte-- == 0x00 ) HRR.byte = 23; break; case MINUTE_SET: if ( MINR.byte-- == 0x00 ) MINR.byte = 59; break; case DOW_SET: if ( DOWR.byte-- == 0x00 ) DOWR.byte = 0x06; break; } break; case MODE_ALARMSET: switch ( Aset_mode ) { case PROGRAM_MODE: if ( AlarmPRNumber ) break; case WEEK_MODE: AlarmPRNumber--;// Minimum cap Central Heating Controller 92 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [button.c] Aset_mode = DAILY_MODE_REVERSE; dow_set = SUN; LDAT12.bit.bit6 = 0; LDAT11.bit.bit2 = 0; LDAT9.bit.bit6 = 0; LDAT8.bit.bit2 = 0; LDAT6.bit.bit6 = 0; break; case WEEKEND_MODE: Aset_mode = WEEK_MODE; LDAT5.bit.bit2 = 0; LDAT3.bit.bit6 = 0; break; // Set starting chevron to Sun // Chevrons are Removed, Mon - Fri // // // // // Clears Sat - Sun // Chevrons to Flash Freescale Semiconductor, Inc... case DAILY_MODE: case DAILY_MODE_REVERSE: if ( dow_set == MON || dow_set == WED || dow_set == FRI || dow_set == SUN ) { // Determins Even Digit ptr[dow_set].bit.bit6 = 0; // Adds a Chevron } else // Determins Odd Digit { ptr[dow_set].bit.bit2 = 0; // Adds a Chevron } dow_set++; // DOW is Decremented if ( dow_set == 9 || dow_set == 6 || dow_set == 3 ) { dow_set++; // Pointer is Decremented further } // due to 1/3 bytes not being used if (dow_set == 12) { Aset_mode = WEEKEND_MODE; // Next function to be called is weekend } break; case HOUR_MODE: if ( Hour-- == 0 ) break; Hour = 23; // Resets to Maximum case MINUTE_MODE: if ( Minute-- == 0 ) Minute = 59; break; case TEMPERATURE_MODE: if (user_temperature-- == 0) break; case PROGRAM_CHECK_MODE: break; } break; case MODE_VIEWTEMP: if ( !user_temperature-- ) // Resets to Maximum user_temperature = 20; // Resets to Default user_temperature = 20; DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 93 Freescale Semiconductor, Inc. Software Routines break; } // Resets to Default } // Decrement() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... Central Heating Controller 94 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [button.h] A.8 [button.h] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : button.h // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // Header file for 'button.c' // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 19/06/00 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __BUTTON_H_ #define __BUTTON_H_ //////////////////// // button decodes // //////////////////// #define DEFAULT_BUTTONS #define BUTTON_1 #define BUTTON_2 #define BUTTON_3 #define BUTTON_4 #define BUTTON_5 #define BUTTON_6 #define BUTTON_7 #define BUTTON_8 #define BUTTON_5_DEC #define BUTTON_5_INC #define DEBOUNCE_COUNTER ////////////////////////// Freescale Semiconductor, Inc... 0xff// 11111111 0xfe// 11111110 0xfd// 11111101 0xfb// 11111011 0xf7// 11110111 0xef// 11101111 0xdf// 11011111 0xbf// 10111111 0x7f// 01111111 0xed // 11101101 0xeb // 11101011 3 DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 95 Freescale Semiconductor, Inc. Software Routines // button_flags defines // ////////////////////////// #define FIRST_PASS #define AUTO_REPEAT bit0 bit1 enum { NO_CHANGE = 0x01, DECREMENT_VALUE, INCREMENT_VALUE }; /////////////////// // button states // /////////////////// enum { NO_BUTTON_PRESS = 0x01, BUTTON_PRESSED, BUTTON_RELEASED }; enum { MODE_DEFAULT = 0x00, MODE_CLOCKSET, MODE_ALARMSET, MODE_VIEWTEMP }; //////////////// // prototypes // //////////////// void ReleasedButtons( void ); void PressedButtons( void ); void DefaultButtons( void ); void DecodeButtons( void ); void ReadButtons( void ); void Increment( void ); void Decrement( void ); #endif Freescale Semiconductor, Inc... Central Heating Controller 96 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [Clockset.c] A.9 [Clockset.c] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : Clockset.c // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // Clock Setting // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 13/06/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __EXTERN_H_ #include "extern.h" #endif #include #include "Display.h" "Clockset.h" Freescale Semiconductor, Inc... void Cset( void ) { switch ( Cset_mode ) { case HOUR_SET: if ( _0P25sec ) { SFLASH = 1; HRClr(); MINClr(); ChevronRefresh(); } else // For every other 1/4 of a second // Displays divider decimal point // Refreshes hour digits // Refreshes minute digits DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 97 Freescale Semiconductor, Inc. Software Routines { ClearDisplay(); LDAT10.bit.bit2 = 1; MINClr(); ChevronRefresh(); } break; case MINUTE_SET: if ( _0P25sec ) { SFLASH = 1; MINClr(); HRClr(); ChevronRefresh(); } else { ClearDisplay(); SFLASH = 1; HRClr(); ChevronRefresh(); } break; case DOW_SET: LDAT12.bit.bit6 LDAT11.bit.bit2 LDAT9.bit.bit6 LDAT8.bit.bit2 LDAT6.bit.bit6 LDAT5.bit.bit2 LDAT3.bit.bit6 // Allows hour digits to flash // Decimal point remains constant // Minute digits refreshed // For every other 1/4 of a second // Displays divider decimal point // Refreshes hour digits // Refreshes minute digits Freescale Semiconductor, Inc... // Allows hour digits to flash // Decimal point remains constant // Hour digits refreshed = = = = = = = 0; 0; 0; 0; 0; 0; 0; // // Clear Chevrons to prevent ghost // // // // // // For every other 1/4 of a second if ( _0P25sec ) { switch (DOWR.byte) { case 0x00: LDAT3.bit.bit6 break; case 0x01: LDAT12.bit.bit6 = 1; break; = 1; // Set Sunday Chevron // Set Monday Chevron case 0x02: LDAT11.bit.bit2 = 1; break; case 0x03: LDAT9.bit.bit6 = 1; break; case 0x04: // Set Tuesday Chevron // Set Wednesday Chevron Central Heating Controller 98 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [Clockset.c] LDAT8.bit.bit2 break; case 0x05: LDAT6.bit.bit6 break; case 0x06: LDAT5.bit.bit2 break; } = 1; // Set Thursday Chevron = 1; // Set Friday Chevron = 1; // Set Saturday Chevron Freescale Semiconductor, Inc... } break; } } // Cset() //------------------------------------------------------------------------------ void HRClr (void) // Hour Clock Refresh { if ( HRR.byte >=10 ) { DisplayNumber( (unsigned char)(HRR.byte/10), 8 ); } else { LDAT12.byte = 0x00; LDAT11.byte &= 0x0f; } DP = SFLASH; DisplayNumber( (unsigned char)(HRR.byte%10), 7 ); DP = 0; } // HRClr() //------------------------------------------------------------------------------ void MINClr (void)// Min Clock refresh { DP = 0; DisplayNumber( (unsigned char)(MINR.byte%10), 5 ); DisplayNumber( (unsigned char)(MINR.byte/10), 6 ); } // MINClr() //------------------------------------------------------------------------------ DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 99 Freescale Semiconductor, Inc. Software Routines A.10 [Clockset.h] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : Clockset.h // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // Header file for 'Clockset.c' // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 06/06/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __Clockset_H_ #define __Clockset_H_ Freescale Semiconductor, Inc... enum { DEFAULT_SET = 0x00, HOUR_SET, MINUTE_SET, DOW_SET }; void MINClr (void); void HRClr (void); void Cset (void); #endif Central Heating Controller 100 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [Data.c] A.11 [Data.c] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : Data.c // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // global data, // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 15/05/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __DECLARED_H_ #include "declared.h" #endif Freescale Semiconductor, Inc... #pragma DATA_SEG __SHORT_SEG _DATA_ZEROPAGE ///////////////////////////////////////////////////////// // PAGE0 Global variables, range available 0x60 - 0xff // ///////////////////////////////////////////////////////// uBITS button_flags; unsigned char N2; unsigned char DW; unsigned char DP; unsigned char PR2; unsigned char sign; unsigned char SMin; unsigned char Hour; unsigned char mode; unsigned char smart; unsigned char SHour; DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 101 Freescale Semiconductor, Inc. Software Routines unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned volatile unsigned unsigned unsigned unsigned struct char _10ms; char onoff; char Minute; char SFLASH; char Active; char dow_set; char Refresh; char PRNumber; char low_byte; char set_mode; char _0P25sec; char Override; char OverrideH; char OverrideM; char Cset_mode; char Aset_mode; char _5sectick; char one_second; char two_second; char AlarmPRNumber; char button_pattern; char pressed_pattern; char user_temperature; char button_press_status; char external_temperature; char button_release_counter; char button_debounce_counter; char external_temperature_decimal; uBITS flags1; short intsmart_time; short int stop_counter; short intBatteryCheck; short int internal_temperature; sPROG_PARAMS program[4]; Freescale Semiconductor, Inc... ///////////////////////////////////////////////////////////// // Global non PAGE0 variables occupying 0x100 to stack top // ///////////////////////////////////////////////////////////// #pragma DATA_SEG _FAR_RAM ///////////////////////// // 'const' data ie rom // ///////////////////////// #pragma CONST_SEG ATEECC_CONST_DATA Central Heating Controller 102 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [declared.h] A.12 [declared.h] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : declared.h // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // declared data types // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 15/05/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __DECLARED_H_ #define __DECLARED_H_ Freescale Semiconductor, Inc... ////////////////// // type defines // ////////////////// typedef union uPORT uBITS; typedef unsigned short intUSHORT; typedef unsigned char UCHAR; #pragma MESSAGE DISABLE C1106 // WARNING C1106: Non-standard bitfield type ///////////////////// // bit/byte access // ///////////////////// struct sPORT { UCHAR bit0 : 1; DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 103 Freescale Semiconductor, Inc. Software Routines UCHAR bit1 : UCHAR bit2 : UCHAR bit3 : UCHAR bit4 : UCHAR bit5 : UCHAR bit6 : UCHAR bit7 : }; union uPORT { UCHAR UCHAR struct sPORT }; 1; 1; 1; 1; 1; 1; 1; byte; reg; bit; Freescale Semiconductor, Inc... ////////////////////// // 16 bit data type // ////////////////////// struct sUNSIGNED_INTEGER { UCHAR hibyte; UCHAR lobyte; }; union uUNSIGNED_INTEGER { USHORT struct sUNSIGNED_INTEGER _8bit; }; //////////////////////////// // 16 bit 'bit' data type // //////////////////////////// struct sUNSIGNED_INTEGER_BIT { union uPORT hibyte; union uPORT lobyte; }; union uUNSIGNED_INTEGER_BIT { USHORT struct sUNSIGNED_INTEGER_BIT _8bit; }; struct sPROG_PARAMS { UCHAR hour_on; UCHAR min_on; UCHAR dow; UCHAR hour_off; UCHAR min_off; UCHAR temperature; }; #endif // 0x12XX // 0xXX34 _16bit; // 0x12XX // 0xXX34 _16bit; Central Heating Controller 104 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [define.h] A.13 [define.h] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : define.h // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // global defines // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 15/05/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __DEFINE_H_ #define __DEFINE_H_ Freescale Semiconductor, Inc... ///////////////// // I/O defines // ///////////////// #define TIMING_PIN #define TIMING_PIN_DDR PTD.bit.bit5 DDRD.bit.bit5 // for debugging // for debugging /////////////////////////////// // general numerical defines // /////////////////////////////// #define _1MS 165 #define _50US #define _100US #define LOWBATT 7 16 576 // // // // // // // // from delay.c, 15+(12*165)== 1995 bus cycles == 2000*(1/2.0E6) = 0.9975ms from delay.c, 15+(12*7)== 99 bus cycles == 99*(1/2.0E6) = 49.5us from delay.c, 15+(12*16)==207 bus cycles == 207*(1/2.0E6) = 103.5us 2.7V is the low battery condition, so... (2.7/4.8)*1024 == 576.0 counts DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 105 Freescale Semiconductor, Inc. Software Routines #define EXTERNAL_CALIBRATION enum enum -1 // Tolerance of DS1721 is +- 1 degree Freescale Semiconductor, Inc... { PROGRAM_1 = 0x00, PROGRAM_2, PROGRAM_3, PROGRAM_4, NO_PROGRAM }; // 0 - 3 are valid programs { DEFAULT = 0x00 , PROGRAM_MODE , WEEK_MODE , WEEKEND_MODE , DAILY_MODE , DAILY_MODE_REVERSE, HOUR_MODE , MINUTE_MODE , TEMPERATURE_MODE , PROGRAM_CHECK_MODE }; { AUTOMATIC = 0x00, HEAT, COOL, OFF }; enum //////////////////// // flags1 defines // //////////////////// #define _10MS #define _1S #define TO_BE_ASSIGNED_2 #define TO_BE_ASSIGNED_3 #define TO_BE_ASSIGNED_4 #define TO_BE_ASSIGNED_5 #define TO_BE_ASSIGNED_6 #define TO_BE_ASSIGNED_7 /////////////////// // Assembler 'C' // /////////////////// #define RSP() #define SEI() #define CLI() #define STOP() #define WAIT() #define NOP() #define ServiceWatchDog() #endif bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7 // // // // // // this this this this this this is is is is is is free free free free free free for for for for for for use use use use use use asm rsp asm sei asm cli asm stop asm wait asm nop COPCTL.reg = 0 Central Heating Controller 106 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [Delay.c] A.14 [Delay.c] /////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : Delay.c // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // delay routines // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 15/05/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #include "delay.h" Freescale Semiconductor, Inc... //////////////////////////////////////////////////////////////////////////////// // The total delay consists of loading the accumulator with the delay // // argument, branching to the delay routine and lastly returning from the // // routine, this is shown below: // // // // lda #D ; delay arg sent to function [2] cycles // // jsr Delay ; branches to this function [5] cycles // // psha : [2] cycles // // DELAY1: // // nop : [1] cycle // // nop : [1] cycle // // nop : [1] cycle // // nop : [1] cycle // // nop : [1] cycle // // nop : [1] cycle // // tsx : [2] cycles // // dbnz X, *-5 : [4] cycles // // pulh : [2] cycles // DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 107 Freescale Semiconductor, Inc. Software Routines // rts : [4] cycles // // // // This gives a total delay of 13+12*D cycles, where D is the arg sent. // // With a 2MHZ bus speed, say we require a 1ms delay, then we have: // // 1E-3/(1/2E6) = 2000 bus cycles => 2000 = 15 + 12*D, => D = 165.41 // // approx = 165 // // 'Delay( 165 )' to get 1ms delay. // // // // Arguments: 'D' delay value as calculated from 'cyles = 15 + 12D' // // Returns : none // //////////////////////////////////////////////////////////////////////////////// void Delay( unsigned char delay_value ) { #asm DELAY1: nop nop nop nop nop nop tsx dbnz delay_value, DELAY1 #endasm } // Delay() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... Central Heating Controller 108 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [Delay.h] A.15 [Delay.h] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : Delay.h // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // Header file for Delay.c // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 15/05/00 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __DELAY_H_ #define __DELAY_H_ ///////////////////////// // function prototypes // ///////////////////////// void Delay( unsigned char ); #endif Freescale Semiconductor, Inc... DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 109 Freescale Semiconductor, Inc. Software Routines A.16 [Display.c] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : Display.c // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // Display Functions // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 06/06/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __EXTERN_H_ #include "extern.h" #endif #include #include #include "button.h" "delay.h" "Display.h" Freescale Semiconductor, Inc... void InitialDisplay( void ) { unsigned short int temp; for ( temp = 0; temp < 1000; temp++ ) { Delay( _1MS ); ServiceWatchDog(); } ClearDisplay(); Central Heating Controller 110 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [Display.c] Refresh = 1; } // Display //------------------------------------------------------------------------------ void ClearDisplay( void ) { volatile union uPORT* ptr = &LDAT1; for ( ; ptr <= &LDAT12; ptr++ ) ptr->reg = 0x00; // All Segments Off } // ClearDisplay //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... void DisplayNumber( unsigned char N, unsigned char digit ) { volatile union uPORT*ptr = &LDAT1; if ( digit%2 ) { switch ( digit ) { case 1: digit--; break; case 5:digit++; break; case 7: digit += 2; break; } switch ( N ) { case 0x00: ptr[digit].byte = 0x53; ptr[(digit + 1)].byte &= 0xf0; ptr[(digit + 1)].byte += 0x03; break; case 0x01: ptr[digit].byte = 0x03; ptr[(digit + 1)].byte &= 0xf0; break; case 0x02: ptr[digit].byte = 0x71; ptr[(digit + 1)].byte &= 0xf0; ptr[(digit + 1)].byte += 0x02; break; case 0x03: ptr[digit].byte = 0x73; ptr[(digit + 1)].byte &= 0xf0; break; // odd digit check // Compensates for 1.5 bytes // being used per digit // // '0' // '1' // '2' // '3' DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 111 Freescale Semiconductor, Inc. Software Routines case 0x04: ptr[digit].byte = 0x23; ptr[(digit + 1)].byte &= 0xf0; ptr[(digit + 1)].byte += 0x01; break; case 0x05: ptr[digit].byte = 0x72; ptr[(digit + 1)].byte &= 0xf0; ptr[(digit + 1)].byte += 0x01; break; case 0x06: ptr[digit].byte = 0x72; ptr[(digit + 1)].byte &= 0xf0; ptr[(digit + 1)].byte += 0x03; break; case 0x07: ptr[digit].byte = 0x13; ptr[(digit + 1)].byte &= 0xf0; break; case 0x08: ptr[digit].byte = 0x73; ptr[(digit + 1)].byte &= 0xf0; ptr[(digit + 1)].byte += 0x03; break; case 0x09: ptr[digit].byte = 0x33; ptr[(digit + 1)].byte &= 0xf0; ptr[(digit + 1)].byte += 0x01; break; } if ( DP ) ptr[digit].bit.bit2 = 1; } else { switch ( digit ) { case 2: digit--; break; case 6:digit++; break; case 8: digit += 2; break; } switch (N) { case 0x00: ptr[(digit + 1)].byte = 0x35; ptr[digit].byte &= 0x0f; ptr[digit].byte += 0x30; break; case 0x01: ptr[(digit + 1)].byte // '4' // '5' // '6' Freescale Semiconductor, Inc... // '7' // '8' // '9' // Set Decimal Point // even digit // Compensates for 1.5 bytes... // being used per digit // // '0' // '1' = 0x00; Central Heating Controller 112 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [Display.c] ptr[digit].byte ptr[digit].byte break; &= 0x0f; += 0x30; case 0x02: ptr[(digit + 1)].byte = 0x27; ptr[digit].byte &= 0x0f; ptr[digit].byte += 0x10; break; case 0x03: ptr[(digit + 1)].byte = 0x07; ptr[digit].byte &= 0x0f; ptr[digit].byte += 0x30; break; case 0x04: ptr[(digit + 1)].byte = 0x12; ptr[digit].byte &= 0x0f; ptr[digit].byte += 0x30; break; case 0x05: ptr[(digit + 1)].byte = 0x17; ptr[digit].byte &= 0x0f; ptr[digit].byte += 0x20; break; case 0x06: ptr[(digit + 1)].byte = 0x37; ptr[digit].byte &= 0x0f; ptr[digit].byte += 0x20; break; case 0x07: ptr[(digit + 1)].byte = 0x01; ptr[digit].byte &= 0x0f; ptr[digit].byte += 0x30; break; case 0x08: ptr[(digit + 1)].byte = 0x37; ptr[digit].byte &= 0x0f; ptr[digit].byte += 0x30; break; case 0x09: ptr[(digit + 1)].byte = 0x13; ptr[digit].byte &= 0x0f; ptr[digit].byte += 0x30; break; } if ( DP ) ptr[digit].bit.bit6 = 1; } } // DisplayNumber() // '2' // '3' Freescale Semiconductor, Inc... // '4' // '5' // '6' // '7' // '8' // '9' // Set Decimal Point DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 113 Freescale Semiconductor, Inc. Software Routines //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... void ChevronRefresh( void ) { if ( set_mode == MODE_ALARMSET ) { switch ( DW ) { case 0: LDAT6.bit.bit6 = 1; LDAT8.bit.bit2 = 1; LDAT9.bit.bit6 = 1; LDAT11.bit.bit2 = 1; LDAT12.bit.bit6 = 1; break; case 1: LDAT3.bit.bit6 LDAT5.bit.bit2 break; case 2: LDAT3.bit.bit6 break; case 4: LDAT5.bit.bit2 break; case 5: LDAT6.bit.bit6 break; // If DOW = Mon - Fri // // Add Chevrons // // // = 1; = 1; // If DOW = Sat - Sun // Add Chevron // = 1; // If DOW = Sun // Add Chevron = 1; // If DOW = Sat // Add Chevron = 1; // If DOW = Fri // Add Chevron case 7: LDAT8.bit.bit2 break; case 8: LDAT9.bit.bit6 break; = 1; // If DOW = Thu // Add Chevron = 1; // If DOW = Wed // Add Chevron case 10: LDAT11.bit.bit2 = 1; break; case 11: LDAT12.bit.bit6 = 1; break; } } else { switch ( DOWR.byte ) { // If DOW = Tue // Add Chevron // If DOW = Mon // Add Chevron Central Heating Controller 114 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [Display.c] case 0: LDAT3.bit.bit6 break; = 1; // If DOW = Sun // Add Chevron case 1: LDAT12.bit.bit6 = 1; break; case 2: LDAT11.bit.bit2 = 1; break; case 3: LDAT9.bit.bit6 break; case 4: LDAT8.bit.bit2 break; // If DOW = Mon // Add Chevron // If DOW = Tue // Add Chevron = 1; // If DOW = Wed // Add Chevron Freescale Semiconductor, Inc... = 1; // If DOW = Thu // Add Chevron case 5: LDAT6.bit.bit6 break; case 6: LDAT5.bit.bit2 break; = 1; // If DOW = Fri // Add Chevron = 1; // If DOW = Sat // Add Chevron } } } // ChevronRefresh() //------------------------------------------------------------------------------ DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 115 Freescale Semiconductor, Inc. Software Routines A.17 [Display.h] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : Display.h // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // Header file for 'Display.c' // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 06/06/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __Display_H_ #define __Display_H_ Freescale Semiconductor, Inc... void void void void InitialDisplay( void ); ChevronRefresh( void ); DisplayNumber( unsigned char, unsigned char ); ClearDisplay( void ); #endif Central Heating Controller 116 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [extern.h] A.18 [extern.h] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : extern.h // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // 'extern' declarations for global variables declared in 'data.c' // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 15/05/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __EXTERN_H_ #define __EXTERN_H_ #ifndef #include #endif #ifndef #include #endif #ifndef #include #endif __DECLARED_H_ "declared.h" Freescale Semiconductor, Inc... __LJ12_H_ "lj12.h" __DEFINE_H_ "define.h" #pragma DATA_SEG __SHORT_SEG _DATA_ZEROPAGE //////////////////////////// // PAGE0 Global variables // //////////////////////////// DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 117 Freescale Semiconductor, Inc. Software Routines extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern uBITS unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned volatile unsigned unsigned unsigned unsigned struct button_flags; N2; DW; DP; PR2; sign; SMin; Hour; mode; smart; SHour; _10ms; onoff; Minute; SFLASH; Active; dow_set; Refresh; PRNumber; low_byte; set_mode; _0P25sec; Override; OverrideH; OverrideM; Cset_mode; Aset_mode; _5sectick; one_second; two_second; AlarmPRNumber; button_pattern; pressed_pattern; user_temperature; button_press_status; external_temperature; button_release_counter; button_debounce_counter; external_temperature_decimal; flags1; smart_time; stop_counter; BatteryCheck; internal_temperature; program[4]; char char char char char char char char char char char char char char char char char char char char char char char char char char char char char char char char char char char char char char uBITS short int short int short int short int sPROG_PARAMS Freescale Semiconductor, Inc... //////////////////////////////// // Global non PAGE0 variables // //////////////////////////////// #pragma DATA_SEG _FAR_RAM ///////////////////////// // 'const' data ie rom // ///////////////////////// Central Heating Controller 118 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [extern.h] #pragma CONST_SEG ATEECC_CONST_DATA #endif Freescale Semiconductor, Inc... DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 119 Freescale Semiconductor, Inc. Software Routines A.19 [i2c.c] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : i2c.c // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // i2c routines for accessing external temperature // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 17/06/00 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __EXTERN_H_ #include "extern.h" #endif #include "i2c.h" Freescale Semiconductor, Inc... unsigned char WaitForI2CAcknowledge( void ) { unsigned char temp = 0; SET_DATA_TO_OUTPUT; //////////////////////////////////////////////////////////// // set SDA hi because during the 9th clock the SLAVE will // // pull the SDA line lo // //////////////////////////////////////////////////////////// SET_SDA; ///////////////////////////////////////////// Central Heating Controller 120 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [i2c.c] // data line now input so we can see go lo // ///////////////////////////////////////////// SET_DATA_TO_INPUT; SetUpAndHoldTimingDelay(); ///////////////////////////////////////////// // SLAVE should pull line lo anytime // ///////////////////////////////////////////// SET_SCL; SetUpAndHoldTimingDelay(); while ( READ_SDA ) { if ( ++temp >= 250 ) { SET_DATA_TO_OUTPUT; SetUpAndHoldTimingDelay(); RESET_SCL; return 0; } } Freescale Semiconductor, Inc... //////////////////////////// // basic error check here // //////////////////////////// // back to output // 9th clock bit complete SET_DATA_TO_OUTPUT; // back to output SetUpAndHoldTimingDelay(); RESET_SCL; // 9th clock bit complete return 1; } // WaitForI2CAcknowledge() //------------------------------------------------------------------------------ void SendI2CAcknowledge( void ) { ////////////////////////////////////////////// // the slave RTC has left the SDA line high // // for us to send an ACKNOWLEDGE // ////////////////////////////////////////////// ////////////////////////////////////////////// // ensure output transistor is '1' before // // making an output // // take control of the SDA line // // an ACKNOWLEGE occurs // // // // when the SDA is stable lo // // // // when the clock // / // // goes hi->lo // / // // relinquish control back to the slave RTC // ////////////////////////////////////////////// SET_SDA; SET_DATA_TO_OUTPUT; RESET_SCL; SetUpAndHoldTimingDelay(); RESET_SDA; SetUpAndHoldTimingDelay(); SET_SCL; SetUpAndHoldTimingDelay();/ RESET_SCL; SetUpAndHoldTimingDelay();/ SET_DATA_TO_INPUT; } // SendI2CAcknowledge() //------------------------------------------------------------------------------ DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 121 Freescale Semiconductor, Inc. Software Routines unsigned char InClock( void ) { unsigned char temp; SET_SCL; SET_DATA_TO_INPUT; SetUpAndHoldTimingDelay(); if (READ_SDA) temp = 1; else temp = 0; RESET_SCL; SetUpAndHoldTimingDelay(); // reset clock lo to complete read Freescale Semiconductor, Inc... return temp; } // InClock() //------------------------------------------------------------------------------ void OutClock( void ) { SET_SCL; SetUpAndHoldTimingDelay(); RESET_SCL; SetUpAndHoldTimingDelay(); } // OutClock() //------------------------------------------------------------------------------ void StartBit( void ) { ////////////////////////////////// // bus inactive conditions here // ////////////////////////////////// SET_SDA; SET_SCL; SET_CLOCK_TO_OUTPUT; SET_DATA_TO_OUTPUT; SetUpAndHoldTimingDelay(); ///////////////// // apply START // ///////////////// SET_SDA; SetUpAndHoldTimingDelay(); SET_SCL; SetUpAndHoldTimingDelay(); RESET_SDA; SetUpAndHoldTimingDelay(); RESET_SCL; SetUpAndHoldTimingDelay(); } // StartBit() //------------------------------------------------------------------------------ Central Heating Controller 122 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [i2c.c] void StopBit( void ) { RESET_SDA; SetUpAndHoldTimingDelay(); SET_SCL; SetUpAndHoldTimingDelay(); SET_SDA; SetUpAndHoldTimingDelay(); } // StopBit() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... void SendI2CByte( unsigned char value ) { unsigned char loop; SET_DATA_TO_OUTPUT; /////////////////////////////////// // clock is reset from start bit // /////////////////////////////////// for ( loop = 0; loop < 8; loop++ ) { value <<= 1; if ( CarryFlagCheck() ) { SET_SDA; } else { RESET_SDA; } ////////////////////////////////////////// OutClock(); // data is ready now generate the clock // } ////////////////////////////////////////// } // SendI2CByte() //------------------------------------------------------------------------------ // load carry flag with bit7 unsigned char GetI2CByte( void ) { unsigned char loop; unsigned char receiving_value; SET_DATA_TO_INPUT; receiving_value = 0; for ( loop = 0; loop < 8; loop++ ) { DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 123 Freescale Semiconductor, Inc. Software Routines receiving_value <<= 1; if ( InClock() ) { receiving_value |= 1; } } // shifting data left // get next bit sample... // returns either 0 or 1 // setting bit0 if hi return receiving_value; } // GetI2CByte() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... //////////////////////////////////////////////////////////////////////////////// // We require function call-content-return to take 5us (worst case timing). // // 5us/(1/2.0E6) == 10 bus cycles // // // // The call (jsr) is [5] cycles, the return (rts) is [4] cycles leaving the // // function body to occupy 10-(5+4) == 1 cycle // //////////////////////////////////////////////////////////////////////////////// void SetUpAndHoldTimingDelay( void ) { NOP(); } // SetUpAndHoldTimingDelay() //------------------------------------------------------------------------------ void ExternalTemperatureRead( void ) { union uPORT lobyte; char unsigned short int dec; hibyte; SET_DATA_TO_OUTPUT; StartBit(); SendI2CByte(BASE_ADDRESS_0); if ( WaitForI2CAcknowledge() ) { SendI2CByte(START); if ( WaitForI2CAcknowledge() ) { StartBit(); SendI2CByte(BASE_ADDRESS_0); if ( WaitForI2CAcknowledge() ) { SendI2CByte(READ); if ( WaitForI2CAcknowledge() ) { StartBit(); // // // // // // // // // // // // // // // // // // device address - R/W bit = 0 start conversion repeated start bit re send device address command to read double byte of data re send start condition Central Heating Controller 124 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [i2c.c] SendI2CByte(BASE_ADDRESS_1); if ( WaitForI2CAcknowledge() ) { SET_DATA_TO_INPUT; hibyte = ( char )GetI2CByte(); SendI2CAcknowledge(); lobyte.byte = GetI2CByte(); sign = 0; // // // // // // // // re send device address prepare to receive high byte of data get high byte get low byte // assume temp're will be +ve /////////////////////////// // -ve temperature check // /////////////////////////// if ( hibyte < 0 ) { sign = 1; Freescale Semiconductor, Inc... //////////////////////////////////////////////////////// // integer result, convert from 2's complement to // // magnitude. // // NOTE: no +1 required for 2's complement conversion // // as 2's complement value is 1 lower than actual // // // // This next line produces Lint Warning 502: // // Expected unsigned type -- Unary ~ being a bit // // operator would more logically be applied to // // unsigned quantities rather than signed quantities // // // // The 'com' instruction is used and the result is // // correct. // //////////////////////////////////////////////////////// hibyte = ~hibyte; // fractional result, convert from 2's com to magnitude lobyte.byte = ~lobyte.byte + 1; } //////////////////////////////// // fractional part processing // //////////////////////////////// dec = 0; if ( lobyte.byte >= 0x10 )// is bit 4 or greater, set { if ( lobyte.bit.bit7 ) { dec += 5000; // 0.5*10000 } if ( lobyte.bit.bit6 ) { dec += 2500; } // 0.25*10000 DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 125 Freescale Semiconductor, Inc. Software Routines if ( lobyte.bit.bit5 ) { dec += 1250; } if ( lobyte.bit.bit4 ) { dec += 625; } // 0.125*10000 // 0.0625*10000 Freescale Semiconductor, Inc... // checking for '0.05' second dec place rounding if ( dec%1000 >= 500 ) // is remainder >= 0.05 { dec += 1000; // 0.1 correction on first decimal } // div by 1000 (not 10000) to dec /= 1000; // produce integer value for first // decimal place //////////////////////////////// // assignment to global space // //////////////////////////////// external_temperature = ( unsigned char )hibyte + EXTERNAL_CALIBRATION; external_temperature_decimal = ( unsigned char )dec; } } } } } } } // ExternalTemperatureRead() //------------------------------------------------------------------------------ unsigned char CarryFlagCheck( void ) { unsigned char result = 0; // assume carry clear #asm bcc CARRY_CHECK_COMPLETE lda #$01 sta result CARRY_CHECK_COMPLETE: #endasm return result; } // CarryFlagCheck() //------------------------------------------------------------------------------ Central Heating Controller 126 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [i2c.h] A.20 [i2c.h] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : i2c.h // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // Header file for 'i2c.c' // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 17/06/00 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __I2C_H_ #define __I2C_H_ Freescale Semiconductor, Inc... ///////////////// // I2C defines // ///////////////// // data #define SET_DATA_TO_OUTPUT #define SET_DATA_TO_INPUT #define RESET_SDA #define SET_SDA #define READ_SDA // clock #define SET_CLOCK_TO_OUTPUT #define RESET_SCL #define SET_SCL // temperature commands #define BASE_ADDRESS_0 DDRD.bit.bit2 DDRD.bit.bit2 PTD.bit.bit2 PTD.bit.bit2 PTD.bit.bit2 = = = = 1 0 0 1 DDRD.bit.bit3 PTD.bit.bit3 PTD.bit.bit3 =1 =0 =1 0x90 DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 127 Freescale Semiconductor, Inc. Software Routines #define BASE_ADDRESS_1 #define START #define READ 0x91 0x51 0xaa Freescale Semiconductor, Inc... void void unsigned void unsigned void unsigned void void unsigned void #endif char char char char SetUpAndHoldTimingDelay( void ); ExternalTemperatureRead( void ); WaitForI2CAcknowledge( void ); SendI2CAcknowledge( void ); CarryFlagCheck( void ); SendI2CByte( unsigned char ); GetI2CByte( void ); OutClock( void ); StartBit( void ); InClock( void ); StopBit( void ); Central Heating Controller 128 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [interrupt.c] A.21 [interrupt.c] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : interrup.c // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // Interrupt routines // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 15/05/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __EXTERN_H_ #include "extern.h" #endif #include #include #include #include "interrup.h" "Display.h" "startup.h" "Alarm.h" Freescale Semiconductor, Inc... #pragma TRAP_PROC void RTC_INTERRUPT( void ) { unsigned char temp; ///////////////////////////////// // 100Hz chronograph interrupt // ///////////////////////////////// if ( RTCSR.bit.CHRF && RTCCR1.bit.CHRIE ) { DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 129 Freescale Semiconductor, Inc. Software Routines temp = CHRR.reg; // clear interrupt by reading CHRR reg flags1.bit._10MS = 1; // main() sequencer } // RTC_INTERRUPT() //------------------------------------------------------------------------------ #pragma TRAP_PROC void LVI_INTERRUPT( void ) { ServiceWatchDog(); PTB.byte = 0x00; LVISR.bit.LVIIAK = 1; if ( LVISR.bit.LVIOUT ) { DDRB.reg = 0x00; DDRD.reg = 0x00; RTCCR1.bit.CHRIE = 0; ClearDisplay(); LCDCR.reg = 0xb0; LDAT6.byte = 0x36; LDAT5.byte = 0x23; LDAT4.byte = 0x33; LDAT3.byte = 0x36; LDAT2.byte = 0x03; LDAT1.byte = 0x60; // Turn off heating/cooling & LED's // Resets the interrupt flag Freescale Semiconductor, Inc... // Set ports to input to reduce... // current drain // Disables RTC 100Hz interrupt // Adjust LCD to lower power mode // Displays 'bAtt' // // // // // STOP(); } else { RTCCR2.bit.CHRCLR = 1; // Reset chronograph counter MicroStartUp(); // Reinitialises the micro Alarm(); // Load next alarm into the register } } // LVI_INTERRUPT() //------------------------------------------------------------------------------ Central Heating Controller 130 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [interrupt.h] A.22 [interrupt.h] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : interrup.h // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // Header file for interrup.c // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 15/05/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __INTERRUP_H_ #define __INTERRUP_H_ Freescale Semiconductor, Inc... //////////////// // prototypes // //////////////// void RTC_INTERRUPT( void ); #endif DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 131 Freescale Semiconductor, Inc. Software Routines A.23 [lj12.h] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : lj12.h // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // register definitions for MC68HC908LJ12 // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 15/05/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __LJ12_H_ #define __LJ12_H_ #ifndef #include #endif __DECLARED_H_ "declared.h" Freescale Semiconductor, Inc... /////////////////// // CPU Registers // /////////////////// #define PTA (*(volatile #define PTB (*(volatile #define PTC (*(volatile #define PTD (*(volatile #define DDRA (*(volatile #define DDRB (*(volatile #define DDRC (*(volatile #define DDRD (*(volatile #define LEDB (*(volatile #define SPCR (*(volatile union union union union union union union union union union uPORT*)0x0000) uPORT*)0x0001) uPORT*)0x0002) uPORT*)0x0003) uPORT*)0x0004) uPORT*)0x0005) uPORT*)0x0006) uPORT*)0x0007) uPORT*)0x000C) uPORT*)0x0010) Central Heating Controller 132 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [lj12.h] #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define SPSCR SPDR SCC1 SCC2 SCC3 SCS1 SCS2 SCDR SCBR SCIRCR KBSCR KBIER CONFIG2 INTSCR CONFIG1 T1SC T1CNTH T1CNT T1CNTL T1MODH T1MOD T1MODL T1SC0 T1CH0H T1CH0 T1CH0L T1SC1 T1CH1H T1CH1 T1CH1L T2SC T2CNTH T2CNT T2CNTL T2MODH T2MOD T2MODL T2SC0 T2CH0H T2CH0 T2CH0L T2SC1 T2CH1H T2CH1 T2CH1L PTCL PBWC PMSH PMS PMSL PMRS PMDS ADSCR ADRH ADR (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile union uPORT*)0x0011) union uPORT*)0x0012) union uPORT*)0x0013) union uPORT*)0x0014) union uPORT*)0x0015) union uPORT*)0x0016) union uPORT*)0x0017) union uPORT*)0x0018) union uPORT*)0x0019) union uPORT*)0x001A) union uPORT*)0x001B) union uPORT*)0x001C) union uPORT*)0x001D) union uPORT*)0x001E) union uPORT*)0x001F) union uPORT*)0x0020) union uPORT*)0x0021) USHORT*)0x0021) union uPORT*)0x0022) union uPORT*)0x0023) USHORT*)0x0023) union uPORT*)0x0024) union uPORT*)0x0025) union uPORT*)0x0026) USHORT *)0x0026) union uPORT*)0x0027) union uPORT*)0x0028) union uPORT*)0x0029) USHORT*)0x0029) union uPORT*)0x002A) union uPORT*)0x002B) union uPORT*)0x002C) USHORT*)0x002C) union uPORT*)0x002D) union uPORT*)0x002E) USHORT*)0x002E) union uPORT*)0x002F) union uPORT*)0x0030) union uPORT*)0x0031) USHORT*)0x0031) union uPORT*)0x0032) union uPORT*)0x0033) union uPORT*)0x0034) USHORT*)0x0034) union uPORT*)0x0035) union uPORT*)0x0036) union uPORT*)0x0037) union uPORT*)0x0038) USHORT*)0x0038) union uPORT*)0x0039) union uPORT*)0x003A) union uPORT*)0x003B) union uPORT*)0x003C) union uPORT*)0x003D) USHORT*)0x003D) Freescale Semiconductor, Inc... DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 133 Freescale Semiconductor, Inc. Software Routines #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define ADRL ADCLK RTCCR1 RTCCR2 RTCSR ALMR ALHR SECR MINR HRR DAYR MTHR YRR DOWR CHRR LCDCLK LCDCR LDAT1 LDAT2 LDAT3 LDAT4 LDAT5 LDAT6 LDAT7 LDAT8 LDAT9 LDAT10 LDAT11 LDAT12 LDAT13 LDAT14 SBSR SRSR SBFCR INT1 INT2 INT3 FLCR FLBPR BRKH BRK BRKL BRKSCR LVISR COPCTL (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile (*(volatile union uPORT*)0x003E) union uPORT*)0x003F) union uPORT*)0x0042) union uPORT*)0x0043) union uPORT*)0x0044) union uPORT*)0x0045) union uPORT*)0x0046) union uPORT*)0x0047) union uPORT*)0x0048) union uPORT*)0x0049) union uPORT*)0x004A) union uPORT*)0x004B) union uPORT*)0x004C) union uPORT*)0x004D) union uPORT*)0x004E) union uPORT*)0x004F) union uPORT*)0x0051) union uPORT*)0x0052) union uPORT*)0x0053) union uPORT*)0x0054) union uPORT*)0x0055) union uPORT*)0x0056) union uPORT*)0x0057) union uPORT*)0x0058) union uPORT*)0x0059) union uPORT*)0x005A) union uPORT*)0x005B) union uPORT*)0x005C) union uPORT*)0x005D) union uPORT*)0x005E) union uPORT*)0x005F) union uPORT far *)0xFE00) union uPORT far *)0xFE01) union uPORT far *)0xFE03) union uPORT far *)0xFE04) union uPORT far *)0xFE05) union uPORT far *)0xFE06) union uPORT far *)0xFE08) union uPORT far *)0xFE09) union uPORT far *)0xFE0C) USHORT far *)0xFE0C) union uPORT far *)0xFE0D) union uPORT far *)0xFE0E) union uPORT far *)0xFE0F) union uPORT far *)0xFFFF) Freescale Semiconductor, Inc... ////////////////////////////// // CPU register bit defines // ////////////////////////////// ////////// // INT1 // ////////// #define IF1 #define IF2 bit2 bit3 Central Heating Controller 134 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [lj12.h] #define #define #define #define IF3 IF4 IF5 IF6 bit4 bit5 bit6 bit7 Freescale Semiconductor, Inc... ////////// // INT2 // ////////// #define IF7 #define IF8 #define IF9 #define IF10 #define IF11 #define IF12 #define IF13 #define IF14 ////////// // INT3 // ////////// #define IF15 #define IF16 #define IF17 ////////////// // T1SC reg // ////////////// #define PS0 #define PS1 #define PS2 #define TRST #define TSTOP #define TOIE #define TOF /////////////// // T1SC0 reg // /////////////// #define CH0MAX #define TOV0 #define ELS0A #define ELS0B #define MS0A #define MS0B #define CH0IE #define CH0F ////////////// // TSC1 reg // ////////////// #define CH1MAX #define TOV1 #define ELS1A #define ELS1B #define MS1A bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7 bit0 bit1 bit2 bit0 bit1 bit2 bit4 bit5 bit6 bit7 bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7 bit0 bit1 bit2 bit3 bit4 DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 135 Freescale Semiconductor, Inc. Software Routines #define CH1IE #define CH1F bit6 bit7 ////////////////////////////////////// // A2D status & control reg (ADSCR) // ////////////////////////////////////// #define ADCH0 bit0 #define ADCH1 bit1 #define ADCH2 bit2 #define ADCH3 bit3 #define ADCH4 bit4 #define ADCO bit5 #define AIEN bit6 #define COCO bit7 ////////////////////////////////// // A2D input clock reg (ADICLK) // ////////////////////////////////// #define MODE0 bit2 #define MODE1 bit3 #define ADICLK bit4 #define ADIV0 bit5 #define ADIV1 bit6 #define ADIV2 bit7 ////////////////////////// // FLASH control (FLCR) // ////////////////////////// #define PGM bit0 #define ERASE bit1 #define MASS bit2 #define HVEN bit3 ///////////////////////////// // KEYBOARD status/control // ///////////////////////////// #define MODEK bit0 #define IMASKK bit1 #define ACKK bit2 #define KEYF bit3 /////////////////////////////// // KEYBOARD interrupt enable // /////////////////////////////// #define KBIE0 bit0 #define KBIE1 bit1 #define KBIE2 bit2 #define KBIE3 bit3 #define KBIE4 bit4 #define KBIE5 bit5 #define KBIE6 bit6 #define KBIE7 bit7 ////////////////////////// // PLL bandwith control // Freescale Semiconductor, Inc... Central Heating Controller 136 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [lj12.h] ////////////////////////// #define AUTO bit7 #define LOCK bit6 #define ACQ bit5 ///////////////// // PLL control // ///////////////// #define PLLIE #define PLLF #define PLLON #define BCS #define PRE1 #define PRE0 #define VPR1 #define VPR0 ////////// // SCS1 // ////////// #define SCTE #define TC #define SCRF #define IDLE #define OR #define NF #define FE #define PE ////////// // SCC2 // ////////// #define SCTIE #define TCIE #define SCRIE #define ILIE #define TE #define RE #define RWU #define SBK Freescale Semiconductor, Inc... bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 /////////////////////////// // RTC control1 (RTCCR1) // /////////////////////////// #define TB2IE bit0 #define TB1IE bit1 #define SECIE bit2 #define MINIE bit3 #define HRIE bit4 #define DAYIE bit5 #define CHRIE bit6 #define ALMIE bit7 ////////////////////////// // RTC control (RTCCR2) // DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 137 Freescale Semiconductor, Inc. Software Routines ////////////////////////// #define XTL0 bit0 #define XTL1 bit1 #define XTL2 bit2 #define RTCE bit4 #define CHRE bit5 #define CHRCLR bit6 //////////////////////// // RTC Status (RTCSR) // //////////////////////// #define TB2F bit0 #define TB1F bit1 #define SECF bit2 #define MINF bit3 #define HRF bit4 #define DAYF bit5 #define CHRF bit6 #define ALMF bit7 //////////////////////////// // IRQ status and control // //////////////////////////// #define MODE bit0 #define IMASK bit1 #define ACK bit2 #define IRQF bit3 //////////////////////// // LVI Status (LVISR) // //////////////////////// #define LVIIAK bit4 #define LVIIF bit5 #define LVIIE bit6 #define LVIOUT bit7 #endif Freescale Semiconductor, Inc... Central Heating Controller 138 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [main.c] A.24 [main.c] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : main.c // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // main application routine // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 15/05/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __EXTERN_H_ #include "extern.h" #endif #include #include #include #include #include #include #include #include "temperature.h" "operation.h" "Clockset.h" "Alarmset.h" "Display.h" "startup.h" "button.h" "Alarm.h" Freescale Semiconductor, Inc... void main( void ) { MicroStartUp(); DOWR.byte = 0x01; for ( ;; ) { // Initialise micro // Set DOW to Mon on first startup DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 139 Freescale Semiconductor, Inc. Software Routines ServiceWatchDog(); TenMsSynchronise(); ReadButtons(); NewDayRefresh(); switch ( set_mode ) { case MODE_DEFAULT: TimeRefresh(); InsideTemperature(); OverrideCheck(); AlarmFlag(); ClimateControl(); break; case MODE_CLOCKSET: Cset(); break; case MODE_ALARMSET: ModeAlarmSet(); break; case MODE_VIEWTEMP: TemperatureView(); break; } /////////////// // 10ms sync // /////////////// while ( !flags1.bit._10MS ) ; // Waiting for interrupt flags1.bit._10MS = 0; // reset, for next loop iteration } // end of 'for( ;; )' } // end of main //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... Central Heating Controller 140 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [operation.c] A.25 [operation.c] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : operation.c // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // General Operations // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 17/07/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __EXTERN_H_ #include "extern.h" #endif #include #include #include "Clockset.h" "Display.h" "Alarm.h" Freescale Semiconductor, Inc... void ClimateControl( void ) { switch ( mode ) { case AUTOMATIC: PTB.bit.bit4 = 1; PTB.bit.bit5 = 1; break; case HEAT: PTB.bit.bit4 = 0; PTB.bit.bit5 = 1; DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 141 Freescale Semiconductor, Inc. Software Routines break; case COOL: PTB.bit.bit4 = 1; PTB.bit.bit5 = 0; break; case OFF: PTB.bit.bit4 = 0; PTB.bit.bit5 = 0; break; } if ( Active ) // If heating control is on { if ( user_temperature > (( internal_temperature/10 ) + 1 )) { // Divide by 10 for integer value if ( mode == AUTOMATIC || mode == HEAT ) { // If heating is needed PTB.bit.bit0 = 0x01; // Heating on PTB.bit.bit1 = 0x00; // Cooling off if ( one_second ) PTB.bit.bit5 = 0;// Set mode LED to flash on heating else PTB.bit.bit5 = 1;// } else if ( mode == COOL || mode == OFF ) { // If heating is not needed PTB.bit.bit0 = 0x00; // Heating off } } else if (user_temperature < (( internal_temperature/10 ) + 1 )) { // Divide by 10 for integer value if ( mode == AUTOMATIC || mode == COOL ) { // If cooling is needed PTB.bit.bit0 = 0x00; // Heating off PTB.bit.bit1 = 0x01; // Cooling on if ( one_second ) PTB.bit.bit4 = 0;// Set mode LED to flash on cooling else PTB.bit.bit4 = 1;// } else if ( mode == HEAT || mode == OFF ) { // If cooling is not needed PTB.bit.bit1 = 0x00; // Cooling off } } else { PTB.bit.bit0 = 0x00; // Heating off PTB.bit.bit1 = 0x00; // Cooling off } } } // ClimateControl() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... void SmartTimeCheck( void ) { Central Heating Controller 142 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [operation.c] Freescale Semiconductor, Inc... if ( HRR.byte == SHour && MINR.byte == SMin )// One hour before on time { if ( smart ) // Is smart mode active { smart_time = (( 1000 * internal_temperature )/10 )/user_temperature; // Divide by 10 for integer value // Smart calculations, stage 1 if ( smart_time > 1000 ) // For Smart cooling { // smart_time -= 1000; // } // else // For Smart heating { // smart_time = 1000 - smart_time;// } // smart_time = 3 * (( smart_time * ( internal_temperature/10 )) / ( 100 * external_temperature )); // Divide by 10 for integer value // Smart calculations, stage 2 if ( smart_time > 50 ) // { // Maximum cap for smart minutes smart_time = 50; // } // if ( SMin < smart_time ) // Prevention for negative minutes { // SMin += 50; // Maximum cap } // else { SHour += 1; // Adds 1 hour back on to Shour } SMin -= (unsigned char)smart_time;// Alarm minutes reduced by smart program[PRNumber].min_on = SMin;// Loads new on minutes into array program[PRNumber].hour_on = SHour;// Loads new on hour into array PRNumber = NO_PROGRAM; Alarm(); // New times loaded into Alarm reg } } } // SmartTimeCheck() //------------------------------------------------------------------------------ void OverrideCheck( void ) { if ( Override == 1 ) // If override is active { if ( OverrideH == HRR.byte && OverrideM == MINR.byte ) { // If override period expired Override = 0; // Reset override if ( !PR2 ) // Program is not currently running { Active = 0; // Turn heating/cooling off PTB.bit.bit0 = 0x00; // PTB.bit.bit1 = 0x00; // } DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 143 Freescale Semiconductor, Inc. Software Routines } } } // OverrideCheck() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... void TimeRefresh( void ) { if ( BatteryCheck <= LOWBATT && two_second ) { LDAT12.byte = 0x00; // Clears unused digit LDAT11.byte = 0x03; // Displays 'Lo' LDAT10.byte = 0x40; // LDAT9.byte = 0x26; // LDAT8.byte = 0x20; // LDAT7.byte = 0x00; // Clears unused digit LDAT6.byte = 0x36; // Displays 'bAtt' LDAT5.byte = 0x23; // LDAT4.byte = 0x33; // LDAT3.byte = 0x36; / LDAT2.byte = 0x03; // LDAT1.byte = 0x60; // } else { LDAT6.byte = 0x00; // Removes the 'b' LDAT5.byte &= 0x0f; // MINClr(); // Refresh TOD display HRClr(); // Refresh = 1; // Refresh internal temperature ChevronRefresh(); } } // TimeRefresh() //------------------------------------------------------------------------------ void TenMsSynchronise( void ) { if ( ++_10ms%25 == 0 ) { _0P25sec ^= 0x01; if ( _10ms%50 { SFLASH } == 0 ) ^= 0x01; if ( _10ms%100 == 0 ) { one_second ^= 0x01; _5sectick++; } if ( _10ms >= 200 ) { // // // // // // // // // // // // // // // // // every 0.25s every 0.5s every 1.0s Unsigned char, 256 max Central Heating Controller 144 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [operation.c] two_second 10ms = 0; } ^= 0x01; } } // TenMsSynchronise() //------------------------------------------------------------------------------ // every 2.0s // reset for next // // Freescale Semiconductor, Inc... DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 145 Freescale Semiconductor, Inc. Software Routines A.26 [operation.h] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : operation.h // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // Header file for 'operation.c' // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 17/07/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __OPERATION_H_ #define __OPERATION_H_ Freescale Semiconductor, Inc... void void void void void TenMsSynchronise( void ); SmartTimeCheck( void ); ClimateControl( void ); OverrideCheck( void ); TimeRefresh( void ); #endif Central Heating Controller 146 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [startup.c] A.27 [startup.c] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : startup.c // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // startup routines // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 15/05/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __EXTERN_H_ #include "extern.h" #endif #include #include #include "Display.h" "button.h" "startup.h" Freescale Semiconductor, Inc... //////////////////////////////////////////////////////////////////////////////// // This function is the first ATEECC function called out of reset, after the // // Metrowerks startup code. // // // // A basic initialisation takes place as we enter STOP mode after this // // function awaiting a button press. // // // // Args : none // // Returns: none // //////////////////////////////////////////////////////////////////////////////// void MicroStartUp( void ) { DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 147 Freescale Semiconductor, Inc. Software Routines volatile union uPORT*ptr = &LDAT1; CONFIG1.reg = 0xe2; ServiceWatchDog(); CONFIG2.reg = 0x2e; // (2^13 - 2^4)/47^3 (ICLK) = 174ms // watchdog, LVI reset disabled // // // // // XTAL will still run in STOP() 5V LVI trip, Enables Port C... to drive LCD (FP19 - FP23) IRQ interrupts disabled re-affirm INTSCR.reg SEI(); = 0x02; InitialisePLL(); // LVI setup LVISR.bit.LVIIAK = 1; LVISR.bit.LVIIE = 1; LVISR.bit.LVIIAK = 1; Freescale Semiconductor, Inc... // Clears Interrupt Acknowledge bit // Enables LVI interrupt // Clears Interrupt Acknowledge bit //////////////////////////////////////////////////////////////////////////////// // Motorola data book MC68HC908LJ12 Rev. 2.0 page 314, states : // // "the ADC clock should be set to between 32kHz and 2MHz". Aiming for 1MHz. // // Therefore divide by 2, since using a 8.00MHz Xtal the bus speed will be // // 2MHz. Check this for final pll frequency and adjust accordingly. // // Using RIGHT JUSTIFIED mode to store raw unsigned data. // //////////////////////////////////////////////////////////////////////////////// // A2D setup ADCLK.reg = 0x34; // RTC setup RTCCR2.reg = 0x60; RTCCR1.reg = 0x40; RTCCR2.bit.RTCE = 1; ///////////////////// // micro reg setup // ///////////////////// DDRA.byte = DDRD.byte &= DDRD.bit.bit0 = PTD.bit.bit0 = KBSCR.bit.IMASK = KBIER.byte = KBSCR.bit.ACKK = // Activates keyboard DDRB.byte = // // // // rtc off, set for 32.768kHz xtal... chronograph setup CHRIE set ...all done, start RTC 0x00; // Sets button pins to be inputs 0x0f; 1; // PTD.bit.bit0 is set to output, ... 0; // low for button release on wakeup 1; // Masks keyboard interrups 0xff; 1; interrups and pull up resistors 0xff; // Sets port B to output ////////////////////////////////// // user variable initialisation // ////////////////////////////////// _5sectick = 5; PR2 = 0; user_temperature = 20; Central Heating Controller 148 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [startup.c] Override PRNumber _10ms Aset_mode Cset_mode set_mode button_press_status SMin ALHR.reg ALMR.reg = = = = = = = = = = 0; NO_PROGRAM; 0; 0; 0; MODE_DEFAULT; NO_BUTTON_PRESS; 60; 23; 59; // Prevents Alarm being activated... // accidentaly in the first minute... // of power up Freescale Semiconductor, Inc... ///////////////////// // Display Startup // ///////////////////// LCDCLK.byte = 0x29; // = 00101001; // ||||||| // |||||||___ Base Clock/Frame Rate // ||||||____ " " " " // |||||_____ " " " " // ||||______ LCD Duty Selection // |||_______ " " " // ||________ Fast Charge // |_________ " " LCDCR.reg // // // // // // // // // // = 0xbc; = 10111100; |||||||| ||||||||___ |||||||____ ||||||_____ |||||______ ||||_______ |||________ ||_________ |__________ Contrast Controls " " " " " " Low Current Fast Charge LCD Enable (1 = enabled) // displays all segments, (NOTE: ptr initialised in declaration) for ( ; ptr <= &LDAT12; ptr++ ) { ptr->reg = 0xff; } InitialDisplay(); ////////////////// // Interputs on // ////////////////// CLI(); } // MicroStartUp() //------------------------------------------------------------------------------ //////////////////////////////////////////////////////////////////////////////// // This function initialises the onboard pll to provide a bus frequency of // DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 149 Freescale Semiconductor, Inc. Software Routines // 2.0MHz using a 32.768kHz xtal. // // // // Args : none // // Returns: none // //////////////////////////////////////////////////////////////////////////////// void InitialisePLL( void ) { ///////////////////////////////////////////// PBWC.reg = 0x80; // auto mode // PTCL.reg = 0x00; // settings here... // PMS = 0x00F5; // as described in... // PMRS.reg = 0xD1; // the MC68HC908LJ12 // PMDS.reg = 0x01; // Rev2.0 data book section 8.4.6 page 113 // PTCL.bit.PLLON = 1; // turn pll on after settings 'set' // ///////////////////////////////////////////// /////////////////////////////////////////////////// // wait for the required frequency to be reached // /////////////////////////////////////////////////// ServiceWatchDog(); while ( !PBWC.bit.LOCK ); PTCL.bit.BCS = 1; // pll clock drives CGMOUT } // InitialisePLL() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... Central Heating Controller 150 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [startup.h] A.28 [startup.h] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : startup.h // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // Header file for 'startup.c' // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 15/05/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __STARTUP_H_ #define __STARTUP_H_ Freescale Semiconductor, Inc... //////////////// // prototypes // //////////////// void MicroStartUp( void ); void InitialisePLL( void ); #endif DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 151 Freescale Semiconductor, Inc. Software Routines A.29 [temperature.c] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : temperature.c // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // Temperature Operations // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 17/07/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __EXTERN_H_ #include "extern.h" #endif #include #include #include "Display.h" "i2c.h" "a2d.h" Freescale Semiconductor, Inc... void TemperatureView( void ) { ClearDisplay(); LDAT12.byte = 0x33; LDAT11.byte = 0x10; if ( sign ) { LDAT8.byte = 0x03; LDAT7.byte = 0x70; LDAT6.bit.bit1 = 1; } else LDAT6.byte = 0x37; // Displays "P" // // Displays "E" in digit 5 // // Displays "-" Central Heating Controller 152 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [temperature.c] DisplayNumber( external_temperature_decimal, 1 ); DP = 1; // Display inside temperature decimal DisplayNumber(( unsigned char )(external_temperature%10 ), 2 ); DP = 0; if ( external_temperature >= 10 )// Clears 'tens' digit when not needed { // DisplayNumber(( unsigned char )( external_temperature/10 ), 3 ); } DisplayNumber( (unsigned char)(user_temperature/10), 7 ); DisplayNumber( (unsigned char)(user_temperature%10), 6); if ( smart )LDAT2.bit.bit2 = 1; // Displays smart chevron if needed else LDAT2.bit.bit2 = 0; Refresh = 1; // Refresh the inside temp } // TemperatureView() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... void InsideTemperature( void ) { unsigned char temp, temp2; if ( _5sectick >= 5 ) { Refresh = 1; 5sectick = 0; ExternalTemperatureRead(); ///////////////////////////////////////////////////////////////////////////// // The internal temperature calculations: // // // // The A2D byte is multiplied by 4.8V (ref V) to convert it to 10000 * the // // i/p voltage, it is then / by 100 to convert it to 100 * the i/p voltage // // // // The result is then * by 40 which is the desired maximum temperature, // // and / by 5 which is the maximum input voltage from the opamp. // // // // Finally the result is / by 10 to leave it in a manageable form // ///////////////////////////////////////////////////////////////////////////// internal_temperature = ( 48 * ReadA2D( CHANNEL0 ))/100; internal_temperature = ( internal_temperature * 40 )/( 5 * 10 ); BatteryCheck = ReadA2D( CHANNEL2 ); } if ( Refresh { Refresh = temp = ( temp2 = ( ) 0; unsigned char )( internal_temperature/100 ); unsigned char )( internal_temperature - ( 100 * temp )); DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 153 Freescale Semiconductor, Inc. Software Routines if ( temp ) // If number is >= 10 { DisplayNumber(( unsigned char )( temp ), 3 ); } // Tens displayed else { LDAT4.byte = 0x00; // Clear tens number LDAT5.byte &= 0xf0; // } DP = 1; DisplayNumber(( unsigned char )( temp2/10 ), 2 ); DP = 0; // Units displayed with decimal point DisplayNumber(( unsigned char )( temp2%10 ), 1); if ( smart )LDAT2.bit.bit2 = 1; // Displays smart chevron if needed else LDAT2.bit.bit2 = 0; ChevronRefresh(); } } // InsideTemperature() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... Central Heating Controller 154 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Software Routines [temperature.h] A.30 [temperature.h] //////////////////////////////////////////////////////////////////////////////// // AA TTTTTTTTTTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // // AAAA TTTTTTTTTTTT EEE EEE CC CC // // AAAAAA TTTT EEEEE EEEEE CC CC // // AAAAAAAA TTTT EEEEE EEEEE CC CC // // AAAA AAAA TTTT EEE EEE CC CC // // AAAA AAAA TTTT EEEEEEEEEEE EEEEEEEEEEE CCCCCCCCC CCCCCCCCC // //////////////////////////////////////////////////////////////////////////////// // AT Electronic Embedded Control Consultants // // Unit 32, Consett Business Park // // Villa Real, Consett // // Co. Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Central Heating Reference Design // // Filename : temperature.h // // Author : T. Mudryk // // Compiler : CodeWarrior v5.2 // // CPU : MC68HC908LJ12 // ///////////////////// File Contents ////////////////////////////////////////// // Header file for 'temperature.c' // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 17/07/03 tm creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __TEMPERATURE_H_ #define __TEMPERATURE_H_ Freescale Semiconductor, Inc... void InsideTemperature( void ); void TemperatureView( void ); #endif DRM044 -- Rev 0 MOTOROLA Software Routines For More Information On This Product, Go to: www.freescale.com Central Heating Controller 155 Freescale Semiconductor, Inc. Software Routines Freescale Semiconductor, Inc... Central Heating Controller 156 Software Routines For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- DRM044 Appendix B. Main Circuit Diagram Freescale Semiconductor, Inc... DRM044 -- Rev 0 MOTOROLA Main Circuit Diagram For More Information On This Product, Go to: www.freescale.com Central Heating Controller 157 Freescale Semiconductor, Inc. Main Circuit Diagram Freescale Semiconductor, Inc... Central Heating Controller 158 Main Circuit Diagram For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- DRM044 Appendix C. Main Circuit Bill of Materials Freescale Semiconductor, Inc... Resistors R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R20 R22 R23 R24 R25 R26 R27 Capacitors C1 C2 C3 C4 C5 C6 C7 C8 C9 C11 C13 C23 C22 330k +/-5% 10k+/-5% 680R+/-5% 5k6 +/-5% 12k +/-1% 5k6 +/-5% 10k +/-1% 680R +/-5% 1k +/-5% 0R (see text) 0R (see text) 100k +/-1% 10M +/-5% 22k +/-5% 10k +/-5% 220R +/-5% 10k +/-5% 10k +/-5% 10k +/-5% 10k +/-5% 1206 1206 1206 1206 1206 1206 1206 1206 1206 1206 1206 1206 1206 1206 1206 1206 1206 1206 1206 1206 10nF 30V 100nF 30V 100nF 30V 100uF 10V 100nF 30V 33nF 30V 100nF 30V 15pF 30V 15pF 30V 220uF 10v 220uF 25v 100nF 30V 100nF 30V 1206 1206 1206 Radial 1206 1206 1206 1206 1206 Radial Radial 1206 1206 DRM044 -- Rev 0 MOTOROLA Main Circuit Bill of Materials For More Information On This Product, Go to: www.freescale.com Central Heating Controller 159 Freescale Semiconductor, Inc. Main Circuit Bill of Materials Semiconductors D1 D3 D4 D5 D8 D9 Q1 Q2 Q3 Q4 Q7 Q8 U2 U1 LED1 LED2 LED3 LED4 Miscellaneous XT1 BT1 RL1 RL2 DISP1 PCB PCB Connectors J3 J4 J5 J6 J8 J9 J15 J16 - J17 CN1-CN4 Freescale Semiconductor, Inc... LL4148 LL4148 LL4148 LL4001 LL4001 BAT754 BC850 BC850 LM35CZ TS942ID DS1721 BC850 LM78L05 MC68HC908LJ12 Blue Red White White MINI MELF MINI MELF MINI MELF MELF MELF SOT-23 SOT-23 SOT-23 TO92 SO8 SO-8 SOT-23 TO92 64pin QFP 3mm 3mm 5mm 5mm 32.768kHz Coin Cell Battery Holder 3V Lithium Omron_G5B 12VDC Coil Omron_G5B 12VDC Coil Varitronix VIM-838 FR4 PTH 130mm x 75mm FR4 15mm x 25mm 3 -pin 0.1" pitch header 3-pin Molex kk connector 4-pin Molex kk connector 2-pin 0.1" pitch header 2-pin 0.1" pitch header 12VDC 4-pin Molex kk connector 10 -way 0.1" pitch box header 0.625" Faston Blade Radial Coin Main PCB Remote sensor Central Heating Controller 160 Main Circuit Bill of Materials For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- DRM044 Appendix D. Programming Circuit Diagram Freescale Semiconductor, Inc... DRM044 -- Rev 0 MOTOROLA Programming Circuit Diagram For More Information On This Product, Go to: www.freescale.com Central Heating Controller 161 Freescale Semiconductor, Inc. Programming Circuit Diagram Freescale Semiconductor, Inc... Central Heating Controller 162 Programming Circuit Diagram For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- DRM044 Appendix E. Programming Circuit Bill of Materials Freescale Semiconductor, Inc... Resistors R14 R15 R16 R17 R18 R19 R21 Capacitors C12 C14 C15 C16 C17 C18 C19 C20 C21 Semiconductors Q5 Q6 D6 D7 U3 U4 U5 XT2 Connectors J1, J7 J2 J14 1k +/-5% 10k +/-5% 10k +/-5% 10k +/-5% 10k +/-5% 10k +/-5% 10k +/-5% Package 1206 1206 1206 1206 1206 1206 1206 100nF 30V 100nF 30V 100nF 30V 100nF 30V 100nF 30V 220F 10V 100nF 30V 100nF 30V 100nF 30V 1206 1206 1206 1206 1206 Radial 1206 1206 1206 BC850 BC850 LL4148 MMBZ5229 74HC125D MAX232D LM78L08 9.8304 MHz SOT23 SOT23 MINI MELF SOT23 SO-14 SO-16 Wide TO92 Oscillator Module 10 -way 0.1" pitch box header 9-way 'D' type 2-pin 0.1" pitch header Female DRM044 -- Rev 0 MOTOROLA Programming Circuit Bill of Materials For More Information On This Product, Go to: www.freescale.com Central Heating Controller 163 Freescale Semiconductor, Inc. Programming Circuit Bill of Materials Freescale Semiconductor, Inc... Central Heating Controller 164 Programming Circuit Bill of Materials For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- DRM044 Appendix F. PCB Details F.1 Component Trace Freescale Semiconductor, Inc... DRM044 -- Rev 0 MOTOROLA PCB Details For More Information On This Product, Go to: www.freescale.com Central Heating Controller 165 Freescale Semiconductor, Inc. PCB Details F.2 Component Silk Screen Freescale Semiconductor, Inc... Central Heating Controller 166 PCB Details For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. PCB Details Solder Trace F.3 Solder Trace Freescale Semiconductor, Inc... DRM044 -- Rev 0 MOTOROLA PCB Details For More Information On This Product, Go to: www.freescale.com Central Heating Controller 167 Freescale Semiconductor, Inc. PCB Details F.4 Solder Silk Screen Freescale Semiconductor, Inc... Central Heating Controller 168 PCB Details For More Information On This Product, Go to: www.freescale.com DRM044 -- Rev 0 MOTOROLA Freescale Semiconductor, Inc. Freescale Semiconductor, Inc... For More Information On This Product, Go to: www.freescale.com Freescale Semiconductor, Inc. HOW TO REACH US: USA/EUROPE/LOCATIONS NOT LISTED: Motorola Literature Distribution; P.O. Box 5405, Denver, Colorado 80217 1-303-675-2140 or 1-800-441-2447 JAPAN: Motorola Japan Ltd.; SPS, Technical Information Center, 3-20-1, Minami-Azabu Minato-ku, Tokyo 106-8573 Japan 81-3-3440-3569 ASIA/PACIFIC: Motorola Semiconductors H.K. Ltd.; Silicon Harbour Centre, 2 Dai King Street, Tai Po Industrial Estate, Tai Po, N.T., Hong Kong 852-26668334 TECHNICAL INFORMATION CENTER: 1-800-521-6274 HOME PAGE: http://motorola.com/semiconductors Information in this document is provided solely to enable system and software implementers to use Motorola products. There are no express or implied copyright licenses granted hereunder to design or fabricate any integrated circuits or integrated circuits based on the information in this document. Motorola reserves the right to make changes without further notice to any products herein. Motorola makes no warranty, representation or guarantee regarding the suitability of its products for any particular purpose, nor does Motorola assume any liability arising out of the application or use of any product or circuit, and specifically disclaims any and all liability, including without limitation consequential or incidental damages. "Typical" parameters which may be provided in Motorola data sheets and/or specifications can and do vary in different applications and actual performance may vary over time. All operating parameters, including "Typicals" must be validated for each customer application by customer's technical experts. Motorola does not convey any license under its patent rights nor the rights of others. Motorola products are not designed, intended, or authorized for use as components in systems intended for surgical implant into the body, or other applications intended to support or sustain life, or for any other application in which the failure of the Motorola product could create a situation where personal injury or death may occur. Should Buyer purchase or use Motorola products for any such unintended or unauthorized application, Buyer shall indemnify and hold Motorola and its officers, employees, subsidiaries, affiliates, and distributors harmless against all claims, costs, damages, and expenses, and reasonable attorney fees arising out of, directly or indirectly, any claim of personal injury or death associated with such unintended or unauthorized use, even if such claim alleges that Motorola was negligent regarding the design or manufacture of the part. Freescale Semiconductor, Inc... Motorola and the Stylized M Logo are registered in the U.S. Patent and Trademark Office. digital dna is a trademark of Motorola, Inc. All other product or service names are the property of their respective owners. Motorola, Inc. is an Equal Opportunity/Affirmative Action Employer. (c) Motorola, Inc. 2003 DRM044 For More Information On This Product, Go to: www.freescale.com |
Price & Availability of DRM044
![]() |
|
|
All Rights Reserved © IC-ON-LINE 2003 - 2022 |
[Add Bookmark] [Contact Us] [Link exchange] [Privacy policy] |
Mirror Sites : [www.datasheet.hk]
[www.maxim4u.com] [www.ic-on-line.cn]
[www.ic-on-line.com] [www.ic-on-line.net]
[www.alldatasheet.com.cn]
[www.gdcy.com]
[www.gdcy.net] |