« 2020年9月 | トップページ | 2020年11月 »

2020年10月

2020年10月31日 (土)

Arduino-UNO 12bit×4chアナログ SDカードデータロガー完成形

前記事
2020年10月27日:Arduino-UNO 12bit×4chアナログ データロガーほぼ完成
2020年10月28日:データロガーのサンプリング日時出力形式

最終的にはこんな回路に。
Analog_log1_20201031105101

31_20201031105401

時間をちゃんとしておこうと、クロック発振素子を
セラロックから水晶に換えました。

★スケッチ:ダウンロード - sd_analog4ch1.c
  ファイルタイプを「.c」にしています。
  inoのままだとIDEが起動するんで。

START/STOP/ENTスイッチがちょん押しと長押しを区別。
CYC/↑とMENU/↓がオートリピート処理。

ややこしい操作がA/Dのキャリブレーション。
±2Vレンジと±20Vレンジを独立して調整します。
それぞれのレンジに切り替えてから、
 0V・+2V・-2V  0V・+20V・-20V
の電圧を、同時に4chの入力に与えてENTすると
設定完了に。
アナログ系の調整のため、この設定は必須。
6回操作しなくちゃなりません。
  ※調整値はEEPROMに記憶。

※A/D値から電圧値へのスケーリング処理に
 「浮動小数点にしたmap」を使っています。

2019年4月3日:線形補間って「LERP」って言うんだ!
2020年5月17日:Arduino なんとかして誤用を正したい:A/Dの1/1023とmap関数
2020年5月16日:Arduino 10bit A/D値をmap関数でスケーリングする例

SDカードのインターフェースやA/Dコンバータが無くても
液晶(20文字×4行)とスイッチをつないでもらえれば
試運転(操作の雰囲気)は分かってもらえるかと。

外付け12bitA/Dコンバータとの接続にPC0~3(AD0~3)
を使ってますんで、A/D無しでここを入力にして
adreadすれば、10bitで処理できるように改造可能かと。

これ以上のものとなると、Arduino-UNOではもうチカラ不足。
  ※いろんな制御しようとすると、ポートがとRAMが足りない。
ここらと、プリンターシールド をドッキングできればエエんですが。
しかし、手軽な「SD」ライブラリは捨てがたい。


| | コメント (0)

2020年10月30日 (金)

アナログデバイセズのF/Vコンバータ「451J」

25年ほど前に作られた(設計は35年前)回路の修理依頼。
  ※他社製。でもちゃんと回路資料は残ってます。

オンボードのDC/DCコンバータのトラブル(寿命)で、
アナログ系±15V電源が異常に。 過電圧が加わったと。

DC/DCコンバータを外して様子を見たら・・・
定格負荷をかけて1分ほどしたら、過電圧が発生。
±15V→±30Vほどに。
基板上のIC、どれがダメージを受けたのかこれから調査です。

一番の難題がこれ。
アナデバのF/Vコンバータ「451J」
11_20201030134001
  ※黄色い染みのようなのは防湿用の塗膜。

これがアウトだと、代替回路を作らなくちゃなりません。
他は741互換のQUAD OP-AMP LM348
これはまだ現行品で、入手可能。

これから、別の電源で±15Vを供給してダメージの
調査を開始。
さてどうでしょか。

「made by intronics」で検索すると、アナデバの石(モジュール)
が出てきます。
製造方法のアーキテクチャ名かな?

| | コメント (2)

2020年10月28日 (水)

データロガーのサンプリング日時出力形式

Arduino-UNO 12bit×4chアナログ データロガーほぼ完成
記しましたが、データをサンプルした日時の出力をどうした
ものかと悩んでおりました。
GNUPLOTに食わせるんで食わせやすい書式で、1日を越えた
記録でも扱いやすくというのが要求仕様。

GNUPLOTをあれこれ触ってみて、なんとかなりそうなんで、
単純にこうしておきます。
 『 d H:M:S data1 data2 data3 data4』
先頭のdは1から始まる経過日
H:M:Sは時分秒。
最初のデータは「 1 00:00:00 data1~」からスタート。

GNUPLOTに食わせるサンプルデータ。

1 00:00:00  0.00
1 06:00:00 0.20
1 12:00:00 0.40
1 18:00:00 0.60
2 00:00:00 0.80
2 06:00:00 1.00
2 12:00:00 0.80
2 18:00:00 0.60
3 00:00:00 0.40
3 06:00:00 0.20
3 12:00:00 0.00
3 18:00:00 -0.20
4 00:00:00 -0.40
4 06:00:00 -0.60
4 12:00:00 -0.80
4 18:00:00 -1.00
5 00:00:00 -0.80
5 06:00:00 -0.60
5 12:00:00 -0.40
5 18:00:00 -0.20

まず、GNUPLOTの「set xdata time」での処理。
こんなスクリプト。

set grid
set xdata time
set timefmt "%j %H:%M:%S" # 「%j」の範囲が1~366
set xrange [0:"6T0:0:0"] # この「T」で日を指定
set xtics 3600*12
set xlabel "\nDate/Time"
set format x "%1dday\n%H:%M"
set yrange [ -2:+2]
set ytics format "%4.2f"
set ytics 0.5
set key right top
plot "L1.txt" using 1:3 with lines lw 2 ti "Test"

結果のグラフ。 X軸の目盛が日と時分に。

Cap001

次が「time」を使わずに、plotコマンドに書式指定を
導入して、日、時、分、秒に分けて、秒数を計算します。
日は1から始まるんで「-1」してゼロスタートに。
それがこれ。
X軸を「時間」にしています。

#秒で読んでから時間に直してみる
# 1 12:00:00 1.000
# $1 $2 $3 $4 $5
set grid
set xrange [0:120]
set xtics 12
set yrange [ -2:2]
set ytics format "%4.2f"
set ytics 0.5
set key right top
plot "L1.txt" using (((($1-1)*3600*24)+($2*3600)+
($3*60)+($4))/3600):($5) '%lf %lf:%lf:%lf %lf'
with lines lw 2 ti "Test"

「plot」のところの「'%lf~」が入力文の書式指定。
$1が日、$2~$4が時分秒。
$5からデータ部を続けます。
「%lf」は小数点付の数値指定。
そのグラフ。 X軸の単位は「時」に。
Cap002
これで、まぁ、なんとかなりそうです。

※追記 10/30
gnuplotで文字列変数に入れてある文をコマンドとして差し込む方法(@を変数名の前に付ける)
を見ますと、長ったらしいし式を略して記せるとのこと。
しかし現用しているgnuplot4.6にはまだ搭載されてませんでした。
で、新しいgnuplotをダウンロード。
ちょっとテスト。
データ列をもう一つ増やして・・・

Yデータが一つだと。
  plot "L1.txt" using (((($1-1)*3600*24)+($2*3600)+($3*60)+($4))/3600):($5) '%lf %lf:%lf:%lf %lf' with lines lw 2 ti "Test"
二つになると、
  plot "L1.txt" using (((($1-1)*3600*24)+($2*3600)+($3*60)+($4))/3600):($5) '%lf %lf:%lf:%lf %lf %lf' with lines lw 2 ti "Test1" ,\
     "L1.txt" using (((($1-1)*3600*24)+($2*3600)+($3*60)+($4))/3600):($6) '%lf %lf:%lf:%lf %lf %lf' with lines lw 2 ti "Test2"
長い。
($6)に変わるのと%lfが増える。
それを、
  cc = "(((($1-1)*3600*24)+($2*3600)+($3*60)+($4))/3600)"
  cs = "'%lf %lf:%lf:%lf %lf %lf'"
として、プロット実行で
  plot "L1.txt" using @cc:($5) @cs with lines lw 2 ti "Test1",\
     "L1.txt" using @cc:($6) @cs with lines lw 2 ti "Test2"
と。
短くなります。

・・・ところが・・・
想定してる電文、
  1 00:00:00 1.084 0.262 0.000 0.000
  $1 $2 $3 $4 $5 $6 $7 $8
これだと、$nは1~8まで。

8つのデータを取り出してグラフにしようとすると、
gnuplotがこんなエラーメッセージで拒否。
 『format must have 1-7 conversions of type double (%lf)』
1~7の7コまでやで! 8コはあかん。っと。

※例
JIS C8708充放電中の電池電圧とLM35による温度出力。
取り込むとこんなデータが出てきます。

  経過時間 電圧 温度:LM35(10mV/度)
1 00:00:00 1.084 0.262 0.000 0.000
1 00:00:10 1.084 0.262 0.000 0.000
1 00:00:20 1.083 0.262 0.000 0.000
  :
1 04:06:00 1.479 0.269 0.000 0.000
1 04:06:10 1.479 0.268 0.000 0.000
1 04:06:20 1.479 0.268 0.000 0.000

10秒サイクルで取り込んで4時間あまり放置。
それをこんなgnuplotスクリプトでグラフ化。
~~~~~~~~~~~~~~~~~~~~~~~~~~~
#秒で読んでから分に直す
# 1 00:00:00 1.084 0.262 0.000 0.000
# $1 $2 $3 $4 $5 $6 $7 $8
set term wxt 0
set grid
set xrange [0:250]
set xtics 30
set yrange [0.8:1.8]
set ytics format "%4.2f"
set ytics 0.1
set y2range [10.0:60.0]
set y2tics format "%.1f"
set y2tics 10.0
set xlabel "経過時間(分)"
set ylabel "電圧(V)"
set y2label "温度(℃)"
set key right bottom
cc = "(((($1-1)*3600*24)+($2*3600)+($3*60)+($4))/60)" # 経過時間:分
cs = "'%lf %lf:%lf:%lf %lf %lf %lf'"
# $1 $2 $3 $4 $5 $6 $7 ($8がダメ)
plot "M10.txt" using @cc:($5) @cs with lines lw 2 ti "電圧",\
"M10.txt" using @cc:($6 * 100) @cs with lines lw 2 ti "温度" axes x1y2
~~~~~~~~~~~~~~~~~~~~~~~~~~~

出てきたグラフ。
21_20201030161301
  新しいgnuplot、これまでのと色がチョイ違います。

充放電電圧変化と電池側面の温度変化が2サイクル分。
-Δ検出の様子やその時の電池温度上昇が分かります。

チャートレコーダーのようにリアルタイムでは見られません。
けど、こまかいところを見ようとしたとき、データですんで
手があります。

※『set xdata time』だとこんなスクリプトに。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 1 00:00:00 1.084 0.262 0.000 0.000 memo...
# 1 2 3 4 5 6 7
set term wxt 0
set grid
set xdata time
set timefmt "%j %H:%M:%S"
set xrange [0:15000]
set xtics 1800
set format x "%H:%M"
set yrange [0.8:1.8]
set ytics format "%4.2f"
set ytics 0.1
set y2range [10.0:60.0]
set y2tics format "%.1f"
set y2tics 10.0
set xlabel "経過時間(時)"
set ylabel "電圧(V)"
set y2label "温度(℃)"
set key right bottom
plot "M10.txt" using 1:3 with lines lw 2 ti "電圧" ,\
"M10.txt" using 1:($4 * 100) with lines lw 2 ti "温度" axes x1y2
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

短縮するための「@cc」や「@cs」は不要。
普通に書けます。
出てくるグラフはこんなの。
Cap001_20201031100601
「波」は同じですが、X軸の目盛が異なり「時:分」の
表現になっています。

とりあえず備忘録ということで。


| | コメント (0)

東芝インパルス TNH-3A(2400mAh)JIS C8708:2019充放電試験

東芝の単3ニッ水電池「インパルス」TNH-3A(2400mAh)がやって
きたのが2019年の6月。
このように↓さっそくイジメちゃいました。
2019年6月 6日:ひさじぶりの電池イジメ:東芝インパルス TNH-3A
2019年8月19日:東芝インパルス TNH-3A 1.0V放電停止の方を終了
2019年9月 5日:東芝インパルス TNH-3A 1.1V停止電池の充電状態

4本やってきたうちの2本をこのイジメ↑で使い、
2本を残したままになっていました。
  ※初期の様子を見るため、3回くらい充放電
   しています。

残り2本のうちの1本を使って新JISでの充放電実験を
始めたのが2020年10月11日。
2400mAhの容量ですんで、0.5C、つまり1.2Aでの
充放電が繰り返されます。
  ※毎50サイクル目は旧来のJISと同じで、
   0.1Cで16時間充電、0.2Cで1.0Vまで放電。

11_20201028091701

その結果・・・
・充放電時間と充電完了電圧の変化
Tv1


