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

2019年3月

2019年3月31日 (日)

グラフに「パーミル」って!

4月7日の選挙、維新があれこれやってくれてます。
   維新 子供教育予算 チラシ
で検索すると、驚き:お笑いのグラフが出てきます。
グラフの縦軸、単位が「パーミル」・・・
  記号、出てくるかな? これ→「‰」

「%」が「1/100」。 「‰」は「1/1000」。
これって使うの、線路の勾配を示す単位くらいでしょう。
『鉄の人』しか理解できないかも。

グラフで示されているのがざっと「30‰」。
近鉄奈良線の石切・額田駅間の勾配くらいでしょうか。

「35.7‰」の標識。
10

実際の傾き。
大阪平野の遠景。 夜景がキレイところ。
 
21_2  
右手へ行けば石切駅→生駒トンネルへ

※この写真2枚は私が撮ったもの。
  ご自由にお使いください。


※検索
【大阪ダブル選】チラシのグラフにパーミル(‰)を用い“偽装ではないか”と話題|ニフティニュース
大阪W選で維新が“誇大広告” 教育関連チラシで実績カサ上げ (2019年3月30日) - エキサイトニュース
【松井一郎】大阪W選で維新が“誇大広告” 教育関連チラシで実績カサ上げ|日刊ゲンダイDIGITAL
大阪W選で維新が“誇大広告” 教育関連チラシで実績カサ上げ- 記事詳細|Infoseekニュース

あおむらさきさんのツイート:2019年3月24日 単位は『パーミル』♪
Mighty Jackさんのツイート:2019年3月25日 すげーwこの維新のチラシ。


| | コメント (0)

2019年3月29日 (金)

TIの電流検出アンプ

電流検出アンプを調べていて、「おっ、使ってみたいぞ」っというデバイスに遭遇しました。

過去、こんな記事を書いてます。
・2013年12月05日:★電流検出アンプに関するメモ
   ※この中の幾つかは実際に使った。

また、自作電源の改造でも電流検出アンプを使っています。
・2018年02月05日:20年前に作った電源を改造


今回、調べてて気になったのは「TI」のINA181
差動アンプ型の電流検出アンプです。

何が特徴かというと・・・入力電圧が0V以下まで広がっている。

こんな図を示しておけばわかりやすいでしょうか。

Cv


ここに出てきた電流検出アンプをちょい説明。

・LTC6101  いちばん上の
電源端子が負荷側電源(センス入力)と同じ。
だもんで、使用電圧に融通がきかない。
そのかわり高電圧(60V)でも使える。
電流出力なので抵抗で受けて電圧に変換。

・LT6100   真ん中
ICの電源は測定側とは別で広い範囲(2.7~36V)。
センス入力は4.1~48V。
上の図の出力端子側では使えない。
OP-AMP出力。
しかし、センス入力がゼロでも、約15mVの出力(GND側飽和電圧)が出てしまう。
微少電流域の測定が必要な時に、誤差となる。

・INA181  いちばん下:今回見つけたの
差動アンプ式。 類似品にINA180、INA240、INA199。
電源は2.7~5.5V。
センス入力範囲が-0.2~+26Vと、ゼロボルトを許容。
だもんで、出力端子側、つまりGNDにつながった負荷の直近に検出抵抗を入れることができる。
出力のGND側飽和電圧が低くなっていて0.5mV。
  ※ただしコモンモード電圧上昇で電流ゼロ時の
   出力電圧が変化して上昇する。
   26VだとAv20倍品で約5mVに。
INA240だとセンス入力電圧範囲が-4~+80Vに。
REF端子があるので、ゼロ点をシフトできる。

INA180、181、199、いずれも100円ほどと安価。
INA240はゼロドリフトアンプなんでで300円ちょい。

機会があれば使ってみます。

 

| | コメント (1)

2019年3月27日 (水)

リン青銅製文鎮の写り具合は光源のせいだ!

リン青銅製文鎮(ハンダ付け補助ツール)の色、うまく写らないのは光源でした。
まず、ハンダ付け補助ツール:文鎮 …今回は男の「リン青銅」のこの写真、
24
オリンパスのE-520で外付けフラッシュを天井に向けて光らせて撮りました。
   (撮影場所はガレージ。 蛍光灯下)

そして、文鎮:ハンダ付け補助ツ-ル 最後のリン青銅 本人が使おうかと・・・ の写真は、仕事場の蛍光灯照明の下、リコーのGX100でホワイトバランスは自動(AWB)。
それがこの写り↓
11_1
美しくありません。

で、GX100のホワイトバランスをあれこれ試したのがこれ。
どれも、↑と同じかよけいにひどくなってます。
21_1

そこで、「こりゃ照明やろ」っと、仕事場の外に持ち出して日光の下(日陰です)、GX100でのAWBで撮ってみました。

すると・・・
22

エエ色に写りました。
これだと「上等もん」に見えます。

リコーのGX100、2007年に買ってすぐ、こんなトラブルに見舞われています。

・リコーのデジタルカメラ「Caplio GX100」の自動ホワイトバランス異常

  ※結局、解決していません。


 

| | コメント (1)

ヒモにするにはもったいないような・・・ USBケーブル

仕事場前のゴミ置き場(水・土が一般ゴミ回収の日)にはカラスの食べ散らかし防止のための防鳥ネットが置いてあります。

ネットが飛ばないよう(持って行かれないよう)に、電柱に結びつけてあります。

11_2

電柱に結んであるヒモをよく見ると・・・

12_1

なんと、ネットと同色の「USBケーブル」。

プラグが付いたまま。

危険では無いのですが、ちょいともったいないような。

   ※断線でもしているのでしょうけれど・・・

 

| | コメント (0)

文鎮:ハンダ付け補助ツ-ル 最後のリン青銅 本人が使おうかと・・・

昨年の5月に佐藤テック君が削ってくれた文鎮:ハンダ付け補助ツール・・・最後のリン青銅、これが3つ残っています。

11_1

右の二つは、鋳物の関係で「す」が入っていて「見えなくなるまで削ると小さくなるし」ということで、厚み約13.5mm、幅約36mmで止めてます。

  ※赤矢印が気になる「す」

左のは素材の関係で薄くって約11.4mm。ですが、幅がざっと41mm。

どちらもさすがのリン青銅で貫禄は十分。

で、これのアナウンスからもう少しで1年。

どなたからもリクエストが無いのでしたら、製作者本人が使おうかと、昨晩の一杯呑みで話が出ておりました。

  ※写真写り、なんか悪いな~ (仕事場でリコーのGX100)

   E-520で撮った2018年5月の写真 がそれっぽく写ってます。

 

 

最後のアナウンス。

・リン青銅製ハンダ付け補助ツール。

・お代は3400円。 クリックポスト(185円)で送付(2つまで)

・SUSのキャップボルトとワッシャ、2mm厚ゴム板が付属

ご希望の方はこの記事にコメントを。(メールアドレスを記入のこと)

 

 

※ハンダ付け補助ツール(文鎮)まとめ

「SUS304 16mm厚」 のは継続して受付中です。


※補足:写真を美しく撮れなかったのは・・・

リン青銅製文鎮の写り具合は光源のせいだ!

 

 

| | コメント (0)

2019年3月26日 (火)

SUS304・16mm厚ハンダ付け補助ツールの追加製作

文鎮:ハンダ付け補助ツール、SUS304・16mm厚の追加製作が出来上がってきました。
厚みが16mmで、重さ約300g。錆びません。
今ロットはとりあえず10コ。

21

頒布価格は、
・2018年12月20日:文鎮:SUS304・16mm厚の出来てきました
と同じで、2100円。  (端材ではなく材料購入のため)

クリップを止めるためのM5 SUSのキャップボルト平ワッシャ、それにクリップの口先にくっつけられる2mm厚のEPDMゴム板(残材ですが)を添付します。
クリップは付きませんのでご自身で65mm幅のを入手してください。

2コまでならクリックポスト(185円)でお届け。
3コ以上はレターパック・ライト(4kgまで360円)を使います。

※リクエストはこの記事にコメントをどうぞ。
 (連絡用メールアドレスを記入のこと)

※ゴム板の用途
  文鎮:ハンダ付け補助ツールのクリップにゴム板を
  文鎮:クリップ先端のゴム、再び

※文鎮:ハンダ付け補助ツールまとめ

 

| | コメント (10)

2019年3月25日 (月)

割り込みで処理させるwordデータの扱い

Arduinoのアナログ基準電圧入力 に関連して、Arduinoのソースファイルをあれこれ見ていたら、
「そうそう。これこれ。 忘れたらアカンで~」的な内容に遭遇。
「wiring.c」内の、タイマーに関する処理に関して、起動経過時間をミリ秒単位で読み出すmillis()関数はこんな具合に処理されています。

volatile unsigned long timer0_millis = 0; ←Arduino起動からの経過時間(ミリ秒)
TIMER0のオーバーフロー割り込みで固定値が加算される4バイトの値です。
これ、
 ・割り込みで処理される
 ・2バイト以上の数値
というのを忘れちゃいけません。

timer0_millisの値は次の関数で得られます。
unsigned long millis() ←その値を返す関数

timer0_millisが割り込みで変化する値じゃなければ、
こんなふうに書けます。

unsigned long millis()
{
  return timer0_millis; ←4バイト値を読んでリターン
}

ところが、Arduinoで使っているATmega328は、RAM領域を1バイト単位でしか読み書きできません。
4バイトの値では4回のアクセスが実行されます。
そのアクセス中に割り込みが入ると、アクセス途中で値が変わっちゃって、正しい値が得られません。
そこで・・・割り込みで操作される2バイト以上の数値では、アクセス前にいったん割り込み禁止にして、途中で変更されるのを防ぎます。
これを忘れると、正しい値が読み出せません。

millis()ではこんなソースになっています。

unsigned long millis()
{
  unsigned long m;  ←4バイト値を入れるローカル変数
  uint8_t oldSREG = SREG; ←今が割り込み禁止か許可か?
  cli();       ←いったん割り込み禁止にして
  m = timer0_millis; ←4バイト値を読み出す
  SREG = oldSREG;  ←割り込み禁止、許可を元に戻す
  return m; ←ローカル変数に保存した値を持ってリターン
}

millis()実行前が割り込み禁止なら割り込み禁止状態で、
割り込み許可かなら許可状態でリターンするために、SREGをアクセスしています。

割り込み状態の復元が必要ないのであれば(いつも割り込み許可でリターン)、SREGの保存は不要です。
こんな具合に簡略化も可能です。

unsigned long millis()
{
  unsigned long m;  ←4バイト値を入れるローカル変数
  cli();       ←割り込み禁止
  m = timer0_millis; ←4バイト値を読み出す
  sei();       ←割り込み許可
  return m; ←ローカル変数に保存した値を持ってリターン
}

割り込み内で処理される2バイト以上の数値は、この手順を忘れてはなりません。

忘れるとどうなるか、Mstimer2を使って試してみます。

#include <MsTimer2.h> // タイマー割込
#include <wiring_private.h> // sbi,cbi命令用
// テストポイント
#define PB5_H (sbi(PORTB,PORTB5)) // PB5(D13) H/L
#define PB5_L (cbi(PORTB,PORTB5))
#define PB4_H (sbi(PORTB,PORTB4)) // PB4(D12) H/L
#define PB4_L (cbi(PORTB,PORTB4))
#define PB3_H (sbi(PORTB,PORTB3)) // PB3(D11) H/L
#define PB3_L (cbi(PORTB,PORTB3))
// タイマー値
volatile word tm_1ms; // 1ms upカウントタイマー
// 1msタイマー処理
void timer1ms(void)
{
  PB4_H; // テストパルス
  tm_1ms++; // 1msタイマー +1
  PB4_L; // 1,2,3…と+1で変化
}

// セットアップ
void setup() {
  pinMode(13, OUTPUT); // PB5 基板上黄LED
  pinMode(12, OUTPUT); // PB4 タイミング確認
  pinMode(11, OUTPUT); // PB3
  MsTimer2::set(1, timer1ms); // 1ms割り込み
  MsTimer2::start(); // 割り込み処理開始
  Serial.begin(9600); // シリアル出力
}

// ループ
void loop() {
word t1, x;
  cli(); // 割込禁止
  t1 = tm_1ms; // 1ms値をコピー
  sei(); // 割込再開
  while(1){ // 1ms値の変化を見る
    PB5_H; // テストパルス
    x = (tm_1ms - t1); // 経過時間 ★割込処理される数値を読んでいる
    if(x){ // 0以外の時:変化あり
     if(x != 1){ // 差が1msじゃないとき
       PB3_H;
       Serial.print("t1="); // 値を出力
       Serial.print(t1, HEX);
       Serial.print(" x="); // 差
       Serial.println(x);
       PB3_L;
      }
     cli(); // 割込禁止して
     t1 = tm_1ms; // 1ms値をコピー
     sei(); // 割込再開
    }
    PB5_L;
  }
}

シリアルモニターにはこんな結果が出てきます。
 t1=4FF x=256
 t1=BFF x=256
 t1=DFF x=256
 t1=EFF x=256
 t1=10FF x=256
 t1=13FF x=256
 t1=17FF x=256
 t1=19FF x=256
 t1=1DFF x=256
 t1=1FFF x=256
 t1=26FF x=256
 t1=2AFF x=256
 t1=2FFF x=256
 t1=36FF x=256
 t1=3DFF x=256
 t1=42FF x=256
 t1=4AFF x=256
 t1=4FFF x=256
 t1=55FF x=256
 t1=5DFF x=256
 t1=62FF x=256
 t1=65FF x=256
 t1=6CFF x=256
 t1=6DFF x=256
 t1=72FF x=256
 t1=78FF x=256
 t1=7EFF x=256
 t1=86FF x=256
 t1=8AFF x=256
 t1=8FFF x=256
 t1=96FF x=256
 t1=9DFF x=256
 t1=A2FF x=256
 t1=A6FF x=256
 t1=AEFF x=256
 t1=B3FF x=256
 t1=B7FF x=256
 t1=BFFF x=256
 t1=C4FF x=256
 t1=C8FF x=256
 t1=CBFF x=256
 t1=D1FF x=256
 t1=D7FF x=256
 t1=D8FF x=256
 t1=DEFF x=256
 t1=DFFF x=256
 t1=E5FF x=256
 t1=E8FF x=256
 t1=EFFF x=256
 t1=F4FF x=256
 t1=F6FF x=256
 t1=FDFF x=256

16bit=65536回(1分ちょい)でこれだけのミスが発生。
「xxFF」→「yy00」の桁上がりの読み出し時にミスが起こります。
だもんで、エラー発生するかも!のタイミングは256回。
そのうちの1/5ほどを拾ってしまってミスした数値が出ています。
一番先頭のだと・・・
04FF→0500のカウントの時、先に読んだLSBがカウントマップ前で「FF」。 
その間に割り込みが入りカウント値が+1されて「0500」に。
その直後にMSBを読んでカウントアップ後の「05」に。
前回値との差「05FF - 04FF」で「0x0100 = 256」に。
こんな具合です。

オシロ波形では、こんなふうに見えます。
波形の上から、
PB4 1ms割り込み処理タイミング
PB5 毎回ループで出すパルス
PB3 差が1じゃ無い時に出すパルス
   文字変換時間
TXD シリアル出力
  先頭文字「t=0x74」が見えている

Image000

 

Image001

ちなみに、「Z80」の割り込みではこんなバグを体験。
プロセッサ誌1989年3月号に投稿。
『バグタイザー試用レポート Z80のIFF2に関するバグレポート』

  Z80のIFF2に関するトラブル体験談

割り込み禁止か許可なのか、割り込み状態を見るための命令が、命令の実行と割り込みのタイミングがうまく合うと、結果をミスるというチップ内部のバグです。
その解決方法も示しています。
20世紀にあった与太話としてご覧いただければと。

 

| | コメント (0)

2019年3月22日 (金)

Arduinoのアナログ基準電圧入力

Arduinoの
Arduino IDE アップデートしたらMsTimer2が使えなくなった・・・をあれこれ調べていて・・・
こんなページを発見。
  ※MsTimer2とは関係なくって、アナログ入力についてです。
この中の、
参照電圧について (要注意! きちんと守らないと故障の恐れ!)
について、ちょいと私の意見を・・・

Arduinoのアナログ・リファレンス電圧設定についてを追いかけてみます。
※状況
・調べたのはArduino-UNO。(だけ)
  ソースファイルを見たり、現物の信号をオシロで見たり・・・
・ブートローダ起動での状態:
  AREFは入力状態。
  つまり、外部基準電圧を受け入れる状態。
    analogReference(EXTERNAL)と同じ状態。
    INTERNALやDEFAULTではない。
  ブートローダのソースを見ると、A/Dのマルチプレクサ
  はリセット状態のままでリファレンス電圧入力の設定も
  外部基準電圧の状態。
・ユーザープログラムの起動:
  A/Dのクロック設定とADEN(A/D変換許可)を初期化し
  ている。
  しかし、マルチプレクサ切り替えと基準電圧の設定は
  手を付けていない。
・analogReference(INTERNAL)、analogReference(DEFAULT)
 の設定:
  内部基準電圧あるいはAVCCに切り替えても、A/D入力:
  「analogRead() 」を実行するまでは「EXTERNAL」のまま。
  analogReference()の実行だけでは、基準電圧の切り替えは
  行われない。
  analogRead()実行ではじめてanalogReference()の設定が
  有効になる。
・だもんで:
  外部から基準電圧を供給しても問題なし。
  衝突は発生しない。
この中↑の、記述で・・・
■Arduino Reference:analogReference()
Notes and Warnings
 :
Alternatively, you can connect the external reference voltage
to the AREF pin through a 5K resistor, allowing you to switch
between external and internal reference voltages.
Note that the resistor will alter the voltage that gets used
as the reference because there is an internal 32K resistor on
the AREF pin.
The two act as a voltage divider, so, for example, 2.5V
applied through the resistor will yield
  2.5 * 32 / (32 + 5) = ~2.2V at the AREF pin.
↑の概略・・・
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
外部基準電圧とAREFピンの間に5kΩの抵抗を入れておけば、
内外の切り替えの間の衝突が避けられる。
ところが、AREF入力内部の入力抵抗は32kΩ。
だもんで、5kΩの抵抗を入れるとドロップが生じて、2.5Vの
基準電圧だと実質はざっと2.2Vになる。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
これ、入力抵抗を32kΩと決め打ちして数値を出していますが、
そんなうまいことはいきません。
というか、Arduino(UNOでしか確かめてませんが)では、
ブートローダーの処理とユーザープログラムの初期化処理を
見る限り、AREFと外部基準電圧出力が衝突する心配はありま
せん。
抵抗を入れると、せっかくの外部基準電圧の精度が落ちてしま
います。
直列抵抗無しでOKというのが、私の結論です。
そして、analogReference()を設定した直後に、ダミーで
analogRead()を1回実行しておくことで、基準電圧の
切り替えがそのタイミングで行われて、以降のA/D変換が
安定するかと考えます。
※補足
アナログ入力を処理しているのが「wiring_analog.c」。
このファイルを見ると・・・
uint8_t analog_reference = DEFAULT;  ←初期値はDEFAULTだけど
                     変数に値を入れているだけで
                     A/Dのハードは操作していない。
void analogReference(uint8_t mode)   ←基準電圧区分を設定する関数
{
// can't actually set the register here because the default setting
// will connect AVCC and the AREF pin, which would cause a short if
// there's something connected to AREF.
  analog_reference = mode;       ←ここでも変数を設定しているだけ。
}
設定された「analog_referenc」をAVRマイコンのA/D変換レジスタ(ADMUX)
に書き込むのは「int analogRead(uint8_t pin)」 関数。
マルチプレクサの入力ch設定とともにADMUXに書き込まれる。
これが実行されるまでAREFピンはリセット状態のまま。
※さらに
実際にA/D変換しているところ・・・
#if defined(__AVR_ATtiny25__) || defined(__AVR_ATtiny45__) || defined(__AVR_ATtiny85__)
  ADMUX = (analog_reference << 4) | (pin & 0x07);  ←AREFピンとマルチプレクサ確定
#else
  ADMUX = (analog_reference << 6) | (pin & 0x07);
#endif
#endif
// without a delay, we seem to read from the wrong channel  ←★注目!
// delay(1);
#if defined(ADCSRA) && defined(ADCL)
// start the conversion
  sbi(ADCSRA, ADSC);      ←A/D開始
// ADSC is cleared when the conversion finishes
  while (bit_is_set(ADCSRA, ADSC));  ←変換終了待ち
  :
  low = ADCL;       ←10bitデータ読みだし
  high = ADCH;
  :
こんな流れ。
で、★注目のところに注目。
// delay(1); をコメントアウトしてます。
AREFとマルチプレクサを切り替えてすぐにA/D変換しちゃってる。
ほんとは、切り替え安定待ち時間が欲しい所です。

※記事へのコメント書き込みアドレスをメモ
※追記
古いバージョンのArduino-ソースでどうなっているかを追跡してみました。
ここ → Arduino - OldSoftwareReleases から、まず「1.0」をダウンロード。
関係するファイル。
まずは、ブートローダーですがこれはA/D関連レジスタを操作していません。
で、A/D変換に関係するのは以下の二つのファイル。
・wiring.c
  ADCのクロックを設定するADCSRAを操作しているがADMUXは触らず。
  AREF入力はリセット時のままで外部入力。
・wiring_analog.c
   $Id: wiring.c 248 2007-02-03 15:36:30Z mellis $ という日付。
  ↑で説明したのと同じ処理になっています。
  つまり、外部基準入力時の注意を守る限り「衝突」は発生しません。
