หลังจากที่อัพเกรดเฟิร์มแวร์ให้กับ UsbAsp แล้วก็มีปัญหาอัพโหลดได้ครั้งเดียว หลังจากนั้นก็ไม่สามารถอัพโหลดได้ ต้องถอดออกแล้วเสียบเข้าไปใหม่ถึงจะอัพโหลดได้
ลองหาข้อมูลก็ไปพบเว็บหนึ่งที่อธิบายการอัพเกรดเฟิร์มแวร์แล้วให้เซ็ต jumper สำหรับ Very Low Frequency เพื่ออัพโหลดบอร์ดบางบอร์ทที่ตอบสนองไม่ทัน แต่ถ้าไม่เซ็ต jumper ก็ใช้ออปชัน -B โดยกำหนด -B 1024 ก็ลองกำหนดตาม ก็สามารถอัพโหลดได้ตามปกติ และลองกำหนดค่าที่เหมาะสมได้ -B 10 เป็นต้นไป ถ้าต่ำกว่านี้ก็อัพโหลดไม่ได้
$ avr-gcc -Wall -g -Os -mmcu=atmega16 -o led.bin led.c
$ avr-objcopy -j .text -j .data -O ihex led.bin led.hex
$ avrdude -p m16 -c usbasp -U flash:w:led.hex:i -F -P usb
avrdude: error: program enable: target doesn't answer. 1
avrdude: initialization failed, rc=-1
avrdude: AVR device initialized and ready to accept instructions
avrdude: Device signature = 0x1859e0
avrdude: Expected signature for ATmega16 is 1E 94 03
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude done. Thank you.
ตัวอย่างโปรแกรม
led.c
#define F_CPU 8000000
#include <avr/io.h>
#include <util/delay.h>
int main(void){
DDRD = 0x00;
PORTD = 0x00;
DDRB = 0xff; //PB0-7 as output.
PORTB = 0xff;
while (1){
if((PIND&(1<<PIN7)) == (1<<PIN7)){
PORTB = (PORTB == 0xff)?(PORTB <<1):(PORTB<<1)|1;
_delay_ms(50);
}else{
PORTB = 0xff;
}
}
return 0;
}
คอมไพล์และสร้างไฟล์ .hex
avr-gcc -Wall -g -Os -mmcu=atmega16 -o led.bin led.c
avr-objcopy -j .text -j .data -O ihex led.bin led.hex
อัพโหลดโปรแกรม
avrdude -p m16 -c usbasp -U flash:w:led.hex:i -F -P usb_device -B 100
ไม่มีความคิดเห็น:
แสดงความคิดเห็น