Embedded Systems Midterm Study Guide

เอกสาร HTML นี้เรียงเนื้อหาใหม่ให้เรียนจากพื้นฐานไปถึงโจทย์สอบ: Embedded Systems, ESP32, GPIO, timers, interrupts, 7-segment display และ ADC พร้อมสูตร ตัวอย่างคิด และภาพสไลด์ต้นฉบับครบทุกหน้า

Lecture 2-6 Mock Test 172 pages checked เปิดได้แบบ static HTML

อ่านยังไงให้เข้าใจตั้งแต่ 0

ภาพรวมของวิชานี้คือ “ทำให้ไมโครคอนโทรลเลอร์คุยกับโลกจริงได้” โลกจริงมีปุ่ม ไฟ LED เซนเซอร์ เวลา แรงดัน และเหตุการณ์ต่าง ๆ ส่วนไมโครคอนโทรลเลอร์เข้าใจแค่เลขดิจิทัล โปรแกรม และสัญญาณไฟฟ้า เนื้อหาทั้งหมดจึงวนอยู่กับการรับสัญญาณ, ประมวลผล, ควบคุมขา GPIO, จับเวลา, ตอบสนองเหตุการณ์ และแปลงสัญญาณ analog เป็นตัวเลข

เส้นทางการเรียน

  1. เข้าใจว่า embedded system คืออะไร
  2. รู้จัก ESP32 และข้อจำกัดของขา GPIO
  3. เขียนโปรแกรม Arduino ด้วย setup() และ loop()
  4. ควบคุม digital input/output เช่น LED และปุ่ม
  5. ใช้ timer เพื่อจับเวลาอย่างแม่นยำ
  6. ใช้ interrupt เพื่อให้ตอบสนองทันทีโดยไม่ polling
  7. ใช้ ADC เพื่ออ่านแรงดันจาก sensor/potentiometer

แกนคิดของข้อสอบ

  • อธิบาย concept พร้อมตัวอย่างจริง
  • คำนวณเวลา clock, instruction, timer tick, baud
  • แยก polling กับ interrupt ให้ชัด
  • ตัดสิน LED ON/OFF จากแรงดัน anode/cathode
  • ใช้ bit shift และ bit mask เพื่อควบคุม LED หลายดวง
คำจำง่าย: Embedded system = ระบบคอมพิวเตอร์ที่ฝังอยู่ในอุปกรณ์เพื่อทำงานเฉพาะอย่าง ส่วน IoT = embedded system ที่เพิ่ม network/cloud/user interface เพื่อส่งข้อมูลและควบคุมระยะไกล

1. Embedded Systems และ IoT

Embedded System คืออะไร

Embedded system คือระบบคอมพิวเตอร์เฉพาะงานที่รวม hardware และ software เข้าด้วยกัน เพื่อทำหน้าที่ใดหน้าที่หนึ่งโดยเฉพาะ เช่น เครื่องซักผ้า ไมโครเวฟ smart thermostat ระบบ ABS ถุงลมนิรภัย pacemaker หรือ wearable tracker

คุณลักษณะสำคัญ

  • Real-time operation: ต้องตอบสนองภายในเวลาที่กำหนด เช่น airbag ต้องกางในระดับ milliseconds
  • Reliability: ต้องทำงานต่อเนื่องนาน ๆ และเชื่อถือได้ เช่น pacemaker
  • Efficiency: ใช้พลังงาน หน่วยความจำ และ CPU อย่างคุ้มค่า
  • Limited resources: RAM/ROM/พลังงานจำกัด จึงต้องเขียนโปรแกรมให้ประหยัด
  • Task-specific: ออกแบบมาเพื่อหน้าที่เฉพาะ ไม่ใช่คอมพิวเตอร์ทั่วไป

ส่วนประกอบ

  • Sensor: ตรวจจับโลกจริง เช่น อุณหภูมิ แสง การเคลื่อนไหว ตำแหน่ง
  • Microcontroller: อ่านข้อมูล ประมวลผล และสั่งงาน
  • Actuator: ทำให้เกิดการกระทำจริง เช่น relay, motor, LED
  • Firmware: โปรแกรมฝังตัวที่ควบคุม hardware และ logic ทั้งหมด

การจำแนกประเภท

