チラシの裏の電子工作

電子工作、PC関係の備忘録というか、チラシの裏

内部発振ArduinoのIOピンを増やす

以前、ATmega168のデータシートやら解説を読んでいたら、
内部発振で使用する場合、デジタルIOピンを2本増やせるという内容が書かれていたので調べてみました。

どうやらArduinoでは定義が書かれていないだけのようで、ArduinoIDEから直接IOピンを操作してみるとちゃんと動きました。
と言うわけで、定義を追加してdigitalWrite()で使えるようにしてみました。

以下の定義を追記することによって、PB6がデジタル20ピン、PB7がデジタル21ピンとして利用可能になります。
当然ですが、外付け発振器を接続している場合、増やしたピンは使えません。
※内部発信Arduinoについてはこちら

ちなみに、今のところ私の環境では問題は起こってませんが、これが正しい方法なのかは不明です。
何をもって正しいとするかはともかくとして、より良い方法があれば突っ込みをお願いします。



1)まず定義ファイル「pins_arduino.c」を探す
普通はarduinoをインストールしたディレクトリ内の↓です。
hardware\avr\cores\arduino\pins_arduino.c

但し、マイドキュメントに↓があれば、こちらが優先されるようです。
arduino\hardware\avr\cores\arduino\pins_arduino.c


2)pins_arduino.cをエディタで開く


3)定義を追加する
以下2つの定義に、赤字の各2行(合計4行)を追加する。
このファイルにはAtmega1280、2560の定義も同時に入っているので、間違わないように注意!
Arduino0022付属のpins_arduino.cの場合、345行目以降ですね。

const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
PD, /* 0 */
PD,
PD,
PD,
PD,
PD,
PD,
PD,
PB, /* 8 */
PB,
PB,
PB,
PB,
PB,
PC, /* 14 */
PC,
PC,
PC,
PC,
PC,
PB, /*追加 */
PB, /*追加*/

};




const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
_BV(0), /* 0, port D */
_BV(1),
_BV(2),
_BV(3),
_BV(4),
_BV(5),
_BV(6),
_BV(7),
_BV(0), /* 8, port B */
_BV(1),
_BV(2),
_BV(3),
_BV(4),
_BV(5),
_BV(0), /* 14, port C */
_BV(1),
_BV(2),
_BV(3),
_BV(4),
_BV(5),
_BV(6), /*追加*/
_BV(7), /*追加*/

};



スポンサーサイト

カテゴリ:電子工作 - テーマ:ハードウェア - ジャンル:コンピュータ

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://nax9800.blog.fc2.com/tb.php/9-d82af329
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad