環境・安全活動に役立つLEDイルミネーションの製作 Q&A
002.IC端子に「RA2/AN0/Vref」のように2, 3つ書いてあるのはどういうことか?
その端子は複数の機能を持っていて、目的に応じて使い分けが出来ることを表しています。例えば、PIC16F648Aの1番ピンには、1)デジタル入出力[RA2]、2)アナログ入力[AN0]、3)基準電圧出力[Vref]の機能が割当てられています。始めはRA2(デジタル入出力)用となっていますが、然るべき設定を行うとアナログ入力、基準電圧出力として用いることができます。具体的には下図のような回路構成になっていて、切り替えが行われています。
入出力ピン(RA2/AN0/Vref)の内部構成(出典:PIC16F648A Data Sheet, Microchip Technology)
003. RAを使うのとRBを使うのは何か違いはあるのか?
汎用入出力(I/O)の利用で違いはありません。今回は、バイト単位で点滅データを記す都合やLEDがいずれの端子に近いかで使用する端子を選んでみてください。
004. 発光ダイオードは、アノード側を電源(VDD)のピン、カソード側をPICマイコンの端子につないで、そのビットを0(OFF)で光らせるようにしてもよいのか?
LEDのアノード側を電源プラスに、カソード側をマイコンにつなぎ、0(OFF)で光らせてもOKです。また、LEDには個々に電流を制限する抵抗をつけることが望ましいのですが、今回は省略します。
LED回路点灯例
005. BCF,BSF命令で1つ1つのポートを操作する方法とMOVLW等のバイト命令で複数のポートを操作する方法の違いは?
次の1)と2)は基本的に同じ働きをしているといえます。しかし、BCFやBSF命令はビット操作命令とは言いながら、一旦ポート全体(8ビット)を読み取り、指定したビットを操作してポートレジスタの上書きを行っています。出力側の影響により信号変化に遅れが生じる場合には、次のビット操作命令実行時に対象外のビットで0と1を誤って読み込み、上書きしてしまう(出力する)可能性があります。そこで、今回はそのような誤動作を防ぐため、1’)のようにビット操作命令間にNOP命令を挿入するか、2)の方法を用いることを薦めます。
1) BCF PORTA, 0 BSF PORTA, 1 BCF PORTA, 2 BSF PORTA, 3 CALL WAIT0 BCF PORTA, 3 CALL WAIT0 |
2) MOVLW B'00001010' MOVWF PORTA CALL WAIT0 MOVLW B'00000010' MOVWF PORTA |
1’) BCF PORTA, 0 NOP BSF PORTA, 1 NOP BCF PORTA, 2 NOP BSF PORTA, 3 CALL WAIT0 BCF PORTA, 3 CALL WAIT0 |
006. サンプルプログラムのUAの値である30Hは、何を表しているのか?
データメモリ(テキストP.7 Fig.5のマップを参照)のバンク0内 20hから7Fhは、ユーザが利用可能なメモリ領域です。この20hや7Fhは、メモリアドレスと言ってデータを格納する場所を表しています。以下の記述は、このユーザエリアにあるデータメモリ30hをUAで表すことを示しており、サブルーチンWAIT1のUAは30Hと書き換えても何ら問題はありません。プログラム中のコメントでは、UA=150とありますが、データメモリの30hの場所に150が格納されることになります。またメモリには、このデータメモリとプログラムメモリがあり、同様なアドレス値を用いていますが、命令語によってそのどちらのアドレスを用いるかが区別されています。
#DEFINE UA 30H
Last Up Date: 2016/4/27