« 2019年12月 | トップページ | 2020年2月 »

2020年1月

2020年1月31日 (金)

300kHzのセラミック発振子:Tele Auto FX-1 修理

以前にも修理していますが、
Tele Auto FX-1:電動シャッター用無線リモコン
修理:電動シャッター用無線リモコン

今回の依頼品は、これのセラミック発振が発振しない(時々動く)
という症状。  青いの。 「CSB300D」

11_20200131133601

電池の液漏れや水掛りはありません。
見かけは非常にきれいな状態なんですが、制御マイコンが動かない
もんだから、アウト。

「300kHz」のセラミック発振子、電子部品通販店で探してみました
が見つからず。
455kHzのは赤外線リモコンで使われてるんで、まだまだ現役のはず・・・
   ※ムラタの455kHz、RSコンポーネンツでは見つからず。
    ひょっとして低い周波数のは終息?

困ったな~っと、記憶を辿ると・・・部品箱にありました。
以前の修理でマイコンを交換(プログラムを作って)した時に
取り外して置いておいたものです。
珍しいものは捨てずにちゃんと保存しておかなあきません。
これで無事に修理完了。


| | コメント (2)

2020年1月28日 (火)

Arduinoから「タイマー0」を取り上げる(ユーザーが使う)

Arduino(UNO)でユーザーが自由に使えるタイマー(ATmega328の)は2つ。
タイマー0をArduinoのシステムが使っているから。
残るタイマー1とタイマー2は自由に使ってokという構成。

で、このタイマー0が何に使われているかというと、この3つ。
 unsigned long millis()・・・経過時間をミリ秒値で得る
 unsigned long micros()・・・経過時間をマイクロ秒値で得る
 void delay(unsigned long ms)・・・ミリ秒値で時間待ち

タイマー0のオーバーフロー割り込みでもって計時しています。
割り込み周期は、16MHzを1/64して256カウントですので、
1.024ms = 976.5625Hz。
  ※なお、「void delayMicroseconds(unsigned int us)」
   は純粋にソフトでの時間待ちですのでこのタイマー0
   には依存しません。

『millis()やmicros()、delay()は使わんぞ』というプログラムなら、
タイマー0もユーザーが使えます。
その検証をちょいと。

・タイマー0のオーバーフロー割り込みをやめる。
   「TIMER0_OVF_vect」の処理ルーチンは残ってしまうけど、
    無視します。

・タイマー0のコンペアマッチA割り込み使って、自由なタイマー
 割り込みを得る。
 例えばジャスト「1ミリ秒=1kHz」と使いやすく。

・そのために、タイマー0のレジスタを直接操作。
・TIMER0_COMPA_vectの処理を書く。

簡単なテストプログラムを紹介しておきます。
  (表示の関係で全角スペースにしてます)

//////////////////////////////////////////////////////////////
// I/O MACRO
#define PB0_H  (PORTB |= (1 << PB0))   // (!!!)PB0 H/L
#define PB0_L  (PORTB &= ~(1 << PB0))
#define PB1_H  (PORTB |= (1 << PB1))   // (!!!)PB1 H/L
#define PB1_L  (PORTB &= ~(1 << PB1))

