Menu

2014/03/12

如何讓Attiny85使用8 MHz時脈



如果只是想要有一個小小gadget,幾個IO而已,相較於用一整個Arduino Uno,可以用ATtiny85就好。


在我的計畫裡,我是要用ATtiny85以一個固定的頻率來開關一個馬達,而開關的頻率是80 Hz。80 Hz = 一秒發生80次,所以在一個循環內,所花的時間為1/80=0.0125秒,而一個循環內包含一半時間的開與一半時間的關,所以各花了0.0125/2=0.00625秒=6.25毫秒(millisecond)。
所以我原本在ATtiny85上寫上的程式碼即為:

    digitalWrite(sol, HIGH);
    delay(6.25);
    digitalWrite(sol, LOW);
    delay(6.25);

結果經過其他方式去驗證這個馬達頻率,結果卻是83.3左右Hz。本來以為只是我的驗證方法有錯誤,但是後來去Arduino官網上查看"delay"這個功能的介紹時,卻發現:

delay()
Description
Pauses the program for the amount of time (in miliseconds) specified as parameter. (There are 1000 milliseconds in a second.)

所以delay這個功能的數值所代表的意義是以"毫秒(millisecond)"為單位的,另外在底下的See also裡,可以看到另外一個"delayMicroseconds()"的功能。這時候才發現delay裡面填寫的直不可有小數點,如果要更精細數值的delay請用"delayMicroseconds()(微秒)"。所以將程式碼改成:

    digitalWrite(solenoid, HIGH);
    delayMicroseconds(6250);
    digitalWrite(solenoid, LOW);

    delayMicroseconds(6250);

現在一個問題解決,又遇到另一個問題。ATtiny85在出廠的時候,一開始內建的時脈是1 MHz,但是delayMicroseconds這個功能不可以用在時脈太低的晶片上(1 MHz就不行 ...),所以解決辦法就是更改Attiny85的時脈。而目前就我所知,Attiny85可以用的時脈有1 MHz, 8 MHz, 16 MHz, 20 MHz這幾種選擇。要用20 MHz似乎要用一顆external oscillator,對我來說有點太複雜了。而使用16 MHz時脈則是有中文版的教學(修改 ATtiny85 的時脈 (clock speed)),但是使用文中的使用方法需要用到avrdude,而且我有點無法裡面作者的文法,所以對我來說還是太複雜了。

再經過一些搜尋後,找到了最簡單的方式,如果你已經照著上面的影片的步驟做過了,只需要多一個步驟就可以用8 MHz的時脈了(對我來說只要夠用到delayMicroseconds即可)。
方法:

1. 如同影片中將你的Attiny85接上,打開Arduino IDE,選擇Tools,選擇Board,選擇"ATTiny85 (internal 8MHzclock)",而不是影片中說的1 MHz。


2. 接著選擇Tools,點選"Burn Bootloader",然後Arduino IDE就會顯示"正在燒錄中,請稍待"之類的話,過了大概十幾秒就會顯示完成。

3. 在燒錄bootloader完畢後,IDE會出現以下的字樣,不用裡它們。
avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85

avrdude: please define PAGEL and BS2 signals in the configuration file for part ATtiny85


4. 接著就可以按IDE左上角的箭號,把你的程式Upload到Attiny85裡面了。

沒有留言: