ENGLISH 简体中文 日本語 한국어  



   
 
キーワードまたは型番を入力    




アプリケーションノート 3729

SPIインタフェースによってMAXQ2000マイクロコントローラと通信するMAX6951/MAX6950 LEDディスプレイドライバの用法

要約:このアプリケーションノートはMAXQ2000のSPIペリフェラルを使用するMAX6951/MAX6950 LEDドライバに対するアセンブリ言語技術を述べたものです。

はじめに

MAX6950MAX6951は高速SPIインタフェースによって制御される5桁および8桁のコモンカソードLEDディスプレイドライバです。これらのデバイスは独特な多重化方式を採用しており、LEDドライバとLEDパネル間の接続を最小化します。MAXQ2000は高性能の16ビット、RISCマイクロコントローラであり、LEDドライバとマイクロコントローラの間のインタフェースを容易とするSPIモジュールを内蔵しています。このアプリケーションノートはMAXQ® アセンブリ言語によるサンプルコードを提供し、MAXQ2000のSPIモジュールを使ってMAX6951/MAX6950の機能を試行する方法を示します。

ハードウェアとソフトウェアの要件

このアプリケーションノートに記述したインタフェースの実験を行うためには、MAX6951の評価キット(EVキット)、MAXQ2000の評価キット(MAX-IDEソフトウェアを含む)、容量が最小200mAの+5V電源、およびシリアルポートを使用可能なPCが必要です。

ハードウェアの設定

  1. MAX6951のEVキットのジャンパ設定
      EVキット上のレベル変換器チップから、信号の/CS\、DIN、およびSCLKを切り離すためには、JU2、JU3、およびJU3のピン1と2を接続するトレースを切断してください。
  2. MAXQ2000のEVキットのジャンパとDIPスイッチの設定
      SW3の1-8をOFFの位置に設定してください。
      JU1:ピン1と2を接続
      JU2:ピン1と2を接続
      JU3:ピン1と2を接続
      JU4:オープン
      JU10:オープン
      JU11:オン(MAXQ2000のEVキットはJTAGインタフェースボードから給電され、そのJTAGボードは+5V電源から給電されます。)
  3. 2種のEVキットを図1に示すように接続してください。

図1. MAX6951のEVキットとMAXQ2000のEVキットの接続図
図1. MAX6951のEVキットとMAXQ2000のEVキットの接続図

ファームウェアの説明

この例題プロジェクト用の完全なファームウェアファイルはマキシムのウェブサイトからダウンロードすることができ、MAXQマイクロコントローラファミリ用のマキシムの統合開発およびデバッグ環境のMAX-IDEを使用してコンパイルすることができます。

ダウンロード:完全ファームウェア(ZIP、18.8k)

main.asmファイル
このファイルはこの例題プロジェクト用のメインデモループです。これはMAX6951のレジスタに書き込む正しいデータをデモするために別のルーチンをコールします。ファームウェアは次のMAX6951の機能を順番にデモします:

  1. MAX6951 SPIインタフェースの初期化
  2. 16進デコードモードで、MAX6951上のすべての桁のP0とP1プレーンの両方に0、1、2、…、A、B、C、D、E、Fおよび8個の小数点(すなわち、すべてのLEDセグメントの点灯)の書込みと表示
  3. 非デコードモードとして、ユーザーが組み込んだフォントを使用して、上述の文字とその他のH、L、P、Q、Yなどの認識可能なその他の文字の書込みと表示
  4. LEDの調光ループ。このループはディジタル輝度制御をテストするために、MAX6951の輝度レジスタへの書込み方法を示します。
  5. スキャンリミットループ。このループは同じ輝度設定として、1~8個までの桁を表示します。
    :スキャンリミットが増加したら、輝度が下がることを確認するために、このプロセスをモニタしてください。
  6. ループのブリンキング。このループは各桁のP0とP1プレーンに対して異なった桁数字を書き込みます。また、このループは高速ブリンキングモードを使用して、複数のLEDドライバ間で同期することができるセグメントブリンキング制御をデモします。
  7. ループのスクロール。このループはテキストメッセージのHELLOを左から右へ、および右から左へスクロールします。
  8. ループのバウンス。このループはHELLOを2つのLEDエッジ間でバウンスします。
  9. カウントループ。この最後のループは、16進デコードモードおよび非デコードモードで、経過したミリ秒をカウントする表示の設計方法を示します。

