
縁側をご利用いただく際のルール&マナー集を用意いたしました
ユーザーの皆様に楽しくご参加いただけるよう、主に投稿時の注意点などをまとめています。
ご投稿の前には必ずご一読をお願いいたします。詳しくはこちら⇒「縁側 ルール&マナー」
紹介文
手始めにUncompatino(ATmega328P Arduino UNO 準互換)を勉強していきたいと思います。

ソフトウエアについてのスレです。私なりの解釈となります。不定期で進度はゆっくりですがご容赦ください。
Arduino IDE で、kit_scope.ino を開いてください。環境設定でDisplay line numbers にチェックを入れておいてください。そうすると、ソースコードに行番号が表示されます。
1行目から34行目まではコメント文で、基板上のコネクタのピンの信号名称について説明をしています。
37行目から125行目までは変数の定義と値の代入をしています。
128行目から1207行目までは関数の定義をしています。
これらの変数と関数は、setup()とloop()の外側でされていますから、setup()とloop()の中でも有効となります。
Arduinoのソフトウエア流儀は、1回だけ実行するsetup()と、繰り返し実行するloop()の2つの関数で構成されているのでしたね。
それでは1210行目から始まるsetup()の中身を見て行きます。
2015/1/14 22:49 [1681-29]

setup() の大まかな流れです。
下記変数に値をセットする。
DDRB
PORTB
DDRD
PORTD
UBRR0H
UBRR0L
UCSR0C
UCSR0B
次に、
txinit()を呼ぶ。
rxinit()を呼ぶ。
rminit(false)を呼ぶ。
oscinit()を呼ぶ。
次に、
if文
最後に、
oscinfo()を呼ぶ。
という具合になっています。
ここで、DDRBとはなんでしょうか。調べてみましょう。
Arduino IDE のツールバーから編集をクリックして、検索を選びます。
検索テキストにDDRBと入力します。[検索]ボタンをクリックします。758行のDDRBがフォーカスされました。何やらビット演算をして値を代入していますが、変数の宣言ではありません。[検索]をどんどんクリックしてみましょう。一巡しても宣言しているところはありませんでした(見つけた人いますか?)。つまり、DDRBは 宣言しないで使える変数ということです。
Arduino IDE にはデフォルトで使える変数や関数がいくつかあるようです。こういう場合はリファレンスを調べてみましょう。IDEからリファレンスに飛べますが、英文のリファレンスとなります。日本語のものは下記にあります。
Arduino IDE の日本語リファレンス
http://www.musashinodenpa.com/arduino/re
f/
上記URLのビット演算子の章の「ポート操作」をクリックしてください。このページ内の検索でDDRBを探します。
IE11をお使いの方は、[Ctrl]+[F]すると検索バーがIEの画面上部に表示されます。IE11がアクティブの状態(選択されている状態という意味です)じゃないと別のアプリの操作になるので注意してください。
上記のやり方でDDRBが見つかったと思います。そのあたりの説明文を読んでおきましょう。読んでみると、DDRBはただの変数ではなくてレジスタ名だったということがわかります。さらにDDRBはポートBの各ビットを入力か出力かを指定する方向レジスタということがわかりました。
ところで、レジスタってわかりますか? CPUが自分の動作のために一時的に使う専用メモリーといったものです。ATmegaのような1チップのマイコンだと、CPUだけではなくて、同じチップ内のCPU以外の周辺デバイスの設定を保存するためにもレジスタが必要になりました。1チップマイコンはそれぞれ固有のレジスタ群を持っていることが普通です。
レジスタの各ビットは各GPIOピンに1対1に対応しているということですね。
ポートを操作するには、DDRxで方向を定め、PORTxで出力データをセットし、PINxで入力データを読むということがわかりました。またDDRxとPORTxはRead/Writeでき、PINxは読み取り専用ということですね。
2015/1/15 22:37 [1681-30]

![]() |
---|
写真1 |
setup()の解説の続きです。
cli()を飛ばしていました。これもリファレンスを探してもありません。
ネットで、”Arduino cli()”で検索すると、下記のページが見つかりました。
Arduinoで遊ぶページ
http://garretlab.web.fc2.com/arduino/ins
ide/avr/interrupt.h/cli.html
そこには、「cli()は,割り込みを禁止するアセンブラ命令を実行するマクロです。」と説明がありました。また、「cli()は,hardware/tools/avr/avr/include/avr/inter
rupt.h に定義されています。」ともありました。余談ですがこのHPはかなり面白いです。時間があったらじっくり見てください。
早速、hardware/tools/avr/avr/include/avr/inter
rupt.h を見てみましょう。確かに記述がありました。全ての割り込みを禁止するとありました。一発で全割り込みを禁止できるのは便利です。
これからは、未定義で出現してくる関数は、フォルダ arduino-1.0.6 以下を探した方がよさそうです。
------- ここから
余談が多いのですが、検索ソフトは、Vectorから「HNXgrep_1.4.3」というソフトウエアをダウンロードして使うことにしました。他に使ったことがないので自信がないのですが、正規表現で指定できるので使いやすいと思いました。
○使い方
1.対象で、探す場所を指定する(この場合は、フォルダ arduino-1.0.6 を指定)。
2.正規表現にて、ファイルの指定ができる。
関数の定義ですから、探すファイルの拡張子は、.hか.cか.cppの筈だと当たりをつけます。
ファイルマスクに、\.[hc(cpp)]$ と指定しその右にある[Regex]をクリックしました。
3.正規表現にて、キーワードを指定ができる。
定義なので、「cli();」ではなく「cli()」を検索する必要があります。
キーワードのところに、cli\(\)[^;] と指定し、同じ並びの[Regex]をクリックしました。
4.[検索実行]をクリックする。
5.検索結果のファイル名をクリックするとその該当箇所が表示される。
写真1をご参照ください。
------- 以上
setup()の説明は仕切り直しですね。
2015/1/16 22:29 [1681-31]


この掲示板の新着スレッド

番号 | タイトル | 返信数 | 最終投稿日時 |
---|---|---|---|
[1681-32] | オシロスコープソフト kit_scope.ino の関数解説 | 4 | 2015年1月21日 22:19 |
[1681-29] | Arduino側のソフトウエア kit_scope.ino の解説 | 2 | 2015年1月16日 22:29 |
[1681-27] | ATmega328p データシート | 0 | 2015年1月9日 23:15 |
[1681-21] | Arduino IDE の動作をちょっと確認したいとき | 1 | 2015年1月8日 00:12 |
[1681-13] | Uncompatinoでオシロスコープ製作に挑戦 | 7 | 2015年1月14日 22:29 |
[1681-11] | AVR 開発環境に関するサイトの紹介 | 1 | 2015年1月1日 06:33 |

