« 2022年5月 | トップページ | 2022年7月 »

2022年6月

2022年6月30日 (木)

AVRマイコン、ややこしいぞ。

アトメルからマイクロチップになったせいなのでしょうか、
AVRマイコンの品揃えが増えてややこしくなっています。
  ※私の情報収集が追いついてい
   ないだけなんでしょうけど・・・

・ATmega328PB
Arduino-UNOのチップがATmega328P
28pinのDIPなんで便利なんですが、ATmega328PBという
のが出てます。
パッケージは32pinのQFP。
拡張されたのが、
  16bitタイマー 1つが3つに
  シリアル   1つが2つに (SPI,I2Cも)
そして安価に。
16bitタイマーの増設はありがたい。
ラジオペンチさんとこの、
  Arduino のタイマー1 インプットキャプチャでパルス幅を精密測定
が、外付けハードなしでできそう。

・ATtiny824

14pinのAVRマイコン。
これまでATtiny24、44、84を使ってた。
それが、ATtiny441、841になって、シリアルとタイマーが
2つに増えて便利に。

そして、今回気付いたのが、安価版のATtiny824
残念なのが外付け水晶発振(16MHzなどの高周波用)ができない。
  ※32.768kHzの時計用水晶は可
さらに、もうひとつ安いのが、ATtiny814
ただしシリアルは1つ。

「安価」なのは魅力だけど、高周波水晶発振は必要かと思う。

※追記

発振子が使える従来のマイコンが便利か、
安価だけど外部クロックが欲しい時は発振器が
必要なマイコン。
どっちがエエんでしょうね。

Arduino-UNOでも使われている16MHzの発振子、
Digi-Keyをちょいと見てみると・・・ 金額はざっと
・胴長の水晶 HC-49U   100円
・足長の水晶 HC-49U/S  50円
・面実装水晶      60円
・C付足有セラミック   50円
・C付面実装セラミック  40円

・足有発振器      400円
・面実装発振器     180円

「発振子」ならマイコンの電源電圧で使えますが、
発振器となると、使える電源電圧に注意が必要です。
「定格5V」と記されているのもありますし、
「1.6~3.6V」と5Vでは使えないものもあります。

水晶発振子が使えないマイコン、安価になっても
安定したクロックが欲しい時は外部からのクロック
供給が必要です。
その発振器の価格がプラスされ、電源に気を使うと
いう事態になっちゃいます。
どうしたものでしょね。
まぁ、適材適所ということで。
  ※従来品の安定供給が心配か・・・

※追記
14pinのATtiny441 ATtiny841、入力ポートのプルアップ方法
が変わっているので要注意です。
今までと同じやり方だとプルアップしてくれません。

同じ14pinのATtiny24,44,84は昔ながらの方法。
DDRレジスタを0にして入力にしたとき、PORT
レジスタが1ならプルアップがオンという、これまで
どおりのAVRマイコン。

ところが、441、841はPUEA、PUEBというプルアップ
指定専用のレジスタが追加になっています。
  ※SBI、CBI命令の範囲外アドレス。

| | コメント (0)

2022年6月29日 (水)

デジタルテスター「FLUKE 87IV」の赤外線通信

IrDA絡みでひょんなことから見つけたFLUKEのデジタルテスター
model 87IVの赤外線通信

このテスターを買って22年ぶりの快挙!
こりゃ、使えそうです。

まず、資料。
 ・EEVblog Electronics Community Forum ≫Fluke 87IV please whisper in my IR
この中で通信コマンドが記された資料が示されていました。
 ・http://www.pewa.de/DATENBLATT/DBL_FL_FL187-9-89IV_BEFEHLSSATZ_ENGLISCH.PDF
   ※これが見つかったから試せたわけで!

こちらでは、こんな具合に対向させて通信してみました。
F10
テスター側の赤外線ポートは頭。
楕円形の黒い窓です。

記事内の写真、テスター内部見ますと、TIの「UART←→IrDA」
インターフェースIC「TIR1000」が写っています。
  ※このIC、昔からあったんですな。

この↓記事でテスターをバラして中を見ています。
 ・2018年3月19日:FLUKE 87IV、切り替えダイヤルが回らない!
よく見ると・・・
IrDAモジュールとTIR1000が写っています。
当時の写真を引っ張り出してきました。
F11_20220629091901
「HPL837」。 この下側がボディの「窓」。

F12

右隣は発振器かなぁ。
「FPX7?37」と読めます。

※検索で
  ・マルチメーターの歴史

※桁数表記「3・1/2桁」について
フルークのデジタルテスターをあれこれ検索していたら、
このページ、
  ・デジタルマルチメータの基礎と概要 (第1回) 「DMMの歴史と変遷」
に「桁数表記」の話が出てます。

~~~~~~~~~~~~~~~~~~~~~~~~~
  参考ですが、DMMの桁数について触れます。
  前述したように、DMMはハンドヘルドタイプの
  3.5桁からベンチトップの8.5桁のものまで多種
  多彩です。
  最大の数値表示が、1999のものも4000のものも、
  3.5桁や3-1/2などの呼び方をしますが、正確を
  期す(底数10の対数で解く)と、
    1999表示は3.3桁、
    4000表示は3.6桁、
    6000表示は3.8桁、
    9999表示でフル4桁
  ということになります。
  しかし、この表現は、一般的にはあまり
  使われていないようです。
~~~~~~~~~~~~~~~~~~~~~~~~~

log 1999」は「3.3008…」。 確かに3.3桁っぽいです。
しかし、「1999」表示のテスターは、「0~+1999」
じゃなくマイナス側も含めて「-1999~+1999」を
表示してくれます。
ということで、正の値だけでlog変換して桁数を
出すのは間違っているような。

※過去記事
  ・2011年01月31日:1/2桁とは
  ・2011年08月10日:1/2桁とは 「セグメント説」


| | コメント (2)

2022年6月28日 (火)

「UART←→IrDA」変換IC、MCP2122のクロック供給 #3 トラブル遭遇!

