« 2024年4月 | トップページ | 2024年6月 »

2024年5月

2024年5月31日 (金)

リターンパスの無いオペアンプ入力回路

非反転アンプ 3kΩと27kΩの抵抗
この記事↑では、ゲイン選択ジャンパを外したらどう
なるの?をコメントしましたが、オペアンプの入力
バイアス電流の戻り場所はむちゃ重要です。
  解説記事などでこれを忘れている回路を
  見かけるのです。

ADI Analog Dialogue:アンプ回路設計時の問題を回避するには
ここで↑、詳しく述べられています。

最近だと、コテ先温度を読みたいゾ う~む
熱電対についての記事(昔のトラ技)を調べて
いて、こんな回路を見つけました。

  トランジスタ技術2006年10月号p.244~
   白金測温抵抗体と熱電対の正しい使いかた(後編)
   正確な温度計測のために 【田澤 勇夫】
     (p.249 図18)
Tc11

  ※FET入力OP-AMPなんで、どこかからの
   リークでバイアス電流が流れそうで
   すが・・・ダメです

冷接点補償用の白金測温体のところはちゃんと
してあるのに、ちょっと不思議。
簡単には熱電対の片っぽをGNDつなぎでエエやんと。

※参
トランジスタ技術2012年1月号:計装アンプにもバイアス電流のリターンパスを設けるべし

・AD8253データーシート
Tc12


電子工作実験室 :電位差測定器(電気化学)
  リターンパスについての議論


| | コメント (0)

2024年5月30日 (木)

非反転アンプ 3kΩと27kΩの抵抗

何に使うかは装置が返ってきてから説明しますが、
「ちょいと可変ゲインの交流アンプが欲しい」案件
が出てきまして、回路をでっち上げました。
  ※入力信号は電源周波数

可変ゲインといっても、ボリュームを回して合わし
込むのじゃなく、固定ゲインのジャンパを切り替え
るという仕掛けにしました。

とりあえず、「x5 x10 x20 x50 x100」5段。
  ※ゲインを欲張っても、ノイズ対策に
   シールドやフィルタがほしくなるだろし、
   お手軽に100倍までで。
非反転アンプを単電源で動かします。
こんな回路が基本です。
X1_20240530120001
R1の値を固定してゲインを変えるとなると、R2を
(ゲイン - 1)倍の抵抗にしなくてなりません。
  ※反転アンプだとゲイン倍の抵抗

その時の選択基準は、
 ・E12系列の抵抗で
   E24はやむを得ないとき
 ・抵抗の合成、2本は許容できる
てなところでしょうか。

例えば、10倍のゲインを得ようとすると、
抵抗比は9倍。
9倍になる抵抗の組み合わせは
  2kΩ:18kΩ
  3kΩ:27kΩ
この二つ。
  ※3kはE12じゃなくE24の仲間だけど
   切りが良いので常用。
ここで、2kと3kを比べると3kのほうが使い勝手
が良いのです。
今回の5段ゲイン切り替えだと、こんな具合に
なります。
X2_20240530120101
9倍だけでなく、抵抗の直列合成でも「27kΩ」の
抵抗が出てきます。
  57kだと47k+10kや56k+1k。
  147kだと100k+47k。
  なども使えますが・・・
  同じ値のを使う方がなにかと便利。
今回の回路、ゲイン切り替えジャンパ部はこんな
様子です。
X3_20240530120201
※参考
正確な抵抗比が必要な時に便利な、E24の数値の相対比率表:ラジオペンチ
   3k:27kが出てきます。
E24系列の直列/並列抵抗値一覧表
   ↑これも便利

※ボヤキ
 E12、E24系列の値、ちょいと目をつぶって
   2.4 → 2.5
   3.9 → 4.0
   5.1 → 5.0
   9.1 → 9.0
 と切りの良い値にしてもらっていたらなぁっと。

| | コメント (2)

2024年5月24日 (金)

コテ先温度を読みたいゾ う~む。

コテ先温度を読めるかとアマゾンで買った「熱電対」。
Kk10
  ・Tenweet HAKKO 191-212はんだごてチップ温度計用
   温度センサーライン
   10個の鉛フリー温度センサーライン
