ข้ามไปยังเนื้อหา

ระดับลอจิกและเกตพื้นฐาน

เมื่อจบบทเรียนนี้ คุณจะ

  1. อ่านค่าระดับลอจิกขาเข้าและขาออกจากเอกสารข้อมูลของชิป แล้วบอกได้ว่าสองอุปกรณ์ต่อกันตรงได้หรือไม่
  2. เขียนตารางความจริงของเกต AND, OR, NOT, XOR และใช้แก้โจทย์เงื่อนไขง่าย ๆ ได้
  • คำนวณวงจรแบ่งแรงดันได้ (บทเรียน วงจรแบ่งแรงดัน)
  • สำหรับแล็บ: TESAIoT Dev Kit ที่ flash ตัวอย่าง QWA309 Header I/O Test ไว้ มัลติมิเตอร์ เบรดบอร์ด ตัวต้านทาน 1 kΩ, 2.2 kΩ, 4.7 kΩ สองตัว, 10 kΩ สามตัว (หรือโพเทนชิโอมิเตอร์ 10 kΩ หนึ่งตัวแทนชุดตัวต้านทาน)
  • ถ้าใช้ Eva Kit ให้เขียนโปรแกรมสั้น ๆ ของคุณเองที่ตั้งขาว่างหนึ่งขาเป็นขาเข้าแล้วพิมพ์ค่าที่อ่านได้ แทนโปรแกรมทดสอบ header

TESAIoT Dev Kit มี “โลกของแรงดัน” อย่างน้อยสองโลกบนบอร์ดเดียว

  • บัส I2C ของเซนเซอร์บนบอร์ดทำงานที่ 1.8 V (SCB0 ขา P8.0 = SCL, P8.1 = SDA ที่ 400 kHz ตามคำอธิบายในตัวอย่าง cm33/sensors/01_i2c_bus_scan.c ของ SDK) ตัวอย่างเดียวกันบอกว่า machine.I2C ของ MicroPython เป็นอีกบัสหนึ่งที่ 3.3 V สำหรับต่อบอร์ดเซนเซอร์ภายนอก
  • ขาบน header ทำงานที่ 3.3 V ดูได้จากชื่อสัญญาณที่โปรแกรมทดสอบ header พิมพ์ออกจอ เช่น P13.3_GPIO_PWM5+_3V3 ตัวท้าย _3V3 บอกโดเมนแรงดัน

สมมุติคุณมีบอร์ดเซนเซอร์ที่ทำงานที่ 3.3 V จะเอาไปต่อบัสไหนได้ และถ้าต่อผิดบัสจะเกิดอะไรขึ้น บทนี้ให้เครื่องมือตอบคำถามนี้ด้วยตัวเลข

ชิปดิจิทัลไม่ได้เห็นแค่ “มีไฟกับไม่มีไฟ” มันเทียบแรงดันกับเกณฑ์ที่เอกสารข้อมูลรับประกันไว้สี่ค่า

ค่า ความหมาย
V_OH(min) ขาออกที่สั่งเป็น 1 จะให้แรงดัน อย่างน้อย เท่านี้
V_OL(max) ขาออกที่สั่งเป็น 0 จะให้แรงดัน ไม่เกิน เท่านี้
V_IH(min) ขาเข้ารับประกันว่าอ่านเป็น 1 เมื่อแรงดัน ตั้งแต่ เท่านี้ขึ้นไป
V_IL(max) ขาเข้ารับประกันว่าอ่านเป็น 0 เมื่อแรงดัน ไม่เกิน เท่านี้

ระหว่าง V_IL กับ V_IH เป็นช่วงที่ไม่รับประกัน ขาเข้าอาจอ่านเป็นอะไรก็ได้ และอาจแกว่งไปมาถ้ามีสัญญาณรบกวน

1 ? 0 V_IH 2.31 V V_IL 0.99 V 3.3 V 3.3 V CMOS 1 ? 0 V_IH 1.26 V V_IL 0.54 V 1.8 V 1.8 V CMOS
แถบตัวอย่างตามกฎหยาบ V_IH = 0.7 × VDD และ V_IL = 0.3 × VDD ช่วงกลางคือช่วงที่ขาเข้าไม่รับประกันว่าจะอ่านเป็นอะไร ค่าจริงต้องอ่านจากเอกสารข้อมูลของชิป