/***** タイマー0コンペアマッチA割込み    *****/
// 割り込みでパルス出力(1kHz周期)
ISR(TIMER0_COMPA_vect)
{
  PB0_H;             // (!!!)PB0 H
  PB0_L;             // (!!!)PB0 L
}
/*****  セットアップ    *****/
//  ATmega328Pのレジスタを直接制御
void setup()
{
  cli();         // 割込禁止
// I/Oイニシャル
  PORTB = 0b00000000;   // data/pull up
  DDRB = 0b00111111;   // port指定
  //     |||||+---- PB0 IO8  out TEST 割り込みでパルス
  //     ||||+----- PB1 IO9  out TEST メインでパルス
  //     |||+------ PB2 IO10  out
  //     ||+------- PB3 IO11  out
  //     |+-------- PB4 IO12  out
  //     +--------- PB5 IO13  out (LED)
  PORTD = 0b00000000;   // data/pull up
  DDRD = 0b11111100;   // port指定
  //    |||||||+---- PD0 IO0  RXD
  //    ||||||+----- PD1 IO1  TXD
  //    |||||+------ PD2 IO2  out
  //    ||||+------- PD3 IO3  out
  //    |||+-------- PD4 IO4  out
  //    ||+--------- PD5 IO5  out
  //    |+---------- PD6 IO6  out OC0Aトグル出力
  //    +----------- PD7 IO7  out
// タイマー0
  TCCR0B = 0x00;     // タイマー0いったん停止
  TCCR0A = 0b01000010;  // あらためてモード設定
  //     |||| ++--- WGM: CTCモード
  //     ||++------- COM0B
  //     ++--------- COM0A PD6トグル出力
  TCCR0B = 0b00000011;
  //       |+++--- CS:1/64 : 250kHz
  //       +------ WGM02
  OCR0A = 250 - 1;    // 250カウントで1kHzを
  TIMSK0 = 0b00000010;
  //        +----- OCIE0A コンペアマッチA割り込み有効
  //               オーバーフロー割込は無しに
  sei();         // 割込許可
}

/***** LOOP    *****/
// PB1にパルス出力
void loop()
{
  PB1_H;             // (!!!)PB1 H
  PB1_L;             // (!!!)PB1 L
}
//////////////////////////////////////////////////////////////

PB0、PB1そしてPD6をオシロで見たのがこの波形。

Tm01

タイマー割り込み処理を行っている間、メインで出している
PB1のパルスが止まります。
PD6がトグル(ここで割り込み要求が発生している)してPB0が
オン(割り込み内の処理)するまでの間、時間がかかっている
のは割り込みのスタック処理です。
レジスタを待避するなどあれこれ見えない処理が走ります。

Arduinoでの初期設定は「wiring.c」に記されています。
この中で設定されている「TIMER0_OVF_vect」の処理は取り除けません。
しかし、タイマー0オーバーフロー割り込み許可ビット:TOIE0を0に
することでこの処理は走りません。
そして、オーバーフローは無視してコンペアA割り込みを走らせる
のです。

タイマー0のクロック分周設定や割込時間も自由。
   「OCR0A= 25 - 1;」としたら10kHzで割り込み。
   まぁ、1msあたりが使いやすいかと。
計時だけでなく、いろんな処理を入れ込めますので、3つしかない
タイマーが生かせます。

ただ・・・millis()やmicros()、delay()をシステムで(ユーザー
から見えない何かの処理)使っていたら、その処理は止まってしま
います。
シリアルや液晶表示は大丈夫そうでしたが、「ダメ」なのを探し切れて
いません。

※関連
割り込みで処理させるwordデータの扱い
Arduinoのタイマー処理 タイマー0のオーバーフロー割り込みの実行時間
ラジオペンチ Arduinoのmillis()関数が返す値は不連続な場合がある
魔法の言葉「volatile」
AVRマイコンのCコンパイラ 具体的に


※追記
なぜタイマー0を使いたいのか・・・
JIS C8708による充放電サイクル試験回路 これの「2019」対応プログラムを
Arduinoに移植したいから。
現在はアセンブラで書いてます。
「C」に直すならArduinoでと考えました。
現状、
  タイマー0:1mS割り込み
  タイマー1:充放電電流設定用PWM出力
  タイマー2:ブザー報知(4kHz)出力
となっていて、これを踏襲したいからなんです。



| | コメント (1)

2020年1月27日 (月)

ROWAの互換バッテリー購入

2008年にやってきたオリンパスのE-520。
本体は満身創痍ですが、まだ元気。
撮影枚数を調べたら13万枚ほど。
ところがバッテリーがアウトに。
2つ体制で使ってきましたが、ライブビューするとすぐにバッテリー消耗警報がでるようになっちゃいました。
そこで・・・初めての互換バッテリー。
「ROWA」のを買ってみました。

