ãšã³ããªãŒ
ãªããªãŒã
ååã®èšäºãæžããŠãããããªãã®æéãçµã¡ãŸããããè¬çœªããŸãïŒè©Šéšãå
¥åŠãç ç©¶éå§ã ã»ãã·ã§ã³ããŸã é ããæè²ããã»ã¹ããã§ã«ããã»ã©æéããããŠããªãå ŽåãK1986BE92QIã®éçºã«é¢ããèšäºãæžãç¶ããããšãã§ããŸãã
äœæ¥èšç»
以åã®èšäºãžã®ã³ã¡ã³ãã§ã¯ãã¬ãžã¹ã¿èšå®ãä»ããŠãã€ã¯ãã³ã³ãããŒã©ãŒã䜿çšããã ãã§ãªããSPLïŒèªååšèŸºæ©åšã»ããã¢ããçšãŠãããŒãµã«ã©ã€ãã©ãªãŒïŒã䜿çšããããšãã«ããŒããããã«æ±ããããŸããã CMSISã䜿çšããŠæåã§æ§æãã代ããã«SPLã䜿çšããèªæã¯çŽ æŽããããã®ã§ãããåžžèã«åããŠãå¯èœãªéãSPLã䜿çšãå§ããå¯èœæ§ãé«ããããç§ãã¡ãæåã«å§ãããšãã¯ããŸããã§ããã ããã§ãããã€ãã®åšèŸºãããã¯ãæåã§æäœããããšãåŠãã ã®ã§ãSPLã«è§ŠããŠãå®éã®ã¿ã¹ã¯ã§äž¡æ¹ã®ã¢ãããŒãã®å¹çãæ¯èŒã§ããŸãã
ç®ç
æè²äžã®ç®æšãšããŠãPWM-aïŒãã«ã¹å¹
å€èª¿ïŒã䜿çšããŠLEDãç¹æ»
ãããåšæ³¢æ°ã§ãã¿ã³ã調æŽããŸãã ãã¿ã³ã¯ãå¥ã®ã¿ã€ããŒã«ããå²ã蟌ã¿ã§ãããŒãªã³ã°ãããŸããããŒãªã³ã°æã«ã¯ã2çªç®ã®LEDã®ç¶æ
ãå転ããŸãã ãã®ã¿ã¹ã¯ãå®è£
ããã«ã¯ã次ã®ãã®ãå¿
èŠã§ãã
1.æåå¶åŸ¡çšã«LEDã«æ¥ç¶ãããå
¥åºåããŒãã®åºåãæ§æããŸãã ãã®LEDã¯ãå²ã蟌ã¿ã«å
¥ã£ãŠãã¿ã³ãããŒãªã³ã°ããããšã瀺ããŸãã
2. 2çªç®ã®LEDã«æ¥ç¶ãããå
¥åºåããŒãã®åºåãã¿ã€ããŒããã®å¶åŸ¡ã¢ãŒãã«èšå®ããŸãã ããã¯ãæåã®ã¿ã€ããŒããã®PWMä¿¡å·ãäŸçµŠãããå Žæã§ãã
3.æåã®ã¿ã€ããŒãã2çªç®ã®LEDã«PWMä¿¡å·ãäŸçµŠããã¢ãŒãã«èšå®ããŸãã
4.ããŒãããŒãªã³ã°ããå²ã蟌ã¿ãããªã¬ãŒããã¿ã€ããŒãæ§æããŸãã
5.ã¿ã€ããŒã¬ãã«ïŒç¹å®ã®ã€ãã³ãçšïŒããã³2çªç®ã®ã¿ã€ããŒå
šäœããã®å²ã蟌ã¿ãã¯ã¿ãŒã®äžè¬çãªããŒãã«ã¬ãã«ã§ã®å²ã蟌ã¿ã®äœ¿çšãèš±å¯ããŸãã
æåãã¥ãŒãã³ã°
ã¿ã€ããŒ1. PWMã®å®è£
ãã®èšäºã§æ¢ã«ã¿ã€ããŒ
ã«ééããŠã
ãŸã ã ãããããã®æç¹ã§ã¯ãŸã£ããç°ãªãç®æšããããçŸåšã®ã»ããã¢ããã¯äžèšã®èšäºã§èª¬æãããã®ãããå°ãè€éã§ãã
å§ããŸãããã
- æåã«ãã¿ã€ããŒãåæåãã颿°ã®ç©ºã®ã·ã§ã«ãäœæããŸãã å
¥åã§ã¯ãPWMé床ãç¹åŸŽä»ããå€ããšãå¿
èŠããããŸãã 圌女ã¯çµ¶å¯Ÿã«ã©ããªååã§ãæ§ããŸããã
- 次ã«ãã¿ã€ããŒã®æ§é ãæãåºããŠãã ããã
ãã€ã¯ãã³ã³ãããŒã©ã®3ã€ã®ã¿ã€ããŒãã¹ãŠã®æ§é ã¯åãã§ãã åã¿ã€ããŒã«ã¯4ã€ã®ãã£ãã«ãããããããããããã£ããã£ãã¢ãŒããšPWMã§åäœã§ããŸãã åŸè
ã«èå³ããããŸãã åãã£ã³ãã«ã«ã¯åºåããããŸãã 2ïŒ2ïŒãçŽæ¥ãããã³å転ã ãçŽæ¥ãã«èå³ããããŸãã PWMä¿¡å·ãçæããããã®åºåãšããŠãæåã®ã¿ã€ããŒã®æåã®ãã£ã³ãã«ã®åºåã䜿çšããŸãã ã¬ãžã¹ã¿ã«ç§»ãåã«ãã¡ã€ã³ã¿ã¹ã¯ã匷調ããŸããç®æšã¯ããã°ããåŸ
ã£ãåŸãã¿ã€ããŒèªäœãåºåã®ç¶æ
ãåšæçã«å€æŽããããšã§ãã - ã¿ã€ããŒã®æ§æãéå§ããåã«ãI / OããŒãã®åºåãæ§æããŠãã¿ã€ããŒãæäœããå¿
èŠããããŸãã ããã§ãI / OããŒãã®åºåãæ§æããæ¹æ³ã«ã€ããŠè©³ãã説æããŸããã
æåã®ã¿ã€ããŒã®æåã®ãã£ãã«ã®çŽæ¥åºåã䜿çšããããšã«ããŸããã
調æ»çµæã®ååã¯æ¬¡ã®ãšããã§ãã
ãããã£ãŠããã£ãã«TMR1_CH1ãå¿
èŠã§ãã
圌ãèŠã€ããŸããã ã芧ã®ããã«ãä»£æ¿æ©èœã«ãã£ãŠãã£ãã«PA1ã«æ¥ç¶ãããŠããŸãã TMR1_CH1ã«æ¥ç¶ãããŠãããã³ããŸã ãããšããäºå®ã«ãããããããPA1ã䜿çšããŸãã
ãããè¡ãã«ã¯ãããŒãã«ã¯ããã¯ãé©çšãïŒåæã«ã¿ã€ããŒ1ã«ïŒãåºåãä»£æ¿æ©èœã¢ãŒãã«ããå¿
èŠããããŸãã MDR_RST_CLK->PER_CLOCK |= RST_CLK_PCLK_TIMER1|RST_CLK_PCLK_PORTA;
- 次ã«ãã¯ããã¯ä¿¡å·ãã¿ã€ããŒèªäœã«éä¿¡ã§ããããã«ããå¿
èŠããããŸãïŒæ¢ã«ãªã³ã«ããŠããŸãããã«ãŠã³ãããä¿¡å·ã¯æäŸããŠããŸããïŒã ããã«ã¯MDR_RST_CLK-> TIM_CLOCKã¬ãžã¹ã¿ããããŸããããã§ã¯ãã¿ã€ããŒã«ã¿ã€ãã³ã°ãé©çšããã ãã§ãã
MDR_RST_CLK->TIM_CLOCK |= RST_CLK_TIM_CLOCK_TIM1_CLK_EN;
- ãããŠä»-ã¿ã€ããŒèªäœã®ã¬ãžã¹ã¿ã ã¿ã€ããŒã«ã¯å€æ°ã®ã¬ãžã¹ã¿ããããŸãããåãã£ãã«ã®å¶åŸ¡ã¬ãžã¹ã¿ã®æ§é ã¯åãã§ããããããããã®ã»ãšãã©ã¯äºãã«ã³ããŒããŸãã æåã«ãã¿ã€ããŒå
šäœã®ã¬ãžã¹ã¿ãæ€èšããæ¬¡ã«ç¹å®ã®ãã£ãã«ã«ã€ããŠæ€èšããŸãã
- CNTã¬ãžã¹ã¿ã¯ãåºç€ãšåŒã°ããŸãã ããããåç
§ããšæ¯èŒãããå€ã§ãããå¶ç¶ã®å Žåãäœããã®ã¢ã¯ã·ã§ã³ãçºçããŸãã ã¿ã€ããŒãã«ãŠã³ããå§ããã®ã¯åœŒãšäžç·ã§ãã
ãã®äŸã§ã¯ããŒãã«çããããšã§ååã§ãã ãªã³ã«ãããšãã¯ãŒãã«ãªã£ãŠããã¯ãã ã£ããšããäºå®ã«ããããããã念ã®ããããªã»ããããæ¹ãè¯ã ãœãããŠã§ã¢ã®åèµ·ååŸããã®å€ããŒãã«ãªããªãå¯èœæ§ããããŸãã
MDR_TIMER1->CNT = 0;
- PSG ãã®ã¬ãžã¹ã¿ã¯ãå
¥åä¿¡å·ãåå²ãã圹å²ãæãããŸãã ãã®äŸã§ã¯ã1ç§ããã8000000ãã«ã¹ãã¿ã€ããŒå
¥åã«äŸçµŠããïŒããã©ã«ãã§ã¯ã³ã³ãããŒã©ãŒåšæ³¢æ°ã¯8 MHz = 8000000 Hzã§ããããïŒãã¿ã€ããŒã®åã«é€æ°ã䜿çšããŸããã§ããã 説æãããããããã«ãéžæãã逿°ããã1ãæžç®ãããã®æ°å€ãã¬ãžã¹ã¿ã«å
¥ããå¿
èŠããããŸãã ãªããªã éè·¯ã®PWMåšæ³¢æ°ã0.5 Hzãã250 Hzã«å€æŽããäºå®ã§ãïŒ2ç§ããšã®ãã£ããããç¹æ»
ãããèæãççŒã«äŒŒãã人éã®ç®ã«ã¯åºå¥ã§ããªãããªãã«ãŒãŸã§ïŒããã®åŸãé©åãªååšåšã¯32000ã«ãªããŸããæ°åã ãããã£ãŠãCNTã®32,000ãã£ãã¯ããšã«ïŒèšå®ã«å¿ããŠïŒãŠãããã远å /æžå°ãããŸãã
MDR_TIMER1->PSG = 32000-1;
- ARR CNTçªå·ãæ¯èŒãããã®ã¯ãã®çªå·ã§ãã 250ãã£ãã¯ããããããããã¯1ç§ãªã®ã§ããã®æéã®ååãéžæããŠãLEDã1ç§éã«2åç¶æ
ã倿Žã§ããããã«ããŸãã ããã¯ãã¿ã€ããŒåæå颿°ãåŒã³åºããšãã«æå®ããæ°å€ã§ãã
MDR_TIMER1->ARR = PWM_speed;
- äžè¬çãªã¿ã€ããŒèšå®ãæŽçãããŠããŸãã åºåçšã®ä¿¡å·ã®èšå®ãšã¿ãªãããšãã§ããŸãã ãã£ãã«ããšã«ãç¬èªã®ä¿¡å·ãèšå®ã§ããŸãã ãã®å ŽåïŒæåã®ãã£ãã«ã®å ŽåïŒãã¬ãžã¹ã¿CH1_CNTRLãæ©èœããŸãã äžèšã§åæããããã«ãåºåã«ã¯åžžã«äœããã®ä¿¡å·ãå¿
èŠã§ãã ã0ããŸãã¯ã1ãã®ããããã ãããããŸãŒã³ãã¯å¿
èŠãããŸããã ãããŠãã0ããšã1ãã®äž¡æ¹ãçããæéééã§ããå¿
èŠããããŸãã ãããã®ç®çã®ããã«ãREFä¿¡å·ããããŸãã ã1ããŸãã¯ã0ãã®ããããã§ãã ãŸããCNT == ARRã®å Žåã¯ãã€ã§ãå€ã倿Žã§ããŸãã ãããè¡ãã«ã¯ãOCCMã»ã«ã«0x03ïŒ0b011ïŒãæžã蟌ãå¿
èŠããããŸãã ä»ã®ãã¹ãŠã®ãã©ã¡ãŒã¿ãŒã¯ããã©ã«ãã§ç§ãã¡ã«åã£ãŠããŸãã
MDR_TIMER1->CH1_CNTRL = 3<<TIMER_CH_CNTRL_OCCM_Pos;
- 次ã«ããã£ãã«åºåãæ§æããå¿
èŠããããŸãã æåã®ãã®ã䜿çšããããšã«åæããŸããã ããã§ã¯ãã¬ãžã¹ã¿ãŒCH1_CNTRL1ãå¿
èŠã§ãã æ¢ã«REFä¿¡å·ãçæããŠããŸãã ããã§ããçŽæ¥ãåºååºåãèšå®ããããã«REFãé©çšããã ãã§ãã SELOãšSELOEã®ãããã°ã«ãŒããæ··åããªãããšãéèŠã§ãã SELOã¯åºåããä¿¡å·ãéžæããSELOEã¯åºåãåºåãããã©ãããéžæããŸã ã
MDR_TIMER1->CH1_CNTRL1 = (2<<TIMER_CH_CNTRL1_SELO_Pos)
- ããã§ãäžå€®ã¬ãžã¹ã¿ã§ã¿ã€ããŒããªã³ã«ããå¿
èŠããããŸãïŒã¿ã€ããŒå
šäœãçµäºããåŸã«ã®ã¿äœ¿çšããå¿
èŠãããããã以åã¯æå³çã«èæ
®ããŸããã§ããïŒã
MDR_TIMER1->CNTRL = TIMER_CNTRL_CNT_EN;
- ãã®çµæãPWMã¢ãŒãã§ã¿ã€ããŒãåæåããäœæ¥é¢æ°ãšãè«çã¬ãã«ã®çºæ¯ãçºçããåºåãååŸããŸãã
æçµåæå颿°TIMER1
ã¿ã€ããŒ2.ããŒãªã³ã°ããŒã®å²ã蟌ã¿ãåŒã³åºããPWMåšæ³¢æ°ã倿ŽããŸãã
ããã§ãããŒãæŒããããã©ããã確èªããæŒãããããšã«åºã¥ããŠPWMã®åšæ³¢æ°ã倿Žããã¿ã¹ã¯ã«çŽé¢ããŠããŸãã ãªãªãŒã¹ã確èªããã«ãããŒããŒãã«æ¯ç§25ååãåãããŸãã ããã«ãããæŒããããšãã«PWMãã©ã¡ãŒã¿ãŒããã倧ããå®è¡ããæ©äŒãäžããããŸãã
- ã¿ã€ããŒãèšå®ããåã«ããããã°ããŒãã«ãããã¹ãŠã®ããŒã®åºåãæ§æããŸãã
ãããã¯æ¬¡ã®ããã«æ¥ç¶ãããŸãã ã芧ã®ãšãããããŒã¯3ã€ã®ç°ãªãããŒãã«æ¥ç¶ãããŠããŸãã ãããã£ãŠã3ã€ã®ããŒããã¹ãŠãæ§æããå¿
èŠããããŸãã è·³ãè¿ãã«å¯Ÿããç· ãä»ããšã³ã³ãã³ãµä¿è·ãããŒãäžã«ãã§ã«ååšããå
éšç· ãä»ãããªã³ã«ããå¿
èŠããªãããšã«æ³šæããŠãã ããã ããŒãèšå®ã§ã¯ãç¹°ãè¿ãééããŸãããæçµçãªåæåã³ãŒãã¯æ¬¡ã®ããã«ãªããŸããå®çŸ©ããŸãã
èšå®æ©èœèªäœã
- ãã¹ãŠã®ã¿ã€ããŒã®æ§é ã¯åãã§ãããããç¹å®ã®ãã€ã³ããŸã§ã®2çªç®ã®ã¿ã€ããŒèšå®ã¯åã®ã¿ã€ããŒãšåãã«ãªããŸãã ãŸããã¿ã€ããŒãåæåãã颿°ãäœæããŸãã
圌女ã¯ç§ã«ãšã£ãŠãã®ããã«èŠããŸãã - ããã«ããã¹ãŠãæåã®ã¿ã€ããŒã®å Žåãšåãã§ãARRã®ã¿ã125ïŒ0.5ç§ïŒã§ã¯ãªãã10ïŒ1/25ïŒã§ãã
ã¬ãžã¹ã¿ãŒå
å¡« MDR_RST_CLK->PER_CLOCK |= RST_CLK_PCLK_TIMER2;
- 次ã«ãCNTãšARRãäžèŽãããšãã«äžæããå¿
èŠããããŸãã ããã«ã¯ãIEã¬ãžã¹ã¿ãå¿
èŠã§ãã äžæãåŒãèµ·ããããŸããŸãªã±ãŒã¹ã®äžã§ãæãåçŽãªãã®ãå¿
èŠã§ãïŒCNT_ARR_EVENT_IEã
MDR_TIMER2->IE = TIMER_IE_CNT_ARR_EVENT_IE;
- ããã§ãCNT == ARRã§å²ã蟌ã¿ãçºçããŸããã ãã ããããã©ã«ãã§ã¯ã¿ã€ããŒå
šäœããã®å²ã蟌ã¿ã¯çŠæ¢ãããŠãããããäœãæäŸãããŸããã ããã¯ãNVICã³ã³ãããŒã©ãŒã®ã¿ã€ããŒå
šäœããã®å²ã蟌ã¿ãèš±å¯ããããšã§ä¿®æ£ã§ããŸãã åã®èšäºã§ããã§ã«åœŒã«å¯ŸåŠããŸããã ãããããã®åŸãããããã©ãã·ã¥ããŸããã å²ã蟌ã¿ãæå¹ãŸãã¯ç¡å¹ã«ããããã«ãCMSISã«ã¯ç¬èªã®æ©èœããããŸãã ãããã¯1ã€ã®SIã³ãã³ãã®åçŽãªãã¯ãã§ãããããæããããšã¯ãããŸããã ãã ããã³ãŒãã®å¯èªæ§ã¯å€§å¹
ã«åäžããŸãã
䜿çšã§ããCMSISã³ãã³ãã¯æ¬¡ã®ãšããã§ãã ããããã颿°NVIC_EnableIRQãå¿
èŠã§ãããã®ãã©ã¡ãŒã¿ãŒã¯ãMDR32Fx.hãã¡ã€ã«ã®è¡šã«ãããŸãã typedef enum IRQn { NonMaskableInt_IRQn = -14,
2çªç®ã®ã¿ã€ããŒãå¿
èŠã§ãã ãããã£ãŠã颿°ã¯æ¬¡ã®ããã«ãªããŸãã
NVIC_EnableIRQ(Timer2_IRQn);
- ã¿ã€ããŒããªã³ã«ããã ãã§ãæçµæ©èœã¯æ¬¡ã®åœ¢åŒã«ãªããŸãã
ããŒãªã³ã°ãã¿ã³ã®ã¿ã€ããŒ2ã®åæåã// 1ç§ããã25åå²ã蟌ã¿ãçæããã¿ã€ããŒãèšå®ããŸãã
void initTimerButtonCheckïŒvoidïŒ
{
MDR_RST_CLK-> PER_CLOCK | = RST_CLK_PCLK_TIMER2; //ã¿ã€ããŒ2ã®ã¯ãããã³ã°ããªã³ã«ããŸãã
MDR_RST_CLK-> TIM_CLOCK | = RST_CLK_TIM_CLOCK_TIM2_CLK_EN; //åºåãæåãªãã§ã¯ããã¯ãæäŸããŸãã
MDR_TIMER2-> CNT = 0; // 0ããã«ãŠã³ãããŸãã
MDR_TIMER2-> PSG = 32000-1; //ã¿ã€ããŒã¯TIM_CLK / 32000ã«ãªããŸãã
MDR_TIMER2-> ARR = 10; // 1ç§250ãã£ãã¯ã æ¯ç§25ã®ããŒãªã³ã°=> 250/25 = 10ã§ãã
MDR_TIMER2-> IE = TIMER_IE_CNT_ARR_EVENT_IE; // CNTãšARRã®äžèŽã«ããå²ã蟌ã¿ãæå¹ã«ããŸãã
NVIC_EnableIRQïŒTimer2_IRQnïŒ; //ã¿ã€ããŒå
šäœããã®å²ã蟌ã¿ãæå¹ã«ããŸãã
MDR_TIMER2-> CNTRL = TIMER_CNTRL_CNT_EN; //ã¿ã€ããŒããªã³ã«ããŸãã
}
- 次ã«ãå²ã蟌ã¿ãã³ãã©ãŒãäœæããå¿
èŠããããŸãã ãã®ååã¯ãstartup_MDR32F9Qx.sãã¡ã€ã«ã§å³å¯ã«ä¿®æ£ãããŠããŸãã ã¿ã€ããŒå
šäœã«å¯ŸããŠ1ã€ã®å²ã蟌ã¿ãã¯ã¿ãŒã®ã¿ããããŸãã ããã«ãããã¹ãŠã®ååã¯çŽæçã§ãã ããã¯Timer2_IRQHandlerãšåŒã°ããŸãã å
¥åãã©ã¡ãŒã¿ãŒã空ã®é¢æ°ãäœæããŸãã ãããŠãæåã®ã³ãã³ãã§å²ã蟌ã¿ãã©ã°ãã¯ãªã¢ããå¿
èŠããããŸãããã®ãããããã«ããŸããã ãã以å€ã®å Žåãå²ã蟌ã¿ãçµäºããåŸãæåã«æ»ããŸãã ãŸããæåŸã«ãã©ã°ããªã»ããããããšãäžå¯èœã§ããããã¯ããå®å
šã«ãªã»ãããããã®ã«ååãªæéããªãããã®çµæãæªä¿åã®ãã©ã°ã§å²ã蟌ã¿ãçºçããããã§ãã å²ã蟌ã¿ãçµäºããåã«ããã©ã°ã®ãªã»ãããšå²ã蟌ã¿ã®çµäºãåé¢ããã³ãã³ããå°ãªããšã1ã€å¿
èŠã§ãã STATUSã¬ãžã¹ã¿ã®ãã©ã°ãã¯ãªã¢ã§ããŸããã¿ã€ããŒããã®ã€ãã³ãã¯1ã€ãã䜿çšããªããããã¬ãžã¹ã¿å
šäœã«ã0ããå®å
šã«æžã蟌ãããšãã§ããŸãã è€æ°ã®ã€ãã³ããããå ŽåããŸãã©ã®ã€ãã³ããçºçãããã確èªããå¿
èŠããããŸãã ãã®å Žåã颿°ã¯æ¬¡ã®åœ¢åŒã«ãªããŸãã
void Timer2_IRQHandler (void) { MDR_TIMER2->STATUS = 0;
- èšäºã®åé ã§ãå²ã蟌ã¿ã«å
¥ããšãLEDã®ç¶æ
ã倿ŽããŠãå²ã蟌ã¿ãåŠçãããããšã瀺ãããšã«ããŸããã ãããè¡ãã«ã¯ãPC0ããã³PC1ãã³ã«æ¥ç¶ããã2ã€ã®ã«ã¹ã¿ã LEDã®ããããã䜿çšããå¿
èŠããããŸãããã®ç®çã§PC0ã䜿çšããããšããå§ãããŸãïŒããŒãäžã§ã¯å·ŠåŽã«ãããŸãïŒã ãŸããPC1ã«æ¥ç¶ãããŠããLEDã¯ããã€ã¯ãã³ã³ãããŒã©ãŒã®åºåããåæããã¯ã€ã€ãŒã§PA1ïŒPWMåºåïŒã«æ¥ç¶ããå¿
èŠããããŸãã
LEDã®åæåã¯æ¬¡ã®ããã«ãªããŸãã ãã®é¢æ°ã¯äž¡æ¹ã®LEDãèšå®ããŸããã 2çªç®ã®ãã®ã¯åæããïŒãžã£ã³ããŒïŒãéãã¯ãããŸããã - ããŒã«åãåãããŠãPWMã¿ã€ããŒã®ARRã®å€ã倿Žããã ãã§ãã ãããããã¿ã³ã¯3ã€ã®ç°ãªãããŒãã«æ¥ç¶ãããŠããŸãã ãã¡ãããæãªããã®æ¹æ³ã§ãããŸããŸããã ããŒãå
šäœããå€ãååŸãããã¹ã¯ã䜿çšããŠç¹å®ã®çµè«ã確èªããã«ã¯ããã®å ŽåãBitBandingã䜿çšããæ¹ãã¯ããã«äŸ¿å©ã§ãã 詳现ã«è§Šããªãå Žåã¯ãåšèŸºé åã®åãããïŒå
¥åºåããŒããå«ãïŒã«ç¬èªã®32ãããã»ã«ããããŸãã ã1ããŸãã¯ã0ãã®ãããããæžã蟌ãŸããŸãã ãããã®ç¶æ
ã«å¿ããŠã éåžžã®ã¬ãžã¹ã¿ãšåæ§ã«ãããã䜿çšã§ããŸãã ãšã³ããªã1ãã¯ãå®ã¬ãžã¹ã¿ã®ç®çã®ãããã«1ãäžããŸãã ã0ã-ããããã0ããããã®ã»ã«ã®ã¢ãã¬ã¹ãååŸããããã«ãéåžžã«äŸ¿å©ãªã«ããã·ã¹èšç®æ©ã䜿çšã§ããŸãã äŸãèŠãŠã¿ãŸãããã ããŒãBã®ãã³5ã«æ¥ç¶ãããUPããŒããããŸããããã¥ã¡ã³ãã«ç§»åããŠãããŒãBã®ã¬ãžã¹ã¿ã®ã¢ãã¬ã¹ã確èªããŸããã®ã¢ãã¬ã¹ããã¬ãžã¹ã¿ããã£ãŒã«ãã«å
¥åããããããããã£ãŒã«ãã«5.ãæžã蟌ããšãåºåã§0x43600014ãåŸãããŸãã ããŒãBã®ããã5ã§äœæ¥ããã®ã¯ããã®ã¢ãã¬ã¹ã®ã»ã«ã§äœæ¥ããŠããŸãããããã0x43600014 = 1ãæžã蟌ãã ãã§ã¯äžå¯èœã§ãã ãã ãã*ïŒuint32_t *ïŒ0x43600014 = 1-å¯èœã§ãã
ããã§ãåæ§ã®æ¹æ³ã§ããã¿ã³ã«æ¥ç¶ããããã¹ãŠã®åºåãæžãæããããšãã§ããŸãã åãããšãLEDã«ã€ããŠãå®è¡ã§ããŸãã #define LED0_FLAG *(uint32_t*)0x43700000
- çŸåšã¯ããã¿ã³ã®ããŒãªã³ã°ãšã¿ã€ããŒ1ã®ã¬ãžã¹ã¿ARRã®å€æŽãèšé²ããã ãã§ãã
çµæã®é¢æ°ã¯æ¬¡ã®ããã«ãªããŸããint PWM_speed = 125;
void Timer2_IRQHandlerïŒvoidïŒ
{
MDR_TIMER2-> STATUS = 0; //ãã©ã°ãã¯ãªã¢ããŸãã å¿
ç¶çã«æåã®ããŒã ã
LED1_FLAG =ïŒLED1_FLAG; //å²ã蟌ã¿ãåŠçãããããšã瀺ããŸãã
ifïŒUP_FLAG == 0ïŒPWM_speed--; //ããããã®ããŒãæŒãããŠãããã©ããã確èªããŸãã æŒãããå Žåã¯ãé »ç¹ã«äœããããŠãã ããã
else ifïŒDOWN_FLAG == 0ïŒPWM_speed ++;
else ifïŒLEFT_FLAG == 0ïŒPWM_speed--;
else ifïŒRIGHT_FLAG == 0ïŒPWM_speed ++;
ifïŒPWM_speed <1ïŒPWM_speed = 1; //åšæ³¢æ°ã250 Hzã0.5 Hzã®ç¯å²ãè¶
ããªãããšã確èªããŸãã
ãã以å€ã®å ŽåïŒPWM_speed> 500ïŒPWM_speed = 500;
MDR_TIMER1-> ARR = PWM_speed; //é »åºŠã倿ŽããŸãã
}
- ã¡ã€ã³é¢æ°mainã«ã¯ãäžèšã®ãã¹ãŠã®é¢æ°ã®åæã®ã¿ãå«ãŸããŸãã
ãããªæãã§ããint mainïŒvoidïŒ
{
initTimerPWMledïŒPWM_speedïŒ; // PWMãå®è¡ããŸãã ãã©ã¡ãŒã¿ãŒã¯PWMé床ã§ãã
initPinForButtonïŒïŒ; //ãã¿ã³ãã«ã¹ã¿ãã€ãºããŸãã
initPinPortCForLedïŒïŒ; // LEDæäœïŒããŒãèªã¿åãããŸãïŒã
initTimerButtonCheckïŒïŒ; //ã¿ã€ããŒãåæåããŸãã
ïŒ1ïŒ
{
}
}
çµè«ã®ä»£ããã«
ãã®èšäºã§ã¯ãSPLã©ã€ãã©ãªãŒã䜿çšããã«ã¿ã¹ã¯ã®å®è£
ã調ã¹ãŸããã æ¬¡ã®èšäºã§ã¯ãåãã¿ã¹ã¯ãå®è£
ããŸãããSPLã®ã¿ã䜿çšããŠçµæãæ¯èŒããŸãã
githubã®æçµãããžã§ã¯ãå°ããªè¿œå
çŸæç¹ã§ã¯ãMilanderã¯SPLã®æ°ããæ¹èšçããªãªãŒã¹ããŠããŸãã æ®å¿µãªããããŸã å®å
šãªããŒãžã§ã³ã§ã¯ãããŸããã çŸåšã®ããŒãžã§ã³ã§ã¯ãkeilãŠã£ã³ããŠã§ã¬ãžã¹ã¿ã®ç¶æ
ãèŠãããšãã§ããŸããã ããããããã«ãã«ããŒãžã§ã³ããªãªãŒã¹ããããã®æ¬ ç¹ãä¿®æ£ãããŸãã æ°ããããŒãžã§ã³ã詊ããŠã¿ãã人ã®ããã«-ããã«
ããããªãããžã§ã¯ããžã®ãªã³ã¯ããã
ãŸã ã
以åã®èšäºã®ãªã¹ãã