SSブログ

Arduino IDE で ATtiny45 [Arduino]

ちっちゃなATtiny45ですが、Arduino IDEでスケッチをかいて動かすことができるようなので試してみました。

ArduinoISPを使う
http://www.geocities.jp/arduino_diecimila/use/attiny.html

ここに書いてあるとおりです。

・ATmega/ATtiny記述ファイルアーカイブ (hardware.zip)
   展開して、[File]-->[Preferences] の Skechbook location のフォルダにコピー
・拡張版avrdude.confファイル (avrdude_conf.zip)
   展開して
   Windowsの場合 arduino-002x\hardware\tools\avr\etc\
   Linuxの場合    arduino-002x/hardware/tools/
    に上書き

attinyboard.png
こんな感じで Board が増えていればOK

Duemilanove に ISPライターになるためのスケッチを描き込みます。
attinyisp.png

ISPライターシールドを載せて、ISPケーブルをつないで、クリップでATtiny45をはさみます。
attiny45isp.jpg

つづいて、ATtiny45 の fuse の設定です。
avrdude-GUI YCIT版 を使います。
attiny45fuse1.png
Fuse は Lo 0x62, Hi 0xDF, Ex 0xFF と出ますが、、

Engbedded AVR Fuse Calculator
http://www.engbedded.com/fusecalc

このサイトで調べてみます。すると、内部クロックは8MHzなのですが、8分周されてしまっているので、
attiny45fuse2.png
チェックをはずすと、Fuse は Lo 0xE2, Hi 0xDF, Ex 0xFF とすればいいことがわかります。

その Fuse を書き込みます。
attiny45fuse3.png

早速サンプルスケッチを描き込んでみてもいいのですが、LEDチカチカではおもしろくないので、昨日の虹色イルミネーションを書き込んでみたいと思います。
ただATtiny45はPWMが2つしかないようなので、スケッチで擬似PWMとしてみました。
ピン割付表を確認して digitalWrite のピン番号とLEDのピンを合わせます。
// Full Color LED で 虹色イルミネーション

#define GET_RAINBOW(TONE,COLOR) (max( min( 510 - abs( ( (TONE) + 510 * (COLOR) ) % 1530 - 510 ), 255 ), 0 ))
    // TONE(色調) 0-1529, COLOR(RGBの選択) 0-2

void setup()   {
  pinMode( 0, OUTPUT);
  pinMode( 1, OUTPUT);
  pinMode( 2, OUTPUT);
}

void loop()                     
{
  int r, g, b, t, i, d;
  for(t=0; t<1530; t++) {
    r = GET_RAINBOW(t,0);
    g = GET_RAINBOW(t,1);
    b = GET_RAINBOW(t,2);
    for(d=0; d<10; d++) {    // 擬似PWMの繰り返し回数(delayに相当)
      // 擬似PWM   
      digitalWrite( 0, HIGH );
      digitalWrite( 1, HIGH );
      digitalWrite( 2, HIGH );
      for(i=0; i<256; i++) {
        if( i == b )  digitalWrite( 0, LOW );
        if( i == g )  digitalWrite( 1, LOW );
        if( i == r )  digitalWrite( 2, LOW );
      }
    }
  }
}

書き込みはBoard を 「ATtiny45 / Int.8MHz」 にして
attiny45board.png
アップロードします。
エラーがでますが、
attiny45error.png
大丈夫らしい。

ATtiny45 をブレッドボードに載せて、こんな感じで回路をつくります。
attiny45rgb1.jpg
電源をつなぐと、、
attiny45rgb2.jpg
虹色になりました。

虹色イルミネーション [Arduino]

フルカラーLEDにグラデーションのような色の変化をさせてみようと思います。
rainbow1.png
こんな感じでRGBをそれぞれ変化させればいいのですが、この台形状の波形を1行のコードで表現してみたいと思いました。
そこで、、
aをある色が完全消灯から完全点灯になるまでの時間(台形の斜辺の部分の時間)とすると、
rainbow2.png
(1) y = x
(2) y = x - 2a (グラフをy軸方向に下げる)
(3) y = | x - 2a | (絶対値をとる)
(4) y = - | x - 2a | (反転)
(5) y = 2a - | x - 2a | (y軸方向に上げる)
(6) min, max で 0~a までの間に収める、xは0~6a以内(6aの剰余で)

