ブログパーツUL5

PIC16F84AをPIC16F628Aに置き換え成功

 すでに製作してあるLED電光掲示板やビットマン風の表示は、PIC16F84Aではメモリ限界で増やすことができません。そこで、メモリの多いPIC16F628AやPIC16F648に切り替えができるか検討しました。
 幸いPIC16F628事始に置き換える時の注意点が説明されていたので、大変助かりました。

変更した4箇所は次の通りです。

(1)デバイス指定の変更
  PIC16F84AからPIC16F628Aにデバイスを変更します。
 【変更前】
list p=16F84A ; list directive to define processor
#include ; processor specific variable definitions
 【変更後】
list p=16F628A ; list directive to define processor
#include ; processor specific variable definitions

 ※参考:コンパイル時にバンク切替の警告を非表示に出来る
ERRORLEVEL -302 ;アセンブル時のバンク警告メッセージ抑制

(2)コンフィグレーションワードの変更設定
  デバイスにより機能が違うので、コンフィグレーションワードを設定変更します。
 ・LVP(Low Voltage Programming Enable bit)のON/OFF
  LVPはないので無効にします
 ・MCLRE(RA5/MCLR Pin Function Select bit)のON/OFF
  MCLRピンはOFFにします
 ・発振方式の指定(HS oscillator)現状に合せます
  (内蔵OSCもあるので、回路の簡素化も可能)

【変更前】
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
【変更後】
__CONFIG _HS_OSC & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _DATA_CP_OFF & _WDT_OFF & _LVP_OFF & _BODEN_OFF

(3)データRAM(ユーザーメモリ)の先頭番地の変更
 ・16F84Aは0x0C番地を16F628Aは0x20番地に変更
 ・70H〜7FHの範囲だけ、どのバンクにあってもRead/Write可能
 【変更前】
w_temp EQU 0x0C ; variable used for context saving
status_temp EQU 0x0D ; variable used for context saving
;---
wait_data EQU 0x10 ;wait data
count_sub EQU 0x11 ;count sub data
以下に続く

 【変更後】
w_temp EQU 0x70 ; variable used for context saving
status_temp EQU 0x71 ; variable used for context saving
;--
wait_data EQU 0x20 ;wait data
count_sub EQU 0x21 ;count sub data
以下に続く

(4)ポート設定変更
 ・コンパレータのアナログ入力のOFF設定とデジタルIO設定
 ・ポート設定を分かりやすく記述
 【変更前】
port_set ;RA0,RA1,RA2,RA4(OUT)
;RA3(IN)
;RB0,RB1,RB2,RB3,RB4,RB5,RB6,RB7(OUT)
bsf STATUS,RP0
clrf TRISA
bsf TRISA,4
nop
clrf TRISB
bcf STATUS,RP0
return
 【変更後】
