據(jù)悉:順德勒流鎮(zhèn)鎮(zhèn)府企業(yè)部門(mén)已取得了“中國(guó)商業(yè)LED生產(chǎn)基地”的稱(chēng)號(hào),LED照明產(chǎn)業(yè)的趨勢(shì)發(fā)展已到了個(gè)高速路口;本月中山“LED燈博會(huì)”我也有幸參加,通過(guò)大約4個(gè)小時(shí)的精心調(diào)查,LED產(chǎn)品在燈飾照明上有了很大的突破性,也就是說(shuō)在照明應(yīng)用上有了很大的改善,實(shí)際照明效果和節(jié)能效果及光效壽命等參數(shù)都有很大的突破。另外再配合創(chuàng)意性的燈具產(chǎn)品,突顯了LED所具有的獨(dú)特性和取代白熾燈甚至取代熒光節(jié)能燈的可能性。通過(guò)參展,我也認(rèn)識(shí)到LED產(chǎn)業(yè)已悄悄地由小作坊轉(zhuǎn)向大規(guī)模,在資本上已由小打小鬧轉(zhuǎn)向資本營(yíng)運(yùn)化;洗牌的力度開(kāi)始加大! 因此,本人為了不甘落伍,針對(duì)LED的靈活性在驅(qū)動(dòng)的基礎(chǔ)上加快智能LED控制板的學(xué)習(xí)和研究。國(guó)外同行,針對(duì)智能調(diào)光產(chǎn)品已非常成熟了,但在國(guó)內(nèi)才剛剛起步;國(guó)外在集中照明控制領(lǐng)域中已發(fā)展成熟上位機(jī)控制下位的技術(shù),在節(jié)能低碳方面,信息傳感網(wǎng)絡(luò)方面已融合得非常完美。本人在綠博士照明有限公司業(yè)余期間,大量的實(shí)踐調(diào)光控制程序,總算取得了一點(diǎn)點(diǎn)小成績(jī),現(xiàn)在編寫(xiě)出來(lái)和有興趣的朋友們一起探討! 本次所有的程序研究都是基于本人開(kāi)發(fā)的“WICN-01”單片機(jī)開(kāi)發(fā)板所試的,所使用的單片機(jī)也是市場(chǎng)上性?xún)r(jià)比最有競(jìng)爭(zhēng)力的STC系列單片機(jī)。 紅外線(xiàn)解碼方案的研究(芯片STC-89C52RC單片機(jī)): 為了提高研究的速度,本人首先采用日本upd6122芯片標(biāo)準(zhǔn)PPM碼進(jìn)行解碼,該碼在日本及中國(guó)等家電產(chǎn)品中應(yīng)用非常多,PPM碼的解碼方案就是用一把“時(shí)間尺寸”來(lái)測(cè)量接收到的紅外碼,通過(guò)這個(gè)時(shí)間標(biāo)尺的判斷就可以得到二進(jìn)制的數(shù)據(jù),如此循環(huán)解碼出32位數(shù)據(jù)碼值,然后根據(jù)解得的碼值進(jìn)行數(shù)據(jù)判斷,最后轉(zhuǎn)向所要執(zhí)行的各個(gè)功能子程序以達(dá)到調(diào)光、定時(shí)、通信等目的。 解碼的成功第一點(diǎn)是解碼的“時(shí)間標(biāo)尺”應(yīng)該很精確,由于單片機(jī)型號(hào)的不同,所執(zhí)行命令的周期性不同,因此,你算的時(shí)間精度和實(shí)際用示波器測(cè)量出來(lái)的精度是很大差別的,因此,要想成功解碼手上必須要有一臺(tái)數(shù)字示波器,一方面可以用來(lái)測(cè)量波形,另一方面數(shù)字示波器可以存儲(chǔ)波形用來(lái)慢慢分析波形是否正確,以及口頭讀碼的功能。upd6122芯片標(biāo)準(zhǔn)PPM碼的時(shí)間標(biāo)尺一般是882us,在用這個(gè)標(biāo)尺之前當(dāng)然就是要像電視機(jī)中的“行場(chǎng)同步信號(hào)”那樣使用引導(dǎo)碼進(jìn)行對(duì)齊,也就是發(fā)射和接收要找到一個(gè)同步點(diǎn),這樣才能解出正確的數(shù)據(jù)。在解碼數(shù)據(jù)時(shí),要重點(diǎn)的掌握匯編語(yǔ)言特別是C語(yǔ)言,如果沒(méi)有C語(yǔ)言干脆就不要搞程序!另外,要重點(diǎn)掌握各種算法對(duì)于各個(gè)寄存器狀態(tài)的影響,通過(guò)計(jì)算和查閱各個(gè)數(shù)據(jù)才能正確解碼,因此編程序的算法顯得相當(dāng)重要。本人在實(shí)際解碼時(shí)也算是嘗盡了各種方法,用匯編語(yǔ)言解碼時(shí),解碼很成功;但在用C語(yǔ)言解碼時(shí)卻遲遲顯示沒(méi)有反映,反復(fù)檢查各種算法,問(wèn)題還是出在算法不合理造成沒(méi)有解到碼,外部中斷和定時(shí)中斷應(yīng)用得不熟練。最終研究出5個(gè)調(diào)光檔位,2個(gè)慢調(diào)光檔位(當(dāng)然,如果你要更多的檔位方法也是一樣的),5個(gè)檔位在調(diào)光時(shí)顯得調(diào)光很生硬,突然達(dá)到某個(gè)亮度;因此我加上兩個(gè)慢調(diào)光檔位,當(dāng)你想調(diào)亮?xí)r,單片機(jī)自動(dòng)地按一個(gè)時(shí)間線(xiàn)性慢調(diào)亮,這樣使人的眼睛能很好的去適應(yīng)這個(gè)增亮或減暗的光線(xiàn)。當(dāng)在高興時(shí)問(wèn)題又來(lái)了,就是在每更換一個(gè)檔位時(shí),其由于我設(shè)置了外部中斷優(yōu)先于定時(shí)中斷,而我的調(diào)光PWM波形是由定時(shí)中斷得來(lái)的,這樣就使我在連續(xù)按遙控器時(shí),外部中斷就在不停的產(chǎn)生,如此打亂了定時(shí)中斷的波形產(chǎn)生,因此,在連續(xù)按遙控器時(shí)燈管會(huì)出現(xiàn)閃動(dòng)的現(xiàn)象。由于我使用的解碼MCU是STC-89C52RC,其不帶有PCA模塊,因此不得不想辦法自己來(lái)做紅外發(fā)射程序。 紅外發(fā)射程序心得(芯片STC-12C5A60S2單片機(jī)): 紅外發(fā)射首先要解決的就是發(fā)射信號(hào)不含有“連發(fā)碼”,發(fā)射的波形中只包含32位數(shù)據(jù)碼,這就是要求;發(fā)射信號(hào)當(dāng)然和解碼過(guò)程序是反向的,因此在發(fā)射程序上要解決怎樣將32個(gè)數(shù)據(jù)一個(gè)一個(gè)地發(fā)出去,并讓另外一個(gè)單片機(jī)接收下來(lái)。通過(guò)查閱大量的資料,我只需在高電平時(shí)發(fā)射數(shù)據(jù),低電平不發(fā)射,然后將32個(gè)數(shù)據(jù)通過(guò)移位的方法,一個(gè)一個(gè)的移到一個(gè)寄存器中,對(duì)這個(gè)寄存器中的數(shù)據(jù)進(jìn)行高低電平的判斷,最后解決什么時(shí)間射,什么時(shí)間不發(fā)射,如此就可以在紅外線(xiàn)二極管中發(fā)射出一串?dāng)?shù)據(jù)來(lái),讓接收方接收信號(hào)。但問(wèn)題還有?紅外二極管的發(fā)射是需要38K-40K的頻率進(jìn)行調(diào)制啊!不調(diào)制不能發(fā)射,更發(fā)射得不遠(yuǎn)!那么,怎樣將我要發(fā)射的數(shù)據(jù)調(diào)制在這38k的載波上呢?方法有兩種:一種是通過(guò)中斷的方法,二種是通過(guò)軟件定時(shí)的方法,網(wǎng)絡(luò)上大部份是建議中斷的方法,但方法太過(guò)于復(fù)雜,不方便移值。我最后還是采用自己想的辦法“軟件定時(shí)法”,就是在高電平時(shí)發(fā)射38k載波,低電平時(shí)不發(fā)射載波,載波的頻率和周期是不變的,但載波的發(fā)射個(gè)數(shù)是可以改變的,這樣通過(guò)計(jì)算載波的周期和引導(dǎo)碼、數(shù)據(jù)碼的比例關(guān)系,就可能得出具體該發(fā)多少個(gè)載波周期,這種方法非常簡(jiǎn)便適用。但是問(wèn)題總是有的,就是發(fā)射總是不正確,難道我的這種簡(jiǎn)單方法是行不通的嗎?不應(yīng)該啊,我計(jì)算過(guò)好多次了,應(yīng)該沒(méi)問(wèn)題的,最多是波形最終測(cè)量的時(shí)間有點(diǎn)偏差嘛!為了驗(yàn)證子程序了正確性不得不重新寫(xiě)驗(yàn)證程序了,幸好我的開(kāi)發(fā)板上有6位LED顯示,常規(guī)學(xué)習(xí)者認(rèn)為這幾個(gè)LED只能做一下流水燈試驗(yàn),其實(shí)這幾個(gè)LED燈作用不僅僅如此,更重要的功能是可能顯示是不是我們想要得到的數(shù)據(jù)!通過(guò)驗(yàn)證,問(wèn)題出在移位程序語(yǔ)句,我沒(méi)有良好的運(yùn)用“進(jìn)位位CY”,通過(guò)改進(jìn),程序可以一個(gè)個(gè)地將數(shù)據(jù)正確的移入CY中了,下一步就是判斷CY的值,然后判斷發(fā)射時(shí)間,但是問(wèn)題還有。≌媸且。。!怎么還不行?發(fā)出去的數(shù)據(jù)不是我想要的??檢查了2個(gè)小時(shí)才知道,我們書(shū)面上寫(xiě)的二進(jìn)制高低方向和發(fā)射方向是不一樣的,再加上又要取反碼,幾個(gè)倒轉(zhuǎn)就不知道發(fā)射出去的是什么數(shù)據(jù)了。好在公司的示波器可以存波形,通過(guò)讀波形顯示的數(shù)據(jù)才知道,書(shū)面上的據(jù)數(shù)方向是:左邊是高位,右面是低位,如十六進(jìn)制的0X04=00000100B,而不能是00100000B;發(fā)射時(shí)應(yīng)該從書(shū)面的高位向低位開(kāi)始發(fā)射數(shù)據(jù);如:0X03=00000011(書(shū)面),發(fā)射時(shí)應(yīng)該11000000,這樣發(fā)射數(shù)據(jù),要注意00000011是不等于取反的00000011的數(shù)據(jù)喲!這些都是些小細(xì)節(jié),但錯(cuò)了就是不行。。! 如此,一串?dāng)?shù)據(jù)發(fā)射出去了,接收方也正確的解了碼,說(shuō)明我的程序正確。 通過(guò)紅外編碼和解碼程序的理解和編寫(xiě),我們可以聯(lián)想出更多的通信協(xié)議,也可以用這種方法來(lái)聯(lián)想理解其它協(xié)議和運(yùn)用,紅外線(xiàn)編碼和解碼程序我認(rèn)為是學(xué)習(xí)各種協(xié)議的基礎(chǔ),非常重要。
|