« 2021年12月 | トップページ | 2022年2月 »

2022年1月

2022年1月30日 (日)

Arduino-UNOでtone()の挙動を調べる

「シャカシャカ・ホイップ」(ピコピコ+ボコスカ)をArduino-UNO
でまとめるにあたり、変更したのが映像信号発生のための割り込み。
当初、これにタイマー1(16bit)を使っていたのですが、タイマー0
(delayなどを司るシステムタイマー)に変えました。
そしてタイマー1を音程(ブザー音)の発生に割り当てたのです。

その際、気になって調べたのがタイトルにした「tone()命令」です。
何が気になったかというと・・・
 ・どのポートでも音を出せること。
tone()はピン番号と周波数を指定すると、そのピンが出力になって、
方形波(デューティ50%)が出ます。

ATmega328Pマイコンが持つ3つのタイマーを使って、任意周波数の
方形波を出力するとなると・・・
 ・タイマー0はシステムで使ってるんで、周波数は変えられない。
  OC0A=PD6(D6)とOC0B=PD5(D5)でPWM波は出せるけど。
 ・タイマー1はOC1A=PB1(D9)とOC1B=PB2(D10)が出力になる。
 ・タイマー2はOC2A=PB3(D11)とOC2B=PD3(D3)が出力になる。
    (これらもPWM出力は出せる)
任意のピンに方形波を出せる「tone()」、どのようにやっているのか
を調べてみました。 (Tone.cppで処理されてます)

方形波を出しているのは「タイマー2のコンペアA割り込み」でした。
tone()で設定した周波数で割り込みがかかって、指定したピンを
トグルさせています。
ハードウェアではなく、ソフトでパルスを出力しているのです。
ですので、タイマーのパルス出力機能は使っていません。

ISR(TIMER2_COMPA_vect){
if (timer2_toggle_count != 0) {
*timer2_pin_port ^= timer2_pin_mask; // (1)ピンをトグル
if (timer2_toggle_count > 0) // 出力回数をチェック
timer2_toggle_count--; // (2)マイナスの時はカウントしない
}
else { // countが0になったらおわり
noTone(tone_pins[0]);
}
}

(1) がデューティ50%の方形波を出している操作です。
  XORで、指定したピンのH/Lを反転させます。

(2) timer2_toggle_countがマイナスの時はカウントダウンしない
  ので、ず~とパルスが出ます。

tone()の処理、タイマーが持つパルス出力機能は使わず、
割り込みでパルスを出しているのが分かりました。
そこで、実際にどんなパルスを出すのかオシロで見てみました。
使ったのはこんなスケッチ。

/*****  Arduino-UNOで「tone()」のテスト    *****/
// タイマー0と1が8bit、タイマー2が16bit
// タイマー0はシステムが使っている
// OC0A PD6 D6
// OC0B PD5 D5
// OC1A PB1 D9
// OC1B PB2 D10
// OC2A PB3 D11
// OC2B PD3 D3
#define PB5_X (PINB |= (1 << PB5)) // LEDポートをトグル出力
#define PB4_H (PORTB |= (1 << PB4)) // PB4 H/L
#define PB4_L (PORTB &= ~(1 << PB4))
/***** SETUP *****/
void setup() {
DDRB = 0b00111111; // PB5~0を出力に
tone(11, 8000); // (1)PB3:OC2Aに8kHzを出力
}
/***** LOOP *****/
void loop() {
unsigned long d, tm1; // ミリ秒タイマー
tm1 = millis();
while(1){
PB5_X; // (2)LEDポートトグル
d = millis();
if(tm1 != d){ // タイマー変化あり
PB4_H; // (3)H,Lパルス出力
tm1 = d;
PB4_L;
}
}
}

(1) tone()で8kHzをD11ピンにずっと出力。
(2) D13ピン(LED出力)をトグル。
(3) millis()に変化があったらD12ピンにパルス。

割り込みが入ったら(2)のパルスが止まります。
millis()はタイマー0割り込みで計時していますので、
この時も(2)のパルスが止まります。

さて・・・
こんなタイミングで処理が行われています。
C007
PB5(D13)パルスに注目すると、割り込みの様子が見えてきます。

また、8kHzの↓エッジでトリガーをかけて、
デジタルオシロを「ずっと記録モード」にすると、
8kHz方形波に現れるジッターが観察できます。
C008

割り込み処理、システムタイマーであるタイマー0より
tone()を処理しているタイマー2のほうが優先されるので、
同タイミングで割り込みがかかってもtone()の割り込みが
先に行われ、波形の乱れが少なくなるようになっています。

しかし・・・
tone()の方形波出力は、割り込み内でのポート操作。
 (1) ポートを読んで
 (2) 指定ビットを反転して
 (3) ポートに書き戻す
これが割り込み内で行われてます。

もし、メインルーチン側でtone()と同じポートに対して
読み書き操作(ポートの別ビットをH/L)をしていたら・・・
「アトミック操作」 をしておかないと、出力波形が乱れて
しまいます。
上のスケッチに★の3行を追加してみます。

  if(tm1 != d){       // タイマー変化あり
PB4_H; // H,Lパルス出力
tm1 = d;
a = PORTB; // ★ポートBをメイン側で操作
a ^= (1 << PB2); // | PB2をトグル
PORTB = a; // | 書き戻す
PB4_L;
}

こんなパルスが出てきます。
D000
メインの読み書きと、割り込みでのポート操作が競合すると
8kHzの波形に乱れが発生します。

乱れるのはtone()で出しているほうのパルスですので、
「音」としての用途なら気も付かないでしょう。
しかし、一定周波数のパルスとして(便利に)使っていたら、
何らかの不具合が出るかもしれません。

このあたりの解説というか注意書き、残念ながら
見当たりません。
割り込み禁止と再許可の処理、重要なのが目に見えるかと。

※補足
PB2のトグル操作、いったん「a」に読み込んでから
XORしましたが、「 PORTB ^= (1 << PB2);」と
記しても同じです。
I/Oレジスタへのビット操作、SBI、CBI命令だと
 「読み込み・操作・書きもどし」
が1命令内で行われますが、XORを直接記述する命令は
無いので、3行に書いたのと同様の処理(いったんレジスタ
に読み込んでから書き戻す)が行われます。
マクロ、PB5_X、PB4_H、PB4_Lは「SBI、CBI」命令に
展開されます。
ですので、これらの命令に対してのアトミック操作は不要
なのです。

| | コメント (0)

2022年1月28日 (金)

「シャカシャカ・ホイップ」予備実験 #4

ピコピコ・スイッチ
ボコスカ・ハンマー
シャカシャカ・ホイップ(まだ未完成)
この3ゲームをArduino-UNOで制御という試み、ざっと
できたのですが、「画面表示の割り込み元」を変えました。

『ピコピコ・スイッチ』、Arduino-UNOで動くように
で紹介しましたスケッチでは、
ATmega328Pの「タイマー1」で映像信号のタイミングを
作っていました。
それを「タイマー0」に変えたのです。
タイマー1は16bitなんでで発生させる周波数(周期)をこまかく
設定できます。
それを「音」の発生に使いたかったのです。

Arduino-UNOでは、タイマー0をシステムで使っています。
  (delayやmillisなど)
それを取り上げて、映像信号の発生に使います。
このためdelay、millisは使えなくなります。

もう一つの8bitタイマーであるタイマー2、このOC2B出力が、
INT1入力(エッジパルス入力)と重なっているのです。
タイマー0やタイマー2のPWMで周期を設定したいときは
OCR-Aレジスタで繰り返し周期を設定します。
   通常のPWM出力(analogwrite)はTOP値=0xFFの
   PWM動作モードが使われます。
   このモードでは周期の微調はできません。
すると、PWM出力の制御はOCR-Bレジスタですることになり、
OC-B出力を使うことになります。
INT1入力を使いたい(ピコピコの二つのスイッチ入力)ので、
タイマー2のOC2B出力は利用できません。

ということで、タイマー0のOC0Bを、映像の同期信号出力と
して使うことにしたのです。
ピンが変わるので、回路図も変更です。

※参考
2020年1月28日:Arduinoから「タイマー0」を取り上げる(ユーザーが使う)

| | コメント (0)

2022年1月26日 (水)

「シャカシャカ・ホイップ」予備実験 #3

圧電素子の出力を見るのに、シャカシャカしてたら
泡立て器のループ(5ループある)が1本、外れてしまいました。
41_20220126120201
折れた根元の様子。
42_20220126120201
抜けただけのように見えますが・・・
43_20220126120401
これを見ると、「抜けた」んじゃなく内部で溶接かなにか
で固定していた部分が破断したのかと。

「ボウル」ですが、金属製のよりプラ製のほうが素直な
波形が出てきます。
金属製のボウルだと、泡立て器を衝突させる場所で、
取り込む波形に振動が出たりと、安定しません。

センサーはこれが良い感じ。
44_20220126120601
むき出しの圧電振動板。 直径20mm。

その信号を、こんな回路でとらえてみました。
46_20220126120701
二つのシリコンダイオードで波形振幅を制限。
その後、ショットキーダイオードで倍圧整流して
みました。

出てきた波形。
45_20220126120801
「0.3V」あたりでコンパレートすれば、きれいに
信号を拾えそうです。


| | コメント (0)

Amazonベーシック2000mAh単3ニッ水素電池の60%放電で 途中報告

Amazonベーシック 2000mAh単3ニッケル水素電池 800サイクル目で終了
これが昨年の6月。
その後、この電池の「60%放電」を試しています。
新JISの試験での0.5C放電、これを放電終止電圧の
1.0Vまでではなく、60%の時間=72分で止めるとどう
なるか、寿命が延びるのかの実験です。
 ・「放電深度を60%から100%にしたら寿命が10~15%に減る」

新JISでの、「1.0Vまで放電」でのグラフ。
Amz_vt
この通常の試験でのグラフを見ると、放電時間が
72分を切るのが370~380サイクルぐらいです。

60%放電での実験、現在は815サイクル目。
充放電の電圧変化、こんなチャートを描いています。
14_20220126093901
72分経過した時の、放電電圧が1.1Vを切って、
徐々に1.0Vまで近づいています。
充電終止電圧も徐々に上昇してきて1.7Vに接近。
寿命に近づいてきている感じがチャートから読み取れます。

実験の様子。
11_20220126094001

チャート記録の機材。
12_20220126094001
ナダ電子製「プリンタシールド」応用例  Arduino UNOでチャートレコーダを実現
  トランジスタ技術2014年6月号へ製作記事を投稿

他の電池での「60%放電」はこんな様子です。
 ・エネループ・スタンダード
 ・東芝インパルス 2400mAh
 ・エネループ・プロ

このAmazonnベーシックのが終わったら、
ダイソーのLOOPER を試してみます。


| | コメント (0)

2022年1月24日 (月)

「シャカシャカ・ホイップ」予備実験 #2

ボウルの側面に「振動センサーがわりの圧電発音体」を
くっつけてシャカシャカしてみました。

21_20220124090601
負荷抵抗を10kΩにしてシャカシャカした波形です。
泡立て器を当てる位置により信号レベルが変わります。

E000
E001

波形をFFTしてみると、6kHzあたりにピークが見えました。
  (横軸1divが10kHz)
E002

さて、信号検出どうしたものか。
ボコスカはTrのBE間電圧を使って簡単にしました。
波形の余韻を見ると、コンパレータでスパッとレベルを
判断したいところかと。

| | コメント (0)

2022年1月22日 (土)

「シャカシャカ・ホイップ」予備実験

2022年1月20日:『ピコピコ・スイッチ』、Arduino-UNOで動くように
子供達と遊ぶ新しいゲームを作ってみようということで、
シャカシャカ・ホイップ」なるものを企画しています。

「泡立て器」で「金属製ボウルをシャカシャカ」した時の
「接触回数」を検出して得点に使用という案です。
  イベントでの子供達、カラダを動かしてするゲームが
  良いようです。
  男の子も女の子も、高得点を目指してムキになってくれます。
  ボコスカは2台有るんで、競争してくれます。

泡立て器とボウル、電気的な接触でどんな具合になるか、
信号を見てみました。
ボウルはガレージから持ってきた25cm径のもの。
泡立て器は百均屋さんで購入。

11_20220122161101

電源5Vで1kΩの抵抗でプルアップ。
ボウルを電源のマイナスに。
泡立て器の金属部を抵抗の先につないでオシロに。
それぞれ、クリップでつなぎます。
泡立て器を左右に「シャカシャカ」するとこんな感じ。
B000_20220122161101
ボウルの縁、左右への接触、毎秒10回以上は簡単に
クリアできます。

