เบิร์น Bootloader ATmega328P

การจะทำให้ ATmega328P ใช้งานเป็น Arduino ได้นั้น จำเป็นที่จะต้องมี Bootloader ก่อน ซึ่งเจ้า Bootloader นี่มันคือ firmware ที่ทำหน้าที่ช่วยในการ upload sketch ที่เราเขียนผ่านทางสาย USB โดยไม่ต้องมีเครื่องโปรแกรมนั่นเอง

ซึ่งเจ้า Bootloader ของ Arduino นี้ก็ไม่ใช่เฉพาะ ATmega328P เท่านั้น แต่ชิปในกลุ่ม 328 ตั้งแต่ ATmega8 ATmega48 ATmega88 ATmega168 ATmega328 ล้วนแต่ลง Bootloader ของ Arduino ได้ทั้งสิ้น

โดยบทความนี้จะแสดงวิธีการ ขั้นตอนการเบิร์น Bootloader ลงบน ATmega328P ด้วยการโปรแกรมแบบ  ISP (In System Programming) จาก บอร์ด Arduino UNO

การส่งข้อมูลแบบ บัส SPI (Serial Peripheral Interface Bus)

การส่งข้อมูลแบบ บัส SPI


SPI Bus (Serial Peripheral Interface Bus) เป็นรูปแบบหนึ่งของการสื่อสารข้อมูลระหว่างอุปกรณ์แบบดิจิทัลที่พบเห็นได้บ่อย และใช้กับอุปกรณ์ได้มากกว่าสองขึ้นไปและนำมาต่อกันเป็นบัส (Bus) บัส SPI ส่งและรับข้อมูลทีละบิต (Bit Serial) และใช้สัญญาณ Clock เป็นตัวกำหนดจังหวะการทำงาน (ดังนั้นจึงเรียกว่า Synchronous, Bit-Serial Data Communication) มีการกำหนดบทบาทในการทำงานของอุปกรณ์ในระบบบัส แบ่งเป็น SPI Masterและ SPI Slave โดยที่ SPI Master เป็นฝ่ายเริ่มการสื่อสารข้อมูล และสร้างสัญญาณ Clock (มักใช้ชื่อสัญญาณว่า SCK) มากำหนดจังหวะการส่งและรับข้อมูล และด้าน SPI Slave จะเป็นฝ่ายคอยตอบสนอง และในระบบบัส SPI อาจมีอุปกรณ์ที่เป็น SPI Slaveได้มากกว่าหนึ่ง (Single-Master, Multi-Slave)

http://arduinole.blogspot.com/


การใช้งาน ISP (In System Programming)

  • MOSI == Master Out Slave In: data input
  • MISO == Master In Slave out : data output
  • SCK == Serial ClocK : clock input
  • RST == RESET: used to activate the serial Programming

จากข้างบนจะเห็นว่า ขาที่เป็น MOSI นั้น จะเป็นขาส่งข้อมูลออก ( Output ) ของตัวแม่ ( Master )
MISO นั้น เป็นขาที่รับข้อมูล (Input ) ที่ส่งมาจากลูก ( Slave )
SCK นั้น เป็นตัวนาฬิกาคอยให้จังหวะการส่งข้อมูล
ขาสุดท้ายก็คือ RST นั้น คือตัวที่เริ่มให้มีการเขียนโปรแกรมลง Chip


ขั้นตอนการทำงาน ISP (In System Programming) ผ่าน บัส SPI

เบิร์น Bootloader ATmega328

ขั้นตอนการเขียนโปรแกรม ( Code ) ลงบน Chip นั้นจะส่งข้อมูลเป็นแบบ Serial หรือ ISP จะเริ่มต้นทำงานด้วยขณะที่ขา RST ถูกปรับให้มีค่า Logic High ( ระดับสัญญาณ เท่ากับ VCC )

