V51-memsic2125

Page 1

·´ÅͧáÅÐ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ©ºÑº P89V51RD2

l

251

º··Õè 15

㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà P89V51RD2 ¡Ñº MXD2125 âÁ´ÙÅÇÑ´¤ÇÒÁàà § âÁ´ÙÅ MXD2125 à» ¹âÁ´ÙÅÇÑ´¤ÇÒÁàà § (accellerometer sensor) ¼Å§Ò¹¢Í§ Memsic Inc. (www.memsic.com) ÀÒÂ㹺ÃèصÇÑ µÃǨ¨Ñº¤ÇÒÁàà §áºº 2 ᡹ ÊÒÁÒöÇÑ´ä´ ·§Ñé ¤ÇÒÁàà §ã¹àªÔ§ ¾ÅÈÒʵà (dynamic acceleration) ËÃ×ͤÇÒÁÊÑè¹ÊÐà·×͹ (vibration) áÅÐàªÔ§Ê¶ÔµÂÈÒʵà (static accelleration) «Ö§è ¡ç¤Í× ¤ÇÒÁàà §¨Ò¡áç⹠Á¶ ǧâÅ¡ (gravity)

15.1 ¤Ø³ÊÁºÑµ¢Ô ͧâÁ´ÙÅ MXD2125 l

ÇÑ´¤ÇÒÁàà §ã¹Â Ò¹ ±2g

l ¤ÇÒÁÅÐàÍÕ´ÊÙ§¡Ç Ò 1mg (g = 9.81m/s2) l â¤Ã§Êà ҧµÃǨ¨Ñº¤ÇÒÁàà §áºº 2 ᡹ (µÑ§é ©Ò¡¡Ñ¹) ´ ÇÂà·¤â¹âÅÂÕ CMOS l

µÔ´µÑ§é ǧ¨Ã»ÃÐÁÇżÅÊÑ­­Ò³ÁÒÀÒÂãµ µÇÑ ¶Ñ§à´ÕÂǡѹ

l

·¹¡ÒÃà»ÅÕÂè ¹á»Å§áººà©Õº¾Åѹ·Õ¤è ÇÒÁàà §¶Ö§ 50,000 g

l ÃѺáç´Ñ¹ä¿àÅÕÂ é §ä´ µ§Ñé áµ +3

¶Ö§ +5.25V

à¹×Íè §¨Ò¡µÑǶѧ¢Í§ MXD2125 à» ¹áºº SMD ·íÒãË ¡ÒùíÒä»ãª §Ò¹ÍÒ¨äÁ Êдǡ¹Ñ¡ ¨Ö§ä´ ¹íÒ MXD2125GL ÁÒµÔ´µÑ§é º¹á¼ ¹Ç§¨Ã¾ÔÁ¾ ¨Ò¡¹Ñ¹é µ Í¢ÒÍÍ¡ÁÒãË ÊÒÁÒöµÔ´µÑ§é º¹á¼§µ Íǧ¨Ã ËÃ×ÍàºÃ´ºÍà ´ä´ à¾×Íè ÍíÒ¹ÇÂǤÒÁÊдǡ㹡Ò÷´ÅͧáÅÐ㪠§Ò¹ ã¹ÃÙ»·Õè 15-1 áÊ´§Ãٻà ҧ¢Í§ âÁ´ÙÅáÅСÒèѴ¢Ò


252

l

·´ÅͧáÅÐ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ©ºÑº P89V51RD2

µÑǵÃǨ¨Ñº¤ÇÒÁàà § 2 ᡹

(¡) âÁ´ÙÅ MXD2125 ¾Ã ÍÁ㪠§Ò¹

Tout 1

6 +5V

Yout 2

5 Xout

GND 3

4 GND

(¢) ¡ÒèѴ¢Ò¢Í§âÁ´ÙÅ MXD2125

ÃÙ»·Õè 15-1 Ãٻà ҧáÅСÒèѴ¢Ò¢Í§ MXD2125 âÁ´ÙÅÇÑ´¤ÇÒÁàà §

