マイコン一覧

イルミネーションのソフトはほぼOK

20131012_02

 delay()でのループ待ちからWDTのスリープに変更したソフトをさらに調整。電流計も届いたので電流を測ってみたが思ったほど下がらない。電池の昇圧ICの二次側で見るとそれなりに消費は下がってるけど、一次側だと10mAが4mAになる程度。まぁ、それでも半分以下になるので助かる。millisで時間調整していた部分もWDTを絡めた変数のループカウンタで処理するように修正。

 で、実機に最新版のソフト書き込みしたATtiny85Vを差し込んでテストしようとしたのだが・・・。ATtinyを逆さまに差し込んでしまっていたようで、昇圧ICのブレイクアウトを壊してしまった。肝心要のATtiny85は全然無事でした。とりあえずブレッドボード実験機の方の昇圧ICのブレイクアウトを実機で使うことにして、実験機では同じ回路をここの部品で再構築しました。HT7733の昇圧回路を構成する部品は10セットくらい持っているので復旧も楽です。さすがにディスクリートの部品では8pinDIPサイズには収まらないですが。


Sleepのテスト

 ATtiny85でのSLEEP_MODE_PWR_DOWNを使ったdelayのテストをした。ATmega系のソースを参考にしていたらWDTCSRとあったが、tiny系だとWDTCRだな。直してSleepが効くようにはなった。ウォッチドッグ・タイマを使ってもリセットはかかってない。本当にSleepしてるかは電流計で計りたい。あ、

 Sleepするとmillis()も止まってしまう様です。待ち時間の変数から引いておけば良いのかしらん。
あとは動作モードの判定がいまいち行けてないのでそこを修正していきます。現状ままでも動くのは動くので(電池がもたないけど)、気持ちが楽。

 と言う前に、リースへのLEDの物理実装をしないとね。これが終わるとだいぶ気持ちが楽になる。


イルミネーションソフトウエア開発

2013年末イルミネーションのソフトウエアテスト

今年は可変要素を増やしてテスト中。
 1.点灯の最大値
 2.点灯の速度
 3.消灯時の時間
これらを似非乱数で決定。(Arduinoの乱数はまぁそういうもんレベルです)

2.点灯の速度とは、1.点灯の最大値に行くまでの加算する値。

A) 1.点灯の最大値が100で2.点灯の速度が10だと10段階で明るくなって、10段階で暗くなる。
B) 1.点灯の最大値が100で2.点灯の速度が5だと20段階で明るくなって、20段階で暗くなる。
段階は固定の時間なので、A)よりB)の方が長く灯っている事になる。

 なんて事を今日昼間に思いついて、帰宅後にコードにしてみたら意外と旨く行きそうなので採用。

 あとは、毎年使ってる、暗くなった動作開始して、特定時間たったら終わって、次に一定タイミング以上明るくなったら暗くなるのを待つようなコードを入れ込めば完成。
追加でなるべくAVRを寝かせる様なモードにして電力消費を抑えたい。点灯パターンタイミングも微調整は必要。

 電池がなくなってきた時になんらか知らせる点灯モードも検討中。一応、元の電池の電圧を測定できるように回路は作ってある。RGBLEDを1こ入れる予定なので、それが点滅するようにするか。LEDはRGB1こ(3LED)、白6個、青6個で15個なので、1個PCA9685の端子が余る。これを「電池交換してちょうだいモード」の告知LEDにするのもありだなと。ともあれ明日にはストロベリーリナックスのINA226の電流測定モジュールが届くので消費電流を測定して調整してみたい。まぁ、今のままでも単三アルカリ電池で丸1日は動いてます(デバッグ用のLCDも表示させた状態で)。

 このあとは実際のリースへのLEDの設置配線作業が待っています。

 来年の課題は、スムースに点灯させる事かな。点灯速度が5だと5,10,15,20,25 … の様に明るさが増す。これを点灯切り替えのタイミン付を短くする事でスムースにしたい。

 こんなコードだけど、こういうのの良し悪しを議論できるような職場だったらよかったのにな。

 あ、基板はすでに完成させてます。

20131007_01


イルミ2013実装基板仮動作確認

20131006_03

今朝方の実装図でとりあえず実装。PWMドライバPCA9685からL型端子までのところはLED14のピンしか繋いでいない状態だがテストは可能。
無事PWMでLEDがぽわんと点きました。残り7個をワイヤリングして、Lコネと隣の8個はハンダブリッジして。これでコントローラの基板は完成。
続いては、LEDのワイヤリングとソフトウエアです。
 ATtiny45/85を使ったi2cスレーブの実験はやはり来年でしょうか。


自分メモ 新品のATtinyの初期化

 ArduinoISPでつないで、ArduinoIDEから「ブートローダを書き込み」でOK。実際にブートローダが書かれるわけではないと思うが。
そのままでArduinoIDEでISPでプログラムを書き込める状態になっている。ArduinoISPは遅いのを我慢すれば使い勝手が良い。AVRISPmk2だとドライバの問題でArduinoIDEかAtmel Studioかどちらかの利用になる。どちらでも使えるようにする話もあったが、Windows8だとドライバ署名とかの問題で面倒っぽい。

 ArduinoIDEからのブートローダの書き込みではFUSEビットを書き換えられないという情報があった。たまたまデフォルトの値で大丈夫ってことなのかな?
 実証結果
 買ったばっかのレールに入ったままのATtiny85Vを使って試してみた。いきなりISPでプログラムを書き込んだら、動作が遅い。1/8のプリスケーラが効いていない状態。
 その状態で、「ブートローダを書き込み」を行った上で、再度ISPでプログラムを書き込んだら、予定通りの動作でした。やはりFUSEのうちDivide clock by 8 internallyは少なくとも「ブートローダを書き込み」によって書き換わっている様です。


実装配置の調整

20131006_01

 フリスクサイズから4ホールぶんはみ出るけども、30×10で初版を作成します。PCA9685は右側へ持ってきてはみ出た部分の折り目が折れないように補強の役目も。
 むりくり入れれば26×10のフリスクサイズにも入るのだけど↓。コネクタ的にフリスクケースには入らないので30×10で余裕をもたせます。

フリスクサイズに押し込んだ場合

 で、配線を書いていてふと思った事が。
 i2cのPWMドライバとLEDをセットで小さな基板か空中配線で実装して、バス配線でつなげれば良いのではとか。i2cなら電源の2本とSDA,SCLの4線でバス配線できるし。ただ、PWMドライバicはその4本の他にアドレス指定に何個かとドライブするモノをつなぐのに何個か必要になるから、サイズ的にはDIPは無理。DIPサイズでよければそれこそATtiny85を使えば良いのか。あ、SOPのtiny85(85である必要すらない。45でもメモリ足りそう。)使って変換基板上にLED類と4線を実装してしまえば良いか。んーこのパターンは来年やってみようかな。
 調べてみたら、BLINK MというマルチカラーLEDをi2cでドライブするものがATtiny45のSOPの奴を使っている様です。ちょっとブレッドボードで試してみますかね。

→調査結果。ATtiny45/85をArduinoのフレームワークでの利用だとi2cを使用してしまうとPWMが1つしか使えない。
PCA9685をばらまいた方が使い勝手が良いかもしれない。4ポートくらいのi2c PWMドライバで 3Vあたりから動作可能なIC無いかな。
もしくはATtiny44/84を試すか。44/84はI2Cを使ってもPWMが2つ使える。ただパッケージ的に6個ピンが増える(14ピンパッケージ)。