ประเภทความหมายตัวอย่าง
Standaloneทำงานเองในเครื่อง ไม่ต้องต่อ networkMicrowave, washing machine, digital camera
Hard real-timeห้ามพลาด deadline เพราะอาจเกิดอันตรายหรือระบบล้มเหลวAirbag, pacemaker, industrial safety
Soft real-timedeadline สำคัญ แต่พลาดบ้างได้ แค่คุณภาพลดลงVideo streaming, multimedia
Networked embeddedต่อ wired/wireless network เพื่อสื่อสารกับระบบอื่นSmart home, industrial IoT, remote health monitor

Embedded System vs IoT System

FeatureEmbedded SystemIoT System
เป้าหมายทำงานเฉพาะในเครื่องเชื่อมต่อ แลกเปลี่ยนข้อมูล และควบคุมระยะไกล
Connectivityมักไม่มี networkInternet/network enabled
OperationLocalLocal + remote
Complexityต่ำกว่าสูงกว่า เพราะมี cloud/app/security/data
Data usageจำกัดData-driven เช่น analytics, logging, notification
ตัวอย่างเครื่องซักผ้าปกติเครื่องซักผ้าที่สั่งผ่าน app และแจ้งเตือนผ่าน cloud
Embedded architecture: Sensor -> Microcontroller -> Actuator IoT architecture: Sensor -> Microcontroller -> Network -> Cloud -> User Interface -> Actuator

2. ESP32 Architecture

ESP32 เป็น low-cost, low-power microcontroller จาก Espressif ที่มี Wi-Fi/Bluetooth ในตัว เหมาะทั้ง embedded และ IoT จุดเด่นคือ dual-core Tensilica Xtensa LX6 สูงสุดประมาณ 240 MHz ทำให้แยกงานระบบกับงานผู้ใช้และรองรับ multitasking ผ่าน FreeRTOS ได้ดี

ส่วนสาระที่ต้องรู้
Core 0 / PRO CPUมักดูแลงานระบบ เช่น Wi-Fi, Bluetooth, OS services
Core 1 / APP CPUมักใช้รัน user application
SRAMvolatile memory ข้อมูลหายเมื่อปิดไฟ ใช้เก็บ runtime variables และ temporary data ประมาณ 520 KB on-chip
Flashnon-volatile memory เก็บ firmware, constants, configuration
Wi-Fi2.4 GHz, ใช้ได้แบบ STA, AP, AP+STA
Bluetoothรองรับ Bluetooth Classic สำหรับ streaming และ BLE สำหรับงานประหยัดพลังงาน

Peripherals สำคัญ

GPIO

ขาดิจิทัล input/output เช่น ปุ่ม, LED, relay มี 34 GPIO แต่ใช้งานทั่วไปได้ไม่เท่ากัน

ADC

แปลง analog voltage เป็น digital value แบบ 12-bit มี 18 channels แบ่งเป็น ADC1 และ ADC2

DAC

แปลง digital เป็น analog มี 2 pins คือ GPIO25 และ GPIO26

UART

serial communication สำหรับ debug/คุยกับ module เช่น UART0 ผ่าน USB, UART2 ที่ GPIO16/17

SPI

สื่อสารความเร็วสูงกับ display, memory, sensor เช่น VSPI: MOSI 23, MISO 19, SCK 18, CS 5

I2C

two-wire bus ใช้ SDA/SCL ต่อ sensor หลายตัวบน bus เดียว default SDA 21, SCL 22

GPIO ที่ต้องระวัง

  • GPIO 6-11 ต่อกับ SPI flash ภายใน ใช้ผิดอาจทำให้ระบบล้มเหลว
  • GPIO 34-39 เป็น input only ใช้ output ไม่ได้
  • GPIO 2 มีบทบาทตอน boot และมักต่อกับ built-in LED บนบางบอร์ด ใช้ได้หลัง boot แต่ต้องระวังสถานะตอนเริ่มระบบ
  • ADC2 จะชนกับ Wi-Fi ถ้าเปิด Wi-Fi ควรใช้ ADC1 pins คือ GPIO32-39

คำศัพท์และสูตรพื้นฐาน

