บทความ

Microcontroller & PLC

รูปภาพ
  Microcontroller & PLC ไมโครคอนโทรลเลอร์และตัวควบคุมลอจิกแบบโปรแกรมได้ (PLC) ทั้งไมโครคอนโทรลเลอร์ (Microcontroller) ขอเรียกสั้นว่า “MCU” และตัวควบคุมลอจิกแบบโปรแกรมได้ (Programmable Logic Controller) หรือ PLC เป็นอุปกรณ์อิเล็กทรอนิกส์ที่ใช้ในงานระบบอัตโนมัติและงานควบคุม ข้อแตกต่างของอุปกรณ์ทั้งสองมีดังนี้ 1. คำนิยาม: - MCU: เป็นวงจรรวมขนาดกะทัดรัดที่ออกแบบมาเพื่อควบคุมการทำงานเฉพาะในระบบฝังตัว(embedded system) โดยทั่วไปจะมีโปรเซสเซอร์ หน่วยความจำ และอุปกรณ์ต่อพ่วง I/O อยู่บนชิปตัวเดียว (ภายในชิป) - PLC:  ตัวควบคุมลอจิกแบบตั้งโปรแกรมได้คือ ดิจิทัลคอมพิวเตอร์ทางอุตสาหกรรมที่ได้รับการดัดแปลง สำหรับการควบคุม กระบวนการผลิต เช่น สายการประกอบ อุปกรณ์หุ่นยนต์ หรือกิจกรรมใดๆ ที่ต้องมีการควบคุมที่มีความน่าเชื่อถือสูง รวมถึงง่ายต่อการตั้งโปรแกรมและการตรวจสอบข้อผิดพลาด 2. แอปพลิเคชัน: - MCU: ใช้ในระบบฝังตัว เช่น ของเล่น เครื่องใช้ในบ้าน อุปกรณ์ทางการแพทย์ และวิทยุเคลื่อนที่เป็นต้น - PLC:  ใช้ในงานทางอุตสาหกรรมเพื่อควบคุมเครื่องจักร สายการผลิต และกระบวนการต่างๆ เป็นหลัก 3. การเข...

การเลือกไมโครคอนโทรลเลอร์ ใช้งาน

รูปภาพ
  การเลือกไมโครคอนโทรลเลอร์ ใช้งาน การเลือกไมโครคอนโทรลเลอร์ ส่วนใหญ่จะมีหลักดังนี้ (ในบ้านเรา Thailand) ตอบโจทย์งาน หาง่ายราคาถูก 3. พัฒนาได้รวดเร็ว สำหรับท่านที่ยังไม่มีพื้นฐาน ให้เริ่มต้นจากสิ่งที่ง่าย ๆ ก่อนเพราะไมโครคอนโทรลเลอร์ทุกตัว ทำงานในระดับพื้นฐานจนถึงระดับกลางได้เทียบเท่ากันหมด ในระดับแอดวานซ์จะอยู่ที่ฟังก์ชันพิเศษของไมโครคอนโทรลเลอร์นั้น ๆ บวกกับทักษะของผู้พัฒนา Mindmap นี้เป็นพื้นฐานเบื้องต้น ที่ใช้ในการพิจารณาเลือกไมโครคอนโทรลเลอร์เพื่อทำโครงงานครับ mindmap การเลือกใช้งานไมโครคอนโทรลเลอร์
