แสดงบทความที่มีป้ายกำกับ USBasp แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ USBasp แสดงบทความทั้งหมด

วันอังคารที่ 16 พฤศจิกายน พ.ศ. 2564

UsbAsp โปรแกรมบอร์ดไม่ได้

 หลังจากที่อัพเกรดเฟิร์มแวร์ให้กับ 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


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

AVR Loader วิธีง่ายๆ เพื่อใช้สัญญานนาฬิกาภายในไอซี

หลังจากที่พยายามให้ไอซี Atmega8 และ 16 ใช้ Internal Clock เพื่อลดการใช้ X-TAL โดยเบิร์น Bootloader เข้าไปก็ไม่ได้ผลเท่าที่ควร เพราะยุ่งยาก แต่ก็มีวิธีง่ายๆ สำหรับการกำหนดค่า โดยใช้โปรแกรม AVR Loader

การกำหนดค่า FUse จะเป็นการบอกว่าจะใช้สัญญานนาฬิกาจากไหน โดยโปรแกรม AVR Loader สามารถดาวน์โหลดได้จากอินเตอร์เน็ต

โปรแกรม AVR Loader สำหรับแก้ไข อัพโหลดไฟล์ .hex สำหรับ ATmega

วันจันทร์ที่ 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

วันอาทิตย์ที่ 8 พฤษภาคม พ.ศ. 2559

Atmel Studio 7: กว่าจะอัพโหลดได้

หลังจากที่ติดตั้ง USBasp ใน Windows 10 ได้แล้วก็ถึงคิวติดตั้งโปรแกรมเพื่อเขียนโปรแกรมและอัพโหลดผ่าน USBasp โดยความตั้งใจคือ ใช้โปรแกรมอื่นที่ไม่ใช่ Arduino IDE ซึ่งหลายคนอาจจะสงสัยว่าทำไม ในเมื่อ Arduino IDE ก็สามารถเขียนโปรแกรมควบคุมได้ง่ายๆ โดยไม่ต้องวุ่นวายอะไรเลย

ชุดเบิร์นโปรแกรม Atmega8/168/328 ผ่าน USBasp และสามารถต่ออุปกรณ์ได้เหมือนบอร์ด Arduino

แต่สำหรับผู้เขียนมีความรู้สึกว่า การเขียนโปรแกรมด้วย Arduino IDE เหมือนการเขียนโปรแกรมด้วย Visual Studio ของไมโครซอฟท์ที่ไม่ต้องคิดอะไรมาก อยากเขียนอะไรก็โหลดๆ ไลบรารี่ที่มีคนใจดีเขียนแจกไว้เยอะแยะไปหมด

นำมารวมกับโปรแกรมของเราแล้วเรียกใช้ตามรูปแบบที่เขากำหนดมา ก็ง่ายดี แต่บางครั้งไลบรารีเหล่านั้นก็ทำงานเกินไป ทำให้เสียพื้นที่โปรแกรม หรือไม่ได้อย่างที่เราต้องการ บางครั้งต้องการแค่นิดเดียว แต่ต้องโหลดไลบรารีมาทั้งหมด

เหตุผลการสำคัญ คือ การเขียนโปรแกรมด้วยภาษาซีสำหรับ AVR นั้นทำให้เราได้เรียนรู้เกี่ยวกับคอนโทรลเลอร์ได้ลึกขึ้น เพราะต้องเข้าไปจัดการส่วนต่างๆ ด้วยตนเอง

ทั้งหมดนี้ก็เพื่อที่จะพัฒนาและหวังลึกๆ อยากเขียนไลบรารีแจกบ้างเหมือนกัน :-)

วันเสาร์ที่ 7 พฤษภาคม พ.ศ. 2559

ติดตั้ง USBasp บนวินโดว์ 10 (ที่บ้าน)

เมื่อวานเขียนวิธีการติดตั้งไดร์เวอร์ USBasp โดยเป็นเครื่องโน้ตบุ้คที่ทำงาน มีชื่อผู้ผลิตให้เลือกเป็น VOTI แต่วันนี้หยุดอยู่บ้านลองมาทำตามบทความที่เขียนไว้กับเครื่องที่บ้าน

เศร้าจัง! หาชื่อผู้ผลิต VOTI ไม่เจอ หาอย่างไร อ่านจากเน็ต โหลดไดร์เวอร์ โหลด inf_wizard มาติดตั้งแล้วก็ยังใช้ไม่ได้

สุดท้ายก็มั่วอีกตามเคย... เลือกอะไรก็ได้ดูสิว่าจะใช้ได้ไหม...

คำตอบ คือ ใช้ได้ อัพโหลดโปรแกรมผ่าน Arduino IDE ได้สบายๆ

USBasp ที่ซื้อมาจากเว็บออนไลน์ ราคาไม่ถึงร้อย


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

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