Clock period: T = 1 / f Instruction time: t = C / f โดย C คือจำนวน clock cycles Baud bit time: time per bit = 1 / baud rate
โจทย์ตัวอย่างวิธีคิดคำตอบ
f = 16 MHz หา periodT = 1 / 16,000,00062.5 ns หรือ 0.0625 us
f = 80 MHz, instruction ใช้ 4 cyclest = 4 / 80,000,00050 ns หรือ 0.05 us
9600 baud หา time per bit1 / 9600ประมาณ 104.17 us ต่อ bit

3. Arduino IDE และโครงโปรแกรม

Lecture 2-3 มี screenshot ขั้นตอนติดตั้ง Arduino IDE และ ESP32 board support หลายหน้า ส่วนที่ต้องจำสำหรับใช้งานจริงมีลำดับดังนี้

  1. ดาวน์โหลด Arduino IDE จาก arduino.cc/en/software
  2. ติดตั้งและเปิด IDE
  3. ไปที่ Preferences แล้วใส่ Additional Boards Manager URL: https://espressif.github.io/arduino-esp32/package_esp32_index.json
  4. เปิด Boards Manager แล้วค้นหา esp32 จาก Espressif และติดตั้ง
  5. เลือก board ที่ตรงกับบอร์ด เช่น ESP32 Dev Module และเลือก COM port
  6. เขียน sketch, verify/compile, upload, เปิด Serial Monitor ถ้าต้องดู output

Anatomy of Arduino/ESP32 C Program

void setup() {
  // Runs once after power-up or reset.
  // Use it for pinMode, Serial.begin, timer setup, ADC setup.
}

void loop() {
  // Runs forever after setup().
  // Put the main repeated behavior here.
}
  • Statement: คำสั่งหนึ่งบรรทัดที่ลงท้ายด้วย semicolon เช่น digitalWrite(2, HIGH);
  • Block: กลุ่มคำสั่งในวงเล็บปีกกา { ... } ใช้กำหนด scope และรวม logic

4. Digital Input/Output, LED และ Resistors

LED ทำงานอย่างไร

LED เป็น diode ที่เปล่งแสงเมื่อมีกระแสไหลจาก anode (+) ไป cathode (-) ในสภาวะ forward bias ถ้ากลับขั้วจะเป็น reverse bias และโดยทั่วไปจะไม่สว่าง

คำความหมายผลต่อ LED
Anodeขั้วบวกควรต่อแรงดันสูงกว่า cathode เพื่อให้ติด
Cathodeขั้วลบมักต่อไป GND หรือขา GPIO ที่ดึง LOW ใน common anode
Forward biasV_anode > V_cathodeถ้า voltage drop ถึงค่าที่ต้องการ LED ติด
Reverse biasV_anode < V_cathodeLED ดับและกันกระแสย้อนกลับ

Pull-up และ Pull-down

input pin ที่ไม่ต่ออะไรจะเป็น floating ทำให้อ่านค่า random จึงต้องใช้ resistor เพื่อกำหนด default logic

Pull-up

ต่อ input ไป Vcc เป็นค่า default HIGH เมื่อกดปุ่มหรือมี logic ต่อ GND จะอ่าน LOW

Pull-down

ต่อ input ไป GND เป็นค่า default LOW เมื่อ logic ต่อ Vcc จะอ่าน HIGH

const int buttonPin = 4;
const int ledPin = 2;

void setup() {
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  int pressed = digitalRead(buttonPin) == LOW;
  digitalWrite(ledPin, pressed ? HIGH : LOW);
}

5. Timers in Microcontrollers

Timer คือ hardware peripheral ที่วัดช่วงเวลาได้แม่นยำโดยทำงานแยกจาก CPU แก่นของ timer คือ counter ที่เพิ่มหรือลดค่าตาม clock pulse จากแหล่ง clock ที่รู้ความถี่แน่นอน

Timer ทำงานเป็นขั้นตอน

StepActionคำอธิบาย
1Clock pulses arriveinternal oscillator สร้าง pulse เช่น APB clock 80 MHz
2Timer counts pulsestimer register เพิ่มทีละ 1 ต่อ tick
3Compare with alarmcomparator เช็กว่า counter เท่ากับ target หรือยัง
4Trigger eventเมื่อ match อาจเกิด interrupt, toggle output, reset counter หรือทำหลายอย่างพร้อมกัน
Timer vs Counter: timer นับ pulse จาก clock ภายในเพื่อวัดเวลา ส่วน counter นับ event ภายนอก เช่น จำนวน pulse จาก sensor