そして、もっと古い「0013」を見ても、基本の処理は1.0、つまり現行の
ソフトと同じです。

 

★このトラブルの発端(原因の推測)、
  setup内でanalogReference(EXTERNAL)を設定しないまま、
  analogRead()を実行したのじゃないかと・・・
analog_reference = DEFAULT;が初期値ですんで、
初回のanalogRead()の実行で、A/Dのch指定とともにADMUXの書き込みが
行われた瞬間にAREFピン(AVCCになる)と外部基準電圧ICの出力との短絡が
発生します。
これが「短絡するぞ」の原因じゃないかと考えます。

 

※さらに追記

上の方に記した
■Arduino Reference:analogReference()
  Notes and Warnings
「:」で省略した部分に大事なことが書かれてます。
     ※5kΩや32kΩに目が奪われちゃって・・・

~~~~~~~~~~~~~~~~~~~~~~~~~~
After changing the analog reference, the first
few readings from analogRead() may not be accurate.
~~~~~~~~~~~~~~~~~~~~~~~~~~

「AREFを変えた後の何回かのanalogRead()は不正確かも。」

これ、外部に基準電圧をつなぐとなれば、
analogReference(EXTERNAL)の実行はsetup内で1回だけ。
何度も変えるものじゃありません。

そして、

~~~~~~~~~~~~~~~~~~~~~~~~~~
Don’t use anything less than 0V or more than 5V
for external reference voltage on the AREF pin!
~~~~~~~~~~~~~~~~~~~~~~~~~~

「AREFピンには0V未満あるいは5V越えの電圧を加えるな。」
  ※5VというよりAVCC電圧か。Arduinoなら5Vだけど。

~~~~~~~~~~~~~~~~~~~~~~~~~~
If you’re using an external reference on the
AREF pin, you must set the analog reference to
EXTERNAL before calling analogRead().
~~~~~~~~~~~~~~~~~~~~~~~~~~

「AREFピンに外部基準電圧をつなぐ場合は、analogRead()
 実行前にEXTERNALに設定せよ。」
これが重要なわけです。

~~~~~~~~~~~~~~~~~~~~~~~~~~
Otherwise, you will short together the active
reference voltage (internally generated)and the
AREF pin, possibly damaging the microcontroller on
your Arduino board.
~~~~~~~~~~~~~~~~~~~~~~~~~~

「さもないと、内部生成された基準電圧とAREFピンが
 ショートでArduinoに乗ったマイコンがつぶれるかも。」

そこから短絡防止のための姑息な手段の「5kΩ、32kΩ」の話がくるからややこしい。

 

| | コメント (5)

Arduino IDE アップデートしたらMsTimer2が使えなくなった・・・

   ※私が実行した対策方法はあとで示します。
「Arduino」の開発環境、「アップデートがあるよ」のメッセージが出たんでアップデートしたら、これまで使えていた「MsTimer2」(タイマー割り込み処理)が動かなくなってしまって、「なんで?」状態に。
動かなくなったのは「MEGA-2560」。
「Arduino-UNO」では大丈夫。
調べてみると「MsTimer2.cpp」内のチップ名称指定からMEGA2560が抜けていると。
  ※検索:arduino mega2560 mstimer2
対策として「MsTimer2.cppにパッチを当てよ」とのこと。

アップデート前はちゃんと動いていたんです。
アップデートでMsTimer2.cppが古いのに書き換わったんだろうなの想像。
こんなのイヤ! 

~~~~~~~~~~~~~~~~~~~~~~~~~~
★私の対策方法
MsTimer2を使わず、タイマー2モジュールを直接制御して、
割り込みルーチンをベクトル設定から。

●setup内
 :
// タイマー2 割り込み有効に
TCCR2A = 0b00000010;  // WGM21,20 CTCモード
TCCR2B = 0b00000100;  //  プリスケーラ1/64
OCR2A = 250-1;            // 16MHz / 64 / 250 = 1kHz
TIMSK2 = 0b00000010;  //  OCIE2A コンペアマッチA割り込み有効
 :
●割り込み処理
/***** タイマー値 *****/
volatile byte tm_1ms; // 1msダウンカウントタイマー max 255ms
/***** タイマー2 1mS割り込み *****/
// コンペアマッチA割り込み
ISR(TIMER2_COMPA_vect)
{
  if(tm_1ms) tm_1ms--;  // 1ms値ダウンカウント
}

 

~~~~~~~~~~~~~~~~~~~~~~~~~~
MsTimer2の最小単位が1ms。
チャートレコーダーでは0.5msが欲しかったんで、割り込みを直接記述。

ただし、
AVRマイコンのCコンパイラ 具体的に ※volatileを忘れずに!
のように注意(word以上のデータをアクセスする時の割り込み禁止処理)が必要。

Arduino IDE、そういやこんな変更もあった・・・

 

 

| | コメント (0)

2019年3月21日 (木)

混ぜるな危険! ストレートとクロスのLANケーブル

