---PIC 流れるサインボード (2)---

 なめらかにスクロールする方法について、いろいろアドバイス
 いただきました。
 ハードルが高い部分もあって、なかなか実現できません。
 とりあえず、当初の目的である、PCからの入力を表示する
 ことができました。

 

 PICを初めてから、いつも迷ってたのが、文字のキャラクター
 コードの扱いです。
 VB等では、キャラクターコード得るには、

   Asc(‘A’)

 のように「Asc」の関数を使うようです。プログラムを初めて
 覚えたBasicでも同じような関数を使ったと思います。
 このことが頭に残っていて、関数を使わなければ、と思い
 こんでいました。
 なんのことはない、コンピューター上では、同じ、数字で扱わ
 れるんですね。ですから、アスキーコードを得て、演算をする
 には、端に「int」型にキャストすればいいということがやっと
 わかりました。

      char c1 = ‘a’;
      int code1 = (int)c1;

 これで、code1には、’a’のキャラクターコードの0x61を得る
 ことができました。
 キーボードからの入力を表示するにあたって、大文字のデータ
 しかいれていませんので、小文字は、0x20を引いて、

   char c1 = ‘a’;
   int code1 = (int)c1-0X20;

 大文字に変換しました。

---PIC 流れるサインボード (1)---

 諸兄のHPを参考に、PICを使ってサインボードを作りました。
 何の使用目的もない、ただのおもちゃです。
 ただ、諸兄のHPで使ってる74HC154は製造中止でしたの
 で、これまた、諸兄のHPを参考に、74LS138二つで置き換
 えて作りました。
 三日ぐらいかかって、配線を終えて、どのような形で、流れる
 サインボードを実現するか考えました。
 参考になるC言語によるプログラムがみあたらなかったので、
 過去の7セグLEDを使った工作を思い出しながら、
 ダイナミック点灯を基本にプログラムを組むことにしました。

 

 8×8のLEDが4枚ですので、8×32列のLEDがならんでます。
 この黄色い□から黄色い□までのLEDに、タイマー割り込みを
 使って、このLEDとダブるように準備したメモリーの内容を
 書き出すことにしました。
 テレビで使われている走査線のイメージでしょうか。
 メモリーには、縦に8個並んでいるそれぞれのLEDの
 ON-OFFの情報を書き込みます。
 右にスクロールさせるには、メモリーの左側の山吹色の部分
 に表示させる文字のデーターを書き込みます。
 左にスクロールさせるには、メモリーの右側の青色の部分に
 表示させる文字のデーターを書き込みます。
 「A」の表示をさせるには、

 

 16進数7個をメモリーに書き込みます。
 左側に書いてある数字が、上から左端の縦の列の情報に
 対応します。
 これをスクロールさせるには、メモリーに書いてある情報を
 それぞれ、一つ右側のメモリに移動する、ということで、実現
 します。

 

 多分、このほかにもスクロールの方法があるのでしょうが、
 自己流で、作製しました。
 実際に動かして見ると、すーっと流れるような表示には、
 なっていません。
 なめらかにするには、もう少し、工夫が必要なんでしょうね。

 

 アルファベットのA~Zまでの大文字のデーターを入れると、
 それだけで、ほぼメモリーが満杯です。
 倍のメモリーのある16F1939に変更してみようと思います。
 USARTを使って、PCのデータをスクロールさせるのが目標
 です。

---工房外壁のプチ修理---

 震災の前にDIYで実家に建てた工房(12畳)ですが、外壁
 の痛みが進んできました。
 特に、日の当たる東側が激しいです。

 

 外壁は節約のため野路板を使って、テーブルソーで
 ラベッティング加工して、外壁にしました。
 はじめからラベテッィング加工してあるのは、確か、3倍以上
 の値段がしてたと思います。ただ、安かった分なのか、
 木材自体がまだ生乾きで、テーブルソーで、加工しているとき
 もダドカッターにしめった切りくずがこびりつきました。
 そのままぴったりの間隔で外壁として組み合わせたので、
 そのまま乾いて、かなり収縮して、隙間が大きくできた所
 もでてきました。

 

 野路板の下には、一応防水紙がはってあるので、直接は
 雨水はかからないと思いますが・・・・・・。
 収縮したために、所々浮いている場所が見られましたので、
 プチ修理ということで、ステンレスのビスでとめ直しました。
 キシラデコートも薄くなってきたので、そのうち再塗装するよう
 かなと思います。

--MPLAB XIDE config 自動生成--

 XIDEに開発環境を移した時はv3.10でしたが、まもなくv3.15
 がでたので、ちょっとたってからVUPしました。
 2.3日前でしょうかXIDE操作してるとv3.20のリリースの
 バルーンがでてきました。
 まだ、VUPはしていませんが、バグフィックス版なのでしょうか、
 それとも新しい機能が追加されたのでしょうか。近々VUP
 してみようと思います。
 PICのプログラムをするのに困ってたのが、「congif」の設定
 で、PICの種類ごとに特有?の設定をするのが面倒でしたが
 XIDEでは、以下の方法で、自動設定できます。
 Window-PIC Memory Views-Configration Bits
 とたどります。

 

 すると下記の画面になりますので、

 

 矢印のOPTIONの各項目をクリックします。すると、ON、OFF
 等の選択ボックスがでますので、設定に応じて選択をします。
 設定が全部おわったら、右クリックをして、

 

 Configration Source Code Outputをクリックすると、

 

 設定してあるPICのConfigのコードが生成されます。
 これを全部コピペするとConfigのできあがりです。

---自作MPGワイヤレス化 (16)---

 道のりは、長いです。
 自作手パの無線化を進めてきましたが、一つ、疑問だったこ
 とが解決できそうですので、仕様?を変更してみたいと思い
 ます。
 今までの無線手パでは、A相B相の信号は、直接送っていま
 せんでした。A相とB相の信号から、CWの信号とCCWの信号
 に変換して、CWの信号とCCWの信号を送りました。
 受信側で、CWとCCWの信号に応じて、パルスを生成してい
 ました。
 このようにしてたのは、A相・B相の立ち上がりの検出はでき
 たのですが、立ち下がりの検出方法が分からなかったから
 です。
 NANDゲート等を使ってNOT・A相を作ればいいというアドバイ
 スをいただきました。下記のような回路で、試作してみようと
 思います。

 

 
 CWやCCWのの判定をするのに、立ち上がりでの外部
 割り込みを使いましたが、NOT・A相、NOT・B相を作ることで
 A相B相の立ち下がりを立ち上がりとして検出できそうですの
 で、状態変化割り込みでNOT・A相、NOT・B相の検出を追加す
 るだけですから、それほど大きな変更はしなくてすみ
 そうです。

---PICの罠(MCLR偏)---

 以前アドバイスいただいたことを試してみようと、下記のような
 実験回路を組みました。

 
 この回路で、

      while(1){
         PORTA=~PORTA
         WaitTime(20000);
      }

 初期設定はありますが、このプログラムを走らせました。
 すると、最初は、思った動作をしますが、

 

 途中で、止まってしまいます。プログラム的には、間違いは
 ありません。
 PICの足に触ると、動き出したり、止まったり、動作が安定し
 ません。
 
 通常は、○ドウインの基板を使ってテストしてますが、
 この基板で動いて、ブレッドボードで実行すると、回路は、
 間違ってないのに動かないという事象に遭遇しました。
 違いを考えると、○ドウインの回路は、リセットの回路が組まれ
 ていますが、ブレッドボードでは、組まれていません。
 NETで検索するとありました。MCLRと呼ばれるリセットに使わ
 れる端子を有効にしておくと、リセットの回路がない状態で
 は、不安定になるとありました。
 
 そこで、前述のプログラムのconfigの設定を、
     MCLREN→MCLRDIS
 にして、再度コンパイル、それで、動かしてみました。

 

  あっけなく動きました。
  アドバイスいただいた通りの動作でした。
  LEDの極性を反対にして、ポートにつなぐのが味噌です。
  プログラムでは、時間をおいて、HIGHとLOWを繰り返して
  るだけです。
  こうすることで、PICがHIGHになると吸い出し?でLEDが
  点灯し、LOWになると吸い込みでLEDがつきます。
  私には、目から鱗でした。
  PICのポートが少ない時は、応用ができ
  そうです。

---自作MPGワイヤレス化 (15)---

 自作手パ(MPG)をワイヤレス化するのにアダプターを作製
 し、後は、ケースに組む状態になってます。
 ただ、念のデータの取りこぼしを調べたら、パルスジェネレータ
 を早く回すと、約半分の取りこぼしがあったので、受信側の
 プログラムにリングバッファーをいれました。
 リングバッファーをいれることで、ほぼデーターの取りこぼし
 がなくなりました。
 
 
 多少、疑問が残ったので、送受信のデーターの取りこぼし
 を調べるのに、ローコストLCDシリアル通信モニター
 作製しました。
 これだけでは、ただデーターの表示をするだけなので、
 カウントしたデータを計測してターミナルに表示できるように
 基板とプログラムを作成しました。
 基板といっても、PICにバスコンとICSPの端子をつけ
 
 ただけのものです。

 

 比較的短時間で、ほぼ動くようになりましたが、二つほど
 ドツボにはまって、二日ほどもがくことになりました。
 
 一つは、リングバッファーの操作でした。「s」のキャラクター
 が入力された一つ前のデーターをカウントのキーにするのに、
 リングバッファーの読み取りのポインターを「s」の一つ前に
 もどせばいい、と思いこんでいました。これが、ドツボの始まり
 でした。
 いくら、やっても、思ったキーになりません。
 読み込んだデータを、デバッグ用に表示してみて、やっと
 分かりました。
 データを取り込んだ後、ポインターを次の読み込みにそ
 そなえて、一つ進めていたのです。
 本来なら、ポインターを二つもどさないとだめなわけでした。
 「-1」としていたところを「-2」にしてやっと解決です。
  もう一つは、久しぶりに使ったprintf( )のフォーマットの間
  違いでした。
 「int」の「%4d」としなければならないところを、「char」の
 「%c」としていました。当たり前に、表示されないので、
 あれこれいじって、やっとprintf( )のフォーマットにたどり
 つきました。
 昔、PC用に、Cであれこれやっていたころは、printf( )が
 大嫌いで、直接ビデオラムを操作して表示する関数等を作って
 使ってました。
 今回は、ターミナルへの表示位置を決めるのに、printf( )を
 つかって、エスケープシーケンスの使いまくりでした。

 

 とりあえずのプログラムです。
 main.c
 例によって、ゴミが沢山のこっています。表示をもうちょっと洗練
 させたいなと思ってますが、計測中の表示をやめて、計測終了
 後に表示させた方が、いいのかなと、思案中です。

---手パ(手動パルスジェネレーター)切り替え器制作(10)---

 一応完成した手パ(手動パルスジェネレイター=MPG)で
 すが、コントロールするのに、割り当てた信号線を、
 オルタネートでコントロールしてました。ふとしたことで、
 モーメンタリーでもコントロールできるのではと思い、タクト
 スイッチで、簡単な基板を作って、実験してみました。

 結論から言うと、モーメンタリーでも、コントロールが可能
 でした。
 JogモードからMPGモードへの切り替え、各軸の選択は、
 モメンタリースイッチでも大丈夫でした。
 市販のMPGの各軸選択には、ロータリースイッチが使われて
 います。ロータリースイッチにするのは、多分、誤動作防止
 の意味合いが強いのかなと思いました。

-ローコストLCDシリアル通信モニター(PIC16F1823)-

 諸兄のHPに載っていたローコストLCDシリアル通信モニター

 (PIC16F1823)を作成しました。

 

 USARTのボーレート設定がタクトスイッチでできるのが便利
 です。
 プログラム等は、全部、諸兄の作られた物を使わせていただき
 ました。
 もう一つPICをのせて、データー処理にとおもいましたが、
 今回は、やめました。
 諸兄のプログラムを見てみると、ボーレートの設定をEPROM
 に書き込んで、プログラムからリセットすることで、設定をかえ
 ているようでした。
 いままで、EPROMは使ったことないので、こんな使い方もで
 きるんだなと思いました。
 また、リセットするのに、
  asm(“RESET”)
 というインラインアセンブラーのコードを使ってるようです。
 それにしても、やはりすごいです。このような知識、どうやって
 獲得されたんでしょうね。

---新しいPIC---

 NETサーフィンをしていると「初めてのPIC」というHPが、
 目にとまりました。
 そこで紹介されている「16F1455(16F1459)」というPIC
 が目にとまりました。
 スペックを見ると、クロックが48Mhzに設定でき、
 2.3v~5.5vの幅広い電圧で動作できるとのありました。
 早速衝動買いをしてしまいました。
 ○月や○ルツ等では、取り扱いがなく、「○S」という初めて
 の会社での購入になりました。
 届いたパッケージは、会社独自のおしゃれなものです。

 

 中身は、HDD等の包装に使われている素材の袋にパッケージ
 されてました。

 

 開けてみると、PICは、静電気防止のスポンジ?ではなく、
 一つ一つプラスティックのケースに入っていました。

 

 感想としては、ICの取り扱いになれた?会社なのかなと
 おもいました。
 この「○S」という会社は、PICの検索をすると、必ずといって
 いいほど引っかかる会社でした。なんどか、HPは見て存在は
 知っていたのですが、どんな会社か分からず、利用していません
 でした。
 在庫のしなものばかりではなく、海外からも取り寄せ?で
 しなものを購入できるようです。