ブログパーツUL5

液晶表示がLCD端子でうまく動作せず

 秋月の液晶キットが売切れなので、インターネットで調べていたら、少し高いですがそれでも安いシリアル制御の小型液晶表示キットを見つけたので、試しに購入してみました。駄目もとで購入して、どうしても駄目であれば、V850ボードの表示に転用するつもりです。写真は購入したキットですが、なかなかきれいな基板で品質は良さそうです。

 帰宅後早速、半田こてで組立ててみました。液晶を交換できるようにしました。理由は、序に、PICのマイコンから製作でもしてみようかとも考えたいます。そのためには、フリーのソフトと安いライターが必要ですが、何とかなりそうです。少々脱線しました。

 左の写真のように、無事、液晶表示には加速度センサーのAD値が表示できました。しかし、これは今までのETXからデータ転送で問題なく表示したのですが、問題が明確になってきました。
 どうも私のマイコンボードのLCD端子は不具合のようです。液晶コントロールコマンドでプログラムしても、純正品の液晶表示を接続していないので確定ではありませんが、PCのターミナルにも何も表示しないことや液晶表示でも何も表示しないので、マイコンボードの不具合かも知れまセん。

 もう少し実験して原因を調べてみます。

【追記】
 やっとLCD端子に接続して、ハイパーターミナルで転送データが見えるようになりました。設定が違っていて、データが読めなかったようです。設定条件は、4800ビット/秒、8データビット、パリティなし、ストップビット1、フロー制御ハードウェアでうまくいきました。ということはマイコンボードの動作は問題ないようです。(ほっ、ひと安心)

 次に、液晶表示ですが、転送速度の自動調整がうまくいっていないのか、液晶のコントロールコードが違うのかを調査中。→9600bpsでは表示するのですが、4800bpsや2400bpsで表示しないことがわかりました。どうも液晶表示の自動設定がうまく機能していないように見えます。従って、LCD端子は4800bpsなので表示できないようです。PCで読めるので、LCD端子は正しいのでしょう。

 MR-C3024は7.3728MzHの水晶を搭載していますから正確なので、液晶表示に搭載しているPIC16F627Aの発振周波数が怪しいことになり、4800bpsが自動設定で整合しないということになります。内部発振なので、8MHz±約1MHzということになる。プリント基板をいじらないとすれば、セラロックの8MHzを追加するしかないようです。今日はここまで。