15.2 ËÅÑ¡¡Ò÷íÒ§Ò¹ ÀÒÂã¹ MXD2125 ä´ ºÃèصÑǵÃǨ¨Ñº¤ÇÒÁàà §áºº 2 ᡹·Õè¼ÅÔµ´ ÇÂà·¤â¹âÅÂÕ CMOS µÑǵÃǨ¨Ñº¤ÇÒÁàà §¹Õãé ª ËÅÑ¡¡ÒùíÒ¾Ò¤ÇÒÁà ͹¨Ò¡¡ Ò«·Õºè ÃèØÍÂÙÀ ÒÂã¹µÑǵÃǨ¨Ñº¤ÇÒÁàà §áºº 2 ᡹ áÅÐÁÕµÇÑ ¡íÒà¹Ô´¤ÇÒÁà ͹·Õáè ¡¹¡ÅÒ§Êѧࡵ¨Ò¡ÃÙ»·Õè 15-2 ÀÒÂã¹µÑǵÃǨ¨Ñº¤ÇÒÁàà §áºº 2 ᡹ÁÕª´Ø à·Íà âÁ¤Ñ»à» Ŷ١¨Ñ´àÃÕ§·Ñ§é ËÁ´ 4 ªØ´ ã¹áµ ÅР᡹ (᡹ X áÅÐ Y) ¶Ù¡àª×Íè Áµ ÍࢠÒÊÙÇ §¨Ã»ÃÐÁÇżÅÊÑ­­Ò³à¾×Íè à»ÃÕºà·Õº¤ÇÒÁÊÁ´ØÅ㹡Òà ¡ÃШÒµÑǢͧ¤ÇÒÁà ͹ «Ö§è ¡ç¤Í× ¡ÒáÃШÒµÑǢͧ¡ Ò«ÀÒÂã¹µÑǵÃǨ¨Ñº â´ÂàÍÒµ ¾µØ ¨Ò¡¡ÒõÃǨ SCK

ǧ¨ÃÍÍÊ«ÔÅàÅàµÍà ÀÒÂã¹ ÊÑ­­Ò³¹ÒÌÔ¡Ò Ç§¨ÃµÃǨÊͺ ¡Ò÷íÒ§Ò¹ÀÒÂã¹ µ Íà¹×Íè §

ǧ¨Ã¤Çº¤ØÁ ¤ÇÒÁà ͹

ǧ¨Ã¡Ãͧ ¤ÇÒÁ¶Õµè Òèí ¼ Ò¹

µÑǵÃǨ¨ÑºÍسËÀÙÁÔ

Tout

ǧ¨Ãáç´Ñ¹Í Ò§ÍÔ§

Vref

ǧ¨Ãá»Å§ÊÑ­­Ò³ ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅ

Dout X

ǧ¨Ãá»Å§ÊÑ­­Ò³ ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅ

Dout Y

Ê Ç¹»ÃѺᵠ§ÍÍ¿à«çµáÅÐ ÍѵÃÒ¢ÂÒÂÊíÒËÃѺâç§Ò¹ ǧ¨Ã¡Ãͧ ¤ÇÒÁ¶Õµè Òèí ¼ Ò¹

µÑǵÃǨ¨Ñº ¤ÇÒÁàà §áºº 2 ᡹

Vdd

GND

Vda

ÃÙ»·Õè 15-2 áÊ´§ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹ÀÒÂã¹âÁ´ÙÅ MXD2125


·´ÅͧáÅÐ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ©ºÑº P89V51RD2

8

2

6

MEMSIC

7

4 Y+g

253

X+g

1

3

l

5

ÃÙ»·Õè 15-3 áÊ´§·ÔÈ·Ò§¤ÇÒÁàà §ã¹á¹Ç᡹ X áÅÐ Y ·ÕèµÑǵÃǨ¨Ñº¤ÇÒÁàà §ÇÑ´ä´ àÁ×èÍÁͧ¨Ò¡´ Ò¹º¹¢Í§ µÑǵÃǨ¨Ñº