記事
「UART←→IrDA」変換IC、MCP2122のクロック供給 #2
への6月27日のコメントで書いたのですが、MCP2122のリセットが
もうひとつ不安定なのです。

↑の記事で公開した制御ソフトでは、
 ・MCP2122のリセット入力はプルダウン。
 ・電源投入
 ・クロック発生用マイコンが起動するまでは
  プルダウンの働きでリセットはLレベルを維持。
 ・マイコン起動でクロック発生。
 ・その後、リセット端子をHにしてリセット解除。

これでうまく行くはずなんですが、リセット解除後、
受信パルスが復調されない(RXDが出力されない)状態
になってしまうのです。
  ※うまく行くときもある。
  ※再リセットしたら動き始める。

で、あれこれ動きを調べてみました。
  ※結果を先に。
リセット端子の抵抗、プルダウンではなくプルアップ
するとうまく行くようだ。

ということは、
 ・電源オン
 ・マイコンのリセット期間中はプルアップなので
  リセット端子がHに。
 ・リセット終了後、クロック発生とともに
  ポートの初期化でリセット端子はLに。
 ・しばらくしてリセットをHにして解除。

MCP2122のリセット入力をいったんHにして
からL(リセット状態)に。
その後、Hにしてリセットを解除。
するとうまいこと動き始めるのです。

あれこれ試した回路がこれらです。

Bc1
リセットのためのLレベルの遅延を行うより、
プルアップ抵抗1本だけのほうが、動く率が
高いのです。

通常のCR遅延や電圧検出ICを使ったリセット回路は
あきません。
こういった回路では、電源オン後にリセット端子を
GNDに落としてリセット操作しないと、まともに動き
ませんでした。

さて、いったい何なんでしょ。
電源はUSBのコネクタから供給していますので、
物理的なコネクタの差し込み操作で電源が入ります。
このあたりが、悪さをしてるのでしょうか?

※こんな回路にしました。
Bec2
  ※前のとの違いは「R2」。

クロック発生にマイコンを使ていましたので、リセット
信号の発生は自由にできます。

普通なら「L→H」で負論理のリセット状態から
Hにするとリセット解除となります。
  ※リセットって普通、これ。
   リセットICもこの動作。

それが、「L→H」といったんリセット解除してから
もう一度「L→H」とパルスを与えるようにしなければ
ならないようなのです。
  ※このHパルス、Lパルスの時間も関係するようで
   短いとダメでした。

---リセットのタイミング---

※プルアップ抵抗を使って
Bc4

※プルダウンしたた時のために、「L→H」パルスを追加
Bc5

※これでデジタルテスター「FLUKE 87IV」と赤外線
 通信できました。
赤外線でコマンドを送れば、切り替えダイヤルで設定した
レンジでのデータを送り返してくれます。
こんな感じ

送:ID<cr>
受:0
受:FLUKE 87, V1.01,7xxxxx   xxxは製品番号

送:QM<cr>
受:0
受:QM,-00.017 mV DC

50cmくらい離しても大丈夫な様子。
「QM」送出を繰り返せば、データをログできます。


※うまくいくリセットタイミング
Ba002

※プルダウン抵抗だとLが連続してダメ。
Ba001
  リセットL時間を変えてもダメ。
  クロックの供給タイミングを後にしてもダメ。

※単純には、あれこれするより、プルアップ抵抗だけの
 ほうがうまくいった。
Ba003
  クロック供給開始直後、1bitだけのLパルスが出現。

※製作した回路
Fa1
ダイソーで売ってた小さなプラケースに入るように。
あれこれ試すのに、ジャンパーピンを付けてます。

赤外線は半透明のケースを通り抜けるようで、
IrDAモジュールのところに穴は開けてません。
Fa2


※参考メモ ATtiny25やATtiny85のISP接続。
Bc6
Fa3
Fa4
ターゲット回路のICソケットに差し込んで、
インサーキットプログラムできるようにする
ためのアダプタ。



| | コメント (0)

2022年6月27日 (月)

「UART←→IrDA」変換IC、MCP2122を検索すると

「MCP2122」を検索すると、こんな出来合いの回路が
出てきます。
本家、マイクロチップのデモ基板。
 ・MCP212XEV-DB MCP212X DEVELOPER'S DAUGHTER BOARD
 ・MCP212XDM MCP2120/22 DEVELOPER'S BOARD

実験用アダプタ基板。
 ・MCP2122 INFRARED ENCODER/DECODER
 ・MIKROE-2871

どちらも通信ボーレートは115.2kBPS固定。

TIR1000」のは見つかりませんね。
でもこんなのが。
 ・https://www.eevblog.com/forum/testgear/fluke-87iv-please-whisper-in-my-ir-p/

フルークのテスターの改造記事。
FLUKE-87IV」といや、使ってるぞい!
 ・2018年3月19日:FLUKE 87IV、切り替えダイヤルが回らない!
 ・2019年6月27日:FLUKE 87IV、抵抗レンジが安定しない

| | コメント (0)

2022年6月25日 (土)

CPU.BACHさんから、お届け物が・・・

IrDAつながりということで、「テレフンケン」社製の
赤外LEDとPINダイオードが届きました。
   tks CPU.BACHさん

そうとう昔の。
21_20220625160401
23_20220625160401
ビニール袋に貼り付けたセロハンテープも変色・変質。
データシート(コピー)のロゴマークもコピーの
繰り返しでしょう、こんな具合に。
22_20220625160401

なにより「なにが届いたの?」っと思ったのが封筒の切手。
11_20220625160401
中央に「星の王子さま」。

過去にもこんな切手が。
2020年6月23日:「星の王子さま」の切手
2015年02月12日:スヌーピーの切手


| | コメント (1)

AVRマイコンのSUT、BODヒューズ

Arduino-UNOのようにIPLがプログラムされた出来合いの
マイコンを使う時はなにも考えなくて済むのですが、
「UART←→IrDA」変換IC、MCP2122のクロック供給 #2
でのATtiny13AやATtiny25~85のようにAVRマイコンを
「裸」のままプログラムする時に忘れてはならないのが
ヒューズビットの書き換えです。

  ※これをしないままだと・・・
    「動いたけど、なんか遅いぞ
    「なにやら、音が低い
   なんてことが生じます。
   これはCKDIV8ヒューズ
   デフォルトである1/8になったまま
   だから。  よくある話です。

今回、ATtiny13Aをゴソゴソしたので、
BODレベル」と「SUT:Start up time」の様子を調べて
おきました。

この設定、二つのヒューズデータに分かれています。
Ee31
Ee32

BODが電圧低下検出回路の電圧設定。
Ee1_20220625101601

SUT
ではBOD有効、Fast rising powerか
Slowly rising powerかを切り替えます。
Ee2_20220625101601

この表を見て・・・疑問が生じませんか?
「SUT 0,0」だと「BOD enabel」。
ところが「0,1」や「1,0」になるとrising powerのことが
書かれていますが、BODがどうなるか記されていません。

この表の読み方として、
  ・BODを使いたい時は「SUT 0,0」に。
     これはこう読めます。

  ・SUT 0,1や1,0だとBODはオフになるのか、
   それともオンにしてくれるのか?
     表からの情報はありません。

SUT 0,1 1,0でどうなるのかを実際に確かめてみました。

上側の波形はタイマーコンペアマッチ出力(153.6kHz出力)。
初期設定でパルスを出しています。
下側が電源電圧。 ゆっくり5Vまで上昇させてからオフ。

BODのヒューズは4.3Vに設定。
まず、SUT 0,0で「BOD enable」に設定。
Ee41

電源電圧がBODに到達後、リセットが解除されて
すぐにプログラムが走り始め、出力パルスが出ています。

次にSUT 1,0にしてSlowly rising powerに。
Ee42

電源電圧がBODに到達後、少し遅れてから
リセットが解除されて走り始めている様子が見えます。

つまり、SUT 0,1 1,0でも設定したBODが有効になる
ということで、BODは無視されるのかという心配は無用
なりました。

| | コメント (0)

CQ出版『現代版 真空管入門』

CQ出版の『現代版 真空管入門
  サブタイトルが「球で試す小宇宙」
    2022年5月初版の最新本
大阪市立図書館に入荷しています。

Ss11_20220625090801

「球」といやオーディオ・アンプの話ばかりですが、
CQ出版の「CQ Ham Radio」の掲載記事をまとめられた
本ということで、無線での球の話が主体。
それも大出力じゃなく、手軽に手の届く領域です。
SSBの話もありませんし、1960~1970年台を振り返って
的なお話しになっています。

| | コメント (0)

2022年6月24日 (金)

「UART←→IrDA」変換IC、MCP2122のクロック供給 #2

MCP2122のクロック供給(ボーレートの16倍の周波数)、8ピン・マイコンで
処理しようとすると、こんな感じかな。

まず、外部発振子が使える「ATtiny25~85」。
Cal20
「4.9152MHz」の発振子から素直に153.6kHzが作れます。
水晶でもセラロックでもOKというところ。

内部クロックしかダメな「ATtiny13A」の場合、
「工場出荷」状態のクロック精度が「10%」。
Cal12
ちょっときびしい。

ATtiny13Aだと、OSCCAL値を変えることでクロック周波数が
変化します。
Cal11
代表特性だと、9.6MHzで90くらいでしょうか。
  ※しかし、これがけっこう変動

そこで・・・まず問題。
9.6MHzから153.6kHzを出したいんだけれど・・・割り切れない。
クロック 9.6MHz÷153.6kHz = 62.5
デューティ50%の方形波駆動なのでタイマーの設定は1/62。
  9.6MHz÷62 = 154.839kHz
解決方法として、内蔵クロックを9.6MHzにするのではなく、
  153.6kHz × 62 = 9.5232MHz
  153.6kHz × 64 = 9.8304MHz
に調整すると1/62あるいは1/64で誤差が出なくなる
分周比が使えるようになります。
  9.8304MHzはATtiny25で図示した
  4.9152MHzの倍の周波数。

問題はこの校正方法。
こんな回路にしてみました。
Cal21
小さい字で書いていますが、
TP2に「1kHzパルス」を入れ込んでリセットしたら、
1kHzの周期を数えてそこから9.8304MHz近傍の
OSCCAL値を出そうという試み。
結果は内蔵フラッシュROMに自分書きして保存。
ATtiny13Aでの「Self-programming」は初体験。
  ※何かいけないようなことをしている気分・・・
EEPROMでも良かったのですが、
  プログラムの中に置いたデータを書き換えるのは
  どうすれば?
  ATtiny13AのSPM命令、どう使うんだ?
  SPMCSRレジスタ、制御の手順は?
の検証です。
ATtiny13AのROMメモリーは、わずかに1kバイト。
制御はとうぜんですが、アセンブラー。
  なかなか楽しい。

※ATtiny13A制御のソースファイル(圧縮)
  ・ダウンロード - irda_x16_1.zip
ちょっと手直しして↓
  ・ダウンロード - irda_x16_1a.zip

※ATtiny25を使う場合 (XTAL必要)
  ・ダウンロード - irda_tn25_1.zip

     ご自由にどうぞ。

・ヒューズの設定はソースファイル内に記しています。
   正しく設定しないと動きません。

・ATtiny25だとプログラムはわずか58バイト。
 RAMエリアの初期化ルーチンもありません。

・AVRマイコン・ATtiny13Aのフラッシュメモリ
 「自己プログラミング」の例題になるかと思います。
 この時しか使わない「AVRマイコンのSPM命令」
 その使い方のサンプルにどうぞ。
 アセンブラで書けばマイコンへ命令している
 様子がよくわかるかと。
 「C」はいろんな関数があって便利なんですが、
 あれこれ余計にところ(いろんなマイコンに対応)まで
 記述されていて「ほんまはどう動いてんねん!?」が
 隠れてしまうことがありますんで、困ったものです。

