MAX6960大LED顯示屏編程指南
器件概要
LED驅動芯片MAX6960無需使用外圍電路,通過其8行、16列端口可直接驅動兩組單色8 × 8點陣顯示模塊。每個集電極開路的行端口可以從16個列端口吸取最大40mA的固定電流。8個行端口在時間上可以復用;某一時刻,只有一個行端口吸取電流。因此,從每個列端口吸取的平均電流為5mA。
MAX6960也可以驅動一組雙色(紅、綠) 8 × 8點陣顯示模塊。點陣的每個節(jié)點都可以獨立控制開、關,或支持4級的亮度調節(jié)(包括關閉)。所有顯示模塊的亮度由PWM信號控制,共有256個亮度級。能夠將最多256個MAX6960級聯在一起,組成一個大規(guī)模顯示控制系統(tǒng);而主控制器可通過4線串口(DIN、DOUT、CLK和/CS)對所有顯存進行尋址訪問。所有級聯芯片通過3線串口(ADDCLK、ADDIN和ADDOUT)連接,無需主控制器介入即可完成芯片間級聯的自行配置。
該系列的其它LED驅動芯片和MAX6960功能相似。MAX6961只能對點陣中節(jié)點進行開、關操作;MAX6962只能驅動單色顯示模塊;MAX6963可對點陣節(jié)點進行開、關操作,只能驅動單色顯示模塊。
應用示例
圖1所示電路采用兩片MAX6960驅動4個單色顯示模塊,LDM-24288NI是由Lumex?公司生產的8 × 8點陣、綠色LED顯示模塊。4個顯示模塊(D1、D2、D3和D4)由左到右排列,組成一個8行32列的顯示屏。因為U1和U2的RISET0和RISET1均連接到GND,所以,所有列的電流都設置成固定40mA。
U1和U2的4線接口采用并行連接而不是由DIN和DOUT進行串行級聯。每個芯片指令都只能選中一個芯片,這是因為上電后通過3線接口配置每個芯片的專有地址。當兩個或多個MAX6960級聯到一起時,全局命令可同時控制所有MAX6960。所有芯片的4線接口都以并聯方式連接。
每個MAX6960都有一個3線接口,所有MAX6960通過這個3線接口級聯。通常,會有一個MAX6960被選為主芯片。這個主芯片的地址為0,并為其余MAX6960提供時鐘信號。所有MAX6960的ADDCLK引腳連接在一起。只有主芯片的ADDIN引腳連接到V+,其余MAX6960的ADDIN引腳連接到前一芯片的ADDOUT引腳,而芯片地址較前一級聯芯片加1。最后一個芯片的ADDOUT引腳懸空。
圖1. 多個MAX6960驅動4個單色顯示屏
上電時,所有MAX6960的0x00驅動器地址寄存器被初始化為全0,ADDOUT引腳被置成邏輯低。因為在沒有時鐘信號輸入時,主芯片的ADDIN引腳為邏輯高電平,所以MAX6960主芯片需要自檢測其狀態(tài)。上電后,主芯片生成時鐘信號,并將其ADDOUT引腳置為邏輯高。主芯片其后級聯的每一片MAX6960在其ADDIN引腳變成邏輯高之前,會通過計數時鐘周期數設置芯片地址,然后將ADDOUT引腳設置成邏輯高。因此,所有MAX6960驅動地址寄存器將在256個ADDCLK時鐘周期內完成初始化。
顯存地址的配置
每個MAX6960內有64字節(jié)顯存,顯存可以劃分為2層或4層。某一時刻,只選中一層驅動芯片端口。這種多層結構使用戶可以在某一層驅動LED時更新其它層;也可在多層之間切換,實現動畫功能。
當應用配置為4層時,每層包含16字節(jié);如果每一像素占用1位,那么16列、8行像素將占用128位。應用配置為2層時,每層包含32字節(jié);如果每像素占用2位,那么16列、8行像素將占用256位。一個單色顯示模塊有8行、8列;一個雙色顯示模塊有8行、16列,因此,一層可支持2個單色顯示模塊或一個雙色顯示模塊。
顯存一次僅支持8位訪問。對1位/像素的應用,顯存執(zhí)行寫操作的第一個8位數據是寫第一列,第二個8位的數據是寫第二列,以此類推。因此,一個8 × 8像素的1位/像素的顯示模塊,需要寫入8字節(jié)。這就是說,第一個顯示模塊的第一列地址是0,第一個顯示模塊的第二列地址是1,第二個顯示模塊的第一列地址是8,以此類推。當使用多個MAX6960芯片時,所有的顯存組合在一起,而顯存地址由下式確定:
顯存地址 = (驅動器數 - 1) × 16 + (顯示模塊數 - 1) × 8 + (列數 - 1)
對于2位/像素應用,一個8位顯存訪問只能更新半個列的顯存。如上所述,驅動芯片數在上電后由3線接口自動完成配置并存儲在0x00寄存器。其中,有14位用來區(qū)分組合顯存的哪一個字節(jié)。對于1位/像素的應用,開始的2位用來標識哪一層,其余12位用來定位256個MAX6960的2048個列中的哪一列。對于2位/像素應用,開始的1位用來標識哪一層,其余13位用來定位256個MAX6960的4096個半列中的哪一列。
MAX6960的4線接口只能識別8位、16位或24位傳輸命令,完成寄存器尋址訪問。因此,在片選信號/CS有效期間,如果傳輸數據不是8位、16位或24位格式,數據都將被忽略。
間接訪問寄存器的方法
使用8位傳輸命令間接訪問顯存時無需顯存地址。在每片MAX6960中,都有兩個全局顯示屏間接地址寄存器(0x09和0x0A)。每個這樣的寄存器都能跟蹤同一個全局間接顯存地址。上電時,這些寄存器地址的初始值都為0。在每個8位間接顯存訪問完成后,所有MAX6960寄存器值都加1。使用間接訪問顯存時,每片MAX6960會將這兩個間接地址寄存器的值與自己芯片的地址進行比較,以確定顯存是否需要更新。
用戶也可以用24位傳輸命令直接訪問組合顯存中的某一個字節(jié)。24位中,第一個位表示寫操作(0)還是讀操作(1);第二位無意義,可忽略;接下來的14位用來確定是顯存中的哪個字節(jié);而最后8位是數據字節(jié)。
16位傳輸命令用來訪問MAX6960的16個寄存器。16位中,第一位表示寫操作(0)還是讀操作(1);第二位用來確定是否激活地址自動增加功能;第三位標識寄存器訪問是本地訪問(0)還是全局訪問(1);第四位始終為0;隨后四位確定要訪問的是哪個寄存器;最后八位是數據字節(jié)。對本地寄存器訪問,驅動芯片的地址被存儲在全局驅動間接地址寄存器0x08。所有MAX6960的0x08寄存器在上電后默認為0,其值可通過16位傳輸命令更改。如果設置了第二位,這些0x08寄存器的值可在每個16位傳輸命令后同時自動增加。
如果上電時默認值不能滿足顯示屏尺寸、顏色和亮度的要求,所有的MAX6960都需進行初始化。對256個MAX6960,寄存器上電默認狀態(tài)是單色、1位/像素、全屏顯示、50%的面板亮度。
使用間接訪問時,一次只能從左列像素至右列像素訪問一個顯示模塊(8 × 8)的顯存。然后,從左至右,逐個訪問顯示模塊(8 × 8),直到訪問完該行最后一個MAX6960驅動的顯示模塊為止。依照同樣方式,間接訪問會從上至下、按照行掃描的順序訪問所有MAX6960驅動芯片。間接方法會先訪問整個顯示屏的紅色顯存部分,然后再訪問綠色顯存部分。地址為0x0E的全局驅動器件寄存器需要首先進行初始化,這樣顯示屏間接地址計數器才能夠自復位至正確值。以上過程如圖2和圖3所示,其中,DAN代表顯示模塊的訪問順序數。每個顯示模塊需更新8字節(jié)的顯存(8 × 8顯示點陣對應1位/像素或4 × 8的顯示點陣對應2位/像素)。需初始化的全局驅動器件寄存器的總數為系統(tǒng)中MAX6960的總數減去1。
圖2. 單色、1位/像素、顯存訪問序列
圖3. 雙色、1位/像素、顯存訪問序列
同樣,如果像素的分辨率是2位,那也需要初始化地址為0x0F的全局驅動行寄存器。這個初始化過程能夠確保MAX6960的某一行能夠在訪問下一行之前被訪問,如圖4和圖5所示。需要初始化的全局驅動行寄存器的總數為系統(tǒng)中MAX6960的總數減去1。
圖4. 單色、2位/像素、顯存訪問序列
圖5. 雙色、2位/像素、顯存訪問序列
亮度控制寄存器
MAX6960有16個寄存器,可通過寫這些寄存器完成各種操作。這些寄存器包括像素亮度比例(0x01)、面板亮度(0x02)、顯示模塊0的亮度(0x03)、顯示模塊1的亮度(0x04)、故障寄存器(0x05)和全局面板配置寄存器(0x0D)。每個亮度控制寄存器包含8位。
初始化全局驅動器件
以下列出了一些16位傳輸命令,用來初始化圖1所示應用電路的全局驅動器件寄存器和全局驅動行寄存器。
0x0E, 0x01, // Write to global driver devices register with two total devices.0x0F, 0x01, // Write to global driver rows register with two MAX6960s in a row.
以下列出的8位和16位傳輸命令,用來點亮顯示屏的邊沿。顯示屏由4個8 × 8顯示模塊構成一個8 × 32顯示點陣,電路配置如圖1所示。
0xFF, // Light up the left edge.0x81, // Light up top and bottom pixels of the second column.0x81, // Light up top and bottom pixels of the third column....0x81, // Light up top and bottom pixels of the fourteenth column.0x81, // Light up top and bottom pixels of the fifteenth column.0xFF, // Light up the right edge.0x0D, 0x31, // Turn on the shutdown bit.
評論