โดยปกติแล้ว ATmega16 ไม่ได้อยู่ในรายการบอร์ดของ Arduino IDE เพราะเท่าที่เห็นแล้วบอร์ด Arduino ไม่ได้ใช้ Chip 40 ขา ซึ่งจะมี I/O มากกว่า โดยมี Port A, B, C และ D สามารถเลือกใช้งานขา I/O ได้ถึง 32 ขา ดังนั้นหากต้องการควบคุมอุปกรณ์เป็นจำนวนมากแล้วย่อมต้องเลือก ATmega16 แต่ถ้าอุปกรณ์เพียงไม่กี่ชิ้นก็ไม่เหมาะเพราะไอซี 40 ขาตัวนี้ค่อนข้างใหญ่เทอะทะพอสมควร
ดังนั้นหากต้องการใช้บน Arduino IDE ก็ต้องเข้าไปเพิ่มอุปกรณ์ในไฟล์ boards.txt และอื่นๆ อีกเล็กน้อย โดยเริ่มแรกหาจากอินเตอร์เน็ต ซึ่งทำตามแล้วยังใช้ไม่ได้ เพราะ IDE คนละเวอร์ชัน สภาพแวดล้อมเปลี่ยนจากเดิม แต่ก็ไม่เหนือบ่ากว่าแรง หากพยายามและมีหลักการการค้นหาปัญหา
ATmega16 ที่เพิ่มเข้าไปใน Arduino IDE จะแยกเป็นฮาร์ดแวร์อีกกลุ่มหนึ่ง |
วิธีการและข้อมูลที่จะเพิ่มลงใน boards.txt สามารถดูได้จาก เว็บนี้ แต่ผู้เขียนทำตามแล้วยังใช้ไม่ได้ ไม่มีอะไรปรากฏในเมนู Tools > Board
แต่ก็ลองผิดลองถูก ค้นหาไปเรื่อยๆ จนสามารถเพิ่มบอร์ดได้แต่แยกอีกเป็นกลุ่มหนึ่ง วิธีการดังนี้
1. สร้างโฟลเดอร์ใหม่ใน C:\Program Files (x86)\Arduino\hardware ในที่นี้ใช้ mega16
2. ในโฟลเดอร์ mega16 สร้างโฟลเดอร์ avr และโฟลเดอร์ variants เพื่อเก็บ pins_arduino.h แต่ผู้เขียนลองแล้วไม่สามารถใช้งานได้ จึงสร้างโฟลเดอร์ mega16 เพิ่มอีกชั้นหนึ่ง เป็น C:\Program Files (x86)\Arduino\hardware\mega16\avr\variants\mega16
3. เพิ่มข้อมูลเหล่านี้ในไฟล์ boards.txt
##############################################################
# Additional definitions for Arduino
# Author: Sudar <http://hardwarefun.com>
##############################################################
# Definitions for ATmega 8MHz
##############################################################
atmega16-8.name=Atmega16 (internal 8MHz clock)
atmega16-8.upload.tool=arduino:avrdude
atmega16-8.upload.protocol=usbasp
atmega16-8.upload.maximum_size=14336
atmega16-8.upload.speed=19200
atmega16-8.bootloader.low_fuses=0x84
atmega16-8.bootloader.high_fuses=0x99
atmega16-8.bootloader.file=
atmega16-8.build.mcu=atmega16
atmega16-8.build.f_cpu=8000000L
atmega16-8.build.core=arduino
atmega16-8.build.variant=mega16
##############################################################
ปัญหาที่พบ
เมื่อลองเพิ่ม ATmega16 เข้าไปใน boards.txt แล้วลองคอมไพล์ก็พบ error ดังนี้
fatal error: pins_arduino.h: No such file or directory
ค้นหาในอินเตอร์เน็ตส่วนใหญ่บอกว่าเป็นปัญหาเกี่ยวกับ variants เพราะในนั้นจะเก็บไฟล์ pins_arduino.h เอาไว้ซึ่งจะเป็นการแม็ปหรือกำหนดขาต่างๆ ของ IC
พยายามแก้ไข พยายามเพิ่มโน่นลบนี่หลายอย่างก็ไม่ได้สักที จนท้อไปพักหนึ่ง หยุดทำใจ หันไปคิดอย่างอื่น แล้วกลับมาค้นหาอีกที แต่คราวนี้เปลี่ยนวิธีใหม่ คือ ดูว่าระบบคอมไพล์อย่างไร เอาไฟล์ที่ไหนมารวมกันบ้าง
วิธีการก็เข้าไปกำหนดใน Files > Preference โดยคลิกเลือก Compile ในหัวข้อ Show verbose output during
คลิกเลือกแสดงผลการคอมไพล์ออกทางหน้าจอ |
หลังจากนั้นก็ลองคอมไพล์แล้วคัดลอกเอาข้อความ error มาตรวจสอบใน text editor เพราะจะได้ค้นหาและแยกส่วนได้ง่ายกว่า
ผลการคอมไพล์จะเห็นว่าโปรแกรมค้นหา pins_arduino.h จาก variants/mega16 อีกครั้งหนึ่ง |
เมื่อเห็นผลการคอมไพล์แล้วก็สร้างโฟลเดอร์ซ้อนอีกโฟลเดอร์หนึ่ง แล้วนำไฟล์ pins_arduino.h ไปเก็บไว้ในนั้น แล้วก็สามารถคอมไพล์ผ่าน และอัพโหลดได้ ใช้งานได้
หลังจากทดสอบว่าบอร์ดและอุปกรณ์ทำงานได้จาก Arduino IDE ก็ลองนำไปใช้ใน Atmel Studio 7 เวลามีปัญหาก็กลับมาทดสอบใน Arduino อีกทีว่าทำงานได้ไหม ทำให้ง่ายต่อการเรียนรู้การเขียนโปรแกรมแบบ Embed C ได้เป็นอย่างดี
เวลามีปัญหาติดขัดอะไรอย่าเพิ่งท้อ ลองปรับเปลี่ยนวิธีการค้นหาแล้วจะพบทางแก้ไข... นี่เป็นอีกวิธีการหนึ่งที่จะช่วยให้การเรียนรู้รุดหน้าได้....
บอร์ดที่ใช้อัพโหลดและทดสอบไอซี ATmega16 |
ไอซี ATmega16 ตัวจะใหญ่กว่า ATmega8 หลายเท่าตัว |
อีกมุมหนึ่งของบอร์ดทดลอง ATmega16 สามารถใช้กับ ATmega32 ได้ |
ไม่มีความคิดเห็น:
แสดงความคิดเห็น