ชื่อโปรเจกต์: ปรับจูน Code Arduino ให้เทพขึ้นด้วย PIN registers (แบบฉบับรุ่นพี่สายโหด)
ในวิดีโอนี้ พี่จะโชว์วิชามารที่เป็นทางเลือกใหม่นอกเหนือจากการใช้คำสั่งเดิมๆ อย่าง pinMode, digitalRead และ digitalWrite ในการสั่งงาน Pins ของ [Arduino](https://s.shopee.co.th/7fUgFAWSki) การใช้ Pin registers แบบนี้ นอกจากจะช่วยให้ Code ของเราคลีนและ Optimise ขึ้นแล้ว บอกเลยว่าความเร็วในการสั่งงาน Pins นี่คนละเรื่องเลยนะน้อง เร็วจี๊ดจ๊าดกว่าเดิมเยอะ!
เจาะลึกเทคนิคระดับ Bare-Metal
การรีดประสิทธิภาพแบบ Performance Tuning
โปรเจกต์นี้เราจะมาเจาะลึกเรื่อง "Port Manipulation" ระดับเทพ ข้ามหน้าข้ามตาฟังก์ชันมาตรฐานของ Arduino อย่าง digitalWrite() เพื่อให้ได้ความแม่นยำของ Timing ในระดับ Microsecond
- Direct Register Addressing: ฟังก์ชันมาตรฐานของ Arduino มันมักจะมีขั้นตอนแฝงเพื่อความปลอดภัยและเช็ค Error เยอะไปหน่อย แต่ถ้าเรากระโดดไปแก้ค่าที่ PORTx, PINx, และ DDRx registers โดยตรงเลย Code ของเราจะสั่ง Toggle pins ได้เร็วขึ้นกว่าเดิม 10-20 เท่า! งานนี้ใครจะทำ Protocol ความเร็วสูงหรือปั่น PWM แบบ Manual บอกเลยว่านิ่ม
- Atomic Bit-Shifting: เราจะใช้พวกตัวดำเนินการ Bitwise (
&,|,~,^) มาช่วยจัดการอัปเดตหลายๆ Pins พร้อมกันใน Clock cycle เดียว มั่นใจได้เลยว่า Output ทุกช่องจะทำงานพร้อมกันแบบ Synchronization เป๊ะๆ ไม่มีดีเลย์ให้เสียหน้าแน่นอน
ความคุ้มค่าและประสิทธิภาพ
- ลดขนาด Memory: พอเราหันมาใช้ Registers โดยตรง Machine code ที่ Compile ออกมาจะมีขนาดเล็กลงอย่างเห็นได้ชัด ช่วยคืนพื้นที่ Flash memory อันมีค่าบนพวก Board ที่มีพื้นที่จำกัดอย่าง ATtiny85 ให้เหลือใช้เหลือเฟือ หล่อเท่เลยงานนี้!