10個で494円と格安。

コテ先を当てられるよう基板に固定して補償電線で
温度計と接続。
Kk13

しかし・・・
加熱したコテを当てたときの安定性が良くありません。
コテを当てる場所により大きく変化します。
MAXホールドの機能があり、ピーク温度は分かるので
すが、それもほんとなの?っともうひとつ。

コテ先をクリーニングしたり、ハンダを盛ったりして
も、もうひとつ「これがコテ先温度だ」という感触が
得られないないのです。

それなりに温度は出ます。
常温域では3本足熱電対と黄色線の熱電対との
温度差は0.4℃。
Kk14

この二つの熱電対を段ボール箱に入れ、ヒートガンで加熱。
160℃まで「アツアツ」にした時の温度差は5℃くらい。
  反応が良いのでヒートガン口先から出るホットエアーの
  当たり具合による変動が大。
大きな差はありませんでした。

3本足の熱電対、写真のようにプラス側とマイナス側の
熱電線をよじって、中央のリングで押さえつけている
構造です。
Kk11_20240524135601

溶接はされていないのでしょう。
Kk12

ここでの接触が不安定だと、後方のよじって接触させた
部分が感熱ポイントになってしまいます。

コテ先にハンダの球を作り、それを押さえのリング全体に
乗せると安定するような感じです。
黄色線の熱電対先端をハンダ球に入れた時と似たような
温度が出ます。

ちなみに・・・
熱電対の自作方法に関しては、この記事が秀逸です。

Kk21_20240524135001
  ・トランジスタ技術 2013年4月号
  ・トランジスタ技術 2013年5月号

記事のとっかかりがpdfであります。
https://toragi.cqpub.co.jp/Portals/0/backnumber/2013/04/p141.pdf
https://toragi.cqpub.co.jp/Portals/0/backnumber/2013/05/p160.pdf

この3本足の熱電対を買ってごそごそするより、普通に先端が
溶接された熱電対をコテ先のハンダ球に入れる方が安定して
計れるのではないかと思います。
どうでしょか。。。

トランス型ACアダプタ改造のオートトランスで
電圧アップしたときの温度上昇、こんな感じでした。

HAKKO DASH FX-650(15W)
    100V 113V
-----------
3本足 340℃ 382℃
 黄色 347℃ 385℃

40℃くらいアップしてるようです。

| | コメント (3)

2024年5月22日 (水)

幡野 広志 著 「うまくてダメな写真とヘタだけどいい写真」

大阪市立図書館の検索を見ると予約がいっぱい。
 - 所蔵情報 -
  9 件の所蔵があります
  94 件の予約があります
昨日、貸し出しできました。
Cc11_20240522085001

写真家さんというよりも「お父さん」としての語り口が
ステキです。
  いいご家族なんでしょう。
    (ご本人は大病を患っておられるとのこと)

写真は・・・
 ・いい写真はうまい写真じゃない
 ・光と距離だ
 ・撮影確認している間があったらもっと撮れ
 ・jpeg撮って出しじゃなくRAWを現像せよ
 ・ホワイトバランスが面倒ならモノクロだ
あれこれ、あれこれ。

著者さんの思い(テクニックの伝授じゃなく)が
伝わってきます。

RAW現像、やったら面白いのは分かっているのですが
 ・PCのパワーが必要
 ・カメラメーカのソフトがもうひとつ
 ・保存しておくのに莫大なディスク容量
てなことで、私の場合、RAWでの撮影はやって
ません。

 

| | コメント (0)

2024年5月21日 (火)

ハンディ熱電温度計 AD-5602

手元にある熱電温度計が「A&D」の「AD-5602」。
N11_20240521094801
2007年に買ってました。
熱電対が必要な高い温度の測定って、ほとんどありません。
今回の「コテ先温度を知りたい」がひさしぶりかと。
あと使うのは、熱電対がらみの修理案件。
  ・2019年6月25日:修理:温調機の熱電対
  ・2023年11月5日:今日の修理:熱電温度計

