フォト
2017年6月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  
無料ブログはココログ

« ATtiny13Aのヒューズビットのリセット | トップページ | Arduino IDE 1.06にATtiny13A開発を構築 »

2016年1月17日 (日)

ATtiny13Aをシステムクロック16kHzで利用する

まずは、ATtiny13Aをシステムクロック16kHzで利用する目的のお話しです。

プロペラをつかったホータブルゲーム機LameStationのジョイスティック部が次のような感じで
コンパレータLM339を使ってアナログ2入力をUP、DOWN、LEFT、RIGHTのON/OFF出力に変換
する形式となっています。

01

部品的には抵抗10本、IC(LM339)1個の利用とその配線となります。
この部分をADコンバーター機能を持つ「手持ちのATtiny13Aで置き換えれば簡略化出来るのでは?」
と思いつきやってみました。

動作確認と実装


まずは次ような感じの動作チェック回路を実装し確認しました。
ジョイスティックからのアナログ値を取得しその方向をON/OFFで出力します。
2入力4出力のため6ピン必要となり、リセットピンも利用しました。

02

プログラムソースは下記のようになります。
Arduino IDE 1.06環境にてsmeezekittyさんが公開している
「Arduino core for Attiny13(core13_022_arduino_1_6.zip)」を導入して利用しています。

03

// アナログジョイスティック デジタル出力変換 for Lame Station
//
//       ATMEL ATTINY13 / ARDUINO
//
//                 +-\/-+
// ADC0 (D 5) PB5 1|    |8 Vcc
// ADC3 (D 3) PB3 2|    |7 PB2 (D 2) ADC1
// ADC2 (D 4) PB4 3|    |6 PB1 (D 1) PWM1
//            GND 4|    |5 PB0 (D 0) PWM0
//                 +----+

// ピンの割り付け
#define J_UP    PB1  // UP 出力
#define J_DOWN  PB0  // DOWN 出力
#define J_RIGHT PB5  // RIGHT 出力
#define J_LEFT  PB2  // LEFT 出力

// アナログ入力ピンの割り付け(要ピン番号で指定)
#define IN1     2  // ジョイスティック UP/DOWN 
#define IN2     3  // ジョイスティック LEFT/RIGHT
 
void setup() {
  pinMode(J_UP,OUTPUT);
  pinMode(J_DOWN,OUTPUT);
  pinMode(J_RIGHT,OUTPUT);
  pinMode(J_LEFT,OUTPUT); 
}

void loop() {
  int v1,v2;
  int s1 = analogRead(IN1);
  int s2 = analogRead(IN2);
  
  if (s1 < 50) {
     digitalWrite(J_DOWN, LOW);
     digitalWrite(J_UP, HIGH);
     
  } else if (s1 > 973) {
     digitalWrite(J_UP, LOW);
     digitalWrite(J_DOWN, HIGH);
     
  } else {
     digitalWrite(J_UP, LOW);
     digitalWrite(J_DOWN, LOW);
  } 
  
  if (s2 < 50) {
    digitalWrite(J_RIGHT, LOW);
     digitalWrite(J_LEFT, HIGH);
  } else if (s2 > 973) {
     digitalWrite(J_LEFT, LOW);
     digitalWrite(J_RIGHT, HIGH);
  } else {
    digitalWrite(J_RIGHT, LOW);
    digitalWrite(J_LEFT, LOW);
  }
}

Arduino IDE環境ではシステムクロック 128kHzまでしか対応していないので、
プログラム書き込み後、リセットピンを出力に使うためのリセット禁止とシステムクロックを
16kHzに設定するためにヒューズビットを設定を行います。

作業はコマンドプロンプトにてavrdueコマンドを使って行います。

04

実行コマンド
avrdude -carduino -Pcom6 -pt13 -U lfuse:w:0x6b:m -U hfuse:w:0xfe:m -v -F -b2400
(書き込み機器はarduinoを利用した"Arduino as ISP"です)

ヒューズビットの設定値を簡単に調べるには次のサイトが便利です。
Engbedded Atmel AVR® Fuse Calculator

注意:RESET禁止またはシステムクロックを低速にすると、プログラム書き込みとヒューズビットの
設定が通常環境では出来なくなります。高電圧書き込みにてヒューズビットのリセット
が必要となります。


書き込み後、実装して動作確認をいたします。

Dscn4688

問題無く動作しているようですが、RSETピンの出力が弱いです。

Dscn4689

微妙にしか点灯しません。
この現象がなぜなのか、悩んだのですがSNS上のアドバイスにより理由が判明しました。

Reset
上記の"The reset pin can also be used as a (weak) I/O pin."のweak(弱い)がこの現象の理由のようです。
信号には使えるが、LEDの駆動には使えないくらい弱いようです。
信号として利用するには問題無いでしょう。

LEDが点灯していない状態で電池からブレットボードに流れる電流を測定すると、
1.27mAでした。予想よりも消費電力が大きいと思ったのですが、
アナログジョイスティックに流れる電流を測定したところ、0.70mAほどでしたので、
ATtiny13A単体では0.57mA程度と思われます。

ATtiny13A を 9.6MHzで動かすと、2.66mAなのでクロックを落とすことで消費電力化
が図れるのは確かなようです。

Dscn4692

実際、プロペラ lumestationに組み込んで利用してみるとリセットピンからの
ON/OFFの信号も問題なく読み取れました。

Dscn4690

これでジョイスティック入力が出来ました。SDKに付属のゲームで遊べました。

Dscn4691

結論と感想
ATtiny13Aをシステム16kHzで利用しても問題なく利用出来ました。
むしろ、こういう使い方こそ50円マイコンにふさわしいと言えますね。

« ATtiny13Aのヒューズビットのリセット | トップページ | Arduino IDE 1.06にATtiny13A開発を構築 »

ATtiny13A」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/571408/63080360

この記事へのトラックバック一覧です: ATtiny13Aをシステムクロック16kHzで利用する:

« ATtiny13Aのヒューズビットのリセット | トップページ | Arduino IDE 1.06にATtiny13A開発を構築 »