เลือกบอร์ด ATmega8 แบบ ไม่ใช้คริสตัล |
ตามปกติแล้วทุกครั้งที่ใช้ไอซี ATMega จะต้องมีคริสตัลต่อที่ขา XTAL1 และ XTAL2 ด้วย แต่อย่างไรก็ตาม ในทางปฏิบัติระบบเล็กๆ ไม่จำเป็นต้องใช้ก็ได้ เพราะภายใน Chip มีตัวกำเนิดสัญญานนาฬิกาอยู่แล้ว เรียกว่า Internal Clock ซึ่งเราสามารถใช้ได้แต่ต้องกำหนดบูตโหลดเดอร์ใหม่ เพื่อให้เรียกใช้สัญญานนาฬิกาภายใน Chip แทน
หมายเหตุ: หากต้องการกำหนดใช้หรือไม่ใช้ XTAL ให้ใช้โปรแกรม AVR Loader จะง่ายกว่า อ่านได้จากบทความเรื่อง AVR Loader
อุปกรณ์ที่ใช้ในบทความนี้
- USBasp โปรแกรมเมอร์
- Board สำหรับอัพโหลดโปรแกรม ไม่แนะนำให้สร้างเองเพราะจะยุ่งยากสั่งซื้อจากเว็บได้เลยราคาประมาณ 100 บาท
- ไอซี ATmega8L-8PU
- R ค่า 10k สำหรับต่อขารีเซ็ตและ AVCC
- R ค่า 330ohm สำหรับต่อลดกระแสให้กับ LED
- LED สำหรับทดสอบโปรแกรม
USBasp และบอร์ดสำหรับอัพโหลด (มีขาต่อให้ใช้งานได้) |
เบื้องต้นสามารถอ่านและโหลดบูตโหลดเดอร์ที่ไม่ใช่คริสตัลได้ที่ https://todbot.com/blog/2009/05/26/minimal-arduino-with-atmega8/comment-page-2/ โดยดาวน์โหลดไฟล์ http://todbot.com/blog/wp-content/uploads/2009/05/atmega8_noxtal.zip แล้วแตกไฟล์ไปไว้ใน Arduino\hardware\arduino\avr\bootloaders ซึ่งก็แล้วแต่เวอร์ชันของ Arduino IDE ด้วย เพราะโฟลเดอร์จะไม่เหมือนกัน
ขยายไฟล์ atmega8_noxtal ไปไว้ใน hardware, bootloader |
จากนั้นเข้าไปเพิ่มบอร์ดที่ไฟล์ boards.txt โดยเพิ่มบอร์ดชื่อ ATmega8-noxtal @8MHz ดังนี้
##############################################################
atmega8noxtal.name=ATmega8-noxtal @8MHz
atmega8noxtal.upload.protocol=stk500
atmega8noxtal.upload.maximum_size=7168
atmega8noxtal.upload.speed=38400
atmega8noxtal.upload.using=usbasp
atmega8noxtal.upload.tool=usbasp
atmega8noxtal.bootloader.tool=avrdude1
atmega8noxtal.bootloader.low_fuses=0xe4
atmega8noxtal.bootloader.high_fuses=0xc4
atmega8noxtal.bootloader.path=atmega8_noxtal
atmega8noxtal.bootloader.file=atmega8_noxtal/ATmegaBOOT.hex
atmega8noxtal.bootloader.unlock_bits=0x3F
atmega8noxtal.bootloader.lock_bits=0x0F
atmega8noxtal.build.variant=arduino:standard
atmega8noxtal.build.mcu=atmega8
atmega8noxtal.build.f_cpu=8000000L
atmega8noxtal.build.core=arduino
โดยตัวหนังสือสีแดง คือ ส่วนที่แก้ไขสำหรับ IDE เวอร์ชัน 1.6.8 และกำหนดให้ใช้ usbasp เป็นเครื่องมือในการอัพโหลด แก้ไขปัญหา error
Error while uploading: missing 'uload.tool' configuration parameter
ส่วน build.variant ถ้าไม่กำหนดจะมี error
error: pins_arduino.h: No such file or directory
สำหรับ bootloader.tool ตามตัวอย่างกำหนดเป็น avrdude แต่สำหรับไอซี ATmega8 จะมีปัญหาเกี่ยวกับ efuse ดังนี้
"efuse" memory type not defined for part "ATMEGA8"
ซึ่งต้องเข้าไปแก้ไขใน platform.txt โดยคัดลอกส่วนของ AVR Uploader ที่มีมาสร้างใหม่แล้วกำหนดชื่อเป็น avrdude1 เพื่อให้เรียกใช้โดยบอร์ดชื่อ atmega8noxtal แล้วลบเอาส่วน efuse ออก ดังนี้
# AVR2 Uploader/Programmers tools
# ------------------------------
tools.avrdude1.path={runtime.tools.avrdude.path}
tools.avrdude1.cmd.path={path}/bin/avrdude
tools.avrdude1.config.path={path}/etc/avrdude.conf
tools.avrdude1.upload.params.verbose=-v
tools.avrdude1.upload.params.quiet=-q -q
tools.avrdude1.upload.pattern="{cmd.path}" "-C{config.path}" {upload.verbose} -p{build.mcu} -c{upload.protocol} -P{serial.port} -b{upload.speed} -D "-Uflash:w:{build.path}/{build.project_name}.hex:i"
tools.avrdude1.program.params.verbose=-v
tools.avrdude1.program.params.quiet=-q -q
tools.avrdude1.program.pattern="{cmd.path}" "-C{config.path}" {program.verbose} -p{build.mcu} -c{protocol} {program.extra_params} "-Uflash:w:{build.path}/{build.project_name}.hex:i"
tools.avrdude1.erase.params.verbose=-v
tools.avrdude1.erase.params.quiet=-q -q
tools.avrdude1.erase.pattern="{cmd.path}" "-C{config.path}" {erase.verbose} -p{build.mcu} -c{protocol} {program.extra_params} -e -Ulock:w:{bootloader.unlock_bits}:m -P{serial.port} -b{upload.speed} -D "-Uflash:w:{build.path}/{build.project_name}.hex:i"
tools.avrdude1.bootloader.params.verbose=-v
tools.avrdude1.bootloader.params.quiet=-q -q
tools.avrdude1.bootloader.pattern="{cmd.path}" "-C{config.path}" {bootloader.verbose} -p{build.mcu} -c{protocol} {program.extra_params} "-Uflash:w:{runtime.platform.path}/bootloaders/{bootloader.file}:i" -Ulock:w:{bootloader.lock_bits}:m
ของเดิมเป็นแบบนี้ลบในส่วน efuse ออก
tools.avrdude.erase.pattern="{cmd.path}" "-C{config.path}" {erase.verbose} -p{build.mcu} -c{protocol} {program.extra_params} -e -Uefuse:w:{bootloader.extended_fuses}:m -Ulock:w:{bootloader.unlock_bits}:m -Uhfuse:w:{bootloader.high_fuses}:m -Ulfuse:w:{bootloader.low_fuses}:m
เมื่อแก้ไขไฟล์ 2 ไฟล์นี้เรียบร้อยแล้วก็เปิดโปรแกรม Arduino IDE แล้วเลือกบอร์ด ATmega8-noxtal @8MHz แล้วก็ลองเบิร์น bootloader ดู อาจจะมีข้อความเตือนข้อผิดพลาด แต่ก็สามารถเบิร์นได้ และสุดท้ายลองอัพโหลดไฟล์โปรแกรมโดยใช้ Upload Using Programmer
สุดท้ายก็เอา IC ไปต่อใช้งานข้างนอก โดยไม่ต้องมีคริสตัล ก็สะดวกไม่ยุ่งยาก ลดการใช้อุปกรณ์ไป 3 ตัว คือ XTAL และ c1, c2 ค่า 22pf
ต่อใช้งานโดยไม่มี XTAL |
ต่อใช้งานภายนอกโดยไม่ใช้คริสตัล |
ไอซี ATmega8L-8PU |
ไม่มีความคิดเห็น:
แสดงความคิดเห็น