おもちゃ、家電、もろもろの修理の足跡と備忘録

色々と忘れるので、趣味のメモ

電圧・電流・電力計にシリアル出力をつける BUG-Fix(V2.1)

2021-02-16 17:34:54 | その他工作
ソフトにBUGがあったので備忘録です。VersionはV2.1となりました。

(1)sprintfの書式設定と変数の型の不一致:
 以前の記事「電圧・電流・電力計」で、

 sprintfで入れているのですが、表示できていたのですが、なにかの拍子に突然、2つ目の変数が表示されなくなってしまいました。よくわからないのですが、とりあえず動くように、分割して表示していますので、処理量は多くなってしまっています。

と書いたのですが、原因がわかりました。「何かの拍子に」は、変数をLong(32bit)に変更したこと、でした。
 Powerを計算するのに、電圧(mV)×電流(mA)なので、integer16bitをOverflowしてしまうことが分かったので、すべての変数をinteger(16bit)からLong(32bit)に変更しました。
 sprintfの書式で、本来32bitの場合は%ldとしなければいけないところを変更せず%dとしてしまったために、変数領域は32bit(long)、表示書式は16bit(int)となってしまい、二つ目の変数が、long32bit中の上位16bitを読み込んで、常に「0」ゼロになってしまっていた、ということのようです。変数を3個表示しようとして気が付きました。
 Powerだけをだけを32bitにすればよかったのです。ちなみに、Powerのところは%ldにしてある、というおバカな状況でした。Powerだけを32bitにして、残りは16bitのままとしました。
 これが分かったので、LCD2行に、2回のWrite命令で書き込むように修正したところ、当初10回/秒だったものが、17回/秒へ高速化されました。

(2)XC8の最適化:
 これは、BUG対応ではないのですが、同じ記事で、

あとは、sprintfなどを使うとプログラムエリアを食うようで、V1.5aで、使用率が90%になっています。RS-232CのようなSerial通信を入れようとすると多分溢れます、、、。

と書いたのですが、Project Properties から、XC8 Compiler のPropertyを覗いてゆくと、Options for xc8-cc、に、Optimizationというカテゴリがあって、そこに、Optimization levelという設定項目がありました。試しに設定してみましたが、Optimization lever = 2 まではFreeで使えるようで、90%だったものが80%にOptimizeされました。
 最終的には、(1)の対応をしたり、いらないライブラリを外したりしたのもあり、現在Programは、77%となっています。
 多分、Optimizeしなくても大した量の追加ではなかったので入ったとは思います。

 とりあえず、現時点での最終版です。以下、長くなりますが、Sourceです。
回路図: V2.0と変更ありません。
環境: MPLAB-X IDE v5.35 XC8/PICkit3 C99 PIC16F88 VC2.1.x
#### V2.1 はBUGがあったので、次の記事でV2.2として載せてあります。そちらを見てください ####

電圧・電流・電力計にシリアル出力をつける(V2.0)

2021-02-13 13:37:42 | その他工作

前の備忘録に、電圧・電流計の数値をシリアル出力したくなる、と書きました。
で、やってみました。