รูปภาพ
  ไมโครคอนโทรลเลอร์เอาไปทำอะไรได้ ไมโครคอนโทรลเลอร์เอาไปทำอะไรได้บ้าง เอาไปใช้งานที่ไหน ? นี่คือส่วนหนึ่งที่ไมโครคอนโทรลเลอร์ถูกนำไปใช้งานและอยู่ในชีวิตประจำวันของเรา แต่เราเป็นผู้ใช้งานก็จะไปรวมกลุ่มกันอยู่ใน “โครงการ DIY และงาน อดิเรก” เหล่า maker แล้วถ้าใครมีไอเดีย สู่การเป็นธุรกิจได้ก็จะกลายเป็น SME ครับ ตู้กดน้ำ กดกาแฟ ก็มีไมโครคอนโทรลเลอร์เป็นส่วนหนึ่งในนั้นครับ หรือไม่ก็กลายเป็น embedded system ในระบบนั้นไปแล้ว ไมโครคอนโทรลเลอร์มีบทบาทที่สำคัญในอุปกรณ์และระบบควบคุมต่างๆ ซึ่งทำหน้าที่เป็น “สมอง” ที่อยู่เบื้องหลังการดำเนินงานของอุปกรณ์เหล่านั้น ความสามารถในการเชื่อมต่อกับเซ็นเซอร์และแอคทูเอเตอร์ (actuators “กลไกขับเคลื่อน เปิดปิด”) ในโลกแห่งความเป็นจริง และไมโครคอนโทรลเลอร์จะฝังไว้ตัวอุปกรณ์ใช้ในระบบควบคุม (ทำงานเป็นส่วนหนึ่งของอุปกรณ์แทนที่จะเป็นคอมพิวเตอร์ทั่วไป) ทำให้เหมาะสำหรับการใช้งานที่หลากหลาย เช่นตัวอย่างต่อไปนี้ ที่ไมโครคอนโทรลเลอร์ถูกนำไปใช้งาน: 1. เครื่องใช้ไฟฟ้า: เครื่องใช้ไฟฟ้าภายในบ้าน: เตาไมโครเวฟ เครื่องซักผ้า เครื่องดูดฝุ่น และตู้เย็น มักใช้ไมโครคอนโทรลเลอร์ใ...
รูปภาพ
  C/C++ vs Assembly การเลือกระหว่างการใช้ภาษา C/C++ หรือ ภาษาแอสเซมบลี (Assembly) ในการเขียนโปรแกรมควบคุมไมโครคอนโทรลเลอร์ขึ้นอยู่กับปัจจัยต่าง ๆ รวมถึงข้อกำหนดของโปรเจ็กต์ ประสบการณ์ในการเขียนโปรแกรม และข้อจำกัดด้านประสิทธิภาพและเวลาในการพัฒนา ข้อควรพิจารณาบางประการในการเลือกภาษาแอสเซมบลีหรือภาษา C/C++ สำหรับการเขียนโปรแกรมไมโครคอนโทรลเลอร์: ภาษาแอสเซมบลี: แอปพลิเคชันที่เน้นประสิทธิภาพการทำงาน (Performance-Critical Applications): เมื่อเราต้องการการควบคุมทุกคำสั่งที่ดำเนินการโดยไมโครคอนโทรลเลอร์อย่างสมบูรณ์ และจำเป็นต้องปรับโค้ดให้เหมาะสมสำหรับความเร็วหรือขนาด ภาษาแอสเซมบลีอาจเป็นทางเลือกที่ดี แอสเซมบลีช่วยให้สามารถควบคุมฮาร์ดแวร์ได้อย่างละเอียด ทำให้สามารถเขียนโค้ดที่ได้รับการปรับปรุงประสิทธิภาพในระดับสูงได้ การใช้ทรัพยากรน้อยที่สุด (Minimal Resource Usage): หากไมโครคอนโทรลเลอร์ของเรามีทรัพยากรที่จำกัดมาก (เช่น หน่วยความจำขนาดเล็กหรือพลังการประมวลผล) การเขียนโค้ดใน แอสเซมบลีอาจมีประสิทธิภาพมากกว่าในแง่ของการใช้ทรัพยากรเมื่อเทียบกับภาษาระดับสูงกว่าเช่น C การเข้าถึงฮาร์ดแวร์ระดับต่ำ...

การเขียนโปรแกรมแบบเดิม ๆ กับเครื่องจักรสร้างโค้ด (Machine Learning)

