2012年4月11日 星期三

修改 ATtiny85 的時脈 (clock speed)

ATtiny85 的時脈預設是 1 MHz (也就是每秒震盪百萬次),要修改時脈必須調整 Fuse 位元的設定,底下說明怎麼把 ATtiny85 時脈改成 16 MHz。

軟體與材料

你需要準備下列這些材料:

  • Arduino Uno 或 Duemilanove
  • ATtiny85 晶片
  • 麵包板
  • LED 一顆
  • 跳線些許
  • avrdude-GUI
準備工作

請先參考「使用 Arduino 燒錄 ATtiny」這篇先把 Arduino 變成燒錄器,並且連接 Arduino 與 ATtiny。

image

修改 Fuse

參考下圖設定 avrdude-GUI:

image

其中:

avrdude.exe File: 設定 avrdude.exe 所在的位置,例如 "C:\arduino-1.0\hardware\tools\avr\bin\avrdude.exe"

Programmer: 選擇 "Atmel STK500 Version 1.x firmware (stk500v1)

Port: 設定 Arduino 連接的 Serial Port,我 Arduino 接在 COM5,所以選 COM5

Device: 選擇 "ATtiny85 (t85)"

Command line Option: 設定為 -b 19200

Fuse: 將 hFuse 設定為 D4,lFuse 設定為 C1,代表要設定成 16 Mhz

註:關於 Fuse 的設定,請參考 Atmel AVR Fuse Calculator

接著按下 Fuse 旁的 Write 鈕,這樣就會把 ATtiny85 的時脈改成 16 MHz 了:

image 

測試

如果你有照「使用 Arduino 燒錄 ATtiny」這篇安裝 arduino-tiny,那麼可以到 Tools > Board 選擇 "ATtiny85 @ 16 MHz  (internal PLL; 4.3 V BOD)", 打開 Blink 程式,調整一下 delay 的時間,然後上傳程式看看 LED 閃爍的速度是否正確。

image

用 avrdude 改 Fuse

你也可以直接用 avrdude 來改 Fuse:

avrdude -q -c stk500v1 -P com5 -p attiny85 -b 19200 -U lfuse:w:0xc1:m -U hfuse:w:0xd4:m

不過必須先把底下幾個路徑加到 PATH 環境變數裏,不然的話,系統會抱怨找不到 avrdude 指令:

C:\arduino-xxxx\hardware\tools\avr\bin;
C:\arduino-xxxx\hardware\tools\avr\utils\bin;
C:\arduino-xxxx\hardware\tools\avr\etc

其中,arduino-xxxx 是 Arduino IDE 的版本號碼,例如 arduino-1.0。

參考資料

2 意見:

呆呆 提到...

前輩您好~
您提到的Tiny45/85,在國外不容易買到,除了至國外直接下訂,或者是對岸網購外,否則是很難買到,所以請教前輩您,是否可以推薦其它的替代IC晶片。

Cooper Maa 提到...

請問你要做什麼應用呢? 如果不考慮 pin count,其實也可以考慮 ATMega 系列,不一定非 Attiny 不可啊