A1_20200127111401

左がROWAで、右のがオリンパス純正。
この高さを測ってみると・・・・ROWAのが0.2mmほど低い。
だもんで、E-520電池室の出し入れがスムーズに。
(a)点のぽっちりだけがちょいと高く(0.1mmほど)なっていて、うまく電池室に収まります。
オリンパス純正の電池、カメラからの取り出しが窮屈だったんです。
「寿命でバッテリーが膨れてきたから?」じゃありません。
最初からちょっと窮屈めでした。

さてさて。
所持しているデジタルカメラ、現用品は3台。
リコーのGX100とオリンパスのOM-D E-M1mk2、そしてE-520。
それぞれのカメラで使っている電池の内部抵抗変化、こんな具合です。

Batr202001

内部抵抗の測定方法と関連記事


| | コメント (0)

2020年1月24日 (金)

メモ:4-20mA電流ループ用ICとデジタルアイソレータ

回路設計で調べ物をしていたら、「TI」のであれこれ新しいデバイスを発見。

※4-20mAの電流ループ回路 (出力側)
OP-AMPで定電流回路を組んでというのがこれまでだったけど・・・
便利なデバイスがありました。
XTR115 外付けTR 1個で4-20mAのカレントループ。
      センサー回路の電流が4mA内でOKならむちゃ簡単。
      OP-AMPで組んでも同じ構成になるだろっと。
XTR111 センサー回路が大食いの時、3線式あるいは4線式ならこれ。
      電流流し出しで出力。 (GND側を共通にできる)

※デジタルアイソレータ
CANバス絡みに広がっているんだろか。
安価で使いやすいのがあれこれと。
フォトカプラでの絶縁とは異なる手軽さ。
ISO7310 (1ch)   ISO1320 (2ch)

そして、入力インターフェス用。
ISO1211 24Vを受けるのに便利そう。
http://www.tij.co.jp/product/jp/ISO1211
 ↑のhttp://www.ti.com/jp/lit/pdf/SLLA382
が面白いかと。
高電圧回路を絶縁受けする場合、フォトカプラだと電流制限抵抗が
「熱くなる」わけですが、これだと小ワットの抵抗でOK。

※関連→抵抗の熱で基板が変色



| | コメント (0)

2020年1月21日 (火)

ダイソーReVOLTES単3 JIS C8708:2019充放電試験 続行中

ダイソーReVOLTES単3 JIS C8708:2019充放電試験 200サイクル目完了の続き。
現在、300回目を目指しています。
その記録チャートの様子です。
41_20200121085201

各サイクルの0.5C充電時、温度上昇が激しくなっているのが見えます。
内部抵抗が上昇しているせいでしょう、電池電圧が記録紙の上端1.6Vを越えています。

「紙」による記録、1日あたり4cm。
   いったん記録したものは消えない。
  停電しても通電が回復すればそこから記録を再開。
  PCを使った測定ではできない芸当かと。

ナダ電子製「プリンタシールド」応用例 Arduino UNOでチャートレコーダを実現



| | コメント (0)

2020年1月16日 (木)

50年目の再免許

JH3DBOの開局が1970年。 大阪万博の年です。
今回の再免許申請が50年目。

昨年12月27日に電子申請。
1月9日に申請受付のメールが来て、手数料を納付。
1月15日に審査終了で、免許状待ちに。
ペンで文字を書くのは免許状返送用の封筒だけ。
便利になったものです。

| | コメント (2)

レターパックプラスに「航空輸送禁止」のシール

レターパックプラスで届いた荷物。
航空輸送禁止」の赤シールが貼ってありました。

B1_20200116130001

シールにはこんな注意書きが。
「この郵便物・荷物は、航空輸送できない危険物又はその
 疑いがあるため、陸上輸送により振替輸送をします。」
っと。

