Arduinoを書き込み装置としてATtiny45にスケッチを書き込む

前回、Arduino(互換機)からATtiny45へとスケッチを書き込むための配線を行い、ハード的には準備完了。で、今回はソフト編。

実際にスケッチを書いて、それをATtiny45へと書き込んでいきますが、その前にArduino IDE(統合開発環境)の対応デバイスにATtiny45やATtiny2313等を加えていきます。

Arduino IDEの環境設定から

前回も紹介したArduino IDEでATtiny他の開発(Arduino-ISP編)の指示に従って「ATmega/ATtiny記述ファイルアーカイブ」をダウンロードし、インストールしていきます。

Arduino IDEを再起動し、 Arduino IDEのメニューバーから[ツール]>[マイコンボード]で確認してみると、ATtiny45、ATtiny2313等々、たくさんのマイコンが無事に追加されています。

マイコン追加

因みにArduino IDEは、現行バージョンの Arduino 1.0.5 を使うようにと指示されていますが、私の場合は「私家版 Ardublock」の「arduino-0101-portable3」を使っています。

「1.0 並びにそれ以前バージョンでは動作しません」とあり、「私家版」はArduino-1.0.1をベースにしているとのことで、どうなのかと心配しましたが特に問題なく動いているようです。

メニューの[ツール]から[マイコンボード]を開いてATtiny45 を選択し、同じく[ツール]>[シリアルポート]から使用するポートを選択(私の場合は表示されたポートをそのまま選択)し、最後に[ツール]>[書込装置]で Arduino as ISP を選択して準備完了。

スイッチのオン/オフに連動してLEDがオン/オフするスケッチ

実際にスケッチを書いてみます。

[ファイル]>[スケッチの例]>[02.Digital]>[Button]を選んでみましたが、変数を定義したり、間にコメントが入っていたりで、ちょっと流れが分かりにくかったので、私なりにスッキリさせてみた。

  1. void setup( ) {
  2.     pinMode(4,INPUT);
  3.     pinMode(3,OUTPUT);
  4. }
  5. void loop( ) {
  6.     if(digitalRead(4)==HIGH) {
  7.         digitalWrite(3,HIGH);
  8. }
  9.     else {
  10.         digitalWrite(3,LOW);
  11. }
  12. }

Arduinoのスケッチには必ずsetup( )loop( )という2つの特別な記述(関数)が必要とのことで、1行目と6行目にあります。

setup( )はスケッチがスタートした時に1度だけ呼び出されるもので、ここでピンモードの設定等を行い、loop( )の方はスケッチの本体であり、LED点滅といった動作を繰り返し行うもの。

前回書いた通り、ATtiny45の3番ピン(PB3)にLEDを、4番ピン(PB4)にスイッチを接続してあるので、2行目、3行目で4番ピンを出力、3番ピンを入力として設定(pinMode)。

そして、7行目で4番ピンの状態を読み取って(digitalRead)、それがHIGHなら3番ピンにHIGHを出力(8行目、digitalWrite)し、そうでないならLOWを出力(11行目)しています。

これでボタンを押されている時はLEDが点灯し、押されていなければ消灯することになります。

変数の存在意義

ただ、こんな短いスケッチであれば、3番ピン、4番ピンの表記が全部で5か所しかないので、LEDやスイッチの接続ピンを変更したとしても、全体に修正をかけるのは難しくありません。

それが100行、200行のスケッチとなると、たとえば3番ピンの表記が1ヶ所しかなかったとしても、それを探すのだけでも大変です。さらに10個、20個も変更箇所があるとしたら、これは大惨事。

そんな事態を避けるために、変数というものが活躍するのです。変数とはデータを格納する場所のことで、名前や型(type)、そして「値」を持っています。

下のスケッチの中身(動作)は上のスケッチと全く同じですが、3番ピン(3)、4番ピン(4)というデータをメモリ上のある場所に格納しておいて、その場所に(自分で分かり易い)名前を付けてます。

そのことをスケッチの冒頭(1行目と2行目)で宣言しています。「以下のスケッチの中で、SWPin という記述が出てきたら4を代入しなさい、ledPin という記述の時は3だよ」、って宣言です。

  1. const int SWPin = 4;
  2. const int ledPin = 3;
  3. int SWState = 0;
  4. void setup( ) {
  5.     pinMode(ledPin, OUTPUT);
  6.     pinMode(SWPin, INPUT);
  7. }
  8. void loop( ) {
  9.     SWState = digitalRead(SWPin);
  10.     if (SWState == HIGH) {
  11.         digitalWrite(ledPin, LOW);
  12. }
  13.     else {
  14.         digitalWrite(ledPin, HIGH);
  15. }
  16. }

変数の名前(SWPinやledPin)と値(4とか3とか)は分かりやすいですが、型ってのは何?

3行目でも同じく SWState という名前の変数を宣言していますが、この前にかかっている int というのが変数の型で、これは整数を格納する変数だよってことです。

SWPin にも ledPin のも、この int がかかっているので、これも整数型ということです。が、SWPin と ledPin の前には更に const というのがあり、これも型なんです。

この const修飾された変数(の中身)は変更不可となります。つまり、この変数の値を変更することは、これ以降できませんよってことです。

逆に言えば、 const修飾されていない SWState は変更可能だってこと。SWState は、スイッチのオン/オフ状態を格納するので、その時の状態によって変えられないと困ってしまうからです。

11行目で、SWPin(4番ピン)の状態を読み取って SWState に代入しているのがそれです。

いらん説明をくだくだとしてしまいましたが、スケッチは無事にATtiny45に書き込まれ、スイッチのオン/オフに合わせてLEDもキチンとオン/オフ動作をしてくれています。

これで、ArduinoからATtiny45やATtiny2313へとスケッチを書き込む環境の構築完成です。

次回から、この一連のAVRマイコンシリーズの(一旦)最終章の予定です。


関連記事
コメント:












管理者にだけ表示を許可する
トラックバック:
トラックバック URL:

http://55life555.blog.fc2.com/tb.php/1262-bff44afe

<< topページへこのページの先頭へ >>