そうそう。「自己プログラミング」する時は
  AVRマイコンのSUT、BODヒューズ
の中の「SELFPRGEN」ヒューズを「許可=0に」しなくちゃ
いけません。

※1kHzクロックパルス供給によるOSCCALの校正実行
校正処理、こんなタイミングです。
2秒ほどで終了。
Cal11_20220625113301
OSCCALに設定する値を0から順に+1。(maxは127)
その時の1kHz↓エッジパルス間隔をソフトのループでカウント。
目標9.8304MHzと処理サイクル数から欲しいカウント値を
越えたところで停止。
今のと直前のカウント値を見て、どちらのOSCCAL設定を
使うかを決めています。
オシロ波形、PB4に出してる確認パルスを数えれば、
どれだけOSCCALを変えたかが分かります。
その値をフラッシュROMに記録(自己プログラミング)して、
次回の起動はその値を使ってという流れになります。
  フラッシュROMの空きには、そのあたりの
  情報も書いてますんで、読み出せば校正の結果が
  見えます。

※実験(デバッグ)してる様子
12_20220625155501
SOPのATtiny13Aを4つ用意して(DIP変換基板にハンダ)
あれこれと。

※ATtiny13Aでの校正値の取得方法
 MCP2122への供給クロックは153.6kHz。
 153.6kHz* 64 = 9.8304MHz。←これに合わせ込む

(1) OSCCALを0から順に+1。 maxは127。
(2) INT0入力1kHzパルスの↓エッジ間の時間を
  ループカンタで計測。
(3) 目標の「9.8304MHz」は1msで=9830クロック。
  そして、ループのサイクル数が7。
(4) 9830/7で「1404」が判定するカウント値。
(5) この値と同じか大きくなったらOCSCALの
  インクリメントを停止。
(6) 直前のカウント値と停止したカウント値、
  どちらが「1404」に近いかを判断して、
  どちらのOSCCALを使うか(今のか直前のか)
  を判断。
(7) 結果をフラッシュROM(0x01F0~0x01FF)に残す。

・フラッシュROMに残すデータ(wordで示す)

0x01F0: 1kHz校正データ これをOSCCALとして使う。(a)
    CNT_H検出時のOSCCALデータ。
0x01F1: 工場出荷時のOSCCALLデータ。
    0x00
0x01F2: 1kHzチェックカウンタ L側。
    カウント越え直前のカウント値
0x01F3: 1kHzチェックカウンタ H側。
    1404カウントを越えた時のカウント値

   ※欲しいのは(a)のデータだけ。
    あとはチェック用。

・校正例 チップ#2
工場出荷時のOSCCAL値    65
工場出荷時OSCCALでの周波数 149.9kHz
校正後のOSCCAL       67
校正後の周波数       153.1kHz
直前のカウント値      1397 ←1404に近い
直前のOSCCAL値       67  これを使う
検出カウント値       1413
検出OSCCAL値        68

・チップ#4
工場出荷時のOSCCAL値    77
工場出荷時OSCCALでの周波数 142.0kHz
校正後のOSCCAL       84
校正後の周波数       153.3kHz
直前のカウント値      1392
直前のOSCCAL値       83
検出カウント値       1407 ←1404に近い
検出のOSCCAL値       84  これを使う

 

| | コメント (1)

2022年6月22日 (水)

みんな「レールスプリッタ」に魅せられるんだ

秋月のチャージポンプIC(ICL7660互換品)
TJ7660N のデータシートを見てたら、こんな
レールスプリッタの回路例が出てました。
Aa1_20220622111301
このICで負電圧が出せるだから、普通に±電源にしたらっと
思うんですが・・・

  ・検索:レールスプリッタ

電源入力V+とVout(-出力)間に15Vを入れて、
GND間とで±7.5Vを得ようということのようです。

本家、インターシルのデータシートにも出ていました。

Aa2_20220622111401

※関連過去記事
1/2Vcc生成回路のコンデンサ
4046・VCO回路の直線性改善方法

| | コメント (1)

2022年6月20日 (月)

「UART←→IrDA」変換IC、MCP2122のクロック供給

秋月の赤外光送受信モジュール(AE-RPM851A)を使ってみる(IrDAを試す)
では、MCP2122へのクロック供給(ボーレートの1/16の周波数)
に「74HC4060:14bit バイナリカウンタ」を使いました。
「4060」の前段には発振回路を構成できるゲートが
仕込まれているので、4000番C-MOSの頃から、便利に
使っています。

  ※時計用の32.768kHz水晶から2Hzを取り出せますので
    (1Hzを出すには残念ながら1bit不足)
   計時用パルスを得るのに便利です。

秋月の赤外光送受信モジュール(AE-RPM851A)を使ってみる(IrDAを試す) #2
この時は、Arduino-UNOのタイマー2:OC2Aからクロックを供給。
Atmega-328Pの内部レジスタを直触りして「16MHz / 104」の
方形波を得ています。

Arduinoで用意された関数では、この手の「ハード直いじり」は
できません。
近いところは「tone()」ですが、
  Arduino-UNOでtone()の挙動を調べる

↑このようにソフトでパルスを出していますので、安定した
方形波は出てきません。(高い周波数も無理)


【余談】
AVRマイコンで覚えておいて欲しいテクニック
AVRマイコンの出力ポート、
  ポート入力レジスタに1を書くと出力がトグルする
という機能があるのです。

いわゆるLチカ。 代表はこれでしょか。
void loop() {
  digitalWrite(LED_PIN, HIGH);
  delay( 1000 );
  digitalWrite(LED_PIN, LOW);
  delay( 1000 );
}

delay()を使わず、あるタイミングで点滅させると
なると、こんな感じ。
  digitalWrite(LED_PIN, !digitalRead(LED_PIN));

