2015年11月16日 | 公開。 |
今回はATtiny85のスケッチをArduino IDEで開発します。Arduino IDEは、標準ではATtiny85のスケッチの開発に対応していませんので、MITメディアラボのHigh-Low Techグループが配布しているATtinyサポートファイルを利用します。
また、ATtiny85へのスケッチの書き込みは、Arduino用ブートローダ/スケッチライタを使って書き込みます。
商品名 | Arduino用ブートローダ/スケッチライタキット | |
税抜き小売価格 | 3000円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino用ブートローダ/スケッチライタキットサポートページ |
Arduino IDEへのATtinyサポートファイルのインストール方法や、ATtiny85へのスケッチの書きこみ方法については、Arduino用ブートローダ/スケッチライタの製作(8)の記事に説明がありますので、そちらをご覧ください。
最初にも説明したとおり、今回は、同じ回路に対し、2種類のスケッチを作りました。1つ目は、LEDを単に点滅させるだけの点滅版で、2つ目は、PWM制御で光量をなめらかに変化させるPWM調光版です。この節では、点滅版について説明します。
点滅版のスケッチを次に示します。
void setup()
{
pinMode(0,OUTPUT);
pinMode(1,OUTPUT);
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
} // setup
void loop()
{
digitalWrite(0,HIGH);
digitalWrite(2,LOW);
digitalWrite(4,HIGH);
delay(500);
digitalWrite(1,HIGH);
digitalWrite(3,LOW);
digitalWrite(4,LOW);
delay(500);
digitalWrite(0,LOW);
digitalWrite(2,HIGH);
delay(500);
digitalWrite(1,LOW);
digitalWrite(3,HIGH);
delay(500);
} // loop
このスケッチをATtiny85に書き込み、そのATTiny85をICソケットに装着して、LED制御基板のCN1に電池ボックスを接続すると、クリスマスツリーのLEDが点滅を始めます。
なお、ATtiny85にスケッチを書き込む際には、クロック周波数の設定は、内部クロックの1MHzにしてください。(内部クロックの8MHzでも動作しますが、消費電力がわずかに増えます。外部クロックを選択すると、動作しないばかりか、それ以降、そのATtiny85のスケッチを書きかえる事ができなくなります)
LEDの点灯の様子は、次の動画で紹介しています。
このスケッチで使っている関数はpinMode関数、digitalWrite関数、およびdelay関数の3種類のみで、動作を理解するのはあまり難しくないと思います。
このスケッチでは、D0~D4までの5つのI/Oピンを全て出力(OUTPUT)として用いています。D0~D3の4つのI/Oピンは、クリスマスツリーに付けるLED_A~LED_Hの8つのLEDを制御しています。I/OピンとLEDの対応については、表2を参照してください。
D4ピンは、LED制御基板上のLED1の制御をしています。LED1は、マイコンが動作している事をはっきり分かる様に設けたLEDです。
マイコンのI/Oピンと、制御対象のLEDとの関係を分かり易い様にまとめた図を、次に示します。赤色で書いてあるのが、制御対象のLEDです。
D0~D3に接続されたLED(クリスマスツリーのLED)は、点灯している時間と、消灯している時間が共に1000ms(1秒)です。D0~D3で、順に点灯タイミングを500ms(0.5秒)ずつずらしています。
また、D4に接続されたLED1(LED制御基板上のLED)は、250ms(0.25秒)点灯して、750ms(0.75秒)消灯するのを繰り返します。
ここで、各LEDの点滅のタイミングを、ロジックアナライザで観察してみましょう。
ロジックアナライザは、デジタル回路の信号波形を観察するための測定器です。電圧は、HかLの区別しかできず、オシロスコープの様にアナログ的な変化を観察できませんが、オシロスコープよりも多くのチャンネルの信号波形を同時に観測できます。私の使っているLAP-C(16064)というロジックアナライザは、16チャンネルの信号を観測できます。
ロジックアナライザで信号が観察しやすい様に、LED制御基板には、D0~D3までの信号を出力するピンヘッダ(CN2)があります。D4の信号はCN2に出ていないので、R1のリードから取ります。
LED1制御基板へのロジックアナライザのプローブの取り付けの様子を写真35に示します。
右側に写っている茶色い基板がLED制御基板です。また、左側に写っている白い箱が、ロジックアナライザです。この写真を見ると、ロジックアナライザのプローブを、LED制御基板にどのように取り付けているかが分かります。
ロジックアナライザで得られたD0~D4の信号波形を図6に示します。
図6の波形を見ると、各LEDが、おおむね2000ms(2秒)周期で点滅している様子が分かります。D0~D3の波形は、約1000ms(1秒)の間Hになり(LED点灯)、約1000ms(1秒)の間Lになります(LED消灯)。また、D4に関しては、約500ms(0.5秒)の間Hになり、約1500ms(1.5秒)の間Lになります。なお、ロジックアナライザの画面に表示されている時間が、スケッチで指定した時間より1~2%少ないのは、ATtiny85の内蔵クロック発振器の周波数の誤差(規格上は10%以内)によるものです。
図6の下側には、スケッチのどの部分が実行されているかを示す、1~4の番号を、赤色で書き入れておきました。(本当は1~4の数字が丸で囲まれていますが、丸付きの数字を本文中に使うと、環境によっては正しく表示できないので、丸なしの表記になっています) 1~4が、loop関数中のどの部分を指すかは、次の図7をご覧ください。
図7を見ると、1の部分ではdigitalWrite関数で、D0にH、D2にL、D4にHを出力しています。
一方で、図6の1の部分を見ると、確かにD0がL→H、D2がH→L、D4がL→Hと変化しています。また、digitalWrite関数で何も出力されなかったD1とD3については、図6の1の部分では、信号電圧に変化はありません。
同様に、2~4の部分でも、図7と図6とを見比べると、スケッチと波形の変化とが、ちゃんと対応しているのが分かると思います。
次のページでは、PWM制御の原理と、PWM調光版のスケッチについて説明します。
商品名 | Arduino用ブートローダ/スケッチライタキット | |
税抜き小売価格 | 3000円 | |
販売店 | スイッチサイエンス | |
サポートページ | Arduino用ブートローダ/スケッチライタキットサポートページ |