999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Arduino控制板“定時器”沖突的故障解決

2016-12-05 17:55:30任大奇謝作如
中國信息技術(shù)教育 2016年21期
關(guān)鍵詞:按鈕學生

任大奇++謝作如

最近,在教學《Arduino創(chuàng)意機器人》的過程中碰到了一個奇怪的問題。

故障描述

學生在學習了《換擋風扇》一課后,做了一個用三個按鈕控制的“換擋風扇”。如圖1所示,學生將三個按鈕模塊分別接在Arduino的數(shù)字口2、3、4上,風扇接在數(shù)字口11上。接好硬件后,學生用米思齊(Mixly)軟件編寫了如圖2所示的程序,編譯并下載到Arduino中。學生按下按鈕2,風扇開始慢速轉(zhuǎn)動,再按下按鈕3,風扇加速轉(zhuǎn)動,按下按鈕1后,風扇停止了轉(zhuǎn)動。

一切都很順利,于是筆者提議給這個作品增加遙控功能。學生們馬上興致勃勃地動手找到紅外遙控模塊,沒幾下就把硬件連接好了(在9號數(shù)字口上增加了紅外接收模塊),如圖3所示。

使用遙控器上的“1”“2”“3”鍵分別控制風扇“停止轉(zhuǎn)動”“慢速轉(zhuǎn)動”“快速轉(zhuǎn)動”,程序并不復(fù)雜,很快便寫好了,如下頁圖4所示。

當學生按下遙控器上的“3”鍵時,風扇快速旋轉(zhuǎn)起來。但當按下“2”鍵時,預(yù)期的慢速旋轉(zhuǎn)并沒有出現(xiàn),風扇直接停止了轉(zhuǎn)動。學生又按了幾次“2”鍵,可是風扇仍然紋絲不動,再按“3”鍵,風扇也不動了。這時,學生趕緊檢查剛才寫的程序,再三檢查后確定程序沒有問題。那難道是硬件連接出問題了?仔細檢查后也沒有問題。一臉茫然的學生只好來求助筆者。于是,筆者查找遙控失效的原因。

首先,可以確定的是,風扇不能工作在慢速狀態(tài)下的故障和加入了紅外線遙控有關(guān),因為本來是正常的。但它們之間會有什么關(guān)系呢?然后,筆者開始從它們的工作原理入手查找線索,考慮到遙控器遵循NEC協(xié)議,所以不論發(fā)送還是接收命令都需要產(chǎn)生38kHz的脈沖,于是便很自然地想到,紅外接收模塊工作時會使用到Arduino板的定時器,同時風扇轉(zhuǎn)速的改變也是靠Arduino板定時器產(chǎn)生的PWM輸出實現(xiàn)的,那會不會是它們在使用定時器資源時產(chǎn)生了沖突呢?帶著這一疑問,筆者開始求證自己的推測。

技術(shù)分析

為了更好地理解求證過程,筆者先來解釋一下Arduino UNO的主芯片(Atmage328P)中的定時器。所謂的定時器類似于生活中的鬧鐘,只要開啟這個鬧鐘它就會根據(jù)設(shè)定的時間不斷去提醒。提醒的方式有兩種:一種是給CPU發(fā)送定時器中斷,另一種是直接在管腳上輸出脈沖電壓(PWM)。只是在同一個時間內(nèi)這個“小鬧鐘”只能設(shè)定一個定時時間,以一種方式工作,不能既當“鬧鐘”,又輸出PWM。這種定時器在Atmage328P中共需要三個,分別是Timer0(0號定時器)、Timer1(1號定時器)和Timer2(2號定時器)。

為了確認紅外遙控和風扇PWM輸出在使用定時器資源上是否有沖突,首先,要確定風扇PWM輸出所使用的是幾號定時器。查看Arduino UNO的原理圖,可以知道風扇所接的11口是從Arduino主芯片(Atmage328P)的17號管腳引出的(如上頁圖5),筆者順藤摸瓜,查閱Atmage328P的數(shù)據(jù)手冊,得知此管腳(OC2A)正是2號定時器在PWM模式下輸出脈沖的管腳(如上頁圖6),也就是說要想風扇慢速轉(zhuǎn),必須讓2號定時器工作在PWM模式下。接著,需要確認紅外接收模塊使用的是幾號定時器。分析Mixly軟件中的Arduino代碼,可以看到程序加載了一個外部庫“IRremote.h”,在“Mixly0.97\arduino1.7.9\hardware\arduino\avr\libraries\IRremote”文件夾中找到該庫文件。打開該庫文件,發(fā)現(xiàn)其又引用了一個用于設(shè)置中斷的庫文件“IRremoteInt.h”,在這個文件的72行中發(fā)現(xiàn)了“#define IR_USE_TIMER2”這一句(如上頁圖7)。因此可知,針對Atmage328P芯片,紅外遙控模塊使用了2號定時器,至此可以確定問題的原因就是這兩個功能同時使用了2號定時器。

解決方案

問題的原因找到了,那怎么解決呢?筆者想到了兩種方法:

