楽々PIC

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

TIMER2

PWM 3 速度変更

 「PWM 2 設定」の続きです。 今回はメイン処理で速度を変更している部分の説明です。 <PICデバイス=18F1320> PWM制御対象はマブチモーター RE-140RA ( FET 2SK2232 でドライブ)です。

速度変更と言っても、音声合成LSI が Ready 状態の間は一定のデューティー比でPWM出力し、音声合成LSI が発声中はPWM出力を停止(Low固定)するだけの処理です。

下図が、該当部分のアセンブラ・ソース( test7.asm の一部)です。

midles_test7

音声合成LSI の Ready 状態を確認する際に使っている tlkflg の詳細については、「音声合成LSI 4 フラグ」をご覧下さい。


なお、PWM用に TIMER2 を空ける為に TIMER1 をLCD用 2msec 間隔のイベントタイマーにしました。 参考までに TIMER1 を設定してる部分( intdef.asm の一部)を紹介します。 Foscによるイベントタイマーに使う限り、TIMER0 と同様の設定です。

intdef_TIMER1


次回、ノイズ対策の話と回路図を紹介して関連記事を終了予定です。


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


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


PWM

 電源端子と PICkit3 に接続する端子を除けば、唯一未使用の18番ピンを P1A としてPWMを試してみました。 制御対象は手元にあったマブチモーター( RE-140RA )を FET( 2SK2232 )でドライブしています。

DSC00113

PIC18FのPWMは TIME2 を使う為、LCDと音声合成LSI制御に使っていた 2msec イベントタイーマーを TIMER2 から TIMER1 に移しています。 既存部分の回路変更はなく、PWM用の追加だけです。

1.5Vや3.0V定格のマブチモーターを5Vで駆動する場合に、供給電力を抑えてモーターの過熱を避ける目的でPWMを使います。 オープンループながら速度可変と言うおまけ付です。
今回は速度固定ですが、音声合成LSI が Ready 状態の(発声していない)間だけモーターが回転するようにしてみました。

ブラシローラー型水田除草ロボットの速度制御(フィードバック制御)でも使っているので、PWMのプログラムは確認済みですが、モーターのノイズ対策に時間を取られました。 別電源にしてみても効果が無く、結局写真のようにモーターの端子とケースの間にコンデンサーを付けて対策しました。

以下はPWM関連記事のインデックスにします。

PWM 2 設定  
 TIMER2を約 1kHz 周期に設定し、P1A端子 (だけ)をActive High のPWM出力に使用する設定を行います。

PWM 3 速度変更 
 メイン処理で速度を変更している部分の説明です。 

PWM 4 回路図 
 回路図とノイズ対策の話を書いてPWM関連記事を終わります。 ソース・ファイル(プロジェクト)をダウンロード出来ます。


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




音声合成LSI 5 データ送信

 「音声合成LSI 4 フラグ」の続きです。 今回は、実際に音声データを送信しているプログラムについて説明します。 音声データに限らず、USART 送信プログラムに共通する内容です。 <PICデバイス=18F1320> 音声合成LSI は、株式会社アクエスト製 AquesTalk pico  ATP3011F4-PU です。

下図は、TIMER2 低位割り込み中に CALL される送信プログラムのアセンブラ・ソース( tlks.asm の一部)です。 
最初に、メイン処理で使われているテーブル・データ用ポインターを退避して、音声合成データ・テーブルのポインターを復旧します。(34~39行目)
続いて、テーブル・ポインター・アドレスから 1byte を送信し、ポインターをインクリメント(+1)しています。(41~42行目) その後、送信データがCRコード( 0DH )であれば送信中フラグ( tlkflg<bit0> )をクリアして、次回 TIMER2 割り込みで talksend を CALL しないように設定します。(43~47行目)
44行目の tlkcr の値は 0DH です。( intdef.asm で初期化)
49~51行目は、CRコードと異なる 1byte データを送信する時(ブレーク・コマンド)の為に準備しましたが、今回は使っていません。