max2000ev_6951.asmファイル
このファイルはMAXQ2000 マイクロコントローラを使用するMAX6951のEVキットと通信するためのすべてのユーティリティファンクションを備えています。その主な機能は次の通りです:

  1. max6951_init:この機能はMAX6951と会話するために、MAXQ2000を正しいSPIモードに設定します。この機能はSPIをイネーブルとし、MAX6951を初期化して表示パネルに8個の0を表示します。リスト1はこの機能の詳細を示しています。

    リスト1. MAX6951の初期化コードの例

    ;*******************************************************************************
    ;* Function: max6951_init
    ;*
    ;* Sets the correct SPI modes for talking to the MAX6951, enables SPI, and
    ;* 
    ;* initializes the MAX6951 to display 8 0s.
    ;*
    ;* Input: None.
    ;*
    ;* Output: None.
    ;*
    ;* Destroys: ACC, A[0] -- A[10], PSF
    ;*
    ;*******************************************************************************
    MAX6951_INIT:
    ; SET SPI BAUD RATE 
    MOVE A[0], #2400H; SYSTEM CLOCK IS 16,000,000 HZ
    MOVE A[1], #00F4H
    MOVE A[2], #4240H; DESIRED BAUD RATE IS 1,000,000 HZ 
    MOVE A[3], #000FH
    CALL SPI_SETBAUDRATE
    ; SET THE APPROPRIATE MODES FOR THE 6951
    MOVE C, #SPI_IDLE_LOW; IDLE = LOW
    CALL SPI_SETCLOCKPOLARITY
    MOVE C, #SPI_ACTIVE_EDGE; ACTIVE = RISING EDGE
    CALL SPI_SETCLOCKPHASE
    MOVE C, #SPI_LENGTH_16; ALWAYS TRANSFER 16 BITS
    CALL SPI_SETCHARACTERLENGTH
    MOVE C, #SPI_MASTER_MODE; MAXQ2000 IS THE MASTER, MAX6951 IS THE SLAVE
    CALL SPI_SETMODE
    ; ENABLE SPI
    MOVE C, #1
    CALL SPI_ENABLE
    ; SHUTDOWN MAX6951 DISPLAY FIRST
    CALL MAX6951_SHUTDOWN
    ; SET MAX6951 IN HEXADECIMAL DECODE MODE
    MOVE ACC, #MAX6951REG_DECODE
    SLA4
    SLA4
    OR #0FFH; HEXADECIMAL DECODE
    CALL MAX6951_TRANSMIT
    ; SET DISPLAY INTENSITY = 16/16
    MOVE ACC, #MAX6951REG_INTENSITY
    SLA4
    SLA4
    OR #0FH; INTENSITY = 16/16
    CALL MAX6951_TRANSMIT
    ; SCAN LIMIT = 7
    MOVE ACC, #MAX6951REG_SCANLIMIT
    SLA4
    SLA4
    OR #07H; SCAN LIMIT = 7 
    CALL MAX6951_TRANSMIT
    RET
    
  2. max6951_transmit:この機能はMAX6951にレジスタアドレスとデータバイト(16ビット)を送ります。
  3. max6951_set_all_n:この機能は桁レジスタのP0とP1の両プレーンを数’n’に設定します。すべての機能は16進デコードと非デコードバージョンの両方を持ちます。
  4. max6951_e_d_s_d:この機能はMAX6951の表示をイネーブルとし、その後で0.5秒の遅延で表示をシャットダウンし、その後、100ms遅延します。
  5. max6951_screenshot:これらの機能は8桁のLEDパネルの8個の異なった位置にHELLOを表示します。
  6. max6951_scroll_R_to_L:異なったシーケンスでスクリーンショットを表示することによって、この機能はHELLOを非デコードモードで右から左にスクロールします。
  7. max6951_scroll_L_to_R:異なったシーケンスでスクリーンショットを表示することによって、この機能はHELLOを非デコードモードで左から右にスクロールします。
  8. max6951_bouncing:この機能はHELLOを2つのLEDエッジ間でバウンスさせます。
  9. font_lookup:桁値を16進形式で与えて、このルーチンは、標準の7セグメントLEDに非デコードモードで同じフォントを表示する値を探索します。
  10. max6951_counting:この機能は、経過時間をミリ秒で計数して表示します。分解能は10ミリ秒です。リスト2はコードの詳細を示しています。

    リスト2. MAX6951の計数用コードの例

    ;*******************************************************************************
    ;* Function: max6951_counting
    ;*
    ;* This routine counts how many 10-milliseconds have elapsed and displays 
    ;*
    ;* the value from 0000 to 9999 on LED digits 3-0(no way to blank leading digits).
    ;*
    ; The routine displays the same value on LED digits 7-4(by using no decode
    ;* 
    ;* mode, individual leading digits can be blanked).
    ;*
    ;* Input: None
    ;* 
    ;* Output: None
    ;*
    ;* Destroys: ACC, A[1] - A[4], A[9] 
    ;*
    ;*******************************************************************************
    MAX6951_COUNTING:
    CALL MAX6951_SHUTDOWN
    CALLMAX6951_SET_ALL_0; SET ALL BITS OF DATA REGISTERS TO 0
    MOVE ACC, #010FH; HEXDECIMAL DECODE DIGITS 3-0, NO DEOCDE DIGITS 7-4
    CALLMAX6951_TRANSMIT
    ; INITIALIZE THE COUNT TO 0
    MOVEA[1], #0; A[1] => DIGIT 0
    MOVEA[2], #0; A[2] => DIGIT 1
    MOVEA[3], #0; A[3] => DIGIT 2
    MOVEA[4], #0; A[4] => DIGIT 3
    COUNT_LOOP:
    INCREASE_DIGIT3:
    MOVEACC, A[4]; PROCESS DIGIT 3 
    SUB#9
    JUMPZ, INCREASE_DIGIT2; DIGIT 3 = 9, THERE IS CARRY OVER
    MOVEACC, A[4]; DIGIT 3 < 9, CONTINUE
    ADD#1
    MOVEA[4], ACC
    CALLFONT_LOOKUP; LOOK UP THE VALUE FOR THIS FONT
    ; STORE IT IN A[9], KEEP ACC UNCHANGED 
    OR#6300H
    CALLMAX6951_TRANSMIT ; NO CARRY OVER, WRITE DIGIT 3 NEW VALUE
    MOVEACC, A[9]; WRITE THE NO DECODE VALUE TO DIGIT 7 
    OR #6700H
    CALLMAX6951_TRANSMIT
    JUMPDISPLAY_NUMBER
    INCREASE_DIGIT2:
    OR#6300H
    CALLMAX6951_TRANSMIT; WRITE 0 TO DIGIT 3 REGISTER FIRST
    MOVEA[4], #0; SET DIGIT 3 BACK TO 0
    MOVEACC, #677EH; NO DECODE VALUE FOR FONT '0' IS "7EH"
    CALL MAX6951_TRANSMIT ; WRITE 7EH TO DIGIT 7 REGISTER
    MOVEACC, A[3]; PROCESS DIGIT 2
    SUB#9
    JUMPZ, INCREASE_DIGIT1; DIGIT 2 = 9, THERE IS CARRY OVER
    MOVEACC, A[3]; DIGIT 2 < 9, CONTINUE
    ADD#1
    MOVEA[3], ACC
    CALLFONT_LOOKUP; LOOK UP THE VALUE FOR THIS FONT
    ; STORE IT IN A[9], KEEP ACC UNCHANGED 
    OR#6200H
    CALLMAX6951_TRANSMIT; NO CARRY OVER, WRITE DIGIT 2 NEW VALUE
    MOVEACC, A[9]; WRITE THE NO DECODE VALUE TO DIGIT 6 
    OR #6600H
    CALLMAX6951_TRANSMIT
    JUMPDISPLAY_NUMBER
    INCREASE_DIGIT1:
    OR#6200H
    CALLMAX6951_TRANSMIT; WRITE 0 TO DIGIT 2 REGISTER FIRST
    MOVEA[3], #0; SET DIGIT 2 BACK TO 0
    MOVEACC, #667EH; NO DECODE VALUE FOR FONT '0' IS "7EH"
    CALL MAX6951_TRANSMIT ; WRITE 7EH TO DIGIT 6 REGISTER 
    MOVEACC, A[2]; PROCESS DIGIT 1
    SUB#9
    JUMPZ, INCREASE_DIGIT0; DIGIT 1 = 9, THERE IS CARRY OVER
    MOVEACC, A[2]; DIGIT 1 < 9, CONTINUE
    ADD#1
    MOVEA[2], ACC
    CALLFONT_LOOKUP; LOOK UP THE VALUE FOR THIS FONT
    ; STORE IT IN A[9], KEEP ACC UNCHANGED 
    OR#6100H
    CALLMAX6951_TRANSMIT; NO CARRY OVER, WRITE DIGIT 1 NEW VALUE
    MOVEACC, A[9]; WRITE THE NO DECODE VALUE TO DIGIT 5 
    OR #6500H
    CALLMAX6951_TRANSMIT
    JUMPDISPLAY_NUMBER
    INCREASE_DIGIT0:
    OR#6100H
    CALLMAX6951_TRANSMIT; WRITE 0 TO DIGIT 1 REGISTER FIRST
    MOVEA[2], #0; SET DIGIT 1 BACK TO 0
    MOVEACC, #657EH; NO DECODE VALUE FOR FONT '0' IS "7EH"
    CALL MAX6951_TRANSMIT ; WIRTE 7EH TO DIGIT 5 REGISTER
    MOVEACC, A[1]; PROCESS DIGIT 0
    SUB#9
    JUMPZ, COUNT_COMPLETE; DIGIT 0 = 9, COUNTING IS OVER
    MOVEACC, A[1]; DIGIT 0 < 9, CONTINUE
    ADD#1
    MOVEA[1], ACC
    CALLFONT_LOOKUP; LOOK UP THE VALUE FOR THIS FONT
    ; STORE IT IN A[9], KEEP ACC UNCHANGED 
    OR#6000H
    CALLMAX6951_TRANSMIT; NO CARRY OVER, WRITE DIGIT 0 NEW VALUE
    MOVEACC, A[9]; WRITE THE NO DECODE VALUE TO DIGIT 4 
    OR #6400H
    CALLMAX6951_TRANSMIT
    DISPLAY_NUMBER:; DISPLAY DIGIT 3-0 IN HEXADECIMAL DECODE MODE
    ; DIEPLAY DIGIT 7-4 IN NO DECODE MODE
    CALLMAX6951_ENABLE
    CALLMAX6951_10MS_DELAY
    JUMP COUNT_LOOP
    COUNT_COMPLETE:
    RET
    