引っ張り出してきたついでに、中を見てみました。
N12_20240521094801

シールド板が光っています。
ネジ止めで固定されているだけでしたので外して
基板を拝んでみました。
N13_20240521094901

4066や4053のアナログ・マルチプレクサが
並んでいます。
  4つある4013はDフリップフロップ。
  何をしているんだろ。
もっと純アナログICが入っているかと思っていた
のですが、
  オペアンプ:LM324、TLC27M2C
  基準電圧IC:LM385Z-1.2
だけ。
熱電対専用のアンプは使われていません。
  おっと。 裏を見てなかったゾ!
  裏(ボタン、表示器側)はパターンだけでした。

そして、調整用の小型半固定ボリュームが5つ。
パネルに出ているVR2とVR4はゼロ点オフセット調整用です。

 

| | コメント (0)

2024年5月19日 (日)

ハンダゴテのコテ先温度を上げたい エエ感じに

HAKKO DASHを熱くしたいプロジェクト、
ハンダゴテのコテ先温度を上げたい とりあえず完成
ということで、エエ感じのハンダ付けができるように
なりました。

素のHAKKO DASH(15W)で困ったのが、こんな時。
面積の大きな部品のハンダ付け。
H31_20240519142401
素早くハンダするには、パワーが足らないのです。

温調機能のあるハンダゴテでも、コテ先がこれでは
熱容量が足りません。
H32_20240519142501

買った HAKKO DASH FX-650(15W)にはB型の
コテ先が付いていました。
このくらいならうまくハンダ出来そうな感じなのですが、
ちょいと熱が不足していて、イライラがつのります。
2023年11月13日:HAKKOダッシュがやってきた:細いコテ先も来たけれど
Pp12_20231113134401
 中央のが付属していたB型コテ先 右の白いのはヒーター
Pp11_20231113134301

そこで、今回のパワーアップ・プロジェクト。
ちょっとのことですが、ストレスなくハンダできるように
なりました。
H33_20240519142701

ちょうどエエ感じの温度です。
  ※温度を測ってみたいなぁ。
   熱電対アンプ、どこかにあったはずなんですが
   探し出せてません。

| | コメント (0)

2024年5月18日 (土)

ハンダゴテのコテ先温度を上げたい とりあえず完成

HAKKO DASHを熱くしたいプロジェクト、
トランス式ACアダプタを用いた「オートトランス方式」
で温度アップ(供給電圧アップ)を実現できました。

使ったのはヒューズが飛んで使えなくなった
ACアダプタ。
どういうわけか「JBL」ブランド。
42VA、DC13.8V・1.7Aというスペック。
外装を上下に殻割り。

こんな整流回路がくっついていました。
H20_20240518125001

手前左の出力側ヒューズが断。
トランスに巻かれた温度ヒューズは大丈夫でした。

ダイオードは1N5400。
4つでブリッジ。
各ダイオードに0.1uFが並列に入れられてました。
いわゆる「整流ノイズ防止用」。
  ・2014年07月14日:整流ノイズ防止コンデンサ

ケースに穴を開け、ACレセプタクルを取り付け。
H21_20240518125101
念のためガラス管ヒューズも入れて。
H22_20240518125101
ついでに通電表示LEDも。
H23_20240518125101

ハンダゴテ切り忘れ防止装置」の上に
うまいこと乗りました。
H24

青い柄のコテが件のHAKKO DASH(15W)。
左の白い柄のコテは
  ・2009年01月08日:半田ごてコントラーラのハンダ不良
で話題にしたGOOT製。 現用しています。

角大↓
H25

ハンダゴテ切り忘れ防止装置はいわゆるデッドマンスイッチ
ハンダ付けをしていたら通電を継続。
「ハンダ付けしているという検出の方法」はコテ台の振動
ふつうに作業していたら、通電を継続してくれます。
  ※トラ技Jr.案件でトラ技に投稿(掲載未定)

| | コメント (5)

2024年5月17日 (金)

ハンダゴテのコテ先温度を上げたい 予備実験:電力変化

2つのハンダゴテについて、電源オン時の
電力変化を見てみました。
  冷えているとヒータの抵抗が小さくて
  電流がたくさん流れる。

使ったツールは、記録用が
 ・ナダ電子のプリンターシールドを使ったチャートレコーダ
そして、電力測定に、
 ・お手軽電力計

ハンダゴテは、
 ・HAKKO DASH FX-650 (15W)と
 ・HAKKO PRESTO No.984 (20/130W)の2つ。

グラフはX軸が1分/1cm。
Y軸が5W/div。
  フルスケール10divで50Wになりますが、
  電力計の出力が8div(40W)で飽和します。

まずDASH。
H12_20240517122301

5分ほど経過で15Wちょい手前で安定。
通電開始直後は25Wを越えています。

次にPRESTO。
H11_20240517122501

5分ほど経過で20Wちょいで安定。
  電力計のアナログ出力が0~4Vで、
  40Wを越えると4V=40Wに張り付いて
  しまうので40W以上は記録不能。
  60Wを越えても測定はできるので、
  液晶表示には出てきます。

HAKKO DASHを熱くしたいプロジェクト、
最大30Wほどの電力を見ておかなくては
なりません。

※トランス、トランス・・・と見渡しても
なかなかエエのんが見つかりません。
  あれこれ埋もれた仕事場、もっと探せば
  出てくるはずなんですが
とりあえず見つけたのはトランス仕様のACアダプタ。
DC出力で13V・1.7A。
内部ヒューズが飛んでいた(同僚が無理して使って飛ばした)の
を置いてあったので、殻割り
整流部などを取り外し、一次側の片側と二次側の片側を
接続。
AC113Vが出てきました。
  (ハンダゴテを負荷にした状態で)

その様子。
H14_20240517152401
チャートレコーダーとお手軽電力計をつないで
電力のアップを確認。
100Vだと15W弱の13.9Wだったのが
15W強の16.5Wになりました。
H13_20240517152501
コテ先温度計れる熱電対を持っていないので、
温度がどのくらい上がったのかまでは見られません。
  コテ先温度計、なんとかしたいなぁ。

| | コメント (4)

2024年5月16日 (木)

ハンダゴテのコテ先温度を上げたい

昨年11月にやってきた新ハンダゴテ HAKKOダッシュ(15W)
軽くて握りごこちは良いのですが、ちょいとパワー不足
ハンダ付け面積が大きいと、加熱が負けてしまって
スムーズに作業が進まないのです。

かといってターボスイッチ付のPRESTO これを引っ張り出し
てくるのもめんどうだし。
  ※コレの場合、20Wの常用使用でも温度が
   上がりすぎる感じ。

温調付のコテ、FX-600 常用するにはちょい太くて、
あんまし好きじゃありません。

HAKKOダッシュ、もうわずかだけ温度が上がれば
良いんですが。
  15W→18Wくらい
  20Wに上げて温調で下げる

温度を下げるのは簡単(製作してある)ですが、
外部からのチカラで温度を上げるには電圧の増大
しか考えつきません。
100V:110Vや100V:120Vのトランスでというのも
芸が無いし、大きくなるし・・・
  ※電圧高めにしてコテ温調回路で
   パワーを下げる。

これで!っという手法(回路)、何かないでしょか。

2023年11月 7日:新ハンダゴテ、HAKKOダッシュがやってきた
2023年11月 8日:HAKKOダッシュがやってきた:コテ先の様子
2023年11月13日:HAKKOダッシュがやってきた:細いコテ先も来たけれど


AC100Vを整流。DC140Vができる。
60Hzのままだとトランスが大。
TL494あたりでスイッチング制御。
出力はDCか。
電圧調整できるよう。
絶縁しなくて良いんだけど。
トランスを作るのがめんどう。

| | コメント (4)

2024年5月14日 (火)

あなたはだぁれ? チップ部品が混じったぁ

UMT3サイズのデジトラ、DTC123を使おうと
入れてたビニール袋から出したら、その中に、
不明なチップ部品が混じってました。
6本足で0.65mmピッチのUMT6
15個で切断したテープに入ったまま。
マーキングを見ると「LCYV」。
裏には「7J76」。
Ii11
マーキング検索で探しても出てきません。
  ・電子部品のマーキング検索

15個という単位で買った最近の仕入れを調べてみると、
出てきたのはRS-422のレシーバICでサイズが違います。

あなたはいったい何ですか?

※Nexperiaの便利ゲートIC 74LVC1G97GWかもしれない!?
  データシートにはマーキングが「YV」と。
  確かめるには通電か?

1G97、15個では買ってないぞ。
いったい、なんだろか?

※追記(5月14日)
ochiaiさんからの情報でリニアテクノロジ-(現在はアナデバ)の
D-Aコンバータ、LTC2630-LZ8に間違いなさそうです。
「12bitもの!?」っと喜んだのですが、残念ながら8bit分解能。
サフィックスで分解能と基準電圧値、機能が変わります。
Lcyv

しかし・・・このICを買った覚えがありません。
  ※「LTC26」でBsch3Vのライブラリを検索したら
   出てきたのはLTC2644:PWM→DACだけ。
   部品ライブラリに入れてないということは、
   設計や試作に絡んでいない証拠になるでしょか。

DTC123のビニール袋に混入した理由ですが、
こんなことが考えられます。
DTC123を買った時の端数テープだったのかと。
100個で買った記録がありました。
たまたま1本のテープじゃなく、85個と15個に分かれ
ていて、誤ったUMT6の「LCYV」を15個のテープに
して入れてしまったのではないかと・・・
到着後、私はそれに気づかず、DTC123が入っていた袋に
いっしょに入れてしまったのかと・・・
今となっては追跡できるのはここまでです。

| | コメント (2)

2024年5月13日 (月)

修理:おフランス製の彫刻機 電源部がアウト

修理したのはその電源部回路だったのですが、
使われていた「頭」がなんと「68000」。
6800a
下側の緑色基板にROMが付いてます。
その固定ビスが「マイナス」。
これも珍しい。
1996年の機械。

6800b
作業後、こんな液晶表示が出ました。

 ※装置に取り付けてもらってうまく動くかどうかの
  検証はこれから。

| | コメント (3)

サーミスタでの温度測定、「inf」の出現に耐えられるか?

2023年3月21日:A/Dコンバータでサーミスタの抵抗値を読む サーミスタをつなぐ場所は?
で問題にしましたが、A/D入力するサーミスタをつなぐ位置が重要です。
A02_20230321164901
サーミスタを電源側につなぐと、
  温度の上昇でサーミスタの抵抗値が減少
  それに連れてA/D値が上昇
となり、温度が上がるとA/D値も上がり、感覚的に
合うのでしょう。

・A/D値からサーミスタの抵抗値の計算式
A3_20230321165401

このサンプルとして
  ・おもろ家さんのArduino 入門 Lesson 18 【サーミスタ編】
のスケッチ使わせてもらいます。
おもろ家さんの「つなぎ」でもサーミスタは電源側。
基準抵抗がGND側です。

この時の問題点をお復習い。
  (a)サーミスタの接続線が短絡したら
  (b)サーミスタが外れてオープンになったら

まず(a)。
A/D値はフルスケールの「1023」に。
その結果、サーミスタの抵抗値は
  (1024÷1023 - 1) ×10kΩ
となり、約9.8Ω
B定数による温度計算に進むと352℃という
値が出てきます。

次に(b)
A/D値は「ゼロ」になり、サーミスタの抵抗値計算で
ゼロ除算」が生じます。
その結果、抵抗値は「無限大」。
続く、温度計算では「ケルビン温度」の「-273.15℃」が
出てきます。
  ※Arduino UNOの環境ではゼロ除算では
   止まらず、とりあえず計算は進みます。

実際の液晶表示を見てみましょう。

(a)のサーミスタ短絡
T10_20240513111101

(b)のサーミスタ断線
T11_20240513111201

抵抗値の箇所に「inf」という見慣れない「値」が出現します。
  ※inf=無限大
   print()やdtostrf()に食わせると「inf」
   という「文字」が出てきます。
   lround()で整数変換すると0x80000000
   (long値のマイナス目一杯)になって
   しまいます。