・PICは16F88、シリアル通信用の機能がある
・一応、回路図には将来用として、Serial-OUTのピンを取ってある
で、あとはソフトを作成すればよいか、と思っていました。

 今回、出力だけなので、TXだけ活かせると思って、Serial-OUT(pin11)を確保していましたが、動かすとLCDに何も表示されない。色々調べてゆくと、16F88のシリアルの機能を活かす(SPEN: SerialPortENableをON)とSerial-IN(pin8:RX)まで生きちゃうんですね。悪いことにpin8:RXはLCDのDataBusの一本になっていて、LCDに適切なデータが設定できず、結果表示ができなかったようです。
 じゃぁ、信号線の場所を変えるか、と思ったのですが、LCDのライブラリは、RA、RBの連続上か下の4bitを使うようになっていて、RAはアナログ入力系や、Vrefなどを入れるPinがあって、空けられないことがわかって呆然。じゃ、できないじゃん。
 使っているLCDライブラリの制約にPICのハードは適合しないけれど何か手は無いか、と考えて、LCDのライブラリを覗いたら、設定をしてやれば他の信号線に信号を出せそうな感じなので、RB2としてLCD用に使っていたpin8をSerial-INに明け渡して(使わないのでopen)、代わりに空いているpin(今回はRA6:pin15)に変更しました。(以下の回路図参照)


 あとはソフト。こちらは、LCDlib2.cでは、LCDを4bitモードで動かしているので、下から3bit目のデータをRA6に反映させる処理を追加しました。このライブラリは、下位4bitにデータが入っている前提で引き継いで来て、このライブラリの中で、上位4bit/下位4bitのbit shiftをさせる記述があります(#ifdef)ので、その判断の前で、強制的に下から3bit目のデータをRA6に反映させる処理をいれました。その後の、従来からあった連続4bitの書き込み処理はそのままにしてあります。多分16F88の最終段でInとOutの切り替えをしているだろうという仮説?で。やってみたところ、思惑通りの動作をしてくれました。

 そもそもの、PICのSerialの設定は、送信側の設定とStatusのTXSTAと受信側の設定とStatusのRCSTA、ボーレートの係数を設定するSPBRGを設定すれば良いことがわかりましたので、適切なデータを設定します(SourceCode参照)。
// serial initial set   2021/2/11 added
    TXSTA = 0x24;           //Set High Baud rate
    RCSTA = 0x80;           //RX do not use
    SPBRG = 51;             //clock:8MHz, 9600bps, ={8000000/(16*9600)}-1
 今回問題になった、SPENは、受信側のRCSTAの7bit目がそれで、受信はしないから、と適当に設定したのですが、それがいけなかったようです。SPENはSerial通信のENablerなので、これを設定しないと動かないし、動かすと、TXもRXも動いてしまう、ということです。お気をつけください。(通常ペアで使うのでしょうね。片側だけ使う、という使い方のほうが普通じゃない、のだと思います、、、)
 後の変更点は、PICの内蔵クロックを当初1MHzで動かしていましたが、このクロックがシリアルにも使われて、SPBRGの値で設定するのですが、1MHzで計算をすると非常に小さい値になるので誤差が広がるのではと思い、内蔵クロックを8MHzに上げました。(上記のSPBRGは8MHz、HighBaudRateとして設定してあります)

 結果ですが、mVとmAで、そのままカンマで区切って、9600bpsで送信すると、秒10回ほどのVとAのペアのデータが出てきました。(写真参照)
まぁ、私の用途には十分なデータなので、とりあえず、これで良いかなと思います。デリミタはLineFeedが良いのか、CaridgeReternが良いのかよくわかりませんが、CRだと同じ場所で書いてくれるので、そうしてあります。

 PICのSerialからは、TTL?レベルの信号が出てきますので、このままPCのRS-232Cに食わせても動きません。私は、TTL/RS-232Cというか、TTL/USBの変換ケーブル(大陸からで数百円位)を持っていたので、それで接続、動作確認をしました。(以前購入した簡易オシロのデータダウンロードとかにも使っています)

 写真は、PICkit3を接続してSoftwareをダウンロード、計測する電源からこの装置を経由して、以前作った電子負荷装置へ接続、Serialは、作成した基板からTTL/USB変換ケーブルを経由して、PCのSerial通信用モニタソフトで実際のデータをチェック、という系になっています。

 これで、自動計測ができるようになったので、ようやくバッテリーの検査?ができるようになりました。
 ソフトウェアの詳細は、長くなるので記載しません。もし、ご所望の方がいらっしゃいましたら、ご連絡ください。
→BUGがあったので、こちらで修正しています。(2021/2/16追記)

環境は、MPLAB-X IDE v5.35 XC8/PICkit3 C99 PIC16F88 です。VC2.0.x

The ARRL Handbook for Radio Amateurs をもらった

2021-02-06 14:17:20 | 無線

 おこもりで、お家での時間があるので、前からやりたかった高周波の実験?でもやってみようかな、とOMさんに、フィルタとか作ってみたいんだけど、と相談したら、古いけど以前USにいたときに購入したARRL(アメリカのアマチュア無線愛好家の団体)のハンドブックあげるよ、とICOMの無線機に入っていた壊れたフィルタモジュール(コイルとかコンデンサ、リレーとかついてました)と一緒に、断捨離に協力してください、と送ってきてくれました。
 20年前のものですが、32USDでこの分量。ARRL恐るべし。私の頭の中はその頃位(20年前のレベル?)でちょうど良いかもしれません、、、。ありがたく頂戴いたします。
 ちょっと調べてみたら、今は、Kindleで6分冊になって売っているようです。端から端まで読むつもりも無いですが、暇なときに眺める?くらいで一生??遊べそうです。
 今回秋月で、プリウレタン銅線とかトリマとかMMCとか買ってみたので、以前購入したnanoVNAとかも使って、遊べれたらと思っています。

調温ハンダこて購入

2021-02-06 11:17:32 | その他工作
 こて先の温度が調整できる調温ハンダこてを買いました。これまでは、会社に入った頃(40年ほど前!?)にホビー用で購入したGootの30W?(ニクロムヒータ)のこてを、こて先を何度か変えたり、配線を修理しながら使ってきましたが、今使っているこて先もハンダの乗りが悪くなってきたので、この際新調しようかと物色していました。
 良いものは結構するので、例によって大陸を物色して、上記のこてを購入しました。セラミックヒータ、110V80W with 温度調節付き。こて先はHakko(白光)社の900シリーズが使える、というもので、日本円にして送料込みで800円代。大丈夫かいな、と思いながらポチって、今回は10日ほどで日本まで届きました。


 開けてみると、コンセントそのものはUSなのですが、片方の歯の部分の広く作られていて、壁のコンセント(左側の穴が大きい→アース側)には入るのですが、延長プラグには入らないので、入る位までヤスリで削りました。
 ポチってからわかったのですが、型番から調べての先人のBlogを見ると、どうやら温度調節はできるようですが、表示の温度ではない、抵抗を一本入れるとそれなりになる、という事のようでしたので、その情報をもとに、同じ値の抵抗はなかったので分解し、それなり、、の抵抗をハンダ付け。
 実際の温度は測定機が無いのでわからないのですが、結果、デフォルトの350度表示でいい感じに共晶ハンダが溶ける温度になっています。これまで使っていたものは温度調節がなかったので、放置すると結構アツアツになり、スポンジで冷やしながら使ったりしていました。今回のものはそんなこともなく、常に温度調節をしてくれるので、いい感じです。
 マニュアルも何もついていなかったのですが、+と-のボタン同時押しで、Offsetがつけられるようで、-にすると温度が下がり、+にすると温度が上がるようです。
 ただ、温度調節用のボタンが、使用中に気が付かないうちに指で押してしまっているようで、設定温度が変わっていることがあります。ゴムのボタンの出っ張りを調整できるなら短くしてもらえると良いです。
 こて先を変えたい(2BCとかに)と思っていますが、本体800円に、こて先500円、600円ってね、と思ってまだ購入していません。しばらく使って様子を見ようと思います。

 新旧のハンダこてです。古いこては、プラスチックの融着とかのときにでも使おうと思います。

自作電源の電圧・電流表示7セグメントLEDの交換

2021-02-06 10:32:25 | 修理
 楽しみ?にしている毎月のおもちゃの病院も、緊急事態宣言が出ているので、1月2月3月と中止になりました。それが無いから暇、というわけでもありませんが、電源の修理をしました。
 2016年10月に作ったらしい、16V5Aの自作電源装置の電圧・電流表示用7セグメントLEDの一部が表示されてなくなっていたので、交換しました。
 自作と言っても、大陸から表示機能のあるCVCC(電圧と電流の制限ができる電源)を購入してバラし、ノートパソコンの余った電源とくっつけて箱に入れたものです。
 上が電圧で、右端(右から1桁目)が「V」、下が電流で、同じく右端(同1桁目)が「A」。電流の1桁目、4桁目の一部が表示されていないのと、電圧の2桁目の一部の明るさ不足など、たいして使っていないのに5年位でこうなるもんですかね。
 バラして、各セグメントに電圧をかけてと、不良のPinの波形を以前作った簡易オシロで確認してLED側が壊れていることを確認しました。
 この4桁7セグメントのLEDを探したのですが、なかなか見つからず、1桁目は固定で「V」と「A」を表示しているだけでなくても良いので、3桁のPinコンパチ?はないかと探したところ、なんと秋月で発見。他のものも欲しかったので一緒に購入しました。
 型番の最初の28は、表示部の文字の高さで0.28インチ、左から3桁目は、4桁、3桁を表しているようで、Bはアノードコモンのようです。
 両方の回路図を比較すると、Pin番号「6」が右から1桁目の共通制御Pinになっていて、3桁版はこれがバッサリないことになります。めでたく部品が見つかったので、あとは交換するだけです。ハンダ吸い取り機がないので、地道にバラしましたが、スルーホールなので結構手間がかかります。
 電源を入れると電圧の右から1桁目が全く表示されなかったので焦りましたが、どうやらLEDを外すときに基板を削ってしまったようで、パタンが切れていました。これを修正して完成。(ルーペを使わないとわかりません、、)
 交換後は、4桁が3桁になりましたが、「V」や「A」はわかり切っているし、表示桁数も変わらないので問題もないので、またバッテリーの充電や、おもちゃの修理、その他工作で動いてくれることと思います。
 秋月で、100円が2個で修理完了。