ESP32 Timer Architecture

ESP32 มี 2 timer groups คือ Group 0 และ Group 1 แต่ละ group มี Timer 0 และ Timer 1 รวม 4 hardware timers เป็น 64-bit counters และมี interrupt แยกกัน

Configurable featureตัวเลือกความหมาย
Counter directionUp / Downนับเพิ่มหรือนับลด
Prescaler2 ถึง 65536หาร clock input ให้ timer clock ช้าลง
Alarm value64-bit valueค่าที่ทำให้ timer trigger
Auto-reloadEnable / Disableถึง alarm แล้ว reset เพื่อวนต่อหรือหยุด
InterruptEnable / Disableให้เกิด ISR เมื่อถึง alarm
TriggerEdge / Levelรูปแบบการ trigger interrupt

Resolution, Prescaler และ Range

Timer clock = clock frequency / prescaler Tick duration หรือ resolution = prescaler / clock frequency Required ticks = timer clock x desired delay seconds

ถ้า ESP32 ใช้ APB clock 80 MHz และตั้ง prescaler = 80 จะได้ timer clock = 1 MHz ดังนั้น 1 tick = 1 us ถ้าต้องการ 2 seconds ต้องตั้ง alarm = 2,000,000 ticks

Clock / PrescalerTimer clockTick durationเหมาะกับ
80 MHz / 180 MHz12.5 nsความละเอียดสูงมาก
80 MHz / 801 MHz1 usโจทย์ใน lecture และข้อสอบ
80 MHz / 800010 kHz100 usงานที่ไม่ต้องละเอียดมาก
Trade-off: resolution ยิ่งละเอียด tick ยิ่งเล็ก แต่ถ้า counter width จำกัด maximum measurable time จะสั้นลง ใน ESP32 เป็น 64-bit จึงมีช่วงวัดยาวมาก แต่ concept trade-off ยังต้องเข้าใจ

Timer Registers ที่ต้องรู้

  • TCNT: timer counter register เก็บค่าปัจจุบัน
  • TCCR: timer control register กำหนด mode และ clock source
  • OCR: output compare register เก็บ target compare
  • TIMSK: interrupt mask register เปิด/ปิด interrupt event
  • TIFR: interrupt flag register บอกว่าเกิด overflow/compare แล้วหรือยัง

Bit Extraction สำหรับ LED หลายดวง

สูตร (pulse_count >> n) & 0x01 ใช้ดึง bit ที่ n ออกมาเป็น 0 หรือ 1 เพื่อขับ LED แต่ละดวง เช่น pulse_count = 5 คือ binary 101

Expressionผลใช้กับ
(5 >> 0) & 0x011LED0 ติด
(5 >> 1) & 0x010LED1 ดับ
(5 >> 2) & 0x011LED2 ติด

6. Interrupts in Microcontrollers

Interrupt คือสัญญาณจาก hardware ที่หยุดงานปัจจุบันของ CPU ชั่วคราว แล้วบังคับให้ไปทำฟังก์ชันพิเศษชื่อ ISR หรือ Interrupt Service Routine เมื่อ ISR เสร็จ CPU จะกลับไปทำงานเดิมต่อ

AspectExplanation
What triggers it?Hardware events เช่น timer, button, sensor, UART receive
What happens?CPU saves state แล้วกระโดดไป ISR
After ISR?CPU restores state และ resume main program
Why use?ตอบสนอง real-time ได้โดยไม่ต้องเช็กซ้ำ ๆ แบบ polling

Polling vs Interrupts

PollingInterrupt
CPU ตรวจซ้ำตลอดเวลาhardware แจ้งเมื่อมี event
เสีย CPU cycles แม้ไม่มี eventCPU ว่างไปทำงานอื่นได้
response อาจช้าตามรอบ loopresponse ทันทีใกล้ real-time
เหมาะกับงานง่ายมาก ๆเหมาะกับ timer, sensor, button, communication

