プログラムを組むときに、普通は各pinの入出力を最初に定義します。
夏休みの宿題で、YがArduinoを使って何やらやっていたのですが・・・
「動かない!」と質問してきました。
今やっているのは、単純にボタンを押したら別のランプ(LED)が点くという単純なものなのですが、単純なプログラムなのに、ちゃんと動きません。
いや、単純にA6ポートに接続したLEDが点灯しません。
「pinModeはA5が19だから、A6は20でいいのだよねぇ。」
と首をひねっています。
リファレンスを見ても。
アナログ入力ピンはデジタルピンとしても使えます。アナログ入力ピン0がデジタルピン14、アナログ入力ピン5がデジタルピン19に対応します。
と書かれているだけです。
いろいろ実験した結果の私の結論としては・・・
NANOではA6とA7はデジタル出力に使えない!
です。
いや、何か単純な間違いをしているのでしょうか?
pinMode( 20,OUTPUT );
と記述しても、エラーも出ないし・・・あたりまえか・・・
お世話になっております、RAINです。
ArduinoNano(以下、略してNanoと記述)のA6・A7に関してですが、
まずNanoで使われているマイコンはATMEGA168です。
回路図をみると、マイコンの各ポートがどのピンへと接続されているかよくわかります。
このATMEGA168のシリーズでは、ADCがポートCと兼用になっており、
ADCで使用するか、ポートとして使用するかを選択することになります。
しかし、このポートCはbit0~5までしか存在しません。
なので、デバイスの仕様上A6とA7はポートとして使うことができず
(ポートが無いため、今回のデジタル出力と同様にデジタル入力もできません)
ADC専用のポートとなっています。
なぜこのような仕様になったのかというのは製造元のATMELしかわかりませんが、
一応理由として、ATMEGA168シリーズのDIPパッケージは28ピンで、
今回Nanoに使用されているTQFPのパッケージは32ピンあります。
このTQFPにあってDIPにはない差分の4ピンはどうなっているかというと、
2本がVCC・GNDで電源ピンに、
もう2本は、DIPで0~5までしかなかったADCのチャンネルに追加して、
ADC6・7のピンとなっています。
要はパッケージの違いでピン数に差が出てしまった分を
電源とADCのチャンネルに割り当てて解決したということです。
ADCがbit5までしか無いのと同様に、ポートCもbit5までしかありませんが、
なぜ、ADC6・7ピンの部分もポートCとADCの兼用にしなかったのかは
前述したようにATMELしかわかりません・・・。
たぶん何か製造上で困ることがあったのだと思います。
長くなってしまいましたが、上記の理由でA6とA7はAD変換専用ピンなので、
ポートCとしてデジタル入出力することができないという訳です。
プログラムのミスなどではないのでご安心を!
詳細な解説ありがとうございます。
私は、いつもDIPパッケージのAVRを使用していたので、TQFRパッケージはADC入力が2ポートも多くていいなぁ、とうらやましかったのを、思い出しました。
よく考えたら・・・ATMEGA168のデータシートを見れば良かったのですね。
確かに、ポートCは6ビットのままで、ADC6とADC7はポートCにもポートDにも入っていません。
ということでスッキリしました。
あとは、やっぱり、Arduinoを使うか、AVRを素のまま使うか、悩むところです・・・
NANOがもうちょっと安ければ・・・(笑)