« 2021年11月 | トップページ | 2022年1月 »

2021年12月

2021年12月31日 (金)

TTLとCMOSのバイブル

古いデータブックを並べてある書架。
ロジック回路の基本は「モトローラ」(赤いの)と「TI」(黄土色の)の
本で勉強させてもらいました。
12_20211231110201

オペアンプやアナログ回路は「NS」の青い本ですな。

| | コメント (3)

2021年12月29日 (水)

「おつまみ鶏皮 柚子こしょう風味」

もらいものでもらった肴。
11a_20211229175501
むちゃ美味しかった。
どこで買えるのか、いくらくらいか?
ネットで調べると  ・・・あわわわ・・・ ムチャ高価!

いただいたところに「美味しかったでぇ」っとリクエストしておこう。

| | コメント (0)

IEC60617で記述したRSフリップ・フロップ 74279

IEC60617での記述、キラいなんで寄りつかなかったんですが、
あれこれ見てますと・・・

まず、「NANDゲート」の基本。
ド・モルガンの変換でもって、正論理入力と負論理入力が
このように描けます。
A11_20211229141101
左下のは「負論理入力のOR」。
実体は正論理のORの前にインバートをくっつけただけ。
でも、負論理入力になっても、入力信号の状態「Lが0、Hが1」
に対する結果(出力)は変わりません。
  入  入  出
  0  0  1
  0  1  1
  1  0  1
  1  1  0

IEC60617での表記で「面白いなぁ」と思ったのが
NANDゲートを使った「RSフリップフロップ」。

通常は左のように描きますが、動作は右のように
「負論理のOR」で考えるほうが動きが見えます。
A12_20211229141101
入力信号(Lアクティブ)の上側が優先で出力の状態が決まる
様子が、右の描き方だと目に浮かびます。

このRSフリップフロップが4組入ったのが「74279」。
データーシートにはMILでこのような表記。
A13_20211229141101
入力信号名には「 ̄付」で負論理であることが示されていますが、
NANDゲートで描かれているので、絵を見て動作が直感的に判断
できるかどうか・・・
負論理入力のORゲートで描いてると分かりやすいのにと思っちゃ
うわけです。
このIC、/Sが二つあるゲートがあるんですが、この/Sの条件、
ANDなの?っと思ってしまうわけです。
負論理入力のORでゲートを表現したら「/Sは負論理のOR」で
あることが一目瞭然。
間違いようがない。

TIのデータシートにはこんな具合にIECでの記述が載っています。
A14_20211229141101
左が入力。 右が4つの出力。
負論理での入力だということは分かるんですが、
/Rと/Sが同時にアクティブ(L=0)になった時、
「/S」入力が優先されるということがこの図だと
読めません。

CMOSの「4044」、これも負論理入力のRSフリップフロップ
ですが、これは「/R」優先です。
IEC表記では「真理値表」が無ければ、どうなるのかが
判断つきません。
31_20211231112601


| | コメント (0)

2021年12月27日 (月)

JIS、IECの論理回路記号

ANDやORの論理記号について、ちょっとあれこれ話をしてました。
 ※抵抗やスイッチなどはここであれこれ。
   「電子工作」のキホン
   「子供の科学」の回路図記号

今回は論理記号を掘り下げて。

NANDとNORをトラ技(MIL記号)と新JIS、IECで比べると・・・
A1_20211227125901

この違いは、あちこちで紹介されていますが、入力を負論理に
するとどうなるか。
MILなら一目瞭然なんですが・・・

A2_20211227130001
新JISだと、「&」が「≧1」に。
A3_20211227130001
さて、IECの場合の負論理記号はどうすれば?
A4_20211227130201
JISの「まるぽち」のくっつき方だと「下」のほうかな
と思えるのですが、IECの矢印は信号の向きを示すという
ことで、上が正解。

通常、信号の流れは「左から入って右へ出て行く」ように
描くんですが、信号処理の具合で右入りで描きたいときも
あるわけです。
MILなら「出力側がすぼんでいる」ということで、ANDも
ORもINVも見た目が分かりやす。
でも、新JIS、IECはちょっとわかりにくい。
直感的じゃない。

A5_20211227130601
ORの「1≦」は向きを示しているように見えるんで、なんとなく
信号の流れが分かります。
しかし、「&」は直感から外れます。
そして、IECの矢印は信号の流れということで、まだまし。

ゲートの中にはこんなのもあります。
入力が2つあって、それを「AND」して、出力が正論理と
負論理で2つ。
A6a
出力が2つ存在するのがあります。
MILなら入出力間違いませんが、JISもIECも
「なんじゃこりゃ?」。
「▲1」は左右どっちがどっち(入出力)か直感で
分かりますか?

ということで、私の場合、死ぬまでトラ技方式(MIL)で
描かせていもらいます。

※追記:資料として
新JISやIECの論理記号、これをまとめてあるのが
TIのこの本。 
『標準ロジックIC ポケット・データ・ブック』、
持っているのは1998年版です。
B11_20211227163501
この付録ページに解説が載っています。
B2_20211227163601
B3_20211227163601
B4
B5_20211227163701
今回、あらためてこの資料を読んでみました。
負論理を示すJISの「まるぽち」とIECの「矢印」記号。
これは「表記方法が異なる」もんだと思ってたんですが、
【表2】の最初の4行を見ると・・・
  「同じなん?」「どっちでもOKなん?」
と・・・
原文(英語か)を見てみないと。
はてさて。

| | コメント (7)

2021年12月24日 (金)

オーバーフロー割り込みでの割り込み周期(周波数)計算

2020年2月4日:Arduinoのタイマー OCRレジスタは「n」じゃなく「n - 1」の値を設定せよ
てなことを論じました。
この時はコンペアマッチ割り込みで一定周期(周波数)の
タイミングを得ようというものでした。
同じようなことがオーバーフロー割り込みでも言えるのです。

8ビットタイマーでのオーバーフロー割り込みの発生タイミングは
255の次」のクロックです。
その時にTCNTの値を書き換えて、所定の周期を得ます。
こんな感じになります。

・オーバーフロー発生タイミングは255の次のクロック
   :
   253
   254
   255
    0 → OVF発生 → TCNT書き換え
  TCNT+1
  TCNT+2
   :
TCNTを書き換えなければ255→0→1とカウントが進み
クロックの256倍の割り込み周期(1/256の周波数)
得られます。

TCNTの書き換え値を「254」にすると、
    255
     0 → OVF → 254
    255
     0 → OVF → 254
    255
     0 → OVF → 254

255→254→255→254…と2クロックサイクルで割り込みが
発生します。
クロック数は「256-254」で得られ、設定数は「256-2」で
計算できます。

書き換え値が253の時は
    255
     0 → OVF → 253
    254
    255
     0 → OVF → 253
    255
    254
     0 → OVF → 253

256-253」で3クロックサイクルで割り込み発生します。

さて、vabenecosiさんの簡易パルスジェネレータの製作(ソフト編)
この中に置かれているソースファイル:
 ・2018/2/8 上記に加えてアイドル時の自動画面切り替え表示機能を追加 Simplified_PG_v5r4
