Hardware Interfacing Workshops

Part II: GPIO Hardware Integration

เอกสารเตรียมความพร้อมสำหรับนิสิต

หัวข้อ: การเชื่อมต่อ LVGL กับ GPIO Hardware จริง LVGL Version: v9.2.0

ความต่อเนื่อง: ต่อจาก Part I (UI Only) → เชื่อมต่อ Hardware จริง


สารบัญ

  1. ภาพรวม Part II

  2. aic-eec GPIO API

  3. ตัวอย่างที่ 6: Hardware LED Control

  4. ตัวอย่างที่ 7: Hardware Button Status

  5. ตัวอย่างที่ 8: Hardware ADC Display

  6. ตัวอย่างที่ 9: Hardware GPIO Dashboard

  7. ตัวอย่างที่ 10: PWM LED Brightness

  8. ตัวอย่างที่ 11-12: CAPSENSE

  9. แบบฝึกหัด


1. ภาพรวม Part II

Part I vs Part II

รายการ
Part I (Ex1-5)
Part II (Ex6-12)

UI Widgets

ใช้ LVGL เหมือนกัน

ใช้ LVGL เหมือนกัน

ข้อมูล

Simulated (จำลอง)

Real Hardware

GPIO

Virtual LED/Button

Real LED/Button บนบอร์ด

ADC

Random values

Potentiometer จริง

ไฟล์โค้ด

week3_examples.c

week3_hw_examples.c

API ใช้

LVGL only

LVGL + aic-eec API

โครงสร้างไฟล์

WHY: ทำไมต้องแยก Part I และ Part II?

  1. Part I - เรียนรู้ UI design โดยไม่ต้องมี Hardware

  2. Part II - นำ UI ที่ออกแบบไว้มาเชื่อมต่อกับ Hardware จริง

  3. Reusable - UI patterns จาก Part I ใช้ซ้ำได้ใน Part II


2. aic-eec GPIO API

2.1 LED Control API

2.2 Button API

Button Pin Configuration

Button
Macro
Pin
Pull-up
Active

USER Button 1

AIC_BTN_USER

P8_3 (SW2)

Internal

Active Low

USER Button 2

AIC_BTN_USER2

P8_7 (SW4)

Internal

Active Low

Note: ปุ่มเป็น Active Low = กดแล้วอ่านค่าเป็น 0 แต่ API จะ return true เมื่อกด

2.3 PWM API

2.4 Hardware Pin Configuration & PWM Limitation

สำคัญ: ไม่ใช่ทุก LED ที่ทำ PWM dimming ได้!

LED
Pin
PWM Support
หมายเหตุ

LED1 (Red)

P16_7

❌ GPIO only

ON/OFF เท่านั้น

LED2 (Green)

P16_6

❌ GPIO only

ON/OFF เท่านั้น

LED3 (Blue)

P16_5

✅ TCPWM0_LINE5

Dimming ได้

เหตุผล: ใน BSP (Board Support Package) เฉพาะ Blue LED (P16_5) ที่ถูก route ไปที่ PWM output (TCPWM0) ผ่าน HSIOM (High Speed I/O Matrix) ส่วน Green และ Red เป็น GPIO ธรรมดา ทำได้แค่ ON/OFF

ผลต่อตัวอย่าง:

  • Ex6: ปุ่ม ON/OFF ควบคุม Green LED, Slider ควบคุม Blue LED (PWM dimming)

  • Ex10: PWM Brightness ใช้ได้กับ Blue LED เท่านั้น

API Summary Table

Function
หน้าที่
Return

aic_gpio_init()

เริ่มต้น GPIO ทั้งหมด

void

aic_gpio_led_set(led, state)

ตั้งค่า LED

void

aic_gpio_led_toggle(led)

สลับสถานะ LED

void

aic_gpio_led_get(led)

อ่านสถานะ LED

true/false

aic_gpio_button_read(btn)

อ่านปุ่มกด

true=pressed

aic_gpio_pwm_set_brightness(led, val)

ตั้งความสว่าง

void


3. ตัวอย่างที่ 6: Hardware LED Control

เป้าหมาย

ควบคุม LED 3 ดวง (แดง, เขียว, น้ำเงิน) บนบอร์ดจริง

โค้ดหลัก

CAUTION: ข้อควรระวัง

  • ต้องเรียก aic_gpio_init() ก่อนใช้งาน LED

  • LED Widget บน UI และ Hardware LED ต้อง sync กัน

  • ใช้ (void*)(intptr_t)i เพื่อส่ง index ผ่าน user_data


4. ตัวอย่างที่ 7: Hardware Button Status (2 Buttons)

เป้าหมาย

แสดงสถานะปุ่ม USER ทั้ง 2 ปุ่มบนบอร์ดแบบ Real-time

UI Layout

โค้ดหลัก

WHY: ทำไมใช้ Timer แทน Event?

  • GPIO Button ของ PSoC ไม่มี LVGL Input Device driver

  • ต้อง poll สถานะเอง ผ่าน lv_timer_create()

  • 50ms interval ให้การตอบสนองที่รวดเร็วพอ

การทดสอบ

Action
ผลลัพธ์

กด SW2

LED ซ้าย (Cyan) ติด + แสดง "PRESSED"

กด SW4

LED ขวา (Orange) ติด + แสดง "PRESSED"

กดทั้ง 2 ปุ่ม

LED ทั้ง 2 ติดพร้อมกัน

ปล่อยปุ่ม

กลับเป็น "Released"


