フォト
2019年2月
          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    
無料ブログはココログ

« 4連8x8ドットLEDマトリックスを試してみる | トップページ | IchigoJamでMAX7219 8x8ドットLEDマトリックスを制御する »

2016年7月 5日 (火)

4連8x8ドットLEDマトリックスを試してみる 続編

前回の続きです。

4連8x8ドットLEDマトリックス2つを連結して32x16ドット表示にしてみました。
スケッチは前回からの少々の改造で実装出来ました。

01

1つめの出力を2つめの入力に接続しいます。増やしても5線のみので制御できます。

16x16ドットの日本語文を表示するため、自作フォントライブラリを利用しました。
フォントをmicroSDカードから読むため3.3V稼働させています。
(Arduino Unoも3.3V稼働出来るものを利用)

MAX7219としては3.3Vは動作保証外ですが問題なく動作しました。
3.3VでもOKなので、ARMやESP-WROOM-02でも利用出来ますね。

動作の様子


下段のモジュールのLEDが不良のため1点だけ点灯しませんが
動作としては期待以上に動いてくれました。

ただ、Arduino標準のshiftOut()関数によるシリアルデータの送り出しが遅いようです。
早いスクロール表示が出来ませんでした。そのため高速版のshiftOut()に置き換えました。

8個もLEDマトリックスを使用しているので消費電流が気になり、計ってみました。

Dscn5391

表示部(Arduino Unoを除く)は、最大35.1mAでした。まあ、こんなもんですかね。
バッテリー駆動も可能なレベルですかね。

このモジュールなかなか使いやすですね。用途に応じて、連結して利用出来ます。
更に、4連基板をカットして利用することも出来るみたいです。

基板の裏はこんな感じ

Dscn5380

今回作成したスケッチ(プログラム)  ダウンロード max7219_test3.zip (6.2K)

いくつかのファイルに別れますが、取りあえずメイン部はこんな感じです。

// max7219_test3.ino
// MAX7179ドライバーライブラリ動作チェック 32x16ドットバージョン
// 2016/07/05 たま吉さん

#include <string.h>
#include <sdfonts.h>

#include "MAX7219_matrix.h"
#include "libmatrix.h"

// MAX7219接続
#define MAX7219_DIN   2 // DIN
#define MAX7219_CLK   4 // CLK
#define MAX7219_LOAD  3 // LOAD

// SDカード接続
#define MOSI_SD   11    // SDカードのMOISへ接続
#define MISO_SD   12    // SDカードのMISOへ接続
#define CLK_SD    13    // SDカードのCLKへ接続
#define CS_SD     10    // SDカードモジュールCSへ接続

#define  SCREENS   8    // MAX7219カスケード接続数
#define  BRT       0    // LEDの輝度(0~7)
#define  SC_WIDTH  32   // マトリック表示横ドット数
#define  SC_HIGHT  16   // マトリック表示縦ドット数

uint8_t fbuf[SC_WIDTH*SC_HIGHT/8];  // 表示用バッファ

// 表示用バッファを表示
// (フレームバッファ32x16ドットをMAX7219用バッファ64x8にマッピング)
void update_screen() {
  uint8_t* ptr = MAX7219_getBuffer();
  for (uint8_t i=0; i < 8; i++) {
    memcpy(&ptr[i*8],&fbuf[i*4+32], 4);
    memcpy(&ptr[i*8+4],&fbuf[i*4], 4);
  }
  MAX7219_update();  
}

// デモ
void demo() {
  uint8_t font[MAXFONTLEN];
  SDfonts.open();            // フォントのオープン
  SDfonts.setFontSize(16);    // フォントサイズの設定

  char* str = "こんにちは埼玉県!熱いぞ!埼玉県!";

  MAX7219_clear();
  while(1) {
    str = SDfonts.getFontData(font, str);  // フォントデータの取得
    if (!str)
      break;
    scrollInFont(fbuf, font, 30);
  }
  SDfonts.close(); 
}

// 1文字分スクロール挿入表示
void scrollInFont(uint8_t*ptr, uint8_t *fnt, uint16_t dt) {
  for (int8_t t = 0; t < 16; t++) {
    scrollBitmap(ptr, SC_WIDTH, SC_HIGHT, B0001); // 左スクロール
    clearBitmapAt(ptr, SC_WIDTH, SC_HIGHT, SC_WIDTH-t-1, 0, SC_HIGHT, SC_HIGHT);
    setBitmapAt(ptr, SC_WIDTH, SC_HIGHT, SC_WIDTH-t-1, 0, fnt, SC_HIGHT, SC_HIGHT);
    update_screen();
    delay(dt);
  }  
}

void setup() {
  //Serial.begin(115200);
  SDfonts.init(10);     // フォント管理の初期化
  
  // マトリック表示ドライバの初期化
  MAX7219_init(MAX7219_DIN, MAX7219_CLK, MAX7219_LOAD, SCREENS, BRT);
}