ประเภทของ Interrupt

  • GPIO interrupts: เกิดจาก rising, falling หรือ change ของขา input เช่นปุ่มหรือ sensor
  • Timer interrupts: เกิดเมื่อ hardware timer counter เท่ากับ alarm register
  • Peripheral interrupts: เกิดจาก UART, I2C, ADC เช่น TX done, RX done, data ready

Timer Interrupt ภายใน

โครงสร้าง hardware timer มี APB clock 80 MHz, prescaler, 64-bit counter, comparator, alarm register และ interrupt flag ทั้งหมดนับเองใน hardware โดยไม่ใช้ CPU cycles

IRAM_ATTR และ volatile: ใช้ IRAM_ATTR กับ ISR เพื่อให้ฟังก์ชันอยู่ใน instruction RAM และใช้ volatile กับตัวแปรที่ ISR แก้ไข เพื่อบอก compiler ว่าต้องอ่านค่าจาก RAM ทุกครั้ง ห้าม optimize เป็นค่าค้างใน register
volatile bool ledState = false;

void IRAM_ATTR onTimer() {
  ledState = !ledState;
  digitalWrite(2, ledState ? HIGH : LOW);
}

แนวคิด practice problem: ตั้ง timer 0 ของ group 1, prescaler 80 ให้ tick = 1 us, alarm = 2,000,000 ticks, auto-reload enabled แล้ว ISR ชื่อ onTimer() toggle LED ทุก 2 seconds

7. 7-Segment Display

7-segment display คือ display ที่ใช้ LED 7 ส่วน labeled a, b, c, d, e, f, g เพื่อแสดงเลข 0-9 และมักมี decimal point เพิ่มอีกหนึ่งจุด การควบคุมคือเปิด segment ที่ต้องการตามรูปของตัวเลข

ชนิดหลักการสัญญาณที่ทำให้ segment ติด
Common cathodecathode ของทุก segment ต่อร่วมไป GNDส่ง HIGH ไป segment นั้น
Common anodeanode ของทุก segment ต่อร่วมไป Vccส่ง LOW ไป segment นั้น

Segment ที่ติดสำหรับเลข 0-9

DigitSegments ON
0a b c d e f
1b c
2a b d e g
3a b c d g
4b c f g
5a c d f g
6a c d e f g
7a b c
8a b c d e f g
9a b c d f g

Practice problem ใน lecture ให้ต่อ common cathode กับ GPIO13, 12, 14, 27, 26, 25, 33 และใช้ timer interrupt ทุก 2 seconds เพื่อเพิ่ม digit 0 -> 9 แล้ววนกลับ 0 โดยไม่ polling ใน loop()

Binary to Decimal ด้วย Shift และ OR

decimal = (S2 << 2) | (S1 << 1) | S0 ตัวอย่าง S2=1, S1=0, S0=1 -> 100 | 000 | 001 = 101(binary) = 5

8. ADC: Analog to Digital Converter

โลกจริงมีปริมาณต่อเนื่อง เช่น temperature, pressure, light intensity, sound และ humidity แต่ microcontroller เข้าใจ binary 0/1 เท่านั้น ADC จึงทำหน้าที่แปลงแรงดัน analog ต่อเนื่องให้เป็นตัวเลข digital ที่โปรแกรมนำไปคำนวณได้

Analog vs Digital

  • Analog signal: ต่อเนื่อง รับค่าได้ทุกค่าระหว่างช่วง เช่น 0V ถึง 3.3V
  • Digital signal: แยกเป็นระดับ/ตัวเลข เช่น 0 หรือ 1 หรือค่า ADC 0-4095
  • sensor ส่วนใหญ่ให้ analog voltage ตามปริมาณที่วัด เช่น LDR เปลี่ยนแรงดันตามแสง, thermistor ตามอุณหภูมิ, potentiometer ตามตำแหน่ง knob

ADC Key Concepts

12-bit resolution = 2^12 = 4096 levels = raw value 0 ถึง 4095 Step size = Vref / (2^bits - 1) = 3.3 / 4095 = 0.0008059 V ประมาณ 0.806 mV Voltage = (ADC_raw / 4095) x 3.3 V
คำศัพท์ความหมาย
Resolutionจำนวนระดับที่ ADC แยกได้ ยิ่งมากยิ่งละเอียด
Reference voltageแรงดันสูงสุดที่ใช้เทียบ เช่น 3.3V
Sampling rateจำนวนครั้งที่อ่านสัญญาณต่อวินาที
Quantization errorerror จากการปัด analog continuous value ให้เป็นระดับ digital ใกล้ที่สุด