波形を拡大すると。 盛大にチャタリング。
B001_20220122161101

0.1uFのコンデンサをGND間に入れてチャタリング吸収。

B002_20220122161101

B003_20220122161101

コンデンサを1uFにするとこんな波形。

B004_20220122161101
B007_20220122161101

電気的な接触で「シャカシャカ」回数を拾う方が良いのか、
・・・泡立て器に電線をくっつける必要が
   あるんで、電線ごとカシャカシャ
   するんがジャマになるか・・・
それとも、「ボコスカ・ハンマー」のように
振動センサー」をボウルに貼り付けて、シャカシャカの
振動を拾って計数するほうが良いか(泡立て器がフリーになる)
もうちょい実験してます。

接触だと、ず~っとオンという状態が考えられますんで、
オンのエッジ検出後、いったんオフの区間が続かないと
次のオンを検出しないという入力処理になるかと。

泡立て器につなぐ電線はなくしたいところです。

| | コメント (0)

2022年1月21日 (金)

「ボコスカ・ハンマー」のセンサー信号

ピコピコ・スイッチの入力はスイッチ操作ですが、
ボコスカ・ハンマーはピエゾ・スピーカーを衝撃センサー
にして信号を拾っています。

チャタリング除去のこともあり、どんな信号か見ておきました。
センサー部の回路は
2022年1月20日:『ピコピコ・スイッチ』、Arduino-UNOで動くように
で図示しています。

まず「片手でボコスカ」したときの様子。
Cc000
毎秒8回くらい。
両手でボコスカすると、倍は行くかも。
ということは、毎秒20回はちゃんとカウントしたいところ。

センサー波形を拡大すると、こんな様子に。
Cc001
トランジスタのBE間電圧で比較しているんで、けっこう微妙。
信号の↓エッジを捉えているんで、スレッショルドの具合で、
1回の打ち下ろしで2~3発の↓エッジ信号が入るかも。
すると、次サイクルの処理でパルスを2度取りするかもしれません。
ハードで処理するなら、リトリガブル・ワンショットマルチで
後発のエッジをマスクしておきたいところです。

処理のサイクルが垂直周波数の60Hz=16.7msなんで
ソフト的に厳密にチャタリング除去するにはきびしいところ
なんです。
簡単には、パルス検出した次のサイクルでのパルスは無視する
という処置でしょう。
すると応答は30Hzになって、10秒計時での最高得点は300点。
こんな所でしょうか。

ちなみに、「ボコスカ・ハンマー」の初号機(2台ある)は
こんな回路に。
コンパレータを使って、信号の大小を判別できるように
していました。(強打だと得点を増やす)
Cc21

| | コメント (0)

2022年1月20日 (木)

『ピコピコ・スイッチ』、Arduino-UNOで動くように

2022年1月10日:「ピコピコ・スイッチ」操作スイッチ部を新造
ということで、スイッチ板を修理したので、回路のほうも
新しくできればということで、これまでは「AT90S2313」で
動かしていたのをArduino-UNOの「ATmega328P」で動くように
スケッチを書いてみました。

これまでのプログラムはなにせアセンブラ。
ROM容量不足をEEPROMで補ったりと、なかなかたいへんでした。

Arduino-UNOだと「C言語」。
改造の手を入れやすくなるかと思います。

それと、「ピコピコ・スイッチ」ではスイッチ2つを見ていましたが、
「ボコスカ・ハンマー」(圧電センサーで拾ったパルス)にも使えるようにと、
プログラムの切り替え機能を付けておきました。
スタートスイッチの長押しで3つのプログラムを
切り替えできます。

下に画面が出ている「シャカシャカ・ホイップ」はまだ
これから作ってみようとしているゲームでして、
泡立て器」で「金属製ボウルをシャカシャカ」した時の
「接触回数」を検出して得点に使用というものです。
どんな接触具合になるか、まだこから調査です。
チャタリング吸収回路を考えなくちゃなりません。

まずは回路図。
Piko_boko1

そして、スケッチ。 (バックアップがわりに)
  ・ダウンロード - test_tvout_sync1.zip

とりあえずの起動画面。
A000_20220120171801
A001_20220120171801
A002
  ※緑に映っているのは昔々のグリーンモニター
   NEC製 JB-902M

2021年12月15日:『ピコピコ・スイッチ』制御回路
ボコスカ・ハンマー

| | コメント (4)

2022年1月19日 (水)

パナ製単3アルカリ電池液漏れ (使用期限切れ)

ふだん使わない電池使用機器、できるだけ電池を外して
おくようにしてるんですが、忘れてしまうこともあります。
 (すぐにまた使うだろうという思い込み)

今回の液漏れ遭遇機器はこれ。
実験用ワイドレンジ・ディジタル・マルチ照度計の製作 無調整!10~10万lx
  トラ技・2016年5月号に掲載してもらいました。

09
   (塩ビパイプのフタ内側に照度センサーを貼り付け)
LED照明の明るさをチェックしようと引っ張り出してきて、電池の
状態を点検したら・・・2本のうち1本が液漏れ。

12_20220119091201
電解液が乾いて結晶が見え始めていました。
10_20220119091201

パナソニック製の単3ですが、使用推奨期限が2012年5月。
さすがにこれはあきません。

11_20220119091201

でも、まだエネルギーは残していました。
  無負荷  1.37V
  4.7Ω負荷 1.23V
  1Ω負荷  0.96V
液漏れしてなかったら、「3~4割くらいはパワーを残してるぞ」という
判断でしょうか。
  ※4.7Ω負荷で1.2V以上あるんで。
    電池電圧チェッカーでの判断
消費電流の小さな機器ならまだ使えます。
しかし、この電池は廃棄。

| | コメント (0)

2022年1月14日 (金)

オンボードDC-DCコンバータが入ってこない!

電子部品供給の逼迫で、DC-DCコンバータ(モジュール)が
入ってきません。
「コーセル」に「TDKラムダ」、有名どころのがアウト。
問い合わせに「納期不明」や「半年先」の回答。
この前、困ったのがこれ。
コーセルの15W。
  ・MGS152405  (degikeyで検索)
11_20220114103501
24V入力で5V出力。
できあがった基板へハンダしますんで、同一ピン配置じゃないと
あきません。
なにか代品が無いものかと探したところ、出てきたのが
このモジュール。
12_20220114103501
  ・PDQE15-Q24-S5-D
ctrl:on/off制御のロジックが異なりますが、使っていなければ
置き換えできます。
少し背が高くなりますんで注意。

もう一つがTDKラムダ。
  ・CC3-2412DF-E
13_20220114103501
24V入力で±12V出力。
これも入ってきません。
探しましたら、これが使えそうです。
  ・BTB24-12W12D  (現物はまだ入手していない)

いつまでこんな状態が続くんでしょうねぇ。



| | コメント (0)

2022年1月13日 (木)

『日本船舶無線電信局局名録』をグーグルドライブにアップ

2021年10月20日:古紙回収で『日本船舶無線電信局局名録』
この局名録、全ページを「oxyさん」がスキャンしてくださいました。

21_20211020090201

グーグルドライブにアップしておきました。
https://drive.google.com/file/d/11-J-fSDf6-Xe4kW_cKHgY7Cjh7xztHPY/view?usp=sharing
  ≪Japanese_Ships_CallBook_1965.zip :pdfを圧縮≫
ちょっと大きくて134Mバイトあります。
ダウンロードしてみてください。

※著作権の問題 (oxyさんの解説をかいつまんで)
 ・結論:著作権の保護期間は終了している
 ・著作者が自然人なら死後70年。法人なら公表後70年。
   ※2022年1月19日付けのoxyさんからのコメントを
    参照してください。 (50年ということで)
 ・局名録の発行年月日、奥付表示で1965年3月25日とあり、
  2015年3月25日をもって保護期間が終了してる。
 ・編者である船舶通信士協会は1999年に解散している。
ということで、全ページの公開は問題なし。


※元記事のコメントにありました「青函連絡船 摩周丸 JHMI 」
を調べていましたら(青函連絡船に関する本、洞爺丸台風に
絡んだものが目に付きます)こんな本を見つけました。
 ・青函連絡船 乗組員たちの証言

図書館に有ったのでさっさくリクエスト。
・表紙
11_20220113141701