analogWriteでは0~255までの256段階の値をとりますが、値と値の間隔は255個なので、a=255とします。
これをマクロ関数にすると、
#define GET_RAINBOW(TONE,COLOR) (max( min( 510 - abs( ( (TONE) + 510 * (COLOR) ) % 1530 - 510 ), 255 ), 0 ))
    // TONE(色調) 0-1529, COLOR(RGBの選択) 0-2

1行で表現できました。
digital 9, 10, 11のPWMを使います。LEDとの間に適度な抵抗をはさんで
illumi328.jpg
// Full Color LED で 虹色イルミネーション

#define GET_RAINBOW(TONE,COLOR) (max( min( 510 - abs( ( (TONE) + 510 * (COLOR) ) % 1530 - 510 ), 255 ), 0 ))
    // TONE(色調) 0-1529, COLOR(RGBの選択) 0-2

void setup()   {
  pinMode( 9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
}

void loop()
{
  for(int t=0; t<1530; t++) {
    analogWrite(  9, GET_RAINBOW(t,0) );
    analogWrite( 10, GET_RAINBOW(t,1) );
    analogWrite( 11, GET_RAINBOW(t,2) );
    delay(5);
  }
}

スケッチをアップロード!

赤の発色がいまひとつ。計算上の抵抗値は問題なさそうなんだけど、、。

ISPクリップケーブルで書き込む [Arduino]

書き込みの対象はATtiny45Vにしてみます。
attiny45v.jpg
ケーブルをブートローダライター [AE-UM232R]につないで、こんな感じでクリップに挟んで、
isp-wr-45.jpg
書き込みソフトは avrdude-GUI [YCIT] を使わせていただきました。
ayft45.png
「Read」ボタンでATtiny45 (t45) が判別されて、Fuseが表示されたらOK。

で、もうひとつ。
ブートローダライター [シールド版]でもやってみようと思います。
isp-s-1.jpg
これも、2x3のピンヘッダーを取り付けるISPライターになります。
ただ、Arduino側のISPのヘッダーと干渉しそうになるので、
isp-s-2.jpg
少し足を短くしてハンダ付けします。
isp-s-3.jpg
同様につないで、
ayai45.png
(1) Programmerに (avrisp) Atmel AVR ISP を選択
(2) Port にライターとなったArduino のシリアルポートを選択
(3) Command Line Option に 「-b 19200」と入力
(4) Read ボタンを押して、チップ名 と Fuse が出ることを確認

ISPクリップケーブルを作る [Arduino]

USBシリアル変換のとき、ISPでの書き込みの際に使ったICクリップです。
ケーブルが短かったのと、自分の整理のために作り直してまとめてみました。

ISPの2x3ピンのヘッダーは次のとおりです。
isp-pin.png
ATtiny45, ATtiny 2313のISPに使うピンは次のとおりです。
isp-t45.png
isp-t2313.png
接続もクロスなしのストレートです。
ちなみに色は共立エレショップのAVRWRT用ISPケーブルに合わせました。
ispcable.jpg
【共立エレショップ】eleshop.jp AVRWRT用ISPケーブル
http://eleshop.jp/shop/g/gABJ41M/

あるいは、ブレッドボードISPケーブルでもいいかもしれません。

【共立エレショップ】eleshop.jp AVRWRT用ブレッドボードISPケーブル
http://eleshop.jp/shop/g/g7C1412/

作成には、このAVRWRT用ISPケーブルをつかいました。
20cmほどあるのですが、15cmくらいのところでカットしました。
 (5cm残してカットすると残りの側が何かに使えるかなぁと思って15cmとしました。)
ispcable-cut.jpg
ICクリップに直接ハンダ付けしてもいいのですが、ATtiny45とATtiny2313の両方で使いたいので取り外しができるようにQIコネクタというものを使いました。
ispcable-con1.jpg
HOZANのP-706で圧着。
ispcable-con2.jpg
順番に気をつけてソケットに差し込みます。
ispcable-con3.jpg
ICクリップに接続。
ispcable-con4.jpg

次回はライター側と書き込みについてまとめてみたいと思います。


ハンダ付けヘルパー [ツール]

人間の腕は2本なのでハンダとハンダごてを持つといっぱいになってしまいます。
そこで部品を固定するにはクリップを使ったりしていました。
さらに基板そのものの固定をするために固定台を買ってみました。

太洋電機産業株式会社 こて先クリーナー/はんだこて台
http://www.goot.co.jp/item.html?c=110

st92pic.jpg

値段もお手頃で、日本製 MADE IN JAPAN です。
st92mij.jpg







この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。