昨年の製作物での制御ソフトの変更依頼。
通信にRS-422を使っているのですが、その接続はお手軽にということでLANケーブルを使っていました。
変更したソフトの動きを確認するには現物のハードが無いとできません。
そこで、通信用のケーブルも含めて現物を送ってもらいました。
ところが・・・
新しいソフトを組み込んでデバッグしようとしたら通信がうまくいかないんです。
制御ソフトの手直し、どこかでスカタンしたのかと思い、もとのソフトに戻してもダメ。
「ありゃ、ハードがおかしくなったか?」と通信のテストプログラムから再スタートです。
ところが、うまくいかない。
信号確認のためにはオシロが必要。
ソフトの手直しで、オシロスコープが出てくると・・・こりゃ重傷です。
オシロで見ると、RS-422で出入りする通信信号がおかしいのが一目瞭然。
で、なぜ?
はい。
それがタイトルの内容。
こちらに帰ってきたLANケーブル(何本もある)中に「クロスケーブル」が1本、混ざっていたのです。
それも、4芯の10BASE-T用のケーブルが。。。。。
   (この装置用にこちらから送ったものじゃない)
11
ちょっと見にくいですが、4本のケーブル色が入れ替わっているのが分かるかと。
こちらでは、クロスケーブル要注意ということで一目で分かるよう、プラグの両端にそれと分かるタグをくっつけています。

そうそう。
この装置の接続用に「百均LANケーブル」を何本か使っていたのです。
ちょっと不安になり、帰ってきたケーブルの接触抵抗を見ると、1Ωを越えているのに遭遇。
接触はしているんですが、ピンによって抵抗値が不安定なところがあるんです。
再圧着して大丈夫になりましたが、ちょい不安。
ケーブルをはさんで導通を確認したい、こんな時も文鎮:ハンダ付け補助ツールが役に立ちます。
12
マイコン型導通チェッカーでチェック。
接触抵抗1Ωを判断できます。

| | コメント (2)

2019年3月18日 (月)

左足!

金曜日帰宅時、停止時にロー側ギアにセットした自転車変速機のかみ
合わせが悪くて、出発時、踏み込んだところでガキッっとチェーン位置が
移動してペダルが異常回転。

その変動に足がついて行けず、左足がペダルから外れて地面と衝突。
左足膝の裏側が痛くって(ちゃんと歩けないくらい)、ちょいとめげてます。
湿布を貼ったり痛み止め薬を飲んだり・・・

椅子で座り仕事を続けてたら(膝を曲げた姿勢が継続)、まともに立ち
上がれない。
今朝はだいぶましなんだけど、医者へ行ってこようかと…
※行くのはここ↓

| | コメント (3) | トラックバック (0)

2019年3月14日 (木)

1300回充放電のエネループ・ライトとNi-Cd・・・その後

「電池イジメ」 、エネループ・ライトとROC製Ni-Cd(700mAh)の繰り返し充放電をやめたのが2017年の8月。
この時の電池、こんな具合に電池の納骨boxに。

急速充電出来なくなった電池、「なにかの調査で使うかも?!」っと、捨てずにストックしています。

死屍累々・・・

新たに電池を納骨しようと、ひさしぶりにフタを開けました。
11_2
ミノルタのデジカメDiMAGE7iを買ったのがニッ水電池との出会い。
その電池が右下にある綠青色のサンヨー・トワイセル。1700mAh。
   ※それまではNi-Cdしか使ってなかった。
自分で使ったのもあるし、友人とこから来た電池もいっぱい。
で、1300回充放電後のエネループ・ライトとNi-Cd もこの箱の中に入れていたのです。
どんなもんかと、電池電圧チェッカー で確かめてみると・・・
この二つの電池、パワーを残していました。
12_3
電圧は落ちていますが、1年半ほったらかし。
4.7Ω負荷だと0.1Vほどドロップ。
   ※ほかの電池、全部調べてないけどアウト。
     電圧チェッカー、無負荷での起動もしません。
納骨しておくのがちょいとかわいそうな気になっちゃいました。

| | コメント (0) | トラックバック (0)

アルカリ電池の電解液ってハンダと反応するの?

過去、あれこれと液漏れ電池によるトラブルの修理をしてきましたが、「断末魔の弱い「ピッ」音」 の記事を書いていて、ふと思ったのが、『アルカリ電池の電解液(水酸化カリウム)ってハンダと反応するの?』です。

電解液のかかったプリントパターン、「銅箔」部も腐食が進むんですが、ひどいのがハンダの乗った部分。

スルーホール部も含めて、「ハンダゴテで加熱しても溶けない何か」にハンダが変質しているようなのです。
例えばこの写真。

ハンダのところがこんなモフモフに。
13
レジストの下の銅箔部より、ハンダ付けされたハンダのある部分の変色が気になります。

レジストを削ると、スルーホール(ハンダがある)の直近で銅箔が切断しているのが見えます。

12

そして、スプリング電極のハンダの盛り、これにハンダゴテを当てても簡単には溶けません。
新しいハンダを供給しながら無理やり加熱しないと、この盛り上がった部分の「あやしいの」は取り除けません。
「水酸化カリウム」とハンダの成分(鉛フリーじゃないので、スズと鉛)、あるいは「銅」。
この反応ってどうなるんでしょうかねぇ?

| | コメント (1) | トラックバック (0)

2019年3月12日 (火)

断末魔の弱い「ピッ」音

今朝出社して、あれこれ装置(PCや暖房器具)のスイッチを入れる前の仕事場がまだ静かな時・・・
何やら小さな音で「ピッ・・・ピッ・・・ピッ・・・ピッ」っと断続音が聞こえてきたのです。
その出所を探ると、いろんなツール類を置いた棚。
何かの装置が「Help!」を求めているような気配なんですが、音が小さくて瞬間的にしか出ていないのでどれかわかりません。
「どのこ?」っと思いながら探しても、どれも電源ランプは光ってないし・・・。
ひとつひとつ手に持って確認して見つけたのが「バッテリー放電器」
「電池イジメ」 はやめてるんで、しばらく使っていませんでした。
これの報知ブザー(ケース内に入れている)が、か弱く「「ピッ・・・ピッ・・・」っと悲鳴を出していたのです。
   (ムラタの圧電発音体から4kHzの音)
Batd_box03
瞬間的に思ったのが「電池の消耗」。
液漏れかも」が・・・
電池ボックスのフタを開けてみると・・・・やっぱり。
3本のうちの1本から液漏れ。
11
一番上の「コーナン・LIFELEX」ブランドの電池がお漏らし。
典型的なアルカリ乾電池の液漏れ。
12
 
マイナス極側から漏出。
13
真ん中の「パナ」のもプラス極が腐食してますがこれは隣接被害。
電池ホルダー電極がひどいことに。
きれいに結晶が出来上がっています。
   ※サビはまだそんなにひどいことない。
14
    ※電解液は水酸化カリウム
・アルカリ電池の構造、液漏れの原因:パナソニック

ケースから電池ホルダーを外して、「湯」で洗ってみます。
そう、こんな状態になってもまだ電池は生きているんです。
電池電圧チェッカー で計ってみると・・・
左から「青」「パナ」「LIFELEX」の順で、
  無負荷    1.43V  1.39V  1.38V
  4.7Ω負荷  1.25V  1.27V  1.23V
「4.7Ω負荷」で1.2Vを越えているんで、「まだ使えるよ」状態です。
バッテリー放電器はリセットIC「S-80827CNY」で、電圧検出しています。
液漏れで電池電極と電池ホルダーとの接触抵抗が大きくなり、電圧低下をおこしてリセット起動を繰り返していたのでしょう。
これが断末魔の「ピッ」音として静かな仕事場で聞こえていたという次第です。
バッテリー放電器はリセット起動の時、「ピピッ」っと報知音を出します。
この最初の「ピッ」で電圧低下が発生してリセット。
そして回路電流が減って再起動。
これを繰り返していたわけです。
腐食した電極、湯で洗ってもキレいには復旧できませんでした。
新品にと比べると、そのまま使う気にはなれません。
21
そして、電池も洗うと「消費期限」のプリントが見えてきました。
22
うそのように「2019年3月」。
ほんまかいな~のどんぴしゃ。

| | コメント (0) | トラックバック (0)

2019年3月 8日 (金)

いつのまにやらエネループ・ライトが廃番に

電池イジメ の記事をまとめていたら・・・
から消えているのに気がつきました。
パナのサイトを見ると、
  エネループ・スタンダード
  エネループ・プロ
  充電式エボルタ・スタンダード
  充電式エボルタ・お手軽モデル
の4種類になっていて、エネループ・ライトが抜けてます。

生産終了品一覧
に出てるんですが、どれが最新の
型番だったのか、ちょい不明。

ニッ水電池のJIS規格 改訂ということなんですが、その影響かしら。
現状のはJIS C8708 2013(7.5.1.3)で、「ゆっくり充放電」で寿命を調べようというもの。
それに、新たにく2019(7.5.1.4)の手法での評価を追加するとのこと。
現JISの(7.5.1.4)は、加速試験の手順。
その(7.5.1.4.2)は、
  充電:0.3Cで4時間 あるいは製造業者が推奨する充電方法
  放電:1Cで1.0Vまで
これを繰り返します。
(7.5.1.4.3)になると、もう一段過酷で
  充電:1Cで1時間 あるいは製造業者が推奨する充電方法
  放電:5Cで0.8Vまで
(7.5.1.4.4)は、充電に自由度が。
  充電:1Cで製造業者が推奨する充電方法(-ΔV制御など)
  放電:1Cで1.0Vまで
   ※50サイクルごとの手順は省略
電池イジメでの充放電は、この最後の(7.5.1.4.4)に近い手法かと。
さて、どうなりますか。

| | コメント (0) | トラックバック (0)

2019年3月 7日 (木)

秋月のアナログテスター「M1015B」

秋月に部品注文のついでに買ったのがアナログテスター「M1015B」
写真、右側のです。
お代は税別1200円
11

左側の黄色カバー品は、2015年に買った「7007」
これも秋月。
M1015Bはこれよりちょいと小ぶりで、テスター棒が差し込み式になっています。
「7007」は、あまりにひどい測定精度だったんで、
  ・電気が来ているのは分かるけど、
   読み取り値は不確か。
  ・抵抗の大小は分かるけど、ほんとの値ははてな。
っと、実用的ではありません。
新規導入の「M1015B」はどうや?っと、ざっと確かめてみました。
エエんじゃないでしょうか。
そこそこの精度で読み取れています。
リニアリティも大丈夫。
内部抵抗、直流:10kΩ/V  交流:4.5kΩ/V
と、わりと高感度になっています。
スペックで出ていないのが、電池チェック時の測定抵抗。
計っておきました。 (およその値)
  1.5Vチェック用:16Ω
  9Vチェック用:900Ω。
電流レンジ分流抵抗は、
  250mAレンジ:2Ω。
  10mAレンジ:26Ω。
このテスターはちゃんと使えそうです。
せっかくですので内部を探査。
12

レンジダイヤル切り替えパターンと同一面でチップ抵抗が使われていました。

13
※不満点
最大レンジが直流交流とも「300V」になっているんですが、読み取り目盛がありません。
0~10目盛を読んで、これを30倍して値を推測するという方法でしょうね。
最大を250Vに押さえて、低電圧側にレンジを増やしておいて欲しいかと。
10V→50Vの間に25Vがあっても良いように思います。