をご覧ください。

#define tcnt2base 102 // timer2のTCNT2のBOTTOM値
            // 102で約10ms(CK/1024)
ISR(TIMER2_OVF_vect) {  …タイマー2のオーバーフロー割り込み
 TCNT2 = tcnt2base;   …102を設定
 t2ovfCnt += 1;
 if (t2ovfCnt >= timeout) {
  timeoutFlg = true;    // タイムアウトフラグをセット
  t2ovfCnt = t2ovfCnt - timeout;
 }
}

このように10msの割り込み周期を得るのに、
64usクロックで102」をTCNTに設定されています。
   ※これだと、ちょっと狂ってしまうのです。
この設定102前後の様子を見てみましょう。

 クロックが64us=15.625kHzの時。
 TCNT設定値    割り込み周期
  254 (256-254) 2パルス 0.128ms 7.8125kHz
  253 (256-253) 3パルス 0.192ms 5.208kHz
  :
  102     154パルス 9.856ms 101.46Hz
  101     155パルス 9.920ms 100.81Hz
  100     156パルス 9.984ms 100.16Hz
   99     157パルス 10.048ms 99.52Hz

15.625kHzから100Hz(10ms)を得るのですから
分周比の近似値は「156」。
ということは「256-156」で、割り込みの時に「100
をTCNTに書き込まなくてはなりません。
102だと、10msより短い周期になってしまいます。

※テストプログラム PB2~PB5ポートに観察用パルスを出してます。
  ・ダウンロード - test_tm2_ovf.txt


※インプットキャプチャーとオーバーフローのタイミングは
  ↓で出しています。
Arduino デューティー計測のためのインプットキャプチャータイミング

| | コメント (0)

修理:オンボード・スイッチングレギュレータ回路

とある制御回路基板の修理依頼。
  「電源が入らない」という故障内容。
AC100V供給のスイッチングレギュレータ回路が載っていて、
それが動いてません。
電源投入の一瞬だけ出力電圧が出るんですが、すぐにドロップ。

制御部回路に外から電源を加えるとマイコンや周辺が動き出した
んで、一安心。
電源部の故障だと判断できます。

長年稼働したスイッチングレギュレータ、故障原因のほとんど
がコンデンサの劣化。
AC100V入力の平滑コンデンサか出力段の平滑コンデンサ、これを
交換すれば動き始めることが多いかと。

でもダメでした。
どんな制御回路かと追いかけてみたら・・・
富士電機製の電源制御ICが使われていました。
型番が分かればデータシートが引っ張り出せます。
  ※便利な世の中です。

11_20211224152101

データシートのサンプル回路を見て「おっ」と気になった
のが、ICの制御電圧を供給している回路。
スイッチングトランスからダイオードを通って平滑して
ICのVCCに電源供給。
これを追いかけたら電解コンデンサが使われていました。

22_20211224152201

21_20211224152201
23_20211224152201

この小さなコンデンサ、これがアウトになってました。
交換で復活。
めでたしめでたし。

で、ここからが昔の話。
2018年9月20日:バッファロー WiFiルーター 「WHR-G301N」故障
この故障電源。
一次と二次の平滑コンデンサは正常でした。
この時の写真をよく見ると、もう一つ小さな電解コンデンサが
基板に載ってます。
この電源、ひょっとするとこれが悪かったのかも。
捨ててしまったんで、もう確かめられませんが、
今度、似たような修理が来た時は注意しておこうということで。

 

| | コメント (0)

ダイソーの新型ニッ水電池:LEXEL社製 LOOPER

『で』は「でんでんタウン」ので 今冬はこの手袋で
この記事のコメントに、「ダイソーの新型のニッケル水素電池」の話が
出ていました。  (ざっと1ヶ月前)
近所にあるダイソー(徒歩自転車範囲で2軒ある)で気をつけ
ていたわけなんですが、今日 ダイソー大今里店 で発見しました。
単3のを2コ買っておきました。

31_20211224142201

3つ作ってある「JIS C8708:2019充放電テスト回路」、今は
3つとも埋まってましてどれかの実験が終わらなくては次へ
進めません。
AMAZON BASICS の60%放電」か「enevolt」の次でしょうか。
  (650cycほど)          (まだ70cycほど)
タミヤの「NEO CHAMP 950mAh」は頑張って欲しいし。

 

| | コメント (3)

DHT11を使った出窓の結露対策用ヒータ制御回路 65%設定で

2021年12月20日のは「湿度60%」でヒーターをオンしていま
したが、電気代を抑える目的で設定を「湿度65%」にしてみま
した。
Cap035
これでも結露は出ませんでしたので(夜中も、トイレに起きた
ときにチェック)しばらくこれで運転します。

ヒータがオンしてから次にオフする湿度、センサー(DHT11)の
性能、「最小桁が1%」ということもあり「3%のヒステリシス」を
設けてあります。
65%でオンしたら、オフするのは62%まで下がった時になります。
今回のグラフ「▼▼▼▼」のところでその様子が現れています。

※温度も湿度も出窓内、適当に置いたセンサーでの様子です。
 サーミスタを窓ガラスに接触させて、外の温度の影響を計って
 みると面白いかも・・・です。

| | コメント (0)

2021年12月23日 (木)

リコー「GXR+S10」カメラ用バッテリ

リコー「GXR+S10」がやってきた 中古だけど
がやってきて、とくに問題なく使えてますんで、予備電池を購入。
「DB-90」という型番で1700mAh。
リコーの純正品にしました。
20_20211223164001

さっそく、その内部抵抗(充電後に)を測定。
  ・交流定電流方式で電池の内部抵抗を計ってみる

中古品に付いてきたのが「98mΩ」で新品購入のが「95mΩ」で
大きくな違いはありませんでした。

カメラ用リチウム電池、「そろそろあかんなぁ」となった
内部抵抗の上昇、オリンパスのE-520で使っている「BLM-1」が、
初期「150mΩ台」、それが12年で「220mΩ台」に。

リコーGX100の「DB-60」が7年で145mΩ→210mΩに。
今回のDB-90、今までのより内部抵抗がちょいと低くなって
います。
保護回路が違うのかなぁ。

| | コメント (0)

2021年12月20日 (月)

フライス屋の気まぐれ「文鎮」 その2・・異形で

---【完売御礼】---

文鎮:ハンダ付け補助ツール の製造元、佐藤テック君が
端材が見つかったんで」ということで作ってきてくれ
ました。

C62
最重量級V字形溝の異形です。

  重さ:855グラム
  厚み:23mm
  幅 :63mm
  長さ:100mm

C63

フライス仕上げの「鉄」。
   ※油まみれ
    塗装やメッキは無し
M5のタップ穴が5カ所
  (ハンダ付けに使うというより、アンビルがわりの用途かも)

お代は「2600円で」と。
  (タップの穴あけが面倒だったんでと)

M5のキャップボルトとワッシャ、それにゴム板
を添付します。
  ※ゴム板はクリップ口に接着すると、部品を
   はさみこむ時に安定します。
  ※65mm幅のクリップはご自身で入手してくだ
   さい。