ชิป CMOS จำนวนมากใช้เกณฑ์ใกล้เคียงกับ 0.7 × VDD และ 0.3 × VDD ภาพข้างบนใช้กฎหยาบนี้ ที่ 3.3 V ได้ V_IH = 2.31 V, V_IL = 0.99 V ที่ 1.8 V ได้ V_IH = 1.26 V, V_IL = 0.54 V แต่ชิปแต่ละรุ่นต่างกัน และบางรุ่นเลือกเกณฑ์ได้ ค่าที่ใช้ตัดสินใจจริงต้องมาจากเอกสารข้อมูลเสมอ

ส่วนเผื่อสัญญาณรบกวน (noise margin) บอกว่ามีที่ว่างให้สัญญาณรบกวนเท่าไรก่อนที่ 1 จะกลายเป็นค่าที่ไม่แน่นอน

NM_H = V_OH(min) − V_IH(min)
NM_L = V_IL(max) − V_OL(max)

ถ้าค่าใดค่าหนึ่งติดลบ แปลว่าต่อกันตรงไม่ได้

ใช้ค่าตัวอย่างจากเอกสารข้อมูลสมมุติของสองอุปกรณ์นี้

ค่า อุปกรณ์ A (1.8 V) อุปกรณ์ B (3.3 V)
V_OH(min) 1.35 V 2.9 V
V_OL(max) 0.45 V 0.4 V
V_IH(min) 1.26 V 2.31 V
V_IL(max) 0.54 V 0.99 V
แรงดันขาเข้าสูงสุดที่ทนได้ (absolute maximum) 2.1 V 3.6 V

A ส่งไป B ระดับ 1 ของ A อาจต่ำเพียง 1.35 V แต่ B ต้องการอย่างน้อย 2.31 V ได้ NM_H = 1.35 − 2.31 = −0.96 V ติดลบ ต่อกันตรงไม่ได้ B จะอ่าน 1 ของ A เป็นค่าไม่แน่นอน (ในความเป็นจริงแม้ A ให้ 1.8 V เต็มก็ยังต่ำกว่า 2.31 V)

B ส่งไป A ในแง่ลอจิก 2.9 V สูงกว่า V_IH ของ A (1.26 V) อ่านเป็น 1 ได้สบาย แต่ 2.9 ถึง 3.3 V เกินค่าสูงสุดที่ขาของ A ทนได้ (2.1 V) กระแสจะไหลผ่านไดโอดป้องกันในขาของ A เข้าไปในไฟเลี้ยง 1.8 V ของ A (back-powering) ขาอาจเสียหาย หรือชิปทำงานแปลก ๆ ทั้งที่ยังไม่ได้จ่ายไฟให้มัน นี่คือกับดักที่อันตรายที่สุด เพราะ “มันอ่านค่าได้ถูก” ในวันแรก

B กับ B NM_H = 2.9 − 2.31 = 0.59 V และ NM_L = 0.99 − 0.4 = 0.59 V บวกทั้งคู่ ต่อตรงได้

ทางแก้เมื่อต่อตรงไม่ได้

  • ชิปแปลงระดับแรงดัน (level translator) ใช้ได้กับสัญญาณเร็ว มีทั้งแบบกำหนดทิศทางและแบบสองทิศทาง
  • บัสแบบ open-drain อย่าง I2C ใช้วงจรแปลงระดับแบบ MOSFET หรือชิปเฉพาะ โดยมีตัวต้านทาน pull-up แยกแต่ละฝั่ง
  • สัญญาณช้าทางเดียวจากสูงลงต่ำ ใช้วงจรแบ่งแรงดันได้ เช่น 10 kΩ กับ 12 kΩ แปลง 3.3 V เป็น 1.80 V แต่ R_th = 10 kΩ ∥ 12 kΩ = 5.45 kΩ กับความจุของขาราว 10 pF ได้ τ ≈ 55 ns ขอบสัญญาณจะช้าลง ใช้ได้กับสัญญาณไม่กี่ร้อย kHz ไม่เหมาะกับ SPI ความเร็วสูง

กลับไปที่คำถามตอนต้น บอร์ดเซนเซอร์ 3.3 V ควรต่อกับบัส 3.3 V ซึ่งไม่ต้องแปลงระดับเลย ถ้าจำเป็นต้องต่อกับบัส 1.8 V ต้องมีวงจรแปลงระดับ

เมื่อสัญญาณเป็น 0 หรือ 1 ได้ชัดเจนแล้ว เราก็รวมมันด้วยเกตลอจิก

A B NOT A A AND B A OR B A XOR B
0 0 1 0 0 0
0 1 1 0 1 1
1 0 0 0 1 1
1 1 0 1 1 0
  • AND เป็น 1 เมื่อทุกขาเข้าเป็น 1
  • OR เป็น 1 เมื่อมีอย่างน้อยหนึ่งขาเข้าเป็น 1
  • NOT กลับค่า
  • XOR เป็น 1 เมื่อสองขาเข้า ต่างกัน ใช้ตรวจความต่างหรือกลับบิต
  • NAND และ NOR คือ AND และ OR ที่ตามด้วย NOT

ในโค้ด C ใช้ &&, ||, ! กับเงื่อนไข และ &, |, ~, ^ กับบิต ใน MicroPython ใช้ and, or, not และ &, |, ^

ของจริงบนบอร์ด โปรแกรมทดสอบ header มีปุ่ม PWM Out ที่ขับขา P13.3 และ P13.4 เป็นคู่กลับเฟส แล้วบอกให้ตรวจว่า “no both-high fault” เงื่อนไขความผิดพลาดนี้คือ P13.3 AND P13.4 ถ้าเป็น 1 เมื่อไรแปลว่าผิด ส่วนเงื่อนไขว่าคู่นี้ทำงานถูกคือ P13.3 XOR P13.4 ต้องเป็น 1 ตลอดช่วงที่สัญญาณวิ่ง

ปุ่มแบบ active-low ขาอ่านได้ 0 เมื่อกด ดังนั้น “กดอยู่” = NOT pin เราจะต่อวงจรนี้จริงในบทเรียนถัดไป

โจทย์ พัดลมระบายความร้อนต้องทำงานเมื่อ “อุณหภูมิสูง และ ประตูตู้ปิดอยู่” หรือ เมื่อผู้ใช้สั่งเปิดเอง (manual) ให้ T = อุณหภูมิสูง, D = ประตูปิด, M = สั่งเอง เขียนตารางความจริงแล้วแปลงเป็นโค้ด

FAN = (T AND D) OR M
T D M T AND D FAN
0 0 0 0 0
0 0 1 0 1
0 1 0 0 0
0 1 1 0 1
1 0 0 0 0
1 0 1 0 1
1 1 0 1 1
1 1 1 1 1

ตรวจตาราง: ทุกแถวที่ M = 1 พัดลมต้องทำงาน (สี่แถว) และเมื่อ M = 0 มีแถวเดียวที่ทำงานคือ T = 1, D = 1 รวมห้าแถว ตรงกับตาราง

ถ้าสวิตช์ประตูต่อแบบ active-low (ประตูปิดอ่านได้ 0) โค้ดต้องกลับค่าก่อนใช้

bool door_closed = !door_pin; /* active-low: ปิดอ่านได้ 0 */
bool fan_on = (temp_high && door_closed) || manual;

