✖
腕時計
試験とか用に時計が必要だったので安いのを買った。これ1000円ぐらいだけど、文字盤もみやすいし、案外かっこよくて防水だしコストパフォーマンスが非常に高い。バンドだけがやすっぽい感じだけど、替えてもいいし、ほとんど使わないならこれで十分そう。
アナログ時計って最近殆ど使っていなかったけど、おもったより直感的に読みやすくていいですね。
ATTiny2313 ステップ速度調節のエレキー
最初に作ったやつを少し作りなおした。ケースを加工するのが面倒だったので適当な状態で放置されていたんだけど、おさまりの良さそうな方法を思いついたので、基板から作りなおした。
回路図
殆ど前のと変わってない。ESD 保護ダイオードと、プルアップを変更しただけ
基板図
ファームウェア
ピンの配置の関係でアサインだけ変えてある。
ケース
秋月で売ってる電池ボックス 単3×4本用(フタ付プラスチック・スイッチ付)というのを使ってる。
単3は2本分の領域をエネループ用に使って、残り半分のスペースに回路を入れてる。もとからあるでっぱりとかはニッパーとかカッターで切った。電池の金具は加工する必要はなくて、ハメこまれてる位置を変えてあげるだけでよかった。元からあるスイッチはとってしまっている。
結構狭いので、圧電ブザーを削ったり基板をやすりで削ったりしてギリギリで入れてる。今回は部品配置の検討をするのに EAGLE が大変役に立った。ISP 部分以外はほぼジャンパなしでいけてる。IC ソケットをつけなければもっと高さに余裕があったんだけど、一応つけた。
スイッチがあった部分は少し広げて、タクトスイッチを入れてる。固定する方法で困るけど、グルーガンでタクトスイッチを固めてしまった。グルーガンでも結構固めになるので、力を入れても大丈夫なくらいにはなるっぽい。
ref.
Mac で YAESU FT-450D の PCC (PCからのコントロールソフト) を動かしてみる
wine で PCC-450D を動かしてみる。CAT のリファレンス読んでたら PCC-450D がなんとかって書いてあったのでググった。
YAESU USの Files から PCC-450D Software V1.00 and Reference Manual ( 1.18 MB ) をダウンロード。
wine で実行するとエラる
err:module:import_dll Library MFC42.DLL (which is needed by L"Z:\\Users\\cho45\\Downloads\\PCC-450D_V100\\PCC-450D\\PCC-450D.exe") not found err:module:LdrInitializeThunk Main exe initialization for L"Z:\\Users\\cho45\\Downloads\\PCC-450D_V100\\PCC-450D\\PCC-450D.exe" failed, status c0000135
MFC が必要なので入れる
$ winetricks mfc42
COM ポートがどれも開けない。wine のこのへん、どういう仕組みなんだろう? と思ったら以下のようにするらしい。
$ ln -s /dev/tty.usbserial-FTB3L9UG ~/.wine/dosdevices/com1
で起動はするし COM ポートとのやりとりも一応できてるっぽい。
でもいまいちうまく表示が更新されない。のでメニューから AI1; を自分で送ってあげると更新されたりする。でも全部の情報を同期する方法がわからなかった…… あと別にPCからリグをコントロールできても嬉しくない (もっとたくさん情報を表示できるとか、そういう機能はなかった)
結局、何かしら追加の機能が欲しいなら自力で書くしかない
MOS-FET 2N7000
VGS(th) に結構バラつきがあるみたいで、データシートだと 0.8〜3V となっている。VGS = VDS ID = 1mA の条件が書いてあるから、たぶん温度変化について書いてあるんだと思うけど、よくわからない。
VDS= 5V, ID = 1mA ぐらいで、手元のをいくつか試すと。室温20度で、約2.28〜2.32V付近でスイッチする。指でつまんで温めると0.1Vぐらい下がったりする。おもしろい。
2.1V ぐらいまでスイッチできてほしいんだけど、なんかうまい手はないんだろうか。負荷側の電圧は決まってしまっているし、ほかの素子を探すしかないのかな。すごい困るというほどではないから、そこまではしたくない。
✖
✖
Watch Dog Timer
ワッチドッグタイマー。基本はプログラムが意図しない挙動をしたときにリセットをかけるためのタイマー。
例えば、「常に1秒後にリセットをかけるワッチドッグタイマー」をセットして、ワッチドッグタイマーによってリセットされる前にメインプログラム側からワッチドッグタイマーをリセットする。もしプログラムが暴走してタイマーが初期化されなくなると、ワッチドッグタイマーがリセットをかけてくれる。
用途上、メインのクロックとは別のクロックで動いている。
Brown Out Detection
電源電圧を監視して、一定より下がったらリセットをかけてくれる。
もちろん瞬間的な電源電圧変動では反応しないようにヒステリシスな感じになってる。
チップ部品
1608 (1.6mmx0.8mm)のチップコンデンサを安いばっかりに現物見ずに買ってみたらだいぶ小さすぎた……
3216 か 2012 にしておいたほうがよさそう
ボタン電池で動く小型・低消費電力 AVR エレキー (50円 ワンチップマイコン ATTiny13A)
とりあえず完成なので、今まで書いたやつのまとめで整理。
要求
- 外に持ちだせるように小型で電池駆動できること
- 電池交換をあまり気にしなくてもいいこと
- 実用的であること
仕様
- 短点・長点それぞれ1点のメモリー
- スクイーズ
- インヒビット
- 無段階スピードコントロール (10wpm〜30wpmまで想定)
インヒビットについて
エレキーは片方のパドルを押したままだと、ずっとその符号が出続けるので、いいタイミングで手を離す必要がある。
このとき、どのタイミングで符号メモリーを効かせるかで使い勝手が大きく異なる。
- 前の符号が終わった瞬間にパドルが押されていたら即メモリーさせるか
- 前の符号が鳴っている間にパドルから手を離す必要がある
- 前のめったキーイングが必要
- 前の符号の直後のスペースが終わった瞬間にメモリーさせる
- 前の符号が鳴り終わってからも多少時間がある
- 落ちついたキーイングが必要
後者のほうが基本的に落ちついて打てる感じだけど、パドルを早く動かしすぎると変な符号が出たりする。一長一短な感じ。
このエレキーでは、これらの中間として、前の符号が終わってから、短点の長さ * 0.3 の間は「インヒビット」として押し続けていてもメモリーされない挙動にした。これは単に好みなので、ソースコードの定数で変えれるようにした。
回路図
前回とピンの使いかたが変わっているけど、あまり変更はない。
パドル入力には静電気サージ (ESD) 用にツェナーダイオードを入れた。AVR の仕様上「All I/O pins have protection diodes to both VCC and Ground」となっていてクランプダイオードが入っているみたいだけど、クランプされたのを消費する部分がどこにもないので前段で入れたほうがよさそう。
FET のゲートについてる 150Ω は電流制限用だけど、一応なくても動く。AVR のポートの絶対定格が 40mA なので 3V/20mA=150Ω。流れるとしても瞬間だけなんだけど、絶対定格を守るなら必要そう。
FET の GS 間の抵抗は入力オープン時に GS を確実に 0V にするためで、普通入れるみたい。AVR の出力ポートってローのときは吸い込み動作するしいらないんじゃ? と思ったけど、電源 OFF->ON からのタイミングとかいろいろなタイミングで入力オープンのとき不意にONになるとそのままになってしまうらしい。一応入れたほうがよさそう。
2.2MΩ の抵抗はパドルのプルアップ抵抗で、省電力のため外部に大きなのをつけてる。ただ、人体アースの電圧降下でもキーイングとみなされる(接点を触れるとキーイングされてしまう)ようになるので、善し悪しがある。
いろいろ突き詰めると部品点数が減らせない。
基板図
ステレオミニジャックでパドルと繋ぐようにしてるけど、別に直結でもいいと思う。その場合ジャック部分はいらない。
ボリュームは半固定として書いてあるけど、普通のやつのほうがいいと思う。基板取り付けの小型ボリュームだとお手軽だけどあまり手に入らないみたい。なんでもいいけど場所をとる。
ファームウェア
これだけしか書いてないけど、ATTiny13A だと 96.7% Full (990 bytes) なので、結構ギリギリです
CrossPack-AVR-20130212 の avr-gcc (GCC) 4.6.2 で開発
AVR ISP Mark II なら、Makefile 変更なしに make install で書きこみが走る。
ISP も回路を切断せずに一応動いて、書きこみもできるけど、キーイング出力にノイズが入るので注意が必要 (ブレークインを切っておくか、リグとは切断して書きこみする必要がある)。
電源と実測消費電流
- CR2032
- eneloop lite
あたりを想定
CR2032 (3V) は公称 3V、終止電圧 2〜2.5V 程度。約 225mAh 使い捨てだけど、よく売ってる。使い捨てなので限界まで動いて電池しぼりとって動かなくなるほうが効率的。
eneloop lite 2本だと公称は 2.4V (1.2*2)、終止電圧 2.0V (1.0 * 2) 程度で、単4で550mAh、コイン電池に比べると体積は大きい。lite 版のほうが用途的にはいいだろうと思う。エネループの場合普通のニッケル水素より自然放電が少ないのと、比較的高い電圧が長く続く。ただし過放電すると致命的なので、2.1V程度で動かなくなるのが理想。
最低動作電圧
本体の最低動作電圧は 1.8V 程度なので、スイッチング用の FET の Vth に支配される。
実測すると、最低動作電圧は室温20℃で2.3V 程度 (≒ FET Vth)
CR2032 で動かすなら、もっと低い電圧でも動いてほしいけど、もっとぎりぎりの別のFETにするほかない。
エネループの場合2本で2.3Vを切る (1本で1.15V) になるのは、だいたい70%〜90%ぐらい放電したあたりなようなので、これでも悪くはなさそう。
消費電流
消費はいろいろ工夫してみたので、結構減らせてる。
- キーイング中: 96μA (約 0.1mA 実測)
- パワーダウン中: 0.15μA
- (測定不可なので、ATTiny13A の仕様書から。実測では 0.0μA未満の表示だった)
電源に CR2032 (225mAh) を使った場合、1日に2時間キーイングすると仮定すると、約1152日ほど持つ。1日8時間フルタイムでキーイングしても 292日ほど持つ。1日16時間キーイングし続ける廃人でも146日ほど持つ。
eneloop lite (550mAh) の場合、容量の70%程度使うまででも、1日2時間のキーイングで1971日ほど持つ計算になる。自然容量減を考えてもそこそこ持ちそう。
消費電流減の対策
具体的には以下のような対策をしてる
- 動作周波数は内蔵 128kHz
- FET でスイッチング (なのでキーイング端子に高電圧がかっているリグでは使えない。5Vとか12Vとかなら全然大丈夫なはず)
- スピード調節用のボリュームにできるだけ通電しない
- キーイング用のプルアップ抵抗を高抵抗に
- できるだけアイドルモードで動くように
- 10秒経過ですぐパワーダウンモードに移行
- キー入力割込みで復帰するので特に違和感はないと思う
まとめ
かなり単純なものをしっかり各所考えながら作ってみたけど、いろいろと発見があった。ソフトウェアの変更がダイレクトに消費電力減に繋がったりするのは新鮮で面白い。
また、この程度の回路だと全素子の動作を考えながら作れるので、基本的なことを理解するきっかけになった。
次はもうすこし複雑なものを作りたい。
ref.
✖
✖
✖
金曜日の夜から急の鼻の奥が痛くなって、そのまま全身だるい感じで3日間ほど殆ど何もできなかった。こういうの本当にイライラする。やることいっぱいあるのになにもできない。
✖
直列/並列共振回路の共振周波数
リアクタンスとの関係
インピーダンスの式
共振状態ではリアクタンス部(虚数部)はゼロになる (抵抗成分だけ)。
すなわち
と はそれぞれ
共振状態のときの式に代入して f について解く (普通は角周波数 ω を使うみたいだけど、僕はなんか混乱するので全部展開しとく)
移項
両辺に をかける
両辺を で割る
両辺の平方根をとる
両辺を で割る
最悪リアクタンス部がゼロになれば共振ということがわかってれば、簡単に導ける。
変形して L/C を求めるとき
直列共振回路の Q
L か C のリアクタンスをRで割るイメージが覚えやすい気がする (抵抗Rが小さいほど高いQになる、というのがイメージしやすい) 直列に入っている R は単に損失なので、小さいほうがいいというイメージ。
↑ をそれぞれ で割っただけ
並列共振回路の Q
直列の逆数と覚える。並列に入っている R は小さいほど無駄に電流を流すので、大きいほうが損失がなくていいというイメージ。
FET の入力容量と速度の関係がわからない
FET は電圧駆動なので電圧さえかければ電流を流す必要はない。
ただ、現実的にはFETの入力に寄生している容量を十分充電しきるまでは、電流が相応に流れ、オフにするときはすみやかにこの容量を放電することが求められる。なので容量が少なければ少ないほど早いのはイメージできる。
まではわかったけど、では実際にそれがスイッチングスピードにどう関わってくるか計算で求めるのがよくわからない。
例として 2N7000 の input capacity は最大で 50pF、150Ωの抵抗と3Vの電圧(最大電流20mA)で充電しようとすると、CRの過渡現象の例の式だけで考えると、電流は
ある時間におけるコンデンサの電圧を考える。コンデンサの電圧は電源電圧から抵抗での電圧降下を引いた値なので、
これをさらに t について解きたいけど、自分の力だと解けないので Maxima 君で解くと solve(v = E * (1 - %e^(-t/(C*R)) ), t);
で、各値を代入して計算すると
function t (C, R, E, v) {
return C * R * Math.log(-(E / (v - E)));
}
// 入力電圧の9割まで
console.log(t(50e-12, 150, 3, 3*0.9)); //=> 約17ns
// 最低 V_th まで
console.log(t(50e-12, 150, 3, 0.8)); //=> 約2.3ns になるけど、確かめようがない。それに、この速度が実際の FET の速度にどう関わってくるかわからない……
ググってでてきたpdf を見た感じだいぶ難しくて現時点の自分では理解できない。
要は知りたいのは、Gとグラウンド間に入れる放電用抵抗は最大どの程度にできるのか、ということなんだけど、よくわからない。大きすぎると放電に時間がかかりすぎて、オフにならなくなるのはわかる。まぁ実際試しみて定数決定するのが一番いいんだけど……
ATTiny13A を使った低消費電力エレキー
まとめを後日書きました [tech][avr][arduino] ボタン電池で動く小型・低消費電力 AVR エレキー (50円 ワンチップマイコン ATTiny13A) | Fri, Nov 8. 2013 - 氾濫原
さらにもっと消費電力を減らせないだろうか? と考えた。パワーダウンモードの消費が計測不可能なので、支配的なのは特にキーイング中と、アイドル中の消費になっている。
特にキーイング中の消費が比較的多い (200uA近く) ので、どうにかできないかと考えた。キーを押しているとき、内蔵プルアップを通して GND に電流が流れるので、そこの消費が結構多い。
今まで何も考えず AVR 組込みのプルアップ抵抗を使っていたけど、ここでちょっと考えてみることにした。
プルアップの調整
内部プルアップは、実測からすると3V/100uA=30kΩ になってるようだ (スペック上は 20k〜50k)。とりあえず AVR 内部のプルアップ抵抗をオフに。
プルアップ抵抗に許される電圧降下を考える。電源電圧3Vで、入力 H レベルは VCC * 0.6 (スペックから)、ノイズ回避用に 0.4V を足すと
- ピンの必要入力電圧 Vin = 3 * 0.6 + 0.4 = 2.2V
- プルアップでの電圧降下最大 V = 3 - Vin = 0.8V
となった。
マイコン側は十分大きい入力抵抗があると考えると、かなり大きな抵抗を入れても大丈夫そう? なのかな。
試しに 2.2MΩでプルアップしてみると、ICの足にかかる電圧は2.5V程度になった。2.2MΩ で0.5V電圧降下しているので、0.23uA 程度流れてる。3V / 0.23uA でプルアップと内部抵抗の合成値は 13.2MΩ、つまり内部抵抗は11MΩぐらい……? よく「入力抵抗は非常に大きい」といわれるのを見る割に、いまいちどの程度かわからなかったけど、こんなもんなのかな。
この状態で、消費電力をはかる
- before: 内蔵プルアップ: 198uA
- after: 2.2MΩプルアップ: 113uA
とりあえず減ったし、普通に動いてはいる。しかしこれであっているのかさっぱりわからない。
これで、毎日2時間使うケースだと (CR2032/225mAh, 1日2時間, パワーダウン中 0.15e-6mA, キーイング中 113e-3mA) 995日持つ計算になった。
delay_ms のさらなる見直し
128kHz で動かすにあたり delay_ms を以下のようにしていた。
void delay_ms(uint16_t t) {
uint16_t end;
cli();
timer = 0; TCNT0 = 0;
end = NOW + DURATION(t);
sei();
while (NOW <= end) { nop; }
} timer は 2msec ごとのオーバーフロー割込みでインクリメントされているけど、これだとちょっと精度が悲しいような気がするので、カウンタそのもの (TCNT0) も見ている。オーバーフローでやっているので、単純に timer はカウンタの桁あがりとして扱える。NOW は ((timer<<8)|TCNT0) という定義
while の中を アイドルではなく nop; にしているのは、ここでアイドルに入ってしまうと、次に起きるのが 2msec 後とかになるので、せっかく TCNT0 を見ている意味がなくなるから。
ただ、まだここは精度を維持しつつも最適化の余地があって、以下のようにした。
void delay_ms(uint16_t t) {
uint16_t end;
uint16_t end0;
cli();
timer = 0; TCNT0 = 0;
end = NOW + DURATION(t);
end0 = end - 0x100;
sei();
while (NOW <= end0) {
set_sleep_mode(SLEEP_MODE_IDLE);
sleep_mode();
}
while (NOW <= end) { }
} 少なくとも、最後の TCNT0 分 (8bit) になるまでは、普通に 2msec ごとに寝ていても大丈夫なはずなので、それまではスリープを使い、最後のカウンタ分はビジーループにするようにした。nop; は別にいらなそうなのでとっただけ。
これでキーイング中でも 96uA まで消費電流を落とせた。上と同じように、毎日2時間使うケースだと (CR2032/225mAh, 1日2時間, パワーダウン中 0.15e-6mA, キーイング中 96e-3mA) 1171日持つ計算になった。1000日超え! もうこれでいいかな。
回路図・基板検討に EAGLE を使ってみる
回路図・基板作成用 CAD のEAGLEを使ってみた。割とデファクトスタンダードっぽく使われているっぽい。試したのはフリー版 (個人レベルでは十分すぎる機能がある)
基本商用ソフトなので、もっとモダンでいい感じなのかと思ったけど、思いのほか操作性がレガシーで悪い。回路図作成ツールとしては BSch3V のほう部品エディタも含め、圧倒的に使いやすい……
ただ、配線ツールとしては結構使いやすい (というか、もっとよくできると思うけど、これ以上のものがなさそう……) デファクトスタンダードっぽく使われているおかげで、ライブラリは比較的充実しているように思える。ただ、あまり整理されていない形になっているので、最初ものすごくとまどう……
しばらく使わないと絶対に忘れるインターフェイスなので、重要なところをメモっておく
ライブラリ
(追記)
http://www.cadsoftusa.com/downloads/libraries のページから
- japan で検索して出てくるもの全部
- c-j.lbr
- r-j.lbr
- tr-j.lbr
- alps_japan_potentiometers.lbr
- avr-7.lbr
あたりを入れておいたほうがいいっぽい。ただ、 *-j.lbr は US EU とピンに互換性がなくて置換できない…… ライブラリエディタで、Symbol の編集画面を開き、ピンの名前を一緒にしてあげればいいっぽい。例えば resistors.lbr の場合、ピンの名前は 1 とか 2 とかなので、c-j.lbr のほうも PIN1 を 1 に PIN2 を 2 にすれば、置換できるようになる。
デフォルトだと EU 版 US 版の記号が入っていて、これでもなんとかなるけど、日本で使われる一般的な回路図記号と若干異る
- EU 版
- 抵抗の記号が新JIS記号と一緒 (ジグザグじゃなくて四角)
- C の棒が太いくて長い
- US 版
- 抵抗の記号は旧JIS記号と似てる (ジグザグ) ただ、ジグザグの数が多い
- C の片方が曲っている
回路図
- 回路図をつくるとき
- Add a part で部品を置いていく、検索が貧弱なのでかなり空気を読む必要がある
- 置いてから ESC を押すと選択画面に戻るので連続でおける
- 既に回路図にある部品なら Copy ツールを使ったほうがいい
- 使いたい形がなくてもとりあえず記号だけあわせておけば、あとから Replace で部品だけ変えられる
- Electrical Rule Check は頻繁にかけたほうがいい
- けどエラーの意味がわからなかったりする
- ECR の結果は回路図の画面で示されるので、基板画面を見ているとなにがなんだかわからない
- Add a part で部品を置いていく、検索が貧弱なのでかなり空気を読む必要がある
基板図
ユニバーサル基板で作ること前提なので、あまり細かいところまでは使ってない。ユニバーサル基板専用のソフトがあればいいんだけど。
- 基板図をつくるとき
- 必ず 回路図を同時に開いておく必要がある
- そうしないと修正点が反映されず、最初から作りなおすハメになる (意味不明)
- まずグリッドを設定する。Size 50mil Multiple: 2 にして Display on にすると、100mil ごとにグリッドがひかれ、50mil ごとにスナップするようになる。(ユニバーサル基板のピッチは100mil)
- Edit -> Net Classes... で default の Width を 32mil ぐらいにしとく (オートルートとかするときこの太さでひかれる)
- Layers で、tOrigins / bOrigins を非表示すると、部品全てが動かせなくなる
- 必ず 回路図を同時に開いておく必要がある
- オートルート便利かと思いきやかなり難しい。
- 少ない部品なら、基本自分で配線して、どうしたもんかってときに使うとヒントがでるツールとして使う感じ
- ripup; コマンドを実行すると配線済みのが全部消える
- 自分である程度配線したあとなら Undo を使ったほうがよい
✖
モールス練習
練習開始から93日、ほぼ3ヶ月ぐらい経っているので経過を書いておく
- 10月09日: 25wpm ランダムまで90%をとれ次第すぐ進むぐらいの勢いでやる。
- 1ヶ月で、20wpm ランダムならぎりぎり90%をとれるぐらいになる
- 2ヶ月で、25wpm ランダムならぎりぎり90%をとれるぐらいになる
- 26wpm からどうも急に難しくなったように感じられる
- 一部の符号の聞き間違えが足を大きくひっぱっている (特に S H 5)
- 20wpm まで戻り、100% がとれ次第次のスピードに進むという基準に変更
- 基礎練習
- S H 5 を特に意識してやる
- 3 7 z あたりも苦手だったけど、全体的に精度が上がるのは感じられる
- 22wpm ← 今ココ
- あいかわらず S H 5、1 J で間違えることが多い。
22wpm でもランダムなら、ほぼ90%はとれる、という状態にはなっている。ただし単語聞きとりだと、短い符号が多くなっておいつけなくて、もっと低く80%代なことも多い。それに身体状態に大きく左右されるのも変わりない。寝る前とかだと95%もとれなくなる。
最近急がしくて交信を聞く暇がなく、とにかく朝と夜の聞きとり練習だけをやってる。実感としては正直、ラバースタンプレベルでも余裕でとれるような感じではない。タイピングまではできても、意味まで理解して聞きとろうとすると単語単位で落としてしまう。それに、実際の交信だと25wpmはあたりまえな感じなので、現状の能力では全く足りない。
ラバースタンプでも、名前と住所は必ずちゃんと聞きとる必要があるところなので(住所はJCCで送ってることが多いからそれほどでもないけど)、それぐらいは1発でとれるようになりたい。それに、ラバースタンプとはいえ、何を送ってこられるかわからないのは怖い。緊張するとさらに聞きとれなくなると思う。
✖
✖
「コレクタ接地ってボルテージフォロワ? エミッタフォロワー? あれ?」って思ったのでちゃんとしとく……
ボルテージフォロワは普通オペアンプに対して使うようだ。エミッタフォロワーはバイポーラトランジスタを使ったボルテージフォロワ、でいいのかな。
ボルテージフォロワは FET も同じようにドレイン接地 (ソースフォロワ) で作れる。
オペアンプをヴォルテージフォロワとして使う場合、中身 (バイポーラトランジスタやらFETやらの集合) のことを無視して考えると、中身がエミッタフォロワーだろうがソースフォロワだろうが、挙動としてはヴォルテージフォロワということっぽい。
- ボルテージフォロワー
- エミッタフォロワー
- ソースフォロワー
ATTiny13A を使った小型エレキー
まとめを後日書きました ボタン電池で動く小型・低消費電力 AVR エレキー (50円 ワンチップマイコン ATTiny13A) | tech | avr | arduino - 氾濫原
前に書いたのの続き。
せっかくメインのICが小さいので、できるだけ小さく作るならどうするのがいいだろう?と考えてる。
まず、乾電池1本で動いたらいいなと思ったので、1.4Vを3.3Vに昇圧する回路を組んで駆動させてみたら、昇圧回路がどうもうまくいかなくて、やたら電気食う感じだった。昇圧回路の調整を別途やれば乾電池1本でもいい感じになるかもしれないけど、実際ブレッドボードで組んでみたら結構体積も食う感じになってしまったので、そもそもこの方法を諦めた。
じゃあリチウムコイン電池を使うことを考えよう、と思った。リチウムコイン電池なら1個で3V出せる。ただ、あまり電流を流すことができなくて、標準で 0.2mA 程度に抑える必要がある。消費電力を減らす工夫はしてるつもりだけど、スピード調節をADCにしたのでボリュームに常に電流が流れるとか (10kΩなのでこれだけで0.3mA流れる)、もうちょっと頑張る必要がありそうだった。
まず、ADC は1秒ごとに行うようにコードを変えて、そもそも頻度を減らした。また、ボリュームに電圧をかけるのも、ADCが行われるときだけにした。これはピン1個を出力にして、VCC の代わりにそこに繋いでる。VCC とピンの出力電圧は厳密には違うので、ADCの精度は落ちるけど、そもそも安定してない電池駆動だし、相対値だけがとれればいいのでまぁいいかな、という気がする。
それでだいたいアイドル時に0.3mA程度まで下がった。しかしこれ以上思いつかないので、とりあえずクロックを下げてみて挙動に問題がないか試すことにした。ATTiny13A の場合、内蔵クロックは 9.6MHz, 4.8MHz, 128kHz とそれらを8分周したものが選べる。なので 4.8MHz を8分周した600kHzで動かしてみると、思ったより変なことにならなかった。これでアイドル中はほぼ0.2mA未満に。
じゃあ 128kHz だとどうだろう、ということでやってみたら、
bad AVRISPmkII connection status: Unknown status 0x00
とかでるように…… たぶんクロックを下げすぎたせいで ISP の書きこみのクロックを読めてないのかな……
うーん困ったと思っていたら avrdude に転送スピードを下げるオプション (-B) があったので、-B 100 ぐらいにしてやったらいけた。しかし書きこみ速度がだいぶ遅い。
コードを全体的に書きなおさないと 128kHz でバグってて動かない感じだけど、軽く試した感じだと、アイドル中で0.09mAぐらい。キーイング中で0.19mA。パワーダウンは変わらず0.6uA程度。コーディングが面倒になった割にはそんなに減らない。ベースの消費が無視できないほどクロックの支配率が低くなってるせいかな。
仕様から
- VCC=3V, f=128kHz
- idle: 0.01mA
- active: 0.04mA
- power down: 0.00015mA
- ADC: 0.225mA
- Timer0: 0.002mA
- pull-up: 0.08mA
- キーイング中は pull-up + active + timer0 + FET GS接地抵抗(440k)電流 = 0.122mA が最低でも必ずかかる
- アイドル中は idle + timer0 = 0.012mA
- ADC中は active + ADC + timer0 = ボリューム電流 = 0.567mA
- パワーダウン中はクロックに関係なく固定で 0.15uA
- 比較すると実測値が結構高いけどなんでだろう
- 瞬間最大電流
- キー同時押し pull-up * 2 + active + timer0 + FET GS接地抵抗(440k)電流 + ADC
- 0.7338mA
パワーダウン中の消費は AVR ISP Mark II と繋っていたからで、RESET をはずせば 0uA になった
- パワーダウンモード 0.0uA未満
- アイドル中 90uA -> 0.09mA
- キーイング中 198uA -> 0.198mA with FET
✖
✖
マイコンプログラミングとか、黙って Arduino やっとけハゲという感じではあるんだけど、Arduino の言語がどうも好きになれなくて使ってない。CっぽいけどCじゃない、でもC、みたいなのがなんとなく嫌だなと感じてる。それは置いておいても Arduino は素晴しいと思います。
Arduino も AVR を使っているし、結局 Arduino 頑張ろうとすると AVR のスペックを理解する必要があるので、じゃあ AVR でいいか、という感じになる (安いし)。
Arduino は、開発環境も含めたエコシステムが魅力で、そこがすごくいいと思うけど、自分みたいに CUI で vim で書いて Makefile でコンパイルして書きこんで gdb でデバッグするみたいのが好きな人間だと、少し魅力が薄れてしまうように思う。
IDE はあればあるで便利で良いんだけど、Makefile と gdb を使ってやっていれば、マイコンプログラミング以外のときにもその知識が生かせて嬉しいと思う (IDEの操作の知識はほかに生かせない)

![[シチズン Q&Q] 腕時計 フォルコン V722-850 ブラック - CITIZEN](https://m.media-amazon.com/images/I/41OvjM8ihNL._SL500_.jpg)