LEDがつながったピンのH/Lを読んで、それを反転出力する
というまっとうな方法です。
  ※負荷が重くって(電流の流し過ぎ)ポート入力の
   H/L読み出しをミスると、誤作動。

そして、レジスタの直書きを許容すると、
  PORTB ^= (1 << PB5); // LEDはPB5
となります。
これは、
  出力ポートの状態を読んで
  特定ビットをXORで反転
  出力ポートに書きもどし
と、3つの命令に分けて処理します。
  ※AVRマイコン、I/Oレジスタのビット反転を
   1命令で行う命令を持っていないので。
ということは、割り込み処理と競合するポートなら
「アトミック操作」(割込禁止、割込再開)の手順が
不可欠です。

さて、ここからが覚えておいて欲しい内容。
AVRマイコンのデータシート、「I/Oポート」のところを
読むと「Toggling the Pin」という項目をが見つかります。
「PINレジスタに1を書くと、ピンの出力がトグルする」
と解説されています。

PINレジスタはポートの入力レジスタ。
それへの書き込みなんで違和感がありますが、AVRマイコン
特有の機能です。

SBI命令が使えるので「2クロック」で処理ができます。
割り込みとの競合も無関係。

LEDの点滅だと、
  PINB |= (1 << PB5); // LEDはPB5

コンパイラはこんなアセンブラの命令を出します。
  SBI PINB,5  // PINBのbit5をセットせよ

ポートの反転が1命令でできるのです。

さて、今回の本題。
「UART←→IrDA」変換IC、MCP2122のクロック供給を
どうしたものか・・・

・74HC4060を使うとシンプルだが、MCP2122のリセット
 操作に電源電圧検出ICがいる。
・8ピンのマイコンを使ってクロック供給してもOKだが
 マイコン内蔵のクロックの精度だとちょい不安。
・クロック精度はせめてセラミック発振子級で。
  もちろん水晶でもOK。
・マイコンを使ったら、マイコン内蔵の電源電圧低下
 検出が使えてリセットICが不要になる。

AVRマイコンにしろPICマイコンにしろ、
 ・外付け水晶(セラミック発振子)が使用可能。
 ・内蔵タイマーから直接方形波を出力するポートがある。
 ・電源電圧低下検出機能(BOD)あり。
という条件かと。

電波リモコンTele Auto FX-1修理:300kHzセラロック発振子がアウト
ここではATtiny13Aの内蔵クロックを利用しました。
  ※単品の修理だし、精度はあまり要求されなかったから

マイコンの内蔵クロック、その周波数を微調できる機能を
持っているものがあります。
昔々、「内蔵クロック周波数の自動補正」を試したことが
ありました。
  ・クロック周波数を読む。
    (特定ポートに出すパルスの)
  ・許容範囲外なら発振周波数補正値をちょいと
   触って、フラッシュROMを再書き込み。
  ・周波数の動き具合を見て補正値を増減。
こんなことを試したことがあります。
しかし・・・
電源電圧や温度での周波数変動を考えると、
「発振子を使うほうが間違いないでぇ」となって、
やめちゃいました。

今回のクロック供給、さて、どうしたものかと・・・

MCP2122は8ピンのICですが、シリーズのMCP2120(14pin)
だと、発振回路が内蔵されています。
ボーレートに合った水晶をつなげばOK。
9600BPSなら3.6848MHzあるいは7.3728MHz
  ※ボーレートの384倍あるいは768倍を切り替え
このICだと発振回路の心配はなくなります。
  ※リセット回路は必要


| | コメント (1)

2022年6月18日 (土)

秋月の赤外光送受信モジュール(AE-RPM851A)を使ってみる(IrDAを試す) #2

秋月の赤外光送受信モジュール(AE-RPM851A)を使ってみる(IrDAを試す)の続き。
この図のように、Arduino-UNOで送受を行ってみました。
Uu1
  ※相手は Tera Term につないだUSBシリアル変換モジュール
   での赤外線。 ↑図の右端にあたる。

Ab11

こんなArduino-UNOのスケッチで試しました。
  ダウンロード - irda_test1.txt
    ※ファイルタイプを.inoではなく.txtにしています。

・シリアル通信は9600BPSで。
・リセット起動後、setupでクロックパルスを出力。
・MCP2122をリセット(リセット出力をLに)。
   プルダウン抵抗を入れているので、ポートが
   入力状態では(初期化前)リセット状態。
・0.5秒後、MCP2122のリセットを解除。
・0.1秒後、起動メッセージ「IrDA test」を出力。
・その後、プロンプト(>)を出力して受信開始。
   0x0d(CR)が来るまで1行文字入力。
   文字ごとにエコーバック。
   0x08(BS)で1文字消去。
   バッファに入れるのはisprint()文字だけ。
・CRが来たら、
   バッファ文字列を1行出力。
   その文字を16進で出力。
   文字入力に戻る。

ということで、起動するとこんな感じでTera Termに文字が
帰ってきます。

Test IrDA  ←Arduinoが出力
>1234 abc  ←Tera Termで入力した文字をエコーバック
1 2 3 4 a b c  ←CRで1行+16進出力
31 32 33 34 20 61 62 63
>      ←次の文字待ち

確かめたかったのは、入力文字のエコーバック。
受信してすぐにその文字をエコーバックしてるのですが、
それがどうだ!(抜けないのか?)を見たかったのです。
大丈夫でした。
赤外線を使った無手順の双方向通信(同時は光の
衝突で無理)、MCP2122でうまく行きそうです。

※文字 0x40 = '@'を送った時の様子
Dd000

※文字 0x55 = 'U'を送った時の様子
Dd001

うまいこと「エコーバック」した文字が返っています。


| | コメント (0)

2022年6月17日 (金)

秋月の赤外光送受信モジュール(AE-RPM851A)を使ってみる(IrDAを試す)

制御装置本体にパラメータ設定用リモコンをシリアル通信で
つないでいる機器があります。
リモコンのスイッチ操作に応答して本体がデータ(文字列)を
送ってくるというもので、リモコンはそれを液晶表示(文字だけ)
しています。
データ量も多くないので通信速度は9600BPSにしてあります。