サーミスタで温度制御していたら、
  (1)いつまでたってもオンしない (a)のとき
  (2)いつまでたってもオフしない (b)のとき
状態が出現します。

(1)は、放っておいてもとりあえず周囲温度に馴染む
でしょうが(2)の状態が加熱しっぱなしとなり危険です。

何らかの警報的処置(表示だけでも)が必要に
なるのがわかっていただけるかと。

トランジスタ技術2024年6月号トラ技Jr.コーナ
掲載してもらった4チャンネル温度計の製作 では、
温度・抵抗値テーブルから最高値(温度低)と最低値
(温度高)を拾ってきて、値として規制するように
しました。
  ※プログラムエリアがあんましないので
   手抜き。
オープンだと「-20.0℃」、短絡だと「120.0℃」を
出力します。

| | コメント (0)

2024年5月 9日 (木)

(有)アクト電子+居酒屋ガレージがトラ技2024年6月号に

ひょんなことから、仕事場:(有)アクト電子と
自宅:居酒屋ガレージがトラ技2024年6月号
載せられちゃいました。
  ※むちゃ恥ずかしいゾ!

見ル野栄司さんの連載「僕たちトラ技団」。
Tt31_20240509090401
大人の秘密基地」と銘打たれています。

記事の写真に写っているビールサーバー(二代目)
の導入が2022年7月末。
Tt32
  ・2022年7月28日:新ビールサーバー稼働
先代のビールサーバーが2001年8月頃ですので
ガレージにビールサーバーがやってきて23年。
いったい何樽のビールをカラにしたのか・・・
炭酸ガスボンベは1年~1年半で交換しています。

| | コメント (2)

2024年5月 7日 (火)

「FRISK neo」の缶

息子が、
 「おとん。FRISKの缶、いるか?」っと。
Fr11

「FRISK neo」、片端をパカッと開けるタイプの缶です。

Fr12

私:
 『せやな~。 
  周囲が金属やから、回路を組んだらショート
  するかもしれんよって、なかなかむつかしい。』
 『ダイソーの糸ようじみたいにプラやったら
  ショートの心配はあらへんねんけど。』
 『電池も入れにくいし。』
 『まぁ、それでも、もうとくは。おおきにな。』
っと、とりあえず手元に。
中に入れ込む秘密兵器をなにか考えなくちゃいけません。

  ・フリスク 電子工作で検索すると、樹脂容器のは
   あれこれ出てきます。

| | コメント (0)

ありがたや、DigiKeyからのお知らせ

DigiKeyからのメール、単純な宣伝じゃなく、
昔に買ったことのある部品、「もうなくなるぞ」っ
という「Part Life Notification」案内が助かります。

今回は「1B」接続のフォトMOSリレー。
東芝の「TLP4227G」が終息だと。

G10_20240507084901

普通にon/offするフォトMOSリレーはあれこれ
ありますが、これは「ノーマル・クローズ」。
リレーでいうところの「B接点」。
G11_20240507084901
一次側LEDに電流を流さない状態では「オン」して
いて、電流を流すと「オフ」するという特性を持って
います。
TLP4227Gの形状がDIPタイプなんで、これが無くなるぞ
ということなんでしょう。
G12_20240507085001

  ※素子の記号だけではA接点かB接点かわかりません。

G13_20240507085001

代替はSOPのTLP4176。

TLP4227G。 秋月で「在庫限り」で出ています。¥120。
  ・https://akizukidenshi.com/catalog/g/g107104/


| | コメント (0)

2024年5月 3日 (金)

数値をBCD出力(表示)するルーチン #3

あれこれ紹介してきましたBCD出力ルーチン。
 ・2022年10月8日:数値をBCD出力(表示)するルーチン
 ・2024年4月28日:数値をBCD出力(表示)するルーチン #2

除算・剰余方式ではどうしても「遅れ」が目立ちます。
そこで、float値を文字変換する「dtostrf()」と処理時間を
比べてみました。