※テスターに関する過去記事

| | コメント (3) | トラックバック (0)

2019年3月 5日 (火)

方眼紙

ラフ図を描くのに「A4の方眼紙どっかにあったぞ」と探してきたのがCQ出版からお預かりしている手書き図用のトレーシングペーパー。
12

5mm升で50mmごとに太線が入ってます。
  ※A3、A2の方眼トレーシングペーパーはたくさん残って
   るんですが、もう使うこともないかなぁ。
このCQ出版からの紙も残り少ないんで、とりあえず作っておこうと線を引いてみたのがこれ。
5mmピッチで25mmごとに太線を入れてます。
線色は薄い黒で。

その後、わざわざ作らなくてもネットにきっと転がってるでっと探してみたらありました。
自分で好きなのを作れるようになっていてなかなか優れもの。
対数の方眼紙もラインアップ。

| | コメント (0) | トラックバック (0)

2019年3月 4日 (月)

日本光電製AED装置ジャンク 2台

地域の会館に設置していた日本光電製のAEDが「賞味期限」切れで廃棄に。

  ※別メーカーの新しいのを設置しました。
2台有るのですが、どなたかいりますか?
バッテリと電極パッドも付属。
使用期間7年間で一度も使用せず。
ありがたいことです。
   ※バッテリがちゃんと生きてるかどうかは不明です。
解体してAEDの構造の勉強に使っていただくのがよいかもしれません。
11
持ち運び用の布ケースに入ってます。
 
12
2台まとめてでも、1台でもok。
お代は無料。 送料をご負担ください。
ただ・・・ 発送作業のお駄賃に 文鎮:ハンダ付け補助ツール
ご購入いただければと・・・
   (SUS304製16mm厚で2100円)
メールアドレスをご記入の上、この記事にコメントしてください。

| | コメント (6) | トラックバック (0)

2019年3月 3日 (日)

恐ろしいピン名称・・・おひさしぶり!

LIBSV3.AWK :OrCAD LIB -> BSCH3V LB3ツールの変換結果をチェックしていて「懐かしいデバイス」を思い出しました。

OrCADの自作部品ライブラリをアップしたこのファイル。
この中の「CPU.SRC」に入っています。
そのICの名はTMS9914
GP-IBのコントローラです。
LCoVでの確認画面。
11

左上の「10Ppin」がデータバスのD7。
しかしわざわざ「(LSB)」っと注記を入れてます。
その理由はこの記事に。
この痛い目に遭遇した技術者、ぜったいに大勢いるはずです。

| | コメント (0) | トラックバック (0)

2019年3月 1日 (金)

DOS版OrCADの部品ライブラリをBSch3VのLB3ファイルに

先日来、GAWKの「正規表現」でお騒がせしていますが、
部品ライブラリの変換ツールが動き始めています。
   ※まだまだ手直しするところは残ってますが・・・
で、作業を進めていて、出来ないことや苦手なところが
判明。
グラフィックパーツのFILL:黒塗りが未対応。
   *OrCADはfillポイントを座標で指定。
   LB3は円や四角のパラメータで指定。
ヒステリシス記号のベクトルデータが出ない。
     * OrCADではシンボル定義文字HYSTERESISで
   描いている。
ベクトルでの文字入れが不安定。
ARC(円弧)の処理が不安定。
       * OrCADはXY座標,LB3は角度で処理。
ピン指定の細かいところがちょいと。
ざっと、こんなところ。
LB3にしたときの変換がうまくいかない例
  ※LCoVで編集中の画面をコピー
・シュミット記号のベクトルデータが出ない。
 ビットマップでの形は出ている。
10
・文字位置が微妙
13


・FILL:黒塗りつぶしができない
12

・円弧のベクトルデータ、始点終点が部品枠外になった
 場合でも、出てしまう。
    OrCADでの元データ作成時の手抜きが原因
11
「ちゃんといったなぁ」というのがトランス類。
円弧の処理が気になっていたのです。
OrCADでの円弧は、中心座標、半径、始点座標、終点座標
で指定します。
LB3は、中心座標、半径、始点の角度、終点の角度で指定
と、元データの座標を角度に直さなくてはならないのです。
その時、角度の基準が「3時の位置が0度」で、0度→360度の
増加方向が反時計回り。
この時、始点と終点を逆にしちゃうと、60度の円弧が300度に
なってしまったりと、びっくりな絵が出てきます。


トランスの変換例。
21
もうひとつ。
22

ただ、古いOrCADの部品だと、ベクトルデータを入れてなくって
ビットマップだけのがあります。
元データがビットマップだけですと、こんな具合になっちゃいます。
23

ベクトルデータが無いとちょいとさみしい・・・・


「GAWK」のスクリプトですんで、あれこれ手を入れてもらうことは
可能かと。
650行ほどのファイルです。
     アップロード、ちょいと待ってくださいな。
Vectorの 「gawk 3.1.5 for Windows」 で実行確認してます。
GAWKをダウンロードしてもらって、コマンドプロンプトで
実行する環境を整えておいてください。



説明書なしで「libsv3.awk」だけアップロードしておきました。
・場所:http://act-ele.c.ooco.jp/jisaku/libsv3/libsv3.htm   ←説明入り
・ファイル:http://act-ele.c.ooco.jp/jisaku/libsv3/libsv3.zip


DOS版OrCADの部品ライブラリー(.LIBファイル)を「DECOMP.EXE」で
部品ソースファイル(テキスト)に変換してから、今回のツールに
食わせます。

| | コメント (5) | トラックバック (0)

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