|
If you can't view the Datasheet, Please click here to try to view without PDF Reader . |
|
Datasheet File OCR Text: |
DRM001/D 68HC08M6 HC08M68HC 8M68HC08M Passive Infrared (PIR) Intruder Detection Using the MC68HC908JK1/3, Incorporating Remote Control Adjustment Using the MC68HC908GP32 Designer Reference Manual Freescale Semiconductor, Inc. blank Freescale Semiconductor, Inc... For More Information On This Product, Go to: www.freescale.com Freescale Semiconductor, Inc. Freescale Semiconductor, Inc... Passive Infrared (PIR) Intruder Detection Using the MC68HC908JK1/3, Incorporating Remote Control Adjustment Using the MC68HC908GP32 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 693921 enquiries@ateecc.com www.ateecc.com ATEECC Motorola and are registered trademarks of Motorola, Inc. DigitalDNA is a trademark of Motorola, Inc. (c) Motorola, Inc., 2001 Passive Infrared (PIR) Unit MOTOROLA Designer Reference Manual 3 For More Information On This Product, Go to: www.freescale.com Freescale Semiconductor, Inc. Designer Reference Manual Freescale Semiconductor, Inc... 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. Motorola, Inc. is an Equal Opportunity/Affirmative Action Employer. Designer Reference Manual 4 Passive Infrared (PIR) Unit MOTOROLA For More Information On This Product, Go to: www.freescale.com Freescale Semiconductor, Inc. Designer Reference Manual -- Passive Infrared (PIR) Unit List of Sections Section 1. General Description . . . . . . . . . . . . . . . . . . . . 15 Section 2. Passive Infrared (PIR) Sensor Unit . . . . . . . . 19 Freescale Semiconductor, Inc... Section 3. Infrared Communications Protocol . . . . . . . . 37 Section 4. REMOTE Control Unit . . . . . . . . . . . . . . . . . . . 43 Section 5. Phase-Locked Loop (PLL) Initialization . . . . 73 Section 6. Cosmic M68HC08 Complier . . . . . . . . . . . . . . 77 Section 7. Windows(R) 95/98/NT Program (pir_plot.exe) . . . . . . . . . . . . . . . . . . . . . . . . 87 Appendix A. Fresnel Lens Mounting. . . . . . . . . . . . . . . . 91 Appendix B. PIR Schematics . . . . . . . . . . . . . . . . . . . . . . 93 Appendix C. Development Boards . . . . . . . . . . . . . . . . . 97 Appendix D. MC68HC908GP32 Programmer Circuit . . . . . . . . . . . . . . . . . 101 Appendix E. PIR Source Code Files . . . . . . . . . . . . . . . 103 Appendix F. REMOTE Source Code Files. . . . . . . . . . . 177 Appendix G. PIR Unit Bill of Materials . . . . . . . . . . . . . 289 Appendix H. REMOTE Unit Bill of Materials . . . . . . . . . 293 Passive Infrared (PIR) Unit MOTOROLA List of Sections For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 5 Freescale Semiconductor, Inc. List of Sections Freescale Semiconductor, Inc... Designer Reference Manual 6 List of Sections For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- Passive Infrared (PIR) Unit Table of Contents Section 1. General Description 1.1 Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Design Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Black Body Principles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Freescale Semiconductor, Inc... 1.2 1.3 1.4 Section 2. Passive Infrared (PIR) Sensor Unit 2.1 2.2 2.3 Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 2.4 8-Bit Analog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.4.1 Analog Intruder Detection Method . . . . . . . . . . . . . . . . . . . . 22 2.4.2 Analog Circuit Description . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.5 Delta Sigma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.5.1 Delta Sigma Intruder Detection Method . . . . . . . . . . . . . . . . 24 2.5.2 Delta Sigma Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26 2.6 PIR Software Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.6.1 On-Board MC68HC908JK1/MC68HC908JK3 20-Pin DIL Programmer . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.6.2 Security Failure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.6.3 Motorola FLASH Read-Only Memory (ROM) . . . . . . . . . . . . 32 2.6.4 PIR Parameter FLASH Programming . . . . . . . . . . . . . . . . . 33 Passive Infrared (PIR) Unit MOTOROLA Table of Contents For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 7 Freescale Semiconductor, Inc. Table of Contents Section 3. Infrared Communications Protocol 3.1 3.2 3.3 3.4 Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Infrared Hardware Description . . . . . . . . . . . . . . . . . . . . . . . . . 41 IR Receiver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Section 4. REMOTE Control Unit Freescale Semiconductor, Inc... 4.1 4.2 4.3 4.4 4.5 4.6 Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Password Protection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Hardware Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Button Designations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45 Pin Assignments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 4.7 Program Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49 4.7.1 Run Time LCD Screen Flow. . . . . . . . . . . . . . . . . . . . . . . . . 50 4.7.2 Adjustable FLASH Parameters . . . . . . . . . . . . . . . . . . . . . . 52 4.7.3 Button Press Determination . . . . . . . . . . . . . . . . . . . . . . . . . 55 4.7.4 Button Debouncing and Functional Decode. . . . . . . . . . . . . 58 4.8 LCD Text Writing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 4.8.1 LCD Contrast Adjust. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 4.8.2 Real-Time Clock (RTC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.8.3 I2C for the Real-Time Clock . . . . . . . . . . . . . . . . . . . . . . . . . 64 4.8.4 Forcing the Real-Time Clock (RTC) to a Known State. . . . . 67 4.9 REMOTE Software Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 4.9.1 On-Board MC68HC908GP32 40-Pin Dual in-Line Programmer. . . . . . . . . . . . . . . . . . . 68 4.9.2 Security Failure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 4.9.3 Programming Circuit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Designer Reference Manual 8 Table of Contents For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Table of Contents Section 5. Phase-Locked Loop (PLL) Initialization 5.1 5.2 5.3 Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Clock Generator Module/PLL Hardware Description . . . . . . . . 75 Section 6. Cosmic M68HC08 Complier 6.1 Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Compiling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Configuration File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Make File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Linking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 IDEA Integrated Environment . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Freescale Semiconductor, Inc... 6.2 6.3 6.4 6.5 6.6 6.7 Section 7. Windows(R) 95/98/NT Program (pir_plot.exe) 7.1 7.2 7.3 Contents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Program Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Appendix A. Fresnel Lens Mounting Appendix B. PIR Schematics Appendix C. Development Boards Appendix D. MC68HC908GP32 Programmer Circuit Passive Infrared (PIR) Unit MOTOROLA Table of Contents For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 9 Freescale Semiconductor, Inc. Table of Contents Appendix E. PIR Source Code Files [PIR:a2d.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 [PIR:a2d.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 [PIR:analyse.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 [PIR:analyse.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 [PIR:cc.bat] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 [PIR:config.dat] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 [PIR:crts.s] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 [PIR:data.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 [PIR:datasort.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 [PIR:datasort.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 [PIR:declared.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124 [PIR:define.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 [PIR:delay.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 [PIR:delay.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 [PIR:deltasig.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 [PIR:deltasig.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 [PIR:extern.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 [PIR:flashprg.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 [PIR:flashprh.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 [PIR:interrup.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 [PIR:interrup.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 [PIR:ireg.s] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 [PIR:jk.lkf] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 [PIR:jk13&jl3.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 [PIR:link08.bat] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 [PIR:lreg.s] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 [PIR:main.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 [PIR:make08.bat] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 [PIR:mon_data.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 [PIR:serial.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 [PIR:serial.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 [PIR:startup.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .171 [PIR:startup.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .174 [PIR:vectors.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 Freescale Semiconductor, Inc... Designer Reference Manual 10 Passive Infrared (PIR) Unit Table of Contents For More Information On This Product, Go to: www.freescale.com MOTOROLA Freescale Semiconductor, Inc. Table of Contents Appendix F. REMOTE Source Code Files [REMOTE:button.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .179 [REMOTE:button.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .192 [REMOTE:cc.bat] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 [REMOTE:config.dat] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 [REMOTE:convert.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .195 [REMOTE:convert.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 [REMOTE:crtsi.s] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 [REMOTE:data.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 [REMOTE:datasort.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 [REMOTE:datasort.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 [REMOTE:declared.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 [REMOTE:define.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .216 [REMOTE:delay.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 [REMOTE:delay.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 [REMOTE:digipot.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .221 [REMOTE:digipot.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .222 [REMOTE:error.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 [REMOTE:error.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 [REMOTE:extern.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .226 [REMOTE:gp32.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 [REMOTE:gp32.lkf] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 [REMOTE:i2c.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 [REMOTE:i2c.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 [REMOTE:interrup.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 [REMOTE:interrup.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 [REMOTE:ir_comms.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 [REMOTE:ir_comms.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 [REMOTE:ireg.s] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 [REMOTE:lcd.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 [REMOTE:lcd.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 [REMOTE:link08.bat] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 [REMOTE:lreg.s] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 [REMOTE:main.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 [REMOTE:make08.bat] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 [REMOTE:mode.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 [REMOTE:mode.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 [REMOTE:rs_comms.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 Passive Infrared (PIR) Unit MOTOROLA Table of Contents For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 11 Freescale Semiconductor, Inc... Freescale Semiconductor, Inc. Table of Contents [REMOTE:rs_comms_h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 [REMOTE:rtc.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 [REMOTE:rtc.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 [REMOTE:startup.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .282 [REMOTE:startup.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .286 [REMOTE:vectors.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .287 Appendix G. PIR Unit Bill of Materials Freescale Semiconductor, Inc... Appendix H. REMOTE Unit Bill of Materials Designer Reference Manual 12 Table of Contents For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- Passive Infrared (PIR) Unit List of Figures and Tables Figure 1-1 1-2 1-3 2-1 2-2 2-3 2-4 2-5 3-1 3-2 3-3 3-4 3-5 4-1 4-2 4-3 4-4 4-5 4-6 4-7 4-8 4-9 Title Page Freescale Semiconductor, Inc... PIR Sensor with REMOTE Control Unit . . . . . . . . . . . . . . . . . . 15 System Block Diagram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Black Body Radiation Curve . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 PIR Unit main( ) Flowchart . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 PIR Analog Circuit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 Delta Sigma Circuit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .25 Power Supply . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .28 Last 64-Byte Block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 38-kHz Timing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .37 Timer Channel 0 Capture Interrupt for PIR Unit Flowchart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39 Infrared Communications Timing . . . . . . . . . . . . . . . . . . . . . . . 40 IR Transmitter Circuit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 IR Receiver Circuit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Button Assignments on PCB . . . . . . . . . . . . . . . . . . . . . . . . . . 46 REMOTE Control Unit Top Level Functionality Flowchart . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 LCD Connections to MC68HC908GP32. . . . . . . . . . . . . . . . . . 53 LCD Screen Functional Flowchart . . . . . . . . . . . . . . . . . . . . . . 54 REMOTE Control Unit Button Read Flowchart. . . . . . . . . . . . . 56 Button Press to `button_pattern' Correlation. . . . . . . . . . . . . . .57 Button Connections . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .58 REMOTE Button Algorithm Flowchart . . . . . . . . . . . . . . . . . . .59 LCD Contrast Adjust Using Digital Potentiometer . . . . . . . . . . . . . . . . . . . . . . . . . 62 Passive Infrared (PIR) Unit MOTOROLA List of Figures and Tables For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 13 Freescale Semiconductor, Inc. List of Figures and Tables Figure 4-10 4-11 5-1 6-1 Title Page Real-Time Clock, Dallas Semiconductor DS1307 Connections. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 MC68HC908GP32 Monitor Mode Connections . . . . . . . . . . . . 72 MC68HC908GP32 PLL Connections . . . . . . . . . . . . . . . . . . . .76 IDEA Loaded with the REMOTE Unit Project . . . . . . . . . . . . . . 86 Typical Analog PIR Response . . . . . . . . . . . . . . . . . . . . . . . . . 88 Typical Delta Sigma PIR Response . . . . . . . . . . . . . . . . . . . . . 88 Fresnel Lens Geometry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 PCB/Lens Connection Angle . . . . . . . . . . . . . . . . . . . . . . . . . . 92 Delta Sigma PIR Schematic . . . . . . . . . . . . . . . . . . . . . . . . . . . 94 Analog PIR Schematic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 PIR Detector Development Board . . . . . . . . . . . . . . . . . . . . . . 98 REMOTE Control Development Board . . . . . . . . . . . . . . . . . . . 99 MC68HC908GP32 Programmer Circuit . . . . . . . . . . . . . . . . . 102 Freescale Semiconductor, Inc... 7-1 7-2 A-1 A-2 B-1 B-2 C-1 C-2 D-1 Table 5-1 Title Page Numeric Example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Designer Reference Manual 14 List of Figures and Tables For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- Passive Infrared (PIR) Unit Section 1. General Description 1.1 Contents 1.2 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Design Overview. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Black Body Principles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 Freescale Semiconductor, Inc... 1.3 1.4 1.2 Introduction This document details the hardware and software required for a fully functional passive infrared (PIR) sensor with an associated REMOTE control unit. The REMOTE control unit adjusts key algorithm detection parameters which are stored in the MC68HC908JK1/3 FLASH memory area. PIR M A OL OR OT A SH FL Figure 1-1. PIR Sensor with REMOTE Control Unit Passive Infrared (PIR) Unit MOTOROLA General Description For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 15 Freescale Semiconductor, Inc. General Description The main purpose of this document is to demonstrate the ability of the MC68HC908JK1/3 to program its own FLASH memory, effectively using this FLASH memory as a nonvolatile data store. The PIR is analyzed first with respect to its main features, followed by the two intruder detection algorithms. Motorola FLASH programming is then studied, with particular reference to self programming. The REMOTE control unit is analyzed in a manner similar to the PIR unit. Finally, the accompanying Windows(R) program is analyzed. Freescale Semiconductor, Inc... Throughout the document, references are made to source code files which can be found in Appendix E. PIR Source Code Files and Appendix F. REMOTE Source Code Files. For those viewing this document in .pdf format, these files can be accessed by clicking on the appropriate hyperlink reference. Some text areas have in-line source code extracts to highlight a particular point. Included in this reference design are all C source code files and circuit schematics, and a Windows(R) 95/98/NT program is available from both Motorola and ATEECC Web sites. A development board is also available from ATEECC, which utilizes the hardware and software detailed in this document. In addition, the development board provides hardware and software for MC68HC908GP32CP device programming. 1.3 Design Overview As previously mentioned, a key point of this document is to demonstrate the ability of the MC68HC908JK1/3 to program a FLASH row while in normal operation (user mode). This feature negates the requirement for external EEPROM storage and, consequently, can help reduce system costs. Windows is a registered trademark of Mircrosoft in the U.S. and other countries. Designer Reference Manual 16 General Description For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. General Description Design Overview To maximize design flexibility, two intruder detect event algorithms are incorporated into this application. These algorithms are jumper selectable on the development board at startup. * The first method uses the 8-bit analog convertor to read the amplified sensor output, which is stored into a buffer for pattern analysis. The second method uses a modified Delta Sigma approach, allowing adjustable resolution (varying acquisition times). * Freescale Semiconductor, Inc... The system block diagram is shown in Figure 1-2. PIR SENSOR INPUT PC SERIAL DATA (FOR DEBUG ONLY) PC SERIAL CONNECT FOR RTC UPDATE DIGIPOT CONTROL FOR LCD PIR SENSOR UNIT MC68HC908JK1/3 IR COMMS REMOTE CONTROL UNIT MC68HC908GP32 INTRUDER DETECT OUTPUT/LED USER BUTTON INTERFACE LCD OUTPUT Figure 1-2. System Block Diagram The PIR sensor is mounted behind a Fresnel lens. The output signal from the sensor is amplified and conditioned by two elements of an operational amplifier, before being connected directly to an analog-to-digital (A/D) channel of the microcontroller (MCU) which is the conventional analog approach. Alternatively, it may be AC coupled to the input of the microcontroller via an R/C network which forms the basis for the alternative Delta Sigma method of detection. The intruder detect output is a signal that is used to indicate to the PIR units parent system that a valid intruder event has been detected. In this application, a light-emitting diode (LED) is used to indicate an alarm condition. Normally, this is an alarm trigger device, such as a relay, transistor, etc. Passive Infrared (PIR) Unit MOTOROLA General Description For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 17 Freescale Semiconductor, Inc. General Description The dotted line representing the PC serial data stream used for debugging purposes, in the final product this code would not be included. The serial data contains the real-time sensor value and parameter information. Both methods (analog/Delta Sigma) output their appropriate sensor value, giving vital feedback to the run time behavior of the sensor and allowing immediate feedback on algorithm parameter adjustment. The REMOTE unit allows a user to adjust key detection parameters, allowing the user to quickly adjust and test. Five parameters can be adjusted; three pertain to the analog detection method and the remaining two to the Delta Sigma detection method. Freescale Semiconductor, Inc... 1.4 Black Body Principles The radiation emitted from a black body at a temperature of 300 K is predominantly in the region of 7 m to 14 m, peaking at around 9.5 m. Research has shown that this value is modified to around 8.5 m when the black body is moving against a different background temperature. BLACK BODY ENERGY RADIATION CURVE FOR 300 K 3.5 RADIATION ENERGY W.cm-2 .m-1 (x 10-3) 3.0 2.5 2.0 1.5 1.0 0.5 0 0 10 WAVE LENGTH (m) 20 30 Figure 1-3. Black Body Radiation Curve Designer Reference Manual 18 General Description For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- Passive Infrared (PIR) Unit Section 2. Passive Infrared (PIR) Sensor Unit 2.1 Contents 2.2 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 Freescale Semiconductor, Inc... 2.3 2.4 8-Bit Analog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 2.4.1 Analog Intruder Detection Method . . . . . . . . . . . . . . . . . . . . 22 2.4.2 Analog Circuit Description . . . . . . . . . . . . . . . . . . . . . . . . . . 23 2.5 Delta Sigma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 2.5.1 Delta Sigma Intruder Detection Method . . . . . . . . . . . . . . . . 24 2.5.2 Delta Sigma Operation . . . . . . . . . . . . . . . . . . . . . . . . . . . . .26 2.6 PIR Software Files . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 2.6.1 On-Board MC68HC908JK1/MC68HC908JK3 20-Pin DIL Programmer . . . . . . . . . . . . . . . . . . . . . . . . . 28 2.6.2 Security Failure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 2.6.3 Motorola FLASH Read-Only Memory (ROM) . . . . . . . . . . . . 32 2.6.4 PIR Parameter FLASH Programming . . . . . . . . . . . . . . . . . 33 2.2 Introduction Pyrolytic sensors respond to movement due to a change in the radiation incident upon them. They are designed to be most sensitive to the wavelength described in Figure 1-3. Black Body Radiation Curve. A key component of the passive infrared (PIR) sensor unit is the Fresnel lens. This gives the PIR the ability to respond to radiation from a wider angle of positions as the lens effectively focuses the incident radiation to produce a series of "peaks" as an emitting body moves across the path of the lens. Passive Infrared (PIR) Unit MOTOROLA Passive Infrared (PIR) Sensor Unit For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 19 Freescale Semiconductor, Inc. Passive Infrared (PIR) Sensor Unit Using a low-cost microcontroller (MCU) like the MC68HC908JK1/3 has many advantages compared to an analog sensor circuit since the MCU can apply real-time intelligence to the sensor data it is receiving. This intelligence forms the heart of the intruder detection algorithm; the advantage is increased by the ability of the user to modify key algorithm parameters, which are stored in FLASH memory. The FLASH memory parameters are adjusted by 2-way infrared communications using a REMOTE unit. The use of an MCU also provides the designer with an alternative method of sensor amplification, which employs considerably fewer components than the op-amp approach. Freescale Semiconductor, Inc... 2.3 Features Features of the PIR include: * * * * * Infrared (IR) communications with 38 kHz tx being bit bashed and rx via the timer capture interrupt RS232 tx communications, bit bashed at 38,400 bit rate FLASH self-erase/program/verification using Motorola monitor routines Analog initialization/read Intruder detect using analog buffer scan or Delta Sigma algorithms Figure 2-1 illustrates the top level program flow for the PIR unit, the major decision to be made initially is the required method of analysis. This may be either an 8-bit analog read or a Delta Sigma analysis. The following text describes in detail the processes involved in each method. Designer Reference Manual 20 Passive Infrared (PIR) Sensor Unit For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Passive Infrared (PIR) Sensor Unit Features START MICRO INITIALIZATION A2D A2D OR DELTA SIGMA DELTA SIGMA Freescale Semiconductor, Inc... A2D READ/BUFFER BUILD DELTA SIGMA DEBUG: SEND NEW VALUE TO PC DEBUG: SEND NEW DATA VALUE TO PC BUFFER ANALYSIS SIGNAL ON DETECT VALUE ANALYSIS SIGNAL ON DETECT IR COMMS CHECK IR COMMS CHECK N FLASH PROGRAM Y SELF PROGRAM N IR RX COMMS VIA TIMER CHANNEL 0 INTERRUPT IN CAPTURE MODE MAIN() TIMING SYNCHRONIZED VIA TIMER OVERFLOW INTERRUPT Figure 2-1. PIR Unit main( ) Flowchart Passive Infrared (PIR) Unit MOTOROLA Passive Infrared (PIR) Sensor Unit For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 21 Freescale Semiconductor, Inc. Passive Infrared (PIR) Sensor Unit 2.4 8-Bit Analog The analog intruder detection method and the analog circuit are described in the following subsections. 2.4.1 Analog Intruder Detection Method One of the most important factors to consider when designing intruder alarm systems is that they should offer good sensitivity combined with a high immunity to false alarms. Pyrolytic sensors used in PIR alarm systems deliver a very low amplitude output, which is proportional to changes in incident infrared radiation falling on them. Traditionally, a multi-stage amplification has been used to condition the sensor output to provide a usable output signal. A typical example is shown in Figure 2-2. Freescale Semiconductor, Inc... GAIN/BANDWIDTH ADJUST VDD PIR SENSOR + OUTPUT - + + DC RESTORATION SET MID-POINT POTENTIAL OUTPUT BUFFER SOURCE LOAD RESISTOR VSS Figure 2-2. PIR Analog Circuit Designer Reference Manual 22 Passive Infrared (PIR) Sensor Unit For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Passive Infrared (PIR) Sensor Unit 8-Bit Analog 2.4.2 Analog Circuit Description The sensor output is connected in a source follower configuration and directly coupled to the non-inverting input of the first stage of amplification. The combined frequency response of the amplifiers provides a bandwidth of around 4.7 Hz, centered at approximately 0.5 Hz. This allows good detection rates to be achieved for human targets moving at speeds between 0.2 ms to 0.6 ms while attenuating the sources of noise, likely to cause false alarms. The potential divider chain connected to the non-inverting input of the second stage of amplification sets the quiescent point to 0.5 * VDD. This allows maximum sensitivity to positive and negative swings from the sensor. The second stage is AC coupled, to allow slow changes of background IR radiation to be ignored. Such changes may occur when central heating radiators warm up or sunshine heats the room. A Fresnel lens is used to collect the IR radiation emitted by the "target" and to focus it onto the sensitive quartz window of the sensor. The lens has the dual function of concentrating the very low levels of radiation, thus producing a greater output from the sensor, and it also produces velocity information by giving a series of peaks as the "target" moves through the multiple zones. The choice of lens depends on the particular application. Some lenses have multiple zones focused at different angles, which produce different waveforms depending on the height of the target, in addition to its velocity. This information can be used to discriminate between human targets and animals, which could otherwise cause false alarms. The software algorithms in this application have been optimized for a single-plane "curtain" lens. The conditioned sensor output voltage is connected to PTB.4 (PTB bit 4) and the analog read occurs at a rate which is a multiple of the 10 ms main() loop. This multiple is adjustable and is one of the programmable FLASH analog method parameters. With every main() loop iteration pir\a2d.c\A2DCheck() is executed; if the number of main() loop scans matches pir_parameters.main_loop_count, then the analog pin PTB.4 is read with pir\a2d.c\ReadA2D() (see [PIR:a2d.c]). This function performs a thirty two times read and returns the average result which is then stored in pir_buffer[] at the appropriate location using: *pir_buffer_ptr = ReadA2D(CHANNEL4); Passive Infrared (PIR) Unit MOTOROLA Passive Infrared (PIR) Sensor Unit For More Information On This Product, Go to: www.freescale.com Freescale Semiconductor, Inc... // from "a2d.c" Designer Reference Manual 23 Freescale Semiconductor, Inc. Passive Infrared (PIR) Sensor Unit After every analog read/store operation a magnitude difference test is performed with the previous data value. If this difference is greater than or equal to pir_param.difference_band, then pir_buffer is cleared and the current and previous values are stored at locations [0] and [1] respectively. Subsequent values are stored and when pir_buffer is full a call to pir\analyse.c->Analyse_PIR_Buffer() (see [PIR:analyse.c]) is performed and a detect event is scanned for. A detect event has two parameters: Freescale Semiconductor, Inc... 1. pir_param.difference_band -- This is the difference between the buffer nearest neighbor data that will be accepted as an intruder trigger. 2. pir_params.trigger_count -- This is the number of intruder triggers contained in the same buffer which must occur before an intruder event is accepted. The "difference band" value is analogous to the rate of change of the analog signal. If a signal were changing rapidly, then the buffer contents would contain values that were increasing/decreasing by large amounts. If these changes were happening on adjacent buffer cells, this would cause a trigger event. If this change occurred in a single buffer capture and if the number of trigger events was greater than the trigger_count variable, then an intruder event would be signalled. 2.5 Delta Sigma The Delta Sigma intruder detection method and operation are described in the following subsections. 2.5.1 Delta Sigma Intruder Detection Method This method of signal detection uses considerably fewer components than the previously described method, giving benefits of cost reduction and reliability. The principle of operation is based on a modified version of the Delta Sigma analog-to-digital (A/D) converter. The hardware overhead is just Designer Reference Manual 24 Passive Infrared (PIR) Sensor Unit For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Passive Infrared (PIR) Sensor Unit Delta Sigma Freescale Semiconductor, Inc... three resistors and two capacitors. The microcontroller is then used to control the charge/discharge of the integration capacitor. This method of A/D conversion is well known, but normally requires either an external comparator or a microcontroller with an on-board comparator. In this application, one of the on-board 8-bit A/D converters is used as a comparator, with the trip level being specified in software. The absolute conversion accuracy is dependant on a number of factors, including the input leakage current of the analog sense pin and the fast charge pin in its quiescent state. Leakage current in the integration capacitor will also cause errors in accuracy due to asymmetric charge/discharge conditions. In this application, however, it is the difference in consecutive A/D values which will cause an event trigger. As a consequence small changes in absolute accuracy will not affect the overall result, making this method a good choice for this application. The effective amplification which can be achieved is dependent on the ratio of two resistors. In this application, the output of the pyrolytic sensor is capacitively coupled to the integrator by a 33-F capacitor. This value was selected to produce similar characteristics to the method using an operational amplifier. As the series capacitor provides DC isolation, a high value may be selected for the charge/discharge resistor without causing the comparator voltage to be "loaded" by the source resistance of the sensor. An optional resistor, supplied from a spare port pin on the microcontroller, has also been added to this circuit. Its function is to provide a fast charge path for the coupling capacitor, allowing the circuit to stabilize quickly after the initial application of power to the circuit. See Figure 2-3. INITIAL FAST CHARGE DIGITAL I/O ANALOG I/P RCD DIGITAL O/P CINT CHARGE/DISCHARGE vSS RIn CIn TO PYROLYTIC DETECTOR Figure 2-3. Delta Sigma Circuit Passive Infrared (PIR) Unit MOTOROLA Passive Infrared (PIR) Sensor Unit For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 25 Freescale Semiconductor, Inc. Passive Infrared (PIR) Sensor Unit 2.5.2 Delta Sigma Operation Assuming a steady quiescent state with no sensor activity, the integration capacitor CINT is charged from a digital output pin on the microcontroller via resistor RCD. The voltage level across CINT is monitored by the A/D input. Two software counters are used. One is a loop counter which determines the number of `bits' to be converted. The second serves as a data value for the conversion. At the start of a conversion, they are both set to 0. The loop time multiplied by the number of bits required determines the time for each full conversion. During each software loop of the conversion, a decision is made to increment the data counter or not. If the A/D value is equal to or greater than the trip value, the counter is incremented and the output port is made a logic 0 (CINT discharge). Conversely, if it is less than the trip value, then the data counter is not incremented and the output port is made logic 1 (CINT charge). With no input from the sensor, therefore, CINT will be repeatedly charged and discharged, and the potential across it will be maintained at the A/D trip level. In this application, an A/D value of 128 is used (corresponding to 0.5 * VREF). The final binary output of the converter will also correspond to 0.5 of the maximum converter value. If the sensor voltage now increases due to a target detection, then CINT will be charged by RIn, in addition to RCD. The potential across CINT will rise causing the A/D trip value to be exceeded and, therefore, the data counter will be incremented on successive loops of the converter until it is discharged below the trip level by RCD. If the reverse condition occurs, and CINT is discharged by the sensor output falling below the quiescent level, then the data counter will not be incremented, and the final converted number will be greater than the quiescent value. The effective voltage amplification of the circuit is proportional to the ratio of RCD to RINT. Prototype testing has indicated that reliable operation can be achieved with values of 10 M for RCD and 10 k for RIn, giving possible voltage gains of up to 60 dB. Freescale Semiconductor, Inc... Designer Reference Manual 26 Passive Infrared (PIR) Unit Passive Infrared (PIR) Sensor Unit For More Information On This Product, Go to: www.freescale.com MOTOROLA Freescale Semiconductor, Inc. Passive Infrared (PIR) Sensor Unit PIR Software Files With every main() loop iteration executed pir\deltasig.c\DeltaSigma(), this calls pir\deltasig.c\BuildDeltaSigma() to produce the Delta Sigma value (see [PIR:deltasig.c]). This value is then compared to the previous value and an intruder event is signalled if the difference is greater than delta_sig_event. With the Delta sigma detection method there are two FLASH based adjustable parameters: 1. delta_sig_event, this is the difference from previous reading to signal an intruder event Freescale Semiconductor, Inc... 2. delta_sig_bit, this is the Delta Sigma resolution applied to the incoming PIR sensor voltage The infrared communications are still active with this method but are slightly less responsive, the principle of the Delta Sigma method requires symmetrical capacitor charge/discharge times requiring interrupts to be disabled during pir\deltasig.c\BuildDeltaSigma() (see [PIR:deltasig.c]). After pir\deltasig.c\DeltaSigma() has completed interrupts are re-enabled to service any pending infrared communications. 2.6 PIR Software Files This software has been written using the Cosmic `C' Cross Compiler. All files for the PIR unit are listed here. * * Assembler: [PIR:crts.s], [PIR:ireg.s], [PIR:lreg.s] C Source: [PIR:a2d.c], [PIR:analyse.c], [PIR:data.c], [PIR:datasort.c], [PIR:delay.c], [PIR:deltasig.c], [PIR:flashprg.c], [PIR:interrup.c], [PIR:mon_data.c], [PIR:serial.c], [PIR:startup.c], and [PIR:vectors.c] Include Files (in addition to the C source matching header): [PIR:declared.h], [PIR:define.h], [REMOTE:extern.h], and [PIR:jk13&jl3.h] * Passive Infrared (PIR) Unit MOTOROLA Passive Infrared (PIR) Sensor Unit For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 27 Freescale Semiconductor, Inc. Passive Infrared (PIR) Sensor Unit * Compile/Link/Make: [PIR:cc.bat], [PIR:link08.bat], [PIR:make08.bat], [PIR:config.dat], and [PIR:jk.lkf] 2.6.1 On-Board MC68HC908JK1/MC68HC908JK3 20-Pin DIL Programmer The programming hardware is compatible with the ICS08JLZ software from P&E Microcomputer Systems, Inc. The software used is ics08jlz_version_1_33.exe, this software is available from their web site at: http://www.pemicro.com The power supply unit uses two fixed-voltage 3-terminal regulators, which allows a wide range of input voltages to be used. Referring to Figure 2-4, an LM7805 regulator provides the stabilized +5 Vdc for the microcontroller and peripheral devices. An LM7808 and is used in conjunction with a series diode D2 in the common leg, to provide the necessary +8.6 V high voltage for the programmer, and also provides the power supply to the satellite main board for development purposes. A series diode in the input supply line D1, provides protection against accidental reverse polarity of the unregulated input supply. C1 provides decoupling and smoothing of the unregulated DC supply. The parallel combination of C2 and C3 provide high and low frequency decoupling to the +5-V supply. C4 and C5 provide a similar function for the +8.6-V supply. Freescale Semiconductor, Inc... +12-15 Vdc LM7805 +5 V LM7808 +8.6 V D1 C1 PROTECTION DIODE 0V VSS C2 C3 D2 C4 C5 Figure 2-4. Power Supply Designer Reference Manual 28 Passive Infrared (PIR) Sensor Unit For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Passive Infrared (PIR) Sensor Unit PIR Software Files Within the P&E development environment is prog08sz.exe, it is this software that interfaces to the programming socket. Programming procedure: NOTE: The PIR MC68HC908JK1/3 programming is in-circuit, there is no seperate programming socket. 1. Ensure that the VDD switch is Off. 2. Ensure that the 20-pin socket is occupied. Freescale Semiconductor, Inc... 3. Ensure that a standard 9-way RS232 cable is connected from the PC to the development board's Programmer RS232 connector. 4. Set the Osc Select switch to Program. 5. Set VDD switch to On. 6. Invoke c:\pemicro\ics08jlz\prog08sz.exe (assuming default installation directory). 7. After programming is complete, set the VDD switch to Off and move the Osc Select switch from Program to Run. If the socketed MC68HC908JK1/3 passes the security test and the RS232 comms link is working then you will see the following screen. It is asking for a programming algorithm to be entered. Passive Infrared (PIR) Unit MOTOROLA Passive Infrared (PIR) Sensor Unit For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 29 Freescale Semiconductor, Inc. Passive Infrared (PIR) Sensor Unit Freescale Semiconductor, Inc... If there is a problem you will see: Designer Reference Manual 30 Passive Infrared (PIR) Sensor Unit For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Passive Infrared (PIR) Sensor Unit PIR Software Files The above screen typically occurs if the hardware RS232/power connections are wrong or if the socketed MC68HC908JK1/3 fails the security test. 2.6.2 Security Failure The security check is a mechanism to prevent unauthorized access to the MC68HC908JK1/3 FLASH array. The security check centres around the interrupt vector address values at $fff6-$fffd. Before access is granted the PC program must transmit eight bytes that need to agree with those resident in the microcontroller. If the 8-byte comparison fails then FLASH access is prevented, even though monitor mode can still be entered, before you can reprogram the MC68HC908JK1/3 or view its contents you will need to completely erase it. The program will remember the last S19 file programmed into a MC68HC908JK1/3 and use that file to pass the security test on next invocation. Please note, if the MC68HC908JK1/3 fails the security test, the device must be powered down before a retry can be attempted. This power cycle will take the form: 1. VDD switch to Off 2. Wait for at least two seconds. 3. VDD switch to On The program c:\pemicro\ics08jlz\prog08sz.exe can now be retried. Freescale Semiconductor, Inc... Passive Infrared (PIR) Unit MOTOROLA Designer Reference Manual Passive Infrared (PIR) Sensor Unit For More Information On This Product, Go to: www.freescale.com 31 Freescale Semiconductor, Inc. Passive Infrared (PIR) Sensor Unit 2.6.3 Motorola FLASH Read-Only Memory (ROM) The PIR unit is based upon the MC68HC908JK1/3, these are 1536-bytes/4096-byte FLASH microcontrollers, the `9' in the part number denotes the part as being a FLASH device. The minimum size FLASH memory that can be erased at one time is 64 bytes and the maximum size FLASH memory that can be programmed at one time is 32 bytes (row). This reference design uses the last 64-byte block of the user code space as a 32-byte nonvolatile data store. This feature alleviates the need for an external memory IC such as an 8-pin 2-wire I2C type. The actual FLASH row programming differs to that of standard Motorola microcontroller electrically erasable programmable read-only memory (EEPROM) programming due to the row program requirement. With standard EEPROM it is necessary to write code that will perform the write/erase on a particular byte by using a call such as WriteEEprom(address, data). This programming sequence may require an erase cycle before the program cycle. Standard Motorola microcontroller EEPROM will require up to 20 ms for an erase/program operation. Using the Motorola FLASH cell, programming takes place in terms of a row. A row is 32 bytes of contiguous memory starting at a $XX00, $XX20, $XX40, $XX60, $XX80, $XXA0, $XXC0 or $XXE0 address. Presently if it is required to program one byte in a row then all bytes in that row must be reprogrammed. The programming time is markedly faster for this FLASH technology compared to standard Motorola EEPROM. The MC68HC908JK1/3 data book specifies a page (64 byte) erase time of 1 ms and a maximum FLASH byte program time of 40 s. Motorola quotes a 2 ms program time for 64 bytes, this is a considerable improvement on the Motorola EEPROM timings. The next consideration is the statement from the MC68HC908JK1, MC68HRC908JK1, MC68HC908JK3, MC68HC908JL3, MC68HRC908JL3 Technical Data, Motorola document order number MC68HC908JL3/H Rev. 1.0 which states: "Programming and erasing of FLASH locations cannot be performed by code being executed from FLASH memory." Designer Reference Manual 32 Passive Infrared (PIR) Sensor Unit For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc... Freescale Semiconductor, Inc. Passive Infrared (PIR) Sensor Unit PIR Software Files To program a FLASH row, this means software cannot be executing from FLASH ROM, and random-access memory (RAM) and monitor ROM would be acceptable. Due to the limited RAM (128 bytes) space in these devices, it would be difficult to have erase, program, and verification code in a RAM routine. To assist us, Motorola has provided monitor ROM areas which contain functions which perform the FLASH erasing, programming, and verification of supplied data. These monitor ROM functions use three RAM variables and one RAM data array. These variables are expected to be at a fixed, known memory address. Using MC68HC908 On-Chip FLASH Programming Routines, Motorola document order number AN1831/D, details how details to use these monitor ROM functions. Further detail regarding the usage of these functions and variables is given in 2.6.4 PIR Parameter FLASH Programming. When FLASH programming is to take place, the data to be programmed is organized and pir\flashprg.c->ProgramFlash() (see [PIR:flashprg.c]) is called. This performs the monitor ROM variable initialization and calls the Motorola monitor ROM functions to take care of the FLASH erasing, programming, and verification. If the programming is successful, the PIR detect light-emitting diode (LED) is lit for 250 ms. Freescale Semiconductor, Inc... 2.6.4 PIR Parameter FLASH Programming If a decoded IR command requires a FLASH parameter programming operation, then all (row) FLASH parameter data must be reprogrammed, since single byte programming cannot (presently) be performed. MONITOR_DATA[] is used to store the PIR parameter data. The maximum number of bytes that can be programmed at one time is 32 (a row). NOTE: The address of MONITOR_DATA[0]'is at the address expected by the Motorola monitor functions ($008c). The data space occupied by MONITOR_DATA[] will overwrite run time variables. In normal operation this would be a critical error condition. Passive Infrared (PIR) Unit MOTOROLA Passive Infrared (PIR) Sensor Unit For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 33 Freescale Semiconductor, Inc. Passive Infrared (PIR) Sensor Unit In this application, after programming is completed, an endless loop is entered until the internal watchdog times out. Therefore, the overwriting of previous RAM space is not important. If your application requires a FLASH program operation without a reset, then you will need to ensure that there is enough RAM space for all variables. You might have to reduce the number of FLASH programmable variables by reducing the size of `MONITOR_DATA[]' which is 32 in this design. It would still be required that the variables used by the Motorola monitor functions remain at their fixed addresses. All other user program variables will need to fit around these monitor ones. You would then need to remove the `-v' (see the code example) switch from the linker command file which instructs the compiler not to perform overlap checks. Once the data loading is complete within pir\datasort.c->Decode_IR_Data() (see [PIR:flashprg.c]), the next task is to initialize the variables used by the monitor ROM functions. The actual C code that will perform the FLASH PIR parameter programming resides in pir\flashprg.c->ProgramFlash() (see [PIR:flashprg.c]). This function is called from pir\datasort->IRCommsCheck() (see [PIR:datasort.c]). An extract is shown here: if ( Decode_IR_Data() ) // is FLASH programming required? { //////////////////////////////////////////////////////// // interrupts off and reset the stack pointer as we // // are NOT returning from this function and we will // // be performing calls to the monitor functions // //////////////////////////////////////////////////////// SEI(); RSP(); ProgramFlash(); } // RESET vector fetched at the end of this function Freescale Semiconductor, Inc... Designer Reference Manual 34 Passive Infrared (PIR) Unit Passive Infrared (PIR) Sensor Unit For More Information On This Product, Go to: www.freescale.com MOTOROLA Freescale Semiconductor, Inc. Passive Infrared (PIR) Sensor Unit PIR Software Files pir\flashprg.c->ProgramFlash() (see [PIR:flashprg.c]) is shown here. void ProgramFlash( void ) { unsigned char ii; ServiceWatchDog(); FLBPR.reg = 0xff; MONITOR_CPUSPD = SPDSET; MONITOR_CTRLBYT = 0x00; MONITOR_LADDR = FLASH_DATA_END; LED = 0; LED_DDR = 1; _asm("ldhx ERARNGE(); _asm("ldhx PRGRNGE(); _asm("lda #$fbc8"); //////////////////////////////////////////// // defensive measure // // no FLASH protection // // 1(MHz) * 4 == 4 // // page erase // // data stored @ $FBC0/DF (32 bytes) // // led off... // // ...and an output // // // // any address in the range $fbc0 - $fbff // // to erase FLASH page, Motorola monitor // // rom call // // first address in H:X to write to // // program FLASH row, Motorola monitor // // rom call // // force ACC to non zero to ensure that // // newly read data is placed back in the // // data array and not to the monitor mode // // comm port. // // first address in H:X to verify FLASH // // programming, Motorola monitor rom call // // // // carry bit set if verify is successful // // if so light led for 0.25s // // load 0.25s counter // // // // // // // // led on // // // // Fop*4 (1MHz) // // 2000/12 // // 2ms delay...Motorola monitor rom call // // repeat // // // // // // led off // // all done! wait for watchdog reset... // //////////////////////////////////////////// Freescale Semiconductor, Inc... #$fbc0"); #$ff"); _asm("ldhx RDVRRNG(); #$fbc0"); if ( carry() ) { ii = 125; do { ServiceWatchDog(); LED = 1; _asm("lda #4" ); _asm("ldx #167"); DELNUS(); } while ( --ii ); } LED = 0; while (1); } // ProgramFlash() Passive Infrared (PIR) Unit MOTOROLA Passive Infrared (PIR) Sensor Unit For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 35 Freescale Semiconductor, Inc. Passive Infrared (PIR) Sensor Unit The PIR parameters are stored at the beginning of the last 64-byte block which is $FBC0. OPERATIONAL CODE $FBC0 32 ADJUSTABLE PIR PARAMETERS Freescale Semiconductor, Inc... 64 BYTES END OF USER CODE SPACE $FBFF 32 BYTES UNUSED Figure 2-5. Last 64-Byte Block The variables: MONITOR_CTRLBYT, MONITOR_CPUSPD, MONITOR_LADDR, and MONITOR_DATA[32] are specific to the Motorola monitor ROM calls and are fixed addresses $0088, $0089, $008A, and $008B (16-bit variable), respectively. The data used for programming is declared as a 32-byte buffer (for instance, MONITOR_DATA[32] is fixed at address $008c). These variables are declared in [PIR:mon_data.c] and are fully documented in AN1831/D. Their addresses are fixed by the following entry in the linker command file [PIR:jk.lkf]: +seg .ubsct -b 0x88 -v -n MONITOR_RAM mon_data.o NOTE: The -v switch, instructs the linker not to report overlap errors for this segment. Designer Reference Manual 36 Passive Infrared (PIR) Sensor Unit For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- Passive Infrared (PIR) Unit Section 3. Infrared Communications Protocol 3.1 Contents 3.2 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Infrared Hardware Description . . . . . . . . . . . . . . . . . . . . . . . . . 41 IR Receiver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Freescale Semiconductor, Inc... 3.3 3.4 3.2 Introduction The passive infrared (PIR) detector uses an infrared (IR) protocol to communicate and allow calibration for sensitivity parameters. The IR communications is 2-way half duplex for example, the PIR detector can receive and transmit messages to the REMOTE control. The REMOTE unit is the master device as it initiates all communications. The infrared communications is based on a pulse-coded modulation (PCM) 38-kHz signal with a 50 percent duty cycle. The square wave shown in Figure 3-1 needs to be generated. 13 s 26 s 13 s Figure 3-1. 38-kHz Timing Passive Infrared (PIR) Unit MOTOROLA Infrared Communications Protocol For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 37 Freescale Semiconductor, Inc. Infrared Communications Protocol The 38 kHz is produced on PTD.7, the timing is achieved using in-line `nop' delays, the C routines that produce the digital 1 and 0 levels are pir\serial.c->Send_0( ) and pir\serial.c->Send_1() (see [PIR:serial.c]). Figure 3-1 shows the 38-kHz timing to generate a logic 0/1 also illustrated is the infrared sensor output on receipt of the generated bit value. Since there are infrared transmission and receive features, the infrared sensor will receive what it is transmitting via PTD.4. To prevent decoding of this data, the capture interrupt is disabled during an infrared transmission. Freescale Semiconductor, Inc... NOTE: Figure 3-1 assumes no timing delay. The incoming infrared sensor output is fed into the PIR unit's timer channel 0 pin (PTD.4), and the bit logic level determination is done in the timer channel 0 interrupt routine, pir\interrupt.c->TIMERCHANNEL0() (see [PIR:interrup.c]). From Figure 3-1 a bit value is determined from the time between a rising edge and the corresponding falling edge. The pulse width of a logic 0 is approximately 700 s whereas that of a logic 1 is three times that at approximately 2.1 ms. A flowchart depicting the IR interrupt code sequence is shown in Figure 3-2. Designer Reference Manual 38 Infrared Communications Protocol For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Infrared Communications Protocol Introduction +ve EDGE +ve OR -ve CAPTURE EDGE ON PTD.4 -ve EDGE START TIME TIME STAMP +ve IR EDGE STOP TIME TIME STAMP -ve IR EDGE CALCULATE IR PULSE WIDTH Freescale Semiconductor, Inc... Y START PULSE? N INITIALIZE IR DATA N NOISE DETECTION? Y BUILD DATA BLOCK WHEN COMPLETE, ANALYZE IN main() END TIMER CHANNEL 0 INTERRUPT Figure 3-2. Timer Channel 0 Capture Interrupt for PIR Unit Flowchart Passive Infrared (PIR) Unit MOTOROLA Infrared Communications Protocol For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 39 Freescale Semiconductor, Inc. Infrared Communications Protocol The infrared data is sent in a packet structure similar to that for the PC RS232 communications. The packet structure consists of: START PULSE BLOCK LENGTH BLOCK TITLE DATA BYTE 1 DATA BYTE 2 DATA BYTE n CHECKSUM HI CHECKSUM LO STOP PULSE START PULSE BLOCK LENGTH A 4-ms synchronizing waveform Number of bytes in the packet, excluding the checksum Byte representing what type of data packet Data bytes BLOCK LENGTH + BLOCK TITLE + DATA BYTE1 + DATA BYTE2 + ...+ DATA BYTE n. Freescale Semiconductor, Inc... BLOCK TITLE DATA CHECKSUM HI/LO Bytes refer to the 16-bit sum of: STOP PULSE Final negative edge for pulse width calculations LOGIC 1 AS TRANSMITTED BY MICRO LOGIC 0 AS TRANSMITTED BY MICRO 700 s 700 s LOGIC 0 AS RECEIVED BY MICRO 700 s 2.1 ms (3*700 s) LOGIC 1 AS RECEIVED BY MICRO 700 s 700 s KEY: REPRESENTS A 38-kHz DATA BURST 700 s 2.1 ms (3*700 s) Figure 3-3. Infrared Communications Timing Designer Reference Manual 40 Infrared Communications Protocol For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Infrared Communications Protocol Infrared Hardware Description 3.3 Infrared Hardware Description The IR data is transmitted via a power transmission diode with a transmissive wavelength, which matches the receiver. The receiver used in this reference design has a spectral response which peaks at 1000 nm. The operating range of the transmitter is proportional to the current used to drive the diode. The current is set by the value of RCL, which is 10R on the development board, giving a peak operating current in the order of 350 mA and a transmissive distance of approximately 3 metres. Transistors Q1 and Q2 provide the high current gain necessary to drive the infrared transmitter light-emitting diode (LED). Q2 must have a suitable peak collector rating for the current set by RCL. The data is produced and modulated by the microcontroller (MCU) at a frequency of 38 kHz. This frequency was selected to enable the use of industry standard, low-cost receivers, commonly used in video recorders, TVs, etc. Adequate decoupling of the supply lines is essential if the IR data transmission circuitry is employed, as the peak current through the IR diode is high when data is being transmitted. Therefore, it is important to keep the PCB traces as short as possible between the supply pin of the regulator and the IR diode. This is also true of the return 0-V line; otherwise, "ground lift" may occur, causing spurious data loss, reset or other problems. It is suggested that the power supply and return traces to the IR transmitter are separated from the traces supplying the microcontroller and other peripherals. The circuit diagram described here is shown in Figure 3-4. Freescale Semiconductor, Inc... Passive Infrared (PIR) Unit MOTOROLA Designer Reference Manual Infrared Communications Protocol For More Information On This Product, Go to: www.freescale.com 41 Freescale Semiconductor, Inc. Infrared Communications Protocol VDD RS INFRARED EMITTER RS DATA INPUT Q1 Q2 Freescale Semiconductor, Inc... RCL VSS Figure 3-4. IR Transmitter Circuit 3.4 IR Receiver The 38-kHz modulated IR data transmitted by the main PIR board is received and demodulated by IR1. This is a self-contained IR detector, amplifier, and demodulator unit, which recovers the original data in a form compatible with the microcontroller input. The device used in development is a GP1U28Q and only requires the provision of +5 V and 0 V to operate. VDD IR 38-kHz MODULATED CARRIER DEMODULATED DATA VSS Figure 3-5. IR Receiver Circuit Designer Reference Manual 42 Infrared Communications Protocol For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- Passive Infrared (PIR) Unit Section 4. REMOTE Control Unit 4.1 Contents 4.2 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Password Protection. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Hardware Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Button Designations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .45 Pin Assignments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Freescale Semiconductor, Inc... 4.3 4.4 4.5 4.6 4.7 Program Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .49 4.7.1 Run Time LCD Screen Flow. . . . . . . . . . . . . . . . . . . . . . . . . 50 4.7.2 Adjustable FLASH Parameters . . . . . . . . . . . . . . . . . . . . . . 52 4.7.3 Button Press Determination . . . . . . . . . . . . . . . . . . . . . . . . . 55 4.7.4 Button Debouncing and Functional Decode. . . . . . . . . . . . . 58 4.8 LCD Text Writing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 4.8.1 LCD Contrast Adjust. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 4.8.2 Real-time Clock (RTC) . . . . . . . . . . . . . . . . . . . . . . . . . . . . .63 4.8.3 I2C For The Real-time Clock . . . . . . . . . . . . . . . . . . . . . . . .64 4.8.4 Forcing the Real-time Clock (RTC) to a Known State . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 4.9 REMOTE Software Files. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 4.9.1 On-Board MC68HC908GP32 40-Pin Dual in-Line Programmer. . . . . . . . . . . . . . . . . . . 68 4.9.2 Security Failure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 4.9.3 Programming Circuit. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Passive Infrared (PIR) Unit MOTOROLA REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 43 Freescale Semiconductor, Inc. REMOTE Control Unit 4.2 Introduction The REMOTE control unit enables the passive infrared (PIR) unit to be programmed with parameter adjustments via half-duplex infrared communications. The REMOTE being the master by virtue that it initiates all communication events. This communications allows the REMOTE to interrogate and command the PIR to reprogram its detection parameters with the REMOTE control unit's adjusted parameters. Freescale Semiconductor, Inc... The parameter to be adjusted is obtained by pressing the associated button (B1/B5). An infrared (IR) communications packet is sent to the PIR unit requesting its current value for that parameter. Once decoded, the received parameter value is displayed on the liquid crystal display (LCD) screen for adjustment via the INC/DEC buttons. When the adjustment is complete the ENTER button is pressed, sending the new required parameter (via IR communication) value back to the PIR unit to replace its current parameter value with this new value. If the reprogramming is successful, the PIR unit will light its detect light-emitting diode (LED) for 250 ms. 4.3 Password Protection A password protection scheme prevents unauthorized use of the REMOTE. This comprises a 5-digit decimal number with 0 to 9 being the range of entries. The 5-digit decimal number provides 99,999 possible passwords. The password is entered using the double function keys giving 0...9. If the password has been correctly entered, the buttons lose their numeric assignments. Designer Reference Manual 44 REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Control Unit Hardware Description 4.4 Hardware Description Although the hardware functionality of this board is biased toward the support of the PIR sensor board, it has been designed to be as generic as possible so that the software may be modified to perform many other functions requiring the transmission and reception of data via a remote infrared link. The circuit diagram may be conveniently divided into functional blocks, most of which may be included or omitted as required for a particular design. This gives designers flexibility to include only the features required for the application. The blocks are: * * * * * * * * * * Power supply unit (PSU) Microcontroller, crystal, and phase-locked loop (PLL) Keyboard Liquid crystal display (LCD) IR data transmit (DTX) IR data receive (DRX) Real-time clock (RTC) Digital potentiometer for LCD contrast adjustment Serial communications to PC (RS232) Stand-alone MC68HC908GP32 programmer Freescale Semiconductor, Inc... 4.5 Button Designations There are provisions for 15 buttons, although not all buttons are used, to implement any additional button functionality. Code will need inserting into the unused case statements in pir\button.c->DecodeButtons()->StandardButtons() (see [REMOTE:button.c]). The layout of the buttons with respect to the printed circuit board (PCB) is shown in Figure 4-1. Passive Infrared (PIR) Unit MOTOROLA REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 45 Freescale Semiconductor, Inc. REMOTE Control Unit B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 B11 B12 B13 B14 B15 Freescale Semiconductor, Inc... Figure 4-1. Button Assignments on PCB The buttons during password entry are assigned as: B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 B11 B12 B13 B14 B15 Insert 1 at the current LCD cursor position Insert 2 at the current LCD cursor position Insert 3 at the current LCD cursor position Insert 4 at the current LCD cursor position Insert 5 at the current LCD cursor position Insert 6 at the current LCD cursor position Insert 7 at the current LCD cursor position Insert 8 at the current LCD cursor position Insert 9 at the current LCD cursor position Insert 0 at the current LCD cursor position Not used Not used Not used Not used ENTER, accept current password for verification Designer Reference Manual 46 REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Control Unit Button Designations After the password has been successfully entered, the buttons then change functionality to: B1 B2 B3 B4 B5 IR command to PIR unit for Delta Sigma event difference value IR command to PIR unit for Delta Sigma bit resolution value IR command to PIR unit for A2D 10-ms loop time value IR command to PIR unit for A2D buffer difference value IR command to PIR unit for A2D trigger count value Force real-time clock (RTC) to Mon 01 Jan 2001 at 00:00:00 Not used Not used Not used Not used Increment current PIR FLASH parameter/LCD contrast Decrement current PIR FLASH parameter/LCD contrast LCD contrast adjust CANCEL, abort current LCD screen and revert back to time of day (TOD) ENTER, accept current LCD value and instruct PIR to reprogram with this value. Freescale Semiconductor, Inc... B6 B7 B8 B9 B10 B11 B12 B13 B14 B15 Passive Infrared (PIR) Unit MOTOROLA REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 47 Freescale Semiconductor, Inc. REMOTE Control Unit 4.6 Pin Assignments The REMOTE software has been written for a MC68HC908GP32CP, the 32 K of user code is approximately 25 percent utilized, and the input/output (I/O) count was the main requirement. The port pin assignments for the REMOTE control unit are: PTA PTA0 PTA1 PTA2 PTA3 PTA4 PTA5 PTA6 PTA7 PTB0 PTB1 PTB2 PTB3 PTB4 PTB5 PTB6 PTB7 PTC0 PTC1 PTC2 PTC3 PTC4 PTD0 PTD1 PTD2 PTD3 PTD4 PTD5 PTE0 PTE1 Row 1 button input Row 2 button input Row 3 button input Row 4 button input Row 5 button input Column 1 button select Column 2 button select Column 3 button select RTC I2C clock RTC I2C data Digipot chip select Digipot up/down Digipot INC LCD RS LCD RW LCD E LCD DATA0 LCD DATA1 LCD DATA2 LCD DATA3 LCD DATA4 LCD DATA5 LCD DATA6 LCD DATA7 IR Comms TX IR Comms RX SPARE RS232 TX RS232 RX Passive Infrared (PIR) Unit REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com MOTOROLA Freescale Semiconductor, Inc... PTB PTC PTD PTE Designer Reference Manual 48 Freescale Semiconductor, Inc. REMOTE Control Unit Program Flow 4.7 Program Flow The software on reset performs preparatory tasks, such as initializing the PTA keyboard interrupt facility, and ensures the LCD screen is off, then it enters stop mode. On recovery from stop mode via any button press, the on-board PLL is initialized for 2.4576-MHz bus operation and the LCD is initialized. STARTUP Freescale Semiconductor, Inc... STOP MODE ERROR MESSAGE ANY BUTTON PRESS RECEIVED PIR PASSWORD Y N NO IR COMMS/ NO PIR PASSWORD PASSWORD NOT ENTERED N CORRECT USER PASSWORD Y PIR PARAMETER ADJUSTMENT VIA BUTTON INTERFACE RTC ADJUSTMENT VIA RS232 Y 300s BUTTON INACTIVITY Figure 4-2. REMOTE Control Unit Top Level Functionality Flowchart Passive Infrared (PIR) Unit MOTOROLA REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 49 Freescale Semiconductor, Inc. REMOTE Control Unit 4.7.1 Run Time LCD Screen Flow The REMOTE control unit's first task is to obtain the PIR password. It requests this from the PIR unit via the half-duplex IR communications. The LCD will show: Transmitting IR comms packets Freescale Semiconductor, Inc... The REMOTE will request this information 40 times (300 ms * 40 = 12 s). If this fails, it can be due to one of two reasons. 1. No received IR communicationsError 1 2. No received passwordError 2 The LCD will show: Error 1 5 No IR Comms [IN] or Error 2 5 No PIR Password These errors are such that the program cannot continue, and error message screens are displayed with a 5 second count down. Upon error timeout, the REMOTE returns to stop mode and the user can retry. If the REMOTE receives and correctly decodes the PIR password, the LCD will show: Enter password: XXXXX The user now has to enter the matching password to that received from the PIR. All fields have to be completed since the expected password is five digits. The ENTER button does not respond until all the initial X characters have been over written. When all X have been over written, Designer Reference Manual 50 REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Control Unit Program Flow the password can be submitted with the cursor on any character. When entering a button (numeric), the LCD cursor moves to the right one position and auto wraps when the fifth password number has been entered. When ready, press ENTER, the REMOTE will now compare the entered password value to that received from the PIR. If a match is found, then the LCD will show these screens for one second and then revert to showing the time of day: Freescale Semiconductor, Inc... Password Accepted! Fri 06 Oct 2000 18:19:20 This is the default viewing mode, for example, time of day (TOD). If the password attempt failed, the LCD will show: Password Rejected! This text will be visible for one second before returning to the password entry screen: Enter password: XXXXX You will iterate around this loop until the password is correctly entered. With the password consisting of five decimal digits, the maximum number of individual retries will be 99,999; to reduce the security risk, the password digit count could be increased. Passive Infrared (PIR) Unit MOTOROLA REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 51 Freescale Semiconductor, Inc. REMOTE Control Unit 4.7.2 Adjustable FLASH Parameters These five screens show a typical LCD screen content for the five adjustable PIR parameters. Produced by pressing B1: Delta Sig Event: 350 Freescale Semiconductor, Inc... Produced by pressing B2: Delta Sig Res'n: 12 Produced by pressing B3: A2D Loop Time: 10 Produced by pressing B4: A2D Difference: 6 Produced by pressing B5: A2D Trigger: 4 When the variable of choice is displayed (by pressing appropriate button B1:B5) it is adjusted using the INC/DEC buttons. This operation simply adjusts a local copy of the value received from the PIR. The adjustment can be discarded by pressing the CANCEL button, which will return to TOD (time of day) mode. NOTE: When adjusting the Delta Sigma event parameter, the min/max and step values are constrained by a const data declaration in [REMOTE:data.c]: Passive Infrared (PIR) Unit REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com MOTOROLA Designer Reference Manual 52 Freescale Semiconductor, Inc. REMOTE Control Unit Program Flow Freescale Semiconductor, Inc... //////////////// // const data // //////////////// @near const struct sDELTA_SIGMA_ADJUST ds_adjust[8] = { {5 , 255 , 5} , // 8 bit min, max, step {20 , 500 , 20} , // 9 bit min, max, step {50 , 1000 , 50} , // 10 bit min, max, step {100, 2000 , 100}, // 11 bit min, max, step {200, 4000 , 200}, // 12 bit min, max, step {400, 8000 , 400}, // 13 bit min, max, step {600, 16000, 600}, // 14 bit min, max, step {800, 32000, 800}, // 15 bit min, max, step }; Consequently, the parameters can be adjusted if required. The LCD connections are shown in Figure 4-3. The program flow is shown in Figure 4-4, and all operational paths are shown. DISPLAY SECTION MC68HC908GP32 IRQ RST PTA0 PTA1 PTA2 PTA3 PTA4 PTA5 PTA6 PTA7 PTB0 PTB1 PTB2 PTB3 PTB4 PTB5 PTB6 PTB7 PTC0 PTC1 PTC2 PTC3 PTC4 LM16A211 D1 D2 D3 D4 D5 D6 D7 D8 EN RW CONT 0 V RS +5 V VDD VSS OSC1 OSC2 PTE0 PTE1 PTD0 PTD1 PTD2 PTD3 PTD4 PTD5 CONTRAST ADJUSTMENT Figure 4-3. LCD Connections to MC68HC908GP32 Passive Infrared (PIR) Unit MOTOROLA REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 53 Freescale Semiconductor, Inc. REMOTE Control Unit REMOTE IN STOP MODE ANY BUTTON PRESS Transmitting IR comms packets 1 SECOND Error 1 5 No IR Comms [IN] Error 2 5 No PIR Password Freescale Semiconductor, Inc... Password Rejected! Enter password: XXXXX Password Accepted! 1 SECOND Fri 06 Oct 2000 18:19:20 Delta Sig Event: 350 Delta Sig Res'n: 12 CANCEL A2D 10ms Multpl: 10 A2D Difference: 6 A2D Trigger: 4 ACCESS ANY ADJUSTMENT SCREEN FROM ANY OTHER BY PRESSING THE APPROPRIATE BUTTON, FOR EXAMPLE, B1, B2, B3, B4, OR B5. PRESSING ENTER HERE INSTIGATES AN IR COMMAND. Screen Contrast Use INC/DEC Mon 01 Jan 2001 00:00:00 B13 PRESS B6 PRESS Figure 4-4. LCD Screen Functional Flowchart Designer Reference Manual 54 REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Control Unit Program Flow 4.7.3 Button Press Determination All button activity is on PORTA data register (PTA/$0000), a matrix scan method is implemented which minimizes the number of input/output (I/O) required. The matrix used is a 5 x 3 providing up to 15 buttons using three columns and five rows. The buttons are read every remote\main.c->main() (see [REMOTE:main.c]) loop iteration with remote\button.c->ReadButtons() (see [REMOTE:button.c]), this occurs every 10 ms. Freescale Semiconductor, Inc... Figure 4-5 shows the linear method of activating columns and reading rows. As PORTA internal pullups are enabled, if a column is driven low, and on reading the row input lines, a row line is low, then a button is being pressed (since the other two driver columns are input). The default (no button pressed) value of button_pattern will be 0xFFFF. For example, if button B5 is being pressed, this will force PTA.0 to be low since the column driver is being driven as an output and low, which will produce a value for button_pattern of 0xFFFE. Similarly, the value of button_pattern while B10 is being pressed will be 0xFFDF. The column driver being active determines which bit range of button_pattern is set: Column 1: Bits 0/1/2/3/4 of button_pattern Column 2: Bits 5/6/7/8/9 of button_pattern Column 3: Bits 10/11/12/13/14 of button_pattern Passive Infrared (PIR) Unit MOTOROLA REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 55 Freescale Semiconductor, Inc. REMOTE Control Unit CLEAR button_pattern PTA.5 OUTPUT AND LOW COLUMN 1 NOW ACTIVE 50-s DELAY READ PTA.0 TO PTA.4 STORE IN button_pattern BITS 0 TO 4 PTA.5 INPUT (COLUMN 1 OFF) Freescale Semiconductor, Inc... PTA.6 OUTPUT AND LOW COLUMN 2 NOW ACTIVE 50 s DELAY READ PTA.0 TO PTA.4 STORE IN button_pattern BITS 5 TO 9 PTA6 INPUT (COLUMN 2 OFF) PTA.7 OUTPUT AND LOW COLUMN 3 NOW ACTIVE 50 s DELAY READ PTA.0 TO PTA.4 STORE IN button_pattern BITS 10 TO 14 PTA7 INPUT (COLUMN 3 OFF) ALL PTA DATA DIRECTION TO INPUTS BUTTON READ NOW COMPLETE Note: button_pattern is a 16-bit variable. Figure 4-5. REMOTE Control Unit Button Read Flowchart Designer Reference Manual 56 REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Control Unit Program Flow The correlation of a button press to the 16-bit variable `button_pattern' is shown in Figure 4-6. `button_pattern' BIT PATTERN 15 NOT USED 14 13 12 11 B14 10 B15 9 8 7 6 B9 5 B10 4 3 2 1 B4 0 B5 B13 B12 B11 B6 B7 B8 B2 B1 B3 Freescale Semiconductor, Inc... Figure 4-6. Button Press to `button_pattern' Correlation By studying the bit pattern shown in Figure 4-6, the software button decode mapping (shown next) can be understood. The button decode map is contained in [REMOTE:button.h]. #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define DEFAULT_BUTTONS BUTTON_1 BUTTON_2 BUTTON_3 BUTTON_4 BUTTON_5 BUTTON_6 BUTTON_7 BUTTON_8 BUTTON_9 BUTTON_10 BUTTON_11 BUTTON_12 BUTTON_13 BUTTON_14 BUTTON_15 0xffff 0xffef 0xfff7 0xfffb 0xfffd 0xfffe 0xfdff 0xfeff 0xff7f 0xffbf 0xffdf 0xbfff 0xdfff 0xefff 0xf7ff 0xfbff Passive Infrared (PIR) Unit MOTOROLA REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 57 Freescale Semiconductor, Inc. REMOTE Control Unit 4.7.4 Button Debouncing and Functional Decode Now that a button press can be determined, a button debounce and decode algorithm needs to be implemented. The algorithm used incorporates a button press and button release debounce. The ability to have an auto scroll is included, and it occurs when a button is pressed and debounced but remains pressed. This condition will occur while performing an adjustment of a PIR parameter value, by a single press and hold of the INC/DEC button. The auto scroll feature can be enabled/disabled to any button as required. The flag that allows this feature is button_flags.bit.AUTO_SCROLL. It is set to a 1 to enable and 0 to disable this auto scroll feature. Button connections are shown in Figure 4-7 and a button algorithm flowchart in Figure 4-8. Freescale Semiconductor, Inc... BUTTON DECODING VSS PTA0 PTA1 PTA2 PTA3 PTA4 PTA5 PTA6 PTA7 Figure 4-7. Button Connections Designer Reference Manual 58 REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Control Unit Program Flow READ BUTTONS CHECK BUTTON PRESS STATUS NO BUTTON PRESS BEING PRESSED RELEASED Freescale Semiconductor, Inc... PRESS DETECTED? Y N Y BUTTON PATTERN BACK TO DEFAULT? N RELEASE COUNTER = 0? Y N BUTTON PATTERN STILL DEFAULT? N Y N `button_press_status' = RELEASED `button_press_status' = BEING_PRESSED PATTERN HAS CHANGED, BUT IS NOT DEFAULT, START AGAIN. NO BUTTON PRESS ORIGINAL PRESSED PATTERN? Y `button_press_status' = NO BUTTON PRESSED `button_press_status' = BEING_PRESSED Y DEBOUNCED YET? Y 1ST DECODE? N CALL DecodeButtons( ) 10 ms main() SYNCHYRONIZING POINT Y AUTO SCROLL ENABLED? N Figure 4-8. REMOTE Button Algorithm Flowchart Passive Infrared (PIR) Unit MOTOROLA REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 59 Freescale Semiconductor, Inc. REMOTE Control Unit 4.8 LCD Text Writing The LCD used for the REMOTE is the Sharp LM16A211, is a 2 by 16 character textual display. The MC68HC908GP32 drives the display with an 8-bit data bus and three control lines. The software used for driving this display is contained in [REMOTE:lcd.c]. The screen text write functions used are remote\lcd.c->WriteText1() and remote\lcd.c->WriteText2() (see [REMOTE:lcd.c]). Freescale Semiconductor, Inc... WriteText2() is used to write a supplied text string to the display. For example: WriteText2( LINE1, "FLASH BASED" , NOCLEAR ); WriteText2( LINE2, "MC68HC908JK1", NOCLEAR ); will produce the following on the LCD: FLASH BASED MC68HC908JK1 and, WriteText2( Line1+4, "FLASH BASED" , NOCLEAR ); WriteText2( Line2+2, "MC68HC908JK1", NOCLEAR ); will produce: FLASH BASED MC68HC908JK1 The first function parameter is the desired address you want the string to start at, the second parameter is a pointer to the string, and the third parameter determines if you want the screen line you are writing to pre-cleared. This is useful if the string you are about to write is smaller than the current screen string. Designer Reference Manual 60 REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Control Unit LCD Text Writing WriteText1() uses text_buffer as its string source, which allows us to preload text_buffer with formatted data before displaying it. An example is: WriteText2( LINE2, "REFERENCE DESIGN", PRECLEAR); IntegerToASCII( 12345, &text_buffer[0] ); WriteText1(LINE2+6); // // // // // this also performs a `text_buffer' pre-clear convert arg to ASCII string write at `text_buffer[0]' produces " 12345 " text_buffer will contain: Freescale Semiconductor, Inc... [0x31][0x32][0x33][0x34][0x35][0x00][0x20][0x20][0x20][0x20][0x20][0x20] [0x20][0x20][0x20][0x20][0x20] String terminating NULL This will produce: REFERENCE DESIGN 12345 The `1' starts on the seventh character of the second line. 4.8.1 LCD Contrast Adjust The screen contrast can be adjusted by pressing B13, and the following screen will be shown: Screen Contrast Use INC/DEC By pressing the INC button (B11), the screen contrast will increase (for instance, the display text will get darker). Conversely, pressing the DEC button (B12) will cause the screen contrast to decrease (for instance, the display text will get lighter). This control has been provided by the use of a digital potentiometer on pins PTB.2/3/4. The software for this functionality is contained in remote\digipot.c->DigiPot() (see [REMOTE:digipot.c]). Passive Infrared (PIR) Unit MOTOROLA REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 61 Freescale Semiconductor, Inc. REMOTE Control Unit The digital potentiometer used is a Dallas Semiconductor device, DS1804Z. It is controlled by three input lines: * * * Chip select (CS) Up/down (U/D) Count and increment (INC) Freescale Semiconductor, Inc... The "wiper" element is adjusted by applying a series of pulses to the INC input. The direction of travel is controlled by the logical status of the U/D pin. Once adjusted, the position of the "wiper" is stored in its internal nonvolatile memory. VDD CS LCD CONTRAST U/D INC VSS Figure 4-9. LCD Contrast Adjust Using Digital Potentiometer Designer Reference Manual 62 REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Control Unit LCD Text Writing 4.8.2 Real-Time Clock (RTC) The on-board RTC (Dallas Semiconductor DS1307) is displayed on the LCD, and it can be updated from a connected PC via a RS232 connection. To reprogram, simply connect the RS232 cable, run the pir_plot program, and access: Update->Remote RTC If you cannot access this menu item (for example, its greyed out), the communications port has not been selected. Exit the program and try again, this time selecting a valid communications port. Freescale Semiconductor, Inc... The PC will generate the appropriate data stream. On receipt of this data, the REMOTE control unit will decode and reprogram. If the update was successful, the REMOTE control unit will send an ACKNOWLEDGE to the PC and the PC will respond by displaying: Passive Infrared (PIR) Unit MOTOROLA REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 63 Freescale Semiconductor, Inc. REMOTE Control Unit If the update failed, a warning message will be shown instead, and the reprogramming can then be retried. Freescale Semiconductor, Inc... 4.8.3 I2C for the Real-Time Clock The MC68HC908GP32 communicates with the Dallas Semiconductor DS1307 using the I2C protocol. If the REMOTE is in the TOD mode (time of day), then every main() loop iteration (10 ms) the MC68HC908GP32 interrogates the DS1307 with the function remote\main.c->main()->ModeCheck()->UpdateTime() (see [REMOTE:main.c]) to see if the seconds have changed. On the 100th interrogation (after the last change 100 * 10 ms = 1s), the display will require updating. Every time the DS1307 is interrogated, a pointer is loaded with the DS1307 current data values. Only when a second has elapsed is the new data used. This data is used to build a string using text_buffer; when the string is complete, it is then displayed to the user. The current time is read from the DS1307 with remote\rtc.c->RTC_Read(SECONDS, ¤t_time) (see [REMOTE:rtc.c]). This function is shown here. void RTC_Read( unsigned char register_pointer, struct RTC *ptr ) { //////////////////////////////////////////////// // first set the internal RTC address pointer // // to the register that you require with a // // WRITE command // //////////////////////////////////////////////// StartBit(); SendI2CByte( RTC_WRITE ); WaitForI2CAcknowledge(); SendI2CByte( register_pointer ); WaitForI2CAcknowledge(); StopBit(); Designer Reference Manual 64 REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Control Unit LCD Text Writing Freescale Semiconductor, Inc... /////////////////////////////////////// // Then read the contents of the RTC // // registers, with a READ command // /////////////////////////////////////// StartBit(); SendI2CByte( RTC_READ ); // RTC_READ == 0xd1 WaitForI2CAcknowledge(); ptr->seconds = GetI2CByte(); SendI2CAcknowledge(); ptr->minutes = GetI2CByte(); SendI2CAcknowledge(); ptr->hours = GetI2CByte(); SendI2CAcknowledge(); ptr->day = GetI2CByte(); SendI2CAcknowledge(); ptr->date = GetI2CByte(); SendI2CAcknowledge(); ptr->month = GetI2CByte(); SendI2CAcknowledge(); ptr->year._8bit.lobyte = GetI2CByte(); ptr->year._8bit.hibyte = 0x20; // century hi byte...fixed for the // next 99 years! SET_DATA_TO_OUTPUT; // master sending a NOT ACK SET_SDA; OutClock(); // no acknowledge expected here, we generate a clock pulse StopBit(); } // RTC_Read() As described before, the on-board real-time clock (RTC) can be updated from a PC using the `pir_plot.exe' Windows(R) program. This sends the current PC time to the MC68HC908GP32, and the MC68HC908GP32 receives the data via the universal asynchronous receiver/transmitter (UART) receive interrupt at remote\interrupt.c->SCI_RECEIVE() (see [REMOTE:interrup.c]). When all data has been received, a flag is set to cause full checksum analysis from remote\datasort()->RS232CommsCheck() (see [REMOTE:datasort.c]). RS232CommsCheck() performs the RS232 receive data acceptance processing and text string formatting. If data checksum matching occurs, the real-time clock is rewritten with the new data. This takes place in the call to remote\rtc.c->SetRTC(&new_time) (see [REMOTE:rtc.c]) from remote\main.c->main()->RS232CommsCheck(). Passive Infrared (PIR) Unit MOTOROLA REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 65 Freescale Semiconductor, Inc. REMOTE Control Unit unsigned char SetRTC( struct RTC *ptr ) { struct RTC compare; unsigned char error_count; StartBit(); SendI2CByte( RTC_WRITE ); WaitForI2CAcknowledge(); SendI2CByte( SECONDS ); WaitForI2CAcknowledge(); SendI2CByte( ptr->seconds ); WaitForI2CAcknowledge(); SendI2CByte( ptr->minutes ); WaitForI2CAcknowledge(); SendI2CByte( ptr->hours ); WaitForI2CAcknowledge(); SendI2CByte( ptr->day ); WaitForI2CAcknowledge(); SendI2CByte( ptr->date ); WaitForI2CAcknowledge(); SendI2CByte( ptr->month ); WaitForI2CAcknowledge(); SendI2CByte( ptr->year._8bit.lobyte ); WaitForI2CAcknowledge(); StopBit(); ///////////////////////////////////// // now to read what's been written // ///////////////////////////////////// RTC_Read( SECONDS, &compare ); error_count = 0; if if if if if if if ( ( ( ( ( ( ( compare.year._8bit.lobyte compare.month compare.date compare.day compare.hours compare.minutes compare.seconds != != != != != != != ptr->year._8bit.lobyte ptr->month ptr->date ptr->day ptr->hours ptr->minutes ptr->seconds ) ) ) ) ) ) ) error_count++; error_count++; error_count++; error_count++; error_count++; error_count++; error_count++; //////////////////////////////// // RTC_WRITE == 0xd0 // // // // point to seconds register // // // // seconds // // // // minutes // // // // hours // // // // day // // // // date // // // // month // // // // year // // // //////////////////////////////// Freescale Semiconductor, Inc... if ( !error_count ) { return 1; // success } return 0; // failed } // SetRTC() Designer Reference Manual 66 REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Control Unit LCD Text Writing Notice the read after the write. Full agreement is checked for before a successful function return. All the RTC reading/writing operations are built with the lower level I2C routines contained in [REMOTE:i2c.c]. VDD PULLUP RESISTOR XT1 Freescale Semiconductor, Inc... 32.768 kHz SERIAL DATA CLOCK SDAT SCLK XT2 VBAT 3V VSS Figure 4-10. Real-Time Clock, Dallas Semiconductor DS1307 Connections 4.8.4 Forcing the Real-Time Clock (RTC) to a Known State The RTC can be forced to a known state by pressing B6. If the programming is successful, then this screen will be shown: Mon 01 Jan 2001 00:00:00 The RTC will begin operation from this reset value.The decoding of button B6 calls remote\rtc.c->ForceRTC() (see [REMOTE:rtc.c]). Passive Infrared (PIR) Unit MOTOROLA REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 67 Freescale Semiconductor, Inc. REMOTE Control Unit 4.9 REMOTE Software Files This software has been written using the Cosmic C Cross Compiler. All files for the REMOTE control unit are listed here. * * Assembler: [REMOTE:crtsi.s] C Source: [REMOTE:button.c], [REMOTE:convert.c], [REMOTE:data.c], [REMOTE:datasort.c], [REMOTE:delay.c], [REMOTE:digipot.c], [REMOTE:error.c], [REMOTE:i2c.c], [REMOTE:interrup.c], [REMOTE:ir_comms.c], [REMOTE:lcd.c], [REMOTE:main.c], [REMOTE:mode.c], [REMOTE:rs_comms.c], [REMOTE:rtc.c], [REMOTE:startup.c], and [REMOTE:vectors.c] Include Files (in addition to the C source matching header file): [REMOTE:declared.h], [REMOTE:define.h], [REMOTE:extern.h], and [REMOTE:gp32.h] Compile/Link/Make: [REMOTE:cc.bat], [REMOTE:link08.bat], [REMOTE:make08.bat], [REMOTE:config.dat], and [REMOTE:gp32.lkf] Freescale Semiconductor, Inc... * * 4.9.1 On-Board MC68HC908GP32 40-Pin Dual in-Line Programmer The programming hardware is compatible with the ICS08JLZ software from P&E Microcomputer Systems, Inc. The program used is ics08gpz_version_1_32A.exe, available from their Web site at: http://www.pemicro.com Within the P&E development environment is prog08sz.exe, the software that interfaces to the programming socket. Designer Reference Manual 68 REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Control Unit REMOTE Software Files Programming procedure: 1. Ensure that the VDD switch is Off. 2. Ensure that the 40-pin Programmer socket is occupied. 3. Ensure that a standard 9-way RS232 cable is connected from the PC to the development board's Programmer RS232 connector. 4. Set the VDD switch to On. 5. Invoke c:\pemicro\ics08gpz\prog08sz.exe (assuming default installation directory). 6. After programming is complete, set the VDD switch to Off. 7. Remove the programmed device. If the socketed MC68HC908GP32 passes the security test and the RS232 comms link is working, then you will see the following screen. It is asking for the programming algorithm to be entered. Freescale Semiconductor, Inc... Passive Infrared (PIR) Unit MOTOROLA Designer Reference Manual REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com 69 Freescale Semiconductor, Inc. REMOTE Control Unit If there is a problem you will see: Freescale Semiconductor, Inc... The above screen typically occurs if the hardware RS232/power connections are wrong or if the socketed MC68HC908GP32 fails the security test. 4.9.2 Security Failure The security check is a mechanism to prevent unauthorized access to the MC68HC908GP32 FLASH array. The security check centers around the interrupt vector address values at $FFF6-$FFFD. Before access is granted the PC program must transmit eight bytes that need to agree with those resident in the microcontroller. If the 8-byte comparison fails, then FLASH access is prevented. Even though monitor mode can still be entered, before you can reprogram the MC68HC908GP32 or view its contents, you will need to completely erase it. The program will remember the last S19 file programmed into a MC68HC908GP32 and use that file to pass the security test on next invocation. Designer Reference Manual 70 REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Control Unit REMOTE Software Files NOTE: If the MC68HC908GP32 fails the security test, the device must be powered down before a retry can be attempted. This power cycle will take the form: 1. VDD switch to Off 2. Wait for at least two seconds. 3. VDD switch to On The program c:\pemicro\ics08gpz\prog08sz.exe can now be retried. Freescale Semiconductor, Inc... 4.9.3 Programming Circuit The MC68HC908GP32 programmer is configured in a modified form to that recommended in the MC68HC908GP32 Technical Data, Motorola document order number MC68HC908GP32/H REV. 4. It uses two sections of a three-state buffer to control the direction of data to and from the device being programmed. Both VDD and VPP supplies are applied via PCB mounted switches. The RESET pin of the MC68HC908GP32 is driven directly by the DTR line (pin 4:COM port) of the PC, via an inverter and level shifting circuit. When the programming supply is not present, data isolation is achieved using a digital transistor. This is used to detect the presence of the programming VDD supply and controls the output of a third section of the inverting buffer. The data input terminal of the MC68HC908GP32 is thus isolated when the VDD supply is removed. See Figure 4-11 for the MC68HC908GP32 monitor mode connections. Passive Infrared (PIR) Unit MOTOROLA REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 71 Freescale Semiconductor, Inc. REMOTE Control Unit PROGRAMMING SECTION VDD VPP +5 V Freescale Semiconductor, Inc... 9.8304 MHz DTR MONITOR MODE SELECTION DTR INPUT CONDITIONING TO DRIVE RESET PIN VDDA VDD VDDAD PTA0 PTA1 RST PTA2 PTA3 PTA4 PTA5 PTA6 OSC1 PTA7 OSC2 PTB0 PTB1 PTB2 PTE0 PTB3 PTE1 PTB4 PTB5 PTD0 PTB6 PTD1 PTD2 PTB7 PTD3 PTC0 PTD4 PTC1 PTD5 PTC4 PTC4 PTC3 VSSA VSS VSSAD IRQ MC68HC908GP32 DATA IN DATA OUT DATA DIRECTION CONTROL PROGRAMMING SOCKET POWER ISOLATION VSS Figure 4-11. MC68HC908GP32 Monitor Mode Connections Designer Reference Manual 72 REMOTE Control Unit For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- Passive Infrared (PIR) Unit Section 5. Phase-Locked Loop (PLL) Initialization 5.1 Contents 5.2 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 Clock Generator Module/PLL Hardware Description . . . . . . . . 75 Freescale Semiconductor, Inc... 5.3 5.2 Introduction The phase-locked loop (PLL) feature of the MC68HC908GP32 enables a 32.768-kHz low-cost crystal to be used to obtain a bus frequency of 2.4576 MHz. The main reason for using this bus speed is to provide the 38,400 bit rate for the hardware universal asynchronous receiver/transmitter (UART), which is used for communicating with the PC for updating the REMOTE real-time clock (RTC). The internal 2.4576 MHz is obtained by using the values as recommended in Table 5-1 taken from the MC68HC908GP32 Technical Data, Motorola document order number MC68HC908GP32/H REV. 4. Table 5-1 provides numeric examples (numbers are in hexadecimal notation). Passive Infrared (PIR) Unit MOTOROLA Phase-Locked Loop (PLL) Initialization For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 73 Freescale Semiconductor, Inc. Phase-Locked Loop (PLL) Initialization Table 5-1. Numeric Example fBUS 2.0 MHz 2.4576 MHz 2.5 MHz 4.0 MHz 4.9152 MHz fRCLK 32.768 kHz 32.768 kHz 32.768 kHz 32.768 kHz 32.768 kHz 32.768 kHz 32.768 kHz 32.768 kHz R 1 1 1 1 1 1 1 1 N F5 12C 132 1E9 258 263 384 3D1 P 0 0 0 0 0 0 0 0 E 0 1 1 1 2 2 2 2 L D1 80 83 D1 80 82 C0 D0 Freescale Semiconductor, Inc... 5.0 MHz 7.3728 MHz 8.0 MHz The following code will initialize the PLL unit at the desired frequency. It is from remote\startup.c->InitialisePLL() (see [REMOTE:startup.c]. ///////////////////////////////////////////// // auto mode // // settings here... // // as described in... // // the MC68HC908GP32/H // // Rev2.0 data book section 7.4.6 page 120 // // turn pll on after settings 'set' // ///////////////////////////////////////////// PBWC.reg PCTL.reg PMS PMRS.reg PMDS.reg PCTL.bit.PLLON = = = = = = 0x80; 0x02; 0x012C; 0x80; 0x01; 1; /////////////////////////////////////////////////// // wait for the required frequency to be reached // /////////////////////////////////////////////////// ServiceWatchDog(); while ( !PBWC.bit.LOCK ); PCTL.bit.BCS = 1; // pll clock ready, drives CGMOUT Designer Reference Manual 74 Phase-Locked Loop (PLL) Initialization For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Phase-Locked Loop (PLL) Initialization Clock Generator Module/PLL Hardware Description The MC68HC908GP32 Technical Data details the equations used to generate the values inserted in Table 5-1. Reference clock divider, R, is equal to 1 as the PLL crystal fRCLK is 32.768 kHz. Range multiplier, N N = (R x fVCLKDES) / fRCLK where fVCLKDES = 4 x fBUSDES = 9.830400E6 Freescale Semiconductor, Inc... N = (1x9.830400E6)/32.768E3 = 30010 = 12C16 VCO Linear range multiplier, L L = FVCLK/(2E x fNOM) where fNOM = 38.4kHz, FVCLK = 9.830400E6 and E = 1 L = 9.830400E6/(2 x 38.4E3) = 12810 = 8016 NOTE: E = 1 from frequency range table in the MC68HC908GP32 Technical Data. 5.3 Clock Generator Module/PLL Hardware Description The CGMC generates the crystal clock signal CGMXCLK, which operates at the clock frequency (32.768 kHz in this design). An internal phase-locked loop (PLL) generates the programmable VCO frequency clock and determines the bus frequency. A Pierce oscillator configuration is used (Figure 5-1) which uses five external components, with the crystal directly connected between the crystal amplifier input pin (OSC1) and the crystal amplifier output pin (OSC2). RB = feedback resistor RS = series resistor X1 = crystal C1 = tuning capacitor C2 = tuning capacitor 10 M 330 k 32.768 kHz 2 x CL 15 pF(1) 2 x CL 15 pF(1) 1. Consult manufacturer's data Passive Infrared (PIR) Unit MOTOROLA Phase-Locked Loop (PLL) Initialization For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 75 Freescale Semiconductor, Inc. Phase-Locked Loop (PLL) Initialization 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 5-1. OSC1 OSC2 CGMXFC VDDA VSSA Freescale Semiconductor, Inc... 10 M 330 k 10 k 100 nF 10 nF 32.768 kHz 33 nF 15 pF 15 pF VSS PIERCE CRYSTAL OSCILLATOR VSS PLL FILTER NETWORK BYPASS CAPACITOR Figure 5-1. MC68HC908GP32 PLL Connections Designer Reference Manual 76 Phase-Locked Loop (PLL) Initialization For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- Passive Infrared (PIR) Unit Section 6. Cosmic M68HC08 Complier 6.1 Contents 6.2 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 Compiling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Configuration File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 Make File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Linking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 IDEA Integrated Environment . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Freescale Semiconductor, Inc... 6.3 6.4 6.5 6.6 6.7 6.2 Introduction For this design, the Cosmic C Compiler for the M68HC08 v4.2i was used. The documentation you receive with the compiler is comprehensive. The purpose of this section is to illustrate the techniques used in this design. 6.7 IDEA Integrated Environment will briefly discuss IDEA, a Windows(R) program which provides a graphical method as opposed to a command line based method for using the Cosmic tool set. Passive Infrared (PIR) Unit MOTOROLA Cosmic M68HC08 Complier For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 77 Freescale Semiconductor, Inc. Cosmic M68HC08 Complier The compiler usage invokes many DOS exe files. When compiling a source file these programs will be called: * * * * cp6808.exe cg6808.exe co6808.exe ca6808.exe The bold letter indicate what each program run is doing. For example: Freescale Semiconductor, Inc... * * * * cp6808.exe is the code parser cg6808.exe is the code generator co6808.exe is the code optimizer ca6808.exe is the code assembler 6.3 Compiling The compiler is run via DOS batch files from a text editor. To run in a DOS shell is fine. For example, to compile a file called main.c, use: cc main cc.bat would contain: @echo off rem ================================================================== rem = 'f' include 'config.dat' for further compiler options rem ================================================================== c:\cosmic\cx08\cx6808 -f config.dat %1.c 6.4 Configuration File Notice the "f" switch, which allows the use of a separate file to hold all the compiler switches that are required. This keeps the batch file simple and ensures that the DOS command line limit is not exceeded. The content of the config.dat file used for the PIR code is shown here. Note the use of the # for a comment. Designer Reference Manual 78 Cosmic M68HC08 Complier For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Cosmic M68HC08 Complier Configuration File ############################################ # CONFIGURATION FILE FOR 68HC08 COMPILER # # ATEECC # ############################################ ############ # COMPILER # ############ #-no -e -l -i c:\cosmic\cx08\h6808 # # # # don't use optimiser create error file create C/assembly listing file include ... Freescale Semiconductor, Inc... ########## # PARSER # ########## -pic:\cosmic\cx08\h6808 -pp -pl -pck -pnw -px ############# # GENERATOR # ############# -gf #-gck #-gv ############# # ASSEMBLER # ############# -al -at ############# # OPTIMISER # ############# #-ov # # # # # # include ... prototype checking output line number info for listing & debug extra type checking don't widen args produce debug info for Zap # all lines in listing # enable stack overflow checking # show function being processed # assembler file listing # list instruction cycles # show number of removed/modified instructions OK, now that a file has been compiled, what's next. Due to the compilation of main.c, two more main files have been produced, main.ls and main.o. The object file main.o is a relocatable object module and main.ls contains the M68HC08 assembler generated from the C source statements by the compiler, with only relative address reference. The absolute address listing is produced after the linking process. Passive Infrared (PIR) Unit MOTOROLA Cosmic M68HC08 Complier For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 79 Freescale Semiconductor, Inc. Cosmic M68HC08 Complier 6.5 Make File Most projects will consist of many source files, which aids in keeping the code modular and more manageable in a text editor. You can recompile all source files and then link to produce the Motorola S-record (S19) file. Another batch file called make08 does just that and is shown here. [MAKE08.BAT] rem/////////////////////////// rem// assemble Cosmic files // rem/////////////////////////// c:\cosmic\cx08\ca6808 crts.s rem////////////////////////////// rem// compile all source files // rem////////////////////////////// call cc a2d call cc analyse call cc data call cc datasort call cc delay call cc deltasig call cc flashprg call cc interrup call cc main call cc serial call cc startup call cc vectors rem/////////////////////////// rem// link the object files // rem/////////////////////////// call link08 rem//////////////////////////////// rem// deleting relative listings // rem//////////////////////////////// del *.ls rem////////////////////////// rem// list any error files // rem////////////////////////// dir *.err Freescale Semiconductor, Inc... First, the Cosmic-supplied assembler startup file (producing crts.o) is assembled directly using ca6808; then, in turn, each of the C source files is compiled. This results in several object files that now need linking to produce the final S19 file. Designer Reference Manual 80 Cosmic M68HC08 Complier For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Cosmic M68HC08 Complier Linking 6.6 Linking The best way to understand the linking process is to do it. That means going through a cycle of linking and studying the S-record/absolute listing files. At the heart of the linker process is the linker command file, jk.lkf, which basically tells the linker what to put where in address terms. In a straightforward project (if one exists,) user software would use read-only memory (ROM) space for the opcodes and random-access memory (RAM) space for the variables. If some of your variables are of type const (for instance, stored in ROM) then that will add another linker requirement. The use of segments is used to create these fixed areas of storage. For example, the MC68HC908JK1/3 RAM area could be defined using: +seg .ubsct -b 0x0080 -n TinyRam -m 128 where: ubsct = non-initialized data in the zero page b = start address of segment n = name of segment used in linker output file m = maximum size of segment The MC68HC908JK1/3 RAM occupies $80 to $FF inclusive (resides in page0 entirely). The segment where the code will reside for the MC68HC908JK3 will be: +seg .text -b 0xec00 -n UserFLASH -m 4096 The compiler needs a const area if certain libraries are used (for example, switch jump tables): +seg .const -a UserFLASH # '-a' append section to previous Finally, the interrupt vectors are required: +seg .const -b 0xffde -n Vectors -m 34 Freescale Semiconductor, Inc... Passive Infrared (PIR) Unit MOTOROLA Designer Reference Manual Cosmic M68HC08 Complier For More Information On This Product, Go to: www.freescale.com 81 Freescale Semiconductor, Inc. Cosmic M68HC08 Complier This will give the bare bones linker file for a MC68HC908JK3. To assign the object file to the relevant declared segment, simply list the object file after the segment declaration. For example: Simple linker command file: +seg .ubsct -b 0x0080 -n TinyRam -m 128 data.o +seg .text -b 0xec00 -n UserFLASH -m 4096 +seg .const -a UserFLASH crts.o a2d.o analyse.o datasort.o delay.o deltasig.o interrup.o main.o serial.o startup.o +seg .const -b 0xffde -n Vectors -m 34 vectors.o To link, clnk.exe is used: c:\cosmic\cx08\clnk -v -m jl.inf -e jk.err -o pir.h08 jk.lkf where: v = verbose m = produce map information file e = log errors to file o = output to file Freescale Semiconductor, Inc... Designer Reference Manual 82 Passive Infrared (PIR) Unit Cosmic M68HC08 Complier For More Information On This Product, Go to: www.freescale.com MOTOROLA Freescale Semiconductor, Inc. Cosmic M68HC08 Complier Linking S19 generation: The linker output (pir.h08, executable image) can be converted to a hexadecimal interchange format (Motorola S19 format) using chex.exe: c:\cosmic\cx08\chex -fm -o pir.s19 pir.h08 where: fm = Motorola output format o = output to file Freescale Semiconductor, Inc... Absolute listing: Finally, clabs.exe is used to process the relative assembler listing files to produce an absolute listing: c:\cosmic\cx08\clabs -l -v pir.h08 where: l = restrict to current directory v = verbose Linker command file (*.lkf): The linker command file used for the PIR software is shown here. ################################################### # LINKER COMMAND FILE FOR MOTOROLA HC908JK1/3/JL3 # # PIR REFERENCE DESIGN # # ATEECC July 2000 # ################################################### ########### # symbols # ########### +def __memory=@.bss +def __stack=0x00ff ################################### # MC68HC908JK1/JK3 selection # # # # JK1: # # ROM_START=0xf600, ROM_SIZE=1536 # # # # JK3/JL3: # # ROM_START=0xec00, ROM_SIZE=4096 # ################################### +def ROM_START=0xf600 +def ROM_SIZE=1536 # symbol used by startup # stack pointer value for 'crts.s' Passive Infrared (PIR) Unit MOTOROLA Cosmic M68HC08 Complier For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 83 Freescale Semiconductor, Inc. Cosmic M68HC08 Complier ############## # CONST DATA # ############## # -b [b]eginning address of segment # -n [n]ame of segment # -m [m]ax size (bytes) of segment +seg .const -b 0xfbc0 -n ConstFLASH -m 64 ################################ # 64 bytes is min erase block # # size # # WE USE THE LAST 64 BYTE BLOCK# # IN THE FLASH MEMORY AREA # ################################ ############# # PAGE0 RAM # ############# ############################ # run time data allocation # ############################ +seg .ubsct -b 0x0080 -n TinyRam -m 128 ireg.o lreg.o Freescale Semiconductor, Inc... data.o ################################ # Occupies $080-$00ff (PAGE0). # # This ensures that the Cosmic # # variables 'c_reg' # # and 'c_lreg' are positioned # # at the beginning of ram this # # segment, ensuring that during# # any memcpy operations they do# # not get overwritten with # # copied data. # # # # NOTE: user global data here # ################################ ####################################################### # This segment is for PIR FLASH parameter programming.# # The variables from 'data.o' and 'mot_data.o' will # # overlap, that is ok since the variables occupying # # the same address will not be active at the same # # time. See 'datasort.c->AssignCurrentFLASHData()' # # for more information. # # # # The Motorola monitor routines expect their # # variables/data to be at known addresses. # # # # Notice the '-v' switch, it tells the linker # # not to report overlap errors for this segment # ####################################################### +seg .ubsct -b 0x88 -v -n MONITOR_RAM -m 128-8 ######################### mon_data.o # '8' since this segment# # starts at $0088 and # # not $0080 # ######################### Designer Reference Manual 84 Cosmic M68HC08 Complier For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Cosmic M68HC08 Complier Linking ############################## # FLASH memory for user code # ############################## +seg .text -b ROM_START -n UserFLASH -m ROM_SIZE-64 ############################### # MC68HC908JK/L3 user code # # start address # # '64' for const FLASH # # variables, see 'ConstFLASH' # # segment # ############################### ##################################### # const area for switch jump tables # ##################################### +seg .const -a UserFLASH Freescale Semiconductor, Inc... ############################### # '-a' append section to # # previous # ############################### ##################### # user object files # ##################### crts.o # Cosmic supplied startup routine a2d.o # a2d initialise/read analyse.o # data buffer scan routine, buffer contains PIR a2d values datasort.o # data integrity and decode delay.o # inline accurate delay routine deltasig.o # alternative pir 'event' routines using delta-sigma # algorithm flashprg.o # flash programming interrup.o # interrupt service routines main.o # main() serial.o # RS232 debug (send) and IR comms routines startup.o # micro initialisation i.e. i/o, ram clear, timer initialisation #################### # Cosmic libraries # #################### c:/cosmic/cx08/lib/libi.h08 c:/cosmic/cx08/lib/libm.h08 ########### # Vectors # ########### +seg .const -b 0xffde -n Vectors -m 34 vectors.o Passive Infrared (PIR) Unit MOTOROLA Cosmic M68HC08 Complier For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 85 Freescale Semiconductor, Inc. Cosmic M68HC08 Complier 6.7 IDEA Integrated Environment For those who prefer to work in the Windows(R) environment, Cosmic provides a program to do just that. The IDEA integrated environment provides a Windows(R) based graphical user interface (GUI) for building and managing projects. IDEA is fully integrated with all Cosmic tools including compilers, assemblers, linkers, utilities, and ZAP debuggers. Freescale Semiconductor, Inc... Figure 6-1. IDEA Loaded with the REMOTE Unit Project Designer Reference Manual 86 Cosmic M68HC08 Complier For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- Passive Infrared (PIR) Unit Section 7. Windows(R) 95/98/NT Program (pir_plot.exe) 7.1 Contents 7.2 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Program Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Freescale Semiconductor, Inc... 7.3 7.2 Introduction This section describes the Windows(R) 95/98/NT program. 7.3 Program Description The accompanying Windows(R) program (pir_plot.exe) displays the PIR infrared sensor value as seen/calculated by the PIR unit software. The sensor value is transmitted to the connected PC via the RS232 port using 1 START, 38400, NO PARITY, 8 DATA, and 1 STOP. The main aim of this program is to allow the user to see the real-time response of the infrared sensor. The data is sent using this protocol: BLOCK LENGTH BLOCK TITLE DATA BYTE 1 DATA BYTE 2 DATA BYTE n CHECKSUM CHECKSUM HI LO BLOCK LENGTH CHECKSUM HI/LO Number of bytes in the packet excluding the checksum Bytes refer to the 16-bit sum of: BLOCK LENGTH + BLOCK TITLE + DATA BYTE1 + DATA BYTE2 + ...+ DATA BYTE n. See Figure 7-1 and Figure 7-2. Passive Infrared (PIR) Unit MOTOROLA Windows(R) 95/98/NT Program (pir_plot.exe) For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 87 Freescale Semiconductor, Inc. Windows(R) 95/98/NT Program (pir_plot.exe) Freescale Semiconductor, Inc... Figure 7-1. Typical Analog PIR Response Figure 7-2. Typical Delta Sigma PIR Response Designer Reference Manual 88 Windows(R) 95/98/NT Program (pir_plot.exe) For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Windows(R) 95/98/NT Program (pir_plot.exe) Program Description The following extract, from pir\a2d.c->A2DCheck() (see [PIR:a2d.c]), shows a main() loop counter being incremented, and when it is equal to a FLASH const value an analog read takes place. The result of the analog read is an average of A2D_SAMPLE_COUNT (currently 32) readings. If the debug RS232 code is included (#ifdef __PC_DEBUG_), then the appropriate data is assigned and checksum calculations and transmission take place in pir\serial.c->Send_RS232_CommsPacket() (see [PIR:serial.c]). Freescale Semiconductor, Inc... if ( ++a2d_count >= pir_params.main_loop_count ) { a2d_count = 0; // reset *pir_buffer_ptr = ReadA2D(CHANNEL4); // 'A2D_SAMPLE_COUNT' average // result is returned . . . #ifdef __PC_DEBUG_ // transmit current data to pc? SEI(); // all interrupts off to ensure 38400 bit timings rs232_buffer[2] = *pir_buffer_ptr; if ( flags1.bit.ALARM_EVENT ) rs232_buffer[3] = 'Y'; // pc to 'beep' else rs232_buffer[3] = 'N'; // no pc 'beep' rs232_buffer[4] = pir_params.trigger_count; rs232_buffer[5] = pir_params.difference_band; rs232_buffer[6] = pir_params.main_loop_count; Send_RS232_CommsPacket( PIR_DATA, 5 ); //5 == above 5 data bytes CLI(); // interrupt processing back on #endif . . . } The pir_plot.exe program contains the usual Windows(R) features (for instance, traces can be saved, restored and printed). When using the program, consult the on-line help for full instructions. NOTE: #ifdef __PC_DEBUG_, the RS232 feature, is used during debug only. This #define ensures that the appropriate code is compiled only when required. Due to the additional bytes used, a MC68HC908JK3 will have to be programmed. Access [PIR:define.h] to comment/uncomment the #define declaration as required. The PIR unit can send a serial debug packet (9 bytes) every 10 ms if pir_params.main_loop_count is set to 1. There is no hardware Passive Infrared (PIR) Unit MOTOROLA Windows(R) 95/98/NT Program (pir_plot.exe) For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 89 Freescale Semiconductor, Inc. Windows(R) 95/98/NT Program (pir_plot.exe) handshaking, and, consequently due to the 10 ms inter-packet time, it is likely that Windows(R) will be unable to process all incoming data. If possible while debugging, keep pir_params.main_loop_count to a minimum of 5 (50 ms inter-packet time). This value was used successfully on a Pentium 133 MHz with 80 MB of random-access memory (RAM). The faster your PC the lower the value of pir_params.main_loop_count you can use and still receive and display all incoming data. Of course, once #ifdef __PC_DEBUG_ is commented out, you can use any value for pir_params.main_loop_count required as no RS232 transmission will take place. To reduce PC CPU processing time during an analog serial session, the graphical update occurs when 10 serial packets have been processed. That is why the screen will draw in bursts rather than in each data point as it is transmitted to the PC. To ensure the 38400 RS232 bit timings, the MC68HC908JK3 disables all interrupts. This will have an impact on the IR communications which is decoded in the timer channel0 interrupt routine; consequently, the IR communications may feel slightly unresponsive. The Delta Sigma detection method also disables interrupts during the capacitor charge/discharge process. Adding the serial transmission interrupt disabling will further decrease IR communications responsiveness. Freescale Semiconductor, Inc... Designer Reference Manual 90 Passive Infrared (PIR) Unit Windows(R) 95/98/NT Program (pir_plot.exe) For More Information On This Product, Go to: www.freescale.com MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- Passive Infrared (PIR) Unit Appendix A. Fresnel Lens Mounting Freescale Semiconductor, Inc... The correct positioning of the Fresnel lens is critical to the operation of the PIR unit. The Fresnel lens included with this package has a 12.5-m focal length. Therefore, during debugging and close range testing, it is better to remove the Fresnel lens entirely. Figure A-1 shows how the Fresnel lens is mounted with respect to the PCB. P1 64 mm 25 mm x 25 mm FRESNEL LENS P2 Figure A-1. Fresnel Lens Geometry Arc distance (x), P1 to P2 is 64 mm. x = r where: s = sector length r = radius = angle in radians = 148.97 180 - = -----------------2 = 15.52 Passive Infrared (PIR) Unit MOTOROLA Fresnel Lens Mounting For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 91 Freescale Semiconductor, Inc. Fresnel Lens Mounting This produces an isosceles triangle using the sine rule: sin ( ) sin ( ) --------------- = ---------------x 25 By substituting the known values for and , the value of x is obtained: x = 48.16 mm Lastly, the angle of the PCB slots to hold the Fresnel lens: = 74.48 Freescale Semiconductor, Inc... See Figure A-2. PCB FRESNEL LENS Figure A-2. PCB/Lens Connection Angle Designer Reference Manual 92 Fresnel Lens Mounting For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- Passive Infrared (PIR) Unit Appendix B. PIR Schematics This appendix provides PIR schematics. Refer to: * Figure B-1 for the Delta Sigma schematic Figure B-2 for the analog PIR schematic Freescale Semiconductor, Inc... * Passive Infrared (PIR) Unit MOTOROLA PIR Schematics For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 93 Freescale Semiconductor, Inc. PIR Schematics Freescale Semiconductor, Inc... Designer Reference Manual 94 PIR Schematics For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Figure B-1. Delta Sigma PIR Schematic Freescale Semiconductor, Inc. PIR Schematics Freescale Semiconductor, Inc... Passive Infrared (PIR) Unit MOTOROLA PIR Schematics For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 95 Figure B-2. Analog PIR Schematic Freescale Semiconductor, Inc. PIR Schematics Freescale Semiconductor, Inc... Designer Reference Manual 96 PIR Schematics For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- Passive Infrared (PIR) Unit Appendix C. Development Boards This appendix provides diagrams for the development boards. Refer to: * Figure C-1 for the PIR detector development board Figure C-2 for the remote control development board Freescale Semiconductor, Inc... * Passive Infrared (PIR) Unit MOTOROLA Development Boards For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 97 Freescale Semiconductor, Inc. Development Boards Freescale Semiconductor, Inc... Designer Reference Manual 98 Development Boards For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Figure C-1. PIR Detector Development Board Freescale Semiconductor, Inc. Development Boards Freescale Semiconductor, Inc... Passive Infrared (PIR) Unit MOTOROLA Development Boards For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 99 Figure C-2. REMOTE Control Development Board Freescale Semiconductor, Inc. Development Boards Freescale Semiconductor, Inc... Designer Reference Manual 100 Development Boards For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- Passive Infrared (PIR) Unit Appendix D. MC68HC908GP32 Programmer Circuit This appendix provides a programmer circuit diagram for the MC68HC908GP32. Refer to Figure D-1. Freescale Semiconductor, Inc... Passive Infrared (PIR) Unit MOTOROLA MC68HC908GP32 Programmer Circuit For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 101 Freescale Semiconductor, Inc. MC68HC908GP32 Programmer Circuit Freescale Semiconductor, Inc... Designer Reference Manual 102 MC68HC908GP32 Programmer Circuit For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Figure D-1. MC68HC908GP32 Programmer Circuit Freescale Semiconductor, Inc. Designer Reference Manual -- Passive Infrared (PIR) Unit Appendix E. PIR Source Code Files Throughout this document, references are made to source code files contained in this appendix. They are: [PIR:a2d.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 [PIR:a2d.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 [PIR:analyse.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 [PIR:analyse.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113 [PIR:cc.bat] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 [PIR:config.dat] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .114 [PIR:crts.s] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 [PIR:data.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 [PIR:datasort.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .118 [PIR:datasort.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .123 [PIR:declared.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .124 [PIR:define.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 [PIR:delay.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 [PIR:delay.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 [PIR:deltasig.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 [PIR:deltasig.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 [PIR:extern.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 [PIR:flashprg.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .139 [PIR:flashprh.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .141 [PIR:interrup.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 [PIR:interrup.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 [PIR:ireg.s] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 [PIR:jk.lkf] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .148 [PIR:jk13&jl3.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .151 [PIR:link08.bat] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 [PIR:lreg.s] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 [PIR:main.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 [PIR:make08.bat] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 [PIR:mon_data.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Freescale Semiconductor, Inc... Passive Infrared (PIR) Unit MOTOROLA Designer Reference Manual PIR Source Code Files For More Information On This Product, Go to: www.freescale.com 103 Freescale Semiconductor, Inc. PIR Source Code Files [PIR:serial.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 [PIR:serial.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 [PIR:startup.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 [PIR:startup.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 [PIR:vectors.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 For those viewing this document in .pdf format, these files can be accessed by clicking on the appropriate hyperlink reference found in the textual portions of the document. Freescale Semiconductor, Inc... Designer Reference Manual 104 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... [PIR: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 Infra Red Reference Design // // Filename : a2d.c // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // a2d routines // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 12/05/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include "extern.h" #include "delay.h" #include "serial.h" #include "analyse.h" #include "a2d.h" //////////////////////////////////////////////////////////////////////////////// // This function returns an averaged analogue value. It's primary use it to // // read the amplified IR sensor output. The averaging is currently 32, // // determined by the value of A2D_SAMPLE_COUNT (in a2d.h) // // // // Argument : analogue channel to read // // Returns : averaged analogue result // //////////////////////////////////////////////////////////////////////////////// unsigned char ReadA2D( unsigned char channel ) { union uUNSIGNED_INTEGER a2d_total; unsigned char ii; Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 105 Freescale Semiconductor, Inc. PIR Source Code Files InitialiseA2D(channel); a2d_total._16bit = 0; // clear summation total for ( ii = 0; ii < A2D_SAMPLE_COUNT; ii++ ) { while ( !ADSCR.bit.COCO ); // wait for conversion to complete a2d_total._16bit += ADR.reg; // update running total } a2d_total._16bit /= A2D_SAMPLE_COUNT; // average Freescale Semiconductor, Inc... //////////////////////////////////////////////////////////////////////////////// // NOTE // // using the a2d continuous conversion mode this function takes approx 1ms to // // execute @ 1MHz bus with a 32 sample count sum. Using the single conversion // // mode the function execution time is approx 1.6ms // //////////////////////////////////////////////////////////////////////////////// return a2d_total._8bit.lobyte; } // ReadA2D() //------------------------------------------------------------------------------ //////////////////////////////////////////////////////////////////////////////// // Motorola data book MC68HC908JL3/H Rev. 1.0 page 145, states : // // "the ADC clock should be set to approximately 1MHz". // // // // A2D initialisation // // // // Argument : channel to read from // // Returns : none // //////////////////////////////////////////////////////////////////////////////// void InitialiseA2D( unsigned char channel ) { ////////////////////////////////////////////////// ADICLK.reg = 0x00; // divide by 1, since we are using a 4MHz // // resonator the bus speed will be at the // // required 1MHz // // // #ifdef __MMDS_EMULATOR_ // recommendation from 'hc08gm32em.pdf' page 16 // ADICLK.bit.bit4 = 1; // NOTE: for the JK1/3 this bit is unimplemented// #endif // and will cause no misoperation // // // ADSCR.reg = (unsigned char)(0x20|channel);// ints off, continuous conversion // // // Delay( A2D_STABILISATION ); // stabilisation delay, approx 50us // } // InitialiseA2D() ////////////////////////////////////////////////// //------------------------------------------------------------------------------ Designer Reference Manual 106 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files //////////////////////////////////////////////////////////////////////////////// // This function is called directly from 'main()'. If the required number of // // 'main()' loop iterations has been executed then the pir sensor is read and // // the resulting values are stored in the global buffer 'pir_buffer' via a // // unsigned char pointer. A magnitude test test is performed with the previous// // result and if greater than 'pir_params.difference_band'. // // // // Argument : none // // Returns : none // //////////////////////////////////////////////////////////////////////////////// void A2DCheck( void ) { unsigned char diff; unsigned char previous_pir_data; Freescale Semiconductor, Inc... if ( ++a2d_count >= pir_params.main_loop_count ) { a2d_count = 0; // reset *pir_buffer_ptr = ReadA2D(CHANNEL4); // 'A2D_SAMPLE_COUNT' average // result is returned /////////////////////////// // trigger detected yet? // /////////////////////////// if ( !flags1.bit.TRIGGER_EVENT ) { ////////////////////////////////////////////////////////////////////////// // Nearest previous neighbour test here, if magnitude is greater than // // 'pir_params.difference_band' then flush buffer, insert previous and // // present data into start locations of buffer and then start refilling.// // When full, perform analysis ie 'Analyse_PIR_Buffer()' // ////////////////////////////////////////////////////////////////////////// if ( pir_buffer_ptr > &pir_buffer[0] ) { previous_pir_data = *(pir_buffer_ptr-1); } else { previous_pir_data = pir_buffer[LAST_PIR_BUFFER_ELEMENT]; // buffer wrap } // ocurred ///////////////////////////////////////////////////////// // difference a2d check on present - previous readings // ///////////////////////////////////////////////////////// if ( *pir_buffer_ptr > previous_pir_data ) { diff = (unsigned char)(*pir_buffer_ptr - previous_pir_data); } else { diff = (unsigned char)(previous_pir_data - *pir_buffer_ptr); } Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 107 Freescale Semiconductor, Inc. PIR Source Code Files ////////////////////////////////////////////////////////////// // does the difference constitute an intruder detect event? // ////////////////////////////////////////////////////////////// if ( diff >= pir_params.difference_band ) { ///////////////////////////////////////// // re-store present and previous value // ///////////////////////////////////////// pir_buffer[0] = previous_pir_data; pir_buffer[1] = *pir_buffer_ptr; flags1.bit.TRIGGER_EVENT = 1; pir_buffer_ptr = &pir_buffer[1]; // '1' due to } // ++pir_buffer_ptr below Freescale Semiconductor, Inc... } #ifdef __PC_DEBUG_ // transmit current data to pc? SEI(); // all interrupts off to ensure 38400 bit timings rs232_buffer[2] = *pir_buffer_ptr; if ( flags1.bit.ALARM_EVENT ) rs232_buffer[3] = 'Y'; // pc to 'beep' else rs232_buffer[3] = 'N'; // no pc 'beep' rs232_buffer[4] = pir_params.trigger_count; rs232_buffer[5] = pir_params.difference_band; rs232_buffer[6] = pir_params.main_loop_count; Send_RS232_CommsPacket( PIR_DATA, 5 ); //5 == above 5 data bytes CLI(); // interrupt processing back on #endif //////////////////////////////////////////////////////////////// // increment pointer for next storage, check for buffer wrap. // // If buffer is full AND if we have had an event trigger, // // then analyse the acquired data. // //////////////////////////////////////////////////////////////// if ( ++pir_buffer_ptr > &pir_buffer[LAST_PIR_BUFFER_ELEMENT] ) { if ( flags1.bit.TRIGGER_EVENT ) { flags1.bit.TRIGGER_EVENT = 0; if ( !flags1.bit.ALARM_EVENT ) { Analyse_PIR_Buffer(); } } // stop overlapping intruder detect // events pir_buffer_ptr = &pir_buffer[0]; // reset buffer storage pointer for next } } } // A2DCheck() //------------------------------------------------------------------------------ Designer Reference Manual 108 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... [PIR: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 Infra Red Reference Design // // Filename : a2d.h // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // a2d routines // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 12/05/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __A2D_H_ #define __A2D_H_ #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define #define CHANNEL0 CHANNEL1 CHANNEL2 CHANNEL3 CHANNEL4 CHANNEL5 CHANNEL6 CHANNEL7 CHANNEL8 CHANNEL9 CHANNEL10 CHANNEL11 A2D_VDDA A2D_VSSA A2D_OFF CLEAR_CHANNEL_SEL A2D_SAMPLE_COUNT ShutDownA2D() 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x1d 0x1e 0x1f 0xe0 32 ADSCR.reg = A2D_OFF // ADC power off Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 109 Freescale Semiconductor, Inc. PIR Source Code Files #define #define // need to update buttons.c->Increment() // for gp32 with this value LAST_PIR_BUFFER_ELEMENT (PIR_BUFFER_SIZE-1) PIR_BUFFER_SIZE 8 Freescale Semiconductor, Inc... ///////////////////////////////////////////////////////////////////////////// // The values assume a 10ms main loop time (via timeroverflow MOD counter) // ///////////////////////////////////////////////////////////////////////////// enum { _10MS = 1, _20MS , _30MS , _40MS , _50MS , _60MS , _70MS , _80MS , _90MS , _100MS , _110MS, _120MS, _130MS, _140MS, _150MS, _160MS, _170MS, _180MS, _190MS , _200MS, _210MS, _220MS, _230MS, _240MS, _250MS, _260MS, _270MS, _280MS , _290MS, _300MS, _310MS, _320MS, _330MS, _340MS, _350MS, _360MS, _370MS , _380MS, _390MS, _400MS, _410MS, _420MS, _430MS, _440MS, _450MS, _460MS , _470MS, _480MS, _490MS, _500MS, _510MS, _520MS, _530MS, _540MS, _550MS , _560MS, _570MS, _580MS, _590MS, _600MS, _610MS, _620MS, _630MS, _640MS , _650MS, _660MS, _670MS, _680MS, _690MS, _700MS // etc...to _2550MS }; //////////////// // prototypes // //////////////// unsigned char ReadA2D( unsigned char ); void InitialiseA2D( unsigned char ); void A2DCheck( void ); #endif Designer Reference Manual 110 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... [PIR:analyse.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 Infra Red Reference Design // // Filename : analyse.c // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // analyse a2d buffer for movement data patterns // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 26/05/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include "extern.h" #include "analyse.h" void Analyse_PIR_Buffer( void ) { unsigned char trigger_count = 0; unsigned char ii; unsigned char pir_difference; unsigned char data1; unsigned char data2; Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 111 Freescale Semiconductor, Inc. PIR Source Code Files //////////////////////////////////////////////////////////////////////////////// // 'PIR_BUFFER_SIZE' array element gives 'PIR_BUFFER_SIZE-1 'comparisons ie // // [0][1],[1][2],[2][3],[3][4],[4][5]...[PIR_BUFFER_SIZE-2][PIR_BUFFER_SIZE-1]// //////////////////////////////////////////////////////////////////////////////// for ( ii = 0; ii < LAST_PIR_BUFFER_ELEMENT; ii++ ) { data1 = pir_buffer[ii]; data2 = pir_buffer[ii+1]; //////////////////////////////////// // determine neighbour difference // //////////////////////////////////// if ( data1 >= data2 ) pir_difference = (unsigned char)(data1 - data2); else pir_difference = (unsigned char)(data2 - data1); Freescale Semiconductor, Inc... ///////////////////////////////////////////////////////////////// // has the data changed appreciably compared to it's neighbour // ///////////////////////////////////////////////////////////////// if ( pir_difference >= pir_params.difference_band ) { /////////////////////////// // if so, how many times // /////////////////////////// if ( ++trigger_count >= pir_params.trigger_count ) { //////////////////////////////////////////// // intruder detected, start alarm process // //////////////////////////////////////////// flags1.bit.ALARM_EVENT = 1; break; } } } } // Analyse_PIR_Buffer() //------------------------------------------------------------------------------ Designer Reference Manual 112 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... [PIR:analyse.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 Infra Red Reference Design // // Filename : analyse.h // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // header file for analyse.c // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 26/05/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __ANALYSE_H_ #define __ANALYSE_H_ //////////////// // prototypes // //////////////// void Analyse_PIR_Buffer( void ); #endif Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 113 Freescale Semiconductor, Inc. PIR Source Code Files [PIR:cc.bat] @echo off rem ============================================================================ rem = 'f' include 'config.dat' for further compiler options = rem = 'v' compiler verbosity ie show cp6808/cg6808/co6808/ca6808 screen output = rem ============================================================================ rem c:\cosmic\cx08\cx6808 -v -f config.dat %1.c rem ============================================================================ rem = 'f' include 'config.dat' for further compiler options = rem ============================================================================ c:\cosmic\cx08\cx6808 -f config.dat %1.c Freescale Semiconductor, Inc... [PIR:config.dat] ############################################ # CONFIGURATION FILE FOR 68HC08 COMPILER # # ATEECC # ############################################ ############ # COMPILER # ############ #-no -e -l -i c:\cosmic\cx08\h6808 ########## # PARSER # ########## -pic:\cosmic\cx08\h6808 -pp -pl -pck -pnw -px ############# # GENERATOR # ############# -gf #-gck #-gv ############# # ASSEMBLER # ############# -al -at ############# # OPTIMISER # ############# #-ov # # # # don't use optimiser create error file create C/assembly listing file include ... # # # # # # include ... prototype checking output line number info for listing & debug extra type checking don't widen args produce debug info for Zap # all lines in listing # enable stack overflow checking # show function being processed # assembler file listing # list instruction cycles # show number of removed/modified instructions Designer Reference Manual 114 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... [PIR:crts.s] ; C STARTUP FOR MC68HC08 ; Copyright (c) 1995 by COSMIC Software ; xref _main, __memory, __stack xdef _exit, __stext ; switch .bss __sbss: switch .text __stext: ldhx #__sbss ; start of bss bra loop ; start loop zbcl: clr 0,x ; clear byte aix #1 ; next byte loop: cphx #__memory ; up to the end bne zbcl ; and loop prog: ldhx #__stack ; initialize stack pointer txs jsr _main _exit: bra _exit ; end ; execute main ; and stay here Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 115 Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... [PIR: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 Infra Red Reference Design // // Filename : data.c // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : MC68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // global data, // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 28/03/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include "declared.h" #include "define.h" #include "a2d.h" ////////////////////// // Global variables // ////////////////////// #ifdef __PC_DEBUG_ @tiny unsigned char @tiny union uBITS #endif @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny unsigned char unsigned char unsigned char unsigned short int union uUNSIGNED_INTEGER volatile unsigned char volatile union uBITS volatile unsigned char rs232_buffer[12]; rs232_data; pir_buffer[PIR_BUFFER_SIZE]; * @tiny pir_buffer_ptr; a2d_count; delta_sigma_result_old; delta_sigma_result; ir_buffer[8]; flags1; ir_byte_count; Designer Reference Manual 116 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files @tiny @tiny @tiny @tiny @tiny volatile volatile volatile volatile volatile unsigned unsigned unsigned unsigned unsigned char char short int short int short int ir_bit_count; ir_block_length; ir_start_time; ir_stop_time; detect_led_count; Freescale Semiconductor, Inc... //////////////////////////////////////////////////////////////////////////////// // const data // // ++++++++++ // // // // THIS IS THE PIR FLASH PARAMETER DATA // // The following const data is located at the start of the last 64 bytes of // // memory in the JK1/3/JL3 ie at $fbc0 // //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// // Analogue PIR Parameters are decalred as: // // // // struct sPIR_FLASH_PARAMETERS // // { // // unsigned char trigger_count; // how many triggers before event bit set // // unsigned char difference_band; // difference in consecutive data readings// // // to create a trigger // // unsigned char main_loop_count; // number of (10ms) main loop scans // // // between sensor reads // // }; // // // // At startup we have: // // 'trigger_count' == 4 // // 'difference_band' == 6 // // 'main_loop_count' == 10 // //////////////////////////////////////////////////////////////////////////////// @near const struct sPIR_FLASH_PARAMETERS pir_params = { 4, 6, 10 }; //////////////////////////////////////////////////////////////////////////// // Delta-Sigma PIR Parameters // // _12BIT == Delta Sigma build resolution // // 350 == diff'ce in sequential Delta sigma values to create a trigger // //////////////////////////////////////////////////////////////////////////// @near const union uUNSIGNED_INTEGER delta_sig_bit = { _12BIT }; @near const union uUNSIGNED_INTEGER delta_sig_event = { 350 }; //////////////////////////////////////////////////////////////////////////// // PIR Password // //////////////////////////////////////////////////////////////////////////// @near const union uUNSIGNED_INTEGER password = { 12345 }; Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 117 Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... [PIR:datasort.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 Infra Red Reference Design // // Filename : datasort.c // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // IR data integrity routine(s) // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 12/07/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include Designer Reference Manual 118 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files unsigned char CheckSumCheck( void ) { union uUNSIGNED_INTEGER checksum; unsigned char ii; unsigned char block_length; block_length = ir_buffer[BLOCK_LENGTH]; if ( block_length == 0x00 ) { return 0; // bad data } Freescale Semiconductor, Inc... //////////////////////////// // calculate the checksum // //////////////////////////// checksum._16bit = 0; for ( ii = 0; ii < block_length; ii++ ) { checksum._16bit += ir_buffer[ii]; } ///////////////////////////////////////////////// // now compare to that received in 'ir_buffer' // ///////////////////////////////////////////////// if ( checksum._8bit.hibyte == ir_buffer[ block_length ] && checksum._8bit.lobyte == ir_buffer[ block_length+1] ) { return 1; // good, full 16bit checksum agreement } return 0; // checksum did not compare } // CheckSumCheck() //------------------------------------------------------------------------------ //////////////////////////////////////////////////////////////////////////////// // If ir data has arrived it needs to be integrity checked and actioned if the// // received command is valid. If the decoded command is for an internal flash // // programming operation then 'ProgramFlash()' is called. // //////////////////////////////////////////////////////////////////////////////// void IRCommsCheck( void ) { ////////////////////////////////////// if ( ir_mode == IR_MAIN ) // have we received any IR data via // { // TIMERCHANNEL0 capture interupt? // if ( CheckSumCheck() ) // Have we received 'clean' IR // { // comms data? // ServiceWatchDog(); ////////////////////////////////////// if ( Decode_IR_Data() ) { // is FLASH programming required? Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 119 Freescale Semiconductor, Inc. PIR Source Code Files //////////////////////////////////////////////////////// // interrupts off and reset the stack pointer as we // // are NOT returning from this function and we will // // be performing calls to the monitor functions // //////////////////////////////////////////////////////// SEI(); RSP(); ProgramFlash(); } } ir_mode = IR_IDLE; // ready for next } } // IRCommsCheck() //-----------------------------------------------------------------------------// COP reset at the end of this function Freescale Semiconductor, Inc... //////////////////////////////////////////////////////////////////////////////// // We are about to use 'MONITOR_DATA[]' as storage, we know that we have to // // perform a FLASH PIR parameter program sequence. // // Please note that 'MONITOR_DATA[]' overlays the runtime data. // // This was a specific linker request since once we have reached // // this point in the program flow we will not be returning to the // // normal PIR detect mode. 'MONITOR_DATA[]' has been linked to // // start at address $008c, this being a requirement of using the // // Motorola monitor routines. // //////////////////////////////////////////////////////////////////////////////// void AssignCurrentFLASHData( void ) { memset( &MONITOR_DATA[0], 0xff , sizeof(MONITOR_DATA) ); // erase (0xff) memcpy( &MONITOR_DATA[0], &pir_params, sizeof(MONITOR_DATA) ); // assign //////////////////////////////////////////////////////////////////////////////// // The above 'memcpy()' has the same effect as:// // // // MONITOR_DATA[0] = pir_params.trigger_count; // adjustable // // MONITOR_DATA[1] = pir_params.difference_band; // adjustable // // MONITOR_DATA[2] = pir_params.main_loop_count; // adjustable // // MONITOR_DATA[3] = delta_sig_bit._8bit.hibyte; // adjustable // // MONITOR_DATA[4] = delta_sig_bit._8bit.lobyte; // adjustable // // MONITOR_DATA[5] = delta_sig_event._8bit.hibyte; // adjustable // // MONITOR_DATA[6] = delta_sig_event._8bit.lobyte; // adjustable // // MONITOR_DATA[7] = password._8bit.hibyte; // fixed! // // MONITOR_DATA[8] = password._8bit.lobyte; // fixed! // // .. // the password does not // // .. allocate as required // get adjusted only // // .. by your design // re-assigned // // .. // // MONITOR_DATA[31] // //////////////////////////////////////////////////////////////////////////////// } // AssignCurrentFLASHData() //------------------------------------------------------------------------------ Designer Reference Manual 120 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files //////////////////////////////////////////////////////////////////////////////// // The ir data in 'ir_buffer' has been deemed correct. The software response // // depends on the BLOCK_TITLE byte as to what action is performed. // //////////////////////////////////////////////////////////////////////////////// unsigned char Decode_IR_Data( void ) { unsigned char temp[2]; union uUNSIGNED_INTEGER password_inverse; Freescale Semiconductor, Inc... //////////////// // initialise // //////////////// temp[0] = temp[1] = 0; // assume no flash programming will be required ///////////////////// // assign new data // ///////////////////// switch ( ir_buffer[BLOCK_TITLE] ) { case SEND_A2D_TRIGGER : ir_buffer[DATA_BYTE1] = pir_params.trigger_count; ir_buffer[DATA_BYTE2] = PIR_BUFFER_SIZE; Send_IR_CommsPacket( SEND_A2D_TRIGGER, 2 ); break; case SEND_A2D_DIFFERENCE : ir_buffer[DATA_BYTE1] = pir_params.difference_band; Send_IR_CommsPacket( SEND_A2D_DIFFERENCE, 1 ); break; case SEND_A2D_LOOPTIME : ir_buffer[DATA_BYTE1] = pir_params.main_loop_count; Send_IR_CommsPacket( SEND_A2D_LOOPTIME, 1 ); break; case SEND_DELTA_SIG_RESOLUTION : ir_buffer[DATA_BYTE1] = delta_sig_bit._8bit.hibyte; ir_buffer[DATA_BYTE2] = delta_sig_bit._8bit.lobyte; Send_IR_CommsPacket( SEND_DELTA_SIG_RESOLUTION, 2 ); break; // 2 data bytes // 1 data byte // 1 data byte // 2 data bytes case SEND_DELTA_SIG_EVENT : ir_buffer[DATA_BYTE1] = delta_sig_event._8bit.hibyte; ir_buffer[DATA_BYTE2] = delta_sig_event._8bit.lobyte; ir_buffer[DATA_BYTE3] = delta_sig_bit._8bit.hibyte; // used for range ir_buffer[DATA_BYTE4] = delta_sig_bit._8bit.lobyte; // checking in Send_IR_CommsPacket( SEND_DELTA_SIG_EVENT, 4 ); // 4 data bytes break; case SEND_PASSWORD : ir_buffer[DATA_BYTE1] ir_buffer[DATA_BYTE2] = password._8bit.hibyte; = password._8bit.lobyte; Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 121 Freescale Semiconductor, Inc. PIR Source Code Files /////////////////////////////// // additional data integrity // /////////////////////////////// password_inverse._16bit = ~password._16bit; ir_buffer[DATA_BYTE3] = password_inverse._8bit.hibyte; ir_buffer[DATA_BYTE4] = password_inverse._8bit.lobyte; Send_IR_CommsPacket( SEND_PASSWORD, 4 ); // 4 data bytes break; case UPDATE_A2D_TRIGGER : temp[0] = ir_buffer[DATA_BYTE1]; AssignCurrentFLASHData(); MONITOR_DATA[0] = temp[0]; temp[0] = 1; // flash programming required break; case UPDATE_A2D_DIFFERENCE : temp[0] = ir_buffer[DATA_BYTE1]; AssignCurrentFLASHData(); MONITOR_DATA[1] = temp[0]; temp[0] = 1; // flash programming required break; case UPDATE_A2D_LOOPTIME : temp[0] = ir_buffer[DATA_BYTE1]; AssignCurrentFLASHData(); MONITOR_DATA[2] = temp[0]; temp[0] = 1; // flash programming required break; case UPDATE_DELTA_SIG_RESOLUTION : temp[0] = ir_buffer[DATA_BYTE1]; temp[1] = ir_buffer[DATA_BYTE2]; AssignCurrentFLASHData(); MONITOR_DATA[3] = temp[0]; MONITOR_DATA[4] = temp[1]; temp[0] = 1; // flash programming required break; case UPDATE_DELTA_SIG_EVENT : temp[0] = ir_buffer[DATA_BYTE1]; temp[1] = ir_buffer[DATA_BYTE2]; AssignCurrentFLASHData(); MONITOR_DATA[5] = temp[0]; MONITOR_DATA[6] = temp[1]; temp[0] = 1; // flash programming required break; } return temp[0]; } // Decode_IR_Data() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... Designer Reference Manual 122 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... [PIR:datasort.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 Infra Red Reference Design // // Filename : datasort.h // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // header file for datasort.h // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 12/07/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __DATASORT_H_ #define __DATASORT_H_ unsigned char void void unsigned char #endif CheckSumCheck( void ); IRCommsCheck( void ); AssignCurrentFLASHData( void ); Decode_IR_Data( void ); Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 123 Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... [PIR: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 Infra Red Reference Design // // Filename : declared.h // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : MC68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // declared data types // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 28/03/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __DECLARED_H_ #define __DECLARED_H_ ///////////////////// // bit/byte access // ///////////////////// struct sPORT { unsigned char bit0 : 1; unsigned char bit1 : 1; unsigned char bit2 : 1; unsigned char bit3 : 1; unsigned char bit4 : 1; unsigned char bit5 : 1; unsigned char bit6 : 1; unsigned char bit7 : 1; }; union uBITS { Designer Reference Manual 124 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files unsigned char unsigned char struct sPORT }; byte; reg; bit; Freescale Semiconductor, Inc... ////////////////////// // 16 bit data type // ////////////////////// struct sUNSIGNED_INTEGER { unsigned char hibyte; // unsigned char lobyte; // }; union uUNSIGNED_INTEGER { unsigned short int struct sUNSIGNED_INTEGER }; ////////////////////// // 32 bit data type // ////////////////////// struct sUNSIGNED_LONG { unsigned char byte4; // unsigned char byte3; // unsigned char byte2; // unsigned char byte1; // }; union uUNSIGNED_LONG { unsigned long struct sUNSIGNED_LONG }; 0x12XX 0xXX34 _16bit; _8bit; 0x12XXXXXX 0xXX34XXXX 0xXXXX56XX 0xXXXXXX78 _32bit; _8bit; //////////////// // const data // //////////////// struct sPIR_FLASH_PARAMETERS { unsigned char trigger_count; unsigned char difference_band; unsigned char }; #endif main_loop_count; // // // // // how many triggers before event bit set difference in consecutive data readings to create a trigger number of (10ms) main loop scans between sensor reads Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 125 Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... [PIR: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 Infra Red Reference Design // // Filename : define.h // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : MC68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // global defines // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 28/03/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __DEFINE_H_ #define __DEFINE_H_ #define __MMDS_EMULATOR_ //#define __PC_DEBUG_ ///////////////// // I/O defines // ///////////////// #define MODE_SELECT_PIN #define DETECT_LED ////////////// // #defines // ////////////// #define NULL #define YES #define NO #define SET #define RESET #define HI #define LO // requirement for emulator // enables code for RS232 data send to pc for // sensor a2d data display PTD.bit.bit6 PTD.bit.bit2 (void *)0 1 0 1 0 1 0 Designer Reference Manual 126 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files #define #define #define #define #define #define #define #define #define #define #define ERROR TIMER_ROLLOVER _3P5MS _4P5MS _1_BITWIDTH MIN_PULSE_WIDTH MAX_PULSE_WIDTH NOISE_LIMIT RAMSTART _1MS A2D_STABILISATION 0xff 10000 3500 4500 1500 200 2500 300 // 300us 80 82 4 // approx 59us 11+(12*4) cycles @1us == 59us Freescale Semiconductor, Inc... //////////////////// // flags1 defines // //////////////////// #define _10MS_MAINLOOP #define ALARM_EVENT #define DELTA_SIGMA_HISTORY #define TRIGGER_EVENT ///////////////////////// // Delta Sigma defines // ///////////////////////// #define _8BIT #define _9BIT #define _10BIT #define _11BIT #define _12BIT #define _13BIT #define _14BIT #define _15BIT /////////////////// // assembler 'C' // /////////////////// bit0 bit1 bit2 bit3 256 512 1024 2048 4096 8192 16384 32768U //////////////////////////////////////////////////////////////////////////////// // We clear all ram areas upto $F8. Leave the area $F8-$FF as there has been // // two calls already. Called from 'MicroStartUp()' in 'startup.c' // //////////////////////////////////////////////////////////////////////////////// #define ClearRam() _asm("clrh\n ldx #120\nLOOP2: clr $80-1,x\n dbnzx LOOP2") //#define RSP() #define RSP() #define SEI() #define CLI() #define STOP() #define WAIT() #define Nop() #define ServiceWatchDog() enum #endif _asm( "rsp" ) // OK for JK1/3 and JL3 _asm( "ldhx #$00ff\n txs" ) _asm("sei") _asm("cli") _asm("stop") _asm("wait") _asm("nop") COPCTL.reg = 0 { IR_IDLE, IR_DATA, IR_MAIN }; Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 127 Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... [PIR: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 Infra Red Reference Design // // Filename : delay.h // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : MC68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // delay routines // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 15/05/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include "extern.h" #include "delay.h" //////////////////////////////////////////////////////////////////////////////// // 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 #X ; delay arg sent to function [2] cycles // // jsr DelayUSecs ; branches to this function [5] cycles // //loop1 deca ; dec acc [1] cycle // // nop ; nop [1] cycle // // nop ; nop [1] cycle // // nop ; nop [1] cycle // // nop ; nop [1] cycle // // nop ; nop [1] cycle // // nop ; nop [1] cycle // // nop ; nop [1] cycle // // nop ; nop [1] cycle // Designer Reference Manual 128 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... // bne loop1 ; loop till acc = 0 [3] cycles // // rts ; return from sub-routine [4] cycles // // // // This gives a total delay of 11+12*X cycles, where X is the arg sent. // // We are using a 4.00MHz resonator => 1us bus cycle time. For eg: // // we require a 1ms delay, then we have: // // 1E-3/1E-6 = 1000 bus cycles => 1000 = 11 + 12*X, => X = 82.417 // // approx = 82 // // 'DelayUSecs( 82 )' to get 1ms delay. // // // // Arguments: 'X' delay value as calculated from 'cyles = 11 + 12X' // // Returns : none // //////////////////////////////////////////////////////////////////////////////// void Delay( unsigned char uSecs ) { #asm LOOP1: deca nop nop nop nop nop nop nop nop bne LOOP1 #endasm } // Delay() //------------------------------------------------------------------------------ Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 129 Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... [PIR: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 Infra Red Reference Design // // Filename : delay.h // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // header file for delay.c // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 15/05/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __DELAY_H_ #define __DELAY_H_ ///////////////////////// // function prototypes // ///////////////////////// void Delay( unsigned char ); #endif Designer Reference Manual 130 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... [PIR:deltasig.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 Infra Red Reference Design // // Filename : deltasig.c // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // delta sigma pir snesor routine(s) // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 01/08/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include "extern.h" #include "serial.h" #include "deltasig.h" //////////////////////////////////////////////////////////////////////////////// // This function is called directly from 'main()'. It controls the Delta Sigma// // value generation. The Delta Sigma variables both global and local are // // initialised for use. 'BuildDeltaSigma()' is then called which generates the// // final Delta Sigma result. // // A difference test is performed with the previous value, if this difference // // is >= 'delta_sig_event._16bit' then a intruder detect event is signalled. // // // // Whilst debugging ie '__PC_DEBUG_' has been defined then the Delta Sigma // // parameters are serially transmitted to a connected pc for analysis // //////////////////////////////////////////////////////////////////////////////// void DeltaSigma( void ) { unsigned short int diff; union uUNSIGNED_INTEGER ds_count; Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 131 Freescale Semiconductor, Inc. PIR Source Code Files ds_count._16bit delta_sigma_result._16bit DS_CHARGE_LINE_DDR DS_FAST_CHARGE_LINE_DDR PIR_ANALOGUE_DDR DS_ANALOGUE_DDR = = = = = = delta_sig_bit._16bit; 0; 1; 0; 0; 0; // // // // // // load from FLASH reset output to charge/discharge re-affirmation re-affirmation re-affirmation do { ServiceWatchDog(); BuildDeltaSigma(); } while ( --ds_count._16bit ); //////////////////////////////////////////////////////////// // suspend charge/discharge process until next time round // //////////////////////////////////////////////////////////// DS_CHARGE_LINE_DDR = 0; //////////////////// // detection code // //////////////////// if ( flags1.bit.DELTA_SIGMA_HISTORY ) { if ( delta_sigma_result._16bit > delta_sigma_result_old ) { diff = delta_sigma_result._16bit - delta_sigma_result_old; } else { diff = delta_sigma_result_old - delta_sigma_result._16bit; } ///////////////// // event check // ///////////////// if ( diff >= delta_sig_event._16bit { flags1.bit.ALARM_EVENT = 1; // } } else { flags1.bit.DELTA_SIGMA_HISTORY = 1; } Freescale Semiconductor, Inc... && !flags1.bit.ALARM_EVENT ) an intruder has been detected? // denotes data ready for comparison // ie old/new readings to compare too //////////////////////////////// // update for next comparison // //////////////////////////////// delta_sigma_result_old = delta_sigma_result._16bit; ///////////////// // serial send // ///////////////// #ifdef __PC_DEBUG_ SEI(); Designer Reference Manual 132 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files ///////////////////////////// // xmit current data to pc // ///////////////////////////// rs232_buffer[2] = delta_sigma_result._8bit.hibyte; rs232_buffer[3] = delta_sigma_result._8bit.lobyte; if ( flags1.bit.ALARM_EVENT ) rs232_buffer[4] = 'Y'; else rs232_buffer[4] = 'N'; rs232_buffer[5] rs232_buffer[6] rs232_buffer[7] rs232_buffer[8] = = = = delta_sig_bit._8bit.hibyte; delta_sig_bit._8bit.lobyte; delta_sig_event._8bit.hibyte; delta_sig_event._8bit.lobyte; // // // // // pc to 'beep' // no pc 'beep' bit resolution hibyte bit resolution lobyte event difference trigger event difference trigger Freescale Semiconductor, Inc... Send_RS232_CommsPacket( SIGMA_DATA, 7 ); // '7' from the 7 data bytes above CLI(); #endif } // DeltaSigma() //------------------------------------------------------------------------------ //////////////////////////////////////////////////////////////////////////////// // This function performs the Delta Sigma charge/discharge process. The pir // // sensor output is fed into PTB.5 that has been set up as an analogue input. // // The aim of this function is to maintain the voltage on PTB.5 to be Vdd/2 // // ie 2.5V. This is done by attempting to maintain an analogue read result of // // 128 from PTB.5. // // // // As the signal voltage varies from the sensor this function is continually // // charging/discharging capcitor C5 to maintain the 2.5V. This // // charge/discharge process requires symmetrical times hence the use of the // // balancing 'nop's. To ensure this symmetry all interrups are disabled. // // // // If the measured PTB.5 voltage is >= 2.5V the capacitor is discharged and // // 'delta_sigma_result' is incremented. // // // // FOR A DETAILED EXPLANATION OF THIS PROCESS SEE THE REFERENCE // // DESIGN DOCUMENTATION // //////////////////////////////////////////////////////////////////////////////// void BuildDeltaSigma( void ) { SEI(); ADSCR.reg = CHANNEL5; // single conversion, interrupt off while ( !ADSCR.bit.COCO ); if ( ADR.reg < 128 ) { DS_CHARGE_LINE = 1; #asm nop nop nop nop nop nop nop // charge // timing balance Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 133 Freescale Semiconductor, Inc. PIR Source Code Files nop nop nop nop nop #endasm } else { DS_CHARGE_LINE = 0; Nop(); // a2d reading >= 128 // discharge // timing balance Freescale Semiconductor, Inc... if ( ++delta_sigma_result._8bit.lobyte == 0 ) // lobyte overflow check { delta_sigma_result._8bit.hibyte++; // increment hibyte } else { #asm // timing balance nop nop nop nop nop nop nop #endasm } } CLI(); } // BuildDeltaSigma() //------------------------------------------------------------------------------ //////////////////////////////////////////////////////////////////////////////// // Due to the large RC time contstants involved with this method, we have used// // a fast charge method to speed up the charging/discharging process. // //////////////////////////////////////////////////////////////////////////////// void FastCharge( void ) { ADSCR.reg = CHANNEL5; // single conversion, no int while ( !ADSCR.bit.COCO ); // wait for the conversion to complete // 5v @ 256 steps == 19.53mV per step // 0.8V == 0.8/19.53mV == 40.96 == 41 integer if ( ADR.reg < (128-41) ) // charge up to 0.8V less than required. { // 128 == 2.5V PIR_ANALOGUE_DDR = 0; // PIR analogue input DS_ANALOGUE_DDR = 0; // Delta Sigma analogue input DS_CHARGE_LINE = 1; // hi to charge... DS_CHARGE_LINE_DDR = 1; // ..delta-sigma charge/discharge line DS_CAP_GND = 0; // force ground side of coupling capcitor DS_CAP_GND_DDR = 1; // output DS_FAST_CHARGE_LINE = 1; // output and... DS_FAST_CHARGE_LINE_DDR = 1; // ...hi to fast charge the capacitor do { Designer Reference Manual 134 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files ServiceWatchDog(); ADSCR.reg = CHANNEL5; // single conversion, no int while ( !ADSCR.bit.COCO ); } while ( ADR.reg < (128-41) ); } else { PIR_ANALOGUE_DDR DS_ANALOGUE_DDR DS_CHARGE_LINE DS_CHARGE_LINE_DDR DS_CAP_GND DS_CAP_GND_DDR DS_FAST_CHARGE_LINE DS_FAST_CHARGE_LINE_DDR // (ADR.reg > 128) = = = = = = = = 0; 0; 0; 1; 0; 1; 0; 1; // // // // // // // // need to discharge Freescale Semiconductor, Inc... PIR analogue input Delta Sigma analogue input lo to discharge... ..delta-sigma charge/discharge line force ground side of coupling capacitor output output and... ...lo to fast discharge the capacitor do { ServiceWatchDog(); ADSCR.reg = CHANNEL5; // single conversion, no int while ( !ADSCR.bit.COCO ); } while ( ADR.reg > (128-41) ); } DS_FAST_CHARGE_LINE_DDR = 0; DS_CAP_GND_DDR = 0; DS_CHARGE_LINE_DDR = 0; // // // // fast charge/discharge now not needed release ground side of coupling capcitor suspend charge/discharge process until next time round } // FastCharge() //------------------------------------------------------------------------------ Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 135 Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... [PIR:deltasig.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 Infra Red Reference Design // // Filename : deltasig.h // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // header file for deltasig.c // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 01/08/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __DELTASIG_H_ #define __DELTASIG_H_ #define #define #define #define #define #define #define #define PIR_ANALOGUE_DDR DS_ANALOGUE_DDR DS_CHARGE_LINE_DDR DS_CHARGE_LINE DS_FAST_CHARGE_LINE_DDR DS_FAST_CHARGE_LINE DS_CAP_GND DS_CAP_GND_DDR DDRB.bit.bit4 DDRB.bit.bit5 DDRB.bit.bit6 PTB.bit.bit6 DDRB.bit.bit7 PTB.bit.bit7 PTD.bit.bit5 DDRD.bit.bit5 //////////////// // prototypes // //////////////// void DeltaSigma( void ); void BuildDeltaSigma( void ); void FastCharge( void ); #endif Designer Reference Manual 136 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... [PIR: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 Infra Red Reference Design // // Filename : extern.h // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // extern data, // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 28/03/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __EXTERN_H_ #define __EXTERN_H_ #ifndef #include #endif #ifndef #include #endif #ifndef #include #endif #ifndef #include #endif __DECLARED_H_ "declared.h" __A2D_H_ "a2d.h" __JK13_JL3IO_H_ "jk13&jl3.h" __DEFINE_H_ "define.h" Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 137 Freescale Semiconductor, Inc. PIR Source Code Files ////////////////////// // Global variables // ////////////////////// #ifdef __PC_DEBUG_ extern @tiny unsigned char extern @tiny union uBITS #endif extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern extern @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny unsigned char unsigned char unsigned char unsigned char unsigned char unsigned char unsigned short int unsigned short int union uUNSIGNED_INTEGER volatile unsigned char volatile union uBITS volatile unsigned char volatile unsigned char volatile unsigned char volatile unsigned short volatile unsigned short volatile unsigned short volatile unsigned short rs232_buffer[12]; rs232_data; Freescale Semiconductor, Inc... int int int int pir_buffer[PIR_BUFFER_SIZE]; * @tiny pir_buffer_ptr; a2d_count; MONITOR_DATA[32]; MONITOR_CPUSPD; MONITOR_CTRLBYT; MONITOR_LADDR; delta_sigma_result_old; delta_sigma_result; ir_buffer[8]; flags1; ir_byte_count; ir_bit_count; ir_block_length; ir_start_time; ir_stop_time; ir_mode; detect_led_count; /////////////////// // const section // /////////////////// extern @near const struct sPIR_FLASH_PARAMETERS extern @near const union uUNSIGNED_INTEGER extern @near const union uUNSIGNED_INTEGER extern @near const union uUNSIGNED_INTEGER #endif pir_params; delta_sig_bit; delta_sig_event; password; Designer Reference Manual 138 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files [PIR:flashprg.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 Infra Red Reference Design // // Filename : flashmon.c // // Author : jtravers // // Compiler : Cosmic C // // CPU : 68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // Routine for FLASH programming whilst in user mode // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 05/07/00 jt Internal FLASH programming whilst in user mode // // removes the requirement for an external memory ic. // // The programming is invoked via the receipt of valid // // IR comms data packet in function // // 'datasort.c->IRCommsCheck()' // // // // ram used : // // $80 - $87 [ 8] not used in FLASH program process // // $88 [ 1] control byte for monitor rom calls // // $89 [ 1] cpu speed byte for monitor rom // // calls // // $8a - $8b [ 2] last address for monitor rom calls // // $8c - $ab [32] data bytes to be programmed into // // FLASH // // $ac - $ff [84] not used for FLASH programming, // // stack usage will be required. // // ---// // Total 128 bytes // // // Freescale Semiconductor, Inc... Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 139 Freescale Semiconductor, Inc. PIR Source Code Files // Once the programming is complete the verify led is // // lit for 0.25s and the program then enters an endless// // loop waiting for the internal watchdog to cause a // // reset and 'normal' processing ensues. // //////////////////////////////////////////////////////////////////////////////// #include "extern.h" #include "flashprg.h" Freescale Semiconductor, Inc... //////////////////////////////////////////////////////////////////////////////// // This function is invoked due to the decoding of a valid IR comms packet // // from the REMOTE (GP32) unit. // // // // Prior to this call interrupts have been turned off and the stack pointer // // reset (0xff). The data that requires programming into flash memory has been// // copied into the appropriate buffer by a call to 'AssignCurrentFLASHData()'.// // // // This function calls the Motorola monitor functions to perform the erase, // // program and verfiy of the flash memory data. // // // // Please consult Motorola application note AN1831/D for full details of the // // Motorola monitor functions. // //////////////////////////////////////////////////////////////////////////////// void ProgramFlash( void ) { unsigned char ii; ServiceWatchDog(); FLBPR.reg = 0xff; MONITOR_CPUSPD = SPDSET; MONITOR_CTRLBYT = 0x00; MONITOR_LADDR = FLASH_DATA_END; LED = 0; LED_DDR = 1; _asm("ldhx ERARNGE(); _asm("ldhx PRGRNGE(); _asm("lda #$fbc8"); #$fbc0"); #$ff"); _asm("ldhx RDVRRNG(); #$fbc0"); if ( carry() ) { ii = 125; //////////////////////////////////////////// // defensive measure // // no FLASH protection // // 1(MHz) * 4 == 4 // // page erase // // data stored @ $FBC0/DF (32 bytes) // // led off... // // ...and an output // // // // any address in the range $fbc0 - $fbff // // to erase FLASH page, Motorola monitor // // rom call // // first address in H:X to write to // // program FLASH row, Motorola monitor // // rom call // // force ACC to non zero to ensure that // // newly read data is placed back in the // // data array and not to the monitor mode // // comm port. // // first address in H:X to verify FLASH // // programming, Motorola monitor rom call // // // // carry bit set if verify is successful // // if so light led for 0.25s // // load 0.25s counter // // // Designer Reference Manual 140 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files do { ServiceWatchDog(); LED = 1; _asm("lda #4" ); _asm("ldx #167"); DELNUS(); } while ( --ii ); } LED = 0; while (1); // // // // // // // led on // // // // Fop*4 (1MHz) // // 2000/12 // // 2ms delay...Motorola monitor rom call // // repeat // // // // // // led off // // all done! wait for watchdog reset... // //////////////////////////////////////////// Freescale Semiconductor, Inc... } // ProgramFlash() //------------------------------------------------------------------------------ [PIR:flashprh.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 PIR Reference Design // // Filename : flashprg.h // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // header file for 'flashprg.c' // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 05/07/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __FLASHPRG_H_ #define __FLASHPRG_H_ Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 141 Freescale Semiconductor, Inc. PIR Source Code Files ///////////////////////////////////////////////////////////////// // Fop * 4, here Fop == 1 (MHz) => 1*4 = 4, adjust as required // ///////////////////////////////////////////////////////////////// #define SPDSET 4 /////////////////////////////////////////////////////////////////// // currently data size for FLASH programming is 32 bytes 9/10/00 // /////////////////////////////////////////////////////////////////// #define DATA_SIZE 32 ///////////////////////////////////////////////////////////////////////// // 16 bytes of data ie $fbc0...$fbdf == $fbc0+32-1, adjust as required // ///////////////////////////////////////////////////////////////////////// #define FLASH_DATA_END 0xfbc0+DATA_SIZE-1 ///////////////////////////////////////////////////// // symbol table entries used purely for addressing // ///////////////////////////////////////////////////// extern @near void GETBYTE( void ) @MONITOR_ROM+0 ; // extern @near void RDVRRNG( void ) @MONITOR_ROM+3 ; // extern @near void ERARNGE( void ) @MONITOR_ROM+6 ; // extern @near void PRGRNGE( void ) @MONITOR_ROM+9 ; // extern @near void DELNUS( void ) @MONITOR_ROM+12; // #define #define LED LED_DDR PTD.bit.bit2 DDRD.bit.bit2 Freescale Semiconductor, Inc... Motorla Motorla Motorla Motorla Motorla monitor monitor monitor monitor monitor rom rom rom rom rom call call call call call //////////////// // prototypes // //////////////// void ProgramFlash( void ); #endif [PIR:interrup.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 // Designer Reference Manual 142 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design // // Filename : interrup.c // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // interrupt service routines // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 01/08/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include //////////////////////////////////////////////////////////////////////////////// // The timeroverflow interrupt provides us with a 'main()' routine time base. // // The overflow value is set at 'TIMER_ROLLOVER' which is 10000us, 10ms. // //////////////////////////////////////////////////////////////////////////////// @interrupt void TIMEROVERFLOW( void ) { if ( TSC.bit.TOF && TSC.bit.TOIE ) { TSC.bit.TOF = 0; // clear interrupt flag if ( flags1.bit.ALARM_EVENT ) { DETECT_LED = 1; // has an intruder been detected? // led on /////////////////////////////////////// // led on for 6s per intruder detect // /////////////////////////////////////// if ( ++detect_led_count >= 600 ) // 600*10ms == 6s { DETECT_LED = 0; // led off flags1.bit.ALARM_EVENT = 0; // reset detect_led_count = 0; // reset } } else { detect_led_count = 0; // reset, re-affirmation } flags1.bit._10MS_MAINLOOP = 1; // 'main()' loop synchroniser } } // TIMEROVERFLOW() //------------------------------------------------------------------------------ Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 143 Freescale Semiconductor, Inc. PIR Source Code Files //////////////////////////////////////////////////////////////////////////////// // Timer channel0 capture interrupt routine // // This interrupt performs the ir comms capturing. The incoming ir comms // // will look like: // // // // Logic 0 level as seen by receiving PTD.4: // // -----------// // | | | // // | | | // // | | | // // |____________| | // // // // <-- 700us --><---700us --> // // // // Logic 1 level as seen by receiving PTD.4: // // ---------------------------------------// // | | | // // | | | // // | | | // // |____________| | // // // // <-- 700us --><----------- 2100us --------------------> // // // // Leader pulse as seen by receiving PTD.4: // // -----------// // | | | // // | | | // // | | | // // |____________| | // // // // <--- 4ms ---><--- 4ms ---> [NOTE: ms units here!] // // // // The micro measures the width of the +ve pulse to determine the // // bit value (or leader pulse). // // // // When all expected IR data has been received 'flags1.bit.CHECK_IR_DATA' is // // set. This allows the decoding of this data to occur in 'main()' as part of // // the normal program flow. When the ir buffer data has been checked then // // 'ir_mode' is then set to IR_IDLE. // //////////////////////////////////////////////////////////////////////////////// @interrupt void TIMERCHANNEL0( void ) { unsigned short int time_diff; Freescale Semiconductor, Inc... if ( TSC0.bit.CH0F && TSC0.bit.CH0IE ) { TSC0.bit.CH0F = 0; // clear interrupt flag if ( TSC0.bit.ELS0A { ir_start_time = TSC0.bit.ELS0A = TSC0.bit.ELS0B = && !TSC0.bit.ELS0B ) // +ve edge event TCH0; 0; 1; // time stamp +ve edge // -ve edge next Designer Reference Manual 144 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files } else { ir_stop_time = TCH0; // -ve edge event // time stamp -ve edge Freescale Semiconductor, Inc... ///////////////////////////// // pulse width calculation // ///////////////////////////// if ( ir_stop_time >= ir_start_time ) { time_diff = ir_stop_time - ir_start_time; } else // rollover compensation { time_diff = (TIMER_ROLLOVER - ir_start_time) + ir_stop_time; } ////////////////////////////////////////////////////////////////////// // Is this pulse an IR comms packet leader START pulse (approx 4ms) // ////////////////////////////////////////////////////////////////////// if ( time_diff >= _3P5MS && time_diff <= _4P5MS && ir_mode == IR_IDLE ) { memset( &ir_buffer[0], 0x00, sizeof(ir_buffer) ); // clear buffer... ir_byte_count = 0; // ...and ssociated ir_bit_count = 0; // ...IR comms build ir_block_length = 0; // ...variables ir_mode = IR_DATA; } else if ( ir_mode == IR_DATA )// must be building the bit pattern... { //////////////////////////////////////////////////////// // is this pulse in the acceptable pulse width region // //////////////////////////////////////////////////////// if ( time_diff >= MIN_PULSE_WIDTH && time_diff <= MAX_PULSE_WIDTH ) { //////////////////////////////////////////////////////////// // has a '1' arrived, if so set the 'bit_count' bit ie if // // 'bit_count' is 3 then set bit3 of 'temp' etc // //////////////////////////////////////////////////////////// if ( time_diff >= _1_BITWIDTH ) { ir_buffer[ir_byte_count] |= (unsigned char)(0x01< Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 145 Freescale Semiconductor, Inc. PIR Source Code Files ////////////////////////////////////////////// // total bytes expected is 'block_length+2' // // '2' for checksum hi and lo bytes // ////////////////////////////////////////////// ir_block_length = (unsigned char)(ir_buffer[0] + 2); //////////////////////// // buffer write clamp // //////////////////////// if ( ir_block_length > sizeof(ir_buffer) ) { ///////////////////////// // corrupt data, abort // ///////////////////////// ir_mode = IR_IDLE; TSC0.bit.ELS0A = 1; // +ve edge... TSC0.bit.ELS0B = 0; // ...next return; } } //////////////////////////////////////////////////////// // have we received the expected number of data bytes // //////////////////////////////////////////////////////// if ( ++ir_byte_count >= ir_block_length ) { /////////////////////////////////// ir_mode = IR_MAIN; // check data validity on // // return to 'main()' in call to // // 'IRCommsCheck()' // } /////////////////////////////////// } // 'if ( ++ir_bit_count >= 8 )' // 'if ( time_diff >= MIN_.. && time_diff <= MAX_.. )' // 'else if ( ir_mode == IR_DATA )' Freescale Semiconductor, Inc... } } TSC0.bit.ELS0A = 1; // +ve edge... TSC0.bit.ELS0B = 0; // ...next } // -ve edge interupt } } // TIMERCHANNEL0() //------------------------------------------------------------------------------ Designer Reference Manual 146 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... [PIR:interrup.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 Infra Red Reference Design // // Filename : interrup.h // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // header file for interrup.c // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 01/08/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __INTERRUP_H_ #define __INTERRUP_H_ //////////////// // prototypes // //////////////// @interrupt void TIMERCHANNEL0( void ); @interrupt void TIMEROVERFLOW( void ); #endif Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 147 Freescale Semiconductor, Inc. PIR Source Code Files [PIR:ireg.s] ; INTEGER EXTENSION ; Copyright (c) 1995 by COSMIC Software ; switch .ubsct xdef c_reg ; c_reg: ds.b 1 ; end Freescale Semiconductor, Inc... [PIR:jk.lkf] ################################################### # LINKER COMMAND FILE FOR MOTOROLA HC908JK1/3/JL3 # # PIR REFERENCE DESIGN # # ATEECC July 2000 # ################################################### ########### # symbols # ########### +def __memory=@.bss +def __stack=0x00ff ################################### # MC68HC908JK1/JK3 selection # # # # JK1: # # ROM_START=0xf600, ROM_SIZE=1536 # # # # JK3/JL3: # # ROM_START=0xec00, ROM_SIZE=4096 # ################################### +def ROM_START=0xec00 +def ROM_SIZE=4096 # symbol used by startup # stack pointer value for 'crts.s' ############## # CONST DATA # ############## # -b [b]eginning address of segment # -n [n]ame of segment # -m [m]ax size (bytes) of segment +seg .const -b 0xfbc0 -n ConstFLASH -m 64 ################################ # 64 bytes is min erase block # # size # # WE USE THE LAST 64 BYTE BLOCK# # IN THE FLASH MEMORY AREA # ################################ Designer Reference Manual 148 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files ############# # PAGE0 RAM # ############# ############################ # run time data allocation # ############################ +seg .ubsct -b 0x0080 -n TinyRam -m 128 ireg.o lreg.o Freescale Semiconductor, Inc... data.o ################################ # Occupies $080-$00ff (PAGE0). # # This ensures that the Cosmic # # variables 'c_reg' # # and 'c_lreg' are positioned # # at the beginning of ram this # # segment, ensuring that during# # any memcpy operations they do# # not get overwritten with # # copied data. # # # # NOTE: user global data here # ################################ ####################################################### # This segment is for PIR FLASH parameter programming.# # The variables from 'data.o' and 'mot_data.o' will # # overlap, that is ok since the variables occupying # # the same address will not be active at the same # # time. See 'datasort.c->AssignCurrentFLASHData()' # # for more information. # # # # The Motorola monitor routines expect their # # variables/data to be at known addresses. # # # # Notice the '-v' switch, it tells the linker # # not to report overlap errors for this segment # ####################################################### +seg .ubsct -b 0x88 -v -n MONITOR_RAM -m 128-8 ######################### mon_data.o # '8' since this segment# # starts at $0088 and # # not $0080 # ######################### ############################## # FLASH memory for user code # ############################## +seg .text -b ROM_START -n UserFLASH -m ROM_SIZE-64 ############################### # MC68HC908JK/L3 user code # # start address # # '64' for const FLASH # # variables, see 'ConstFLASH' # # segment # ############################### Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 149 Freescale Semiconductor, Inc. PIR Source Code Files ##################################### # const area for switch jump tables # ##################################### +seg .const -a UserFLASH ############################### # '-a' append section to # # previous # ############################### Freescale Semiconductor, Inc... ##################### # user object files # ##################### crts.o # Cosmic supplied startup routine a2d.o # a2d initialise/read analyse.o # data buffer scan routine, buffer contains PIR a2d values datasort.o # data intergity and decode delay.o # inline accurate delay routine deltasig.o # alternative pir 'event' routines using using delta-sigma # algorithm flashprg.o # flash programming interrup.o # interrupt service routines main.o # main() serial.o # RS232 debug (send) and IR comms routines startup.o # micro initilisation ie i/o, ram clear, timer initialisation #################### # Cosmic libraries # #################### c:/cosmic/cx08/lib/libi.h08 c:/cosmic/cx08/lib/libm.h08 ########### # Vectors # ########### +seg .const -b 0xffde -n Vectors -m 34 vectors.o Designer Reference Manual 150 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... [PIR:jk13&jl3.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 HC08 Infra Red Reference Design // // Filename : JK13&JL3.H // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // Compiler Register Definitions For MC68HC08JK1/JK3/JL3 Motorola // // 8 bit microcontrollers // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ---------------------------------------------// // 001 28/03/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __DECLARED_H_ #include "declared.h" #endif #ifndef #define __JK13_JL3IO_H_ __JK13_JL3IO_H_ /////////////////// // CPU Registers // /////////////////// @tiny volatile union @tiny volatile union @tiny volatile union @tiny volatile union @tiny volatile union @tiny volatile union @tiny volatile union @tiny volatile union @tiny volatile union uBITS uBITS uBITS uBITS uBITS uBITS uBITS uBITS uBITS PTA PTB PTD DDRA DDRB DDRD PDCR PTAPUE KBSCR @0x00; @0x01; @0x03; @0x04; @0x05; @0x07; @0x0A; @0x0D; @0x1A; Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 151 Freescale Semiconductor, Inc. PIR Source Code Files @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @near @near @near @near @near @near @near @near @near @near @near @near @near 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 uBITS union uBITS union uBITS union uBITS union uBITS union uBITS unsigned short union uBITS union uBITS unsigned short union uBITS union uBITS union uBITS unsigned short union uBITS union uBITS union uBITS unsigned short union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS unsigned short union uBITS union uBITS union uBITS KBIER INTSCR CONFIG2 CONFIG1 TSC TCNTH TCNT TCNTL TMODH TMOD TMODL TSC0 TCH0H TCH0 TCH0L TSC1 TCH1H TCH1 TCH1L ADSCR ADR ADICLK BSR RSR BFCR INT1 INT2 INT3 FLCR FLBPR BRKH BRK BRKL BRKSCR COPCTL @0x1B; @0x1D; @0x1E; @0x1F; @0x20; @0x21; @0x21; @0x22; @0x23; @0x23; @0x24; @0x25; @0x26; @0x26; @0x27; @0x28; @0x29; @0x29; @0x2A; @0x3C; @0x3D; @0x3E; @0xFE00; @0xFE01; @0xFE03; @0xFE04; @0xFE05; @0xFE06; @0xFE08; @0xFE09; @0xFE0C; @0xFE0C; @0xFE0D; @0xFE0E; @0xFFFF; int int int Freescale Semiconductor, Inc... int int //////////////////////////////////////////////////////// // access to the HC08 condition code reg : carry flag // //////////////////////////////////////////////////////// @builtin unsigned char carry( void ); ////////// // INT1 // ////////// #define IF1 #define IF3 #define IF4 #define IF5 ////////// // INT2 // ////////// #define IF14 bit2 bit4 bit5 bit6 bit7 Designer Reference Manual 152 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files ////////// // INT3 // ////////// #define IF15 ///////////// // TSC reg // ///////////// #define PS0 #define PS1 #define PS2 #define TRST #define TSTOP #define TOIE #define TOF ////////////// // TSC0 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 #define CH1IE #define CH1F bit0 Freescale Semiconductor, Inc... bit0 bit1 bit2 bit4 bit5 bit6 bit7 bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7 bit0 bit1 bit2 bit3 bit4 bit6 bit7 ////////////////////////////// // A2D status & control reg // ////////////////////////////// #define CH0 bit0 #define CH1 bit1 #define CH2 bit2 #define CH3 bit3 #define CH4 bit4 #define ADCO bit5 #define AIEN bit6 #define COCO bit7 Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 153 Freescale Semiconductor, Inc. PIR Source Code Files ///////////////////////// // A2D input clock reg // ///////////////////////// #define ADIV0 bit5 #define ADIV1 bit6 #define ADIV2 bit7 /////////////////// // FLASH control // /////////////////// #define PGM bit0 #define ERASE bit1 #define MASS bit2 #define HVEN bit3 Freescale Semiconductor, Inc... ///////////////////////////// // 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 //////////////////////////////////// // Monitor ROM Code Start Address // //////////////////////////////////// #define MONITOR_ROM 0xFC00 #endif [PIR:link08.bat] @echo off c:\cosmic\cx08\clnk -v -m jk.inf -e jk.err -o pir.h08 jk.lkf c:\cosmic\cx08\chex -fm -o pir.s19 pir.h08 c:\cosmic\cx08\clabs -l -v pir.h08 Designer Reference Manual 154 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files [PIR:lreg.s] ; LONG/FLOAT ACCUMULATOR ; Copyright (c) 1995 by COSMIC Software ; switch .ubsct xdef c_lreg ; c_lreg: ds.b 4 ; end Freescale Semiconductor, Inc... [PIR: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 Infra Red Reference Design // // Filename : main.c // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // 'main' routine // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 28/03/00 jt creation // // // // 21/10/00 jt Improved analogue buffer detection algorithm, // // reduced buffer size to 8. Now send buffer size to // // remote unit, so trigger size check can be performed.// // v1.0 // // THIS CODE SENT TO MOTORLA ON 22/11/00, FIRST RELEASE// // Checksum : $2F13E // // 23/01/01 jt Improved ir comms robustness with changes in // Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 155 Freescale Semiconductor, Inc. PIR Source Code Files // 'interrup.c->TIMERCHANNEL0'. Clamped the min Delta // // Sigma resolution to 10 bits, due to system leakage .// // Checksum : $2F9BA // // 07/02/01 jt Default pir parameters changed to: // // 'trigger_count' == 4 // // 'difference_band' == 6 // // 'main_loop_count' == 10 // // v1.1 // // SECOND RELEASE TO MOTOROLA // // Checksum : $2F20C // //////////////////////////////////////////////////////////////////////////////// #include "extern.h" #include "startup.h" #include "datasort.h" #include "deltasig.h" Freescale Semiconductor, Inc... //////////// // main() // //////////// void main( void ) { unsigned char ii; MicroStartUp(); while( 1 ) { /////////////////////////////////////////// // use analogue/op amp detect algorithm? // /////////////////////////////////////////// if ( MODE_SELECT_PIN ) { ServiceWatchDog(); A2DCheck(); // intruder detect check while ( !flags1.bit._10MS_MAINLOOP ); flags1.bit._10MS_MAINLOOP = 0; // main() loop sync IRCommsCheck(); // check for received ir comms packets } else /////////////////////////////////////////////// // use delta-sigma movement detect algorithm // /////////////////////////////////////////////// { ServiceWatchDog(); DeltaSigma(); // intruder detect check Designer Reference Manual 156 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files ////////////////////////////////////////////////////////////////// // an appreciable time here (100ms) to service any incoming IR // // comms, response can be slightly sluggish due to long 'SEI()' // // within 'DeltaSigma()'. // ////////////////////////////////////////////////////////////////// for ( ii = 0; ii < 10; ii++ ) { ServiceWatchDog(); while ( !flags1.bit._10MS_MAINLOOP ); flags1.bit._10MS_MAINLOOP = 0; IRCommsCheck(); } // main() loop sync // check for received ir comms packets Freescale Semiconductor, Inc... } ReAffirmDDR(); // data direction re-affirmation } } // main() //------------------------------------------------------------------------------ Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 157 Freescale Semiconductor, Inc. PIR Source Code Files [PIR:make08.bat] @echo off rem/////////////////////////// rem// assemble Cosmic files // rem/////////////////////////// c:\cosmic\cx08\ca6808 crts.s c:\cosmic\cx08\ca6808 ireg.s c:\cosmic\cx08\ca6808 lreg.s rem////////////////////////////// rem// compile all source files // rem////////////////////////////// call cc a2d call cc analyse call cc data call cc datasort call cc delay call cc deltasig call cc flashprg call cc interrup call cc main call cc mon_data call cc serial call cc startup call cc vectors rem/////////////////////////// rem// link the object files // rem/////////////////////////// call link08 rem//////////////////////////////// rem// deleting relative listings // rem//////////////////////////////// del *.ls rem////////////////////////// rem// list any error files // rem////////////////////////// dir *.err Freescale Semiconductor, Inc... Designer Reference Manual 158 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... [PIR:mon_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 Infra Red Reference Design // // Filename : mon_data.c // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : MC68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // monitor rom function data // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 09/10/00 jt creation // //////////////////////////////////////////////////////////////////////////////// ////////////////////// // Global variables // ////////////////////// @tiny unsigned char MONITOR_DATA[32]; // $008c NOTE1 @tiny unsigned short int MONITOR_LADDR; // $008a NOTE1 @tiny unsigned char MONITOR_CPUSPD; // $0089 NOTE1 @tiny unsigned char MONITOR_CTRLBYT; // $0088 NOTE1 //////////////////////////////////////////////////////////////////////////////// // NOTE1: // // These variables must be assigned to previously known addresses by the // // linker. The Motorola monitor rom functions expect them to be at those // // addresses. // // // // MOTOROLA_CTRLBYT @0x0088 when bit6 is set mass erase else page erase... // // ...used by Motorola erase routine // // MOTOROLA_CPUSPD @0x0089 == 4 (Fop*4, here 4MHZ resonator =>Fop==1MHz)...// // ...used by Motorola delay routine // // MOTOROLA_LADDR @0x008a $8a and $8b 'last address' for Motorola // // programming and erasing routines // // MOTOROLA_DATA[] @0x008c data to be programmed into a FLASH row // //////////////////////////////////////////////////////////////////////////////// Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 159 Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... [PIR:serial.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 Infra Red Reference Design // // Filename : serial.c // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // RS232 routines // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 12/05/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include "extern.h" #include "serial.h" #ifdef __PC_DEBUG_ // are pc comms for debug required //////////////////////////////////////////////////////////////////////////////// // This function sends it's function parameter out on the TX pin in RS232 // // format at 38400 bit rate. The data format is : // // // // 1 START - 8 DATA - 1 STOP - NOPARITY // // // // argument : data to send // // returns : none // //////////////////////////////////////////////////////////////////////////////// void Send_RS232_Byte( unsigned char send_data ) Designer Reference Manual 160 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files { rs232_data.byte = send_data; ////////////////////////////////////////////////// // using global assignment as the compiled code // // for the bit set/clear is smaller than using // // local 'send_data' // ////////////////////////////////////////////////// ////////////////////////////// // re-affirm data direction // ////////////////////////////// RS232_TX_DDR = 1; /////////////// // START bit // /////////////// RS232_TX = 0; DelayBitTime(); /////////////////////////// // xmit byte, bit by bit // /////////////////////////// if(rs232_data.bit.bit0) {RS232_TX else {RS232_TX if(rs232_data.bit.bit1) {RS232_TX else {RS232_TX if(rs232_data.bit.bit2) {RS232_TX else {RS232_TX if(rs232_data.bit.bit3) {RS232_TX else {RS232_TX if(rs232_data.bit.bit4) {RS232_TX else {RS232_TX if(rs232_data.bit.bit5) {RS232_TX else {RS232_TX if(rs232_data.bit.bit6) {RS232_TX else {RS232_TX if(rs232_data.bit.bit7) {RS232_TX else {RS232_TX Freescale Semiconductor, Inc... = = = = = = = = = = = = = = = = 1;DelayHiBitTime();} 0;DelayBitTime(); } 1;DelayHiBitTime();} 0;DelayBitTime(); } 1;DelayHiBitTime();} 0;DelayBitTime(); } 1;DelayHiBitTime();} 0;DelayBitTime(); } 1;DelayHiBitTime();} 0;DelayBitTime(); } 1;DelayHiBitTime();} 0;DelayBitTime(); } 1;DelayHiBitTime();} 0;DelayBitTime(); } 1;DelayHiBitTime();} 0;DelayBitTime(); /////////////////////////////////////////////////// // if last bit is a 0 need to pad width out here // // to be the same as 'if (rs232_data.bit.bitX)' // // which is [5] bus cycles // /////////////////////////////////////////////////// Nop();Nop();Nop();Nop();Nop(); } ////////////// // STOP bit // ////////////// RS232_TX = 1; DelayBitTime(); } // Send_RS232_Byte() //------------------------------------------------------------------------------ Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 161 Freescale Semiconductor, Inc. PIR Source Code Files //////////////////////////////////////////////////////////////////////////////// // 38400 bit rate STOP/START and LO bit time // //////////////////////////////////////////////////////////////////////////////// void DelayBitTime( void ) { Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop(); } // DelayBitTime() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... //////////////////////////////////////////////////////////////////////////////// // 38400 bit rate 'HI' bit time // //////////////////////////////////////////////////////////////////////////////// void DelayHiBitTime( void ) { Nop();Nop();Nop();Nop();Nop();Nop(); } // DelayHiBitTime() //------------------------------------------------------------------------------ //////////////////////////////////////////////////////////////////////////////// // This function transmits a serial buffer contents at 38400 bit rate using:- // // 1 start - 8 data - 1 stop and no parity. // // // // The block title is dervived from an 'enum' statement, see 'serail.h'. The // // 'block title' function argument serves only to identify to the recipient // // what type of data it is. The 'block_length' function argument denotes how // // many bytes of data there are, this is immediatly incremented by 2 to // // reflect the 'block_title' and 'block_length' bytes. Prior to transmission // // 'block_length' is again incremented by 2 to reflect the 16 bit checksum // // hi:lo bytes. // // // // COMMS PACKET STRUCTURE // // ====================== // // rs232_buffer[0] == block length byte // // rs232_buffer[1] == block title byte // // rs232_buffer[2] == data byte 1 // // rs232_buffer[n] == data byte 'n' // // rs232_buffer[n+1] == hibyte checksum // // rs232_buffer[n+2] == lobyte checksum // // // // Block length is the number of bytes in the block, EXCLUDING the checksum. // // Checksum is the 16 bit total of the block, EXCLUDING the checksum. // // // // The pc program will trigger when it receives: // // "ATEECC\x07\xf0" or "ATEECC\x09\xf1" these correspond to analogue and // // Delta Sigma data packets respectively. // // The "ATEECC" preamble was used to make the trigger string unique. It is // // possible that "\x07\xf0" and "\x09\xf1" could be contained in the // // data bytes as well as at the 'block_length' and 'block_title' locations. // // This could potentailly cause problems, I took no chances and used the // // preamble // // // // argument : block title and block length for buffer assignment // // returns : none // //////////////////////////////////////////////////////////////////////////////// Designer Reference Manual 162 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files void Send_RS232_CommsPacket( unsigned char block_title, unsigned char block_length ) { union uUNSIGNED_INTEGER checksum; unsigned char ii; ///////////////////////////////////////////////////////////// // insert the element values into the 'rs232_buffer' array // ///////////////////////////////////////////////////////////// block_length += 2; // block_length+block_title bytes == 2 rs232_buffer[BLOCK_LENGTH] = block_length; rs232_buffer[BLOCK_TITLE ] = block_title; Freescale Semiconductor, Inc... /////////////////////////////////// // calculate the packet checksum // /////////////////////////////////// checksum._16bit = 0; for ( ii = 0; ii < block_length; ii++ ) { checksum._16bit += rs232_buffer[ii]; } ///////////////////////////////////////// // append checksum to 'rs232_buffer[]' // ///////////////////////////////////////// rs232_buffer[block_length ] = checksum._8bit.hibyte; rs232_buffer[block_length+1] = checksum._8bit.lobyte; ////////////// // preamble // ////////////// Send_RS232_Byte( Send_RS232_Byte( Send_RS232_Byte( Send_RS232_Byte( Send_RS232_Byte( Send_RS232_Byte( 'A' 'T' 'E' 'E' 'C' 'C' ); ); ); ); ); ); ////////////////////////////////////////////////////////////////////// // the complete block consista of:// // block length + block title + n*data + checksum hi + checksum lo // // The number of bytes that we have to transmit is block_length + 2 // ////////////////////////////////////////////////////////////////////// block_length += 2; /////////////////////////// // send packet out on TX // /////////////////////////// for ( ii = 0; ii < block_length; ii++ ) { Send_RS232_Byte( rs232_buffer[ii] ); } } // Send_RS232_CommsPacket() //------------------------------------------------------------------------------ Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 163 Freescale Semiconductor, Inc. PIR Source Code Files #endif // IR comms... //////////////////////////////////////////////////////////////////////////////// // This function transmits it's function argument out on the TX pin // // Argument : data byte to send // // Returns : none // //////////////////////////////////////////////////////////////////////////////// void Send_IR_Byte( unsigned char data ) { unsigned char ii; Freescale Semiconductor, Inc... /////////////// // data byte // /////////////// for ( ii = 0; ii < 8; ii++ ) { data >>= 1; if ( carry() ) Send_1(); else Send_0(); } } // Send_IR_Byte() //------------------------------------------------------------------------------ //////////////////////////////////////////////////////////////////////////////// // This functions transmits an ir data packet. The data is organised as: // // // // ir_buffer[0] == block length byte // // ir_buffer[1] == block title byte // // ir_buffer[2] == data byte 1 // // ir_buffer[n] == data byte 'n' // // ir_buffer[n+1] == hibyte checksum // // ir_buffer[n+2] == lobyte checksum // // // // Block length is the number of bytes in // // the block, EXCLUDING the checksum. // // // // Checksum is the 16 bit total of the // // block, EXCLUDING the checksum. // // // // The checksum is calculated prior to the and the checksum bytes are // // appended to the transmission packet. // // // // arguments : block title and block length for transmission buffer // // returns : none // //////////////////////////////////////////////////////////////////////////////// void Send_IR_CommsPacket( unsigned char block_title, unsigned char block_length) { union uUNSIGNED_INTEGER checksum; unsigned char ii; Designer Reference Manual 164 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files TSC0.bit.CH0IE = 0; /////////////////////////////////////////////////// // disable timer0 capture interrupt else we will // // detect the comms we're about to transmit! // /////////////////////////////////////////////////// ////////////////////////////// // re-affirm data direction // ////////////////////////////// IR_TX_DDR = 1; ////////////////////////////////////////////////////////// // insert the element values into the 'ir_buffer' array // ////////////////////////////////////////////////////////// block_length += 2; // block_length+block_title byes == 2 ir_buffer[BLOCK_LENGTH] = block_length; ir_buffer[BLOCK_TITLE ] = block_title; /////////////////////////////////// // calculate the packet checksum // /////////////////////////////////// checksum._16bit = 0; for ( ii = 0; ii < block_length; ii++ ) { checksum._16bit += ir_buffer[ii]; } //////////////////////////////////// // append checksum to 'ir_buffer' // //////////////////////////////////// ir_buffer[block_length ] = checksum._8bit.hibyte; ir_buffer[block_length+1] = checksum._8bit.lobyte; ////////////////////////////////////////////////////////////////////// // the complete block consista of:// // block length + block title + n*data + checksum hi + checksum lo // // The number of bytes that we have to transmit is block_length + 2 // ////////////////////////////////////////////////////////////////////// block_length += 2; ///////////////////////////// // 4ms synchronising pulse // ///////////////////////////// StartPulse(); ////////////////////////////// // send packet out on IR TX // ////////////////////////////// for ( ii = 0; ii < block_length; ii++ ) { Send_IR_Byte( ir_buffer[ii] ); } Freescale Semiconductor, Inc... Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 165 Freescale Semiconductor, Inc. PIR Source Code Files StopPulse(); if ( TSC0.bit.CH0F ) { TSC0.bit.CH0F = 0; } // clear interrupt flag if set whilst interrupt disabled TSC0.bit.CH0IE = 1; // IR detect timer0 capture interrupt back on } // Send_IR_CommsPacket() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... //////////////////////////////////////////////////////////////////////////////// // Logic 0 as transmitted by the IR TX pin: // // -----------// // |////////////| | // // |// 38kHz ///| | // // |////////////| | // // |____________|____________| // // // // <-- 700us --><-- 700us --> // // // // Logic level as seen by receiving pin: // // -----------// // | | | // // | | | // // | | | // // |____________| | // // // // <-- 700us --><---700us --> // // // // The micro measures the width of the +ve pulse to determine the bit value. // //////////////////////////////////////////////////////////////////////////////// void Send_0( void ) { _38KHzBurstOnTime(_700US); _38KHzBurstOffTime(_700US); } // Send_0() //------------------------------------------------------------------------------ Designer Reference Manual 166 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... //////////////////////////////////////////////////////////////////////////////// // Logic 1 as transmitted by the IR TX pin: // // // // -----------// // |////////////| | // // |// 38kHz ///| | // // |////////////| | // // |____________|________________________________________| // // // // <-- 700us --><----------- 2100us --------------------> // // // // Logic level as seen by receiving pin: // // ---------------------------------------// // | | | // // | | | // // | | | // // |____________| | // // // // <-- 700us --><----------- 2100us --------------------> // // // // The micro measures the width of the +ve pulse to determine the bit value. // //////////////////////////////////////////////////////////////////////////////// void Send_1( void ) { _38KHzBurstOnTime(_700US); // 27*26us approx 700us _38KHzBurstOffTime(_2100US); // 81(3*27)*26us approx 2.1ms } // Send_1() //------------------------------------------------------------------------------ //////////////////////////////////////////////////////////////////////////////// // The leader pulse as transmitted by the IR TX pin: // // // // -----------// // |////////////| | // // |// 38kHz ///| | // // |////////////| | // // |____________|____________| // // // // <--- 4ms ---><--- 4ms ---> // // // // Above leader pulse as seen by receiving pin: // // -----------// // | | | // // | | | // // | | | // // |____________| | // // // // <--- 4ms ---><--- 4ms ---> // // // // The receiving micro measures the width of the +ve pulse to determine the // // bit value. // //////////////////////////////////////////////////////////////////////////////// void StartPulse( void ) { Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 167 Freescale Semiconductor, Inc. PIR Source Code Files _38KHzBurstOnTime(_4000US); _38KHzBurstOffTime(_4000US); } //------------------------------------------------------------------------------ //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// void StopPulse( void ) { _38KHzBurstOnTime(_700US); // 27*26us approx 700us } //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... //////////////////////////////////////////////////////////////////////////////// // This function produces count*26us pulses with 50% mark space ratio ie // // 13us high and 13us low. // // // // At 1MHz, 13us == 13 bus cycles // // We use 'nop' to give us the timing we require. // // // // The number of nops is less for the low time as we include the do/while // // cycle count in it's timing. // // // // The total function cycle count is count*26 + 13 (for stack/wdg and return) // // Note: above cycle count excludes the 'call' cycles. // //////////////////////////////////////////////////////////////////////////////// void _38KHzBurstOnTime( unsigned char count ) { ServiceWatchDog(); do { ////////////// // start hi // ////////////// IR_TX = 1; Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop(); ///////////// // now low // ///////////// IR_TX = 0; Nop();Nop();Nop(); } while ( --count ); } // _38KHzBurstOnTime() //------------------------------------------------------------------------------ Designer Reference Manual 168 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files //////////////////////////////////////////////////////////////////////////////// // This function produces a count*26us timing delay // // // // At 1MHz bus, 26us == 26 bus cycles // // We use 'nop' to give us the timing we require. // // // // The total function cycle count is count*26 + 13 (for stack/wdg and return) // // Note: above cycle count excludes the 'call' cycles. // //////////////////////////////////////////////////////////////////////////////// void _38KHzBurstOffTime( unsigned char count ) { ServiceWatchDog(); do { Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop(); Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop();Nop(); } while ( --count ); } // _38KHzBurstOffTime() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... [PIR:serial.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 Infra Red Reference Design // // Filename : serial.h // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // header file for serial.c // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 12/05/00 jt creation // //////////////////////////////////////////////////////////////////////////////// Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 169 Freescale Semiconductor, Inc. PIR Source Code Files #ifndef #define #ifndef #include #endif #define #define __SERIAL_H_ __SERIAL_H_ __DEFINE_H_ "define.h" IR_TX IR_TX_DDR PTD.bit.bit7 DDRD.bit.bit7 Freescale Semiconductor, Inc... enum { BLOCK_LENGTH, BLOCK_TITLE, DATA_BYTE1, DATA_BYTE2, DATA_BYTE3, DATA_BYTE4, DATA_BYTE5 }; enum // block title values { SEND_A2D_TRIGGER = 0x01, SEND_A2D_DIFFERENCE, SEND_A2D_LOOPTIME, SEND_DELTA_SIG_RESOLUTION, SEND_DELTA_SIG_EVENT, SEND_PASSWORD, UPDATE_A2D_TRIGGER, UPDATE_A2D_DIFFERENCE, UPDATE_A2D_LOOPTIME, UPDATE_DELTA_SIG_RESOLUTION, UPDATE_DELTA_SIG_EVENT }; //////////////////////// // block title values // //////////////////////// enum { PIR_DATA = 0xf0, SIGMA_DATA, DETECT_EVENT }; #define #define #define _700US _2100US _4000US 27 81 155 // 27*26us == 702us // 27*3*26us == 2106us // 155*26us == 4030us Designer Reference Manual 170 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files //////////////// // prototypes // //////////////// #ifdef __PC_DEBUG_ #define RS232_TX #define RS232_TX_DDR PTD.bit.bit3 DDRD.bit.bit3 void Send_RS232_Byte( unsigned char ); void DelayBitTime( void ); void DelayHiBitTime( void ); void Send_RS232_CommsPacket( unsigned char, unsigned char ); #endif void Send_IR_CommsPacket( unsigned char, unsigned char ); void Send_0( void ); void Send_1( void ); void StartPulse( void ); void StopPulse( void ); void _38KHzBurstOnTime( unsigned char ); void _38KHzBurstOffTime( unsigned char ); #endif Freescale Semiconductor, Inc... [PIR: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 Infra Red Reference Design // // Filename : startup.c // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // startup routines // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 17/05/00 jt creation // Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 171 Freescale Semiconductor, Inc. PIR Source Code Files //////////////////////////////////////////////////////////////////////////////// #include "extern.h" #include "deltasig.h" #include "startup.h" Freescale Semiconductor, Inc... //////////////////////////////////////////////////////////////////////////////// // Micro setup and initialisation. This is the first non compiler code // // executed after a reset. // //////////////////////////////////////////////////////////////////////////////// void MicroStartUp( void ) { CONFIG1.reg = 0x00; // COP cycle == (2^18-2^4)*1/Fosc, LVI enabled, // STOP mode off, watchdog enabled CONFIG2.reg = 0x10; // IRQ pull-up enabled, LVI enabled @4V with 5V Vdd. ServiceWatchDog(); SEI(); INTSCR.reg = 0x02; // IRQ interrupts disabled /////////////////////////////////// // data direction register setup // /////////////////////////////////// ////////////////////////////////////////////////////////////// PTB.reg = 0x00; // // DDRB.reg = 0x00; // bit7:DS fast charge o/p, bit6:DS charge/discharge o/p // // bit5:DS analogue i/p , bit4:LM324 analogue i/p // // bit3/2/1/0:for monitor mode programming // // NOTE: even though some pins are output I have made them // // an input on startup, this is to stop any charge/discharge// // of the Delta Sigma capacitor. // PTD.reg = 0x00; // IR led off // DDRD.reg = 0x8f; // bit7:IR tx, bit6:mode select i/p, bit5:cap gnd drive // // bit4:IR rx, bit3:rs232 tx , bit2:led // ////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////// // detect mode sense and charge cap if delta-sigma selected // ////////////////////////////////////////////////////////////// if ( !MODE_SELECT_PIN ) { FastCharge(); } ///////////////////////////////////////////////////////////// // We clear all ram areas upto $F8. Leave the area $F8-$FF // // as there has been two calls already. // ///////////////////////////////////////////////////////////// ClearRam(); ///////////////////////////// // variable initialisation // ///////////////////////////// pir_buffer_ptr = &pir_buffer[0]; // assign buffer pointer Designer Reference Manual 172 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files ///////////////// // timer setup // ///////////////// TSC.reg = 0x70; // set TOIE/TSTOP/TRST,1X prescaler ie 1us @4MHz Xtal TMOD = TIMER_ROLLOVER; // == 10000us == 10ms until overflow ///////////////////////////////////////////// // start timer0 capture mode for +ve edges // ///////////////////////////////////////////// TSC0.reg = 0b01000100; // |||||||| // ||||||||____ CH0MAX 100% pwm off // |||||||_____ TOV0 PTD4 not toggled on overflow // ||||||______ ELS0A } +ve edge trigger capture // |||||_______ ELS0B } -ve edge trigger capture // ||||________ MS0A unbuffered compare/pwm operation on // |||_________ MS0B buffered compare/pwm off // ||__________ CHOIE interrupt enabled // |___________ CH0F read only TSC1.reg = 0x00; TSC.bit.TSTOP = 0; // timer1 off // start timer Freescale Semiconductor, Inc... CLI(); } // MicroStartUp() //-----------------------------------------------------------------------------//////////////////////////////////////////////////////////////////////////////// // Defensive measure for increased robustness // //////////////////////////////////////////////////////////////////////////////// void ReAffirmDDR( void ) { DDRD.reg = 0x8f; if ( !MODE_SELECT_PIN ) DDRB.reg = 0x00; // Delta Sigma else DDRB.reg = 0xe0; // 8 bit analogue } // ReAffirmDDR() //-----------------------------------------------------------------------------void ReAffirmDDR( void ) { DDRD.reg = 0xaf; if ( !MODE_SELECT_PIN ) DDRB.reg = 0x00; // Delta Sigma else DDRB.reg = 0xe0; // 8 bit analogue } // ReAffirmDDR() //------------------------------------------------------------------------------ Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 173 Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... [PIR: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 Infra Red Reference Design // // Filename : startup.h // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // header file for startup.c // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 17/05/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __STARTUP_H_ #define __STARTUP_H_ //////////////// // prototypes // //////////////// void MicroStartUp( void ); void ReAffirmDDR( void ); #endif Designer Reference Manual 174 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Source Code Files Freescale Semiconductor, Inc... [PIR:vectors.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 Infra Red Reference Design // // Filename : vectors.c // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : MC68HC908JK1/3 // ///////////////////// File Contents ////////////////////////////////////////// // vectors - an array of void pointers // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 28/03/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include "define.h" // 'NULL' defined extern void TIMEROVERFLOW( void ); extern void TIMERCHANNEL0( void ); extern void _stext(); // startup routine. defined by Cosmic in 'crts.s' Passive Infrared (PIR) Unit MOTOROLA PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 175 Freescale Semiconductor, Inc. PIR Source Code Files ////////////////////////////////////////////////////////////////////////////// // An array of function pointers ie the addresses of the interrupt routines // ////////////////////////////////////////////////////////////////////////////// void (*const _vectab[17])() = { /////////////////////////////////// _stext, // A2D CONVERSION COMPLETE $FFDE // | _stext, // KEYBOARD $FFE0 // | NULL, // NOT USED $FFE2 // | NULL, // NOT USED $FFE4 // | NULL, // NOT USED $FFE6 // | NULL, // NOT USED $FFE8 // | NULL, // NOT USED $FFEA // | NULL, // NOT USED $FFEC // | NULL, // NOT USED $FFEE // | NULL, // NOT USED $FFF0 // | TIMEROVERFLOW, // TIMER OVERFLOW $FFF2 // | _stext, // TIMERCHANNEL1, $FFF4 // | TIMERCHANNEL0, // TIMERCHANNEL0, $FFF6 // | NULL, // NOT USED $FFF8 // | _stext, // IRQ $FFFA // | _stext, // SWI $FFFC // V _stext // RESET $FFFE // Increasing }; /////////////////////////////////// Priority //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... Designer Reference Manual 176 PIR Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- Passive Infrared (PIR) Unit Appendix F. REMOTE Source Code Files Throughout this document, references are made to source code files contained in this appendix. They are: [REMOTE:button.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 [REMOTE:button.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 [REMOTE:cc.bat] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 [REMOTE:config.dat] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .194 [REMOTE:convert.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 [REMOTE:convert.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 [REMOTE:crtsi.s] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 [REMOTE:data.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 [REMOTE:datasort.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .203 [REMOTE:datasort.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .213 [REMOTE:declared.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .214 [REMOTE:define.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 [REMOTE:delay.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 [REMOTE:delay.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 [REMOTE:digipot.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 [REMOTE:digipot.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 [REMOTE:error.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 [REMOTE:error.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 [REMOTE:extern.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 [REMOTE:gp32.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 [REMOTE:gp32.lkf] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 [REMOTE:i2c.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .235 [REMOTE:i2c.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .239 [REMOTE:interrup.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 [REMOTE:interrup.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .246 [REMOTE:ir_comms.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247 [REMOTE:ir_comms.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 [REMOTE:ireg.s] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 [REMOTE:lcd.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .255 Freescale Semiconductor, Inc... Passive Infrared (PIR) Unit MOTOROLA Designer Reference Manual REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com 177 Freescale Semiconductor, Inc. REMOTE Source Code Files [REMOTE:lcd.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .260 [REMOTE:link08.bat] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .261 [REMOTE:lreg.s] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 [REMOTE:main.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 [REMOTE:make08.bat] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 [REMOTE:mode.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 [REMOTE:mode.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 [REMOTE:rs_comms.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 [REMOTE:rs_comms_h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 [REMOTE:rtc.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .275 [REMOTE:rtc.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .280 [REMOTE:startup.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 [REMOTE:startup.h] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 [REMOTE:vectors.c] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 For those viewing this document in .pdf format, these files can be accessed by clicking on the appropriate hyperlink reference found in the textual portions of the document. Freescale Semiconductor, Inc... Designer Reference Manual 178 Passive Infrared (PIR) Unit REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files [REMOTE: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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : button.c // // Author : jtravers // // Compiler : Cosmic HC08 // // CPU : MC68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // Remote control button scan routine // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 19/06/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include "extern.h" #include "datasort.h" #include "ir_comms.h" #include "delay.h" #include "lcd.h" #include "convert.h" #include "mode.h" #include "rs_comms.h" #include "digipot.h" #include "rtc.h" #include "button.h" Freescale Semiconductor, Inc... Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 179 Freescale Semiconductor, Inc. REMOTE Source Code Files void DefaultButtons( void ) { if ( button_pattern._16bit == DEFAULT_BUTTONS ) { // re-affirmation pressed_pattern = DEFAULT_BUTTONS; button_debounce_counter = 0; button_flags.bit.FIRST_PASS = 0; button_flags.bit.AUTO_SCROLL = 0; } else { //////////////////////////////////////////////////////////// // OK, a press detected, this is the first recognition of // //////////////////////////////////////////////////////////// button_press_status = BUTTON_PRESSED; pressed_pattern = button_pattern._16bit; } } // DefaultButtons() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... void PressedButtons( void ) { /////////////////////////////////////////////// // No longer pressed, back to pull-up values // /////////////////////////////////////////////// if ( button_pattern._16bit == 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._16bit == pressed_pattern ) { 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_SCROLL = 0; // no buttons have autoscroll // presently DecodeButtons(); // respond to press } else // auto repeat can now occur { /////////////////////////////////////////////////////////////// // same button as for first debounce is still being pressed, // // after (35-DEBOUNCE_COUNTER)*10ms allow auto repeat of IR // // transmission // /////////////////////////////////////////////////////////////// Designer Reference Manual 180 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files if ( button_debounce_counter >= 35 )// (35-DEBOUNCE_COUNTER)*10ms { // before auto repeat mode button_debounce_counter = 15; // (35-15)*10ms is the effective // repeat speed == 200ms, // approx 5 times per second if (button_flags.bit.AUTO_SCROLL)// do you require auto scroll... { DecodeButtons(); // ...if so keep decoding } } } } } else { /////////////////////////////////////////////////////////////////// // pattern is different but something is pressed, start again... // // If you required dual button presses ie if one button was held // // and another was repeatedly pressed/released you would decode // // that situation here. I have not needed this functionality but // // this 'else' statement would be the area to code it. // /////////////////////////////////////////////////////////////////// button_press_status = NO_BUTTON_PRESS; pressed_pattern = DEFAULT_BUTTONS; button_debounce_counter = 0; button_flags.bit.FIRST_PASS = 0; button_flags.bit.AUTO_SCROLL = 0; } } // end of 'else' } // PressedButtons() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... void ReleasedButtons( void ) { /////////////////////////////////////////////////////////// // Ok, we think all the buttons are now at their default // /////////////////////////////////////////////////////////// if ( --button_release_counter == 0 ) { button_press_status = NO_BUTTON_PRESS; } else { // checking for noise... if ( button_pattern._16bit != DEFAULT_BUTTONS ) { button_press_status = BUTTON_PRESSED; // continue as pressed... } } } // ReleasedButtons() //------------------------------------------------------------------------------ Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 181 Freescale Semiconductor, Inc. REMOTE Source Code Files //////////////////////////////////////////////////////////////////////////////// // This function does the physical button decoding. // // // // Arguments: none // // returns : none // //////////////////////////////////////////////////////////////////////////////// void DecodeButtons( void ) { switch ( mode ) { case MODE_USER_ENTER_PASSWORD : PasswordButtons(); break; Freescale Semiconductor, Inc... case MODE_EDIT_A2D_TRIGGER case MODE_EDIT_A2D_DIFFERENCE case MODE_EDIT_A2D_LOOPTIME case MODE_EDIT_DELTA_SIG_RESOLUTION case MODE_EDIT_DELTA_SIG_EVENT case MODE_TIME_OF_DAY case MODE_LCD_CONTRAST_ADJUST StandardButtons(); break; : : : : : : : case MODE_SHUTTING_DOWN : ////////////////////////////////////////////////////////////////// // user press whilst the closing down dots '.' are beng printed // ////////////////////////////////////////////////////////////////// mode = mode_copy; // restore mode before prior shut down execution if ( mode == MODE_USER_ENTER_PASSWORD ) { PasswordEntryScreen(); } if ( mode >= MODE_EDIT_A2D_TRIGGER && mode <= MODE_EDIT_DELTA_SIG_EVENT ) { RedrawFlashParameterScreen(); } shut_down_ii = 0; shut_down_jj = 0; break; } // job done, initiliase for next // job done, initiliase for next stop_counter = 0; // reset the stop mode entry timeout counter } // DecodeButtons() //------------------------------------------------------------------------------ void ReadButtons( void ) { button_pattern._16bit = DEFAULT_BUTTONS; DDRA.reg &= 0x1f; // assume no button(s) pressed // defensive measure, ensure column drivers are input Designer Reference Manual 182 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files ////////////////////// // activate COLUMN1 // ////////////////////// PTA.bit.bit5 = 0; // lo... DDRA.bit.bit5 = 1; // ...and an output ///////////////////////// // read B5/B4/B3/B2/B1 // ///////////////////////// Delay(_50US); // wait...before read for pin level to settle button_pattern._8bit.lobyte.bit.bit0 button_pattern._8bit.lobyte.bit.bit1 button_pattern._8bit.lobyte.bit.bit2 button_pattern._8bit.lobyte.bit.bit3 button_pattern._8bit.lobyte.bit.bit4 = = = = = PTA.bit.bit0; PTA.bit.bit1; PTA.bit.bit2; PTA.bit.bit3; PTA.bit.bit4; Freescale Semiconductor, Inc... ////////////////////// // Column1 inactive // ////////////////////// DDRA.bit.bit5 = 0; // ...now an input ////////////////////// // activate COLUMN2 // ////////////////////// PTA.bit.bit6 = 0; // lo... DDRA.bit.bit6 = 1; // ... and an output ////////////////////////// // read B10/B9/B8/B7/B6 // ////////////////////////// Delay(_50US); // wait...before read for pin level to settle button_pattern._8bit.lobyte.bit.bit5 button_pattern._8bit.lobyte.bit.bit6 button_pattern._8bit.lobyte.bit.bit7 button_pattern._8bit.hibyte.bit.bit0 button_pattern._8bit.hibyte.bit.bit1 = = = = = PTA.bit.bit0; PTA.bit.bit1; PTA.bit.bit2; PTA.bit.bit3; PTA.bit.bit4; ////////////////////// // Column2 inactive // ////////////////////// DDRA.bit.bit6 = 0; // ...now an input ////////////////////// // activate COLUMN3 // ////////////////////// PTA.bit.bit7 = 0; // lo... DDRA.bit.bit7 = 1; // ... and an output Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 183 Freescale Semiconductor, Inc. REMOTE Source Code Files ////////////////////////////// // read B15/B14/B13/B12/B11 // ////////////////////////////// Delay(_50US); // wait...before read for pin level to settle button_pattern._8bit.hibyte.bit.bit2 button_pattern._8bit.hibyte.bit.bit3 button_pattern._8bit.hibyte.bit.bit4 button_pattern._8bit.hibyte.bit.bit5 button_pattern._8bit.hibyte.bit.bit6 = = = = = PTA.bit.bit0; PTA.bit.bit1; PTA.bit.bit2; PTA.bit.bit3; PTA.bit.bit4; Freescale Semiconductor, Inc... ////////////////////// // Column3 inactive // ////////////////////// DDRA.bit.bit7 = 0; // ...now an input /////////////////////// // defensive measure // /////////////////////// DDRA.reg = 0x00; //////////////////// // detect a press // //////////////////// switch ( button_press_status ) { case NO_BUTTON_PRESS: DefaultButtons(); break; case BUTTON_PRESSED: PressedButtons(); break; case BUTTON_RELEASED: ReleasedButtons(); break; } } // ReadButtons() //------------------------------------------------------------------------------ //////////////////////////////////////////////////////////////////////////////// // The switch ( mode ) { case MODE_EDIT_A2D_TRIGGER : ir_buffer[DATA_BYTE1] = adjust_value._8bit.lobyte; Send_IR_CommsPacket( UPDATE_A2D_TRIGGER, 1 ); Designer Reference Manual 184 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files button_flags.bit.AUTO_SCROLL = 1; break; case MODE_EDIT_A2D_DIFFERENCE : ir_buffer[DATA_BYTE1] = adjust_value._8bit.lobyte; Send_IR_CommsPacket( UPDATE_A2D_DIFFERENCE, 1 ); button_flags.bit.AUTO_SCROLL = 1; break; case MODE_EDIT_A2D_LOOPTIME : ir_buffer[DATA_BYTE1] = adjust_value._8bit.lobyte; Send_IR_CommsPacket( UPDATE_A2D_LOOPTIME, 1 ); button_flags.bit.AUTO_SCROLL = 1; break; Freescale Semiconductor, Inc... case MODE_EDIT_DELTA_SIG_RESOLUTION : temp = adjust_value._8bit.lobyte; ConvertBitToResolution(temp); ir_buffer[DATA_BYTE1] = adjust_value._8bit.hibyte; ir_buffer[DATA_BYTE2] = adjust_value._8bit.lobyte; Send_IR_CommsPacket( UPDATE_DELTA_SIG_RESOLUTION, 2 ); adjust_value._8bit.lobyte = temp; // restore for next inc/dec if required button_flags.bit.AUTO_SCROLL = 1; break; case MODE_EDIT_DELTA_SIG_EVENT : ir_buffer[DATA_BYTE1] = adjust_value._8bit.hibyte; ir_buffer[DATA_BYTE2] = adjust_value._8bit.lobyte; Send_IR_CommsPacket( UPDATE_DELTA_SIG_EVENT, 2 ); button_flags.bit.AUTO_SCROLL = 1; break; case MODE_LCD_CONTRAST_ADJUST : WriteText2(LINE1_2, "", PRECLEAR); // clear whole screen prior to TOD mode = MODE_TIME_OF_DAY; break; } } // Enter() //------------------------------------------------------------------------------ ////////////////////////////////////////////////////////////////////////////// // The Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 185 Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... ////////////////////////////////////////////////////////////////////////////// // The ); ); Designer Reference Manual 186 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files IntegerToASCII( adjust_value._16bit, &text_buffer[7] WriteText1(LINE2); button_flags.bit.AUTO_SCROLL = 1; break; ); case MODE_LCD_CONTRAST_ADJUST : DigiPot(DP_INCREMENT); button_flags.bit.AUTO_SCROLL = 1; break; } } // Increment() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... ////////////////////////////////////////////////////////////////////////////// // The Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 187 Freescale Semiconductor, Inc. REMOTE Source Code Files } IntegerToASCII( adjust_value._16bit, &text_buffer[7] ); WriteText1(LINE2); button_flags.bit.AUTO_SCROLL = 1; break; case MODE_LCD_CONTRAST_ADJUST : DigiPot(DP_DECREMENT); button_flags.bit.AUTO_SCROLL = 1; break; } } // Decrement() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... ///////////////////////////////////////////////////////// // A button has been decoded as being pressed, perform // // any approriate functionality // ///////////////////////////////////////////////////////// void StandardButtons( void ) { switch ( pressed_pattern ) { case BUTTON_1 : Send_IR_CommsPacket( SEND_DELTA_SIG_EVENT, 0 ); break; case BUTTON_2 : Send_IR_CommsPacket( SEND_DELTA_SIG_RESOLUTION, 0 ); break; case BUTTON_3 : Send_IR_CommsPacket( SEND_A2D_LOOPTIME, 0 ); break; case BUTTON_4 : Send_IR_CommsPacket( SEND_A2D_DIFFERENCE, 0 ); break; case BUTTON_5 : Send_IR_CommsPacket( SEND_A2D_TRIGGER, 0 ); break; case BUTTON_6 : ForceRTC(); break; case BUTTON_7 : // not used...user code here break; case BUTTON_8 : // not used...user code here break; Designer Reference Manual 188 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files case BUTTON_9 : // not used...user code here break; case BUTTON_10 : // not used...user code here break; case BUTTON_11 : Increment(); break; case BUTTON_12 : Decrement(); break; case BUTTON_13 : LCD_ContrastAdjust(); break; case BUTTON_14 : Esc(); break; case BUTTON_15 : Enter(); break; } } // StandardButtons() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... /////////////////////////////////////////////////////////////////////////// // A button has been decoded as being pressed. during password entry the // // buttons apply numeric text in the lcd. // /////////////////////////////////////////////////////////////////////////// void PasswordButtons( void ) { char temp = 0; switch ( pressed_pattern ) { case BUTTON_1 : temp = '1'; break; case BUTTON_2 : temp = '2'; break; case BUTTON_3 : temp = '3'; break; Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 189 Freescale Semiconductor, Inc. REMOTE Source Code Files case BUTTON_4 : temp = '4'; break; case BUTTON_5 : temp = '5'; break; case BUTTON_6 : temp = '6'; break; case BUTTON_7 : temp = '7'; break; case BUTTON_8 : temp = '8'; break; case BUTTON_9 : temp = '9'; break; case BUTTON_10 : temp = '0'; break; case BUTTON_15 : PasswordEnter(); break; } if ( temp ) { text_buffer[character_count++] = temp; text_buffer[character_count ] = '\0'; WriteText1(LINE2+5); //////////////////////////////// // test for number entry wrap // //////////////////////////////// if ( character_count >= 5 ) { character_count = 0; flags1.bit.PASSWORD_WRAP = 1; // all the 'X' have been overwritten } ///////////////////////////////////////////////////// // make the 'blinking' cursor follow the character // // after each character is entered // ///////////////////////////////////////////////////// SetCursorAddress((unsigned char)(LINE2+5+character_count)); button_flags.bit.AUTO_SCROLL = 1; Freescale Semiconductor, Inc... Designer Reference Manual 190 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files } } // PasswordButtons() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... void PasswordEnter( void ) { //////////////////////////////////////////////////////////////////////////////// // before the password number is processed it has to contain 5 numerals, ie // // the user has to have overwritten the initial 'XXXXX' // //////////////////////////////////////////////////////////////////////////////// if ( flags1.bit.PASSWORD_WRAP ) // correct number of digits entered? { // the -'0' converts from ASCII to decimal before the decimal place multiply user_password = 10000*(text_buffer[0]-'0'); user_password += 1000* (text_buffer[1]-'0'); user_password += 100* (text_buffer[2]-'0'); user_password += 10* (text_buffer[3]-'0'); user_password += (text_buffer[4]-'0'); InitialiseLCD(NOBLINK|NOUNDERLINE_CURSOR); // turn 'blinking' cursor off WriteText2( LINE1, "Password" , NOPRECLEAR ); if ( user_password == pir_password._16bit ) { WriteText2( LINE2, "Accepted!", NOPRECLEAR ); Delay10ms(_1S); // show message for 1s mode = MODE_TIME_OF_DAY; WriteText2(LINE1_2, "", PRECLEAR); // clear whole screen prior to TOD InitialiseRS232(); // allow RTC update } else { WriteText2( LINE2, "Rejected!", NOPRECLEAR ); Delay10ms(_1S); // show message for 1s PasswordEntryScreen(); // try again } } } // PasswordEnter() //------------------------------------------------------------------------------ void LCD_ContrastAdjust( void ) { if ( mode != MODE_LCD_CONTRAST_ADJUST ) { WriteText2(LINE1_2, "", PRECLEAR); WriteText2(LINE1, "Screen Contrast", NOPRECLEAR); WriteText2(LINE2, "Use INC/DEC" , NOPRECLEAR); } mode = MODE_LCD_CONTRAST_ADJUST; } // LCD_ContrastAdjust() //------------------------------------------------------------------------------ Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 191 Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... [REMOTE: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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : button.h // // Author : jtravers // // Compiler : Cosmic HC08 // // CPU : MC68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // header file for 'button.c' // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 19/06/00 jt 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_9 #define BUTTON_10 #define BUTTON_11 #define BUTTON_12 #define BUTTON_13 #define BUTTON_14 #define BUTTON_15 #define DEBOUNCE_COUNTER 0xffff 0xffef 0xfff7 0xfffb 0xfffd 0xfffe 0xfdff 0xfeff 0xff7f 0xffbf 0xffdf 0xbfff 0xdfff 0xefff 0xf7ff 0xfbff 3 Designer Reference Manual 192 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files ////////////////////////// // button_flags defines // ////////////////////////// #define FIRST_PASS #define AUTO_SCROLL bit0 bit1 enum { NO_CHANGE = 0x01, DECREMENT_VALUE, INCREMENT_VALUE }; /////////////////// // button states // /////////////////// enum { NO_BUTTON_PRESS=0x01, BUTTON_PRESSED, BUTTON_RELEASED }; Freescale Semiconductor, Inc... //////////////// // prototypes // //////////////// void ReadButtons( void ); void DefaultButtons( void ); void PressedButtons( void ); void ReleasedButtons( void ); void DecodeButtons( void ); void Enter( void ); void Esc( void ); void Increment( void ); void Decrement( void ); void StandardButtons( void ); void PasswordButtons( void ); void PasswordEnter( void ); void LCD_ContrastAdjust( void ); #endif [REMOTE:cc.bat] @echo off rem verbose... c:\cosmic\cx08\cx6808 -v -f config.dat %1.c c:\cosmic\cx08\cx6808 -f config.dat %1.c Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 193 Freescale Semiconductor, Inc. REMOTE Source Code Files [REMOTE:config.dat] ############################################# # CONFIGURATION FILE FOR 68HC08 COMPILER # # Copyright (c) 1995 by COSMIC Software # ############################################# ############ # COMPILER # ############ #-no -e -l +debug -i c:\cosmic\cx08\h6808 # don't use optimiser # include ... Freescale Semiconductor, Inc... ########## # PARSER # ########## -pp -pl -pck -pnw ############# # GENERATOR # ############# -gf #-oc -gf #-gck #-gv #-gst3 ############# # ASSEMBLER # ############# -al -at #-av ############# # OPTIMISER # ############# #-ov ##################### # Macro Definitions # ##################### -m debug:x -m nsh:,nsh # # # # prototypes output line number info for listing & debug extra type checking don't widen args # # # # # # full source display leave optimised/removed instructions as comments all lines in listing enable stack overflow checking verbosity static model # assembler file listing # list instruction cycles # show efficiency stats # debug: produce debug info # nsh: static not shared Designer Reference Manual 194 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... [REMOTE:convert.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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : convert.c // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // common numeric conversion routines // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 30/08/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include "extern.h" #include "convert.h" //////////////////////////////////////////////////////////////////////////////// // converts hexadecimal 'value' arg to an equivalent 2 char string and inserts// // the string at the second arg pointer address. // // // // For example say the argument 'value' is 0x25 // // // // (0x25>>4) =2 // // (0x25&0x0f) = 5 // // // // *address_ptr++ = '2' // // *address_ptr = '5' // //////////////////////////////////////////////////////////////////////////////// void HexToASCII( unsigned char value, char *address_ptr ) { *address_ptr++ = (char)( (value>>4) + '0' ); // upper nibble *address_ptr = (char)( (value&0x0f) + '0' ); // lower nibble } // HexToASCII() //------------------------------------------------------------------------------ Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 195 Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... //////////////////////////////////////////////////////////////////////////////// // converts decimal 'value' arg to an ASCII string and inserts // // the string at the second arg pointer address. // // This function takes approx 350us to execute @ 4.9152MHz bus. // // Not tested @ 2.4576MHz, will be approx 700us. // //////////////////////////////////////////////////////////////////////////////// void IntegerToASCII( unsigned short int value, char *address_ptr ) { unsigned char mod100; unsigned short int mod1000; unsigned short int mod10000; char *ptr; char temp[6]; //////////////////////////////////////////////// // example, assume 'value' is 12345 (decimal) // // // // mod10000 = 12345%10000 = 2345 // // mod1000 = 2345%1000 = 345 // // mod100 = 345%100 = 45 // // temp[0] = (12345/10000) + '0'; = '1' // // temp[1] = (2345/1000) + '0'; = '2' // // temp[2] = (345/100) + '0'; = '3' // // temp[3] = (45/10) + '0'; = '4' // // temp[4] = (45%10) + '0'; = '5' // // temp[5] = '\0' ALWAYS // //////////////////////////////////////////////// mod10000 = value%10000; mod1000 = mod10000%1000; mod100 = (unsigned char)(mod1000%100); temp[0] = (char)( (value/10000) + '0' ); // 10000's character temp[1] = (char)( (mod10000/1000) + '0' ); // 1000's character temp[2] = (char)( (mod1000/100) + '0' ); // 100's character temp[3] = (char)( (mod100/10) + '0' ); // 10's character temp[4] = (char)( (mod100%10) + '0' ); // 1's character temp[5] = '\0'; // NULL character ptr = &temp[0]; // pointer assignment while ( *ptr == '0' ) ptr++; // skip leading '0' (zeros) strcpy( address_ptr, ptr ); // assign to calling pointer } // IntegerToASCII() //------------------------------------------------------------------------------ Designer Reference Manual 196 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... void HexToDec( unsigned char *value ) { ////////////////////////////////////////////////////////// // for example suppose we receive 0x25 as the argument: // // // // 0x25 >>= 4 becomes 2, *= 10 becomes 20 // // // // 0x25 &= 0x0f becomes 5 // // // // and the argument is the sum of the two ie // // 20+5 = 25 // // // // [NOTE : fails if either nibble is 'a'...'f'] // ////////////////////////////////////////////////////////// *value = (unsigned char)( ((*value>>4)*10) + (*value&0x0f) ); } // HexToDec() //-----------------------------------------------------------------------------void DecToHex( unsigned char *value ) { //////////////////////////////////////////////////////// // for example suppose we receive 25 as the argument: // // // // 25/10 is 2, 2<<4 = 0x20 // // 25%10 is 5 // // // // result : // // 0x20+5 = 0x25 // //////////////////////////////////////////////////////// *value = (unsigned char)( ((*value/10)<<4) + (*value%10) ); } // DecToHex() //------------------------------------------------------------------------------ Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 197 Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... [REMOTE:convert.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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : convert.h // // Author : jtravers // // Compiler : Cosmic HC08 // // CPU : MC68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // header file for convert.c // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 12/09/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __CONVERT_H_ #define __CONVERT_H_ //////////////// // prototypes // //////////////// void HexToASCII( unsigned char, char * ); void IntegerToASCII( unsigned short int, char * ); void HexToDec( unsigned char * ); void DecToHex( unsigned char * ); #endif Designer Reference Manual 198 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files [REMOTE:crtsi.s] ; C STARTUP FOR MC68HC08 ; WITH AUTOMATIC DATA/CODE INITIALISATION ; Copyright (c) 2000 by COSMIC Software ; xref _main, __sbss, __memory, __idesc__, __stack xdef _exit, __stext ; __stext: ldhx #__stack ; initialize stack pointer txs ldhx #__idesc__ ; descriptor address cbcl: lda 1,x ; save start psha ; address of lda 0,x ; prom data psha ibcl: lda 2,x ; test flag byte beq zbss ; no more segment bit #$60 ; code segment bne dseg ; no, copy it ais #2 ; remove previous start address aix #5 ; next descriptor bra cbcl ; and restart dseg: pshx ; save pshh ; pointer lda 6,x ; compute length sub 1,x ; of segment psha ; save count MSB lda 5,x ; compute LSB sbc 0,x tst 1,sp ; if LSB nul, beq ok ; keep it inca ; else increment MSB ok: psha ; save count LSB lda 3,x ; destination address psha ; prepared in HX ldx 4,x pulh dbcl: pshx ; save destination pointer pshh ldx 7,sp ; load source pointer pshx pulh ldx 8,sp inc 8,sp ; increment pointer bne oks inc 7,sp Freescale Semiconductor, Inc... Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 199 Freescale Semiconductor, Inc. REMOTE Source Code Files oks: lda 0,x ; load byte pulh ; get destiation pulx ; pointer sta 0,x ; store byte aix #1 ; next byte dbnz 2,sp,dbcl ; count LSB dbnz 1,sp,dbcl ; count MSB ais #2 ; cleanup stack pulh ; reload pointer pulx aix #5 ; next descriptor bra ibcl ; and loop zbss: ais #2 ; remove pointer ldhx #__sbss ; start of bss bra loop ; start loop zbcl: clr 0,x ; clear byte aix #1 ; next byte loop: cphx #__memory ; up to the end bne zbcl ; and loop prog: jsr _main ; execute main _exit: bra _exit ; and stay here ; end Freescale Semiconductor, Inc... Designer Reference Manual 200 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... [REMOTE: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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : data.c // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : MC68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // global data, // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 28/03/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include "declared.h" #include "gp32.h" ////////////////////// // Global variables // ////////////////////// @tiny char @tiny unsigned char @tiny unsigned char @tiny unsigned char @tiny unsigned char @tiny unsigned char @tiny unsigned char @tiny unsigned char @tiny unsigned char @tiny unsigned char @tiny unsigned short int @tiny unsigned short int @tiny unsigned short int @tiny union uBITS @tiny union uUNSIGNED_INTEGER @tiny union uUNSIGNED_INTEGER @tiny union uUNSIGNED_INTEGER_BIT @tiny union uUNSIGNED_INTEGER @near struct sDELTA_SIGMA_ADJUST text_buffer[17]; button_press_status; button_debounce_counter; button_release_counter; mode; mode_copy; character_count; shut_down_ii; shut_down_jj; pir_buffer_size; stop_counter; user_password; pressed_pattern; button_flags; adjust_value; pir_password; button_pattern; delta_sig_res; * @tiny ds_adjust_ptr; Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 201 Freescale Semiconductor, Inc. REMOTE Source Code Files //////////////////////////////////////////////// // NOTE : Above pointer declaration syntax : // // This pointer resides in PAGE0 and contains // // a '@near' (2 byte) address // //////////////////////////////////////////////// ///////////////////////////////////// // data used in interrupt routines // ///////////////////////////////////// @tiny volatile unsigned char ir_buffer[15]; @tiny volatile unsigned char rs232_buffer[15]; @tiny volatile union uBITS flags1; //////////////// // const data // //////////////// @near const struct sDELTA_SIGMA_ADJUST ds_adjust[8] = { {5 , 255 , 5} , // 8 bit min, max, step, useage:6 {20 , 500 , 20} , // 9 bit min, max, step, useage:6 {50 , 1000 , 50} , // 10 bit min, max, step, useage:6 {100, 2000 , 100}, // 11 bit min, max, step, useage:6 {200, 4000 , 200}, // 12 bit min, max, step, useage:6 {400, 8000 , 400}, // 13 bit min, max, step, useage:6 {600, 16000, 600}, // 14 bit min, max, step, useage:6 {800, 32000, 800}, // 15 bit min, max, step, useage:6 }; Freescale Semiconductor, Inc... bytes bytes bytes bytes bytes bytes bytes bytes ///////////////////////////////////////////////////////////////// // string tables for RTC, note NULL terminated strings for use // // by Designer Reference Manual 202 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files [REMOTE:datasort.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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : datasort.c // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908JK31/3 // ///////////////////// File Contents ////////////////////////////////////////// // IR data integrity routine(s) // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 12/07/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include Freescale Semiconductor, Inc... Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 203 Freescale Semiconductor, Inc. REMOTE Source Code Files unsigned char CheckSumCheck( unsigned char *address_ptr ) { union uUNSIGNED_INTEGER checksum; unsigned char block_length; unsigned char ii; block_length = *address_ptr; if ( block_length == 0x00 ) { return 0; // bad data } // first byte of buffer is the block length byte Freescale Semiconductor, Inc... //////////////////////////// // calculate the checksum // //////////////////////////// checksum._16bit = 0; for ( ii = 0; ii < block_length; ii++ ) { checksum._16bit += *(address_ptr+ii); } ///////////////////////////////////////////////////////////////////////// // now check to that received in the buffer addressed by 'address_ptr' // ///////////////////////////////////////////////////////////////////////// if ( checksum._8bit.hibyte == *(address_ptr+block_length) && checksum._8bit.lobyte == *(address_ptr+block_length+1) ) { return 1; // good, full 16bit checksum agreement } return 0; // checksum did not compare } // CheckSumCheck() //------------------------------------------------------------------------------ void IRCommsCheck( void ) { union uUNSIGNED_INTEGER temp2; if ( ir_mode == IR_MAIN ) { if ( CheckSumCheck(&ir_buffer[0]) ) { WriteText2( LINE1_2, "", PRECLEAR); switch ( ir_buffer[BLOCK_TITLE] ) { case SEND_A2D_TRIGGER : WriteText2( LINE1, "A2D Trigger:", NOPRECLEAR ); Designer Reference Manual 204 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files pir_buffer_size = ir_buffer[DATA_BYTE2]; mode = MODE_EDIT_A2D_TRIGGER; /////////////////////////////////// // write acquired data to screen // /////////////////////////////////// IntegerToASCII( ir_buffer[DATA_BYTE1], &text_buffer[7] ); WriteText1( LINE2 ); ////////////////////////////// // prepare editing variable // ////////////////////////////// adjust_value._8bit.lobyte = ir_buffer[DATA_BYTE1]; adjust_value._8bit.hibyte = 0; break; case SEND_A2D_DIFFERENCE : WriteText2( LINE1, "A2D Difference:", NOPRECLEAR ); mode = MODE_EDIT_A2D_DIFFERENCE; /////////////////////////////////// // write acquired data to screen // /////////////////////////////////// IntegerToASCII( ir_buffer[DATA_BYTE1], &text_buffer[7] ); WriteText1( LINE2 ); ////////////////////////////// // prepare editing variable // ////////////////////////////// adjust_value._8bit.lobyte = ir_buffer[DATA_BYTE1]; adjust_value._8bit.hibyte = 0; break; case SEND_A2D_LOOPTIME : WriteText2( LINE1, "A2D Loop Time:", NOPRECLEAR ); mode = MODE_EDIT_A2D_LOOPTIME; /////////////////////////////////// // write acquired data to screen // /////////////////////////////////// IntegerToASCII( ir_buffer[DATA_BYTE1], &text_buffer[7] ); WriteText1( LINE2 ); ////////////////////////////// // prepare editing variable // ////////////////////////////// adjust_value._8bit.lobyte = ir_buffer[DATA_BYTE1]; adjust_value._8bit.hibyte = 0; break; case SEND_DELTA_SIG_RESOLUTION : WriteText2( LINE1, "Delta Sig Res'n:", NOPRECLEAR ); mode = MODE_EDIT_DELTA_SIG_RESOLUTION; Freescale Semiconductor, Inc... Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 205 Freescale Semiconductor, Inc. REMOTE Source Code Files ////////////////////////////// // prepare editing variable // ////////////////////////////// temp2._8bit.hibyte = ir_buffer[DATA_BYTE1]; temp2._8bit.lobyte = ir_buffer[DATA_BYTE2]; adjust_value._8bit.lobyte = ConvertResolutionToBit( temp2._16bit ); /////////////////////////////////// // write acquired data to screen // /////////////////////////////////// IntegerToASCII( adjust_value._8bit.lobyte, &text_buffer[7] ); WriteText1( LINE2 ); break; Freescale Semiconductor, Inc... case SEND_DELTA_SIG_EVENT : WriteText2( LINE1, "Delta Sig Event:", NOPRECLEAR ); mode = MODE_EDIT_DELTA_SIG_EVENT; ////////////////////////////// // prepare editing variable // ////////////////////////////// temp2._8bit.hibyte = ir_buffer[DATA_BYTE1]; temp2._8bit.lobyte = ir_buffer[DATA_BYTE2]; adjust_value._16bit = temp2._16bit; /////////////////////////////////// // write acquired data to screen // /////////////////////////////////// IntegerToASCII( temp2._16bit, &text_buffer[7] ); WriteText1( LINE2 ); ////////////////////////////////////////////////////////////////// // we require the current delta sigma bit resolution to provide // // the edit clamp/checks while adjusting the event value // ////////////////////////////////////////////////////////////////// delta_sig_res._8bit.hibyte = ir_buffer[DATA_BYTE3]; delta_sig_res._8bit.lobyte = ir_buffer[DATA_BYTE4]; break; case SEND_PASSWORD : pir_password._8bit.hibyte pir_password._8bit.lobyte temp2._8bit.hibyte temp2._8bit.lobyte temp2._16bit = = = = = ir_buffer[DATA_BYTE1]; ir_buffer[DATA_BYTE2]; ir_buffer[DATA_BYTE3]; ir_buffer[DATA_BYTE4]; ~temp2._16bit; // 1's complement //////////////////////////////////////////////////////////////////// // additional data integrity check, the password must be received // // correctly // //////////////////////////////////////////////////////////////////// if ( temp2._16bit == pir_password._16bit ) { mode = MODE_USER_ENTER_PASSWORD; // GetPassword() do-while break out } break; Designer Reference Manual 206 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files } } else // checksum failed { WriteText2( LINE1, "Bad IR Checksum!", NOPRECLEAR ); if ( mode == MODE_WAITING_FOR_PIR_PASSWORD ) { WriteText2( LINE2, "Auto Retry...", NOPRECLEAR ); } else { WriteText2( LINE2, "Try Again...", NOPRECLEAR ); Delay10ms(_1S); // show message for 1s RedrawFlashParameterScreen(); // redraw previous screen if an } } ir_mode = IR_IDLE; // ready for next } } // IRCommsCheck() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... void RS232CommsCheck( void ) { unsigned char ii; union uUNSIGNED_INTEGER year; void *ptr; struct RTC new_time; if ( flags1.bit.CHECK_RS232_DATA ) { if ( CheckSumCheck(&rs232_buffer[0]) ) { ///////////////////////////////////////////// // The received data has been deemed valid // // and has the format : // // // // rs232_buffer[0] : block length // // rs232_buffer[1] : block title // // rs232_buffer[2] : year hibyte // // rs232_buffer[3] : year lobyte // // rs232_buffer[4] : month Jan = 1 etc // // rs232_buffer[5] : day Mon = 1 etc // // rs232_buffer[6] : date // // rs232_buffer[7] : hours // // rs232_buffer[8] : minutes // // rs232_buffer[9] : seconds // // rs232_buffer[10] : checksum hibyte // // rs232_buffer[11] : checksum lobyte // ///////////////////////////////////////////// Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 207 Freescale Semiconductor, Inc. REMOTE Source Code Files ////////////////////////////////////////////////////////////// // the time info from the pc has arrived in binary form, we // // need to program the RTC with hex data ie to program // // the RTC with 3 hours and 47 mins we need to supply 0x03 // // and 0x47 for the relevant parameters // ////////////////////////////////////////////////////////////// for ( ii = 4; ii < 10; ii++ ) { ////////////////////////////////////// DecToHex( &rs232_buffer[ii] ); // NOTE: not applying to year bytes // } // as special processing applies // // (see below) // ////////////////////////////////////// ////////////////////////////////////////////////////////////// // assign RTC data here with hex equivalent of decimal data // ////////////////////////////////////////////////////////////// new_time.month = rs232_buffer[4]; new_time.day = rs232_buffer[5]; new_time.date = rs232_buffer[6]; new_time.hours = rs232_buffer[7]; new_time.minutes = rs232_buffer[8]; new_time.seconds = rs232_buffer[9]; ////////////////////////////////////////////////////////////////////////// // For example, if the current year is 2000 (which it is) then we find // // rs232_buffer[2] = 0x7D and rs232_buffer[3] = 0xD0. This doesn't look // // much like 2000. We need to convert the 0x07D0 into 0x2000 which can // // be sent to the RTC. // // // // Firstly we'll convert the 2000 (integer) into an ASCII form ie "2000"// // then convert this to 0x20 and 0x00. // ////////////////////////////////////////////////////////////////////////// year._8bit.hibyte = rs232_buffer[2]; year._8bit.lobyte = rs232_buffer[3]; ///////////////////////////////////////////////////////////////// // NOTE1: using 'rs232_buffer' as storage here since the above // // 'system_time' assignements have been made. // // NOTE2: use of 'void' pointer here, 'IntegerToASII()' expects// // a 'char' pointer as the second arg, we're using an 'unsigned// // char' buffer for storage. // ///////////////////////////////////////////////////////////////// ptr = &rs232_buffer[0]; IntegerToASCII( year._16bit, (char *)ptr ); ////////////////////////////////////////// // using the above example we'll have : // // // // rs232_buffer[0] = '2' // // rs232_buffer[1] = '0' // // rs232_buffer[2] = '0' // // rs232_buffer[3] = '0' // ////////////////////////////////////////// for ( ii = 0; ii < 4; ii++ ) { Freescale Semiconductor, Inc... Designer Reference Manual 208 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files rs232_buffer[ii] -= '0'; } // converting from char to decimal // ie from '2' -> 2, '0' -> 0 etc /////////////////////////////////////////////////////////// // the data is now represented as hi:lo byte pairs ie : // // // // rs232_buffer[0] = 2 // // rs232_buffer[1] = 0 // // rs232_buffer[2] = 0 // // rs232_buffer[3] = 0 // /////////////////////////////////////////////////////////// rs232_buffer[0] *= 10; rs232_buffer[0] += rs232_buffer[1]; // == 20 Freescale Semiconductor, Inc... rs232_buffer[2] *= 10; rs232_buffer[2] += rs232_buffer[3]; // == 0 DecToHex( &rs232_buffer[0] ); DecToHex( &rs232_buffer[2] ); // 20 -> 0x20 // 0 -> 0x00 new_time.year._8bit.hibyte = rs232_buffer[0]; new_time.year._8bit.lobyte = rs232_buffer[2]; //////////////////////////////////////////////////// // we can now finally send the RTC the new values // //////////////////////////////////////////////////// if ( SetRTC(&new_time) ) { //////////////////////////////// // send an ACK back to the pc // //////////////////////////////// Send_RS232_CommsPacket(ACKNOWLEDGE, 0); // '0' for no data here } else { ///////////////////////////////////////////////////// // send a NOACK back to the pc, user can try again // ///////////////////////////////////////////////////// Send_RS232_CommsPacket(NOACKNOWLEDGE, 0); // '0' for no data here } } flags1.bit.CHECK_RS232_DATA = 0; // ready for next SCC2.bit.SCRIE = 1; // allow SCI receive interupts again after } // this function processing } // RS232CommsCheck() //------------------------------------------------------------------------------ Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 209 Freescale Semiconductor, Inc. REMOTE Source Code Files unsigned char ConvertResolutionToBit( unsigned short int value ) { unsigned char temp; ////////////////// // range clamps // ////////////////// if ( value < 256 ) if ( value > 32768 ) value = 256; value = 32768; Freescale Semiconductor, Inc... /////////////////////////// // convert to power of 2 // /////////////////////////// switch ( value ) { case _8BIT : temp = 8; break; case _9BIT : temp = 9; break; case _10BIT : temp = 10; break; case _11BIT : temp = 11; break; case _12BIT : temp = 12; break; case _13BIT : temp = 13; break; case _14BIT : temp = 14; break; case _15BIT : temp = 15; break; default : temp = 12; } return temp; } // ConvertResolutionToBit() //------------------------------------------------------------------------------ Designer Reference Manual 210 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files void ConvertBitToResolution( unsigned char bit_resolution ) { switch ( bit_resolution ) { case 8 : // 8bit resolution, 0...255 adjust_value._16bit = _8BIT; break; case 9 : // 9bit resolution, 0...511 adjust_value._16bit = _9BIT; break; Freescale Semiconductor, Inc... case 10 : // 10bit resolution, 0...1023 adjust_value._16bit = _10BIT; break; case 11 : // 11bit resolution, 0...2047 adjust_value._16bit = _11BIT; break; case 12 : // 12bit resolution, 0...4097 adjust_value._16bit = _12BIT; break; case 13 : // 13bit resolution, 0...8191 adjust_value._16bit = _13BIT; break; case 14 : // 14bit resolution, 0...16383 adjust_value._16bit = _14BIT; break; case 15 : // 15bit resolution, 0...32767 adjust_value._16bit = _15BIT; break; } } // ConvertBitToResolution() //------------------------------------------------------------------------------ Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 211 Freescale Semiconductor, Inc. REMOTE Source Code Files void Assign_DS_Pointer( void ) { switch ( delta_sig_res._16bit ) { case _8BIT : // 8bit resolution, 0...255 ds_adjust_ptr = &ds_adjust[0]; break; case _9BIT : // 9bit resolution, 0...511 ds_adjust_ptr = &ds_adjust[1]; break; case _10BIT : // 10bit resolution, 0...1023 ds_adjust_ptr = &ds_adjust[2]; break; case _11BIT : // 11bit resolution, 0...2047 ds_adjust_ptr = &ds_adjust[3]; break; case _12BIT : // 12bit resolution, 0...4097 ds_adjust_ptr = &ds_adjust[4]; break; case _13BIT : // 13bit resolution, 0...8191 ds_adjust_ptr = &ds_adjust[5]; break; case _14BIT : // 14bit resolution, 0...16383 ds_adjust_ptr = &ds_adjust[6]; break; case _15BIT : // 15bit resolution, 0...32767 ds_adjust_ptr = &ds_adjust[7]; break; } } // Assign_DS_Pointer() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... Designer Reference Manual 212 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... [REMOTE:datasort.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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : datasort.h // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908JL3 // ///////////////////// File Contents ////////////////////////////////////////// // header file for 'datasort.c' // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 12/07/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __DATASORT_H_ #define __DATASORT_H_ unsigned char void void unsigned char void void #endif CheckSumCheck( unsigned char * ); IRCommsCheck( void ); RS232CommsCheck( void ); ConvertResolutionToBit( unsigned short int ); ConvertBitToResolution( unsigned char ); Assign_DS_Pointer( void ); Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 213 Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... [REMOTE: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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : declared.h // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // declared data types // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 12/07/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __DECLARED_H_ #define __DECLARED_H_ ///////////////////// // bit/byte access // ///////////////////// struct sPORT { unsigned char bit0 : 1; unsigned char bit1 : 1; unsigned char bit2 : 1; unsigned char bit3 : 1; unsigned char bit4 : 1; unsigned char bit5 : 1; unsigned char bit6 : 1; unsigned char bit7 : 1; }; union uBITS { Designer Reference Manual 214 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files unsigned char unsigned char struct sPORT }; byte; reg; bit; Freescale Semiconductor, Inc... //////////////////////////// // 16 bit 'bit' data type // //////////////////////////// struct sUNSIGNED_INTEGER { unsigned char hibyte; // 0x12XX unsigned char lobyte; // 0xXX34 }; union uUNSIGNED_INTEGER { unsigned short int _16bit; struct sUNSIGNED_INTEGER _8bit; }; struct sUNSIGNED_INTEGER_BIT { union uBITS hibyte; // 0x12XX union uBITS lobyte; // 0xXX34 }; union uUNSIGNED_INTEGER_BIT { unsigned short int _16bit; struct sUNSIGNED_INTEGER_BIT _8bit; }; struct RTC { unsigned char unsigned char unsigned char unsigned char unsigned char unsigned char union uUNSIGNED_INTEGER }; seconds; minutes; hours; day; date; month; year; struct sDELTA_SIGMA_ADJUST { unsigned short int min; unsigned short int max; unsigned short int step; }; #endif Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 215 Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... [REMOTE: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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : define.h // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : MC68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // global defines // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 27/07/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __DEFINE_H_ #define __DEFINE_H_ ///////////////////////// // conditional defines // ///////////////////////// #define __MMDS_EMULATOR_ ////////////////////////////////////////////// // see recommendation from 'hc08gm32em.pdf' // // page 16 // ////////////////////////////////////////////// ///////////////// // I/O defines // ///////////////// #define TIMING_PIN #define TIMING_PIN_DDR PTD.bit.bit5 DDRD.bit.bit5 // for debugging // for debugging Designer Reference Manual 216 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files /////////////////////////////// // general numerical defines // /////////////////////////////// #define _1S 100 #define _5MINUTE // debug only quick time-out //#define _1MINUTE //#define _1MINUTE #define TIMER_ROLLOVER #define _3P5MS #define _4P5MS #define _1_BITWIDTH #define MIN_PULSE_WIDTH #define MAX_PULSE_WIDTH #define NOISE_LIMIT #define _50US #define _100US // 100*10ms == 1s 30000 // 300s/10ms #define _5MINUTE 1000 // 10s/10ms Freescale Semiconductor, Inc... 6000 // 60s/10ms 1000 // 10s/10ms FOR DEBUGGING 24576 // 10E-3 * 2.4576E6 8602 // 3.5E-3* 2.4576E6 11059 // 4.5E-3/2.4576E6 3686 // == 1.5ms 492 // == 200us 6144 // == 2.5ms 737 // 300E-6 * 2.4576E6 16 // from delay.c, 11+(7*16)==123 bus cycles // == 123*(1/2.4576E6) = 50.0us 35 // from delay.c, 11+(7*35)==256 bus cycles // == 256*(1/2.4576E6) = 104.2us //////////////////// // flags1 defines // //////////////////// #define _10MS_LOOP #define IR_ACTIVITY #define PASSWORD_WRAP #define CHECK_RS232_DATA #define TO_BE_ASSIGNED_1 #define TO_BE_ASSIGNED_2 #define TO_BE_ASSIGNED_3 #define TO_BE_ASSIGNED_4 bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7 // // // // this this this this is is is is free free free free for for for for use use use use /////////////////// // Assembler 'C' // /////////////////// #define ClrPAGE0Ram() _asm("clrh\n ldx #192\nLOOP2: clr $40-1,x\n dbnzx LOOP2") #define RSP() _asm("rsp" ) #define SEI() _asm("sei" ) #define CLI() _asm("cli" ) #define STOP() _asm("stop") #define WAIT() _asm("wait") #define NOP() _asm("nop" ) #define ServiceWatchDog() COPCTL.reg = 0 enum #endif { IR_IDLE=0x01, IR_DATA, IR_MAIN }; Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 217 Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... [REMOTE: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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design // // Filename : delay.h // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : MC68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // delay routines // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 15/05/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include "extern.h" #include "delay.h" //////////////////////////////////////////////////////////////////////////////// // 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 #X ; delay arg sent to function [2] cycles // // jsr DelayUSecs ; branches to this function [5] cycles // //loop1 nop ; nop [1] cycle // // nop ; nop [1] cycle // // nop ; nop [1] cycle // // nop ; nop [1] cycle // // dbnza loop1 ; loop till acc = 0 [3] cycles // // rts ; return from sub-routine [4] cycles // // // Designer Reference Manual 218 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... // This gives a total delay of 11+(4+3)*X cycles, where X is the arg sent. // // We are using a 2.4576MHz internal bus via the PLL. This gives us a bus // // cycle time of 1/2.4576E6 = 406.9ns // // // // For eg, if we want to delay for 50us, then we have: // // 50E-6/406.9E-9 = 122.88 bus cycles => 123 = 11 + 7*X, => X = 16 // // // // 'DelayUSecs( 16 )' to get 50us delay. // // // // Arguments: 'X' delay value as calculated from 'cyles = 11 + 7X' // // Returns : none // //////////////////////////////////////////////////////////////////////////////// void Delay( unsigned char uSecs ) { #asm LOOP1: nop nop nop nop dbnza LOOP1 #endasm } // Delay() //------------------------------------------------------------------------------ void Delay10ms( unsigned char _10ms_multiple ) { unsigned char ii; for ( ii = 0; ii < _10ms_multiple; ii++ ) { ServiceWatchDog(); while ( !flags1.bit._10MS_LOOP ); flags1.bit._10MS_LOOP = 0; } } // Delay10ms() //------------------------------------------------------------------------------ Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 219 Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... [REMOTE: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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design // // Filename : delay.h // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // header file for delay.c // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 15/05/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __DELAY_H_ #define __DELAY_H_ ///////////////////////// // function prototypes // ///////////////////////// void Delay( unsigned char ); void Delay10ms( unsigned char ); #endif Designer Reference Manual 220 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... [REMOTE:digipot.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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : digipot.c // // Author : jtravers // // Compiler : Cosmic HC08 // // CPU : MC68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // LCD contast control via digital pot // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 08/11/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include "extern.h" #include "digipot.h" void DigiPot( unsigned char command ) { unsigned char ii; DIGIPOT_CS = 0; DIGIPOT_INC = 1; DDRB.reg |= 0b00011100; for ( ii = 0; ii < 5; ii++ ) { // // // // // // // // // // ensure CS active signal stable, hi->lo is command transition ensure output we insert this for loop to speed up the user perceived contrast change per button press if you decrease the value the lcd will change more slowly and conversely if you increase the the loop max value the lcd contrast will change quickly. DIGIPOT_UD = 0; DIGIPOT_UD = 1; if ( command == DP_INCREMENT ) else Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 221 Freescale Semiconductor, Inc. REMOTE Source Code Files /////////////////////////// // apply digipot command // /////////////////////////// DIGIPOT_INC = 0; // force wiper position change NOP(); DIGIPOT_INC = 1; // } DIGIPOT_CS = 1; // ensure CS off + write to value to eeprom } // DigiPot() //////////////////////////////////////////////////////////////////////////////// Freescale Semiconductor, Inc... [REMOTE:digipot.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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : digipot.h // // Author : jtravers // // Compiler : Cosmic HC08 // // CPU : MC68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // header file for digipot.c // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 08/11/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __DIGIPOT_H_ #define __DIGIPOT_H_ #define #define #define enum DIGIPOT_CS PTB.bit.bit2 DIGIPOT_UD PTB.bit.bit3 DIGIPOT_INC PTB.bit.bit4 { DP_INCREMENT, DP_DECREMENT }; Designer Reference Manual 222 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files ///////////////// // protoype(s) // ///////////////// void DigiPot( unsigned char ); #endif [REMOTE:error.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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : error.c // // Author : jtravers // // Compiler : Cosmic HC08 // // CPU : MC68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // Error routines // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 01/09/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include Freescale Semiconductor, Inc... void ErrorCondition( unsigned char value ) { Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 223 Freescale Semiconductor, Inc. REMOTE Source Code Files unsigned char unsigned char breakout_count; ii; WriteText2( LINE1_2, "", PRECLEAR ); strcpy( &text_buffer[0], "Error " ); // last ' ' char occupies 'text_buffer[5] IntegerToASCII( value, &text_buffer[6] ); // since next free position is 6 WriteText1( LINE1 ); switch ( value ) { case ERROR_NO_IR_COMMS : WriteText2( LINE2, "No IR Comms [IN]", NOPRECLEAR ); break; case ERROR_NO_PASSWORD : WriteText2( LINE2, "No PIR Password ", NOPRECLEAR ); break; } ///////////////////////// // show message for 5s // ///////////////////////// breakout_count = 5; for ( ii = 0; ii < 50; ii++ ) // 50*100ms == 5s { Delay10ms(10); // 100ms if ( ii % 10 == 0 ) // every second { IntegerToASCII( breakout_count--, &text_buffer[0] ); // show lcd counter WriteText1( LINE1+15 ); // decrementing } } } // ErrorCondition() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... Designer Reference Manual 224 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... [REMOTE:error.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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : error.h // // Author : jtravers // // Compiler : Cosmic HC08 // // CPU : MC68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // header file for 'error.c' // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 01/09/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __ERROR_H_ #define __ERROR_H_ enum { ERROR_NO_IR_COMMS = 0x01, ERROR_NO_PASSWORD }; //////////////// // prototypes // //////////////// void ErrorCondition( unsigned char #endif ); Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 225 Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... [REMOTE: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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : error.h // // Author : jtravers // // Compiler : Cosmic HC08 // // CPU : MC68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // 'extern' declarations for global variables declared in 'data.c' // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 01/09/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __EXTERN_H_ #define __EXTERN_H_ #ifndef #include #endif #ifndef #include #endif #ifndef #include #endif __DECLARED_H_ "declared.h" __GP32_H_ "gp32.h" __DEFINE_H_ "define.h" Designer Reference Manual 226 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... ////////////////////// // Global variables // ////////////////////// extern @tiny char extern @tiny unsigned char extern @tiny unsigned char extern @tiny unsigned char extern @tiny unsigned char extern @tiny unsigned char extern @tiny unsigned char extern @tiny unsigned char extern @tiny unsigned char extern @tiny unsigned char extern @tiny unsigned short int extern @tiny unsigned short int extern @tiny unsigned short int extern @tiny union uBITS extern @tiny union uUNSIGNED_INTEGER extern @tiny union uUNSIGNED_INTEGER_BIT extern @tiny union uUNSIGNED_INTEGER extern @tiny union uUNSIGNED_INTEGER text_buffer[17]; button_press_status; button_debounce_counter; button_release_counter; mode; mode_copy; character_count; shut_down_ii; shut_down_jj; pir_buffer_size; stop_counter; user_password; pressed_pattern; button_flags; pir_password; button_pattern; delta_sig_res; adjust_value; ///////////////////////////////////////////////////////////// // NOTE : declaration syntax : // // This pointer resides in PAGE0 and points to 'near' data // ///////////////////////////////////////////////////////////// extern @near struct sDELTA_SIGMA_ADJUST * @tiny ds_adjust_ptr; ///////////////////////////////////// // data used in interrupt routines // ///////////////////////////////////// extern @tiny volatile unsigned char extern @tiny volatile unsigned char extern @tiny volatile union uBITS ir_buffer[15]; rs232_buffer[15]; flags1; //////////////// // const data // //////////////// extern @near const struct sDELTA_SIGMA_ADJUST extern @near const char extern @near const char #endif ds_adjust[8]; days_of_week[9][4]; months_of_year[14][4]; Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 227 Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... [REMOTE:gp32.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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : gp32.h // // Author : jtravers // // Compiler : Cosmic HC08 // // CPU : MC68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // register definitions for MC68HC908GP32 // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 01/09/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __GP32_H_ #define __GP32_H_ #include "declared.h" /////////////////// // CPU Registers // /////////////////// @tiny volatile union @tiny volatile union @tiny volatile union @tiny volatile union @tiny volatile union @tiny volatile union @tiny volatile union @tiny volatile union @tiny volatile union @tiny volatile union @tiny volatile union @tiny volatile union @tiny volatile union @tiny volatile union @tiny volatile union @tiny volatile union uBITS uBITS uBITS uBITS uBITS uBITS uBITS uBITS uBITS uBITS uBITS uBITS uBITS uBITS uBITS uBITS PTA PTB PTC PTD DDRA DDRB DDRC DDRD PTE DDRE PTAPUE PTCPUE PTDPUE SPCR SPSCR SPDR @0x00; @0x01; @0x02; @0x03; @0x04; @0x05; @0x06; @0x07; @0x08; @0x0C; @0x0D; @0x0E; @0x0F; @0x10; @0x11; @0x12; Designer Reference Manual 228 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @tiny @near @near @near @near @near @near 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 volatile volatile volatile union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS unsigned short union uBITS union uBITS unsigned short union uBITS union uBITS union uBITS unsigned short union uBITS union uBITS union uBITS unsigned short union uBITS union uBITS union uBITS unsigned short union uBITS union uBITS unsigned short union uBITS union uBITS union uBITS unsigned short union uBITS union uBITS union uBITS unsigned short union uBITS union uBITS union uBITS union uBITS unsigned short union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS union uBITS Freescale Semiconductor, Inc... int int int int int int int int int SCC1 SCC2 SCC3 SCS1 SCS2 SCDR SCBR INTKBSCR INTKBIER INTSCR CONFIG2 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 PCTL PBWC PMSH PMS PMSL PMRS PMDS ADSCR ADR ADICLK SBSR SRSR SUBAR SBFCR INT1 INT2 @0x13; @0x14; @0x15; @0x16; @0x17; @0x18; @0x19; @0x1A; @0x1B; @0x1D; @0x1E; @0x1F; @0x20; @0x21; @0x21; @0x22; @0x23; @0x23; @0x24; @0x25; @0x26; @0x26; @0x27; @0x28; @0x29; @0x29; @0x2A; @0x2B; @0x2C; @0x2C; @0x2D; @0x2E; @0x2E; @0x2F; @0x30; @0x31; @0x31; @0x32; @0x33; @0x34; @0x34; @0x35; @0x36; @0x37; @0x38; @0x38; @0x39; @0x3A; @0x3B; @0x3C; @0x3D; @0x3E; @0xFE00; @0xFE01; @0xFE02; @0xFE03; @0xFE04; @0xFE05; Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 229 Freescale Semiconductor, Inc. REMOTE Source Code Files @near @near @near @near @near @near @near @near @near volatile volatile volatile volatile volatile volatile volatile volatile volatile union uBITS union uBITS union uBITS unsigned short int union uBITS union uBITS union uBITS union uBITS union uBITS INT3 FLCR BRKH BRK BRKL BRKSCR LVISR FLBPR COPCTL @0xFE06; @0xFE08; @0xFE09; @0xFE09; @0xFE0A; @0xFE0B; @0xFE0C; @0xFF7E; @0xFFFF; //////////////////////////////////////////////////////// // access to the HC08 condition code reg : carry flag // //////////////////////////////////////////////////////// @builtin unsigned char carry( void ); Freescale Semiconductor, Inc... ////////// // INT1 // ////////// #define IF1 #define IF3 #define IF4 #define IF5 ////////// // INT2 // ////////// #define IF14 ////////// // INT3 // ////////// #define IF15 ////////////// // 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 bit2 bit4 bit5 bit6 bit7 bit0 bit0 bit1 bit2 bit4 bit5 bit6 bit7 bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7 Designer Reference Manual 230 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files ////////////// // TSC1 reg // ////////////// #define CH1MAX #define TOV1 #define ELS1A #define ELS1B #define MS1A #define CH1IE #define CH1F bit0 bit1 bit2 bit3 bit4 bit6 bit7 Freescale Semiconductor, Inc... ////////////////////////////// // A2D status & control reg // ////////////////////////////// #define CH0 bit0 #define CH1 bit1 #define CH2 bit2 #define CH3 bit3 #define CH4 bit4 #define ADCO bit5 #define AIEN bit6 #define COCO bit7 ///////////////////////// // A2D input clock reg // ///////////////////////// #define ADIV0 bit5 #define ADIV1 bit6 #define ADIV2 bit7 /////////////////// // FLASH control // /////////////////// #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 Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 231 Freescale Semiconductor, Inc. REMOTE Source Code Files ////////////////////////// // pll bandwith control // ////////////////////////// #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 #endif 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 Designer Reference Manual 232 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files [REMOTE:gp32.lkf] ########################################################################## # COSMIC HC08 LINKER COMMAND FILE FOR MOTOROLA HC908GP32 PIR REMOTE UNIT # # ATEECC July 2000 # ########################################################################## #################### # declared symbols # #################### +def __memory=@.bss +def __stack=0x023f Freescale Semiconductor, Inc... +def __sbss=0x00f0 # # # # # symbol used by startup NOTE: stack pointer relocation, instructions occur in 'crtsi.s' 0x023f is the last ram byte in the 908GP32 for static initialised data 'bsct' see below ############# # PAGE0 RAM # ############# +seg .ubsct -b 0x0040 -n TinyRam -m 192-16 +seg .bsct -b 0x00f0 -n StaticInit -m 16 ############################# # GP32 additional RAM block # ############################# +seg .data -b 0x100 -n NearRAM -m 320 ############## # CONST DATA # ############## +seg .const -b 0xfd8b -n ConstData -m 117 # PAGE0 RAM, 16 for below # initialised PAGE0 static data # total ram = 192+320 = 512 # # # # for const data declared in 'data.c', occupies the last 117 bytes of FLASH memory ############################ # variables data for PAGE0 # ############################ ireg.o lreg.o data.o ############################## # FLASH memory for user code # ############################## +seg .text -b 0x8000 -n UserFLASH -m 32256-117 # # # # # # # # ensuring that the Cosmic variables 'c_reg' and 'c_lreg' are positioned at the beginning of ram this ensures that during memcpy operations they do not get overwritten with copied data user declared data # MC68HC908GP32 user code start address # 117 for const data see above Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 233 Freescale Semiconductor, Inc. REMOTE Source Code Files ##################################### # const area for switch jump tables # ##################################### +seg .const -a UserFLASH -n ConstFLASH # '-a' append section to previous Freescale Semiconductor, Inc... ############################# # FLASH memory object files # ############################# crtsi.o # Cosmic startup routine # user code from here... button.o # button debounce/decode interface convert.o # conversion routines datasort.o # ir received data integrity delay.o # inline delay digipot.o # lcd contrast control error.o # IR comms error condition routines interrup.o # interrupt handling routines ir_comms.o # IR comms routines i2c.o # low level i2c routines for the RTC lcd.o # lcd routines main.o # main() and interrupt vectors mode.o # user interface routines rs_comms.o # rs232 routines rtc.o # real time clock read/write startup.o # micro initialise, i/o and timer #################### # Cosmic libraries # #################### c:/cosmic/cx08/lib/libi.h08 c:/cosmic/cx08/lib/libm.h08 ########### # Vectors # ########### +seg .const -b 0xffdc -n Vectors -m 36 vectors.o Designer Reference Manual 234 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... [REMOTE: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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : i2c.c // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // i2c routines for accessing real time clock ic // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 17/06/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include "extern.h" #include "i2c.h" 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; Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 235 Freescale Semiconductor, Inc. REMOTE Source Code Files ///////////////////////////////////////////// // 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 == 1 ) { //////////////////////////// if ( ++temp >= 250 ) // basic error check here // { //////////////////////////// SET_DATA_TO_OUTPUT; // back to output SetUpAndHoldTimingDelay(); RESET_SCL; // 9th clock bit complete return 0; } } SET_DATA_TO_OUTPUT; // back to output SetUpAndHoldTimingDelay(); RESET_SCL; // 9th clock bit complete return 1; } // WaitForI2CAcknowledge() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... 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 // SET_DATA_TO_OUTPUT; // take control of the SDA line // RESET_SCL; // an ACKNOWLEGE occurs // SetUpAndHoldTimingDelay(); // RESET_SDA; // when the SDA is stable lo // SetUpAndHoldTimingDelay(); // SET_SCL; // when the clock // SetUpAndHoldTimingDelay(); // RESET_SCL; // goes hi->lo // SetUpAndHoldTimingDelay(); // SET_DATA_TO_INPUT; // relinquish control back to the slave RTC // ////////////////////////////////////////////// } // SendI2CAcknowledge() //-----------------------------------------------------------------------------SET_SDA; Designer Reference Manual 236 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files 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 ) // now defined in 'define.h' as assembler C { ////////////////////////////////// // 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() //------------------------------------------------------------------------------ Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 237 Freescale Semiconductor, Inc. REMOTE Source Code Files 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; // load carry flag with bit7 if ( carry() ) SET_SDA; else RESET_SDA; ////////////////////////////////////////// OutClock(); // data is ready now generate the clock // } ////////////////////////////////////////// } // SendI2CByte() //------------------------------------------------------------------------------ unsigned char GetI2CByte( void) { unsigned char loop; unsigned char receiving_value; SET_DATA_TO_INPUT; receiving_value = 0; for ( loop = 0; loop < 8; loop++ ) { receiving_value <<= 1; // shifting data left if ( InClock() ) { receiving_value |= 1; } } // get next bit sample, returns either 0 or 1 // setting bit0 if hi return receiving_value; } // GetI2CByte() //------------------------------------------------------------------------------ Designer Reference Manual 238 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files //////////////////////////////////////////////////////////////////////////////// // We require function call-content-return to take 5us (worst case timing). // // 5us/(1/2.4576E6) == 12.3 == 13 bus cycles // // // // The call (jsr) is [5] cycles, the return (rts) is [4] cycles leaving the // // function body to occupy 13-(5+4) == 4 cycles // //////////////////////////////////////////////////////////////////////////////// void SetUpAndHoldTimingDelay( void ) { NOP();NOP();NOP();NOP(); } // SetUpAndHoldTimingDelay() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... [REMOTE: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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : i2c.h // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // header file for 'i2c.c' // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 17/06/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __I2C_H_ #define __I2C_H_ Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 239 Freescale Semiconductor, Inc. REMOTE Source Code Files ///////////////// // I2C defines // ///////////////// // data #define #define #define #define #define SET_SDA RESET_SDA SET_DATA_TO_OUTPUT SET_DATA_TO_INPUT READ_SDA PTB.bit.bit1 PTB.bit.bit1 DDRB.bit.bit1 DDRB.bit.bit1 PTB.bit.bit1 = = = = 1 0 1 0 Freescale Semiconductor, Inc... // clock #define SET_SCL #define RESET_SCL #define SET_CLOCK_TO_OUTPUT PTB.bit.bit0 PTB.bit.bit0 DDRB.bit.bit0 =1 =0 =1 unsigned char void void void void unsigned char unsigned char void void #endif InClock( void ); OutClock( void ); StartBit( void ); StopBit( void ); SendI2CByte( unsigned char ); GetI2CByte( void ); WaitForI2CAcknowledge( void ); SendI2CAcknowledge( void ); SetUpAndHoldTimingDelay( void ); Designer Reference Manual 240 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... [REMOTE:interrup.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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : interrup.c // // Author : jtravers // // Compiler : Cosmic HC08 // // CPU : MC68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // Interrupt routines // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 01/09/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include @interrupt void TIMER1OVERFLOW( void ) { if ( T1SC.bit.TOF && T1SC.bit.TOIE ) { T1SC.bit.TOF = 0; // clear interrupt flag flags1.bit._10MS_LOOP = 1; // main() sequencer } } // TIMER1OVERFLOW() //------------------------------------------------------------------------------ Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 241 Freescale Semiconductor, Inc. REMOTE Source Code Files //////////////////////////////////////////////////////////////////////////////// // timer1 channel0 interrupt routine // //////////////////////////////////////////////////////////////////////////////// @interrupt void TIMER1CHANNEL0( void ) { static @tiny unsigned char ir_byte_count = 0; static @tiny unsigned char ir_bit_count = 0; static @tiny unsigned char ir_block_length = 0; static @tiny unsigned short int ir_start_time = 0; static @tiny unsigned short int ir_stop_time = 0; unsigned short int time_diff; Freescale Semiconductor, Inc... //////////////////////////////// // Infra-red decoding routine // //////////////////////////////// if ( T1SC0.bit.CH0F && T1SC0.bit.CH0IE ) { T1SC0.bit.CH0F = 0; // clear interrupt flag if ( T1SC0.bit.ELS0A && !T1SC0.bit.ELS0B ) // +ve edge event { ir_start_time = T1CH0; // time stamp +ve edge T1SC0.bit.ELS0A = 0; T1SC0.bit.ELS0B = 1; // -ve edge next } else // -ve edge event { ir_stop_time = T1CH0; // time stamp -ve edge ///////////////////////////// // pulse width calculation // ///////////////////////////// if ( ir_stop_time >= ir_start_time ) // timer rollover! { time_diff = ir_stop_time - ir_start_time; // standard } else // rollover compensation { time_diff = (TIMER_ROLLOVER-ir_start_time) + ir_stop_time; } ////////////////////////////////////////////////////////////////////// // Is this pulse an IR comms packet leader START pulse (approx 4ms) // ////////////////////////////////////////////////////////////////////// if ( time_diff > _3P5MS && time_diff < _4P5MS && ir_mode == IR_IDLE ) { ////////////////////////////////////////////// // clear variables for incoming data stream // ////////////////////////////////////////////// memset( &ir_buffer[0], 0x00, sizeof(ir_buffer) ); // clear buffer... ir_byte_count = 0; ir_bit_count = 0; ir_block_length = 0; Designer Reference Manual 242 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files ir_mode flags1.bit.IR_ACTIVITY = IR_DATA; = 1; // denote a valid START to show there // has been some comms activity // never cleared Freescale Semiconductor, Inc... } else if ( ir_mode == IR_DATA ) // must be building a bit pattern { //////////////////////////////////////////////////////// // is this pulse in the acceptable pulse width region // //////////////////////////////////////////////////////// if ( time_diff >= MIN_PULSE_WIDTH && time_diff <= MAX_PULSE_WIDTH ) { ///////////////////////////////////////////////////////// // has a '1' arrived, if so set the 'bit_count' bit ie // // if 'bit_count' is 3 then set bit3 of 'temp' etc // ///////////////////////////////////////////////////////// if ( time_diff >= _1_BITWIDTH ) { ir_buffer[ir_byte_count] |= (unsigned char)(0x01< Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 243 Freescale Semiconductor, Inc. REMOTE Source Code Files if ( ++ir_byte_count >= ir_block_length ) { //////////////////////////////// ir_mode = IR_MAIN; // check data validity on // // this packet has been // // processed in // // 'main()->IRCommsCheck()' // } //////////////////////////////// } // 'if ( ++ir_bit_count >= 8 )' // 'if ( time_diff >= MIN_.. && time_diff <= MAX_.. )' // 'else if ( ir_mode == IR_DATA ) } } T1SC0.bit.ELS0A = 1; T1SC0.bit.ELS0B = 0; } // -ve edge // +ve edge next Freescale Semiconductor, Inc... } } // TIMERCHANNEL0() //------------------------------------------------------------------------------ @interrupt void KEYBOARD( void ) { INTKBSCR.bit.IMASKK = 1; // prevent further interrupts until STOP mode INTKBSCR.bit.ACKK = 1; // clear this interrupt request } // KEYBOARD() //------------------------------------------------------------------------------ @interrupt void SCI_RECEIVE( void ) { unsigned char rx_data; static @tiny unsigned char rx_count = 0; static @tiny unsigned char * @tiny rs232_ptr = 0; /////////////////////////////////////////////// // NOTE : Above pointer declaration syntax : // // This pointer resides in PAGE0 and holds a // // PAGE0 (1 byte) address // /////////////////////////////////////////////// if ( SCS1.bit.SCRF ) { //////////////////////////// // store latest data byte // //////////////////////////// rx_data = SCDR.reg; ////////////////////////////////////////////// // is this the first data byte of a packet? // ////////////////////////////////////////////// if ( !rx_count ) { rs232_ptr = &rs232_buffer[0]; *rs232_ptr = rx_data; // should be the incoming block length rx_count = (char)(rx_data-1+2); // block_length-1+2, bytes yet to arrive // '-1' since this byte is the first Designer Reference Manual 244 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files // '+2' for the additional chksum bytes } else { //////////////////////////////////////////// // assign incoming data to 'rs232_buffer' // //////////////////////////////////////////// //////////////////////////////////////////////// *++rs232_ptr = rx_data; // unary operators associate right to left ie // // the pointer pre increment then dereference // // occurs // // // if ( !--rx_count ) // have the expected number of bytes arrived? // { // (similar to above), decrement before the // // true test. // // 'if ( --rx_count == 0 )' is the equivalent// //////////////////////////////////////////////// flags1.bit.CHECK_RS232_DATA = 1; // all data received, analyse // it in main() ///////////////////////////////////////////////////////////////////// // disable receive interrupts until this packet has been processed // // in 'RS232CommsCheck()' called from 'main()' // ///////////////////////////////////////////////////////////////////// SCC2.bit.SCRIE = 0; } } } } // SCI_RECEIVE() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 245 Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... [REMOTE:interrup.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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : interrup.h // // Author : jtravers // // Compiler : Cosmic HC08 // // CPU : MC68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // Header file for interrup.c // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 01/09/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __INTERRUP_H_ #define __INTERRUP_H_ //////////////// // prototypes // //////////////// @interrupt void TIMER1OVERFLOW( void ); @interrupt void TIMER1CHANNEL0( void ); @interrupt void KEYBOARD( void ); @interrupt void SCI_RECEIVE( void ); #endif Designer Reference Manual 246 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... [REMOTE:ir_comms.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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : ir_comms.c // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // Infrared routines // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 12/05/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include "extern.h" #include "ir_comms.h" ////////////////////////////////////////////////////////////////////// // This function transmits it's function argument out on the TX pin // // Argument : data byte to send // // Returns : none // ////////////////////////////////////////////////////////////////////// void Send_IR_Byte( unsigned char data ) { unsigned char ii; ServiceWatchDog(); Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 247 Freescale Semiconductor, Inc. REMOTE Source Code Files /////////////// // data byte // /////////////// for ( ii = 0; ii < 8; ii++ ) { data >>= 1; if ( carry() ) Send_1(); else Send_0(); } } // Send_IR_Byte() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... /**************************/ /* COMMS PACKET STRUCTURE */ /**************************/ //////////////////////////////////////////// // ir_buffer[0] == block length byte // // ir_buffer[1] == block title byte // // ir_buffer[2] == data byte 1 // // ir_buffer[n] == data byte 'n' // // ir_buffer[n+1] == hibyte checksum // // ir_buffer[n+2] == lobyte checksum // // // // Block length is the number of bytes in // // the block, EXCLUDING the checksum. // // // // Checksum is the 16 bit total of the // // block, EXCLUDING the checksum. // //////////////////////////////////////////// void Send_IR_CommsPacket( unsigned char block_title, unsigned char block_length) { union uUNSIGNED_INTEGER checksum; unsigned char ii; ServiceWatchDog(); ///////////////////////////////////////////////////// // disable timer0 capture interrupt as we'd likely // // detect the comms we're about to transmit // ///////////////////////////////////////////////////// T1SC0.bit.CH0IE = 0; ////////////////////////////// // re-affirm data direction // ////////////////////////////// IR_TX_DDR = 1; block_length += 2; // add inherent BLOCK_LENGTH/BLOCK_TITLE bytes to block size Designer Reference Manual 248 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files ////////////////////////////////////////////////////////// // insert the element values into the 'ir_buffer' array // ////////////////////////////////////////////////////////// ir_buffer[0] = block_length; ir_buffer[1] = block_title; /////////////////////////////////// // calculate the packet checksum // /////////////////////////////////// checksum._16bit = 0; for ( ii = 0; ii < block_length; ii++ ) { checksum._16bit += ir_buffer[ii]; } Freescale Semiconductor, Inc... /////////////////////////// // append to 'ir_buffer' // /////////////////////////// ir_buffer[block_length ] = checksum._8bit.hibyte; ir_buffer[block_length+1] = checksum._8bit.lobyte; ////////////////////////////////////////////////////////////////////// // the complete block consista of:// // // // block length + block title + n*data + checksum hi + checksum lo // // // // The number of bytes that we have to transmit is block_length + 2 // ////////////////////////////////////////////////////////////////////// block_length += 2; ////////////////// // Reader Pulse // ////////////////// StartPulse(); ///////////////// // xmit packet // ///////////////// for ( ii = 0; ii < block_length; ii++ ) { Send_IR_Byte( ir_buffer[ii] ); } StopPulse(); if ( T1SC0.bit.CH0F ) { T1SC0.bit.CH0F = 0; // clear interrupt flag if set whilst interrupt disabled } T1SC0.bit.CH0IE = 1; // IR detect timer0 capture interrupt back on } // Send_IR_CommsPacket() //------------------------------------------------------------------------------ Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 249 Freescale Semiconductor, Inc. REMOTE Source Code Files //////////////////////////////////////////////////////////////////////////////// // Logic 0 as transmitted by the IR TX pin: // // -----------// // |////////////| | // // |// 38kHz ///| | // // |////////////| | // // |____________|____________| // // // // <-- 700us --><-- 700us --> // // // // Logic level as seen by receiving pin: // // -----------// // | | | // // | | | // // | | | // // |____________| | // // // // <-- 700us --><---700us --> // // // // The micro measures the width of the +ve pulse to determine the bit value. // //////////////////////////////////////////////////////////////////////////////// void Send_0( void ) { ServiceWatchDog(); _38KHzBurstOnTime(_700US); _38KHzBurstOffTime(_700US); } // Send_0() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... //////////////////////////////////////////////////////////////////////////////// // Logic 1 as transmitted by the IR TX pin: // // // // -----------// // |////////////| | // // |// 38kHz ///| | // // |////////////| | // // |____________|________________________________________| // // // // <-- 700us --><----------- 2100us --------------------> // // // // Logic level as seen by receiving pin: // // ---------------------------------------// // | | | // // | | | // // | | | // // |____________| | // // // // <-- 700us --><----------- 2100us --------------------> // // // // The micro measures the width of the +ve pulse to determine the bit value. // //////////////////////////////////////////////////////////////////////////////// Designer Reference Manual 250 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files void Send_1( void ) { ServiceWatchDog(); _38KHzBurstOnTime(_700US); _38KHzBurstOffTime(_2100US); } // Send_1() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... //////////////////////////////////////////////////////////////////////////////// // The leader pulse as transmitted by the IR TX pin: // // // // -----------// // |////////////| | // // |// 38kHz ///| | // // |////////////| | // // |____________|____________| // // // // <-- 4ms --><--- 4ms ---> // // // // Above leader pulse as seen by micro receiving pin: // // -----------// // | | | // // | | | // // | | | // // |____________| | // // // // <--- 4ms ---><--- 4ms ---> // // // // The receiving micro measures the width of the +ve pulse to determine the // // bit value. // //////////////////////////////////////////////////////////////////////////////// void StartPulse( void ) { ServiceWatchDog(); _38KHzBurstOnTime(_4000US); _38KHzBurstOffTime(_4000US); } // StartPulse() //------------------------------------------------------------------------------ void StopPulse( void ) { ServiceWatchDog(); _38KHzBurstOnTime(_700US); } // StopPulse() //------------------------------------------------------------------------------ Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 251 Freescale Semiconductor, Inc. REMOTE Source Code Files //////////////////////////////////////////////////////////////////////////////// // This function produces count*26us pulses with 50% mark space ratio ie // // 13us high and 13us low. // // // // At 2.4576MHz, 13us == 32 (31.95) bus cycles ie 13E-6*(1/2.4576E6) // // We use 'nop' to give us the timing we require. // // // // The number of nops is less for the low time as we include the do/while // // cycle count in it's timing. // // // // The total function cycle count is count*64 + 13 (for stack/wdg and return) // // Note: above cycle count excludes the 'call' cycles. // //////////////////////////////////////////////////////////////////////////////// void _38KHzBurstOnTime( unsigned char count ) { ServiceWatchDog(); ///////////////////////// // transmit 38KHz ZERO // ///////////////////////// do { ////////////// // start hi // ////////////// IR_TX = 1; NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP(); NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP(); NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP(); ///////////// // now low // ///////////// IR_TX = 0; NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP(); NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP(); } while ( --count ); } // _38KHzBurstOnTime() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... Designer Reference Manual 252 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files //////////////////////////////////////////////////////////////////////////////// // This function produces count*26us timing delay // // // // At 2.4576MHz, 26us == 64 (63.89) bus cycles ie 26E-6*(1/2.4576E6) // // We use 'nop' to give us the timing we require. // // // // The total function cycle count is count*64 + 13 (for stack/wdg and return) // // Note: above cycle count excludes the 'call' cycles. // //////////////////////////////////////////////////////////////////////////////// void _38KHzBurstOffTime( unsigned char count ) { ServiceWatchDog(); do { NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP(); NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP(); NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP(); NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP(); NOP();NOP();NOP();NOP();NOP();NOP();NOP();NOP(); } while ( --count ); } // _38KHzBurstOffTime() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... [REMOTE:ir_comms.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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : ir_comms.c // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // header file for 'ir_comms.c' // Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 253 Freescale Semiconductor, Inc. REMOTE Source Code Files ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 12/05/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __IR_COMMS_H_ #define __IR_COMMS_H_ #define #define #define #define #define #define #define #define #define IR_TX IR_TX_DDR BLOCK_LENGTH BLOCK_TITLE DATA_BYTE1 DATA_BYTE2 DATA_BYTE3 DATA_BYTE4 DATA_BYTE5 PTD.bit.bit3 DDRD.bit.bit3 0 1 2 3 4 5 6 Freescale Semiconductor, Inc... enum // block title values { SEND_A2D_TRIGGER = 0x01, SEND_A2D_DIFFERENCE, SEND_A2D_LOOPTIME, SEND_DELTA_SIG_RESOLUTION, SEND_DELTA_SIG_EVENT, SEND_PASSWORD, UPDATE_A2D_TRIGGER, UPDATE_A2D_DIFFERENCE, UPDATE_A2D_LOOPTIME, UPDATE_DELTA_SIG_RESOLUTION, UPDATE_DELTA_SIG_EVENT }; ///////////////////////// // Delta Sigma defines // ///////////////////////// #define _8BIT #define _9BIT #define _10BIT #define _11BIT #define _12BIT #define _13BIT #define _14BIT #define _15BIT #define #define #define _700US _2100US _4000US 256 512 1024 2048 4096 8192 16384 32768U 27 81 155 // 27*26us == 702us // 27*3*26us == 2106us // 155*26us == 4030us //////////////// // prototypes // //////////////// void Send_IR_Byte( unsigned char ); void Send_IR_CommsPacket( unsigned char, unsigned char ); void Send_0( void ); Designer Reference Manual 254 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files void Send_1( void ); void StartPulse( void ); void StopPulse( void ); void _38KHzBurstOnTime( unsigned char ); void _38KHzBurstOffTime( unsigned char ); #endif Freescale Semiconductor, Inc... [REMOTE:ireg.s] ; INTEGER EXTENSION ; Copyright (c) 1995 by COSMIC Software ; switch .ubsct xdef c_reg ; c_reg: ds.b 1 ; end [REMOTE:lcd.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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : lcd.c // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // lcd read/write routines // Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 255 Freescale Semiconductor, Inc. REMOTE Source Code Files ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 21/08/00 jt creation // // 08/10/00 jt Added BUSY FLAG polling in 'InstructionRegWrite()'.// // During password enter mode, very occasionally the // // cursor would move to a wrong position. I haven't // // seen this event as yet with BUSY FLAG polling method// // Previous, I had a 51us delay to encompass the LCD // // instruction write. The spec claims 40us. // //////////////////////////////////////////////////////////////////////////////// #include Freescale Semiconductor, Inc... void InitialiseLCD( unsigned char options ) { InstructionRegWrite( 0x38 ); // FUNCTION SET : 8bit, dual line display InstructionRegWrite( (unsigned char)(0x0c|options) ); // DISPLAY ON/OFF : // display on,cursor off,blink off InstructionRegWrite( 0x06 ); // ENTRY MODE : display increment no shift InstructionRegWrite( 0x14 ); // DISPLAY CURSOR SHIFT : move cursor right WriteText2( LINE1_2, "", PRECLEAR); } //end of InitialiseTextLCD() //------------------------------------------------------------------------------ void LcdOff( void ) { InstructionRegWrite( 0x08 ); // DISPLAY OFF } //------------------------------------------------------------------------------ void WriteChar( unsigned char value ) { DataRegWrite( value ); } // end of WriteChar() //------------------------------------------------------------------------------ void InstructionRegWrite( unsigned char value ) { unsigned char temp; unsigned char breakout; temp EN = RS = RW = = (unsigned char)(value>>5); // upper three data bits for 8 bit bus 0; // re-affirmation 0; // access instruction reg 0; // write Designer Reference Manual 256 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files NOP();NOP(); // EN = 1; // PTC.reg = value; // PTD.reg = temp; // NOP();NOP();NOP();// NOP();NOP();NOP();// NOP();NOP(); // EN = 0; // RW = 1; // ensure setup time enable write process lcd data 0:4 lcd data 5:7 ensure data setup time disable write process write complete /////////////////////// // busy flag polling // /////////////////////// breakout = 0; Freescale Semiconductor, Inc... ServiceWatchDog(); /* // Not using for now, reverting back to an inline delay...BUSY flag // polling seemed to cause some problems... jt do { DDRD.bit.bit2 = 0; // RS = 0; // RW = 1; // NOP();NOP(); // EN = 1; // NOP();NOP();NOP();NOP();// NOP();NOP();NOP();NOP();// NOP();NOP();NOP();NOP();// NOP();NOP();NOP();NOP();// EN = 0; // input to read BF access the... ...busy flag ensure setup time do it 2us@8MHz bus, spec requires 1us try it if ( ++breakout >= 200 ) { break; // lcd problems here! } } while(PTD.bit.bit2); // wait to go lo */ Delay(_100US); // inline dleay to replace above DDRD.bit.bit2 = 1; // default } // InstructionRegWrite() //------------------------------------------------------------------------------ void DataRegWrite( unsigned char value ) { unsigned char temp; unsigned char breakout; temp = (unsigned char)(value>>5);// upper three data bits for 8 bit bus Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 257 Freescale Semiconductor, Inc. REMOTE Source Code Files EN = 0; // RS = 1; // RW = 0; // NOP();NOP(); // EN = 1; // PTC.reg = value; // PTD.reg = temp; // NOP();NOP();NOP();// NOP();NOP();NOP();// NOP();NOP(); // EN = 0; // RW = 1; // re-affirmation access data register write ensure setup time enable write process lcd data 0:4 lcd data 5:7 ensure data setup time disable write write complete Freescale Semiconductor, Inc... Delay(_100US); } // DataRegWrite() //------------------------------------------------------------------------------ void SetCursorAddress( unsigned char value ) { InstructionRegWrite( (unsigned char)(0x80|value) ); } // SetCursorAddress() //------------------------------------------------------------------------------ ////////////////////////////////////////////////////////////////////////////// // This function 'string' ie 'text_buffer' is filled before this function // // call. 'text_buffer' is mainly filled using 'strcpy()', although on a few // // occasions I perform a manual copy as the string consists of a single // // character. // ////////////////////////////////////////////////////////////////////////////// void WriteText1( unsigned char address ) { unsigned char ii; unsigned char length; SetCursorAddress(address); // write start position length = (unsigned char)strlen(&text_buffer[0]); /////////////// // write it! // /////////////// for ( ii = 0; ii < length; ii++ ) { WriteChar(text_buffer[ii]); } } // WriteText1() //------------------------------------------------------------------------------ void WriteText2( unsigned char address, char *ptr, unsigned char clear ) { unsigned char ii; unsigned char length; Designer Reference Manual 258 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files //////////////////////////////////////////////////////////////////////////////// // if there are other characters currently on the screen that need to be // // erased prior to this write (because this string will not overwrite them) // // then we need to clear (by writing ' ' (0x20) ) before writing 'ptr' // //////////////////////////////////////////////////////////////////////////////// if ( clear == PRECLEAR ) { memset( &text_buffer[0], ' ', sizeof(text_buffer) ); // clear buffer if ( address < 0x10 ) // first line cursor address is : $00...$0f { // from lcd spec SetCursorAddress(LINE1); for ( ii = 0; ii < 16; ii++ ) WriteChar(' } else // address >= 0x10 { if ( address < 0x50 ) // 2nd line cursor address is 0x40...$4f { // from lcd spec SetCursorAddress(LINE2); for ( ii = 0; ii < 16; ii++ ) WriteChar(' } else // must be both lines { SetCursorAddress(LINE1); for ( ii = 0; ii < 16; ii++ ) WriteChar(' SetCursorAddress(LINE2); for ( ii = 0; ii < 16; ii++ ) WriteChar(' } } } length = (unsigned char)strlen(ptr); ///////////////////////////////////////////////////////////////////// // does the cursor address either LINE1 or LINE2 AND is the string // // length non zero, if so then we have a valid string to write // ///////////////////////////////////////////////////////////////////// if ( address < 0x50 && length ) { SetCursorAddress(address); // set write start position /////////////// // write it! // /////////////// for ( ii = 0; ii < length; ii++ ) { WriteChar( *ptr++ ); } } } // WriteText2() //------------------------------------------------------------------------------ '); Freescale Semiconductor, Inc... '); '); '); Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 259 Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... [REMOTE:lcd.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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : lcd.h // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : MC68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // header file for 'lcd.c' // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 21/08/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __LCD_H_ #define __LCD_H_ ///////////////////////////////////////////////// // port defines for serial shifting of address // ///////////////////////////////////////////////// #define RS PTB.bit.bit5 #define RW PTB.bit.bit6 #define EN PTB.bit.bit7 #define #define #define #define enum enum NOBLINK BLINK NOUNDERLINE_CURSOR UNDERLINE_CURSOR 0x00 0x01 0x00 0x02 { LINE1, LINE2=0x40, LINE1_2=0x80 }; { NOPRECLEAR, PRECLEAR }; Designer Reference Manual 260 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files //////////////// // prototypes // //////////////// void InitialiseLCD( unsigned char ); void LcdOff( void ); void WriteChar( unsigned char ); void SetCursorAddress( unsigned char ); void InstructionRegWrite( unsigned char ); void DataRegWrite( unsigned char ); void WriteText1( unsigned char ); void WriteText2( unsigned char, char *, unsigned char ); #endif Freescale Semiconductor, Inc... [REMOTE:link08.bat] @echo off c:\cosmic\cx08\clnk -v -m gp32.inf -e gp32.err -o remote.h08 gp32.lkf c:\cosmic\cx08\chex -fm -o remote.s19 remote.h08 c:\cosmic\cx08\clabs -l -v remote.h08 [REMOTE:lreg.s] ; LONG/FLOAT ACCUMULATOR ; Copyright (c) 1995 by COSMIC Software ; switch .ubsct xdef c_lreg ; c_lreg: ds.b 4 ; end Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 261 Freescale Semiconductor, Inc. REMOTE Source Code Files [REMOTE: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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : main.c // // Compiler : Cosmic ANSI-C // // CPU : MC68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // 'main' routine // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 19/06/00 jt creation // // 07/10/00 jt Code nearing completion. // // Changed startup code to decrease current drain // // before entering STOP mode. Checked '*.la' files. // // Checksum: $B29A2 (archived to : $b29a2.zip) // // 07/10/00 jt Removed unused flag definitions and some general // // tidy-ups. // // Checksum: $B2A17 // // 08/10/00 jt Added BUSY FLAG polling in 'InstructionRegWrite()' // // in 'lcd.c'. // // Checksum: $BAFBC // // 20/10/00 jt Tidy up's // // Checksum: $B9FFF // // 30/10/00 jt Tidy up's // // Checksum: $B7ABD // // 16/11/00 jt Button decodes now same as pdf documentation // // Checksum: $BEE4C // // 20/11/00 jt Full cycle check on 38kHz IR comms timings // // checksum: $C3097 // // 22/11/00 jt Functional tweaks // // v1.0 // // FIRST RELEASE TO MOTOROLA // // checksum: $C15E5 // // 05/12/00 jt Adjusted 'nop' count in 'SetUpAndHoldTimingDelay()' // Freescale Semiconductor, Inc... Designer Reference Manual 262 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... // in 'i2c.c', the 'nop' count needed reducing due to // // the reduced 2.4576MHZ bus, (was 4.9152MHz). // // Dugald Campbell of Motorola spotted some lcd string // // anomalies, fixed them. // // checksum: $C3FED // // 23/01/01 jt Improved ir comms robustness to noise with changes // // in 'interrup.c->TIMER1CHANNEL0'. // // checksum: $DCF93 // // 07/02/01 jt // // v1.1 // // SECOND RELEASE TO MOTOROLA // // checksum: $DCE17 // //////////////////////////////////////////////////////////////////////////////// #include "extern.h" #include "startup.h" #include "button.h" #include "datasort.h" #include "mode.h" //////////// // main() // //////////// void main( void ) { MicroStartUp(); while( 1 ) { STOP(); ServiceWatchDog(); //////////////////////////////////////////////////////////// // by virtue of the fact that we have got to this part of // // the software a KEYBOARD interrupt must have 'fired'. // //////////////////////////////////////////////////////////// Initialise908GP32(); if ( GetPirPassword() ) { do { ServiceWatchDog(); ReadButtons(); IRCommsCheck(); RS232CommsCheck(); ModeCheck(); //////////////////////// // 10ms do-while sync // //////////////////////// while ( !flags1.bit._10MS_LOOP ); flags1.bit._10MS_LOOP = 0; } while ( ++stop_counter < _5MINUTE ); } Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 263 Freescale Semiconductor, Inc. REMOTE Source Code Files //////////////////////////////////////////////////////////////////////////// // there must have been 5mins of no button activity OR a password problem // //////////////////////////////////////////////////////////////////////////// PrepareForSTOP(); } } // main() //------------------------------------------------------------------------------ [REMOTE:make08.bat] @echo off Freescale Semiconductor, Inc... rem///////////////////////////////////// rem// rebuilding crtsi.s startup file // rem///////////////////////////////////// c:\cosmic\cx08\ca6808 crtsi.s c:\cosmic\cx08\ca6808 ireg.s c:\cosmic\cx08\ca6808 lreg.s rem////////////////////////////// rem// compile all source files // rem////////////////////////////// call cc button call cc convert call cc data call cc delay call cc datasort call cc digipot call cc error call cc interrup call cc ir_comms call cc i2c call cc lcd call cc main call cc mode call cc rs_comms call cc rtc call cc startup call cc vectors rem/////////////////////////// rem// link the object files // rem/////////////////////////// call link08 rem//////////////////////////////// rem// deleting relative listings // rem//////////////////////////////// del *.ls dir *.err Designer Reference Manual 264 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files [REMOTE:mode.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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : mode.c // // Author : jtravers // // Compiler : Cosmic HC08 // // CPU : MC68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // lcd screen mode functionality // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 01/09/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include "extern.h" #include "ir_comms.h" #include "datasort.h" #include "lcd.h" #include "error.h" #include "delay.h" #include "startup.h" #include "rtc.h" #include "convert.h" #include "mode.h" Freescale Semiconductor, Inc... unsigned char GetPirPassword( void ) { unsigned char retry_count = 0; mode = MODE_WAITING_FOR_PIR_PASSWORD; Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 265 Freescale Semiconductor, Inc. REMOTE Source Code Files ///////////////// // prepare LCD // ///////////////// InitialiseLCD(NOBLINK|NOUNDERLINE_CURSOR); WriteText2( LINE1, "Transmitting IR ", NOPRECLEAR ); WriteText2( LINE2, "comms packets " , NOPRECLEAR ); do { ServiceWatchDog(); Send_IR_CommsPacket(SEND_PASSWORD, 0); Delay10ms(30); IRCommsCheck(); UpdateDots(retry_count); // // // // xmit ir comms packet 300ms between transmissions check for appropriate reply write the progress '.' dots Freescale Semiconductor, Inc... if ( ++retry_count > 40 ) { if ( !flags1.bit.IR_ACTIVITY ) { ErrorCondition(ERROR_NO_IR_COMMS); } else { ErrorCondition(ERROR_NO_PASSWORD); } // 40*0.3s == 12s of attempts // error message // error message } return 0; // back to STOP mode } while ( mode == MODE_WAITING_FOR_PIR_PASSWORD ); //////////////////////////////////////////////////////// // OK, password value received from PIR unit. Now the // // user needs to type in a matching one // //////////////////////////////////////////////////////// PasswordEntryScreen(); return 1; } // GetPirPassword() //------------------------------------------------------------------------------ void UpdateDots( unsigned char value ) { //////////////////////////////////////////////////////////////////// // using instead of 'strcpy(&text_buffer[0], ".")' since there is // // only 1 character to this string // //////////////////////////////////////////////////////////////////// text_buffer[0] = '.';text_buffer[1] = '\0'; switch ( value ) { case 12 : WriteText1( LINE2+13 ); break; case 24 : Designer Reference Manual 266 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files WriteText1( LINE2+14 ); break; case 36 : WriteText1( LINE2+15 ); break; } } // UpdateDots() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... void PasswordEntryScreen( void ) { InitialiseLCD(BLINK|NOUNDERLINE_CURSOR); WriteText2( LINE1, "Enter password: " , NOPRECLEAR ); WriteText2( LINE2, " XXXXX " , NOPRECLEAR ); SetCursorAddress(LINE2+5); character_count = 0; flags1.bit.PASSWORD_WRAP = 0; mode = MODE_USER_ENTER_PASSWORD; } // PasswordEntryScreen() //------------------------------------------------------------------------------ void PrepareForSTOP( void ) { InitialiseKeyboardInt(); InitialiseLCD(NOBLINK|NOUNDERLINE_CURSOR); WriteText2(LINE1_2, "", PRECLEAR); LcdOff(); DDRB.reg = 0x00; // all input DDRC.reg = 0x00; // to minimise DDRD.reg = 0x00; // current drain ServiceWatchDog(); } // PrepareForSTOP() //------------------------------------------------------------------------------ void ShuttingDown( void ) { if ( shut_down_ii == 0 && shut_down_jj == 0 ) // { InitialiseLCD(NOBLINK|NOUNDERLINE_CURSOR); WriteText2( LINE1, "Shutting down..." , NOPRECLEAR ); } ////////////////////////////////////// // show progress dots increasing... // ////////////////////////////////////// if ( ++shut_down_jj == 10 ) // 10*10ms == 100ms between dot writes { shut_down_jj = 0; Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 267 Freescale Semiconductor, Inc. REMOTE Source Code Files ////////////////////////////////////////////////////// // show the 16 dots moving increasing along display // ////////////////////////////////////////////////////// if ( shut_down_ii < 16 ) { WriteText2( (unsigned char)(LINE2+shut_down_ii++), ".", NOPRECLEAR ); } } } // ShuttingDown() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... void ModeCheck( void ) { switch ( mode ) { case MODE_TIME_OF_DAY : UpdateTime(); break; ///////////////////////////////////////// // The time between increasing dots is // // 100ms. We draw 16 of them in total. // ///////////////////////////////////////// // 180 == 180*10ms == 1.8s // // the 16 dot draws will take 100ms*16 // // start shutting down @ 58.2s // == 160ms. // if ( stop_counter == (_5MINUTE-180) ) // '180' not '160' for 100ms to show // { // the last printed dot // WriteText2( LINE1_2, "", PRECLEAR); ///////////////////////////////////////// mode_copy = mode; // store mode before shut down execution mode = MODE_SHUTTING_DOWN; } } // ModeCheck() //-----------------------------------------------------------------------------case MODE_SHUTTING_DOWN : ShuttingDown(); break; } void RedrawFlashParameterScreen( void ) { switch ( mode ) { case MODE_EDIT_A2D_TRIGGER : WriteText2( LINE1, "A2D Trigger: " , NOPRECLEAR ); WriteText2( LINE2, "", PRECLEAR); IntegerToASCII( adjust_value._8bit.lobyte, &text_buffer[7] WriteText1(LINE2); break; case MODE_EDIT_A2D_DIFFERENCE : WriteText2( LINE1, "A2D Difference: " , NOPRECLEAR ); WriteText2( LINE2, "", PRECLEAR); IntegerToASCII( adjust_value._8bit.lobyte, &text_buffer[7] WriteText1(LINE2); break; ); ); Designer Reference Manual 268 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files case MODE_EDIT_A2D_LOOPTIME : WriteText2( LINE1, "A2D Loop Time: " , NOPRECLEAR ); WriteText2( LINE2, "", PRECLEAR); IntegerToASCII( adjust_value._8bit.lobyte, &text_buffer[7] WriteText1(LINE2); break; case MODE_EDIT_DELTA_SIG_RESOLUTION : WriteText2( LINE1, "Delta Sig Res'n:" , NOPRECLEAR ); WriteText2( LINE2, "", PRECLEAR); IntegerToASCII( adjust_value._8bit.lobyte, &text_buffer[7] WriteText1(LINE2); break; ); ); Freescale Semiconductor, Inc... case MODE_EDIT_DELTA_SIG_EVENT : WriteText2( LINE1, "Delta Sig Event:" , NOPRECLEAR ); WriteText2( LINE2, "", PRECLEAR); IntegerToASCII( adjust_value._16bit, &text_buffer[7] ); WriteText1(LINE2); break; case MODE_LCD_CONTRAST_ADJUST : WriteText2(LINE1_2, "", PRECLEAR); WriteText2(LINE1, "Screen Contrast", NOPRECLEAR); WriteText2(LINE2, "Use INC/DEC" , NOPRECLEAR); break; case MODE_TIME_OF_DAY : WriteText2(LINE1_2, "", PRECLEAR); // clear whole screen prior to TOD break; } } // RedrawFlashParameterScreen(); //------------------------------------------------------------------------------ Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 269 Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... [REMOTE:mode.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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : mode.h // // Author : jtravers // // Compiler : Cosmic HC08 // // CPU : MC68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // header file for 'mode.c' // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 01/09/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __MODE_H_ #define __MODE_H_ enum { MODE_WAITING_FOR_PIR_PASSWORD = 0x01, MODE_USER_ENTER_PASSWORD, MODE_EDIT_A2D_TRIGGER, MODE_EDIT_A2D_DIFFERENCE, MODE_EDIT_A2D_LOOPTIME, MODE_EDIT_DELTA_SIG_RESOLUTION, MODE_EDIT_DELTA_SIG_EVENT, MODE_TIME_OF_DAY, MODE_SHUTTING_DOWN, MODE_LCD_CONTRAST_ADJUST }; Designer Reference Manual 270 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files //////////////// // prototypes // //////////////// unsigned char GetPirPassword( void ); void UpdateDots( unsigned char ); void PasswordEntryScreen( void ); void PrepareForSTOP( void ); void ShuttingDown( void ); void ModeCheck( void ); void RedrawFlashParameterScreen( void ); #endif Freescale Semiconductor, Inc... [REMOTE:rs_comms.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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : rs_comms.c // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // RS232 routines // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 01/09/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include "extern.h" #include "rs_comms.h" Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 271 Freescale Semiconductor, Inc. REMOTE Source Code Files void InitialiseRS232( void ) { SCC1.reg = 0x40; // ENSCI set, 8 data, 1 start, 1 stop SCC2.reg = 0x2c; // rx interrupts and receiver/transmitter enabled SCC3.reg = 0x00; // SCBR.reg = _38400; // } // InitialiseRS232() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... void Send_RS232_Byte( unsigned char data ) { /*-----------------02/09/00 22:44------------------* there are subtle differences between the two methods shown below. * * The 'SCTE' flag is set when the data has been transferred to the * transmit shift register (NOTE: it has not necessarily been sent) * * The 'TC' is set after 'SCTE' has been set and after the * data has been transmitted. * --------------------------------------------------*/ /* unsigned char temp; ///////////////////// // using SCTE flag // ///////////////////// temp = SCS1.reg; // force clear of SCTE SCDR.reg = data; while ( !SCS1.bit.SCTE ); // wait for data to be transferred */ /////////////////// // using TC flag // /////////////////// SCDR.reg = data; // 'TC' automatically cleared by this while ( !SCS1.bit.TC ); // wait while transmission in progress } // Send_RS2232_Byte() //------------------------------------------------------------------------------ unsigned char Get_RS232_Byte( void ) { while ( !SCS1.bit.SCRF ); return SCDR.reg; } // Get_RS232_Byte() //------------------------------------------------------------------------------ Designer Reference Manual 272 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... //////////////////////////// // COMMS PACKET STRUCTURE // //////////////////////////// /////////////////////////////////////////////// // rs232_buffer[0] == block length byte // // rs232_buffer[1] == block title byte // // rs232_buffer[2] == data byte 1 // // rs232_buffer[n] == data byte 'n' // // rs232_buffer[n+1] == hibyte checksum // // rs232_buffer[n+2] == lobyte checksum // // // // Block length is the number of bytes in // // the block, EXCLUDING the checksum. // // // // Checksum is the 16 bit total of the // // block, EXCLUDING the checksum. // /////////////////////////////////////////////// void Send_RS232_CommsPacket( unsigned char block_title, unsigned char block_length ) { union uUNSIGNED_INTEGER checksum; unsigned char ii; ServiceWatchDog(); block_length += 2; // add inherent BLOCK_LENGTH/BLOCK_TITLE bytes to block size ///////////////////////////////////////////////////////////// // insert the element values into the 'rs232_buffer' array // ///////////////////////////////////////////////////////////// rs232_buffer[0] = block_length; rs232_buffer[1] = block_title; /////////////////////////////////// // calculate the packet checksum // /////////////////////////////////// checksum._16bit = 0; for ( ii = 0; ii < block_length; ii++ ) { checksum._16bit += rs232_buffer[ii]; } ///////////////////// // append checksum // ///////////////////// rs232_buffer[block_length ] = checksum._8bit.hibyte; rs232_buffer[block_length+1] = checksum._8bit.lobyte; ////////////////////////////////////////////////////////////////////// // the complete block consista of:// // // // block length + block title + n*data + checksum hi + checksum lo // // // // The number of bytes that we have to transmit is block_length + 2 // ////////////////////////////////////////////////////////////////////// Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 273 Freescale Semiconductor, Inc. REMOTE Source Code Files block_length += 2; ////////////// // preamble // ////////////// Send_RS232_Byte( Send_RS232_Byte( Send_RS232_Byte( Send_RS232_Byte( Send_RS232_Byte( Send_RS232_Byte( 'A' 'T' 'E' 'E' 'C' 'C' ); ); ); ); ); ); Freescale Semiconductor, Inc... ///////////////// // xmit packet // ///////////////// for ( ii = 0; ii < block_length; ii++ ) { Send_RS232_Byte( rs232_buffer[ii] ); } } // Send_RS232_CommsPacket() //------------------------------------------------------------------------------ [REMOTE:rs_comms_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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : rs_comms.h // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // header file for 'rs_comms.c' // Designer Reference Manual 274 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 01/09/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __RS_COMMS_H_ #define __RS_COMMS_H_ #define _38400 0x00 Freescale Semiconductor, Inc... enum // RS232 block title values { UPDATE_RTC, ACKNOWLEDGE = 0x55, NOACKNOWLEDGE }; void InitialiseRS232( void ); void Send_RS232_Byte( unsigned char ); unsigned char Get_RS232_Byte( void ); void Send_RS232_CommsPacket( unsigned char, unsigned char ); #endif [REMOTE:rtc.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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : rtc.c // // Author : jtravers // // Compiler : Cosmic HC08 // // CPU : MC68HC908GP32 // Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 275 Freescale Semiconductor, Inc. REMOTE Source Code Files ///////////////////// File Contents ////////////////////////////////////////// // Real Time Clock routines // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 01/09/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include Freescale Semiconductor, Inc... void UpdateTime( void ) { static @tiny unsigned char struct RTC seconds_compare = 0; current_time; if ( mode == MODE_TIME_OF_DAY ) { ServiceWatchDog(); ////////////////////////// // get the current time // ////////////////////////// RTC_Read(SECONDS, ¤t_time); ////////////////////////////////////////////////////////// // write it to the screen, only if the time has changed // ////////////////////////////////////////////////////////// if ( seconds_compare != current_time.seconds ) { memset( &text_buffer[0], ' ', sizeof(text_buffer) ); /////////////////////////////////////////////////// // what day is it, occupies text_buffer[0][1][2] // /////////////////////////////////////////////////// if ( current_time.day >= 1 && current_time.day <= 7 ) { strcpy( &text_buffer[0], &days_of_week[current_time.day][0] ); } else { strcpy( &text_buffer[0], &days_of_week[8][0] ); // "XXX" error read } Designer Reference Manual 276 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files ///////////////////// // what date is it // ///////////////////// text_buffer[3] = ' '; HexToASCII( current_time.date, &text_buffer[4] ); text_buffer[6] = ' '; // uses elements [4][5] ///////////////////////////////////////////////////// // what month is it, occupies text_buffer[7][8][9] // ///////////////////////////////////////////////////// HexToDec( ¤t_time.month ); if ( current_time.month >= 1 && current_time.month <= 12 ) { strcpy( &text_buffer[7], &months_of_year[current_time.month][0] ); } else { strcpy( &text_buffer[7], &months_of_year[13][0] ); // "XXX" error read } //////////////////////////////////////////////////////////// // century hi:lo bytes occupt text_buffer[11][12][13][14] // //////////////////////////////////////////////////////////// text_buffer[10] = ' '; HexToASCII( current_time.year._8bit.hibyte, &text_buffer[11] HexToASCII( current_time.year._8bit.lobyte, &text_buffer[13] text_buffer[15] = '\0'; /////////////////////////////////////////////// // all formatting complete, write first line // /////////////////////////////////////////////// WriteText1( LINE1 ); ///////////////// // second line // ///////////////// HexToASCII( current_time.hours, &text_buffer[0] );// text_buffer[0][1] text_buffer[2] = ':'; HexToASCII( current_time.minutes, &text_buffer[3] );// text_buffer[3][4] text_buffer[5] = ':'; HexToASCII( current_time.seconds, &text_buffer[6] );// text_buffer[6][7] text_buffer[8] = '\0'; ////////////// // write it // ////////////// WriteText1( LINE2 + 4 ); //////////////////////////////// // update for next comparison // //////////////////////////////// seconds_compare = current_time.seconds; } } Freescale Semiconductor, Inc... ); ); // fixed Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 277 Freescale Semiconductor, Inc. REMOTE Source Code Files } // UpdateTime() //------------------------------------------------------------------------------ unsigned char SetRTC( struct RTC *ptr ) { struct RTC compare; unsigned char error_count; StartBit(); SendI2CByte( RTC_WRITE ); WaitForI2CAcknowledge(); SendI2CByte( SECONDS ); WaitForI2CAcknowledge(); SendI2CByte( ptr->seconds ); WaitForI2CAcknowledge(); SendI2CByte( ptr->minutes ); WaitForI2CAcknowledge(); SendI2CByte( ptr->hours ); WaitForI2CAcknowledge(); SendI2CByte( ptr->day ); WaitForI2CAcknowledge(); SendI2CByte( ptr->date ); WaitForI2CAcknowledge(); SendI2CByte( ptr->month ); WaitForI2CAcknowledge(); SendI2CByte( ptr->year._8bit.lobyte ); WaitForI2CAcknowledge(); StopBit(); ///////////////////////////////////// // now to read what's been written // ///////////////////////////////////// RTC_Read( SECONDS, &compare ); error_count = 0; if if if if if if if ( ( ( ( ( ( ( compare.year._8bit.lobyte compare.month compare.date compare.day compare.hours compare.minutes compare.seconds != != != != != != != ptr->year._8bit.lobyte ptr->month ptr->date ptr->day ptr->hours ptr->minutes ptr->seconds ) ) ) ) ) ) ) error_count++; error_count++; error_count++; error_count++; error_count++; error_count++; error_count++; //////////////////////////////// // RTC_WRITE == 0xd0 // // // // point to seconds register // // // // seconds // // // // minutes // // // // hours // // // // day // // // // date // // // // month // // // // year // // // //////////////////////////////// Freescale Semiconductor, Inc... if ( !error_count ) { return 1; // success } return 0; // failed } // SetRTC() //------------------------------------------------------------------------------ Designer Reference Manual 278 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files void RTC_Read( unsigned char register_pointer, struct RTC *ptr ) { //////////////////////////////////////////////// // first set the internal RTC address pointer // // to the register that you require with a // // WRITE command // //////////////////////////////////////////////// StartBit(); SendI2CByte( RTC_WRITE ); WaitForI2CAcknowledge(); SendI2CByte( register_pointer ); WaitForI2CAcknowledge(); StopBit(); Freescale Semiconductor, Inc... /////////////////////////////////////// // Then read the contents of the RTC // // registers, with a READ command // /////////////////////////////////////// StartBit(); SendI2CByte( RTC_READ ); // RTC_READ == 0xd1 WaitForI2CAcknowledge(); ptr->seconds = GetI2CByte(); SendI2CAcknowledge(); ptr->minutes = GetI2CByte(); SendI2CAcknowledge(); ptr->hours = GetI2CByte(); SendI2CAcknowledge(); ptr->day = GetI2CByte(); SendI2CAcknowledge(); ptr->date = GetI2CByte(); SendI2CAcknowledge(); ptr->month = GetI2CByte(); SendI2CAcknowledge(); ptr->year._8bit.lobyte = GetI2CByte(); ptr->year._8bit.hibyte = 0x20; // century hi byte...fixed for the // next 99 years! SET_DATA_TO_OUTPUT; // master sending a NOT ACK SET_SDA; OutClock(); // no acknowledge expected here, we generate a clock pulse StopBit(); } // RTC_Read() //------------------------------------------------------------------------------ ////////////////////////////// // load RTC with known data // ////////////////////////////// void ForceRTC( void ) { struct RTC force_rtc; if ( mode == MODE_TIME_OF_DAY ) { Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 279 Freescale Semiconductor, Inc. REMOTE Source Code Files force_rtc.seconds force_rtc.minutes force_rtc.hours force_rtc.day force_rtc.date force_rtc.month force_rtc.year._8bit.hibyte force_rtc.year._8bit.lobyte WriteText2( LINE1, " = = = = = = = = 0x00; 0x00; 0x00; 0x01; 0x01; 0x01; 0x20; 0x01; ", NOPRECLEAR ); RTC Override Freescale Semiconductor, Inc... if ( SetRTC( &force_rtc ) ) // write it! { WriteText2( LINE2, " Successful! ", NOPRECLEAR ); } else { WriteText2( LINE2, "Failed,Try Again", NOPRECLEAR ); } Delay10ms(_1S); // show message for 1s WriteText2(LINE1_2, "", PRECLEAR); // clear whole screen prior to TOD } } // ForceRTC() //------------------------------------------------------------------------------ [REMOTE:rtc.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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : rtc.h // // Author : jtravers // // Compiler : Cosmic HC08 // // CPU : MC68HC908GP32 // Designer Reference Manual 280 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files ///////////////////// File Contents ////////////////////////////////////////// // header file for rtc.c // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 01/09/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __RTC_H_ #define __RTC_H_ #include "declared.h" Freescale Semiconductor, Inc... enum { RTC_WRITE = 0xd0, RTC_READ }; enum { SECONDS = 0x00, MINUTES, HOURS, DAY, DATE, MONTH, YEAR }; //////////////// // prototypes // //////////////// void UpdateTime( void ); unsigned char SetRTC( struct RTC * ); void RTC_Read( unsigned char, struct RTC * ); void ForceRTC( void ); #endif Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 281 Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... [REMOTE: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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : startup.c // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908JK1 // ///////////////////// File Contents ////////////////////////////////////////// // startup routines // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 19/06/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include "extern.h" #include "lcd.h" #include "button.h" #include "delay.h" #include "startup.h" void MicroStartUp( void ) { //////////////////////////////////////////////////////// CONFIG1.reg = 0x0a; // COP time out (2^18-2^24)*1/Fosc, LVI enabled (5V), // // STOP instruction enabled, watchdog enabled // ServiceWatchDog(); // // CONFIG2.reg = 0x01; // oscillator off in STOP, bit rate from internal bus // INTSCR.reg = 0x02; // IRQ interrupts disabled // SEI(); // re-affirm // //////////////////////////////////////////////////////// InitialisePLL(); Designer Reference Manual 282 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files ///////////////////////////////////////////////// // assign data direction for LCD activity only // ///////////////////////////////////////////////// PTB.reg = 0x00; DDRB.reg = 0xe0; PTC.reg = 0x00; DDRC.reg = 0xff; PTD.reg = 0x00; DDRD.reg = 0x07; ///////////////////////////////////////////////// // ensure LCD is off to minimise current drain // ///////////////////////////////////////////////// InitialiseLCD(NOBLINK|NOUNDERLINE_CURSOR); WriteText2(LINE1_2, "", PRECLEAR); LcdOff(); ///////////////////////////////////////////////////// InitialiseKeyboardInt(); // porta setup, to enable us to recover from STOP // // ready for keyboard interrupt to bring micro out // // of STOP mode // DDRB.reg = 0x00; // all input // DDRC.reg = 0x00; // to minimise // DDRD.reg = 0x00; // current drain // CLI(); // ready for STOP mode recovery via KEYBOARD int // ///////////////////////////////////////////////////// } // MicroStartUp() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... void InitialisePLL( void ) { ///////////////////////////////////////////// PBWC.reg = 0x80; // auto mode // PCTL.reg = 0x02; // settings here... // PMS = 0x012c; // as described in... // PMRS.reg = 0x80; // the MC68HC908GP32/H // PMDS.reg = 0x01; // Rev2.0 data book section 7.4.6 page 120 // PCTL.bit.PLLON = 1; // turn pll on after settings 'set' // ///////////////////////////////////////////// /////////////////////////////////////////////////// // wait for the required frequency to be reached // /////////////////////////////////////////////////// ServiceWatchDog(); while ( !PBWC.bit.LOCK ); PCTL.bit.BCS = 1; // pll clock drives CGMOUT ////////////////////////////////////////////////////////////////////// // bus frequency is 2.4576MHz, this produces a watchdog timeout of: // // (2^18-2^4)*1/2.4576E6 == (262144 - 16)/2.4576E6 => 106.66ms // ////////////////////////////////////////////////////////////////////// } // InitialisePLL() //------------------------------------------------------------------------------ Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 283 Freescale Semiconductor, Inc. REMOTE Source Code Files ///////////////////////////////////////////////////////////// // keyboard interrupt setup, as per page 189, section 13.5 // // of the MC68HC908GP32 Rev2.0 Technical Data book. // ///////////////////////////////////////////////////////////// void InitialiseKeyboardInt( void ) { ServiceWatchDog(); INTKBSCR.bit.IMASKK = 1; // mask interrupts INTKBIER.reg = 0x1f; // bits 0..4 as interrupt sources INTKBSCR.bit.MODEK = 0; // falling edge active only PTA.reg = 0x1f; // column drivers output... DDRA.reg = 0xe0; // ... and low PTAPUE.reg = 0x1f; // portA pullups enabled Delay(_50US); // wait...before read for pin level to settle INTKBSCR.bit.ACKK = 1; // clear interrupt request, if one pending INTKBSCR.bit.IMASKK = 0; // ready } // InitialiseKeyboardInt() //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... void Initialise908GP32( void ) { SEI(); InitialisePLL(); /////////////// // I/O Setup // /////////////// PTB.reg = 0x1c; DDRB.reg = 0xff; PTC.reg DDRC.reg PTD.reg DDRD.reg = 0x00; = 0xff; = 0x00; = 0x2f; //////////////////////////////////////////////////////// // // // bit7:lcd E, bit6:lcd RW, bit5:lcd RS, // // bit4:digipot inc, bit3:digipot up/down, // // bit2:digipot CS, bit1:RTC data, bit0:RTC Clock // // // // bit4:lcd data4, bit3:lcd data3, bit2:lcd data2 // // bit1:lcd data1, bit0:lcd data0 // // ensure ir xmit off // // bit5:SPARE, bit4:IR RX, bit3:IR TX, bit2:lcd data7 // // bit1:lcd data6, bit0:lcd data5 // //////////////////////////////////////////////////////// ////////////////// // timer1 setup // ////////////////// T1SC.reg = 0x70; //////////////////////////////////////////////////////// // set TOIE, stop and reset timer counter, // // timer: 1X prescaler // // Using the PLL to provide a bus clock of 2.4576MHz // // this gives us a bus cycle period of 1/2.4576E6 // // == 0.407us // // To obtain our 10ms timer overflow count we need a // // a timer mod value of (10E-3)/(1/2.4576E6) == // // (10E-3)*(2.4576E6) == 24576 // // This has been defined in 'define.h' // T1MOD = TIMER_ROLLOVER; //////////////////////////////////////////////////////// Designer Reference Manual 284 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files /////////////////////////////////////////////////////////////////////////// // start timer1 channel0 as capture mode for +ve edges (for ir comms rx) // /////////////////////////////////////////////////////////////////////////// T1SC0.reg = 0b01000100; // |||||||| // ||||||||____ CH0MAX 100% pwm off // |||||||_____ TOV0 PTD4 not toggled on overflow // ||||||______ ELS0A } +ve edge trigger capture // |||||_______ ELS0B } -ve edge trigger capture // ||||________ MS0A unbuffered compare/pwm operation on // |||_________ MS0B buffered compare/pwm off // ||__________ CHOIE interrupt enabled // |___________ CH0F read only Freescale Semiconductor, Inc... T1SC1.reg T2SC.reg T2SC0.reg T2SC1.reg = = = = 0x00; 0x00; 0x00; 0x00; // // // // timer1 channel1 off mod timer2 off timer2 channel0 off timer2 channel1 off // start mod timer1 T1SC.bit.TSTOP = 0; //////////////////////////// // Clear all variable ram // //////////////////////////// ClrPAGE0Ram(); ///////////////////////// // initial assignments // ///////////////////////// button_press_status = NO_BUTTON_PRESS; ds_adjust_ptr = &ds_adjust[0]; ir_mode = IR_IDLE; flags1.byte = 0x00; //////////////////////////////////// // ready for interrupt processing // //////////////////////////////////// CLI(); } // Initialise908GP32() //------------------------------------------------------------------------------ Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 285 Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... [REMOTE: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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : startup.h // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : 68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // header file for 'startup.c' // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 19/06/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #ifndef __STARTUP_H_ #define __STARTUP_H_ //////////////// // prototypes // //////////////// void MicroStartUp( void ); void InitialisePLL( void ); void InitialiseKeyboardInt( void ); void Initialise908GP32( void ); #endif Designer Reference Manual 286 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Source Code Files Freescale Semiconductor, Inc... [REMOTE:vectors.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 // // Durham // // DH8 6BP // // England // // // // Telephone: 0044 1207 693920 // // Fax : 0044 1207 693921 // // email : enquiries@ateecc.com // // web : www.ateecc.com // //////////////////////////////////////////////////////////////////////////////// // Project : Motorola Infra Red Reference Design, Remote Control // // Filename : vectors.c // // Author : jtravers // // Compiler : Cosmic ANSI-C // // CPU : MC68HC908GP32 // ///////////////////// File Contents ////////////////////////////////////////// // vectors - an array of void pointers // ////////////////////////// Update Information //////////////////////////////// // Ed. Date Init's Modification // // --- -------- ------ ----------------------------------------------------// // 001 19/06/00 jt creation // //////////////////////////////////////////////////////////////////////////////// #include "define.h" // 'NULL' defined extern extern extern extern extern void void void void void TIMER1OVERFLOW( void ); TIMER1CHANNEL0( void ); KEYBOARD( void ); SCI_RECEIVE( void ); _stext(); // startup routine. defined by Cosmic in 'crtsi.s' /////////////////////////////////// // an array of function pointers // /////////////////////////////////// void (*const _vectab[18])(void) = { Passive Infrared (PIR) Unit MOTOROLA REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 287 Freescale Semiconductor, Inc. REMOTE Source Code Files //////////////////////////////////// _stext, // TIMEBASE $FFDC // | _stext, // A2D CONVERSION COMPLETE $FFDE // | KEYBOARD, // KEYBOARD $FFE0 // | _stext, // SCI TRANSMIT $FFE2 // | SCI_RECEIVE, // SCI RECEIVE $FFE4 // | _stext, // SCI ERROR $FFE6 // | _stext, // SPI TRANSMIT $FFE8 // | _stext, // SPI RECEIVE $FFEA // | _stext, // TIMER2 OVERFLOW $FFEC // | _stext, // TIMER2 CHANNEL1 $FFEE // | _stext, // TIMER2 CHANNEL0 $FFF0 // | TIMER1OVERFLOW,// TIMER1 OVERFLOW $FFF2 // | _stext, // TIMER1 CHANNEL1 $FFF4 // | TIMER1CHANNEL0,// TIMER1 CHANNEL0 $FFF6 // | _stext, // PLL $FFF8 // | _stext, // IRQ $FFFA // | _stext, // SWI $FFFC // V _stext // RESET $FFFE // Increasing Priority //////////////////////////////////// }; //------------------------------------------------------------------------------ Freescale Semiconductor, Inc... Designer Reference Manual 288 REMOTE Source Code Files For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- Passive Infrared (PIR) Unit Appendix G. PIR Unit Bill of Materials Freescale Semiconductor, Inc... AT Electronic Embedded Control Consultants Parts List for PIR Board ATCD1006/3 02/01 Issue 2 Resistors R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R40 R42 R44 R45 R46 R47 R48 1k 10k 47k 10M 10R 680R 10k 100k 47k 100k 100k 470R 2k2 10k 10k 10k 10k 470R 680R 10k 3M3 10k 10k 47k 3M3 680k 4k7 Passive Infrared (PIR) Unit MOTOROLA PIR Unit Bill of Materials For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 289 Freescale Semiconductor, Inc. PIR Unit Bill of Materials Capacitors C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16 C17 C19 C20 C21 C23 Freescale Semiconductor, Inc... 100nF 100nF 220uF 470uF 100nF 100nF 100nF 100nF 100nF 100nF 3nF3 100nF 220F 100nF 33F 10F 10F 100nF 10nF 22F 10F 50V DC 50V DC 16V DC 25V DC 50V DC 50V DC 50V DC 50V DC 50V DC 50V DC 50V DC 50V DC 16V DC 50V DC 10V Tantalum 16V DC 16V DC 50V DC 50V DC 16V DC 16V DC Semiconductors D1 BAS16 D2 BAS16 D3 BAS16 D4 BAS16 D5 5V1 IC1 MC68HC908JK3 IC2 LM7805 IC3 MAX232 IC4 74HC125D IC5 LM324D Q1 BC818-40 Q2 BC850 Q3 BC850 Q4 BC850 Designer Reference Manual 290 PIR Unit Bill of Materials For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. PIR Unit Bill of Materials Freescale Semiconductor, Inc... Miscellaneous SW1 SW2 SW3 X1 XT1 FR1 IR1 J1 J2 J3 J4 J5 J6 LED1 LED2 LED3 LED4 SPCO slide switch SPCO slide switch SPCO slide switch 4MHz resonator 9.8304MHz Oscillator Module Curtain' Fresnel lens GP1U28Q 9 way rt angle male `D' Connector "3pin 0.1"" header" "3pin 0.1"" header" 9 way rt angle male `D' Connector 3pin PIR Connector 1.2mm Infra Red transmitter 5mm Red 5mm Yellow 5mm Green Passive Infrared (PIR) Unit MOTOROLA PIR Unit Bill of Materials For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 291 Freescale Semiconductor, Inc. PIR Unit Bill of Materials Freescale Semiconductor, Inc... Designer Reference Manual 292 PIR Unit Bill of Materials For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. Designer Reference Manual -- Passive Infrared (PIR) Unit Appendix H. REMOTE Unit Bill of Materials AT Electronic Embedded Control Consultants Parts List for I/R Remote Board ATCD1007/2 02/01 Freescale Semiconductor, Inc... Resistors R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R12 R13 R14 R16 R17 R18 R19 R20 10M 330k 68k 10k 10k 2k2 10R 10k 1k 10k 10k 10k 10k 10k 470R 470R 10k 47k 5% 0.25W 5% 0.25W 5% 0.25W 5% 0.25W 5% 0.25W 5% 0.25W 5% 0.25W 5% 0.25W 5% 0.25W 5% 0.25W 5% 0.25W 5% 0.25W 5% 0.25W 5% 0.25W 5% 0.25W 5% 0.25W 5% 0.25W 5% 0.25W Passive Infrared (PIR) Unit MOTOROLA REMOTE Unit Bill of Materials For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 293 Freescale Semiconductor, Inc. REMOTE Unit Bill of Materials Capacitors C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C14 C15 C16 Freescale Semiconductor, Inc... 100nF 100nF 100nF 100nF 33nF 15pF 220F 100nF 100nF 15pF 10nF 100nF 100F 220F 100nF 50V DC 50V DC 50V DC 50V DC 50V DC 50V DC 16V DC 50V DC 50V DC 50V DC 50V DC 50V DC 50V DC 16V DC 50V DC Semiconductors D1 LL4001 D2 BAS16 D3 LL4007 D4 BAS16 D5 5V1 300mW IC1 74HC125D IC2 MAX232 IC3 DS1307 IC4 DS1804Z IC5 MC68HC908GP32 IC6 LM7805 IC7 LM7808 Q1 BC818-40 Q2 BC849 Q3 BC849 Q4 MMUN2111LT1 Q5 BC849 Designer Reference Manual 294 REMOTE Unit Bill of Materials For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. REMOTE Unit Bill of Materials Freescale Semiconductor, Inc... Miscellaneous IR1 J1 J2 J3 J4 LCD1 LED1 LED3 LED4 B1-B15 BT1 SW2 SW3 XT1 XT2 XT3 SW2 SW3 XT1 XT2 XT3 GP1U28Q 9 way rt angle male `D' Connector 9 way rt angle male `D' Connector PCB skt 1.3mm PCB skt 2.1mm Sharp LM16A211 5mm Red Infra Red transmitter 5mm Green Tactile switches 3.0V Lithium SPCO Slide Switch SLSwitch 32kHz Xtal 32kHz Xtal 9.8304MHz Oscillator Module SPCO Slide Switch SPCO Slide Switch 32kHz Xtal 32kHz Xtal none Passive Infrared (PIR) Unit MOTOROLA REMOTE Unit Bill of Materials For More Information On This Product, Go to: www.freescale.com Designer Reference Manual 295 Freescale Semiconductor, Inc. REMOTE Unit Bill of Materials Freescale Semiconductor, Inc... Designer Reference Manual 296 REMOTE Unit Bill of Materials For More Information On This Product, Go to: www.freescale.com Passive Infrared (PIR) Unit MOTOROLA Freescale Semiconductor, Inc. blank Freescale Semiconductor, Inc... For More Information On This Product, Go to: www.freescale.com How to Reach Us: USA/EUROPE/LOCATIONS NOT LISTED: Motorola Literature Distribution P.O. Box 5405 Denver, Colorado 80217 1-303-675-2140 1-800-441-2447 TECHNICAL INFORMATION CENTER: 1-800-521-6274 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 HOME PAGE: http://www.motorola.com/semiconductors/ DRM001/D |
Price & Availability of DRM001 |
|
|
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] |