วันอังคารที่ 17 พฤษภาคม พ.ศ. 2559

เพิ่ม ATmega16 เข้าไปใน boards.txt

การเริ่มเรียนรู้ วิธีการเขียนโปรแกรมด้วย AVR Studio 7 บางครั้งก็สับสนไม่แน่ใจว่าโปรแกรมผิดหรือว่าอุปกรณ์ใช้ไม่ได้ ดังนั้นควรมีหลักในการยึดเพื่อเปรียบเทียบบ้างก็จะดี ทำให้หาสาเหตุได้ง่าย โดยผู้เขียนมักจะใช้ Arduino IDE เป็นหลักในการยัด โดยจะทดสอบกับ Arduino IDE แล้วสามารถใช้งานได้ ก็ถือว่าบอร์ดนั้นใช้ได้ จะได้หาสาเหตุที่โปรแกรมต่อไป

โดยปกติแล้ว 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 ได้





ไม่มีความคิดเห็น:

แสดงความคิดเห็น

Driver สำหรับ USB UART TTL

https://drive.google.com/open?id=0B80EqvaAGSB8dU9EMXdwQmJCLVE