สำหรับขา RST นั้น ปกติ ใช้สำหรับ Reset โปรแกรม กล่าวคือสัญญาณ Reset จะหยุดโปรแกรมและเริ่มต้นการทำงานใหม่ โดยเราทำให้ขา RST มีระดับสัญญาณต่ำ ( Logic Low )

เมื่อขา RST ถูกตั้งให้เป็น High คำสั่งพิเศษที่เรียกว่า Programming Enable Instruction จะทำงานก่อน

สำหรับการรับส่งข้อมูลแบบ Serial คือการส่งข้อมูลจาก Arduino ด้วยช่องสัญญาณเพียงช่องเดียว หรือ ขาสัญญาณขาเดียว ในที่นี้คือขาสัญญาณ MISO และ MOSI

โดยข้อมูลจะส่งผ่าน MOSI ทีละ bit โดยแต่ละ bit สัญญาณจาก SCK จะเป็นตัวควบคุมจังหวะของการรับส่ง และทางขา MISO ใช้สำหรับรับข้อมูลจากลูกส่งกลับไปยังต้วแม่

โดยเริ่มจากข้อมูลใน Chip จะถูกลบหมด (Chip Erase) การลบข้อมูลใน Flash Memory และจะตามด้วยการเขียนค่า เลขฐานสิบหก (Hexadecimal Number) ลงไปในแต่ละตำแหน่งใน Flash หรือ Ram Memory ของ Chip

ความเร็วของสัญญาณนาฬิกา ของ ISP จะถูกกำหนดโดยสัญญาณนาฬิกาอ้างอิงจาก External Clock หรือ Crystal โดยมีข้อกำหนดว่า ความเร็วของขา SCK นั้นจะเร็วไม่เกิน 1/16 ของ ความเร็วของ Crystal ไม่ได้


รายการอุปกรณ์


การเบิร์น Bootloader ให้กับ ATmega328P มีขั้นตอนดังนี้

1 : เชื่อมต่อวงจร


เชื่อมต่อวงจร Minimum ATmega328P Circuit ตามรูปด้านล่าง

เบิร์น Bootloader ATmega328P

เขื่อมต่อสาย จาก Arduino UNO R3 ไปที่ ATmega328P ตามรูปด้านล่าง

VCC – เชื่อมต่อ Arduino ขา 5V กับ ขา 7 ของ ATmega328
GND – เชื่อมต่อ Arduino ขา GND กับ ขา 8 ของ ATmega328
SCK – เชื่อมต่อ Arduino ขา 13 กับ ขา 19 ของ ATmega328
MISO – เชื่อมต่อ Arduino ขา 12 กับ ขา 18 ของ ATmega328
MOSI – เชื่อมต่อ Arduino ขา 11 กับ ขา 17 ของ ATmega328
RTS – เชื่อมต่อ Arduino ขา 10 กับ ขา 1 ของ ATmega328

เบิร์น Bootloader ATmega328P


2. ติดตั้งโปรแกรม Arduino IDE

สำหรับการเขียนโปรแกรมของ Arduino IDE นั้นจะใช้ภาษา C/C++ ซึ่งเป็นรูปแบบภาษาซีประยุกต์แบบหนึ่ง ที่มีโครงสร้างการทำงานของตัวภาษาโดยรวม คล้ายกับ ภาษาซีมาตรฐาน (ANSI-C) ทั่วๆไป เพียงแต่ได้มีการปรับปรุงเพื่อลดความยุ่งยากในการใช้งานลง เพื่อให้ผู้ใช้สามารถใช้งาน เขียนโปรแกรมได้ง่าย และสะดวกมากกว่าเขียนภาษาซี แบบมาตรฐาน

