Peri's Hobby
Peri¤Î»¨Â¿¤Ê¥Û¥Ó¡¼³èÆ°¤Îµ­Ï¿

²óž·×

Àß·×


´ë²è³µÍ×


Æþ¼ê¤·¤¿¥Õ¥é¥¤¥¹Èפϡ¢¼ç¼´²óž®ÅÙ¤¬Ê¬¤«¤ê¤Þ¤»¤ó¡£¤Ê¤Î¤Ç¡¢²óž·×¤òºî¤ë¤³¤È¤Ë¤·¤Þ¤¹¡£
¥Û¡¼¥ë¥»¥ó¥µ¡¼IC¤Ç¼ç¼´¥×¡¼¥ê¡¼¤Î²óž¤ò¸¡½Ð¤·¡¢7Seg LED¤Ëɽ¼¨¤¹¤ë¤³¤È¤Ë¤·¤Þ¤¹¡£
¥Õ¥é¥¤¥¹ÈפʤΤǡ¢1Ëürpm¤Þ¤Ç·×¬¤Ç¤­¤ë¤è¤¦¤Ë¤¹¤ë¤Î¤Ç¡¢5·åɽ¼¨¤È¤·¤Þ¤¹¡£

²óÏ©Àß·×


PIC¤ò»È¤Ã¤Æºî¤ë¤³¤È¤ò¹Í¤¨¤Þ¤¹¡£
7Seg LED¤ò5·å¥À¥¤¥Ê¥ß¥Ã¥¯ÅÀÅô¤µ¤»¤ë¤¿¤á¤Ë¤Ï¡¢¥»¥°¥á¥ó¥ÈÀ©¸æ¤¬7ËܤÈ+·åÀ©¸æ¤Î5ËÜ = ¹ç·×12ËܤνÐÎϤ¬É¬ÍפȤʤê¤Þ¤¹¡£
ÆþÎϤϡ¢¥Û¡¼¥ë¥»¥ó¥µ¡¼IC¤À¤±¤Ê¤Î¤Ç¡¢1ËܤÇ­¤ê¤Þ¤¹¡£
ÀºÅ٤Τ¿¤á¡¢³°Éô¿å¾½È¯¿¶¤ò»È¤Ã¤Æ¤â¡¢18¥Ô¥ó¤Ç­¤ê¤Þ¤¹¡£
¥¹¥È¥Ã¥¯¤·¤Æ¤¢¤ëPIC16F628A¤Ç½½Ê¬¤È¤¤¤¦¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£

¥Û¡¼¥ë¥»¥ó¥µ¡¼IC¤«¤é¤ÎÆþÎϤò³ä¤ê¹þ¤ß¤Ç½¦¤¦¤¿¤á¡¢¥Û¡¼¥ë¥»¥ó¥µ¡¼¤ÏRB0/INT¤ËÀܳ¤µ¤ì¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
PIC16F628A¤Ç³°Éôȯ¿¶´ï¤ò»È¤¦¤È¡¢RA6¤ÈRA7¤ÏCLK¤Ë¤Ê¤ê¡¢½ÐÎϤˤϻÈÍѤǤ­¤Þ¤»¤ó¡£RA5/MCLR/VPP¤Ï¡¢ICSP¤Ç»ÈÍѤ·¤Þ¤¹¡£
¤è¤Ã¤Æ¡¢RB1¡Á7¤Ç¥»¥°¥á¥ó¥È¤òÀ©¸æ¤·¡¢RA0¡ÁRA4¤Ç·åÀ©¸æ¤ò¤¹¤ë¤Î¤¬¼«Á³¤Ç¤¹¡£PIC16F628A¤Ï¡¢RA4¤¬¥ª¡¼¥×¥ó¥É¥ì¥¤¥ó¤Ê¤Î¤Ç¡¢¥×¥ë¥¢¥Ã¥×¤·¤Þ¤¹¡£