本体とリモコンのつなぎはコネクタ。
通常運転時、リモコンは不要。
取り外せるようにしてあるのです。

そんな装置に要望が。
 ・パラメータを再設定したいときはリモコンが必要。
 ・リモコンをつなぐのにコネクタを挿すのが面倒。
 ・設定後に外すのも面倒。
 ・無線か赤外線でリモコン操作できればうれしいなぁ。
    ※はい。ごもっともです

そして、
 ・動いている今のプログラムは触りたくない・・・
    ※無線だと制御コマンドのやりとり
     があれこれ必要になっちゃいます。

ということで、赤外線通信を試してみようということに
なりました。

試しに買ってきたのはこれ。
秋月電子の「赤外光トランシーバ(送受信)モジュール
「AE-RPM851A」
11_20220617101901

12_20220617101901

「赤外線で」というと、家電製品のリモコンで使われる
38kHzでの変調光が頭に浮かびます。
しかし「RPM851A」のブロック図を見ると、38kHzは
どこにも出てきません。

A12_20220617102001

「IrDA」の制御、例えばこの装置に使っている制御マイコン
ルネサスRX220 だと、IrDAの機能を搭載していて、ハードウェア
マニュアルにはこんな波形図が出てきます。
A11_20220617102001

UARTの出力から赤外モジュールのLEDを発光させるパルス
を作って、受光パルスからUARTへのシリアル信号を復元
しています。
「IrDA機能を搭載」ということは、これをしてくれる
ハードウェアが入っているということなんでしょう。

でも、マイコンにIrDA機能が載ってなかった時は
どうすれば?
ということで調べてみました。

UART←→IrDA」をやってくれるチップが見つかりました。

単純そうな「8pin」で探しますと・・・
まず、TIの TIR1000

  ※昔の50MHz AMトランシーバーを彷彿させる
   エエ型番です。

そしてマイクロチップの MCP2122

※注意!
二つは同じ信号ピン配置ですが、5番ピンの「リセット」、
この論理が異なります。
  TIのはHでリセット
  マイクロチップのはLでリセットです。

そして、マイクロチップの図には「Hアクティブ」のように
描かれていますんで要注意です。
A23_20220617102201
A24
  ※データシートの動作解説には「Lでリセット」を
   ちゃんと記されています。

TIのデータシートを見ると、制御タイミングがもう
ちょっと詳しくわかります。

  ・送信時 TXDからTXIR(LED駆動信号)を

A21_20220617102401
  ・受信時 RXIRからRX(UARTシリアルデータ)を

A22_20220617102401

とりあえずこんな回路で試運転。
A31_20220617102601
   (クリックで拡大↑)

・マイクロチップのMCP2122を使う。
・2セット作って試す。
・PCどうしで通信。
・PCとはUSBで接続。 (5V電源供給もUSBから)
・使ったUSBインターフェースは秋月の
  AE-CH340E-TYPEC
・74HC4060で4.9152MHzの水晶を発振させてQ5の
 1/32から153.6kHzのクロックを取り出し。
・ブレッドボードで仮組み。

13_20220617110401

14_20220617110401

実際に動かしてみて確認したかったのは、
  「送信した光を自分で受けるでしょ」。
今回の試運転は、これがどうなるのかを確かめたかっ
たのです。

送信したデータがそのまま受信データとして帰ってきたら、
そのデータを無視して捨ててしまうような処理を送信ルーチン
に入れなくてはなりません。

さて、結果。
赤外通信モジュールのピンで信号を観察すると、
  ・送信光を受信光として受ける
つまり、
  ・TXIRパルス(Hアクティブ)と同じものが
   LアクティブパルスとしてRXIRに出てくる。

これがMCP2122のRXIR端子に入ります。
しかし、RX(UARTシリアル出力データ)端子には受信信号
は出てきません。

  ・MCP2122が送信処理中に受けたRXIRパルスは
   無視して受信データとして出さない。
という処理がなされているようです。
これで、自分で送信したデータを受けたらそれを
捨てるという処理は不要。 便利!

「UART←→IrDA」の制御、これがあたりまえの機能なので
しょうか?
データシートにはこのように。
  ・送信:RXIR受信中はTXIR出力を禁止する。
  ・受信:送信中は受信をやめる。

ということで、装置の本体・リモコン間接続コネクタを
無くすという話、進めそうな雰囲気です。

※余談
秋月のUSBシリアル変換モジュール「AE-FT234X 」。
小さくて良いのですが、シリアル出力TXDが0~3.3V
で出て来ます。
受信側がTTLレベルで受けてくれるのなら、そのままで
良いのですが、「3.3VではちょいとHには足らんぞ」
という回路だとレベル変換をしなくちゃなりません。
今回のMCP2122もHレベルの定格が「0.8 x VDD」で
(5V電源だと4.0Vが定格レベル)、3.3Vの信号だと
ちょい足りません。
そこで0~5Vで出てくる「AE-CH340E」を使ったのです。
3.3V→5Vへの信号レベル変換、3.3V電源が使えれば良いの
ですが、使えるのが5Vだけだと、
  「Tr1コあるいはFET1コで簡単に」
ができません。
  ・2018年3月9日:放電特性記録機能付きバッテリー放電器、改造
    無理やり3.3Vを引っ張り出してます


※HC4060 Q5出力の抵抗
クロック出力に入れた1kΩの抵抗、これはクロック波形をちょっと
鈍らせるためのもの。
ブレッドボードで組んだため、このクロック信号をジャンパー線で
渡ってました。  (HC4060→MCP2122)
そこから放射されるノイズ(方形波のエッジ)を赤外モジュールが
拾ってしまったのです。
RXIR信号が不安定に出ちゃうのです。
  ジャンパー線を手で持つと改善。
     (シールド効果か容量分加算か!)
  長いのに変えたりループにしたりすると、誤パルス増大。
