DigiSparkの環境周りが少し解って来たので、LEDの
光をゆるく瞬かせて、LEDっぽくする作戦を進めて
みた。
以前、Mega328用に作ったスケッチをほとんどそのまま
流用しつつ、ピン周りとか、タイマ割り込み関係とか
を見直しかけてみる。
http://brown.ap.teacup.com/nekosan0/2186.html
基本はこの処理方法のまま。
せっかく、DigiUSBライブラリでシリアルデバッグ的な
ことができるので、いざということを考慮して、
DigiUSBライブラリを読み込んでおきたいところ。
USB周りの処理があるので、タイマ割り込みとの相性は
悪いだろうということと、そもそもMsTimer2ライブラリ
の割り込みは使えないはずなので、割り込みをやめて、
delayで時間調整する処理に変える。
ロウソクの炎の瞬きに、そんな正確な時間管理は不要
なので。
で、タイマー割り込みまわりと、PWM出力用のピンを
変更するだけで、とりあえずコンパイル。通った。
ちなみにPWM対応ピンは、
https://digistump.com/wiki/digispark/tutorials/basics
0、1、4の3本らしい。0と1に割り当てしてみた。
さて、書き込んでみる。ウチのDigiSparkは1番ピン
がオンボードLEDなので、これでホワンホワンするはず。
…しない。ほぼ点灯したまま。
うーーーん、正弦波テーブルがメモリ食いすぎてて、
メモリ破壊してるのかな?と思って、あらためて
メモリ量を見直す。
Tiny85って、SRAMは512Bなんだな。コンパイル後の
メモリ使用量をみると、600Bをちょっと超えてた。
とりあえず、正弦波テーブルを1個おきに間引いて、
半分サイズにする。
…400B台に入ったものの、動的メモリを食うことを
考えると、もうちょっと減らさないとだめか…
DigiUSBライブラリをやめて、時間稼ぎ処理は標準の
delay関数を使うように変えてみる。
…200B以下に収まった。なんか、DigiUSBライブラリ
って、すげぇSRAM食いなのなぁ…。
USB周りの処理もしてるし、Serial.printみたいな処理
も受け持ってるから、色々食うんだな。
ひとまずこれで動かしてみる。うん。動いた。オシロで
波形を見る限り、ちゃんと意図通りの波形が出てるみたい。
シャッタースピードを1~2秒くらいで撮影したのがこれ。
![](https://blogimg.goo.ne.jp/user_image/60/de/2e54f8b0dac7db84afee59bbe2118242.jpg)
![](https://blogimg.goo.ne.jp/user_image/5e/fb/37feeffece2df1a9641d122d8e3b8d0e.jpg)
![](https://blogimg.goo.ne.jp/user_image/01/ba/164ebb72280879c9e3dc9bd8fbe517f1.jpg)
![](https://blogimg.goo.ne.jp/user_image/43/5d/375247355a1a4d732fc087fe2da52f38.jpg)
こんな風に、複数の正弦波を組み合わせて、時には
ホワンホワンとやわらかく、時にはパタパタと短く、
ロウソクっぽく瞬いているようにしてる。一見ランダム
のように瞬いて見えるけど、やわらかい瞬きなので、
不自然さは感じられないはず。
秋月で売ってる、LEDが瞬いてロウソクみたいに光るって
いうLEDドライバは、動かしてみたところ、ランダム値の
サンプルアンドホールドって感じで、不自然感があるん
だよな。
http://akizukidenshi.com/catalog/g/gI-08752/
んで、0番、1番の2つのピンから、それぞれ違う波形で
合成した結果を出力してて、それぞれ、炎の先っぽと
炎の根っこのイメージにしていて、根っこのほうは
一番暗くなるときの値が大きめ(あまり瞬かない)、
先っぽは小さめ(瞬きの振幅が大きい)という具合に
してある。
しかも、先っぽと根っこでは、合成している波形の
波長も全然ことなるので、全体としてゆらゆらと
炎がゆれているようにみえるかな、と。
とりあえず、電球色じゃなく、いつもの赤色LEDを
繋いで眺めてみる。
![](https://blogimg.goo.ne.jp/user_image/5a/75/45b614b7f2416af32f98e10b38fc04ec.jpg)
うん、うん。こういう感じ。
ちょっと、DigiSpark基板上のLEDが明るすぎて、
なんかちょっと邪魔なんだよな。
Tiny85に直接Hexを書き込んで、そっちで光らせて
みるほうがいいかなぁ。
そもそも、Tiny85の内部クロックとかのFuseって、どんな
設定になってるんだろう?回路図見る限り、外部の
クリスタルとか付けて無いから、内部クロックのはず
なんだけど、多分16.5MHzだよな。
http://www.instructables.com/id/Digispark-DIY-The-smallest-USB-Arduino/
Fuseビットはここに書いてあったけど、クロック周りの
ことはHex値で書かれてもよくわからん。
もしくは、DigiSparkじゃなく、シリアル接続のTiny85版
Arduinoとして、8MHzで動かしてもいいのかもしれん。
http://roshiago.blog.so-net.ne.jp/2012-01-28
DigiSpark自体をロウソクにしちまおうかと思っていた
んだけど、オンボードLEDを取っ払うほうが楽か、
Tiny85単体を使ったほうが楽なのか…
あと、できれば、加速度センサーとか、風センサー
(圧電素子?)とかで、瞬きパターンを少し変化できる
ようにしたら面白いんだろうけどな。DigiSparkだと、
ちょっと容量的に厳しいかな…
![](/images/clear.gif)
![](/images/clear.gif)
![](/images/clear.gif)
|