おもちゃの作成---チャージポンプ回路

 おもちゃを作成してますが,作成の過程でモニターするために,
 LCDが必要でした。
 今までは,空中配線でその都度間に合わせていましたが,
 何度も同じことをするので,一つ,ケースに組み込んだ物をつくって
 おくことにしました。
 できれば,3V(乾電池)から5Vで動作させたいので,以前作った。

 ローコストLCDシリアル通信モニターを参考に
 LCDのバックライト用にチャージポンプ回路を組み込むことにしました。
 諸兄の回路をパクらせていただきましたが,制作の過程で,
 なかなかうまくいかず,二つ同じような物をつくりました。

 

 よく調べてみたら,最初のも正常にうごいてました。
 二つ作ることになったのは,PWM信号がうまくでてるのか,オシロ
 で確認しましたが,信号をうまく取り出せなかったからです。
 それで,もう一つ作ることになりました。よく調べて見たら,
 二つとも正常に動作してました。
 当たり前なのかもしれませんが,チャージポンプ回路からでている
 負電源をオシロで確認しようとあれこれやりましたが,確認できま
 せんでした。これ,きっとあたりまえなんでしょうね。テスターで
 確認すると,だいたい理論値通りの数値がでていたので,
 よしとしました。
 諸兄は,UART関係やら設定やらチャージポンプのための発信等
 を一つのICでしてましたが,発信だけが必要なので,小さくピン数が少ない
 12F1840で専用発信回路を組みました。
 といっても,諸兄のパクリです。

 まだ,完全な動作確認はしていませんが,バックライトは,
 (本日,既存の回路に組み込んでみたら,
  きちんと表示されましたので,誤配線等はなかったようです。)

 3Vで動作したので,大丈夫かなと思います。
 全面と中身です。

---PIC どつぼにまたはまりました。

 おもちゃを作るのに,またPICをいじってます。
 ただ,その過程で,またまた,どつぼにはまりました。
 どちらもLCDでの表示のプログラムなのですが・・・・・・・。
 一つは,何のことはないのですが,x軸,y軸,の表記を逆にしていま
 した。これでは,正しく表記できないですよね。
   lcd_setCursor(8, 0);
 とやるところを
  lcd_setCursor(0, 8);
 とやっていました。
 もう一つもLCDの表示なのですが,LCDの表示が,1桁の表示から
 4桁の表示になると,以後,一桁の表示にならなくなるというもので
 した。
 センサーがだめなのか,LCDの表示のプログラムがまずいのか
 あれこれなやみましたが,原因がやっとわかりました。
 G:45→G:4095
 となった後,2桁の表示にすると,
  G:3695
 のように表示され,前回表示の95の部分が残ってしまうという
 ことでした。
 左詰めにする簡単な関数を作って解決しました。

---PIC 16F627A の内部クロック設定 PCONレジスタ

 また,あれこれやりくて,手元にあったLCD表示ができるように,
 組み立て,セットをしました。
 プログラム自体は,それほど難しいものではなく,諸兄の
 プログラム
を,XC8コンパイラーのV2.0に移植しました。
 ただ,使ったPICがこれまた手元にある16F627Aですので,
 2カ所ほどどつぼにはまりました。
 なんのことはない,当初,内部クロックの設定ができなかった
 のです。
 違うPICでつかっていた
    OSCCON
 を使っていたのです。16F627Aには,このレジスタはありません。
 OSCCONに当たるのが,
    PCON
 のレジスタでした。最初,使って多コンパイラーをv1.3からv2.0
 にしたために,仕様が変更になったのかと思いましたが,いくら
 さがしても,OSCCONなるものがヘッダーファイルにもみあたらず,
 
 約一日はまりました。分かれば簡単ですね。
    PCONbits.OSCF=1
 の設定で,内部クロックの4MHZに設定できました。
 この辺も,マニュアルみればよかったのですね。
 今日,プログラムを書き込み,無事動きました。

 

もう一つはまったのは,
     ADCON1
 を使ったことです。これもあたりまえですね,
    CMCON
 を使えばよかったことです。この辺もキット,マニュアルをよく
 よめばすんなりだったのでしょうね。

---最新 X IDE のバグ (xc.h の読み取りバグ)---

 最新の X IDE では,まだバグがあるようです
 仕様の変更があるようです。
 デフォルトのインストールだけでは,xc.h の読み取りがうまく
 行かないようです。ネットで検索すると,
    HP-1
    HP-2
    HP-3
 あたりに,記述がありましたので,私の環境で,まとめておきます。
 X IDE の画面で,目的のプロジェクトを右クリックしします。

 

 下記の最下部のPropertiesをクリックします。

 

 次の画面になりますので,XC8 Global Option をクリックします。

 

 この画面で,右の方の C99 の選択ボックスを開いて

    C99→C90

 に変更して,下部のApplyをクリックして終了です。

 

---自己保持回路 (3)---

 動作の確認をしていて、いくつか不具合がありましたので、
 多少、プログラムの変更をしました。
 ほとんどといっていいほどコメントをいれていませんでした
 ので、自分で作ったプログラムの解釈に時間がかかりました。
 以下の変更をしました。

      延長のブザーを鳴らす時間 1分→→30秒
      スタート・ストップに出力のON・OFFを合わせる。

 キットで遊ぼうで、PICのプログラムを覚えて、初めて作った
 長めのプログラムです。プログラム領域のおよそ
 70パーセントを使ってます。備忘録のために、掲載して
 おきます。

 HANDA-TIMER.txt

 ところどころ、なんで、こんな変数使ったのか、分からない
 のが沢山あります。

---自己保持回路 (2)---

 追加の自己保持回路を組み込み、思った動作できるように
 なりました。

 時間の設定→スタート→1分延長(ブザー)→電源OFF
 の動作です。
 動作時間の設定後、スタートボタンを押すと、カウントダウン
 が始まって、設定時間だけ、半田ごてに電源が入ります。
 設定の時間のカウントダウンが終了して0になると、ブザー
 がなり始め、1分間続きます。このブザーの鳴っている1分間
 の間にスタートボタンを押すと最初に設定した時間で
 カウントダウン(延長)を始めます。
 ブザーが鳴ってる時にスタートボタンを押さないでそのままに
 すると半田ごての電源も自分自身の電源もOFFになります。
 4年越しに思った動作ができるようになりました。

---自己保持回路 (1)---

 以前、半田ごてタイマーを作製しました。
 当初の予定では、切り忘れると、自分自身の電源も落とす
 予定でしたが、自己保持と解除がうまくいかなくて、そのま
 になっていました。

 

 自己保持をさせるには、いろいろ方法があるようですが、
 SSRを使って、自己保持回路のテストをしてみました。

  

 うまくいったので、半田ごてタイマーを改造してみようと
 思います。自己保持のための、スイッチも飾りで、つけ
 てありますので、追加部分を加えて、配線をするだけです
 回路図も残ってないのですが、下図のような感じで、SSR

 

 等を付け加えようと思います。

---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のデータをスクロールさせるのが目標
 です。

--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のできあがりです。