楽々PIC

水田除草と言うブログを書いていますが、PIC関連の記事が意外に人気で驚いています。 PICを使った電子工作に興味を持つ方が多いことを知って、一緒にPICを学ぶブログを作りたいと思いました。 「楽々PIC」は教材と言うよりも少し実用性?のある楽しい道具を作りながら学ぶブログを目指します。

プロジェクト

PWM 4 回路図

 「PWM 3 速度変更」の続きです。 今回は、回路図とノイズ対策の話を書いてPWM関連記事を終わります。 <PICデバイス=18F1320> PWM制御対象はマブチモーター RE-140RA ( FET 2SK2232 でドライブ)です。

PWM関連の実験を終えた、RRP1320-0-7 の回路図は下図の通りです。 図をクリックして別ウィンドウで見ると、定数等も確認出来ると思います。 「音声合成LSI 2」で紹介した通り、回路変更(CPU端子の割り付け変更)を行っています。 RRP1320-0-5 以前のプロジェクトを試す場合はご注意ください。

RRP1320-0-7_circuit


FET のゲート抵抗漏れを修正しました。 2012/09/20日
LCDコントラスト調整用ボリューム配線の誤記を修正しました。 20012/09/21日

なお、この記事からダウンロード出来る、RRP1320-0-7 は、これまで紹介した全ての機能( LED点滅LCDに自動転送RCサーボ赤外線リモコン受信温度センサー音声合成LSIPWM)を含みます。


今回は、モーターのブラシとコミュテータ間で発声するノイズ対策について紹介します。 購入したままのマブチモーター(RE-140RA )を接続して動作確認するとノイズの影響で回路動作が不安定になります。 目に見える症状は以下の通りです。

(1) 赤外線リモコン受信は休みなくノイズを受信します。
(2) LCDが予定外の表示をすることもあります。
(3) PICkit3 が Failed to get PC. と言うメッセージを表示して Run 出来なくなる。
    パソコンと同期が取れなくなったと言うエラーです。
(4) Release 版をプログラムして PICkit3 を切り離しても同様(かえって悪い)です。
    頻繁にリセットするようです。

モーターの端子とケースの間にコンデンサを入れるのが一般的な対策ですが、先にモーターの電源を別電源にしました。 それぞれに異なるACアダプターで給電しても効果なし、モーター側を乾電池にしても変りません。

とうとう、モーターの端子とケース間をセラミックコンデンサー(103 0.01uF )で接続したところ、すっかり安定しています。 赤外線リモコンも安定しています。(モーター無しでも稀にノイズ受信していましたから同程度です。)

DSC00118

2本のリード線とケース間に、各々上図のようにコンデンサーを半田付けします。

DCモーターのノイズ対策は、コンデンサーを付けることが先決ですね。


以下で、一連の記事で紹介したソース・ファイル(プロジェクト)をダウンロード出来ます。
LHA書庫です。
 http://jyosou-robot.livedoor.biz/pic/RRP1320-0/RRP1320-0-7.lzh


PWM 関連記事のインデックスはこちら → PWM 


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。



音声合成LSI 9 データテーブル

 「音声合成LSI 8 発声終了」の続きです。 今回は「音声合成LSI 7 発声開始」 、 「音声合成LSI 5 データ送信」で紹介したプログラムが参照しているデータテーブルについて説明します。 <PICデバイス=18F1320> 音声合成LSI は、株式会社アクエスト製 AquesTalk pico  ATP3011F4-PU です。

以下はデータテーブルを定義しているアセンブラ・ソース( rcs_tbl.asm の一部)です。

下から説明しますが、315行目( iricdb )からが、赤外線リモコンで受信した各データコード(受信順 3byte 目)のテーブルです。
293行目から始まる、talk000 , talk001 ・・・ talk009 は音声フレーズ・データで、必ず 0DH で終わります。 talk006 , talk007 は2種類のチャイム音を指定しています。
281行目からは talkdb は各音声フレーズ・データの先頭アドレスをテーブルにしたものです。 1レコード 3byte ですが、1ワード( 2byte )の区切りを揃えるために 00H が挿入されてプログラム・メモリーには1レコード 4byte で配置されます。 データテーブルをビルドしたら、プログラム・メモリーをダンプして確認した上でプログラムを書く方が安全です。

talkdb_rcs_tbl

以上で、音声合成LSI 関連の説明を終わります。


