重箱の隅

2024年10月29日 (火)

ステッピングモータ駆動回路を24Vだけで

「出窓」で使っているステッピングモータ駆動回路。
 ・2023年5月4日:出窓:鯉のぼりを振る
 ・2022年5月17日:「壊れたオルゴールの人形」を回せ!
 ・2022年5月8日:「ダイソーの観覧車」を回せ! 回路図
これらは
 ・POLOLU A4988 Stepper Motor Driver Carrier
を使ってステッピングモータを駆動しています。

モータの電源は24V。
出窓前の人感センサ検出オンで、DC24Vが供給されるのです。
その電源を使って回路を起動します。
  常時回しているともったいない。
  振動(音)が出るのはうるさい。

そして、これらの回路では
「回すためのクロック発生回路にDC5Vが必要」
ということで、DC24V入力DC5V出力の非絶縁型ですが、
DC-DCコンバータを回路に乗せてます。
これがちょいともったいない。 ・・・気がする
   秋月で買える安価なものなのですが、
   う~む。

昔々・・・
  24Vを5Vに落とすのにTO92の78L05(100mA)
  三端子レギュレータを使ったら、ちょいとばかし
  発熱がぁ・・・
  自分のバイアス電流だけでも熱くなってしま
  ったのです。
  それでTO-220形状のレギュレータに変えたこ
  とがあります。 ※イヤな記憶
    例えば、ドロップ電圧が19V。
    バイアス電流も含めて20mA消費だと
    それだけで380mW。 1/2.6W。
    定格電力の半分まで行っちゃいます。
今のレギュレータだとバイアス電流も小さく
なっているでしょうから、こんなことはないの
でしょうなぁ。
  ちょっと調べたら、HTC製のが、78L05という名な
  のに「5V出力タイプの供給電圧は20Vまでにしておけ」
  なんて記述が。
そんなこんなで、24V→5VではDCコンを使うように
なりました。

ステップ・モータ・ドライバの駆動用クロックの
発振回路、電源オン時にモータをスロースタート
するのにVCO IC(4046)を使っています。
  最初は低い周波数で起動。
  時間とともにクロック周波数を上げて定速状態に。
というのをこのIC一つでしているのです。
この回路にDC5Vが必要なのです。

これをDC24Vだけでできればええなぁっというのが
今回の実験。

  ※ドライバモジュールにも課題が。
   POLOLU A4988にはモータ電源の他に
   ロジック回路用電源VDDが必要なんです。
   ですから、24V単一で動かそうとすると、
   このモジュールは使えません。
   そこで、モータ電源から内部動作用電源を
   作ってくれる DRV8825 を使おうとしてい
   るのですが、このモジュールにも悩みどころ
   があるのです。
     (追って解説)

まずは、24Vで動くVCO回路を作るのが目標です。
オペアンプを使ったVCO回路は、LM324やLM358の
アプリケーションノートで解説されています。
  ※昔話
   ナショセミのデータシートに回路が掲載され
   ているのですが、古いのだと一段目と二段目
   の出力がつないで書かれていたりして
   初心者イジメの回路になっていました。

A1n
  ICメーカーが提示するサンプル回路、
  信じちゃいますよね。

今どきはこの解説↓でしょうか。
 ・CQ出版 オンライン・サポート・サイト
    CQ connect:電圧制御発振回路の制御電圧と発振周波数
     ※回路をリライト
C1_20241029160201
しかし、これにもイケズがあるのです。
この解説では
  理想的な入出力レール・ツー・レールOPアンプ
を使うと但し書き。
この約束事を破って、上に示した単電源汎用のLM358
やLM324で試すと・・・ありゃ。動かないゾ
っということになっちゃうのです。

関係するのは電源電圧。
電圧がオペアンプが動作し始める最低電圧
2.5V~3.5Vくらいなら発振するのですが、
4Vくらいまで上げると方形波出力がLに張り
付いて発振が止まってしまうのです。

発振中はVaを中心電圧とした三角波が出ます。
しかし、電源電圧を徐々に上げると、デューティが
狂ってきて最終的にVbがLになって止まってしまう
という現象がおこります。

このときの「Lのレベル」。
これが問題で、発振が止まるときはNPN
トランジスタQ1のベースをオンできる
くらいの電圧(GNDに張り付かない)になって
いるのです。

Lを出しているのにQ1がオン。
Vbが0Vから浮いておよそ0.6Vくらいになっちゃう
のが原因です。
電源電圧上がるとコンパレータとして使った
オペアンプの出力電圧が下がりきらないのです。

で、対策。
その1。
  VbがLになる状態でオペアンプが引き込む
  電流を減らせば出力電圧が下がります。
  現在10KのR1をもっと大きくすると
  (ヒステリシス幅が変わる)とちょいましに
  なりますが、24Vでは動きません。
  電圧を上げると、やはり発振停止。

その2。
  Q1のB-E間にRBを入れてVbを分圧。
C2_20241029160701
こうすると、Q1のベースがオンする電圧に
余裕が出て、電圧24VでもQ1がオフできる
ようになって発振してくれます。

ナショセミのコンパレータLM339のアプリケーション
では、こんな回路が示されています。
これだと、トランジスタのオン電圧は関係なくなります。

C3

コンパレータは低速ならオペアンプとしても
使えるぞっというサンプルになるかと。

でも・・・
コンパレータ方式のVCO、昔のデータブックには
こんな初心者イジメの回路例も!

A1m

一段目と二段目の出力が衝突。
このコンパレータの場合、出力がオープンコレクタ
なので、信号が短絡しても過大電流は流れませんが、
正しい動作はしません。

※関連
  ・2017年7月10日:「十字接続は避ける」
  ・2023年6月7日:不安な接続記号「●」
  ・2016年07月01日:回路図、配線の交差と接続
  ・2014年11月15日:回路図での交差信号の描き方

さて・・・
電源電圧を24Vにして発振できたとしても、
モータドライバへの駆動パルスの最大電圧は
5Vで24Vのパルスを5Vに制限する方法を
考えなくてはなりません。

簡単にすますなら、ツェナーダイオードで
クリップかなぁ。

※電源電圧
オペアンプLM358もコンパレータLM393も片電源なら
24Vで使えますが、最大電圧に注意がいります。
サフィックスにより微妙に異なるのです。
メーカでも違います。
データシートのバージョンにより書いてあることが
異なることもあります。
TI製だと、
  LM358、LM393ならmax30V。
  LM358B、LM393Bならmax36V。
   「B」付でオフセット電圧などが改善。
さらに、
  LM393Lとなると、CMOSになって電源電圧
  範囲が1.65~5.5Vに。


※続き
  ・2024年10月31日:ステッピングモータ駆動回路を24Vだけで #2


| | コメント (0)

2024年10月 6日 (日)

おっと。map関数の計算桁に注意

Arduinoのmap関数に関して恨みを持っている
がごとくウダウダ言っております。
 ・2020年5月17日:Arduino なんとかして誤用を正したい:A/Dの1/1023とmap関数

トラ技にも載りました。
 ・トランジスタ技術2024年3月号『実はワナだらけ…確実に動かすArduino Uno R3

で、今回の
 ・2024年10月5日:DDS方式の2相パルス発生回路、周波数スキャン機能を付ける

ここで、「おっと危ない」だったのが「map」関数の数値範囲。

周波数sweepでは、
  周波数の値は0.01Hz単位で9999.99Hzが最大。
  BCDで8桁。999999=0xF423F 20bit

  経過時間が10ms単位で600.00秒が最大。
  BCDで5桁。60000=0xEA60 16bit

sweep処理では、こんな値を使います。
  Lo側周波数 1~9999Hz   f1
  Hi側周波数 1~9999Hz   f2
  Rise,fall時間 0.0~600.0秒 t1

sweep周波数の設定は1Hz単位ですが、内部では0.01Hz
単位に直します。
sweep時間も0.1秒を0.01秒にして60000が最大。

そして、「map関数」はこのように定義されています。

long map(long x,         入力
  long in_min, long in_max,  X1,X2 変換元
  long out_min, long out_max) Y1,Y2 変換先
{
 return (x - in_min) * (out_max - out_min) ★1
   /  (in_max - in_min)
   + out_min;
}

sweep処理で経過時間tmからsweep周波数fmを計算するとき、
map関数をこのように使いました。

  fm = map (tm , 0, t1, f1, f2);

このとき、周波数と経過時間が設定の最大値に近づくと、
★1の乗算に失敗するのです。

周波数(20bit)と時間(16bit)を掛け算すると、
値によっては「36bit」の数字が出てきます。

map関数の入力と出力、単独で見るとそれぞれは
32bitの数値範囲に入っていますが、内部計算を考えると
32bitではアウトなのです。

内部は「int64_t」で計算しなくちゃなりません。

 return ((int64_t)(x - in_min) *
     (int64_t)(out_max - out_min))
     / ((int64_t)(in_max - in_min))
     + out_min;

乗算部、除算部をint64_tにキャストして64bitで
計算するようにしました。

LOG sweepではfloatにしたmapも使っています。

float mapf(float x,
  float in_min, float in_max,
  float out_min, float out_max)

2022年11月6日:Arduino map関数をfloatに

もうひとつ。
t1がゼロだとゼロ除算してしまうので、mapに
食わす前に判定して除外しておかなくちゃなりません。
t1がゼロなら fm=f1でリターンてな処理です。

| | コメント (0)

2024年5月31日 (金)

リターンパスの無いオペアンプ入力回路

非反転アンプ 3kΩと27kΩの抵抗
この記事↑では、ゲイン選択ジャンパを外したらどう
なるの?をコメントしましたが、オペアンプの入力
バイアス電流の戻り場所はむちゃ重要です。
  解説記事などでこれを忘れている回路を
  見かけるのです。

ADI Analog Dialogue:アンプ回路設計時の問題を回避するには
ここで↑、詳しく述べられています。

最近だと、コテ先温度を読みたいゾ う~む
熱電対についての記事(昔のトラ技)を調べて
いて、こんな回路を見つけました。

  トランジスタ技術2006年10月号p.244~
   白金測温抵抗体と熱電対の正しい使いかた(後編)
   正確な温度計測のために 【田澤 勇夫】
     (p.249 図18)
Tc11

  ※FET入力OP-AMPなんで、どこかからの
   リークでバイアス電流が流れそうで
   すが・・・ダメです

冷接点補償用の白金測温体のところはちゃんと
してあるのに、ちょっと不思議。
簡単には熱電対の片っぽをGNDつなぎでエエやんと。

※参
トランジスタ技術2012年1月号:計装アンプにもバイアス電流のリターンパスを設けるべし

・AD8253データーシート
Tc12


電子工作実験室 :電位差測定器(電気化学)
  リターンパスについての議論


| | コメント (0)

2024年5月13日 (月)

サーミスタでの温度測定、「inf」の出現に耐えられるか?

2023年3月21日:A/Dコンバータでサーミスタの抵抗値を読む サーミスタをつなぐ場所は?
で問題にしましたが、A/D入力するサーミスタをつなぐ位置が重要です。
A02_20230321164901
サーミスタを電源側につなぐと、
  温度の上昇でサーミスタの抵抗値が減少
  それに連れてA/D値が上昇
となり、温度が上がるとA/D値も上がり、感覚的に
合うのでしょう。

・A/D値からサーミスタの抵抗値の計算式
A3_20230321165401

このサンプルとして
  ・おもろ家さんのArduino 入門 Lesson 18 【サーミスタ編】
のスケッチ使わせてもらいます。
おもろ家さんの「つなぎ」でもサーミスタは電源側。
基準抵抗がGND側です。

この時の問題点をお復習い。
  (a)サーミスタの接続線が短絡したら
  (b)サーミスタが外れてオープンになったら

まず(a)。
A/D値はフルスケールの「1023」に。
その結果、サーミスタの抵抗値は
  (1024÷1023 - 1) ×10kΩ
となり、約9.8Ω
B定数による温度計算に進むと352℃という
値が出てきます。

次に(b)
A/D値は「ゼロ」になり、サーミスタの抵抗値計算で
ゼロ除算」が生じます。
その結果、抵抗値は「無限大」。
続く、温度計算では「ケルビン温度」の「-273.15℃」が
出てきます。
  ※Arduino UNOの環境ではゼロ除算では
   止まらず、とりあえず計算は進みます。

実際の液晶表示を見てみましょう。

(a)のサーミスタ短絡
T10_20240513111101

(b)のサーミスタ断線
T11_20240513111201

抵抗値の箇所に「inf」という見慣れない「値」が出現します。
  ※inf=無限大
   print()やdtostrf()に食わせると「inf」
   という「文字」が出てきます。
   lround()で整数変換すると0x80000000
   (long値のマイナス目一杯)になって
   しまいます。

サーミスタで温度制御していたら、
  (1)いつまでたってもオンしない (a)のとき
  (2)いつまでたってもオフしない (b)のとき
状態が出現します。

(1)は、放っておいてもとりあえず周囲温度に馴染む
でしょうが(2)の状態が加熱しっぱなしとなり危険です。

何らかの警報的処置(表示だけでも)が必要に
なるのがわかっていただけるかと。

トランジスタ技術2024年6月号トラ技Jr.コーナ
掲載してもらった4チャンネル温度計の製作 では、
温度・抵抗値テーブルから最高値(温度低)と最低値
(温度高)を拾ってきて、値として規制するように
しました。
  ※プログラムエリアがあんましないので
   手抜き。
オープンだと「-20.0℃」、短絡だと「120.0℃」を
出力します。

| | コメント (0)

2024年4月12日 (金)

I2C液晶のアクセス、割り込みで処理しないようにすると

I2C液晶のアクセス、割り込み処理で遅れる原因らしきもの

I2C液晶の処理と高レートのタイマー割り込みとの競合、
その原因がI2C液晶アクセスでの割り込み処理だという
ことがわかりました。

I2Cアクセスでの最後、I2Cバスを待機状態に戻す
「ストップコンディション」の処理に時間待ちが
入れられていました。
  割り込み処理の中での時間待ちはちょっとなぁ。
そのせいで、こんな具合に抜けや遅れが出たのです。
Aa004

Aa000_20240408135301

そこで、I2C液晶の表示ルーチンを割り込みを使わない方法で
書いてみました。
   詳細(スケッチ例)は、また報告します。

普通は液晶アクセスでの遅れなんて問題にしないでしょうが、
特殊な場合はアカンでぇ!ということで、その解決方法の
一例と見てください。

10μ秒割り込みルーチンの抜けや遅れが無くなりました。
Ff000
Ff001
Ff002

割り込みを使うことで処理が早くなったり便利(次の処理に
早く移れる)になるんなら良いのですが、現状の液晶表示
手順の場合は、割り込み処理にするメリットがありません。

I2Cでの割り込み処理、I2Cアクセスでのエラーが生じた時に
対応しやすいという面は否定しません。
でも、液晶表示の場合はエラーが生じても、一連の表示ルーチン
さえ抜ければ次に進めるという処理でかまわないでしょう。
  ロックせずに「STOP」まで進めれば、なんとかなるかと。

I2Cでのエラー解除、本来はSDA=Hの状態(マスター側がHにする
つもりで)でダミークロックを流し込むという手法を使います。
  ※昔のI2C解説本ではよく見たけれど
現状、そういった処理はしていませんので、せっかくの割り込みが
生かされていません。

I2C簡単そうだけどトラブったときの対策、けっこうやっかいです。
  ノイズが多い環境でスカタンしたら
  そのリカバリーがたいへんなんです。
昔々、マイコンに搭載されたI2C機能を使うのが面倒くさくって、
H/Lパルスを自分で出してI2Cを制御したこともありました。
エラー発生時の手順が自由になりますので。

※参考
ROHMのBR24Lxxx EEPROMデータシートより
https://fscdn.rohm.com/jp/products/databook/datasheet/ic/memory/eeprom/br24lxxx-w-j.pdf

・基本のタイミング
Ep11
・リセット方法
Ep12
・コマンドのキャンセル
   SCLをHにしてSDAをL・H
Ep13

※テストプログラムをアップしておきます。
  ・ダウンロード - test_i2c_lcd_acm0802_2b.zip

ちなみに、超低速2相パルス発生回路 のI2C液晶表示を
wireライブラリを使わないようにしたら(wireの中からtwi
を呼んでいる)、プログラムのサイズが1.8kバイトほど減少。
RAMエリアも200バイトほど減りました。
単一の液晶表示のように、単純に「書くだけ」だとずいぶん
処理が簡単になるというのが理由かと。



| | コメント (0)

2024年4月 7日 (日)

トラ技2024年5月号に「3.3/65535」

トランジスタ技術の最新号、2024年5月号を
パラパラめくりしていたら、p.70のリスト1に
怪しい記述を発見。
A/D値から電圧値を計算するための定数を出す
のに「3.3/65535」と。