抵抗+ICの入力容量でパルスのエッジを押さえると改善した
という次第です。


※家電用リモコンの発光波形例 38kHzが見える
C_r1

※MCP2122のTXIR出力と
 TX LED発光の様子をフォトトラで観察
C_r2

※送信データとTXIR、別ユニットのRXIRと受信データ
C_c1

C_c2

※Arduino-UNOで
MCP2122を試そうとするとボーレートの16倍のクロック
が必要です。
↑の例では4.9152MHzの水晶を1/32して使いました。

Arduino-UNOだと、タイマー2で方形波を出せばクロックとして
使えます。
 ※元が16MHzですんでちょっと誤差が出ます。

Uu1
通信をテストするスケッチを書けば、様子が分かるかと。
  ※スケッチをアップロードする時は
   RXDのジャンパーを外さなければ
   なりません。

※続き
秋月の赤外光送受信モジュール(AE-RPM851A)を使ってみる(IrDAを試す) #2

| | コメント (5)

2022年6月15日 (水)

三和シャッター無線リモコン RAX-330 パターンが溶けてる

三和シャッターの無線リモコン、RAX-330やRAX-110の修理を
承っていますが、故障原因で多いのが「電池の液漏れ」。
  ※さまざまな電子機器、電子回路の修理依頼について
       ↑
     ここを探してもらうと過去の修理状況が 

修理の基本、まずは「見た目」。
電池の液漏れだと電解液による腐食です。
電池ホルダー部の電極がアウトになるだけでなく、制御回路も
ダメージを受けます。
プリント基板のパターンだけでなく、スルーホールが「腐って」
いたり、抵抗やトランジスタの足が溶けてる。なんてことも。

今回の修理ではこんなことが。
主要な部分を手直しした後、何気なく灯りに透かして見た
プリント基板。

それが・・・ 「これは、なに?」「天橋立?」状態に。
B10_20220615104201
基板を上から見ると、部品にはさまれていて色も同化。
気が付きにくい状態です。
B11_20220615104201
たまたま透かして見たから異常事態を発見。
液漏れ痕を拭ってみると、パターンでつながっていたのは
ほんのわずか。
B14_20220615104201
この「天橋立」になったパターン、あやうく見逃すところでした。
  ※切れてはなかったんで、回路は動いてました。


| | コメント (2)

2022年6月13日 (月)

4046・VCO回路の直線性改善方法その2

4046・VCO回路の直線性改善方法
ここで示した回路は「反転アンプ」と
「ジャンクションFET」で4046のR1端子電流を
制御するものでした。

これを「非反転アンプ」と「Nch MOS FET」に
換えてみたのがこれ。

V1_20220613141501
これだと単電源で動かせます。
TP1の入力電圧を変えるとR2端子に流れる電流が変化。
電流が増えるとVCO周波数が高くなります。

R1とR2の関係はこんな回路になっていると。
V2

  ※トランジスタ技術2011年11月号
   特集 定番デバイス555
     5-3 PLL IC 74HC4046 (遠坂俊昭)

通常はR2の値でVCOIN端子が0Vの時の最低周波数を
決めます。
VCOIN端子の電圧を0Vに固定すればR1(I1)は無視され、
R2(I2)でVCO周波数が決まります。

この回路の検証、問題は測定系。
TP1に与える電圧を変えながらTP2の周波数を計るという
操作をしなくちゃなりません。
  ※手動では面倒だ!

Arduino UNOで周波数カウンタ:アナデバの電力計用ICのために
これ↑では、1Hzゲートを作って周波数を測定しました。
しかし・・・この回路ではATmega328Pが持っている3つの
タイマーをみんな使っています。

F2

TP1の電圧を変えるためにPWMを使いたいのですが、
使えそうなのはタイマー2のOC2B。
モードをOCR2Aによる「高速PWM動作」にしてOC2Bに
PWM出力ですかな。

  ※OC2Aは1Hzゲート用に500Hzパルスを出さなくちゃ
   なりませんので。

※これでどうかなぁ。
V3


| | コメント (0)

2022年6月12日 (日)

4046・VCO回路の直線性改善方法

「どこかに回路資料があったはず」っと探しましたら、
あれこれ回路集にコピーをファイルしてありました。

  トランジスタ技術1988年3月号
  特集「プロに学ぶ最適回路設計法」
  第5章 タイマ/VCO回路の設計
    宮崎仁,中野正次

こんな回路です。
   (トラ技を引っ張り出してきてコピー)

Ab51
4046の最大周波数を決めるR1をオペアンプと
FETで定電流化。
4046のVCOin電圧は中間レベルに固定して
おいてR1の電流で(R1の抵抗値を変えてい
るようなもの)発振周波数を制御しようという
考えです。
  ※オペアンプ用に±電源が必要

書架からこのトラ技を引っ張り出してきて、
ページをめくってますと・・・
レールスプリッタ回路」が出ていました。

2017年9月11日:1/2Vcc生成回路のコンデンサ
ここ↑であれこれ言っていた回路。
オペアンプの出力に入れる大きなコンデンサ。
ほんとにエエのんか?
という疑問です。

  第1章 OPアンプを効果的に使う方法
    上窪兼
「アクティブ・グラウンドの例」


Aab1

このトラ技の表紙と目次
Aa51
広告のハードディスク、容量が「20/40MB」。
ギガ」や「テラ」じゃなく「メガ」でっす。

Aa52

裏表紙は「目黒電波測器」の広告。
Aa53

| | コメント (0)

2022年6月 8日 (水)

FDK製「高耐久ニッケル水素電池」登場か!?

FDK、長寿命ニッケル水素電池(AAサイズ)を開発
このニュースが3月末。
その後、どうなったのか見てますと・・・
高耐久ニッケル水素電池(FDK)に製品ラインナップが
紹介されています。

単3の型番が「HR-AAULT」でmin容量1000mAh
容量1500mAhの「HR-AAUT」も。
そして、700mAhの「HR-AAULTU MU Grade Type」という
のも表に出ています。

