電子工作

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変換しちゃってる。
ほんとは、切り替え安定待ち時間が欲しい所です。


※記事へのコメント書き込みアドレスをメモ

| | コメント (3)

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Ωを判断できます。

| | コメント (1)

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月 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月28日 (木)

電気二重層コンデンサの劣化?!

電気二重層コンデンサ いわゆるスーパーキャパシタを使って
ちょいと回路をごそごそ。
   ※停電時のバックアップ用回路です。
パーツボックスから手持ちの部品を引っ張り出してきて、
仮つなぎで実験。
   ※これ、10年以上未使用状態で箱の中で眠ってい
    たはず。 ものによっては20年になるかも?
ところが・・・・
思っている性能が出ないのです。
すぐに放電しちゃうのです。
充電電流を見れるように電流計をつないでみると、
想定以上の時間、電流が流れています。
同じように部品箱で眠らせていた別のスーパーキャパシタに
変えても、似たような挙動をしています。
なんというか「不活性化」しているような感じ。
充放電を繰り返してみて、調子が戻るかどうか試してみます。

※繰り返してると、調子が出てきた感じ
やっぱ、新しいモノを買ってためしてみないといけないようです。


※極端にアカンのもある。
こりゃ、新品がいるなぁ。

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

2019年2月21日 (木)

いろんな集合抵抗

手元の集合抵抗 を集めてみました。
    表面実装品は除いて(笑)
11
5本足から8本足、9本足、10本足、そして16ピンのDIP品。
4素子入りが5本足。
8素子入りが9本足。
8本足や10本足はどうなってるの? という疑問があるかと
思います。
今回、新規購入したのが右下の10本足。
「R-2R接続」 になっていて、8ビットのD/Aコンバータが
構成できます。
用途はこれ。
ただ、↑記事そのものではなく、低周波10Hz~300Hzの周波数帯の
様子を調べようと、スイープ発振器を作ろうとしているのです。
アナログ的に単純にスイープするのじゃなく、例えば100Hzを1秒、
次に10%アップの周波数を1秒というふうに周波数を可変しようと。
その可変具合をどうしようかと試したのが等比級数。
「抵抗値」の数値区分ですな。
抵抗のE24系列をまねて、こんな具合にスキャンテーブルを作成し
てみました。
こんなgawkのスクリプトで計算出力。
    for(i = 0; i < 24; i++){
        r = 10 ** (i / 24)
        printf("    %5.3f,    // %d\n", r, i)
    }
その出力をリダイレクトで取り込んで、プログラムの中に
テーブルとして入れ込みます。
/********************************/
/*      周波数スキャンデータ    */      
/********************************/
/*****  E24系列 x.xxx桁     *****/
const float scan_tbl[] PROGMEM ={
    1.000,    // 0
    1.101,    // 1
    1.212,    // 2
    1.334,    // 3
    1.468,    // 4
    1.616,    // 5
    1.778,    // 6
    1.957,    // 7
    2.154,    // 8
    2.371,    // 9
    2.610,    // 10
    2.873,    // 11
    3.162,    // 12
    3.481,    // 13
    3.831,    // 14
    4.217,    // 15
    4.642,    // 16
    5.109,    // 17
    5.623,    // 18
    6.190,    // 19
    6.813,    // 20
    7.499,    // 21
    8.254,    // 22
    9.085,    // 23
};
数値、抵抗で使われているE24系列の値と微妙に異なります。
3とか3.3とか3.9。
E24最後の「9.1」、「9.0」にしとけば良かったのにっと思っちゃいます。

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

2019年2月20日 (水)

「gawk」の正規表現・・・続き:文字の順番を入れ替える

もう一つ、gawkの処理で「簡単に!」を実現したののが
「負論理記号」。

例えば「74138」。
X1
部品ライブラリの「ピン名称」、Bsch3Vだと「¥G¥2」のよう
¥が先に来て負論理のupper barが次文字の上に出ます。

+PIN,N:A,DF:FFFFFFFF,L:L1,T:,M:1,-PIN
+PIN,N:B,DF:FFFFFFFF,L:L2,T:,M:2,-PIN
+PIN,N:C,DF:FFFFFFFF,L:L3,T:,M:3,-PIN
+PIN,N:\G\2\A,DF:FFFFFFFF,L:L5,T:N,M:4,-PIN
+PIN,N:\G\2\B,DF:FFFFFFFF,L:L6,T:N,M:5,-PIN
+PIN,N:G1,DF:FFFFFFFF,L:L7,T:,M:6,-PIN
+PIN,N:\Y\0,DF:FFFFFFFF,L:R1,T:N,M:15,-PIN
+PIN,N:\Y\1,DF:FFFFFFFF,L:R2,T:N,M:14,-PIN
+PIN,N:\Y\2,DF:FFFFFFFF,L:R3,T:N,M:13,-PIN
+PIN,N:\Y\3,DF:FFFFFFFF,L:R4,T:N,M:12,-PIN
+PIN,N:\Y\4,DF:FFFFFFFF,L:R5,T:N,M:11,-PIN
+PIN,N:\Y\5,DF:FFFFFFFF,L:R6,T:N,M:10,-PIN
+PIN,N:\Y\6,DF:FFFFFFFF,L:R7,T:N,M:9,-PIN
+PIN,N:\Y\7,DF:FFFFFFFF,L:R8,T:N,M:7,-PIN

ところが、OrCADだと「G¥2¥」となって、

文字の後ろに¥があると、その文字の上に
バーが付くのです。

'74LS138'
{X Size =}   7      {Y Size =}   9      {Parts per Package =}   1
L1      1         IN  'A'
L2      2         IN  'B'
L3      3         IN  'C'
L6      6         IN  'G1'
L7      4 DOT     IN  'G\2\A\'
L8      5 DOT     IN  'G\2\B\'
R1     15 DOT     OUT 'Y\0\'
R2     14 DOT     OUT 'Y\1\'
R3     13 DOT     OUT 'Y\2\'
R4     12 DOT     OUT 'Y\3\'
R5     11 DOT     OUT 'Y\4\'
R6     10 DOT     OUT 'Y\5\'
R7      9 DOT     OUT 'Y\6\'
R8      7 DOT     OUT 'Y\7\'
T0     16         PWR 'VCC'
B0      8         PWR 'GND'

単純な文字の入れ替えなんですが、うまい表現が思いつきません。

と同じように、¥の検出で、その直前の文字列の最後尾を1文字
抜き出し、¥を挿入後に抜いた文字を加えるという処理をして
います。
これ、どうにかスマートにする手法って無いでしょかね。

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

2019年2月14日 (木)

ハンダゴテのコテ先を新しく

新品に換えると、やっぱし快適です。
11

普通のハンダ付け(ユニバーサル基板での試作やら)で常用してい
るのは「高千穂電気」のコテペン40。
  ※高千穂電気、合併により2009年にエレマテックと

   名称変更してるそうな。

このコテペンはすでに廃品種。
コテ先などとりあえずの予備パーツはセラコート工業株式会社
から入手できる。

でも、これのヒータはすでに在庫無し。

私の手元の在庫、新品コテ先が4つとヒータが3つ。
コテ先だけでも、もうちょい買っておこうかなぁ。

コテペン40の場合、コテ先の溝にセラミック板ヒータを
滑り込ませる形状になっていて、長く使っているとコテ先
が微妙に変形しちゃうんです。
それで、ハンダゴテを落とした時に、ヒータが割れてしまう
というトラブルが発生します。
だもんで、予備部品が必須。

   ↓古いの、曲がっている!
12

セラコートのページを見ていると、「コテペン2」という
後継機種ももう終息だとか。

あれこれハンダゴテを使ってきて、普通のハンダ付けでは
これが一番好きなんですよ。


膨張:白光のコテ台


※追記(2月15日)
今朝、デンオン ハンダ吸引器 SC-7000Z をバラしてメンテを実施。
弁部、けっこうひどいこと(吸い込んだフラックスの付着)になってました。
で、この時、ハンダゴテ関係のパーツを入れた箱の中から、こんなのが
出てきました。
高千穂の「コテペン40」を買った時の外箱の説明書き部分を残して
ありました。
きっとコテ先の型番を知るためだったんでしょう。
11
    (クリックで拡大↑)
日本橋の岡本無線店頭で買った記憶があります。
お代が「2000円」。
   ・・・まだ消費税は無かった頃
     消費税って平成元年なんだ。
セラコート:コテペン40の価格 を見ると「3424円(税込)」
となってます。
もう在庫ゼロということですが。

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

より以前の記事一覧