yothinin@orangepione:~/avr_c/avr-gcc/ex$ avrdude -p m328p -c avrispmkii -U flash:w:blink13.hex:i -F -P usb_device
avrdude: stk500v2_command(): command failed
avrdude: stk500v2_program_enable(): bad AVRISPmkII connection status: Target not detected
avrdude: initialization failed, rc=-1
avrdude: AVR device initialized and ready to accept instructions
avrdude: Device signature = 0x3088d6
avrdude: Expected signature for ATmega328P is 1E 95 0F
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.
พยายามค้นหาข้อมูลในเน็ตอยู่นานก็ยังไม่ได้คำตอบ เลยเข้าไปดูรายละเอียดของอุปกรณ์ที่เว็บของ AVRISP ก็มีสถานะดังนี้
สาเหตุก็คือ ตัวบอร์ด Uno ไม่มีไฟเลี้ยงนั่นเอง เพราะเคยชินกับ UsbAsp กับบอร์ดทดลอง ที่ไฟเลี้ยงมาจาก UsbAsp ก็สามารถอัพโหลดโปรแกรมได้ แต่สำหรับ Stk500 MkII นั้นจ่ายไฟเลี้ยงไปไม่เพียงพอ
เมื่อหาอะแดปเตอร์มาเสียบให้กับ Uno ก็สามารถอัพโหลดโปรแกรมได้
ตัวอย่างโปรแกรม
ตัวอย่างโปรแกรมให้ไฟ LED กระพริบ โดยเลือกใช้ Buil in LED ที่อยู่ในบอร์ด Uno โดยจะเรียกว่า pin13 หรือ PB5 หรือ 0b000100000 หรือเขียนสั้นลงเป็น 0b100000
blink13.c
#include <avr/io.h>
#define F_CPU 16000000
#define BLINK_DELAY_MS 250
#include <util/delay.h>
int main (void)
{
// Arduino digital pin 13 (pin 5 of PORTB) for output
DDRB |= 0B100000; // PORTB5
while(1) {
// turn LED on
PORTB |= 0B100000; // PORTB5
_delay_ms(BLINK_DELAY_MS);
// turn LED off
PORTB &= ~ 0B100000; // PORTB5
_delay_ms(BLINK_DELAY_MS);
}
}
คอมไพล์
avr-gcc -Wall -g -Os -mmcu=atmega328p -o blink13.bin blink13.c
เปลี่ยนไฟล์ให้เป็น hex
avr-objcopy -j .text -j .data -O ihex blink13.bin blink13.hex
อัพโหลดโปรแกรม
avrdude -p m328p -c stk500v2 -U flash:w:blink13.hex:i -F -P usb_device -B100 -v
พารามิเตอร์ -B 100 กำหนดให้อัพโหลดแบบ Very Low Frequency เพื่อให้อัพโหลดช้าลง (ใช้สำหรับบอร์ดบางรุ่นที่รับโค้ดไม่ทัน) และ -v แสดงรายละเอียดการอัพโหลด สามารถใส่ -vvv ได้
ไม่มีความคิดเห็น:
แสดงความคิดเห็น