Part Number Hot Search : 
76X03 DTC144T D8872CY 04B231D PW084XS2 MC10E 74AC174 15T1G
Product Description
Full Text Search
 

To Download DRM001 Datasheet File

  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 #include "extern.h" #include "serial.h" #include "flashprg.h" #include "analyse.h" #include "datasort.h" //////////////////////////////////////////////////////////////////////////////// // Incoming ir data is stored in 'ir_buffer'. This data needs to be integrity // // checked. The data format is: // // // // 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. // ////////////////////////////////////////////////////////////////////////////////
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 #include "extern.h" #include "serial.h" #include "interrup.h"
//////////////////////////////////////////////////////////////////////////////// // 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<= 8 ) { ir_bit_count = 0; // reset for next count of 8 if ( !ir_byte_count ) { // == 0, first byte...block length byte
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 button has been pressed, decide functionality wrt current mode // //////////////////////////////////////////////////////////////////////////////// void Enter( void ) { unsigned char temp;
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 button has been pressed, decide functionality wrt current mode // ////////////////////////////////////////////////////////////////////////////// void Esc( void ) { if ( mode != MODE_TIME_OF_DAY ) // avoid replacing same screen { WriteText2(LINE1_2, "", PRECLEAR); // clear whole screen prior to TOD } mode = MODE_TIME_OF_DAY; } // Esc() //------------------------------------------------------------------------------
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 button has been pressed, decide functionality wrt current mode // ////////////////////////////////////////////////////////////////////////////// void Increment( void ) { switch ( mode ) { case MODE_EDIT_A2D_TRIGGER : ////////////////////////////////////////////////////////////////////////// // if performing a nearest neighbour magnitude test on a buffer of size // // 'n' elements, there are 'n-1' comparisons to be performed. // ////////////////////////////////////////////////////////////////////////// if ( adjust_value._8bit.lobyte < (pir_buffer_size-1) ) { WriteText2(LINE2, "", PRECLEAR); IntegerToASCII( ++adjust_value._8bit.lobyte, &text_buffer[7] ); WriteText1(LINE2); } button_flags.bit.AUTO_SCROLL = 1; break; case MODE_EDIT_A2D_DIFFERENCE : case MODE_EDIT_A2D_LOOPTIME : if ( adjust_value._8bit.lobyte < 255 ) { WriteText2(LINE2, "", PRECLEAR); IntegerToASCII( ++adjust_value._8bit.lobyte, &text_buffer[7] WriteText1(LINE2); } button_flags.bit.AUTO_SCROLL = 1; break; case MODE_EDIT_DELTA_SIG_RESOLUTION : if ( adjust_value._8bit.lobyte < 15 ) { WriteText2( LINE2, "", PRECLEAR); IntegerToASCII( ++adjust_value._8bit.lobyte, &text_buffer[7] WriteText1(LINE2); } button_flags.bit.AUTO_SCROLL = 1; break; case MODE_EDIT_DELTA_SIG_EVENT : WriteText2( LINE2, "", PRECLEAR); Assign_DS_Pointer(); // load min/max/step clamps if ( adjust_value._16bit >= ds_adjust_ptr->max ) { adjust_value._16bit = ds_adjust_ptr->max; } else { adjust_value._16bit += ds_adjust_ptr->step; }
);
);
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 button has been pressed, decide functionality wrt current mode // ////////////////////////////////////////////////////////////////////////////// void Decrement( void ) { switch ( mode ) { case MODE_EDIT_A2D_TRIGGER : case MODE_EDIT_A2D_DIFFERENCE : case MODE_EDIT_A2D_LOOPTIME : if ( adjust_value._8bit.lobyte > 1 ) { WriteText2( LINE2, "", PRECLEAR); IntegerToASCII( --adjust_value._8bit.lobyte, &text_buffer[7] ); WriteText1(LINE2); } button_flags.bit.AUTO_SCROLL = 1; break; case MODE_EDIT_DELTA_SIG_RESOLUTION : if ( adjust_value._8bit.lobyte > 10 ) // min resolution is 10 bit { WriteText2( LINE2, "", PRECLEAR); IntegerToASCII( --adjust_value._8bit.lobyte, &text_buffer[7] ); WriteText1(LINE2); } button_flags.bit.AUTO_SCROLL = 1; break; case MODE_EDIT_DELTA_SIG_EVENT : WriteText2( LINE2, "", PRECLEAR); Assign_DS_Pointer(); // load min/max/step clamps if ( adjust_value._16bit > ds_adjust_ptr->max ) { adjust_value._16bit = ds_adjust_ptr->max; } else if ( adjust_value._16bit > ds_adjust_ptr->min ) { adjust_value._16bit -= ds_adjust_ptr->step;
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 functions // ///////////////////////////////////////////////////////////////// @near const char days_of_week[9][4] = { {"---\0"}, {"Mon\0"}, {"Tue\0"}, {"Wed\0"}, {"Thu\0"}, {"Fri\0"}, {"Sat\0"}, {"Sun\0"}, {"XXX\0"} }; @near const char months_of_year[14][4] = { {"---\0"}, {"Jan\0"}, {"Feb\0"}, {"Mar\0"}, {"Apr\0"}, {"May\0"}, {"Jun\0"}, {"Jul\0"}, {"Aug\0"}, {"Sep\0"}, {"Oct\0"}, {"Nov\0"}, {"Dec\0"}, {"XXX\0"} }; //------------------------------------------------------------------------------
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 #include "extern.h" #include "ir_comms.h" #include "lcd.h" #include "convert.h" #include "mode.h" #include "rtc.h" #include "rs_comms.h" #include "delay.h" #include "datasort.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 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 #include "extern.h" #include "lcd.h" #include "convert.h" #include "delay.h" #include "error.h"
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 #include "extern.h" #include "ir_comms.h" #include "interrup.h"
@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<= 8 ) { ir_bit_count = 0; if ( !ir_byte_count ) // == 0, first byte...block length byte { ////////////////////////////////////////////// // 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 has arrived, abort. // ////////////////////////////////////// ir_mode = IR_IDLE; T1SC0.bit.ELS0A = 1; // +ve edge... T1SC0.bit.ELS0B = 0; // ...next return; } }
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 #include "extern.h" #include "delay.h" #include "lcd.h"
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 #include "extern.h" #include "lcd.h" #include "i2c.h" #include "convert.h" #include "mode.h" #include "delay.h" #include "rtc.h"
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


▲Up To Search▲   

 
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]


 . . . . .
  We use cookies to deliver the best possible web experience and assist with our advertising efforts. By continuing to use this site, you consent to the use of cookies. For more information on cookies, please take a look at our Privacy Policy. X