「HR-AAULT」の寿命(充放電サイクル特性)グラフ、
驚きの「長寿命」を示しています。

Aa1_20220608062501
新JISの「0.5C」充放電ではなく「1C」を繰り返して
いますんで、これはなかなかのもの。

また、「HR-AAULTU」は、
  高耐久ニッケル水素電池は、IEC61951-2に定められた
  MT、MU準拠の電池です。
と。
「IEC61951-2」の詳細、調べてみます。

 

| | コメント (5)

2022年6月 4日 (土)

「レインボー」出現!

今日の夕刻、ガレージの流し台で晩ごはん用にニンジンを
切っていたら視線の左端に「違和感」・・・
目を向けると「レインボー」!
001
※拡大
002

なんだ、これは???
照明などの仕掛けはしてないぞ~。

テーブルの上、西日が差し込んでいて、置いた透明物に
日光が当たっています。
003

あれこれ動かしてみると、原因物はこのグラス。
004

「水分補給」にちょいと生beerをひっかけけたあと、
テーブル上に置いた場所が良かったのでしょう。
西日の照射角度、季節と時間がたまたま「良」の位置に。
なんか、エエもんを見せてもらったような気が・・・

※関連か
「天使の梯子」

| | コメント (0)

2022年6月 3日 (金)

電池の消耗を調べるために電圧を計るなら「四端子法」で

友人から「消耗した電池のより分け方を教えて
というリクエストがありました。

『単3と単4なら仕事場で頒布してる
  電池電圧チェッカーをどうぞ』っと宣伝したん
ですが他のサイズの電池の状態も見たいということで、
「一般的な話」としてまとめてみました。

基本は、

(1) 電池の消耗を見るには「無負荷電圧」を
  計るだけじゃダメ。
    負荷抵抗が必要。
    ドロップした電圧から、内部抵抗を
    推測することも可能。

(2) 四端子接続を心がけて計る。
    電圧測定の経路と負荷抵抗の経路を
    分ける。

(3) 電池ホルダーを使う時は、電池電極間の
  接触抵抗と、電池ホルダー電極(コイル
  スプリング)の抵抗を考慮のこと。

四端子接続による電圧、電流測定のキモはこの記事
を読んでもらいましょう。
  ・2015年03月09日:ACアダプタや電源回路の特性調査は
測定端のちょっとした場所違いで、出てくる数値が
変わってしまいます。

電池の内部抵抗測定では、こんなツールも。
  ・自作の4端子プローブもどき

そして問題が「電池ボックス」、「電池ホルダー」。
  ・CQ出版 トランジスタ技術 2008年6月号
にレポートを載せてもらっています。

※記事の一部
4_aa
    いろんな電池ホルダー電極の抵抗を計って
   みました。  

基本的な電池電圧の測り方を図示してみます。
使うのはデジタルテスターと負荷にする抵抗。
さらに、ミノムシクリップやテスター棒、
電池ホルダーがあればあれこれ応用がききます。

4_1
4_2
4_3
4_4

4_5
負荷抵抗をつないだ時の電圧ドロップで
電池の内部抵抗」を推測する方法(計算手法)
はネットを探せばあれこれ出てきます。

こちらでは
  ・交流定電流方式で電池の内部抵抗を計ってみる
であれこれ試しています。

※「やったらあかん」つなぎ方がこれ。
4_6
電池ホルダーの影響がもろに出ます。
どうしてもこのつなぎでというなら、Bulgin社のBX0035
BX0034(単4)のような板電極のもの。
  ・【電池BOX】 うずまきバネ式の接触抵抗は板バネ式の数十倍大きい

4_7
これは・・・電池の電圧じゃなくって、抵抗両端の
電圧を計ってます。
各所に「いろんな抵抗」があって、
「電池電圧 = 抵抗両端の電圧」ではありません。


※4端子法による低抵抗測定の例
2016年04月22日:1A定電流回路 「足」を測ってみる
2016年04月23日:1A定電流回路 みのむしクリップを測ってみる

電池あれこれ まとめ

| | コメント (6)

2022年6月 1日 (水)

CD-ROM版トランジスタ技術 2020年と2021年のを

著者献本でやってきたCD-ROM版トランジスタ技術。
過去にもお配りしたことがあります。

例えば、
 ・2006年03月09日:トラ技のCD-ROM
 ・2009年09月21日:トラ技CD-ROM発掘
 ・2010年04月23日:トラ技CD-ROM
 ・2017年12月 8日:CD-ROM班トランジスタ技術などを・・・

今回は2020年2021年の2つ。 (税込価格それぞれ14,300円)
ただし、仕事場で頒布しています
 ・マイコン型導通チェッカー完成品 (4,750円売り)
オマケとします。
   ※ということで無料ではありません。
お代は(一つ)「6,200円」。
   ※レターパックライト(370円)でお届けします。

頒布するのは次の2つ。
希望のかたはこの記事に「公開」で書き込みしてください。
まず、どちらかを選んでください。
  (a) 2020年CD-ROM + 導通チェッカー完成品1台
  (b) 2021年CD-ROM + 導通チェッカー完成品1台

    ※行頭に「(a)希望」などと。
その時、お名前(匿名可)とともに確実に届く
メールアドレスを記入してください。

締め切りは(とりあえず)1週間後の6月8日(水)
希望者多数の場合は抽選します。
  ※その後、こちらからメールしますので
   お届け先(郵便番号、住所、氏名、電話番号)を
   返信して下さい。
  ※振り込み先を記したメモを同梱しておきますので、
   お代は到着後に振り込んでください。
  ※CD-ROMは未開封。 転売禁止でお願いします!

A11_20220601142301

※追記 (6月10日)
締め切りを待ちましたが、どなたからもリクエストが
ありませんでした。
以後は「抽選無し、早い者勝ち」ということで対処します。


| | コメント (6)

« 2022年5月 | トップページ | 2022年7月 »