7¥»¥°LED¤Ï¡¢¥«¥½¡¼¥É¥³¥â¥ó¤¬¥¹¥È¥Ã¥¯¤·¤Æ¤¢¤ë¤Î¤Ç¡¢¥É¥é¥¤¥ÖTR¤Ï¤³¤ì¤â¥¹¥È¥Ã¥¯¤Î2SC1815¤È¤·¤Þ¤¹¡£
ÅŸ»¤Ï5V¥¹¥¤¥Ã¥Á¥ó¥°AC¥¢¥À¥×¥¿¡¼¤ò»ÈÍѤ¹¤ë¤Î¤Ç¡¢LED¤ÎÅÅήÀ©¸ÂÄñ¹³¤Ï220¦¸¡¢TR¤Î¥Ù¡¼¥¹¤Ï¼ê»ý¤Á47k¦¸¤Ç¥É¥é¥¤¥Ö¤¹¤ë¤³¤È¤Ë¤·¤Þ¤¹¡£
ȯ¿¶´ï¤Ï¡¢¥¹¥È¥Ã¥¯ÉôÉʤ¬Ìµ¤¤¤Î¤Ç¡¢½©·î¤Ç¤Ä¤Ê¤°¤À¤±¤Çȯ¿¶¤¹¤ë11.776MHz¤Î3ËÜ­¿å¾½¤ò¹ØÆþ¤·¤Þ¤·¤¿¡£¥¹¥È¥Ã¥¯¤È¤·¤Æ2¥Ñ¥Ã¥¯Ç㤤¤Þ¤·¤¿¡£



¥½¥Õ¥È¥¦¥§¥¢Àß·×


²óž¼«ÂΤϡ¢¥Û¡¼¥ë¥»¥ó¥µ¡¼¤«¤é¥Ñ¥ë¥¹¤È¤·¤ÆÆÀ¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¤«¤éÁ´¤¯ÌäÂê¤Ï¤¢¤ê¤Þ¤»¤ó¡£
²óž¿ô¤ËÊÑ´¹¤¹¤ë¤Ë¤Ï¡¢°ìÄê»þ´Ö¤Î¥Ñ¥ë¥¹¿ô¤ò¥«¥¦¥ó¥È¤¹¤ëÊýË¡(ľÀܷ׿ôÊý¼°)¤È¡¢È¯À¸¤¹¤ë¥Ñ¥ë¥¹´Ö¤Î»þ´Ö¤ò·×¬¤¹¤ëÊýË¡(¥ì¥·¥×¥í¥«¥ëÊý¼°)¤¬¹Í¤¨¤é¤ì¤Þ¤¹¡£
ľÀܷ׿ôÊý¼°¤Ç¤Ï¡¢·×¬»þ´Ö¤è¤ê¤â¥Ñ¥ë¥¹´Ö³Ö¤¬¹­¤¯¤Ê¤ë¤È·×¬¤Ç¤­¤Þ¤»¤ó¤«¤éÄ㮲󞤬¬¤ì¤Ê¤¤¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£°ìÊý¡¢¥ì¥·¥×¥í¥«¥ëÊý¼°¤Ç¤Ï¡¢»þ´Ö·×¬¤Îʬ²òǽ¤Î¸Â³¦¤¬·×¬²Äǽ¤ÊºÇÂç²óž¿ô¤Ë¤Ê¤ê¤Þ¤¹¡£