Pp21
65536と65535の差はほんの僅か。

でも、リストの7行目のPID演算のところで、
6桁の数値が出ているんで、5桁数値の最小桁で
の1違いは大きくないかいなとちょいと心配。

電源電圧「3.3V」も、「ほんまかいな」だし。

元データはA/D値のまま使い、「CAL(校正)したらこうなった」
にして、「浮動小数点化したmap関数」を使って線形補間して
答えを出すてなほうが「理にかなっている」ような気がします。

ラズピコだと1/65535が出現:トラ技2022年5月

※検索
ラズパイマガジン2022年12月12日の訂正
   ・・・本文中の「1023」は「1024」、図2下の式の
  「4095」は「4096」の誤りです。
   ・・・Raspberry Piのところで分割数が「4095」と
  あるのは「4096」の誤り、Raspberry Pi Picoでは
  「65535」が「65536」、micro:bitとArduinoでは
  「1023」が「1024」の誤りでした。
訂正が出ています。

 

| | コメント (2)

I2C液晶のアクセス、割り込み処理で遅れる原因らしきもの

超低速2相パルス発生回路・ケース入れでの処理遅れ、
I2Cの処理をしているソース「twi.c」をざっと追いか
けてみると、

・TWI(I2C)の割り込み処理
  ISR(TWI_vect)
 この中にtwi_stop()というルーチンが出てくる。

・twi_stop()の処理を見ると、
  _delay_us(10); という時間待ちがある。
     ※実際にこれが動いているのかどうかは不明

・_delay_us()がどこにあるのか探してみると
  util\delay.hの中
・関数のヘッダは void _delay_us(double __us)
  「double __us」って何よ。

・もし、_delay_us(10)で10us遅らせているとしたら、
 オシロでの観察結果と合っている気がする。

割り込み処理の中では時間待ちはするなぁ~
  っと叫びたくなるゾ!

※追記
波形観察できるよう、簡単にテスト。
・タイマー0を停止
   じゃまされないよう
・タイマー1で10us割り込みを作る
   割り込み期間、Hパルスを出力
・I2C液晶を使い1秒間隔で2文字を表示
   カーソル位置指定+2文字書込みの3データ
・10usパルスはいつも見えるはず
・I2Cの割り込みと重なった時にズレが出る

ところが・・・そのズレの量が大。
I2Cのストップコンディションと重なった部分の
割り込みパルスが1つ消失して、その後の1つ
が遅れて出現しました。

Aa000_20240408135301
終端部を拡大 (時間経過でSDA波形が↑のと異なります)
Aa004

I2C(TWI)の割り込みが悪さをしてるとしか考えられない。
割り込みを使わないでI2Cを処理するプログラムを
書かないといけないなぁ。
マスターだけならそんなに難しくないけどついつい
ライブラリを頼ってしまうんで。

もう一度言います!
  『割り込み処理の中では時間待ちはするなぁ~

Wire.cはI2C処理の手順を示すだけで実際の
ハードウェアアクセスはutility/twi.cの中でごそごそ。

※さらに追記
メインループの先頭でLEDポート(PB5)をトグル出力させると
いろんな処理時間が見えてきます。

今回の10usタイマー割り込みと液晶アクセスは
こんな具合。
A1000

一番下のch4の波形がトグル出力。
なにもせず(メインループがヒマ)グルグル回っていると
フルスピードでパルスが出ます。
しかし、何かの処理が長引くとトグル出力が一次停止
します。

液晶アクセス中にメインが回っていないということは、
何のための割り込み処理なの?
っと、思っちゃいます。
割り込み処理してるんだったら、ひとかたまりを
書き終わったら、メインに戻ってきて欲しいところ。
I2Cの送出完了でバッファから読み出し、無くなるまで
順次転送ということをしてくれたら良いのになぁっと。
  シリアル送信なんかはそうなっている。

10us割り込みのところを拡大すると。
A1001

割り込み処理そのものに加えて、その前準備と後始末に
けっこう時間が食われているのが見えます。
割り込み内で出しているパルスの前後に見えない
時間があるということが、メインループで出す
トグルパルスで見えてきます。

| | コメント (0)

2024年3月30日 (土)

ラズピコだと1/65535が出現

Arduinoでぐだぐだ言ったのが1023 vs 1024問題