¨Ñº¤ÇÒÁàà §ã¹áµ ÅÐ᡹¨Ð¶Ù¡Ê §ÍÍ¡·Ò§¢ÒÊÑ­­Ò³ Dout X ÊíÒËÃѺ᡹ X áÅÐ Dout Y ÊíÒËÃѺ ᡹ Y ã¹ÃٻẺÊÑ­­Ò³ PWM ·ÕÁè ¤Õ Ò ´ÔǵÕäé «à¡ÔÅé ᵡµ Ò§¡Ñ¹ä»µÒÁÊÑ´Ê Ç¹¢Í§»ÃÔÁÒ³¤ÇÒÁàà § ã¹áµ ÅÐ᡹ â´Â·ÔÈ·Ò§¤ÇÒÁàà §¨Ò¡¡ÒõÃǨ¨Ñº¢Í§á¡¹ X áÅÐ Y àÁ×Íè ÁͧµÑǵÃǨ¨Ñº ¨Ò¡´ Ò¹ º¹áÊ´§µÒÁÃÙ»·Õè 15-3 àÁ×Íè µÑǵÃǨ¨ÑºäÁ ä´ à¤Å×Íè ¹·Õáè ÅÐÍÂÙã ¹á¹ÇÃйҺ ÊÑ­­Ò³ PWM àÍÒµ ¾µØ ·Õäè ´ ã¹áµ ÅÐ᡹ ¨ÐÁÕ¤Ò ´ÔǵÕäé «à¡ÔÅà» ¹ 50% ¤ÒºàÇÅҢͧÊÑ­­Ò³à· ҡѺ 10 ËÃ×Í 2.5 ÁÔÅÅÔÇ¹Ô Ò·Õ¢¹Öé ÍÂÙ¡ ºÑ àºÍà ¢Í§ µÑǵÃǨ¨Ñº ÊíÒËÃѺ㹷չè ãÕé ª àºÍà MXD2125GL ¨Ö§ãË Ê­ Ñ ­Ò³·ÕÁè ¤Õ ÒºàÇÅÒ 10 ÁÔÅÅÔÇ¹Ò·Õ ÁÕÊ´Ñ Ê Ç¹ ¤ÇÒÁäǵ ͤ Ò´ÔǵÕäé «à¡ÔÅ·Õè 12.5%/g ¹Í¡¨Ò¡¡ÒùíÒâÁ´ÙÅ MXD2125 ä»ãª 㹡ÒÃÇÑ´¤ÇÒÁàà §ã¹á¹ÇÃдѺáÅ Ç ¹Ñ¡¾Ñ²¹ÒÂѧ¹ÔÂÁ ¹íÒä»»ÃÐÂØ¡µ 㪠ÊÒí ËÃѺ§Ò¹µÃǨ¨Ñº¤ÇÒÁÅÒ´àÍÕ§¢Í§ÍØ»¡Ã³ µÒ §æ ·Õµè ´Ô µÑ§é ࢠҡѺâÁ´ÙÅ MXD2125 à¾×Íè ¤Çº¤ØÁá¹Ç¡ÒÃà¤Å×Íè ¹·Õè ઠ¹ ¤Çº¤ØÁËع ¹µ äÁ ãË àÍÕ§µÑÇÁÒ¡à¡Ô¹ä» ËÃ×Íà¾×Íè à¾ÔÁè ¡íÒÅѧ¢Ñº¢Í§ ËØ ¹Â¹µ àÁ×èÍà´Ô¹·Ò§¼ Ò¹·ÕèÅÒ´ªÑ¹ ËÃ×ÍáÁ ¡ÃзÑ觤Ǻ¤ØÁ·ÔÈ·Ò§¡ÒéÒÂÀÒ¾¢Í§â»Ãà¨ç¡àµÍà 㹠µíÒá˹ §ÁØÁµ Ò§æ

15.3 ¡ÒûÃÐÂØ¡µ 㪠§Ò¹âÁ´ÙÅ MXD2125 µÃǨ¨Ñº¤ÇÒÁÅÒ´àÍÕ§ àÁ×Íè ᡹ã´æ ¢Í§µÑǵÃǨ¨Ñºà¡Ô´¡ÒÃàÍÕ§µÑÇ·íÒÁØÁ¡Ñºá¹Ç´Ô§è ¢Í§âÅ¡ ¨ÐÊ §¼ÅãË à¡Ô´¤ÇÒÁäÁ ÊÁ´ØŢͧ¡ÅØ Á͹ØÀÒ¤¡ Ò«·ÕèºÃèØÍÂÙ ÀÒÂã¹µÑǵÃǨ¨Ñº ·íÒãË ¡ÒùíÒ¾Ò¤ÇÒÁà ͹ÀÒÂã¹äÁ ÊÁ´ØÅ Ê §¼Åµ Í¡ÒÃà»ÅÕÂè ¹á»Å§¤ Ò´ÔǵÕäé «à¡ÔŢͧÊÑ­­Ò³ PWM ·Õ¢è ÒàÍÒµ ¾µØ ¢Í§áµ ÅÐ᡹·Õàè ¡Ô´¡ÒÃàÍÕ§ µÑÇ â´Â¤ Ò´ÔǵÕéä«à¡ÔÅ·Õèà»ÅÕè¹á»Å§ä»¨Ò¡ÊÀÒÇл¡µÔ¹Ñ鹨ÐÊÑÁ¾Ñ¹¸ ¡ÑºÁØÁ·ÕèàÍÕ§ä»ã¹áµ ÅÐ᡹


254

l

·´ÅͧáÅÐ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ©ºÑº P89V51RD2

