Make: AVR Programming pt.02

 まだまだ続く。けど夏休み中に終わらせるのは無理っぽい。

squeuei.hatenablog.com

Chapter 6

 ボタンスイッチをマイコンのデジタルIOに接続する時は、プルアップ抵抗を使うこと。プルアップ抵抗はボタンがオープンの時にレベルを確実にハイにするために必要な抵抗。ただし、AVRの場合は全てのピンにプルアップ抵抗が組み込まれていて、設定で有効化できる。

 Chapter 2で言及したように、DDRxが0(入力)のとき、PORTxはプルアップの設定になる。

プッシュボタンを使うときのチェックリスト

  1. DDRxレジスタを入力にする。
  2. プルアップのために抵抗素子を使わない時は、PORTxで内蔵のプルアップを有効にする。
  3. コードの中でボタンの電圧を読む。
  4. ボタンが押されてる間に何かをしたいのか、ボタンが押されたときに何かをしたいのかをヨーク考える。
  5. ボタンが押された時に何かをしたいのなら、デバウンシングすることを考える。たとえば一度押されたことを確認して、さらに一定時間後にも押されてたら、そのとき初めて何かを実行する、のような。

Chapter 7

LDRについて

 LDRを使う際、組み合わせる抵抗は

{\displaystyle
\mathrm{R} =\sqrt{
\mathrm{R}_{\mathrm{LDR}\mathrm{bright}}\cdot\mathrm{R}_{\mathrm{LDR}\mathrm{dark}}
}
}

で決定するのがよい。

ADCを使う時の注意

 アナログ回路設計のグッドプラクティスとしては、高速なスイッチングがあり、スパイクが乗るチップと、性格で安定した値が要求されるADCとで、独立した電源を供給するのが望ましい。特に、小信号や高周波信号を扱う時には重要となる。

  1. AVCCに給電した? システムのVccからの差は0.3 V以内でなきゃダメ。
  2. ADMUXのREFSxを設定した? デフォルトではAREFの外部電圧を基準とする。AVCCを基準にしたいのならREFS0をセットしないといけない。
  3. ADCのプレスケーラを設定した? ADCにはクロック源が必要。
  4. ADENを設定してADCを有効化した?
  5. マルチプレクサで正しいchを選択した? 設定はbitじゃなくてbinaryだよ?
  6. 最後に、ADCの値を別々に読むときはADCL(下位ビット)から読み込んでる? 10bit読むときはADCLを読み込んでからじゃないとADCH(上位ビット)は更新されないよ?

 上記の設定をしてから、ADCSRAのADSCを設定することで、ADCは変換を開始する。

 ADCSRAのADATEを有効にしてフリーランニングを使う時も、最初の一回はプログラマがADSCを設定しなきゃいけない。

 ADLAR=0のときはADCHの下位2ビットとADCLの8ビットがADCの出力となる。

 ADLAR=1のときはADCHの8ビットとADCLの上位2ビットがADCの出力となる。

 ADMUXでマルチプレクサを設定するときは、上位4ビットの値を保ったまま、下位4ビットを設定しなきゃいけない。 よくやるのはこんな感じ。

ADMUX = (0xf0 & ADMUX) | channel;