01076051KMITL

Microcontroller Project

สื่อการสอนวิชาไมโครคอนโทรลเลอร์ — ระบบฝังตัวและสถาปัตยกรรม Cortex-M

เว็บไซต์ประกอบการเรียนรายวิชา 01076051 Microcontroller Project (KMITL). แต่ละบทมีเนื้อหา ตาราง โค้ดตัวอย่าง กล่องเชื่อมโยงกับ LAB การจำลองภาพเชิงโต้ตอบ (interactive visualization) และแบบฝึกหัดพร้อมเฉลย.

บทเรียน

Lec0101076051

Introduction to Embedded Systems

บทที่ 1: แนะนำระบบฝังตัว (Embedded Systems)

รอบตัวเราเต็มไปด้วยคอมพิวเตอร์ที่เรา “มองไม่เห็น” ซ่อนอยู่ในหม้อหุงข้าว เครื่องซักผ้า รถยนต์ และนาฬิกาอัจฉริยะ. บทนี้พาไปรู้จักว่า “ระบบฝังตัว” คืออะไร ต่างจากคอมพิวเตอร์ทั่วไปอย่างไร และทำไมหัวใจของมันคือ microcontroller.

เข้าสู่บทเรียน
Lec0201076051

Computer Organization & Cortex-M Architecture

บทที่ 2: องค์กรของคอมพิวเตอร์และสถาปัตยกรรม Cortex-M

บทนี้เปิดฝาดูว่าข้างในชิปทำงานอย่างไร — ภาษาถูกแปลงเป็นบิต, หน่วยความจำจัดวางอย่างไร, register คืออะไร, สถาปัตยกรรม Cortex-M. ความเข้าใจนี้คือเหตุผลเบื้องหลังหลายอย่างใน Lab (เช่น ทำไมใช้ global).

เข้าสู่บทเรียน
Lec0301076051

GPIO — General Purpose Input/Output

บทที่ 3: การใช้งานขาเข้า/ออกดิจิทัล (GPIO)

GPIO คือสะพานพื้นฐานที่เชื่อม MCU กับโลกจริง — ขับ LED, อ่านปุ่มกด, ส่ง/รับสัญญาณดิจิทัลกับ IC อื่น. บทนี้เจาะว่าขาแต่ละขาถูกตั้งโหมดด้วย register อะไร (MODER/OTYPER/OSPEEDR/PUPDR), ความต่าง push-pull vs open-drain, การใช้ pull-up/pull-down, การเขียนบิตแบบ atomic ด้วย BSRR, Schmitt trigger กับ debounce และการเข้าถึง register ผ่านภาษา C ซึ่งเป็นหัวใจของ Lab01/Lab02.

เข้าสู่บทเรียน
Lec0401076051

Embedded C

บทที่ 4: การเขียนโปรแกรมภาษา C สำหรับไมโครคอนโทรลเลอร์

ภาษา C เป็นภาษาหลักของงาน embedded เพราะอยู่ใกล้ฮาร์ดแวร์พอที่จะคุม register ได้ แต่ยังอ่านง่ายกว่า assembly. บทนี้ปูโครงสร้างโปรแกรม C สำหรับ MCU, การเลือก data type จาก stdint.h ให้ตรงขนาด, operator และ bit masking ที่ใช้คุมบิตของ GPIO, control structures และ function (pass by value vs reference) — ทั้งหมดคือเครื่องมือที่ใช้จริงใน Lab01/Lab02.

เข้าสู่บทเรียน
Lec0501076051

UART — Serial Communication

บทที่ 5: การสื่อสารอนุกรมด้วย UART / USART

เวลาเราอยากให้ไมโครคอนโทรลเลอร์ “คุย” กับคอมพิวเตอร์ หรือกับอุปกรณ์อื่น เช่น โมดูล Bluetooth หรือ GPS เรามักส่งข้อมูลเป็นอนุกรม (Serial) คือส่งทีละบิตต่อกันไปบนสายเส้นเดียว. บทนี้ว่าด้วย UART ซึ่งเป็นการสื่อสารอนุกรมแบบแรกและพื้นฐานที่สุด เราจะดูว่า 1 เฟรมข้อมูลหน้าตาเป็นอย่างไร ทำไมต้องมีบิตเริ่ม-บิตหยุด (start/stop bit) ความต่างระหว่างสัญญาณระดับ TTL กับ RS-232 และวิธีเขียนโปรแกรมรับส่งข้อมูลผ่าน USART3 บนบอร์ด NUCLEO-F767ZI.

เข้าสู่บทเรียน
Lec0601076051

Interrupts & Exceptions

บทที่ 6: การขัดจังหวะ (Interrupt) และข้อยกเว้น (Exception)

ตอนอ่านปุ่มกดในบทก่อน ๆ เราใช้วิธี “คอยไปเช็คเรื่อย ๆ” (polling) ซึ่งเปลือง CPU และบางทีทำให้ระบบดูหน่วง. บทนี้แนะนำวิธีที่ดีกว่าคือ interrupt — ปล่อยให้ฮาร์ดแวร์ “สะกิด” CPU เมื่อมีเหตุการณ์เกิดขึ้นจริง ๆ แทนที่จะคอยถามเอง. เราจะเข้าใจความต่างระหว่าง polling กับ interrupt, รู้จัก exception กับ interrupt controller ชื่อ NVIC ของ Cortex-M7, เรื่อง priority และ vector table และลงมือตั้งค่าปุ่ม B1 บน NUCLEO-F767ZI ให้ทำงานแบบ interrupt ผ่านโมดูล EXTI.