おそらく・・・品名に「乾電池」っと記されていたからかと。
発火の危険性ということなんでしょう。


| | コメント (0)

2020年1月14日 (火)

メモ:awk(gawk)で「arcsin」

※エクセルでの文章はキライ!
エクセルで図と文を混ぜて書いて「ハイ、これが仕様書」っと渡させるとちょいとイライラします。
そんなときは「こちらの環境が悪いのか見にくいのでpdfにして送り直してちょ」と返答するようにしています。
まぁ↑は置いておいて・・・

数式処理の確認も、エクセルを使うと簡単にグラフ化できたりと便利なのは間違いないんですが、私の場合、「あまりしたくない感」が勝ってしまいます。
そんな場合、何を使うかというと「awk(gawk)」。

テキストエディターでスクリプトを書いて、コマンドプロンプトで実行。
リダイレクトで結果をテキストファイルに。
グラフ化したいなら、その結果をエクセルに食わせるという具合。

先日のこと、逆三角関数arcsin、arccosを使った処理の検証をしようとしたところ、・・・awk(gawk)には「asin()、acos()」関数は実装されていなかった。・・・あれま。

三角関数sin、cos、atan2、それにsqrtは実装されてますんで、これらを使ってどうにかしなくちゃなりません。
三角関数の変換式を検索しながら、awk(gawk)に関連付けて探すと、発見!
これ↓。
function asin(x) { return atan2(x, sqrt(1-x*x)) }
function acos(x) { return atan2(sqrt(1-x*x), x) }

asin()とacos()が得られました。
簡単にテスト。

BEGIN{
 PAI = atan2(0, -1)  # パイは数字指定じゃなくatan2で
 for(i=-1;i<+1;i+=0.1){ #-1~+1を0.1ピッチで
  printf("%+4.1f %+7.2f %+7.2f\n",
    i, asin(i)*180/PAI, acos(i)*180/PAI);
 }
}
function asin(x) { return atan2(x, sqrt(1-x*x)) }
function acos(x) { return atan2(sqrt(1-x*x), x) }

で、その結果
-1.0 -90.00 +180.00
-0.9 -64.16 +154.16
-0.8 -53.13 +143.13
-0.7 -44.43 +134.43
-0.6 -36.87 +126.87
-0.5 -30.00 +120.00
-0.4 -23.58 +113.58
-0.3 -17.46 +107.46
-0.2 -11.54 +101.54
-0.1 -5.74 +95.74
-0.0 -0.00 +90.00
+0.1 +5.74 +84.26
+0.2 +11.54 +78.46
+0.3 +17.46 +72.54
+0.4 +23.58 +66.42
+0.5 +30.00 +60.00
+0.6 +36.87 +53.13
+0.7 +44.43 +45.57
+0.8 +53.13 +36.87
+0.9 +64.16 +25.84
+1.0 +90.00 +0.00

 

| | コメント (2)

2020年1月 9日 (木)

溶けた? 焼けた?

1996年に製作した信号監視警報装置。
その「アナログ出力がおかしい」という修理依頼。

おかしい原因は判明したのですが、故障箇所とは関係
の無い警報出力用リレーの外観に異常を発見しました。

A1_20200109161601

2つあるリレーの片方、外装樹脂が溶けています。

端子台で外に出しているのはA接点だけ。
閉じた接点に異常電圧がかかって過電流が流れたのか・・・
  ※この場合はリレーの中から発熱。
しかし、外観を見る限り、何か溶剤のようなもので
溶けてしまったような感じです。
しかし、基板上にそんな痕はありません。

いったいなんだろか。
交換用に注文した部品が来てからリレーを外して解体
してみます。

※リレーを外した結果です。
A1_20200110113701

外装が溶けていたのは「コイル側」。
中はこんな状態でした。
A2_20200110113701
A3_20200110113701

コイルも接点も異常なし。 おかしな変色は見えません。
溶けた外装部、その裏を見ると・・・
A4_20200110113701
A5

