標(biāo)題: 數(shù)碼管亮度自動調(diào)節(jié),單片機控制程序上的問題 [打印本頁]
作者: join22life 時間: 2019-3-14 10:49
標(biāo)題: 數(shù)碼管亮度自動調(diào)節(jié),單片機控制程序上的問題
各位好,我想用單片機+光敏電阻實現(xiàn)數(shù)碼管亮度調(diào)節(jié),
目前程序位選放中斷,但要實現(xiàn)亮度自動調(diào)節(jié),那么位選開和關(guān)都需要加時延,這樣一來位選就不能在定時中斷中進行了。
我已知的位選不放中斷的思路:
開始: A 選通 延時on_time ,關(guān)閉A延時6ms-on_time
B 選通 延時on_time ,關(guān)閉B延時6ms-on_time
C 選通 延時on_time ,關(guān)閉C延時6ms-on_time
D選通 延時on_time ,關(guān)閉 D延時6ms-on_time
我想請教:1. 程序思路該是什么樣的?
2. 很多人位選沒有用定時中斷,但我的理解位選需放中斷,這樣理解沒錯吧?
-
微信圖片_20190314135605.jpg
(549.14 KB, 下載次數(shù): 57)
下載附件
2019-3-14 13:56 上傳
作者: geyobing 時間: 2019-3-14 13:38
固定刷新頻率,然后根據(jù)光敏電阻來調(diào)節(jié)開的時間長短,實現(xiàn)亮度變化,一般會放在中斷中去進行切換的,主流程肯定有別的事要做的
作者: join22life 時間: 2019-3-14 14:00
就像圖中那樣,每5ms中斷一次用于開位選,但是一個數(shù)碼管顯示時間將近6ms,等到第二個中斷來時進入第二個數(shù)碼管顯示,以此類推,使用沒有顯示數(shù)碼管顯示沒有完畢被中斷,這樣對程序有什么影響嗎?
作者: wulin 時間: 2019-3-14 15:37
調(diào)節(jié)數(shù)碼管亮度其實就是調(diào)節(jié)數(shù)碼管導(dǎo)通和截止時間比例,具體方案還要看數(shù)碼管的驅(qū)動方式。比較傾向于采用PWM方式給位選供電。數(shù)碼管靜態(tài)顯示控制亮度簡單些,數(shù)碼管動態(tài)顯示控制亮度比較麻煩。
作者: join22life 時間: 2019-3-14 15:43
我現(xiàn)在寫了一個光敏電阻不同值對應(yīng)開位選的時長的函數(shù),放主循環(huán)中;
另一個開各個位選函數(shù),放主循環(huán)中,通過中斷每5ms開位,這個思路是正確的吧?
作者: zhb2004xp 時間: 2019-3-14 16:09
多位數(shù)碼管的顯示本身就是利用人眼的視覺錯覺造成的,如果要增加視覺上亮度強度的感覺,理論上是要增加閃爍的頻率,但是如果顯示內(nèi)容同樣變化頻率較快的話,會造成全部顯示8的視覺錯覺。
作者: join22life 時間: 2019-3-14 22:21
這個像你說的,我現(xiàn)在就是出現(xiàn)數(shù)字顯示不清有全8現(xiàn)象了
作者: join22life 時間: 2019-3-14 22:22
看來我把亮度調(diào)節(jié)想的簡單化了
作者: Y_G_G 時間: 2019-3-14 23:41
其實沒有那么復(fù)雜的,不要用中斷
你寫兩個延時的函數(shù),一個控制數(shù)碼管開,另一個控制數(shù)碼管關(guān)
等于是數(shù)碼亮>延時1>數(shù)碼管滅>延時2>顯示下一個數(shù)碼管
把光敏電阻ADC的值用來作為延時的時間,
延時1的向上加,到0延時結(jié)束
延時2的向下減,到0延時結(jié)束
這樣一來,總的延時時長就是恒定不變的了,不會因為光敏電阻的變化而變化了
作者: 我們的青春阿 時間: 2019-3-15 06:40
思路很好,可以試一試!不行了再換種方式,作品就是在不斷的調(diào)試中成長的
作者: join22life 時間: 2019-3-15 12:24
恩,多謝,下午準(zhǔn)備解決這個問題
作者: join22life 時間: 2019-3-15 12:28
抱歉還是有個疑問,位選不是應(yīng)該通過中斷才是最好的嗎?
作者: 本廚 時間: 2019-3-15 14:45
延時1的向上加,到0延時結(jié)束 延時2的向下減,到0延時結(jié)束
作者: Y_G_G 時間: 2019-3-15 15:11
位選要中斷干嘛呢?
8個數(shù)碼管以下的,掃描顯示,一個接一個的顯示,最后ADC一次,用不也多長時間的
如果你覺得程序還要干點的別的什么的話,加入到延時函數(shù)里面進行也可以的了
作者: join22life 時間: 2019-3-17 22:27
多謝各位的幫助
,現(xiàn)在程序能實現(xiàn)10級自動亮度調(diào)節(jié),但發(fā)現(xiàn)adc分階用的值不好取,導(dǎo)致有時光線變化在某個值附近時,數(shù)碼管亮度一直來回切換,看著閃動。
我大概知道用冗余,但是比如一級亮度(100 < adc)&&(adc >150),
二級亮度( 159 < adc ) && ( adc > 200 ),此時150-159間的數(shù)值狀態(tài)我該怎么處理,如果都放else那么肯定不行的。
另外:光敏電阻的特性曲線網(wǎng)上也沒找到相關(guān)資料,只知道亮阻值暗阻值,比較融通。
作者: join22life 時間: 2019-3-17 22:28
感謝解答!
我記得學(xué)動態(tài)數(shù)碼管顯示時,老師強調(diào)用中斷來開位,所以之前都是這么做的,但現(xiàn)在像這樣需要延時的,就行不通了,所以很疑惑。
作者: join22life 時間: 2019-3-17 22:31
總時長25ms,開顯示時長為on_time,
那么關(guān)顯示25-on_time,你的累加累減能麻煩再講下嗎?
作者: join22life 時間: 2019-3-18 21:36
抱歉還是有個點沒想明白,固定刷新率,光敏電阻來調(diào)節(jié)開的時間長短,這兩點我都做了,但位選放中斷中,比如5ms就要開一個位選,這時該位選打開后又存在開時間的延時,要是大于5ms話豈不是影響第二個位選的顯示效果,一直不明白這點,請賜教多謝了。
作者: hhh402 時間: 2019-3-18 22:18
用中斷是最好的選擇,延時程序要慎用,延時就是浪費資源。4位數(shù)碼管100HZ刷新率,就是2.5ms刷新一位數(shù)碼管,要分10級亮度就是:使用250us的中斷,10個中斷(總共25ms)刷一位數(shù)碼管,要1級亮度就是1個中斷開,9個中斷關(guān);要2級亮度就是2個中斷開,8個中斷關(guān);以此類推。
作者: join22life 時間: 2019-3-19 21:29
解決我之前的那個疑惑。很感謝你的思路,受益匪淺!
作者: geyobing 時間: 2019-3-20 09:54
19樓的講的已經(jīng)很好了,關(guān)于你采集光敏電阻波動的情況,你可以做一些小手段,舉例0-1000,分10段,理論上0-100對應(yīng)1,101-200對應(yīng)2,以此類推,但是為了不出現(xiàn)一會弱一會亮的情況,可以加些額外條件,比如現(xiàn)在屬于1段,那就必須值大于120才能跳到2段,如果現(xiàn)在屬于2段值必須小于80才能調(diào)到1段,這樣就可以避免臨界值切來切去的問題,這個值要根據(jù)你實際的調(diào)整一下。
作者: join22life 時間: 2019-3-21 16:00
非常感謝你的回復(fù)!我會試著把程序調(diào)整。
作者: lids 時間: 2019-3-25 12:32
去看看我這個帖子,有你想要的關(guān)于數(shù)碼管根據(jù)環(huán)境亮度自動調(diào)節(jié)的程序及電路http://www.torrancerestoration.com/bbs/dpj-146620-1.html
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |