新聞中心

        EEPW首頁 > 模擬技術 > 設計應用 > 單片機設計經驗技巧精華集錦(五)

        單片機設計經驗技巧精華集錦(五)

        作者: 時間:2013-05-27 來源:網絡 收藏
        C 語音識別

          用AVR的高速AD檢測功能能實現簡單的語音識別。聲音信號被駐極體電容話筒接收后送至LM386音頻功放芯片放大和過濾后送至AD轉換口,對音頻信號幅值采樣轉化為一組數字,然后對這組進行取方差運算,得出一個特征值,該特征值可以用于簡單的語音識別。比如你發一個“e”,方差應該比較小,如果你發“p”爆破音,方差應該較大。當然,如果你用更復雜的數據處理,會得到更好的識別效果。本設計使用了2路聲音信號,目的是讓單片機判斷出聲源的大體方位。

          D 超聲波測距

          用AVR的1個IO口輸出40KHz信號送至超聲波發射電路,當超聲波遇到障礙物返回后,被超聲波接收頭接收,信號經CX20106A解碼芯片處理,得到一個低電平脈沖,用該脈沖引發AVR單片機中斷,AVR通過檢查發波和收到回波之間的時間差即可算出障礙物距離。

          E 電機驅動

          本設計采用2片LG9110電機驅動芯片驅動兩臺直流減速電機。LG9110輸出最大電流為800mA,僅需要2條控制線與單片機IO口直接相連即可控制一臺電機正反轉或者停止。LG9110僅有8個引腳,使用非常方便。

          F 讓機器生命更聰明

          我的這個機器生命設計方案能實現最酷的效果是:白天,陽光明媚,機器生命跑到陽光底下曬太陽,太陽光會隨著時間變化,機器生命能自動跑到最合適的位置享受日光浴。到了晚上,機器生命會找個安靜的地方閉目養神,等待明天太陽升起。你可以訓練機器生命,讓它知道自己的名字叫什么。比如你叫著它的名字,同時站在它面前用強光照射它的太陽能電池板,如此反復訓練,會使機器生命聽到自己名字后向聲源方向跑去,在距離聲源一定遠處停止,因為以往這樣做它都能享受強光照射并充電。這就如同真正的寵物狗,你叫它名字它就跑到你跟前希望能獲得食物。這一切都是完全能夠實現的,關鍵就在于編程序實現它。

          G 想象無極限,你的機器寵物將無所不能

          以上方案中,ATmega16的功能被發揮到極致,以至于沒有空閑的IO口,系統不能再擴展了。如果你用ATmega128單片機做,那么它擁有53個IO口,30多個中斷,128Kb的程序存儲器,4Kb的RAM,使得你能編寫更復雜的程序、儲存更多的動態數據、連接更多的外設,你的機器生命將變得非常有生命力。比如加入三軸加速度傳感器、地磁傳感器、GPS定位、雨水傳感器甚至攝像頭、無線通信模塊等,重新設計一個堅固和強勁的底盤,你的機器生命就可以在室外自由探索了。

          以上芯片外設來源說明:在淘寶上購買很容易

          底盤:340元的高級履帶式1:16電動坦克模型

          加速度傳感器、地磁傳感器:美國AD公司的40元ADXL330加速度傳感器

          GPS定位:幾十元的車載外置GPS天線

          最后,我想說,機器人是非常好玩的,只要你有想象力,有毅力,努力研究實踐就能創造奇跡。

          二、工程師分享的單片機學習步驟

          有了單片機學習板之后你就要多練習,把學習板和電腦連好,打開調試軟件坐在電腦前,先學會怎么用調試軟件,然后從最簡單的流水燈實驗做起,等你能讓那八個流水燈按照你的意愿隨意流動時你已經入門了,你會發現單片機是多么迷人的東西啊,太好玩了,這不是在學習知識,而是在玩,當你編寫的程序按你的意愿實現時你比做什么事都開心,你會上癮的,真的。做電子類的人真的會上癮。然后讓數碼管亮起來,這兩項會了后,你已經不能自拔了,你已經開始考慮你這輩子要走哪一行了。就是要這樣練習,在寫程序的時候你肯定會遇到很多問題,而這時你再去翻書找,或是問別人,當得到解答后你會記住一輩子的,知識必須用于現實生活中,解決實際問題,這樣才能發揮它的作用。另外我再說說用匯編和C語言編程的問題。很多同學大一二就開設了C語言的課 ,我也上過,我知道那時天天就是幾乘幾,幾加幾啊,求個階乘啊。學完了有什么用?讓你用C語言編單片機的程序你是不是就傻了?書上的東西我們必須要會運用。單片機編程用C語言或匯編語言都可以,但是我建議用C語言比較好,如果原來有C語言的基礎那學起來會更好,如果沒有,也可以邊學單片機邊學C語言,C 語言也挺簡單,只是一門工具而已,我勸你最好學會,將來肯定用得著,要不你以后也得學,你一點匯編都不會根本無所謂,但你一點C語言都不會那你將來會吃苦頭。匯編寫程序代碼效率高,但相對難度較大,而且很羅嗦,尤其是遇到算法方面的問題時,根本是麻煩的不得了,現在單片機的主頻在不斷的提高,我們完全不需要那么高效率的代碼,因為有高頻率的時鐘,單片機的ROM也在不斷的提高,足夠裝得下你用C語言寫的任何代碼,C語言的資料又多又好找,將來可移植性非常好,只需要變一個IO口寫個溫度傳感器的程序在哪里都能用,所以我勸大家用C語言。總結上面,只要你有信心,做事能堅持到底,有不成功不放棄的強烈意志,那學個單片機來說就是件非常容 易的事。

          步驟:

          1.找本書大概了解一下單片機結構,大概了解就行。不用都看懂的。

          2.找學習板練習編寫程序,學單片機就是練編程序,遇到不會的再問人或查書。

          3.自己網上找些小電路類的資料練習設計外圍電路。焊好后自己調試,熟悉過程。

          4.自己完全設計具有個人風格的電路,產品,。。。你已經是高手了

          ^_^。 。。。。

          學習單片機的八大步驟

          學習使用單片機就是理解單片機硬件結構,以及內部資源的應用,在匯編或C語言中學會各種功能的初始化設置,以及實現各種功能的程序編制。

          第一步:數字I/O的使用

          使用按鈕輸入信號,發光二極管顯示輸出電平,就可以學習引腳的數字I/O功能,在按下某個按鈕后,某發光二極管發亮,這就是數字電路中組合邏輯的功能,雖然很簡單,但是可以學習一般的單片機編程思想,例如,必須設置很多寄存器對引腳進行初始化處理,才能使引腳具備有數字輸入和輸出輸出功能。每使用單片機的一個功能,就要對控制該功能的寄存器進行設置,這就是單片機編程的特點,千萬不要怕麻煩,所有的單片機都是這樣。

          第二步:定時器的使用

          學會定時器的使用,就可以用單片機實現時序電路,時序電路的功能是強大的,在工業、家用電氣設備的控制中有很多應用,例如,可以用單片機實現一個具有一個按鈕的樓道燈開關,該開關在按鈕按下一次后,燈亮3分鐘后自動滅,當按鈕連續按下兩次后,燈常亮不滅,當按鈕按下時間超過2s,則燈滅。數字集成電路可以實現時序電路,可編程邏輯器件(PLD)可以實現時序電路,可編程控制器(PLC)也可以實現時序電路,但是只有單片機實現起來最簡單,成本最低。定時器的使用是非常重要的,邏輯加時間控制是單片機使用的基礎。

          第三步:中斷

          單片機的特點是一段程序反復執行,程序中的每個指令的執行都需要一定的執行時間,如果程序沒有執行到某指令,則該指令的動作就不會發生,這樣就會耽誤很多快速發生的事情,例如,按鈕按下時的下降沿。要使單片機在程序正常運行過程中,對快速動作做出反應,就必須使用單片機的中斷功能,該功能就是在快速動作發生后,單片機中斷正常運行的程序,處理快速發生的動作,處理完成后,在返回執行正常的程序。中斷功能使用中的困難是需要精確地知道什么時候不允許中斷發生(屏蔽中斷)、什么時候允許中斷發生(開中斷),需要設置哪些寄存器才能使某種中斷起作用,中斷開始時,程序應該干什么,中斷完成后,程序應該干什么等等 。

          中斷學會后,就可以編制更復雜結構的程序,這樣的程序可以干著一件事,監視著一件事,一旦監視的事情發生,就中斷正在干的事情,處理監視的事情,當然也可以監視多個事情,形象的比喻,中斷功能使單片機具有吃著碗里的,看著鍋里的功能。 以上三步學會,就相當于降龍十八掌武功,會了三掌了,可以勉強護身。

          第四步:與PC機進行RS232通信

          單片機都有USART接口,特別是MSP430系列中很多型號,都具有兩個USART接口。USART接口不能直接與PC機的RS232接口連接,它們之間的邏輯電平不同,需要使用一個MAX3232芯片進行電平轉換。

          USART接口的使用是非常重要的,通過該接口,可以使單片機與PC機之間交換信息,雖然RS232通信并不先進,但是對于接口的學習是非常重要的。正確使用USART接口,需要學習通信協議,PC機的RS232接口編程等等知識。試想,單片機實驗板


        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 尉犁县| 蛟河市| 南京市| 安宁市| 龙口市| 金门县| 南宫市| 玉林市| 科技| 榕江县| 抚远县| 东海县| 北碚区| 阿荣旗| 综艺| 怀仁县| 西乌珠穆沁旗| 新乡县| 宁波市| 西青区| 民和| 泊头市| 日土县| 蕲春县| 遵化市| 炉霍县| 荆门市| 望江县| 江西省| 越西县| 乌拉特中旗| 微博| 泰和县| 岳普湖县| 兴国县| 花垣县| 江口县| 深水埗区| 通化县| 长岭县| 乌兰察布市|