裏にも影響が見えますが、表ほどひどくはありません。
ということは、今回の異常は表側が発端。

どのくらいの熱で溶けるのかと、切り取った外装切片に
加熱したハンダゴテを当てると・・・
簡単に溶けてしまいました。
A6
はて・・・原因はなんだろう。

ユーザーで何かしたとした思えない。


| | コメント (0)

地下鉄今里駅近所の中華屋「多々喰(タダグイ)」、しばらく休業とのこと。

地下鉄今里駅4号出口をちょいと南に歩いたところにある
中華料理「多々喰(ただぐい)」 、しばらく休業だっと。

おやじさん、お歳だったからな~。
このまま閉店となるんでしょうか・・・。

11_20200109133201

街の中華屋さんです。 お昼ご飯に何度も訪れています。
先ほど前を通ったら、シャッターにこんな張り紙。
12_20200109133201

仕事場の近所、お昼ご飯を食べるところがほんとに
少なくなりました。

※お店、2月末から再開されています。
11_20200318090601




| | コメント (0)

ダイソーReVOLTES単3 JIS C8708:2019充放電試験 200サイクル目完了

昨年9月8日にダイソーReVOLTESでJIS C8708:2019サイクル試験開始 、そして9月18日に「ダイソーReVOLTES」JIS C8708:2019充放電試験 50サイクル目 を報告してましたが、その後のレポートが途絶えていました。
実は・・・これ、プログラムの改造ミス(C8708:1019対応の)があり、せっかくの放電データを喪失してしまっていたのです。
50サイクルごとの放電データを4回分記録できるはずだったのですが、ちょいとしたドジがあって、初回の50サイクル目のしか記録してなかったのです。
200サイクルが終わって保存データを見たら・・・「あれま」だったのです。

気を取り直しプログラムを修正。
新しいReVOLTESを買ってきて実験を再開したのが11月27日。
今日、200サイクル目の放電データが得られて、4本の放電曲線を描くことができました。
  (クリックで拡大↓)
0200

JIS C8708:2019の試験では、
 ・0.5Cで132分充電、0.5Cで1.0Vまで放電。
これを49回繰り返し、50回目に
 ・0.1Cで16時間充電、0.2Cで1.0Vまで放電。
この50回目の0.2C放電を記録しています。

その時の電池電圧と温度の変化がこれ。
G0200

200回目に近づくと充電末期の温度上昇が大きくなっています。
0.5Cで132分ということは電池の容量分120分に加えて「12分」だけ余計に充電しています。
これが充電しきれず「熱に変わっている」のかと推測しています。
  ※ベース温度の上下は仕事場室内の暖房の具合。

この電池イジメ、実験はまだまだ続きます。

2017年8月24日 電池イジメ、もうやめます のグラフを見ますと、ReVOLTESは300回くらいでアウトになっています。
おそらく・・・これに近い結果になるのではと。


ダイソーReVOLTES単3のJIS C8708 サイクル試験:2014年10月01日
  旧JISでの寿命試験  そのグラフ
Img20141001133459205

| | コメント (2)

2020年1月 8日 (水)

ミスが広まる 1/1023 vs 1/1024

定番回路、「これはあかんやろ」を指摘したんが
液晶表示モジュールを4ビットモードで使ったときの空きピン処理
誰かが始めた間違ったつなぎ方(この場合はチップメーカーのアプリケーション
ノートか)がずっと踏襲されて広まってしまったというのを発見しました。
これをトラ技の記事にしたのが2009年5月号
以後、空きピンをGNDにつないでしまう例、だいぶ少なくなってきたように思います。

で、新年早々こんなのを発見しました。
 ・ラジオペンチ Arduinoを使ったバッテリー放電器
A/D変換データを電圧値にスケーリングする処理がスケッチに書かれています。
ArduinoのanalogRead() は10bit。 0~1023(10進)の値が得られます。
これの処理が間違っていたのです。
ここ↓
//  battV = analogRead(0) * Vcc / 1023.0;       // バッテリー電圧測定(これは間違いで、)
  battV = analogRead(0) * Vcc / 1024.0;       // バッテリー電圧測定(正しくはこっち