この一つだけ。 早い者勝ちです。
  ※クリックポストだと破損が心配なので
   レターパックライト(370円)でお送りします。

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



| | コメント (2)

フライス屋の気まぐれ「文鎮」 その1

・・・「シェフの気まぐれサラダ」なんてジャンルが
    あるということで、それにならって・・・

---【完売御礼】---

文鎮:ハンダ付け補助ツール の製造元、佐藤テック君が
端材が出たんで」ということで作ってきてくれました。

C61

この一つだけ。 早い者勝ちです。
  重さ:435グラム
  厚み:15mm
  幅 :57mm
  長さ:65mm

フライス仕上げの「鉄」。
   ※油まみれ
    塗装やメッキは無し
    六面の直角・平行はばっちしと
M5のタップ穴が2カ所。

お代は「1500円で」と

M5のキャップボルトとワッシャ、それにゴム板
を添付します。
  ※クリップ口に接着すると、部品をはさみこむ時に
   安定します。
  ※65mm幅のクリップはご自身で入手してくだ
   さい。
  ※クリックポスト(198円)でお送りします。

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

| | コメント (2)

DHT11を使った出窓の結露対策用ヒータ制御回路 60%設定で

土曜日の朝からヒータオン湿度を「60%」にして、2日間記録
してみました。
開始時はなかなかの結露で窓の内側下部は真っ白に。
H21-1
しばらくすると、結露が解消。
お昼になって暖かくなってきたということもあり、
時間軸7時間経過あたりで60%を切ってヒータが
オフになっている様子が見えています。
日曜の昼(時間軸30くらい)もヒーターの断続を
繰り返しています。
その部分を拡大すると・・・
H21-2
湿度変化によるヒーターの断続制御が見えています。
青線の値、温度軸で3がヒーターオン。
0でヒーターオフで、1が制御出力はオンだけれども、
ヒータを仕込んだアルミチャンネルに接触させた
サーミスタが過温検出して、ハードで(コンパレータで)
ヒータをオフしている様子です。

制御湿度の設定、どのくらいで結露が消えるのかを
試してみなくちゃなりません。
   ※電気代節約のため
とりあえず「60%」設定だと、結露ゼロということが判明。
今夜は「62%」にして試してみます。

※センサーの位置を自由にできるよう、50cmばかりの
 ケーブルを付けて制御回路と離すようにしました。
 今回は出窓の床から15cm、窓ガラスから20cmほど離れた
 ところに置いてみました。
 このあたりも、結露防止に影響があるかと。

| | コメント (0)

リコー「GXR+S10」がやってきた 中古だけど

不調のリコーGX100 の代替機としてほぼ同じ撮影能力の
「GXR+S10」を入手しました。

51_20211220084901

左が現用GX100。 右がGXR+S10。
一回りでかい。

「レンズキャップなし」のが安価で出ていたので、買ってみました。
バッテリと充電器は付属。
52_20211220084901

53_20211220084901

件のGX100、メモリーカードの抜き差しも調子が悪く
なってきてます。
状況によってはピンセットが必要に。
メモリーカードを差し込んで、もう一押すと出てくる機構、
これが不調。
指先で引っ張り出せない時があるんです。

新しいカメラで、「ブツの接写」はできるようになりました。
時間があるときにでもGX100の解体を試してみます。

ISOを上げた時のノイズ、GX100よりずいぶんましな
感じです。
GX100でのISO400は非常用でしたから。

| | コメント (0)

2021年12月15日 (水)

リコーのデジカメ「GX100」、ADJレバーの右が効かなくなったぁ


今日の夕刻、「ピコピコ・スイッチ」 の表示画面をGX100
撮ろうとした時・・・
ブラウン管画面なんで、露出を「Mモード」(F値、シャッター速度一定)
にしたら・・・
シャッター速度を設定する「ADJレバー」の「→」スイッチが作動不良に。
ADJレバーの「←」しか反応しなくなっちゃいました。

C11_20211215180401

「←」だとシャッター速度がどんどん長く。
一周して戻るというふうにはなっていません。
困ったぞ・・・

オリンパスのE-520やE-M1mk2を持ち出すのもなぁ。
マクロレンズ、持ってないし。

| | コメント (3)

『ピコピコ・スイッチ』制御回路

2021年12月13日:ひさしぶりのイベントだったけど・・・「ピコピコ・スイッチ」破損
2014年07月21日:イベント用ゲーム機「ピコピコ・スイッチ」、スイッチ破損!
モノを仕事場に持ち込んで、状態を観察。
21_20211215110301
スイッチ本体には「TKC」 という刻印。
22_20211215110301
これだけひどい目に会いながら、接触状態は非常に安定していました。

「ピコピコ・スイッチ」の制御ボックス、中味はこんなの。
23_20211215110301

マイコンは「AT90S2313」。
ATtiny2313の前身。

電源部を除いた回路図。
Pisw1a  
10MHzのセラロックがクロック。
表示と音出しにテレビを活用。

制御プログラムはアセンブラ。
ROM容量が足りなくて、EEPROM部にブザー報知音程データを
置いています。
  ・ダウンロード - pikosw1.zip


表示画面の様子
・電源オン
G1
・スタンバイ
G2
・開始 3秒間秒読み
G3
・計測開始 10秒間
G4
・結果表示
G5
(NEC製9inchi グリーンモニターで)

 

 

| | コメント (0)

2021年12月14日 (火)

enevolt単3(2150mAh) 新JISでの充放電実験開始

パナソニックeneloopスタンダード単3「BK-3MCC」60%(72分)放電 2800回で終了
で、JIS C8708:2019充放電実験回路のアキができたんで、
2021年10月21日:イジめるニッ水電池がやってきた。
「enevolt 2150mAh(min 2100mAh)」のイジメを始めました。
実験回路に設定した電池の定格容量はminの2100mAhじゃなく、
大きな文字で書いている「2150mAh」で。
55_20211214135701

初回の0.2C放電(5時間率)から5回目の充放電までをグラフに
してみました。
Cap005_20211214135701
初回ですんで、やってきたまま、未充電状態からの放電です。
電池に2021年3月の記述がありましたんで、9ヶ月放置と
いうところです。
放電0.2C(430mA)で、定格だと5時間=300分
それが3時間18分=198分で放電終止電圧1.0Vに達しました。

その後の0.5Cでの放電は1時間45分くらいですんで、
定格容量の80%ほどになっています。

50サイクル目の0.2C放電がどうなるか、データが出るまで
もうちょいお待ちください。
  ※なにせ時間がかかります。

<電池あれこれ>

| | コメント (0)

2021年12月13日 (月)

DHT11を使った出窓の結露対策用ヒータ制御回路試験

DHT11を使った出窓の結露対策用ヒータ制御回路 、10日(金)に
完成したんで、2日間、出窓の中に放置してみました。
  ※まだヒーターにはつながず、
   制御は無しで