ľÀܷ׿ôÊý¼°¤Ç·×¬»þ´Ö¤ò0.5ÉäȤ¹¤ë¤È¡¢0.5ÉäÇ1²óž¤¹¤ë²óž¿ô¡¢¤¹¤Ê¤ï¤Á120rpm°Ê²¼¤ËÂбþ¤¹¤ë¤Î¤¬ÂçÊѤˤʤê¤Þ¤¹¡£
ÃÙ¤¤»þ¤Ë·×¬»þ´Ö¤ò±ä¤Ð¤¹¤È¤«¤¹¤ì¤Ð¤Ç¤­¤Þ¤¹¤¬¡¦¡¦¡¦
¥ì¥·¥×¥í¥«¥ëÊý¼°¤Ç¤Ï¡¢PIC¤Ç11.776MHz¤Î¥¯¥í¥Ã¥¯¤È¤·¤¿¾ì¹ç¡¢INT³ä¤ê¹þ¤ß¤Î´Ö³Ö¤ò·×¬¤Ç¤­¤ëºÇ¾¯¤Î¼þ´ü¤Ï¡¢Fosc/4 = 11.776MHz/4 = 2.944*10^6 Hz¤È¤Ê¤ê¤Þ¤¹¡£
r(rpm)¤Î¤È¤­¡¢1²óž¤Î½êÍ×»þ´Ö¤Ï60/rÉäǤ¢¤ê¡¢r+1(rpm)¤È¤Î½êÍ×»þ´Öº¹¤¬ºÇÂçʬ²òǽ­ùt(=1/(2.944*10^6)¤È¤Ê¤ë²óž¿ô¤Þ¤Ç1rpm¤Îº¹¤òÊá¤é¤¨¤ë¤³¤È¤¬¤Ç¤­¤ë¤Î¤Ç¡¢

60 60 1
¡½ - ¡½¡½ = ¡½¡½ ¤È¤Ê¤ër¤òµá¤á¤ë¤È¡¢
r r+1 ­ùt

r^2 + r - 60*­ùt = 0;

­ùt¤Ï½½Ê¬¤ËÂ礭¤¤¤Î¤Ç¡¢r¤Ï¤ª¤è¤½¢å(60*­ùt) = 13290rpm¤È¤Ê¤ê¤Þ¤¹¡£
¤³¤Î¸¡Æ¤¤«¤é¡¢¥ì¥·¥×¥í¥«¥ëÊý¼°¤Ç¹Ô¤¯¤³¤È¤Ë¤·¤Þ¤¹¡£

ʸ¸¥Ä´ºº


¥Í¥Ã¥È¤Ç¤¤¤í¤¤¤íÄ´¤Ù¤Æ¤ß¤ë¤È¡¢¼Ì¿¿¤Ç¸«¤ë¹©ºî¼¼¤µ¤ó¤¬´ðËÜ¡¢Á´¤¯Æ±¤¸¥í¥¸¥Ã¥¯¤Ç²óž·×¤òºîÀ®¤·¤Æ¤¤¤Þ¤·¤¿¡£
Â礤¤Ë»²¹Í¤Ë¤µ¤»¤Æ¤¤¤¿¤À¤­¤Þ¤·¤¿¡£


À©ºî


¥Ï¡¼¥É¥¦¥§¥¢


½©·î¤Î»æ¥¨¥Ý¤Î¾®¤µ¤¤¥æ¥Ë¥Ð¡¼¥µ¥ë´ðÈפˡ¢¥Ý¥ê¥¦¥ì¥¿¥óÀþ¤ÇÇÛÀþ¤·ºîÀ®¤·¤Þ¤·¤¿¡£¤Á¤ç¤¦¤ÉLED¤¬5·åºÜ¤ê¤Þ¤·¤¿¡£
¥Ý¥ê¥¦¥ì¥¿¥óÀþ¤Ç¤ÎÇÛÀþ¤Ï¡¢Èïʤ¤¬ÍϤ±¤ë¤Þ¤ÇȾÅĤòÇ®¤·¤Æ¤ª¤¯É¬Íפ¬¤¢¤ê¤Þ¤¹¤¬¡¢Ç®¤·¤¹¤®¤ë¤È¥é¥ó¥É¤¬Çí¤¬¤ì¤ë¤Î¤Ç¤Á¤ç¤Ã¤È¤À¤±´·¤ì¤¬É¬Íפ«¤â¤·¤ì¤Þ¤»¤ó¡£
°ìÊý¤Ç¡¢ÇÛÀþ¤ò¼«Í³¤Ë¸òº¹¤µ¤»¤é¤ì¤ë¤Î¤Ç¡¢ÉôÉʤÎÇÛÃ֤ϼ«Í³¤Ê¤Î¤Ç¡¢¥Ñ¥¿¡¼¥óÀ߷פϾÊά¤·¤Æ¡¢²óÏ©¿Þį¤á¤Æ¤Ê¤ó¤È¤Ê¤¯ÉôÉʤòÇÛÃÖ¤·¤Æ¤âºî¤ì¤Þ¤¹¡£
ÅŸ»¤È¥»¥ó¥µ¡¼¤Ø¤ÎÀܳ¤Ï¡¢¥³¥Í¥¯¥¿¤Ç¤Ï¤Ê¤¯¥Ô¥ó¥Ø¥Ã¥À¤òΩ¤Æ¤Æ¤Ï¤ó¤ÀÉÕ¤±¡£±¦²¼¤Î¥Ô¥ó¥Ø¥Ã¥À¤ÏICSP¤Ç¤¹¡£Àܳ¤·¤Ê¤¤ICSP¤ÎVcc¤Ï¡¢¥Ô¥ó¤òÀÚÃǤ·¤ÆÀܳ»þ¤ÎÊý¸þ»Ø¼¨¤Ë¤·¤Æ¤¤¤Þ¤¹¡£




¥½¥Õ¥È¥¦¥§¥¢


¥Õ¥ê¡¼¤Ç»È¤¨¤ë HITEC PICC Lite¤ÇºîÀ®¤·¤Þ¤·¤¿¡£
»ä¤Î¥Æ¥ó¥×¥ì¡¼¥È¤Ï¡¢³Æ¥ì¥¸¥¹¥¿¤ÎÀâÌÀ¤¬½ñ¤­¹þ¤ó¤Ç¤¢¤ê¤Þ¤¹¡£
Åö½é¡¢·åʬ³ä¤òTMR0³ä¤ê¹þ¤ß¤ÎÃæ¤Ç¹Ô¤Ã¤Æ¤·¤Þ¤Ã¤Æ¤Þ¤È¤â¤ËÆ°ºî¤·¤Ê¤«¤Ã¤¿¤Î¤Ç¤¹¤¬¡¢¥á¥¤¥ó¥ë¡¼¥×¤Îɽ¼¨¹¹¿·»þ¤Ë¹Ô¤¦¤è¤¦¤Ë¤·¤Æ¤¦¤Þ¤¯¹Ô¤­¤Þ¤·¤¿¡£³ä¤ê»»¤Ï»þ´Ö¤¬¤«¤«¤ê¤Þ¤¹¡£
1²óž¤Î»þ´Ö¤Ï¡¢INT³ä¤ê¹þ¤ß¤Î´Ö³Ö¤ò¡¢TMR1¤Î¥«¥¦¥ó¥È¤È¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤Î²ó¿ô¤Ç·×¬¤·¤Æ¤¤¤Þ¤¹¡£TMR0¤Î³ä¤ê¹þ¤ß¤Çɽ¼¨¤ò¹¹¿·¤·¤Æ¤¤¤Þ¤¹¡£
·×¬¤·¤¿»þ´Ö¤òrpm¤ËÊÑ´¹¤·¡¢³Æ·å¤Î¿ôÃͤËʬ³ä¤¹¤ë½èÍý¤Ï¥á¥¤¥ó¥ë¡¼¥×¤Ë¤¢¤ê¤Þ¤¹¡£

¥±¡¼¥¹¤ÈÀßÃÖ


¥±¡¼¥¹¤ËÆþ¤ì¤Æ¡¢¥Õ¥é¥¤¥¹ÈפËÀßÃÖ¤·¤Þ¤·¤¿¡£
¥Û¡¼¥ë¥»¥ó¥µ¡¼IC¤Ï¡¢¥æ¥Ë¥Ð¡¼¥µ¥ë´ðÈפ˼è¤êÉÕ¤±¤Æ¡¢¥¢¥ë¥ß¥Õ¥é¥Ã¥È¥Ð¡¼¤Ç¥â¡¼¥¿¡¼¤Î´ðÂæ¤Ë¼è¤êÉÕ¤±¤Æ¤¤¤Þ¤¹¡£¥Ý¥ê¥«¡¼¥Ü¥Í¡¼¥È¥Í¥¸¤ò»ÈÍѤ·¤Æ¼§²½¤µ¤ì¤Ê¤¤¤è¤¦¤Ë¤·¤Æ¤ß¤Þ¤·¤¿¡£¼§ÀФȥ»¥ó¥µ¡¼¤È¤Î´Ö³Ö¤Ï2mm¤¯¤é¤¤¤Ç¤¹¡£
¥±¡¼¥¹¤Î³Ñ·ê²Ã¹©¤Ï¡¢¥Õ¥é¥¤¥¹ÈפǤϤʤ¯»å¤Î¤³¤ò»ÈÍѤ·¤Þ¤·¤¿¡£




¥½¡¼¥¹¥³¡¼¥É






/*******************************************
²óž·×¡¡for 16F628A/Hitec PICC
Peri 2010.Apr
********************************************/

#include


/*********** ¥³¥ó¥Õ¥£¥°¥ì¡¼¥·¥ç¥ó¥Ó¥Ã¥È **********************

Protection of flash memory
PROTECT
UNPROTECT
Protection of EEPROM data memory
CPD
UNPROTECT
Low voltage programming enable
LVPEN
LVPDIS
Brown out detection enable
BOREN
BORDIS
Master clear reset pin function
MCLREN
MCLRDIS
Power up timer enable
PWRTEN
PWRTDIS
Watchdog timer enable
WDTEN
WDTDIS
Oscillator configurations
RCCLK ³°ÉôRCȯ¿¶CLKOUT
RCIO ³°ÉôRCȯ¿¶CLKOUT¤Ê¤·
INTCLK Æâ¢CLKOUT
INTIO Æâ¢CLKOUT¤Ê¤·
EC ³°Éôȯ¿¶ÆþÎÏ
HS 4MHz¡Á¹â¼þÇÈ¿å¾½/¥»¥é¥ß¥Ã¥¯
XT 4MHz°Ê²¼¿å¾½/¥»¥é¥ß¥Ã¥¯
LP 200KHz°Ê²¼ÄãÅÅÎÏ/¿å¾½È¯¿¶
************************************/

/* hitec picc*/
__CONFIG(MCLRDIS &
PWRTEN &
BORDIS &
UNPROTECT &
WDTDIS &
LVPDIS &
HS);
__IDLOC(628A);


#define TRUE 1
#define FALSE 0


#define CPUFREQ 11.776 // MHz

/******************* TMR0 ¸¡Æ¤ ɽ¼¨¤Î¹¹¿·¥¿¥¤¥ß¥ó¥°************************
»þ´Ö¤ò·×¬¡£´Ö³Ö¤Ï2mÉÃ
Fosc = 11.776*10^6 Hz
CLK = Fosc/4 = 2.944*10^6 Hz
INT = 1²ó/2mÉÃ = 0.5*10^3 = 500Hz
CLK/INT = 2944000/500 = 5888²ó
¥×¥ê¥¹¥±¡¼¥é¤ò¸¡Æ¤
5888 / 32 = 184 = 0xB8
¥×¥ê¥¹¥±¡¼¥é¤ò1/32¤Ë¤·¤Æ¡¢0x100-0xB8 = 0x48¤ò½é´üÃͤ˥«¥¦¥ó¥È¥¢¥Ã¥×¤¹¤ë¤È2mÉÃËè¤Î³ä¤ê¹þ¤ß¤¬È¯À¸¤¹¤ë

********************************************************/

#define TMR0_INI 0x48

/******************* TMR1 ¸¡Æ¤ ************************
INT0³ä¤ê¹þ¤ßȯÀ¸¤Î´Ö³Ö¤òTMR1¤Ç·×¬¤¹¤ë¡£
³ä¤ê¹þ¤ß¤Î¥¤¥ó¥¿¡¼¥Ð¥ë¤ÏCLK = Fosc/4 = 2.944*10^6 Hz
¥×¥ê¥¹¥±¡¼¥é¤Ê¤·¤È¤·¤¿¾ì¹ç¡¢¤³¤ì¤¬¡¢ºÇÂçʬ²òǽ¤Ç¤Î»þ´Ö·×¬¡£

r(rpm)¤Î¤È¤­¡¢1²óž¤Î½êÍ×»þ´Ö¤Ï60/rÉÃ
r+1(rpm)¤È¤Î½êÍ×»þ´Öº¹¤¬ºÇÂçʬ²òǽ­ùt¤È¤Ê¤ë²óž¿ô¤Þ¤Ç1rpm¤Îº¹¤òÊá¤é¤¨¤ë¤³¤È¤¬¤Ç¤­¤ë

60 60 1
¡½ - ¡½¡½ = ¡½¡½ ¤È¤Ê¤ër¤òµá¤á¤ë¡£
r r+1 ­ùt

r^2 + r - 60*­ùt = 0;

­ùt¤Ï½½Ê¬¤ËÂ礭¤¤¤Î¤Ç¡¢r¤Ï¤ª¤è¤½¢å(60*­ùt) = 13290

1ʬ¤Ç¡¢2.944 * 60 * 10^6 = 176,640,000
¥ª¡¼¥Ð¡¼¥Õ¥í¡¼»þ´Ö Tof=1/(2.944*10^6) * 65536(ÉÃ)
0.5ÉäΥª¡¼¥Ð¡¼¥Õ¥í¡¼²ó¿ô¤Ï¡¢0.5/Tof = 22.461

INT0³ä¤ê¹þ¤ßȯÀ¸¤Î´Ö³Ö(ÉÃ)¤Ï¡¢(¥ª¡¼¥Ð¡¼¥Õ¥í¡¼²ó¿ô * 0xFF + TMR1¤Î¥«¥¦¥ó¥¿)*2.944*10^6 Hz

********************************************************/




// Äê¿ô
#define MINUTES_COUNT 176640000 // TMR1 1:1¤Ç¤Î1ʬ´Ö¤Î¥«¥¦¥ó¥È¥¢¥Ã¥×¿ô
#define COUNT_RESET_INTERVAL 23 // TMR1¥ª¡¼¥Ð¡¼¥Õ¥í¡¼¤Î²ó¿ô¤Ç»ØÄê
#define ZERO_CLEAR_TIME 1500 // 3ÉÃ

static const unsigned char char_ptn[] =
{0x7E,0x0C,0xB6,0x9E,0xCC,0xDA,0xFA,0x0E,0xFE,0xDE,0xEE,0xF8,0xB0,0xBC,0xF2,0xE2
}; //¥Õ¥©¥ó¥È¥Ñ¥¿¡¼¥ó a¤¬²¼°Ì¥Ó¥Ã¥È,ºÇ²¼°Ì¤ÏRB0:ÆþÎÏ = 0

// ¥°¥í¡¼¥Ð¥ëÊÑ¿ô


static volatile bit start_flg;
static volatile bit display_flg;
static volatile unsigned char tmr1_count_bufH;
static volatile unsigned char tmr1_count_bufL;
static volatile unsigned int rotate;
static volatile unsigned int rotate_val;
static volatile unsigned int of_count;
static volatile unsigned int of_count_val;
static volatile unsigned int tmr1of;
static volatile unsigned int zero_display_counter;
static volatile unsigned char dig_num[5];
static volatile unsigned char digit;



static unsigned int dig;
static unsigned char ra_ctrl;
static bit zero_sup;

static unsigned long tmr1count;
static unsigned long rpm;
static unsigned long a,b,c;
static unsigned long cnt;

union tmr1_count_type
{
unsigned char c[4];
unsigned short i[2];
unsigned long l;
} tmr1_count_buf;
// ¥¦¥§¥¤¥È¥«¥¦¥ó¥¿¡¼


// ÈÆÍÑ



void initialize()
{
// OSCF = 1; // 4MHz
PORTA = 0x00; // Á´¥Ó¥Ã¥Èhigh
PORTB = 0x00; // Á´¥Ó¥Ã¥Èhigh
TRISA = 0x00; // RA¤ÏÁ´½ÐÎÏ (RA7¤ÏOSC, RA6̤Àܳ)
TRISB = 0x01; // RB1¡Á7¤Ï½ÐÎÏ RB0¤ÏÆþÎÏ
CMCON = 0x07; // ¥³¥ó¥Ñ¥ì¡¼¥¿Ìµ¸ú²½ RA0/RA1



// OPTION
/*************************
RBPU¡§PORTB¥×¥ë¥¢¥Ã¥×¥¤¥Í¡¼¥Ö¥ë¥Ó¥Ã¥È
1 = PORTB¤òÆâÉô¥×¥ë¥¢¥Ã¥×¤·¤Ê¤¤¡£¡Ê½ÐÎÏÀßÄê»þ¤Ë»ÈÍÑ¡Ë
0 = PORTB¤òÆâÉô¥×¥ë¥¢¥Ã¥×¤¹¤ë¡£¡ÊÆþÎÏÀßÄê»þ¤Ë»ÈÍÑ¡Ë
INTEDG¡§³ä¤ê¹þ¤ß¥¨¥Ã¥¸ÁªÂò¥Ó¥Ã¥È
1 = RB0/INTü»Ò¤ÎΩ¤Á¾å¤¬¤ê¥¨¥Ã¥¸¤Ç³ä¤ê¹þ¤ßȯÀ¸
0 = RBO/INTü»Ò¤ÎΩ²¼¤ê¥¨¥Ã¥¸¤Ç³ä¤ê¹þ¤ßȯÀ¸
T0CS¡§TMR0¡Ê¥¿¥¤¥Þ¡¼£°¥Á¥ã¥ó¥Í¥ë¡Ë¥¯¥í¥Ã¥¯¥½¡¼¥¹ÁªÂò¥Ó¥Ã¥È
1 = RA4/T0CK1ü»Ò¤ÎÆþÎϤò¥¿¥¤¥Þ¡¼¥¯¥í¥Ã¥¯¤È¤¹¤ë¡£
0 = ÆâÉôÌ¿Î᥵¥¤¥¯¥ë(¦Õ/4¡Ë¤ò¥¿¥¤¥Þ¡¼¥¯¥í¥Ã¥¯¤È¤¹¤ë¡£
T0SE¡§TMR0¡Ê¥¿¥¤¥Þ¡¼£°¥Á¥ã¥ó¥Í¥ë¡Ë¥½¡¼¥¹¥¨¥Ã¥¸ÁªÂò¥Ó¥Ã¥È
1 = RA4/T0CK1ü»Ò¤ÎΩ²¼¤ê¥¿¥¤¥ß¥ó¥°¤Ç¥¤¥ó¥¯¥ê¥á¥ó¥È¡Ê¥«¥¦¥ó¥È¥¢¥Ã¥×¡Ë
0 = RA4/T0CK1ü»Ò¤ÎΩ¾å¤¬¤ê¥¿¥¤¥ß¥ó¥°¤Ç¥¤¥ó¥¯¥ê¥á¥ó¥È
PSA¡§¥×¥ê¥¹¥±¡¼¥é³ä¤êÅö¤Æ¥Ó¥Ã¥È
1 = PS2¡Á0¤Ç»ØÄꤹ¤ë¥×¥ê¥¹¥±¡¼¥é¤òWDT¡Ê¥¦¥©¥Ã¥Á¥É¥Ã¥¯¥¿¥¤¥Þ¡¼¡Ë¤Ë³ä¤êÅö¤Æ¤ë¡£
0 = PS2¡Á0¤Ç»ØÄꤹ¤ë¥×¥ê¥¹¥±¡¼¥é¤òTMR0¡Ê¥¿¥¤¥Þ¡¼£°¥Á¥ã¥ó¥Í¥ë¡Ë¤Ë³ä¤êÅö¤Æ¤ë¡£
PS0¡Á3
|PS 2, 1, 0 ¡ÃTMR0 | WDT |
--------------------------------
| 0 0 0 | 1/2 | 1/1 |
| 0 0 1 | 1/4 | 1/2 |
| 0 1 0 | 1/8 | 1/4 |
| 0 1 1 | 1/16 | 1/8 |
| 1 0 0 | 1/32 | 1/16 |
| 1 0 1 | 1/64 | 1/32 |
| 1 1 0 | 1/128 | 1/64 |
| 1 1 1 | 1/256 | 1/128 |
****************************/
RBPU = 1;
INTEDG = 0;
T0CS = 0;
T0SE = 0;
PSA = 0;
PS2 = 1;
PS1 = 0;
PS0 = 0;


/********** TMR1 **************************************

¡ÚT1C0N¡Û
+-----+-----+-------+-------+-------+-------+-------+-------+
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
+-----+-----+-------+-------+-------+-------+-------+-------+
| - | - |T1CKPS1|T1CKPS0|T1OSCEN| T1SYNC| TMR1CS| TMR1ON|
+-----+-----+-------+-------+-------+-------+-------+-------+
T1CKPS1-T1CKPS0 :¥×¥ê¥¹¥±¡¼¥é 11:1/8 10:1/4 01:1/2 00:1/1
T1OSCEN :³°Éôȯ¿¶²óÏ©¥¤¥Í¡¼¥Ö¥ë 1:Enable 0:Disable
T1SYNC :¥¿¥¤¥Þ1³°Éô¥¯¥í¥Ã¥¯ÆþÎÏƱ´ü¥³¥ó¥È¥í¡¼¥ë¡ÊTMR1CS¤¬1¤Î»þ¤ËÍ­¸ú¡Ë1:Ʊ´ü¤µ¤»¤ë 0:¤µ¤»¤Ê¤¤
TMR1CS :¥¿¥¤¥Þ£±¥¯¥í¥Ã¥¯¥½¡¼¥¹ÁªÂò1:RC0/T1OSO/T1CK1¥Ô¥ó¤«¤é¤Î³°Éô¥¯¥í¥Ã¥¯ 0:ÆâÉô¥¯¥í¥Ã¥¯(Fosc/4)
TMR1ON :¥¿¥¤¥Þ£±¥ª¥ó¡Ê¥¹¥¿¡¼¥È¡Ë1:start 0:stop

PIR1:TMR1IF<0> :³ä¤ê¹þ¤ß¸¶°ø
PIE1:TMR1IE<0> :³ä¤ê¹þ¤ßµö²Ä
********************************************************/

T1CON = 0b00000001;


digit = 0;
TMR0 = TMR0_INI;

T0IE = 1; // TMR0¥ª¡¼¥Ð¡¼¥Õ¥í¡¼³ä¤ê¹þ¤ßȯÀ¸µö²Ä(@INTCON)
T0IF = 0; // TMR1¥ª¡¼¥Ð¡¼¥Õ¥í¡¼³ä¤ê¹þ¤ß¥Õ¥é¥°(@INTCON)
INTE = 1; // RB0/INT³ä¤ê¹þ¤ßȯÀ¸µö²Ä (@INTCON)
PEIE = 1; // ¥Ú¥ê¥Õ¥§¥é¥ë³ä¤ê¹þ¤ßµö²Ä(@INTCON)
TMR1IE = 1; // TMR1¥ª¡¼¥Ð¡¼¥Õ¥í¡¼³ä¤ê¹þ¤ßȯÀ¸µö²Ä(@PIE1)
TMR1IF = 0; // TMR1¥ª¡¼¥Ð¡¼¥Õ¥í¡¼³ä¤ê¹þ¤ß¥Õ¥é¥°(@PIR1)
GIE= 1; // ³ä¤ê¹þ¤ßµö²Ä(@INTCON)

}

/* interrupt process */

void interrupt tmr(void)
{

if(INTF)
{
if(start_flg)
{
tmr1_count_bufL = TMR1L;
tmr1_count_bufH = TMR1H;
rotate++;
if(of_count >= COUNT_RESET_INTERVAL)
{
of_count_val = of_count;
TMR1L = 0;
TMR1H = 0;
rotate_val = rotate;
display_flg = TRUE;
of_count = 0;
rotate = 0;
}
}
else
{
TMR1L = 0;
TMR1H = 0;
of_count = 0;
rotate = 0;
start_flg = TRUE;
}
zero_display_counter = 0;
INTF = 0;
}
if(TMR1IF)
{
TMR1IF = 0;
of_count++;
}
if(T0IF)
{
TMR0 = TMR0_INI;
//ɽ¼¨¹¹¿·
switch(digit)
{
case 4:
dig = dig_num[0];
ra_ctrl = 0b00000001;
zero_sup = FALSE;
digit = 0;
break;
case 3:
dig = dig_num[1];
zero_sup = (zero_sup == 1 && dig == 0) ? 1 : 0;
ra_ctrl = 0b00000010;
digit++;
break;
case 2:
dig = dig_num[2];
zero_sup = (zero_sup == 1 && dig == 0) ? 1 : 0;
ra_ctrl = 0b00000100;
digit++;
break;
case 1:
dig = dig_num[3];
ra_ctrl = 0b00001000;
zero_sup = (zero_sup == 1 && dig == 0) ? 1 : 0;
digit++;
break;
case 0:
dig = dig_num[4];
ra_ctrl = 0b00010000;
zero_sup = (dig == 0)? 1 : 0;
digit++;
break;
}
PORTB = zero_sup ? 0:char_ptn[dig];
PORTA = ra_ctrl;
zero_display_counter++;
T0IF = 0; //T0IF½é´ü²½
}
}


int main()
{

initialize();
rpm = 88888;
cnt = 100000;
while(cnt--){NOP();} // 88888ɽ¼¨¤Î¥¦¥§¥¤¥È
rpm = 0;
zero_display_counter = 0;
start_flg = FALSE;
display_flg = FALSE;
do
{

if(zero_display_counter > ZERO_CLEAR_TIME)
{
rpm = 0;
dig_num[0] = 0;
dig_num[1] = 0;
dig_num[2] = 0;
dig_num[3] = 0;
dig_num[4] = 0;

zero_display_counter = 0;
start_flg = FALSE;
}
if(display_flg)
{
tmr1_count_buf.l=0;

tmr1_count_buf.c[0] = tmr1_count_bufL;
tmr1_count_buf.c[1] = tmr1_count_bufH;
tmr1_count_buf.i[1] = of_count_val;
tmr1count = tmr1_count_buf.l;

a = (unsigned long)(MINUTES_COUNT / tmr1count);
b = (unsigned long)( a * rotate_val);
c = MINUTES_COUNT % tmr1count;
c *= rotate_val;
c /= tmr1count;
rpm = (b + c);
dig_num[0] = rpm % 10;
dig_num[1] = (rpm % 100) / 10;
dig_num[2] = (rpm % 1000) / 100;
dig_num[3] = (rpm % 10000) / 1000;
dig_num[4] = (rpm % 100000)/ 10000;
display_flg = FALSE;
}
}
while (1);
}




FirstUpload 10/05/17-11:07 : LastUpdate 10/05/17-12:27

Copyright © peri All Rights Reserved. Script by Petit CMS Designed by info-cache.com