「PIC AVR 工作室」サイトの日記的なブログです。
サイトに挙げなかった他愛ないことを日記的に書き残してます。
PIC AVR 工作室 ブログ
CALENDAR
2018年3月
日
月
火
水
木
金
土
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
前月
翌月
Entry Archive
2024年12月
2024年11月
2024年10月
2024年09月
2024年08月
2024年07月
2024年06月
2024年05月
2024年04月
2024年03月
2024年02月
2024年01月
2023年12月
2023年11月
2023年10月
2023年09月
2023年08月
2023年07月
2023年06月
2023年05月
2023年04月
2023年03月
2023年02月
2023年01月
2022年12月
2022年11月
2022年10月
2022年09月
2022年08月
2022年07月
2022年06月
2022年05月
2022年04月
2022年03月
2022年02月
2022年01月
2021年12月
2021年11月
2021年10月
2021年09月
2021年08月
2021年07月
2021年06月
2021年05月
2021年04月
2021年03月
2021年02月
2021年01月
2020年12月
2020年11月
2020年10月
2020年09月
2020年08月
2020年07月
2020年06月
2020年05月
2020年04月
2020年03月
2020年02月
2020年01月
2019年12月
2019年11月
2019年10月
2019年09月
2019年08月
2019年07月
2019年06月
2019年05月
2019年04月
2019年03月
2019年02月
2019年01月
2018年12月
2018年11月
2018年10月
2018年09月
2018年08月
2018年07月
2018年06月
2018年05月
2018年04月
2018年03月
2018年02月
2018年01月
2017年12月
2017年11月
2017年10月
2017年09月
2017年08月
2017年07月
2017年06月
2017年05月
2017年04月
2017年03月
2017年02月
2017年01月
2016年12月
2016年11月
2016年10月
2016年09月
2016年08月
2016年07月
2016年06月
2016年05月
2016年04月
2016年03月
2016年02月
2016年01月
2015年12月
2015年11月
2015年10月
2015年09月
2015年08月
2015年07月
2015年06月
2015年05月
2015年04月
2015年03月
2015年02月
2015年01月
2014年12月
2014年11月
2014年10月
2014年09月
2014年08月
2014年07月
2014年06月
2014年05月
2014年04月
2014年03月
2014年02月
2014年01月
2013年12月
2013年11月
2013年10月
2013年09月
2013年08月
2013年07月
2013年06月
2013年05月
2013年04月
2013年03月
2013年02月
2013年01月
2012年12月
2012年11月
2012年10月
2012年09月
2012年08月
2012年07月
2012年06月
2012年05月
2012年04月
2012年03月
2012年02月
2012年01月
2011年12月
2011年11月
2011年10月
2011年09月
2011年08月
2011年07月
2011年06月
2011年05月
2011年04月
2011年03月
2011年02月
2011年01月
2010年12月
2010年11月
2010年10月
2010年09月
2010年08月
2010年07月
2010年06月
2010年05月
2010年04月
2010年03月
2010年02月
2010年01月
2009年12月
2009年11月
2009年10月
2009年09月
2009年08月
2009年07月
2009年06月
2009年05月
2009年04月
2009年03月
2009年02月
2009年01月
2008年12月
2008年11月
2008年10月
2008年09月
2008年08月
2008年07月
2008年06月
2008年05月
2008年04月
2008年03月
2008年02月
2008年01月
2007年12月
2007年11月
Recent Entry
振り返り2024
こないだのロボット
ロボット行ってきた
追加で中古ソフト買ってきた
こないだのロボット
ロボット行ってきた
レトロコンボ2グリーンを9Vで試す
SFCのラインヘッドネジ
こないだのロボット
ロボット行ってきた
Recent Comment
nekosan/
JYRUSSやってきたメモ
フルタニアン/
JYRUSSやってきたメモ
nekosan/
JYRUSSやってきたメモ
フルタニアン/
JYRUSSやってきたメモ
nekosan/
こないだのロボット
フルタニアン/
こないだのロボット
nekosan/
こないだのロボット
フルタニアン/
こないだのロボット
nekosan0/
レジ袋ホルダーを考える
フルタニアン/
レジ袋ホルダーを考える
Category
ノンジャンル
(2863)
PIC
(47)
AVR
(341)
Arduino
(446)
Raspberry Pi
(194)
mbed
(41)
ARM
(30)
ESP32
(15)
Android
(10)
OPアンプ
(125)
VHDL
(57)
PSoC
(4)
アナログ回路
(110)
クルマ
(127)
rails
(51)
本
(42)
導電塗料
(3)
Fritzing
(41)
Edison
(2)
FFT
(34)
写真
(158)
MIDI
(24)
その他日記
(11)
Python
(57)
3Dプリンタ
(124)
Bookmark
最初はgoo
goo blogトップ
スタッフブログ
My Profile
ブログID
nekosan0
自己紹介
Search
このブログ内で
ウェブ全て
最小限のオレオレライブラリをでっち上げる
Arduino
/
2018年03月07日
MAX7219搭載の、4連LEDマトリックスライブラリ。
Arduino標準で入ってるMatrix/Spriteライブラリを
使ってみたら、昨日のとおり、なんか微妙な感じに
なったので、簡単なオレオレライブラリをでっち上げ
ることにしてみた。
まぁ、かなり単純なSPIなので、shiftOut関数使って
適当にデータ吐き出せばうまくいくだろうという
もくろみ。
まずは4連のうち1個だけ(8×8ドット)を使って表示
してみた。
初期化コード(といっても、ノンデコードにする
とか、画面消すとか、輝度調整するとか)をざっと
書いてみて、適当にデータを吐き出してみたら、
大体思ったような表示するみたい
ただ、x、y座標指定でドットを打つ処理を組んでみると、
なんだか昨日のMatrix/Spriteライブラリと違って、
1行目と、2~8行目が入れ替わったような表示には
ならない。どうやら、もっと素直な配線になっている
みたいだ。
あれか…。adafruitが初期にMAX7219とか使って作った
モジュール類が、A~GとDPの端子を入れ替えて作って
しまったせいなのか、わざわざライブラリ内でそれを
補正する処理してるから、逆に、素直な配線使ってる
モジュールだと、Matrix/Spriteライブラリだと、
おかしな順序で表示されちゃうんだな。
それが判ったところで、あらためて4連に拡張していく。
MAX7219を横にズラズラ並べていく場合、単純なシフト
レジスタとして扱える。
なので、根っこの処理は変える必要ないんだけど、
複数のモジュールをまたがるような信号を、どの
ようなフォーマットで吐き出せばいいのかがよく
わかってなかったせいで、とりあえず動かしてみた
ところ、思ったところに思ったように表示されない。
https://www.youtube.com/watch?v=SMH45vnRbjI
このムービーを見て、あぁ、そうか、と理解する。
LOAD端子(CS端子)をLowに落としてから、一気に
横1行32ドット分(4モジュール分)を吐き出してから、
LOAD端子をHIGHに戻す、というわけか。
この、HIGHに戻るタイミングで、各モジュールは
自分宛に届いていたデータを、フルーツバスケット
よろしく受け取って処理するというわけなのね。へぇ。
で、その位置調整用にno-opを使うと…。
というわけで、これらを踏まえて、x、y座標指定で
ドットを描いたり消したりする機能と、8×8ドット
単位のビットマップを貼り付ける処理を組んでみて、
適当に描画してみたのがこれ。
ドットで画面を埋めていく処理→ドットを消していく
処理→三角形のビットイメージを貼り付ける処理、
という繰り返し。
モーションgifはサイズ馬鹿でかくなるので、すごく
縮小したり、映像の一部分だけ切り出した版。まぁ、
処理内容は想像つくかと。
ドットは、20ミリ秒ごとに1個、ビットマップは250
ミリ秒ごとに描いたり消したり。
三角形のビットマップは、上下左右の方向がわかる
ためのテスト図形。タイミングウェイトを置いてる
ので、描画しているのが見えてるけど、実際はもっと
速い。
とりあえず動作確認用なので、shiftOut関数やdigital
Write処理を使いまくってて、SPI本来の速度ではない
と思うんだけど、この程度のデータ量なので、ぜんぜん
速度不足という感じは無さそう。
まぁ、直接ポートを叩けば、いくらでも高速化はできる。
で、やってみて見えたあたりを少し纏めておく。まず、
座標系。
左上が(0,0)の、第4象限と考えてよい。これだ。
使いやすい。
それから、表示したいデータと、ビットシフトの処理
のイメージ。
こんな具合で、コネクタがついている側のモジュール
(この場合右側)を入り口にして、4つのモジュールを
串刺しにした形で、シフトレジスタでデータを流し
込んでいくんだけど、データは、横1行32ドットの場合、
各モジュール宛に「コマンド」+「データ」の計2バイト
が1セットになっているので、1行では合計で、64ビット
データの塊となる。
その際、一旦LOAD端子をLowにしてから、この64ビット
をごっそり流し込んで、LOADをHighに戻すと、4つの
各モジュールが受け取って、よしなに処理してくれる。
このビットイメージのうち、no-opっていうコマンドに
ついて解ってなかったので、最初ぐちゃぐちゃの表示に
なっちゃったんだけど、その辺をもう少し詳しくする。
例えば、上から3番目の行の、左から2番目のモジュール
に「01010101」っていうビットパターンを書き込みたい
という場合、のこりの3つのモジュールの表示には影響
を及ぼしたくないわけ。そういうことを踏まえて、
残りの3つはno-opっていうコード(16個の0)を使えば
よいということみたい。最初、そこがよくわかって
なくて、表示がぐちゃぐちゃになった。
言い換えると、どこか1箇所に表示するデータを書き込む
場合も、no-opも含めて横1行全部のデータ量を転送する
必要があるので、処理効率的には正直よくない。
特に、4モジュールといわず、横にもっとたくさんデイジー
チェーン接続していくと、その分だけ大量のデータ
(特にno-op)を付随して流す必要があって、少し非効率。
8×8ドットのビットマップを特定のモジュールに表示
したい場合でも、実質的には全画面書き換えるのと同量
のデータを流し込んでいるわけ。
(データの3/4はno-opとなって、無駄になる)
まぁ、横に長いシフトレジスタ構造なわけだし、それを
大量に繋いでも、常に配線3本で済ますっていう意味
では仕方ないのかもしれない。
ちなみに、初期化で使う輝度調整とか、「日の字型」LED
へのデコード有無とかも、同じように「コマンド」+
「データ」の16ビットデータを、モジュール数分だけ
繋いだデータとして渡すっていう点ではまったく一緒。
データシートの、この表を眺めればすぐにわかるかと。
ちなみに、「コマンド」にDigit0~Digit7を指定する
場合にビットイメージの書き込み処理になって、それ
以外の場合はそれなりのコマンドとして機能するという
具合。
(4線SPIのLCDモジュールとかだと、データ/コマンドを
制御線1つ割り当てて制御したりするけど、これは
そういうの無くて、データ内にコマンド情報を含めて
送っているわけ)
ちなみに、0x00だと「no-op」、0x0Aだと輝度といった
具合。なお、各コマンドともビット15~12は、設定して
も無視されるので、基本はゼロで埋めておけばいい。
あと、Digit番号は0~7だけど、コマンドは0x1~0x8
といった具合に、1個ずれてるのも要注意。0はno-op
で使われている。
初期化処理は、横4つそろえて行うものだろうと思う
ので、この場合はno-op使わずに、同じコマンドデータ
を4個連ねて送ればいい。
とりあえず、オレオレライブラリをさくっと書いてみて、
使い方とか、構造とかは解った。LEDマトリックス自体
は、部品名に「1088AS」って書いてあるから、多分
カソードコモン。
配線順も素直だし、LEDマトリックスもカソードコモン
だし、すごい素直なつくりをしていることが判った。
これはなかなか。配線追わなくても、これなら中身が
透けて見える。
扱いやすいモジュールで、やっぱこれいいな。max7219。
(追記)
http://brown.ap.teacup.com/nekosan0/3508.html
テスト用スケッチをzipファイルでアップしました。
https://twitter.com/aroerina2/status/970540768321417216
帯広。
https://twitter.com/tamagosan32768/status/963123249759469568
大きい555は、なんかロマンがあるんだよな。前から。
https://twitter.com/qx5k_iskw/status/970412886941028352
micro:bitは、RADIO機能が「発明」って言ってもいい
ほど使いやすいんだよな。2個あると、それだけで
すごい遊べる。
もともとは子供の学習用とかを意識してそういう風に
作ったんだろうけど、これ、ほんと色々使えてすごい
よく出来てると思う。2個あれば、あっという間に
ラジコンとか作れる。
https://twitter.com/degochi/status/970469061837537280
http://nomolk.hatenablog.com/entry/2017/07/05/223000
ヒートベッドにしても、エクストルーダーにしても、
熱を出すものだから、ちゃんと組み立てないと怖い
ってことなんだな。そりゃそうだな。気をつける
必要あるねぇ。いつか買ったときのために。
https://twitter.com/sampleaccount0/status/969697056750108672
ねぇ。
https://twitter.com/kinzok/status/970039437596942336
モンテネグロ。
https://twitter.com/felis_silv/status/970886675965464576
ダライアスだな。
コメント (
0
)
goo ブログ
ブログの作成・編集
gooおすすめリンク
おすすめブログ
【集まれ!野鳥ブロガー】あなたのブログを紹介しませんか?
@goo_blog
【お知らせ】
ブログを読むだけ。毎月の訪問日数に応じてポイント進呈
【集まれ!野鳥ブロガー】あなたのブログを紹介しませんか?
訪問者数に応じてdポイント最大1,000pt当たる!
dポイントが当たる!無料『毎日くじ』