Arduinoで16x16 LEDドットマトリックスを利用する(3)
前回の続きです。
ブレッドボードにてプロトタイプを制作しました。配線が多いです。
回路は前回とほぼ同じでこんな感じです(若干修正しています)。
写真の奥の大きいICがTLC5940です。
このICで行単位でフォントパターンを表示しています。
プログラムでダイナミック点灯方式でパターンを表示しています。
手前のボードが74HC595とTD62783のICで表示する行のON/OFFを制御しています。
今回はTLC5940を使ったのですが、ちょっと使いにくです。
使いにくというか通信データが無駄に多いです。
1点につき12ビット(輝度)のデータ送信が必要で16点だと12x16=192ビットのデータを
送る必要があります。
これなら、シフトレジスタ74HC945 2つ + 抵抗16本 に置き換えた方が良いかも。
プログラムも今一タイミング的に不明な所があり、試行錯誤的にdelayを入れて
やっと正常に表示ができました。
プログラムはこんな感じです。ダイナミック点灯部の制御はloop内で強引に
回しているので、このままだと他の処理が何もできません。
今後はタイマー割り込み等を使ってバックグランドで処理する等の改良が必要です。
#include <arduino.h> #include "Tlc5940.h"#define DATAPIN (8) // 74HC595のDSへ #define LATCHPIN (7) // 74HC595のST_CPへ #define CLOCKPIN (6) // 74HC595のSH_CPへ #define LED_BRIGHTNESS 4095 // 最大の明るさ uint16_t fnt[16]= { 0x0200, 0x0200, 0x3ff8, 0x0400, 0x0440, 0x07f0, 0x1c5c, 0x3444, 0x2446, 0x6482, 0x4482, 0x4506, 0x4604, 0x381c, 0x0070, 0x0000 }; void MyShiftOut( int dataPin, int clockPin,uint16_t val ){ for( int i = 0; i < 16; i++ ) { digitalWrite(dataPin, !!(val & ((uint16_t)1 << i))); digitalWrite(clockPin, HIGH); digitalWrite(clockPin, LOW); } } void clearRow() { digitalWrite(LATCHPIN, LOW); MyShiftOut(DATAPIN, CLOCKPIN, 0); digitalWrite(LATCHPIN, HIGH); } void selectRow(byte row) { digitalWrite(LATCHPIN, LOW); MyShiftOut(DATAPIN, CLOCKPIN, 0x8000>>row); digitalWrite(LATCHPIN, HIGH); } void setdata(uint16_t d) { Tlc.clear(); uint16_t msk = 0x8000; for (byte i = 0; i <16;i++) { Tlc.set(i, msk & d ? LED_BRIGHTNESS : 0); msk>>=1; //Tlc.update(); } //delay(50); //Tlc.update(); } void setup() { pinMode(DATAPIN, OUTPUT); pinMode(LATCHPIN, OUTPUT); pinMode(CLOCKPIN, OUTPUT); Tlc.init(0); clearRow(); } void loop() { // データ設定テスト for (int i=0; i < 16;i++) { setdata(fnt[i]); clearRow(); Tlc.update(); //delay(1); delayMicroseconds(750); selectRow(i); } //delay(1); }
プログラムの作成にあたり、TLC5940の使い方は武蔵野電波さんの記事
「第15回 TLC5940で16個のLEDを遊ぶ」を大いに参考にさせて頂きました。
http://pc.watch.impress.co.jp/docs/column/musashino_proto/20090924_316652.html
TLC5940の使い方については、同じく武蔵野電波さんの「Arduino 日本語リファレンス」の
TLC5940 (16ch/12bit PWMコントローラ) を参考にさせて頂きました。
http://www.musashinodenpa.com/arduino/ref/index.php?f=1&pos=2329
また、シフトレジスタ74HC595の使い方については、hiramine.comさんの記事
「少ない出力ピンで、大量のLEDを制御する(シフトレジスタ使用)」を参考にさせて頂きました。
http://www.hiramine.com/physicalcomputing/arduino/shiftregister.html
「あ」のフォントデータは、下記のHPにて公開されているフォントを利用させて頂きました。
「JISX0213(所謂第3,4水準漢字)用bdfフォントのページ」
http://www12.ocn.ne.jp/~imamura/jisx0213.html
jiskan16-2004-1.bdf.gz(303,930バイト)を利用しています。
ちなみに、「あ」のJISコードは 0x2422(= 10進数 9250)なので、
bdfファイル(テキストファイル)をエディタで開いて"ENCODING 9250"で検索すれば、
フォントデータが得られます。
iskan16-2004-1.bdf(テキストファイル)の「あ」フォントのデータ
STARTCHAR 01-04-02
ENCODING 9250
SWIDTH 1024 0
DWIDTH 16 0
BBX 16 16 0 -2
BITMAP
0200
0200
3ff8
0400
0440
07f0
1c5c
3444
2446
6482
4482
4506
4604
381c
0070
0000
ENDCHAR
0200〜0000の16個がフォントデータです。
関連記事
・Arduinoで16x16 LEDドットマトリックスを利用する(1)
・Arduinoで16x16 LEDドットマトリックスを利用する(2)
・Arduinoで16x16 LEDドットマトリックスを利用する(3) (この記事です)
・Arduinoで16x16 LEDドットマトリックスを利用する(4)
・Arduinoで16x16 LEDドットマトリックスを利用する(5)
・Arduinoで16x16 LEDドットマトリックスを利用する(6)
・Arduinoで16x16 LEDドットマトリックスを利用する(7)
・Arduinoで16x16 LEDドットマトリックスを利用する(8)
再チャレンジ版
・aitendo 16x16LEDマトリックスの制御 (1)
・aitendo 16x16LEDマトリックスの制御 (2)
・aitendo 16x16LEDマトリックスの制御 (3)
・aitendo 16x16LEDマトリックスの制御 (4)
・aitendo 16x16LEDマトリックスの制御 (5)
・ESP-WROOM-02を始めました(2)
« Arduino IDE 1.0.5がマイナーバージョンアップされていた | トップページ | Arduinoで16x16 LEDドットマトリックスを利用する(4) »
「arduino」カテゴリの記事
- Arduino IDE+Arduino STM32環境で指定と異なるgccが使われてしまう(2025.01.23)
- Zorin OSでArduino Uno互換機(CH340)が認識しない(2025.01.19)
- Arduino IDE 2.3.4でArduino STM32を利用する(2025.01.12)
- Arduino用 SKK日本語変換ライブラリの開発 その1(2024.12.28)
- NeoPixel(WS2812B)の制御 その5(2024.09.15)
「AVR」カテゴリの記事
- NeoPixel(WS2812B)の制御 その5(2024.09.15)
- Arduino用SJIS漢字フォントライブラリ SDカード版を作成しました(2018.10.30)
- ATtiny13AでI2C接続キャラクタLCDを利用する(4)(2018.04.16)
- ATtiny13Aで赤外線リモコン受信センサーを使う(2)(2018.04.15)
- ATtiny13AでHC-SR04を使った距離計測(2018.04.14)
「表示器制御関連」カテゴリの記事
- NeoPixel(WS2812B)の制御 その5(2024.09.15)
- Arduino用 美咲フォントライブラリを更新しました(2024.03.21)
- Raspberry Pi Pico(MicroPython)でLEDドットマトリックスを使ってみる(2024.03.14)
- Raspberry Pi Pico MicroPython用のマルチフォントライブラリ(2023.02.09)
- MicroPython(Raspberry Pi pico)で8x8ドットNeoPixcel文字表示(2023.02.08)
« Arduino IDE 1.0.5がマイナーバージョンアップされていた | トップページ | Arduinoで16x16 LEDドットマトリックスを利用する(4) »
コメント