# LED Brightness using PWM via PDL

## L*ab Objective:*

This Lab demonstrates the process of controlling an LED brightness using PWM via Peripheral Driver Library (PDL) on a PSoC 6 microcontroller.

## 🔥 Requirements

<table><thead><tr><th width="429">Resources</th><th>Links</th></tr></thead><tbody><tr><td>Computer</td><td>💻</td></tr><tr><td>ModusToolbox™ software v3.0 or later</td><td><a href="https://www.infineon.com/modustoolbox">Link</a></td></tr><tr><td>CY8CKIT-062S2-43012 Infineon Board</td><td><a href="https://github.com/Advance-Innovation-Centre-AIC/BIIL_MTB-100_Hello_World_and_LED_Blinking_Programming_Template/assets/88732241/0215501d-b774-4045-8e64-ef49e28d8404">Link</a></td></tr><tr><td>Technical Report</td><td><a href="https://www.dropbox.com/scl/fi/amaxc94pte0ut2i1r5ewx/Technical-Report-Lab00.paper?rlkey=b3xm3vrerz9xgv1glb30cvy9z&#x26;dl=0">dropbox</a></td></tr></tbody></table>

## 🚩 Let start

### Create Application

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FYkuKYh6aVcdXJtCIfFgA%2Fimage.png?alt=media&#x26;token=3762f247-cc7d-439f-b28f-69194e506d11" alt=""><figcaption><p>Create Application</p></figcaption></figure>

### Use Device Configurator and set the button pin to have a falling edge interrupt.

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FIQfENrEaCI0aH3np0YjR%2Fimage.png?alt=media&#x26;token=7655caf7-ba23-4d7e-9983-95e1c1fdf543" alt="" width="250"><figcaption><p>Open Device Configurator</p></figcaption></figure>

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FU5JWKtNGGbDmWInNQ64d%2Fimage.png?alt=media&#x26;token=1934c438-4220-466f-9a7c-e959ede71a23" alt=""><figcaption><p>Enable LED Pin </p></figcaption></figure>

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FKeOJvh47XrYRIMaHgsIU%2Fimage.png?alt=media&#x26;token=01d4a4bd-d67a-4976-b71c-1cd99ec7bc34" alt=""><figcaption><p>Set up Peripherals</p></figcaption></figure>

### Coding

* Coding: Open the main.c file and add the following code to the main(void) function.

{% code title="main.c" %}

```c
#include "cy_pdl.h"
#include "cybsp.h"

int main(void)
{
    cy_rslt_t result;

    /* Initialize the device and board peripherals */
    result = cybsp_init() ;
    if (result != CY_RSLT_SUCCESS)
    {
        CY_ASSERT(0);
    }

    /* Enable global interrupts */
    __enable_irq();

    // Initialize the TCPWM block
	Cy_TCPWM_PWM_Init(PWM_HW, PWM_NUM, &PWM_config);
	// Enable the TCPWM block
	Cy_TCPWM_PWM_Enable(PWM_HW, PWM_NUM);
	// Start the PWM
	Cy_TCPWM_TriggerReloadOrIndex(PWM_HW, PWM_MASK);

    for (;;)
    {
    	for(int i = 0; i < 500; i++){
    		Cy_TCPWM_PWM_SetCompare0(PWM_HW, PWM_NUM, i);
    		Cy_SysLib_Delay(10); // Delay 10 ms
    	}
    }
}
```

{% endcode %}

### Build the Application

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FURPtO3RG4zSzdFQVBzIy%2Fimage.png?alt=media&#x26;token=279fdd2a-ac04-4142-bfed-3fd1aaed10e9" alt=""><figcaption></figcaption></figure>

### Launching the Application

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FwIbXYtGRNDYaYwBkZGZ9%2Fimage.png?alt=media&#x26;token=de722e54-d2c4-46e9-9668-027009f4d653" alt=""><figcaption></figcaption></figure>

> Note: Before launching the program to the board, make sure that you have already connected the board to the computer through a USB cable.

<figure><img src="https://github.com/Advance-Innovation-Centre-AIC/BIIL_MTB-100_Hello_World_and_LED_Blinking_Programming_Template/assets/88732241/7a6bb6ef-cb63-4613-98a1-42f9617ad724" alt="" width="188"><figcaption><p>set up USB cable</p></figcaption></figure>

### Result&#x20;

<figure><img src="https://1856353139-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MClo3nC-1US0rbK8Qau%2Fuploads%2FQHQJgbwkwuBXZb9bGWmq%2Fimage.png?alt=media&#x26;token=361694aa-12e4-43ef-8001-4982d0e52336" alt="" width="563"><figcaption><p>LED will gradually change intensity (LED Brightness).</p></figcaption></figure>

{% hint style="info" %}
If you chose a period of 100, you can easily set the duty cycle from 0 to 100 by changing the compare value. Just be sure to use a clock that is fast enough so that even when divided by 100 it is faster than a human eye can see so that the LED appears dim instead of blinking
{% endhint %}

> #### 🎉 <mark style="color:blue;">Congratulations! You can now complete Lab110</mark>

## Supported toolchains (make variable 'TOOLCHAIN')

* GNU Arm® embedded compiler v10.3.1 (`GCC_ARM`) - Default value of `TOOLCHAIN`
* Arm® compiler v6.16 (`ARM`)
* IAR C/C++ compiler v9.30.1 (`IAR`)

## Supported kits (make variable 'TARGET')

* [PSoC™ 62S2 Wi-Fi Bluetooth® pioneer kit](https://www.infineon.com/CY8CKIT-062S2-43012) (`CY8CKIT-062S2-43012`)
* [PSoC™ 62S1 Wi-Fi Bluetooth® pioneer kit](https://www.infineon.com/CYW9P62S1-43438EVB-01) (`CYW9P62S1-43438EVB-01`)
* [PSoC™ 62S1 Wi-Fi Bluetooth® pioneer kit](https://www.infineon.com/CYW9P62S1-43012EVB-01) (`CYW9P62S1-43012EVB-01`)
* [PSoC™ 62S3 Wi-Fi Bluetooth® prototyping kit](https://www.infineon.com/CY8CPROTO-062S3-4343W) (`CY8CPROTO-062S3-4343W`)

## Related resources

| Resources                       | Links                                                                                                                                                      |
| ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ModusToolbox™ Software Training | [link](https://www.dropbox.com/sh/waj898o4o8eccx0/AAB3hBBaIQo2OvJ5-fubGJIha/training-modustoolbox-level1-getting-started-master/Manual/Ch2-Tools.pdf?dl=0) |

## Other resources

Infineon provides a wealth of data at [www.infineon.com](http://www.infineon.com) to help you select the right device, and quickly and effectively integrate it into your design.

## Document history

Document title: *BILL\_MTB-110* – LED Brightness using PWM via PDL<br>

<table><thead><tr><th width="149">Version</th><th>Description of change</th></tr></thead><tbody><tr><td>1.0.0</td><td>Lab 110: Learn basic GPIO of controlling LED brightness using PWM via  Peripheral Driver Library (PDL) on a PSoC 6 microcontroller.</td></tr></tbody></table>

## Authors:

* *Assoc. Prof. Wiroon Sriborrirux*
* *Mr. Sriengchhun Chheang*
* *Mr. Sabol Socare*<br>

<br>

***

© BDH Corporation, 2022-2023
