7セグメントLEDシリアルドライバモジュールを表示させる(1/2)

〔2/2〕 〔Arduinoの動かせ方入門に戻る〕


7セグメントLED 改めて説明する事もないと思われますがぁ...7セグメントLEDは0〜9の数値を表示させる為の表示器です、要するに8個のLEDが有るのと同じなので配線はLEDと同じで、
表示させたい数値の形になる様な場所(LED)を点灯させるだけです。
この辺りの基本はこちらこた電さんの"7セグLEDと集合抵抗を使ってみよう"を参考に
しましょう。
なのでぇ、7セグメントLEDが1個(一桁)であれば、マイコンのデジタルIOに8本全て配線する事も可能なので簡単なのですがぁ、
2個/3個と増えてくれば途端に配線は増えるは、プログラムは複雑になるはで敷居が高くなってしまいます
例えば、3個使うには先ず3桁目を表示させ、次に2桁目に切替えて表示させ、そして1桁目に切替えて表示させるを高速に繰り返し表示すると 目には残像現象で3桁が同時表示されている様に見えるこれを”ダイナミック点灯”と呼んでいます。
この辺りの話はこちらはじめる電子工作さんの"7セグメントLEDを使った数値の表示"を参考にしましょう

7セグメントLEDモジュール そこで秋月電子通商の”7セグメントLEDシリアルドライバモジュール
(写真は秋月電子通商さんのをちょいと拝借)

この商品は7セグメントLED74HC595を合体させた物です。
74HC595の記事は前に書きましたので詳細はそちらを一読願います。
74HC595にSPI接続でデータを送れば7セグメントLEDに表示出来ます。
しかも何個7セグをぶら下げ様と制御は3本のみとワンダフォな一品です。
ダイナミック点灯は繰り返し表示処理させないとダメですが、
このモジュールは表示がラッチされて表示されたままとなるので一度表示させれば良く、その分マイコンに他の仕事もさせやすいでしょう。


7セグの表示位置とデータビットの関係について

7セグの表示位置とデータビットの関係図 SPIでデータを送るのですがぁ、そのデータのビットと7セグLEDの表示位置との対応を書いて置きます。

ArduinoのSPIライブラリはデータビットを送る順番が"MSBFIRST"と"LSBFIRST" が選択出来ますが、 通常のSPI通信は"MSBFIRST"だと思うのでこれで説明します。
左図の( )内の数値がデータのビット位置と対応しています、
ですので、7セグで""を表示させる場合は、A/B/C/D/GのLEDを点灯させるので
"0b01001111"のデータを送れば良い事になります。
(因みに、LSBFIRST時は"0b11110010"と逆になります)

ピン構成について

7セグメントLEDシリアルドライバモジュールのデータシートは秋月電子さんの販売ページを見て下さい。 モジュールのピン名称は基板に書いて有るので図面は省きます。

ピン名称
概 要
 
 



1
VDD
電源 3〜6V
2
GND
電源 グランド
3
SCK
SPIのクロック入力(Arduinoの13番ピンへ)(MAX 35MHz)
4
SDI
SPIのデータ入力(Arduinoの11番ピン:MOSIへ)
5
SDO
データ出力(QH')(7セグが2個以上なら接続有り)
 
 



1
MR#
VDDに接続(SCLR)(LOWでリセットする)
2
LATCH
ラッチ信号(SPIのSS信号を使う、Arduinoの10番ピンへ)
3
OE
GNDに接続(OE/G)(0:出力する 1:出力しない)
4
VDD
電源 3〜6V
5
GND
電源 グランド

SDOピン

7セグメントLEDが1個の場合は配線しませんが、2個以上になると下記の様な感じになります。

7セグの2個以上構成図
もし”50”を表示させるとした場合で説明すると、
@ SS(LATCH)をLOWにします。           
A まず1の位の”0”(0b00111111)をSPIで送ります、
データは10の位の7セグに格納されます。    
B 次に10の位の"5"(0b01101101)をSPIで送ります、
10の位の7セグデータ”0”が1の位にシフトされ、
10の位の7セグには”5”が格納されます。     
C SS(LATCH)をHIGHにすると数値”50”が表示されます。

《7セグメントLEDが1個編》

まずは、7セグメントLEDの基本配線と基本プログラムを学習する為に7セグ1個で実験を行います。

7セグ1個の実態配線図
電源はArduinoからの5Vを使用。
Arduino UNOの12番ピンはSPIのSDIピンだが配線無しです、
又、他の機能ピンとして利用出来ません。

スケッチについて

IDEに下記のスケッチプログラムをコピーペーストして貼り付けて下さい。
IDEツールバーの「Upload」ボタンをクリックしてコンパイルとarduinoボードに書込みを行います。
---------------------------------------------------------------------
#include "pins_arduino.h"
#include <SPI.h>

void setup() {
     SPI.begin() ;                         // SPIを行う為の初期化
     SPI.setBitOrder(MSBFIRST) ;           // ビットオーダー
     SPI.setClockDivider(SPI_CLOCK_DIV8) ; // クロックをシステムクロックの1/8で使用(16MHz/8)
     SPI.setDataMode(SPI_MODE0) ;          // クロック極性0(LOW) クロック位相0(LOW)
 
     digitalWrite(SS, LOW) ;
     SPI.transfer(0b01001111) ;            // 数値の”3”を表示させる
     digitalWrite(SS, HIGH) ;              // ラッチ信号を出す
}
void loop() {
}
---------------------------------------------------------------------
実行させると数値の""が表示されると思います。
SPIの関数はArduinoの標準ライブラリを使っているので詳しくは、”Arduino 日本語リファレンス”を参照下さい。

表示させる数値のパターンデータは下記です。(MSBFIRST時)
     const unsigned char NumPatternData[] {
          0b00111111 , // 0
          0b00000110 , // 1
          0b01011011 , // 2
          0b01001111 , // 3
          0b01100110 , // 4
          0b01101101 , // 5
          0b01111101 , // 6
          0b00000111 , // 7
          0b01111111 , // 8
          0b01101111 , // 9
          0b10000000 , // .
          0b01000000 , // -
          0b00000000 , // 空白
     } ;

[次ページ”7セグメントLEDが複数個編”へ]





【きむ茶工房ガレージハウス】
Copyright (C) 2006-2020 Shigehiro Kimura All Rights Reserved.