port_set ;RA0,RA1,RA2,RA4(OUT)
;RA3(IN)
;RB0,RB1,RB2,RB3,RB4,RB5,RB6,RB7(OUT)
;***** 16F628A INITAL SETTING
;------ コンパレータOFF ------
bcf STATUS,RP0
bcf STATUS,RP1
clrf PORTA
movlw 0x070 ;コンパレータOFF 16F628独自
movwf CMCON ;ディジタルI/Oとして定義
;------ I/O定義 ------
bsf STATUS,RP0 ;bank1へ切り替え
movlw b'11110000' ;INPUT PA3,4,5 出力
movwf TRISA ; RA ポートの設定
movlw b'00000000' ; OUTPUT PB0-7:00h
movwf TRISB ; RB ポート全て出力
bcf STATUS,RP0 ; bank0へ切り替え
return
0

    マトリックスLEDをリサイクル

     マトリックLEDを再利用して、予備のRZ-1用の電光掲示板を製作しました。これには赤LEDと緑LEDの切替SWを載せています。RZ-1の手で持っているのが、マトリックスLEDをリサイクルした電光掲示板です。

     これで故障時にはいつでも交換が出来る体制になりました。LED駆動回路のICでスペースを稼げるものがなく、結局、従来のトランジスタのドライブを並べています。ベース抵抗のみ共用化して1本の抵抗で赤LEDと緑LEDの切替えで使用できるようにしています。

    0

      2色電光掲示板を搭載

       緑色と赤色の2色に切替えが出来る改良型の電光掲示板モジュールをRZ-1に搭載しました。従来のモジュールと規格を統一してあるので、交換する時はとても簡単にできました。

       どうです。メッセージが緑色になったでしょう。LEDのVFの違いにより緑色は少し暗いようです。電流制限抵抗は、色を切替えても同じ220Ωになっている為です。


      モジョールを固定するボディカバーの折り返しを少し直しただけで交換は完了しました。色の切替えはボディカバーの脇から指を入れて、指先で写真のスライドSWで間単にできました。

       古いモジュールはビットマン専用モジュールにしました。また、もう1つのモジュールは部品を再利用して2色LEDモジョールに改造しようとも思います。

      0

        2色のLED電光掲示板を試作

         すでにRZ-1に搭載しているLED電光掲示板をグレードアップしようと、ちょっとだけ仕様を追加しました。PICマイコンのソフトは全く変更せずに、ハード的に回路を追加することにしました。

         それは折角の2色(赤/緑)LEDマトリックなので、駆動回路を分けてスイッチで切替えるようにしました。写真の左側のは今までのモジュールですが、その下に8回路分のLED駆動回路を設けました。


         そこで、出来る限り配線を減らしたいので、基板上の部品配置と配線を大幅に見直しました。写真のようにここまでは組立ててから配線しました。

         抵抗は1/6Wの小型にして全て部品の下、ICソケットの下、Trの間に配置しました。そのお陰で部品サイズの基板に収めました。




         2箇所ほど半田付けの不完全な所がありましたが、ほぼ問題なく仕上がりました。表面は見事に出来ました。現在のRZ-1のカバーの載せてみましたが、サイズ的には問題はありませんでしたが、切替スイッチの部分のカバーを改修する必要がありそうです。

         これで、赤と緑の2色切替の電光掲示板が出来上がりました。消費電力的にはLEDを切替えているため、赤LEDか緑LEDのどちらかにしか電流は流れないので前作と全く同じです。
        0

          ROBOZAKにビットマン

           アクリルの小さな箱を見つけてもらったので、以前に製作したビットマンを搭載してみました。以前製作した電光掲示板モジュ−ルのサイズにフィットするので見た目にも良さそうですね。

           これをどのようにするかのアイデアを練っています。別電源にしておくと時計(?)になります(どのマトリックLEDが付いているかで、時分秒が分かる)ので、ROBOZAKが置物としても利用できます。
           改造すべき点は次の4つ
          (1)90°回転できるようにする
          (2)電光掲示板モジュ−ルを簡単に交換できるようにする
          (3)アクリルのクリア出なくダークにして中身を見えにくくする
          (4)別電源をどのようにするか


           なぜ、改造を考えているかというと、距測LEDのでっぱりを保護できるようにすることと、本体の胸部に音声合成のボードを搭載できるようにスペースを確保したいためです。
          0

            デジタルポートの整理

             デジタルポートの整理をすることにしました。リモコン20関節のモーションとの互換性を維持する為に、ポート5とポート23は空きにしました。こうしておけば、誤動作することも少なくなります。
             また、Robozakでは各センサーをデジタルポートに差していましたが、これは仮に差していただけなので、センサーに電源がかかり無駄な消費電流が流れるので、抜いてオープンにしました。

            再度、デジタルポートの割付けの確認をしてみることにした。
            【MR-C3024左側】
            ポート11:サーボOFF → 電光掲示板の表示切替信号用
            ポート10:首のサーボ

            ポート 9:左手サーボ
            ポート 8:左腕サーボ
            ポート 7:左腕サーボ
            ポート 6:左肩サーボ
            --------------------
            ポート 5:空き
            ポート 4:左股サーボ
            ポート 3:左腿サーボ
            ポート 2:左脛サーボ
            ポート 1:左脛サーボ
            ポート 0:左足サーボ

            【MR-C3024右側】
            ポート17:サーボOFF → 音声認識/音声合成用のスタート信号
            ポート16:サーボOFF → 空き
            ポート15:右手サーボ
            ポート14:右腕サーボ
            ポート13:右腕サーボ
            ポート12:右肩サーボ
            --------------------
            ポート23:空き
            ポート22:右股サーボ
            ポート21:右腿サーボ
            ポート20:右脛サーボ
            ポート19:右脛サーボ
            ポート18:右足サーボ

            当分は、この状態でいこうと思います。
            0

              リモコンで掲示板の表示切替え

               自作したLED電光掲示板の表示切替えは、今まで押しボタンで出来るようにしていましたが、これをリモコンで操作できるようにしました。

               信号配線は、どれか空いているデジタルポートを選び、11番ポートに設定して、信号線を切替用押しボタンに接続するだけです。後は、ソフトを組み込むのみで簡単でした。

              (1)初期設定の箇所で、サーボコントロールから除く設定をする

              '== motor power on =============================
              SPEED 5
              MOTOR G24
              '-- motor off setting --
              MOTOROFF 11
              MOTOROFF 16
              MOTOROFF 17
              '-----------------------

              (2)■のボタンで、表示が切替える設定
              '================================================
              k26: ' [] 1
              OUT 11,0
              DELAY 5
              OUT 11,1

                GOTO main_exit
              '================================================

              モジュールには三端子電源のレギュレータを載せているので、PWMポ−トから11番ポートに変更して、こんなに簡単に設定できるとは思いませんでした。大満足です。LED電光掲示板は循環式に切り替わるようになっています。

              関連記事:電光掲示板

              追伸:
               ID-01の音声認識/音声合成において、起動時のスタート信号はこの方法で自動的に行うことが出来ます。ということはこちらのモジュールに三端子電源を搭載していますので、通常の3本ケーブル1本で動作させることができます。
              0

                デジタルポートの割付けの確認

                デジタルポートの割付けの確認をしてみることにした。

                【MR-C3024左側】
                ポート11:光センサー(左足)
                ポート10:光センサー(本体)
                ポート 9:左手サーボ
                ポート 8:左腕サーボ
                ポート 7:左腕サーボ
                ポート 6:左肩サーボ
                --------------------
                ポート 5:首サーボ ← ポート16へ移動
                ポート 4:左股サーボ
                ポート 3:左腿サーボ
                ポート 2:左脛サーボ
                ポート 1:左脛サーボ
                ポート 0:左足サーボ

                【MR-C3024右側】
                ポート17:光センサー(右足)
                ポート16:サウンドセンサー ← センサーを削除
                ポート15:右手サーボ
                ポート14:右腕サーボ
                ポート13:右腕サーボ
                ポート12:右肩サーボ
                --------------------
                ポート23:LED電光掲示板 ← PWM2ポート1へ移動
                ポート22:右股サーボ
                ポート21:右腿サーボ
                ポート20:右脛サーボ
                ポート19:右脛サーボ
                ポート18:右足サーボ

                 空いているポートは1つしかことになり、股サーボの追加でポートが足りないことになります。音声認識が稼動してので、サウンドセンサーは外して、そこに首のサーボを移動させて、ポート5とポート18を股サーボに割り付けることにします。結局、サウンドセンサーは何だったのだろうか?

                 それにしてもアナログポートだけでなくデジタルのポートも一杯となり、股サーボを追加すると残っているポートは、PWM0〜PWM1の2ポートのみとなることになる。RZ-1がここまで増強してくるとマイコンボードのスペックとして不足を感じる。
                0

                  ボディカバーに部品・センサーを搭載

                   本体に固定できるようになったボディカバーに部品やセンサー類を搭載しはじめました。前回の距離センサーに続いて、LED電光掲示板、その表示切替スイッチ、白色LEDライト(光センサー付き)、光センサー、音センサー、通信用コネクタなどを今回は取り付けました。

                   LED電光掲示板のマイコンは電源が5Vなので、3端子電源を搭載しその表示切替スイッチと簡単な光センサー回路組み込んだ白色LEDライトを1つの基板にしてからフロントカバーに取り付けました。白色LEDライトは明るい時は消灯しており、暗くなる自動的に点灯するようにしてあります。

                   薄暗くなると自動的に高輝度の白色LEDが点灯するので、正面からは眩しいぐらいになります。写真でもわかるように、これで青色LED、白色LED、赤色LED、赤外LEDの4種類のLEDが点灯していることがわかります。ちょっと消費電力が多くなり、心配なのでOFFのSWを付けようと思います。

                   ボディーバランスは今の所は問題なく、従来作成したモーションをそのそのままで、側転、前転、後転なども出来ています。LCDも載せようとも思いましたが、重量が重くなるのでメンテナンスだけにして接続しやすいようにコネクタを取り付けました。

                   少し胴回りが太くなりましたが、ROBOZAKのような肩の荷物がないのですっきりしています。距離センサーの下にスピーカーの取り付け準備も出来ているでの、必要になったらすぐに取り付けられます。

                  0

                    LED電光掲示がやっと出来る

                     電光掲示板の製作をしていました。ハードは出来ていたのですが、ソフトウェアを作成しては試行錯誤していました。

                     やっと、字が読めるようにゆっくりと右から左に文字(アルファベット)が流れるようになり、電光掲示板風に出来上がりました。動画でないのでわかりずらいですが、文字が流れている感じがわかると思います。

                     これで表示切替方式と電光掲示方式をマイコン(PIC16F84A)を差換えることで変更することが出来るようになりました。さらに、表示文章をデジタル信号で切替えるに拡張することにしています。現在は、「START RZ-1!」、「THANK YOU」、「SEE YOU AGIN. GOOD BYB」を切替えることが出来ますが、文章はいくらでも変更が出来るので、今後はMR-C3024のデジタル信号の出力パルス数で切替えるようにroboBASICのPULSEを利用して連動させることも出来そうです。
                    0

                      LED表示(ビットマン?)の試作で楽しむ

                       今度はドットマトリックスLEDの掲示板表示にチャレンジしてみました。といってもほとんどWebにあるものを試してみました。基板の裏側はお見せできませんが、このサイズに収めると配線だらけです。最初の試作は、アルファベットが右から左に流れる電光掲示板です。ここまで行くのにPICライターとソフトとPICマイコンとの相性がうまく行かず困りました。最適電流値が見つかり、相性の良いソフトを切替えていろいろ試してなんとかPIC16F84AとPIC16F819の2種類作成することに成功しました。RCDライタはなかなか使える奴です。

                       アルファベットが流れているだけでは面白くないので、ビットマン風のお遊びを入れてみました。RZ-1がお休みでもLEDだけでも楽しい。発振子を高精度にして、ACアダプターで電源供給していれば、RZ-1のボディーに組込み時計にするのも楽しそうですね。縦と横の2タイプを製作していろいろ検討できるようにしました。飽きたらフラッシュマイコンなので、何度でも表示を切替えることができます。

                       RZ-1に搭載できるサイズですが、LCDと違い消費電力が大きいので、デジタルポートの信号で表示期間をコントロールすれば可能だと考えています。また、音センサーが感知したら「OK!」と表示するとか、光センサーで暗さを感じたらRZ-1は休息してこのLEDが動き出すのも面白いと思います。いろいろ活用できそうです。

                       今回試作してみましたが、ボディーカバーを検討していないので、搭載は当分先になりそうです。また、LEDの下にマイコンとLEDドライバも格納できるとかなり小さくなるかもしれません。
                      0


                        カレンダ

                          12345
                        6789101112
                        13141516171819
                        20212223242526
                        27282930   
                        << September 2020 >>