void loop() {
  MAX7219_clear();
  demo();
  delay(1000);
}

別途自作ライブラリ sdfonts を利用しています。
  ・sdfonts : Arduino用漢字フォントライブラリ SDカード版
    https://github.com/Tamakichi/Arduino-KanjiFont-Library-SD

今まで、LEDドットマトリックスを色々やってきましたが、このモジュールの利用で
落ち着きそうです。

関連記事
4連8x8ドットLEDマトリックスを試してみる 続々編
・4連8x8ドットLEDマトリックスを試してみる 続編 (この記事です)
4連8x8ドットLEDマトリックスを試してみる

« 4連8x8ドットLEDマトリックスを試してみる | トップページ | IchigoJamでMAX7219 8x8ドットLEDマトリックスを制御する »

arduino」カテゴリの記事

表示器制御関連」カテゴリの記事

コメント

最近四連LEDマトリックスを手に入れたのでこのページを参考にさせてもらいました。メインのシケッチを試しにIDE1.8.4でコンパイルしてみると、エラー続出でした。arduino.h が見つからないからスタートして、それを適当なところ(hardware/esp32)からコピーしたりしましたが、uint_8 が全部引っかかったり、不思議なエラー続出で諦めました。もし、よろしければご確認いただけませんか。
ちなみに、いろいろなボードやセンサー、表示器などを試しているので基本的な操作・導入は間違っていないと思うのですが。厚かましいお願いで申し訳ありません。

ヨシヅミさん

arduino.h を Arduino.h に修正して下さい。
Windows環境では問題ないですが、
LinuxやMacでは、大文字・小文字を識別するためこれではエラーになっちゃいますね。
ご迷惑おかけしました。

たま吉さん、早速のご回答を有難うございました。私もけさ目が覚めた瞬間にwindows版を試そうと思いつきました。最近、開発環境をほぼラズパイに移したのですが、まだスキルが伴っていませんね。今朝のアドバイスに従い、メインスケッチとライブラリ数カ所のarduino.h をArduino.h に変更しただけで全てのエラーがなくなりました。早速、昨夜準備したSDカードやLED を接続して、試したところ、一発でうまく表示できました。素晴らしいプログラムを公開していただいて有難うございました。これまでに8x8 LED単体のものを数個購入して、それを横に並べてアルファベットをスクロールするスケッチのサンプルを手に入れて、8266のWiFi と組み合わせたりしたのですが、今回手に入れた四連LED は、接続方向が以前のものと90度違っており、スクロールの向きが垂直になり、水平方向にスクロールするサンプルを探していて検索で見つけ、今回使わせていただきました。お陰様で、一気に漢字まで使える環境が整い、今後活用できそうで大変嬉しい思いです。重ねて有難うございました。

私もこのページを見て四連LEDマトリックスを買いました。
しかし、
#include  ←このまま使えるのですか(オレンジ色ではなく黒いままです)
#include "MAX7219_matrix.h" ←Matrix.hで代用できますか
#include "libmatrix.h" ←これは探せませんでした。
このような状況で前に進みません。(泣)
githubも英語でよくわからないので、もしもよろしければ素人にもできるやり方を教えていただければ助かります。

いわさん

> #include  ←このまま使えるのですか(オレンジ色ではなく黒いままです)
> #include "MAX7219_matrix.h" ←Matrix.hで代用できますか
> #include "libmatrix.h" ←これは探せませんでした。

ヘッダーファイル、
#include "MAX7219_matrix.h"
#include "libmatrix.h"
は、「今回作成したスケッチ(プログラム) ダウンロード max7219_test3.zip (6.2K)」のリンクから
ダウンロードし、解凍したフォルダmax7219_test3に入っています。

sdfontsライブラリは別途、githubから入手する必要があります。
github公開のダウンロード直リンクは下記の通りです。
https://github.com/Tamakichi/Arduino-KanjiFont-Library-SD/archive/master.zip

ダウンロードし圧縮圧縮ファイルを解凍し、その中の
\iblary\sdfonts フォルダをArduinoのliblaryにコピー、
\fontbin フォルダ内の FONT.BIN、FONTLCD.BIN SDカードの直下に入れて下さい。
(SDカードシールドまたはモジュールが必要です)

ありがとうございます!
やってみます。後ほど報告させていただきます。

1つではうまくいきましたが、2つ連結するとうまくいきません。
また、SDモジュールを購入しましたが、私が持っているArduinoUNOに接続したので壊れてしまったのでしょうか。ネットを見ると「3.3vでないとSDが壊れる」とありますので・・・。

また、アドバイス頂いた「・・・SD直下に入れる」というのもやり方がわからず困っています。
USBメモリのように、ファイルをコピーするというものではないですよね。
初歩的なもので申し訳ございません。