เข้าสู่บทเรียน
Lec0701076051

Analog-to-Digital Converter (ADC)

บทที่ 7: การแปลงสัญญาณอนาล็อกเป็นดิจิทัล (ADC)

โลกจริงรอบตัวเราเป็นสัญญาณอนาล็อกที่ต่อเนื่อง เช่น อุณหภูมิ แสง เสียง แรงดันไฟฟ้า. แต่ไมโครคอนโทรลเลอร์ประมวลผลได้เฉพาะตัวเลขดิจิทัล. บทนี้อธิบายว่า Analog-to-Digital Converter (ADC) ซึ่งเป็นวงจรที่ใช้แปลงแรงดันอนาล็อกให้เป็นเลขฐานสอง ทำงานอย่างไร, คำนวณค่าที่อ่านได้อย่างไร, มีโครงสร้างแบบใดบ้าง และ ADC ในชิป STM32F767 ใช้งานจริงอย่างไร.

เข้าสู่บทเรียน
Lec0801076051

Timer and PWM

บทที่ 8: วงจรจับเวลาและการสร้างสัญญาณ PWM

งานฝังตัวจำนวนมากต้องการเวลาที่แม่นยำ เช่น ทำบางอย่างซ้ำทุก ๆ 1 วินาทีเป๊ะ หรือหรี่ไฟ LED และปรับความเร็วมอเตอร์. หัวใจของงานเหล่านี้คือวงจร Timer ซึ่งก็คือเคาน์เตอร์ที่นับตามสัญญาณนาฬิกา. บทนี้อธิบายว่า Timer ทำงานอย่างไร, คำนวณค่า prescaler และ auto-reload ให้ได้ช่วงเวลาที่ต้องการอย่างไร, และใช้ Timer สร้างสัญญาณ PWM เพื่อควบคุมความสว่าง LED และความเร็วมอเตอร์ได้อย่างไร.

เข้าสู่บทเรียน
Lec0901076051

Serial Communication: I2C

บทที่ 9: การสื่อสารอนุกรมแบบ I2C (Inter-Integrated Circuit)

บทนี้เรียนโปรโตคอลสื่อสารอนุกรมตัวที่ชื่อ I2C (อ่านว่า ไอ-สแควร์-ซี) ย่อมาจาก Inter-Integrated Circuit. จุดเด่นคือใช้สายสัญญาณเพียง 2 เส้นก็ต่ออุปกรณ์ได้หลายตัวพร้อมกันบนสายเดียว เพราะเป็นการสื่อสารแบบบัส (bus). เราจะไล่ตั้งแต่สายสัญญาณ, การแบ่งบทบาท Master/Slave, ระบบ address, จังหวะ start/stop, จนถึงตัวอย่างจริงคือการอ่านเซนเซอร์วัดอุณหภูมิและความชื้น AM2320 ผ่าน I2C ของบอร์ด NUCLEO-F767ZI.

เข้าสู่บทเรียน
Lec1001076051

Serial Communication: SPI

บทที่ 10: การสื่อสารอนุกรมแบบ SPI (Serial Peripheral Interface)

ต่อจาก UART (asynchronous) และ I2C (synchronous แบบบัส 2 เส้น) บทนี้เรียน Serial protocol ตัวที่สามคือ SPI (Serial Peripheral Interface) ซึ่งเป็น synchronous เช่นกันแต่ใช้สาย 4 เส้น. SPI เร็วกว่า I2C ใช้ chip select เลือก Slave แทน address และรับ-ส่งข้อมูลพร้อมกันได้ (full-duplex). เราจะดูสายสัญญาณ, การต่อ Slave หลายตัว, 4 โหมดของ clock และตัวอย่างอุปกรณ์จริงที่ใช้ SPI เช่น DAC ภายนอกและ SD Card.

เข้าสู่บทเรียน
Lec1101076051

LCD & Touch Screen

บทที่ 11: จอแสดงผล LCD และหน้าจอสัมผัส (Touch Screen)

บทนี้พาไปรู้จักว่าภาพดิจิทัลเก็บเป็นข้อมูลได้อย่างไร จอ LCD ควบคุมแสงทีละพิกเซลด้วยอะไร และหน้าจอสัมผัสแต่ละแบบ (resistive / capacitive / infrared) ทำงานต่างกันตรงไหน. จากนั้นลงมือต่อจอ TFT ที่มีชิป ILI9341 เข้ากับบอร์ด NUCLEO-F767ZI ผ่าน SPI แล้วอ่านตำแหน่งที่นิ้วแตะ.

เข้าสู่บทเรียน
Lec1201076051

Real-Time Operating System (RTOS)

บทที่ 12: ระบบปฏิบัติการเรียลไทม์ (RTOS) ด้วย FreeRTOS

เมื่อระบบฝังตัวต้องทำหลายงานพร้อมกัน (เล่นเพลง + อ่านไฟล์ + รับปุ่ม + วาดจอ) การเขียน scheduling เองบน CPU คอร์เดียวจะยากมาก. บทนี้แนะนำ RTOS ที่ช่วยสลับงานให้ดูเหมือนทำพร้อมกัน พร้อมแนวคิด task, context switch, ความเป็น real-time, และการจัดการทรัพยากรร่วมด้วย mutex / semaphore / queue บน FreeRTOS กับบอร์ด NUCLEO-F767ZI.

เข้าสู่บทเรียน