ESP32 ADC Architecture

ADC UnitChannels / Pinsหมายเหตุ
ADC1GPIO32, 33, 34, 35, 36, 37, 38, 39ควรใช้เมื่อเปิด Wi-Fi
ADC2GPIO0, 2, 4, 12, 13, 14, 15, 25, 26, 27ใช้ไม่ได้เสถียรเมื่อ Wi-Fi enabled เพราะ Wi-Fi ใช้ ADC2 ภายใน
AttenuationMeasurable voltage range
ADC_ATTEN_DB_00 ถึง 0.8V
ADC_ATTEN_DB_2_50 ถึง 1.1V
ADC_ATTEN_DB_60 ถึง 1.35V
ADC_ATTEN_DB_110 ถึง 3.3V
ข้อควรระวัง: ห้ามป้อนแรงดันเกิน 3.3V เข้า ADC pin, ห้ามปล่อย pin ลอยเพราะค่าจะ random, และถ้าใช้ Wi-Fi ให้เลือก ADC1 เสมอ

คำสั่งที่เจอใน lecture

CommandPurposeExample
analogRead(pin)อ่าน raw ADC valueint val = analogRead(34);
analogReadResolution(bits)ตั้ง resolution 9-12 bitsanalogReadResolution(12);
analogSetAttenuation(att)ตั้ง attenuation ทุก ADC channelsanalogSetAttenuation(ADC_11db);
analogSetPinAttenuation(pin, att)ตั้ง attenuation เฉพาะ pinanalogSetPinAttenuation(34, ADC_11db);
adcAttachPin(pin)attach GPIO เข้ากับ ADCadcAttachPin(34);
analogReadMilliVolts(pin)อ่าน voltage แบบ calibrated เป็น mVint mv = analogReadMilliVolts(34);

Real-world examples

  • LDR light measurement: LDR ต่อกับ fixed resistor เป็น voltage divider แรงดันตรงกลางเปลี่ยนตามแสง ใช้กับ automatic streetlights หรือ smart curtains
  • Battery voltage monitor: ใช้ voltage divider ลดแรงดัน battery ให้ไม่เกิน 3.3V แล้วคำนวณกลับเป็นแรงดันจริง
  • Potentiometer: ต่อปลายสองข้างกับ 3.3V และ GND แล้วต่อ wiper เข้า GPIO32 เมื่อหมุนไปทาง Vcc output voltage เพิ่ม เมื่อหมุนไปทาง GND output voltage ลด
const int potPin = 32;

void setup() {
  Serial.begin(115200);
  analogReadResolution(12);
  analogSetPinAttenuation(potPin, ADC_11db);
}

void loop() {
  int raw = analogRead(potPin);
  float voltage = (raw / 4095.0) * 3.3;
  Serial.printf("Raw: %d, Voltage: %.3f V\n", raw, voltage);
  delay(1000);
}

9. Mock Test พร้อมแนวคิดคำตอบ

Q1: Define key characteristics of Embedded Systems

ตอบด้วย 5 แกน: specific task, real-time response, reliability, efficiency, limited resources แล้วใส่ตัวอย่าง เช่น airbag ต้องตอบสนองใน milliseconds, pacemaker ต้อง reliable 24/7 และ wearable ต้องประหยัด battery/RAM

Q2: Embedded vs IoT systems

Embedded เน้นทำงาน local task เฉพาะ เช่น microwave หรือ washing machine ปกติ ส่วน IoT เพิ่ม internet/network, cloud, app, remote monitoring และ data analytics เช่น smart washing machine ที่แจ้งเตือนผ่านมือถือ

Q3: Polling loop timing ที่ 80 MHz

รวม clock cycles = Load 4 + Compare 2 + Branch 3 + Increment 2 = 11 cycles

Clock period = 1 / 80 MHz = 12.5 ns One iteration = 11 x 12.5 ns = 137.5 ns = 0.1375 us Pulse 1.5 us ทำ complete iterations ได้ floor(1.5 / 0.1375) = 10 รอบ
Q4 Part A: LED bias table

