SSブログ

(ARDUINO)ATtiny85を8Mhz動作でプログラムする [arduino]

 今回はATtiny85を8Mhzクロック動作にして、統合開発環境Arduino1.0でプログラミングしてみます。

 8Mhz動作にすると、SoftwareSerialが使えるのが大きいです。
 もちろん、シリアルのprint構文なども使えるようになります。

 するとこんな感じに、LEDを点けるだけでなく、シリアル接続の7セグLEDを使えたりします。

CIMG0182.JPG
(※シリアル接続のLEDは、SPARKFUNのCOM-09230という旧タイプ、現在はCOM-09764という新しいタイプになっています。電源は乾電池2本で5Vを出力する電池ボックスPRT-08249です)


 かなり表現範囲が広がるので、いろいろなことが出来るようになります。

 では、肝心の設定に参りましょう!

■8Mhz動作への切り替え
(1)ArduinoとATtiny85をプログラムする時と同じように結線する。
(2)Arduino1.0を起動する
(3)Arduino1.0の[Tools]から[Boad]と進み[Attiny85(internal 8Mhz clock)]を選択
(4)Arduino1.0の[Tools]から[Programmer]と進み、[Arduino as ISP]を選択
(5)Arduino1.0の[Tools]から[Burn bootloader]を選択

 ただし、ここでブートローダを書き込んだとしても、シリアル通信でATtiny85をArduinoのようにプログラムすることは出来ません。
 この手順によって、ATtiny85は8Mhz動作になるようにヒューズ・ビットが設定されるだけです。ですので、プログラムする時は相変わらず、ArduinoISPなどの外付けのISPが必要です。

 後はいつものようにプログラムをして、Attiny85(internal 8Mhz clock)に書き込むことが出来ます。
 もちろん、ソフトウェアシリアルは使えます。
 テストのために、サンプルのBlinkをAttiny85(internal 8Mhz clock)として書き込んでみてください。きちんとヒューズ・ビットの設定が出来ている場合には、一秒間隔で正しく点滅しますが、もし1Mhz動作のままならば、8秒くらいの長い間隔で点滅してしまいます。


■1Mhz動作への切り替え
(1)ArduinoとATtiny85をプログラムする時と同じように結線する。
(2)Arduino1.0を起動する
(3)Arduino1.0の[Tools]から[Boad]と進み[Attiny85(internal 1Mhz clock)]を選択
(4)Arduino1.0の[Tools]から[Programmer]と進み、[Arduino as ISP]を選択
(5)Arduino1.0の[Tools]から[Burn bootloader]を選択

 こうすることで、1Mhzの動作の設定に戻すことが出来ます。


※一度、8Mhzクロックにすれば、以降はずっと8Mhzで動作しますので、書き込むたびに設定する必要はありません。


※今回はなぜか、Arduino1.0のArduino ISPでなぜかプログラムがうまく書き込めませんでした。それで、ArduinoIDEの「IDE-0023」を起動し、そちらのArduinoISPを書き込んで使いました。書き込んだ後は、Arduino1.0を立ち上げ直して、そちらで作業しました。なにかまだISPに問題があるのかもしれません。

 わかり次第報告します。

------------------------------
(追加)
2012/2/6
ShooさんからUNOについての情報が寄せられました。
Arduino Unoのブートローダー(Optiboot)に問題があるので、それをOptifixに変更することで、ArduinoISPを使えるようになるとのことです。
------------------------------


※今回使ったスケッチ
#include <SoftwareSerial.h>  // ライブラリの導入

#define rxPin 1
#define txPin 2

SoftwareSerial MS =  SoftwareSerial(rxPin, txPin);
int b=0;

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
 
  This example code is in the public domain.
 */

void setup() {                
  // initialize the digital pin as an output.
  // Pin 0 has an LED connected on most Arduino boards:
  pinMode(0, OUTPUT);     
  MS.begin(9600);    // スピードを設定
 MS.print("w");
 MS.print(char(0));
 MS.print("z");
 MS.print(char(10));



}

void loop() {
  digitalWrite(0, HIGH);   // set the LED on
  delay(1000);              // wait for a second
  digitalWrite(0, LOW);    // set the LED off
  delay(1000);              // wait for a second

if(b<1000){ MS.print("X");}
if(b<100){ MS.print("X");}
if(b<10){ MS.print("X");}
 MS.print(b);
 b++;
if (b>9999){b=0;}
}



nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

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