Arduino integrated development environment หรือเรียกสั้นๆว่า โปรแกรม Arduino IDE เป็นโปรแกรมที่ “แจกฟรี” ภายใต้เงื่อนไขในการใช้งานลักษณะ Open source ซึ่ง Arduino IDE จะทำหน้าที่ ติดต่อ ระหว่าง คอมพิวเตอร์ ของเรา (Windows, Mac OS และ Linux) กับ บอร์ด Arduino UNO R3 ซึ่งโปรแกรมนี้ออกแบบให้ง่ายต่อการเขียนโค้ดและอัปโหลดโค้ดที่เราเขียน เข้าสู่ บอร์ด Arduino UNO R3

โดย Download ตัวติดตั้งได้จาก

https://www.arduino.cc/en/Main/Software

เลือก Windows Win 7 and newer

ติดตั้งโปรแกรม Arduino IDE


เมื่อดาวน์โหลดเสร็จแล้ว ให้ติดตั้งตามที่โปรแกรมแนะนำ



เลือก I Agree

ติดตั้งโปรแกรม Arduino IDE

เลือก Next >

เลือก Install

ติดตั้งโปรแกรม Arduino IDE

โปรแกรมใช้งานได้แล้ว เลือก Close เพื่อปิดโปรแกรมลงไป

โปรแกรมใช้งานได้แล้ว


3 : ตรวจสอบไดร์เวอร์ ของ ATmega16U2


บอร์ดนี้มีตัวสื่อสารกับ พอร์ต USB ของคอมพิวเตอร์ เป็นชิป ATmega16U2 ซึ่งแปลงสัญญาณ USB เป็นแบบอนุกรม เพื่อช่วยให้คอมพิวเตอร์ของสามารถอัพโหลดโปรแกรมและสื่อสารกับชิป ATMEGA328P ได้

เชื่อมต่อสาย USB จาก คอมพิวเตอร์ ไปที่บอร์ด Arduino UNO R3


คลิกขวา ที่ Start เลือกไปที่ Device Manager

ตรวจสอบไดร์เวอร์ ของ Keyestudio ESP32
ตรวจสอบไดร์เวอร์ ของ Arduino UNO R3



ไปที่ Ports (COM & LPT) จะพบ Arduino Uno ในตัวอย่างเป็น (COM3) แสดงว่าคอมพิวเตอร์ของเราสามารถ ติดต่อสื่อสารกับ บอร์ด Arduino UNO R3 ได้แล้ว


4 : อัพโหลดโค้ด ให้ Arduino UNO เป็น เครื่องเขียนโปรแกรม


เปิดไฟล์ ArduinoISP โดยไปที่ File -> Examples -> 11.ArduinoISP -> ArduinoISP


ไปที่ Tools -> Board -> Arduino AVR Boards -> Arduino Uno


เลือก Port โดยไปที่ Tools -> Port -> COM3 (Arduino Uno)
(โดย COM3 แต่ละเครื่องจะไม่เหมือนกัน ให้เลือกตามที่ปรากฎ)

คลิกที่ Upload

รอจนกระทั่งขึ้น Done uploading. ที่แถบด้านล่าง แสดงว่าเราอัพโหลดโปรแกรมลงบอร์ดได้สำเร็จแล้ว และถึงขั้นตอนนี้ บอร์ด Arduino UNO ก็พร้อมที่จะเป็น เครื่องเขียนโปรแกรม แล้ว


5 : เบิร์น Bootloader ให้กับ ATmega328P


ไปที่ Tools -> Programmer -> เลือกเป็น Arduino ISP


ไปที่ Tools -> Burn Bootloader

รอจนกระทั่งขึ้น Done burning bootloader. ที่แถบด้านล่าง แสดงว่าเราเบิร์น Bootloader ให้กับ ATmega328P ที่ทำงานแบบ Arduino Uno R3 ได้สำเร็จแล้ว

บทความต่อไป C1: โปรแกรมแรก กับ ATmega328P >>>

Leave a Reply

Your email address will not be published. Required fields are marked *

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

Privacy Preferences

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

Allow All
Manage Consent Preferences
  • Always Active

Save