15.3.1 ¡ÒäíҹdzÁØÁàÍÕ§¨Ò¡µÑǵÃǨ¨Ñº ÊíÒËÃѺâÁ´ÙÅÇÑ´¤ÇÒÁàà § MXD2125GL ¨ÐãË Ê­ Ñ ­Ò³¾ÑÅÊ ·àÕè ÍÒµ ¾µØ ÊíÒËÃѺ¢Ò X-out áÅÐ Y-out ·ÕÁè ´Õ ÇÔ µÕäé «à¡ÔÅ 50% ¤ÇÒÁ¶Õè 100Hz ËÃ×ÍÁÕ¤ÇÒÁ¡Ç Ò§¾ÑÅÊ 10 ÁÔÅÅÔÇ¹Ô Ò·Õ ã¹ÀÒÇзÕáè ¡¹¹Ñ¹é æ ÍÂÙ ã¹á¹ÇÃдѺ¾Í´Õ(äÁ àÍÕ§) áÅШÐãË ¤ Ò´ÔǵÕéä«à¡ÔÅà»ÅÕè¹á»Å§ä» 12.5% àÁ×èͤÇÒÁàà §à»ÅÕè¹ á»Å§ä»à· ҡѺ¤ Ò g ¾Í´Õ â´Â¢¹Ò´¢Í§ÁØÁàÍÕ§«Ö§è ¾Í¨Ðà·Õºà¤Õ§¡Ñº¤ÇÒÁàà §ã¹Ë¹ Ç g ·Õàè ÍÒµ ¾µØ X-out áÅÐ Y-out áÊ´§äÇ µÒÁµÒÃÒ§·Õè 15-1 ´Ñ§¹Ñ¹é ¤ÇÒÁàà §à¹×Íè §¨Ò¡á¡¹ã´á¡¹Ë¹Ö§è ã¹Ë¹ ǨíҹǹàµçÁ෠Ңͧ¤ Ò g â´ÂÊÁÁµÔãË à» ¹ a ¨ÐÊÑÁ¾Ñ¹¸ ¡Ñº¤ÇÒÁ¡Ç Ò§¢Í§ÊÑ­­Ò³¾ÑÅÊ ºÇ¡ã¹Ë¹ ÇÂÁÔÅÅÔÇÔ¹Ò·Õ «Ö觡íÒ˹´à» ¹ t «Öè§ÊÒÁÒö ÊÃػ໠¹ÊÁ¡Ò÷ҧ¤³ÔµÈÒÊµÃ ä´ ´Ñ§¹Õé t − 0.5 ....................................................................(ÊÁ¡Òà a = 10 0.125

ÁØÁàÍÕ§ (ͧÈÒ)

àÍÒµ ¾µØ ·Õ¢è Ò Xout ËÃ×Í Yout (g)

90

1.000

85

0.996

80

0.985

70

0.940

60

0.866

45

0.707

30

0.500

20

0.342

10

0.174

5

0.087

0

0.000

15.1)

µÒÃÒ§·Õè 15-1 áÊ´§¤ Ò g ·Õàè ÍÒµ ¾µØ Xout ËÃ×Í Yout ¢Í§âÁ´ÙÅ MXD2125 ·ÕÁè ÁØ àÍÕ§¤ Òµ Ò§æ


·´ÅͧáÅÐ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ©ºÑº P89V51RD2

l

255

¡ÒäíҹdzÁØÁàÍÕ§àÁ×Íè à·Õº¡Ñºá¡¹ X ËÃ×Í Y àÍÕ§·íÒÁØÁ α ¡Ñºá¹ÇÃдѺ ¨Ò¡ÃÙ»µÑÇÍ ҧ á¹Ç´Ô§è

ax = g sin α

:

α

á¹ÇÃдѺ

C

ÃйҺ¢Í§µÑǵÃǨ¨Ñº ·ÕÁè ÁØ Áͧ´ Ò¹¢ Ò§

¨Ò¡ÃÙ» àÁ×Íè ᡹ X ¢Í§µÑǵÃǨ¨Ñº·íÒÁØÁà§Â α ͧÈҡѺá¹ÇÃдѺ ÊÑ­­Ò³¾ÑÅÊ ·ÍÕè Ò ¹ä´ ¨Ò¡¢ÒÊÑ­­Ò³ X-out à¹×Íè §¨Ò¡¡ÒÃàÍÕ§µÑǨÐà·Õºà¤ÕÂ§ä´ ¡ºÑ »ÃÔÁÒ³¤ÇÒÁàà § ax ax = sin α g

â´Â

a x = g sin α

´Ñ§¹Ñé¹

¨Ðä´

a α = sin −1  x  g

  ........................................(ÊÁ¡ÒÃ 

15.2)