第一種方法是修改紅外遙控模塊使用的定時器。將“IRremoteInt.h”中的72行修改成“#define IR_USE_TIMER1”,強制紅外遙控使用1號定時器。保存庫文件后,筆者重新編譯下載,試著按下了遙控器上的“2”鍵,風扇慢速地轉(zhuǎn)了起來,成功了!

但是,這種方法對沒有學習過類C語言的學生來說,有一定困難,而且改變了默認庫中定時器的設(shè)置,可能會產(chǎn)生與其他模塊的沖突,所以這種方式只適合于硬件連接無法改變的情況使用。有沒有簡單點的方法呢?

還有一種方法就是更換風扇連接的數(shù)字口。查看資料,筆者可以得知,Arduino UNO的各個具備PWM輸出功能的數(shù)字口及其定時器的對應(yīng)關(guān)系如上頁表所示。筆者將風扇換到使用0號定時器的6號口上,修改程序中的端口,重新編譯下載后,測試也一切正常。學生覺得這種處理定時沖突的方式更簡單,只要記住6個可以輸出PWM的數(shù)字口對應(yīng)的定時器,換一下連接數(shù)字口就可以解決定時器資源沖突問題。

結(jié)語

至此,故障得到了很好的解決。通過這個過程,筆者總結(jié)了在進行Arduino制作時需要注意的幾點:

①用Arduino UNO實現(xiàn)一些簡單的互動功能的確很方便,但作品的功能一旦復(fù)雜,就容易出現(xiàn)各種資源沖突的問題。所以,應(yīng)用比較復(fù)雜的作品,最好選用硬件資源更加豐富的板子,如Arduino 2560、Arduino DUE等。

②如果作品中多處用到定時器,要合理分配定時器的使用。

③在使用數(shù)字口5、6的PWM功能時,盡量不要使用delay()延時函數(shù),因為這個函數(shù)是使用定時器0來產(chǎn)生延時。

④像紅外遙控模塊這樣需要用到定時器的模塊,盡量不要接在具有PWM功能的數(shù)字口上,以免造成干擾。

⑤將PWM輸出寫在不同程序段,能減少互相干擾的概率。

此外,筆者深刻體會到,創(chuàng)客教師和學生還應(yīng)該多了解一些單片機的原理、知識,才能“造”出更多有趣的作品,遇到問題也能得到有效解決。

猜你喜歡
按鈕學生
這些按鈕能隨便按嗎?
哪個是門鈴真正的按鈕
當你面前有個按鈕
快把我哥帶走
《李學生》定檔8月28日
電影(2018年9期)2018-11-14 06:57:21
趕不走的學生
死循環(huán)
學生寫話
學生寫的話
內(nèi)心不能碰的按鈕
主站蜘蛛池模板: 青青青亚洲精品国产| 国产另类视频| 亚洲无码91视频| 亚洲浓毛av| 9丨情侣偷在线精品国产| 亚洲区欧美区| 国产97视频在线| 天堂av综合网| 午夜性刺激在线观看免费| 免费国产无遮挡又黄又爽| 日韩精品专区免费无码aⅴ | 日韩在线2020专区| 亚洲精品成人片在线观看| 一区二区影院| av天堂最新版在线| 五月天久久婷婷| 日韩欧美国产三级| 青青青视频免费一区二区| 久久成人免费| 亚洲美女操| 中文字幕永久视频| 亚洲最大福利网站| 精品国产免费观看| 最新亚洲人成网站在线观看| 不卡无码h在线观看| 91香蕉国产亚洲一二三区| 日韩精品成人网页视频在线 | 日韩在线永久免费播放| 国产福利小视频高清在线观看| 免费一级成人毛片| 久久精品国产亚洲AV忘忧草18| 伊人久久大线影院首页| 国产va在线| 一本大道东京热无码av| 国产精品视频猛进猛出| 久久国产亚洲偷自| 色婷婷天天综合在线| 九九久久99精品| 欧美日韩国产综合视频在线观看| 青青热久麻豆精品视频在线观看| 国产成人一区二区| 黄色网址手机国内免费在线观看| 欧美国产日韩在线观看| 精品一区二区久久久久网站| 国产成人综合网| 国产亚洲高清视频| 国产又色又刺激高潮免费看| 性欧美精品xxxx| 免费毛片网站在线观看| 国产97公开成人免费视频| 大学生久久香蕉国产线观看 | 999国产精品永久免费视频精品久久 | www亚洲精品| 91视频精品| 欧美激情视频二区| 日本高清有码人妻| 日本欧美中文字幕精品亚洲| 亚洲精品第一在线观看视频| 精品日韩亚洲欧美高清a| 国产一级毛片yw| 日韩欧美国产成人| 一本一道波多野结衣一区二区| 男人天堂伊人网| 国产成人午夜福利免费无码r| 国产高潮视频在线观看| 欧美成人国产| 欧美精品亚洲二区| 中文字幕第4页| 日韩精品高清自在线| 欧美在线中文字幕| 国产午夜人做人免费视频中文| 日韩专区第一页| 国产成人禁片在线观看| 在线观看视频99| 国产av一码二码三码无码| 亚洲成A人V欧美综合| 五月激情婷婷综合| 亚洲日本www| 午夜性刺激在线观看免费| 777国产精品永久免费观看| 免费啪啪网址| 18黑白丝水手服自慰喷水网站|