วันจันทร์ที่ 9 พฤษภาคม พ.ศ. 2559

ATMega8 No X-TAL, ใช้งาน ATMega8 โดยไม่มีคริสตอล

X-TAL หรือ คริสตอลเป็นตัวกำเนิดสัญญานนาฬิกา หรือสร้างความถี่เพื่อให้ไอซีทำงานได้ถูกต้อง ดังนั้นบอร์ด Arduino จึงมีคริสตอลตามความถี่ของ cpu เช่น 8, 12 และ 16MHz และ ATMega8 มีรุ่นที่ใช้ความถี่ 8 และ 16MHz โดยดูจากรุ่น โดยรุ่นที่ระบุ -8PU หมายถึง 8MHz ถ้า -16PU หมายถึง 16MHz

เลือกบอร์ด ATmega8 แบบ ไม่ใช้คริสตัล

ตามปกติแล้วทุกครั้งที่ใช้ไอซี ATMega จะต้องมีคริสตัลต่อที่ขา XTAL1 และ XTAL2 ด้วย แต่อย่างไรก็ตาม ในทางปฏิบัติระบบเล็กๆ ไม่จำเป็นต้องใช้ก็ได้ เพราะภายใน Chip มีตัวกำเนิดสัญญานนาฬิกาอยู่แล้ว เรียกว่า Internal Clock ซึ่งเราสามารถใช้ได้แต่ต้องกำหนดบูตโหลดเดอร์ใหม่ เพื่อให้เรียกใช้สัญญานนาฬิกาภายใน Chip แทน

หมายเหตุ: หากต้องการกำหนดใช้หรือไม่ใช้ XTAL ให้ใช้โปรแกรม AVR Loader จะง่ายกว่า อ่านได้จากบทความเรื่อง AVR Loader



อุปกรณ์ที่ใช้ในบทความนี้


  1. USBasp โปรแกรมเมอร์
  2. Board สำหรับอัพโหลดโปรแกรม ไม่แนะนำให้สร้างเองเพราะจะยุ่งยากสั่งซื้อจากเว็บได้เลยราคาประมาณ 100 บาท 
  3. ไอซี ATmega8L-8PU
  4. R ค่า 10k สำหรับต่อขารีเซ็ตและ AVCC
  5. R ค่า 330ohm สำหรับต่อลดกระแสให้กับ LED 
  6. 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

ลองดูนะครับ ติดขัดอย่างไรโพสต์สอบถามได้ครับ 

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

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

Gtk4 ตอนที่ 6 Defining a Child object

Defining a Child object A Very Simple Editor ในบทความที่ผ่านมาเราสร้างโปรแกรมอ่านไฟล์ชนิดข้อความ และในบทความนี้ก็จะมาปรับแต่งโปรแกรมกันสักหน...