สามอินพุตมีได้ 2³ = 8 แบบ การเขียนตารางครบทุกแถวคือวิธีทดสอบที่ง่ายที่สุด ก่อนเขียนเป็นโค้ดให้ลองทุกแถวในหัวก่อน

  1. ขาออกมี V_OH(min) = 2.4 V, V_OL(max) = 0.4 V ต่อกับขาเข้าแบบ TTL ที่มี V_IH(min) = 2.0 V, V_IL(max) = 0.8 V หา NM_H และ NM_L ต่อตรงได้ไหม
  2. ใช้กฎหยาบ 0.7 × VDD และ 0.3 × VDD หา V_IH และ V_IL ของขาเข้าที่เลี้ยงด้วย 2.5 V
  3. อุปกรณ์ 5 V ส่งสัญญาณ 5 V เข้าขาไมโครคอนโทรลเลอร์ 3.3 V ที่เอกสารข้อมูลไม่ได้ระบุว่าทนแรงดัน 5 V (5 V tolerant) ต่อตรงได้ไหม เพราะอะไร
  4. เขียนตารางความจริงของ NOT (A OR B) (คือ NOR) แล้วเทียบกับ (NOT A) AND (NOT B) สังเกตอะไร
  5. ระบบกันขโมยดังเมื่อ “เปิดระบบอยู่ (ARM) และประตูเปิด (OPEN) และไม่ได้อยู่ในโหมดซ่อมบำรุง (MAINT)” เขียนนิพจน์ แล้วบอกว่ามีกี่แถวจากแปดแถวที่ทำให้ดัง
  6. วงจรตรวจคู่สัญญาณกลับเฟส A และ B ต้องการสัญญาณ ERR ที่เป็น 1 เมื่อ A และ B มีค่าเท่ากัน เขียน ERR ด้วยเกตที่เรียนมา
  1. NM_H = 2.4 − 2.0 = 0.4 V และ NM_L = 0.8 − 0.4 = 0.4 V บวกทั้งคู่ ต่อตรงได้
  2. V_IH = 0.7 × 2.5 = 1.75 V และ V_IL = 0.3 × 2.5 = 0.75 V
  3. ไม่ได้ 5 V เกินค่าสูงสุดที่ขา 3.3 V ส่วนใหญ่ทน (มักราว VDD + 0.3 V) กระแสจะไหลผ่านไดโอดป้องกันเข้าไฟเลี้ยง ต้องใช้ตัวแปลงระดับ หรือวงจรแบ่งแรงดันถ้าสัญญาณช้าและเป็นทางเดียว
  4. ทั้งสองนิพจน์ให้ 1, 0, 0, 0 สำหรับ (A, B) = (0, 0), (0, 1), (1, 0), (1, 1) เท่ากันทุกแถว นี่คือกฎของเดอมอร์แกน (De Morgan)
  5. ALARM = ARM AND OPEN AND (NOT MAINT) ดังแถวเดียวคือ ARM = 1, OPEN = 1, MAINT = 0
  6. ERR = NOT (A XOR B) (หรือเรียกว่า XNOR) เป็น 1 เมื่อ A กับ B เท่ากัน ซึ่งครอบคลุมทั้งกรณีเป็น 1 พร้อมกัน (both-high) และเป็น 0 พร้อมกัน

ตอบคำถามใน quiz.yaml ให้ถูกอย่างน้อย 4 ใน 5 ข้อ ข้อ 1 ถึง 3 ใช้ตารางค่าของอุปกรณ์ A และ B ในหัวข้อ 2

ส่วน A: วัดระดับขาออกจริงด้วยมัลติมิเตอร์

  1. รันโปรแกรม QWA309 Header I/O Test หาตำแหน่งขา P13.0 และ GND บน header จากแผนผังขาของบอร์ด
  2. ตั้งมิเตอร์เป็นโหมดแรงดันไฟตรง สายดำที่ GND สายแดงที่ P13.0 แล้วกดปุ่ม GPIO Out บนจอ โปรแกรมจะไล่ขับทีละขา (P13.0, P13.3, P13.4, P13.5, P13.6, P13.7) ขาละราว 0.7 s แล้วปิดทั้งหมด ทำซ้ำสามรอบ
  3. จดแรงดันตอนที่ P13.0 เป็น 1 และตอนที่เป็น 0 นี่คือ V_OH และ V_OL จริงของขาที่ไม่มีโหลด
  4. ใช้ตารางในหัวข้อ 2 ตัดสินว่าขานี้ส่งเข้าอุปกรณ์ A (1.8 V) และอุปกรณ์ B (3.3 V) ได้หรือไม่ พร้อมเหตุผล

ส่วน B: หาจุดสลับจริงของขาเข้า

  1. ถอด USB ต่อวงจรแบ่งแรงดันบนเบรดบอร์ดจาก 3V3 จุดกลางต่อผ่านตัวต้านทาน 1 kΩ เข้าขา P13.0 (ตัวต้านทาน 1 kΩ กันขาเสียถ้าเผลอกด GPIO Out ขณะต่อวงจรนี้อยู่)
  2. กดปุ่ม GPIO In โปรแกรมตั้งขาทั้งหกเป็นขาเข้าแบบไม่มี pull (high-Z) อ่านทุก 100 ms นาน 8 s และพิมพ์ค่า mask ทุกครั้งที่ค่าเปลี่ยน บิต 0 คือ P13.0 บิตอื่นอาจแกว่งไปมาเพราะขาเหล่านั้นลอยอยู่ เรื่องนี้คือหัวข้อของบทเรียนถัดไป ตอนนี้ดูเฉพาะบิต 0
  3. เปลี่ยนคู่ตัวต้านทาน (ตัวบน / ตัวล่าง) ตามตาราง วัดแรงดันที่จุดกลางด้วยมิเตอร์ แล้วกด GPIO In อ่านบิต 0
