新入社員がゼロから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);
}
}

メーカー情報を見る

お問い合わせ
ページの
先頭へ