いわさん

SDカードは3.3Vで利用する必要があります。
直接5Vの電圧をかけると壊れる可能性があります。
ただし通常はArduino用のSDカードモジュールは5V電圧で利用できるよう、
5V電圧を3.3Vに変換してSDカードに供給しています。
お手持ちのSDカードモジュールを確認下さい。

>「・・・SD直下に入れる」
SDカードをパソコンに接続し、SDカードドライブのルートディレクトリに
FONT.BIN、FONTLCD.BINを入れてください。

ありがとうございます!
やってみます。また報告させていただきます。

無事にできました!ありがとうございます。
マトリクスの作りが悪いのか、Arduinoから一番遠いものが点灯しなかったり、全部つきっぱなしになったりします^^;
リセットを押すとなおりますがすぐに同じ症状になります。基盤の問題かと思われますが。。。色々交換しながらやってみます。
今回は丁寧に教えていただきありがとうございましたm(_ _)m

いつも参考にさせていただいております。ありがとうございます。実は、このページにある4連8x8マトリックス2段16×16ドット表示なのですが、一度は表示できたものの、設定を変える(例えば#define BRTを0から1に変え再度コンパイラしてarduino にインストールする)と、きちんとした表示ができなくなります。UNOでもNanoでもPROminiでも症状は同じでした。だだ1日くらい電源を抜いておき、再度試すと正常に表示されるようになります。(1時間くらい電源を抜いて置いたのではうまくいきません)。ちなみにSDカードは5vで接続できるモジュールタイプを使用しています。こちらも2種類くらい変えて試しました。また電流が足りないのかも知れないと考え、Matorix とSCカートの電源は別に1Aを直にとるようにしましたが変わりません。お忙しいところ申し訳ないのですが、原因と対策などご教示いただけないかと思いメールいたしました。
実は、このmax 7219モジュールを4つつなげ、横長の16×64ドット(文字は16×16表示)の電光掲示板(用途はサッカーの文字および点数表示です)を作りたいと考えております。パラメーターをどのように変えたら良いのか、この点もお教えいただけないでしょうか?
厚かましいお願いですが、よろしくお願いいたします。

あらさん

> 1日くらい電源を抜いておき、再度試すと正常に表示されるようになります。
私も、ちょっと原因が分からないです。
症状からは、電流が流れすぎのため、Arduino UnoのポリスイッチでOFFになってしまった。
ポリスイッチの状態が戻るのに時間を要している、くらいしか思いつかないです。

実用的な実装のため、実用には耐えられないかもしれません。


> 4つつなげ、横長の16×64ドットの対応

私もやってみないと分からないですが、次の修正が必要かと思われます。

パラメータの修正
1)MAX7219_matrix.hの修正
・#define MAXSCREENS 16 // 最大接続数
2)max7219_test3.inoの修正
・#define SCREENS 16 // MAX7219カスケード接続数
・#define SC_WIDTH 64 // マトリック表示横ドット数
・関数update_screen() の修正
横64x縦16ドット表示用バッファfbuf からLEDマトリックス 16連個連結バッファptr 横128x縦8ドットへ
マッピングするように修正する必要があります。

ご返事ありがとうございます。4つ繋げるケースについては試してみたいと思います。
もう1ヶ月も同じことを試していますが、むずかしいものなのですね。
ご親切にお礼申し上げます。

あらさん
「4連8x8ドットLEDマトリックスを試してみる 続々編」にて
http://nuneno.cocolog-nifty.com/blog/2019/01/48x8led-71ac.html
横64ドットx縦16ドットをやってみました。

ご指摘の不具合については、私の環境では発生しませんでした。
輝度も問題なく設定出来ました。連続稼働、再稼働においても問題なしです。


一昨日、続々編に気がつきました。本当にありがとうございます。パラメーターなどの役割が大分わかるようになりました。この猫ちゃんサイトは素人でもわかりやすい内容なので、今後もいろいろなページをありがたく参考にさせていただきたいと考えております。
不具合については、他のケース(ESP3266なども試しています)でも書き込みする度に表示結果が異なるなど、どうもこちらのコンピュータ環境(2台ありますが、それぞれ異なった不具合があります),の問題のようです。原因はわかりませんが、机周りが乱雑なためかもしれなし、PCにいろいろなソフトを入れすぎているのかも知れません。とにかく色々きれいにから再度チャレンジしたいと考えております。
今後ともよろしくお願いいたします。

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/571408/63874643

この記事へのトラックバック一覧です: 4連8x8ドットLEDマトリックスを試してみる 続編:

« 4連8x8ドットLEDマトリックスを試してみる | トップページ | IchigoJamでMAX7219 8x8ドットLEDマトリックスを制御する »