Review วิชา Embedded ที่เจ้าของบล็อกกำลังเรียน~
ที่มาของบทความนี้คือ อีกไม่กี่วันเจ้าของบล็อกก็จะสอบกลางภาคแล้ว เจ้าของบล็อกก็เลยอยากจะมาลองสรุปในแต่ละหัวข้อที่ได้เรียนในวิชานี้ดูหน่อย
โหหห นี่คือเนื้อหาที่จะสอบ Midterm ค่อนข้างเยอะเลยทีเดียว แต่คิดว่า เจ้าของบล็อกก็คง Review ในส่วนที่จำเป็น คงไม่ลงรายละเอียดลึกทั้งหมด ถ้าเอาหมดนี่บทความนี้คงไม่จบแน่เลย ฮ่า ๆ
Microcontroller
ว่ากันตามตรงแล้ว Microcontroller มันก็คือ Computer เครื่องนึงนี่แหละ เพียงแต่เป็น Computer ที่ถูกย่อส่วนลงมาเหลือแค่ตัว Chip เล็กนิดเดียว ที่เจ้าของบล็อกพูดอย่างนี้ก็เพราะว่าในตัว Microcontroller มันได้ยัดทุกอย่างไว้ใน Chip แล้ว
รูปภาพจาก : https://www.edgefxkits.com/blog/wp-content/uploads/Architecture-of-PIC-Microcontroller.jpg |
ถ้าพูดถึงอุปกรณ์ใน computer เราก็จะรู้ว่ามันมี CPU , RAM ,Hardisk etc. ซึ่งทั้งหมดเนี่ย มันรวมกันอยู่ใน Microcontroller ตัวเดียวเลย
Registers
register จริง ๆ แล้วมันก็คือวงจร electronic ที่สามารถเก็บค่าบางอย่างได้ ซึ่งค่าบางอย่างที่ว่านี้มันก็อ้างอิงจากหลาย ๆ cell ที่อยู่ภายใน SRAM ซึ่งแต่ละ cell มันก็จะเก็บค่าสถานะ 0 หรือ 1 ไว้
รูปภาพจาก : https://iis-people.ee.ethz.ch/~kgf/aries/5.html |
รูปนี้คือหน้าตาของ Cell ใน SRAM ที่เก็บค่า 1 Bit ไว้ โดยการต่อ Not Gate สลับกัน ถ้าดูลึกไปอีก มันก็คือการเอา transister มันต่อกันแบบ Not Gate
รูปภาพจาก : https://iis-people.ee.ethz.ch/~kgf/aries/5.html |
เมื่อเรานำแต่ละ Cell มาต่อรวมกันหลาย ๆ Cell เป็น Array ก็เลยกลายเป็น SRAM Architecture เพราะภายใน SRAM จะมี Cell พวกนี้ต่อกันเยอะมาก
รูปภาพจาก : https://moodle.insa-toulouse.fr/pluginfile.php/2632/mod_resource/content/0/content/static_ram.html |
ในเรื่องของ register ยังมีอีกเรื่อง ก็คือ SFRs (Special Function Registers) ความพิเศษของ register พวกนี้คือ มันจะผูกกับวงจรภายใน โดยวงจรภายในพวกนี้ อาจจะเอาไปควบคุม Output แต่ละ pin หรือ อ่านค่าบางอย่างแต่ในแต่ละ pin ก็ได้ รวมทั้งกำหนดสถานะบางอย่างให้กับ Microcontroller เช่น การ Setup Interrupt หรือ Timer ต่าง ๆ
Microcontroller ของเราสามารถอ่านหรือเขียนข้อมูลลงบน register นี้ได้ตรง ๆ หรือจะพูดอีกอย่างก็คือ การทำงานของ Microcontroller จะขึ้นอยู่กับ register พวกนี้
ยกตัวอย่าง register ตัวนี้ ซึ่งมีขนาด 1 Byte และในแต่ละ bit ก็มีความหมายในตัวของมันเอง เช่น ถ้าเจ้าของบล็อกกำหนดให้ bit ที่ 7 มีสถานะเป็น 1 นั่นหมายความว่าเรากำลังสั่งให้ Microcontroller เปิดใช้งาน SPI interrupt อยู่นั่นเอง และยังมี register อีกหลายอย่างที่เอาไว้ใช้งานต่าง ๆ กันไป แต่ขอไม่พูดถึง เพราะเดี๋ยวจะเยอะ ข้ามไปเรื่องอื่นดีกว่า
อันดับแรกเจ้าของบล็อกจะเขียนอย่างนี้ไว้ก่อน มี 8 ตัว เลขที่อยู่ข้างในมันก็คือเลข 2 ยกกำลังตามเลขที่อยู่ด้านบนนั่นแหละ ถ้าเจ้าของบล็อกต้องการหาว่า 71 ในเลขฐาน 2 เขียนยังไง ก็ตามรูปด้านล่างเลย
เจ้าของบล็อกก็จะเลือกตัวเลขจากค่าที่มากที่สุดที่ไม่เกิน 71 มาก่อน ก็คือ 64 จากนั้นก็หาเลขอื่น ๆ มาเรื่อย ๆ จนได้เลข 4 เลข 2 และ 1 ที่รวมกันทั้งหมดแล้วเป็น 71 ถ้าทำจนชินแล้ว ก็ทดเลขในใจแล้วแปลงเลขตรง ๆ ก็ยังได้เลย โดยไม่ต้องเขียนเป็นตารางแบบนี้
การทำแบบนี้มันยังสะดวกเวลาเราจะเอาไปหาเลขฐาน 16 อีกนะ ตามรูปด้านล่างเลย
เลขฐาน 2 ที่เราหามาได้ เราสามารถ group รวมทีละ 4 bit ได้เลยพอเรา group แล้ว นั่นหมายความว่าแต่ละ group จะมีค่าตั้งแต่ 0 - 15 ซึ่งค่าพวกนี้ก็คือเลขฐาน 16 นั่นเอง โดยระบบเลขฐาน 16 ค่าตั้งแต่ 10 - 15 จะแทนด้วยตัวอักษร A - F เพราะงั้นถ้าเราคำนวณได้ตั้งแต่ 10 ขึ้นไป เราก็แทนตัวอักษรเข้าไป อย่าแทนตัวเลขเข้าไปละ เดี๋ยวผิด
อย่างที่บอกว่าใช้บ่อย ๆ เราก็จะคิดในใจได้เลย ลองเอาไปหัดดูได้ หรือมีวิธีอะไรใหม่ ๆ ก็แนะนำเจ้าของบล็อกด้วยนะ
Microcontroller ของเราสามารถอ่านหรือเขียนข้อมูลลงบน register นี้ได้ตรง ๆ หรือจะพูดอีกอย่างก็คือ การทำงานของ Microcontroller จะขึ้นอยู่กับ register พวกนี้
Arduino interfacing a serial eeprom using SPI |
งงเว้ยยยยย ว๊ากกก picture_link |
Microcontroller Programming
ในส่วนนี้ไม่พูดเยอะ เจ็บคอ... ไม่ใช่ ๆ!! ฮ่า ๆ จั่วหัวมาอย่างนี้คือเขียนตามหัวข้อใน slide ที่เจ้าของบล็อกเรียนเลยนะ แต่ก็ไม่ได้ Programming อะไรขนาด เป็นแค่พื้นฐานจำเป็นที่ต้องใช้ใน Programming น่าจะเหมาะกว่าระบบจำนวน
อันนี้ก็ถือว่าสำคัญนะ เพราะเวลาเขียนพวก Low level อย่าง Embedded เนี่ยเราจะเห็นตัวเลขหลายแบบมาก เช่น ระบบตัวเลขฐาน 2 ฐาน 10 ฐาน 16 ที่เจ้าของบล็อกบอกว่าสำคัญ ง่าย ๆ คือมันใช้บ่อย เลยคิดว่ามันคือสิ่งที่ต้องรู้อยู่แล้วเวลาทำงานพวก embeddedการแปลงเลขฐาน
ก่อนหน้านี้ที่บอกว่าเห็นตัวเลขหลายแบบ ก็มาจากการแปลงเลขฐานนี่แหละ เพราะงั้นสำคัญพอ ๆ กันเลย คือเราต้องรู้จักวิธีการแปลงเลขฐาน ซึ่งเดี๋ยวจะบอกวิธีแปลงง่าย ๆ ที่เจ้าของบล็อกชอบทำKeywords ที่ควรรู้ (มั้ง)
- Bit เป็นหน่วยที่เล็กที่สุด ที่เก็บค่าแค่ 1 หรือ 0
- Nibble คือหน่วยที่นำ Bit จำนวน 4 ตัวมาต่อกัน
- Byte คือหน่วยที่นำ Bit จำนวน 8 ตัวมาต่อกัน
- Word คือหน่วยที่นำ Bit จำนวนเท่ากับระบบปฎิบัติการของเครื่องมาต่อกัน เช่น MCU 16 Bit Word ก็จะมี Bit 16 ตัวต่อกันอยู่นั่นเอง
วิธีแปลงเลขฐาน
เราก็มาดูในแต่ละ step กันดีกว่าว่าทำยังไงถึงจะง่าย มีผู้อ่านบอกใช้เครื่องคิดเลขก็จบละ ฮ่า ๆ เห่ยยย เราก็ต้องเผื่อกรณีที่ไม่มีเครื่องคิดเลขด้วยไงง มา ๆ เริ่มง่าย ๆ ก่อนอันดับแรกเจ้าของบล็อกจะเขียนอย่างนี้ไว้ก่อน มี 8 ตัว เลขที่อยู่ข้างในมันก็คือเลข 2 ยกกำลังตามเลขที่อยู่ด้านบนนั่นแหละ ถ้าเจ้าของบล็อกต้องการหาว่า 71 ในเลขฐาน 2 เขียนยังไง ก็ตามรูปด้านล่างเลย
เจ้าของบล็อกก็จะเลือกตัวเลขจากค่าที่มากที่สุดที่ไม่เกิน 71 มาก่อน ก็คือ 64 จากนั้นก็หาเลขอื่น ๆ มาเรื่อย ๆ จนได้เลข 4 เลข 2 และ 1 ที่รวมกันทั้งหมดแล้วเป็น 71 ถ้าทำจนชินแล้ว ก็ทดเลขในใจแล้วแปลงเลขตรง ๆ ก็ยังได้เลย โดยไม่ต้องเขียนเป็นตารางแบบนี้
การทำแบบนี้มันยังสะดวกเวลาเราจะเอาไปหาเลขฐาน 16 อีกนะ ตามรูปด้านล่างเลย
เลขฐาน 2 ที่เราหามาได้ เราสามารถ group รวมทีละ 4 bit ได้เลยพอเรา group แล้ว นั่นหมายความว่าแต่ละ group จะมีค่าตั้งแต่ 0 - 15 ซึ่งค่าพวกนี้ก็คือเลขฐาน 16 นั่นเอง โดยระบบเลขฐาน 16 ค่าตั้งแต่ 10 - 15 จะแทนด้วยตัวอักษร A - F เพราะงั้นถ้าเราคำนวณได้ตั้งแต่ 10 ขึ้นไป เราก็แทนตัวอักษรเข้าไป อย่าแทนตัวเลขเข้าไปละ เดี๋ยวผิด
อย่างที่บอกว่าใช้บ่อย ๆ เราก็จะคิดในใจได้เลย ลองเอาไปหัดดูได้ หรือมีวิธีอะไรใหม่ ๆ ก็แนะนำเจ้าของบล็อกด้วยนะ
Logic circuits / Operators
ตรงนี้ถ้าให้พูดจริง ๆ เนื้อหาก็จะเยอะอีก เจ้าของบล็อกแค่มา review เอาเป็นว่า ยกตัวอย่างบทความที่ใช้ในงานจริงดีกว่า มาออกแบบ Protocol ไว้สื่อสารกันเถอะ แนะนำว่าอย่าอ่านตอนนี้ดีกว่า หรือถ้าพอมีเวลาก็ลองเข้าไปอ่านในบทความที่แปะให้ ก็จะเห็นว่ามันสามารถเอาไปใช้ในการส่งข้อมูลหรือเข้ารหัสได้อีกหรืออื่น ๆ อีกเยอะ
นี่คือส่วนของโปรแกรมว่า Operater หรือตัวดำเนินการในระดับ bit มีหน้าตายังไงบ้าง และก็เทียบกับรูปด้านล่าง
https://learn.adafruit.com/binary-boolean-and-logic/logic-gates |
สภาพตอนนี้ ขนาดแมวยังปวดหัว picture link |
Memory
เราก็มาถึง ส่วนที่เยอะที่สุดกันแล้ว แต่โชคดีที่เจ้าของบล็อกเคยเขียนบทความคล้าย ๆ กันไว้ ซึ่งเนื้อหาที่เรียนกับที่เขียนในบทความก็คล้าย ๆ กัน เพียงแค่ใช้ Chip คนละตัวแค่นั้น
- ว่าด้วยเรื่องหน่วยความจำ สิ่งที่หลายคนมองข้าม ตอนที่ 1
- ว่าด้วยเรื่องหน่วยความจำ สิ่งที่หลายคนมองข้าม ตอนที่ 2
- ว่าด้วยเรื่องหน่วยความจำ สิ่งที่หลายคนมองข้าม ตอนที่ 3
- ว่าด้วยเรื่องหน่วยความจำ สิ่งที่หลายคนมองข้าม ตอนที่ 4
- ว่าด้วยเรื่องหน่วยความจำ สิ่งที่หลายคนมองข้าม ตอนที่ 5
โยนมาโป้งเดียวเลย ฮ่า ๆ แต่ว่าใน link ที่ให้ไปมีเรื่องที่ยังไม่ได้พูดถึงเหมือนใน slide อยู่ ก็จะมาอธิบายในหัวข้อนี้ละกัน
Electrically Erase Programmable ROM (EEPROM)
จริง ๆ เล่าคร่าว ๆ ในบทความ ว่าด้วยเรื่องหน่วยความจำ สิ่งที่หลายคนมองข้าม ตอนที่ 1 ว่าเป็นยังไงแล้ว แล้วก็บทความ ว่าด้วยเรื่องหน่วยความจำ สิ่งที่หลายคนมองข้าม ตอนที่ 4 ที่ลงรายละเอียดส่วนนึงให้ดูว่า EEPROM ทำงานยังไง แต่จะขอเพิ่มอีกนิดนึงให้กับตัว EEPROM ซักหน่อย
ถ้าพูดถึงการเก็บข้อมูลแล้ว ข้างในวงจรมันก็มีพวก transister ต่าง ๆ นั่นแหละ แต่สิ่งที่ทำให้ EEPROM ยังเก็บข้อมูลและยังรักษาข้อมูลไว้ได้ ขณะบอร์ดไม่ได้จิ้มไฟ ตรงนี้ก็เพราะความพิเศษของ transistor ที่เอามาใช้ใน EEPROM ก็คือ floating gate transistor พูดเข้าใจง่าย ๆ ตัว floating gate มันจะคล้าย ๆ กับ capacitor ช่วงที่เขียนข้อมูลมันจะเก็บสถานะไว้ภายใน floating gate และเพราะว่ามันคล้ายกับ capacitor จำเป็นต้องมาการ charge ประจุเข้าไป มันจึงใช้เวลาส่วนนึงในการเก็บข้อมูล ทำให้การเก็บข้อมูลแบบ EEPROM จะช้ากว่าแบบ SRAM ค่อนข้างสูง และเขียนข้อมูลได้ทีละ byte ด้วย ถ้าใครจะลงลึกอีกนิดเกี่ยวกับวิธีเก็บข้อมูลใน EEPROM ก็ดูจากบทความ EEPROM เก็บข้อมูลยังไงนะ
SRAM & DRAM
SRAM (Static Random Access Memory) มันก็คือหน่วยความจำที่สำคัญอย่างนึงใน Microcontroller นั่นแหละ ข้อดีของมันคือเร็วมากก memory ในส่วนนี้เป็นส่วนที่เรียกใช้บ่อยมาก เพราะงั้นมันต้องเร็ว
ใน 1 cell จะมี transister ต่ออยู่ด้วยกันประมาณ 4-6 ตัว ลักษณะการต่อจะเป็น Not gate 2 ตัวสลับกัน ใน 1 cell จะเก็บได้แค่ 1 Bit เท่านั้น
รูปภาพจาก : https://iis-people.ee.ethz.ch/~kgf/aries/5.html
|
ใน 1 cell จะมี transister ต่ออยู่ด้วยกันประมาณ 4-6 ตัว ลักษณะการต่อจะเป็น Not gate 2 ตัวสลับกัน ใน 1 cell จะเก็บได้แค่ 1 Bit เท่านั้น
ในส่วนของ DRAM (Dynamic Random Access Memory) 1 cell จะเก็บได้แค่ 1 Bit เหมือนกันกับ SRAM เพียงแต่ว่า DRAM จะใช้ transistor เพียงแค่ตัวเดียวเท่านั้น แต่สิ่งที่เพิ่มขึ้นมาคือ capacitor อีก 1 ตัว เพื่อเอามาใช้เก็บค่าสถานะของ cell นั่นเอง
https://electronics.stackexchange.com/questions/306002/why-does-a-dram-cell-necessarily-contain-a-capacitor |
ด้วยความที่เป็น capacitor มันจึงมีการ charge และ discharge เป็นเหตุทำให้การจะเก็บข้อมูลจำเป็นต้องเขียนใหม่ซ้ำเรื่อย ๆ เพื่อไม่ให้ข้อมูลหาย และการเก็บข้อมูลแต่ละครั้งคือมันก็จะยุ่งยากมากกว่า SRAM หน่อย แต่แลกมาด้วย ขนาดพื้นที่ที่ใช้น้อยกว่า SRAM มาก และราคาถูกกว่า SRAM ด้วย
ถ้าถามว่าเจ้าของบล็อกจะเลือกอันไหน ก็คงเป็น SRAM แน่นอนอยู่แล้ว ถึงแม้จะมีราคาที่แพงกว่า แต่เวลาใช้งานก็สะดวกสบายมากกว่า เน้นความสะบาย ฮ่า ๆ
Cache Memory (CPU Memory)
พูดถึง Cache Memory ในส่วนนี้ การเข้าถึงข้อมูลจะเร็วกว่าหน่วยความจำหลักแน่นอน เพราะว่าในส่วนนี้มันอยู่ภายใน CPU แต่ถึงจะเร็วกว่าแต่ก็แลกมาด้วยขนาดที่น้อยลงเช่นกัน
เราสามารถเข้าถึง memory เหล่านี้ผ่าน keyword register ในภาษา c นั่นเอง เพราะมันจะเรียกใช้ memory ใน CPU ให้เลย แต่ข้อควรระวังคือ register ไม่มี address เหมือนใน SRAM เพราะงั้น register จึงเหมาะกับการทำงานที่เน้นความเร็ว ไม่เน้นคำนวณนาน ๆ compiler บางตัวในภาษา c จะมีแจ้งเตือนถ้าหากใช้ register ผิดวิธี
Digital Input Port and Digital Output Port
กำลังเขียน..
_____________________________________________
reference
หนังสือ ภาษา C ฉบับสมบูรณ์ พ.ศ.2556
ความคิดเห็น
แสดงความคิดเห็น