5. ตัวอย่างที่ 8: Hardware ADC Display

เป้าหมาย

อ่านค่า Potentiometer จริงและแสดงบน Slider/Bar

ADC API

สถาปัตยกรรม Dual-Core สำหรับ ADC (AAC)

PSoC Edge E84 ใช้ Autonomous Analog Controller (AAC) ซึ่งเป็น Shared Peripheral ระหว่าง CM33 และ CM55:

ขั้นตอนการทำงาน

Step
Core
Function
การทำงาน

1

CM33

Cy_AutAnalog_Init()

เขียน config ลง AAC registers

2

CM33

Cy_AutAnalog_StartAutonomousControl()

เริ่ม ADC sampling อัตโนมัติ

3

-

AAC Hardware

Sample ADC ต่อเนื่อง เก็บผลลง Result Register

4

CM55

Cy_AutAnalog_SAR_ReadResult()

อ่านตรงจาก Result Register

ทำไมไม่ต้องใช้ IPC (Inter-Processor Communication)?

  1. Shared registers - ทั้ง 2 cores เข้าถึง AAC registers ได้ผ่าน Memory-Mapped I/O

  2. Autonomous operation - AAC ทำงานเอง ไม่ต้องรอ CM33

  3. Read-only on CM55 - CM55 แค่อ่านผลลัพธ์ ไม่ต้องเขียน config

Code ที่ต้องแก้ไข

1. proj_cm33_ns/main.c - เพิ่ม AAC initialization:

2. proj_cm55/aic-eec/sensors.c - อ่าน ADC จาก AAC:

UI Layout (New)

  • สีเขียว (Green): ADC Raw Value - Slider + Label

  • สีฟ้า (Cyan): Percentage - Bar + Label

  • สีเหลือง (Yellow): Voltage - ตัวหลักใหญ่

โค้ดหลัก

CAUTION: Read-only Slider


6. ตัวอย่างที่ 9: Hardware GPIO Dashboard

เป้าหมาย

รวม LED + Button + ADC ไว้ในหน้าจอเดียว พร้อม Blue LED ที่ควบคุมด้วย Potentiometer (PWM)

การทำงาน

Component
ฟังก์ชัน

Red LED

Toggle ON/OFF ด้วย Switch

Green LED

Toggle ON/OFF ด้วย Switch

Blue LED

ควบคุมความสว่างด้วย POT (PWM 0-100%)

USER BTN2 (SW4)

แสดงสถานะกด/ปล่อย

POT (ADC)

อ่านค่าและควบคุม Blue LED brightness

All ON/OFF

เปิด/ปิด LED ทั้งหมดพร้อมกัน

Layout

โค้ดโครงสร้าง

การทดสอบ

Action
ผลลัพธ์

Toggle Red Switch

Red LED บนบอร์ดติด/ดับ

Toggle Green Switch

Green LED บนบอร์ดติด/ดับ

หมุน POT

Blue LED สว่าง/หรี่ (0-100%) + Blue widget dim

กด SW4

LED status เป็นสีเขียว + "PRESSED"

กด All ON

LED ทั้ง 3 ติด + toggles checked

กด All OFF

LED ทั้ง 3 ดับ + toggles unchecked


7. ตัวอย่างที่ 10: PWM LED Brightness

เป้าหมาย

ควบคุมความสว่าง LED ด้วย PWM ผ่าน Slider

โค้ดหลัก

CAUTION: PWM Support

  • บน PSoC Edge E84 เฉพาะ Blue LED รองรับ Hardware PWM

  • Red/Green LED ใช้ได้แค่ ON/OFF


8. ตัวอย่างที่ 11-12: CAPSENSE

Ex11: CAPSENSE UI Mockup

  • สร้าง UI สำหรับ CAPSENSE Buttons และ Slider

  • ยังไม่เชื่อมต่อ Hardware (ใช้ปุ่มจำลองบนหน้าจอ)

  • เตรียม UI ก่อนเชื่อม Hardware

Ex12: CAPSENSE Hardware (Placeholder)

  • เชื่อมต่อ CAPSENSE จริงผ่าน I2C

  • Coming Soon - ต้องมี Driver เพิ่มเติม


9. แบบฝึกหัด

แบบฝึกหัดที่ 1: LED Pattern

สร้างโปรแกรมที่แสดง LED pattern ต่างๆ:

  • ไฟวิ่ง (R → G → B → R → ...)

  • กระพริบพร้อมกัน

  • Fade in/out ด้วย PWM

แบบฝึกหัดที่ 2: Button Counter

  • นับจำนวนครั้งที่กดปุ่ม USER

  • แสดงค่าบนหน้าจอ

  • Reset เมื่อกดค้าง 2 วินาที

แบบฝึกหัดที่ 3: ADC Threshold

  • ตั้งค่า threshold ด้วย Slider

  • เมื่อ ADC > threshold ให้ LED ติด

  • แสดงสถานะ "ABOVE" / "BELOW"

แบบฝึกหัดที่ 4: Combined Dashboard

ออกแบบ Dashboard ที่รวม:

  • 3 LED switches

  • Button counter

  • ADC gauge

  • PWM brightness control


Configuration

เปิดใช้งาน Example

แก้ไขไฟล์ example_selector.h:

Build และ Flash


อ้างอิง


หมายเหตุ: Part II ใช้ UI patterns เดียวกับ Part I แต่เพิ่มการเชื่อมต่อ Hardware จริงผ่าน aic-eec API

Last updated

Was this helpful?