Habrã¯ããã°ã©ããŒã«çŠç¹ãåœãŠãããŒã¿ã«ã§ãããšããäºå®ã«ãããããããæè¿ããã€ã¯ãã³ã³ãããŒã©ãŒã®ããã°ã©ãã³ã°ãšãããã«åºã¥ããããã€ã¹ã®äœæã«é¢ããå€ãã®èšäºãããããšã«æ°ä»ããŸããã ç§ã¯èªåã®éçºã®1ã€ãå ±æããããšã«ããŸããã éå»ã«ã¯ãMKã§å€ãã®ããšãæžããäŒç€Ÿã®1ã€ã§ãœãããŠã§ã¢ããã³åè·¯ã®éçºè ãšããŠåããŠããŸããããã以åã¯ãZ80ããã³i8080ã®AFMããã°ã©ã ã§åããŠããŸããã ä»ãç§ã®æ人æã«ãç§ã¯äž»ã«èªåã®ã€ã³ã¿ãŒããããããžã§ã¯ãã®ããã«PHP / MySQLã§æžããŸãããããŠãMKã¯éåžžã«é·ãéããã°ã©ãã³ã°ã«æ»ããŸããã§ããã æ¬æ Œçãªããã°ã©ããŒãšã¯èšããŸããããªããªãã ããšãã°ãOOPããã¹ã¿ãŒã§ããŸããã§ããããå¿ èŠã«å¿ããŠCã§å°ãæžããŸãã
å°ãåã«ãCarPCãããžã§ã¯ãçšã®USBããŒããŒããšãã¥ã¬ãŒã¿ãŒãäœæããã¿ã¹ã¯ããããŸããã 2000幎代ã®ãã€ã補è»ã«æèŒãããããã«ãŒBE2580ã©ãžãªã§äœ¿çšãããŠããã¯ãã§ãã ãšãã¥ã¬ãŒã¿ã¯ãã©ãžãªã®éåžžã®ãã¿ã³ã調ã¹ãŠãAndroidããŒã¹ã®CarPCãã¶ãŒããŒãã«æ¥ç¶ãããä»®æ³USBããŒããŒãã§ã¯ãªãã¯ãçæããå¿ èŠããããŸããã ã«ããã®äžã§ãããããæ¥ããã®ã
CarPCèªäœã«ã€ããŠç°¡åã«èª¬æããŸããæåã«ãåãå€ãå¯èœãªããã³ãããã«ã¿ãã¬ãããåããææ°ã®Androidã©ãžãªãè»ã«è²Œãä»ãããšããå·éãªã¢ã€ãã¢ãæãä»ããŸããã ããããèªåè»æ¥çã®ä»²éã¯ãã®ã¢ã€ãã¢ãæããšã©ãŸãããè»ã®ã€ã³ããªã¢ã®ã¯ã©ã·ãã¯ãªå€èŠ³ãšã¡ãŒã«ãŒãèæ¡ãããã¶ã€ã³ã«éåããªãããã«ä¿ããŸããã ãã®çµæãIconbit Toucan Nanoã¡ãã£ã¢ãã¬ãŒã€ãŒã®ãã¶ãŒããŒããã©ãžãªã«çµã¿èŸŒãŸããã«ã»ããããŒããã©ã€ãã®ä»£ããã«ã€ã³ã¹ããŒã«ããŸããã åæã«ã圌ã¯é²æ©ãã©ãã»ã©éãããææããŸãããç§ã¯èå³ã®ããã«ã«ã»ããããã§ãã¯ããããšã«ããŸããããèªå® ã§åäžã®ã«ã»ããã¯èŠã€ãããŸããã§ããã
Toucan Nanoã¯CarPCã§ã®äœ¿çšã«çæ³çãªåè£ã§ãããäŸ¡æ Œã¯çŽ100ãã«ïŒãã·ã¢ïŒã§ãTVåºåïŒã³ã³ããžããïŒãã³ã³ããŒãã³ãïŒå°çšã¯ããã¯ä¿¡å·ã§æžç®ïŒããããŸãããæ®å¿µãªããåºåã«å¿ èŠãªRGBã¯ãããŸããã©ãžãªèªäœã®ãã£ã¹ãã¬ã€äžã®ç»åã HDMIãUSBãã¹ãïŒ2ããŒãïŒããããŸãã PL2303ãããïŒUSB2COMã³ã³ããŒã¿ãŒãã€ãŸãRS232ïŒã®ãµããŒããã«ãŒãã«ã«ã³ã³ãã€ã«ãããããšãå€æããŸãããããã«ãããå€éšGPSåä¿¡æ©ãæ¥ç¶ã§ããããã«ãªããRalinkãããã§WiFiãã€ãã¹ã«ããµããŒãã§ããããã«ãªããŸããïŒDlink DWA-140ã䜿çšããŸããïŒã ããŒãã¯ã©ãžãªã«åãä»ããããTVåºåããã®ä¿¡å·ã¯ãTDA8362ã«åºã¥ããèªå·±çµã¿ç«ãŠTV-> RGBã³ã³ããŒã¿ãŒã䜿çšããŠãããããŠãããã®ã¢ãã¿ãŒã®RGBå ¥åã«éãããŸããã ç¡ç·ã§ã¯ããããªä¿¡å·ã¹ã€ãããæäŸããããããç¡ç·ã®ãã¹ãŠã®ãã€ãã£ãæ©èœãä¿åãããŠããŸãã 次ã®ããã«ãªããŸãã