以下で、一連の記事で紹介したソース・ファイル(プロジェクト)をダウンロード出来ます。
LHA書庫です。
 http://jyosou-robot.livedoor.biz/pic/RRP1320-0/RRP1320-0-6.lzh


音声合成LSI 関連記事のインデックスはこちら → 音声合成LSI 


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。





赤外線リモコン受信7

 「赤外線リモコン6」の続きです。 今回はTIME0で行っている受信終了のタイマー処理と、メイン処理で行っているLCD用仮想V-RAMへの転送(表示)、受信再開処理について説明します。 <PICデバイス=18F1320> 受光モジュールは PL-IRM1261-C438 です。

INT1 割り込み処理は前回までに全て説明しました。 下図は TIMER0 割り込み処理のアセンブラ・ソース( intlow.asm の一部)です。 赤外線リモコンの 32bit データ受信に要する時間はデータによって増減しますが、およそ70msec程度です。 ただし、中には 32bit より多くのデータを送信するリモコンがありますから、150 ~ 200msec 待って受信完了することにしました。 この時間を計る為に 50msec 間隔で発生する TIMER0 割り込みでカウンター irtout をカウントダウン(ゼロでクリップ)しています。 下図の66~67行目がその記述です。 最初に irtout が0であれば何もしないで TIMER0 の処理を終了しますが、そうでなければ irtout をデクリメント(-1)してから TIMER0 の処理を終了します。

intlow_TIMER0


下図は、メイン処理( test4.asm )の一部で、赤外線リモコンの受信コードを ASCII コードに変換して LCD 用仮想 V-RAM に転送して表示しています。

irc1st の bit7 をチェックして受信待ち状態でなければ、irtout が0であることを確認して受信完了と判断します。 受信完了でなければ何もしないで処理を終わります。 (下図127~131行目)

受信完了であれば受信コード( ircd0 , ircd1 , ircd2 , ircd3 )を順に ASCII コードに変換して LCD 用仮想 V-RAM の所定のアドレスに転送します。 tmp1 の値は 03AH です。 上位または下位 4bit を切り出して 30H を加えて16進数 0~9 までの変換を行い、tmp1との比較の結果 16進数 A~F までの値であればさらに 07H を加えて ASCII 変換しています。

test4_vram1

   <<< 途中省略 >>>

test4_vram2

4byte 分の転送後に irc1st の bit0 によって以下いずれかの表示をしています。
 (1) irc1st (bit0) = 0 の時アルファベット小文字の o
 (2) irc1st (bit0) = 1 の時アルファベット大文字の N

以上で、赤外線リモコン受信の説明を終わります。


以下で、一連の記事で紹介したソース・ファイル(プロジェクト)をダウンロード出来ます。
LHA書庫です。
 http://jyosou-robot.livedoor.biz/pic/RRP1320-0/RRP1320-0-4.lzh


赤外線リモコン受信の関連記事インデックスはこちら → 「赤外線リモコン受信


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。



LCDに自動転送5

 「LCDに自動転送4」の続きです。 前回までに説明した割込み処理による自動転送を始めるまでのメイン処理です。 < PICデバイス=PIC18F1320 > LCDはSUNLIKE社製SC2004Cです。


LCD転送


下図は、LCD及び(仮想)V-RAM、FSR2の初期化、初期設定を行った後にTIMER2の割込みを許可するまでのアセンブラ・ソースです。

lcd_main_ini

主クロックを内部8MHzに切り替え、BSR=0に設定しています。 A/Dコンバーターや入出力ポートと言ったピン機能や割込みの設定を済ませてからLCDを初期化しています。 この時点ではTIMER2の割り込みを禁止していますから、サブルーチン lcd4ini の中にある時間待ちのNOPループを使ってタイミングを調整しています。

その後、(仮想)V-RAMをスペース(020H)で初期化し、SFR2に初期値を設定してTIMER2の割込みを許可しています。

サブルーチン lcd4ini , lcdsendc についてはソースをダウンロードしてご確認下さい。 時間待ちのNOPループを使ったLCD表示プログラムについては他のWebページを参考にして下さい。


以下で、一連の記事で紹介したソース・ファイル(プロジェクト)をダウンロード出来ます。
LHA書庫です。
 http://jyosou-robot.livedoor.biz/pic/RRP1320-0/RRP1320-0-2.lzh

記事を書いていて気付いたのですが、上のソースでTIMER2割り込みを許可する前に既にTIMER2の割込みフラグが立っているはずです。 割込み許可して直ぐに最初のTIMER2割り込みが入るのですが、次のTIMER2割り込みまでの時間が不定に成ります。(2回目以降の割込み間隔は2msec) 最初と2回目の割込み間隔が40usec未満になる可能性があります。 164msec後には正常な表示に戻りますが、この点が気になる場合は割込み許可の直前にTIMER2の割込みフラグをクリアした方が良さそうです。

さらに、初期値不定の lcdw1 のbit7 が立っているとLCD内部アドレスを書き換えてしまいます。 lcdw1 をクリアした方が良さそうです。

具体的には上図41行目と42行目の間に、以下の二行を挿入します。
      BCF    PIR1,TMR2IF        ;割込みフラグクリア
      CLRF  lcdw1,BANKED   ;ワーククリア

LCD関連記事のインデックスはこちらです。 → LCDに自動転送


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。



RRP1320-0 test1 構造

 「RRP1320-0 ハードデバック」に紹介したLEDを点滅させるプログラム(プロジェクト)について説明します。 割り込みを使う為、プログラムの機能毎に独立した複数のソースファイルを作っています。 それらソースファイルの関係を説明します。 < PICデバイス=PIC18F1320 >

project_RRP1320-0

プロジェクト(フォルダー)には4つのソースファイル( .asm )があります。 test1.asm がメイン・プログラムで、他の3つは test1.asm にインクルードされています。 他に青色で示した標準ヘッダーファイル(MPLAB付属)が必要で、各々概略上図の矢印先端の位置にインクルード命令があります。 各ソースファイルの概要を説明します。

<<< symboldef1.asm >>>
このプロジェクトに必要な「ユーザーによるシンボル定義」を全て書くことにします。 (極ローカルな定数定義を除いて)原則として他のソースファイルでは(プログラム中のラベルを除く)シンボルの定義を行わないようにします。

<<< intdef.asm >>>
必要なSFRに設定を書き込んで割り込み及びピン機能の設定を行います。 今回はA/Dコンバーターを使わない設定と、ポートの入出力設定、TIMER0の割り込み周期及び低位割り込み許可を設定しています。

<<< intlow.asm >>>
低位割り込み(現状はTIMER0のみ)が発生した時に動くプログラムです。 必要なレジスター保護を行い、1秒に1回の頻度で test1.asm に記述したサブルーチンをCALLしています。

<<< test1.asm >>>
前述のインクルード文とコメントを除いた中身は下図の通りです。

test1

単にクロックを内部クロックの8MHzに切り替えて、BSR(バンク・セレクト・レジスター)を0に設定した後は無限ループに突入します。 45行目からのサブルーチンは、割り込み処理プログラムによって1秒間隔でコールされ、RA4に(LEDを接続)をトグル動作させるだけのプログラムです。 割り込み処理からコールされるので、無限ループ突入後にも1秒間隔でコールされます。

1秒毎にLEDを点滅させる為には前述 symboldef1.asm , intdef.asm , intlow.asm の役割があるのですが各々の詳細は別の記事で紹介します。

以下で、ここで紹介したソース・ファイル(プロジェクト)をダウンロード出来ます。
LHA書庫です。 前述以外のソース・ファイルもありますがLCD用です。(無視して下さい)
 http://jyosou-robot.livedoor.biz/pic/RRP1320-0/RRP1320-0-1.lzh

 上のプロジェクトに含まれる情報ですが、この時のコンフィグレーション設定の出力です。
 「コンフィグレーションビット」をご参照の上、ご利用下さい。
  http://jyosou-robot.livedoor.biz/pic/RRP1320-0/config_out_test1.TXT


RRP1320-0 関連記事のインデックスはこちら → RRP1320-0 回路図


楽々PIC」は楽しい道具を作りながら学ぶブログを目指します。



ダウンロードコーナー
記事検索
アンケートに御協力下さい


アーカイブ
楽々PIC 宛てBlogMail


--- ご了承下さい ---

注意して記事を書いていますが、記事及びリンク先の情報による不利益について、一切責任を負い(負え)ません。
QRコード
QRコード
アクセスカウンター

    Atsuhiro Imai

    バナーを作成


    プロフィール

    jyosou_robot

    • ライブドアブログ