中ほどに「通信」を解説したこんなページが。
12_20220113141701
モールスでのやりとりが紹介されています。

| | コメント (2)

2022年1月10日 (月)

導通チェッカーに入れていた単4電池が液漏れ

「ピコピコ・スイッチ」操作スイッチ部を新造、この作業をした
のは自宅ガレージ。
「電気回り」関連作業用のツール、ある程度は置いていますが
「とりあえず」のものです。

この時、スイッチ接点の状態を見るのに使ったのが
旧バージョンの導通チェッカー
この記事↑で改造したもの(クリップのタッチで電源オン)を
ガレージに置いてありました。

久しぶりに使ったら・・・なんか不安定。
クリップを短絡しても、どうも報知が安定しません。

原因は・・・
ケースを開けてみると、電池の液漏れが発生してました。
2本使っている単4電池のうちの1本、マイナス極側から
電解液が漏出。
電池ボックスが「濡れて」います。

11_20220110211401
  ※左側の電池のマイナス極側

液が出てすぐなんでしょう、スプリング電極の腐食までには
至っていませんでした。
電池を取り外して、電池電極を清掃して解決です。

12_20220110211401
  下の方のマイナス側、外装カバー内に液漏れが見えてます。 

電池の状態ですが、2本ともまだエネルギーは残していました。

・漏出した方、
  無負荷:1.46V 4.7Ω負荷:1.34V 1Ω負荷:1.08V
・大丈夫な方、
  無負荷:1.47V 4.7Ω負荷:1.36V 1Ω負荷:1.15V
と、1Ω負荷にするとドロップは目立ちますが、さほどの
違いはありませんでした。
4.7Ω負荷でのドロップ電圧だと「半分以上は残ってるで」という
判断かと。
※電池電圧、残量チェックで使ったのはこれ↓
  ・電池電圧チェッカー
導通チェッカーとともに、必須のツールです。

液漏れ電池の「賞味期限」は「2024年2月」。
まだ大丈夫なはずだったんですが・・・

| | コメント (1)

「ピコピコ・スイッチ」操作スイッチ部を新造

「ピコピコ・スイッチ」のスイッチ部、昨年末のイベントで
破損してしまいましたんで、新たに製作しました。

2021年12月13日:ひさしぶりのイベントだったけど・・・「ピコピコ・スイッチ」破損
2021年12月15日:『ピコピコ・スイッチ』制御回路
2014年07月21日:イベント用ゲーム機「ピコピコ・スイッチ」、スイッチ破損!

左右のスイッチと中央のスタートスイッチの計3つを交換。
21_20220110205301

一番よく使う(どつく!)左右のスイッチは新品に交換。
今回は白と赤に。
中央のスタートスイッチは再利用できるかと、古いの
から外したら・・・固定ネジを締め付けたらスイッチ本体
外装部が割れてしまいました。
  ※そんなにチカラを入れたんじゃないんですが・・・
手持ちの押しボタンスイッチで使えそうなのをパーツボックスの
中から探したら、オムロンのちゃんとしたやつ(制御盤で使う
ようなの)しか見当たりません。
  ※おもちゃに使うにはもったいないけど、まぁ
   在庫品でしたんで。

今回の構造、基本は前のといっしょ。
百均屋さんで買った樹脂ケースに穴を開けてスイッチを装着。
「繰り返しのどつき」がケース割れの原因なんで、スイッチの
そば(内側)に「木っ端」を置いてネジ固定。
これで、「どつきのチカラ」によるケースへのダメージがマシ
になるかと。
  ※スイッチそのものへのダメージは変わらんでしょうが
これで、次回のイベントに備えます。

| | コメント (0)

2022年1月 3日 (月)

DHT11を使った出窓の結露対策用ヒータ制御回路 クリスマスから正月

クリスマスから正月へ、年越しの記録です。
H23
湿度90%を越えた日があったので、右の湿度値のスケールを
20%~100%に変えています。
現状、これで結露でのガラス曇りはほぼ解消してます。

| | コメント (0)

2022年1月 1日 (土)

謹賀新年

本年もよろしくです。

※絵は次男:正悟(せいご)の作
2022b

オミクロンの出現で、ガレージの再開はなかなか難しそうです。

| | コメント (0)

« 2021年12月 | トップページ | 2022年2月 »