縁側 > ホビー > おもちゃ > 電子玩具 > 電子小物道場
「縁側」-みんなが作る掲示板-からのお知らせ
縁側からのお知らせ

縁側をご利用いただく際のルール&マナー集を用意いたしました
ユーザーの皆様に楽しくご参加いただけるよう、主に投稿時の注意点などをまとめています。
ご投稿の前には必ずご一読をお願いいたします。詳しくはこちら⇒「縁側 ルール&マナー

紹介文

手始めに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]   


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

全員投稿可
電子小物道場
電子小物道場をお気に入り登録
運営者:
オーションさん
設立日:
2014年12月27日
  • 注目度:

    513(お気に入り登録数:2件)

  1. 1ドラマスキー

該当掲示板はありません

ページの先頭へ