0

    RZ1Basicで簡単にAD値がわかる


      miconoさんから情報を頂き、試しに、RZ1Basicの最新版v0.1.7を利用してみました。マイコンボードのLCD端子を使わずに、I/FコネクターからPCにAD値を転送して、データを読むことが出来るという機能があります。

     このプログラムはソースの読込みが大変遅い(私のプログラムが肥大しているともいえる)のですが、ツールバーの「コントローラ」に「ADポート読込」という機能が追加されています。この新機能が、プログラムをRZ-1に転送する接続コードをそのままにして、AD値をPCのRZ1Basicで読めるという機能です。

    詳細は下記のURLへ
    http://micono.cocolog-nifty.com/blog/2008/01/ad_7f9c.html

     最初は、折れ線グラフだけかと思っていましたが、掲載したようにAD値を簡単に見ることが出来ます。掲載画面は、RZ-1に搭載している加速度センサーでの値を例に実施してみました。立っている状態では、AD値=142で、うつ伏せでAD値=87、仰向けでAD値=187でした。簡易グラフ表示機能もありますが、やはり、値を読んでExcelでグラフにした方がいいでしょう。これがあれば、手軽にセンサーを利用したプログラムを組めむことができるのではないでしょうか。

     この値を参考に、if文で分岐させて起き上がるモーションに飛ぶようにすれば、自動的に起き上がることが出来ます。但し、注意は1回の呼び込みでは他のモーションの態勢でそのモードに入るので、ある時間を置いて同じ態勢であるかを判定してからモーションに飛ぶようにした方が誤動作はしないでしょう。参考までに。

    miconoさんの新機能は、これからroboBASICを組むという方には大きな助けになるのではないでしょうか。プログラムの改良これからもよろしくお願いします。できれば、ファイル読込みの高速化もお願いします。
    0

      電源検出電圧の実測値と計算値

       電源電圧のAD値を取り出すプログラムです。単に、アナログポートAD(6)を指定して、先日製作したRS232Cインターフェイスを接続するだけです。Windowsのアクセサリにあるターミナルで、送信されたデータを見ることが出来ます。

      '============= サンプルプログラム ==========
      DIM A AS BYTE
      DIM B AS BYTE

      MAIN:
      A = " "
      ETX 9600,A
      A = "A"
      ETX 9600,A
      A = "D"
      ETX 9600,A
      A = "="
      ETX 9600,A

      A = AD(6)

      B = A/100+48' 0x30 --> 48
      A = A%100
      ETX 9600,B

      B = A/10+48 ' 0x30 --> 48
      A = A%10
      ETX 9600,B

      B = A+48 ' 0x30 --> 48
      ETX 9600,B

      A = " "
      ETX 9600,A

      GOTO MAIN
      '=======================================

      電源電圧の実測値とAD値と計算値(計算式:10*Value / 256 = Voltage)の関係は次のようになっていました。実測値と計算値は、0.03〜0.02Vの誤差があることがわかりました。
      (1)ACアダプター
      6.18V → 159(BYTE) → 6.21V
      (2)バッテリー
      6.58V → 169(BYTE) → 6.60V

       これでアナログポート(6番)は他のセンサーには利用できないことがわかりました。
      そこで、アナログポートの割当ては次のようになりそうです。
      AD(0);加速度センサー(Z軸:前後)
      AD(1):ジャイロ入力
      AD(2):距離センサー
      AD(3):(予備)
      AD(4):加速度センサー(Y軸:左右)
      AD(5):ジャイロ出力
      AD(6):電源電圧検出
      AD(7):リモコン出力

      【追記】
       ROBONOVA-IのマニュアルのP95の検出回路の記載にミスがあります。
      ・Vcc(誤)→ V+(正)
      ・AD7(誤)→ AD6(正)
      0

        roboBASICがバージョンアップ

         roboBASICの開発の元のホームページroboBASIC.comを見てみると、2007/12/03に日本語版がv2.5からv2.6のバージョンアップされていました。但し、アップデートは自己責任にて行ってください。当方で動作を保証するものではありません。

         インストールに関しては、私のPCのWindowsXPではエラーは出ませんでした。一旦、V2.5を削除した上でインストールします。インストールが完了すると次のソフトがv2.6となっていました。
        roboBASIC v2.6
        roboRemocon v2.6
        roboScript v2.6

        【追伸】
        早くも、2007/12/20にはv2.61にヴァージョンアップされました。


        【注意】試してみましたが、v2.6はPCとの通信エラーが出やすくなり、注意が必要です。MR-C3024のファームウェアをバージョンアップすれば、改善するという情報もありますが、自己責任で行ってください。

        私は面倒なので、メーカーが保証していないので今は元に戻しています。
        0

          roboBASICのマニュアルは?

           roboBASICのマニュアルは、まだ、デアゴスティーニからは提供されていません。調べてみると、ハイテックマルチプレックスジャパンのHPに、マニュアルをダウンロードできるようなっています。『ROBOBASICロボベーシックコマンド説明書』が用意されています。しかし、このファイルをダウンロードしたのですが、私のパソコンでは表示する分には問題ないのですが、印刷しようとするとうまくできませんでした。

           結局、WRODの新規作成で問題化の箇所を少しづつコピー&ペーストしながら全体を再構成して作り直しました。問題箇所は特定できませんでしたが、1ページでもだめな時もあれば、数ページコピーできる場合もありました。特に、半分ぐらいの所が問題でした。そのように作り直せば、問題なく印刷できました。
          0

            roboScriptのrsfファイルをシミュレータ用に変換

             roboScriptのrsfファイルは、ROBOZAKプログラミング・シミュレータ(略してシミュレータ)と互換性がないので動きません。miconoさんのRZ1Disguiseを利用させてもらっています。初心者は、このソフトを利用することをお勧めします。

             一応、perl言語でもシミュレータに変換できるソフトを作成してみました。結構、面倒で一気に変換できず、中間ファイルに吐き出す方法を取り、わかりやすくしました。

             はじめて、roboScriptとシミュレータのサーボの値は反転しているところがあると思いませんでした。これはroboScriptがちゃんと動作することからシミュレータのサーボの値が間違っているのではないでしょうか?バグ!?

            rz2rs.plの方もサーボの値を反転させる必要があるようです。利用される方は確認が必要です。なお、まだ反転すべきサーボがあるかもしれませんので、動作がおかしい時は追加してください。

            でも、なんでこんなことになっているのでしょう。robScriptとシミュレータの互換性という点ではぼろぼろですね。プロが作成しているのでしょうから、もう少しユーザの使い勝手を考えた品質してほしいものです。

            ★★★★★★★★★★★★ここから変換ソフト(rs2rz.pl)★★★★★★★★★★★★
            #
            # roboScriptのrsfファイルをRZ-1へのデータ変換
            #
            {
            # 標準入力から1行分のデータを受け取り、末尾の改行文字を削除
            print "変換するファイル名を入力して下さい。";
            $in = ;
            chomp $in; # 標準入力から1行分のデータを受け取る
            $file_in = $in;

            # 変換のrsfファイル(ファイル名を指定)
            $file_tmp = "tmp.rsf"; # 中間のrsfファイル名
            $file_out = "rz_".$file_in; # 変換後のrsfファイル名

            # 変換前のファイルをオープン
            unless (open (IN, "$file_in")) {
            print "Read open error ($file_in).¥n";
            exit (1);
            }
            # 中間ファイルをオープン
            open (OUT, ">$file_tmp");
            # 行のカウント
            $count = 0;

            # 文字列の変換
            while () {
            $line = $_;
            if ($count == 1){
            $line =~ s/[¥000¥000¥003]/¥r/g; # 隠しコードを変換
            }

            $line =~ s/¥r/¥n/g; # CRをLFに変換

            if ($line =~ /MOVE/){
            $line =~ s/MOVE24/MOVE G24,/g; # MOVE24をMOVE G24に変換
            }
            if ($line =~ /DELAY/){
            $line =~ s/DELAY/WAIT/g; # DELAYをWAITに変換
            }
            if (count < 2){
            printf OUT "$line"; # 行末にCRを付けない
            }else{
            printf OUT "$line¥n"; # 行末にCRのみを付ける
            }

            $count++
            }
            # ファイルのクローズ
            close(IN);
            close(OUT);
            # 中間ファイルをオープン
            unless (open (IN1, "$file_tmp")) {
            print "Read open error ($file_tmp).¥n";
            exit (1);
            }
            # 変換後のファイルをオープン
            open (OUT1, ">$file_out");
            # 行のカウント
            $count = 0;

            while () {
            $line1 = $_;
            if($count == 0){
            $line1 =~ s/¥r¥n//g;
            $line1 =~ s/roboScript file/roboScripts file!/g;
            }
            if($count == 1){
            $line1 =~ s/contents !/contents!/g;
            }

            $line1 =~ s/¥n//g;

            if ($line1 =~ /MOVE/){
            $line1 =~ s/ //g; # スペースの削除

            @move = split(/¥,/,$line1); # MOVEの分解

            for ($i=1;$i<=24;$i++){
            if ($move[$i] eq ""){
            $move[$i] = 100; # 記載ない箇所を100に設定
            }
            }
            # サーボ反転
            $move[2] = 200-$move[2];
            $move[3] = 200-$move[3];
            $move[5] = 200-$move[5];
            $move[7] = 200-$move[7];
            $move[8] = 200-$move[8];
            $move[9] = 200-$move[9];
            $move[18] = 200-$move[18];
            $move[19] = 200-$move[19];
            $move[22] = 200-$move[22];

            # MOVEの組替え
            $line1 = "MOVE G24¥,".$move[1].",".$move[2].",".$move[3].",".$move[4].",".$move[5].",".$move[6].",".$move[7].",".$move[8].",".$move[9].",".$move[10].",".$move[11].",".$move[12].",".$move[13].",".$move[14].",".$move[15].",".$move[16].",".$move[17].",".$move[18].",".$move[19].",".$move[20].",".$move[21].",".$move[22].",".$move[23].",".$move[24].",";
            }
            print "$line1¥n"; # 行末にLFのみを付けて画面出力
            printf OUT1 "$line1¥n"; # 行末にLFのみを付けてファイル出力
            $count++
            }
            close(IN1);
            close(OUT1);
            # 変換後のファイル表示
            print "変換したファイル名は、 ";
            print "$file_out¥n";
            # 中間ファイルの削除
            unlink "$file_tmp";
            }
            ★★★★★★★★★★★★ここまで変換ソフト(rs2rz.pl)★★★★★★★★★★★★

            0

              roboScriptをシミュレータで確認可能に

               互換性がないので、roboScriptのrsfファイルは、ROBOZAKプログラミング・シミュレータ(略してシミュレータ)で動きません。roboScriptのrsfファイルがどんな動きなのかを確認するのに不便でした。

               miconoさんも解析しながら変換ソフトを作成しており、RZ1Disguise v0.0.6(最新版)というかなり本格的で立派なソフトを作成しています。シミュレータへの変換ソフトは作成せずに、早速、このソフトをインストールして、楽して変換できました。

               これで、一応、rsfファイルの双方向データ変換の環境が出来上がりましたので、シミュレータで確認してroboScriptで実動作させてみることができます。
              0

                roboScriptで動作するrsfファイルに変換するソフト

                 今まで送られてきたCDに入っているモーションデータは、roboScriptのソフトでは動作しないことがわかりました。そこで、roboScriptでも動くようにするためにrsfファイルを変換することにしました。しかし、ファイルの数が多いのと、手順を間違えるとやり直しとなるため、文字列操作が楽なPerl言語を使って、簡単なプログラムを組んでみました。

                 実行はActivePerlでverには関係なく動作すると思います。

                なお、私の場合には首部のサーボ補正も同時に行うようにしていましたので、『$move[5] = 78;』をコメント文で止めてます。また、今のRZ-1は片足なので、バランスをとるために、move[1]を104にしないと倒れてしまいますが、この補正は暫定なのでファイル変換をせずに、rsfファイルを読込んだときにマニュアルで修正して実行するようにしました。

                【追記】利用しやすくファイル名を入力するように変更しました。

                ★★★★★★★★★★★★ここから変換ソフト(rz2rs.pl)★★★★★★★★★★★★

                #------------------------------------------------------------------------------
                #    rsfファイルをroboScript用にデータ変換(perl言語)
                #
                # 2007.8.26 by takuo :フリーソフト
                # 自己責任にてご利用ください。実行に伴う損害は一切負いません。
                #------------------------------------------------------------------------------

                {
                # 標準入力から1行分のデータを受け取り、末尾の改行文字を削除
                print "変換するファイル名を入力して下さい。";
                $in = ;
                chomp $in; # 標準入力から1行分のデータを受け取る
                $file_in = $in;

                # 変換のrsfファイル(ファイル名を指定)
                $file_out = "activ_".$file_in; # 変換後のrsfファイル名

                # 変換前のファイルをオープン
                binmode IN;
                unless (open (IN, "$file_in")) {
                print "Read open error ($file_in).¥n";
                exit (1);
                }
                # 変換後のファイルをオープン
                binmode OUT;
                open (OUT, ">$file_out");

                $count = 0;

                # 文字列の変換
                while () {

                $line = $_;
                $line =~ s/¥n//g;

                if ($line =~ /WAIT/){
                $line =~ s/WAIT/DELAY/g; # WAITをDELAYに変換
                }

                if ($line =~ /MOVE G24/){
                @move = split(/¥,/, $line); # MOVEを分解する
                # $move[5] = 78; # 首のサーボの補正
                # MOVEのカラムを揃えて記述
                $line = sprintf("MOVE24%4s,%4s,%4s,%4s,%4s,%4s,%4s,%4s,%4s,%4s,%4s,%4s,%4s,%4s,%4s,%4s,%4s,%4s,%4s,%4s,%4s,%4s,%4s,%4s,",$move[1],$move[2],$move[3],$move[4],$move[5],$move[6],$move[7],$move[8],$move[9],$move[10],$move[11],$move[12],$move[13],$move[14],$move[15],$move[16],$move[17],$move[18],$move[19],$move[20],$move[21],$move[22],$move[23],$move[24]);
                }
                if($count eq 1){
                printf OUT "$line¥000¥000¥003"; # 隠しコードを埋め込む
                }else{
                printf OUT "$line¥r"; # 行末にCRのみを付ける
                }
                $count++;
                }
                # ファイルのクローズ
                close(IN);
                close(OUT);
                }

                ★★★★★★★★★★★★ここまで変換ソフト(rz2rs.pl)★★★★★★★★★★★★
                0

                  roboScriptで動作しないrsfファイルの修正方法

                   roboScriptで動作しないrsfファイルがあるので、ソース記述だけでなく他にも問題があるようので、問題なく動作するモーションファイル(rsf)を調べて動作するように修正する方法を紹介します。micono さんにヒントを頂き感謝いたします。

                  (1)ソース記述をテキストエディタで修正します。
                  ・MOVE G24, ⇒MOVE24_
                                   ↑半角スペース
                  ・サーボの数値のカラムを合せる。
                   (2桁の数値の場合に、数値の前に半角スペースを挿入)
                  ・MOVEの行末に「,」を入れる
                  ・WAIT ⇒DELAY
                  これで一旦、保存します。

                  (2)次に、バイナリエディタで修正します。
                  下図のように先頭の表現が若干違いがあります。
                  ●ここで重要なのは黄色で囲った線で、「OD 0A」でなく「00 00 03」に変更しますが、全体をコピー&ペーストした方がいいでしょう。


                  ●さらに、コマンドの行末も修正します。「0A」でなく「0D」に変更します.

                  【追記】この修正は、テキストエディタで保存時に改行文字コードをCR(0D)に指定できると一括して変更できます。

                  これで動作するようになると思いますが、まだ、差異があるかもしれません。私のところでは、これで一応動作するようになりました。
                  0

                    ハンディ・オシロ用のプローブ完成

                     今までハンディ・オシロ用のプローブを作製して使っていましたが、ケースに入れず基板がむき出しで利用していたので、配線の取り回しで切れることが多くなりました。
                     そこで、100円ショップで携帯電話用の単3電池電源ケースを買ってきて、流用してみました。ちょっと組立が窮屈ですが、ジャストフィットでなんとかスマートに仕上がりました。

                    0


                      カレンダ

                         1234
                      567891011
                      12131415161718
                      19202122232425
                      2627282930  
                      << November 2017 >>