ใช้สูตร V_LED = V_anode - V_cathode และ LED ต้อง forward-biased พร้อมมีแรงดันอย่างน้อย 2.1V

LEDV_anodeV_cathodeV_LEDBiasSufficient?State
LED13.3V0V3.3VForwardYesON
LED21.8V0V1.8VForwardNoOFF
LED30V3.3V-3.3VReverseNoOFF
LED42.1V0V2.1VForwardYes, exactly thresholdON in ideal model
Q4 Part B: Common anode LED

Common anode ต่อ 3.3V, cathode ต่อ GPIO5 ดังนั้น LED จะติดเมื่อ GPIO ดึง LOW

GPIO5V_LED = 3.3V - V_GPIOState
HIGH = 3.3V0VOFF
LOW = 0V3.3VON

หมายเหตุ: ในโจทย์พิมพ์ LED5 ตอนต้น แต่ถาม LED6 ในข้อย่อย ให้ยึดว่าหมายถึง LED ตัวเดียวกันใน common anode circuit

Q5: Timer 1 Group 0, 3s delay, binary LEDs, stop at 7

ตั้ง Timer 1 ของ Group 0 แบบ auto-reload ถ้าใช้ APB 80 MHz และ prescaler 80 จะได้ tick = 1 us ดังนั้น 3 seconds = 3,000,000 ticks ทุกครั้งที่ครบ cycle ให้ counter เพิ่ม 1 แล้วแสดง binary บน LED 3 ดวงด้วย bit extraction เมื่อ counter ถึง 7 ให้ disable timer และหยุดนับ

timer clock = 80 MHz / 80 = 1 MHz alarm value = 1,000,000 ticks/s x 3 s = 3,000,000 ticks LED bit n = (counter >> n) & 0x01
volatile int counter = 0;
const int leds[3] = {13, 12, 14};

void showBinary(int value) {
  for (int n = 0; n < 3; n++) {
    digitalWrite(leds[n], (value >> n) & 0x01);
  }
}

void IRAM_ATTR onTimer() {
  if (counter < 7) {
    counter++;
    showBinary(counter);
  } else {
    // Disable timer permanently here in the real timer API.
  }
}

10. Coverage Checklist

ผมตรวจไฟล์ PDF ทั้งหมด 6 ไฟล์ รวม 172 หน้า และ render ภาพต้นฉบับครบทุกหน้าไว้ใน appendix ด้านล่าง เพื่อให้ตรวจเทียบกับบทเรียนนี้ได้โดยตรง

68Lecture 2 pages
26Lecture 3 pages
31Lecture 4 pages
24Lecture 5 pages
21Lecture 6 pages
2Mock Test pages
แหล่งครอบคลุมใน HTML
Lecture 2embedded concepts, classifications, embedded vs IoT, ESP32 architecture, peripherals, clock/baud formulas, Arduino IDE setup, C program anatomy
Lecture 3Arduino IDE setup, ESP32 board support, special GPIO pins, LED, forward/reverse bias, pull-up/pull-down
Lecture 4timer concept, timer vs counter, APB clock, ESP32 timer groups, modes, interrupts, resolution, prescaler, registers, 2s practice, bit extraction
Lecture 5interrupt concept, polling vs interrupt, interrupt types, timer interrupt internals, IRAM_ATTR, volatile, 7-segment, binary conversion
Lecture 6analog vs digital, why ADC, ADC resolution, formula, ESP32 ADC1/ADC2, attenuation, commands, LDR, battery monitor, potentiometer practice
Mock TestQ1-Q5 แนวคำตอบและคำนวณครบ
วิธีใช้ตอนทวน: อ่านบทสรุปก่อน 1 รอบ จากนั้นเปิด appendix เทียบสไลด์ทีละ lecture ถ้าเจอหน้า screenshot ให้จำขั้นตอน ไม่ต้องจำข้อความ pixel ต่อ pixel

Appendix: ภาพสไลด์ต้นฉบับครบทุกหน้า

ส่วนนี้ render จาก PDF ที่ให้มาโดยตรง ใช้ตรวจว่าเนื้อหาในบทเรียนครอบคลุมทุกหน้า รวมถึงหน้าที่เป็น screenshot/รูปวงจรซึ่ง extract text ไม่ได้