¤ Ңͧ ax ÊÒÁÒö¤íҹdz¨Ò¡ÊÁ¡Òà 15.1 â´Â¤ Ò·Õäè ´ ¨Ðà» ¹¨íҹǹàµçÁ෠Ңͧ¤ Ò g «Ö§è ¨Ð à» ¹¡ÒÃËÑ¡Å Ò§µÑÇÊ Ç¹ gã¹ÊÁ¡Òà 15.2 ä»ã¹µÑÇ ¡ÒäíҹdzËÒ¤ ÒÁØÁàÍÕ§¨ÐãË ¼ÅÅѾ¸ ä´ áÁ ¹ÂíÒ㹪 ǧ ±60 ͧÈÒ «Ö§è ¶×ÍÇ ÒÂѧ¾Í»ÃÐÁҳ໠¹ àªÔ§àÊ ¹ä´ àÁ×Íè µ ͧ¡ÒûÃÐÁÒ³ÁØÁàÍÕ§¨Ò¡ÊÁ¡Òà 15.2 ãË à» ¹ÊÁ¡ÒÃàªÔ§àÊ ¹à¾×Íè à˵ؼźҧ»ÃСÒà ઠ¹ »ÃÐËÂѴ˹ ǤÇÒÁ¨íÒ㹡ÒÃà¢Õ¹â»Ãá¡ÃÁ ËÃ×ͪ ÇÂ㹡ÒþѲ¹Ò´ ÇÂÀÒÉÒáÍÊà«ÁºÅÕ«§Öè ÂÒ¡µ Í ¡ÒÃà¢Õ¹â»Ãá¡ÃÁ Í arcsin (sin-1 ) µÒÁÊÁ¡Òà 15.2 ¨Ö§Å´ÃÙ»ä´ à» ¹ α = kax......................................................(ÊÁ¡Òà 15.3) ª ǧÁØÁ 㹡ÒÃÇÑ´

k(arc/g)

¤ÇÒÁ¼Ô´¾ÅÒ´

±10

57.50

±0.02%

±20

58.16

±0.16%

±30

59.04

±0.48%

±40

60.47

±1.13%

±50

62.35

±2.24%

µÒÃÒ§·Õè 15-2 áÊ´§¤ Ò¤ÇÒÁ¼Ô´¾ÅÒ´·Õàè ¡Ô´¢Ö¹é ¨Ò¡¡ÒõÃǨ¨Ñº¤ÇÒÁÅÒ´àÍÕ§¢Í§âÁ´ÙÅ MXD2125 àÁ×Íè »ÃÐÁÒ³¤ Ò´ ÇÂÊÁ¡Òà 15.3


256

l

·´ÅͧáÅÐ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ©ºÑº P89V51RD2

¡Ò÷´Åͧ·Õè 23 µÔ´µ ÍäÁâ¤Ã¤Í¹â·ÃÅàÅÍà P89V51RD2 ¡Ñº âÁ´ÙÅÇÑ´¤ÇÒÁàà § MXD2125 㹡Ò÷´Åͧ¹Õàé » ¹¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ¤Çº¤ØÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà P89V51RD2 à¾×Íè µÔ´µ Í ¡Ñº MXD2125 «Ö§è ÁÕ¤³ Ø ÊÁºÑµÇÔ ´Ñ ¤ÇÒÁàà §ä´ 2 ᡹¾Ã ÍÁ¡Ñ¹ â´Â㹡Ò÷´Åͧ¹Õ¨é йíÒä»ãª Ç´Ñ ¤ÇÒÁàÍÕ§¡Ñº ÃйҺ·´Êͺ·Õµè ´Ô µÑ§é ࢠҡѺâÁ´ÙÅ MXD2125 ¹Õé 23.1 µ Íǧ¨ÃµÒÁÃÙ»·Õè L23-1 +5V 31 C2 1/50V

RESET 9 R1 10k

RST

+5V

C1 0.1/50

40

5 6 4

16 P3.6 17 P3.7

IC1 P89V51RD2 P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0

C5 0.1/ 50V

R2 10k x8

32

+5V

2 R/W

DSP1 LCD 16x2

E RS D7 D6 D5 D4 D3 D2 D1 D0 14 13 12 11 10 9 8 7

3

VR1 10k

1

33 34 35 36 37 38 39

+5V

1 P1.0 2 P1.1

20

R3 4k7

R4 4k7

6 5 Xout 2 Yout MOD1 3 MXD2125 4

18 C3 33pF

19 C4 33pF

XTAL1 11.0592MHz

ÃÙ»·Õè L23-1 ǧ¨Ã·´ÅͧµÔ´µ ÍäÁâ¤Ã¤Í¹â·ÃÅàÅÍà P89V51RD2 ¡Ñº MXD2125 âÁ´ÙÅÇÑ´¤ÇÒÁàà §