รูปภาพ
 ความเป็นจริงใกล้เข้ามาทุกที่ ในอนาคตการเขียนโค้ดจะลดลง ทำไม? ถึงลดลง  source image: www.avenga.com เพราะ Edge Devices ทั้งหลายสามารถที่จะเรียนรู้ได้ด้วยตนเอง ทำให้การเขียนโค้ดลดลง เหลือเพียงแค่การสร้างโค้ดเพื่อเก็บข้อมูลแล้วป้อนข้อมูลให้ ML ในตอนแรกเท่านั้นเพื่อให้ Machine Learning (ML) เรียนรู้ เพื่อสร้างโมเดล จากนั้นก็นำโมเดลที่ได้ไปฝังไว้อุปกรณ์ปลายทาง edge device ก็จะเรียนรู้ตลอดไปด้วยตนเองได้ เพราะในปัจจุบัน Edge Devices เริ่มที่จะเรียนรู้ด้วยตนเองได้แล้ว (เราเริ่มเห็นอุปกรณ์เหล่านี้ฝัง AI มาในตัวแล้ว) แล้วเราจะรู้ได้อย่างไรว่า อะไรต้องเขียนโค้ดแบบดังเดิมและอะไรที่ต้องใช้ ML? เมื่อเรารู้ข้อมูลที่ชัดเจนและคำตอบที่แน่นอนของงานนั้น การเขียนโค้ดแบบดังเดิมคือคำตอบที่ดีที่สุด แต่ถ้าข้อมูลมีการเปลี่ยนแปลงตลอดและผลลัพธ์ที่ต้องการนั้นขึ้นอยู่กับข้อมูลที่เกิดขึ้นตลอดเวลา ตัวเลือกที่ดีคือ AI/ML สำหรับโค้ดนั้น อนาคต Deep Learning กับ Edge Devices และ IoT ในปัจจุบันการเรียนรู้ของเครื่องด้วย Deep Learning(DL) ส่วนใหญ่ยังคงประมวลผลและสร้างโมเดลบนเครื่องคอมพิวเตอร์ประสิทธิภาพสูงเพื่อควา...

ฟังก์ชันอินเตอร์รัปต์ใน c standard mode กับ MPLAB X IDE และ XC Compiler V2.2 (หรือสูงกว่า)

รูปภาพ
ในหนังสือ PIC16F MPLAB XC8 (PIC16F Programming กับ MPLAB XC8 Compiler) โค้ดส่วนที่เกี่ยวกับการเขียนฟังก์ชันอินเตอร์รัปต์จะประกาศใช้งานแบบนี้ ซึ่งเป็นการสร้างฟังก์ ชันอินเตอร์รัปต์ที่ใช้ c standard C90 static void interrupt isr(void)  {     … } เมื่อเราติดตั้ง MPLAB X และ XC8 Compiler เวอร์ชันใหม่ ค่าเริ่มต้น (default) ของ c standard ได้เปลี่ยนไปเป็น C99 แล้วในปัจุบัน การเขียนชื่อฟังก์ชันอินเตอร์รัปต์จึงเปลี่ยนไปเป็นดังนี้ 
 void __interrupt() isr(void) {     ….
 } *** ถ้าคอมไพล์โค้ดโปรแกรมจากต้นฉบับไม่ผ่านแสดงว่า เราใช้ mode C90 อยู่ วิธีแก้ไขคือ 
 1. เปลี่ยนไปใช้โหมดเดิมคือ C90 2. แก้ไขชื่อฟังก์ชันอินเตอร์รัปต์ใหม่ให้เป็นแบบ C99
 รายละเอียดด้านล่าง // Interrupt function all static void interrupt isr(void)     // c standard mode: C90
 {   if (RBIE && RBIF)    // RB Port change-on   {     PORTA = 0x0f;     __delay_ms(1000);     PORTB = 0;...

ฟังก์ชัน millis() กับ ARDUINO

รูปภาพ
ฟังก์ชัน millis() กับ ARDUINO เรารู้มาว่าฟังก์ชัน millis() จะนับและเพิ่มค่าเวลาไปเรื่อย ๆ ในหน่วยมิลลิวินาที และจะนับต่อเนื่องไปอย่างน้อย 50 วัน ก่อนที่จะกลับมาเริ่มต้นนับ 0 ใหม่อีกครั้ง หากต้องการให้เริ่มต้นนับ 0 ทุกครั้งที่ต้องการ เราสามารถเขียนโค้ดได้ดังตัวอย่างตามรูปนี้ ปล. นอกจากนีั้เรายังกำหนดค่าเริ่มต้นการนับได้ตามที่เราต้องการด้วย ด้วยการกำหนดค่าในตัวแปร timer0_millis