・充放電電圧、時間の変化
Cd1

東芝だけでなくパナも富士通も、高容量ニッ水電池は
ちょっとなぁ」という特性です。

※はっきり言って・・・
   覚悟して使いや~!
   性能に文句言ったらあかんで~
かと思います。
買うなら1900mAhのを。

初期の内部抵抗が35mΩ。実験終了後が316mΩでした。

電池あれこれ まとめ


TNH-3A、もう1本残っているので「60%でどや?!」
実験しましょか?

| | コメント (0)

2020年10月27日 (火)

Arduino-UNO 12bit×4chアナログ データロガーほぼ完成

Arduino-UNO 12bit×4chアナログ データロガー計画中
ざっとカタチになりました。
全体はこんな回路。
Analog_log1

SDカード部はaitendo製の基板。
SDカードスロットDIP化きっと [WV-N09WG]
レベル変換ICでATmega328Pにつないでいます。

A/Dコンバータは12bit 4chのMCP3204
14ピンDIPなんで配線は楽。

4行x20文字の液晶で表示。
11_20201027152801

中身。
12_20201027152801

SDカードに記録する電文フォーマットに悩み中。
現在は、こんな具合。

# 1 Cyc time 2sec  ←設定値の一部をヘッダーに置いて
# 2 Ch1 Range 2V
# 3 Ch2 Range 2V
# 4 Ch3 Range 2V
# 5 Ch4 Range 2V
# 6 Rx chr max 40
# 7 Rx start 0
#LOG on 2sec
00:00:00 0.896 0.896 0.897 0.897 21.23
00:00:02 1.452 1.451 1.451 1.451 21.23
00:00:04 1.504 1.504 1.504 1.503 21.23
00:00:06 0.961 0.961 0.961 0.960 21.24
00:00:08 0.494 0.492 0.493 0.493 21.23
00:00:10 -0.034 -0.034 -0.034 -0.034 21.31
00:00:12 -0.553 -0.553 -0.553 -0.553 21.38
 経過時間 A/D ch1 ch2 ch3 ch4  外部シリアル電文
                     max 40文字

24時間を越えたら「1 00:00:01」と出力。

サンプリング周期は1秒、2秒、5秒、10秒、30秒
1分、2分、5分、10分、30分、1時間の11種類。

長期間の記録を考えると24時間「12:34:56」表記では
不足。
「日」を入れなければなりません。

ところが・・・
グラフ化はGNUPLOTを使います。
しかし、GNUPLOTの日時処理はカレンダーになっています。

例えば、時分秒の前に「日」を付加して「123 01:12:34」という
「日時分秒」という書式は扱えるんですが、これは経過日数が
123ということではなく、年の初めから123日目の日を示すのです。
ですんで、この数値範囲は「1~366日」。
ログ開始からの経過日、「最初は0」で「0 00:00:00」から始めたい。
でも、「0日」は許してもらえません。
最初のデータは「1 00:00:00」にしておかないと怒られます。
そして、1年、閏年もあるんで最大が366日。
これも越えられません。
これに従っていれば、日時のフォーマット変換が簡単に済ませられ
ます。

GNUPLOT、
  set xdata time
  set timefmt "%j %H:%M:%S"
で、「12 12:34:56」と日付+時刻が得られ(秒に換算されて)
ます。

いろんな機能があるGNUPLOT、何か方法はあるんでしょうが、
まだ探し出せてません。


※日時の規約
日と時分秒の間に「T」を入れるかどうか・・・
日時を分ける「T」、調べたらこんな規約があるんですな。
    https://ja.wikipedia.org/wiki/ISO_8601


※おまけでシリアル電文を付加
12bit 4chのA/Dデータに加えて、シリアルで受けた電文を
40文字だけ付加できるようにしています。
他の装置が出すデータをシリアルで受けて、SDカードに
同時に記憶しておこうという魂胆です。
バッファを大きくできないんで、1行40文字で制限してい
ます。
ただし、1行の文字の先頭何文字目までは捨てちゃえという
設定もありますんで、行のうちの必要な所だけを取り込
めるかと。

 

| | コメント (0)

2020年10月26日 (月)

シャープ製関数電卓 EL-566

昨日、片付けものをしていた次男が・・・
『おとん。電卓いるか?』っと出してきてくれたんが
シャープの関数電卓「EL-566」。
  私: 関数電卓、使うやろ?。
  息子:スマホでやるし。
ということで、やってきました。

21_20201026153401

これ、致命的にキライなんが、
・数式通り入力や。  普通の入力方法でエエねん。
評価できるのが、
・単独の「パイ」キーががあるやん。
そして、
・あかん、「1/X」が2ndFや。 「X^2」の裏に割り付け。
・「×=」はエラー。 「X^2」キーがあるから。
  数式通り入力やからか。 
  普通の入力方式やったら、X=で二乗が出てくるのが多い。

数式通り入力、ほんとにイヤ。
ルートやSIN、COS、長年の癖で結果を求めたい数字を
先に入れてしまいます。
この電卓だと「√ 144 = 」で12。
普通は「144 √」で12。 「=」は不要。

16進計算もできますし、とりあえず仕事場作業机の引き出しに
入れておきます。

| | コメント (5)

ビニールコードの外装絶縁物が分解

昨日の自宅お片付け。
USBケーブルやLANケーブルを入れてあった箱を
整理していたら・・・
箱の底に「黒い小片」がパラパラと落ちています。
「怪しい生物(G!?)の痕跡か?」っと思ったら・・・
ACアダプタから出てる電線の外装が分解してました。
バラバラになって黒い怪しい小片に分かれてたのです。
中心の「赤・黒」線が出現してました。

11_20201026084701

ところどころ残ってるけど、ネチャネチャ。

いっしょに仕舞ってあった他のケーブル。
よく見ると、外装がネチャついているのや、
透明外装で見えているシールド線部に緑青が
出ているもの、コネクタの端子が錆びているもの
など、劣化品が多数出現。
いつか使うかと仕舞っておいてもこうなるとゴミ。

| | コメント (7)

トコーソー反対ポスター

ガレージ常連FJKW君とこ事務所の窓に貼ってもらってます。
中学生の通学路でして『もろ大阪弁やん』っと話してたとか。
T21

『行こう!投
トコーソーなんか潰してしまえ!

長男は日曜が仕事なんで、先に期日前投票に。


| | コメント (0)

2020年10月23日 (金)

今日の「トコーソー」反対ポスター

文字だけですが。
11_20201023143701

pdfで・・・ダウンロード - e58f8de5afbee382926ot.pdf

 

| | コメント (0)

2020年10月21日 (水)

gawk 文字列から1文字を取り出して8bit数値として扱いたい

「XOR」によるサムチェック・コードの生成、この処理
の確認用テストプログラムの作成に手こずりました。

通信電文の処理ですんで、CR、LFで区切られたテキスト。
GAWKを使ってチェックしたろっと、
  ちょちょいと・・・のはずが・・・

手順としてはこんなの
  (実際はもうチョイ別の処理も
   入りますが、核の部分だけ)

・入力した1行文字列の文字数を数える。
・先頭から1文字取り出す。
・順にXORしてサムチェックコードを作る。
・全文字完了で2桁の16進値で出力。

試したのはこんなGAWKのコード。

# 文字コードをXORしたい
BEGIN{
a = "ABCDEF"; # チェック文字
n = length(a); # 文字数
sum = 0; # XOR結果
for(i = 1; i <= n; i++){ # 先頭=1から最後まで
c = substr(a, i , 1); # 1文字取り出し
printf("%c", c); # ★1 確認で出力
printf("(%02X)", c); # ★2 HEXで出力
sum = xor(sum, c); # ★3 XOR演算
sum = and(sum, 255); # 00~FFでマスク
}
printf(" : %02X\n", sum); # 結果出力 sum
}

しかし結果はこんなのに。

  A(00)B(00)C(00)D(00)E(00)F(00) : 00

取り出した1文字を、printf("%c",c)で文字として出力
できていますが、8bit数値としての処理ができてません。
ゼロのまま。
  ★1は動作。
  ★2、★3がゼロのまま。

  「c + 0」とか・・・(awkでは+0で変数が数値になる)
  「int(c)」とかを試しましたがダメ。

たしか「昔に同じことをしたよな~」っと思い出して
古いプログラムを探しますと、この解決方法が出てきました。

ちょっと面倒ですが、まず0~255の値に対する配列を作ります。
その配列番号として使うのはsprintf("%c",i)で作った8bit文字
その中に0~255の数値を入れます。

以後、このテーブルを使って8bit文字の数値を得ます。
すると、XOR演算や16進での出力ができるという仕掛け。

こんなテストプログラム。

# 文字コードをXORしたい
BEGIN{
a = "ABCDEF"; # チェック文字
# 0~255の数字テーブルを作成
for(i = 0; i < 256; i++){ # 0~255
t = sprintf("%c", i); # 配列番号を文字で
tbl[t] = i; # 値をテーブルに入れる
}
# 実行
n = length(a); # 文字数
sum = 0; # XOR結果
for(i = 1; i <= n; i++){ # 先頭=1から最後まで
c = substr(a, i , 1); # 1文字取り出し
printf("%c", c); # ★1 確認で出力
printf("(%02X)", tbl[c]); # ★2 HEXで出力
sum = xor(sum, tbl[c]); # ★3 XOR演算
sum = and(sum, 255); # 00~FFでマスク
}
printf(" : %02X\n", sum); # 結果出力 sum
}

結果、ちゃんと16進値が出るようになりました。

  A(41)B(42)C(43)D(44)E(45)F(46) : 07

めでたし、めでたし。


| | コメント (0)

「アサヒカメラ」休刊 ・・・図書館の本はどうなる

いつも行く「東成図書館」、雑誌の書架には「アサヒカメラ」が
置いてあります。

しかし、2020年7月号で休刊

休刊になって書架がどうなるのかなって思っていたら・・・
  ※現在、まだアサヒカメラは置いてあります。
デジタルカメラ・マガジンが新しく入っていました。

図書館のHPで検索してみると、アサヒカメラの所蔵館が17館。
そして、デジタルカメラ・マガジンは3館。
遡ってみますと、2020年8月号から東成図書館に置き始めた
ようで、それまでは「阿倍野」と「東淀川」の2館だけだった
ようです。

デジタルカメラ・マガジンにはカメラバカにつける薬
が連載されてますので、ちょっと楽しみです。

| | コメント (0)

2020年10月20日 (火)

Arduino:関数ポインタを使ったテーブルジャンプ ROMにテーブルを置く

2020年4月10日:JIS C8708:2019対応ニッケル水素電池充放電実験回路(回路図とプログラム)
の中の「batcyc3b.zip」を見ていただければ良いかと
思うんですが、連続実行させるプログラムの処理に
関数ポインタ」を使っています。

いろんな処理の流れを場面に分けて記述。
それをテーブルにして、したい処理だけを実行させる
という手順です。
「batcyc3b」では二つの処理を並列に稼働させています。
こんな具合です。

/*****  充放電実行        *****/
void (*cycexc[])(void)={
cycstby, // 0 待機
cycstart, // * 1 充放電開始
cyc0dchg, // 2 CYC 0 最初の放電開始
cyc0dchg1, // 3 CYC 0 最初の放電完了待ち
cyc0dwait, // * 4 CYC 0 放電完了後の時間待ち
cyc49chg, // * 5 CYC 1~49 充電開始
cyc49chg1, // * 6 CYC 1~49 充電完了待ち
cyc49chg2, // 7 CYC 1~49 充電後の時間待ち
cyc49dchg, // * 8 CYC 1~49 放電開始
cyc49dchg1, // 9 CYC 1~49 放電完了待ち
cyc49dchg2, // 10 CYC 1~49 放電後の時間待ち
cyc50chg, // * 11 CYC 50 充電開始
cyc50chg1, // 12 CYC 50 充電完了待ち
cyc50chg2, // 13 CYC 50 充電後の時間待ち
cyc50dchg, // * 14 CYC 50 放電開始
cyc50dchg1, // * 15 CYC 50 放電完了待ち
};

/***** 測定実行 *****/
void (*mesexc[])(void)={
mesttl, // * 0 タイトル表示
mesttl1, // 1 タイトル表示続き
messtby, // * 2
messtby1, // 3
mesmenu, // * 4
mesmenu1, // 5
mesmenu2, // 6
mespwm, // * 7 PWM電流テスト
mespwm1, // 8 PWM電流テスト#1
mespwm2, // 9 PWM電流テスト#2
mespwm3, // 10 PWM電流テスト#3
mespara, // * 11 パラメータ設定
mespara1, // 12
mespara2, // 13
mescyc, // * 14 充放電サイクル開始
};

※それぞれの実行ルーチン
cycexc[cyc_exc](); // 充放電サイクル実行
mesexc[mes_exc](); // 測定実行区分で処理

このテーブルですが、置かれているのは「RAM」領域
関数のアドレスを示していますんで、固定的な値です。
   ※実行中にこれを変更する必要はありません。

これが合わせて30コほど。
一つが2バイトですので合わせて60バイト
固定データにRAMを使うのって、Arduino(ATmega328P)では
ちょっともったいない。 (RAMが少ないので)
ROMに置ければ、60バイトのRAM領域が浮いてきます。

しかし・・・
AVRマイコンでのC言語、ROM領域にデータを置くには
PROGMEM」を使って記述するという、独特の制限が
あります。
そしてROM領域からの読み出しは、pgm_read_byte()
pgm_read_word()を使わなくてはなりません。
RAMに置いたように記述しても、ROMだと直接実行してくれない
のです。

そこで、こんなテストプログラムを書いてみました。
まずは、いつものようにRAMでの実行

/*****  テーブルジャンプのテスト    *****/
// テーブルをROMに入れたい
// まずはいつも使っているRAMのテーブルで
byte ex_t = 0; // 実行番号 0~3
/***** 実行ルーチン *****/
void t0(void){
Serial.println(" test0");
}
void t1(void){
Serial.println(" test1");
}
void t2(void){
Serial.println(" test2");
}
void t3(void){
Serial.println(" test3");
}
void t4(void){ // これは動作確認用おまけ
Serial.println(" test4");
}
/***** RAMでの実行 *****/
// 配列に実行ルーチンを入れる
void (*ramexc[])(void)={
t0, // 0
t1, // 1
t2, // 2
t3, // 3
};
/***** 実験ルーチン *****/
void setup() {
Serial.begin(9600); // 9600BPSで
}
/***** LOOP *****/
void loop() {
Serial.print("RAM ");
delay(100);
ramexc[ex_t](); // RAMでテーブルジャンプ
ex_t++;
if(ex_t >= 4) ex_t = 0; // 0に戻す
delay(1000); // ちょい待ち
}

関数(サブルーチン)をテーブルに置いて、
  ramexc[ex_t]();
とすれば、「ex_t」の値で該当サブルーチンを実行し
てくれます。

次はROMの場合
まず、関数の置く方法。
「typedef」で型宣言してから「PROGMEM」でROM内の
固定データ(関数のアドレス)の配列にします。
関数の名前の置き方はRAMといっしょ。

問題はこの関数テーブルの実行方法です。
アドレスは2バイトデータですので、pgm_read_word()
取り出します。
それをプログラムとして実行する本体、関数ポインタに与え
ます。
この時、ちょいとややっこい「キャスト」をしないと
warningが出てしまいます。

最終的に落ち着いたキャストの方法がこれ。
   p = (void (*)(void))a;
p=a; とか
p=(void *)a;
だとwarningが出ちゃうのです。

実行は
  romexc(ex_t);
でok。
ex_tの番号で指定した関数(サブルーチン)が実行されます。

具体的にはこんなスケッチです。

/*****  テーブルジャンプのテスト    *****/
// テーブルをROMに入れたい
// ROMでの実行を試す
byte ex_t = 0; // 実行番号 0~3
/***** 実行ルーチン *****/
void t0(void){
Serial.println(" test0");
}
void t1(void){
Serial.println(" test1");
}
void t2(void){
Serial.println(" test2");
}
void t3(void){
Serial.println(" test3");
}
void t4(void){ // これは動作確認用おまけ
Serial.println(" test4");
}
/***** ROMでの実行 *****/
typedef void(*romtt)(void); // typedefで形態を指定
// テーブルの実態
romtt const romtbl[] PROGMEM ={ // PROGMEMでROMに配置
t0, // 0
t1, // 1
t2, // 2
t3, // 3
};
// 実行ルーチン
void romexc(byte n){
word a; // 読み出しアドレス
void (*p)(void); // 実行する本体
a = pgm_read_word(&romtbl[n]); // アドレスリード
// p = a; // warning
// p = (void *)a; // warning
p = (void (*)(void))a; // ★ここのキャストどうにかしたいが
p(); // 実行
}
/***** 実験ルーチン *****/
void setup() {
Serial.begin(9600); // 9600BPSで
}
/***** LOOP *****/
void loop() {
Serial.print("ROM ");
delay(100);
romexc(ex_t); // ROMでテーブルジャンプ
ex_t++;
if(ex_t >= 4) ex_t = 0; // 0に戻す
delay(1000); // ちょい待ち
}

ROMでのテーブルジャンプ、もうちょい簡単に記述でき
れば良いのですが・・・

RAMやI/Oの読み書き場所とROMの読み出し場所、方法
が異なるというAVRマイコンのアーキテクチャに起因し
ますんでどうにもできません。

機械語レベルの話になりますが、AVRマイコン、プログラムを
入れるROMが16ビットなんで、ROM内のテーブルを読む時の
アドレス指定がちょいとややこしい。(2倍しなくちゃならない)


※この話、もうちょい続きます。
どうやら、ramexc()とromexc()を同時に使うと
コンパイラがバグる(最適化のミス)ようなのです。
RAM用とROM用、それぞれのテーブルの中を
t0~t3を同じ順で並べると、RAMのほうの実行が
暴走。
「同じ値のテーブルやから処理を省略したろ」と
しているっぽいのです。
t0~t3の順番を変える、t4を入れるなどして異なった
テーブルにすると、ちゃんと動くのです。

※暴走するスケッチ
   ダウンロード - test_progmem1.c
ファイルタイプを「.c」にしています。
★マークの実行サブルーチンの配列、例えばt3をt4に
変えるとちゃんと走るようになります。

| | コメント (0)

「トコーソー」反対ポスター

文字だけですが、自作で都構想反対ポスター。
A11_20201020093701

ガレージ前に貼ってます。


| | コメント (0)

2020年10月15日 (木)

LM2776:チャージポンプ型電圧コンバータ 起動失敗

反転型チャージ・ポンプIC:LM2776 の記事にコメント
しましたが、LM2776を使おう(試作回路への組み込み)
としたところ、うまく起動しないという事態が発生。

目的は電源電圧の+5Vから-5Vを生成。
まっとうなチャージポンプ型降圧回路の使い方です。

11_20201015103201

サンプル回路。
B10
EN入力はVinと接続して、電源供給で即起動するように。

症状は・・・
  Vinが3.0Vなら正常起動。
  3.3Vだとやっとこさ。
  3.5V以上だと起動に失敗。 5.0Vもアウト。。
  Vinの立ち上がりをゆっくりにすると5.0Vでも正常起動。
こんな状態に出くわしたのです。

以前の性能実験ではうまいこと動いていたのです。
  ※以来、このチップは使ってませんでした。
「在庫あるな。よし、使ったろ。」という次第。
そしたら、今回の試作回路ではアウト。

電圧を変えながら様子を見てみました。
   負荷抵抗は軽く22kΩ。
   ch1 Vin入力電圧
   ch2 Vout出力電圧 -Vinが出ます
   ch3 C-端子 負電圧発生元

3.0Vならちゃんと起動。
D76

3.3Vだと、ちょっと遅れながらも起動はします。
D77

ところがこれ以上のVinはダメ。
3.5Vでは正常なマイナス電圧が出てきません。
D75
「C-」信号を見ると、いっぱいパルスを出しているんで
起動しようと頑張っているようですが・・・

ところが、入力電圧の立ち上がりを「ゆっくり」に
すると5.0Vでもこんな具合にOK。
D79

あれこれTIのサイトを探していましたら、こんなアプリケーション
を発見。
 TI Designs
 High Accuracy AC Current Measurement Reference
 Design Using PCB Rogowski Coil Sensor

この回路のマイナス電圧発生にLM2776が使われてました。
EN端子(Hで起動)に遅延回路が入れられています。

B11_20201015104001
電源部にLM2776が使われています。
その詳細。
B12_20201015104101
Vin(ここでは3.3V)をR14とC21で遅延させてEN入力につない
でいます。
遅延時間、ざっと10mS。

期待して、これ、試してみましたが・・・
Vin=5.0Vではやはり起動に失敗。
遅延をもっと大きくしてもうまく行きません。
Vinが上がりきったところでENを徐々に上げても
スロースタートはしないということなんでしょう。

「いきなり電源オン」の回路では解決策無しということかと
LM2776を使う時はどうぞご注意を。

※解決しました。
コメントをご覧ください。
コンデンサの実装場所に注意!っということで。

| | コメント (4)

2020年10月13日 (火)

「MAU109」の出力にコモンモードフィルタを付けてみる

主電源が5Vの回路、そこにOP-AMP駆動用に±15V電源が欲しかった
ので、DC-DCコンバータMAU109を使うことにしました。
アナログ回路なんで、できるだけノイズを減らしたいという
ことで、その出力にコモンモードフィルタを付けてみました。

非絶縁型降圧DC-DCコンバータの出力ノイズ低減あれこれ
これ↑で、コモンモードフィルタでノイズが減るぞを示した
のですが、小さい絶縁型DC-DCコンバータだとどうや?っと
いうのが今回の実験です。

MAU109を±15Vで使った時と、0~+30Vで使った時を
試してみました。

M11_20201013095501

負荷は750Ωの抵抗。 20mAほどが流れます。
コンデンサは1.0uFの積セラ。
耐圧50VのX7R。

先に試したフィルタが、
2016年02月29日:TDKのコモンモードフィルタ
これ、廃番になったんで、手持ちのが少々残っています。
M12_20201013095801

観察に使ったオシロはアジレントのDSO5014A。
帯域は100MHz。

まず、フィルタの前の信号。
B002_20201013095901

フィルタを通ると、ノイズレベルがざっと半分に。
B003

さらに22uFのOSコンを付けると、スパイク状のノイズは
残りますが、うねうねしたリップルが無くなります。
B005_20201013100101

次がTDK製現行品のフィルタ。ACM4520-142

M13_20201013100301

現行品のフィルタでは。
B006

今度は0~+30V出力モードで。
ZJYS51R5をひっくり返してハンダ付け。
M14_20201013100601

+30V出力、フィルタの前
B007
±15V出力での+15V側だけを見るよりノイズは大。

+30V出力、フィルタの後
B008_20201013100701

そして、オシロの垂直帯域幅制限をオン。
(25MHzで帯域制限)
B009_20201013100801

帯域制限すると、スパイク状のノイズは見えなくなりますんで
むちゃ高い周波数のノイズだということがわかるかと。

もう一つ。
入力側にもコモンモードフィルタを入れると、DC-DCコンバータの
付加で主電源側に乗ってしまうノイズが減らせます。

| | コメント (0)

ダイソー『厚さ測定定規』

昨日寄ったダイソーで見つけたのがこれ。
「発送用 厚さ測定定規」。

011

きっと、使うのは「3cm」だけでしょうが、これはありがたい。
文鎮:ハンダ付け補助ツール の発送で使っているクリックポストや
レターパック・ライトの厚み制限が「3cm」。
これの確認用に、プラ板でテンプレートを自作していたんですが、
ちょいとひ弱。
すでに割れをテープで補修したりと「作り替えなあかんなぁ」っと
思ってたとこだったのです。

とりあえず厚みの精度を確認。
012

| | コメント (0)

2020年10月12日 (月)

ちょっと気になる第二阪奈道路トンネルの漏水

無線仲間からの情報。
  通勤に使っている第二阪奈道路の奈良行き車線(東行)
  で、西石切入り口からトンネルに入って1.4kmくらい
  の地点で漏水がひどくなっていると。
  天候は関係ない。
  日に日に増えてる。
っと。
A10
  ※動画からのキャプチャー
左側車線の左端が、しばらくの間、濡れている状態。

この地点、もろに「生駒断層」があります。。
第二阪奈道路じゃありませんが、ここから少し北にある
近鉄のトンネル工事ではこんな事故がありました。

  ・近鉄けいはんな線 生駒トンネル事故
   工事中の1984年(昭和59年)3月28日、西坑口(新石切駅)側
   導坑切羽付近で湧水による地表陥没事故が発生した。

この場所、女房実家のすぐそば。
地表の家一軒が地中に引きずり込まれました。
女房実家のご近所は大騒ぎ。
幸い、人的被害はなし。(工事関係者も)
その跡地に「夢観音」が建ちました。
そして、近くにあった「池」は干上がってしまいました。

マピオンで図示すると、こんな位置関係。
A11_20201012150101
1984年の陥没地点は近鉄けいはんな線線路の真上!

今回の漏水箇所、グーグルマップだと「川」があるようです。
A12_20201012150201

生駒断層と上町断層、その断面の解説が記されています。
https://www.gsj.jp/data/actfault-eq/h14seika/pdf/ikoma.pdf

 

| | コメント (0)

都構想・投票用紙

11月1日の「いわゆる都構想」の投票が近づいてきました。
その投票用紙、前回2015年・・・
   ・・・皆で一杯やりながらのお話し
「賛成・反対が印刷されていて、どっちかに○したんと
 ちゃうやったんやないやろか?」
てなことに。

調べますと、前回も今回と同じ「賛成」「反対」を文字で書いて
おりました。
  「賛成・反対どっちかに○」
とか
  「賛成:○、反対:×」
などという記述じゃありませんでした。

今回の投票用紙はこんなのに。
T11
「大阪市を廃止し・・・」っとちゃんと記されているというのが、
(反対派に)評価されてます。
私は・・・家族もガレージ仲間も・・・もちろん、みな反対。

~~~~~~~~~~~~~~~~~~~~~~~~~~~
賛成なら・・・
 「○」とか「◎」、
 「花丸マーク・賛成」とか
 「賛成・ハートマーク」とか
をどうぞ。

そして、反対なら「反対」とだけ書くように。

※余計な文字記号は無効票になります

※過去記事
居酒屋ガレージ日記:大阪都構想

※都構想「反対」用自作ポスター
Aa11

pdfで:ダウンロード - e58f8de5afbee38292_ot.pdf

 

| | コメント (0)

2020年10月10日 (土)

異形のハンダ付け補助ツール、第二弾

過去、あれこれさまざまな材質形状の文鎮:ハンダ付け補助ツール
を頒布してきましたが、今回は異形のハンダ付け補助ツール
の続きです。
端材が出たのでということで、佐藤テック君が作ってきてくれました。

I11

材質は鉄。 メッキや塗装などの処理は無し
形状は、前のとほぼ同じ。
  ※斜め部の終端平面幅が異なる。
M5のタップ穴が二つ。
長さはクリップ幅に合わせて65mmで切断。
高さが約24mm。 (前のが22mmだったか)
幅が60mmのと62mmのがあります。
重さが500g弱。490gあたり。

幅の違い、こんな感じです。

I12
  ※上のが2mm狭い。
SUS製やリン青銅製の四角いのより、
  「これが使いやすい」
  「応用が利く」
との評価です。 まさに文鎮。

発送は、一つだけならクリックポスト(198円)。
重量制限が1kgですんで、封筒や補助に使う段ボールの
重さを入れると、二つだと1kgを越えるかもなんです。

二つ以上はレターパック・ライト(370円)を使います。
また、お届け先のポストにレターパックの封筒が
入らないということでしたら、
手渡しのレターパック・プラス(520円)を指定してください。


頒布価格ですが前回と同じく一つ「1,200円」でよろしくです。
これに送料、クリックポスト代金「198円」(あるいは
レターパック代金)が加わります。

M5のキャップボルトとワッシャクリップ口に付けるゴム板
添付します。
クリップはご自身で入手してください。

※60mm幅か62mm幅か、どちらをお届けできるか分かりません。
 二つ以上の場合はできるだけ合わせますがお約束はできません。
※全部で16コ出来上がってきました。
 残数はコメントでお知らせします。
 基本、早い者勝ちです。

ご希望の方は、この記事にコメントして(メールアドレスを
記入して)ください。(匿名でかまいません)
その後、私の仕事場からメールしますのでお届け先を返信して
ください。
代金は到着後に振り込んで(振り込み先のメモを同封)ください。



| | コメント (28)

パナソニックeneloopスタンダード単3「BK-3MCC」新JISでの寿命実験終了

4月4日にスタートしたエネループ・スタンダードの充放電実験、
パナソニックeneloopスタンダード単3 JIS C8708:2019充放電実験スタート
1050サイクルを越えました。
開始からここまでざっと半年。 長かった。
内部抵抗は407mΩまで上昇。
いったんこれでこのイジメは終わります。

これが50サイクルごとの0.2C放電グラフ。

Vd1050
0.2Cの電流で1.0Vまで放電させます。
その時の電圧変化をグラフにしています。

1900mAhの容量なので1/5の380mAが放電電流。
0.2Cということは5時間(300分)が定格。
これが3時間(180分:6割)を切ったら寿命と判断。
  ※1050サイクル目でまだ180分を越えています。

そして、このグラフが毎1~49サイクルでの充放電時間と
「-ΔV検出」しての充電停止電圧。

E1050
0.5Cでの充放電なんで定格は2時間(120分)。
充電側(赤線)は効率もあって1割ほど余計に時間がかかります。

1.0Vまでの放電できた時間と充電時間(-ΔV検出で停止)
をグラフにしています。
青線が充電停止した電圧。
サイクルが進むと、内部抵抗が上昇してこの電圧も徐々に
上がってきます。

ここで6割(72分)のポイントを見ると800サイクルあたり。
パナソニック充電池の寿命は、こんな絵で示されています。

C11_20201010102501

エネループ・スタンダードだと「約600回」。
これはクリアーちゃんとしています。
「突然死」せず、まっとうに寿命を迎えた感じです。


| | コメント (0)

2020年10月 8日 (木)

パナソニック充電式エボルタBK-3MLE(1950mAh)実験開始

パナのエネループ・プロの実験が終わり、
JIS C8708:2019充放電実験回路が余ったんで、
次は充電式エボルタBK-3MLE(1950mAh)を。

C11_20201008101701

実験開始前の内部抵抗は22mΩでした。
交流定電流方式で電池の内部抵抗を計ってみる


現在実行中のはこれ↑をあわせて3つ。
エネループスタンダード
   もう終盤。1000サイクル越までを
富士通・白(1900mAh)
   もうすぐ800サイクル

充電初期、「偽の-ΔV」が発生したのは「ReVOLTES」だけ。
エネループスタンダードも富士通・白も「偽の-ΔV」は出てい
ないもよう。
富士通・黒もエネループ・プロは「突然死」しちゃって
「偽の-ΔV」は発現せず。


| | コメント (0)

2020年10月 7日 (水)

エネループ・プロ(BK-3HCD:2500mAh) 60%放電での実験終了

8月6日に開始した、
  エネループ・プロ(BK-3HCD:2500mAh) 60%放電で実験開始
これの結果が出ました。

放電時間を72分(0.5Cなんで定格だと2時間=120分放電できる)に
して充放電を繰り返しました。

・最後の状況
 422サイクル目の0.5C放電で放電時間72分を切って
 タイマーで放電を止めるより先に1.0Vに到達するよ
 うになります。

 そして・・・
 432サイクル目で、放電開始直後いきなり1.0Vに。

 サ 充  放
 イ 電  電
 ク 
 ル (分) (分)
420  77  72 
421  77  72 ここまで72分を維持
422  77  69 72分を切って
423  74  67  先に1.0Vに到達
424  71  66
425  71  68
426  74  68
427  73  67
428  72  66
429  71  65 徐々に放電時間が
430  70  65  短くなって
431  70  62
432  65  0 いきなり1.0Vに
433 132  39  ちょっと回復したけど
434  38  0   またダメに
435 132  0
436 132  0 放電せず充電するもの
437 132  0  だから充電終了検出失敗が続く
438 132  0
439 132  0
ここで実験終了。

こんなグラフになります。
Tv0439
※50サイクルごと、充電時間にピークが見えます。
 これは、50サイクルごとの0.2C放電直後の
 充電だからで、フル充電しているため。

400サイクルまでは「頑張るやン」っと思っていたんですが・・・
終了後に計った内部抵抗、448mΩにまで上昇していました。

※50サイクルごとの0.2C放電のグラフ
D0400
※毎1~49サイクルでの0.5C(1250mA)放電
D439
放電時間を定格の6割=72分に設定して放電を続行。
422サイクル目以降はこの時間を維持できず、先に1.0Vまで
到達しているのが見えます。

ニッ水電池、とりわけエネループシリーズの場合、
1.2V以上の電圧を維持してくれる時間が長いという
特徴があります。 (DiMAGE7i時代、これがうれしかった)
300サイクルくらいになると1.2Vを越えているのは30分くらい。
そこからは、急激に悪くなっている感じです。

※充電電圧と充電時間の変化
C439
終端が70分~80分のラインと100~130分のライン、
二つの群が見えます。
70分~80分のは毎1~49サイクルでの充電。
6割放電=72分なので、それに近いところで終わっています。
100~130分のほうは、50サイクルごとの0.2C放電直後の
充電です。
0.5Cでフル充電ですので2時間ちょいというところ。
充放電サイクルが進むと・・・
  ・充電停止完了電圧が上昇
  ・充電時間が徐々に短く
充電に関してはこんな状況です。
このグラフを見て分かるように、充電開始直後に見える(はずの)
「偽の-ΔV」は発生しませんでした。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

2017年8月14日:ニッケル水素充電池関連の投稿記事
この記事の、
  「放電深度を60%から100%にしたら寿命が10~15%に減る」
を確かめてみたかったのです。

エネループプロ(BK-3HCD)も突然死か?!が8月5日。
167サイクル目で力尽きました。

その時のグラフがこれ。
Tv0170
放電は0.5Cで1.0Vまで。

今回、サイクル数でおよそ2.6倍伸びましたが、放電時間を
6割にしての結果なので、トータルの放電時間で見るともっと
小さくなります。

放電深度を60%から100%にしたら寿命が10~15%に減る
だとすると、10~15%の逆数は10倍~6倍。
10倍~6倍に寿命が延びるのか?っと期待したわけですが・・・

しかし、今回の実験結果からはそんな「うまい話」は出てきま
せんでした。

※放電時間としてどんだけ寿命が延びたか・・・
 ざっとの計算。
・60%放電の場合 ほとんどの区間が72分
   72分×431サイクル→約31000分
・1.0V放電の場合
  100サイクルを越えたあたりからドロップ、
  平均すると105分くらいか?
   105分×166サイクル→約17400分

サイクル数だと431÷167で約2.6倍。
放電時間だと31000分÷17400分で約1.8倍。
10倍~6倍に寿命が延びる(かも)という希望は叶い
ませんでした。


電池あれこれ まとめ

| | コメント (0)

Zilog『Z80 FAMILY DATA BOOK ,JANUARY 1989』

書架を整理していたら、
  ・Z80のIFF2に関するトラブル体験談
この話↑に出てくる
Zilogの『Z80 FAMILY DATA BOOK, JANUARY 1989
を発掘!

こんな真っ黒な表紙です。
Z11

Z80 Family Questions & Ansewers」というページ。
  (クリックで拡大↓)
Z12

412ページの★印のところがその質問と回答です。
Z13

解決策となるプログラムのサンプルは2つ。
Z14
どうやって、CPUの内部タイミングに起因するハードウェアの
バグを回避するねん?!っというテクニックがスゴいです。

| | コメント (0)

2020年10月 2日 (金)

カメラ型番の「系統樹」がわかる・・・かも

ニコン、キヤノン、ソニーのだけですが・・・
【カメラバカにつける薬】『君(カメラ)の名は』 デジカメ Watch

※関連
2020年7月17日:改良進化で「mark2」という言い方はちょい好きくない

| | コメント (0)

2020年10月 1日 (木)

先が細すぎた・・・ピンセット

「もうちょい先の細いのはどうや?!」っと買ってみたピンセットが
「ホーザンのP-655」

D10

D11

D12

120mm長で重さ14g、耐磁性。
そして先端幅が0.2mm

快適な場合もあるんですが、これが細かった・・・

チップ部品の集合抵抗をはさむと・・・
先端が凹部にはまり込んでしまうことがあり、
 「斜めに持ってハンダ付け位置まで移動」
がやりにくいんです。

D13
   ↑先端が凹部に引っかかってしまい、
   部品をつかむ角度が自由にならない。

工具は使ってみないと分からない・・・

※関連
2010年02月13日:ピンセット
   ここ↑に出てくるれスイス製のが快適。
くっついたらイヤっ! 着磁した安物ピンセット
百均ピンセット4種類
99円ピンセット
工具の消磁

※検索
Udauda Blog3/2019-10-26/チタン・ピンセット購入


| | コメント (0)

« 2020年9月 | トップページ | 2020年11月 »