·´ÅͧáÅÐ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ©ºÑº P89V51RD2

l

257

/*——————————————————————————————————————————————————————————————————————————*/ // Program : Tilt sensing example by MXD2125 // Description : Display Tilt value sensing by MXD2125 // Filename : l2301.c // C compiler : RIDE 51 V6.4.35 /*——————————————————————————————————————————————————————————————————————————*/ #include <REGLV51RD2.h> // Header file register for P89V51RD2BN #include <lcdV51.h> // Library for LCD display #include <math.h> // Library for LCD display enum{X,Y}; // Enum axis X and Y sbit x_axis = P1^0; // Configuration DATA pin sbit y_axis = P1^1; // Configuration SCK pin /************************* Function Read angle ****************************/ float gforce(char axis) { unsigned int mc,i; // Variable for internal function float t1,a; x_axis = 1; // Initial logic low y_axis = 1; // Initial logic low TMOD &=0x0F; // Configuration Timer1 mode 2 (16-bit counter) TMOD |=0x10; TH1 = 0x00; // Initial Timer1 counter value to zero TL1 = 0x00; TF1 = 0; // Clear overflow flag TR1 = 0; // Start Timer1 for(i=0;i<2;i++) // Loop 2 times to average data { if(axis==X) while(!x_axis); // Detect rising pulse else while(!y_axis); // Detect rising pulse TR1 = 1; // Start timer count if(axis==X) while(x_axis); // Detect falling pulse else while(y_axis); // Detect rising pulse TR1 = 0; // TF1 = 0; // mc = TH1; // mc <<= 8; // mc += TL1; // TH1 = 0x00; // TL1 = 0x00; t1 = (float)mc*0.0005425; a = ((t1/10.0)-0.5)/0.125; } return(a);