まずこれが「strbcd02.ino」:除算・剰余方式の速度。
 ch1が自作ルーチンstrbcd()の速度
 ch2がdtostrf()の速度
 ch3はstrbcdの中で使っている除算の時間です。
   (商と剰余の両方を得ている時間)
 ch4は液晶表示のタイミング。

「0」を表示したところ。
01_0

上位はゼロサプレスされるんで、
7文字のスペース+'0'という表示です。

「9999」の変換。
01_9999

上位4文字がゼロサプレス。
4回の除算が実行されていて、除算に時間が
かかっていることが見えます。

さらに「99.99999」の変換。
01_99r99999
  ※上の二つと時間軸が異なります。
ゼロサプレスはありません。
全桁で0~9に数字を得るために除算が7回実行
されています。
こうなるとdtostrf()が圧倒的に有利。

そこで、除算と剰余の計算でなく、上位桁から
10進数値を減算できるかどうかで、剰余を得る
方法を試してみました。

たとえば、「1234 = 0x04D2」を変換する手順。
・千桁 1234から1000=0x03E8 を何回引けるか → 1回 余り234
・百桁 234から100=0x0064 を何回引けるか → 2回 余り34
・十桁 34から10=0x000A を何回引けるか → 3回 余り4
・一桁 余り=4
これで「1234」とBCD値が得られます。
比較と加減算ですので除算より高速に処理できますが、
数値が「9」だと9回の比較・加減算が生じます。
ループ回数が増えると、これも時間がかかります。

strbcd03.ino

/********************************/
/* BCD文字出力処理 */
/********************************/
/***** BCD出力用文字バッファ *****/
char bcd_bff[16]; // 16文字 終端のnull含めて
// longは10桁
// BCD変換4bitデータ
byte bcd_4bit[10]; // 10桁の4bitバッファ
// 下位が10^0桁
// 先頭が10^9桁
// 減算データ
const int32_t bcd_chks[] PROGMEM ={ // 32bitは10桁
1000000000, // 0 10桁 元データからいくつ
100000000, // 1 9桁 引けるかを調べて
10000000, // 2 8桁 余りを次の桁へ
1000000, // 3 7桁
100000, // 4 6桁
10000, // 5 5桁
1000, // 6 4桁
100, // 7 3桁
10, // 8 2桁
}; // 1の桁は引かない 最後の余り

/***** 桁指定BCD文字出力 *****/
// d:変換データ long値
// n:整数部文字数(-を含めて)
// p:小数部文字数(.は含まない)
// 数値は整数を入力 浮動小数点ではない
// 小数部は整数の基数が0.01などの時に用いる
// 12345が123.56を意味する時 (d,3,2)と指定
// -1234を-123.4と表示するときは(d,4,1)と-を含めた文字数に
// bcd_bffに入った文字の先頭アドレスを持ってリターン
char *strbcd(int32_t d, byte n, byte p)
{
byte i, j;
byte sgn; // 符号フラグ
byte mins = 0; // マイナス符号処理済みフラグ
uint32_t e; // 減算値
char *s; // 0~9文字書込みバッファのアドレス
byte *t; // bcd_4bit変換データアドレス
if(d < 0){ // マイナス?
d = -d; // +の値にして
sgn = 1; // -フラグをオン
}
else{
sgn = 0;
}
// 引き算できるかどうかで余りを計算
for(i = 0; i < DIMSIZ(bcd_chks); i++){ // 桁数loop
e = pgm_read_dword(&bcd_chks[i]); // 減算値
j = 0; // 引ける数をカウント
while(1){
if((uint32_t)d < e) break; // 引けなければおわり
j++;
e += pgm_read_dword(&bcd_chks[i]); // 比較値を加算
}
bcd_4bit[i] = j; // 引けた数が余り
d -= (e - pgm_read_dword(&bcd_chks[i])); // 元値を減少
}
bcd_4bit[sizeof(bcd_4bit) - 1] = d; // 最下位 1の桁
// 変換した桁数をチェック ゼロサプレスのため
t = bcd_4bit; // 変換データの先頭
j = sizeof(bcd_4bit); // 変換データ数
while(j){
if(*t++ != 0) break; // 0じゃない
j--; // 0なら-1
} // jは0以外の数字の数
if(j == 0) j = 1; // 0なら1に
// 文字バッファ終端 nullをセット
i = n + p; // 全体の文字数
if(p) i++;
s = bcd_bff + i; // 文字バッファの最後尾
*s = '\0'; // nullをセット
// 4bitの変換データを文字にしながらコピー
t = bcd_4bit + sizeof(bcd_4bit); // 変換データの最後
if(p){ // 小数部あり
for(i = 0; i < p; i++){
*--s = *--t + '0'; // 0~9を書込み
if(j) j--;
}
*--s = '.'; // 小数点
}
for(i = 0; i < n; i++){ // 整数部
if(j){ // 0以外の数が残っている
*--s = *--t + '0'; // 0~9を書込み
j--;
}
else{ // 必要数字を全部書き込んだ
if((p != 0) && // 小数部あり
(i == 0)){ // .の左隣に
*--s = '0'; // ゼロを付加
}
else{
if((sgn != 0) && // マイナス
(mins == 0)){ // -符号処理まだ
*--s = '-'; // マイナスを付加
mins = 1;
}
else{ // 2桁目以降でゼロ
*--s = ' '; // ゼロサプレス
}
}
}
}
return s;
}