ตัวบน / ตัวล่าง แรงดันคำนวณ แรงดันวัดได้ บิต 0 ที่อ่านได้
10 kΩ / 2.2 kΩ 0.60 V
10 kΩ / 4.7 kΩ 1.06 V
10 kΩ / 10 kΩ 1.65 V
4.7 kΩ / 10 kΩ 2.24 V
2.2 kΩ / 10 kΩ 2.70 V

ถ้ามีโพเทนชิโอมิเตอร์ ใช้มันแทนชุดตัวต้านทาน แล้วค่อย ๆ หมุนหาแรงดันที่บิต 0 เปลี่ยนค่า ทั้งขาขึ้นและขาลง ถ้าสองค่านี้ต่างกัน แปลว่าขาเข้ามี hysteresis

ตีความผล เอกสารข้อมูลรับประกันเฉพาะว่าต่ำกว่า V_IL อ่านเป็น 0 และสูงกว่า V_IH อ่านเป็น 1 จุดที่สลับจริงบนบอร์ดของคุณอยู่ที่ไหนสักแห่งตรงกลาง และอาจเปลี่ยนตามอุณหภูมิหรือชิปแต่ละตัว ห้ามออกแบบวงจรโดยพึ่งจุดสลับที่วัดได้จากบอร์ดตัวเดียว ให้ออกแบบจาก V_IL และ V_IH ในเอกสารข้อมูลเสมอ

บทเรียนถัดไป Pull-up, pull-down และปุ่มกด เราจะดูว่าทำไมขาเข้าที่ปล่อยลอยจึงอ่านค่ามั่ว ต่อปุ่มแบบ active-low และใช้ logic analyzer ครั้งแรกเพื่อดูการเด้งของปุ่ม

ถ้าเพื่อนบอกว่า “ต่อ 3.3 V เข้าขา 1.8 V แล้วก็อ่านค่าได้ปกตินี่” คุณจะอธิบายให้เขาเห็นความเสี่ยงอย่างไรโดยใช้ตัวเลขจากบทนี้

คำถามทบทวน

