ATtiny85でRGBフルカラーLEDテープを動かしてみたくて試していましたが,自作プログラムではなかなか思うようにはなりませんでした。

ATtiny85でフルカラーLEDテープを動かしてみようと試作中
ATtiny85に取り組み,アクセクとネットにアクセス,,

どうもATtiny85では条件分岐とかループでのスピード不足があるようなので,インラインアセンブラを組み込んでみたところ,なんとか動いてくれたので備忘録としてのメモです(^^)。


ハード的はATtiny85とGroveのRGBLEDテープ(30LED)だけです。



せっかく動いたので,動画にしてみました。




ざっとしたプログラム例です(^^;;;;;;;

1.初期設定部
・アセンブラと共有する変数や数値はグローバルの領域で定義して,スコープの影響を受けないようにしています。
・setupではPORTBのbit1を出力に設定し,まずはLOWにしています。できる事はやっておかなくちゃ,,です(^^)
・LEDの表示データを全部書き込んでおいてからアセンブラのあるルーチンsendData()を呼び出す仕様にしてみました。




2.動画の表示のloop部
・全部のLEDを同一色にして各色を表示するパートと1個ずつ別の色にするパートがありますが,特にとりたててどうという事は,,,(^^;;;;;;;;
・ここでもLEDのデータを全部書き込んでからアセンブラのあるルーチンsendData()を呼び出しています。




3.インラインアセンブラ部
・使用レジスタはアセンブラにまかせないで全部決め打ちして,オヤジの頭の中がシンプルになるようにしています(^^)。
・pulseの出力ポートのI/Oアドレスとbitは6bitの定数で渡しています。




4.ハマった事と反省
・アセンブラ部に入る前に割り込みを不可にしておかないと時として不安定な動きをする事がありました。これに気がつくのに何時間,,,(^^;;;;;;;;
・LEDとマイコンを別電源にする時はお互いのGNDをしっかりと接続しておく!
これも気がつくまでに数時間,,(^^;;;;;


うーむ,まだまだ分からない事が多いので勉強が必要ですが,ま,動いて良かったです(^^)。 

本格的なインラインアセンブラはとっつきにくい記号が多く,ポインタ関係も含めて頭がついていきません。でもレジスタを決め打ちした短いものなら案外シンプルにできるようには思いますね。



なお,現在のところ,参考にしたり参照して特に役立っているサイトは以下です。

おもちゃラボ【Arduino】アセンブラ入門 その1
 AVRのメモリ構成やアセンブラのとっかかりが優しく書かれています。

Adafruit, Arduino Inline Assembly Tutorial #Arduino
 アセンブラの初歩から順序だって教えてくれます,

AVR Instruction Set Manual
 日本語のもありますが,,,見慣れない単語とあまり聴いたことのない日本語の言葉遣いなので,こちらの方がわかりやすいです

Atmel-2586-AVR-8-bit-Microcontroller-ATtiny25-ATtiny45-ATtiny85_Datasheet
 データシートは短いのもありますが,こちらの方が詳しいし,200ページからの 23. Register Summary,24. Instruction Set Summary
はまとまっていて便利ですね。