1分間隔でこんなデータがシリアルで出力されます。
それを記録。
   1 19.4 59.0 3
   2 18.9 61.0 3
   3 18.6 62.0 3
    :
 3286 15.0 63.0 3
 3287 15.0 63.0 3
 3288 15.0 62.0 3
今朝、データを回収。

gnuplotでグラフに。
#gnuplt 5.2で
set term wxt 0
set grid
set colorsequence classic
set title "DHT11温湿度センサー テスト 2021-12-13"
set y2tics
set xrange [0:60] # 時間軸
set yrange [0:40] # 温度
set y2range [40:80] # 湿度
set xlabel "経過時間(時)"
set ylabel "温度(℃)"
set y2label "湿度(%)"
set grid
set xtics 6
set ytics 5
set y2tics 5
#set y2tics format "%3.2f"
set key right top
#set label "0.5C充電時間(分)" at 810,126
#set label "0.5C放電時間(分)" at 810,66
#set label "充電停止電圧(V)右目盛" at 810,36
#set label "2400サイクル目までの変化" at 1650,54
plot "h02.txt" using ($1/60):2 with lines lw 2 ti "温度(℃)" ,\
"h02.txt" using ($1/60):3 with lines lw 2 ti "湿度(%)" axes x1y2 ,\
"h02.txt" using ($1/60):($4*1) with lines lw 2 ti "on/off"

Cap004

湿度データ(緑線)が1%単位なので、デコボコ。
湿度だけスムージングすると、なめらかに。
"h02.txt" using ($1/60):3 with lines lw 2 ti "湿度(%)" smooth bezier axes x1y2 ,\
Cap003_20211213120401
ずっと暖かい天気が続いていましたんで、まだ結露は出ていません。
今週から寒くなるということで、今晩からヒーター制御を始めてみます。
ヒーターオンする湿度、とりあえず「70%」で試してみます。

 

| | コメント (0)

ひさしぶりのイベントだったけど・・・「ピコピコ・スイッチ」破損

昨日、ひさしぶりの地域のイベントが小学校でありました。
いつもの時期だと「もちつき」なんですが「学校での飲食不可」
ということで、ゲーム大会なら子供達に楽しんでもらえるだろ
うと、PTAさんと地域の青少年指導員が協力。
昼過ぎから子供達と遊びました。
  ※マスクをしているということで
   「大声トライアル」 は×。

そんな中、イベントの途中で自作ゲーム機の一つが使えなく
なるというアクシデントが発生。
  ・イベント用ゲーム機「ピコピコ・スイッチ」、スイッチ破損!
これが2014年の夏。

この時はスイッチそのものの破損(戻らなくなる)でしたが
今回は樹脂ケース(家庭用の食材入れ)がアウトに。
  (2011年から使っている)

Aa21_20211213103701

子供達、叩き過ぎ。
左右のボタンを交互に押したら得点が入るという仕掛け。
実際は押すというより叩くという操作になっちゃいます。
競技時間は10秒。
10秒間に何回左右交互に「押せる」かを競うわけです。
左右交互にというのがミソで、同じボタンの2度押しは点に
なりません。
ウマい子は軽く100点を突破します。

イベントでの子供達の数、小学校の生徒数+地域の子供達、
中学生もやってくるし、大人も「やらして」ですんで、
毎回300~400人には使ってもらってるでしょうか。

仮に1スイッチあたり50回の操作としたら、1日で2万プッシュ
くらいの回数になります。
それが10年分溜まって、ケースのほうが破損しちゃった
という次第でした。

 

| | コメント (1)

2021年12月11日 (土)

Arduinoのスケッチ floatの乗算と除算の速度

DHT11を使った出窓の結露対策用ヒータ制御回路
このスケッチでちょい気になるところがあったので
確かめてみました。

420行目の
  humi_w = d;         //湿度確定(wordで)
  humi_f = (float)d / 10.0;  // 0.1%で

436行目の
  temp_w = d;         // 温度確定(wordで)
  temp_f = (float)d / 10.0;  // 0.1℃で

ここで整数値を1/10して0.1%あるいは0.1℃単位の
floatに湿度と温度を変換しています。
「1/10」するのに割り算を使ったわけです。
floatですので「* 0.1」という乗算でも同じ結果が
出ます。

しかし・・・実行速度が違うのでは? っと気になり
始めたのです。
整数の演算では、乗算命令のあるATmega328Pが圧倒的に
有利です。
整数の除算、16bit÷16bitでもどうしても遅くなります。
割り込み処理の中では使いたくありません。
  ※1/2や1/16、1/64は右シフトで割り算が
   できるので高速処理になります。

さて、Arduino-UNOでのfloat、どんな具合かちょっと
確かめてみました。
こんなスケッチで
  ・ダウンロード - test_float1.txt

起動すると、
  Num 1 2>   入力プロンプトが出ますんで、
2つの数値をスペースあるいはコンマで区切って
入力します。小数点、マイナスもOK。
例えば、
  Num 1 2>234 0.1    数値を2つ入力

1つ目に2つ目を乗じた値g1と、「1/n」した2つ目で
割った値g2(結果的にnを乗じてる)を出力します。

  g1:23.4000 g2:23.4000  乗算と1/nした値を除算

それをオシロスコープで見られるようにパルスを出力しました。
パルスはポートの直叩きでDigitalWriteのような遅延はありません。
この値だと、こんな具合。
Aa11_20211211154701

乗算が10μS弱、除算が30μsちょいと約3倍の差がありました。
ということで、乗算に直せる切りの良い数字は乗算で、という
ことが処理時間の短縮につながります。

このスケッチ、1行入力した文字列から数値を分離するstrtok
の使い方あたりが何かの参考になるでしょうか。

