àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 1
àÃÕ¹ÃÙ áÅÐÊà ҧËØ ¹Â¹µ Íѵâ¹ÁÑµÔ ¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC
¡ÄÉ´Ò ã¨àÂç¹ ªÑÂÇѲ¹ ÅÔÁé ¾Ã¨ÔµÃÇÔäÅ (C) Innovative Experiment Co.,Ltd.
2 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC (©ºÑº»ÃѺ»Ãا¤ÃÑ§é ·Õè 3) ¡ÄÉ´Ò ã¨àÂç¹ ªÑÂÇѲ¹ ÅÔÁé ¾Ã¨ÔµÃÇÔäŠʧǹÅÔ¢ÊÔ·¸Ôµì ÒÁ ¾.Ã.º. ÅÔ¢ÊÔ·¸Ôì ¾.È. 2521 Ë ÒÁ¡ÒÃÅÍ¡àÅÕ¹äÁ ÇÒ Ê Ç¹Ë¹Ö§è Ê Ç¹ã´¢Í§Ë¹Ñ§Ê×ÍàÅ Á¹Õé ¹Í¡¨Ò¡¨Ðä´ ÃºÑ Í¹ØÒµ ã¤Ã¤ÇÃ㪠˹ѧÊ×ÍàÅ Á¹Õé 1.¹Ñ¡àÃÕ¹ ¹ÔÊÔµ ¹Ñ¡ÈÖ¡ÉÒ áÅкؤ¤Å·ÑèÇä»·ÕèÁÕ¤ÇÒÁʹã¨ã¹¡ÒÃÊà ҧËØ ¹Â¹µ Íѵâ¹ÁѵԢ¹Ò´àÅç¡´ ÇÂäÁâ¤Ã ¤Í¹â·ÃÅàÅÍà PIC 2. ʶҺѹ¡ÒÃÈÖ¡ÉÒ âçàÃÕ¹ ÇÔ·ÂÒÅÑ ÁËÒÇÔ·ÂÒÅÑ ·ÕÁè ¡Õ ÒÃà» ´¡ÒÃàÃÕ¹¡ÒÃÊ͹ÇÔªÒÍÔàÅç¡·ÃÍ¹Ô¡Ê ËÃ×ÍÀÒ¤ ÇÔªÒÇÔÈÇ¡ÃÃÁÍÔàÅç¡·ÃÍ¹Ô¡Ê áÅФÍÁ¾ÔÇàµÍà 3. ¤³Ò¨Òà·ÁÕè ¤Õ ÇÒÁµ ͧ¡ÒÃÈÖ¡ÉÒ áÅÐàµÃÕÂÁ¡ÒÃàÃÕ¹¡ÒÃÊ͹ÇÔªÒäÁâ¤Ãâ»Ãà«Êà«Íà - äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ã¹ÃдѺ¡ÅÒ§·Õµè Í §¡ÒÃ㪠§Ò¹â»Ãá¡ÃÁ¤ÍÁ¾ÔÇàµÍà ÀÒÉÒÊÙ§ 4. ˹ ǧҹàÍ¡ª¹·ÕÁè ¡Õ ÒþѲ¹Ò¼ÅÔµÀѳ± ´Ò ¹ÍÔàÅç¡·ÃÍ¹Ô¡Ê áÅФÍÁ¾ÔÇàµÍà ´íÒà¹Ô¹¡ÒèѴ¾ÔÁ¾ áÅШíÒ˹ ÒÂâ´Â ºÃÔÉ·Ñ ÍÔ¹â¹àǵտ àÍç¡à¾ÍÃÔàÁ¹µ ¨íÒ¡Ñ´ 3133/53 «.ÊØ¢ÁØ ÇÔ· 101/2 ¶.ÊØ¢ÁØ ÇÔ· á¢Ç§ºÒ§¹Ò ࢵºÒ§¹Ò ¡ÃØ§à·¾Ï 10260 â·ÃÈѾ· 0-2747-7001-4 â·ÃÊÒà 0-2747-7005 ÃÒÂÅÐàÍÕ´·Õ»è ÃÒ¡¯ã¹Ë¹Ñ§Ê×ÍàÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC (©ºÑº»ÃѺ»Ãا¤ÃÑ§é ·Õè 3) ä´ ¼Ò ¹¡ÒõÃǨ·Ò¹Í ҧÅÐàÍÕ´ à¾×Íè ãË Á¤Õ ÇÒÁÊÁºÙó áÅж١µ ͧÁÒ¡·ÕÊè ´Ø ÀÒÂãµ à§×Íè ¹ä¢áÅÐàÇÅÒ·Õ¾è §Ö ÁÕ ¡ ͹¡ÒèѴ¾ÔÁ¾ à¼Âá¾Ã ¤ÇÒÁàÊÕÂËÒÂÍѹÍÒ¨à¡Ô´¨Ò¡¡ÒùíÒ¢ ÍÁÙÅã¹Ë¹Ñ§Ê×ÍàÅ Á¹Õäé »ãª ºÃÔÉ·Ñ ÍÔ¹â¹àǵտ àÍç¡ à¾ÍÃÔàÁ¹µ ¨íÒ¡Ñ´ ÁÔä´ ÁÀÕ ÒÃÐ㹡ÒÃÃѺ¼Ô´ªÍºáµ »ÃСÒÃã´ ¤ÇÒÁ¼Ô´¾ÅÒ´¤ÅÒ´à¤Å×Íè ¹·ÕÍè Ò¨ÁÕáÅÐä´ ÃºÑ ¡Òà ¨Ñ´¾ÔÁ¾ à¼Âá¾Ã ÍÍ¡ä»¹Ñ¹é ·Ò§ºÃÔÉ·Ñ Ï ¨Ð¾ÂÒÂÒÁªÕáé ¨§áÅÐá¡ ä¢ã¹¡ÒèѴ¾ÔÁ¾ ¤ÃÑ§é µ Íä»
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 3
¤íÒ¹íÒ Íա˹֧è á¹Ç·Ò§¢Í§¡ÒÃàÃÕ¹ÃÙá ÅÐ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¤Í× ¡Ò÷´ÅͧÊà ҧáÅÐà¢Õ¹ â»Ãá¡ÃÁà¾×Íè ¤Çº¤ØÁËع ¹µ 굄 â¹Áѵ¢Ô ¹Ò´àÅç¡ ¹Ñºà» ¹¡ÒÃà»ÅÕè¹á»Å§ÍÕ¡¤ÃÑé§ÊíÒËÃѺ¡ÒþѲ¹ÒÊ×èÍ¡ÒÃàÃÕ¹ÃÙ ÃкºÊÁͧ¡Å½ §µÑÇËÃ×Í Embedded System ·ÕÊè ÒÁÒöࢠҶ֧¡ÅØÁ àÂÒǪ¹áÅмÙÊ ¹ã¨ã¹Ç§¡Ç 񤊫 §Ò Â¢Ö¹é ¼ Ò¹ÊÔ§è »ÃдÔÉ° ·ãÕè Ë ·§Ñé ¤ÇÒÁʹءʹҹáÅÐ ¤ÇÒÁÃÙ ÃÇÁ¶Ö§¡ÒÃÊ §àÊÃÔÁ¾Ñ²¹Ò¡Òô Ò¹¡Ãкǹ¡ÒäԴáÅСÒþѲ¹ÒÍÒÃÁ³ ¹Õ¤è Í× àʹ Ë¢ ͧÊ×Íè ¡ÒÃàÃÕ¹ÃÙ· Õè àÃÕÂ¡Ç Ò Ëع ¹µ (Robotic kit) Robo-PICA à» ¹ªØ´àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¢Ô ¹Ò´àÅç¡·Õ¤è Ǻ¤ØÁ´ ÇÂäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ·ÕÁè ¨Õ ´Ø Áا ËÁÒÂà¾×Íè ¹íÒàʹÍá¹Ç·Ò§ã¹¡ÒùíÒäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ÁÒÊà ҧ໠¹Ëع ¹µ 굄 â¹Áѵ·Ô ÁÕè ¤Õ ÇÒÁ ÊÒÁÒöÊÙ§ à¾×è͹íÒÁÒ㪠㹡ÒÃàÃÕ¹¡ÒÃÊ͹Ãкº¤Çº¤ØÁÍѵâ¹ÁѵÔÍ ҧ§ Ò â´Â㹪ش¨ÐÁÕἧǧ¨Ã¤Çº¤ØÁ, ªØ´â»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·µÕè Í ¡Ñº¾Íà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍà ·íÒãË ÊÒÁÒö㪠§Ò¹¡Ñº¤ÍÁ¾ÔÇàµÍÃ ä´ ã¹·Ø¡ÃдѺ·Ñ§é à¤Ã×Íè §µÑ§é âµ ÐáÅÐâ¹ µºØ¡ , ÁÕἧǧ¨ÃµÃǨ¨Ñº·Õ¨è Òí à» ¹µ ͧ㪠㹡ÒÃàÃÕ¹ÃÙ äÁ ÇÒ ¨Ðà» ¹á¼§Ç§¨ÃµÑÇ µ Ò¹·Ò¹»ÃѺ¤ Òä´ «Ö觹íÒÁÒ㪠㹡ÒÃàÃÕ¹ÃÙ áÅз´Êͺ¡ÒõԴ¡ÑºµÑǵÃǨ¨ÑºáººÍйÒÅÍ¡Í ҧ§ Ò·ÕèÊØ´ ἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô«Ö觹íÒÁÒ㪠㹡ÒõÃǨ¨ÑºàÊ ¹áÅо×é¹¼ÔÇ âÁ´ÙÅÇÑ´ÃÐÂзҧẺ ÍÔ¹¿ÃÒàôà¾×Íè ·´ÅͧÊà ҧËع ¹µ ·ÊÕè ÒÁÒöËźËÅÕ¡ÊÔ§è ¡Õ´¢Ç񤊫 â´ÂäÁ µÍ §ÊÑÁ¼ÑÊ áÅзÕàè » ¹¾ÔàÈɤ×Í ¡Ò÷íÒ §Ò¹¢Í§ËØ ¹Â¹µ à ÇÁ¡ÑºµÑǤǺ¤ØÁÃÐÂÐä¡ÅËÃ×ÍÃÕâÁµ¤Í¹â·ÃÅ â´Â㪠¡ÒÃÊ×èÍÊÒâ ÍÁÙÅ͹ءÃÁ (Serail data communication) «Ö§è 㹪ش¨ÐÁÕÃâÕ Áµ¤Í¹â·ÃÅÍÔ¹¿ÃÒàô áÅÐâÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô¨Ñ´ÁÒãË ´Ç  à¾×Íè ãË ¡Òà àÃÕ¹ÃÙÊ ÒÁÒö¡ÃзíÒä´ Í ҧµ Íà¹×Íè §áÅÐÊÁºÙó ẺÁÒ¡·ÕÊè ´Ø à· Ò·Õ¨è Ðà» ¹ä»ä´ Robo-PICA ¹ Ò¨Ðà» ¹¤íҵͺ˹֧è ÊíÒËÃѺ¡ÒèѴËÒÊ×Íè ¡ÒÃàÃÕ¹ÃÙá ÅÐ㪠§Ò¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ¼ Ò¹ ªØ´»ÃСͺËع ¹µ 굄 â¹ÁÑµÔ à¹×Íè §¨Ò¡ã¹ªØ´ä´ ¨´Ñ àµÃÕÂÁÍØ»¡Ã³ áÅÐÊ×Íè ʹѺʹعµ Ò§æ äÇ Í ҧ¤Ãº¶ ǹ äÁ ÇÒ ¨Ðà» ¹ ªØ´«Í¿µ áÇà áÅеÑÇÍ ҧâ»Ãá¡ÃÁ·Õºè ÃèØÍÂÙã ¹«Õ´ÃÕ ÍÁ ˹ѧÊ×ͤÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã ¤Í¹â·ÃÅàÅÍà PIC ˹ѧÊ×͵ÑÇÍ ҧ¡ÒÃÊà ҧËع ¹µ áÅÐʹÒÁÊíÒËÃѺ·´Êͺ¡ÒÃà¤Å×Íè ¹·Õàè º×Íé §µ ¹ ÂѧÁÕÍ¡Õ ÊÔ§è Ë¹Ö§è ·Õ¼è àÙ ÃÕ¹¨Ðä´ ¤Í× ¡ÒþѲ¹ÒàªÔ§ÍÒÃÁ³ à¹×Íè §¨Ò¡ã¹ÃÐËÇ Ò§¡ÒÃàÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ ¼Ùà ÃÕ¹¨Ð¾º¡Ñºº··´Êͺ·Õ·è §Ñé ¤Ò´ËÁÒÂä´ áÅÐà˵ءÒó ·äÕè Á ÍҨŠǧÃÙ Ê §¼ÅãË ä´ ãª »¯ÔÀÒ³ äËǾÃÔº áÅÐ »ÃÐʺ¡Òó ¼¹Ç¡¡Ñº¤ÇÒÁáÁ ¹ÂíÒã¹à¹×Íé ËÒ·ÄÉ®Õ à¢ ÒÁÒà ÇÁ¡Ñ¹à¾×Íè ᡠ䢻 ËÒ «Ö§è ÊÔ§è àËÅ Ò¹Õ¨é Ðà¡Ô´¢Ö¹é äÁ ä´ àÅ ËÒ¡¼Ùà ÃÕ¹¢Ò´ÊÁÒ¸Ô ¡Ò÷íÒ§Ò¹·Õáè µ¡µ Ò§¡Ñ¹ä»ã¹·Ø¡ª ǧàÇÅҢͧËع ¹µ Íѹà¹×Íè §ÁÒ¨Ò¡ÊÀÒ¾áÇ´Å ÍÁ ·Õ¤è Ǻ¤ØÁãË ¤§·Õäè Á ä´ ËÃ×ÍÃдѺ¾Åѧ§Ò¹¢Í§Ëع ¹µ ·ÅÕè ´Å§ËÃ×Íà»ÅÕÂè ¹á»Å§ä»µÅÍ´àÇÅÒ·Õàè ¤Å×Íè ¹·Õè ÊÔ§è àËÅ Ò ¹Õ¨é Ðà» ¹Íա˹֧è ˹ Ңͧº·àÃÕ¹·Õ¼è àÙ ÃÕ¹¨Ðµ ͧ¾ºáÅÐ༪Ô˹ ÒÍ ҧÁÕÊµÔ´Ç ÂÍÒÃÁ³ ·ÁÕè ¹Ñè ¤§ Ëع ¹µ ¨ÐÂѧ໠¹µÑÇá·¹Ê×Íè ¡ÒÃàÃÕ¹ÃÙ· Ò§ÇÔ·ÂÒÈÒʵà áÅÐà·¤â¹âÅÂÕ·¼Õè ¤Ù ¹ã¹ÈµÇÃÃɹÕÁé ÍÔ Ò¨»¯ÔàÊ¸ä´ ªÑÂÇѲ¹ ÅÔÁé ¾Ã¨ÔµÃÇÔäÅ
4 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
ÊÒÃºÑ º··Õè 1 á¹Ð¹íÒªÔ¹é Ê Ç¹/ÍØ»¡Ã³ 㹡ÒÃÊà ҧËع ¹µ áÅÐ «Í¿µ áÇà ÊÒí ËÃѺ¾Ñ²¹Òâ»Ãá¡ÃÁ .........................................................................7 1.1 ªÔ¹é Ê Ç¹¢Í§Ëع ¹µ Robo-PICA 1.2 à¤Ã×Íè §Á×Í·Õãè ª 㹡ÒÃÊà ҧËع ¹µ 1.3 «Í¿µ áÇà ÊÒí ËÃѺ¾Ñ²¹Òâ»Ãá¡ÃÁ¤Çº¤ØÁËع ¹µ Robo-PICA
º··Õè 2 Êà ҧËع ¹µ Robo-PICA .........................................................................................15 ¡Ô¨¡ÃÃÁ·Õè 1 : Êà ҧËع ¹µ Robo-PICA
º··Õè 3 ºÍà ´¤Çº¤ØÁËÅÑ¡¢Í§Ëع ¹µ Robo-PICA áÅСÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C à¾×Íè ·´Êͺ¡Ò÷íÒ§Ò¹.......................................25 3.1 ¤Ø³ÊÁºÑµ·Ô ҧ෤¹Ô¤¢Í§ºÍà ´¤Çº¤ØÁ 3.2 ¡Ò÷íÒ§Ò¹¢Í§Ç§¨Ãã¹Ê ǹµ Ò§æ ¢Í§ºÍà ´¤Çº¤ØÁ 3.3 ÃÒÂÅÐàÍÕ´¢Í§ÊÒÂÊÑÒ³·Õãè ª 㹪ش Robo-PICA 3.4 ¢Ñ¹é µÍ¹¡ÒþѲ¹Òâ»Ãá¡ÃÁÊíÒËÃѺËع ¹µ Robo-PICA 3.5 µÑÇÍ ҧ¡ÒþѲ¹Òâ»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺËع ¹µ Robo-PICA ´ Ç mikroC IDE ¡Ô¨¡ÃÃÁ·Õè 2 : ·´ÊͺºÍà ´ RBX-877
º··Õè 4 ¢Ñºà¤Å×Íè ¹Ëع ¹µ Robo-PICA .................................................................................53 4.1 ǧ¨Ã¢ÑºÁÍàµÍà ¢Í§Ëع ¹µ Robo-PICA 4.2 ¡ÒäǺ¤ØÁ·ÔÈ·Ò§¡ÒÃà¤Å×Íè ¹·Õ¢è ͧËع ¹µ Robo-PICA ¡Ô¨¡ÃÃÁ·Õè 3 : ·´Êͺ¡ÒÃà¤Å×Íè ¹·Õ¢è ͧËع ¹µ Robo-PICA 4.3 ¡ÒäǺ¤ØÁ¤ÇÒÁàÃçǢͧÁÍàµÍà 4.4 äźÃÒÃÕ PWM ¡Ô¨¡ÃÃÁ·Õè 4 : ¤Çº¤ØÁ¤ÇÒÁàÃçǢͧËع ¹µ Robo-PICA 4.5 Êà ҧä¿Å äźÃÒÃÕ motor.h ¡Ô¨¡ÃÃÁ·Õè 5 : Ëع ¹µ Robo-PICA à¤Å×Íè ¹·Õµè ÒÁÃٻẺ·Õ¡è Òí ˹´
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 5
ÊÒÃºÑ º··Õè 5 Robo-PICA ¡ÑºµÑǵÃǨ¨ÑºáººÍйÒÅÍ¡...........................................................73 5.1 ÃÕ¨ÊÔ àµÍà ·àÕè ¡ÕÂè Ç¢ ͧ¡Ñº¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ ADC ¢Í§ PIC16F887 ¡Ô¨¡ÃÃÁ·Õè 6 : Í Ò¹¤ ÒµÑǵÃǨ¨ÑºÍйÒÅÍ¡
º··Õè 6 Robo-PICA ¡Ñº¡ÒõÃǨ¨ÑºÊÔ§è ¡Õ´¢ÇҧẺäÁ ÊÁÑ ¼ÑÊ ..........................................81 6.1 ¤Ø³ÊÁºÑµ¢Ô ͧ GP2D120 âÁ´ÙÅÇÑ´ÃÐÂзҧ´ ÇÂáʧÍÔ¹¿ÃÒàô 6.2 ËÅÑ¡¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅÇÑ´ÃÐÂзҧ´ ÇÂáʧÍÔ¹¿ÃÒàô ¡Ô¨¡ÃÃÁ·Õè 7 : ·´Êͺ㪧 Ò¹âÁ´ÙÅÇÑ´ÃÐÂзҧ GP2D120 ¡Ô¨¡ÃÃÁ·Õè 8 : Ëع ¹µ Robo-PICA ËźËÅÕ¡ÊÔ§è ¡Õ´¢ÇҧẺäÁ ÊÁÑ ¼ÑÊ
º··Õè 7 Ëع ¹µ Robo-PICA à¤Å×Íè ¹·Õµè ÒÁàÊ ¹.....................................................................89 7.1 ËÑÇã¨ÊíҤѤ×Í á¼§Ç§¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô ¡Ô¨¡ÃÃÁ·Õè 9 : Í Ò¹¤ Ҩҡἧǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô ¡Ô¨¡ÃÃÁ·Õè 10 : Ëع ¹µ Robo-PICA à¤Å×Íè ¹·Õäè Á µ¡âµ Ð ¡Ô¨¡ÃÃÁ·Õè 11 : Ëع ¹µ Robo-PICA à¤Å×Íè ¹·Õµè ÒÁàÊ ¹´íÒ
º··Õè 8 Robo-PICA ¡Ñº¡ÒäǺ¤ØÁÃÐÂÐä¡Å´ ÇÂáʧÍÔ¹¿ÃÒàô...................................103 8.1 ÃÕâÁµ¤Í¹â·ÃÅ ER-4 8.2 ἧǧ¨ÃâÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô 38kHz : ZX-IRM 8.3 ÃÙ¨ ¡Ñ ¡Ñº¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ 8.4 ÍÔ¹àµÍÃ Ã»Ñ µ ã¹ PIC16F887 ·Õàè ¡ÕÂè Ç¢ ͧ¡Ñº¡ÒäǺ¤ØÁËع ¹µ Robo-PICA ¡Ô¨¡ÃÃÁ·Õè 12 : ·´Íʺ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ 8.5 ¡ÒÃÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁẺÍЫԧâ¤Ã¹ÑÊ 8.6 â»Ãá¡ÃÁ ÍºÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ à¾×Íè Ò ¹¤ Ò¨Ò¡ÃÕâÁµ¤Í¹â·ÃÅ ¡Ô¨¡ÃÃÁ·Õè 13 : ·´Êͺ¡ÒÃÃѺ¢ ÍÁÙŨҡÃÕâÁµ¤Í¹â·ÃÅ ¡Ô¨¡ÃÃÁ·Õè 14 : ËØè¹Â¹µì Robo-PICA ¤Çº¤ØÁ´ ÇÂÃÕâÁµ¤Í¹â·ÃÅ
6 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 7
º··Õè 1
á¹Ð¹íÒªÔ¹é Ê Ç¹/ÍØ»¡Ã³ 㹡ÒÃÊà ҧËع ¹µ áÅЫͿµ áÇà ÊÒí ËÃѺ¾Ñ²¹Òâ»Ãá¡ÃÁ 㹺·¹Õ¨é йíÒàʹͶ֧¢ ÍÁÙÅã¹àº×Íé §µ ¹¢Í§ªÔ¹é Ê Ç¹µ Ò§æ µÅÍ´¨¹à¤Ã×Íè §Á×Í·Õ¹è Òí ÁÒ㪠㹡Òà Êà ҧËع ¹µ 굄 â¹Áѵ¢Ô ¹Ò´àÅç¡·Õ¤è Ǻ¤ØÁ¡Ò÷íÒ§Ò¹´ ÇÂäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC «Ö§è µÑ§é ª×Íè Ç Ò RoboPICA â´ÂẠ§ÍÍ¡à» ¹ 3 Ê Ç¹¤×Í 1. ªÔ¹é Ê Ç¹¢Í§Ëع ¹µ Robo-PICA 2. à¤Ã×Íè §Á×Í·Õãè ª 㹡ÒÃÊà ҧËع ¹µ 3. á¹Ð¹íÒ«Í¿µ áÇà ·Õè㪠㹡ÒþѲ¹Òâ»Ãá¡ÃÁ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§ËØ ¹Â¹µ
1.1 ªÔ¹é Ê Ç¹¢Í§Ëع ¹µ Robo-PICA ÁÕ·§Ñé ÊÔ¹é 3 ¡ÅØÁ ËÅÑ¡ ´Ñ§¹Õé
1.1.1 ªÔ¹é Ê Ç¹·Ò§¡Å
ªØ´à¿ ͧ¢Ñº¾Ã ÍÁÁÍàµÍà 㪠ÁÍàµÍà 4.5V (ÊÙ§ÊØ´ 9V) 180mA ÁÕ굄 ÃÒ·´ 48:1 áç ºÔ´ÊÙ§ÊØ´ 4kg.cm
ªØ´»ÃСͺŠÍÊÒ¾ҹ »ÃСͺ ´ ÇÂÊÒ¾ҹ 3 ¢¹Ò´ (8/10/30 ¢ ͵ Í), Å Í ¢ÑºËÅÑ¡, Å Í»ÃФͧÊÒ¾ҹ áÅдØÁÅ Í ªØ´»ÃСͺ°Ò¹ »ÃСͺ´ Ç ἠ¹°Ò¹, ©Ò¡Âִ᡹ŠÍ, ªÔé¹ µ ;ÅÒʵԡÁØÁ©Ò¡/á¹ÇµÃ§/ ÁØÁ» Ò¹ áÅÐá· §µ Í 3/5/12 ÃÙ
ªØ´¹Íµ-Ê¡ÃÙ, àÊÒÃͧ, ᡹âÅËÐ »ÃСͺ´ Ç ʡÃÙà¡ÅÕÂǻŠÍ 2 ÁÁ., Ê¡ÃÙ 3x7/3x9/3x10/3x15/3x25/3x40 ÁÁ., ¹Íµ 3 ÁÁ., Ê¡ÃÙÁÍ× ËÁع 3 ÁÁ., àÊÒÃͧ¾ÅÒʵԡ 3/10/15/25 ÁÁ., àÊÒÃͧâÅËÐË¡àËÅÕèÂÁ 3x30 ÁÁ. áÅÐ᡹âÅËÐ
8 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
1.1.2 ªÔ¹é Ê Ç¹·Ò§ÍÔàÅç¡·ÃÍ¹Ô¡Ê GP2D120
âÁ´ÙÅÇÑ´ÃÐÂзҧ´ ÇÂáʧ ÍÔ¹¿ÃÒàô 4 ¶Ö§ 30 «Á. RBX-877V2.0
ἧǧ¨Ã¤Çº¤ØÁËÅÑ¡ PIC16F887 ZX-03
ER-4
ἧǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹ áʧÍÔ¹¿ÃÒàô (x 2)
ÃÕâÁµ¤Í¹â·ÃÅ ÍÔ¹¿ÃÒàô
ZX-IRM
âÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô 38kHz
ÊÒ USB ºÍà ´ â»Ãá¡ÃÁäÁâ¤Ã ¤Í¹â·ÃÅàÅÍà ¼Ò ¹¾Íà µ USB ¾Ã ÍÁÊÒ ICD2
ZX-POTH
ẵàµÍÃÕè AA 4 ¡ ͹
ἧǧ¨ÃµÑǵ Ò¹·Ò¹»ÃѺ¤ Ò ä´ (x 1)
1.2 à¤Ã×Íè §Á×Í·Õãè ª 㹡ÒÃÊà ҧËع ¹µ
¤ÕÁµÑ´»Í¡ÊÒÂä¿
ÁÕ´¤ÑµàµÍà 䢤ǧ»ÅÒÂá©¡
¤ÍÁ¾ÔÇàµÍà µÔ´µÑ§é Ãкº»¯ÔºµÑ ¡Ô ÒÃÇÔ¹â´ÇÊ ME ¢Ö¹é ä» (á¹Ð¹íÒ XP à«Íà ÇÊÔ á¾ç¡ 2) ÁÕ¾Íà µ USB Ç Ò§ 1 ¾Íà µ
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 9
1.3 «Í¿µ áÇà ÊÒí ËÃѺ¾Ñ²¹Òâ»Ãá¡ÃÁ¤Çº¤ØÁËع ¹µ Robo-PICA ã¹Ëع ¹µ Robo-PICA ·Õ¨è зíÒ¡Ò÷´ÅͧÊà ҧã¹Ë¹Ñ§Ê×ÍàÅ Á¹Õ¤é Ǻ¤ØÁ¡Ò÷íÒ§Ò¹´ ÇÂäÁâ¤Ã ¤Í¹â·ÃÅàÅÍà PIC16F887 ´Ñ§¹Ñ¹é ¨Ö§ÊÒÁÒöà¢Õ¹â»Ãá¡ÃÁ¤Çº¤ØÁä´ ´Ç ÂÀÒÉÒáÍÊà«ÁºÅÕ ÀÒÉÒ àºÊÔ¡â´Â㪠«Í¿µ áÇà àºÊÔ¡¤ÍÁä¾àÅÍà ªÇ  áÅÐÀÒÉÒ C «Ö§è ¡çµÍ §¾Ö§è C ¤ÍÁä¾àÅÍà ઠ¹¡Ñ¹ ÊíÒËÃѺã¹Ëع ¹µ Robo-PICA ¨Ð㪠â»Ãá¡ÃÁÀÒÉÒ C à» ¹ËÅÑ¡ â´Â«Í¿µ áÇà ·ãÕè ª ÁÕ 2 ªØ´¤×Í ªØ´«Í¿µ áÇà mikroC «Ö§è à» ¹«Í¿µ áÇà C ¤ÍÁä¾àÅÍà ·ÁÕè Ҿà ÍÁ¡Ñºâ»Ãá¡ÃÁª ǾѲ¹Òã¹ÃٻẺ IDE à¾×è Í ÊÃ Ò §ä¿Å ¹ ÒÁÊ¡Ø Å .hex Êí Ò ËÃÑ º à¢Õ  ¹Å§ã¹Ë¹ Ç Â¤ÇÒÁ¨í Ò â»Ãá¡ÃÁ¢Í§äÁâ¤Ã ¤Í¹â·ÃÅàÅÍà ã¹Ëع ¹µ Robo-PICA áÅЫͿµ áÇà PICkit2TM programming «Ö§è 㪠㹡ÒôÒǹ âËÅ´â»Ãá¡ÃÁŧÊÙä Áâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 Íѹ໠¹ÍØ»¡Ã³ ËÅÑ¡·Õãè ª 㹡ÒäǺ¤ØÁ¡Òà ·íÒ§Ò¹¢Í§Ëع ¹µ Robo-PICA ¼ Ò¹·Ò§ºÍà ´â»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
1.3.1 mikroC Compiler (Ãع ÊÒ¸Ôµ) 1.3.1.1 ¢ ÍÁÙÅàº×Íé §µ ¹¢Í§ mikroC ÊíÒËÃѺ㹪ش Robo-PICA ¹Õàé Å×͡㪠ª´Ø «Í¿µ áÇà ¾² Ñ ¹Òâ»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ´ ÇÂÀÒÉÒ C ·Õªè Í×è Ç Ò mikroC ¢Í§ mikroElektronika (mikroE : www.mikroe.com).ã¹Ãع ÊÒ¸Ôµ (demo version) ÁÕ¢Í ¨íÒ¡Ñ´´ Ò¹¢¹Ò´¢Í§ä¿Å ËÅѧ¨Ò¡¤ÍÁä¾Å ËÃ×Íá»Å§à» ¹ÃËÑÊà¤Ã×Íè § (ä¿Å ¹ÒÁ Ê¡ØÅ .hex) µ ͧäÁ à¡Ô¹ 2 ¡ÔâÅàÇÔô «Ö§è ÁÒ¡à¾Õ§¾ÍÊíÒËÃѺ¡ÒþѲ¹Òâ»Ãá¡ÃÁÊíÒËÃѺ¤Çº¤ØÁ¡Ò÷íÒ §Ò¹¢Í§ËØ ¹Â¹µ Íѵâ¹ÁѵԢ¹Ò´àÅç¡ä´ à» ¹Í ҧ´Õ ÊíÒËÃѺ¼Ù 㪠§Ò¹·Õè·´Åͧ㪠mikroC áÅ ÇÁÕ¤ÇÒÁʹ㨵 ͧ¡ÒÃÃØ ¹ÊÁºÙó ÊÒÁÒöµÔ´µ ÍÊÑè§ «×éÍä´ ·ÕèàǺ䫵 ¢Í§¼Ù ¼ÅÔµ http://www.mikroe.com mikroC ä´ ºÃèØà¤Ã×Íè §Á×Íà¾×Íè ÍíҹǤÇÒÁÊдǡ㹡ÒþѲ¹Òâ»Ãá¡ÃÁäÇ ÁÒ¡ÁÒ µÑÇá»Å â»Ãá¡ÃÁÀÒÉÒ C ËÃ×Í C compiler ÁÕû٠Ẻ¡Ò÷íÒ§Ò¹·Õàè ¢ Ò¡Ñ¹ä´ ¡ºÑ ANSI C Áҵðҹ ÁÕäźÃÒÃÕ ÃͧÃѺ¡ÒõԴµ ͡ѺÍØ»¡Ã³ ÀÒ¹͡¨íҹǹÁÒ¡ ¾Ã ÍÁ·Ñ駵ÑÇÍ ҧâ»Ãá¡ÃÁ·Õèª ÇÂÅ´àÇÅÒ㹡Òà ¾Ñ²¹Òâ»Ãá¡ÃÁ ¼Ù ¾Ñ²¹Òâ»Ãá¡ÃÁÊÒÁÒöµÃǨÊͺ·ÃѾÂҡâͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ ä´ µÅÍ´àÇÅÒ «Öè§ à» ¹»ÃÐ⪹ Áҡ㹡óշÕè㪠ÃØ ¹ÊÒ¸Ôµ ·Ñ駹Õéà¾×èͪ Ç» ͧ¡Ñ¹äÁ ãË à¢Õ¹â»Ãá¡ÃÁÂÒÇà¡Ô¹¡Ç Ò¢ ͨíÒ ¡Ñ´ mikroC ÊÒÁÒöãË ä¿Å ¼ÅÅѾ¸ .hex ´ Ç¡ÒäÅÔ¡à¾Õ§»Ø Áà´ÕÂÇ ·íÒãË Å´¢Ñ鹵͹㹡Ò÷íÒ§Ò¹ Å§ä´ Í ҧÁÒ¡ áÅÐä¿Å .hex ÊÒÁÒö¹íÒä»ãª §Ò¹¡Ñºà¤Ã×èͧâ»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ÁÒµÃ°Ò¹ä´ ·Ø¡ÃØ ¹
10 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
1.3.1.2 ¡ÒõԴµÑ§é mikroC compiler Ãع ÊÒ¸Ôµ ¡ÒÃä´ ÁÒ«Ö§è ä¿Å µ´Ô µÑ§é ¢Í§ mikroC ã¹Ãع ÊÒ¸Ôµ¹Õé ÁÕ 2 ·Ò§¤×Í 1. ¨Ò¡á¼ ¹«Õ´ÃÕ ÍÁ·Õ¨è ´Ñ ÁÒ㹪ش Robo-PICA 2. ´Òǹ âËÅ´àÇÍà ª¹Ñè ãËÁ ÅÒ ÊØ´·ÕÍè Ò¨ÁÕ·Õè www.mikroe.com ¨Ò¡¹Ñé¹·íÒ¡ÒõԴµÑé§àËÁ×͹¡Ñºâ»Ãá¡ÃÁ»ÃÐÂØ¡µ ¢Í§ÇÔ¹â´ÇÊ ã¹Ë¹Ñ§Ê×ÍàÅ Á¹Õ¨é Ð͸ԺÒÂ੾ÒÐÊ Ç¹·Õãè ª 㹡ÒþѲ¹Òâ»Ãá¡ÃÁ à¾×Íè ¤Çº¤ØÁËع ¹µ ෠ҹѹé ÊíÒËÃѺ¡ÒÃà¢Õ¹â»Ãá¡ÃÁ ÃٻẺ¤íÒÊÑè§ áÅÐÇÔ¸Õ㪠§Ò¹ mikroC ÊÒÁÒÃ¶Í Ò¹ä´ ¨Ò¡ä¿Å ¤Ù Á×Í·Õè ÊÒÁÒö´Òǹ âËÅ´ä´ ¨Ò¡ www.mikroe.com ËÃ×ͨҡ¤ÙÁ Í× ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺäÁâ¤Ã ¤Í¹â·ÃÅàÅÍà PIC ´ Ç mikroC «Ö§è ¾ÔÁ¾ ᡵ Ò§ËÒ¡ áÅШѴÁÒ㹪ش¢Í§ Robo-PICA áÅ Ç »ØÁ ¤ÍÁä¾Å â»Ãá¡ÃÁ
äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·ãÕè ª
ª Í § ¡í Ò Ë ¹ ´ ¤ Ç Ò Á ¶Õè ÊÑ Ò ³ ¹ Ò Ì ¡ Ò Êí Ò Ë ÃÑ º ä Á â ¤ à ¤Í¹â·ÃÅàÅÍÃ
¾×¹é ·Õ¾ è ² Ñ ¹Òâ»Ãá¡ÃÁ
˹ Òµ Ò§¼ÅÅѾ¸
ÃÙ»·Õè 1-1 áÊ´§Ë¹ Òµ Ò§ËÅÑ¡¢Í§ mikroC IDE áÅÐÊ Ç¹»ÃСͺ·ÕÊè Òí ¤Ñ
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 11
1.3.2 PICkit2TM Programming software à» ¹«Í¿µ áÇà ÊÒí ËÃѺâ»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC áÅÐ dsPIC Ẻá¿Åª·Õµè Í §·íÒ§Ò¹ à ÇÁ¡Ñºà¤Ã×Íè §â»Ãá¡ÃÁ PICkit2TM ¢Í§ Microchip ËÃ×Íà¤Ã×Íè §â»Ãá¡ÃÁÍ×¹è ·ÕÁè ¡Õ Ò÷íÒ§Ò¹µÃ§¡Ñ¹ ÊíÒËÃѺ 㹪ش Robo-PICA ä´ àµÃÕÂÁºÍà ´â»Ãá¡ÃÁ PICkit2TM Ẻ OEM ·Õ¾è ² Ñ ¹Ò¢Ö¹é â´ÂºÃÔÉ·Ñ ÍÔ¹â¹àǵտ àÍç¡à¾ÍÃÔàÁ¹µ ¨íÒ¡Ñ´ ¨Ò¡¢ ÍÁÙÅ·Õàè ¼Âá¾Ã ÊÊÙ Ò¸ÒóТͧ Microchipâ´Â¡ÒÃâ»Ãá¡ÃÁ¢ ÍÁÙÅŧã¹Ë¹ Ç ¤ÇÒÁ¨íÒâ»Ãá¡ÃÁ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ¨Ðà» ¹áººâ»Ãá¡ÃÁã¹Ç§¨Ã¼ Ò¹·Ò§á¨ ¡ ICD2 àÁ¹Ù¤Òí Êѧè ᶺáÊ´§¡Ò÷íÒ§Ò¹
»ØÁ ª ÇÂ㹡Òà ·íÒ§Ò¹
¡Ãͺ Configuration ª ͧáÊ´§Ê¶Ò¹Ð
˹ Òµ Ò§ºÑ¿à¿Íà ¢Í ÁÙŢͧ˹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ
ᨠ§ ·Õè Á Ңͧ ä¿Å .hex ·ÕÃè ºÑ à¢ ÒÁÒà¡çºäÇ ã¹ ºÑ¿à¿Íà »ØÁ ª ÇÂ㹡Òà ·íÒ§Ò¹
˹ Òµ Ò§ºÑ¿à¿Íà ¢Í ÁÙŢͧ˹ ǤÇÒÁ¨íÒÍÕ; Õ ÃÍÁ
ÃÙ»·Õè 1-2 ˹ Òµ Ò§ËÅÑ¡¢Í§â»Ãá¡ÃÁ Pickiit2TM Programming Software «Ö§è 㪠´Òǹ âËÅ´â»Ãá¡ÃÁ ¤Çº¤ØÁŧã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 Íѹ໠¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ËÅÑ¡¢Í§Ëع ¹µ RoboPICA ¼ Ò¹·Ò§ºÍà ´â»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
12 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
1.3.2.1 ¡ÒõԴµÑ§é «Í¿µ áÇà 1.3.2.1.1 µÔ´µÑ§é ¨Ò¡á¼ ¹«Õ´ÃÕ ÍÁ·ÕÁè ҡѺªØ´ PX-200 «Í¿µ áÇà ·ãÕè ª ¡ºÑ PX-200 ¤×Í PICkit2TM Programming Software â´Âã¹àÇÍà ª¹Ñ ãËÁ æ ¹Ñ¹é ¾Ñ²¹ÒÁÒ¨Ò¡ Microsoft .NET ´Ñ§¹Ñ¹é ¡ÒõԴµÑ§é â»Ãá¡ÃÁà¾×Íè 㪠§Ò¹ ¼Ùã ª §Ò¹µ ͧÁÕ¡ÒõԴµÑ§é Microsoft .NET Framework àÊÕ¡ ͹ (¡) ¡Ã³Õ·¤Õè ÍÁ¾ÔÇàµÍà äÁ Á¡Õ ÒõԴµÑ§é Microsoft .NET Framework ÁÒ¡ ͹
µÔ´µÑ§é Microsoft .NET Framework â´ÂàÅ×Í¡µÔ´µÑ§é ¨Ò¡â¿Åà´Íà PICkit 2 Setup v2.01 dotNET à dotnetfx ã¹á¼ ¹«Õ´ÃÕ ÍÁ ´ÑºàºÔŤÅÔ¡·Õäè ¿Å dotnetfx.exe ¨Ð㪠àÇÅÒ㹡ÒõԴµÑ§é ¤ÃÙË ¹Ö§è ¨Ò¡¹Ñ¹é ¨Ö§·íÒ¡ÒõԴµÑ§é â»Ãá¡ÃÁ PICkit2TM Programming Software â´ÂàÅ×Í¡ä¿Å PICkit2Setup.msi (¢) ¡Ã³Õ·¤Õè ÍÁ¾ÔÇàµÍà Á¡Õ ÒõԴµÑ§é Microsoft .NET Framework áÅ Ç
µÔ´µÑ§é â»Ãá¡ÃÁ PICkit2TM Programming Software â´ÂࢠÒä»·Õâè ¿Åà´Íà PICkit 2 Setup v2.01 ã¹á¼ ¹«Õ´ÃÕ ÍÁ ´ÑºàºÔŤÅÔ¡·Õäè ¿Å PICkit2Setup.msi 1.3.2.1.2 µÔ´µÑ§é ¨Ò¡ä¿Å ·´Õè Òǹ âËÅ´¨Ò¡àǺ䫵 ¢Í§ Microchip ࢠÒä»ÂѧàǺ䫵 ¢Í§ Microchip ·Õè www.microchip.com àÅ×Í¡ËÑÇ¢ Í Development tools à Pickit 2 Programmer/Debugger (¡) ¡Ã³Õ·¤Õè ÍÁ¾ÔÇàµÍà äÁ Á¡Õ ÒõԴµÑ§é Microsoft .NET Framework ÁÒ¡ ͹
ãË ´Òǹ âËÅ´ä¿Å ¨Ò¡ËÑÇ¢ Í PICkit2V2.01 Install with .NET Framework ¨Ðä´ ä¿Å PICkit 2 Setup v2.01 dotNET.zip (µÑÇàÅ¢àÇÍà ª¹Ñ ÍÒ¨à»ÅÕÂè ¹á»Å§µÒÁÃع ·ÕÁè ¡Õ ÒûÃѺ»ÃاŠÒÊØ´) áÅ Ç ·íÒ¡ÒâÂÒÂä¿Å ·Õè´Òǹ âËÅ´ÁÒ à¡çºäÇ ã¹â¿Åà´Íà PICkit 2 Setup v2.01 dotNET ¨Ò¡¹Ñé¹à¢ Òä» ã¹â¿Åà´Íà PICkit 2 Setup v2.01 dotNET à dotnetfx àÅ×Í¡´ÑºàºÔŤÅÔ¡·Õäè ¿Å dotnetfx.exe ¨Ð㪠àÇÅÒ㹡ÒõԴµÑ§é ¤ÃÙË ¹Ö§è ¨Ò¡¹Ñ¹é ¨Ö§·íÒ¡ÒõԴµÑ§é â»Ãá¡ÃÁ Pickiit2TM Programming Software â´Â ࢠÒä»áŠǴѺàºÔŤÅÔ¡·Õäè ¿Å PICkit2Setup.msi (¢) ¡Ã³Õ·¤Õè ÍÁ¾ÔÇàµÍà Á¡Õ ÒõԴµÑ§é Microsoft .NET Framework áÅ Ç
ãË ´Òǹ âËÅ´ä¿Å ¨Ò¡ËÑÇ¢ Í PICkit2V2.01 Install ¨Ðä´ ä¿Å PICkit 2 Setup v2.01.zip (µÑÇàÅ¢àÇÍà ª¹Ñ ÍÒ¨à»ÅÕÂè ¹á»Å§µÒÁÃع ·ÕÁè ¡Õ ÒûÃѺ»ÃاŠÒÊØ´) áÅ Ç·íÒ¡ÒâÂÒÂä¿Å ·´Õè Òǹ âËÅ´ÁÒ à¡çº äÇ ã¹â¿Åà´Íà PICkit 2 Setup v2.01 ¨Ò¡¹Ñ¹é ࢠÒä»ã¹â¿Åà´Íà àÅ×Í¡´ÑºàºÔŤÅÔ¡·Õäè ¿Å PICkit2Setup.msi à¾×Íè àÃÔÁè µ ¹µÔ´µÑ§é â»Ãá¡ÃÁ
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 13
1.3.2.2 ¢Ñ¹é µÍ¹¡ÒõԴµÑ§é â»Ãá¡ÃÁ (1) ´ÑºàºÔŤÅÔ¡ä¿Å µ´Ô µÑ§é PICkit2Setup.msi ¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§àÃÔÁè ¡ÒõԴµÑ§é ¤ÅÔ¡»ØÁ Next
(2) ¨Ð»ÃÒ¡¯Ë¹ Òµ ҧᨠ§µíÒá˹ §â¿Åà´Íà ·¨Õè зíÒ¡ÒõԴµÑ§é ËÒ¡äÁ µÍ §¡ÒÃà»ÅÕÂè ¹á»Å§µíÒ á˹ §â¿Åà´Íà ãË ¤ÅÔ¡»ØÁ Next à¾×Íè ¼ Ò¹¢Ñ¹é µÍ¹¹Õäé »
(3) ¨Ð»ÃÒ¡¯Ë¹ Òµ ҧᨠ§Â×¹Âѹ¡ÒõԴµÑ§é â»Ãá¡ÃÁ ¤ÅÔ¡»ØÁ Next à¾×Íè µÍºµ¡Å§
14 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
(4) ˹ Òµ ҧᨠ§ÅÔ¢ÊÔ·¸ «Í¿µ áÇà »ÃÒ¡¯¢Ö¹é ¤ÅÔ¡ I agree à¾×Íè µÍºÃѺ ¨Ò¡¹Ñ¹é ¤ÅÔ¡»ØÁ Next
(5) ˹ Òµ ҧᨠ§Ê¶Ò¹Ð¡ÒõԴµÑ§é â»Ãá¡ÃÁ»ÃÒ¡¯¢Ö¹é Ãͨ¹¡ÃÐ·Ñ§è ¡ÒõԴµÑ§é àÊÃç¨ÊÁºÙó
ËÅѧ¨Ò¡·ÕèµÔ´µÑé§à¤Ã×èͧÁ×;Ѳ¹Òâ»Ãá¡ÃÁàÊÃç¨ÊÁºÙó ·Ñé§ËÁ´áÅ Ç ã¹º·µ Í仨Ðà» ¹¡Òà Êà ҧËع ¹µ Robo-PICA áÅÐࢠÒÊÙ¡ ÒþѲ¹Òâ»Ãá¡ÃÁÀÒÉÒ C à¾×Íè ·´Êͺ¡Ò÷íÒ§Ò¹¢Í§á¼§Ç§¨Ã äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 áÅФǺ¤ØÁ¡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ Robo-PICA 㹡Ԩ¡ÃÃÁµ Ò§æ
INNOVATIVE EXPERIMENT
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 15
º··Õè 2
Êà ҧËع ¹µ Robo-PICA º·¹Õàé » ¹¡ÒùíÒàʹ͡ÒÃÊà ҧËع ¹µ Robo-PICA Íѹ໠¹Ëع ¹µ 굄 â¹Áѵ¢Ô ¹Ò´àÅç¡·Õ¤è Ǻ¤ØÁ ´ ÇÂäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC àºÍà PIC16F887 ´Ñ§ÁÕ¤³ Ø ÊÁºÑµ·Ô ҧ෤¹Ô¤·Õ¹è Ò Ê¹ã¨â´ÂÊÃØ»µ Í仹Õé l
¢Ñºà¤Å×Íè ¹´ ÇÂ࿠ͧ¢ÑºÁÍàµÍÃ ÍµÑ ÃÒ·´ 48:1 ¨íҹǹ 2 ªØ´áÅЪشŠÍÊÒ¾ҹ
¤Çº¤ØÁ´ ÇÂäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 â»Ãá¡ÃÁä´ ã¹µÑÇ´ ǺÍà ´ â»Ãá¡ÃÁ·Õàè ª×Íè Áµ ͡Ѻ¤ÍÁ¾ÔÇàµÍà ¼Ò ¹¾Íà µ USB l
l
µÔ´µÑ§é ἧǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàôà¾×Íè µÃǨ¨ÑºàÊ ¹
µÔ´µÑé§âÁ´ÙÅÇÑ´ÃÐÂзҧ´ ÇÂáʧÍÔ¹¿ÃÒàôà¾×è͵ÃǨ¨ÑºÇѵ¶ØáÅÐËźËÅÕ¡ÊÔ觡մ ¢ÇҧẺäÁ ÊÑÁ¼ÑÊ l
l
ἧǧ¨ÃÃѺáʧÍÔ¹¿ÃÒàôà¾×Íè ¤Çº¤ØÁ¨Ò¡ÃÐÂÐä¡Å
l
ÁÕâÁ´ÙÅ LCD ¢¹Ò´ 16 µÑÇÍÑ¡Éà 2 ºÃ÷ѴáÅÐ LED ÊíÒËÃѺáÊ´§¼Å¡Ò÷íÒ§Ò¹
ÁÕǧ¨Ã¢Ñº RC à«Íà âÇÁÍàµÍà 3 ª ͧ ¨Ö§ÊÒÁÒö»ÃѺà»ÅÕÂè ¹Ãкº¢Ñºà¤Å×Íè ¹ áÅÐ ÊÒÁÒö·íÒ¡ÒõԴµÑ駡Åä¡à¤Å×è͹äËÇà¾ÔèÁàµÔÁä´ l
l
ÁÕǧ¨Ã¢Ñº RC à«Íà âÇÁÍàµÍà 3 ª ͧ
16 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
¡Ô¨¡ÃÃÁ·Õè 1
Êà ҧËع ¹µ Robo-PICA ©Ò¡Âִ᡹ŠÍÊѹé x 2 á¼ ¹°Ò¹¾ÅÒʵԡ x 1 RBX-877V2.0 ºÍà ´¤Çº¤ØÁËÅÑ¡ ´ØÁÅ Í x 6 ᡹¡ÅÁ x 3
Š͢ѺÊÒ¾ҹ x 2
àÊÒÃͧâÅËÐ 30 ÁÁ. x 3 Å Í»ÃФͧÊÒ¾ҹãË x 2
©Ò¡Âִ᡹ŠÍÂÒÇ x 2
Å Í»ÃФͧÊÒ¾ҹ¡ÅÒ§ x 2
àÊÒÃͧ 3 ÁÁ. x 2 ÊÒ¾ҹ 30 ¢ ͵ Í x 2 ÊÒ¾ҹ 10 ¢ ͵ Í x 4
Ê¡ÃÙ 3x7 ÁÁ. (4), 3x9 ÁÁ. (1) áÅÐ 3x10 ÁÁ. (15)
Ê¡ÃÙÁÍ× ËÁع x 3
ªÔ¹é µ ÍÁØÁ©Ò¡ x 3 á· §µ Í 3 ÃÙ x 2
Ê¡ÃÙà¡ÅÕÂǻŠÍ 2 ÁÁ. x 2 Ê¡ÃÙ 3x15 ÁÁ. x 1
ἧǧ¨ÃµÃǨ¨Ñ º ¡Òà ªØ´à¿ ͧ¢ÑºÁÍàµÍà x 2 Êз ͹áʧÍÔ¹¿ÃÒàô x 2
¹Íµ 3 ÁÁ. x 11
âÁ´ÙÅ GP2D120
ÃÙ»·Õè 2-1 áÊ´§ªÔ¹é Ê Ç¹·Ñ§é ËÁ´·Õãè ª 㹡ÒÃÊà ҧËع ¹µ Robo-PICA
ªÔ¹é µ ÍÁØÁ» Ò¹ x 3
ªÔ¹é µ ͵ç x 1
ἧǧ¨ÃâÁ´ÙÅÃѺáʧ ÍÔ¹¿ÃÒàô x 1
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 17
A1.1 ¹íҪش࿠ͧ¢ÑºÁÍàµÍÃ Â´Ö à¢ Ò¡Ñºá¼ ¹°Ò¹¾ÅÒʵԡ â´ÂÁÍàµÍà µÇÑ ¢ÇÒÁ×ÍãË Ë¹Ñ ´ Ò¹·ÕÁè »Õ ¡ ÍÍ¡ÁÒ´ Ò¹¹Í¡ áÅ Ç㪠ʡÃÙ 3x10 ÁÁ. ¢Ñ¹ÂÖ´¨Ò¡´ ҹŠҧ㹵íÒá˹ §´Ñ§áÊ´§ã¹ÃÙ» â´ÂàÇ ¹ÃÙ嫅 ´ ҹ㹢ͧÁÍàµÍà µÇÑ « ÒÂÁ×ÍäÇ ¡ ͹ àÇ ¹äÇ Â§Ñ äÁ Â´Ö Ê¡ÃÙ ´ Ò¹º¹
Ê¡ÃÙ 3x10 ÁÁ.
´ ҹŠҧ
Ëѹ´ Ò¹·ÕÁè »Õ ¡ ÍÍ¡´ Ò¹¹Í¡ ÂÖ´´ ÇÂÊ¡ÃÙ¨Ò¡´ ҹŠҧ
Ê¡ÃÙ 3x10 ÁÁ.
A1.2 ¹íÒŠ͢ѺÊÒ¾ҹËÅÑ¡ÊÇÁࢠҡѺ᡹¢Í§ªØ´à¿ ͧ¢ÑºÁÍàµÍà 㪠ʡÃÙà¡ÅÕÂǻŠÍ 2 ÁÁ. ¢Ñ¹ÂÖ´ ·íÒàËÁ×͹ ¡Ñ¹·Ñ§é Êͧ´ Ò¹
´ Ò¹º¹ Š͢ѺÊÒ¾ҹ Ê¡ÃÙà¡ÅÕÂǻŠÍ 2 ÁÁ. A1.3 ¤ÇèÒí á¼ ¹°Ò¹Å§ ¹íÒ©Ò¡Âִ᡹ŠÍÂÒÇ»ÃСºà¢ ҡѺἠ¹°Ò¹ã¹µíÒá˹ §µÒÁÃÙ» 㪠ʡÃÙ 3x10 ÁÁ. ¢Ñ¹ÂÖ´ ÂÖ´¡ÑºÃÙ·àÕè ËÅ×ͧ͢» ¡¢Í§ªØ´à¿ ͧ¢ÑºÁÍàµÍà ¨Ò¡¢Ñ¹é µÍ¹·Õè A1.1 ¨Ò¡¹Ñ¹é 㪠ʡÃÙ 3x10 ÁÁ. áÅй͵ 3 ÁÁ. ¢Ñ¹ÂÖ´ ©Ò¡Âִ᡹ŠÍÂÒÇÍÕ¡Ë¹Ö§è µíÒá˹ § â´ÂÂִࢠҷÕÃè ·Ù Õè 2 ¢Í§©Ò¡Âִ᡹ŠÍÂÒÇ ´Ñ§áÊ´§µíÒá˹ §µÒÁÃÙ» µíÒá˹ §ÃÙÂ´Ö Ê¡ÃÙ 3x10 ÁÁ. áÅй͵ 3 ÁÁ.
´ ҹŠҧ
Ê¡ÃÙ 3x10 ÁÁ. ©Ò¡Âִ᡹ŠÍÂÒÇ
18 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
A1.4 ¹íÒ©Ò¡Âִ᡹ŠÍÂÒÇ·Õàè ËÅ×ÍÂִࢠҡѺἠ¹°Ò¹ áÅ Ç㪠ʡÃÙ 3x10 ÁÁ. ¢Ñ¹ÂÖ´¨Ò¡´ Ò¹º¹ áÅÐÂÖ´´ ҹŠҧ ´ ǹ͵ 3 ÁÁ. 2 µíÒá˹ § ´Ñ§áÊ´§ã¹ÃÙ» ¹Íµ 3 ÁÁ.
¹Íµ 3 ÁÁ. ©Ò¡Âִ᡹ŠÍÂÒÇ ´ ҹŠҧ
¹Íµ 3 ÁÁ. A1.5 ¾ÅÔ¡á¼ ¹°Ò¹¡ÅѺÁÒ´ Ò¹º¹ ÂÖ´©Ò¡Âִ᡹ŠÍÊѹé ࢠҡѺ´ ҹ˹ Ңͧἠ¹°Ò¹ã¹µíÒá˹ §µÒÁ·Õáè Ê´§ã¹ ÃÙ» ¢Ñ¹Ê¡ÃÙÂ´Ö à©¾ÒеíÒá˹ §´ ҹ㹠ÃÙ´Ò ¹¹Í¡àÇ ¹äÇ ¹Íµ 3 ÁÁ. àÇ ¹äÇ
´ Ò¹º¹
´ Ò¹º¹
¹Íµ 3 ÁÁ.
©Ò¡Âִ᡹ŠÍÊѹé
A1.6 µÔ´µÑ§é àÊÒâÅËÐË¡àËÅÕÂè Á·Õ´è Ò ¹ËÅѧ¢Í§á¼ ¹°Ò¹ ¤ÇèÒí á¼ ¹°Ò¹Å§ ¢Ñ¹Ê¡ÃÙ 3x10 ÁÁ. ࢠҷÕÃè ãÙ ¹µíÒá˹ §ÁØÁ « Ò¼ ҹἠ¹°Ò¹áÅÐªÔ¹é µ ÍÁØÁ©Ò¡ à¾×Íè ¢Ñ¹ÂÖ´¡ÑºàÊÒâÅËÐË¡àËÅÕÂè Á
Ê¡ÃÙ 3x10 ÁÁ.
´ ҹŠҧ
ªÔ¹é µ ÍÁØÁ©Ò¡ àÊÒâÅËÐË¡àËÅÕÂè Á 30 ÁÁ.
Ê¡ÃÙ 3x10 ÁÁ. ¼ÅÔ¡á¼ ¹°Ò¹´ ҹŠҧ¢Öé¹ ªØ´à¿ ͧ¢Ñº ÁÍàµÍà ¢ÇÒ
á¼ ¹°Ò¹ ´ Ò¹º¹
àÊÒâÅËÐË¡àËÅÕèÂÁ
ÃÙ·ÕèÁØÁ« Ò´ Ò¹ËÅѧ ¢Í§á¼ ¹°Ò¹ ªÔé¹µ ÍÁØÁ©Ò¡
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 19
A1.7 ·Õ´è Ò ¹Ë¹ ÒãË ·Òí ¡ÒõԴµÑ§é àÊÒâËÅÐË¡ààËÅÕÂè Áઠ¹¡Ñ¹ â´Âà ÍÂÊ¡ÃÙ 3x10 ÁÁ. ¼ ҹᷠ§µ Í 3 ÃÙ áÅ Ç¢Ñ¹à¢ Ò ä»ã¹ÃÙ·àÕè Ç ¹äÇ ¢Í§©Ò¡Âִ᡹ŠÍÊÑ¹é ¨Ò¡¢Ñ¹é µÍ¹·Õè A1.5 ¢Ñ¹¼ ҹἠ¹°Ò¹ä»ÂִࢠҡѺàÊÒâÅËÐË¡àËÅÕÂè Á 30 ÁÁ. ·íÒઠ¹¹Õ·é §Ñé Êͧ¢ Ò§ â´Âá· §µ Í·Õ¹è Òí ÁÒÂÖ´´ ǹըé Ð㪠µ´Ô µÑ§é ἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàôµ Íä» á· §µ Í 3 ÃÙ ´ ҹŠҧ Ê¡ÃÙ 3x10 ÁÁ. ©Ò¡Âִ᡹ŠÍÊѹé àÊÒâÅËÐË¡àËÅÕÂè Á 30 ÁÁ. A1.8 Âѧ¤§¤ÇèÒí á¼ ¹°Ò¹ÍÂÙ ¹íÒ᡹âÅËСÅÁàÊÕºࢠҷթè Ò¡Âִ᡹ŠÍÂÒÇã¹µíÒá˹ §ÃÙ·Õè 2 áÅÐ 6 ´Ñ§ÃÙ» ¡ ͹ ¹íÒÅ Í»ÃФͧÊÒ¾ҹ¡ÅÒ§àÊÕºµÒÁ´ Ç´ØÁÅ Íà¾×Íè ÂÖ´ãË á¹ ¹ ¨Ò¡¹Ñ¹é ¾ÅÔ¡á¼ ¹°Ò¹ãË ¡ÅѺ仴 Ò¹º¹ áŠǹíÒ á¡¹âÅËСÅÁàÊ ¹·Õè 3 àÊÕºࢠҷթè Ò¡Âִ᡹ŠÍÊÑ¹é µ Í´ ǹíÒÅ Í»ÃФͧÊÒ¾ҹãË ÊÇÁࢠÒÁÒ áÅ ÇÂÖ´ãË á¹ ¹´ Ç´ØÁÅ Í á¡¹âÅËСÅÁ ´ØÁÅ Í
´ØÁÅ Í
Å Í»ÃФͧÊÒ¾ҹ¡ÅÒ§
Å Í»ÃФͧÊÒ¾ҹãË ´ØÁÅ Í á¡¹âÅËСÅÁ
ÃÙ·Õè 6
´ØÁÅ Í ÃÙ·Õè 2
20 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
A1.9 »ÃСͺŠÍÊÒ¾ҹ¨íҹǹ 2 àÊ ¹ ã¹áµ ÅÐàÊ ¹ »ÃСͺ´ Ç ÊÒ¾ҹ 30 ¢ ͵ Í 1 àÊ ¹ ÊÒ¾ҹ 10 ¢ ͵ Í 2 àÊ ¹ ¡Òõ ÍÊÒ¾ҹ¨Ðµ ͧ¡ÅÑ´ÊÒ¾ҹᵠÅд ҹࢠҴ Ç¡ѹÍ ҧÃÐÁÑ´ÃÐÇѧ
A1.10 ¹íÒÊÒ¾ҹ·Õ»è ÃСͺáÅ ÇÊÇÁࢠҡѺŠ͢ѺÊÒ¾ҹáÅÐÅ Í»ÃФͧÊÒ¾ҹ ·íҷѧé Êͧ´ Ò¹
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 21
A1.11 ¹íÒẵàµÍÃÕ¢è ¹Ò´ AA ¨íҹǹ 4 ¡ ͹ ºÃèØ㹡кж Ò¹¢Í§ºÍà ´ RBX-877 ¨Ò¡¹Ñ¹é ¹íÒºÍà ´ RBX-877 µÔ´µÑ§é ŧº¹ªØ´°Ò¹Ëع ¹µ â´ÂµÔ´µÑ§é ãË ´Ò ¹·ÕÁè ÊÕ ÇÔµª à» ´» ´ÍÂÙ´ Ò ¹à´ÕÂǡѺÁÍàµÍà ¨Ò¡¹Ñ¹é 㪠ʡÃÙÁÍ× ËÁع 3 µÑǢѹÂÖ´ºÍà ´¡Ñºâ¤Ã§Ëع ¹µ Ê¡ÃÙÁÍ× ËÁع
Ê¡ÃÙÁÍ× ËÁع ẵàµÍÃÕè AA 4 ¡ ͹ A1.12 ¹íÒἧǧ¨ÃâÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô ZX-IRM ÂִࢠҡѺªÔ¹é µ ÍÁØÁ» Ò¹ ¢Ñ¹ÂÖ´´ ÇÂÊ¡ÃÙ 3x15 ÁÁ. áÅй͵ 3 ÁÁ. ¹íÒªÔ¹é µ ͵çÁÒàÊÕºࢠҡѺ»ÅÒ´ Ò¹Ë¹Ö§è ¢Í§ªÔ¹é µ ÍÁØÁ» Ò¹ Ê¡ÃÙ 3x15 ÁÁ.
ªÔ¹é µ ÍÁØÁ» Ò¹
ÊÒÂÊÑÒ³ JST3AA-8
ªÔ¹é µ ͵ç
A1.13 µÔ´µÑ§é ªÔ¹é µ ÍÁØÁ©Ò¡à¢ Ò·ÕÃè ãÙ ¹µíÒá˹ §¡Ö§è ¡ÅÒ§¢Í§ºÍà ´ RBX-877 ·Ò§´ Ò¹ÊÇÔµª à» ´» ´ ËÃ×Í´ Ò¹ËÅѧ¢Í§â¤Ã§ Ëع ¹µ Robo-PICA â´Â㪠ʡÃÙ 3x10 ÁÁ. ¢Ñ¹ÂÖ´¡Ñº¹Íµ 3 ÁÁ. à¾×Íè 㪠໠¹·ÕÂè ´Ö á¼§Ç§¨ÃâÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô ªÔ¹é µ ÍÁØÁ©Ò¡
Ê¡ÃÙ 3x10 ÁÁ.
22 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
A1.14 ¹íÒἧǧ¨ÃâÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô ZX-IRM ·Õµè ´Ô µÑ§é ªÔ¹é µ ÍÁØÁ» Ò¹áÅÐªÔ¹é µ Íá¹ÇµÃ§¨Ò¡¢Ñ¹é µÍ¹·Õè A1.11 àÊÕºࢠҡѺªÔ¹é µ ÍÁØÁ©Ò¡ã¹¢Ñ¹é µÍ¹·Õè A1.12 Íѹ໠¹¡ÒõԴµÑ§é ἧǧ¨Ã ZX-IRM ࢠҡѺËع ¹µ Robo-PICA ¨Ò¡¹Ñ¹é àÊÕºÊÒÂÊÑÒ³¢Í§ ZX-IRM à¢ Ò·Õ¨è ´Ø µ Í RB0/INT
ZX-IRM
RB0
A1.15 àÊÕºÊÒÂÁÍàµÍà ࢠҡѺ¨Ø´µ ÍÁÍàµÍà â´Âµ ÍÁÍàµÍà ¢ÇÒà¢ Ò·Õ¨è ´Ø µ Í M-2 ÊÕ¢ÒÇ áÅÐÁÍàµÍà «Ò ÂࢠҷÕè ¨Ø´µ Í M-1 ÊÕ´Òí Í ҧäáçµÒÁÊÒÁÒöà»ÅÕÂè ¹á»Å§ä´ ËÒ¡¡ÒÃà¤Å×Íè ¹·Õ¢è ͧËع ¹µ äÁ ¶¡Ù µ ͧ ÁÍàµÍà M-1
ÁÍàµÍà M-2
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 23
A1.16 µÔ´µÑ§é ἧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô«Ö§è ¹íÒÁÒ㪠㹡ÒõÃǨ¨ÑºàÊ ¹à¢ Ò·Õ´è Ò ¹Ë¹ ҢͧËع ¹µ â´ÂµÔ´µÑ§é ࢠҡѺ»ÅÒ¢ͧᷠ§µ Í 3 Ã٠㹡ÒõԴµÑ§é à¾×Íè Âִἧǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô·Ñ§é ÊͧªØ´ ãË ãª àÊÒÃͧ¾ÅÒʵԡ 3 ÁÁ. Ãͧ¡ ͹¢Ñ¹ÂÖ´´ ÇÂÊ¡ÃÙ 3x10 ÁÁ.áÅй͵ 3 ÁÁ. µÔ´µÑ§é ·Ñ§é Êͧ´ Ò¹ ´Ñ§ÃÙ»
ἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô ¹Íµ 3 ÁÁ. àÊÒÃͧ 3 ÁÁ. A1.17 ¹íÒâÁ´ÙÅÇÑ´ÃÐÂзҧ GP2D120 µÔ´µÑ§é ࢠҡѺªÔ¹é µ ÍÁØÁ©Ò¡ã¹ÅѡɳдѧáÊ´§ã¹ÀÒ¾ â´Â㪠ʡÃÙ¢¹Ò´ 3x10 ÁÁ. áÅй͵ 3 ÁÁ. ¢Ñ¹ÂÖ´ ªÔ¹é µ ÍÁØÁ©Ò¡ GP2D120 ¢Ñ¹Ê¡ÃÙ 3x10 ÁÁ. áÅй͵ 3 ÁÁ. A1.18 ·Õ´è Ò ¹Ë¹ Ңͧâ¤Ã§Ëع ¹µ ¹Òí Ê¡ÃÙ 3x10 ÁÁ. áÅй͵ 3 ÁÁ. à ÍÂàÍÒäÇ ÂѧäÁ µÍ §¢Ñ¹ãË á¹ ¹ ¨Ò¡¹Ñ¹é ¹íÒ â¤Ã§Êà ҧ¢Í§ GP2D120 ·ÕÊè à ҧäÇ ã¹¢Ñ¹é µÍ¹·Õè A1.17 ÁÒàÊÕºࢠÒä»ÃÐËÇ Ò§ËÑÇÊ¡ÃÙ¡ºÑ ºÍà ´¤Çº¤ØÁ áŠǢѹ Ê¡ÃÙ嫅 ãË á¹ ¹ àÊÕº»ÅÒ¢ͧ ªÔé ¹ µ Í ÁØ Á ©Ò¡ ÃÐËÇ Ò §ËÑ Ç Ê¡ÃÙ ¡ÑººÍà ´
24 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
A1.19 µ ÍÊÒÂÊÑÒ³¢Í§âÁ´ÙÅ GP2D120 ࢠҡѺª ͧ RA2 áÅе ÍÊÒÂÊÑÒ³¢Í§á¼§Ç§¨ÃµÃǨ¨Ñºáʧ Êз ͹ÍÔ¹¿ÃÒàô (ZX-03) ´ Ò¹« ÒÂࢠҷժè Í § RA0 Ê Ç¹´ Ò¹¢ÇÒµ ͡Ѻª ͧ RA1
ZX-IRM
ZX-03 ¢ÇÒ
GP2D120 ZX-03 « ÒÂ
A1.20 ¨Ñ´à¡çºÊÒÂÊÑÒ³·Ñ§é ËÁ´ãË àÃÕºà Í ¨Ðä´ Ë¹Ø Â¹µ Robo-PICA ·Õ¾ è à ÍÁÊíÒËÃѺ¡ÒÃà¢Õ¹â»Ãá¡ÃÁ à¾×Íè ·´Êͺ¡Ò÷íÒ§Ò¹µ Íä»
INNOVATIVE EXPERIMENT
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 25
º··Õè 3
ºÍà ´¤Çº¤ØÁËÅÑ¡¢Í§Ëع ¹µ Robo-PICA áÅСÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C à¾×Íè ·´Êͺ¡Ò÷íÒ§Ò¹ ËØ ¹Â¹µ ROBO-PICA ·íÒ§Ò¹ä´ ´ Ç¡ÒäǺ¤ØÁ¨Ò¡ºÍà ´ RBX-877 V2.0 Íѹ»ÃСͺ ´ Ç äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·Õè·íÒ˹ Ò·Õè»ÃÐÁÇżÅËÅÑ¡ ǧ¨Ã¢ÑºÁÍàµÍÃ Ê Ç¹áÊ´§¼Å LCD Ê Ç¹ àª×Íè Áµ ͡Ѻà¤Ã×Íè §â»Ãá¡ÃÁÀÒ¹͡ â´ÂÃÒÂÅÐàÍÕ´ Ê Ç¹»ÃСͺµ Ò§æ áÊ´§à» ¹ºÅçÍ¡ä´ÍÐá¡ÃÁ ´Ñ§ÃÙ»·Õè 3-1
ÃÙ»·Õè 3-1 ä´ÍÐá¡ÃÁ¡Ò÷íÒ§Ò¹¢Í§ RBX-877 V2.0 ºÍà ´¤Çº¤ØÁËÅÑ¡¢Í§Ëع ¹µ Robo-PICA
26 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
¨Ø´µ ÍÊ×Íè ÊÒÃ͹ءÃÁ
ÊÇÔµª à» ´/» ´
¨Ø´µ Íà¤Ã×Íè §â»Ãá¡ÃÁ (µ Í¢Ò RC6 áÅÐ RC7) ¨Ø´µ ÍâÁ´ÙÅ LCD ¨Ø´µ ÍÃкººÑÊ I2C (µ Í¢Ò RD2-RD7)
¨Ø´µ ÍẵàµÍÃÕè
(µ Í¢Ò RC3 áÅÐ RC4)
äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
(µ Í¢Ò RC0)
21+ $.&&%
LED áÊ´§¼Å
¨Ø´µ Íà«Íà âÇÁÍàµÍà (µ Í¢Ò RB4,RB5,RC5)
ÅíÒ⾧໠Ââ«
¾Íà µÍÔ¹àµÍÃ Ã»Ñ µ
¨Ø´µ ÍÁÍàµÍà 俵ç
(µ Í¢Ò RB0)
ÊÇÔµª ¡´ (µ Í¢Ò RD0, RD1, RC2 áÅÐ RB1, RB2, RC1) (µ Í¢Ò RA4 áÅÐ RB0)
¾Íà µÍÔ¹¾ØµàÍÒµ ¾µØ
(µ Í¢Ò RB3)
(µ Í¢Ò RA0-RA3, RA5, RE0-RE2)
ÃÙ»·Õè 3-2 áÊ´§Ê ǹ»ÃСͺ·ÕÊè Òí ¤Ñ¢Í§ RBX-877 V2.0 ºÍà ´¤Çº¤ØÁËÅÑ¡¢Í§Ëع ¹µ Robo-PICA
3.1 ¤Ø³ÊÁºÑµ·Ô ҧ෤¹Ô¤ 㪠äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹·Ñ§é ËÁ´ l ´Òǹ âËÅ´â»Ãá¡ÃÁ¨Ò¡¤ÍÁ¾ÔÇàµÍà ´Ç Âà¤Ã×Íè §â»Ãá¡ÃÁÀÒ¹͡¼ Ò¹·Ò§á¨ ¡ ICD2 l ÁÕǧ¨Ã¢ÑºÁÍàµÍà 俵ç 2 ªØ´¾Ã ÍÁä¿áÊ´§·ÔÈ·Ò§¡ÒÃËÁع l ¢Ñº RC à«Íà âÇÁÍàµÍà ¢¹Ò´àÅç¡ 4.8 ¶Ö§ 6V ä´ 3 µÑÇ l ÁÕÅÒ í ⾧໠Ââ«ÊíÒËÃѺ¢ÑºàÊÕ§ l ÁÕ LED áÊ´§¼Åµ ͵ç¡Ñº¢Ò¾Íà µ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà l âÁ´ÙÅ LCD 16 µÑÇÍÑ¡Éà 2 ºÃ÷Ѵ ẺÁÕä¿Ê ͧËÅѧ l ¨Ø´µ ÍÊíÒËÃѺàª×Í è Áµ ͡ѺÍØ»¡Ã³ ·ÁÕè ¡Õ ÒÃÊ×Íè ÊÒâ ÍÁÙÅẺ͹ءÃÁáÅÐÃкººÑÊ I2C l ÁÕ¨´ Ø µ ÍÍÔ¹¾ØµàÍÒµ ¾µØ Ẻ´Ô¨µÔ ÍÅáÅÐÍÔ¹¾ØµÍйÒÅÍ¡ 9 ª ͧ l ·íÒ§Ò¹´ ÇÂẵàµÍÃÕè AA 4 ¡ ͹ ãª ä´ ·§ Ñé ẺÍÑŤÒäŹ áÅÐẺ»ÃШØä´ l ¢¹Ò´ 2.38 x 6.25 ¹ÔÇ é l
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 27
SW1 ON
+Vm
L1 10uH
D1 1N4001
R1 0.47
D2 1N5819 +5V
K1 BATT. 4.5-6V
C1 100µF 10V
C2 100µF 10V
ZD1 5.1V
IC1 NCP1450 5.0
Q1 FDS6680A
5 4
K2 ISP
CE OUT
GND
C3 1000µF 6.3V
1 2
LED1 ON
ZD2 5.6V
C4 0.01µF 50V
Switching Power Supply
PGC PGD
+5V
R2 1k
+5V
+5V Vpp
11
PGD
40
J1 ICD2
39
PGC GND
32
C5 0.1µF 50V
RB7 RB6
Vpp
+5V
RD2 21
4
22
6
RD3 IC2 PIC16F887
R3 4k7
1 R4 1k
SW2 RESET
MCLR
RD7 RD6 RD5
+5V 23
K3 SDA/RC4
18
K4 SCL/RC3
RD4
RB3
K6 RxD/RC7
26
RC6/TxD RB5
R6 4k7
+5V R8 150
K7 INT/RB0
S2 RB0
+5V
6 33
RB1 RB2 RC1/CCP2
+5V
K15 AN5/RE0
8
K14 AN4/RA5
7
K9 AN3/RA3
5
K13 AN2/RA2
4
K12 AN1/RA1
3
K11 AN0/RA0
2
CR1 Ceramic Resonator 20MHz
BRIGHTNESS
27
36
LED2 RB3
R5 510
37 +Vm
K8 SERVO1
+Vm
K9 SERVO2
+Vm
K10 SERVO3
38
24
K18A-K18B Motor M-1 C7 0.1µF 50V
+5V +Vm
19
2
20
7 2A
RC2/CCP1 17
9
VR1 10k
3
BLK GND 15 2
28
16
RD1
K16 AN6/RE1
1
29
RB0/INT RD0
10
BACK LIGHT ON
1A
1
15 4A
35
10
16
9
RE2/AN7
RC0
15
RE0/AN5
31 RA1/AN1
13
INVERT
+ +
K19A-K19B Motor M-2
DIRECT
Motor Driver +Vm
R9 47k
1 +V RESET GND 2
RA0/AN0
R10 2k2 C8 0.1µF 50V
4
C6 10µF 50V
R8 1k 12
LED4 DIR. #B
3A
RA3/AN3 RA2/AN2
DIRECT LED3 DIR. #A
34EN
SP1 PIEZO
RA5/AN4
+
R9 2k2
6
14 IC3 4Y L293D 11 3Y
13 12 5
RE1/AN6
1Y 3 2Y
12EN
34
8
Vcc1
INVERT
+
RA4
S1 RA4
K17 AN7/RE2
+V Vo
RC7/RxD RC5
R7 4k7
E
R5 16 47
RC3/SCL RB4
25
BLA
DSP1 LCD 16x2 (back light option)
RS
D7 D6 D5 D4 D3 D2 D1 D0 R/W 14 13 12 11 10 9 8 7 5
30
RC4/SDA
+5V K5 TxD/RC6
+5V JP1
3
LED5 LOW-BAT
Battery Indicator 14
ÃÙ»·Õè 3-2 áÊ´§Ç§¨ÃÊÁºÙó ¢Í§ RBX-877 V2.0 ºÍà ´¤Çº¤ØÁËÅÑ¡¢Í§Ëع ¹µ Robo-PICA
28 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
3.2 ¡Ò÷íÒ§Ò¹¢Í§Ç§¨Ã
3.2.1 Ê Ç¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
ËÑÇã¨ÊíҤѤ×Í äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ÁÕ¢Ò¾Íà µÍÔ¹¾ØµàÍÒµ ¾µØ ãË µÍ 㪠§Ò¹ä´ ÁÒ¡¶Ö§ 35 ¢Ò ÀÒÂã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ Â§Ñ »ÃСͺ仴 ÇÂâÁ´Ùŵ Ò§ æ ÁÒ¡ÁÒ ઠ¹âÁ´ÙÅ PWM à¾×è Í ãË Ê ÒÁÒö»ÃÑ º ¤ÇÒÁàÃç Ç ÁÍàµÍÃ ä ´ µ ÒÁµ Í §¡Òà âÁ´Ù Å á»Å§ÊÑ Ò³ÍйÒÅÍ¡à» ¹ ´Ô¨µÔ ÍÅ(ADC) «Ö§è PIC16F887 ä´ àµÃÕÂÁ ADC ¤ÇÒÁÅÐàÍÕ´ 10 ºÔµäÇ ÁÒ¡¶Ö§ 14 ª ͧ ´Ñ§¹Ñ¹é ´ ÇÂäÁâ¤Ã ¤Í¹â·ÃÅàÅÍà à¾Õ§µÑÇà´ÕÂǨ֧µ ͡ѺÍØ»¡Ã³ ÍÔ¹¾ØµàÍÒµ ¾Øµà¾×èÍÊà ҧ໠¹ËØ ¹Â¹µ ä´ Í ҧ§ Ò´Ò â´ÂÁÕà«ÃÒÁÔ¡àÃâ«à¹àµÍà 20MHz ¡íÒà¹Ô´¤ÇÒÁ¶ÕÊè Ñ Ò³¹ÒÌ ¡Òà¾×Íè ãË äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·Òí §Ò¹ ä´ ·¤Õè ÇÒÁàÃçǶ֧ 5 Å Ò¹¤íÒÊÑ§è µ ÍÇÔ¹Ò·Õ
3.2.2 ÀÒ¤¨ ÒÂä¿ ºÍà ´ RBX-877 µ ͧ¡ÒÃáç´Ñ¹ä¿àÅÕÂé §ÍÔ¹¾Øµà» ¹áç´Ñ¹ä¿¿ Ò¡ÃÐáʵç 4.8 ¶Ö§ 6V (äÁ ¤ÇÃà¡Ô¹ +6V) â´Âº¹ºÍà ´ÁÕ¡ÒõԴµÑ§é ¡ÐºÐ¶ Ò¹ AA ¢¹Ò´ 4 ¡ ͹ áÅе ÍÊÒÂÁÒÂѧ¨Ø´µ Íä¿àÅÕÂé § Ẻà·Íà Á¹Ô ÍźÅçÍ¡ 2 ¢ÒµÑÇàÅç¡ àÁ×Íè µ ͧ¡ÒÃ㪠§Ò¹¡çà¾Õ§ºÃèØẵàµÍÃÕ¢è ¹Ò´ AA ¨íҹǹ 4 ¡ ͹ ŧ㹡кж Ò¹
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 29
º¹ºÍà ´ä´ ºÃèØǧ¨ÃÀÒ¤¨ ÒÂä¿ÊÇÔµª ªÔè§áºº»ÃѺ¢Öé¹ (step up) à¾×èÍ¡íÒ˹´ÃдѺáç´Ñ¹ ä¿àÅÕé§ǧ¨Ã·Ñé§ËÁ´äÇ ·Õè +5V ·Ñ駹Õéà¹×èͧ¨Ò¡àÁ×èÍàÃÔèÁµ ¹¨ ÒÂä¿ãË á¡ Ç§¨Ã ÃдѺ¢Í§áç´Ñ¹·Õè ẵàµÍÃÕ¨è Ф ÍÂæ Ŵŧ ´ Ç¡ÒÃ㪠ǧ¨Ã¨ ÒÂä¿ÊÇÔµª ª§Ôè Ẻ»ÃѺ¢Ö¹é ¹Õ·é Òí ãË áç´Ñ¹ä¿àÅÕÂé §Ç§¨ÃÃÇÁ Âѧ¤§ÃÑ¡ÉÒÃдѺÍÂÙ· Õè +5V ÍÂÙä ´ ¨¹¡Ç ÒÃдѺáç´Ñ¹¢Í§áºµàµÍÃÕ¨è ÐŴŧµèÒí ÁÒ¡¨ÃÔ§æ (»ÃÐÁÒ³ 1.5V) ¨Ö§äÁ ÊÒÁÒöÃÑ¡ÉÒÃдѺáç´Ñ¹äÇ ä´ ÊíÒËÃѺ㹡óշáÕè ç´Ñ¹¨Ò¡áºµàµÍÃÕÅè ´µèÒí ¡Ç Ò 4V ǧ¨ÃµÃǨ¨Ñºáç´Ñ¹áºµàµÍÃÕ¨è зíÒ§Ò¹ áÅÐᨠ§àµ×͹ÍÍ¡ÁÒ·Õè LED ÊÕàËÅ×ͧµíÒá˹ § BATT. ¼Ùã ª §Ò¹¤ÇÃà»ÅÕÂè ¹áºµàµÍÃÕãè ËÁ ·¹Ñ ·Õ LED áÊ´§Ê¶Ò¹ÐẵàµÍÃÕè
ÊÇÔµª à» ´/» ´
3.2.3 Ê Ç¹áÊ´§¼Å ÁÕ´Ç Â¡Ñ¹ 3 Ê Ç¹ »ÃСͺ´ Ç (1) âÁ´ÙÅ LCD ÊíÒËÃѺáÊ´§¼Å¢ ͤÇÒÁ ºÍà ´ RBX-877 ÁÕâÁ´ÙÅ LCD 16 µÑÇÍÑ¡Éà 2 ºÃ÷Ѵàª×Íè Áµ ͡ѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà â´Âµ Í¢Ò RD4 ¶Ö§ RD7 ¢Í§ PIC16F887 ࢠҡѺ¢Ò D4 ¶Ö§ D7 ¢Í§âÁ´ÙÅ LCD à¾×Íè à¢Õ¹¢ ÍÁÙÅáÊ´§¼ÅáÅФíÒÊѧè , µ Í¢Ò RD3 ¡Ñº¢Ò E à¾×Íè » ͹ÊÑÒ³¾ÑÅÊ ÊíÒËÃѺàÍç¹àÍàºÔÅ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ LCD áÅе Í¢Ò RD2 ࢠҡѺ¢Ò RS ¢Í§âÁ´ÙÅ LCD à¾×Íè àÅ×Í¡ ¡ÒÃà¢Õ¹¢ ÍÁÙÅËÃ×ͤíÒÊѧè ä»ÂѧâÁ´ÙÅ LCD ÁÕµÇÑ µ Ò¹·Ò¹»ÃѺ¤ Òä´ VR1 ¤ Ò 10kΩ ·íÒ˹ Ò·Õ»è ÃѺ¤ÇÒÁ ࢠÁ¢Í§¨ÍáÊ´§¼Å ¶ ÒËÒ¡µ ͧ¡ÒÃãË à» ´ä¿Ê ͧËÅѧ¢Í§âÁ´ÙÅ LCD ãË ·Òí ¡Òõ ͨÑÁê à»Íà ·ÍÕè ÂÙ´ Ò ¹ ¢ÇÒÁ×ͧ͢âÁ´ÙÅ LCD (»¡µÔ¨Ðµ ÍäÇ áÅ Ç) ¶ Òµ ͧ¡Òû ´à¾×Íè »ÃÐËÂÑ´¾Åѧ§Ò¹ãË »Å´¨ÑÁê à»Íà ¹ÍÕé Í¡
30 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
(2) LED 㪠áÊ´§Ê¶Ò¹Ðàº×Íé §µ ¹ºÍà ´ RBX-877 â´Âµ Í LED äÇ 1 ´Ç§à¢ ҡѺ¢Ò ¾Íà µ RB3 ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887
(3) ÅíÒ⾧ 㪠áÊ´§¼Å¡Ò÷íÒ§Ò¹´ ÇÂÊÑÒ³àÊÕ§ â´Âµ ÍÅíÒ⾧໠Ââ«à¢ Ò·Õ¢è Ò¾Íà µ RC0 ¤ÇÒÁ¶Õàè Ãâ«á¹¹« ¢Í§ÅíÒ⾧໠Â⫹ÕÍé ÂÙà ÐËÇ Ò§ 1 ¶Ö§ 3kHz
3.2.4 Ê Ç¹¾Íà µÍÔ¹¾ØµàÍÒµ ¾µØ ¡ÒÃÃѺÊÑÒ³ÍÔ¹¾ØµËÃ×͢ѺÍØ»¡Ã³ àÍÒµ ¾µØ ÀÒ¹͡ÊÒÁÒö¡ÃзíÒä´ â´ÂµÃ§¼ Ò¹¢Ò RB0 , RA0 ¶Ö§ RA3, RA5, RE0 ¶Ö§ RE2 áÅÐ RC3 ¶Ö§ RC7 ¢Ò¾Íà µàËÅ Ò¹ÕÊé ÒÁÒö¡íÒ˹´¡Ò÷íÒ§Ò¹ä´ ËÅÒÂÃٻẺ ´Ñ§¹Õé
(1) RB0 , RA0 ¶Ö§ RA3, RA5 áÅÐ RE0 ¶Ö§ RE2
¡ÒèѴ¢Ò¢Í§ ¨Ø´µ Í 3 ¢Ò
(1.1) ÍÔ¹¾ØµÍйÒÅÍ¡ à¾×Íè ÃѺÊÑÒ³ÍÔ¹¾ØµáººÍйÒÅÍ¡Ê §à¢ Òä»»ÃÐÁÇżÅÂѧ ǧ¨Ãá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ¢¹Ò´ 10 ºÔµÀÒÂã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 31
(1.2) ÍÔ¹¾Øµ´Ô¨µÔ ÍÅ à¾×Íè ÃѺÊÑÒ³Åͨԡ 0 áÅÐ 1 ¨Ò¡ÍØ»¡Ã³ ÀÒ¹͡ (1.3) àÍÒµ ¾µØ ´Ô¨µÔ ÍÅ à¾×Íè Ê §ÊÑÒ³Åͨԡ 0 áÅÐ 1 ä»ÂѧÍØ»¡Ã³ ÀÒ¹͡ (1.4) ÍÔ¹¾ØµÍÔ¹àµÍÃ Ã»Ñ µ ÊíÒËÃѺ¡Ò÷íҧҹẺ¹Õ¨é ÐÃͧÃѺ੾ÒТҾÍà µ RB0/INT ෠ҹѹé àÁ×Íè àÍç¹àÍàºÔÅ¡ÒõͺʹͧÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ÀÒ¹͡ áÅÐÁÕ¡ÒÃà»ÅÕÂè ¹á»Å§Ê¶Ò¹Ð·ÕÅè ͨԡ à¡Ô´¢Ö¹é ·Õ¢è Ò¾Íà µ RB0 ¹Õé «Õ¾ÂÕ ¨Ù СÃÐâ´´ä»·íÒ§Ò¹·Õâè »Ãá¡ÃÁ ÍºÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ·¹Ñ ·Õ â´Â¤ ÒµÑ§é µ ¹¨Ð¡íÒ˹´ãË ¢Ò¾Íà µ·Ñ§é 9 ¢Ò¹Õ·é Òí §Ò¹à» ¹ÍÔ¹¾ØµÍйÒÅÍ¡
(2) RC3 áÅÐ RC4
(2.1) ÍÔ¹¾Øµ´Ô¨µÔ ÍÅ à¾×Íè ÃѺÊÑÒ³Åͨԡ 0 áÅÐ 1 ¨Ò¡ÍØ»¡Ã³ ÀÒ¹͡ (2.2) àÍÒµ ¾µØ ´Ô¨µÔ ÍÅ à¾×Íè Ê §ÊÑÒ³Åͨԡ 0 áÅÐ 1 ä»ÂѧÍØ»¡Ã³ ÀÒ¹͡ (2.3) ¢Òàª×Íè Áµ ÍÃкººÑÊ I2C â´Â¡íÒ˹´ãË RC3 à» ¹¢ÒÊÑÒ³¹ÒÌ Í¡Ò͹ءÃÁ (SCL) áÅÐ¢Ò RC4 à» ¹¢Ò¢ ÍÁÙÅ͹ءÃÁ (SDA) ÊíÒËÃѺàª×Íè Áµ ͡ѺÍØ»¡Ã³ ÀÒ¹͡¼ Ò¹ÃкººÑÊ I2C µÑÇÍ ҧ¢Í§ÍØ»¡Ã³ ÃкººÑÊ I2C ä´ á¡ CMPS03 âÁ´ÙÅà¢çÁ·ÔÈÍÔàÅç¡·ÃÍ¹Ô¡Ê , DS1307 äÍ«Õ °Ò¹àÇÅÒ¹ÒÌ ¡Ò¨ÃÔ§ (ÃÕÅä·Á ¤ÅçÍ¡), 24Cxx äÍ«Õ˹ ǤÇÒÁ¨íÒ¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁ, ZX-RELAY16 ºÍà ´ ¢ÑºÃÕàÅ 16 ª ͧ , DS1621 äÍ«ÕÇ´Ñ ÍسËÀÙÁ,Ô SHT11 âÁ´ÙÅÇÑ´¤ÇÒÁª×¹é ÊÑÁ¾Ñ·¸ à» ¹µ ¹
ZX-RELAY16 ºÍà ´¢ÑºÃÕàÅ 16 ª ͧ¼ Ò¹ÃкººÑÊ I2C CMPS03 âÁ´ÙÅà¢çÁ·ÔÈ´Ô¨µÔ ÍÅ
32 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
(3) RC6 áÅÐ RC7
(3.1) ÍÔ¹¾Øµ´Ô¨µÔ ÍÅ à¾×Íè ÃѺÊÑÒ³Åͨԡ 0 áÅÐ 1 ¨Ò¡ÍØ»¡Ã³ ÀÒ¹͡ (3.2) àÍÒµ ¾µØ ´Ô¨µÔ ÍÅ à¾×Íè Ê §ÊÑÒ³Åͨԡ 0 áÅÐ 1 ä»ÂѧÍØ»¡Ã³ ÀÒ¹͡ (3.3) ¢ÒÊíÒËÃѺÊ×èÍÊÒâ ÍÁÙÅ͹ءÃÁ â´Â¢Ò¾Íà µ¹Õéàª×èÍÁµ ͡ѺâÁ´ÙÅÊ×èÍÊÒâ ÍÁÙŠ͹ءÃÁËÃ×Í USART ÀÒÂã¹ PIC16F887 ´Ñ§¹Ñ¹é ¨Ö§ÊÒÁÒö¹íÒä»ãª àª×Íè Áµ ͡ѺÍØ»¡Ã³ ÀÒ¹͡ÃÇÁ ·Ñ駾Íà µÍ¹Ø¡ÃÁ¢Í§¤ÍÁ¾ÔÇàµÍà à¾×èÍÊ×èÍÊÒâ ÍÁÙÅ͹ءÃÁÃÐËÇ Ò§¡Ñ¹áÅСѹ â´Â¢Ò RC6 à» ¹¢Ò ÃѺ¢ ÍÁÙÅ͹ءÃÁ (RxD) áÅÐ¢Ò RC7 à» ¹¢ÒÊ §¢ ÍÁÙÅ͹ءÃÁ (TxD) 㹡óշÕèµ Í§¡ÒÃàª×èÍÁµ ͡Ѻ ¾Íà µÍ¹Ø¡ÃÁ¢Í§¤ÍÁ¾ÔÇàµÍà ¨Ðµ ͧµ ͢ҷѧé Êͧ¹Õ¼é Ò ¹Ç§¨Ãá»Å§ÃдѺÊÑÒ³´ ÇÂäÍ«Õ·ÃÒ¹«Õ¿ àÇÍà àºÍà MAX232 à» ¹µ ¹ ¹Í¡¨Ò¡¹Ñé¹ÂѧÊÒÁÒöµ Í¢Ò¾Íà µ·Ñé§Êͧ¹Õé¡ÑºÍØ»¡Ã³ Ê×èÍÊÒâ ÍÁÙŠ͹ءÃÁẺäà ÊÒ ÍÒ·Ô ZX-BLUETOOTH à¾×èÍÃÑºÊ §¢ ÍÁÙÅ͹ءÃÁ¡Ñº¤ÍÁ¾ÔÇàµÍà ËÃ×Íâ·ÃÈѾ· à¤Å×Íè ¹·Õ¼è Ò ¹ÃкººÅÙ·¸Ù , âÁ´ÙÅ XBee áÅÐ XBee PRO ¾×Íè ÃÑºÊ §¢ ÍÁÙÅ͹ءÃÁ¼ Ò¹Ãкº ZIGBEE, ZX-SERVO16 ºÍà ´¢Ñºà«Íà âÇàµÍà 16 ª ͧ, ZX-17 ºÍà ´°Ò¹àÇÅÒ¹ÒÌ ¡Ò¨ÃԧẺ͹ءÃÁ, ZX-19 ºÍà ´ºÑ¹·Ñ¡áÅÐàÅ ¹¡ÅѺàÊÕ§Ẻ͹ءÃÁ, ZX-44 ºÍà ´ÊÇÔµª àÁµÃÔ¡« 4x4 ¨Ø´ à» ¹µ ¹
ZX-BLUETOOTH âÁ´ÙÅÊ×Íè ÊÒà ¢ ÍÁÙÅäà ÊÒ¼ Ò¹ºÅÙ·¸Ù ZX-44 ºÍà ´ÊÇÔµª àÁµÃÔ¡« 4x4 ¨Ø´ XBee-PRO
ZX-SERVO16ºÍà ´ ¢Ñ º à«Íà âÇÁÍàµÍà 16 ª ͧ
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 33
3.2.5 ǧ¨Ã¢ÑºÁÍàµÍà 俵ç
¡ÒâѺÁÍàµÍà 俵ç¢Í§ºÍà ´ RBX-877 㪠äÍ«ÕàºÍà L293D ÊÒÁÒö¢ÑºÁÍàµÍÃ ä¿µÃ§ä´ 2 ª ͧ â´Â¡íÒ˹´à» ¹ª ͧ M-1 áÅÐ M-2 â´Âǧ¨Ã¢ÑºÁÍàµÍà ªÍ § M-1 ä´ ÃºÑ ¡ÒäǺ¤ØÁ¨Ò¡¢Ò RD0 ¡Ñº RD1 áÅÐàÍç¹àÍàºÔÅ¡Ò÷íÒ§Ò¹´ ÇÂ¢Ò RC2 ã¹¢³Ð·Õªè Í § M-2 ä´ ÃºÑ ¡ÒäǺ¤ØÁ¨Ò¡¢Ò¾Íà µ RB1 ¡Ñº RB2 áÅÐàÍç¹àÍàºÔÅ¡Ò÷íÒ§Ò¹´ Ç¢ҾÍà µ RC1 ·Õàè ÍÒµ ¾µØ ¢Í§Ç§¨Ã¢ÑºÁÍàµÍà ·§Ñé Êͧª ͧÁÕ LED 2 ÊÕ áÊ´§¼Å¡Ò÷íÒ§Ò¹¢Í§ÁÍàµÍà (ÊÕà¢ÕÂÇᨠ§¡Òè ÒÂ俵ç¢ÑÇé áÅÐÊÕᴧᨠ§¡Òè Ò¡ÅѺ¢ÑÇé ) ÊíÒËÃѺ¢ÒàÍç¹àÍàºÔÅ¹Ñ¹é ¹Í¡¨Ò¡¹íÒÁÒ㪠àÍç¹àÍàºÔÅËÃ×Íà» ´» ´¡Ò÷íÒ§Ò¹¢Í§Ç§¨Ã¢ÑºÁÍàµÍà ᵠÅеÑÇáÅ Ç Âѧ㪠¤Çº¤ØÁ¤ÇÒÁàÃçÇ㹡ÒÃËÁع¢Í§ÁÍàµÍÃ ä´ ´Ç  â´Â» ͹ÊÑÒ³ PWM ࢠҷբè ÒàÍç¹àÍ àºÔŹÕáé ·¹ ´Ñ§ÃÙ»
34 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
3.2.6 Ê Ç¹¢Ñºà«Íà âÇÁÍàµÍÃ
¢Ò RB4, RB5 áÅÐ RC5 㪠ÊÒí ËÃѺ¢Ñºà«Íà âÇÁÍàµÍà â´Âä¿àÅÕÂé §¢Í§à«Íà âÇÁÍàµÍÃ ä´ ÁÒ â´ÂµÃ§¨Ò¡áºµàµÍÃÕè à¾×Íè ãË Á¡Õ ÃÐáÊÁÒ¡¾Í·Õãè ª ¢ºÑ ÁÍàµÍà ઠ¹à´ÕÂǡѺÁÍàµÍà 俵ç ¡ÒÃÊÑ§è §Ò¹ ¨Ò¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 㪠¡Òû ͹ÊÑÒ³¾ÑÅÊ à¾×èͤǺ¤ØÁ¡ÒÃËÁع¢Í§á¡¹à«Íà âÇÁÍàµÍÃ
3.2.7 ǧ¨ÃÊÇÔµª à¾×èÍãË ºÍà ´ RBX-877 à» ¹ºÍà ´¤Çº¤ØÁ·ÕèÊÁºÙó ¾Ã ÍÁ ´Ñ§¹Ñé¹ ¹Í¡¨Ò¡¨ÐÁÕâÁ´ÙÅ LCD à¾×Íè áÊ´§¢ ͤÇÒÁµ Ò§æ áÅ Ç ¡ÒÃÃѺ¢ ÍÁÙŨҡ¼Ùã ª ¡¨ç СÃзíÒ¼ Ò¹ÊÇÔµª â´Âº¹ºÍà ´ÁÕǧ¨ÃÊÇÔµª ¡´µÔ´»Å Í´Ѻ 2 ª ͧ «Ö§è µ ÍࢠҡѺ¢Ò¾Íà µ RA4 áÅÐ RB0 ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ÊíÒËÃѺ¢Ò RB0 ¹Ñ¹é ¨Ðà» ¹µíÒá˹ §¢Òà´ÕÂǡѺ¢Ò¾Íà µÍÔ¹¾ØµÍÔ¹àµÍÃ Ã»Ñ µ ¨Ö§·íÒãË ÊÇÔµª ·¢Õè Ò RB0 ÊÒÁÒö㪠Êà ҧÊÑÒ³ÍÔ¹àµÍà ÃÑ»µ àÁ×èÍ¡´ÊÇÔµª ä´ ´ Ç º¹ºÍà ´ RBX-877 ÂѧÁÕÊÇÔµª ¡´µÔ´»Å Í´ѺÍÕ¡Ë¹Ö§è µÑÇ ¹Ñ¹è ¤×Í ÊÇÔµª RESET «Ö§è µ ÍࢠҡѺ ¢Ò RE3/MCLR â´Â»¡µÔ¨Ð㪠§Ò¹à» ¹¢ÒÃÕ૵¡Ò÷íÒ§Ò¹¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ᵠ¼Ù 㪠§Ò¹ ÊÒÁÒö¡íÒ˹´¤ Ҥ͹¿ ¡ãËÁ à¾×Íè 㪠§Ò¹¢Ò¹Õàé » ¹¢ÒÍÔ¹¾Øµ´Ô¨µÔ ÍÅä´ â´Â¢Ò¹Õ¨é СÅÒÂà» ¹¢Ò¾Íà µ RE3 á·¹ ÊÇÔµª RESET ËÃ×Í RE3
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 35
3.2.8 ᨠ¡ ICD2 : ¨Ø´µ Íà¤Ã×Íè §â»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ÀÒ¹͡ 㹡ÒÃ㪠§Ò¹ºÍà ´ RBX-877 ¨Ðµ ͧÁÕ¡ÒþѲ¹Òâ»Ãá¡ÃÁº¹¤ÍÁ¾ÔÇàµÍà à¾×Íè ãË ä´ ä¿Å ¼ÅÅѾ¸ ¹ÒÁÊ¡ØÅ .hex ¨Ò¡¹Ñé¹¹íÒä¿Å .hex ä»·íÒ¡ÒÃâ»Ãá¡ÃÁŧã¹Ë¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ¢Í§ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 㹪ش Robo-PICA ä´ àµÃÕÂÁºÍà ´ÊíÒËÃѺâ»Ãá¡ÃÁäÇ ¾Ã ÍÁ â´ÂºÍà ´â»Ãá¡ÃÁ¹Ñé¹µ ͧ·íÒ§Ò¹¡Ñº¤ÍÁ¾ÔÇàµÍà â´Âµ ÍࢠҡѺ¾Íà µ USB áÅ Ç㪠«Í¿µ áÇà PICkit2 Programming 㹡ÒÃâ»Ãá¡ÃÁ¢ ÍÁÙÅŧã¹äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 â´Â¡ÒõԴµ ÍÃÐËÇ Ò§ºÍà ´â»Ãá¡ÃÁ¡ÑººÍà ´ RBX-877 ¹Ñ¹é ¨Ð¡ÃзíÒ¼ ҹᨠ¡ ICD2 ´Ñ§ÃÙ» ºÍà ´â»Ãá¡ÃÁ PIC
ÊÒÂ ICD2
4.8-6V
RC7 RxD DOWNLOAD
POWER
RC6 TxD
RC4 SDA
RC3 SCL LCD back light
ICD2
ON ON
M-1 M-2
S+
SERVO #1 #2
#3
µ ͡Ѻ¾Íà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍÃ
Sound RC0
LCD
BATT
RA4
RESET
RB0
Robo - PICARRobotR PICRMicroRobotic RB3 RB0/INT
RA0
RA1
RA2
RA3
RA5
RE0
RE1
RE2
36 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
3.3 ÃÒÂÅÐàÍÕ´ÊÒÂÊÑÒ³·Õãè ª 㹪ش Robo-PICA 3.3.1 ÊÒ ICD2 㪠㹡ÒÃàª×Íè Áµ ͺÍà ´â»Ãá¡ÃÁ¡ÑººÍà ´à» ÒËÁÒÂ ã¹·Õ¹è ¤Õé Í× ºÍà ´ RBX-877 ÁÕ¡ÒèѴÊÒ ÊÑÒ³´Ñ§¹Õé ᨠ¡ ICD2 Vdd
~ ~
µ Íä»ÂѧºÍà ´ RBX-877
PGC
PGM PGD
$
GND
Vdd
~ ~
PGM PGD
ÊÒÂ ICD2
Vpp
º¹ºÍà ´â»Ãá¡ÃÁ
PGM PGD
PGC GND Vpp
PGM PGC PGD GND Vdd Vpp
¡ÒèѴ¢Ò¢Í§á¨ ¡ ICD2 ·ÕèºÍà ´ RBX-877 ¡ÒèѴ¢Ò¢Í§á¨ ¡áÅлÅÑê¡·Ñé§ËÁ´Áͧ¨Ò¡´ Ò¹º¹ (top view) PGC
GND Vpp
Vdd
3.3.2 ÊÒ JST3AA-8 㪠àª×Íè Áµ ÍÃÐËÇ Ò§ºÍà ´ RBX-877 ¡Ñºá¼§Ç§¨ÃµÃǨ¨ÑºáÅÐἧǧ¨ÃÍØ»¡Ã³ µÒ §æ à» ¹ÊÒ ᾠ3 àÊ ¹ ÂÒÇ 8 ¹ÔÇé »ÅÒÂÊÒ·ѧé Êͧ´ Ò¹µÔ´µÑ§é ¤Í¹à¹ç¡àµÍà Ẻ JST 3 ¢Ò µÑÇàÁÕ ÃÐÂÐË Ò§ÃÐËÇ Ò§¢Ò 2 ÁÔÅÅÔàÁµÃ ÁÕ¡ÒèѴ¢Ò´Ñ§¹Õé ÃÐÂÐË Ò§ÃÐËÇ Ò§¢Ò 2 ÁÁ. GND S +5V
ÃÐÂÐË Ò§ÃÐËÇ Ò§¢Ò 2 ÁÁ.
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 37
3.4 ¢Ñ¹é µÍ¹¡ÒþѲ¹Òâ»Ãá¡ÃÁÊíÒËÃѺËع ¹µ Robo-PICA ã¹ÃÙ»·Õè 3-3 áÊ´§¼Ñ§§Ò¹¢Í§¢Ñ鹵͹㹡ÒþѲ¹Òâ»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ¤Çº¤ØÁáÅÐ ·´Êͺ¡Ò÷íÒ§Ò¹¢Í§ºÍà ´ RBX-877 áÅÐËع ¹µ Robo-PICA ¨ÐàËç¹ä´ ÇÒ ÁÕ«Í¿µ áÇà ·àÕè ¡ÕÂè Ç¢ ͧ 2 µÑǤ×Í mikroC IDE áÅÐ PICkit2TM Programming ÊÒÁÒöÊÃػ໠¹¢Ñ¹é µÍ¹ä´ ´§Ñ ¹Õé àÃÔèÁµ ¹ à¢Õ¹«Íà Êâ»Ãá¡ÃÁÀÒÉÒ C ´ Ç mikroC IDE
¤ÍÁä¾Å â»Ãá¡ÃÁ
á¡ ä¢â»Ãá¡ÃÁ
µÃǨÊͺäÇ¡ó ¢Í§â»Ãá¡ÃÁ
äÇ¡ó ¼Ô´¾ÅÒ´
äÁ ÁÕ¢ ͼԴ¾ÅÒ´ ä´ ä¿Å ¼ÅÅѾ¸ à» ¹ä¿Å ¹ÒÁÊ¡ØÅ .hex àª×èÍÁµ ͺÍà ´ RBX-877 ࢠҡѺºÍà ´â»Ãá¡ÃÁ ´Òǹ âËÅ´ä¿Å .hex ä»Âѧ ºÍà ´ RBX-877 ´ Ç«Ϳµ áÇà PICkit2
Ãѹâ»Ãá¡ÃÁ
¡Ò÷íÒ§Ò¹¶Ù¡µ ͧËÃ×ÍäÁ ?
·íÒ§Ò¹äÁ ¶Ù¡µ ͧ
·íÒ§Ò¹¶Ù¡µ ͧ àÊÃç¨ÊÔ鹡ÒþѲ¹Òâ»Ãá¡ÃÁ
ÃÙ»·Õè 3-3 áÊ´§¢Ñ¹é µÍ¹ã¹¡ÒþѲ¹Òâ»Ãá¡ÃÁÀÒÉÒ C ¢Í§ Robo-PICA
38 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
(1) à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C º¹¤ÍÁ¾ÔÇàµÍà ´Ç  mikroC IDE (2) ¤ÍÁä¾Å â»Ãá¡ÃÁ µÃǨÊͺ¢ ͼԴ¾ÅÒ´·Ò§äÇ¡ó µÒ § æ (3) ¶ ÒÁÕ¢Í ¼Ô´¾ÅÒ´ãË ·Òí ¡ÒÃᡠ䢢 ͼԴ¾ÅÒ´áÅ Ç·íÒµÒÁ¢ Í 2 ÍÕ¡¤Ãѧé (4) ËÅѧ¨Ò¡¤ÍÁä¾Å áÅÐäÁ Á¢Õ Í ¼Ô´¾ÅÒ´áÅ Ç mikroC IDE ¨ÐÊà ҧä¿Å ¼ÅÅѾ¸ ¹ÒÁÊ¡ØÅ .hex «Öè§à» ¹â»Ãá¡ÃÁÀÒÉÒà¤Ã×èͧ (5) à» ´â»Ãá¡ÃÁ PICkit2TM Programming Software (6) àª×Íè Áµ ÍÊÒÂÊÑÒ³ ICD2 ÃÐËÇ Ò§ºÍà ´â»Ãá¡ÃÁ¡Ñº RBX-877 ºÍà ´¤Çº¤ØÁËÅÑ¡¢Í§ Ëع ¹µ Robo-PICA ¼ Ò¹·Ò§á¨ ¡ ICD2 (7) ´Òǹ âËÅ´â»Ãá¡ÃÁä»Âѧ Robo-PICA áŠǵÃǨÊͺ¼Å¡Ò÷íÒ§Ò¹Ç Ò ¶Ù¡µ ͧµÒÁµ ͧ¡Òà ËÃ×ÍäÁ ¶ ÒäÁ ãË ¡ÅѺä»á¡ ä¢â»Ãá¡ÃÁ áŠǤÍÁä¾Å â»Ãá¡ÃÁµÒÁ¢Ñ¹é µÍ¹·Õè (2) ÍÕ¡¤Ãѧé
3.5 µÑÇÍ ҧ¡ÒþѲ¹Òâ»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺËع ¹µ Robo-PICA ´ Ç mikroC IDE (1) à» ´â»Ãá¡ÃÁ mikroC IDE ¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§ËÅÑ¡¢Í§â»Ãá¡ÃÁ´Ñ§ÃÙ»
˹ Òµ Ò§ÊíÒËÃѺà¢Õ¹â»Ãá¡ÃÁ àºÍà ª»Ô ·Õàè Å×Í¡ãª
¤ÇÒÁ¶ÕÍè ÍÊ«ÔÅàÅàµÍà ·àÕè Å×Í¡ãª
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 39
(2) Êà ҧâ»Ãà¨ç¡µ ãËÁ â´Âä»·Õàè Á¹Ù Project àÅ×Í¡ New Project...
¨Ð»ÃÒ¡¯Ë¹ Òµ Ò§ New Project ¢Ö¹é ÁÒ â´Â¨Ðµ ͧ¡íÒ˹´ÃÒÂÅÐàÍÕ´µ Ò§ æ ´Ñ§¹Õé
(2.1) Project Name ¡íÒ˹´ª×Íè â»Ãà¨ç¡µ «Ö§è â»Ãá¡ÃÁ¨ÐÊà ҧâ¿Åà´Íà 㹪×Íè ¹Õ¢é ¹Öé ÁҾà ÍÁ·Ñ§é ª×Íè ä¿Å «Íà Ê⤠´¨Ðà» ¹ª×Íè à´ÕÂǡѺ Project name ã¹·Õ¹è ¡Õé Òí ˹´ª×Íè Ç Ò Blink_LED (2.2) Project Path à» ¹¡ÒáíÒ˹´µíÒá˹ §â¿Åà´Íà ÊÒí ËÃѺà¡çºâ»Ãá¡ÃÁ ÊÒÁÒö ¡´»ØÁ Browse à¾×Íè àÅ×Í¡µíÒá˹ §·Õµè Í §¡ÒÃä´ ¨Ò¡µÑÇÍ ҧ¡íÒ˹´à» ¹ D:\Robo-PICA\
40 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
(2.3) Description à» ¹¾×¹é ·ÕÊè Òí ËÃѺÃкØÃÒÂÅÐàÍÕ´à¡ÕÂè ǡѺâ»Ãà¨ç¡µ ·ÊÕè à ҧ¢Ö¹é ¨ÐÃÐºØ ËÃ×ÍäÁ ¡äç ´ ã¹·Õ¹è ãÕé Ê ¢Í ¤ÇÒÁÇ Ò Robo PICA Code Blinking LED on RB3 (2.4) Device à» ¹ª ͧÊíÒËÃѺ¡íÒ˹´àºÍà äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·àÕè Å×͡㪠§Ò¹ à¹×Íè § ¨Ò¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC áµ ÅÐàºÍà ÁդسÊÁºÑµÔäÁ àËÁ×͹¡Ñ¹ ¨Ö§µ ͧàÅ×Í¡àºÍà ¢Í§äÁâ¤Ã ¤Í¹â·ÃÅàÅÍà PIC ãË ¶Ù¡µ ͧ ÊíÒËÃѺºÍà ´ RBX-877 áÅÐËØ ¹Â¹µ Robo-PICA àÅ×͡㪠äÁâ¤Ã ¤Í¹â·ÃÅàÅÍà àºÍà PIC16F887 ¨Ö§¡íÒ˹´à» ¹ PIC16F887 (2.5) Clock 㪠¡Òí ˹´¤ Ò¤ÇÒÁ¶ÕÊè Ñ Ò³¹ÒÌ ¡Ò·Õãè ª ¡ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC â´Âº¹ºÍà ´ RBX-877 㪠à«ÃÒÁÔ¡àÃâ«à¹àµÍà 20MHz ¨Ö§¡íÒ˹´¤ÇÒÁ¶ÕÊè Ñ Ò³¹ÒÌ ¡Òà» ¹ 020.000000 (2.6) Device Flags à» ¹ª ͧÊíÒËÃѺ¡íÒ˹´¤ ҤسÊÁºÑµÔ·Ò§ÎÒà ´áÇà ËÃ×ͤ͹¿ ¡Ù àêÑè¹ (configuration) ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC àºÍà ·ÕèàÅ×͡㪠§Ò¹ ã¹·Õè¹Õé¨Ð㪠¤ ÒÁҵðҹ «Ö§è ¡íÒ˹´ä´ §Ò Âæ à¾Õ§¤ÅÔ¡·Õ»è ÁØ Default «Ö§è ¡íÒ˹´¤Ø³ÊÁºÑµËÔ ÅÑ¡æ à¾Õ§ 3 µÑǤ×Í (2.6.1) HS_OSC àÅ×Í¡ª¹Ô´¢Í§Ç§¨Ã¡íÒà¹Ô´ÊÑÒ³¹ÒÌ ¡Òà» ¹áºº HS ËÃ×Í High Speed Oscillator (2.6.2) WDT_OFF à» ¹¡ÒÃàÅ×Í¡´ÔÊàÍàºÔÅËÃ×Í¡àÅÔ¡¡Ò÷íÒ§Ò¹¢Í§ Ç͵ª ´çÍ¡ä·àÁÍà (2.6.3) LVP_OFF à» ¹¡ÒÃàÅ×Í¡´ÔÊàÍàºÔÅËÃ×Í¡àÅÔ¡¤ÇÒÁÊÒÁÒö㹡Òà â»Ãá¡ÃÁ˹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ´ ÇÂáç´Ñ¹µèÒí ËÃ×Í Low Voltage Programming àÁ×èÍ¡íÒ˹´¤ ÒàÃÕºà ÍÂáÅ ÇãË ¡´»Ø Á OK â»Ãá¡ÃÁ¨Ð» ´Ë¹ Òµ Ò§ New Project áÅÐÊà ҧä¿Å Blink_LED.C ¾Ã ÍÁ¾×¹é ·ÕÇè Ò § æ ÊíÒËÃѺ¡ÒÃà¢Õ¹â»Ãá¡ÃÁ (3) à¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ´Ñ§¹Õé void main() { TRISB.F3=0; while(1) { PORTB.F3=0; Delay_ms(500); PORTB.F3=1; Delay_ms(500); } }
// Set RB3 ==> Output // Infinite Loop // LED_ON // LED_OFF
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 41
(4) ¤ÅÔ¡»ØÁ Build Project ËÃ×Í¡´¤ÕÂÅ ´Ñ Ctrl+F9 à¾×Íè ¤ÍÁä¾Å â»Ãá¡ÃÁ
(5) Êѧࡵ¢ ͼԴ¾ÅÒ´·Õè˹ Òµ Ò§ Message ´ ҹŠҧ ¶ ÒäÁ ÁÕ¢ ͼԴ¾ÅÒ´ ˹ Òµ Ò§ Message ¨Ðᨠ§¢¹Ò´¢Í§Ë¹ ǤÇÒÁ¨íÒâ»Ãá¡ÃÁ·Õãè ª áÅÐáÊ´§¢ ͤÇÒÁ Success à¾×Íè ºÍ¡Ç Ò äÇ¡ó ·àÕè ¢Õ¹ ¢Öé¹¹Ñ鹶١µ ͧ
(6) àª×Íè Áµ ͺÍà ´â»Ãá¡ÃÁäÁâ¤Ã¤Í¹â·ÃšѺ RBX-877 ºÍà ´¤Çº¤ØÁ¢Í§Ëع ¹µ RoboPICA ´ ÇÂÊÒ ICD2 áÅе ÍÊÒ¨ҡºÍà â»Ãá¡ÃÁࢠҡѺ¤ÍÁ¾ÔÇàµÍà ¼Ò ¹¾Íà µ USB à» ´ä¿àÅÕÂé § ¨ ÒÂä¿ãË ¡ºÑ Robo-PICA ºÍà ´â»Ãá¡ÃÁ PIC
ÊÒÂ ICD2
4.8-6V
Sound RC0
LCD
BATT
RC7 RxD
RC6 TxD
RC4 SDA
RC3 SCL
DOWNLOAD
POWER
ON ON
M-1 M-2
S+
SERVO #1 #2
#3
µ ͡Ѻ¾Íà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍÃ
LCD back light
ICD2
RA4
RESET
RB0
Robo - PICARRobotR PICRMicroRobotic RB3 RB0/INT
RA0
RA1
RA2
RA3
RA5
RE0
RE1
RE2
42 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
(7) à» ´â»Ãá¡ÃÁ PICkit2TM Programming «Í¿µ áÇà ¨ÐµÃǨÊͺ¡ÒÃàª×èÍÁµ ÍáÅÐàºÍà ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ·Õàè ª×Íè Áµ Í´ ÇÂÍ ҧÍѵâ¹ÁÑµÔ áŠǨÐᨠ§àºÍà ·¾Õè ºà» ¹ PIC16F887
(8) àÅ×Í¡ä¿Å .hex ·Õèµ Í§¡ÒÃâ»Ãá¡ÃÁ â´Âä»·ÕèàÁ¹Ù File àÅ×Í¡ Import Hex ¨ÐÁÕ˹ Òµ Ò§ ÊíÒËÃѺ໠´ä¿Å *.hex ·Õµè Í §¡ÒÃâ»Ãá¡ÃÁŧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà 㹷չè àÕé Å×Í¡ä»·Õäè ´Ã¿ D:\RoboPICA\Blink_LED àÅ×Í¡ä¿Å ªÍ×è Blink_LED.hex
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 43
(9) ¤ÅÔ¡»ØÁ Write à¾×Íè ´Òǹ âËÅ´â»Ãá¡ÃÁä»ÂѧºÍà ´ RBX-877 ¢Í§Ëع ¹µ Robo-PICA
(10) Êѧࡵ¼Å·Õàè ¡Ô´¢Ö¹é LED ·Õµè Òí á˹ § RB3 º¹ºÍà ´ RBX-877 ¢Í§Ëع ¹µ Robo-PICA ¨ÐµÔ´áÅдѺÊÅѺ¡Ñ¹Í ҧµ Íà¹×èͧ
¡Ô¨¡ÃÃÁ·Õè 2
·´ÊͺºÍà ´¤Çº¤ØÁ
㹡Ԩ¡ÃÃÁ¹Õ¹é Òí àʹͶ֧¡ÒÃàÃÔÁè µ ¹¾Ñ²¹Òâ»Ãá¡ÃÁÀÒÉÒ C à¾×Íè ¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§äÁâ¤Ã ¤Í¹â·ÃÅàÅÍà PIC16F887 㹡ÒõԴµ ͡ѺÍØ»¡Ã³ ÀÒ¹͡·ÕèÁÕÍÂÙ º¹ºÍà ´ RBX-877 ·Ñ駹Õéà¾×èÍ ·´Êͺ¡Ò÷íÒ§Ò¹ã¹Ê ǹµ Ò§æ ¢Í§ºÍà ´¤Çº¤ØÁ RBX-877 áÅÐà¾×Íè àµÃÕÂÁ¤ÇÒÁ¾Ã ÍÁ¡ ͹ࢠÒÊÙ¡ Òà ¾Ñ²¹Òâ»Ãá¡ÃÁà¾×Íè »¯ÔºµÑ ÀÔ ÒÃСԨ·Õ«è ºÑ « ͹¢Ö¹é ã¹áµ ÅСԨ¡ÃÃÁ¢Í§Ëع ¹µ Robo-PICA
¡Ô¨¡ÃÃÁ·Õè 2-1 áÊ´§¼Å´ Ç LED ¨Ò¡ÃÙ»·Õè A2-1 äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 µ ͡Ѻ LED ·Õè¢Ò¾Íà µ RB3 ã¹áºº¡ÃÐáÊ«ÍÃ Ê (¢Ñº¡ÃÐáÊÍÍ¡¨Ò¡¢Ò¾Íà µ) â´ÂÁÕµÇÑ µ Ò¹·Ò¹ 510Ω ·íÒ˹ Ò·Õ¨è Òí ¡Ñ´¡ÃÐáÊãË ¡ºÑ LED ´Ñ§¹Ñ¹é ¡ÒâѺãË LED µÔ´ÊÇ Ò§¨Ö§µ Í§Ê §ÊÑÒ³Åͨԡ 1 ÍÍ¡ä»·Ò§¢Ò RB3 áÅж Ò» ͹ÊÑÒ³Åͨԡ 0 LED ¨Ð´Ñº ¢Ò¾Íà µ RB3 ÊÒÁÒö¡íÒ˹´ãË ·Òí §Ò¹à» ¹ä´ ·§Ñé ÍÔ¹¾ØµÍйÒÅÍ¡ ÍÔ¹¾Øµ´Ô¨µÔ ÍÅ áÅÐàÍÒµ ¾µØ ´Ô¨µÔ ÍŠ㹡Ԩ¡ÃÃÁ¹Õµé Í §¡ÒÃãË ¢Ò¹Õàé » ¹¢Ò¾Íà µàÍÒµ ¾µØ ´Ô¨µÔ ÍŠ㹡ÒÃà¢Õ¹â»Ãá¡ÃÁ¨Ö§µ ͧà¢Õ¹¢ ÍÁÙÅ 0 ãË ¡ºÑ ºÔµ 3 ¢Í§ÃÕ¨ÊÔ àµÍà TRISB Íѹ໠¹¡ÒáíÒ˹´ÃٻẺ¡Ò÷íÒ§Ò¹¢Í§¢Ò¾Íà µ RB3 A2.1.1 à¢Õ¹â»Ãá¡ÃÁ·Õè A2-1 ´ Ç mikroC IDE ·íÒ¡ÒäÍÁä¾Å ãË ä´ ä¿Å ¼ÅÅѾ¸ .hex A2.1.2 àª×Íè Áµ ͺÍà ´â»Ãá¡ÃÁࢠҡѺºÍà ´ RBX-877 ¢Í§Ëع ¹µ Robo-PICA áÅоÍà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍà A2.1.3 ´Òǹ âËÅ´â»Ãá¡ÃÁä»ÂѧºÍà ´ RBX-877 Êѧࡵ¼Å¡Ò÷íÒ§Ò¹ LED ·Õµè Òí á˹ § RB3 µÔ´¤ Ò§
44 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
+5V 11
32
C6 0.1µF 50V
+5V
1+! 21+ $.&&%
R5 4k7 SW2 4-5-6
1 R6 1k
MCLR RB3
LED3 4*! 36 12 31
CR1 Ceramic Resonator 20MHz
13
R10 510
14
ÃÙ»·Õè A2-1áÊ´§Ç§¨ÃáÅеíÒá˹ §¡Òõ Í LED º¹ RBX-877 ºÍà ´¤Çº¤ØÁËÅÑ¡¢Í§Ëع ¹µ Robo-PICA void main() { TRISA.F1=0; PORTA.F1=1; }
// Set RB3 ==> Output // Turn on RB3
¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¹Õ·é Òí §Ò¹ 2 ¢Ñ¹é µÍ¹¤×Í ¢Ñ¹é µÍ¹áá¡íÒ˹´ãË ¢Ò RB3 à» ¹àÍÒµ ¾µØ ´Ô¨µÔ ÍÅ¡ ͹ ¨Ò¡¹Ñ¹é ¨Ö§ ¡íÒ˹´ãË ¢Ò RB3 ÁÕÅͨԡ໠¹ 1
â»Ãá¡ÃÁ·Õè A2-1 ä¿Å rb3_led01.c ¡íÒ˹´ãË LED ·Õµè Í ÍÂÙ¡ ºÑ ¢Ò RB3 ¢Í§ PIC16F887 µÔ´ÊÇ Ò§
Programming Note ã¹â»Ãá¡ÃÁÀÒÉÒ C ¢Í§ mikroC ÊÒÁÒöࢠҶ֧¢ ÍÁÙÅã¹ÃдѺºÔµä´ â´Â¡Òõ Í· Òª×Íè ¢Í§ÃÕ¨ÊÔ àµÍà ´Ç Âà¤Ã×Íè §ËÁÒ . áŠǵÒÁ´ Ç F0 ¶Ö§ F7 «Ö§è ËÁÒ¶֧ ºÔµ 0 ¶Ö§ºÔµ 7 ઠ¹ PORTB.F0=1 ;
ËÁÒ¶֧ ¡íÒ˹´ãË ºµÔ 0 ¢Í§ÃÕ¨ÊÔ àµÍà PORTB à» ¹ 1 ËÃ×Í RB0 à» ¹ 1
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 45 void main() { TRISB.F3=0; while(1) { PORTB.F3=1; Delay_ms(500); PORTB.F3=0; Delay_ms(500); } }
// RB3==> Output // Infinite Loop // // // //
"1" ==> RB3 Delay "0" ==> RB3 Delay
¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¹Õãé ª ¤Òí Êѧè while à¾×Íè ǹÅÙ»Êѧè ãË LED µÔ´áÅдѺÊÅѺ¡Ñ¹ â´ÂÁÕ¡ÒÃ˹ ǧàÇÅÒÃËÇ Ò§¡Òà µÔ´´Ñº 500 ÁÔÅÅÔÇ¹Ô Ò·Õ ËÃ×Í 0.5 ÇÔ¹Ò·Õ
â»Ãá¡ÃÁ·Õè A2-2 ä¿Å rb3_led02.c ÊíÒËÃѺ¤Çº¤ØÁãË LED ·Õµè Í ÍÂÙ¡ ºÑ ¢Ò RB3 ¢Í§ PIC16F887 ¡Ð¾ÃÔº A2.1.4 á¡ ä¢â»Ãá¡ÃÁãË à» ¹ä»µÒÁâ»Ãá¡ÃÁ·Õè A2-2 ¨Ò¡¹Ñ¹é ·íÒ¡ÒäÍÁä¾Å áÅ Ç´Òǹ âËÅ´â»Ãá¡ÃÁä»ÂѧºÍà ´ RBX-877 ÍÕ¡¤Ãѧé à¾×Íè ·´Êͺ¡Ò÷íÒ§Ò¹ àÁ×Íè Ãѹâ»Ãá¡ÃÁ LED ·Õ¢è Ò RB3 µÔ´áÅдѺÊÅѺ¡Ñ¹ã¹ÍѵÃÒ 0.5 ÇÔ¹Ò·Õ
¡Ô¨¡ÃÃÁ·Õè 2-2 Í Ò¹¤ ÒÍÔ¹¾Øµ´Ô¨µÔ ÍŨҡ¡ÒõÃǨÊͺ¡Òá´ÊÇÔµª
º¹ºÍà ´ RBX-877 ÁÕÊÇÔµª ¡´µÔ´»Å Í´ѺµÔ´µÑ§é ÍÂÙ 3 µÑÇ µÑÇË¹Ö§è ¡íÒ˹´ãË à» ¹ÊÇÔµª RESET Ê Ç¹ 2 µÑÇ·Õàè ËÅ×Íà» ¹ÊÇÔµª à͹¡»ÃÐʧ¤ ¢¹Öé ÍÂÙ¡ ºÑ ¡ÒáíÒ˹´¨Ò¡¼Ùã ª §Ò¹ ÃÙ»·Õè A2-2 áÊ´§Ç§¨Ãàª×Íè Áµ ÍÊÇÔµª ࢠҡѺ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 áÅеíÒá˹ §·Õµè ´Ô µÑ§é ÊÇÔµª º¹ºÍà ´ RBX-877 ÊÇÔµª ¡´µÔ´»Å Í´Ѻã¹ÊÀÒÇл¡µÔ¨ÐÁÕÅͨԡ 1 ¨Ò¡µÑǵ Ò¹·Ò¹¾ÙÅÍÑ» àÁ×Íè ÁÕ¡Òá´ÊÇÔµª ¢Ò RB0 áÅÐ RA4 ¨Ð¶Ù¡µ Íŧ¡ÃÒÇ´ ·Òí ãË PIC16F887 ä´ ÃºÑ Åͨԡ 0 ·Õ¢è Ò¾Íà µ·Ñ§é Êͧ ¨¹¡Ç Ò¨ÐÁÕ¡ÒûŠÍÂÊÇÔµª
+5V +5V
R6 4k7
21+ $.&&% R7 4k7
6 33
K7 INT/RB0
R8 150
RESET RB0
RA4 RB0/INT
RA4 4)"
ÃÙ»·Õè A2-2 áÊ´§Ç§¨Ãàª×Íè Áµ ÍÊÇÔµª ࢠҡѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 áÅеíÒá˹ §¢Í§ÊÇÔµª
46 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
void main() { ANSELH.F4=0; TRISB.F3=0; while(1) { if(PORTB.F0==0) { PORTB.F3=1; } if(PORTA.F4==0) { PORTB.F3=0; } } }
PIC
// RB0 ==> Digital input // RB3 ==> Digital Output // Infinite Loop // Check RB0 Press ? // ON ==> RB3 // Check RA4 Press ? // OFF ==> RB3
¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¨Ð¡íÒ˹´ãË ¢Ò RB0 áÅÐ ¢Ò RA4 à» ¹¢ÒÍÔ¹¾Øµ´Ô¨µÔ ÍÅ Ê Ç¹¢Ò RB3 à» ¹¢ÒàÍÒµ ¾µØ ´Ô¨µÔ ÍÅ ¨Ò¡¹Ñ¹é ǹµÃǨÊͺ¡Òá´ÊÇÔµª àÁ×Íè ÊÇÔµª ·¢Õè Ò RB0 ¶Ù¡¡´ â»Ãá¡ÃÁ¨ÐÊ §¢ ÍÁÙÅ 1 ä»Âѧ¢Ò¾Íà µ RB3 ·íÒãË LED ·Õè RB3 µÔ´ÊÇ Ò§ àÁ×Íè ÊÇÔµª ·¢Õè Ò RA4 ¶Ù¡¡´ (¡ÅÒÂà» ¹ 0 ) â»Ãá¡ÃÁ¨ÐÊ §¢ ÍÁÙÅ 0 ä»Âѧ¢Ò ¾Íà µ RB3 ·íÒãË LED ·Õ¢è Ò RB3 ´Ñº
â»Ãá¡ÃÁ·Õè A2-3 ä¿Å SwitchTest.c â»Ãá¡ÃÁÊѧè à» ´» ´ LED ´ ÇÂÊÇÔµª RB0 áÅÐ RA4
à¢Õ¹â»Ãá¡ÃÁà¾×èÍÍ Ò¹¤ ÒÊÇÔµª ¡ÒõÃǨÊͺ¡Òá´ÊÇÔµª ¹¹Ñé à¹×Íè §¨Ò¡äÁ Á·Õ Ò§·ÃÒºÇ Ò ¨ÐÁÕ¡Òá´ÊÇÔµª àÁ×Íè 㴠㹡ÒþѲ¹Òâ»Ãá¡ÃÁ ¨Ö§µ ͧà¢Õ¹â»Ãá¡ÃÁã¹ÅѡɳÐǹÅÙ»ÃÍ áÅеÃǨÊͺ¡Òá´ÊÇÔµª â´Â㪠à§×Íè ¹ä¢ if àÁ×Íè à§×Íè ¹ä¢à» ¹¨ÃÔ§¡çãË â»Ãá¡ÃÁ·íÒ§Ò¹µÒÁà§×Íè ¹ä¢¹Ñ¹é æ â´Ââ»Ãá¡ÃÁµÑÇÍ ҧáÊ´§ã¹â»Ãá¡ÃÁ·Õè A2-3
¢Ñ鹵͹»¯ÔºÑµÔ¡Òà A2.2.1 à¢Õ¹â»Ãá¡ÃÁ·Õè A2-3 ´ Ç mikroC IDE ·íÒ¡ÒäÍÁä¾Å ãË ä´ ä¿Å ¼ÅÅѾ¸ .hex A2.2.2 àª×Íè Áµ ͺÍà ´â»Ãá¡ÃÁࢠҡѺºÍà ´ RBX-877 ¢Í§Ëع ¹µ Robo-PICA áÅоÍà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍà A2.2.3 ´Òǹ âËÅ´â»Ãá¡ÃÁä»ÂѧºÍà ´ RBX-877 ¨Ò¡¹Ñ¹é ·´Åͧ¡´ÊÇÔµª RA4 áÅÐ RB0 áÅ ÇÊѧࡵ¼Å¢Í§ ¡Ò÷íÒ§Ò¹·Õàè ¡Ô´¢Ö¹é àÁ×Íè Ãѹâ»Ãá¡ÃÁ LED ·Õµè Òí á˹ § RB3 ¨Ð´Ñº àÁ×Íè ¡´ÊÇÔµª RB0 ¨Ð·íÒãË LED·Õµè Òí á˹ § RB3 µÔ´ÊÇ Ò§ ¤ Ò§äÇ áÅдѺŧàÁ×Íè ¡´ÊÇÔµª RA4
Programming Note ÃÕ¨ÊÔ àµÍà ANSEL áÅÐ ANSELH 㪠㹡ÒÃàÅ×Í¡¡Ò÷íÒ§Ò¹¢Í§¢Ò¾Íà µãË à» ¹ÍÔ¹¾ØµÍйÒÅÍ¡´Ô¨µÔ ÍÅ ÊíÒËÃѺ¡Ã³Õà» ¹àÍÒµ ¾µØ ´Ô¨µÔ ÍÅäÁ µÍ §¡íÒ˹´¤ Ò àª ¹ µ ͧ¡ÒÃãË ¢Ò RB0 à» ¹ÍÔ¹¾Øµ´Ô¨µÔ ÍÅ µ ͧ¡íÒ˹´¤ Òà» ¹ ANSELH.F4=0; à» ¹µ ¹
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 47
¡Ô¨¡ÃÃÁ·Õè 2-3 áÊ´§¼ÅµÑÇàÅ¢áÅТ ͤÇÒÁ·Õâè Á´ÙÅ LCD âÁ´ÙÅ LCD à» ¹ÍØ»¡Ã³ ÊíÒËÃѺáÊ´§¼ÅµÑÇÍÑ¡ÉÃẺ¼ÅÖ¡àËÅÇ ÊíÒËÃѺ·Õè㪠ã¹ËØ ¹Â¹µ Robo-PICA ÊÒÁÒöáÊ´§¼Åä´ 16 µÑÇÍÑ¡Éà 2 ºÃ÷Ѵ ǧ¨Ã¡ÒÃàª×Íè Áµ ͡ѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 áÊ´§ã¹ÃÙ»·Õè A2-3 â´Â¡ÒÃàª×Íè Áµ Íà» ¹áºº 4 ºÔµ áÅÐÁÕ¡ÒáíÒ˹´µíÒá˹ §¢Í§¢Ò¾Íà µ·Õãè ª 㹡ÒÃàª×Íè Áµ ͵ç¡Ñº¤ ÒµÑ§é µ ¹ ·Õ¡è Òí ˹´äÇ ã¹äźÃÒÃÕ LCD ¢Í§ mikroC ¨Ö§·íÒãË ¡ÒÃà¢Õ¹â»Ãá¡ÃÁ·íÒä´ Í ÒÊдǡ¢Ö¹é ÁÒ¡ â´Â¡ ͹àÃÕ¡㪠§Ò¹âÁ´ÙÅ LCD à¾Õ§àÅ×Í¡µíÒá˹ §¾Íà µ·Õãè ª à· Ò¹Ñ¹é ´ ǤíÒÊѧè Lcd_Init(&PORTD); à¹×Íè §¨Ò¡ºÍà ´ RBX877 àÅ×͡㪠¾ Íà µ D 㹡ÒÃàª×Íè Áµ ͡ѺâÁ´ÙÅ LCD ¹Ñ¹è àͧ
â»Ãá¡ÃÁÊíÒËÃѺ·´Êͺ¡ÒÃáÊ´§¼Å¢ ͤÇÒÁáÅеÑÇàÅ¢ â»Ãá¡ÃÁ·Õè A2-4 à» ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ mikroC â´Â¨ÐáÊ´§¢ ͤÇÒÁÍÍ¡·Õâè Á´ÙÅ LCD Ê Ç¹¡ÒÃáÊ´§¤ ÒµÑÇàÅ¢¹Ñ¹é äÁ ÊÒÁÒÃ¶Ê §¤ ÒÍÍ¡ä»ÂѧâÁ´ÙÅ LCD ä´ ·¹Ñ ·Õ à¹×Íè §¨Ò¡âÁ´ÙÅ LCD µ ͧ¡Òà ¢ ÍÁÙÅáÊ´§¼Åà» ¹ÃËÑÊáÍÊ¡Õé ¨Ö§¨íÒà» ¹µ ͧá»Å§¤ ҢͧµÑÇàÅ¢ãË ÍÂÙ ã¹ÃÙ»¢Í§ÃËÑÊáÍÊ¡Õé¡ Í¹ â´Â㪠¿ §¡ ªÑè¹ WordToStr à¾×Íè à»ÅÕÂè ¹¤ Ò¢ ÍÁÙÅ 16 ºÔµ ¨Ò¡ª¹Ô´µÑÇá»Ã Int ä»à» ¹¢ ÍÁÙÅÍÑ¡¢ÃÐ ÁÕ¤Ò ÃÐËÇ Ò§ 0 ¶Ö§ 65,535 ÃÒÂÅÐàÍÕ´¢Í§â»Ãá¡ÃáÊ´§ã¹â»Ãá¡ÃÁ·Õè A2-5
+5V 11
32
C6 0.1µF 50V
+5V
1+! 21+ $.&&% RD2
+5V
RD3
R5 4k7 SW2 RESET
1 R6 1k
MCLR
RD7 RD6 RD5 RD4
JP1
21
4
22
6
30
RS E
DSP1 LCD 16x2
D7 D6 D5 D4 D3 D2 D1 D0 R/W 14 13 12 11 10 9 8 7 5
BLA +V Vo BLK GND 15 2
R13 16 47
BACK LIGHT ON
1 3 VR1 10k
BRIGHTNESS
29 28 27 12 31
CR1 Ceramic Resonator 20MHz
13
14
ÃÙ»·Õè A2-3 ǧ¨ÃáÊ´§¡ÒÃàª×Íè Áµ ͡ѺâÁ´ÙÅ LCD ¢Íº PIC16F887 º¹ºÍà ´ RBX-877 V2.0
48 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
char *text1 = "Innovative"; char *text2 = "Experiment"; void main() { Lcd_Init(&PORTD); Lcd_Cmd(LCD_CURSOR_OFF); while(1) { Lcd_Out(1,4,text1); Lcd_Out(2,4,text2); Delay_ms(5000); Lcd_Cmd(LCD_CLEAR); Delay_ms(500); } }
PIC
// Save Text
// Config PORTD connect LCD // Setting cursor of LCD off
// Show "Innovative" in Line 1 // Show "Experiment" int Line 2 // Blink LCD
¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¹Õ¨é Ðà¡çº¤ Ò¢ ͤÇÒÁäÇ ·µÕè ÇÑ á»Ã text1 áÅÐ text2 ¡ ͹ ¨Ò¡¹Ñ¹é ¡íÒ˹´ãË ¾Íà µ D à» ¹¾Íà µ ÊíÒËÃѺµÔ´µ ͡ѺâÁ´ÙÅ LCD áÅ ÇÊÑ§è » ´¡ÒÃáÊ´§¼Åà¤Íà à«Íà µ Í´ Ç·íÒ¡ÒùíÒ¢ ͤÇÒÁÁÒáÊ´§·Õ¨è ÍáÊ´§ ¼Åà» ¹àÇÅÒ 5 ÇÔ¹Ò·ÕÊÅѺ¡Ñº¡Òû ´¨ÍáÊ´§¼Å 0.5 ÇÔ¹Ò·Õ
â»Ãá¡ÃÁ·Õè A2-4 ä¿Å lcdchar_test.c â»Ãá¡ÃÁáÊ´§¢ ͤÇÒÁ·ÕËè ¹ Ò¨Í LCD ¢Í§ºÍà ´ RBX-877
¢Ñ鹵͹»¯ÔºÑµÔ¡Òà A2.3.1 à¢Õ¹â»Ãá¡ÃÁ·Õè A2-4 ´ Ç mikroC IDE ·íÒ¡ÒäÍÁä¾Å ãË ä´ ä¿Å ¼ÅÅѾ¸ .hex A2.3.2 àª×Íè Áµ ͺÍà ´â»Ãá¡ÃÁࢠҡѺºÍà ´ RBX-877 ¢Í§Ëع ¹µ Robo-PICA áÅоÍà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍà A2.3.3 ´Òǹ âËÅ´â»Ãá¡ÃÁä»ÂѧºÍà ´ RBX-877 Êѧࡵ¼Å¢Í§¡Ò÷íÒ§Ò¹·Õàè ¡Ô´¢Ö¹é àÁ×Íè Ãѹâ»Ãá¡ÃÁ ·Õâè Á´ÙÅ LCD º¹ºÍà ´ RBX-877 ¨ÐáÊ´§¢ ͤÇÒÁµ Í仹աé ÅÒ§¨ÍáÊ´§¼Å Innovative Experiment
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 49 int i=0; char txt[6]; void main() { Lcd_Init(&PORTD); Lcd_Cmd(LCD_CURSOR_OFF); Lcd_Cmd(LCD_CLEAR); Lcd_Out(1,1,"Counter= "); while(1) { i++; WordToStr(i,txt); Lcd_Out(1,10,txt); Delay_ms(100); }
// Save 16 bit 0-65535
// // // //
Config PORTD connect LCD Setting cursor of LCD off Clear Screen First Show Text
// Count // Convert to String // Show Counter ==> LCD
}
¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¹Õ¨é йѺ¤ ÒµÑÇàÅ¢áÅÐà¾ÔÁè ¤ ÒµÑÇàÅ¢¢Ö¹é ·ÕÅÐË¹Ö§è ¾Ã ÍÁ·Ñ§é ¹íÒ¤ ÒµÑÇàÅ¢á»Å§ãË à» ¹ÃËÑÊáÍÊ¡Õé à¾×Íè ¹íÒ¤ Ò¹Õäé »áÊ´§·Õâè Á´ÙÅ LCD â´Â¤ ÒµÑÇàŢ໠¹¤ ÒµÑÇàŢẺ 16 ºÔµ ÁÕ¤Ò ÃÐËÇ Ò§ 0 ¶Ö§ 65,535
â»Ãá¡ÃÁ·Õè A2-5 ä¿Å lcdnum_test.c â»Ãá¡ÃÁáÊ´§¤ ÒµÑÇàÅ¢·ÕËè ¹ Ò¨Í LCD ¢Í§ºÍà ´ RBX-877 A2.3.4 à¢Õ¹â»Ãá¡ÃÁ·Õè A2-5 ´ Ç mikroC IDE ·íÒ¡ÒäÍÁä¾Å ãË ä´ ä¿Å ¼ÅÅѾ¸ .hex A2.3.5 ´Òǹ âËÅ´â»Ãá¡ÃÁä»ÂѧºÍà ´ RBX-877 Êѧࡵ¼Å¢Í§¡Ò÷íÒ§Ò¹·Õàè ¡Ô´¢Ö¹é àÁ×Íè Ãѹâ»Ãá¡ÃÁ ·Õâè Á´ÙÅ LCD º¹ºÍà ´ RBX-877 ¨ÐáÊ´§¼Å´Ñ§ÃÙ»
50 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
¡Ô¨¡ÃÃÁ·Õè 2-3 ¢ÑºàÊÕ§¼ Ò¹·Ò§ÅíÒ⾧໠Ââ« º¹ºÍà ´ RBX-877 ä´ ·íÒ¡ÒÃàª×èÍÁµ ÍÅíÒ⾧໠Ââ«à¢ ҡѺ¢Ò¾Íà µ RC0 ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ·Ò§´ Ò¹«Í¿µ Çáà 㹠mikroC ÁÕ¤íÒÊÑè§ÊíÒËÃѺ¡ÒâѺÊÑÒ³àÊÕ§ÍÍ¡ÅíÒ⾧ â´Âµ ͧ¡íÒ˹´ µíÒá˹ §¢Ò¾Íà µ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ·ãÕè ª ´Ç  ¿ §¡ ª¹Ñè ·Õàè ÃÕ¡㪠¤Í× Sound_Init() áÅÐ Sound_Play() +5V 11
32
C6 0.1µF 50V
+5V R5 4k7
1 R6 1k
SW2 RESET
MCLR
1+! 21+ $.&&% R7 4k7
+5V R8 4k7
6 33
S2 RB0
RA4
RC0
15
C7 10µF 50V
RB0/INT
SP1 PIEZO
S1 RA4
12 31
CR1 Ceramic Resonator 20MHz
13
14
ÃÙ»·Õè A2-4 ǧ¨Ã¡ÒÃàª×Íè Áµ ÍÊÇÔµª áÅÐÅíÒ⾧໠Â⫺¹ºÍà ´ RBX-877 V2.0 void main() { Sound_Init(&PORTC, 0); while(1) { if (!PORTA.F4) sound_play(250,50); } }
// Init Sound
// Test RA4 keypress // 2 kHz sound ON RC0
â»Ãá¡ÃÁ·Õè A2-6 ä¿Å soundtest.c â»Ãá¡ÃÁµÑÇÍ ҧ¡ÒáíÒà¹Ô´ÊÑÒ³àÊÕ§ â´Â㪠¿§ ¡ ª¹Ñè sound_play ¢Í§ mikroC
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 51
¡ÒÃ㪠§Ò¹¿ §¡ ª¹Ñè Sound_Play() ÃٻẺ void Sound_Play(unsigned short period_div_10, unsigned num_of_periods);
¾ÒÃÒÁÔàµÍà ¤×ͤ Ò¨íҹǹ¤ÒºàÇÅҢͧÊÑÒ³¹ÒÌ ¡Ò·Õãè ª 㹡ÒÃÊà ҧ¤ÇÒÁ¶ÕËè Òô Ç 10 ÁÕ ¤ ÒÃÐËÇ Ò§ 0 ¶Ö§ 255 ઠ¹ µ ͧ¡ÒÃÊà ҧ¤ÇÒÁ¶Õè 2kHz ¤ Ңͧ¤ÒºàÇÅÒ = 1/2000 = 500 äÁâ¤ÃÇÔ¹Ò·Õ ¶ Ò㪠ÊÑÒ³¹ÒÌ ¡Ò 20MHz ¨Ðä´ ¤Ò ¢Í§¤ÒºàÇÅҢͧÊÑÒ³¹ÒÌ ¡Òà» ¹ 0.2 äÁâ¤ÃÇÔ¹Ò·Õ ´Ñ§¹Ñ¹é ¤ Ңͧ¤ÒºàÇÅÒ ·Õãè ª 㹡ÒÃÊà ҧÊÑÒ³¤ÇÒÁ¶Õè 2kHz ¨Ö§à· ҡѺ (500/0.2) / 10 = 250 Period_div_10
Ê Ç¹¤ Ò¤ÇÒÁ¶Õµè Òèí ÊØ´·ÕÊè Ã Ò§ä´ = 1/((255x10)x0.2) = 1.96kHz ¤×ÍÃÐÂÐàÇÅÒ㹡ÒáíÒà¹Ô´àÊÕ§ ÁÕ¤ ÒÃÐËÇ Ò§ 1 ¶Ö§ 65,535 ¢Öé¹ÍÂÙ ¡Ñº¤ÇÒÁ¶Õè ÊÑÒ³¹ÒÌ ¡Ò·Õãè ª ´Ç  ઠ ¶ Òãª Ê Ñ Ò³¹ÒÌ ¡Ò 20MHz ¤ÒºàÇÅÒ෠ҡѺ 0.2 äÁâ¤ÃÇÔ¹Ò·Õ ¶ Òµ ͧ¡íÒà¹Ô´ àÊÕ§¹Ò¹ 1 ÇÔ¹Ò·Õ ¨Ðµ ͧ¡íÒ˹´¤ Ò෠ҡѺ 2500 num_of_periods
¢Ñ鹵͹»¯ÔºÑµÔ¡Òà A2.4.1 à¢Õ¹â»Ãá¡ÃÁ·Õè A2-6 ´ Ç mikroC IDE ·íÒ¡ÒäÍÁä¾Å ãË ä´ ä¿Å ¼ÅÅѾ¸ .hex A2.4.2 àª×Íè Áµ ͺÍà ´â»Ãá¡ÃÁࢠҡѺºÍà ´ RBX-877 ¢Í§Ëع ¹µ Robo-PICA áÅоÍà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍà A2.4.3 ´Òǹ âËÅ´â»Ãá¡ÃÁä»ÂѧºÍà ´ RBX-877 ¨Ò¡¹Ñ¹é ¡´ÊÇÔµª áÅ ÇÊѧࡵ¼Å¡Ò÷íÒ§Ò¹·Õàè ¡Ô´¢Ö¹é àÁ×Íè ¡´ÊÇÔµª ·¢Õè Ò RA4 äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ¨Ð¡íÒà¹Ô´ÊÑÒ³àÊÕ§¤ÇÒÁ¶Õè 2kHz ¢Ñº ÍÍ¡ÅíÒ⾧໠Ââ«ãË ä´ Â¹Ô Í ҧµ Íà¹×Íè § ¨¹¡Ç ҨлŠÍÂÊÇÔµª
INNOVATIVE EXPERIMENT
52 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 53
º··Õè 4
¢Ñºà¤Å×Í è ¹Ëع ¹µ Robo-PICA
ÊÔè§áá·Õè·íÒãË ·ÃÒºÇ Ò ÊÒÁÒö¤Çº¤ØÁ¡Ò÷íÒ§Ò¹¢Í§ËØ ¹Â¹µ ä´ ¤×Í ¡íÒ˹´ãË ËØ ¹Â¹µ à¤Å×Íè ¹·Õäè »ã¹·ÔÈ·Ò§·Õµè Í §¡ÒÃä´ ´Ñ§¹Ñ¹é Ê Ç¹áá·Õµè Í §·íÒ¤ÇÒÁࢠÒ㨤×Í Ê Ç¹¢Í§¡ÒâѺà¤Å×Íè ¹ «Ö§è ËÑÇã¨ÊíҤѤ×Í Ç§¨Ã¢ÑºÁÍàµÍÃ
4.1 ǧ¨Ã¢ÑºÁÍàµÍà ¢Í§Ëع ¹µ Robo-PICA ã¹Ëع ¹µ Robo-PICA 㪠ÁÍàµÍà 俵ç·íҧҹà ÇÁ¡ÑºªØ´à¿ ͧ㹡ÒâѺà¤Å×Íè ¹ ÍØ»¡Ã³ ËÅÑ¡ ·Õãè ª ã¹Ç§¨Ã¢ÑºÁÍàµÍà 俵ç¤×Í äÍ«ÕàºÍà L293D «Ö§è ÊÒÁÒö¢ÑºÁÍàµÍÃ ä¿µÃ§ä´ 2 µÑÇ â´Â㪠¢Ò¤Çº¤ØÁ¨Ò¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ·Ñ§é ËÁ´ 6 ¢Ò áÊ´§¡ÒÃàª×Íè Áµ Íã¹ÃÙ»·Õè 4-1 K18A-K18B Motor M-1
1+ 21+ $.&&%
16 RD0 RD1
19
2
20
7 2A
RC2/CCP1 17 RB1 RB2 RC1/CCP2
C7 0.1µF 50V
+5V +Vm
1
1A
Vcc1
12EN
34
15 4A
35
10
16
9
8 1Y 3 2Y
+ +
R9 2k2
DIRECT LED3 DIR. #A
6
14 IC3 4Y L293D 11 3Y
LED4 DIR. #B
R10 2k2
3A 34EN
13 12 5
4
INVERT
INVERT
+
C8 0.1µF 50V
+
K19A-K19B Motor M-2
DIRECT
Motor Driver
ÃÙ»·Õè 4-1 áÊ´§Ç§¨Ã¢ÑºÁÍàµÍà ¢Í§ºÍà ´ RBX-877 ã¹Ëع ¹µ Robo-PICA
54 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
¡ÒâѺÁÍàµÍà ᵠÅеÑÇ㪠ÊÒÂÊÑÒ³ 3 àÊ ¹ à¹×Íè §¨Ò¡µ ͧ¡ÒäǺ¤ØÁ·ÔÈ·Ò§¢Í§ÁÍàµÍà 仾à ÍÁæ ¡Ñº¡ÒäǺ¤ØÁ¤ÇÒÁàÃçǢͧÁÍàµÍà ´Ç ÂÊÑÒ³ PWM ÊíÒËÃѺÁÍàµÍà M-1 㪠¢Ò¾Íà µ RD0 áÅÐ RD1 ·íÒ˹ Ò·Õè¤Çº¤ØÁ·ÔÈ·Ò§¡ÒÃËÁع Ê Ç¹¢Ò¾Íà µ RC2/CCP1 ãª Ê §ÊÑÒ³ PWM à¾×Íè ¤Çº¤ØÁ¤ÇÒÁàÃçǢͧÁÍàµÍÃ Ê Ç¹ÁÍàµÍà M-2 㪠¢Ò¾Íà µ RB1 áÅÐ RB2 㹡ÒäǺ¤ØÁ·ÔÈ·Ò§ Ê Ç¹¢Ò RC1/CCP2 Ê §ÊÑÒ³ PWM à¾×Íè ¤Çº¤ØÁ¤ÇÒÁàÃçÇ ·ÕèàÍÒµ ¾Øµ¢Í§Ç§¨Ã¢ÑºÁÍàµÍà M-1 áÅÐ M-2 ÁÕ LED ÊͧÊÕáÊ´§¢ÑéÇ¡Òè ÒÂáç´Ñ¹ãË ¡Ñº ÁÍàµÍà ¶ ÒËÒ¡ LED µÔ´à» ¹ÊÕà¢ÕÂÇ ËÁÒ¶֧¡Òè ÒÂáç´Ñ¹µÃ§¢ÑÇé ãË ¡ºÑ ÁÍàµÍà ¶ Òáç´Ñ¹·Õ¨è Ò Â ãË ¡ÅѺ¢ÑÇé LED ¨ÐµÔ´à» ¹ÊÕá´§ ÊíÒËÃѺ¨Ø´µ ÍÁÍàµÍà ÁÕ 2 ¨Ø´µ ͪ ͧâ´Â¨Ø´µ ÍÊÕ¢ÒÇà» ¹¡ÒÃàª×èÍÁ µ ͵ç Ê Ç¹¨Ø´µ ÍÊÕ´Òí à» ¹¡ÒáÅѺ¢ÑÇé
4.2 ¡ÒäǺ¤ØÁ·ÔÈ·Ò§¡ÒÃà¤Å×Íè ¹·Õ¢è ͧËع ¹µ Robo-PICA ã¹ÃÙ»·Õè 4-2 áÊ´§ãË àË繶֧¡ÒäǺ¤ØÁ·ÔÈ·Ò§¡ÒÃËÁع¢Í§ÁÍàµÍà ¢Í§ºÍà ´ RBX-877 Íѹ à» ¹ºÍà ´¤Çº¤ØÁËÅÑ¡¢Í§Ëع ¹µ Robo-PICA ¡µÑÇÍ ҧ ǧ¨Ã¢ÑºÁÍàµÍà ªÍ § M-1 㪠¢Ò¾Íà µ RD0 (PORTD.F0) áÅÐ ¢Ò RD1 (PORTD.F1) 㹡ÒäǺ¤ØÁ·ÔÈ·Ò§¡ÒÃËÁع â´Â RD0 = 0, RD1 = 1 ÁÍàµÍà ¨ÐËÁع·Ç¹à¢çÁ¹ÒÌ ¡Ò RD0 = 1, RD1 = 0 ÁÍàµÍà ¨ÐËÁعµÒÁà¢çÁ¹ÒÌ ¡Ò â´Âǧ¨Ã¢ÑºÁÍàµÍà ¨ÐÊÒÁÒö·íÒ§Ò¹ä´ àÁ×Íè ÁÕÊ Ñ Ò³àÍç¹àÍàºÔÅÁÒ¨Ò¡¢Ò¾Íà µ RC2 Ê Ç¹ã¹ª ͧ M-2 ¡ç¨Ðà» ¹àª ¹à´ÕÂǡѹ à¾Õ§à»ÅÕÂè ¹¢Ò¾Íà µ·Õãè ª 㹡ÒäǺ¤ØÁ·ÔÈ·Ò§ ( RB1 ¡Ñº RB2) áÅÐàÍç¹àÍàºÔÅǧ¨Ã¢ÑºÁÍàµÍà (RC1) ෠ҹѹé
ÃÙ»·Õè 4-2 áÊ´§¡ÒÃ㪠§Ò¹¢Ò¾Íà µ¢Í§ PIC16F887 ¤Çº¤ØÁ·ÔÈ·Ò§¡ÒÃËÁع¢Í§ÁÍàµÍÃ
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 55
¡Ô¨¡ÃÃÁ·Õè 3
·´Êͺ¡ÒÃà¤Å×Íè ¹·Õ¢è ͧ Robo-PICA
㹡Ԩ¡ÃÃÁ¹Õ¨é йíÒµÑÇÍ ҧ¡Ò÷´Êͺ¢Ñºà¤Å×Íè ¹Ëع ¹µ Robo-PICA ¢Ñ¹é ¾×¹é °Ò¹ â´ÂàÃÔÁè µ ¹ ¨Ò¡¡ÒâѺà¤Å×Íè ¹µÃ§ä»¢ ҧ˹ Ò áÅÐÁÕ¡ÒÃà»ÅÕÂè ¹·ÔÈ·Ò§¡ÒÃà¤Å×Íè ¹·Õè ·Ñ§é ¹Õàé ¾×Íè Êà ҧ¤ÇÒÁࢠÒã¨¾×¹é °Ò¹ã¹¡ÒäǺ¤ØÁ¡ÒÃà¤Å×Íè ¹·Õ¢è ͧËع ¹µ Robo-PICA ¡ ͹¨ÐࢠÒÊÙ¡ Òû¯ÔºµÑ ¡Ô ÒÃã¹ÀÒÃСԨ·Õ«è ºÑ « ͹¢Ö¹é 㹡Ԩ¡ÃÃÁµ Íæ ä»
á¹Ç¤Ô´ ¨Ò¡¡ÒÃÊà ҧËع ¹µ Robo-PICA 㹡Ԩ¡ÃÃÁ·Õè 1 ÁÕ¡Òõ¡Å§ã¹àº×Íé §µ ¹Ç Ò ÁÍàµÍà ·µÕè Í ¡Ñºª ͧ M-1 ¨Ðà» ¹ÁÍàµÍà ¢ºÑ à¤Å×Íè ¹·Ò§« Ò áÅÐÁÍàµÍà ·µÕè Í ¡Ñºª ͧ M-2 à» ¹ÁÍàµÍà ¢ºÑ à¤Å×Íè ¹·Ò§¢ÇÒ ´Ñ§¹Ñ¹é ¡ÒÃà¤Å×Íè ¹·Õàè º×Íé §µ ¹¢Í§Ëع ¹µ Robo-PICA ¨Ðà¡Ô´¢Ö¹é ä´ 4 ÃٻẺ¤×Í
RB3 M-1
RE0 RA5 RA3 RA2 RA1 RA0 RB0 M-2
RA4
ICD2
RESET
RB0/ INT
DOWNLOAD
RE1
Robo - PICARRobotR PICRMicroRobotic
RC3 SCL RC4 SDA RC6 TxD RC7 RxD LCD
RE2
LCD back light
Sound RC0
ÁÍàµÍà ·§Ñé Êͧª Í§ä´ ÃºÑ áç´Ñ¹µÃ§¢ÑÇé (DIRECT) LED à» ¹ÊÕà¢ÕÂÇ·Ñ§é ¤Ù
SERVO #1 ON
BATT
#2 #3
4.8-6V
ON
(1) à¤Å×Íè ¹·Õµè ç仢 ҧ˹ Ò
S+
POWER
M-1
M-2
DIRECT
DIRECT
56 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
RB3 M-1
RE0 RA5 RA3 RA2 RA1 RA0 RB0 RA4
ICD2
RESET
RB0/ INT
DOWNLOAD
RE1
Robo - PICARRobotR PICRMicroRobotic
RC3 SCL RC4 SDA RC6 TxD RC7 RxD LCD
RE2
LCD back light
Sound RC0
(2) à¤Å×Íè ¹·Õ¶è ÍÂËÅѧ ÁÍàµÍà ·§Ñé Êͧª Í§ä´ ÃºÑ áç´Ñ¹¡ÅѺ¢ÑÇé (INVERT) LED à» ¹ÊÕá´§·Ñ§é ¤Ù
M-2
SERVO ON
BATT
#1 #2 #3 S+
ON
4.8-6V
POWER
M-1
M-2
INVERT
INVERT
RB3
RA1 RA0 / RB0 INT RA4
RE S
ET
RB0
D LOA WN DO
LCD
RC7 RxD
RC6 TxD
RA2
RC4 SDA
R
tR bo ic Ro t R o A ob IC R P ro RE1 bo ic RE0 Ro RM C RA5 PI A3
LCD k bac t ligh RC3 SCL
nd Sou 0 RC
RE2
(3) àÅÕÂé Ç« Ò ÁÍàµÍà ªÍ § M-1 äÁ ä´ ÃºÑ áç´Ñ¹ LED àÍÒµ ¾µØ ´Ñº Ê Ç¹ÁÍàµÍà ªÍ § M-2 ä´ ÃºÑ áç´Ñ¹µÃ§¢ÑÇé (DIRECT) LED àÍÒµ ¾µØ à» ¹ÊÕà¢ÕÂÇ
2 ICD
M-1
M-2
VO SER #1
#3
S+
4.8
M-1
-6V
ON
BAT
T
ON
#2
ER POW
M-2 INVERT
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 57
2 RE 1 RE 0 RE
0 RB
1
M-
2
ON
-6V
4
M-
BA 4.8
RA
TT
RE
ICD 2
SE
T
RB 0 INT /
RA
0
PI
Ro
bo
DO WN LO AD
A3
LCD
RA
5
RC SD 4 A RC 6 TxD RC RxD7
SC L CR - PI Mi CA cr R oR Rob ob o RA 1 ot tR RA 2 ic R
RC
RB
3
3
LCD bac ligh k t
So u RC nd 0
(4) àÅÕÂé Ç¢ÇÒ ÁÍàµÍà ªÍ § M-1 áç´Ñ¹µÃ§¢ÑÇé (DIRECT) LED àÍÒµ ¾µØ à» ¹ÊÕà¢ÕÂÇ Ê Ç¹ÁÍàµÍà ª ͧ M-2 äÁ ä´ ÃºÑ áç´Ñ¹ LED àÍÒµ ¾µØ ´Ñº
ON
#1 SERV O #2
PO WE R
#3
S+
M-1
M-2
DIRECT
RB3
RE2
LCD back light
RE1
S+ #3
#2
#1
M-2 RC7 RxD LCD
RC6 TxD
RC4 SDA
RC3 SCL Sound RC0
RA4
RB0
4.8-6V
M-1
#2 S+
POWER
M-1
M-2
INVERT
DIRECT
POWER
RA2 RA1
M-1
DOWNLOAD
RA0
LCD back light
ICD2 BATT
RB0/ INT
RESET
RESET
ON ON
ON
SERVO
RE0 RA5 RA3
RB3
Robo - PICARRobotR PICRMicroRobotic
RC3 SCL
Robo - PICARRobotR PICRMicroRobotic
RE2
DOWNLOAD
RE1
ICD2
RE0
ON
RA5
RC4 SDA
RA3
RC6 TxD
RA2
RC7 RxD
RA1
SERVO #1
BATT
RA0
M-2
#3 4.8-6V
RB0/ INT
M-1
RB0
LCD
M-2
RA4
Sound RC0
(5) ËÁع« Ò ÁÍàµÍà ªÍ § M-1 ä´ ÃºÑ áç´Ñ¹¡ÅѺ¢ÑÇé (INVERT) LED àÍÒµ ¾µØ à» ¹ÊÕá´§ Ê Ç¹ ÁÍàµÍà ªÍ § M-2 ä´ ÃºÑ áç´Ñ¹µÃ§¢ÑÇé (DIRECT) LED àÍÒµ ¾µØ à» ¹ÊÕà¢ÕÂÇ
58 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
RB3
RE0
RE1
Robo - PICARRobotR PICRMicroRobotic
RA5 RA3 RA2
M-1
RA1
ON
RB0/ INT
SERVO
RC3 SCL LCD back light
Robo - PICARRobotR PICRMicroRobotic
RESET
RA4
RB0
RB0/ INT
RB3 RA0
RA1
RA2
RA3
RA5
RE0
RE1
RE2
RA4
RB0
RESET
#1
S+
M-2
M-2
SERVO ON
RC4 SDA
M-2
#2
ICD2
RC6 TxD
ICD2
RA0
RC3 SCL RC4 SDA RC6 TxD RC7 RxD
DOWNLOAD
#1
BATT
RC7 RxD
ON
#3
M-1
Sound RC0
LCD BATT
POWER
LCD
M-1
4.8-6V
DOWNLOAD
RE2
LCD back light
Sound RC0
(6) ËÁع¢ÇÒ ÁÍàµÍà ªÍ § M-1 ä´ ÃºÑ áç´Ñ¹µÃ§¢ÑÇé (DIRECT) LED àÍÒµ ¾µØ à» ¹ÊÕà¢ÕÂÇ Ê Ç¹ ÁÍàµÍà ªÍ § M-2 ä´ ÃºÑ áç´Ñ¹¡ÅѺ¢ÑÇé (INVERT) LED àÍÒµ ¾µØ à» ¹ÊÕá´§
#2
4.8-6V
ON
#3 S+
POWER
M-1
M-2
DIRECT
INVERT
»¯ÔºµÑ ¡Ô Òà A3.1 à¢Õ¹â»Ãá¡ÃÁ·Õè A3-1 ´ Ç mikroC IDE ·íÒ¡ÒäÍÁä¾Å ãË ä´ ä¿Å ¼ÅÅѾ¸ .hex A3.2 àª×Íè Áµ ͺÍà ´â»Ãá¡ÃÁࢠҡѺËع ¹µ Robo-PICA áÅоÍà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍà A3.3 ´Òǹ âËÅ´â»Ãá¡ÃÁä»ÂѧËع ¹µ Robo-PICA áÅ Ç» ´ÊÇÔµª POWER A3.4 »Å´ÊÒ´Òǹ âËÅ´·Ñ§é ËÁ´ÍÍ¡¨Ò¡Ëع ¹µ Robo-PICA A3.5 ¹íÒËع ¹µ Robo-PICA ÇÒ§º¹¾×¹é à» ´ÊÇÔµª POWER Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ à·Õº¡Ñºâ»Ãá¡ÃÁ·Õè à¢Õ¹¢Ö¹é Ëع ¹µ Robo-PICA ¨Ðµ ͧà¤Å×Íè ¹·Õäè »¢ ҧ˹ ÒÊÅѺ¡Ñº¡ÒÃàÅÕÂé Ç¢ÇÒ ÁÕÅ¡Ñ É³Ð¡ÒÃà¤Å×Íè ¹·Õ¤è Å ÒÂÃÙ» ÊÒÁàËÅÕÂè Á ËÒ¡äÁ à» ¹àª ¹¹Õé ãË µÃǨÊͺ¡ÒÃàª×Íè Áµ ÍÊÒÂÁÍàµÍà ࢠҡѺºÍà ´ RBX-877 ãË ÊÅѺÊÒ¢ͧÁÍàµÍà ¨¹¡ÃзÑè§ËØ ¹Â¹µ à¤Å×è͹·Õèä´ ¶Ù¡µ ͧ
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 59 void main() { /* Initial port for control motor */ ANSELH=0x00 ; // TRISB.F1=0;TRISB.F2=0; // TRISD.F0=0;TRISD.F1=0; // TRISC.F1=0;TRISC.F2=0; // PORTC.F1=1;PORTC.F2=1; // /* Triangle running robot while(1) { PORTD.F0 =0;PORTD.F1 PORTB.F1 =0;PORTB.F2 Delay_ms(2000); PORTB.F1 =1;PORTB.F2 Delay_ms(800); } }
Set PORTB => Digital Motor M-2 2A,Motor M-2 2B Motor M-1 1A,MOtor M-1 1B Motor M-2 2E,Motor M-1 1E Enable Motor M-2,Enable Motor M-1
*/
=1; =1;
// Motor M-1 Forward // Motor M-2 Forward
=0;
// Motor M-2 Backward
¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¨ÐẠ§à» ¹ 2 ª ǧ ª ǧáá໠¹¡ÒáíÒ˹´¢Ò¾Íà µ·Õè㪠¢ÑºÁÍàµÍà ãË à» ¹¢ÒàÍÒµ ¾Øµ áÅ Ç àÍç¹àÍàºÔÅ¡ÒäǺ¤ØÁÁÍàµÍà M-1 áÅÐÁÍàµÍà M-2 ª ǧ·Õè 2 à» ¹¡ÒÃÊÑ§è §Ò¹¢Ñºà¤Å×Íè ¹ÁÍàµÍà â´Âà» ¹¡ÒÃÊѧè ãË ÁÍàµÍà M-1 áÅÐ M-2 à¤Å×Íè ¹·Õäè »¢ ҧ˹ Ò·Ñ§é ¤Ù à» ¹àÇÅÒ 2 ÇÔ¹Ò·Õ ¨Ò¡¹Ñ¹é ¢ÑºãË ÁÍàµÍà M-2 ÁÕ·ÈÔ ·Ò§ËÁع ¡ÅѺËÅѧ Íѹ໠¹¡Ò÷íÒãË Ë¹Ø Â¹µ ËÁعµÑÇà¾×Íè àÅÕÂé Ç¢ÇÒ à» ¹àÇÅÒ 0.8 ÇÔ¹Ò·Õ ·íÒÊÅѺ¡Ñ¹ä»Í ҧµ Íà¹×Íè §
â»Ãá¡ÃÁ·Õè A3-1 ä¿Å movetest01.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ¤Çº¤ØÁ¡ÒÃà¤Å×Íè ¹·Õ¢è ͧËع ¹µ RoboPICA Í ҧ§ ÒÂ
60 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
4.3 ¤Çº¤ØÁ¤ÇÒÁàÃçǢͧÁÍàµÍà Ëع ¹µ Robo-PICA ä´ àµÃÕÂÁ¤ÇÒÁ¾Ã ÍÁ㹡ÒûÃѺ¤ÇÒÁàÃçÇÁÍàµÍà äÇ áÅ Ç â´Â» ͹ÊÑÒ³ ࢠҷբè ÒàÍç¹àÍàºÔÅ¡Ò÷íÒ§Ò¹¢Í§äÍ«Õ¢ºÑ ÁÍàµÍà (EN) ¨Ò¡Ç§¨Ãã¹ÃÙ»·Õè 4-1 ¨ÐàËç¹Ç Ò¢ÒàÍç¹àÍàºÔŶ١µ Í äÇ ¡Ñº¢Ò¾Íà µ RC2/CCP1 áÅÐ RC1/CCP2 «Ö觢ҾÍà µ·Ñé§Êͧ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ÊÒÁÒö ¡íÒ˹´ãË à» ¹¢ÒÊà ҧÊÑÒ³ PWM (¾ÑÅÊ Ç´Ô ¸ ÁÍ´ÙàÅàµÍà ) à¾×Íè »ÃѺ¤ÇÒÁàÃçǢͧÁÍàµÍÃ ä´ ã¹¡ÒäǺ¤ØÁÁÍàµÍà â´Â»¡µÔ¹¹Ñé ¨Ð» ͹áç´Ñ¹ä¿µÃ§ãË ¡ºÑ ÁÍàµÍà ÁÍàµÍà ¡¨ç зíÒ§Ò¹àµçÁ ¡íÒÅѧ «Ö§è ÍÒ¨¨ÐÁÕ¤ÇÒÁàÃçÇÁÒ¡à¡Ô¹ä» ´Ñ§¹Ñ¹é ¡ÒûÃѺ¤ÇÒÁàÃçǢͧÁÍàµÍà ¨§Ö ãª Ç¸Ô ÅÕ ´áç´Ñ¹ä¿¿ Ò·Õ»è Í ¹ ãË ¡ºÑ ÁÍàµÍà ÇÔ¸·Õ ¹Õè ÂÔ Á¤×Í ¡Òû ͹¾ÑÅÊ ä»¢ÑºÁÍàµÍà ᷹ áÅ Ç»ÃѺ¤ÇÒÁ¡Ç Ò§¾ÑÅÊ ªÇ §ºÇ¡ à¾×Íè ãË ä´ ¤Ò áç´Ñ¹à©ÅÕÂè µÒÁµ ͧ¡Òà ÇÔ¸¡Õ ÒùÕàé ÃÕÂ¡Ç Ò ¾ÑÅÊ Ç´Ô ¸ ÁÍ´ÙàÅàµÍà (PWM) â´Â¤ÇÒÁ¡Ç Ò§¾ÑÅÊ ªÇ §ºÇ¡ àÁ×Íè à·Õº¡Ñº¤ÇÒÁ¡Ç Ò§¾ÑÅÊ ·§Ñé ËÁ´àÃÕÂ¡Ç Ò ´ÔǵÕäé «à¡ÔÅ â´Â¨Ð¤Ô´¤ Ò´ÔǵÕäé «à¡ÔÅà» ¹à»Íà à«ç¹µ ¢Í§¤ Ò¤ÇÒÁ ¡Ç Ò§¾ÑÅÊ ·§Ñé ËÁ´ µÑÇÍ ҧ¨Ò¡ÃÙ»·Õè 4-3 (¢) ÁÕ¤Ò ´ÔǵÕäé «à¡ÔÅ 50% ËÁÒ¶֧ ¤ÇÒÁ¡Ç Ò§¢Í§¾ÑÅÊ ªÇ §ºÇ¡ÁÕ¤ÇÒÁ ¡Ç ҧ໠¹ 50% ¢Í§¤ÇÒÁ¡Ç Ò§·Ñ§é ËÁ´ ´Ñ§¹Ñ¹é áç´Ñ¹à©ÅÕÂè ·Õäè ´ ෠ҡѺ (50 x 4.8) /100 = 2.4V ÊíÒËÃѺ ÃÙ»·Õè 4-3 (¤) áÅÐ (§) à» ¹¡ÒáíÒ˹´¤ Ò´ÔǵÕäé «à¡ÔÅ 75% áÅÐ 25% µÒÁÅíҴѺ áç´Ñ¹ (V)
áç´Ñ¹ (V)
4.8V
4.8V
áç´Ñ¹à©ÅÕÂè
´ÔǵÕäé «à¡ÔÅ 50%
2.4V
(¡) áç´Ñ¹ (V)
áç´Ñ¹à©ÅÕÂè
àÇÅÒ
´ÔǵÕäé «à¡ÔÅ 75%
4 .8 V
(¢) áç´Ñ¹ (V)
àÇÅÒ
áç´Ñ¹à©ÅÕÂè ´ÔǵÕäé «à¡ÔÅ 25 %
4 .8 V
3 .6 V 1 .2 V
(¤)
àÇÅÒ
(§)
ÃÙ»·Õè 4-3 áÊ´§¡ÒÃà»ÃÕºà·Õº¤ Òáç´Ñ¹·Õàè ¡Ô´¢Ö¹é àÁ×Íè 㪠PWM (¡) » ͹ÊÑҳ俵ç (¢) PWM ÁÕ´ÇÔ µÕäé «à¡ÔÅ 50% (¤) PWM ÁÕ´ÇÔ µÕäé «à¡ÔÅ 75% (§) PWM ÁÕ´ÇÔ µÕäé «à¡ÔÅ 25%
àÇÅÒ
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 61
4.4 äźÃÒÃÕè PWM 㹡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C à¾×Íè ¤Çº¤ØÁ¡ÒäÇÒÁàÃçÇ㹡ÒÃà¤Å×Íè ¹·Õ¢è ͧËع ¹µ Robo-PICA µÑǪ ÇÂË¹Ö§è ·Õè mikroC ¤ÍÁä¾àÅÍà àµÃÕÂÁäÇ ãË ãª ¤Í× ä¿Å äźÃÒÃÕ PWM Íѹ໠¹ä¿Å äźÃÒÃÕÊÒí ËÃѺ àÃÕ¡㪠§Ò¹âÁ´ÙÅ PWM ÀÒÂã¹äÁâ¤Ã¹¤Í¹â·ÃÅàÅÍà PIC à¾×Íè Êà ҧÊÑÒ³ PWM â´Â¿ §¡ ª¹Ñè ÀÒÂã¹äźÃÒÃÕ PWM ¹Õé¨Ðª ÇÂ㹡ÒáíÒ˹´¤ Ò¤ÇÒÁ¡Ç Ò§¢Í§ÊÑÒ³ PWM à¾×èÍ㪠㹡ÒÃÊà ҧ ÊÑÒ³ PWM ÊíÒËÃÑºÊ §ä»Âѧǧ¨Ã¢ÑºÁÍàµÍà ¡ÒûÃѺ¤ Ò¤ÇÒÁ¡Ç Ò§¢Í§¾ÑÅÊ ªÇ §ºÇ¡ãË ÁÒ¡ËÃ×Í ¹ Í ¨Ð·íÒãË à¡Ô´áç´Ñ¹·Õàè ÍÒµ ¾µØ ¢Í§Ç§¨Ã¢ÑºÁÍàµÍà ÁÒ¡¹ ͵ÒÁ¤ÇÒÁ¡Ç Ò§¢Í§ÊÑÒ³ PWM ¶ Ò¤ÇÒÁ¡Ç Ò§¾ÑÅÊ ªÇ §ºÇ¡ÁÒ¡ áç´Ñ¹àÍÒµ ¾µØ ·ÕÁè ÍàµÍà ¡¨ç ÐÊÙ§ ·íÒãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õäè ´ àÃçÇ ¶ Ò¤ÇÒÁ¡Ç Ò§¾ÑÅÊ ªÇ §ºÇ¡¹ Í áç´Ñ¹àÍÒµ ¾µØ ·ÕÁè ÍàµÍà ¡¨ç еèÒí ·íÒãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õäè ´ ªÒ ä¿Å äźÃÒÃÕ·ÕèÊà ҧ¢Öé¹¹Õéª×èÍ PWM â´Â¨ÐàÃÕ¡㪠§Ò¹âÁ´ÙÅ¡íÒà¹Ô´ÊÑÒ³ PWM ÀÒÂã¹ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 «Öè§ÁÕ´ Ç¡ѹ 2 ªØ´ ¨Ö§ÊÒÁÒöᡡѹ¤Çº¤ØÁ¤ÇÒÁàÃçÇÁÍàµÍà ÃÐËÇ Ò§ÁÍàµÍà ·ªÕè Í § M-1 áÅÐ M-2 ä´
4.4.1 ¡ÒÃ㪠§Ò¹¤íÒÊÑ§è µ Ò§æ ÀÒÂã¹äźÃÒÃÕ PWM Pwm_Init
ÃٻẺ void Pwm_Init(unsigned long freq);
¾ÒÃÒÁÔàµÍà freq
- à» ¹¤ Ò¤ÇÒÁ¶Õ¢è ͧÊÑÒ³ PWM ÁÕ˹ ÇÂà» ¹ àÎÔõ« (Hz)
à» ¹¡ÒáíÒ˹´¤ ÒàÃÔÁè µ ¹ãË ¡ºÑ âÁ´ÙÅ PWM â´Â¡íÒ˹´¤ Ò´ÔǵÕäé «à¡ÔŢͧÊÑÒ³ PWM à» ¹ 0 ¤íÒÊÑ§è ¹Õ¨é е ͧ¶Ù¡àÃÕ¡㪠§Ò¹¡ ͹㪠§Ò¹âÁ´ÙÅ PWM µÑÇÍ ҧ Pwm1_Init(5000);
ËÁÒ¶֧ ¡íÒ˹´¤ ÒàÃÔÁè µ ¹ãË ¡ºÑ âÁ´ÙÅ PWM µÑÇ·Õè 1 (ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC ·ÕÁè âÕ Á´ÙÅ PWM
62 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
ÁÒ¡¡Ç Ò 1 µÑÇ) ·íÒ§Ò¹·Õ¤è ÇÒÁ¶Õè 5kHz Pwm_Change_Duty
ÃٻẺ void Pwm_Change_Duty(unsigned short duty_ratio);
¾ÒÃÒÁÔàµÍà duty_ratio
- ÁÕ¤Ò ÃÐËÇ Ò§ 0 ¶Ö§ 255
à» ¹¤íÒÊѧè à¾×Íè à»ÅÕÂè ¹¤ Ò´ÔǵÕäé «à¡ÔŢͧâÁ´ÙÅ PWM ¶ Ò¤ Ңͧ duty_ratio à» ¹ 0 ËÁÒ¶֧ ¤ Ò´ÔǵÕäé «à¡ÔÅ 0%, 127 ËÁÒ¶֧ 50% áÅÐ 255 ËÁÒ¶֧ ¤ Ò´ÔǵÕäé «à¡ÔÅ 100% µÑÇÍ ҧ Pwm1_Change_Duty(190);
à»ÅÕÂè ¹¤ Ò´ÔǵÕäé «à¡ÔŢͧâÁ´ÙÅ PWM1 à» ¹ 75% Pwm_Start
ÃٻẺ void Pwm_Start(void);
à» ¹¤íÒÊѧè à¾×Íè àÃÔÁè µ ¹Êѧè ãË âÁ´ÙÅ PWM ·íÒ§Ò¹ µÑÇÍ ҧ Pwm1_Start();
àÃÔÁè µ ¹¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ PWM1 Pwm_Stop
ÃٻẺ void Pwm_Stop(void);
à» ¹¤íÒÊѧè à¾×Íè ËÂØ´¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ PWM µÑÇÍ ҧ Pwm1_Stop();
ËÂØ´¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ PWM1
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 63
¡Ô¨¡ÃÃÁ·Õè 4
¤Çº¤ØÁ¤ÇÒÁàÃçǢͧ Robo-PICA
㹡Ԩ¡ÃÃÁ¹Õ¹é Òí àÊ¹Í 2 µÑÇÍ ҧ¡Ò÷´Êͺ¤Çº¤ØÁ¤ÇÒÁàÃçÇ㹡ÒÃà¤Å×Íè ¹·Õ¢è ͧËع ¹µ RoboPICA â´Âãª Ê Ñ Ò³ PWM
¡Ô¨¡ÃÃÁ·Õè 4-1 à¤Å×Íè ¹·Õàè » ¹ÃÙ»ÊÒÁàËÅÕÂè ÁáÅлÃѺ¤ÇÒÁàÃçÇä´ A4.1.1 à¢Õ¹â»Ãá¡ÃÁ·Õè A4-1 ´ Ç mikroC IDE ·íÒ¡ÒäÍÁä¾Å ãË ä´ ä¿Å ¼ÅÅѾ¸ .hex void main() { /* Initial port for control motor */ ANSELH.F0=0; // ANSELH.F2=0; // TRISB.F1=0; // TRISB.F2=0; // TRISD.F0=0; // TRISD.F1=0; //
RB1 ==> Digital IO RB2 ==> Digital IO Motor M-2 2A Motor M-2 2B Motor M-1 1A MOtor M-1 1B
/* Initial PWM module freq = 5 kHz */ Pwm1_Init(5000); // Initail PWM 1E Pwm2_Init(5000); // Initail PWM 2E /* Start PWM and set duty cycle 100% */ Pwm1_Start(); Pwm2_Start(); Pwm1_Change_Duty(190); // Motor M-1 75% Speed Pwm2_Change_Duty(190); // Motor M-2 75% Speed /* Triangle running robot while(1) { PORTD.F0 =0;PORTD.F1 PORTB.F1 =0;PORTB.F2 Delay_ms(2000); PORTB.F1 =1;PORTB.F2 Delay_ms(800); } }
*/ =1; =1;
// Motor M-1 Forward // Motor M-2 Forward
=0;
// Motor M-2 Backward
¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ
â»Ãá¡ÃÁ¹Õ¡é Òí ˹´¤ÇÒÁ¶Õ¢è ͧ PWM äÇ ·Õè 5kHz ¼ Ò¹¤íÒÊѧè Pwm_Init() ¨Ò¡¹Ñ¹é àÃÔÁè µ ¹¡ÒÃÊà ҧÊÑÒ³ PWM ´ Ç¡ÒÃÊ §¤íÒÊѧè Pwm_Start() áÅСíÒ˹´¤ Ò¤ÇÒÁ¡Ç Ò§¾ÑÅÊ ´Ç ¤íÒÊѧè Pwm_Chage_Duty() ã¹·Õ¹è ¡Õé Òí ˹´ ¤ Òà» ¹ 190 àÁ×Íè ¤íҹdz¤ ÒÍÍ¡à» ¹à»Íà ૹµ ¨Ðä´ 75% Ê Ç¹¡ÒâѺà¤Å×Íè ¹Ëع ¹µ àËÁ×͹¡Ñºâ»Ãá¡ÃÁ·Õè A3-1
â»Ãá¡ÃÁ·Õè A4-1 ä¿Å pwmtest01.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ¤Çº¤ØÁ¤ÇÒÁàÃçÇ㹡ÒÃà¤Å×Íè ¹·Õ¢è ͧ Ëع ¹µ Robo-PICA
64 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
A4.1.2 àª×Íè Áµ ͺÍà ´â»Ãá¡ÃÁࢠҡѺËع ¹µ Robo-PICA áÅоÍà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍà A4.1.3 ´Òǹ âËÅ´â»Ãá¡ÃÁä»ÂѧËع ¹µ Robo-PICA áÅ Ç» ´ÊÇÔµª POWER A4.1.4 »Å´ÊÒ´Òǹ âËÅ´·Ñ§é ËÁ´ÍÍ¡¨Ò¡Ëع ¹µ Robo-PICA A4.1.5 ¹íÒËع ¹µ Robo-PICA ÇÒ§º¹¾×¹é à» ´ÊÇÔµª POWER Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ Ëع ¹µ Robo-PICA ¨Ðµ ͧà¤Å×Íè ¹·Õäè »¢ ҧ˹ ÒÊÅѺ¡Ñº¡ÒÃàÅÕÂé Ç¢ÇÒ ÁÕÅ¡Ñ É³Ð¡ÒÃà¤Å×Íè ¹·Õ¤è Å ÒÂÃÙ» ÊÒÁàËÅÕÂè Á ¡ÒÃà¤Å×Íè ¹·Õ¨è ÐàËÁ×͹¡Ñºã¹¡Ô¨¡ÃÃÁ·Õè 3 ¨Ø´·Õàè ¾ÔÁè àµÔÁࢠÒÁÒ¤×Í ÊÒÁÒö»ÃѺà»ÅÕÂè ¹¤ÇÒÁàÃçÇ㹡Òà à¤Å×Íè ¹·Õäè ´ â´Âᡠ䢷դè Òí Êѧè Pwm1_Change_Duty(190);
// Motor M-1 75% Speed
Pwm2_Change_Duty(190);
// Motor M-2 75% Speed
¡Ô¨¡ÃÃÁ·Õè 4-2 à¤Å×Íè ¹·Õàè » ¹Ãٻǧ¡ÅÁ´ Ç¡ÒäǺ¤ØÁ¤ÇÒÁàÃçÇ A4.2.1 à¢Õ¹â»Ãá¡ÃÁ·Õè A4-2 ´ Ç mikroC IDE ·íÒ¡ÒäÍÁä¾Å ãË ä´ ä¿Å ¼ÅÅѾ¸ .hex
A4.2.2 àª×Íè Áµ ͺÍà ´â»Ãá¡ÃÁࢠҡѺËع ¹µ Robo-PICA áÅоÍà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍà A4.2.3 ´Òǹ âËÅ´â»Ãá¡ÃÁä»ÂѧËع ¹µ Robo-PICA áÅ Ç» ´ÊÇÔµª POWER A4.2.4 »Å´ÊÒ´Òǹ âËÅ´·Ñ§é ËÁ´ÍÍ¡¨Ò¡Ëع ¹µ Robo-PICA A4.2.5 ¹íÒËع ¹µ Robo-PICA ÇÒ§º¹¾×¹é à» ´ÊÇÔµª POWER Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ Ëع ¹µ Robo-PICA ¨Ðà¤Å×Íè ¹·Õàè » ¹Ãٻǧ¡ÅÁ â´ÂÍÒÈÑÂÇÔ¸¡Õ ÒûÃѺà»ÅÕÂè ¹¤ÇÒÁàÃçÇ㹡ÒâѺà¤Å×Íè ¹ ¢Í§ÁÍàµÍà ·§Ñé ÊͧµÑÇãË áµ¡µ Ò§¡Ñ¹ ã¹·Õ¹è ¤Õé Í× 100% ¡Ñº 86%
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 65
void main() { /* Initial port for control motor */ ANSELH=0x00; // TRISB.F1=0; // TRISB.F2=0; // TRISD.F0=0; // TRISD.F1=0; //
PORTB ==> Digital IO Motor M-2 2A Motor M-2 2B Motor M-1 1A MOtor M-1 1B
/* Initial PWM module freq = 5 kHz */ Pwm1_Init(5000); // Initail PWM 1E Pwm2_Init(5000); // Initail PWM 2E /* Start PWM and set duty cycle 100% */ Pwm1_Start(); Pwm2_Start(); Pwm1_Change_Duty(255); // Motor Pwm2_Change_Duty(220); // Motor while(PORTB.F0==1); /* Oval running robot */ PORTD.F0 =0;PORTD.F1 =1; // Motor PORTB.F1 =0;PORTB.F2 =1; // Motor }
M-1 100% Speed M-2 86% Speed M-1 Forward M-2 Forward
¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¹Õ¡é Òí ˹´¤ Ò´ÔǵÕäé «à¡ÔÅ·Õ»è Í ¹ãË ÁÍàµÍà ·§Ñé ÊͧµÑÇäÁ ෠ҡѹ ÁÍàµÍà M-1 ෠ҡѺ 255 (¨ Ò ä¿ãË ¡ºÑ ÁÍàµÍà àµçÁ¡íÒÅѧ) ã¹¢³·ÕÁè ÍàµÍà M-2 ෠ҡѺ 220 Íѹ໠¹¡Òè ÒÂä¿ãË ¡ºÑ ÁÍàµÍà 86% ´Ñ§¹Ñ¹é ÁÍàµÍà M-2 ¨Ö§à¤Å×Íè ¹·Õªè Ò ¡Ç ÒÁÍàµÍà M-1 while(PORTB.F0==1); à» ¹¤íÒÊÑ§è ª ÇÂãË Ë¹ Ø Â¹µ äÁ à¤Å×Íè ¹·Õ·è ¹Ñ ·ÕËÅѧ¨Ò¡´Òǹ âËÅ´â»Ãá¡ÃÁ àÊÃç¨ÊÔ¹é áµ ¨Ðµ ͧÁÕ¡Òá´ÊÇÔµª RB0 ¡ ͹ àÁ×Íè ¡´ÊÇÔµª à§×Íè ¹ä¢¨Ðà» ¹à·ç¨áÅÐâ»Ãá¡ÃÁ¨ÐËÅØ´¨Ò¡ÅÙ» while ä»·íÒ¤íÒÊÑ§è ¶Ñ´ä»ä´
â»Ãá¡ÃÁ·Õè A4-2 ä¿Å pwmtest02.c â»Ãá¡ÃÁ¤Çº¤ØÁËع ¹µ Robo-PICA à¤Å×Íè ¹·Õàè » ¹Ç§¡ÅÁ
66 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
4.5 Êà ҧä¿Å äźÃÒÃÕ motor.h ¨Ò¡ËÑÇ¢ Í 4.4 áÅСԨ¡ÃÃÁ·Õè 4 㹡ÒÃà¢Õ¹â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺËع ¹µ Robo-PICA àÃÔèÁÁÕ¡ÒÃàÃÕ¡㪠äźÃÒÃÕ«Ö觺ÃèØÁҾà ÍÁ¡Ñº mikroC ¤ÍÁä¾àÅÍà Í ҧäáçµÒÁ ¼Ù 㪠§Ò¹ÊÒÁÒö Êà ҧ¿ §¡ ªÑè¹áÅÐä¿Å äźÃÒÃÕ¢Öé¹àÍ§ä´ ´ Ç¡ÒÃÃÇÁàÍÒ¤íÒÊÑ觷Õè㪠§Ò¹º ÍÂæ ÁÒÊà ҧ໠¹¿ §¡ ªÑè¹ áÅÐÃÇÁËÅÒÂæ ¿ §¡ ªÑè¹à¢ Ò´ Ç¡ѹà¾×èÍÊà ҧ໠¹ä¿Å äźÃÒÃÕ ·Ñ駹Õéà¾×èÍ»ÃÐ⪹ 㹡ÒþѲ¹Ò â»Ãá¡ÃÁã¹Í¹Ò¤µ ´ Ç¡ÒÃàÃÕ¡㪠ä¿Å äźÃÒÃÕ ¨Ð·íÒãË Å´àÇÅÒ㹡ÒþѲ¹Òâ»Ãá¡ÃÁ áÅФÇÒÁ «Ñº« ͹¢Í§â»Ãá¡ÃÁÅ§ä´ Í ҧÁÒ¡ ÊíÒËÃѺä¿Å äźÃÒÃÕ·ÊÕè à ҧ¢Ö¹é àͧà¾×Íè 㪠§Ò¹¡Ñº¡ÒâѺÁÍàµÍà ¢Í§ Robo-PICA ¤×Í motor.h â´ÂÁÕÃÒÂÅÐàÍÕ´«Íà Êâ»Ãá¡ÃÁáÊ´§´Ñ§â»Ãá¡ÃÁ·Õè 4-1 char motor_duty_= 127; char motor_init_=0; //
Motor M-1 : PD0 ====>
// Motor M-2 : PB1 ====>
// Defalt PWM 50% // Status initial 1A
PD1 ====>
2A PB2 ====>
2B
1B
PC2 ====> PC1 ====>
1E (PWM1) 2E (PWM2)
//********** Initial Motor Function ****************** void Motor_Init() { if (motor_init_==0) // First time ? { motor_init_=1; // Status ANSELH.F0=0; // RB1 ==> Digital IO ANSELH.F2=0; // RB2 ==> Digital IO TRISB.F1=0; // Motor B 2A TRISB.F2=0; // Motor B 2B TRISD.F0=0; // Motor A 1A TRISD.F1=0; // MOtor A 1B Pwm1_Init(5000); // Initail PWM 1E Pwm2_Init(5000); // Initail PWM 2E } } //********** Control Duty Cycle *********************/ void Change_Duty(char speed) { if (speed != motor_duty_) // Check Same old speed { motor_duty_=speed; // Save for old speed Pwm1_Change_Duty(speed); // Motor A Pwm2_Change_Duty(speed); // Motor B } } //********** Motor A Forward ******** void Motor_A_FWD() { Pwm1_Start(); PORTD.F0 =0; PORTD.F1 =1; } /********** Motor B Forward ********/ void Motor_B_FWD() { Pwm2_Start(); PORTB.F1 =0; PORTB.F2 =1; }
â»Ãá¡ÃÁ·Õè 4-1 ä¿Å äźÃÒÃÕ motor.h ÊíÒËÃѺ㪠¡ºÑ Ëع ¹µ Robo-PICA (ÁÕµÍ )
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 67
/********** Motor A Backward void Motor_A_BWD() { Pwm1_Start(); PORTD.F0 =1; PORTD.F1 =0; }
*******/
/********** Motor B Backward void Motor_B_BWD() { Pwm2_Start(); PORTB.F1 =1; PORTB.F2 =0; }
*******/
/********** Motor A Off ************/ void Motor_A_Off() { Pwm1_Stop(); PORTD.F0 =0; PORTD.F1 =0; } /********** Motor B Off ************/ void Motor_B_Off() { Pwm2_Stop(); PORTB.F1 =0; PORTB.F2 =0; } /********** Go Forward ************/ void Forward(char speed) { Motor_Init(); Change_Duty(speed); Motor_A_FWD(); Motor_B_FWD(); } /********** Go Backward ************/ void Backward(char speed) { Motor_Init(); Change_Duty(speed); Motor_A_BWD(); Motor_B_BWD(); } /********** Spin Left *************/ void S_Right(char speed) { Motor_Init(); Change_Duty(speed); Motor_A_FWD(); Motor_B_BWD(); } /********** Spin Right void S_Left(char speed) { Motor_Init(); Change_Duty(speed); Motor_A_BWD(); Motor_B_FWD(); }
************/
/********** Stop Motor void Motor_Stop() { Motor_Init(); Change_Duty(0); Motor_A_Off(); Motor_B_Off(); }
************/
â»Ãá¡ÃÁ·Õè 4-1 ä¿Å äźÃÒÃÕ motor.h ÊíÒËÃѺ㪠¡ºÑ Ëع ¹µ Robo-PICA (¨º)
68 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
4.5.1 ¡ÒÃàÃÕ¡㪠§Ò¹äźÃÒÃÕ motor.h (1) Êà ҧä¿Å äźÃÒÃÕ motor.h â´Âà» ´â»Ãá¡ÃÁà·ç¡« àÍ´ÔàµÍà ã´æ ÍÒ·Ô Notepad ËÃ×Í㪠àÍ ´ÔàµÍà 㹠mikroC áŠǾÔÁ¾ â»Ãá¡ÃÁµÒÁ·Õáè Ê´§ã¹â»Ãá¡ÃÁ·Õè 4-1 áŠǺѹ·Ö¡ã¹ª×Íè motor.h ËÃ×Í ¤Ñ´ÅÍ¡ÁÒ¨Ò¡á¼ ¹«Õ´ÃÕ ÍÁâ»Ãá¡ÃÁ¢Í§ªØ´Ëع ¹µ Robo-PICA (2) ºÑ¹·Ö¡ËÃ×ͤѴÅÍ¡ä»à¡çºäÇ ·Õè C:\Program Files\Mikroelektronika\mikroC\include
4.5.2 ¡ÒÃ㪠§Ò¹¤íÒÊѧè ÀÒÂã¹äźÃÒÃÕ motor.h Forward
à» ¹¤íÒÊÑè§à¾×èÍÊÑè§ãË ËØ ¹Â¹µ à¤Å×è͹·Õèä»´ ҹ˹ Ò ÃٻẺ¤íÒÊÑè§ void Forward(char speed)
¾ÒÃÒÁÔàµÍà speed
à» ¹¤ Ò´ÔǵÕäé «à¡ÔÅà¾×Íè ¡íÒ˹´¤ÇÒÁàÃçÇ㹡ÒÃà¤Å×Íè ¹·Õè ÁÕ¤Ò µÑ§é áµ 0 ¶Ö§ 255
Backward
à» ¹¤íÒÊÑè§à¾×èÍÊÑè§ãË ËØ ¹Â¹µ à¤Å×è͹·Õè¶ÍÂËÅѧ ÃٻẺ¤íÒÊÑè§ void backward(char speed)
¾ÒÃÒÁÔàµÍà speed
à» ¹¤ Ò´ÔǵÕäé «à¡ÔÅà¾×Íè ¡íÒ˹´¤ÇÒÁàÃçÇ㹡ÒÃà¤Å×Íè ¹·Õè ÁÕ¤Ò µÑ§é áµ 0 ¶Ö§ 255
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 69
S_Left
à» ¹¤íÒÊÑè§à¾×èÍÊÑè§ãË ËØ ¹Â¹µ ËÁعµÑÇ·Ò§« Ò ÃٻẺ¤íÒÊÑè§ void S_Left(char speed)
¾ÒÃÒÁÔàµÍà speed
à» ¹¤ Ò´ÔǵÕäé «à¡ÔÅà¾×Íè ¡íÒ˹´¤ÇÒÁàÃçÇ㹡ÒÃà¤Å×Íè ¹·Õè ÁÕ¤Ò µÑ§é áµ 0 ¶Ö§ 255
S_Right
à» ¹¤íÒÊÑè§à¾×èÍÊÑè§ãË ËØ ¹Â¹µ ËÁعµÑÇ·Ò§¢ÇÒ ÃٻẺ¤íÒÊÑè§ void S_Left(char speed)
¾ÒÃÒÁÔàµÍà speed
à» ¹¤ Ò´ÔǵÕäé «à¡ÔÅà¾×Íè ¡íÒ˹´¤ÇÒÁàÃçÇ㹡ÒÃà¤Å×Íè ¹·Õè ÁÕ¤Ò µÑ§é áµ 0 ¶Ö§ 255
70 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
¡Ô¨¡ÃÃÁ·Õè 5
Robo-PICA à¤Å×Íè ¹·Õµè ÒÁÃٻẺ·Õ¡è Òí ˹´ A5.1 à¢Õ¹â»Ãá¡ÃÁ·Õè A5-1 ´ Ç mikroC IDE ·íÒ¡ÒäÍÁä¾Å ãË ä´ ä¿Å ¼ÅÅѾ¸ .hex A5.2 àª×Íè Áµ ͺÍà ´â»Ãá¡ÃÁࢠҡѺËع ¹µ Robo-PICA áÅоÍà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍà A5.3 ´Òǹ âËÅ´â»Ãá¡ÃÁä»ÂѧËع ¹µ Robo-PICA áÅ Ç» ´ÊÇÔµª POWER A5.4 »Å´ÊÒ´Òǹ âËÅ´·Ñ§é ËÁ´ÍÍ¡¨Ò¡Ëع ¹µ Robo-PICA #include <motor.h> void main() { Sound_Init(&PORTC, 0); while(PORTA.F4==1); Sound_Play(250,50); Forward(255); Delay_ms(2000);
// Init Sound // 2kHz sound ON RC0 // Call Forward
Sound_Play(250,50); S_Left(255); Delay_ms(800);
// 2kHz sound ON RC0 // Call Spin Left
Sound_Play(250,50); Forward(255); Delay_ms(2000);
// 2kHz sound ON RC0 // Call Forward
Sound_Play(250,50); S_Right(255); Delay_ms(800);
// 2kHz sound ON RC0 // Call Spin Right
Sound_Play(250,50); Forward(255); Delay_ms(2000);
// 2kHz sound ON RC0 // Call Forward
Sound_Play(250,50); S_Left(255); Delay_ms(800);
// 2kHz sound ON RC0 // Call Spin Left
Sound_Play(250,50); Backward(255); Delay_ms(1000);
// 2kHz sound ON RC0 // Call Backward
Sound_Play(250,50); Motor_Stop();
// 2kHz sound ON RC0 // Stop all
}
â»Ãá¡ÃÁ·Õè A5-1 ä¿Å movement.c â»Ãá¡ÃÁ¤Çº¤ØÁ¡ÒÃà¤Å×Íè ¹·Õ¢è ͧËع ¹µ â´Â㪠ä¿Å äźÃÒÃÕè motor.h
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 71
A5.5 ¹íÒËع ¹µ Robo-PICA ÇÒ§º¹¾×¹é à» ´ÊÇÔµª POWER Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ ËØ ¹Â¹µ Robo-PICA ¢ÑºàÊÕ§¤ÇÒÁ¶Õè 2kHz áÅ Çà¤Å×è͹·ÕèµÃ§ä»¢ ҧ˹ Ò ¨Ò¡¹Ñé¹ËÁعµÑÇä»·Ò§« Ò áÅ Çà¤Å×Íè ¹·Õäè »¢ ҧ˹ Ò ã¹·Ø¡¨Ñ§ËÇзÕÁè ¡Õ ÒÃà»ÅÕÂè ¹á»Å§¡ÒÃà¤Å×Íè ¹·Õè ÊÑÒ³àÊÕ§¤ÇÒÁ¶Õè 2kHz ¨Ð¶Ù¡¢Ñº ãË ä´ ÂÔ¹¼ Ò¹·Ò§ÅíÒ⾧໠Ââ« µ ͨҡ¹Ñ¹é Ëع ¹µ Robo-PICA ¨Ðà¤Å×Íè ¹·Õµè ç໠¹àÇÅÒ 2 ÇÔ¹Ò·Õ áÅ ÇËÁعµÑÇä»·Ò§¢ÇÒ µÒÁ´ ÇÂà¤Å×Íè ¹ ·Õµè çÍÕ¡ 2 ÇÔ¹Ò·Õ áÅ ÇËÁعµÑÇä»·Ò§« Ò ¨Ò¡¹Ñ¹é ¨Ðà¤Å×Íè ¹·Õ¶è ÍÂËÅѧ໠¹àÇÅÒ 1 ÇÔ¹Ò·Õ áŠǨ֧ËÂØ´à¤Å×Íè ¹·Õè ã¹·Ø¡¨Ñ§ËÇзÕÁè ¡Õ ÒÃà»ÅÕÂè ¹á»Å§¡ÒÃà¤Å×Íè ¹·Õè ÊÑÒ³àÊÕ§¤ÇÒÁ¶Õè 2kHz ¨Ð¶Ù¡¢ÑºãË ä´ Â¹Ô ¼ Ò¹·Ò§ÅíÒ⾧໠Ââ«
INNOVATIVE EXPERIMENT
72 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 73
º··Õè 5
Robo-PICA ¡ÑºµÑǵÃǨ¨ÑºáººÍйÒÅÍ¡
ËØ ¹Â¹µ Robo-PICA 㪠äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 㹡ÒäǺ¤ØÁ¡Ò÷íÒ§Ò¹ â´Â PIC16F887 ÁÕ¢Ò¾Íà µÊíÒËÃѺµÔ´µ ͡ѺµÑǵÃǨ¨ÑºáººÍйÒÅÍ¡ÁÒ¡¶Ö§ 14 ¢Ò ¤×Í RA0 ¶Ö§ RA3, RA5, RB0 ¶Ö§ RB5 áÅÐ RE0 ¶Ö§ RE2 áµ ¹Òí ÁҨѴÊÃú¹ºÍà ´¤Çº¤ØÁ¢Í§Ëع ¹µ Robo-PICA ÃÇÁ 9 ª ͧ ¤×Í RA0 ¶Ö§ RA3, RB0 áÅÐ RE0 ¶Ö§ RE2 㹡ÒèѴ¡ÒáѺÊÑÒ³ÍйÒÅÍ¡¹Ñ¹é PIC16F887 ÁÕâÁ´ÙÅá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅ (ADC) ¤ÇÒÁÅÐàÍÕ´ 10 ºÔµ ÃͧÃѺáç´Ñ¹ÍйÒÅÍ¡ ÍÔ¹¾Øµä´ ã¹Â Ò¹ 0 ¶Ö§ +5V àÁ×Íè ¼ Ò¹¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ ADC áÅ Ç ¨Ðä´ ¼ÅÅѾ¸ à» ¹¢ ÍÁÙÅ´Ô¨µÔ ÍÅ ã¹Â Ò¹ 0 ¶Ö§ 1,023 (àÅ¢°Ò¹ÊÔº) ËÃ×Í 0000000000 ¶Ö§ 1111111111 (àÅ¢°Ò¹Êͧ) ËÃ×Í 0x0000 ¶Ö§ 0x03FF (àÅ¢°Ò¹ÊԺˡ)
5.1 ÃÕ¨ÊÔ àµÍà ·àÕè ¡ÕÂè Ç¢ ͧ¡Ñº¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ ADC ã¹ PIC16F887 5.1.1 ADCON0 à» ¹ÃÕ¨ÊÔ àµÍà ÊÒí ËÃѺàÅ×Í¡ª ͧÊÑÒ³ÍйÒÅÍ¡ áÅÐà» ´¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅá»Å§ÊÑÒ³ ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ (ADC) ã¹ÃÙ»·Õè 5-1 áÊ´§¼Ñ§¡ÒÃàÅ×Í¡¡íÒ˹´¤ Òã¹ÃÕ¨ÊÔ àµÍà ADCON0 Ê Ç¹ ÃÒÂÅÐàÍÕ´ã¹áµ ÅкԵ¢Í§ÃÕ¨ÊÔ àµÍà ADCON0 ÁÕ´§Ñ ¹Õé
ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4
ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0
ADCS1 ADCS0 CHS3
CHS2
CHS1
CHS0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
GO/ DONE R/W-0
ºÔµ 7 áÅÐ 6 - ADCS1 áÅÐ ADCS0 : ºÔµàÅ×Í¡ÊÑÒ³¹ÒÌ ¡Ò·Õãè ª ¡ºÑ âÁ´ÙÅ ADC 00 = ÊÑÒ³¹ÒÌ ¡ÒÀÒÂã¹ËÒà 2 (FOSC/2) 01 = ÊÑÒ³¹ÒÌ ¡ÒÀÒÂã¹ËÒà 8 (FOSC/8) 10 = ÊÑÒ³¹ÒÌ ¡ÒÀÒÂã¹ËÒà 32 (FOSC/32) 11 = ÊÑÒ³¹ÒÌ ¡Ò¨Ò¡Ç§¨Ã RC ÀÒÂã¹ (FRC) ¤ ÒÊÙ§ÊØ´ 500kHz
ADON R/W-0
74 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
ºÔµ 5 ¶Ö§ 2 - CHS3 ¶Ö§ CHS0 : ºÔµàÅ×Í¡ª ͧÍÔ¹¾ØµÍйÒÅÍ¡·Õµè Í §¡ÒÃÍ Ò¹¤ Ò 0000 = AN0 (¢Ò¾Íà µ RA0) 0001 = AN1 (¢Ò¾Íà µ RA1) 0010 = AN2 (¢Ò¾Íà µ RA2) 0011 = AN3 (¢Ò¾Íà µ RA3) 0100 = AN4 (¢Ò¾Íà µ RA5) 0101 = AN5 (¢Ò¾Íà µ RE0) 0110 = AN6 (¢Ò¾Íà µ RE1) 0111 = AN7 (¢Ò¾Íà µ RE2) 1000 = AN8 (¢Ò¾Íà µ RB2) 1001 = AN9 (¢Ò¾Íà µ RB3) 1010 = AN10 (¢Ò¾Íà µ RB1) 1011 = AN11 (¢Ò¾Íà µ RB4) 1100 = AN12 (¢Ò¾Íà µ RB0) 1101 = AN13 (¢Ò¾Íà µ RB5) 1110 = CVREF (áç´Ñ¹Í Ò§ÍԧẺâ»Ãá¡ÃÁä´ ÊÒí ËÃѺâÁ´ÙÅà»ÃÕºà·Õºáç´Ñ¹ÍйÒÅÍ¡) 1111 = áç´Ñ¹Í Ò§ÍÔ§¤§·Õè (0.6V)
ºÔµ 1 - GO/DONE : ºÔµàÃÔÁè µ ¹¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ ADC 0 = ¡ÒÃá»Å§¢ ÍÁÙÅàÊÃç¨ÊÔ¹é 1 = àÃÔÁè µ ¹¡ÒÃá»Å§ÊÑÒ³ áÅШдíÒçʶҹйÕãé ¹ÃÐËÇ Ò§¡ÒÃá»Å§ÊÑÒ³ ¨¹¡Ãзѧè àÊÃç¨ÊÁºÙó ºÔµ¹Õ¨é СÅÒÂà» ¹ 0 â´ÂÍѵâÁÁѵÔ
ºÔµ 0 - ADON : ºÔµàÍç¹àÍàºÔÅâÁ´ÙÅá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ 0 = ´ÔÊàÍàºÔÅËÃ×Í» ´¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ ADC 1 = àÍç¹àÍàºÔÅ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ ADC
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 75
AVSS
VCFG1 = 0 VCFG1 = 1
VREF-
AVDD
VREF+
AN0/RA0
0000
AN1/RA1
0001
AN2/RA2
0010
AN3/RA3
0011
AN4/RA5
0100
AN5/RE0
0101
AN6/RE1
0110
AN7/RE2
0111
AN8/RB2
1000
AN9/RB3
1001
AN10/RB1
1010
AN11/RB4
1011
AN12/RB0
1100
AN13/RB5
1101
CVREF
1110
Fixed Ref
1111
VCFG0 = 0 VCFG0 = 1
ADC 10 ºÔµ GO/DONE
ADFM
0 : ºÔµ¢ ÍÁÙŪԴ« Ò 1 : ºÔµ¢ ÍÁÙŪԴ¢ÇÒ 10 ºÔµ
ADON
ADRESH
ADRESL
CHS3-CHS0
ÃÙ»·Õè 5-1 áÊ´§¡Åä¡ã¹¡ÒáíÒ˹´¤ ҢͧºÔµµ Ò§æ ã¹ÃÕ¨ÊÔ àµÍà ¤Çº¤ØÁ·Õàè ¡ÕÂè Ç¢ ͧ¡Ñº¡Ò÷íÒ§Ò¹¢Í§ âÁ´ÙÅ ADC ÀÒÂã¹ PIC16F887 â´ÂºÔµ CHS3 ¶Ö§ CHS0, GO/DONE áÅÐ ADON à» ¹ºÔµ¤Çº¤ØÁã¹ÃÕ¨ÊÔ àµÍà ADCON0 Ê Ç¹ ADFM, VCFG0 áÅÐ VCFG1 à» ¹ºÔµ¤Çº¤ØÁã¹ÃÕ¨ÊÔ àµÍà ADCON1
76 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
5.1.2 ÃÕ¨ÊÔ àµÍà ADCON1 à» ¹ÃÕ¨ÊÔ àµÍà ·ãÕè ª ¡Òí ˹´¤ Òáç´Ñ¹Í Ò§ÍÔ§ãË ¡ºÑ âÁ´ÙÅ ADC áÅСíÒ˹´ÃٻẺ¢Í§¼ÅÅѾ¸ àÍÒµ ¾µØ ·ÕÃè ¨Õ ÊÔ àµÍà ADRESH áÅÐ ADRESL
ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ADFM
-
R/W-0
U-0
VCFG1 VCFG0 R/W-0
R/W-0
ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 -
-
-
-
U-0
U-0
U-0
U-0
ºÔµ 7 - ADFM : ºÔµ¡íÒ˹´ÃٻẺ¼ÅÅѾ¸ ·ÃÕè ¨Õ ÊÔ àµÍà ADRESH áÅÐ ADRESL 0 = ¢ ÍÁÙŪԴ价ҧ« Ò (ddddddddddxxxxxx) 1 = ¢ ÍÁÙŪԴ价ҧ¢ÇÒ (xxxxxxdddddddddd)
ºÔµ 6 - äÁ 㪠§Ò¹ Í Ò¹ä´ à» ¹ 0 ºÔµ 5 - VCFG1: ¢ÒàÅ×Í¡áç´Ñ¹Í Ò§Íԧź 0 = VSS 1 = ¢Ò V REF-
bit 4 VCFG0: ¢ÒàÅ×Í¡áç´Ñ¹Í Ò§ÍÔ§ (ºÇ¡) 0 = VDD 1 = ¢Ò VREF+
ºÔµ 3 ¶Ö§ 0 - äÁ 㪠§Ò¹ Í Ò¹ä´ à» ¹ 0
5.1.3 ÃÕ¨ÊÔ àµÍà ADRESL áÅÐ ADRESL à» ¹ÃÕ¨ÊÔ àµÍà ÊÒí ËÃѺà¡çº¢ ÍÁÙÅ·ÕÍè Ò ¹¤ Òä´ ¨Ò¡âÁ´ÙÅ ADC â´ÂÃÕ¨ÊÔ àµÍà ADRESL à¡çº¢ ÍÁÙŠ亵 ÅÒ § (ËÃ×Í亵 µÒèí ) Ê Ç¹ ADRESH à¡çº¢ ÍÁÙÅ亵 º¹ (ËÃ×Í亵 ʧ٠)
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 77
5.1.4 ÃÕ¨ÊÔ àµÍà ANSEL à» ¹ÃÕ¨ÊÔ àµÍà ÊÒí ËÃѺàÅ×͡˹ Ò·Õãè ¹¡Ò÷íÒ§Ò¹¢Í§¢Ò¾Íà µ RA0 ¶Ö§ RA3, RA5 áÅÐ RE0 ¶Ö§ RE2 Ç Òµ ͧ¡ÒÃãË à» ¹¢ÒÍÔ¹¾ØµÍйÒÅÍ¡ËÃ×ÍÍÔ¹¾ØµàÍÒµ ¾Øµ´Ô¨ÔµÍÅ â´Â¤ ÒµÑ駵 ¹ËÃ×ͤ Ò»¡µÔ¨Ð ¡íÒ˹´ãË ¢Ò¾Íà µàËÅ Ò¹Õé·íҧҹ໠¹¢Ò¾Íà µÍÔ¹¾ØµÍйÒÅÍ¡
ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 ANS7
ANS6
ANS5
ANS4
ANS3
ANS2
ANS1
ANS0
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
ºÔµ 7 ¶Ö§ 0 - ANS7 ¶Ö§ ANS0 : ºÔµàÅ×Í¡¡Ò÷íҧҹ໠¹ÍÔ¹¾ØµÍйÒÅÍ¡ 0 = ¡íÒ˹´à» ¹¢Ò¾Íà µ´Ô¨µÔ ÍÅ â´ÂÊÒÁÒö¡íÒ˹´à» ¹ÍÔ¹¾ØµËÃ×ÍàÍÒµ ¾µØ ¡çä´ 1 = ¡íÒ˹´à» ¹¢Ò¾Íà µÍÔ¹¾ØµÍйÒÅÍ¡ (à» ¹¤ ÒàÃÔÁè µ ¹àÁ×Íè ÃÕ૵) àÁ×èÍàÅ×Í¡ãË ¢ÒàËÅ Ò¹Õéà» ¹ÍÔ¹¾ØµÍйÒÅÍ¡ ¨Ðà» ¹¡ÒáàÅÔ¡¡Ò÷íÒ§Ò¹ã¹Ê ǹ´Ô¨ÔµÍÅ·Ñé§ËÁ´ ઠ¹ ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ àÁ×Íè à¡Ô´¡ÒÃà»ÅÕÂè ¹á»Å§Åͨԡ·Õ¢è Ò¾Íà µËÃ×Í¡ÒþÙÅÍÑ»¨Ò¡ÀÒÂã¹ ¹Í¡¨Ò¡¹Ñ¹é µ ͧ¡íÒ˹´¤ Ңͧ ÃÕ¨ÊÔ àµÍà TRIS ãË à» ¹¢ÒÍÔ¹¾Øµ´ Ç à¾×Íè ãË áç´Ñ¹·Õäè ´ à» ¹áç´Ñ¹·Õáè · ¨ÃÔ§¨Ò¡ÍØ»¡Ã³ ÍйÒÅÍ¡ÀÒ¹͡
5.1.5 ÃÕ¨ÊÔ àµÍà ANSELH à» ¹ÃÕ¨ÊÔ àµÍà ÊÒí ËÃѺàÅ×͡˹ Ò·Õãè ¹¡Ò÷íÒ§Ò¹¢Í§¢Ò¾Íà µ RB0 ¶Ö§ RB5 Ç Òµ ͧ¡ÒÃãË à» ¹ ¢ÒÍÔ¹¾ØµÍйÒÅÍ¡ËÃ×ÍÍÔ¹¾ØµàÍÒµ ¾µØ ´Ô¨µÔ ÍÅ â´Â¤ ÒµÑ§é µ ¹ËÃ×ͤ Ò»¡µÔ¨Ð¡íÒ˹´ãË ¢Ò¾Íà µàËÅ Ò¹Õé ·íҧҹ໠¹¢Ò¾Íà µÍÔ¹¾ØµÍйÒÅÍ¡
ºÔµ 7 ºÔµ 6 ºÔµ 5 ºÔµ 4 ºÔµ 3 ºÔµ 2 ºÔµ 1 ºÔµ 0 -
-
U-0
U-0
ºÔµ 7 áÅÐ 6 - äÁ 㪠§Ò¹
ANS13 ANS12 ANS11 ANS10 ANS9
ANS8
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
R/W-1
Í Ò¹¤ Òä´ à» ¹ 0
ºÔµ 5 ¶Ö§ 0 - ANS13 ¶Ö§ ANS8 : ºÔµàÅ×Í¡¡Ò÷íҧҹ໠¹ÍÔ¹¾ØµÍйÒÅÍ¡ª ͧ AN13 ¶Ö§ AN8 0 = ¡íÒ˹´à» ¹¢Ò¾Íà µ´Ô¨µÔ ÍÅ â´ÂÊÒÁÒö¡íÒ˹´à» ¹ÍÔ¹¾ØµËÃ×ÍàÍÒµ ¾µØ ¡çä´ 1 = ¡íÒ˹´à» ¹¢Ò¾Íà µÍÔ¹¾ØµÍйÒÅÍ¡ (à» ¹¤ ÒàÃÔÁè µ ¹àÁ×Íè ÃÕ૵) àÁ×èÍàÅ×Í¡ãË ¢ÒàËÅ Ò¹Õéà» ¹ÍÔ¹¾ØµÍйÒÅÍ¡ ¨Ðà» ¹¡ÒáàÅÔ¡¡Ò÷íÒ§Ò¹ã¹Ê ǹ´Ô¨ÔµÍÅ·Ñé§ËÁ´ ઠ¹ ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ àÁ×Íè à¡Ô´¡ÒÃà»ÅÕÂè ¹á»Å§Åͨԡ·Õ¢è Ò¾Íà µËÃ×Í¡ÒþÙÅÍÑ»¨Ò¡ÀÒÂã¹ ¹Í¡¨Ò¡¹Ñ¹é µ ͧ¡íÒ˹´¤ Ңͧ ÃÕ¨ÊÔ àµÍà TRIS ãË à» ¹¢ÒÍÔ¹¾Øµ´ Ç à¾×Íè ãË áç´Ñ¹·Õäè ´ à» ¹áç´Ñ¹·Õáè · ¨ÃÔ§¨Ò¡ÍØ»¡Ã³ ÍйÒÅÍ¡ÀÒ¹͡
78 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
5.2 ¡ÒõԴµ ͡ѺâÁ´ÙÅá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ (ADC) â´Â»¡µÔ mikroC ¤ÍÁä¾àÅÍà ÁäÕ ¿Å äźÃÒÃÕÊÒí ËÃѺ¡ÒõԴµ ͡ѺâÁ´ÙÅá»Å§ÊÑÒ³ÍÐ¹Ò ÅÍ¡à» ¹´Ô¨ÔµÍŢͧäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC äÇ ¾Ã ÍÁ㪠§Ò¹ áµ ÊíÒËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 à» ¹àºÍà ãËÁ ·ÕèÁÕʶһ µÂ¡ÃÃÁᵡµ Ò§¨Ò¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC àºÍà ¡ ͹˹ Ò ¹Õé ¨Ö§¨íÒà» ¹µ ͧà¢Õ¹â»Ãá¡ÃÁËÃ×ÍÊà ҧä¿Å äźÃÒÃÕà¾×Íè µÔ´µ ͡ѺâÁ´ÙÅ ADC ÀÒÂã¹ POIC16F887 ¢Öé¹àͧ ËÁÒÂà赯 ¢³Ð·Õ¼è àÙ ¢Õ¹¡íÒÅѧà¢Õ¹˹ѧÊ×ÍàÅ Á¹Õé mikroC ¤ÍÁä¾àÅÍà ໠¹àÇÍà ª¹Ñ 7.0.0.3 ã¹àÇÍà ª¹Ñ ·Õãè ËÁ ¡Ç Ò¹ÕÍé Ò¨ÁÕ¡ÒÃá¡ ä¢ä¿Å äźÃÒÃբͧâÁ´ÙÅ ADC ãË ÊÒÁÒÃ¶ãª ä´ ¡ºÑ PIC16F887 ä´ Í ҧ äáçµÒÁ¡ÒÃà¢Õ¹â»Ãá¡ÃÁµÔ´µ ͡ѺâÁ´ÙÅ ADC â´ÂµÃ§´ ÇÂÇÔ¸¡Õ ÒÃã¹Ë¹Ñ§Ê×ÍàÅ Á¹Õ¡é Âç §Ñ ¤§ãª ä´
5.2.1 ¢Ñ¹é µÍ¹¡ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×Íè µÔ´µ ͡ѺâÁ´ÙÅ ADC ¢Í§ PIC16F887 (1) ¡íÒ˹´¢Ò¾Íà µ·Õµè Í §¡ÒÃ㪠§Ò¹¡ÑºâÁ´ÙÅ ADC ãË à» ¹ÍÔ¹¾Øµ â´Â¡íÒ˹´·ÕÃè ¨Õ ÊÔ àµÍà TRIS (2) ¡íÒ˹´¤ ÒãË ¡ºÑ ÃÕ¨ÊÔ àµÍà ANSEL áÅÐ ANSELH à¾×Íè àÅ×Í¡¡Ò÷íÒ§Ò¹¢Í§¢Ò¾Íà µ·Õµè Í § ¡ÒÃ㪠§Ò¹à» ¹ÍÔ¹¾ØµÍйÒÅÍ¡ (3) àÅ×Í¡ª ͧÍÔ¹¾ØµÍйÒÅÍ¡·Õµè Í §¡ÒÃÍ Ò¹¤ Ò áÅ ÇàÍç¹àÍàºÔÅ¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ ADC â´Â ¡íÒ˹´¤ Ò·ÕÃè ¨Õ ÊÔ àµÍà ADCON0 (4) ૵ºÔµ GO/DONE ã¹ÃÕ¨ÊÔ àµÍà ADCON0 à¾×Íè àÃÔÁè µ ¹¡ÒÃá»Å§¢ ÍÁÙÅ (5) Ãͨ¹ºÔµ GO/DONE à» ¹ 0 «Ö§è ËÁÒ¶֧¡ÒÃá»Å§¢ ÍÁÙÅÍйÒÅÍ¡àÊÃç¨ÊÔ¹é ·íÒ¡ÒÃÍ Ò¹ ¤ Ò¢ ÍÁÙÅÍÍ¡ÁÒ¨Ò¡ÃÕ¨ÊÔ àµÍà ADRESL áÅÐ ADRESH
5.2.2 ä¿Å äźÃÒÃÕ adc.h ¨Ò¡¢Ñ¹é µÍ¹¡ÒÃà¢Õ¹â»Ãá¡ÃÁ·Ñ§é ËÁ´ã¹ËÑÇ¢ Í 5.2.1 ÊÒÁÒö¹íÒÁÒà¢Õ¹໠¹â»Ãá¡ÃÁÀÒÉÒ C à¾×Íè Êà ҧ໠¹ä¿Å äźÃÒÃÕ adc.h ÊíÒËÃѺ㪠§Ò¹âÁ´ÙÅ ADC ¢Í§ PIC16F887 ´Ñ§áÊ´§ÃÒÂÐÅàÍÕ´ ¢Í§ä¿Å äźÃÒÃÕ adc.h ã¹â»Ãá¡ÃÁ·Õè 5-1 Í ҧäáçµÒÁäźÃÒÃÕ adc.h ·ÕèÊà ҧ¢Öé¹¹Õé¨ÐÃͧÃѺ¡Ñº¡Ò÷íÒ§Ò¹¢Í§¾Íà µÍÔ¹¾ØµÍйÒÅÍ¡ à¾Õ§ 8 ª ͧŠҧ¤×Í AN0 ¶Ö§ AN7 ËÃ×Í RA0 ¶Ö§ RA3, RA5 áÅÐ RE0 ¶Ö§ RE2 ෠ҹѹé
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 79 int Adc_Rd(char ch) { int dat=0; if ((ch>=0) && (ch<=3)) TRISA |= (1<<ch); else if (ch==4) TRISA |= 0x20; else if ((ch>=5) && (ch<=7)) TRISE |= (1<<(ch-5)); ANSEL |=(1<<ch); ADCON0 = (0xC1 + (ch*4)); Delay_us(10); ADCON0.GO=1; while(ADCON0.GO); dat = (ADRESH*4)+(ADRESL/64); return dat; }
// Low 8 Channel ADC read // Save ADC // CH0-CH3 // CH4 // CH5-CH7 // // // // // // //
Set channel to analog Select ADC Channel Acquisiton delay Start conversion Conversion done? Sum highbyte and lowbyte Return value
â»Ãá¡Ã·Õè 5-1 ä¿Å äźÃÒÃÕ adc.h ÊíÒËÃѺ㪠§Ò¹ÍÔ¹¾ØµÍйÒÅÍ¡¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ã¹Ëع ¹µ Robo-PICA áÅÐ mikroC ¤ÍÁä¾àÅÍÃ
¡Ô¨¡ÃÃÁ·Õè 6
Í Ò¹¤ ÒµÑǵÃǨ¨ÑºÍйÒÅÍ¡
A6.1 à¢Õ¹â»Ãá¡ÃÁ·Õè A6-1 ´ Ç mikroC IDE ·íÒ¡ÒäÍÁä¾Å ãË ä´ ä¿Å ¼ÅÅѾ¸ .hex A6.2 àª×Íè Áµ ͺÍà ´â»Ãá¡ÃÁࢠҡѺËع ¹µ Robo-PICA áÅоÍà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍà A6.3 ´Òǹ âËÅ´â»Ãá¡ÃÁä»ÂѧËع ¹µ Robo-PICA A6.4 µ ÍÊÒ¨ҡàÍÒµ ¾µØ (àÍÒµ ¾µØ Ẻáç´Ñ¹ÁÒ¡¢Ö¹é àÁ×Íè ËÁع᡹µÒÁà¢çÁ¹ÒÌ ¡Ò) ¢Í§á¼§Ç§¨ÃµÑǵ Ò¹ ·Ò¹»ÃѺ¤ Òä´ áººá¡¹ËÁØ¹à¢ Ò·Õ¨è ´Ø µ Í RA0 ¢Í§Ëع ¹µ Robo-PICA ẺµÑǵÑé§
)
POTENTIOMETER
A
POTENTIOMETER
ẺµÑǹ͹
A
S +
S
àÁ×Íè ËÁع·Ç¹à¢çÁ¹ÒÌÔ¡Ò áç´Ñ¹·Õäè ´ ¨ÐÁÒ¡¢Ö¹é àÁ×Íè ËÁعµÒÁà¢çÁ¹ÒÌÔ¡Ò áç´Ñ¹·Õäè ´ ¨ÐÁÒ¡¢Ö¹é
+
10kB
Potentiometer
àÁ×Íè ËÁع·Ç¹à¢çÁ¹ÒÌÔ¡Ò áç´Ñ¹·Õäè ´ ¨ÐÁÒ¡¢Ö¹é àÁ×Íè ËÁعµÒÁà¢çÁ¹ÒÌÔ¡Ò áç´Ñ¹·Õäè ´ ¨ÐÁÒ¡¢Ö¹é
ÃÙ»·Õè A6-1 áÊ´§Ãٻà ҧ, ǧ¨Ã áÅСÒ÷íÒ§Ò¹¢Í§á¼§Ç§¨ÃµÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ áººá¡¹ËÁع
80 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
/*****
PIC
Show ADC from RA0 to LCD ***/
char txt[6]; int adc; void main() { Delay_ms(1000);
// Save test
Lcd_Init(&PORTD); Lcd_Cmd(LCD_CURSOR_OFF); Lcd_Out(1,1,"SENSOR0 = ");
// Init LCD Port // LCD cursor off // Show Text
TRISA = 0xFF; ANSEL = 0xFF; ADCON0=0b11000001; while(1) { ADCON0.GO=1; while(ADCON0.GO); adc= (ADRESH*4)+(ADRESL/64); WordToStr(adc,txt); Lcd_Out(1,10,txt); Delay_ms(100); }
// PORTA ==> input // PORTA ==> Analog // Select Analog1 RC_Mode and ADON
// // // // //
Start conversion conversion done? Sum highbyte and lowbyte Convert to ASCII Show on LCD
}
â»Ãá¡ÃÁ·Õè A6-1 ä¿Å adctest.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃÑºÍ Ò¹¤ ÒÍÔ¹¾ØµÐ¹ÒÅÍ¡ª ͧ AN0 (RA0) ¢Í§ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ÁÒáÊ´§·Õâè Á´ÙÅ LCD ¢Í§Ëع ¹µ Robo-PICA ÊíÒËÃѺâ»Ãá¡ÃÁ ¹ÕÂé §Ñ äÁ ä´ àÃÕ¡㪠ä¿Å äźÃÒÃÕ adc.h 㹡ÒáíÒ˹´¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ ADC ÀÒÂã¹ PIC16F887 A6.5 Ãѹâ»Ãá¡ÃÁ áÅ Ç·´ÅͧËÁع᡹¢Í§µÑǵ Ò¹·Ò¹»ÃѺ¤ Òä´ à¾×Íè »ÃѺà»ÅÕÂè ¹¤ Òáç´Ñ¹ÍÔ¹¾ØµÍйÒÅÍ¡·Õè » ͹ãË á¡ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 Êѧࡵ¼Å¡Ò÷íÒ§Ò¹·Õâè Á´ÙÅ LCD ¢Í§Ëع ¹µ Robo-PICA àÁ×Íè Ãѹâ»Ãá¡ÃÁ ·Õâè Á´ÙÅ LCD ¨ÐáÊ´§¢ ͤÇÒÁ SENSOR0
=
xxxxx
â´Â¤ Ò xxxxx à» ¹¤ Ò¢ ÍÁÙÅ´Ô¨µÔ ÍÅ·ÕÍè Ò ¹ä´ ¨Ò¡âÁ´ÙÅá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅÀÒÂã¹ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887
INNOVATIVE EXPERIMENT
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 81
º··Õè 6
Robo-PICA ¡ÑºÑ ¡ÒõÃǨ¨ÑºÊÔ§è ¡Õ´¢ÇҧẺäÁ ÊÁÑ ¼ÑÊ ã¹º·¹Õ¹é Òí àʹ͡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ Robo-PICA ¡ÑºâÁ´ÙŵÃǨ¨ÑºáÅÐÇÑ´ÃÐÂзҧ´ Ç áʧÍÔ¹¿ÃÒàôàºÍà GP2D120 à¾×Íè ãË Ë¹Ø Â¹µ ÊÒÁÒöËźËÅÕ¡ÊÔ§è ¡Õ´¢ÇҧẺäÁ ÊÁÑ ¼ÑÊä´ Íѹ໠¹¡Òà áÊ´§ãË àË繶֧ÈÑ¡ÂÀÒ¾¢Í§Ëع ¹µ 굄 â¹Áѵ¢Ô ¹Ò´àÅç¡·Õ¤è Ǻ¤ØÁ¡Ò÷íÒ§Ò¹´ ÇÂäÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
6.1 ¤Ø³ÊÁºÑµ¢Ô ͧ GP2D120 âÁ´ÙÅÇÑ´ÃÐÂзҧ´ ÇÂáʧÍÔ¹¿ÃÒàô 㪠¡ÒõÃǨ¨ÑºÃÐÂзҧ´ Ç¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô l ÇÑ´ÃÐÂÐ·Ò§ä´ 4 ¶Ö§ 30 ૹµÔàÁµÃ l ä¿àÅÕÂ é § 4.5 ¶Ö§ 5V ¡ÃÐáÊä¿¿ Ò 33 mA l ãË àÍÒµ ¾µ Ø à» ¹áç´Ñ¹ã¹Â Ò¹ 0.4 ¶Ö§ 2.4V ·Õäè ¿àÅÕÂé § +5V GP2D120 à» ¹âÁ´ÙŵÃǨ¨ÑºÃÐÂзҧẺÍÔ¹¿ÃÒàôÁÕ¢Òµ Í㪠§Ò¹ 3 ¢Ò¤×Í ¢Òµ Íä¿àÅÕÂé § (Vcc), ¢Ò¡ÃÒÇ´ (GND) áÅТÒáç´Ñ¹àÍÒµ ¾µØ (Vout) ¡ÒÃÍ Ò¹¤ Òáç´Ñ¹¨Ò¡ GP2D120 ¨Ðµ ͧÃÍ ãË ¾¹ ª ǧàµÃÕÂÁ¤ÇÒÁ¾Ã ÍÁ¢Í§âÁ´ÙÅ¡ ͹ «Ö§è 㪠àÇÅÒ»ÃÐÁÒ³ 32.7 ¶Ö§ 52.9 ÁÔÅÅÔÇ¹Ô Ò·Õ ´Ñ§¹Ñ¹é ã¹ ¡ÒÃÍ Ò¹¤ Òáç´Ñ¹¨Ö§¤ÇÃÃÍãË ¾¹ ª ǧàÇÅҴѧ¡Å ÒÇ仡 ͹ ´Ñ§áÊ´§¢ ÍÁÙÅàº×Íé §µ ¹ã¹ÃÙ»·Õè 6-1 l
LED ÍÔ¹¿ÃÒàôµÑÇÊ §
µÑÇÃѺáʧÍÔ¹¿ÃÒàô
¡ÃÒ¿áÊ´§¡Ò÷íÒ§Ò¹¢Í§ GP2D120 áç´Ñ¹àÍÒµ ¾Øµ (V)
/2 ,
2.8 Vout GND
Vcc
2.0
ä¿àÅÕÂé §
1.6 38.3±9.6
¡ÒÃÇÑ´ÃÐÂÐË Ò§
2.4
ÁÔÅÅÔÇ¹Ô Ò·Õ
ÇÑ´¤ÃÑ駷Õè 1
1.2
ÇÑ´¤ÃÑ駷Õè 2
0.8
ÇÑ´¤ÃÑ§é ·Õè n
0.4
áç´Ñ¹àÍÒµ ¾µØ
äÁ á¹ ¹Í¹
àÍÒµ ¾µØ ¤ÃÑ§é ·Õè 1 àÍÒµ ¾µØ ¤ÃÑ§é ·Õè 2 5 ÁÔÅÅÔÇ¹Ô Ò·Õ
àÍÒµ ¾µØ ¤ÃÑ§é ·Õè n
0
0
4
8
12
16
20
24
28
ÃÐÂÐË Ò§¨Ò¡Çѵ¶Ø·ÕèµÃǨ¨Ñº (cm)
32
ÃÙ»·Õè 6-1 áÊ´§¡ÒèѴ¢Ò ä´ÍÐá¡ÃÁàÇÅҨѧËÇСÒ÷íÒ§Ò¹ áÅСÃÒ¿áÊ´§¡Ò÷íÒ§Ò¹¢Í§ GP2D120
82 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
¤ Òáç´Ñ¹àÍÒµ ¾µØ ¢Í§ GP2D120 ·ÕÃè ÐÂзҧ 30 ૹµÔàÁµÃ·Õäè ¿àÅÕÂé § +5V ÍÂÙã ¹ª ǧ 0.25 ¶Ö§ 0.55V â´Â¤ Ò¡ÅÒ§¤×Í 0.4V ª ǧ¢Í§¡ÒÃà»ÅÕÂè ¹á»Å§áç´Ñ¹àÍÒµ ¾µØ ·ÕÃè ÐÂзҧ 4 ૹµÔàÁµÃ¤×Í 2.25V ±0.3V
6.2 ËÅÑ¡¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙŵÃǨÇÑ´ÃÐÂзҧ´ ÇÂáʧÍÔ¹¿ÃÒàô âÁ´ÙÅÇÑ´ÃÐÂзҧ´ ÇÂáʧÍÔ¹¿ÃÒàô ¨ÐÊ §áʧÍÔ¹¿ÃÒàô¨Ò¡µÑÇÊ §ä»¡ÃзºÇѵ¶Ø¼Ò ¹àÅ¹Ê ¹Ù¹à¾×Íè â¿¡ÑÊáʧãË Á¤Õ ÇÒÁࢠÁáʧä»Âѧ¨Ø´ã´¨Ø´Ë¹Ö§è àÁ×Íè áʧ仡ÃзºÇѵ¶Ø¨Ðà¡Ô´¡ÒáÃÐà¨Ô§¢Í§ áʧä»ã¹·ÔÈ·Ò§µ Ò§ æ áÊ§Ê Ç¹Ë¹Ö§è ¨Ð¡ÃÐà¨Ô§ä»ÂѧÀÒ¤ÃѺ â´ÂÁÕàÅ¹Ê ÀÒ¤ÃѺ·íÒ˹ Ò·ÕÃè ÇÁáʧáÅÐ ¡íÒ˹´¨Ø´µ¡¡Ãзº áʧ¨Ð¶Ù¡Ê §¼ Ò¹ä»Âѧâ¿âµ ·ÃÒ¹«ÔÊàµÍà ¨Òí ¹Ç¹ÁÒ¡·Õµè Í àÃÕ§µÑǡѹ໠¹Ê ǹ ÃѺáʧ ËÃ×ÍÍÐàÃÂ ÃºÑ áʧ µíÒá˹ §·Õáè ʧµ¡¡Ãзº¹ÕÊé ÒÁÒö¹íÒÁÒ¤íҹdzËÒÃÐÂзҧ (L) ¨Ò¡ÀÒ¤ Ê §ä»ÂѧÇѵ¶Øä´ â´Â㪠ʵ٠ÃËÒÊÒÁàËÅÕÂè Á¤Å Ò´ѧ¹Õé L F = A X
Çѵ¶Ø
L A
F Ê Ç¹ÃѺáʧ
LED ÍÔ¹¿ÃÒàô µÑÇÊ § /2 ,
:
ÃÙ»·Õè 6-2 áÊ´§ÇÔ¸¡Õ ÒÃÇÑ´¤ ÒÃÐÂзҧ´ Ç¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô¢Í§âÁ´ÙÅ GP2D120
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 83
´Ñ§¹Ñ¹é ¤ Ò L ¨ÐÁÕ¤Ò à· Ò¡Ñº L=
F×A X
â´Â¤ Ò·ÕèÇÑ´ÃÐÂÐä´ ¨Ò¡â¿âµ ·ÃÒ¹«ÔÊàµÍà ¨Ð¶Ù¡Ê §ä»Âѧǧ¨Ã»ÃÐÁÇżÅÊÑÒ³¡ ͹¨Ð à»ÅÕÂè ¹¤ Òà» ¹ÃдѺáç´Ñ¹ «Ö§è ãË ¼Å¡ÒÃà»ÅÕÂè ¹á»Å§áç´Ñ¹µÒÁÃÐÂзҧ·Õµè ÃǨÇÑ´ä´
6.3 ¡ÒÃÍ Ò¹¤ Ò¢ ÍÁÙŨҡ GP2D120 ´ ÇÂǧ¨Ãá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ ¼ÅÅѾ¸ ·äÕè ´ ¨Ò¡ GP2D120 à» ¹áç´Ñ¹ ¨Ðµ ͧ¹íÒ¤ Ò·Õäè ´ ÁÒáÊ´§¼Åã¹ÃÙ»¢Í§ÃÐÂзҧ â´Â á»Å§¤ Òáç´Ñ¹¨Ò¡¡ÃÒ¿à»ÃÕºà·Õº¤ Òáç´Ñ¹¡Ñº¤ ÒÃÐÂзҧ à¾×èͤÇÒÁÊдǡ¨Ö§ÁÕ¼Ù Êà ҧÊÁ¡Òà àªÔ§àÊ ¹ÍÍ¡ÁÒãË ãª §Ò¹ä´ §Ò  ´Ñ§¹Õé 4=
' " − 8 +#
â´Â·Õè R ËÁÒ¶֧ÃÐÂзҧ˹ ÇÂà» ¹à«¹µÔàÁµÃ V ËÁÒ¶֧¢ ÍÁÙŨҡǧ¨Ãá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ àÁ×è͹íÒâÁ´ÙÅ GP2D120 àª×èÍÁµ ͡Ѻǧ¨Ãá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍŢͧäÁâ¤Ã ¤Í¹â·ÃÅàÅÍà ¶ ÒäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ÍÒ ¹¤ Òä´ 307 áÊ´§Ç Ò GP2D120 ÍÂÙË Ò §¨Ò¡Çѵ¶Ø 8 ૹµÔàÁµÃ
84 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
¡Ô¨¡ÃÃÁ·Õè 7
·´Êͺ㪠§Ò¹âÁ´ÙÅÇÑ´ÃÐÂзҧ GP2D120 A7.1 à¢Õ¹â»Ãá¡ÃÁ·Õè A7-1 ´ Ç mikroC IDE ·íÒ¡ÒäÍÁä¾Å ãË ä´ ä¿Å ¼ÅÅѾ¸ .hex A7.2 àª×Íè Áµ ͺÍà ´â»Ãá¡ÃÁࢠҡѺËع ¹µ Robo-PICA áÅоÍà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍà A7.3 ´Òǹ âËÅ´â»Ãá¡ÃÁä»ÂѧËع ¹µ Robo-PICA A7.4 ¡´ÊÇÔµª RA4 º¹ºÍà ´ RBX-877 à¾×Íè àÃÔÁè µ ¹·íÒ§Ò¹
A7.5 ¹íÒÇѵ¶ØÁÒÇÒ§¢Çҧ˹ ÒËØ ¹Â¹µ ã¹´ Ò¹·ÕèµÔ´µÑé§âÁ´ÙÅ GP2D120 Êѧࡵ¼Å¡Ò÷íÒ§Ò¹·Õè¨ÍáÊ´§¼Å¢Í§ Ëع ¹µ Robo-PICA ¨Ò¡¹Ñ¹é ·´Åͧà»ÅÕÂè ¹ÃÐÂÐË Ò§¢Í§Çѵ¶Ø áÅ ÇÊѧࡵ¼Å¡Ò÷íÒ§Ò¹·Õàè ¡Ô´¢Ö¹é ·Õ¨è ÍáÊ´§¼Å¢Í§Ëع ¹µ Robo-PICA áÊ´§¤ ҢͧâÁ´ÙÅá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ·ÕÍè Ò ¹¤ Ò ä´ ¨Ò¡âÁ´ÙÅ GP2D120 ËÃ×Í RAW Value 㹺Ã÷Ѵº¹ Ê Ç¹ºÃ÷ѴŠҧáÊ´§¤ ÒÃÐÂÐË Ò§¢Í§Çѵ¶Ø·µÕè ÃǨ¨Ñºä´ ã¹Ë¹ ÇÂૹµÔàÁµÃ «Ö§è ¤ ÒÃÐÂÐË Ò§¹Õäé ´ ÁÒ¨Ò¡¡Òäíҹdzã¹â»Ãá¡ÃÁ
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 85
#include <adc.h> int GP2=0; float Distance; char txt1[6]; char txt[13]; char *text1 ="RAW Value="; char *text2 ="Far= CM"; char *text3 = "Out of Range"; void main() { Lcd_Init(&PORTD); Lcd_Cmd(LCD_CURSOR_OFF); Lcd_Cmd(LCD_CLEAR); while(1) { GP2=Adc_Rd(2); WordToStr(GP2,txt1); Lcd_Cmd(LCD_CLEAR); Lcd_Out(1,1,text1); Lcd_Out(1,12,txt1); if (GP2>90) { Distance=(2914.0/(GP2+5))-1; FloatToStr(Distance,txt); Lcd_Out(2,1,text2); Lcd_Out(2,5,txt); } else Lcd_Out(2,1,text3); Delay_ms(400); } }
// Save String
// Init LCD Port // LCD cursor off
// // // // // //
Read ADC CH 2 Convert Raw Data to String Clear Screen Show Line 1 Text Show Raw Data Check Gp2 Out of Range ?
// Convert to Centimeter // Convert to String // Show on LCD
// Show Out of Range
¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ ã¹â»Ãá¡ÃÁ¹Õäé ´ ¼¹Ç¡ä¿Å äźÃÒÃÕ adc.h ࢠÒÁÒã¹â»Ãá¡ÃÁ à¹×Íè §¨Ò¡âÁ´ÙÅ GP2D120 ·Õ¹è Òí ÁÒàª×Íè Áµ Í ¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 à» ¹µÑǵÃǨ¨ÑºáººÍйÒÅÍ¡·Õãè Ë ¼Å¡Ò÷íҧҹ໠¹áç´Ñ¹ä¿µÃ§ ¨Ö§µ ͧ ÁÕ¡ÒÃ㪠§Ò¹âÁ´ÙÅá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹´Ô¨ÔµÍÅËÃ×Í ADC ÁÒ·íÒ¡ÒÃá»Å§ÊÑÒ³ â´ÂÍÔ¹¾Øµ ÍйÒÅÍ¡·Õãè ª §Ò¹ã¹â»Ãá¡ÃÁ¹Õ¤é Í× ÍÔ¹¾ØµÍйÒÅÍ¡ª ͧ 2 ËÃ×Í RA2 ¢ ÍÁÙÅ·Õäè ´ ¨Ò¡¡ÒÃá»Å§ÊÑÒ³¨Ð¶Ù¡à¡çº äÇ ã¹µÑÇá»Ã gp2 áÅ Çá»Å§à» ¹¢ ͤÇÒÁÃËÑÊáÍÊ¡Õ´é Ç Â¿ §¡ ª¹Ñè WordToStr à¾×Íè ¹íÒä»áÊ´§¼Å·Õâè Á´ÙÅ LCD µ Íä» ¨Ò¡¹Ñ¹é â»Ãá¡ÃÁ¨ÐµÃǨÊÍºÇ Ò âÁ´ÙÅ GP2D120 ÁÕ¡ÒÃÇÑ´¤ Òä´ à¡Ô¹Â Ò¹¡Ò÷íÒ§Ò¹ËÃ×ÍäÁ â´Â·íÒ¡Òà á»Å§¤ Ò¢ ÍÁÙŴԺ໠¹¤ ÒÃÐÂзҧã¹Ë¹ ÇÂૹµÔàÁµÃ ¶ ÒËÒ¡¤ Ò·Õáè »Å§ä´ à¡Ô¹ 30 ૹµÔàÁµÃ ¨ÐáÊ´§¼Å¡Òà µÃǨÊͺ´ Ç¢ ͤÇÒÁ Out of range ¨Ò¡â»Ãá¡ÃÁ¾ºÇ Ò ËÒ¡¤ ҢͧµÑÇá»Ã gp2 ÁÒ¡¡Ç Ò 90 àÁ×Íè ¹íÒ ÁÒ¤íҹdz¨Ò¡¤íÒÊѧè Distance=(2914.0/(GP2+5))-1; ¨Ðä´ ¤Ò ÃÐÂзҧã¹Ë¹ ÇÂૹµÔàÁµÃà¡Ô¹ 30 ૹµÔàÁµÃ áµ ¶Ò ¤ ÒäÁ à¡Ô¹ ¡ç¨Ð¹íÒ¤ Ò·Õ¤è Òí ¹Ç³ä´ ¹¹Ñé á»Å§à» ¹¢ ÍÁÙÅÃËÑÊáÍÊ¡Õ´é Ç Â¿ §¡ ª¹Ñè FloatToStr à¾×Íè ¹íÒä»áÊ´§¼Å·Õºè Ã÷ѴŠҧ¢Í§âÁ´ÙÅ LCD µ Íä»
â»Ãá¡ÃÁ·Õè A7-1 ä¿Å gp2d120test.c â»Ãá¡ÃÁÍ Ò¹¤ Ò¨Ò¡ GP2D120 ÁÒáÊ´§¼Å·Õâè Á´ÙÅ LCD ¢Í§ Ëع ¹µ Robo-PICA
86 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
¡Ô¨¡ÃÃÁ·Õè 8
Ëع ¹µ Robo-PICA ËźËÅÕ¡ÊÔ§è ¡Õ´¢ÇҧẺäÁ ÊÁÑ ¼ÑÊ ã¹¡Ô¨¡ÃÃÁ¹Õàé » ¹¡ÒùíÒ¤ÇÒÁÃÙ¨ Ò¡¡Ô¨¡ÃÃÁ·Õè 7 ÁÒ»ÃѺ»Ãاà¾×Íè ¤Çº¤ØÁ¡ÒÃà¤Å×Íè ¹·Õ¢è ͧËع ¹µ Robo-PICA ãË ÊÒÁÒöµÃǨ¨ÑºÇѵ¶Ø¡´Õ ¢ÇÒ§·ÕÍè ÂÙ´ Ò ¹Ë¹ Òã¹ÃÐÂзաè Òí ˹´ä´ à¾×Íè ·íÒ¡ÒÃà¤Å×Íè ¹ ·ÕèËźËÅÕ¡â´ÂäÁ ÊÑÁ¼ÑÊ
ËÅÑ¡¡Ò÷íÒ§Ò¹¤×Í äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ¨Ðà¤Å×Íè ¹·Õäè »¾Ã ÍÁæ ¡Ñº¡ÒÃÍ Ò¹¤ Ò ¨Ò¡âÁ´ÙÅ GP2D120 ¶ Ò¤ Ò·ÕÍè Ò ¹ä´ áÅÐá»Å§à» ¹¤ ҢͧÃÐÂзҧáŠǹ ÍÂ¡Ç Ò¤ Ò·Õ¡è Òí ˹´ áÊ´§Ç Ò Ëع ¹µ Robo-PICA ¾ºÊÔ§è ¡Õ´¢ÇÒ§ Ê Ç¹¤Çº¤ØÁ¨ÐÊѧè ãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õ¶è ÍÂËÅѧ áÅ ÇàÅÕÂé Ç¢ÇÒËÃ×Í « ÒÂà¾×èÍËźËÅÕ¡¨Ò¡ÊÔ觡մ¢ÇÒ§ A8.1 à¢Õ¹â»Ãá¡ÃÁ·Õè A8-1 ´ Ç mikroC IDE ·íÒ¡ÒäÍÁä¾Å ãË ä´ ä¿Å ¼ÅÅѾ¸ .hex A8.2 àª×Íè Áµ ͺÍà ´â»Ãá¡ÃÁࢠҡѺËع ¹µ Robo-PICA áÅоÍà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍà A8.3 ´Òǹ âËÅ´â»Ãá¡ÃÁä»ÂѧËع ¹µ Robo-PICA áÅ Ç» ´ÊÇÔµª POWER A8.4 »Å´ÊÒ´Òǹ âËÅ´·Ñ§é ËÁ´ÍÍ¡¨Ò¡Ëع ¹µ Robo-PICA
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 87
#include <adc.h> #include <motor.h> int GP2=0,CNT=0; char txt[6],i,Round=0; char *text1="Object Detector"; char *text2="Distance ="; void main() { Sound_Init(&PORTC,0); Lcd_Init(&PORTD); Lcd_Cmd(LCD_CURSOR_OFF); Lcd_Cmd(LCD_CLEAR); Lcd_Out(1,1, "<< RA4 >> Start"); Lcd_Out(2,1,"GP2 Reading"); while(PORTA.F4==1);
// Variable
// Init Sound ==> RC0 // Init LCD PORT D // LCD cursor off
// Start Program when Press RA4
/********************************************/ Lcd_Cmd(LCD_CLEAR); // Show Text Lcd_Out(1,1,text1); Lcd_Out(2,1,text2); while(1) { for (i=0;i<10;i++)GP2+=Adc_Rd(2); // Read Gp2 10 Time GP2=GP2/10; // and Average CNT++; // Counter For Show LCD if (CNT>600) { CNT=0; WordToStr(GP2,Txt); // Show LCD Lcd_Out(2,11,Txt); } if (GP2>500) // Check Gp2 Out of Range ? { Round++; // Counter For Rotate Robot Backward(255); WordToStr(GP2,Txt); Lcd_Out(2,11,Txt); Sound_Play(250,100); Delay_ms(500); if (Round>5) // Right 5 Time ? { Round=0; S_Right(255); Delay_ms(1000); } else // More Then 5 Time ==> Left { S_Left(255); Delay_ms(1000); } } Forward(255); // Not Found Object => Forward } }
â»Ãá¡ÃÁ·Õè A8-1 ä¿Å obstable_robot.c â»Ãá¡ÃÁ¤Çº¤ØÁ¡ÒÃà¤Å×è͹·Õè¢Í§ËØ ¹Â¹µ Robo-PICA ãË ÊÒÁÒöËźËÅÕ¡ÊÔ§è ¡Õ´¢Ç񤊫 â´ÂäÁ ÊÁÑ ¼ÑÊ (ÁÕµÍ )
88 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¹Õé·íÒ§Ò¹¤Ãº¶ ǹ·Ñé§Ê ǹ¡ÒÃáÊ´§¢ ͤÇÒÁ ¡ÒâѺÊÑÒ³àÊÕ§ ¡ÒäǺ¤ØÁÁÍàµÍà ¡ÒÃÍ Ò¹¤ Ò¨Ò¡ÊÇÔµª áÅСÒÃÍ Ò¹¤ Ò¨Ò¡ÍÔ¹¾ØµÍйÒÅÍ¡ àÃÔÁè µ ¹¡Ò÷íÒ§Ò¹´ Ç¡ÒÃǹÃÍ¡Òá´ÊÇÔµª RA4 ¨Ò¡¹Ñ¹é â»Ãá¡ÃÁ¨ÐÇ¹Í Ò¹¤ Ò¨Ò¡âÁ´ÙÅ GP2D120 ·ÕÍè ¹Ô ¾ØµÍйÒÅÍ¡ª ͧ 2 ¨íҹǹ 10 Ãͺ à¾×Íè ¹íÒàÍÒ¤ Òà©ÅÕÂè ÁÒ㪠¨Ð·íÒãË ä´ ¤Ò ¢Í§¡ÒõÃǨ¨Ñº·ÕÁè ¤Õ ÇÒÁá¹ ¹Í¹ÁÒ¡ÂÔ§è ¢Ö¹é áÅÐà¾×Íè Å´¼Å¡Ãзº¨Ò¡ÊÑҳú¡Ç¹·ÕÁè Ò¨Ò¡ÁÍàµÍà ¢³Ð·íÒ¡ÒâѺà¤Å×Íè ¹ ¨Ò¡¹Ñ¹é ¹íÒ¤ Ò·ÕÍè Ò ¹ä´ ¨Ò¡âÁ´ÙÅ GP2D120 ä»áÊ´§¼Å·ÕËè ¹ Ò¨Í LCD áµ ¡ÒÃáÊ´§¤ Ò¨Ð㪠µÇÑ á»Ã CNT à» ¹µÑǹѺ¤ Ò¡ Í¹Ç Òà¡Ô¹ 600 ËÃ×ÍäÁ ¶ Òà¡Ô¹ ¨Ö§¹íÒ¤ ÒÁÒáÊ´§ ·Ñ駹Õéà¾×èÍãË ¡ÒÃáÊ´§¤ ÒµÑÇàÅ¢·ÕèâÁ´ÙÅ LCD äÁ àÃçÇà¡Ô¹ä» ¨¹Áͧ¤ ÒµÒÁäÁ ·¹Ñ ËÅѧ¨Ò¡áÊ´§¤ Ò·Õâè Á´ÙÅ LCD áÅ Ç ¹íÒ¤ Ò·ÕÍè Ò ¹ä´ ¨Ò¡âÁ´ÙÅ GP2D120 ÁÒà»ÃÕºà·Õ异 ÒÁÒ¡¡Ç Ò 500 (»ÃÐÁÒ³ 4.5 ૹµÔàÁµÃ) ËÃ×ÍäÁ ¶ ÒÁÒ¡¡Ç Ò áÊ´§Ç Òã¡Å ª¹Çѵ¶ØáÅ Ç ¨Ðµ ͧÊѧè ãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õ¶è ÍÂËÅѧ ¢ÑºÊÑÒ³àÊÕ§ÍÍ¡·Ò§ÅíÒ⾧໠Ââ« ËÅѧ¨Ò¡à¤Å×Íè ¹·Õ¶è ÍÂËÅѧáÅ Ç ¨Ðµ ͧàÅÕÂé Çà»ÅÕÂè ¹àÊ ¹·Ò§ â´Â¨ÐÁÕµÇÑ ¹Ñº·íÒ˹ Ò·Õµè ÃǨÊÍºÇ Ò à»ÅÕÂè ¹ àÊ ¹·Ò§ä»ã¹·ÔÈ·Ò§à´ÔÁ (·Ò§« ÒÂ) ¡Õ¤è Ãѧé áÅ Ç ¶ Òà¡Ô¹ 5 ¤ÃÑ§é ¨Ðµ ͧà»ÅÕÂè ¹à» ¹àÅÕÂé Ç¢ÇÒá·¹ áµ ¶Ò äÁ ÁÊÕ §Ôè ¡Õ´ ¢ÇÒ§ÍÂÙ´ Ò ¹Ë¹ Ò Ëع ¹µ ¨Ðà¤Å×Íè ¹·Õµè çä»
â»Ãá¡ÃÁ·Õè A8-1 ä¿Å obstable_robot.c â»Ãá¡ÃÁ¤Çº¤ØÁ¡ÒÃà¤Å×è͹·Õè¢Í§ËØ ¹Â¹µ Robo-PICA ãË ÊÒÁÒöËźËÅÕ¡ÊÔ§è ¡Õ´¢Ç񤊫 â´ÂäÁ ÊÁÑ ¼ÑÊ (¨º) A8.5 ¹íÒËع ¹µ Robo-PICA ÇÒ§º¹¾×¹é ¨Ñ´ÇÒ§ÊÔ§è ¡Õ´¢ÇÒ§µÒÁµíÒá˹ §·Õµè Í §¡Ò÷´Êͺ¡Ò÷íÒ§Ò¹ à» ´ÊÇÔµª POWER áÅ Ç¡´ÊÇÔµª RA4 à¾×Íè àÃÔÁè µ ¹¡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ Êѧࡵ¡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ Ëع ¹µ Robo-PICA à¤Å×Íè ¹·Õäè »¢ ҧ˹ ÒÍ ҧµ Íà¹×Íè § ¨¹¡ÃÐ·Ñ§è µÃǨ¨Ñº¾ºÊÔ§è ¡Õ´¢ÇÒ§ Ëع ¹µ ¨Ðà¤Å×Íè ¹ ·Õ¶è ÍÂËÅѧ¾Ã ÍÁæ ¡Ñº¢ÑºàÊÕ§ÍÍ¡ÁÒà¾×Íè ᨠ§¡ÒõÃǨ¨Ñº¾ºÊÔ§è ¡Õ´¢ÇÒ§ ¨Ò¡¹Ñ¹é Ëع ¹µ ¨ÐËÁعµÑÇä»·Ò§« Ò ËÃ×Í¢ÇÒà¾×Íè ËźËÅÕ¡ÊÔ§è ¡Õ´¢ÇÒ§ ·Ñ§é ¹Õ¢é ¹Öé ÍÂÙ¡ ºÑ ÊÀÒÇСÒÃà¤Å×Íè ¹·Õãè ¹¢³Ð¹Ñ¹é Ç Ò ä´ àÅÕÂé Ç« ÒÂËÃ×Í¢ÇÒä»ã¹·ÔÈ ·Ò§à´ÔÁÁÒ¡¡Ç Ò 5 ¤Ãѧé ËÃ×ÍäÁ ¶ ÒÁÒ¡¡Ç Ò ¡ç¨Ðà»ÅÕÂè ¹·ÔÈ·Ò§¨Ò¡à´ÔÁà» ¹µÃ§¡Ñ¹¢ ÒÁ àÁ×Íè Ëź¾ ¹Ëع ¹µ ¨Ð à¤Å×è͹·ÕèµÃ§ä»¢ ҧ˹ Òµ Íä»
INNOVATIVE EXPERIMENT
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 89
º··Õè 7
Ëع ¹µ Robo-PICA à¤Å×Íè ¹·Õµè ÒÁàÊ ¹
㹡ÒþѲ¹Òâ»Ãá¡ÃÁÀÒÉÒ C à¾×Íè ¤Çº¤ØÁãË Ë¹Ø Â¹µ Robo-PICA à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ä´ ¹¹Ñé ÁÕËÅÑ¡ ¡Òä×Í Ëع ¹µ ¨ÐÍ Ò¹¤ ÒÍйÒÅÍ¡¨Ò¡á¼§Ç§¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô (IR reflector) «Ö§è ¹íÒÁÒ»ÃÐÂØ¡µ 㪠໠¹µÑǵÃǨ¨ÑºàÊ ¹ ¤ Ò·ÕÍè Ò ¹ä´ ¨Ð¹íÒä»á»Å¤ÇÒÁËÁÒÂáÅ Çà»ÃÕºà·Õº¡Ñº¤ ÒÍ Ò§ÍÔ§ à¾×Íè µÕ¤ÇÒÁÇ Ò ³ ¢³Ð¹Ñ¹é µíÒá˹ §¢Í§µÑǵÃǨ¨ÑºµÃǨ¾ºàÊ ¹·Õ¡è Òí ˹´ËÃ×ÍäÁ ¼Å·Õäè ´ ¨Ò¡¡ÒõÃǨ Êͺ¹Õ¨é ж١¹íÒä»ÊÑ§è ¡ÒÃãË ¢ºÑ à¤Å×Íè ¹Ëع ¹µ ä»ã¹·ÔÈ·Ò§ã´æ à¾×Íè µÍºÊ¹Í§µÒÁ¨Ø´»ÃÐʧ¤ ¢Í§¼Ù ¾Ñ²¹Ò ઠ¹ àÁ×Íè µÃǨ¾ºàÊ ¹áÅ ÇãË à¤Å×Íè ¹·Õäè »µÒÁàÊ ¹ ËÃ×ÍËÂØ´ ËÃ×Íà¤Å×Íè ¹·Õ¶è ÍÂË Ò§¨Ò¡àÊ ¹
7.1 ËÑÇã¨ÊíҤѤ×Í á¼§Ç§¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô à» ¹á¼§Ç§¨Ã·Õãè ª 㹡ÒõÃǨÊͺ¡ÒÃÊз ͹¢Í§áʧÍÔ¹¿ÃÒàô¢Í§µÑǵÃǨ¨Ñº¡ÒÃÊз ͹ áʧÍÔ¹¿ÃÒàô«Ö§è ÃÇÁµÑÇÊ §áÅеÑÇÃѺäÇ ã¹µÑǶѧà´ÕÂǡѹ â´Â µÑǵÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô·Õ¹è Òí ÁÒ㪠¤Í× TCRT5000 ã¹ÃÙ»·Õè 7-1 áÊ´§Ç§¨Ã¢Í§á¼§Ç§¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô àÁ×Íè ¨ Ò ä¿àÅÕÂé § LED ÍÔ¹¿ÃÒàôÀÒÂã¹Ç§¨Ã¨Ðà»Å §áʧÍÍ¡ÁÒµÅÍ´àÇÅÒ Ê Ç¹µÑÇÃѺ«Ö§è à» ¹â¿âµ ·ÃÒ¹«ÔÊàµÍà ¨Ðä´ ÃºÑ áʧÍÔ¹¿ÃÒàô¨Ò¡¡ÒÃÊз ͹¡ÅѺ «Ö§è ¨ÐÁÒ¡ËÃ×͹ Í¡碹Öé ÍÂÙ¡ ºÑ Ç Ò ÁÕÇµÑ ¶ØÁÒ¡Õ´¢ÇÒ§ËÃ×ÍäÁ áÅÐÁÕ¤ÇÒÁÊÒÁÒö㹡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàÃ´ä´ ´àÕ ¾Õ§äà «Ö§è ¢Ö¹é ¡ÑºÅÑ¡É³Ð¾×¹é ¼ÔÇáÅÐÊբͧÇѵ¶Ø â´Â Çѵ¶ØÊ¢Õ ÒǼÔÇàÃÕº¨ÐÊз ͹áʧÍÔ¹¿ÃÒàÃ´ä´ ´·Õ ÊÕè ´Ø ·íÒãË µÇÑ ÃѺáʧÍÔ¹¿ÃÒàÃ´ä´ ÃºÑ áʧÊз ͹ÁÒ¡ Ê §¼ÅãË áç´Ñ¹·Õàè ÍÒµ ¾µØ ¢Í§Ç§¨ÃÊÙ§µÒÁä»´ Ç 㹢³Ð·ÕÇè µÑ ¶ØÊ´Õ Òí ËÃ×ÍÊÕࢠÁ¨ÐÊз ͹áʧÍÔ¹¿ÃÒàô ä´ ¹Í ·ÕÊè ´Ø ·íÒãË µÇÑ ÃѺÍÔ¹¿ÃÒàÃ´Ê §áç´Ñ¹ÍÍ¡ÁÒµèÒí ¨Ø´µ ÍÊÑÒ³ +V TCRT5000
OUT GND
10k
µÑǵÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô
ÃÙ»·Õè 7-1 áÊ´§Ãٻà ҧáÅÐǧ¨Ã¢Í§á¼§Ç§¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô
510
90 l àÃÕ¹ÃÙá é ÅÐÊÃéÒ§Ëعè ¹µì굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃì
PIC
ÊíÒËÃѺµÑÇá»Ã·ÕèÁռŵ Í¡ÒÃÊз ͹¡ÅѺ¢Í§áʧÍÔ¹¿ÃÒàô¹Í¡¨Ò¡¾×é¹¼ÔǢͧÇѵ¶ØáÅ Ç Âѧ ÁÕàÃ×Íè §¢Í§ÃÐÂÐË Ò§ÃÐËÇ Ò§á¼§Ç§¨ÃµÃǨ¨Ñº¡Ñº¾×¹é ¼ÔÇ´ Ç â´ÂÃÐÂÐË Ò§·Õàè ËÁÒÐÊÁÊíÒËÃѺµÑǵÃǨ ¨Ñºáºº¹Õ¨é ÐÍÂÙà ÐËÇ Ò§ 3 ¶Ö§ 8 ÁÔÅÅÔàÁµÃ «Ö§è ¨Ð·íÒãË ÍÒ ¹¤ Òáç´Ñ¹¨Ò¡á¼§Ç§¨Ãä´ ¤Ò ÍÂÙà ÐËÇ Ò§ 0.1 ¶Ö§ 4.8V áÅÐãË ¤Ò ¢Í§¢ ÍÁÙÅàÁ×Íè Í Ò¹¼ ҹǧ¨Ãá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅÍÂÙã ¹ª ǧ 20 ¶Ö§ 1,000
3 ¶Ö§ 8 ÁÔÅÅÔàÁµÃ
´Ñ§¹Ñé¹á¼§Ç§¨ÃËÃ×͵ÑǵÃǨ¨Ñºáºº¹Õé¨Ö§àËÁÒÐÍ ҧÂÔ觷Õè¨Ð¹íÒÁÒ㪠໠¹µÑǵÃǨ¨ÑºàÊ ¹ ·Ñé§ àÊ ¹ÊÕ¢ÒÇËÃ×ÍàÊ ¹ÊÕ´Òí «Ö§è ¨Ð¢Ö¹é ÍÂÙ¡ ºÑ ¡ÒùíÒ¤ Ò·ÕÍè Ò ¹ä´ ä»»ÃÐÁÇżÅã¹ÅѡɳÐ㴠㹪شËع ¹µ Robo-PICA ¨Ð㪠ἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô¹Õé 2 ªØ´à¾×Íè µÃǨÊͺ¾×¹é ¼ÔÇáÅеÃǨ¨Ñº àÊ ¹ã¹Åѡɳе Ò§æ
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 91
¡Ô¨¡ÃÃÁ·Õè 9
Í Ò¹¤ Ҩҡἧǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô A9.1 à¢Õ¹â»Ãá¡ÃÁ·Õè A9-1 ´ Ç mikroC IDE ·íÒ¡ÒäÍÁä¾Å ãË ä´ ä¿Å ¼ÅÅѾ¸ .hex A9.2 àª×Íè Áµ ͺÍà ´â»Ãá¡ÃÁࢠҡѺËع ¹µ Robo-PICA áÅоÍà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍà A9.3 ´Òǹ âËÅ´â»Ãá¡ÃÁä»ÂѧËع ¹µ Robo-PICA áÅ Ç» ´ÊÇÔµª POWER A9.4 »Å´ÊÒ´Òǹ âËÅ´ÍÍ¡¨Ò¡Ëع ¹µ A9.5 µÃǨÊͺ¡ÒõԴµÑ§é ἧǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô·Ñ§é ÊͧªØ´¢Í§Ëع ¹µ Robo-PICA à¾×Íè ãË á¹ ã¨Ç Ò ¾Ã ÍÁ㪠§Ò¹ /*****
Show ADC from RA0 to LCD ***/
char txt[6]; char i; int adc;
// Save test
int Adc_Rd(char ch) { int dat=0; if ((ch>=0) && (ch<=3)) TRISA |= (1<<ch); else if (ch==4) TRISA |= 0x20; else if ((ch>=5) && (ch<=7)) TRISE |= (1<<(ch-5)); ANSEL |=(1<<ch); ADCON0 = (0xC1 + (ch*4)); Delay_us(10); ADCON0.GO=1; while(ADCON0.GO); dat = (ADRESH*4)+(ADRESL/64); return dat; }
// Low 8 Channel ADC Read // Save Adc // CH0-CH3 // CH4 // CH5-CH7 // // // // // // //
set Channel to Analog Select ADC Channel Acquisiton delay Start conversion conversion done? Sum highbyte and lowbyte Return Value
void main() { Lcd_Init(&PORTD); // Init LCD Port Lcd_Cmd(LCD_CURSOR_OFF); // LCD cursor off Lcd_Cmd(LCD_CLEAR); Lcd_Out(1,1, "<< RA4 >> Start"); // keypress while(PORTA.F4==1);
â»Ãá¡ÃÁ·Õè A9-1 ä¿Å ReflectTest.c â»Ãá¡ÃÁÍ Ò¹¤ Ҩҡἧǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô ÁÒáÊ´§¼Å·Õâè Á´ÙÅ LCD ¢Í§Ëع ¹µ Robo-PICA (ÁÕµÍ )
92 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
/********************************/ // Start Program /********************************/ Lcd_Cmd(LCD_CLEAR); Lcd_Out(1,1,"SENSOR0 = "); // Show Text Line1 Lcd_Out(2,1,"SENSOR1 = "); // Line2 while(1) { adc= Adc_Rd(0); WordToStr(adc,txt); Lcd_Out(1,10,txt); adc= Adc_Rd(1); WordToStr(adc,txt); Lcd_Out(2,10,txt); Delay_ms(100); }
// Convert to ASCII // Show on LCD Line1 // Convert to ASCII // Show on LCD Line2
}
¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁ¹Õ»é ÃСͺâ´Â ¿ §¡ ª¹Ñè Adc_Rd() áÅÐ main() â´Â¿ §¡ ª¹Ñè Adc_Rd() ¹Ñ¹é à¢Õ¹¢Ö¹é à¾×Íè ÍíҹǤÇÒÁÊдǡ㹡ÒÃàÃÕ¡㪠§Ò¹âÁ´ÙÅá»Å§ÊÑÒ³ÍйÒÅÍ¡à» ¹´Ô¨µÔ ÍÅ ÊíÒËÃѺâ»Ãá¡ÃÁËÅÑ¡¨ÐÍ Ò¹ ¤ Ò¨Ò¡¢Ò¾Íà µ RA0 áÅÐ RA1 ÁÒáÊ´§·Õâè Á´ÙÅ LCD à¹×Íè §¨Ò¡µÑǵÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô¶Ù¡µ Í à¢ Ò¡Ñº¢Ò¾Íà µ´Ñ§¡Å ÒÇ
â»Ãá¡ÃÁ·Õè A9-1 ä¿Å ReflectTest.c â»Ãá¡ÃÁÍ Ò¹¤ Ҩҡἧǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô ÁÒáÊ´§¼Å·Õâè Á´ÙÅ LCD ¢Í§Ëع ¹µ Robo-PICA (¨º) A9.6 à» ´ÊÇÔµª POWER à¾×Íè ¨ ÒÂä¿àÅÕÂé § ¡´ÊÇÔµª RA4 º¹ºÍà ´ RBX-877 à¾×Íè àÃÔÁè µ ¹Í Ò¹¤ Ҩҡἧǧ¨Ã µÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàôÁÒáÊ´§·Õ¨è ÍáÊ´§¼Å¢Í§âÁ´ÙÅ LCD ¢Í§Ëع ¹µ Robo-PICA A9.7 ¡µÑÇËع ¹µ ¢¹Öé ¨Ò¡¾×¹é Êѧࡵ¤ Ò·ÕÍè Ò ¹ä´ ·ËÕè ¹ Ò¨Í LCD ¤ÇèÐÍ Ò¹¤ Ò¨Ò¡µÑǵÃǨ¨Ñºä´ ¹Í  ÍÂÙã ¹ª ǧ»ÃÐÁÒ³ 10 ¶Ö§ 50 à¹×Íè §¨Ò¡äÁ à¡Ô´¡ÒÃÊз ͹áʧ¨Ò¡ ¾×é¹¼ÔÇ¡ÅѺä»ÂѧµÑǵÃǨ¨Ñº A9.8 ¹íÒËع ¹µ Robo-PICA ä»ÇÒ§º¹¾×¹é ¼ÔÇÊÕ´Òí â´Âµ ͧãË µÇÑ µÃǨ¨ÑºÍÂÙà ˹×Í¾×¹é ¼ÔÇÊÕ´Òí Êѧࡵ¤ Ò·ÕÍè Ò ¹ä´ ¤ Ò·Õäè ´ ¨ÐÍÂÙã ¹ª ǧ 20 ¶Ö§ 100 à¹×Íè §¨Ò¡¾×¹é ¼ÔÇÊÕ´Òí ÊÒÁÒöÊз ͹áʧÍÔ¹¿ÃÒàô¡ÅѺä»ÂѧµÑǵÃǨ ¨Ñºä´ ¹ Í A9.9 ¹íÒËع ¹µ Robo-PICA ä»ÇÒ§º¹¾×¹é ¼ÔÇÊÕ¢ÒÇ â´Âµ ͧãË µÇÑ µÃǨ¨ÑºÍÂÙà ˹×Í¾×¹é ¼ÔÇÊÕ¢ÒÇ Êѧࡵ¤ Ò·ÕÍè Ò ¹ä´ ¤ Ò·Õäè ´ ¨ÐÍÂÙã ¹ª ǧ 700 ¶Ö§ 950 à¹×Íè §¨Ò¡¾×¹é ¼ÔÇÊÕ¢ÒÇÊÒÁÒöÊз ͹áʧÍÔ¹¿ÃÒàô¡ÅѺä»ÂѧµÑǵÃǨ ¨Ñºä´ ´Õ
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 93
¡Ô¨¡ÃÃÁ·Õè 10
Ëع ¹µ Robo-PICA à¤Å×Íè ¹·Õäè Á µ¡âµ Ð ÊÃØ»¼Å·Õäè ´ ¨Ò¡â»Ãá¡ÃÁ㹡Ԩ¡ÃÃÁ·Õè 9 ¾ºÇ Ò àÁ×Íè ¡µÑÇËع ¹µ ¢¹Öé ¨Ò¡¾×¹é ¤ Ò·ÕÍè Ò ¹ä´ ¨Ò¡ µÑǵÃǨ¨ÑºÁÕ¤Ò ¹ ÍÂÁÒ¡ áµ àÁ×Íè ÇÒ§Ëع ¹µ äÇ º¹¾×¹é ¼ÔǨÐà¡Ô´¡ÒÃÊз ͹áʧÁÒ¡¢Ö¹é ·íÒãË ÍÒ ¹¤ Ò ¨Ò¡µÑǵÃǨ¨Ñºä´ ¤Ò ÁÒ¡¢Ö¹é á¹Ç¤Ô´¹Õ¹é Òí ä»ÊÙ¡ ÒÃà¢Õ¹â»Ãá¡ÃÁà¾×Íè ¤Çº¤ØÁãË Ë¹Ø Â¹µ à¤Å×Íè ¹·ÕÍè ÂÙ º¹âµ Ð â´ÂäÁ µ¡¨Ò¡âµ Ðä´ ¡ÒÃà¢Õ¹â»Ãá¡ÃÁ¨ÐÍ Ò¹¤ Ҩҡἧǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô·Ò§´ Ò¹« Ò áÅТÇÒ àÁ×èͤ Ò·ÕèÍ Ò¹ä´ ¹ ÍÂ¡Ç Ò¤ Ò·ÕèµÑé§äÇ (ÊÁÁµÔÇ Ò ËØ ¹Â¹µ à¤Å×è͹·ÕèÍÍ¡¹Í¡¾×é¹·Õè) äÁâ¤Ã ¤Í¹â·ÃÅàÅÍà ¨Ð¤Çº¤ØÁãË Ë¹Ø Â¹µ Robo-PICA à¤Å×Íè ¹·Õ¶è ÍÂËÅѧ áÅ Çà»ÅÕÂè ¹àÊ ¹·Ò§¡ÒÃà¤Å×Íè ¹·Õè A10.1 à¢Õ¹â»Ãá¡ÃÁ·Õè A10-1 ´ Ç mikroC IDE ·íÒ¡ÒäÍÁä¾Å ãË ä´ ä¿Å ¼ÅÅѾ¸ .hex A10.2 àª×Íè Áµ ͺÍà ´â»Ãá¡ÃÁࢠҡѺËع ¹µ Robo-PICA áÅоÍà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍà #include <motor.h> #include <adc.h> /* char char char char char
Text For *text1 = *text2 = *text3 = *text4 = *text5 =
// Motor Control Library // Use Analog to Digital Library
Show On LCD */ "Edge of a table" ; "From Left"; "From Right"; "Let'Go" ; "Route Clear";
char flag=0; int ADC=0; void main() { Lcd_Init(&PORTD); Lcd_Cmd(LCD_CURSOR_OFF); Lcd_Cmd(LCD_CLEAR); Lcd_Out(1,1, "<< RA4 >> Start"); while(PORTA.F4==1); while(1) { ADC =Adc_Rd(0); if (ADC<100) { flag=0; Backward(255); Lcd_Cmd(LCD_CLEAR);
// Init LCD Port // LCD cursor off // Check Key Press
// Reading sensor from left // Left sensor detect edge of table ? // Clear flag // Show text on LCD
â»Ãá¡ÃÁ·Õè A10-1 ä¿Å SurveyBot.c â»Ãá¡ÃÁ¤Çº¤ØÁËع ¹µ Robo-PICA à¤Å×Íè ¹·Õäè Á µ¡âµ Ð (ÁÕµÍ )
94 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
Lcd_Out(1,1,text1); Lcd_Out(2,1,text2); Delay_ms(400); S_Right(255); Delay_ms(600); } ADC =Adc_Rd(1); if (ADC<100) { flag=0; Backward(255); Lcd_Cmd(LCD_CLEAR); Lcd_Out(1,1,text1); Lcd_Out(2,1,text3); Delay_ms(400); S_Left(255); Delay_ms(900); } forward(255); if (flag==0) { flag=1; Lcd_Cmd(LCD_CLEAR); Lcd_Out(1,1,text4); Lcd_Out(2,1,text5); }
PIC
// Change route
// Reading sensor from right // Right sensor detects edge of table ? // Clear flag // Show LCD text
// Change route
// Normal ==> Forward // Check first time of LCD showing ?
// Show LCD
} }
¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ àÁ×Íè àÃÔÁè µ ¹â»Ãá¡ÃÁ¨Ðµ ͧàÃÕ¡㪠äźÃÒÃÕ adc.h à¾×Íè Ò ¹¤ Ò¨Ò¡µÑǵÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô à ÇÁ¡ÑºäźÃÒÃÕ motor.h à¾×Íè 㪠㹡ÒâѺà¤Å×Íè ¹Ëع ¹µ Robo-PICA â»Ãá¡ÃÁ¨ÐµÃǨÊͺ¤ Ò·ÕÍè Ò ¹ä´ ¨Ò¡á¼§Ç§¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàÃ´Ç Ò ¹ ÍÂ¡Ç Ò 100 ËÃ×Í äÁ ¶ Ò㪠áÊ´§Ç ÒËع ¹µ ¡Òí Åѧà¤Å×Íè ¹·ÕÍè Í¡¹Í¡¾×¹é ·ÕËè Ã×͹͡ⵠР¨Ðµ ͧ¤Çº¤ØÁãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õ¶è ÍÂËÅѧ áÅ ÇàÅÕÂé Çà»ÅÕÂè ¹àÊ ¹·Ò§ ¡ÒõÃǨÊͺµÑǵÃǨ¨Ñº¨Ðµ ͧµÃǨÊͺἧǧ¨Ã·Ñ§é ÊͧµÑÇÊÅѺ¡Ñ¹ä»Í ҧµ Íà¹×Íè § 㹡óշÍÕè Ò ¹¤ Ò ä´ ÁÒ¡¡Ç Ò 100 â»Ãá¡ÃÁ¨Ð¤Çº¤ØÁãË Ë¹Ø Â¹µ Robo-PICA à¤Å×Íè ¹·Õµè ç仢 ҧ˹ Ò ¡ÒÃà»ÅÕÂè ¹ÃٻẺ¡ÒÃà¤Å×Íè ¹·Õãè ¹áµ ÅФÃÑ§é ¨Ð¹íҼšÒÃà»ÅÕÂè ¹á»Å§ÁÒáÊ´§·Õ¨è ÍáÊ´§¼Å¢Í§âÁ´ÙÅ LCD â´ÂÁÕµÇÑ á»Ã flag ¤ÍµÃǨÊÍºÇ Ò ¡ÒÃáÊ´§¼Å¢Í§âÁ´ÙÅ LCD ¹Ñ¹é «éÒí « ͹ËÃ×ÍäÁ â´Ââ»Ãá¡ÃÁ¨ÐáÊ´§ ¼Åà¾Õ§¤Ãѧé à´ÕÂÇàÁ×Íè Ëع ¹µ Robo-PICA à¤Å×Íè ¹·Õµè ç仢 ҧ˹ Ò
â»Ãá¡ÃÁ·Õè A10-1 ä¿Å SurveyBot.c â»Ãá¡ÃÁ¤Çº¤ØÁËع ¹µ Robo-PICA à¤Å×Íè ¹·Õäè Á µ¡âµ Ð (¨º)
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 95
A10.3 ´Òǹ âËÅ´â»Ãá¡ÃÁä»ÂѧËع ¹µ Robo-PICA áÅ Ç» ´ÊÇÔµª POWER A10.4 »Å´ÊÒ´Òǹ âËÅ´ÍÍ¡¨Ò¡Ëع ¹µ A10.5 µÃǨÊͺ¡ÒõԴµÑ§é ἧǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô·Ñ§é ÊͧªØ´¢Í§Ëع ¹µ Robo-PICA à¾×Íè ãË á¹ ã¨Ç Ò ¾Ã ÍÁ㪠§Ò¹ A10.6 ÇÒ§Ëع ¹µ Robo-PICA º¹âµ Ð ËÃ×ͺ¹¾×¹é ·ÕÁè ¡Õ ÒÃÊà ҧ¢Íºà¢µ´ ÇÂàÊ ¹ÊÕ´Òí A10.7 à» ´ÊÇÔµª POWER à¾×Íè ¨ ÒÂä¿àÅÕÂé § ¡´ÊÇÔµª RA4 º¹ºÍà ´ RBX-877 à¾×Íè àÃÔÁè µ ¹¡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ Robo-PICA Ëع ¹µ Robo-PICA ¨Ðà¤Å×Íè ¹·Õµè ç仢 ҧ˹ ÒÍ ҧµ Íà¹×Íè §¾Ã ÍÁæ ¡Ñº¡ÒÃÍ Ò¹¤ Ò¨Ò¡µÑǵÃǨ¨Ñº¡Òà Êз ͹áʧÍÔ¹¿ÃÒàô·Ñé§ÊͧµÑÇ ¶ ÒËÒ¡µÑǵÃǨ¨Ñº¾ºÇ Ò ËØ ¹Â¹µ ¡íÒÅѧ¨Ðà¤Å×è͹·ÕèÍÍ¡¹Í¡¾×é¹·ÕèËÃ×͹͡¾×é¹ âµ Ð Ëع ¹µ ¨Ðà¤Å×Íè ¹·Õ¶è ÍÂËÅѧ·Ñ¹·Õ áÅ ÇËÁعµÑÇà¾×Íè à»ÅÕÂè ¹àÊ ¹·Ò§¡ÒÃà¤Å×Íè ¹·Õè
96 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
¡Ô¨¡ÃÃÁ·Õè 11
Ëع ¹µ Robo-PICA à¤Å×Íè ¹·Õµè ÒÁàÊ ¹´íÒ ¨Ò¡¡ÒõԴµÑ§é ἧǧ¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô㹡Ԩ¡ÃÃÁ·Õè 10 ¹Í¡¨Ò¡¨Ðà¢Õ¹ â»Ãá¡ÃÁà¾×Íè ¤Çº¤ØÁãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õäè Á µ¡âµ ÐáÅ Ç ÊÒÁÒöà»ÅÕÂè ¹â»Ãá¡ÃÁà¾×Íè ¤Çº¤ØÁãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ä´ ´Ç Â
¡ÒÃÊà ҧʹÒÁÍ ҧ§ ÒÂÊíÒËÃѺ·´Êͺ¡ÒÃà¤Å×Íè ¹·Õµè ÒÁàÊ ¹ÊÕ´Òí ¡ÒÃÊà ҧʹÒÁà¾×Íè ãË Ë¹Ø Â¹µ Robo-PICA ·´Êͺà¤Å×Íè ¹·Õµè ÒÁàÊ ¹Í ҧ§ Ò ¨Ð㪠ἠ¹¾ÅÒʵԡÅÙ¡¿Ù¡ ÊÕ¢ÒÇ ¢¹Ò´ 90 x 160 ૹµÔàÁµÃ (ÍҨ㪠ÊÍÕ ¹×è æ ·Õàè » ¹ÊÕÊз ͹áÊ§ä´ ´)Õ ¡Ñºà·»¾Ñ¹ÊÒÂä¿ÊÕ´Òí (á¹Ð¹íÒÂÕËè Í 3M à¹×Íè §¨Ò¡ÊÒÁÒö´Ñ´â¤ §ä´ ´)Õ ¡ÒáíÒ˹´ÃٻẺ¡ÒÃÅÒ¡àÊ ¹ÊÒÁÒö·íÒà» ¹àÊ ¹·Ò§ÃٻẺµ Ò§æ µÒÁµ ͧ ¡Òà ã¹ÃÙ»·Õè A11-1 à» ¹µÑÇÍ ҧ¡ÒÃÊà ҧʹÒÁ⤠§Í ҧ§ ÒÂ Ê Ç¹ÃÙ»·Õè A11-2 à» ¹µÑÇÍ ҧʹÒÁ·ÕÁè àÕ Ê ¹µÑ´à» ¹ ·Ò§á¡áÅСÒÃàÅÕÂé Ç·íÒÁØÁ 45 ͧÈÒ
ÃÙ»·Õè A11-1 áÊ´§¡ÒÃ㪠෻¾Ñ¹ÊÒÂä¿à¾×Íè Êà ҧàÊ ¹ÊÕ´Òí º¹Ê¹ÒÁËع ¹µ
(¡)
(¢)
ÃÙ»·Õè A11-2 µÑÇÍ ҧ¢Í§ÃٻẺ¡ÒÃÊà ҧʹÒÁËع ¹µ Í ҧ§ ÒÂà¾×Íè ãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õµè ÒÁàÊ ¹
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 97
ÃٻẺ·Õè 1 : ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹·Ñ§é ÊͧµÑÇÍÂÙº ¹ ÃٻẺ·Õè 2 : ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹·Ò§« ÒÂÍÂÙº ¹¾×¹é ¾×é¹ÊÕ¢ÒÇ µÕ¤ÇÒÁä´ Ç Ò ËØ ¹Â¹µ ¡íÒÅѧ¤Ã ÍÁÍÂÙ º¹àÊ ¹ ÊÕ´Òí áÅÐἧǧ¨ÃµÃǨ¨ÑºàÊ ¹·Ò§« ÒÂÍÂÙº ¹¾×¹é ¢ÒÇ µÕ¤ÇÒÁÇ Ò Ëع ¹µ ¡Òí Åѧà¤Å×Íè ¹·ÕÍè Í¡¹Í¡àÊ ¹ä»·Ò§¢ÇÒ ¨Ö§¡íÒ˹´ãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õäè »¢ ҧ˹ Ò µ ͧ¡íÒ˹´ãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õäè »·Ò§« Ò à¾×Íè ãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õ¡è ÅѺÁҤà ÍÁàÊ ¹ÊÕ´Òí àËÁ×͹à´ÔÁ
ÃٻẺ·Õè 3 : ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹·Ò§¢ÇÒÍÂÙº ¹¾×¹é ÊÕ´íÒáÅÐἧǧ¨ÃµÃǨ¨ÑºàÊ ¹·Ò§« ÒÂÍÂÙ º¹¾×é¹´íÒ µÕ¤ÇÒÁÇ Ò Ëع ¹µ ¡Òí Åѧà¤Å×Íè ¹·ÕÍè Í¡¹Í¡àÊ ¹ä»·Ò§« Ò µ ͧ ¤Çº¤ØÁãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õ¡è ÅѺÁÒ·Ò§¢ÇÒ à¾×Íè ãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õ¡è ÅѺÁҤà ÍÁàÊ ¹ÊÕ´Òí àËÁ×͹à´ÔÁ
ÃٻẺ·Õè 4 : ἧǧ¨ÃµÃǨ¨ÑºàÊ ¹·Ñ§é ÊͧµÑÇÍÂÙº ¹ ¾×¹é ÊÕ´Òí µÕ¤ÇÒÁä´ ÇÒ Ëع ¹µ ÍÂÙº ÃÔàdz·Ò§á¡ ÍÒ¨Êѧè ãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õäè »¢ ҧ˹ Ò àÅÕÂé Ç« ÒÂËÃ×Í¢ÇÒ 90 ͧÈÒ ¡çä´
ÃÙ»·Õè A11-3 ÃٻẺ¡ÒÃà¤Å×Íè ¹·Õµè ÒÁàÊ ¹¢Í§Ëع ¹µ àÁ×Íè 㪠µÇÑ µÃǨ¨ÑºàÊ ¹ 2 µÑÇ
98 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
ÃٻẺáÅÐà§×Íè ¹ä¢¢Í§Ëع ¹µ à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ ã¹ÃÙ»·Õè A11-3 à» ¹¡ÒÃÊÃØ»ÃٻẺ¡ÒÃà¤Å×Íè ¹·Õµè ÒÁàÊ ¹¢Ñ¹é ¾×¹é °Ò¹ã¹¡Ã³Õ·ãÕè ª µÇÑ µÃǨ¨ÑºàÊ ¹ 2 µÑÇ àÁ×Íè ¾Ô¨ÒóҨҡÃٻẺ¢Í§Ê¹ÒÁã¹ÃÙ»·Õè A11-2 (¡) Ëع ¹µ ¨ÐÁÕû٠Ẻ¡ÒÃà¤Å×Íè ¹·Õµè ÒÁ·Õáè Ê´§ã¹ÃÙ»·Õè A11-3 ·Ñ§é ÊÔ¹é 3 ÃٻẺ¤×Í ÃٻẺ·Õè 1 ¶Ö§ 3 áµ ¶Ò ʹÒÁÁÕ·Ò§á¡à¾ÔÁè ࢠÒÁҴѧÃÙ»·Õè A11-2 (¢) ¨Ö§µ ͧÁÕû٠Ẻ¡ÒÃà¤Å×Íè ¹·Õ¢è ͧËع ¹µ ã¹ÃٻẺ ·Õè 4 à¾ÔÁè ࢠÒÁÒ
¡ÒÃËÒ¤ Ò¡ÅÒ§ÃÐËÇ Ò§ÊÕ¢ÒÇáÅÐÊÕ´Òí ¤ Ò¡ÅÒ§ËÃ×ͤ ÒÍ Ò§Íԧ㪠ÊÒí ËÃѺà»ÃÕºà·Õºã¹â»Ãá¡ÃÁà¾×Íè 㪠໠¹à¡³± 㹡ÒõѴÊÔ¹ã¨Ç Ò ¢³Ð¹ÕËé ¹Ø Â¹µ ¾º¾×¹é ÊÕ´Òí ËÃ×Í¢ÒÇ ¶ Ò¤ Ò·ÕÍè Ò ¹ä´ ¨Ò¡á¼§Ç§¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàô¹ ÍÂ¡Ç Ò¤ Ò¡ÅÒ§ µÕ¤ÇÒÁ ä´ ÇÒ ºÃÔàdz·ÕÍè Ò ¹¤ Òà» ¹¾×¹é ÊÕ´Òí ¶ Ò¤ Ò·ÕÍè Ò ¹ä´ ¨Ò¡á¼§Ç§¨ÃµÃǨ¨Ñº¡ÒÃÊз ͹áʧÍÔ¹¿ÃÒàôÁÒ¡¡Ç Ò¤ Ò¡ÅÒ§ µÕ¤ÇÒÁ ä´ ÇÒ ºÃÔàdz·ÕÍè Ò ¹¤ Òä´ à» ¹¾×¹é ÊÕ¢ÒÇ â´Â ¤ Ò¡ÅÒ§ ËÒä´ ¨Ò¡ : (¤ ÒµèÒí ÊØ´·Õµè ÇÑ µÃǨ¨ÑºÍ Ò¹ä´ ¨Ò¡¾×¹é ·ÕÊè ¢Õ ÒÇ + ¤ ÒÊÙ§ÊØ´·Õµè ÇÑ µÃǨ¨ÑºÍ Ò¹ä´ ¢Í§¾×¹é ·ÕÊè ´Õ Òí ) / 2
µÑÇÍ ҧ ¶ Ò¤ ÒµèÒí ÊØ´·Õµè ÇÑ µÃǨ¨ÑºÍ Ò¹ä´ ¨Ò¡¾×¹é ÊÕ¢ÒÇ෠ҡѺ 500 áÅФ ÒÊÙ§ÊØ´·ÕèµÑǵÃǨ¨ÑºÍ Ò¹ä´ ¨Ò¡¾×é¹ÊÕ ´íÒ෠ҡѺ 100 ¤ Ò¡ÅÒ§ = (500+100) / 2 = 300
»¯ÔºµÑ ¡Ô Òà A11.1 à¢Õ¹â»Ãá¡ÃÁ·Õè A11-1 ´ Ç mikroC IDE ·íÒ¡ÒäÍÁä¾Å ãË ä´ ä¿Å ¼ÅÅѾ¸ .hex A11.2 àª×Íè Áµ ͺÍà ´â»Ãá¡ÃÁࢠҡѺËع ¹µ Robo-PICA áÅоÍà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍà A11.3 ´Òǹ âËÅ´â»Ãá¡ÃÁä»ÂѧËع ¹µ Robo-PICA » ´ÊÇÔµª POWER A11.4 »Å´ÊÒ´Òǹ âËÅ´·Ñ§é ËÁ´ÍÍ¡¨Ò¡Ëع ¹µ Robo-PICA A11.5 ¹íÒËع ¹µ Robo-PICA ÁÒÇÒ§¤Ã ÍÁàÊ ¹º¹Ê¹ÒÁ·Õàè µÃÕÂÁäÇ à» ´ÊÇÔµª POWER ·Õâè Á´ÙÅ LCD ¢Í§Ëع ¹µ Robo-PICA áÊ´§¢ ͤÇÒÁ << RA4 >> Start Line Tracking
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 99 #include <motor.h> #include <adc.h>
// Motor Control library // Analog to Digital converter library
/*********** Text on LCD **************/ char *text0 = "Forward Only"; char *text1 = "Found Line" ; char *text2 = "On Left"; char *text3 = "On Right"; char *text4 = "Not Found Line"; char *text5 = "Cross Number"; char Cnt=0; // char txt[4]; // char First_Time=5; // int ADC1=0,ADC2=0; void main() { /* LCD Initial */ Lcd_Init(&PORTD); // Lcd_Cmd(LCD_CURSOR_OFF); // Lcd_Cmd(LCD_CLEAR); /* Sound Initial */ Sound_Init(&PORTC,0); /* Check Key Press*/ Lcd_Out(1,1, "<< RA4 >> Start"); Lcd_Out(2,1,"Line Tracking"); while(PORTA.F4==1); // while(1) { ADC1 =Adc_Rd(0); // ADC2 =Adc_Rd(1); // if ((ADC1<300)&&(ADC2<300)) // { if (First_Time!=0) // { First_Time=0; // Cnt++; Lcd_Cmd(LCD_CLEAR); // Lcd_Out(1,1,text5); Lcd_Out(2,1,text0); ByteToStr(Cnt,txt); // Lcd_Out(1,13,txt); // Sound_Play(250,100); // Forward(255); // Delay_ms(400); } } if ((ADC1>300)&&(ADC2>300)) // { if (First_Time!=1) // { First_Time=1; // Lcd_Cmd(LCD_CLEAR); // Lcd_Out(1,1,text4); Lcd_Out(2,1,text0); Forward(255); } }
Counter Save string Save status
Init LCD port LCD cursor off
Start program when press RA4 switch Reading sensor from left Reading sensor from right Check both sensors detect white Check as first time ? Change status => Second_Time Show ==> LCD Convert counter to string Show counter ==> LCD Play sound when meet the crossing Running Robot
Check both sensor detect white area Check first time ? Change status => Second_Time Shcw ==> LCD
â»Ãá¡ÃÁ·Õè A11-1 ä¿Å TracklineBot.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ¤Çº¤ØÁãË Ë¹Ø Â¹µ Robo-PICA à¤Å×Íè ¹·Õè µÒÁàÊ ¹ÊÕ´Òí ẺÁÕ¡ÒõÃǨÊͺ·Ò§á¡ (ÁÕµÍ )
100 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
if (ADC1<300) { S_Left(255); if (First_Time!=2) { First_Time=2; Lcd_Cmd(LCD_CLEAR); Lcd_Out(1,1,text1); Lcd_Out(2,1,text2); } } if (ADC2<300) { S_Right(255); if (First_Time!=3) { First_Time=3; Lcd_Cmd(LCD_CLEAR); Lcd_Out(1,1,text1); Lcd_Out(2,1,text3); } }
PIC
// Left Sensor detect black line // Turn left // Clear first time status // Show ==> LCD
// Right sensor detect black line // Turn right // Clear first time status // Show ==> LCD
} }
¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ ËÅѧ¨Ò¡áÊ´§¼Å·Õâè Á´ÙÅ LCD áÅÐÃÍÃѺ¡Òá´ÊÇÔµª RA4 ¨Ò¡¼Ùã ª áÅ Ç â»Ãá¡ÃÁ¨ÐÍ Ò¹¤ Ҩҡἧ ǧ¨ÃµÃǨ¨ÑºáʧÊз ͹ÍÔ¹¿ÃÒàô·Ñ§é Êͧ¢ Ò§ÁÒà¡çºäÇ ã¹µÑÇá»Ã ¡ ͹·Õ¨è йíÒ¤ Òä»à»ÃÕºà·Õºã¹â»Ãá¡ÃÁ â´Â¤ ÒÍ Ò§ÍÔ§à¾×Íè 㪠㹡ÒÃà»ÃÕºà·Õº¢ÒÇáÅдíÒµÑ§é ¤ ÒäÇ ·Õè 300 ¤ Ò¹ÕÍé Ò¨¨ÐÁÒ¡ËÃ×͹ ÍÂ¡Ç Ò¹Õ¡é äç ´ ¶ Ò¤ Ò·ÕÍè Ò ¹ä´ ÁÒ¡¡Ç Ò 300 ·Ñ§é ¤Ù áÊ´§Ç Ò µÃǨ¨Ñº¾º¾×¹é ÊÕ¢ÒÇ ¨Ö§¤Çº¤ØÁãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õµè ç 仢 ҧ˹ Ò ¾Ã ÍÁ·Ñ§é áÊ´§¢ ͤÇÒÁ·Õâè Á´ÙÅ LCD ¶ Ò¤ Ò·ÕÍè Ò ¹ä´ ¹Í Â¡Ç Ò 300 ·Ñ§é ¤Ù áÊ´§Ç Ò µÃǨ¨Ñº¾º¾×¹é ËÃ×ÍàÊ ¹ÊÕ´Òí ·Ñ§é ¤Ù ¨Ö§·íÒ¡ÒÃà¾ÔÁè ¤ ÒµÑǹѺ ¢Ö¹é 1 ¤ Ò à» ¹¡ÒÃºÍ¡Ç Ò ¾º·Ò§á¡áÅ Ç ¨Ò¡¹Ñ¹é ¹íҼšÒ÷íÒ§Ò¹ä»áÊ´§·Õâè Á´ÙÅ LCD áÅÐÊ §àÊÕ§ µÔ´ê ÍÍ¡ÁÒ 1 ¤ÃÑ§é ¾Ã ÍÁ·Ñ§é ¤Çº¤ØÁãË Ë¹Ø Â¹µ à¤Å×Íè ¹·Õµè ç仢 ҧ˹ Ò 0.4 ÇÔ¹Ò·Õ à¾×Íè ãË àÅ·ҧá¡ ¶ ÒµÑǵÃǨ¨ÑºàÊ ¹·Ò§« Ò¾º¾×¹é ËÃ×ÍàÊ ¹ÊÕ´Òí ¨Ð¤Çº¤ØÁãË Ë¹Ø Â¹µ àÅÕÂé Ç« Ò ¾Ã ÍÁáÊ´§¢ ͤÇÒÁ·Õè LCD ¶ ÒµÑǵÃǨ¨ÑºàÊ ¹·Ò§¢ÇÒ¾º¾×¹é ËÃ×ÍàÊ ¹ÊÕ´Òí ¨Ð¤Çº¤ØÁãË Ë¹Ø Â¹µ àÅÕÂé Ç¢ÇÒ ¾Ã ÍÁ·Ñ§é áÊ´§¢ ͤÇÒÁ ·Õâè Á´ÙÅ LCD µÑÇá»Ã First_Time ª ÇÂ㹡ÒÃáÊ´§¼Å¢ ͤÇÒÁ·Õâè Á´ÙÅ LCD äÁ ãË Á¡Õ ÒÃà¤ÅÕÂà ˹ Ҩͺ ÍÂà¡Ô¹ ä» ¨¹à¡Ô´¡ÒáоÃÔº â»Ãá¡ÃÁ¨ÐáÊ´§Ë¹ Ò¨Íà¾Õ§¤Ãѧé à´ÕÂÇàÁ×Íè ࢠÒä»·íÒ§Ò¹ã¹à§×Íè ¹ä¢¹Ñ¹é æ à· Ò¹Ñ¹é ¡ÒÃáÊ´§¼Å·Õâè Á´ÙÅ LCD 㹡óÕàÅÕÂé Ç« ÒÂáÅТÇÒÍÒ¨ÁͧäÁ ·¹Ñ à¹×Íè §¨Ò¡à¡Ô´¢Ö¹é ¤ ͹¢ Ò§àÃçÇ ¶ ÒÁÕ¡Òà »ÃѺà»ÅÕÂè ¹ä»ãª ÁÍàµÍà ·ÁÕè ¤Õ ÇÒÁàÃçÇÊÙ§¢Ö¹é á¹Ð¹íÒãË ¹Òí ¤íÒÊÑ§è ·Õãè ª 㹡ÒÃáÊ´§¼ÅâÁ´ÙÅ LCD ÍÍ¡ à¹×Íè §¨Ò¡ ÍÒ¨·íÒãË â»Ãá¡ÃÁ·íÒ§Ò¹äÁ ·¹Ñ
â»Ãá¡ÃÁ·Õè A11-1 ä¿Å TracklineBot.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ¤Çº¤ØÁãË Ë¹Ø Â¹µ Robo-PICA à¤Å×Íè ¹·Õè µÒÁàÊ ¹ÊÕ´Òí ẺÁÕ¡ÒõÃǨÊͺ·Ò§á¡ (¨º)
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 101
A11.6 ¡´ÊÇÔµª RA4 º¹ºÍà ´¤Çº¤ØÁ¢Í§Ëع ¹µ à¾×Íè ãË Ë¹Ø Â¹µ ·Òí §Ò¹ áÅ ÇÊѧࡵ¼Å¡Ò÷íÒ§Ò¹·Õàè ¡Ô´¢Ö¹é Ëع ¹µ Robo-PICA àÃÔÁè à¤Å×Íè ¹·Õµè ÒÁàÊ ¹ â´ÂÁÕ¡ÒõÃǨÊͺà§×Íè ¹ä¢¨Ò¡¼Å¢Í§¡ÒõÃǨ¨ÑºàÊ ¹·Ñ§é 4 ÃٻẺ â´Â੾ÒÐà¾×Íè à¤Å×Íè ¹·Õäè »¾º·Ò§á¡ Ëع ¹µ Robo-PICA ¨Ð¢ÑºàÊÕ§ÍÍ¡ÁÒ 1 ¤ÃÑ§é ¾Ã ÍÁ·Ñ§é ¹Ñº¨íҹǹ ·Ò§á¡à¡çºäÇ áŠǹíÒÁÒáÊ´§¼Å·Õâè Á´ÙÅ LCD ¹Í¡¨Ò¡¹Ñ¹é ã¹·Ø¡æ ¤ÃÑ§é ·Õ¾è ºà§×Íè ¹ä¢áÅзíÒãË µÍ §ÁÕ¡ÒÃà»ÅÕÂè ¹á»Å§ÅѡɳСÒÃà¤Å×Íè ¹·Õè Ëع ¹µ RoboPICA ¨ÐáÊ´§¼Å¡Ò÷íÒ§Ò¹º¹âÁ´ÙÅ LCD ´ ÇÂ
INNOVATIVE EXPERIMENT
102 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 103
º··Õè 8
Ëع ¹µ Robo-PICA ¡Ñº¡ÒäǺ¤ØÁ ÃÐÂÐä¡Å´ ÇÂáʧÍÔ¹¿ÃÒàô ÃÕâÁµ¤Í¹â·ÃÅ (remote control) á»Åà» ¹ä·ÂÍ ҧ§ ÒÂæ ¤×Í Ê Ç¹¤Çº¤ØÁ¨Ò¡ÃÐÂÐä¡Å ÊíÒËÃѺ¡Ô¨¡ÃÃÁ¹Õ¨é Ð㪠ÃâÕ Áµ¤Í¹â·ÃÅ㹡ÒÃÊ §¢ ÍÁÙŤǺ¤ØÁ ¼ÊÁ¡ÑºáʧÍÔ¹¿ÃÒàô â´Â㪠ÃâÕ Áµ ¤Í¹â·ÃÅ Easy Remote4 ËÃ×Í ER-4 ÊíÒËÃÑºÊ §¢ ÍÁÙÅáÅÐἧǧ¨ÃÃѺáʧÍÔ¹¿ÃÒàô 38kHz ËÃ×Í ºÍà ´ ZX-IRM 㹡ÒÃÃѺ¢ ÍÁÙÅ â´Â¢ ÍÁÙÅ·Õäè ´ ÃºÑ Áҹѹé ÊÒÁÒö¹íÒä»ãª 㹡ÒäǺ¤ØÁãË Ë¹Ø Â¹µ Robo-PICA ·íÒ§Ò¹ä´ µÒÁµ ͧ¡ÒÃ
8.1 ÃÕâÁµ¤Í¹â·ÃÅ ER-4 ÃÕâÁµ¤Í¹â·ÃÅ ER-4 à» ¹ÃÕâÁµ¤Í¹â·ÃÅẺÍÔ¹¿ÃÒàô·ÕÍè ͡ẺãË ãª §Ò¹ä´ Í๡»ÃÐʧ¤ â´Â㹡ÒÃÊ §ÊÑÒ³ÍÍ¡¹Ñ¹é ¨Ðà» ¹¢ ÍÁÙÅ͹ءÃÁ·Õ¼è ÊÁ¡Ñº¤Å×¹è ¾ÒË 38kHz â´Â¡Ãкǹ¡Ò÷ѧé ËÁ´ ä´ ÃºÑ ¡ÒäǺ¤ØÁ¨Ò¡äÁâ¤Ã¤Í¹â·ÃÅàÅÍà º¹µÑÇÃÕâÁµ¤Í¹â·ÃÅà¾Õ§µÑÇà´ÕÂÇ +3-5V
K A IR-LED Easy remote4
2-5V
+
7
5
SW3
* )
(¢)
ÃÙ»·Õè 8-1 ÃÕâÁµ¤Í¹â·ÃÅ ER4 (¡) Ãٻà ҧ˹ ÒµÒ (¢) ¡ÒèѴÇÒ§µíÒá˹ §¢Í§ÊÇÔµª ¡´ (¤) ǧ¨Ã¢Í§ÃÕâÁµ¤Í¹â·ÃÅ ER-4
"D" SW3
GP0
V,, GP5
6
SW2 "C"
LED1 IR-LED
1
SW1 "B"
,
(¡)
"A"
3
GP1
IC1 ER4-FW
GP2
GP4
GND 8
(¤)
2
R1 1k Q1 BC338
104 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
8.1.1 ¤Ø³ÊÁºÑµ·Ô ҧ෤¹Ô¤ 㪠äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¤Çº¤ØÁ¡ÒÃÊà ҧáÅÐÊ §ÊÑÒ³¢ ÍÁÙÅ l 㪠LED ÍÔ¹¿ÃÒàô¢¹Ò´ 3 ÁÔÅÅÔàÁµÃ ÃÐÂзíÒ¡Òà 8-10 àÁµÃã¹¾×¹ é ·Õâè Å § l ÁÕÊÇÔµª ¤Çº¤ØÁÍÔÊÃе ͡ѹ 4 ª ͧ ·íÒ§Ò¹ã¹ÅѡɳС´µÔ´ ¡´´Ñº l ¡Ô¹¡íÒÅѧ§Ò¹µèÒ í â´ÂࢠÒÊÙâ ËÁ´»ÃÐËÂÑ´¾Åѧ§Ò¹·Ñ¹·ÕàÁ×Íè Ê §¢ ÍÁÙÅáÅ Ç l 㪠ä¿àÅÕÂ é § 2.4-3.0V ¨Ò¡áºµàµÍÃÕè AA ¨íҹǹ 2 ¡ ͹ ãª ä´ ·§Ñé Ẻ¸ÃÃÁ´ÒáÅлÃШØä´ l Ê §¢ ÍÁÙÅÍ͡Ẻ͹ءÃÁ´ ÇÂÁҵðҹ RS-232 ÍѵÃҺʹ 1,200 ºÔµµ ÍÇÔ¹Ò·Õ ã¹ÃٻẺ 8N1 (ºÔµ¢ ÍÁÙÅ 8 ºÔµ äÁ Á¡Õ ÒõÃǨÊͺ¾ÒÃÔµÕé áÅкԵ» ´· Ò 1 ºÔµ) l
8.1.2 ¡Ò÷íÒ§Ò¹¢Í§Ç§¨Ã ǧ¨Ã¢Í§ÃÕâÁµ¤Í¹â·ÃÅ ER-4 áÊ´§ã¹ÃÙ»·Õè 8-1 (¤) ¨ÐàËç¹Ç ÒÁÕÍ»Ø ¡Ã³ ¹Í ÂÁÒ¡ ÁÕà¾Õ§ÊÇÔµª ·Õè µ ÍࢠҡѺ¢Ò GP0,GP1, GP2 áÅÐ GP4 ¢Í§ IC1 «Ö§è 㪠äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC12F629 ෠ҹѹé äÁ ¨Òí à» ¹µ ͧµ ͵Ñǵ Ò¹·Ò¹¾ÙÅÍÑ»ÀÒ¹͡à¹×Íè §¨Ò¡¡íÒ˹´ãË Á¡Õ ÒþÙÅÍÑ»ä´ ¼Ò ¹·Ò§«Í¿µ áÇÃ Ê Ç¹¡ÒâѺ LED ÍÔ¹¿ÃÒàôà¾×Íè ãË Á¡Õ Òí ÅÑ§Ê §ÊÙ§ ÊÒÁÒÃ¶Ê §ä´ ä¡Å ¨Ö§µ ͼ ҹǧ¨Ã¢ÂÒÂâ´Â㪠·ÃÒ¹«ÔÊàµÍà Q1
8.1.3 ÃٻẺ¡ÒÃÊ §¢ ÍÁÙŢͧÃÕâÁµ¤Í¹â·ÃÅ ER-4 à¾×Íè ãË ÀÒ¤ÃѺÊÒÁÒÃ¶Í Ò¹¢ ÍÁÙÅ¡Òá´ÊÇÔµª ¨Ò¡ÃÕâÁµ¤Í¹â·ÃÅä´ â´Â§ Ò 㹡ÒÃÊ §¢ ÍÁÙÅ ¢Í§ Easy remote4 ¨Ö§ãª ¡ÒÃÊ §¢ ÍÁÙÅẺ͹ءÃÁ µÒÁÁҵðҹ RS-232 ´ ÇÂÍѵÃҺʹ 1,200 ºÔµµ Í ÇÔ¹Ò·Õ ã¹ÃٻẺ 8N1 ¢ ÍÁÙÅ·ÕÊè § ¹Ñ¹é à» ¹µÑÇÍÑ¡Éâֹé ÍÂÙ¡ ºÑ ¡Òá´ÊÇÔµª µÇÑ ã´ ´Ñ§áÊ´§µíÒá˹ §¢Í§ ÊÇÔµª ã¹ÃÙ»·Õè 8-1 (¢) ¡´ÊÇÔµª A Ê §¢ ÍÁÙŵÑÇÍÑ¡Éà A µÑǾÔÁ¾ ãË ÊÅѺµÑǾÔÁ¾ àÅç¡ ¡´ÊÇÔµª B Ê §¢ ÍÁÙŵÑÇÍÑ¡Éà B µÑǾÔÁ¾ ãË ÊÅѺµÑǾÔÁ¾ àÅç¡ ¡´ÊÇÔµª C Ê §¢ ÍÁÙŵÑÇÍÑ¡Éà C µÑǾÔÁ¾ ãË ÊÅѺµÑǾÔÁ¾ àÅç¡ ¡´ÊÇÔµª D Ê §¢ ÍÁÙŵÑÇÍÑ¡Éà D µÑǾÔÁ¾ ãË ÊÅѺµÑǾÔÁ¾ àÅç¡ ÊÒà˵طÊÕè § ÊÅѺµÑǾÔÁ¾ ãË ¡ºÑ µÑǾÔÁ¾ àÅç¡à¾×Íè ãË µÇÑ ÃѺ·ÃÒºÇ Ò ¡Òá´ÊÇÔµª ¹¹Ñé à» ¹¡Òá´ Ẻ¤ Ò§µ Íà¹×Íè § ËÃ×Íà» ¹¡ÒᴻŠÍÂà» ¹¨Ñ§ËÇÐ «Ö§è ¨ÐãË ¼ÅÅѾ¸ 㹡ÒäǺ¤ØÁ·Õáè µ¡µ Ò§¡Ñ¹ ¹Ñ¹è ¤×Ͷ Ò¡´ÊÇÔµª à» ¹¨Ñ§ËÇÐ ¤ÃÑé§áá¨ÐÊ §¢ ÍÁÙŵÑÇÍÑ¡ÉÃẺµÑǾÔÁ¾ ãË ¶ Ò¡´µÑÇà´ÔÁ㹤ÃÑ駵 ÍÁÒ ¢ ÍÁÙÅ·ÕÊè § ÍÍ¡¨Ðà» ¹µÑÇÍÑ¡ÉÃẺµÑǾÔÁ¾ àÅç¡ áµ ¶Ò ËÒ¡¡´¤ Ò§µ Íà¹×Íè § ¨ÐÊ §¢ ÍÁÙŵÑÇÍÑ¡ÉÃẺ Å ÒÊØ´¹Ñé¹ÍÍ¡ÁÒµÅÍ´àÇÅÒ
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 105
0.1uF 50V
3 1 Out 2 GND
1
3 Vcc 1
2
3
Vcc Out GND
2
ἧǧ¨ÃâÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô 38 kHz
Infrared Module
ÃÙ»·Õè 8-2 ZX-IRM ἧǧ¨ÃâÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô (¡) Ãٻà ҧ¢Í§á¼§Ç§¨Ã (¢) ǧ¨Ã¢Í§ ZX-IRM
8.2 ἧǧ¨ÃâÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô 38kHz : ZX-IRM ¨Ò¡º·¡ ͹˹ Ò¹Õ¡é Å ÒǶ֧¡ÒÃÊз ͹áʧâ´Âãª Ç¸Ô ¡Õ ÒÃÊ §áʧÍÔ¹¿ÃÒàôÍÍ¡ä» áÅ ÇÃÍÃѺ ¡ÒÃÊз ͹¡ÅѺÁÒ´ ÇÂâ¿âµ ·ÃÒ¹«ÔÊàµÍà «Öè§ÍÂÙ ã¹âÁ´ÙÅà´ÕÂǡѹ ·íÒãË ÃÐÂзҧ㹡ÒÃÊ §áÅÐÃѺ áʧ¹Ñ¹é ·íÒä´ ã¹ª ǧÊѹé æ ÊíÒËÃѺ¡ÒÃÊ §áʧÍÔ¹¿ÃÒàô¨Ò¡µÑÇÊ §·ÕÍè ÂÙä ¡Å (ÃÐÂзíÒ¡ÒûÃÐÁÒ³ 5 ¶Ö§ 10 àÁµÃ àËÁ×͹ ¡ÑºÃÕâÁµ¤Í¹â·ÃŢͧà¤Ã×èͧÃѺâ·Ã·Ñȹ ) ¨Ðµ ͧ㪠ÇÔ¸Õ¡ÒüÊÁ¤ÇÒÁ¶Õè¾ÒË à¢ Ò¡Ñº¢ ÍÁÙÅ·Õèµ Í§¡ÒÃ Ê §ÍÍ¡ä» à¾×Íè » ͧ¡Ñ¹áʧÍÔ¹¿ÃÒàô¨Ò¡ÀÒ¹͡ÁÒú¡Ç¹ÊÑÒ³·ÕÊè § ÍÍ¡ä» «Ö§è ·íÒãË ÀÒ¤ÃѺ ¨Ðµ ͧ¡Ãͧ¤ÇÒÁ¶Õ¾è ÒË ·ÃÕè ºÑ ä´ ÍÍ¡¡ ͹ ¨Ò¡¹Ñ¹é ¨Ö§¹íÒÊÑÒ³¢ ÍÁÙÅÊ §ä»ãË äÁâ¤Ã¤Í¹â·ÃÅàÅÍà µ Íä» ´ Ç¡ÒÃãª Ê Ñ Ò³¾ÒË áÅТÂÒÂÊÑÒ³¹Õàé ͧ·íÒãË ÊÒÁÒÃ¶Ê §¢ ÍÁÙÅä´ ä¡Å¶Ö§ 10 àÁµÃ ÊíÒËÃѺâÁ´ÙÅÍÔ¹¿ÃÒàô·Õãè ª ¡ºÑ ἧǧ¨Ã ZX-IRM ¨Ð¡Ãͧ¤ÇÒÁ¶Õ¾è ÒË ·¤Õè ÇÒÁ¶Õè 38 kHz áÅÐ ¢ ÍÁÙÅ·ÕÃè ºÑ ä´ ¨Ð¶Ù¡Ê §ÍÍ¡·Ò§¢Ò Out «Ö§è ã¹ÊÀÒÇл¡µÔ·äÕè Á ä´ ÃºÑ ÊÑÒ³¨ÐÁÕÅͨԡ 1 (»ÃÐÁÒ³ +5V) áµ àÁ×Íè ä´ ÃºÑ ÊÑÒ³¶Ù¡Ê §à¢ ÒÁÒ·Õµè ÇÑ Áѹ¨ÐÁÕÅͨԡ໠¹ 0 (0 V) ã¹ÃÙ»·Õè 8-2 áÊ´§Ãٻà ҧáÅРǧ¨Ã¢Í§ ZX-IRM ἧǧ¨ÃâÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô 38kHz
106 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
8.3 ÃÙ¨ ¡Ñ ¡Ñº¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ 㹡Ò÷íÒ§Ò¹â´Â»¡µÔ¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¨Ð·íÒ§Ò¹µÒÁÅíҴѺ¤íÒÊÑè§ä»Í ҧµ Íà¹×èͧ áµ ¡Áç ¡Õ Ò÷íҧҹ㹺ҧ¤ÃÑ§é ·Õàè ¡Ô´¢Ö¹é Í ҧ੾ÒÐà¨ÒШ§ áÅШíÒà» ¹µÑͧ¢Ñ´¨Ñ§ËÇСÃкǹ¡Ò÷íÒ§Ò¹ ËÅÑ¡ ¡ÒâѴ¨Ñ§ËÇÐã¹ÃкºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¨ÐàÃÕÂ¡Ç Ò ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ (interrupt) ã¹Ëع ¹µ Robo-PICA ¨Ð㪠¤ÇÒÁÊÒÁÒö¹Õãé ¹¡ÒÃÃѺ¢ ÍÁÙÅ͹ءÃÁ¨Ò¡ÃÕâÁµ¤Í¹â·ÃÅ ER4 à¹×Íè §¨Ò¡µ ͧÃѺ¢ ÍÁÙŤíÒÊÑ§è ¨Ò¡ÊÇÔµª ·¶Õè ¡Ù ¡´ áŠǹíÒ¤ ÒÊÇÔµª ¹¹Ñé 仡íÒ˹´¡Ò÷íÒ§Ò¹¢Í§Ëع ¹µ µ Íä» ¡Òõͺʹͧµ Í¡ÒâѴ¨Ñ§ËÇÐËÃ×ÍÍÔ¹àµÍÃ Ã»Ñ µ ¹àÕé ÃÕÂ¡Ç Ò ¡ÒúÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ (interrupt service) «Ö§è µ ͧ㪠¡Ãкǹ¡Ò÷ҧ«Í¿µ áÇà ࢠÒÁÒà ÇÁ´ Ç 㹠mikroC ¤ÍÁä¾àÅÍÃ ä´ àµÃÕÂÁ¿ §¡ ª¹Ñè ÊíÒËÃѺµÍºÊ¹Í§ËÃ×ͺÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¹äÕé Ç ´Ç  ¹Ñ¹è ¤×Í ¿ §¡ ª¹Ñè void interrupt()
8.4 ÍÔ¹àµÍÃ Ã»Ñ µ ã¹ PIC16F887 ·Õàè ¡ÕÂè Ç¢ ͧ¡Ñº¡ÒäǺ¤ØÁËع ¹µ Robo-PICA áËÅ §¡íÒà¹Ô´ÊÑÒ³ÍÔ¹àµÍÃ Ã»Ñ µ ÊÒí ËÃѺäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 ÁÕËÅÒÂáËÅ § ઠ¹ ÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ä·àÁÍà à¤Ò¹ àµÍà , ÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ÀÒ¹͡¼ Ò¹·Ò§¢Ò RB0/INT, ÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡¡ÒÃà¢Õ¹¢ ÍÁÙÅÍÕÍ¾Õ ÃÍÁàÊÃç¨ÊÁºÙó , ÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡¡Ò÷íÒ§Ò¹¢Í§âÁ´ÙÅ ADC à» ¹µ ¹ áµ ÊÒí ËÃѺã¹Ëع ¹µ Robo-PICA ¨Ð¡Å ÒǶ֧੾ÒÐÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡ÀÒ¹͡¼ Ò¹·Ò§¢Ò RB0/ INT ෠ҹѹé à¹×Íè §¨Ò¡µ ͧ¡ÒÃ㪠¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ Ẻ¹Õãé ¹¡ÒÃÃѺ¢ ÍÁÙŨҡÃÕâÁµ¤Í¹â·ÃÅ ¡ÒÃàÍç¹àÍàºÔÅËÃ×Íà» ´ãª §Ò¹ÍÔ¹àµÍÃ Ã»Ñ µ · ¢Õè Ò RB0/INT ¨Ðµ ͧ·íÒµÒÁ¢Ñ¹é µÍ¹´Ñ§µ Í仹Õé (1) ¡íÒ˹´¢Ò¾Íà µ RB0 ãË à» ¹¢ÒÍÔ¹¾Øµ´Ô¨µÔ ÍÅ (2) ¡íÒ˹´ãË Í¹Ô àµÍÃ Ã»Ñ µ à¡Ô´¢Ö¹é àÁ×Íè ¢Ò¾Íà µà»ÅÕÂè ¹Ê¶Ò¹Ð¨Ò¡ Åͨԡ 1 à» ¹ 0 â´Â¡íÒ˹´·ÕèºÔµ INTEDG ã¹ÃÕ¨ÔÊàµÍà OPTION ãË à» ¹ 0 à¹×èͧ¨Ò¡¡ÒÃÃѺ¢ ÍÁÙŨҡÃÕâÁµ ¤Í¹â·ÃŢͧἧǧ¨Ã ZX-IRM ¨ÐàÃÔÁè ·íÒ§Ò¹àÁ×Íè à»ÅÕÂè ¹Ê¶Ò¹Ð¨Ò¡Åͨԡ 1 à» ¹ 0 (3) àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ·¢Õè Ò RB0/INT ´ Ç¡ÒÃ૵ºÔµ INTE ã¹ÃÕ¨ÊÔ àµÍà INTCON (4) àÍç¹àÍàºÔÅ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ·§Ñé Ãкº ´ Ç¡ÒÃ૵ºÔµ GIE ã¹ÃÕ¨ÊÔ àµÍà INTCON (5) àÁ×Íè à¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ ¢¹Öé â»Ãá¡ÃÁ¨Ð¡ÃÐâ´´ä»·íÒ§Ò¹·Õ¿è § ¡ ª¹Ñè interrupt (6) ·Õè¿ §¡ ªÑè¹ interrupt µ ͧÁÕ¤íÒÊÑè§à¤ÅÕÂà á¿Å¡ÍÔ¹àµÍà ÃÑ»µ ´ Ç â´Âµ ͧà¤ÅÕÂà ºÔµ INTF ã¹ÃÕ¨ÊÔ àµÍà INTCON
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 107
¡Ô¨¡ÃÃÁ·Õè 12
·´Êͺ¡ÒÃÍÔ¹àµÍà ÃÑ»µì
㹡Ԩ¡ÃÃÁ¹Õ¹é Òí àʹ͵ÑÇÍ ҧ¡Ò÷´ÊͺáÅÐ㪠§Ò¹¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ·¢Õè Ò RB0/INT Í ҧ§ Ò A12.1 à¢Õ¹â»Ãá¡ÃÁ·Õè A12-1 ´ Ç mikroC IDE ·íÒ¡ÒäÍÁä¾Å ãË ä´ ä¿Å ¼ÅÅѾ¸ .hex A12.2 àª×Íè Áµ ͺÍà ´â»Ãá¡ÃÁࢠҡѺËع ¹µ Robo-PICA áÅоÍà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍà A12.3 ´Òǹ âËÅ´â»Ãá¡ÃÁä»ÂѧËع ¹µ Robo-PICA void interrupt() // Interrupt Service routine { Sound_Play(250,200); // Show Sound INTCON.INTF=0; // Clear Flag Interrupt } void main() { /********************************************/ ANSELH.F4=0; // RB0 ==> Digital IO OPTION_REG.INTEDG = 0; // INT falling edge INTCON.INTE =1; // Enable INT/PB0 INTCON.GIE =1; // Enable Global interrupt /********************************************/ TRISB.F3=0; Sound_Init(&PORTC,0); // Init Sound ==> RC0 Lcd_Init(&PORTD); // Init LCD PORT D Lcd_Cmd(LCD_CURSOR_OFF); // LCD cursor off Lcd_Cmd(LCD_CLEAR); Lcd_Out(1,1, "<< RA4 >> Start"); Lcd_Out(2,1,"Test Interrupt"); while(PORTA.F4==1); // Start Program when Press RA4 /********************************************/ Lcd_Cmd(LCD_CLEAR); Lcd_Out(1,1, "Start Program"); // Main Program while(1) { PORTB.F3=1; // Blinking LED Delay_ms(500); PORTB.F3=0; Delay_ms(500); } }
¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ â»Ãá¡ÃÁËÅÑ¡¨Ðǹ¢Ñº LED ãË µ´Ô áÅдѺÊÅѺ¡Ñ¹ àÁ×Íè ¡´ÊÇÔµª ·¢Õè Ò RB0 ¨Ðà¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¢¹Öé «Õ¾ÂÕ ¨Ù СÃÐâ´´ä»Âѧ¿ §¡ ª¹Ñè ºÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ à¾×Íè ¡ÃзíÒ¤íÒÊÑ§è ¡íÒà¹Ô´àÊÕ§ áÅС ͹ÍÍ¡¨Ò¡¿ §¡ ª¹Ñè ºÃÔ¡Òà ÍÔ¹àµÍÃ Ã»Ñ µ µ ͧà¤ÅÕÂà ºµÔ á¿Å¡ÍÔ¹àµÍÃ Ã»Ñ µ INTF ¡ ͹àÊÁÍ
â»Ãá¡ÃÁ·Õè A12-1 ä¿Å inttest.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Êͺ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ·¢Õè Ò RB0/INT
108 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
¡´ÊÇÔµª à¾×Íè ãË à¡Ô´ÍÔ¹àµÍÃ Ã»Ñ µ
ÃÙ»·Õè A12-1 µíÒá˹ §¢Í§ÊÇÔµª RB0 º¹ºÍà ´¤Çº¤ØÁ¢Í§Ëع ¹µ Robo-PICA ·Õãè ª 㹡Ò÷´Êͺ ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ A12.4 Ãѹâ»Ãá¡ÃÁ ¨Ò¡¹Ñ¹é ·´Êͺ¡´ÊÇÔµª RB0 áÅ ÇÊѧࡵ¡Ò÷íÒ§Ò¹ àÁ×Íè Ãѹâ»Ãá¡ÃÁ LED ·Õµè Òí á˹ § RB3 º¹ºÍà ´¤Çº¤ØÁ¢Í§Ëع ¹µ Robo-PICA ¨ÐµÔ´¡Ð¾ÃÔº áÅÐ àÁ×èÍ¡´ÊÇÔµª RB0 ¨ÐÁÕàÊÕ§ÍÍ¡·ÕèÅíÒ⾧ ¹Ñ蹤×Í ¡Ò÷íÒ§Ò¹ËÅÑ¡¢Í§äÁâ¤Ã¤Í¹â·ÃÅàÅÍà 㹡Ԩ¡ÃÃÁà» ¹¡Òà ¢Ñº LED ·Õ¢è Ò¾Íà µ RB3 ãË µ´Ô ¡Ð¾ÃÔº ËÒ¡à¡Ô´¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¢¹Öé ·Õ¢è Ò RB0 ´ Ç¡Òá´ÊÇÔµª ·íÒãË Ê¶Ò¹Ð Åͨԡ·Õ¢è Òà»ÅÕÂè ¹¨Ò¡Åͨԡ 1 à» ¹ 0 äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ¨Ð·íÒ¡ÒõͺʹͧÍÔ¹àµÍÃ Ã»Ñ µ ´Ç ¡ÒáÃÐâ´´ ä»·íÒ§Ò¹Âѧâ»Ãá¡ÃÁºÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ «Ö§è ¡íÒ˹´ãË ¢ºÑ ÊÑÒ³àÊÕ§ÍÍ¡·Ò§ÅíÒ⾧ àÁ×Íè àÊÃç¨áÅ Ç¡ç¨Ð¡ÃÐâ´´ ¡ÅѺ价íÒ§Ò¹·Õâè »Ãá¡ÃÁËÅÑ¡µ Íä» «Ö§è ¡ç¤Í× ¡ÒâѺ LED ·Õ¢è Ò RB3 ãË ¡Ð¾ÃÔº
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 109
8.5 ¡ÒÃÊ×Íè ÊÒâ ÍÁÙÅ͹ءÃÁẺÍЫԧâ¤Ã¹ÑÊ à¹×Íè §¨Ò¡ÃÕâÁµ¤Í¹â·ÃÅ ER-4 Ê §¢ ÍÁÙŢͧÊÇÔµª ÍÍ¡ÁÒã¹ÃÙ»¢Í§¢ ÍÁÙÅ͹ءÃÁ ´Ñ§¹Ñ¹é à¾×Íè ãË ÊÒÁÒöà¢Õ¹â»Ãá¡ÃÁà¾×Íè ÃѺ¢ ÍÁÙÅ͹ءÃÁáŠǶʹÍÍ¡ÁÒà» ¹¤ ҢͧÊÇÔµª ·¡Õè ´Ê §ÁÒ ¨Ö§µ ͧÁÕ ¤ÇÒÁࢠÒã¨à¡ÕèÂǡѺ¡ÒÃÊ×èÍÊÒâ ÍÁÙÅ͹ءÃÁẺÍЫԧâ¤Ã¹ÑÊ ¡ÒÃÊ×èÍÊÒâ ÍÁÙÅẺÍЫԧâ¤Ã¹Ñʤ×Í¡ÒÃÃѺáÅÐÊ §¢ ÍÁÙÅä»ã¹ÊÒÂâ´ÂäÁ ¨íÒà» ¹µ ͧÁÕ ÊÑÒ³¹ÒÌ ¡Òà ÇÁ´ ÇÂàËÁ×͹¡Ñº¡ÒÃÃÑºÊ §¢ ÍÁÙÅẺ«Ô§â¤Ã¹ÑÊ áµ ¨Ð㪠¡ÒáíÒ˹´¤ ÒÊÑÒ³ ¹ÒÌ ¡Ò·Ñé§ÀÒ¤ÃѺáÅÐÀÒ¤Ê §ãË ÁÕ¤ Ò෠ҡѹ «Öè§àÃÕ¡ÊÑÒ³¹ÒÌ ¡Ò·Õè㪠㹡ÒáíÒ˹´¤ ÒãË ÀÒ¤ÃѺ áÅÐÀÒ¤Ê §¹ÕéÇ Ò ÍѵÃÒ¡Òö Ò·ʹ¢ ÍÁÙÅ ËÃ×Í ºÍ´àõ (baudrate) ÁÕ˹ ÇÂà» ¹ ºÔµµ ÍÇÔ¹Ò·Õ (bit per second : bps) ÃٻẺ¢Í§¢ ÍÁÙÅ·Õãè ª 㹡ÒÃÃÑºÊ §áººÍЫԧâ¤Ã¹ÑÊ»ÃСͺ´ Ç 4 Ê Ç¹´ Ç¡ѹ¤×Í 1. ºÔµàÃÔÁè µ ¹ (Start Bit) «Ö§è ¨ÐÁÕ¢¹Ò´ 1 ºÔµ 2. ºÔµ¢ ÍÁÙÅẺ͹ءÃÁ¨ÐÁÕ¢¹Ò´ 5,6,7 ËÃ×Í 8 ºÔµ 3. ºÔµµÃǨÊͺ¾ÒÃÔµÕé (Parity Bit) ¨ÐÁÕ¢¹Ò´ 1 ºÔµËÃ×ÍäÁ ÁÕ 4. ºÔµ» ´· Ò (Stop Bit) ¨ÐÁÕ¢¹Ò´ 1,1.5 ËÃ×Í 2 ºÔµ ÃÙ»·Õè 8-3 áÊ´§ÃٻẺ¢Í§¢ ÍÁÙÅ͹ءÃÁẺÍЫԧâ¤Ã¹ÑÊ àÁ×Íè äÁ Á¢Õ Í ÁÙÅ·Õ¨è ÐÊ § ¢Ò DATA ¨ÐÁÕʶҹÐÅͨԡ 1 «Ö§è ¨ÐàÃÕ¡ʶҹйÕÇé Ò Ê¶Ò¹ÐËÂØ´ÃÍ (waiting stage) ¡ÒÃàÃÔÁè µ ¹Ê §¢ ÍÁÙŨРàÃÔèÁ¨Ò¡¡ÒÃãË ¢Ò DATA ÁÕÅͨԡ 0 ´ Ǫ ǧÃÐÂÐàÇÅÒ 1 ºÔµ àÃÕ¡ºÔµ¹ÕéÇ Ò ºÔµàÃÔÁè µ ¹ ¨Ò¡¹Ñ鹺Ե ¢ ÍÁÙÅ¨Ð¶Ù¡Ê §ÍÍ¡ä» â´ÂàÃÔÁè ¨Ò¡ºÔµ·ÕÁè ¹Õ ÂÑ ÊíҤѵèÒí ÊØ´ (LSB) ¡ ͹ «Ö§è ¢ ÍÁÙÅã¹äºµ ·¨Õè ÐÊ §ÍÒ¨¨Ð ÁÕ¨Òí ¹Ç¹ºÔµ 5,6,7 ËÃ×Í 8 ºÔµ¡çä´ ¨Ò¡¹Ñ¹é µÒÁ´ Ç ºÔµ¾ÒÃÔµÕé «Ö§è 㪠à¾×Íè µÃǨÊͺ¤ÇÒÁ¼Ô´¾ÅÒ´·Õàè ¡Ô´ ¢Ö¹é ¨Ò¡¡ÒÃÊ §¢ ÍÁÙÅ ºÔµÊØ´· Ò·ÕÊè § ¤×Í ºÔµ» ´· Ò «Ö§è ¨ÐãË ¢Ò´Òµ ÒÁÕʶҹÐÅͨԡ 1 ÍÕ¡¤ÃÑ§é ´ Ç ÃÐÂÐàÇÅÒÍ ҧ¹ Í 1 ºÔµ,1.5 ºÔµ ËÃ×Í 2 ºÔµ à¾×Íè à» ¹¡ÒÃáÊ´§Ç ÒÊÔ¹é ÊØ´¢ ÍÁÙÅáÅ Ç Ê¶Ò¹Ð ºÔµàÃÔÁè µ ¹ ËÂØ´ÃÍ
LSB ¢ ÍÁÙÅ ºÔµ 0
¢ ÍÁÙÅ ºÔµ 1
¢ ÍÁÙÅ ºÔµ 2
¢ ÍÁÙÅ ºÔµ 3
¢ ÍÁÙÅ ºÔµ 4
¢ ÍÁÙÅ ºÔµ 5
¢ ÍÁÙÅ ºÔµ 6
MSB ¢ ÍÁÙÅ ºÔµ 7
ÃÙ»·Õè 8-3 ÃٻẺ¢Í§¢ ÍÁÙÅ͹ءÃÁẺÍЫԧâ¤Ã¹ÑÊ
ºÔµ¾ÒÃÔµéÕ
ºÔµËÂØ´
ʶҹРËÂØ´ÃÍ
110 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
ÍØ»¡Ã³ ¾ÔàÈÉ·Õèä´ ÃѺ¡ÒÃÍ͡ẺÁÒÊíÒËÃѺ¡ÒÃÃѺáÅÐÊ §¢ ÍÁÙÅẺÍЫԧâ¤Ã¹ÑÊàÃÕÂ¡Ç Ò Universal Asynchronous Receiver/Transmitter ËÃ×Í UART ÍѵÃÒ¤ÇÒÁàÃçÇ㹡ÒÃÃѺáÅÐÊ §¢ ÍÁÙÅ ¢Í§¡ÒÃÃÑºÊ §¢ ÍÁÙÅẺÍЫԧâ¤Ã¹Ñʤ×Í ¤ Һʹàõ «Ö§è ¡ç¤Í× ¤ Ò¨íҹǹºÔµµ ÍÇÔ¹Ò·Õ·ãÕè ª 㹡ÒÃÃѺáÅÐ Ê §¢ ÍÁÙÅ ºÍ´àõÁҵðҹ·Õãè ª ÊÒí ËÃѺ¾Íà µÍ¹Ø¡ÃÁ RS-232 ä´ á¡ 110, 150, 300, 600, 1200, 2400, 4800, 9600 áÅÐ 19200 ºÔµµ ÍÇÔ¹Ò·Õ áÅÐÁÕ¤Ò à¾ÔÁè ÁÒ¡¢Ö¹é µÒÁà·¤â¹âÅÂբͧ¤ÍÁ¾ÔÇàµÍà «Ö§è ¡ÒÃÃѺ Ê §áººÍ¹Ø¡ÃÁâ´ÂäÁ ¼Ò ¹âÁà´çÁÍÒ¨¨ÐÊÒÁÒö¡íÒ˹´¤ ҺʹàÃµä´ Ê§Ù ¶Ö§ 115200 ºÔµµ ÍÇÔ¹Ò·Õ à¹×Íè § ¨Ò¡ºÍ´àõ¤×ͨíҹǹºÔµ¢Í§¢ ÍÁÙÅ·ÕÊè ÒÁÒö¶ ÒÂ·Í´ä´ ÀÒÂã¹ 1 ÇÔ¹Ò·Õ ¡ÒõÃǨÊͺ¾ÒÃÔµÊÕé ÒÁÒö¡íÒ˹´ãË à» ¹áºº¤Õè (odd), Ẻ¤Ù (even) ËÃ×ÍäÁ Á¡Õ ÒõÃǨÊͺ ¾ÒÃÔµÕé¡çä´ ¡ÒõÃǨÊͺ¾ÒÃÔµàÕé » ¹¡ÒõÃǨÊͺ¨íҹǹÃÇÁ¢Í§ºÔµ·Õàè » ¹Åͨԡ 1 ÀÒÂã¹¢ ÍÁÙÅ ·ÕÊè § ä» 1 亵 ÇÒ ÁÕ¨Òí ¹Ç¹ÃÇÁà» ¹àÅ¢¤ÙË Ã×ÍàÅ¢¤Õâè ´Âµ ͧÃÇÁºÔµ¾ÒÃÔµàÕé ¢ Òä»´ Ç ¡µÑÇÍ ҧ ¢ ÍÁÙÅ ·Õ¨è зíÒ¡ÒÃÊ §ÁÕ¢¹Ò´ 8 ºÔµáÅÐÁÕ¤Ò à· Ò¡Ñº 99 °Ò¹ÊԺˡ ËÃ×Í 10011001 °Ò¹Êͧ ¨ÐàËç¹Ç Ò¢ ÍÁÙÅ ã¹äºµ ¹ÁÕé ¨Õ Òí ¹Ç¹Åͨԡ 1 ¨íҹǹ 4 µÑÇ«Ö§è à» ¹àÅ¢¤Ù ´Ñ§¹Ñ¹é ¶ Ò¡íÒ˹´¤ Ò¾ÒÃÔµàÕé » ¹¤Ù ¤ Ò㹺Ե¾ÒÃÔµÕé ¨Ðµ ͧÁÕÅͨԡ໠¹ 0 áµ ¶Ò ¾ÒÃÔµàÕé » ¹¤Õè ¤ Ò·Õºè µÔ ¾ÒÃÔµ¨Õé е ͧ໠¹ 1 à¾×Íè ãË ¢Í ÁÙÅ 1 亵 ÃÇÁ·Ñ§é ºÔµ ¾ÒÃÔµÕéÁÕ¨íҹǹºÔµ·Õèà» ¹Åͨԡ 1 ÃÇÁ¡Ñ¹à» ¹àÅ¢¤Õè ã¹µÒÃÒ§·Õè 4.1 áÊ´§µÑÇÍ ҧ¢Í§ºÔµ¾ÒÃÔµÕéã¹ ¡ÒÃÃÑºÊ §¢ ÍÁÙÅ͹ءÃÁ ºÔµ¾ÒÃÔµÕé¶Ù¡Êà ҧ¢Ö鹨ҡÀÒ¤Ê §¢ ÍÁÙŢͧ UART â´ÂÀÒ¤ÃѺ¨Ðµ ͧ¡íÒ˹´¤Ø³ÊÁºÑµÔ¡Òà µÃǨÊͺ¾ÒÃÔµãÕé Ë µÃ§¡Ñ¹Ç Ò ¨ÐµÃǨÊͺ¾ÒÃÔµ¤Õé ËÕè Ã×ͤ٠¨Ò¡¹Ñ¹é ÀÒ¤ÃѺ¢Í§ UART ¨ÐµÃǨÊͺ¤ Ò ¾ÒÃÔµ·Õé àÕè ¡Ô´¢Ö¹é Ç Òà» ¹¤ÙË Ã×Íà» ¹¤Õè â´Â¡ÒùѺ¨íҹǹÅͨԡ 1 ·Ñ§é ËÁ´ÃÇÁ·Ñ§é ºÔµ¾ÒÃÔµ´Õé Ç Â ¶ Ò¡íÒ˹´ ¾ÒÃÔµäÕé Ç à» ¹¤Ùá µ ÍÒ ¹¤ ÒµÑÇàŢ㹡ÒùѺÍÍ¡ÁÒä´ µÇÑ àŢ໠¹¤Õè ·Ò§ÀÒ¤ÃѺ¨Ðᨠ§¢ ͼԴ¾ÅÒ´ãË ¼ãÙ ª ·ÃÒº ¹Ñºà» ¹¡ÒõÃǨÊͺ¤ÇÒÁ¼Ô´¾ÅÒ´¢Í§¡Òö Ò·ʹ¢ ÍÁÙÅ·Õ§è Ò Â·ÕÊè ´Ø áµ ¨Ðàª×Íè ¶×Íä´ àÁ×Íè ÁÕºµÔ ¢ ÍÁÙÅ·Õ·è Òí ¡ÒÃÊ §¼Ô´¾ÅÒ´à¾Õ§ºÔµà´ÕÂÇà· Ò¹Ñ¹é ¶ Ò¢ ÍÁÙÅ·ÕÊè § ÁÕºµÔ ·Õ¼è ´Ô ¾ÅÒ´ÁÒ¡¡Ç Ò 1 ºÔµ ¡ÒõÃǨ Êͺ´ ÇÂÇÔ¸¹Õ ¨Õé ÐäÁ ä´ ¼Å ÊíÒËÃѺ¡ÒÃµÑ§é ¾ÒÃÔµºÕé µÔ à» ¹ NONE ¹Ñ¹é ·Ñ§é ÀÒ¤ÃѺáÅÐÀÒ¤Ê § ¨ÐäÁ Á¡Õ Òà µÃǨÊͺ¾ÒÃÔµÕé µÑÇÍ ҧ·Õè 1 ¢ ÍÁÙÅ͹ءÃÁ¶Ù¡Ê §ã¹ÅѡɳР8 ºÔµ äÁ Á¡Õ ÒõÃǨÊͺ¾ÒÃÔµÕé ÁÕºµÔ àÃÔÁè µ ¹ 1 ºÔµ áÅкԵ» ´· Ò 1 ºÔµ ¤ÇÒÁÂÒǢͧ¢ ÍÁÙÅ·ÕÃè ºÑ Ê §¹Õàé · ҡѺ 10 ºÔµ ¶ Ò㪠ºÍ´àõ 9600 ºÔµµ ÍÇÔ¹Ò·Õ ¡ç¨Ð ÊÒÁÒöÃÑºÊ §¢ ÍÁÙÅä´ ´Ç ¤ÇÒÁàÃçÇ 960 亵 µÍ ÇÔ¹Ò·Õ áÅж ÒÁÕ¡ÒÃ㪠ºµÔ ¾ÒÃÔµ¤Õé ÇÒÁàÃçÇ㹡ÒÃÃÑºÊ § ¢ ÍÁÙŨÐàËÅ×Íà» ¹ 872 亵 µÍ ÇÔ¹Ò·Õ
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 111
µÑÇÍ ҧ·Õè 2 ¢ ÍÁÙÅ͹ءÃÁ¶Ù¡Ê §ã¹ÅѡɳР8 ºÔµ äÁ ÁÕ¡ÒõÃǨÊͺ¾ÒÃÔµÕé ÁÕºÔµàÃÔèÁµ ¹ 1 ºÔµáÅкԵ» ´· Ò 1 ºÔµ ¤ÇÒÁÂÒǢͧ¢ ÍÁÙÅ·ÕÃè ºÑ Ê §¹Õàé · ҡѺ 10 ºÔµ ºÍ´àõ㹡ÒÃÃÑºÊ §à· ҡѺ 1,200 ºÔµµ ÍÇÔ¹Ò·Õ ¢ ÍÁÙÅ 1 ºÔµ¨ÐÁÕ¤ÒºàÇÅÒ෠ҡѺ 1/1200 = 833 äÁâ¤ÃÇÔ¹Ò·Õ ¤ Ò¤ÒºàÇÅÒ¹ÕéÊÒÁÒö¹íÒä»ãª ¡ÑºäÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC16F887 à¾×èÍÍ Ò¹¤ Ò ¨Ò¡ÃÕâÁµ¤Í¹â·ÃÅ ER-4 ·ÕÁè ÍÕ µÑ ÃÒàÃçÇ㹡Òö Ò·ʹ¢ ÍÁÙÅËÃ×ÍÍѵÃҺʹ෠ҡѺ 1,200 ºÔµµ ÍÇÔ¹Ò·Õ
8.6 â»Ãá¡ÃÁ ÍºÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ à¾×Íè Í Ò¹¤ Ò¨Ò¡ÃÕâÁµ¤Í¹â·ÃŠ㹡ÒÃÃѺ¢ ÍÁÙŨҡÃÕâÁµ¤Í¹â·ÃÅ¹Ñ¹é ¨Ðµ ͧ㪠¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ࢠÒÁÒª Ç à¾×Íè ãË ÊÒÁÒö ÃѺ¢ ÍÁÙÅ͹ءÃÁ 8 ºÔµ·ÕÊè § ÁÒä´ ·¹Ñ ã¹â»Ãá¡ÃÁ·Õè 8-1 áÊ´§ÃÒÂÅÐàÍÕ´¢Í§â»Ãá¡ÃÁ ÍºÃÔ¡Òà ÍÔ¹àµÍà ÃáÑ µ ·¢Õè Ò¾Íà µ RB0/INT ·Õµè Í §µ ͡Ѻ ZX-IRM ἧǧ¨ÃâÁ´ÙÅÃѺáʧÍÔ¹¿ÃÒàô 38kHz //================== Interrupt service routine INT =================// void interrupt() { unsigned char i; // Keep counter if(INTCON.INTF) // Check interrupt flag RB0 (Falling edge) { Delay_us(416); // Delay 1/2 bit timing(baudrate 1200 bps) for(i=0;i<8;i++) // Loop 8 time for keep data from ER-4 Remote { Delay_us(833); // Delay of 1 bit timing(baudrate 1200 bps) ir_cmd = ir_cmd>>1; // Shift bit 1 time if((PORTB & 0x01)==1) // Get logic @ RB0 = '1'? ir_cmd=ir_cmd|0x80; // Inset bit data is '1' } Delay_us(833); // Delay of 1 bit timing(baudrate 1200 bps) INTCON.INTF =0; // Clear interrupt flag } }
¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ àÃÔèÁµ ¹´ ÇÂâ»Ãá¡ÃÁ ÍºÃÔ¡ÒÃÍÔ¹àµÍà ÃÑ»µ â´ÂàÁ×èÍà¡Ô´ÍÔ¹àµÍà ÃÑ»µ ¢Öé¹ «Öè§ËÁÒ¶֧ ÃÕâÁµ¶Ù¡¡´ â»Ãá¡ÃÁ¨Ð˹ ǧàÇÅÒä»à» ¹ÃÐÂÐ෠ҡѺ¤ÃÖ§è Ë¹Ö§è ¢Í§¤ÒºàÇÅÒ 1 ºÔµ (1 ºÔµ ÊíÒËÃѺºÍ´àõ 1200 ෠ҡѺ 833 äÁâ¤ÃÇÔ¹Ò·Õ) áÅÐ˹ ǧàÇÅÒµ Íä»ÍÕ¡ 1 ºÔµ à¾×Íè ãË àŪ ǧºÔµàÃÔÁè µ ¹ ¨Ò¡¹Ñ¹é ·íÒ¡ÒõÃǨÊͺºÔµ¢ ÍÁÙÅ ·ÕÍè Ò ¹ä´ ÇÒ à» ¹ 0 ËÃ×Í 1 ¹íÒ¢ ÍÁÙÅ·ÕÍè Ò ¹ä´ º¹Ñ ·Ö¡äÇ ã¹µÑÇá»Ã ir_cmd áÅ ÇàÅ×Íè ¹ºÔµÍ Ò¹¤ Ò¢ ÍÁÙŨҡÃÕâÁµ ¤Í¹â·ÃŨ¹¤Ãº·Ñ§é 8 ºÔµ ˹ ǧàÇÅÒÍÕ¡¤Ãѧé ÊíÒËÃѺºÔµËÂØ´ áÅÐÍÍ¡¨Ò¡â»Ãá¡ÃÁ ÍºÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ
â»Ãá¡ÃÁ·Õè 8-1 â»Ãá¡ÃÁ ÍºÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ·¢Õè Ò¾Íà µ RB0/INT ÊíÒËÃѺÃѺ¢ ÍÁÙÅ͹ءÃÁ¨Ò¡ ÃÕâÁµ¤Í¹â·ÃÅ ER-4 ¢Í§Ëع ¹µ Robo-PICA
112 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
¡Ô¨¡ÃÃÁ·Õè 13
·´Êͺ¡ÒÃÃѺ¢ ÍÁÙŨҡÃÕâÁµ¤Í¹â·ÃÅ A13.1 à¢Õ¹â»Ãá¡ÃÁ·Õè A13-1 ´ Ç mikroC IDE ·íÒ¡ÒäÍÁä¾Å ãË ä´ ä¿Å ¼ÅÅѾ¸ .hex A13.2 àª×Íè Áµ ͺÍà ´â»Ãá¡ÃÁࢠҡѺËع ¹µ Robo-PICA áÅоÍà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍà A13.3 ´Òǹ âËÅ´â»Ãá¡ÃÁä»ÂѧËع ¹µ Robo-PICA A13.4 µÃǨÊͺ¡ÒÃàª×Íè Áµ ÍÃÐËÇ Ò§ºÍà ´¤Çº¤ØÁ¢Í§Ëع ¹µ Robo-PICA ¡Ñº ZX-IRM ἧǧ¨ÃâÁ´ÙÅÃѺáʧ ÍÔ¹¿ÃÒàô 38kHz µ ͧṠã¨Ç Ò ä´ µÍ ZX-IRM à¢ Ò·Õ¨è ´Ø µ Í RB0/INT à» ¹·Õàè ÃÕºà Í A13.5 ºÃèØẵàµÍÃÕè AA 2 ¡ ͹ŧ㹡кж Ò¹¢Í§ÃÕâÁµ¤Í¹â·ÃÅ ER-4 A13.6 Ãѹâ»Ãá¡ÃÁ·ÕËè ¹Ø Â¹µ Robo-PICA ¨Ò¡¹Ñ¹é ·´Êͺ¡´ÊÇÔµª º¹ÃÕâÁµ¤Í¹â·ÃÅà¾×Íè Ê §¢ ÍÁÙÅÁÒÂѧ ZX-IRM ·Õµè Í ¡ÑºËع ¹µ Robo-PICA â´Âµ ͧËѹ·ÔÈ·Ò§¢Í§ LED ·Õãè ª ʧ áʧµÃ§¡ÑºµÑÇÃѺáʧÍÔ¹¿ÃÒàô¢Í§ ZX-IRM Êѧࡵ¼Å¡Ò÷íÒ§Ò¹ àÁ×Íè ¡´ÊÇÔµª A, B, C áÅÐ D ¢Í§ÃÕâÁµ¤Í¹â·ÃÅ ER-4 à¾×Íè Ê §¢ ÍÁÙÅÁÒÂѧËع ¹µ Robo-PICA àÁ×Íè ÃѺ ¢ ÍÁÙÅä´ ¨ÐáÊ´§µÑÇÍÑ¡Éà A, B, C áÅÐ C µÒÁ·Õ¡è ´Ê §ÁÒº¹âÁ´ÙÅ LCD ¢Í§Ëع ¹µ Robo-PICA ¾Ã ÍÁ¡Ñº¢Ñº àÊÕ§´ ǤÇÒÁ¶Õ·è áÕè µ¡µ Ò§¡Ñ¹ 4 ¤ ÒÍÍ¡·Ò§ÅíÒ⾧໠Ââ«´ Ç A13.7 ·´Åͧà»ÅÕÂè ¹ÃÐÂÐ㹡Òá´ÊÇÔµª ãË ä¡Å¢Ö¹é à¾×Íè µÃǨÊÍºÇ Ò ÃÐÂзҧä¡Åà· Òã´·ÕÃè âÕ Áµ¤Í¹â·ÃŨРäÁ ÊÒÁÒÃ¶Ê §¢ ÍÁÙÅä´ ¶¡Ù µ ͧ char *text1 = "ER-4 Remote"; unsigned char ir_cmd=0;
// Define message // Keep Command button from ER-4 Remote
//================== Interrupt service routine INT =================// void interrupt() { unsigned char i; // Keep counter if(INTCON.INTF) // Check interrupt flag RB0 (Falling edge) { Delay_us(416); // Delay 1/2 bit timing(baudrate 1200 bps) for(i=0;i<8;i++) // Loop 8 time for keep data from ER-4 Remote { Delay_us(833); // Delay of 1 bit timing(baudrate 1200 bps) ir_cmd = ir_cmd>>1; // Shift bit 1 time if((PORTB & 0x01)==1) // Get logic @ RB0 = '1'? ir_cmd=ir_cmd|0x80; // Inset bit data is '1' }
â»Ãá¡ÃÁ·Õè A13-1 ä¿Å IRtest.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Êͺ¡ÒÃÃѺ¢ ÍÁÙÅ͹ءÃÁ¨Ò¡ÃÕâÁµ ¤Í¹â·ÃÅ ER-4 ¢Í§Ëع ¹µ Robo-PICA (ÁÕµÍ )
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 113 Delay_us(833); INTCON.INTF =0;
// Delay of 1 bit timing(baudrate 1200 bps) // Clear interrupt flag
} } //================== Function for get character from Remote ========// unsigned char get_remote() { unsigned char _key=ir_cmd; // Get character to buffer ir_cmd=0; // Clear old data return(_key); // Return character from Remote } //================== Main Program ==================================// void main() { unsigned char key; // Save Remote Key Press ANSELH.F4=0; // RB0 ==> Digital IO OPTION_REG.INTEDG = 0; // INT falling edge INTCON.INTE =1; // Enable INT/PB0 INTCON.GIE =1; // Enable Global interrupt Lcd_Init(&PORTD); // Initialize LCD connected to PORTD Lcd_Cmd(Lcd_CLEAR); // Clear display Lcd_Cmd(Lcd_CURSOR_OFF); // Turn cursor off Lcd_Out(1, 1, text1); // Print text to LCD, 1st row, 1st column Sound_Init(&PORTC,0); while(1) // Infinite loop { key = get_remote(); // Get Remote if(key=='a' || key=='A') // Button A press? { Lcd_Out(2, 1, "Button A Press "); // Display message Sound_Play(200,500); } else if(key=='b' || key=='B') // Button B press? { Lcd_Out(2, 1, "Button B Press "); // Display message Sound_Play(210,500); } else if(key=='c' || key=='C') // Button C press? { Lcd_Out(2, 1, "Button C Press "); // Display message Sound_Play(220,500); } else if(key=='d' || key=='D') // Button D press? { Lcd_Out(2, 1, "Button D Press "); // Display message Sound_Play(230,500); } } }
â»Ãá¡ÃÁ·Õè A13-1 ä¿Å IRtest.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ·´Êͺ¡ÒÃÃѺ¢ ÍÁÙÅ͹ءÃÁ¨Ò¡ÃÕâÁµ¤Í¹â·ÃÅ ER-4 ¢Í§Ëع ¹µ Robo-PICA (¨º)
114 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
PIC
¡Ô¨¡ÃÃÁ·Õè 14
Ëع ¹µ Robo-PICA ¤Çº¤ØÁ´ ÇÂÃÕâÁµ¤Í¹â·ÃÅ A14.1 à¢Õ¹â»Ãá¡ÃÁ·Õè A14-1 ´ Ç mikroC IDE ·íÒ¡ÒäÍÁä¾Å ãË ä´ ä¿Å ¼ÅÅѾ¸ .hex A14.2 àª×Íè Áµ ͺÍà ´â»Ãá¡ÃÁࢠҡѺËع ¹µ Robo-PICA áÅоÍà µ USB ¢Í§¤ÍÁ¾ÔÇàµÍà A14.3 ´Òǹ âËÅ´â»Ãá¡ÃÁä»ÂѧËع ¹µ Robo-PICA A14.4 µÃǨÊͺ¡ÒÃàª×Íè Áµ ÍÃÐËÇ Ò§ºÍà ´¤Çº¤ØÁ¢Í§Ëع ¹µ Robo-PICA ¡Ñº ZX-IRM ἧǧ¨ÃâÁ´ÙÅÃѺáʧ ÍÔ¹¿ÃÒàô 38kHz µ ͧṠã¨Ç Ò ä´ µÍ ZX-IRM à¢ Ò·Õ¨è ´Ø µ Í RB0/INT à» ¹·Õàè ÃÕºà Í A14.5 ºÃèØẵàµÍÃÕè AA 2 ¡ ͹ŧ㹡кж Ò¹¢Í§ÃÕâÁµ¤Í¹â·ÃÅ ER-4 A13.6 Ãѹâ»Ãá¡ÃÁ·ÕËè ¹Ø Â¹µ Robo-PICA ¨Ò¡¹Ñ¹é ·´Êͺ¡´ÊÇÔµª º¹ÃÕâÁµ¤Í¹â·ÃÅà¾×Íè Ê §¢ ÍÁÙÅÁÒÂѧ ZX-IRM ·Õµè Í ¡ÑºËع ¹µ Robo-PICA â´Âµ ͧËѹ·ÔÈ·Ò§¢Í§ LED ·Õãè ª ʧ áʧµÃ§¡ÑºµÑÇÃѺáʧÍÔ¹¿ÃÒàô¢Í§ ZX-IRM Êѧࡵ¼Å¡ÒÃà¤Å×Íè ¹·Õ¢è ͧËع ¹µ àÁ×Íè ¡´ÊÇÔµª A Ëع ¹µ Robo-PICA à¤Å×Íè ¹·Õ¶è ÍÂËÅѧ àÁ×Íè ¡´ÊÇÔµª B Ëع ¹µ Robo-PICA ËÁعµÑÇ·Ò§¢ÇÒ àÁ×Íè ¡´ÊÇÔµª C Ëع ¹µ Robo-PICA ËÁعµÑÇ·Ò§« Ò àÁ×Íè ¡´ÊÇÔµª D Ëع ¹µ Robo-PICA à¤Å×Íè ¹·Õäè »¢ ҧ˹ Ò
àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍà PIC l 115 #include <motor.h> char *text = "ER-4 Remote"; unsigned char ir_cmd=0;
// Define message // Keep Command button from ER-4 Remote
//================== Interrupt service routine INT =================// void interrupt() { unsigned char i; // Keep counter if(INTCON.INTF) // Check interrupt flag RB0 (Falling edge) { Delay_us(416); // Delay 1/2 bit timing(baudrate 1200 bps) for(i=0;i<8;i++) // Loop 8 time for keep data from ER-4 Remote { Delay_us(833); // Delay of 1 bit timing(baudrate 1200 bps) ir_cmd = ir_cmd>>1; // Shitt bit 1 time if((PORTB & 0x01)==1) // Get logic @ RB0 = '1'? ir_cmd = ir_cmd|0x80; // Inset bit data is '1' } Delay_us(833); // Delay of 1 bit timing(baudrate 1200 bps) INTCON.INTF =0; // Clear interrupt flag } } //================== Function for get character from Remote ========// unsigned char get_remote() { unsigned char _key=ir_cmd; // Get character to buffer ir_cmd=0; // Clear old data return(_key); // Return character from Remote } //================== Main Program ==================================// void main() { ANSELH.F4=0; // RB0 ==> Digital IO OPTION_REG.INTEDG = 0; // INT falling edge INTCON.INTE =1; // Enable INT/PB0 INTCON.GIE =1; // Enable Global interrupt Lcd_Init(&PORTD); // Initialize LCD connected to PORTD Lcd_Cmd(Lcd_CLEAR); // Clear display Lcd_Cmd(Lcd_CURSOR_OFF); // Turn cursor off Lcd_Out(1, 1, text); // Print text to LCD, 2nd row, 1st column Sound_Init(&PORTC,0); Sound_Play(250,400); while(1) // Infinite loop { char key=get_remote(); // Get Remote if((key=='a')||(key=='A')) // Button A press? { Backward(255);Delay_ms(50); } else if((key=='b')||(key=='B')) // Button B press? { S_Right(255);Delay_ms(50); } else if((key=='c')||(key=='C')) // Button C press?
â»Ãá¡ÃÁ·Õè A14-1 ä¿Å RemoteBot.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ¡íÒ˹´ãË Ë¹Ø Â¹µ Robo-PICA à¤Å×Íè ¹·Õè ÀÒÂãµ ¡ÒäǺ¤ØÁ¨Ò¡ÃÕâÁµ¤Í¹â·ÃÅÍÔ¹¿ÃÒàô ER-4 (ÁÕµÍ )
116 l àÃÕ¹ÃÙá ÅÐÊà ҧËع ¹µ 굄 â¹Áѵ¡Ô ºÑ äÁâ¤Ã¤Í¹â·ÃÅàÅÍÃ
{ S_Left(255);Delay_ms(50); } else if((key=='d')||(key=='D')) { Forward(255);Delay_ms(50);} else Motor_Stop();
PIC
// Button D press?
} }
¡Ò÷íÒ§Ò¹¢Í§â»Ãá¡ÃÁ ÃÕâÁµ¤Í¹â·ÃÅ ER-4 ÁÕÊÇÔµª 4 µÑÇÇÒ§µíÒá˹ §äÇ àËÁÒÐÊÁÊíÒËÃѺ¡ÒâѺà¤Å×Íè ¹Ëع ¹µ ãË à¤Å×Íè ¹·Õè 仢 ҧ˹ Ò ¶ÍÂËÅѧ àÅÕÂé Ç« Ò áÅÐàÅÕÂé Ç¢ÇÒäÇ áÅ Ç ´Ñ§¹Ñ¹é àÁ×Íè äÁâ¤Ã¤Í¹â·ÃÅàÅÍà ÍÒ ¹¤ Ò¨Ò¡ÃÕâÁµ¤Í¹â·ÃÅ ä´ ¤Ò ¢Í§ÊÇÔµª µÃ§µÒÁà§×Íè ¹ä¢·Õ¡è Òí ˹´ ¡ç¨Ð·íÒ¡ÒäǺ¤ØÁãË Ë¹Ø Â¹µ Robo-PICA à¤Å×Íè ¹·Õµè ÒÁÃٻẺ¢Í§ ÊÇÔµª º¹ÃÕâÁµ¤Í¹â·ÃÅ ã¹â»Ãá¡ÃÁÁÕ¡ÒÃàÃÕ¡㪠â»Ãá¡ÃÁ ÍºÃÔ¡ÒÃÍÔ¹àµÍÃ Ã»Ñ µ ¨Ò¡¢Ò¾Íà µ RB0/INT à¾×Íè ÃѺ¢ ÍÁÙÅ͹ءÃÁ 8 ºÔµ¨Ò¡ÃÕâÁµ¤Í¹â·ÃÅ ¨Ò¡¹Ñ¹é ¹íÒÁÒµÃǨÊÍºÇ Ò à» ¹¢ ÍÁÙÅã´¨Ò¡¿ §¡ ª¹Ñè get_remote() à¾×Íè ¹íÒä» à»ÃÕºà·ÕÂºÇ Ò à» ¹µÑÇÍÑ¡Éà A, B, C ËÃ×Í D à¾×Íè ¹íÒä»àÃÕ¡¿ §¡ ª¹Ñè ¡ÒâѺà¤Å×Íè ¹Ëع ¹µ ã¹ä¿Å äźÃÒÃÕ motor.h
â»Ãá¡ÃÁ·Õè A14-1 ä¿Å RemoteBot.c â»Ãá¡ÃÁÀÒÉÒ C ÊíÒËÃѺ¡íÒ˹´ãË Ë¹Ø Â¹µ Robo-PICA à¤Å×Íè ¹·Õè ÀÒÂãµ ¡ÒäǺ¤ØÁ¨Ò¡ÃÕâÁµ¤Í¹â·ÃÅÍÔ¹¿ÃÒàô ER-4 (¨º)
INNOVATIVE EXPERIMENT