maxq2000_spi.asmファイル:このファイルはMAXQ2000のSPIモジュールを構成して使用するためのユーティリティファンクションです。このファイルはMAX-IDEに組み込まれており、ユーザーは変更しないでそのまま使用することができます。

divide32.asmファイル:これはMAX-IDE ソフトウェアに用意されている32-/32-ビット除算ルーチンです。

maxq2000.inc、maxq2000_spi.inc、およびmax2000ev_6951.incファイル:これらはMAXQ2000のpin定義およびMAX6951のレジスタ定義に対するインクルードファイルです。

結論

MAX6951/MAX6950 SPI LEDドライバは使いやすいコモンカソードディスプレイドライバであり、SPIシリアルインタフェースによってマイクロコントローラとインタフェースします。マイクロコントローラのMAXQファミリは便利なSPIモジュールを組み込んでおり、SPIインタフェースによってLEDドライバと通信します。ここに提示したサンプルコードはユーザーがMAX6951のLED機能の使用方法を理解する助けとなります。サンプルコードは同様なMAXQ2000をベースとしたアプリケーション開発においても利用することができます。


関連製品  APP 3729: Apr 28, 2006
MAX6950 シリアルインタフェース、+2.7V~+5.5V、5および8桁、LEDディスプレイドライバ フルデータシート
(PDF, 220kB)
無料
サンプル
MAX6951 シリアルインタフェース、+2.7V~+5.5V、5および8桁、LEDディスプレイドライバ フルデータシート
(PDF, 220kB)
無料
サンプル
MAXQ2000 低電力LCDマイクロコントローラ フルデータシート
(PDF, 720kB)
無料
サンプル

自動アップデート
お客様が関心のある分野でアプリケーションノートが新規に掲載された際に自動通知Eメールの受信を希望する場合は、EE-Mail™にご登録ください。


We Want Your Feedback!



フィードバックをお寄せください。
内容に満足されましたか、あるいは満足されていませんか?もっと良いページにできると思いますか?あるいは、単なるコメントでも結構です。フィードバックをお待ちしています。—マキシムはお客様からいただく訂正、提案を元に改善していきます。 このページを評価し、フィードバックを送信する。

 

ダウンロード、PDFフォーマットダウンロード、PDFフォーマット(122kB)
 AN3729, AN 3729, APP3729, Appnote3729, Appnote 3729

        •         •         •     プライバシーポリシー     •     法的お知らせ

    Copyright © 2009 by Maxim Integrated Products