ลองตอบเองก่อน แล้วค่อยเปิดดูเฉลย

  1. ขาออกของอุปกรณ์ 1.8 V มี V_OH(min) = 1.35 V ต่อเข้าขาเข้าของอุปกรณ์ 3.3 V ที่มี V_IH(min) = 2.31 V ได้ไหม (เป้าหมายข้อ 1)

    1. ได้ เพราะ 1.35 V มากกว่าศูนย์
    2. ไม่ได้ ระดับ 1 ของขาออกต่ำกว่า V_IH จึงไม่รับประกันว่าจะอ่านเป็น 1
    3. ได้ ถ้าใส่ตัวต้านทาน 1 kΩ อนุกรม
    4. ไม่ได้ เพราะ V_OL สูงเกินไป
    ดูเฉลย

    คำตอบ: B. ไม่ได้ ระดับ 1 ของขาออกต่ำกว่า V_IH จึงไม่รับประกันว่าจะอ่านเป็น 1

    NM_H = 1.35 − 2.31 = −0.96 V ติดลบ ขาเข้าอาจอ่านเป็นอะไรก็ได้ ต้องใช้ตัวแปลงระดับ ตัวต้านทานอนุกรมไม่ได้ช่วยยกแรงดัน

  2. ขาออก 3.3 V ต่อเข้าขาของชิป 1.8 V ที่ทนแรงดันขาเข้าได้สูงสุด 2.1 V ข้อใดถูก (เป้าหมายข้อ 1)

    1. ใช้ได้ปลอดภัย เพราะ 3.3 V สูงกว่า V_IH จึงอ่านเป็น 1 ได้ถูก
    2. อ่านค่าได้ถูกก็จริง แต่แรงดันเกินค่าสูงสุดที่ขาทน อาจเสียหายหรือจ่ายไฟย้อนเข้าชิป ต้องแปลงระดับ
    3. อ่านไม่ได้เลยเพราะแรงดันสูงเกิน
    4. ปลอดภัยถ้าชิป 1.8 V ปิดไฟอยู่
    ดูเฉลย

    คำตอบ: B. อ่านค่าได้ถูกก็จริง แต่แรงดันเกินค่าสูงสุดที่ขาทน อาจเสียหายหรือจ่ายไฟย้อนเข้าชิป ต้องแปลงระดับ

    ในแง่ลอจิกอ่านเป็น 1 ได้ แต่ 3.3 V เกิน 2.1 V กระแสจะไหลผ่านไดโอดป้องกันเข้าไฟเลี้ยง 1.8 V ถ้าชิปปิดไฟอยู่ยิ่งแย่ เพราะมันจะถูกเลี้ยงผ่านขานั้นแทน

  3. ขาออกมี V_OH(min) = 2.9 V ขาเข้ามี V_IH(min) = 2.31 V ส่วนเผื่อสัญญาณรบกวนด้านสูง (NM_H) เป็นเท่าไร (เป้าหมายข้อ 1)

    1. 0.59 V
    2. 5.21 V
    3. 0.99 V
    4. −0.59 V
    ดูเฉลย

    คำตอบ: A. 0.59 V

    NM_H = V_OH(min) − V_IH(min) = 2.9 − 2.31 = 0.59 V สัญญาณรบกวนที่กดแรงดันลงไม่เกินนี้ยังอ่านเป็น 1 ได้

  4. เกต XOR ได้ขาเข้า A = 1 และ B = 1 ขาออกเป็นอะไร (เป้าหมายข้อ 2)

    1. 0
    2. 1
    3. ไม่แน่นอน
    4. เท่ากับ A AND B
    ดูเฉลย

    คำตอบ: A. 0

    XOR เป็น 1 เมื่อขาเข้าต่างกันเท่านั้น A และ B เท่ากันจึงได้ 0 ส่วน A AND B ในกรณีนี้ได้ 1

  5. ALARM = ARM AND OPEN AND (NOT MAINT) ชุดค่าใดทำให้สัญญาณเตือนดัง (เป้าหมายข้อ 2)

    1. ARM = 1, OPEN = 1, MAINT = 1
    2. ARM = 1, OPEN = 1, MAINT = 0
    3. ARM = 0, OPEN = 1, MAINT = 0
    4. ARM = 1, OPEN = 0, MAINT = 0
    ดูเฉลย

    คำตอบ: B. ARM = 1, OPEN = 1, MAINT = 0

    AND ต้องการให้ทุกเทอมเป็น 1 เทอม NOT MAINT เป็น 1 เมื่อ MAINT = 0 จึงมีเพียงแถวเดียวคือ ARM = 1, OPEN = 1, MAINT = 0

อ้างอิงบทเรียนนี้

ถ้านำบทเรียนนี้ไปสอน ทำสไลด์ หรือทำเอกสารต่อ ให้อ้างอิงด้วยข้อความนี้ ถ้าดัดแปลงเนื้อหา ให้เติม (ดัดแปลง)ต่อท้ายชื่อบทเรียน

"ระดับลอจิกและเกตพื้นฐาน" จาก TESA Open Knowledge โดยสมาคมสมองกลฝังตัวไทย (Thai Embedded Systems Association: TESA) https://github.com/tesaiot/tesa-qualification-program สัญญาอนุญาต CC BY-NC 4.0

ข้อความอ้างอิงภาษาอังกฤษ: "Logic levels and basic gates" from TESA Open Knowledge by the Thai Embedded Systems Association (TESA), https://github.com/tesaiot/tesa-qualification-program, licensed under CC BY-NC 4.0

ลิงก์บทเรียน: https://tesaiot.github.io/tesa-qualification-program/courses/electronics-and-instruments/m02-digital-logic/l01-logic-levels-and-gates/

วิธีอ้างอิง TESA ฉบับเต็ม

TESA Open Knowledge · © 2026 สมาคมสมองกลฝังตัวไทย (TESA) · CC BY-NC 4.0

เนื้อหาเผยแพร่ภายใต้ CC BY-NC 4.0 นำไปใช้ต่อในงานที่ไม่ใช่เพื่อการค้าได้ โปรดอ้างอิงสมาคมสมองกลฝังตัวไทย (TESA) ทุกครั้ง · วิธีอ้างอิง TESA