單片機(jī)設(shè)計(jì)經(jīng)驗(yàn)技巧精華集錦(五)
用AVR單片機(jī)的高速AD檢測功能能實(shí)現(xiàn)簡單的語音識別。聲音信號被駐極體電容話筒接收后送至LM386音頻功放芯片放大和過濾后送至單片機(jī)AD轉(zhuǎn)換口,單片機(jī)對音頻信號幅值采樣轉(zhuǎn)化為一組數(shù)字,然后對這組進(jìn)行取方差運(yùn)算,得出一個(gè)特征值,該特征值可以用于簡單的語音識別。比如你發(fā)一個(gè)“e”,方差應(yīng)該比較小,如果你發(fā)“p”爆破音,方差應(yīng)該較大。當(dāng)然,如果你用更復(fù)雜的數(shù)據(jù)處理,會得到更好的識別效果。本設(shè)計(jì)使用了2路聲音信號,目的是讓單片機(jī)判斷出聲源的大體方位。
D 超聲波測距
用AVR的1個(gè)IO口輸出40KHz信號送至超聲波發(fā)射電路,當(dāng)超聲波遇到障礙物返回后,被超聲波接收頭接收,信號經(jīng)CX20106A解碼芯片處理,得到一個(gè)低電平脈沖,用該脈沖引發(fā)AVR單片機(jī)中斷,AVR通過檢查發(fā)波和收到回波之間的時(shí)間差即可算出障礙物距離。
E 電機(jī)驅(qū)動(dòng)
本設(shè)計(jì)采用2片LG9110電機(jī)驅(qū)動(dòng)芯片驅(qū)動(dòng)兩臺直流減速電機(jī)。LG9110輸出最大電流為800mA,僅需要2條控制線與單片機(jī)IO口直接相連即可控制一臺電機(jī)正反轉(zhuǎn)或者停止。LG9110僅有8個(gè)引腳,使用非常方便。
F 讓機(jī)器生命更聰明
我的這個(gè)機(jī)器生命設(shè)計(jì)方案能實(shí)現(xiàn)最酷的效果是:白天,陽光明媚,機(jī)器生命跑到陽光底下曬太陽,太陽光會隨著時(shí)間變化,機(jī)器生命能自動(dòng)跑到最合適的位置享受日光浴。到了晚上,機(jī)器生命會找個(gè)安靜的地方閉目養(yǎng)神,等待明天太陽升起。你可以訓(xùn)練機(jī)器生命,讓它知道自己的名字叫什么。比如你叫著它的名字,同時(shí)站在它面前用強(qiáng)光照射它的太陽能電池板,如此反復(fù)訓(xùn)練,會使機(jī)器生命聽到自己名字后向聲源方向跑去,在距離聲源一定遠(yuǎn)處停止,因?yàn)橐酝@樣做它都能享受強(qiáng)光照射并充電。這就如同真正的寵物狗,你叫它名字它就跑到你跟前希望能獲得食物。這一切都是完全能夠?qū)崿F(xiàn)的,關(guān)鍵就在于編程序?qū)崿F(xiàn)它。
G 想象無極限,你的機(jī)器寵物將無所不能
以上方案中,ATmega16的功能被發(fā)揮到極致,以至于沒有空閑的IO口,系統(tǒng)不能再擴(kuò)展了。如果你用ATmega128單片機(jī)做,那么它擁有53個(gè)IO口,30多個(gè)中斷,128Kb的程序存儲器,4Kb的RAM,使得你能編寫更復(fù)雜的程序、儲存更多的動(dòng)態(tài)數(shù)據(jù)、連接更多的外設(shè),你的機(jī)器生命將變得非常有生命力。比如加入三軸加速度傳感器、地磁傳感器、GPS定位、雨水傳感器甚至攝像頭、無線通信模塊等,重新設(shè)計(jì)一個(gè)堅(jiān)固和強(qiáng)勁的底盤,你的機(jī)器生命就可以在室外自由探索了。
以上芯片外設(shè)來源說明:在淘寶上購買很容易
底盤:340元的高級履帶式1:16電動(dòng)坦克模型
加速度傳感器、地磁傳感器:美國AD公司的40元ADXL330加速度傳感器
GPS定位:幾十元的車載外置GPS天線
最后,我想說,機(jī)器人是非常好玩的,只要你有想象力,有毅力,努力研究實(shí)踐就能創(chuàng)造奇跡。
二、工程師分享的單片機(jī)學(xué)習(xí)步驟
有了單片機(jī)學(xué)習(xí)板之后你就要多練習(xí),把學(xué)習(xí)板和電腦連好,打開調(diào)試軟件坐在電腦前,先學(xué)會怎么用調(diào)試軟件,然后從最簡單的流水燈實(shí)驗(yàn)做起,等你能讓那八個(gè)流水燈按照你的意愿隨意流動(dòng)時(shí)你已經(jīng)入門了,你會發(fā)現(xiàn)單片機(jī)是多么迷人的東西啊,太好玩了,這不是在學(xué)習(xí)知識,而是在玩,當(dāng)你編寫的程序按你的意愿實(shí)現(xiàn)時(shí)你比做什么事都開心,你會上癮的,真的。做電子類的人真的會上癮。然后讓數(shù)碼管亮起來,這兩項(xiàng)會了后,你已經(jīng)不能自拔了,你已經(jīng)開始考慮你這輩子要走哪一行了。就是要這樣練習(xí),在寫程序的時(shí)候你肯定會遇到很多問題,而這時(shí)你再去翻書找,或是問別人,當(dāng)?shù)玫浇獯鸷竽銜涀∫惠呑拥?,知識必須用于現(xiàn)實(shí)生活中,解決實(shí)際問題,這樣才能發(fā)揮它的作用。另外我再說說用匯編和C語言編程的問題。很多同學(xué)大一二就開設(shè)了C語言的課 ,我也上過,我知道那時(shí)天天就是幾乘幾,幾加幾啊,求個(gè)階乘啊。學(xué)完了有什么用?讓你用C語言編單片機(jī)的程序你是不是就傻了?書上的東西我們必須要會運(yùn)用。單片機(jī)編程用C語言或匯編語言都可以,但是我建議用C語言比較好,如果原來有C語言的基礎(chǔ)那學(xué)起來會更好,如果沒有,也可以邊學(xué)單片機(jī)邊學(xué)C語言,C 語言也挺簡單,只是一門工具而已,我勸你最好學(xué)會,將來肯定用得著,要不你以后也得學(xué),你一點(diǎn)匯編都不會根本無所謂,但你一點(diǎn)C語言都不會那你將來會吃苦頭。匯編寫程序代碼效率高,但相對難度較大,而且很羅嗦,尤其是遇到算法方面的問題時(shí),根本是麻煩的不得了,現(xiàn)在單片機(jī)的主頻在不斷的提高,我們完全不需要那么高效率的代碼,因?yàn)橛懈哳l率的時(shí)鐘,單片機(jī)的ROM也在不斷的提高,足夠裝得下你用C語言寫的任何代碼,C語言的資料又多又好找,將來可移植性非常好,只需要變一個(gè)IO口寫個(gè)溫度傳感器的程序在哪里都能用,所以我勸大家用C語言。總結(jié)上面,只要你有信心,做事能堅(jiān)持到底,有不成功不放棄的強(qiáng)烈意志,那學(xué)個(gè)單片機(jī)來說就是件非常容 易的事。
步驟:
1.找本書大概了解一下單片機(jī)結(jié)構(gòu),大概了解就行。不用都看懂的。
2.找學(xué)習(xí)板練習(xí)編寫程序,學(xué)單片機(jī)就是練編程序,遇到不會的再問人或查書。
3.自己網(wǎng)上找些小電路類的資料練習(xí)設(shè)計(jì)外圍電路。焊好后自己調(diào)試,熟悉過程。
4.自己完全設(shè)計(jì)具有個(gè)人風(fēng)格的電路,產(chǎn)品,。。。你已經(jīng)是高手了
^_^。 。。。。
學(xué)習(xí)單片機(jī)的八大步驟
學(xué)習(xí)使用單片機(jī)就是理解單片機(jī)硬件結(jié)構(gòu),以及內(nèi)部資源的應(yīng)用,在匯編或C語言中學(xué)會各種功能的初始化設(shè)置,以及實(shí)現(xiàn)各種功能的程序編制。
第一步:數(shù)字I/O的使用
使用按鈕輸入信號,發(fā)光二極管顯示輸出電平,就可以學(xué)習(xí)引腳的數(shù)字I/O功能,在按下某個(gè)按鈕后,某發(fā)光二極管發(fā)亮,這就是數(shù)字電路中組合邏輯的功能,雖然很簡單,但是可以學(xué)習(xí)一般的單片機(jī)編程思想,例如,必須設(shè)置很多寄存器對引腳進(jìn)行初始化處理,才能使引腳具備有數(shù)字輸入和輸出輸出功能。每使用單片機(jī)的一個(gè)功能,就要對控制該功能的寄存器進(jìn)行設(shè)置,這就是單片機(jī)編程的特點(diǎn),千萬不要怕麻煩,所有的單片機(jī)都是這樣。
第二步:定時(shí)器的使用
學(xué)會定時(shí)器的使用,就可以用單片機(jī)實(shí)現(xiàn)時(shí)序電路,時(shí)序電路的功能是強(qiáng)大的,在工業(yè)、家用電氣設(shè)備的控制中有很多應(yīng)用,例如,可以用單片機(jī)實(shí)現(xiàn)一個(gè)具有一個(gè)按鈕的樓道燈開關(guān),該開關(guān)在按鈕按下一次后,燈亮3分鐘后自動(dòng)滅,當(dāng)按鈕連續(xù)按下兩次后,燈常亮不滅,當(dāng)按鈕按下時(shí)間超過2s,則燈滅。數(shù)字集成電路可以實(shí)現(xiàn)時(shí)序電路,可編程邏輯器件(PLD)可以實(shí)現(xiàn)時(shí)序電路,可編程控制器(PLC)也可以實(shí)現(xiàn)時(shí)序電路,但是只有單片機(jī)實(shí)現(xiàn)起來最簡單,成本最低。定時(shí)器的使用是非常重要的,邏輯加時(shí)間控制是單片機(jī)使用的基礎(chǔ)。
第三步:中斷
單片機(jī)的特點(diǎn)是一段程序反復(fù)執(zhí)行,程序中的每個(gè)指令的執(zhí)行都需要一定的執(zhí)行時(shí)間,如果程序沒有執(zhí)行到某指令,則該指令的動(dòng)作就不會發(fā)生,這樣就會耽誤很多快速發(fā)生的事情,例如,按鈕按下時(shí)的下降沿。要使單片機(jī)在程序正常運(yùn)行過程中,對快速動(dòng)作做出反應(yīng),就必須使用單片機(jī)的中斷功能,該功能就是在快速動(dòng)作發(fā)生后,單片機(jī)中斷正常運(yùn)行的程序,處理快速發(fā)生的動(dòng)作,處理完成后,在返回執(zhí)行正常的程序。中斷功能使用中的困難是需要精確地知道什么時(shí)候不允許中斷發(fā)生(屏蔽中斷)、什么時(shí)候允許中斷發(fā)生(開中斷),需要設(shè)置哪些寄存器才能使某種中斷起作用,中斷開始時(shí),程序應(yīng)該干什么,中斷完成后,程序應(yīng)該干什么等等 。
中斷學(xué)會后,就可以編制更復(fù)雜結(jié)構(gòu)的程序,這樣的程序可以干著一件事,監(jiān)視著一件事,一旦監(jiān)視的事情發(fā)生,就中斷正在干的事情,處理監(jiān)視的事情,當(dāng)然也可以監(jiān)視多個(gè)事情,形象的比喻,中斷功能使單片機(jī)具有吃著碗里的,看著鍋里的功能。 以上三步學(xué)會,就相當(dāng)于降龍十八掌武功,會了三掌了,可以勉強(qiáng)護(hù)身。
第四步:與PC機(jī)進(jìn)行RS232通信
單片機(jī)都有USART接口,特別是MSP430系列中很多型號,都具有兩個(gè)USART接口。USART接口不能直接與PC機(jī)的RS232接口連接,它們之間的邏輯電平不同,需要使用一個(gè)MAX3232芯片進(jìn)行電平轉(zhuǎn)換。
USART接口的使用是非常重要的,通過該接口,可以使單片機(jī)與PC機(jī)之間交換信息,雖然RS232通信并不先進(jìn),但是對于接口的學(xué)習(xí)是非常重要的。正確使用USART接口,需要學(xué)習(xí)通信協(xié)議,PC機(jī)的RS232接口編程等等知識。試想,單片機(jī)實(shí)驗(yàn)板
評論