ATtiny85 的時脈預設是 1 MHz (也就是每秒震盪百萬次),要修改時脈必須調整 Fuse 位元的設定,底下說明怎麼把 ATtiny85 時脈改成 16 MHz。
軟體與材料
你需要準備下列這些材料:
- Arduino Uno 或 Duemilanove
- ATtiny85 晶片
- 麵包板
- LED 一顆
- 跳線些許
- avrdude-GUI
準備工作
請先參考「使用 Arduino 燒錄 ATtiny」這篇先把 Arduino 變成燒錄器,並且連接 Arduino 與 ATtiny。
修改 Fuse
參考下圖設定 avrdude-GUI:
其中:
● 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 了:
測試
如果你有照「使用 Arduino 燒錄 ATtiny」這篇安裝 arduino-tiny,那麼可以到 Tools > Board 選擇 "ATtiny85 @ 16 MHz (internal PLL; 4.3 V BOD)", 打開 Blink 程式,調整一下 delay 的時間,然後上傳程式看看 LED 閃爍的速度是否正確。
用 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。
前輩您好~
回覆刪除您提到的Tiny45/85,在國外不容易買到,除了至國外直接下訂,或者是對岸網購外,否則是很難買到,所以請教前輩您,是否可以推薦其它的替代IC晶片。
請問你要做什麼應用呢? 如果不考慮 pin count,其實也可以考慮 ATMega 系列,不一定非 Attiny 不可啊
回覆刪除