相關(guān)商品
【創(chuàng)客學(xué)堂】基于Arduino與SPI總線接口的LED顯示器
編輯:Techie2013-08-30 13531382@qq.com 瀏覽次數(shù):4463
Arduino連接了并行設(shè)備后,還剩下什么?
有沒有發(fā)現(xiàn)你的Arduino控制器的端口總是不夠用?一些并行數(shù)據(jù)傳輸?shù)脑O(shè)備總是會占用很多的端口,一大團亂糟糟的連接線,會讓你大傷腦筋。如果你想用普通的4位LED數(shù)碼管顯示一個時鐘,那么你需要用到8+4=12個端口!這對于Arduino UNO R3這樣的,只余12個數(shù)字端口的小板子來說,還剩下什么?
我們當(dāng)然不會那么做,因為那樣做你就像被綁在大樹上一般。有更聰明的方法,那就是讓數(shù)據(jù)串行,比較突出的代表是SPI總線串行通信方式,遵守SPI總線協(xié)議。
SPI是Motorola公司推出的一種同步串行通訊方式,是一種四線同步總線,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線(SDO、SDI、SCLK、CS),如果你只有一個SPI設(shè)備時,那你可以只用兩根線(SDO、SCLK),節(jié)約了芯片的管腳,同時為PCB的布局上節(jié)省空間,提供方便,正是出于這種簡單易用的特性,如今越來越多的芯片集成了這種通信協(xié)議因其硬件功能很強,與SPI總線有關(guān)的軟件就相當(dāng)簡單,使CPU有更多的時間處理其他事務(wù)。
Arduino連接了SPI接口后,還會剩下很多
下面就向大家介紹兩款國外SPI總線接口的Arduino LED顯示器,體會一下SPI的好處。(注:測試環(huán)境為:win7下Arduino IDE 1.0.5+奧松機器人Arduino UNO R3+奧松機器人Arduino sensor Shield V5.0)
圖1 Arduino UNO R3 與Arduino sensor Shield V5.0
第一款,4位LED數(shù)碼管模塊,呵呵,別擔(dān)心 ,此管非彼管,不是普通的了,是具有SPI接口的4位LED數(shù)碼管模塊,因為現(xiàn)在只用了一個模塊,所以,它的連接線可以最簡化到除了電源線、地線以外,就只有SDO、SCLK這兩條線!是不是so easy?但它可是簡約而不簡單哦。
圖2 SPI接口4位LED數(shù)碼管正面圖 圖3 SPI接口4位LED數(shù)碼管背面圖
它采用了一塊TM1637專用LED控制芯片,屬于開源硬件,在網(wǎng)上可以找到它的Arduino庫。模塊采用SPI 串行接口,能夠控制6位的8段LED數(shù)碼管,可以在Arduino程序中設(shè)定8級可調(diào)的輝度,方便應(yīng)用于不同明暗程度的場合;與Arduino控制器的連接也很方便,畢竟才兩根線嘛,而且還可以在Arduino程序中更改端口號,真是太人性化了!
我選擇,我喜歡
好吧,那先來看看怎么選擇它的輝度的:
圖4 Arduino 程序文件中可更改輝度相關(guān)數(shù)據(jù)
在Arduino程序文件中,找到tm1637.set(BRIGHT_TYPICAL);其中值就是輝度值,可以設(shè)定為0-7的任意整數(shù),0表示最暗。
下面兩圖為輝度為0與7時的對比。
圖5 SPI接口Digit Display模塊的輝度0與輝度7的對比圖
再來看看如修改端口?
圖6 Arduino 程序文件中可自定義相關(guān)SPI端口號
第二款,10位LED Bar,它采用了一塊YM9221專用LED控制芯片,也屬于開源硬件,在網(wǎng)上可以找到它的Arduino庫。模塊亦采用SPI 串行接口,這款顯示器與上面介紹的相比,缺點在于:1.輝度不可自由調(diào)節(jié),是通過三個精密電阻給定的;2.SPI端口的修改也不夠方便,要到Arduino庫LED_Bar.h中修改最多6條語句才行。優(yōu)點在于:1.其將可控的12段LED分成三部分,也就是說,可以分段給定輝度值;2.它是具有SPI全功能的模塊,板上已給出SPI輸入輸出的口線位置,想級聯(lián),那是相當(dāng)容易。
圖7 SPI接口LED Bar模塊正面圖 圖8 SPI接口LED Bar 模塊反面圖
下面說明一下如何更改LED Bar 的SPI端口,這里要跟你的Arduino板子對應(yīng),參考Arduino原理圖與AVR芯片相關(guān)的引腳名稱。
圖9 Arduino 程序文件中更改SPI總線端口相關(guān)數(shù)據(jù)
悄悄地說一句:與這兩款相似功能的產(chǎn)品即將由奧松機器人推出,敬請關(guān)注奧松機器人的官網(wǎng) :)
SPI在國內(nèi)
說了這么多新的SPI總線芯片模塊,再來比較一下采用國內(nèi)較為通用的74HC595芯片的SPI總線接口LED模塊吧,就拿現(xiàn)在奧松機器人推出的一款SPI LED Module V1.0來說,它用了8片SPI芯片,一位LED一個,成本是大了點。但優(yōu)點是電流足夠強大,實際上它用的LED也是個頭不小,挺配套,呵呵;芯片自帶緩沖,可靜態(tài)顯示 ,無抖動感;3.3V,5V電壓通吃;應(yīng)用起來也挺方便,不用去海搜Arduino庫了,清一色的自定義即可,接口也是適配于Arduino 傳感器擴展板的。
圖10 SPI LED Module V1.0
順便給出一個它的顯示程序,功能是靜態(tài)顯示01234567,供大家參考。
//Pin connected to ST_CP of 74HC595
int latchPin = 4;
//Pin connected to SH_CP of 74HC595
int clockPin = 3;
////Pin connected to DS of 74HC595
int dataPin = 2;
int tab[]=
{
0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f
};
void setup() {
//set pins to output because they are addressed in the main loop
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
for(int i = 0; i < 8; i++)// shut off all the segments before being displayed
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST,0xff);
digitalWrite(latchPin, HIGH);
delay(10);
}
}
void loop()
{
for(int i = 0; i < 8; i++)// display 0-7
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST,tab[7-i]);
digitalWrite(latchPin, HIGH);
delay(1000);
}
while(1)//stop refresh the registers,then the numbers display steady
{
digitalWrite(latchPin, HIGH);
}
}
圖11 SPI LED Module V1.0顯示0-7
下面是相關(guān)鏈接
8位靜態(tài)數(shù)碼管級聯(lián)的視頻演示 http://v.youku.com/v_show/id_XNDU1MTMyOTA0.html
8位靜態(tài)數(shù)碼管 擴展顯示模塊 http://lifestyle201.com/goods-97.html
Arduino UNO R3 http://lifestyle201.com/goods-141.html
Arduino 傳感器擴展板v5.0 http://lifestyle201.com/goods-147.html
什么是SPI http://baike.baidu.com/view/245026.htm
用戶評價
暫時還沒有任何用戶評論