èµ€è²ã¯ã2éïŒããŒãã®äžïŒã«é 眮ãããŠãããã®ã瀺ããŠããŸãã Toucan Nanoã«ã¯ããªã¢ã³ã³ãšãªã¢ã³ã³ä»ãã®tleãä»å±ããŠããŸãã èå³æ·±ãFly Mouseãã¯ãããžãŒããªã¢ãŒãã³ã³ãããŒã«ã«å®è£ ãããŠããŸããããŠã¹ã¯ããªã¢ãŒãã³ã³ãããŒã«ã«çµã¿èŸŒãŸããå é床èšã«å¿çããããããªã¢ãŒãã³ã³ãããŒã«ãåŸããã ãã§ãããã€ã¹ã®ç»é¢äžã§ããŠã¹ãåããŸããããã¯ãã€ã³ã¿ã®ãããªãã®ã§ãã ããããè»ã®äžã§ããã䜿çšããã®ã¯äžå¿«ã§éŠ¬é¹¿ããŠããããã«æããŸãããããã¯ãŸã ã³ã³ãã¥ãŒã¿ã§ã¯ãªãã©ãžãªã§ãïŒ ãã®ãããUSBããŒãã«æ¥ç¶ããã©ãžãªãã¿ã³ã«åãåãããªããæšæºã®PCããŒããŒãã®ããã«åäœããã©ãžãªããŒããŒãããŒããŒããšãã¥ã¬ãŒã¿ãŒãçµã¿ç«ãŠãããšã決å®ãããŸããã å®éããã®ãœãªã¥ãŒã·ã§ã³ã¯æ®éçã§ãããã©ã®OSã§ã䜿çšã§ããŸããå€ãã®CarPCã·ã¹ãã ãIntelãã©ãããã©ãŒã äžã«æ§ç¯ãããŠããããšã¯åšç¥ã®äºå®ã§ãã
åœæãç§ã¯PICãã€ã¯ãã³ã³ãããŒã©ãŒã䜿ã£ãçµéšããªããè¥ãé ã¯Atmelã®ããã°ã©ã ã§ãããããã®çµéšã¯ä»æ¥ã§ã¯é¢ä¿ãããŸããã§ããã 10幎ãçµã¡ãŸããããããããç§ã®ææã®AT89c2051ã誰ãèŠããŠããªãã§ãããã ããã°ã©ã ã¯ãAFMã§å³å¯ã«äœæãããŸããã Cã§ã¯ãããã«é£ãããªããŸãã2051ã«ã¯2K ROMãããããŸããã åœæãPICãååšããŠããŸãããã䜿çšãæåŠããŸããã éçºããŒã«ã¯é«äŸ¡ãããããã2051ã®å ŽåãAtmel 89c2051ãšåãåœä»€ã»ãããæã€å€éšROMãåããi51ããŒã¹ã®ROMãšãã¥ã¬ãŒã¿ãŒãèªåã§éçºããŸããã ããŠãç§ã¯ãã®æ¹æ³ã§ã»ãŒæ°ãã«è¡ããªããã°ãªããªãããšã«æ°ä»ããŠãåæ°ãåºããæåŠã®ããã«åº§ã£ãã ãããã£ãŠãéçºã§ã¯æ®µéçã«ãã¹ãŠãæãã®ã§ããã®çµéšã¯èªè ã«ãšã£ãŠæçã ãšæããŸãã
æåã«ãUSBãµããŒããåãããã€ã¯ãã³ã³ãããŒã©ãŒã®ãããã¯ã§ã€ã³ã¿ãŒãããã®èª¿æ»ãéå§ããããã«æ å ã®äŒç€ŸPICã®ããã€ã¹ã«åºäŒããŸãããããã¯18F2550ã§ããã 宣èšãããæ©èœã¯éåžžã«åªããŠããŸãããUSB2.0ã1K RAMãå®å šã«æ§æå¯èœãªUSBããŒãã®ãµããŒããå®éã2550ã¯ã©ã® USBããã€ã¹ã§ãããŸããŸãã ã ããã«ããã¹ãŠã®æšæºPICæ©èœã ãã®ãããã¯DIP28ããã±ãŒãžã§è³Œå ¥ã§ããŸããããã¯å®è£ ãšã¯ãã é€å»ã«äŸ¿å©ã§ãäŸ¡æ Œã¯éåžžã«äœãã§ãã æã¯ããã€ã¯ãã³ã³ãããŒã©ãŒã¯ããã°ã©ããŒã§çž«ãããŠããŸããããä»ã§ã¯ããŒãããŒããŒãæ®åããŠããŸãã ããŒãããŒããŒã®æå³ã¯ãäžåºŠã ããã€ã¯ãã³ã³ãããŒã©ãŒã«æžã蟌ãã ãã§ååã§ãããã®åŸãä»ã®æ段ïŒãã®å Žåã¯USBããŒãçµç±ïŒã§ã¢ã¯ã»ã¹ããåè·¯ããåé€ããã«ããã€ã¹ã®ãã¡ãŒã ãŠã§ã¢ãæŽæ°ã§ããŸãã äºåã«çž«è£œããããã€ã¯ãã³ã³ãããŒã©ãŒãšããŒãããŒããŒçµç±ã§ãã¡ãŒã ãŠã§ã¢ãã¢ããããŒãããããã®æ¢è£œã®ãœãããŠã§ã¢ãåããæ¢è£œã®ã¯ãžã©ã販売ãããŠããŸãããç§ã¯ãã®ãããªã¯ãžã©ãæ¢ããããããŸããã§ããïŒéä¿¡ããããŸã§åŸ ã¡ãŸããïŒã ã ãããç§ã¯ã¡ããã©æå¯ãã®ã©ãžãªåºã«è¡ããããããªPIC18F2550ãè²·ããŸããã
次ã«ãããŒãããŒããŒãåããããã«ããã°ã©ããçµã¿ç«ãŠãå¿ èŠããããŸããã ã€ã³ã¿ãŒããããæ€çŽ¢ããŠãç§ã¯ãããèŠã€ããŸããïŒ
products.foxdelta.com/progparallel.htm
ã¹ããŒã ã¯ããã«æ·»ä»ãããŠããŸãã ãã¡ãããäžèŠãªè©³çŽ°ãåé€ããŠããããåçŽåããŸããã ã¯ãã ä»ããé¢åã§ããã å®éããã€ã¯ãã³ã³ãããŒã©ãŒã®ãã³ã¯LPTã«çŽæ¥æ¥ç¶ãããŠããŸãã ãœãããŠã§ã¢ã¯WinPic800ã䜿çšããŸããã ããŒãããŒããŒèªäœã«ã€ããŠã¯ãå¥ã®è©±ã§ãã ããããã¢ãã¬ã¹0x000ããããŒããããããã°ã©ã èªäœã¯ã¢ãã¬ã¹0x800ããéå§ããå¿ èŠããããŸããã¢ãã¬ã¹0x800ã¯ã³ã³ãã€ã©ã®èšå®ã«ç€ºãããŠããŸãã ããã€ãã®ç°ãªãããŒãããŒããŒãèŠã€ããŸãããããããç°ãªãã¢ãŒãïŒããšãã°ãHIDïŒã§ãã¡ãŒã ãŠã§ã¢ãæµã蟌ã¿ããããããç°ãªãIDEã察象ãšããŠããŸãã ç¹æ» ããŠããã³ã³ãã¥ãŒã¿ãŒã®USB PICãã©ã€ããŒã¯ãç°ãªãæ¹æ³ã§äœ¿çšããããšãã§ããŸãã PICã¯ããŸããŸãªUSBããã€ã¹ã«ãå€ãããŸããã ç§ã¯çµ¶ãã18F4550ã®ããŒãããŒããŒã«åºäŒããŸãããããã®æ§æã¯ç°ãªããç§ã®MKäžã®ããŒãããŒããŒã¯æ©èœããŸããã§ããã ãã®çµæãPIC-ovskyãã¢ããŒãMCHPUSBãããŒã¹ã«ããããŒãããŒããŒãšããŒãããŒããŒãã¡ãŒã ãŠã§ã¢ã«èœã¡çããŸããã ããŒãããŒããŒèªäœãåè·¯çšã«ãããã«å€æŽããå¿ èŠããããŸããïŒããŒãããŒããŒãã¿ã³ããã€ã¯ãã³ã³ãããŒã©ãŒã®å¥ã®ãã³ã«é 眮ããããïŒã äžè¬ã«ãå€ãã®çš®é¡ã®ç°ãªããã©ã¡ãŒã¿ãŒïŒããšãã°ãæ°Žæ¶æ¯ååã®ã¿ã€ããåšæ³¢æ°éååšããã®ãããªãã³ã»ã³ã¹ãªã©ïŒãå€æ°ããããšãå€æããŸããã ãããã®ãã©ã¡ãŒã¿ãŒã誀ã£ãŠç€ºãããŠããå Žåãããã€ã¹ã¯çž«è£œãããããã°ã©ã ã«åŸã£ãŠLEDãç¹æ» ãããŸãããUSBããã€ã¹ãšããŠåäœããããšãæåŠããããæ°ã«å ¥ãããšã©ãŒãUSBããã€ã¹ãèªèãããŸããããäžããŸãã åšæ³¢æ°ãééã£ãŠããŸãã æçµçã«å®è¡å¯èœãªæ§æãèŠã€ãããŸã§ããã®åé¡ã«æ°æ¥ããããŸããã ãã®çµæãç§ã®ããŒãããŒããŒã¯4Mhzã¯ãªãŒãçšã«èšèšãããŠããŸãã LEDã¯RA5ã«ã¯ãã ä»ããããããŒãããŒããŒã®ãã¡ãŒã ãŠã§ã¢ã¢ãŒããã¢ã¯ãã£ãã«ããããã®ãã¿ã³ã¯RA3ïŒããã³ãããã1kOhmãã©ã¹ïŒãå°é¢ãŸã§26ãã£ãŒãïŒLVPã¢ãŒãã§åäœããããïŒã§ãã MKããªã»ãããæŒãããŸãŸããŒãããŒããŒã¢ãŒãã«å ¥ãã«ã¯ãRA3ã®æå®ããããã¿ã³ãæŒããŸãã äœããã®çç±ã§ãLVPãããã®åãã©ãã·ã¥ã«å€±æããŸããïŒäœé»å§ãã¡ãŒã ãŠã§ã¢ã¢ãŒããç¡å¹ã«ããŸãïŒã çè«çã«ã¯ãããŒãããŒããŒãäžæžãããä¿è·ããå¿ èŠããããŸãã ä¹æ°ã¯ãæ倧åšæ³¢æ°48 Mhzã«èª¿æŽãããŸãã æ®å¿µãªããããã€ã¯ãã³ã³ãããŒã©ãŒãUSBã¢ãŒãã§äœ¿çšããå Žåãåšæ³¢æ°ãé«ãããããšã¯ã§ããŸããã USBã®åšæ³¢æ°ã¯åºå®ãããŠãããä¹æ°ã«ã¯å€æ§æ§ããããŸãããããã¯å¿ èŠãªãããšãå€æããŸããã
ãã®çµæãããŒãããŒããŒãä¿®æ£ããMicrochipããã³ã³ãã¥ãŒã¿ãŒã«ãã©ã€ããŒãã€ã³ã¹ããŒã«ããŸããã ããã°ã©ã ã®åºç€ãšããŠãç§ã¯ããã«Bradley A. Minchããç¡æã®äŸãåãäžããŸãããããã¯ãæåãfãããoãããoãããbãããaãããrããä»®æ³ããŒããŒãã«é çªã«çºè¡ããŸãã ãã®ããã°ã©ã ã®ãœãŒã¹ã³ãŒãã¯æ¬¡ã®å Žæã«ãããŸãã
code.google.com/p/picusb/source/browse/lab2_pickit2/lab2.asm?spec=svn69&r=69
ããã°ã©ã ãã³ã³ãã€ã«ãã以åã«å€æ°ã®PICæ§æã¬ãžã¹ã¿ãæ§æããŠãããããã«ãŒãã§ã³ã³ãã¥ãŒã¿ãŒã«æååfoobââarãåºåãå§ããããšã確èªããŸããã ãã£ãïŒ çŸå®ã«ã¯ãããã¯ãã¹ãŠ1æ¥ã§è¡ãããããã§ã¯ãããŸãããã詳现ã¯çç¥ããŸãã ãããŠãããã§ç§ã¯ãã®å¥è·¡ããã¹ãŠIconbitã§ããŸããããªããããããªããšããææã«äžç¬é®æãããŸãããIconbitã¯çç±ãäžããã«ç§ã®ä»äºã®ã»ãŒ1é±éãåã«ç¡èŠãããããããŸããã ããããããã€ã¹ãAndroidãã¶ãŒããŒãã«æ¥ç¶ãããšãããåäœããããšãããããŸãããããã«æ€çŽ¢ãŠã£ã³ããŠãéããããã§ããç¥ãããŠããfoobaræåãå®è¡ãããŸããã Androidã¯ãæ€çŽ¢ããã¯ã¹ãéããŠä»»æã®ããŒãæŒãããšã«åå¿ããŸãã
ããã«ãããã°ã©ã ãç§ã®ããŒãºã«åãããŠå€æŽããå¿ èŠããããŸãããç¹ã«ãã©ãžãªèªäœããããŒã¿ãèªã¿åãã³ãŒããäœæããå¿ èŠããããŸããã ãããã©ã®ããã«æ©èœããããç§ã¯ãã®æç¹ã§å šãç¥ããŸããã§ããã ã©ãžãªã®ãããªãã¯ã¹ã«æ¥ç¶ããŠãããããèªã¿åãå¿ èŠããããšæããŸããã éåžžããã®ãããªããã€ã¹ã¯ããŠããããX軞ã«æ²¿ã£ãŠãå®è¡ããããY軞ã«æ²¿ã£ãŠæ å ±ãèªã¿åããããšãã«ããããªãã¯ã¹ã®åçã¹ãã£ã³ã䜿çšããŸãã ã€ãŸãã8åã®ãã³ïŒ4 + 4ïŒã§16åã®ããŒãåŠçã§ããŸãã ãã®ãããªãããªãã¯ã¹ãåæã«èªã¿åãã«ã¯ã8ãã³ãå¿ èŠã§ãããå ¥åçšã«æ§æãããŸãã ããããç¡ç·ããŒãã調ã¹ãŠã¿ããšãæãããã®ãããã€ã人ãããŒããŒãå šäœãåŠçããããã«å¥åã®ããã»ããµãå²ãåœãŠããšã³ã³ãŒããŒãã³ãã«ã ããäžå€®ã®ããŒã»ã³ãã«çŽæ¥è¡ãããšã«æ°ä»ããŸããã ãã®çµæãã©ãžãªã®ããŒããŒãã®è¿ãã«åºåããããã©ãžãªã®ããŒãæŒããšãã«ã¹ã衚瀺ãããŸãã ãã«ã¹ç¹°ãè¿ãçã¯éåžžã«é«ãããšãå€æããæåã¯PL2303ã«åºã¥ããã³ã³ããŒã¿ãŒã«æãã«æ¥ç¶ããŸããã RS-232ããŒãã«é©çšããããŒãèšå®ã®å®éšãéå§ããŸããã ãã®çµæãããŒããæ倧480 kbpsã«èšå®ãããšãæå³ã®ãããã€ãã衚瀺ã§ããããšãããããŸããã ç§ã«ãšã£ãŠããã€ã人ãããŒããŒãããŒã¿ããã®ããã«é«éã§éä¿¡ããå¿ èŠããã£ãã®ã¯äŸç¶ãšããŠè¬ã§ãã
PICçšã®ããã°ã©ã ãäœæããããã«ãã©ãžãªã®ããŒããŒãããã»ããµã®ãã«ã¹ã®æ§è³ªã詳现ã«åæããå¿ èŠããããŸããã ãã®ããã«ãç§ã¯ãªã·ãã¹ã³ãŒããè²·ããŸããã ç§ã®è¥ãé ã¯ãã¡ãããããããã¹ãŠã®ããã€ã¹ãæã£ãŠããŸãããããããã¯ãã¹ãŠäž¡èŠªã«æ®ã£ãŠããŠã5幎éã¢ã¹ã¯ã¯ã«ãã§ã«ç§»åããŠããŸããã ãã®ãããããã€ã¹ã®ããªãŒãããã£ãããšæ§ç¯ããããšã«ããŸãããçµå±ãæã ã¢ããã¥ã¢ç¡ç·ã«æ»ããŸãã
ãã®çµæãæ å ±ã®åãã±ããïŒ2ãã€ãã§æ§æãããïŒã®åã®ããã»ããµãé·ããã«ã¹ãåºåããæ å ±ãããã¯ã®éä¿¡éå§ã®ããã€ããããèŠåãšããŠæ©èœããããšãå€æããŸããã åããã¿ã³ãæŒããŠãããã®ãããã¯ã®é·ãïŒããã³ãã€ãéã®ééïŒãä»»æã«å€åããããšã¯é©ãã¹ãããšã§ããã ãã1ã€ã®åé¡ã¯ãPICããã®é床ã§ããŒã¿ãããã°ã©ã ã§ç¢ºå®ã«èªã¿åãããšãã§ããªãã£ãããšã§ãã çµå±ã®ãšããã圌ã¯USBãã¹ãä¿å®ããæéãå¿ èŠã§ãïŒ ééã£ãã¿ã€ãã³ã°ã§ããŒãæŒãããå ŽåãåçŽã«ã¹ããããããŸãã äžèšã§æžããããã«ãä¹ç®åšã®å©ããåããŠã³ã¢åšæ³¢æ°ãæ倧ã«äžããŸãããããã®èšå®ã§ããããã»ããµãŒã¯éçã§åäœããæã ããããéããŸããããã®çµæããã¿ã³ãæ£ãã決å®ãã確çã¯çŽ70ïŒ ã§ãè»ã§ã¯åãå ¥ããããŸããã§ãã ããã§ç§ã¯ãã§ã«è³¢æã«ç§ã®å¿ãéããŠããŠãããããã第äºã®ä¿¡å·ïŒã¹ãããïŒããããšèããŸããã ãããŠãããå€æããã ããããæåã¯ãäœããã®çç±ã§ãã«ã¹ãåžžã«ååšããããããããèŠã€ããããŸããã§ããããã¿ã³ãæŒããããšãã«ãããã衚瀺ãããå Žåãããã¯è«ççã§ãã ã©ããããç¡ç·ããã»ããµã¯é£ç¶çãªãµã€ã¯ã«ã§ããŒããŒããããŒãªã³ã°ããããŒã®ç¶æ ãå€ãããªããŠããããããéä¿¡ãããšãã«ã€ã³ãã«ã¹ãäžããŸãã ã€ãŸããã¢ã¯ãã£ããã£ããªãå Žåã¯ãåã«ãŒããéä¿¡ããŸãã äžè¬ã«ãããã»ããµã¯éä¿¡ããããã¹ãŠã®ããããã²ãŒãããŸãããã®çµæãå®å šã«æ確ã«èªã¿åãããšãã§ããŸãã PICã§ããã°ã©ã ãæžãçŽããåŸããã¹ãŠãå®å®ããŠçŸããåäœãå§ããŸããã ãã¿ã³ãæŒããšã1ã€ã®ã³ãŒããçæãããé¢ããšå¥ã®ã³ãŒããçæãããŸãã ãããã£ãŠããã¿ã³ä¿æã¢ãŒããå®è£ ããããšã¯ã§ããŸããããç§ã¯ãããããŸããã§ããã ãã¿ã³ãªã©ãè±å¯ã«ãªããŸããã
ããã§ã¯ãããã°ã©ã ããã®æç²ãã€ãŸãç§ãæžããéšåã瀺ããŸãã äžèšã®ãªã³ã¯ã§å ã®ããã°ã©ã ãèŠãããšãã§ããŸãã ããã°ã©ã ã«ã¯ããã¡ãããèªã¿åã£ãããŒã³ãŒããšããããããã€ã¹ã«è»¢éããå¿ èŠãããUSBã³ãŒããæ¯èŒããããŒãã«ããããŸãã ïŒã±ãŒã¹ãåãæ¿ããæéãç¡é§ã«ããªãããã«ïŒéåžžã¯ã³ã¡ã³ããè±èªã§æžãããšã«ããã«æ°ã¥ããŸãã 誰ããããã°ã©ã ã®ãã«ããŒãžã§ã³ã«èå³ããããªããç§ã¯åé¡ãªããããéãããšãã§ããŸãã èäœæš©ã®çç±ãããããã§ã¯å šæãæäŸãããŠããŸããã ããŒãããŒããŒãšãã®ãã¡ãŒã ãŠã§ã¢ã®ããã°ã©ã ããã¡ãŒã ãŠã§ã¢ãã¢ããããŒãããããã°ã©ã ãéä¿¡ããããšãã§ããŸãã
èšé²ãã¿ã³ã
unsigned char recode(long n) { if (n==0x3550) return 'Q'; // <> REVERSE if (n==0x1580) return 'U'; // up - 1 if (n==0x6aa0) return 'X'; // next - 2 if (n==0x2540) return 'D'; // down - 3 if (n==0x4a80) return 'Z'; // prev - 4 if (n==0x1570) return 'L'; // left - 5 if (n==0x0560) return 'R'; // right - 6 if (n==0x4520) return 'H'; // home if (n==0x0ac0) return 'A'; // player if (n==0x6500) return 'T'; // TEL ?? if (n==0x5530) return 'N'; // navi if (n==0x7510) return 'S'; // settings if (n==0x1b28) return 'B'; // back if (n==0x4500) return 'E'; // enter if (n==0x28e0) return 'M'; // (MAP) ?? if (n==0x1320) return 'O'; // notification area - REPEAT if (n==0x0330) return 'F'; // search/find - CALL return 0; } int remap(int n) { // launcher if (n=='S') return 0x3a; // F1 settings/menu if (n=='F') return 0x3b; // F2 if (n=='O') return 0x3c; // F3 notification area // programs if (n=='H') return 0x3D; // F4 home if (n=='A') return 0x3f; // F6 audio/player if (n=='N') return 0x40; // F7 navi if (n=='M') return 0x44; // F11 map if (n=='T') return 0x45; // F12 tel // player controls if (n=='Z') return 0x3e; // F5 prev song if (n=='X') return 0x43; // F10 next song //cursor if (n=='L') return 0x50; // left if (n=='R') return 0x4f; // right if (n=='U') return 0x52; // up if (n=='D') return 0x51; // down if (n=='E') return 0x28; // enter if (n=='B') return 0x29; // ESC back return 0x0; }
æ§æïŒ
#pragma config DEBUG = OFF // 1L 30000 #pragma config PLLDIV = 1 // PLL prescaler //#pragma config CPUDIV = OSC3_PLL4 // sysclock postscaler - working #pragma config CPUDIV = OSC1_PLL2 // sysclock postscaler #pragma config USBDIV = 2 // usb clock comes from PLL div 2 // 1H 30001 // #pragma config FOSC = XTPLL_XT // low speed mode #pragma config FOSC = HSPLL_HS // highspeed mode #pragma config FCMEN = OFF // fail safe clock #pragma config IESO = OFF // int/ext oscillator // 2L 30002 #pragma config PWRT = OFF // power up timer #pragma config BOR = OFF // brown out #pragma config BORV = 0 #pragma config VREGEN = ON // usb voltage regulator // 2H 30003 #pragma config WDT = OFF // watchdog #pragma config WDTPS = 32768 // 3H 30005 #pragma config CCP2MX = ON // ccp2 mux #pragma config PBADEN = OFF // portb a/d enable #pragma config LPT1OSC = ON // low power timer 1 oscillator #pragma config MCLRE = ON // MCLR pin enable // 4L 30006 #pragma config STVREN = ON // stack full #pragma config LVP = ON #pragma config XINST = OFF // extended instructions // 30008 //#pragma config ICPRT = OFF #pragma config CP0 = OFF #pragma config CP1 = OFF #pragma config CP2 = OFF #pragma config CP3 = OFF // 30009 #pragma config CPB = OFF #pragma config CPD = OFF // 3000a #pragma config WRT0 = OFF #pragma config WRT1 = OFF #pragma config WRT2 = OFF #pragma config WRT3 = OFF // 3000b #pragma config WRTB = OFF #pragma config WRTC = OFF #pragma config WRTD = OFF // 3000c #pragma config EBTR0 = OFF #pragma config EBTR1 = OFF #pragma config EBTR2 = OFF #pragma config EBTR3 = OFF // 3000d #pragma config EBTRB = OFF //#define SHOW_ENUM_STATUS #define LED PORTAbits.RA5 #define CAR PORTAbits.RA0 // keypad data line #define EN1 PORTAbits.RA1 #define EN2 PORTAbits.RA2 #define SYN PORTAbits.RA3 // keypad strobe line
äžéšã®èšå®ã¯ãããŒãããŒããŒãåãããšãã«ããã°ã©ããŒèªèº«ã«ãã£ãŠåå®çŸ©ãããŸãã
ããŒã³ãŒããUSBã€ã³ã¿ãŒãã§ã€ã¹ã«è»¢éããïŒ
void SendKeyBuffer(void) { unsigned char n; for (n = 0; n<8; n++) BD1I.address[n] = Key_buffer[n]; // copy Key_buffer to EP1 IN buffer BD1I.bytecount = 0x08; // set the EP1 IN byte count to 8 BD1I.status = ((BD1I.status&0x40)^0x40)|0x88; // toggle the DATA01 bit of the EP1 IN status register and set the UOWN and DTS bits } int sendKey1(unsigned char c) { int n; long timeout=0; for (n = 0; n<8; n++) Key_buffer[n] = 0x00; // clear key buffer // ?? hang place 2 while ((BD1I.status&0x80)) { // wait to see if UOWN bit of EP1 IN status register is clear, (ie, PIC owns EP1 IN buffer) timeout++; if (timeout>250000) { return 0; } ServiceUSB(); } *(Key_buffer+2)=c; SendKeyBuffer(); ServiceUSB(); return 1; } int sendKey(unsigned char c) { if (sendKey1(c)) return (sendKey1(0x00)); return 0; }
ã©ãžãªãã¿ã³ãèªã¿åãããã®ãµãã«ãŒãã³ã ããã©ãŒãã³ã¹ãæ倧åããã«ã¯
ã«ãŒãã¯äœ¿çšãããŸããã ãã¹ãŠã®ããŒããã«ãŠã³ããããŸãã
char readByte() { unsigned char b = 0; // unsigned char i = 0; while (SYN==0); b = (b << 1) | CAR; while (SYN==1); while (SYN==0); b = (b << 1) | CAR; while (SYN==1); while (SYN==0); b = (b << 1) | CAR; while (SYN==1); while (SYN==0); b = (b << 1) | CAR; while (SYN==1); while (SYN==0); b = (b << 1) | CAR; while (SYN==1); while (SYN==0); b = (b << 1) | CAR; while (SYN==1); while (SYN==0); b = (b << 1) | CAR; while (SYN==1); while (SYN==0); b = (b << 1) | CAR; while (SYN==1); return b; } int countZero() { unsigned short i=1; while (CAR==0 && i++); return i/4; } int readCar() { int i; int d = 0; unsigned char k; unsigned char r; unsigned long vl; //#define analyzer //#define dbg // debug mode if (CAR==0) return 1; #ifdef analyzer for (i=0;i<110;i++) { carbuff[i]=readByte(); carbuff[i+110]=ssd; // strobe data } for (i=0;i<221;i++) { printHex(carbuff[i]); } crlf(); crlf(); return 1; #endif // end analyzer while (CAR==1); // short intro 1 while (CAR==0); // short intro 0 while (CAR==1); // long intro 1 vl = readByte() * 0x100 + readByte(); k = recode(vl); #ifdef dbg printDword(vl); // dbg crlf(); // dbg #endif if (k!=0) { #ifdef dbg printChar(k); // dbg crlf(); // dbg #endif #ifndef dbg r=remap(k); // send actual keys we need return sendKey(r); #endif } }
CAR-ç¡ç·ããŒããŒãããŒããŒãã®ããã»ããµããã®ä¿¡å·ãæ¥ç¶ããããã³ã SYN-ç¡ç·ããŒããŒãããã»ããµããã®ã¹ãããŒãä¿¡å·ã
ãããã°ã®éçšã§ãå€ãã®åé¡ã«ééããŸããã å Žåã«ãã£ãŠã¯ããã€ã¯ãã³ã³ãããŒã©ãŒããã³ã°ããUSBããã€ã¹ãåã«æ¶ããŠããŸããŸãã USB亀æãããã³ã«ã¯éåžžã«é£ããããã¹ãŠã®ãã¥ã¢ã³ã¹ãæãäžããããšã¯å®¹æã§ã¯ãããŸããã§ããã è©Šè¡é¯èª€ãéããŠãåé¡ã®ããé åãèŠã€ããããã«ãœãããŠã§ã¢ãŠã©ããããã°ãè¿œå ããŸãããããã«ããããããã®å Žæã§ãã³ã°ãçºçããå Žåã«ããã»ããµãåèµ·åãããŸãã ãã®çµæã99ïŒ ã®ããŒãã¬ã¹æ±ºå®ã®å¿ å®åºŠã§ããªãŒãºããããšãªããããã°ã©ã ã®å®å®ãããã©ãã«ã®ãªãæäœãå®çŸããŸããã Toucanèªäœã®USBããŒãã¯ãç¹ã«USBã¹ããªãã¿ãŒã䜿çšããŠãããããããŸãããŸãæ©èœããŸããã USBããŠã¹ãã€ãã¹ã«ãªã©ã®ãæ·±å»ãªãããã€ã¹ã§ããã次ã®åèµ·åãŸã§æ¶ããããšããããŸãã èªå®¶è£œã«ã€ããŠäœãèšããŸããã ããããç§ã¯å·¥å Žã®USBããã€ã¹ã®ã¬ãã«ã§å®å®æ§ãéæããããšãã§ããŸããã
次ã«ããšã³ã³ãŒããŒãæ¥ç¶ããå¿ èŠããããŸããã ãšã³ã³ãŒããŒããäžäžãã¿ã³ã®ãšãã¥ã¬ãŒã·ã§ã³ã«ããŒã¿ãéä¿¡ããEnterããŒã®ãšã³ã³ãŒããŒãããæŒãããšã«ããŸããã ããŠãã¯ãªãã¯ã¯ããã»ããµãåŠçããŸããã€ãŸã ãã§ã«æ©èœããŠããŸãã ãšã³ã³ãŒãã«ã€ããŠã¯ãèªãã®ã¯é£ãããããŸããã ãã³ã2ãããã«æ¥ç¶ãããšãã·ãŒã±ã³ã¹0ã1ã3ã2ïŒãã€ããªã³ãŒã00 01 11 10ïŒãåŸãããŸãã 2ã€ãããªãã«ã§å€æŽãããšã0 1 2 3ã«ãªããŸãã次ã«ãå·®ã1ãŸãã¯-3ã®å Žåãåã®çµæããçŸåšã®çµæãæžç®ããããäžæ¹ã®æ¹åã-1ãŸãã¯3ã®å Žåãäžæ¹ã®æ¹åã«å転ããŸãã ãšã³ã³ãŒãã®èªã¿åãã¯ãäœããã®çš®é¡ã®ããŒãã«ã«ãã£ãŠå®è£ ãããŠããããšãããããŸãããäžè¬ã«ãäœãããå¿ èŠã¯ãããŸããã æé ã¯æ¬¡ã®ãšããã§ãã
int readEncoder() { int k; int enc; int subb; int res = 1; static int enc1 = 0; static int init = 0; if (!init) { // prevent encoder key command sent on startup init = 1; enc1 = enc = EN1 + EN2 * 2; if (enc==3 || enc==2) enc=enc ^ 1; } enc = EN1 + EN2 * 2; if (enc==3 || enc==2) enc=enc ^ 1; if (enc != enc1) { subb = enc - enc1; if (subb==1 || subb==-3) k='U'; if (subb==-1 || subb==3) k='D'; res = sendKey(remap(k)); // send up or down key command } enc1 = enc; return res; }
PowerAMPãæ確ã«å¶åŸ¡ãããããã«ãªããŸããïŒãšã³ã³ãŒããŒãããšå ¥åïŒ ãã³ã䜿çšããŠãé³æ¥œãå ¥ã£ããã©ã«ããæ€çŽ¢ãããã¿ã³ã«å ¥åããŠäœæ²ãéå§ããŸãã 倢ïŒ
ä»®æ³ããŒããŒãã«ãã£ãŠçæãããã³ãŒãã¯ãASCIIã³ãŒãã§ãAndroidããŒã³ãŒãïŒASCIIã³ãŒããšãç°ãªãïŒã§ããªãããšãä»ãå ããŸãã ãããã¯åå¥ã®USBããŒããŒãã³ãŒãã§ãã ãã®è¡šã§ããããèŠã€ããããšãã§ããŸãïŒ
www.win.tue.nl/~aeb/linux/kbd/scancodes-14.html
ãããã£ãŠãAndroidã«ã¯ãã¹ãã·ã£ã«ã®åŠçãæ åœããç¹å¥ãªæ§æããããŸãã ããŒã ãã¡ãããããã²ãŒã·ã§ã³ãéå§ããããŒã ãã¿ã³ã䜿çšããŠãã¬ãŒã€ãŒãèµ·åããå¿ èŠããããŸããã ãã®ããã«ã¯ãkeylayoutãã¡ã€ã«ãç·šéããå¿ èŠããããŸãããããã®ãã¡ã€ã«ã®èª¬æã¯æ¬¡ã®ãšããã§ãã
source.android.com/tech/input/key-layout-files.html
ããã«ç§ã®èšå®ããããŸãïŒ
ããŒ1 BACKïŒESCïŒãACããã¿ã³ïŒ
ããŒ59 MENUïŒF1ïŒãBCããã¿ã³ïŒ
#key 60 CAMERAïŒF2ïŒãCALLããã¿ã³ïŒ
ããŒ61 NOTIFICATIONïŒF3ïŒãããã®ãç¹°ãè¿ããããŒïŒ
ããŒ62 HOMEïŒF4ïŒãã¡ã€ã³ããã¿ã³ïŒ
ããŒ63 MEDIA_PREVIOUSïŒF5ïŒã4ããã¿ã³ïŒ
ããŒ64 HEADSETHOOKïŒPLAY / PAUSE F6ïŒããªãŒãã£ãªããã¿ã³ïŒ
#key 65 INFOïŒF7ïŒãããããã¿ã³ïŒ
ããŒ66 VOLUME_UPïŒF8 ??
ããŒ67 VOLUME_DOWNïŒF9 ??
ããŒ200 HEADSETHOOKïŒããŒããŠã§ã¢ããŒïŒMEDIA_STOPãæ©èœããªã
ããŒ68 MEDIA_NEXTïŒF10ïŒã6ããã¿ã³ïŒ
ããŒ87 POWERïŒF11ïŒãããã®ãããããããŒïŒ
#key 88 EMAILïŒF12ïŒãtelããã¿ã³ïŒ
ãã¡ããããã®ãã¡ã€ã«ã¯ã«ãŒãåãããããã€ã¹ã§ã®ã¿ç·šéã§ããŸãã
Toucan Nanoã«ææ°ã®ã¢ããããŒããã€ã³ã¹ããŒã«ããåŸãäžéšã®ããŒãæ©èœããªãããšããããŸããã ãªã-ç§ã¯ãŸã èŠã€ããããšãã§ããŸããã§ããã ããšãã°ãæãéèŠãª[ããŒã ]ãã¿ã³ãæ©èœããªããªããŸããã ãã®ãããã·ã¹ãã ã®èµ·åæã«éå§ãããåçŽãªããããã¡ã€ã«ãäœæããŸããã ããã«ãããŸãïŒ
ïŒïŒ/ system / bin / sh
stty -F / dev / ttyUSB0 ispeed 4800
chmod 0777 / dev / ttyUSB0
å¯ã20
am broadcast -a info.mapcam.droid.SERVICE_STARTïŒmapcam.info
æ¬åœãªãã
ãã
s = $ïŒgetevent -v0 -c1ïŒïŒãã¹ãŠã®å ¥åããã€ã¹ãã1ã€ã®ã€ãã³ããèªã¿åããŸã
ïŒ-v0ã«ãããäžèŠãªãŽãã®æãããŒããªãããã«ããŸã
s = $ïŒecho $ s | awk '{print $ 4}'ïŒïŒããŒã³ãŒããéžæ
case $ s inïŒå¿ èŠãªã³ãã³ããå®è¡ãã
0007003fïŒam start -a android.intent.action.MAIN -c android.intent.category.HOME -n com.maxmpz.audioplayer / .StartupActivityïŒAUDIO
ïŒam start -a android.intent.action.MAIN -c android.intent.category.HOME -n com.maxmpz.audioplayer / .PlayListActivityïŒAUDIO
å¯ã1
;;
00070040ïŒam start -n ru.yandex.yandexmaps / .MapActivityïŒNAVI
å¯ã1
;;
0007003dïŒam start -a android.intent.action.MAIN -c android.intent.category.HOME
å¯ã1
;;
00070045ïŒam start -a android.intent.action.MAIN -n com.speedsoftware.rootexplorer / .RootExplorerïŒTEL
å¯ã1
;;
0007003bïŒam startservice -a "org.broeuschmeul.android.gps.usb.provider.nmea.intent.action.START_GPS_PROVIDER"
å¯ã5
am broadcast -a info.mapcam.droid.SERVICE_START
ïŒam start -n info.mapcam.droid / .SpeedometrActivityïŒCALL
å¯ã1
;;
ãšãµãã¯
ãã£ã
ãã®ãšãã¥ã¬ãŒã¿ã¯ãã»ãŒ1幎éããã·ã³ã§æ£åžžã«äœ¿çšãããŠããŸãã èšç»ã§ã¯ãããŠã¹ããšãã¥ã¬ãŒãããŠããã¿ã³ã§ç»é¢å ã移åã§ããããã«ããŸãã æ®å¿µãªãããã¿ããã¹ã¯ãªãŒã³ãã·ã¹ãã ã«çµ±åããã®ããŸã ãã¹ã¿ãŒããŠããŸããã æ®å¿µãªãããå€ãã®ããã°ã©ã ïŒããšãã°ãã©ã³ãã©ãŒãããïŒã¯ãã¿ã³ã§å¶åŸ¡ããããã¿ããã¹ã¯ãªãŒã³ãå¿ èŠã§ãã ãããã£ãŠããã¹ãŠåãã§ããã®ãããªå Žåã¯è»å ã§USBããŠã¹ãæºåž¯ããå¿ èŠããããŸãã
Androidãããžã§ã¯ãèªäœã«ã€ããŠã¯ãã©ããããããé¢çœããã©ãããåå¥ã«äŒããããšãã§ããŸãã