トラ技のラズピコ特集、2022年5月号を見ていたら・・・
Pc12
A/D変換の値から電圧を計算するのに「1/65535」が
出ていました。

ただし言語は「python」。
analogioを検索してみると、Aanaloginは
16bitの値になるそうで、
https://learn.adafruit.com/circuitpython-essentials/circuitpython-analog-in
ここでは1/65536して電圧に変換しています。

https://www.denshi.club/pc/python/circuitpython/circuitpython-10-3.html
ここは、「65535は間違いなので」と注記があって
1/65536になっています。

https://logikara.blog/raspi-pico-basic/
ここは1/65536。

もう一つ、気になったのが
  v / (ref - v)
のところ。
Pc11

vが電圧値でrefが基準電圧つまり3.3Vなら、
adc.valueがフルスケールの65535になったときは
  v = 65535 / 65535 * 3.3 で
   = 3.3 となります。
すると、
  3.3 / (3.3 - 3.3)
で、ゼロ除算が発生。

図15のCDSが外れて、A/D値がフルスケールになると
ゼロ除算してしまうわけです。
1/65536にしていれば、v = 3.29995となり、
ゼロ除算は避けられます。

pythonでの数値型がよく分かってないので、
これでどんな挙動になるのかは知りません。
記事をぱっと見して、
  1/65535が出てきたぞ
  1023 vs 1024と同じ匂いか
っと、感じた次第です。

 

| | コメント (0)

2024年2月13日 (火)

トラ技のArduino Uno R4特集でも1/1023

Arduino Uno R4を知っておこうと
トランジスタ技術2024年1月号
パラパラめくりしていたら・・・
1/1023」を発見。

場所はp.106。
R42
記事のタイトルは
  Uno R4低消費電力の実力!
   家庭菜園用バッテリ動作2ch温度ロガー

その中の「R3からR4への乗り換え時の注意!
という章。
P.107の【図5】にはこんなものさしの絵も。
R43
1023と10進じゃなく0x03FFと16進表記にして
半値やら1/4値、3/4値を入れ込むと目盛がはっき
りするかと。

こちらでの「ものさし」表記。
Ss12

・1cmを1mm分解能で
Ss2_20221126092001
※こんな解説かな
・絵の縮尺の関係で、1cm位置が実際は5.0mやった。
・mmでの測定値a (0~9の範囲)から実際の長さを
 求める式は・・・
   a × (5.0 ÷ 10) が答え (単位はm)
          [ ÷9ではない ]

※参照
1023 vs 1024 、255 vs 256 なんでみなさん「2^n-1」が好きなの?

| | コメント (0)

2024年2月10日 (土)

delayMicroseconds(50000)をオシロで確認

トランジスタ技術2024年3月号に掲載してもらった
  ・『実はワナだらけ…確実に動かすArduino Uno R3』
この記事の中の『時間待ちのワナ』、これの実際の様子を
オシロ波形で見てもらいましょう。

Dm11_20240210085601

ch1がオシロトリガ用の波形。
  1サイクル回るごとにPB4をトグルしています。
ch2がdelayMicroseconds時間確認のための波形。
  1msのH/L
  50msのH/L  ←のつもり
を出力して回っています。
しかし実際は・・・
  delayMicroseconds(50000)が0.85msほどに
  なっています。

こんなスケッチを使って見ています。

#define PB5_H       (PORTB |=  (1 << PB5))  // LED on
#define PB5_L (PORTB &= ~(1 << PB5)) // LED off
#define PB4_X (PINB |= (1 << PB4)) // PB4トグル

void setup() {
pinMode(13, OUTPUT); // PB5 基板上LED
pinMode(12, OUTPUT); // PB4 トグル出力(オシロのトリガ用)
}

void loop() {
cli(); // 割り込み禁止でloopを回る
while(1){
PB4_X; // PB4トグル
PB5_H;
delayMicroseconds(1000); // 1ms H
PB5_L;
delayMicroseconds(1000); // 1ms L
PB5_H;
delayMicroseconds(50000); // 50ms(???)
PB5_L;
delayMicroseconds(50000); // 実際は0.85msほど
}
}


※元記事/関連記事
Arduino-UNOでのdelayMicrosecondsの設定は16383までだ!
Arduinoから「タイマー0」を取り上げる(ユーザーが使う)

| | コメント (1)

より以前の記事一覧