- PNPの話。いや、あれでも動くんだけど、NPNの例で出した
↑これと対応させたいのなら、↓こうするべきだろうなあ。 - 要はいつだってソースよりもシンクが好まれるというのと、それからおそらくこの形だとトランジスタ内での損失がLEDに影響しないから計算が楽とかそんなんだろうと思う。
- そして俺はATtiny85の5番ピンの実験をしなければならん。
- ATtiny85とかATtiny13Aとかこのへんの8ピンAVR@Arduinoのデジタル5番ピン(アナログA0ピン)は で、つまりLOWが入力されるとリセットがかかる。
(オーバーラインは論理記号のNOTで、ピンの名前や役割にオーバーラインは負論理ってこと。とかが使えない環境ではスラッシュを使って「/RESET」って書く場合が多い。データシートにもそう書かれてるのを見たことがある) - なので、ATtiny85とかを安定動作させるためにはこのピンをHIGHに固定しておかなければならない。実際は内部でプルアップされているらしいのでオープンで大丈夫なんだけど。
- そんでまあ恐ろしいことにこのピン、リセットを司る危険なピンにも関わらず入出力が可能となっている。ATtiny85のデータシートを見ると、Vcc=2.4~5.5Vのときの入力電圧は、HIGHが0.6Vcc/LOWが0.3Vccとのこと。で、リセットが有効になるのはLOWより低い0.2Vccとなっているので、これ以下の電圧にならなければ正常に動き続けるわけだ。
- ええと、5Vで動いてる場合は、HIGHが3V、LOWが1.5V、リセットが1Vってことだな。ちなみにAVRは全ピンがシュミットトリガなので、HIGHとLOWの中間でふらふらしている間は直前の値を保持するようになっている。
- なので、5V動作時は1Vより十分に大きな電圧の範囲ならアナログ入出力が問題なく可能⋯⋯ということになっているらしい。しかしtinyのアナログ出力は必ずPWMなわけで、PWMってVccと0Vを高速で切り替えるんだよね? それでリセットがかからんもんなのか?
- ⋯という実験をするのだ。0.2Vccは8ビット分解能だと51/255。ついでにPWMの平滑化と、それをコンパレータかトランジスタに入力してVccあるいは0Vに変換するような実験もしておきたい。
- 一応AVRの設定でリセット機能を無効にすることもできるんだけど、そうするとプログラムを書き換えるのが超面倒になるのでできればやりたくない。そもそもArduinerとしてはフューズビット変えること自体も面倒だし。
- プログラマー(プログラム書き換えるソフトあるいはハード)もさあ、なんか一瞬電源を遮断するとかそういう方法でリセットして書き込むみたいな機能があればいいのにね。あるのかもしれんが。
- ⋯っていうかもしかしてそのためにリセットが負論理になってるのか? つまり、AVRの電源自体を充分な電流値をもつ負論理リセット信号(あるいは負論理リセット信号をトリガーにしたトランジスタからの出力等)からとることにすれば⋯⋯いやいや、それで済むならそもそもリセットピンなんかいらんよなあ。でも考え方としては合ってるはずだ。これも実験せねばならんか。
- 負論理が絡むとどうも頭がこんがらかるよね。長いことソフトしかやってなかったのも影響してると思うんだが、慣れでなんとかなるもんなのか?