10bit値で1/1023と1/1024の違いですので、差は0.1%ほど
わずかですが、原理的に間違っていますんでこれはまずいです。

  ※A/Dコンバータが8bitだとミスによる実際の誤差
   が目につくでしょう。
   1/255 vs 1/256 で差が0.4%ほどになり、
   実値との差に気がつく
   テスターで読んだ値と「微妙に違うなぁ」と。
   しかし、10bitになると気が付きにくい。

  ※もっと極端に2bitだと分かりやすいかと。
   ATmega328PのA/Dは10bit。
   プログラムの処理としては2bit + 8bitに分割して
   レジスターから読み出します。
   この上位2bitのデータを考えてみましょう。

   出てくる数値は 「0 1 2 3」の4種類
   AREFを5Vとすると、1bitが1.25V
     0は0.0V。 そこから電圧を上げて、
     1になると1.25V。
     中間の2が2.50V。
     最大の3が出るのは入力電圧3.75V以上で

   「1/3」して電圧を求めるのは明らかに間違っていて、
   「1/4」が正しいことがわかるでしょう。

   A/Dの結果が2進だから勘違いするのかな。
   BCD出力だと・・・
    100カウント、0~99基準電圧5Vだと 0~4.95Vを表示。
    基準電圧に読み出しデータを乗じて1/100します。
    「1/99」する人はいないかと。
    

※理屈の詳細はラジオペンチさんの記事のコメントをご覧ください。

この「1/1023と1/1024」、調べてみると「1/1023」を使っているプログラム例があちこち
に出てきます。
どこが発端なのかは調べ切れてませんが、ArduinoのanalogRead処理で多いような気がします。

ArduinoではArduinoのアナログ基準電圧入力 も勘違いの処理が広まっているかもです。
正しく使えば、「外部基準電圧とAREFピンの間に抵抗を入れておく」なんてことはしなくてもokですから。

| | コメント (16)

2020年1月 6日 (月)

ダイソー「明るいランチャーライト」「単3x2本ハンドライト」 LED通電テスト60日

11月初旬、明るいランチャーライト メタリック 1LED 改造 記事の後、
「明るいランチャーライト」と「単3x2本ハンドライト」 から取り出したLEDの長期間点灯テストを始めました。
あれから60日が経過。
「やっぱりなぁ~」「100mAはきついのかぁ」という結果で終了です。
テストしたのはこの2つ。
A11

こんなグラフが得られました。
Lt060
照度センサーのアナログ出力をA/D変換。
絶対値ではなくその値の変化を見てください。

100mAで定常的に光らせるのは形状的にしんどいか・・・
ハンドライトで使われているLED、昔と変わらずでしょうか。
  ダイソーのLEDライト 寿命テスト(2015年)

明るいランチャーライトのも3週間ほどで半分の輝度に。
そして、2ヶ月で1/8に
電流100mAはきつかったようです。


| | コメント (0)

2020年1月 4日 (土)

謹賀新年 本年もよろしく

2020年、本年もよろしくです。
正月、3日間。 平穏な日々が過ぎていきました。
弟家族が来た一昨日、そして昨日は庭で「耐寒焼き肉」。
花見でも月見でもなく、毎年恒例になってきたような・・・
そして、今日の午後から東成おもちゃ病院 がスタート。

そうそう。ペコの浮遊写真が撮れました。
A1_20200104105901

こちらに向かってまっしぐらに走ってくるところを
OM-D E-M1mk2で連写。 その中の1枚です。
前足をそろえて駆けているのがかわいい。
右下斜めのはリード。
ペコがが我が家にやってきたのが2015年の春
もうすぐ5年です。

↑の写真のあとすぐ。 「待て!」
11_20200104180001



| | コメント (0)

« 2019年12月 | トップページ | 2020年2月 »