Stop timer Clear overflow flag Keep high byte Shift to high byte Keep low byte Initial Timer1 counter value to zero // Calculate high pulse // Calculate G force // Return G force

} /********************************* Main Program ******************************/ void main() { float ax, // Variable for storing G force of X axis old_ax, // Variable for storing previous G force value of X axis

â»Ãá¡ÃÁ·Õè P23-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´ÅͧµÔ´µ ÍäÁâ¤Ã¤Í¹â·ÃÅàÅÍà P89V51RD2 ¡Ñº MXD2125 âÁ´ÙÅÇÑ´¤ÇÒÁàà § (ÁÕµÍ )


258

l

·´ÅͧáÅÐ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ©ºÑº P89V51RD2

x_angle, ay, old_ay, y_angle;

// Variable for storing G force of Y axis // Variable for storing previous G force value of Y axis

lcd_init(); lcd_puts(0x80,”Deg(x):”); lcd_puts(0xC0,”Deg(y):”); while(1) { ax = gforce(X); ay = gforce(Y);

// // // //

Initial LCD module Show X-axis G force Show Y-axis G force Infinite loop

// Read X-axis G force // Read Y-axis G force

if(ax==0.0) // Protect G force value to non-zero ax = 0.0001; if(ay==0.0) ay = 0.0001; x_angle = (360.0*asin(ax))/6.283; // Convert G force to angle of X-axis y_angle = (360.0*asin(ay))/6.283; // Convert G force to angle of Y-axis if(old_ax != ax) // Compare previous and new G force equal? { lcd_puts(0x89,” “); // Clear previous G force display inttolcd(0x89,(int)x_angle); // Display new G force value } if(old_ay != ay) // Compare previous and new G force equal? { lcd_puts(0xC9,” “); // Clear previous G force display inttolcd(0xC9,(int)y_angle); // Display new G force value } old_ax = ax; // Keep G force value for next comparison old_ay = ay; // Keep G force value for next comparison } }

¤íÒ͸ԺÒÂâ»Ãá¡ÃÁ ¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ¹Õéà» ¹¡ÒÃáÊ´§¼ÅÁØÁàÍÕ§¨Ò¡á¹ÇÃдѺ·Õèä´ ¨Ò¡¡ÒõÃǨÇÑ´¢Í§âÁ´ÙÅ MXD2125 ·Ñ§é Êͧ᡹¤×Í X áÅÐ Y ·Õâè Á´ÙÅ LCD Í ҧµ Íà¹×Íè § à¹×Íè §¨Ò¡¡Òäíҹdz¼ÅÅѾ¸ ¢Í§¢ ÍÁÙŷѧé Êͧ¹Ñ鹨ÐãË ¼ÅÅѾ¸ à» ¹àÅ¢·È¹ÔÂÁ ´Ñ§¹Ñ鹡 ͹¡ÒÃáÊ´§¼Å·ÕèâÁ´ÙÅ LCD à¾×èÍÅ´à¹×éÍ·Õè¢Í§Ë¹ ǤÇÒÁ¨íÒ â»Ãá¡ÃÁÊíÒËÃѺ¡ÒÃáÊ´§¼ÅẺàÅ¢·È¹ÔÂÁ¨Ö§á»Å§ª¹Ô´¢ ÍÁÙŢͧÁØÁ·Õè¤íÒ¹Ç³ä´ ã¹Ë¹ ÇÂͧÈÒãË à» ¹ ¨íҹǹàµçÁ int àÊÕ¡ ͹ ËÅѧ¨Ò¡¹Ñ¹é ¨Ðà»ÃÕºà·Õº¢ ÍÁÙÅà´ÔÁáÅÐãËÁ ·ÍÕè Ò ¹ä´ ¶ ÒÁÕ¡ÒÃà»ÅÕÂè ¹á»Å§¨Ö§¨Ð¹íÒ ¤ ÒãËÁ ä»áÊ´§¼Å ã¹Ê ǹ¢Í§¡ÒäíҹdzËÒ¤ Ò¤ÇÒÁàà §ã¹Ë¹ ǨíҹǹàµçÁ෠Ңͧ g ã¹áµ ÅÐ᡹¹Ñ¹é ÊÒÁÒö¤íҹdz ä´ ¨Ò¡¿ §¡ ª¹Ñè gforce ÀÒÂã¹â»Ãá¡ÃÁ«Ö§è ¡ç¤Í× ÊÁ¡Òà 15.1 áÅÐ 15.2 ¹Ñ¹è àͧ ´Ñ§¹Ñ¹é àÁ×Íè µ ͧ¡Òäíҹdz ÁØÁ ¡çµÍ §¹íÒ¤ Ò¤ÇÒÁàà §´Ñ§¡Å ÒÇä»á·¹ã¹ÊÁ¡Òà 15.2 ¹Ñ¹è ¤×Í

â»Ãá¡ÃÁ·Õè P23-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´ÅͧµÔ´µ ÍäÁâ¤Ã¤Í¹â·ÃÅàÅÍà P89V51RD2 ¡Ñº MXD2125 âÁ´ÙÅÇÑ´¤ÇÒÁàà § (ÁÕµÍ )


·´ÅͧáÅÐ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ©ºÑº P89V51RD2

a  αx = sin−1  x  g

;ÊíÒËÃѺ᡹ X

a  αY = sin−1  Y  g

;ÊíÒËÃѺ᡹ Y

l

259

â´Â¨ÐÊÑ§à¡µÇ Ò㹡ÒäíҹdzËÒÁØÁ¹Ñ¹é ¨ÐÁÕ¿§ ¡ ª¹Ñè arcsin ࢠÒÁÒà¡ÕÂè Ç¢ ͧ «Ö§è ¿ §¡ ª¹Ñè ¹Õ¶é ¡Ù ºÃèØäÇ ÀÒÂã¹äźÃÒÃÕ math.h ´Ñ§¹Ñ¹é µÍ¹µ ¹¢Í§â»Ãá¡ÃÁ¹Õ¨é §Ö µ ͧ¼¹Ç¡äźÃÒÃÕ¹äÕé Ç ´Ç Â Ê Ç¹¡Òä׹¤ Ңͧ¿ §¡ ª¹Ñè arcsin ¹Ñ¹ é ¨Ð¤íҹdzáÅСÒä׹¤ ÒÁØÁÍÍ¡ÁÒã¹Ë¹ ÇÂàÃà´Õ¹ áµ ã¹·Õ¹è µÕé Í §¡Òä ÒÁØÁà» ¹Í§ÈÒ ¨Ö§µ ͧá»Å§ ˹ Ç¢ͧÁØÁ¨Ò¡Ë¹ ÇÂàÃà´Õ¹ãË à» ¹Í§ÈÒ´ Ç¡Òäٳ 360 ࢠÒä»·Õ¼è ÅÅѾ¸ áÅ ÇËÒô Ç 6.283 (¤ Ңͧ 2π àÃà´Õ¹¤×Í 2x3.14159 = 6.283) l ¿ §¡ ª¹ Ñè gforce

㪠¤Òí ¹Ç³¤ÇÒÁ¡Ç Ò§¾ÑÅÊ ºÇ¡ â´ÂÍÒÈÑÂä·àÁÍà 1 à» ¹µÑǨѺàÇÅÒ·Õäè ´ ¨Ò¡¢ÒÊÑ­­Ò³ X-out áÅÐ Y-out ¢Í§âÁ´ÙÅ MXD2125 â´Â¨íҹǹáÁªÕ¹ä«à¡ÔÅ·Õ¹è ºÑ ä´ ¨Ò¡ä·àÁÍà ¨Ð¶Ù¡á»Å§à» ¹àÇÅÒã¹Ë¹ Ç ÁÔÅÅÔÇ¹Ô Ò·Õ áÅ Çà¡çºäÇ ·µÕè ÇÑ á»Ã t1 à¾×Íè ¹íÒ令íҹdz¤ Ò¤ÇÒÁàà §ã¹Ë¹ ǨíҹǹàµçÁ෠Ңͧ g ¨Ò¡ÊÁ¡Òà 15.1 ÊíÒËÃѺ¿ §¡ ª¹Ñè ¹ÕÁé ¾Õ ÒÃÒÁÔàµÍà axis ÊíÒËÃѺ¡íÒ˹´á¡¹¤ÇÒÁàà §·Õµè Í §¡ÒÃÍ Ò¹ â´Â¾ÒÃÒÁÔàµÍà ¶¡Ù ¹ÔÂÒÁ äÇ ã¹µÍ¹µ ¹¢Í§â»Ãá¡ÃÁã¹ÃٻẺ Enumerate (¤Å Ò¡Ѻ¡ÒùÔÂÒÁ´ ÇÂÁÒâ¤Ã) ´Ñ§¹Õé enum{X,Y};

¼Ù¾ ² Ñ ¹ÒÍÒ¨à»ÅÕÂè ¹ä»ãª ä·àÁÍà 0 ËÃ×Í 2 à» ¹µÑǹѺàÇÅÒá·¹ä·àÁÍà 1 â´Âà»ÅÕÂè ¹à¾Õ§ÃÕ¨ÊÔ àµÍà µÇÑ ¹Ñº ¢Í§ä·àÁÍà ෠ҹÑé¹ ÊíÒËÃѺÃÒÂÅÐàÍÕ´¢Í§âÁ´ÙÅ MXD2125 ÂѧÁÕÊ Ç¹à¾ÔèÁàµÔÁ·Õè¹Í¡à˹×ͨҡµÑÇÍ ҧ¡Òà ·´Åͧ¹Õ¼é ¾Ù ² Ñ ¹ÒÊÒÁÒöÈÖ¡ÉÒ¢ ÍÁÙÅà¾ÔÁè àµÔÁä´ ¨Ò¡ datasheet ¢Í§¼Ù¼ ÅÔµ l

â»Ãá¡ÃÁ·Õè P23-1 â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´ÅͧµÔ´µ ÍäÁâ¤Ã¤Í¹â·ÃÅàÅÍà P89V51RD2 ¡Ñº MXD2125 âÁ´ÙÅÇÑ´¤ÇÒÁàà § (¨º) 23.2 à¢Õ¹â»Ãá¡ÃÁ·Õè P23-1 áÅ Ç·íÒ¡ÒÃá»Å§ãË à» ¹ä¿Å .hex ´ Ç RC51 ¼ Ò¹¡Ãкǹ¡ÒÃÊà ҧä¿Å â»Ãà¨ç¡µ ¢Í§ Rkit-51 â´Â㪠RIDE ä´ ä¿Å l2301.hex ´Òǹ âËŴŧã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà P89V51RD2 â´Âµ ͧź ¢ ÍÁÙÅ¡ ͹â»Ãá¡ÃÁŧä»ãËÁ 23.3 ¨ ÒÂä¿ãË á¡ Ç§¨Ã ·´ÊͺàÍÕ§ÃйҺ·Õµè ´Ô µÑ§é âÁ´ÙÅ MXD2125 ·íÒä´ §Ò Âæ â´Â¡ÒÃàÍÕ§ºÍà ´·´Åͧ·Õµè ´Ô µÑ§é âÁ´ÙÅ MXD2125 à¾×Íè Êѧࡵ¼Å¡ÒÃà»ÅÕÂè ¹á»Å§¤ ÒÁØÁã¹áµ ÅÐ᡹·Õáè Ê´§¼Å¼ Ò¹âÁ´ÙÅ LCD ÃٻẺ¡ÒÃáÊ´§¼Å¢Í§Ç§¨Ã·Õâè Á´ÙÅ LCD à» ¹´Ñ§¹Õé

Deg(x):

xxx

Deg(y):

xxx

â´Â·Õè xxx ¤×ͤ ÒÁØÁã¹Ë¹ ÇÂͧÈÒ·ÕÇè ´Ñ ä´


260

l

·´ÅͧáÅÐ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà MCS-51 ´ ÇÂâ»Ãá¡ÃÁÀÒÉÒ C ©ºÑº P89V51RD2


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.