新入社員がゼロからPSoC™マイコンを扱えるようになるまで
【第3話】 Lチカさせてみた
マイコン設計未経験の新入社員が、Infineon社のPSoC™を題材にマイコン設計を学んでいく動画シリーズです。
第3話「Lチカさせてみた」は、実践編として、PSoC™マイコンのLED点灯と、PWM(LEDの制御)を5分で分かりやすく解説しています。
・【実践!】Lチカ(LEDの点灯)
・【実践!】PWMを使用したLチカ(LEDの制御)
・これから電子工作を始める方
・PSoC™の使用方法について調べたい方
・PSoC™について学びたい方
「新入社員がゼロからPSoC™マイコンを扱えるようになるまで」
・【第1話】PSoC™について調べてみた
・【第2話】開発環境インストールしてみた
・02:02~で使用するコード
------------------------------------------------------------------------------------------------------------------------
/*******************************************************************************
* ヘッダー部分
* cy_pdl.h: PSoCのPeripheral Driver Library (PDL) を含むヘッダーで、ハードウェアペリフェラルを制御するためのAPIが定義されています。
* cybsp.h: ボードサポートパッケージ(BSP)に関するヘッダーで、PSoCボード固有の初期化や設定を行います。
*******************************************************************************/
#include "cy_pdl.h"
#include "cybsp.h"
/*******************************************************************************
* マクロ定義
* LED_DELAY_MS: LEDを点滅させる際のディレイ時間をミリ秒単位で定義しています。この場合、500ms (0.5秒) のディレイを意味します。
* CY_ASSERT_FAILED: アサーションが失敗したときに使用される値を定義します。
*******************************************************************************/
#define LED_DELAY_MS (500u)
#define CY_ASSERT_FAILED (0u)
/*******************************************************************************
*main関数
*******************************************************************************/
/*******************************************************************************
*デバイスとボードの初期化
*cybsp_init(): ボードとペリフェラルの初期化を行います。
*cybsp_init(): この関数は、ハードウェアの基本設定を行い、正常に初期化できればCY_RSLT_SUCCESSを返します。
*******************************************************************************/
int main(void)
{
cy_rslt_t result;
result = cybsp_init();
/*******************************************************************************
* 初期化失敗時の処理
* CY_ASSERT(CY_ASSERT_FAILED): 初期化に失敗した場合、プログラムの実行を停止します。
*******************************************************************************/
if (result != CY_RSLT_SUCCESS)
{
CY_ASSERT(CY_ASSERT_FAILED);
}
/*******************************************************************************
* メインループでLEDの点滅
* Cy_GPIO_Inv: LEDのピン状態を反転(ON/OFF切り替え)します。
* Cy_SysLib_Delay: 指定したミリ秒だけ待機する関数です。この場合、500ms(0.5秒)待機します。
* このループは無限に続き、0.5秒ごとにLEDの状態を切り替え、点滅させます。したがって、LEDは1Hz(1秒に1回点滅)で動作します。
*******************************************************************************/
for(;;)
{
Cy_GPIO_Inv(CYBSP_USER_LED1_PORT, CYBSP_USER_LED1_PIN);
Cy_SysLib_Delay(LED_DELAY_MS);
}
}
・04:36~で使用するコード
------------------------------------------------------------------------------------------------------------------------
/* ヘッダーファイルのインクルード*/
#include "cy_pdl.h"
#include "cybsp.h"
int main(void)
{
int32_t comp = 0;
int32_t inc = 1;
cy_rslt_t result;
#if defined (CY_DEVICE_SECURE)
cyhal_wdt_t wdt_obj;
result = cyhal_wdt_init(&wdt_obj, cyhal_wdt_get_max_timeout_ms());
CY_ASSERT(CY_RSLT_SUCCESS == result);
cyhal_wdt_free(&wdt_obj);
#endif
/* デバイスとボードの初期化 */
result = cybsp_init();
if (result != CY_RSLT_SUCCESS)
{
CY_ASSERT(0);
}
/* 割り込みの有効化 */
__enable_irq();
/* PWMの初期化とスタート */
Cy_TCPWM_PWM_Init(PWM_HW, PWM_NUM, &PWM_config);
Cy_TCPWM_PWM_Enable(PWM_HW, PWM_NUM);
Cy_TCPWM_TriggerStart(PWM_HW, PWM_MASK);
for (;;)
{
if(inc){
comp += 10*inc;
if(comp >= 1000){
comp = 1000;
inc = -1;
}else if(comp <= 0){
comp = 0;
inc = 1;
}
}
Cy_SysLib_Delay(10);
Cy_TCPWM_PWM_SetCompare0(PWM_HW, PWM_NUM, comp);
}
}