tlks_tlksend

最後に、音声合成用テーブル・ポインターを退避して、上図プログラム実行前の値に復旧します。

下図はTIMER2 割り込み処理の中にあって、上のプログラムを CALL している部分( intlow.asm の一部)です。 tlkflg<bit1>が 1 の時だけ前述のサブルーチン tlksend を CALL します。
tlkflg を使ったプログラム制御の仕組みについては「音声合成LSI 4 フラグ」をご覧下さい。

TIMER2_tlksend


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


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




LCDに自動転送4

 「LCDに自動転送3」の続きです。 今回はTIME2を使って2msec間隔の低割り込みを発生させる設定プログラムです。 この割込みを許可すると前回紹介した割込み処理が始まります。 < PICデバイス=PIC18F1320 > LCDはSUNLIKE社製SC2004Cです。


LCD転送


下図は、TIMER2の設定を行うアセンブラ・ソースです。
T2CON にプリスケーラー1/16でTIMER2を使う設定を行い、PR2 で割込み間隔を設定します。 8MHzのFosc/4 = 0.5usec とプリスケーラー設定によって2msecを作る値は250dです。 続いて自前のワークを初期化して、TIMER2を低位割り込みに設定しています。 リセット動作直後にメイン処理によってLCDの初期化を行いますから、その後でメイン処理からTIMER2の割込み許可を行います。

lcd_timer2def


下図は、「LCDに自動転送」を実現するために必要なラベル定義です。 vram1 ~ vram4 はLCDの左端1行目~4行目に表示される(仮想)V-RAMのデータ・メモリー・アドレスで、各行20文字分(20byte)の先頭アドレスです。

lcd_symbol


次回は、メイン処理を説明して、一連の記事を終了予定です。


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


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








LCDに自動転送3

 「LCDに自動転送2」の続きです。 今回は TIMER2 の割り込み処理について説明します。 < PICデバイス=PIC18F1320 > LCDはSUNLIKE社製SC2004Cです。

下図の TIMER2 低位割り込み処理に当たるプログラムで、前回(LCDに自動転送2)で説明したプログラムを CALL してLCDにコマンドとデータを送ります。 他に TIMER2 の設定やメイン処理によるワーク及びLCDの初期化と TIMER2 割り込み許可と言ったサポートを受けて正常に動作するものですが、前回とこの記事のプログラムがLCD自動転送プログラムの中核です。

LCD転送


このLCDは20桁x4行で合計80文字を表示しますが、他の製品との互換性を保つ目的でLCD内部のメモリーが連続しておらず、連続する40文字の内部メモリーが二つあります。 この為、40文字送る度にLCD内部メモリーの先頭アドレスを指定し直す必要があります。 アドレス指定の後にも40usec以上待たなければ次のデータを送れない為、アドレス指定2回と80文字転送の合計82回の TIMER2 割り込みで全画面を転送します。

先にフローチャートをご覧下さい。

lcd_intlow_flow

40文字送る都度、LCD内部アドレスを書き換えますが、先のデータ転送で40桁目が終了すると lcdw1 にbit7=1 のコマンドを書きこみます。 次の TIMER2 割り込みのタイミングで lcdw1 の bit7 (内部アドレス更新要求)をチェックして、実際にLCD内部アドレス書き換えコマンド( lcdw1 の値がコマンドの値)を送って bit7 をクリアします。 表示データを送るのは次回の TIMER2 割り込みのタイミングになります。

以下はそのアセンブラ・ソースです。

lcd_intlow

先のフローチャートと並び順も一緒なので、見比べれば解り易いのではないかと思います。


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


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



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


アーカイブ
楽々PIC 宛てBlogMail


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

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

    Atsuhiro Imai

    バナーを作成


    プロフィール

    jyosou_robot

    • ライブドアブログ