さっきと同じようにdtostrf()との速度比較。
「1」を表示したところ。
03_1

「9999」の変換。
03_9999

さらに「99.99999」の変換。
03_99r99999

なんとかdtostrf()に追いついている感じです。

この方式で有利なのが、プログラムサイズ。
それぞれのルーチンを使ったときのROMサイズを
見てみましょう。

メモリ比較 (strbcd03.ino)

 strbcd() dtostrf()  ROM RAM
-----------------
(1)  ○   ○   5900 359
(2)  ○   -   3738 335
(3)  -   ○   5348 333
   --------------
    ROM (3)-(2) = 1610

(2)dtostrfなどfloatを使わないようにした。

dtostrf()やfloatを除いてstrbcd()だけで処理すると
1600バイトほどプログラムの必要ROM容量が減りました。

strbcd()ルーチンそのもの実行ルーチンROMバイト数は、
  除算・剰余方式  :278バイト
  比較・加減算方式 :374バイト
でした。
比較・加減算方式でほ実行ルーチンの他に10桁~2桁の
加算データテーブルが36バイト必要です。

遅くても良いのでプログラムを短くしておきたいなら
「除算・剰余方式」。
ちょっとでも速くというのなら「比較・加減算方式」という
ところでしょう。
「ルーチンをまとめるのが面倒」「ROMに余裕はあるので
既設の関数で」というのなら「float」で「dtostrf()」を。
あれこれ、探ってみましたがこんなところかと。

| | コメント (0)

ダイソー SHOOTING LIGHT:撮影用ライト LEDの輝度変化を探る #2

スタートしたのが2024年1月24日。
  ・ダイソー SHOOTING LIGHTLED:撮影用ライト LEDの輝度変化を探る
9パラされたLEDのうち端っこの一つを取り外して点灯。
100日間点灯しっぱなしでした。
  100日を経過しましたが、劣化のきざしがないので
  (面白くないなぁ)これで、実験を終わります。

LEDの駆動電流は定電流回路で30mA。
輝度はローム照度センサーBH1603で検出。
Arduino UNO R3(のチップ)でA/D変換。
毎日1回、A/D値を内蔵EEPROMに記憶してきました。

結果、ほぼ変化無し
Cap002_20240503090001
8週目あたりに段差がありますが、置いていた場所が
資料棚の上で、ゴソゴソしてたときにセンサー部
(塩ビ管)を落っことしたのが原因。

100日間、点灯しっぱなしで劣化はなし、という評価かと。

「もっと電流を大きくしたらどうなるか?」、
興味はありますが、スペックの不明なLEDを
これ以上いじめても、面白くないでしょう。
回路資料などは↑のリンクを。

  ・LEDの劣化・・・まとめ

| | コメント (0)

« 2024年4月 | トップページ | 2024年6月 »