// 1行文字受信処理
    if(f_rxok){         // CR入力あり
     f_rxok = 0;
     n = 0;
     s = strtok(rx_bff, " ,");  // 最初の文字分離
     while(s != NULL){
      s_in[n] = s;
      s = strtok(NULL, " ,");  // 次文字分離
      n++;
      if(n >= 2) break;     // 2文字まで
     }
     if(n >= 2){          // 2文字ok ?
// 文字→floatへ
     :

分離した文字列は、文字列をコピーするのではなく、「nul」終端
され分離された元文字列の先頭アドレスをポインタとして記録し
ています。

| | コメント (0)

2021年12月10日 (金)

DHT11を使った出窓の結露対策用ヒータ制御回路

出窓の結露対策用ヒータ制御回路 のセンサーがおかしなことに
なっているのに気付いたのが11月29日。
湿度センサー「DHT11」がやってきた・・・けど!? を乗り越えて、
やっと回路と「スケッチ」が完成形に。
こんな回路に落ち着きました。
H11_20211210154301

ユニバーサル基板に組んだ回路を密閉容器に入れてます。
センサーは外出し。
11_20211210154401
  ※前に作ってあった回路を手直ししただけ。
   ガラス窓越しですが、長い間日光に当たって
   いたんで、以前のケースはモロモロに。
   ひどい状態の写真を撮る前に捨てちゃいました。
   珍しい状態(現象出現に時間がかかる)はなんでも
   記録に残さないかんかなぁ。

DHT11が出すデータ列はそのパルス幅で1/0が決まります。
今回のスケッチは、その測定に0.5μs(2MHz)クロックにした
タイマー1の「インプットキャプチャ」機能を使いました。
↓エッジ間のパルス数から1/0を判断しています。

Lレベル50μsの後に、データが0なら25μsのHパルス、
データが1なら70μsのHパルスとなっていて、その中間の
100μs、タイマー1のクロック数で200を判断の基準にして
1/0を判定しています。

オシロで見たその様子です。
B001_20211210154501

20ms幅の開始信号の後、DHT11からデータ列が出ています。
データ取得の間、割り込みは禁止していませんので、
1ms周期のタイマー割り込みとA/D変換割り込みは普通に
走っています。

データ列の終端付近を拡大してみると、
B002_20211210154501
DHT11のパルス間隔は勝手にハード(タイマー1)がカウントし
てくれますので、ソフトは↓エッジが来るのを待つだけ。

Adafruitのライブラリだと、ソフトでループカウンタを回すので
割り込み禁止にしておかないと、カウント値が狂います。
インプットキャプチャを使ってのパルスカウントはこんな時に
ためにあるようなものです。

最後の方で、整数の湿度データをfloatへ変換をしていますが、
その処理時間がどんなものかが見えています。

さて、実際に出窓へ置いて試運転です。
センサーの寿命がどんなものかが気になります。

※現在のスケッチ(txtにしています)
    ダウンロード - humidity3.txt

 

| | コメント (0)

2021年12月 9日 (木)

パナソニックeneloopスタンダード単3「BK-3MCC」60%(72分)放電 2800回で終了

パナソニックeneloopスタンダード単3「BK-3MCC」、
新JISの寿命測定で放電時間を60%(72分)にすると
どうなるかを試したましたが、今朝、2800回に到達
これでこのテストを終わります

充放電時間と充電終止電圧をグラフにしたのがこれ。
Cap2800
50サイクルごとに1.0Vまでの放電を行うので、その直後の
充電時間が長くなって赤線の飛び出しが現れています。

スタートが、
2020年11月7日:富士通の白 HR-3UTC(1900mAh) 新JIS充放電実験1000サイクルで終了
この続きでしたので、1年と1ヶ月。
長かった。
  テスト回路が自動でやってくれるんですが、
  400サイクルごとにデータ保存をしなくちゃ
  なりません。

先月は、充電での「偽の-ΔV」が出現していました。
2021年11月18日:パナソニックeneloopスタンダード単3「BK-3MCC」60%(72分)放電で偽の-ΔV出現

これが新JISでの寿命試験。
2020年10月10日:パナソニックeneloopスタンダード単3「BK-3MCC」新JISでの寿命実験終了
0.5C放電で元気なのは600サイクルあたりまで。
72分放電だと、2400サイクルあたりから劣化
(放電が72分の手前で終わる)が目立ち始めます。
ということは、サイクル数でざっと4倍になったわけ
ですが、放電容量が60%ですので、それだけで1.7倍は
増えてもらわなくちゃいけません。
ということは、寿命の延びはおよそ2.4倍というところ
でしょうか。

さすがのエネループ・スタンダード。
突然死せず、寿命を全うした感じです。

※参考
「放電深度を60%から100%にしたら寿命が10~15%に減る」

<電池あれこれ>

| | コメント (0)

焼け跡にプリントパターンが見える

不二サッシ製電動窓開閉コントローラの修理依頼。
あらま珍しい「8749」で制御されていました。
22_20211209091701
   ケースへの刻印から1996年製のようでした

故障原因は、電源部の焼損。
  過大な電源電圧が加わった?
  100V仕様なのに、工事のミスか事故で200Vを
  入れてもたのような?

ひどいのがモータ駆動用の19V系。
LM317の周辺が焼損。
41_20211209092101
51Ωの抵抗がはじけてます。
42_20211209092101
ガラエポの基板が焦げてしまって、アラまな状態に。

部品を外して様子を見ると・・・
抵抗の周囲に信号線が走っていて、そのラインもろとも
焼失しています。
43_20211209092101
焼けの巻き添えを食って、6本の信号パターンが断線していました。
44_20211209092101
このままではつなげないので、信号線の入りと出の場所
をチェックして、焼けた部分でつなぐのではなく、
出入りの元をジャンパーすることで対処しました。
同一面のつなぎは良いんですが、基板の上と下をつながな
ければならない信号がありました。
基板サイズがケースギリギリなんで、ジャンパー線は基板の
外を回せません。
そこで、スルーホールに入ったハンダを抜いて、できた穴に
ジャンパー線を貫通させるという手法で対処。

「うまく動いた」とメールを頂戴して、一件落着。
手強い修理案件でした。

マイコンやモータ駆動回路が生きていたんでうまく
いったわけでして。
マイコンの信号とパワー段がフォトカプラで絶縁されて
いたんが幸いしたのでしょう。


| | コメント (0)

2021年12月 7日 (火)

湿度センサー「DHT11」がやってきた・・・けど!?

注文していた湿度センサー「DHT11」、届いたのはこれ。
ASAIR」というメーカーのようです。

31_20211207155001
 ・https://www.aosong.com/en/productslist-4.html
 ・https://www.aosong.com/en/products-21.html

※前記事:出窓の結露対策用ヒータ制御回路

さっそくArduino-UNOで試運転。
  ライブラリは使わず自前のルーチンで。
すると・・・いくつかの疑問が・・・

(1) DHT11の応答速度

「読み出し速度は1秒以上」なんて書かれてるページが
あります。
センサーとしての応答速度と通信速度とは違う
わけでして。
試しに0.2秒サイクルでデータを読み出してみました。
上がってくる5バイトのデータ、10進と16進で示します。

・加熱しながら0.2秒サイクルで読み出し
- 湿度- -温度- sum ---HEXで------
15  0 40  3 58  0F 00 28 03 3A
14  0 41  2 57  0E 00 29 02 39 …0.0 41.2℃
14  0 41  2 57  0E 00 29 02 39   2
14  0 41  2 57  0E 00 29 02 39   4
14  0 41  2 57  0E 00 29 02 39   6
14  0 41  2 57  0E 00 29 02 39   8
14  0 41  2 57  0E 00 29 02 39  1.0
14  0 41  9 64  0E 00 29 09 40 …0.0 41.9℃
14  0 41  9 64  0E 00 29 09 40   2
14  0 41  9 64  0E 00 29 09 40   4
14  0 41  9 64  0E 00 29 09 40   6
14  0 41  9 64  0E 00 29 09 40   8
14  0 41  9 64  0E 00 29 09 40  1.0
14  0 42  6 62  0E 00 2A 06 3E …0.0 42.6℃
14  0 42  6 62  0E 00 2A 06 3E   2
14  0 42  6 62  0E 00 2A 06 3E   4
14  0 42  6 62  0E 00 2A 06 3E   6
  ※センサーのそばにハンダゴテを置いて加熱。
   湿度がえらい低く出てます。
「1.2秒」周期で湿度+温度データが更新されてました。
※追記
これ↑、私の勘違いを含んでいました。
6回のうちの5回はACK応答なしでタイムアウトエラー
生じていました。
つまり直前に読み取ったデータを出力していたのです。
AdafruitのDHTライブラリではMIN_INTERVALとして2秒が
取られています。
その間の呼び出しは、読み出しは行わずに前回値を使うという
処理になっています。


(2) 0.1℃の桁まで温度が出てるぞ!

あちこちにあるDHT11のデータシート、湿度と温度のデータの
分解能、湿度が1%、温度が1℃と記されています。
しかし、このデータ列を見ると、4つ目のデータが「0.1℃」
の数字になっています。
  (2つ目の湿度データは00が続く)
スケッチのサンプル、floatで処理しているようなんで、
分解能を気にしていないのか、はてさて。

(3) ライブラリはどうしてる?

よく使われているライブラリ「DHT.cpp」を見ますと・・・
DHT11はこんな処理に。

  case DHT11:
   f = data[2];      …3つ目が1℃桁
   if (data[3] & 0x80) {  …4つ目のMSBがマイナス符号
    f = -1 - f;      …★1
   }
   f += (data[3] & 0x0f) * 0.1; …4つ目の下位4bitが0.1℃

「0.1℃」が出ているのは間違いないようです。
で、★1のところに疑問。 データシートに出ていない、
マイナスの処理、これでエエん?

湿度が高分解能なDHT22の温度処理を見ると、

  case DHT22:
   f = ((word)(data[2] & 0x7F)) << 8 | data[3]; ★2
   f *= 0.1;   …3つ目が1℃で4つ目が0.1℃
   if (data[2] & 0x80) {  …3つ目のMSBが1なら
    f *= -1;       …マイナスに
   }

このDHT22のマイナス処理はなるほど。
★2の所、3つ目の8bitデータはちゃんとマスクしてあります。

ということで、温度がマイナスはどうなる? が疑問です。


(4) 氷点下は?

実データを見るため、センサーをビニール袋に入れて
サンハヤトの「Q-REI」で冷やしてみました。
  シリアル出力は2秒サイクル。

- 湿度- -温度- sum ---HEXで------
27  0  4  9 40  1B 00 04 09 28 … 4.9℃ 下降
27  0  4  1 32  1B 00 04 01 20 … 4.1℃
27  0  3  3 33  1B 00 03 03 21 … 3.3℃
27  0  2  5 34  1B 00 02 05 22 … 2.5℃
27  0  1  7 35  1B 00 01 07 23 … 1.7℃
27  0  0  9 36  1B 00 00 09 24 … 0.9℃
27  0  0  2 29  1B 00 00 02 1D … 0.2℃
28  0  0 133 161  1C 00 00 85 A1 …-0.5℃ ★3
28  0  1 129 158  1C 00 01 81 9E …-1.1℃
29  0  1 136 166  1D 00 01 88 A6 …-1.8℃
29  0  2 132 163  1D 00 02 84 A3 …-2.4℃
30  0  3 128 161  1E 00 03 80 A1 …-3.0℃
   :  :
45  0  2 132 179  2D 00 02 84 B3 …-2.4℃ 上昇
47  0  2 129 178  2F 00 02 81 B2 …-2.1℃
48  0  1 136 185  30 00 01 88 B9 …-1.8℃
49  0  1 132 182  31 00 01 84 B6 …-1.4℃
50  0  1 129 180  32 00 01 81 B4 …-1.1℃
52  0  0 135 187  34 00 00 87 BB …-0.7℃
53  0  0 132 185  35 00 00 84 B9 …-0.4℃
54  0  0 129 183  36 00 00 81 B7 …-0.1℃ ★4
55  0  0  3 58  37 00 00 03 3A … 0.3℃
57  0  0  7 64  39 00 00 07 40 … 0.7℃
58  0  1  1 60  3A 00 01 01 3C … 1.1℃
59  0  1  4 64  3B 00 01 04 40 … 1.4℃

温度が下降、上昇する速度から0℃付近の挙動が
見えてきます。
 (1) 3つ目と4つ目のLSBを加算してxx.x℃に
 (2) 4つ目のMSBが1ならマイナスに
ということでよさそうです。
しかし、★1の手順だと、「-0.1℃」を読んだときは、
「(-1 - 0) + 0.1」「-0.9℃」になっちゃいます。

DHT11の0.1℃処理、後からデータが出ているのが
分かったんで付け足した感じでしょうか。
プラスのことしか考えなかったんで、それで、ミスを!

「ライブラリをうかつに信じたらアカンぞ!」っという
ことになっちゃいました。

DHT11の処理をこのライブラリでしたことがある方、
氷点下の処理を見直さなくちゃいけません。
1℃内で温度の上昇と下降が逆になってしまいます。


※こんなスケッチです (完成形じゃありません)
  ・ダウンロード - test_hdt2.txt

タイマー1のインプットキャプチャ機能を使って
DHT11からのパルス幅を読んでいます。
  ※ソース、DHTとする所、間違ってHDTとなってます。
   次の手直しで直します。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
※追記 DHT11、氷点下の処理 (↑の★1)

 case DHT11:
  f = data[2];     …1℃桁
  if (data[3] & 0x80) { …MSBがマイナス符号
   f = -1 - f;     …★1
  }
  f += (data[3] & 0x0f) * 0.1; …下位4bitが0.1℃

おそらく・・・★1は最小桁が1℃の時の処理だったかと。

温度が降下して「 4 3 2 1 0℃」と来た次、
データが「0」のままマイナスになって「-0℃
が出現します。
それを嫌って、「4 3 2 1 0 -1 -2」となる
ようにするための処理が「f = -1 - f;」だったと
推測できます。

それが、「0.1℃桁」まで出ているのが分かり
DHT11の機能アップ?)、それじゃと追加したのが
  f += (data[3] & 0x0f) * 0.1;

しかし、マイナス温度を考えていなかったのがミス。
DHT22と同じように、先に1℃桁と0.1℃桁を合成してから
マイナスを判断して処理しなければなりません。

気が付かない原因・・・
  ・昔からあるライブラリにミスは無いだろう。
  ・みんな、使っているし。
  ・動いているし。
  ・欲しいのは湿度。 温度はおまけ。
  ・DHT11で氷点下なんて使わないぜ。
  ・1℃桁が合ってればヨシ!

現場ネコ」みたいになってきました。


※追記  氷点下実験の様子
32_20211208113001
センサーをビニール袋に入れ、その上からQ-REIを噴射。

40.0% -19.6 28 00 13 86 C1
40.0% -19.7 28 00 13 87 C2
40.0% -19.7 28 00 13 87 C2
40.0% -19.8 28 00 13 88 C3
40.0% -19.8 28 00 13 88 C3
40.0% -19.9 28 00 13 89 C4
40.0% -20.0 28 00 14 80 BC
40.0% -20.0 28 00 14 80 BC  最低到達点
   :
「-20.0℃」まで到達。 ここで数値が張り付きました。


※追記 氷点下の温度数値が★1の処理だと狂う様子

 正          ★1の計算方法
 1.9 [20 00 01 09 2A ]  1.9 ↓温度下降
 1.4 [20 00 01 04 25 ]  1.4
 0.8 [21 00 00 08 29 ]  0.8
 0.3 [21 00 00 03 24 ]  0.3 プラスはok
-0.2 [21 00 00 82 A3 ]  -0.8 マイナスがアウト
-0.6 [21 00 00 86 A7 ]  -0.4
-1.0 [21 00 01 80 A2 ]  -2.0
-1.4 [21 00 01 84 A6 ]  -1.6
-1.8 [21 00 01 88 AA ]  -1.2
-2.1 [22 00 02 81 A5 ]  -2.9
-2.5 [22 00 02 85 A9 ]  -2.5
-2.8 [22 00 02 88 AC ]  -2.2 実際は0.2℃の変化なのに
-3.0 [22 00 03 80 A5 ]  -4.0 1.8℃も飛んじゃっている。
     :
-2.3 [31 00 02 83 B6 ]  -2.7 ↓温度上昇
-2.1 [32 00 02 81 B5 ]  -2.9
-1.8 [34 00 01 88 BD ]  -1.2
-1.5 [35 00 01 85 BB ]  -1.5
-1.3 [37 00 01 83 BB ]  -1.7
-1.1 [39 00 01 81 BB ]  -1.9 0.3の変化が
-0.8 [3A 00 00 88 C2 ]  -0.2  1.7に。
-0.5 [3C 00 00 85 C1 ]  -0.5
-0.3 [3D 00 00 83 C0 ]  -0.7
 0.0 [3F 00 00 00 3F ]  0.0 0はok
 0.3 [40 00 00 03 43 ]  0.3 プラス復帰でokに

こんな変化になるんで、0℃を中心に温度がゆっくり変わったとき、
「なんかマイナスがおかしい」と気づきそうです。

「センサーがおかしい」とか「回路がおかしい」「精度が出てない」
じゃなく、「ソフトがバグってる」というのがこの原因です。

 DHT11センサーで
 AdafruitのDHTライブラリを使って
 氷点下を計る
という条件なので、異常に気付くかどうか・・・微妙でしょうね。


※完成形へ
2021年12月10日:DHT11を使った出窓の結露対策用ヒータ制御回路

※追記
2022年3月10日:温湿度センサーDHT11、ライブラリを使うと氷点下の温度がおかしくなるぞ!

| | コメント (3)

2021年12月 6日 (月)

湿度センサー駆動回路 「センサ・インターフェージング No1」から

抵抗値変化型の湿度センサー、手持ちの本の中に資料はないものか
と探しましたら、出てきました。

CQ出版 トラ技別冊「センサ・インターフェージング No1」。
T11_20211206084001
1982年の本。 書架に眠っていました。
T12_20211206084101

「湿度センサ活用編」という章があって、当時のセンサーなど
があれこれ紹介されています。
今のように、湿度・温度がデジタル値として出てくるのは
無く、アナログ値。
T13_20211206084101

ちょいと関連しそうな回路をピックアップしてみます。

・ダイオードで対数変換。
T14

・コンパレータでレベル分けして湿度警報表示
T15

・抵抗値変化を周波数変化に
T16
  ※先日の三角波発振回路と同じ

・単電源回路で
T17

抵抗値変化型の湿度センサー、40年前でも考え方は
同じだっということを再認識。

| | コメント (0)

2021年12月 5日 (日)

タクトスイッチを押してみる …何万回も その5 続き

2021年12月2日:タクトスイッチを押してみる …何万回も その5
で、オムロンのB3F-1062を押し始めました。

今朝、仕事場に来たら72万回ちょいで停止してました。
新しいスケッチでは
  ・デジタル入力オフ検出1回で異常停止。
  ・接触状態見るA/D値の記録は、2以上の時に
   リングバッファに記録。
  ・リングバッファの大きさは1365個でF-RAMに記録。

今回記録していたのは、310個で
2以上のA/D値は全数記録していました。

グラフ化するとこんな具合。
Cap303

36万回と46万回あたりに大きくなったA/D値が出現。
しかし、「デジタル入力オフ」という異常事態は
起こっていませんでした。

その後、順調に「押し」が進みます。
しかし、72万4千89回目で、前触れなしに「オフ」が発生
数値で見ると、こんな具合です。
左側がサイクル数。
右がA/D値。 オフだとA/D値フルスケールに。

  :
 465137  4
 465143  3
 465205  6    前徴なく、
 724089 1023  1 ←突然オフに
         新しいスケッチは1回
         だけで異常停止。
 724090  11  その後、走らせたら
 724091 110  大きなA/D値が続く。
 724092 303
 724093 203
 724094 381
 724095  12
 724096  10
 724097  4  しかし、これ以降、
 724098  0   「0」に復帰。
  :

オフ検出で停止していたのですが、サイクルを
再開するとしばらく異常値が続いた後、再び「0」
になって、「まだまだっ」っという感じになっ
ちゃいました。

タクトスイッチの寿命、単純に「押す」だけでは
測れないようです。
湿気など、周囲環境の影響のほうが大きいのかも。

B3F-1062のスペックを見ますと、
 定格負荷 DC3~24V 1~50mA(抵抗負荷)
 接点材質 銀メッキ
 作動力  1.47N
 耐久性  30万回以上(1.47Nタイプ)
と記されています。

今回のテストでは、負荷はATmega328Pの内蔵プルアップ抵抗で
およそ30kΩ、0.17mA。
この負荷なら「金メッキタイプ(0.1~50mA)」を使えという
ことになるんでしょうが・・・

| | コメント (0)

2021年12月 4日 (土)

湿度センサーHS15P駆動回路・案

出窓の結露対策用ヒータ制御回路
 ・・・結露の季節、早いこと修理しなくちゃなりません。

湿度センサーに、
  ■HS15P 湿度センサーの簡易動作実験■
を使ってみたいな(結露環境下でも長持ちしそう)ということで、
正確な駆動パルスをハード的に出すのに、こんなスケッチを
試してみました。
  Arduino-UNOでワンショットパルスを出力

しかし、これ↑で回路を作るとなると、ちょいと大げさに。
  ■HS15P 湿度センサーの簡易動作実験 Arduino版■
ではこんな具合に、非常にシンプルにこんな回路構成です。
Aa1_20211204104201
Arduino-UNOのマイコン、ATmega328Pの足にセンサーを
直付け。
余計な部品は不要です。

しかし「ワンショットパルス案」だと、こんな具合に
アナログスイッチやゲートICが必要になってきます。

Aa2_20211204104201  
一定時間、センサー抵抗を通してコンデンサを充電し、
その電圧から抵抗値を計算しようという目論見ですが、
センサーを交流駆動する必要から、流しただけと同じ
電流を反対向きに流しておかなくてはなりません。
それが2つのANDゲートです。

さらに、コンデンサを放電して、センサー両端をゼロボルト
にするアナログスイッチの駆動回路が必要です。
元の回路に比べると、ちょっとたいそう。

そんな中、あれこれ調べているとこんなページが見つかり
ました。
  ・http://einstlab.web.fc2.com/hum/hum2.html

センサーの解説に、こんな記述が。(改行位置を変えています)

  対数変換を簡略化するため、過渡現象を利用した
  湿度回路を見かけます。
  発想としては素晴らしいのですが、残念ながら
  致命的な問題があります。
  それは、過渡現象を利用するために、直流を掛け
  ていることです。
  常にプラスの電圧のため、高分子が電気分解して
  劣化します。マイナスの電圧がかかっていません。
  そのため短寿命です。

センサーを通してコンデンサを充放電するわけですから、
+/-になっているのでは・・・っと。
センサーの寿命にどのくらいの影響があるのか。

あれこれ思うと・・・欲しいのはセンサーの抵抗値。
だったら、こんな発振回路を作って、センサー抵抗を
時定数にすればいかがだろうかと・・・

Aa3_20211204104201

R2とR3の比をうまく選べば、「t = C・R1」で周期が
出てきます。
コンデンサを0.1μFにすれば、
  1MΩで 100ms = 10Hz
  100kΩで10ms = 100Hz
  10kΩで 1ms = 1kHz
  1kΩで 0.1ms = 10kHz
  500Ωで0.05ms = 20kHz
数十kHz~1Hzの周波数カウンタ(あるいは周期測定回路)
を用いれば、センサーの抵抗変化範囲をカバーできるの
ではないでしょか。
  ※抵抗値の小さい所(高湿度)では、コンパレータ出力の
   駆動能力と積分回路に使うOP-AMPの周波数特性で
   制限が出てきます。

出窓の結露対策用ヒーター制御回路の復旧、早くしなくちゃ
なりません。
12月4日にコメントしましたように、
湿度センサー「DHT11」を手配しました。
取り急ぎ、DHT11で復旧する予定で、「HS15P」のあれこれは、
また今度にということにします。

 

| | コメント (0)

2021年12月 2日 (木)

タクトスイッチを押してみる …何万回も その5

こんな回路に落ち着きました。

Cc01

Cc1_20211202155101
オムロンのタクトスイッチ「B3F-1062」を付けて
「押してみる」を始めています。

Cc2_20211202155101
  ボタンとの間隔、この写真↑よりもうちょい
  縮めて(接近させて)います。

タクトスイッチを押してみる …何万回も その4 続き
EEPROM、 2kバイトと4kバイトの間には壁がある (24LC16で)
EEPROM I2Cのクロックを早くすると・・・

接触不良はプルアップ付デジタル入力のon/offで
見ていますが、接触状態(接触抵抗)はA/D入力を記録します。
そのためのメモリーがF-RAM。
Cc3_20211202155101
FM24C64。 64kビット。 8kバイト。
リングバッファにして直近の1365データ記録できます。
  on/off回数4バイトと2バイトのA/D値で
  6バイトが1データ。

こんなスケッチです。
EEPROM、F-RAMアクセスの所が参考になるかと。
 ・ダウンロード - sw_life_test4.txt
    (テキストファイルにしてます)


 

| | コメント (2)

『元素創造』93~118番元素を作った科学者達

図書館で借りてきた本。
  ・元素創造 93~118番元素を作った科学者達
11_20211202134701

著者 キット・チャップマン
翻訳 渡辺 正

原題が、
  Superheavy: Making and Breaking the Periodic Table

元本の表紙のほうが良いような。
12_20211202134901

むちゃ面白いです。
内容紹介は、ネットの検索でどうぞ。
例えば、紀伊國屋書店

・元素命名競争
・不正
・核種採取のためキノコ雲に突入したジェット機


| | コメント (0)

Arduino UNOでワンショットパルスを出力

出窓の結露対策で使う「湿度センサー」 をあれこれ調べていて、
『高機能なものより単純なもののほうが良いのではないか?』
っと思い始めました。
ネットを探しますと、センサーのから湿度を引き出す手順を
丁寧に解説されていたのが、このページ。
 ■HS15P 湿度センサーの簡易動作実験■
 ■HS15P 湿度センサーの簡易動作実験 Arduino版■

・湿度でセンサーの抵抗値が変化。
・センサーに直流を加えるのは×。
   1kHzくらいのACで測定と
・湿度による抵抗値の変化が大。
   数百Ω~数メガΩ
・温度による補正が必要。

示されている回路では、センサーにコンデンサを直列につなぎ、
その充電時間とコンデンサ両端電圧から抵抗値を測定しようと
いうもの。
充電時間を変えることで、大きなレンジ幅が得られます。

Arduino用のスケッチを拝見しました。

気になったのが充電時間を決めているタイマーの処置。
Arduinoのソフトウェアタイマー「delayMicroseconds()
を割り込み禁止状態で使われています。
パルスの出力(実際にはハイインピーダンスとH/L出力の切り替え)
も digitalWrite() と pinMode()。
   ※回路は簡単になります。
これでは「遅く」なってしまい、私の好みの処理ではありません。
delay()やdelayMicroseconds()を使うと、
その待ち時間の間は何もできませんから。

必要なのは正確な時間のワンショットパルス
そこで、ちょっとトライ。
・ATmega328Pのタイマー1を利用して、ハード的に
 パルスを発生させる。
・タイマー1のOC1A出力を用いる。
・設定範囲は1μ秒単位で最大4,096,000μ秒。

昔々のタイマーIC、82536840では簡単にできた
ワンショットタイマー、ATmega328Pではちょいと面倒です。

こんな考え方です。
Photo_20211202113201

使うレジスタはTCNT1、OCR1A以外にこれらを駆使します。

・クロックの停止とプリスケーラの設定
A12_20211202113201

・OC1A出力のH/L設定
A11_20211202113201

・OC1A強制出力 (コンペアマッチを待たずに出力)
A13_20211202113201
・プリスケーラのリセット
A14_20211202114101

こんなパルスが得られます。
A21_20211202113201

4000μ秒まではプリスケーラ無しで16MHzをカウント。
それより長いパルスはプリスケーラを切り替えながら
16bitの範囲でOCR1Aレジスタでパルス幅を設定します。

この処理のメリット。
・パルス出力中も他のことができる。
・割り込みも有効。

サンプルスケッチはキー入力した値(μ秒)でワンショットパルス
を発生させます。

   ・ダウンロード - pulse_tm1.txt
      (テキストファイルにしてます)

出力中に新たな値を入れた時は、先のパルス出力を中断して
新しいパルスを出します。
「0」だと出力停止です。
定常的なパルス出力はPWMやアウトプットコンペアで出力
できますが、ワンショットとなるとなかなか面倒な手順に
なりました。

PWMではOCR1Aが2重バッファになり、即値での更新ができなく
なるので、ワンショットには使えませんでした。

湿度計回路に使うには、充放電のためのアナログスイッチを
外付けしなくてはなりません。
しかし、ハード的に正確な時間のパルスが使えるということで、
いかがでしょうか。

| | コメント (0)

« 2021年11月 | トップページ | 2022年1月 »