Re: [問題] 量測脈波寬度

看板ASM (組合語言)作者 (樹海游魂)時間15年前 (2009/04/12 03:52), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/8 (看更多)
※ 引述《BlueFeel (藍色感覺)》之銘言: : 請教一下, : 如果我要設計一個.... : pin2 輸入負脈波寬度>1ms , pin1 = 1 : <1ms , pin1 = 0 : 的功能 : 剛開始以為 pin2用INT0(外部中斷)做 : 在中斷函式內 寫個 計數器, : 當跳開後,會依計數值做pin1判斷1還是0 : 後來發現,我誤會中斷的意義 : 它是 "下緣觸發".....就跳進中斷函式,做計數沒錯 : 但這計數....值並非並非是負脈波寬度 : 怎麼說?? : 跳到中斷計數....這計數只計1次.....非我想像的一直計數到 rising才停 : 所以想跟大大請教一下 : 這樣的應用該怎麼做呢?? 通常啦,你要的結果有 n 種解法,要怎麼解就是看你的應用和其他因素 例如這只是一個練習的話,Anal 說的是一種方法,但缺點在於在 plus 在改變狀態 之前,程式會被卡在 ISR 裡面 當然更簡單的話,就是連中斷都不用進,整個迴圈就是在 poll IO 和計數 XD 如果你的程式有要做其他事情,那可以先估計 Anal 說的方法會不會造成什麼影響, 如果還可以的話,這個方法就不用增加什麼新的東西,改點程式碼就 OK 了 當然,如果不用 Anal 的方法,那麼勢必要增加硬體來解決這個部份 最簡單就是換一顆支援 level change trigger 或是可以設定 trigger edge 方向的 IC 不過如果你的 IC 有支援 兩個 IO 中斷向量 or 中斷 signal 的話 (簡單的說就是有 INT0 和 INT1 之類的) 利用一個電晶體來當作反向器,例如: pin1 = output pin2 = int0 pin3 = int1 pin4 = output TC0 = 計數/計時器 counter 把接到 pin2 的訊號經過一個反向器(也就是當 pin2 = 1 時 pin3 = 0,反之亦然) 然後程式一開始:pin2 = 1, pin3 = 0(因為一開始,所以 pin3 的中斷應該會被清除) falling edge :pin2 = 0, pin3 = 1,int0 被觸發 在 int0 中取得 TC0 並重設 TC0,像是 T_Rising = TC0, TC0 = 0 rising edge :pin2 = 1, pin3 = 0,int1 被觸發 在 int1 中取得 TC0 並重設 TC0,像是 T_Falling = TC0, TC0 = 0 那就看你是要看 rising to falling 還是要看 falling to rising 的時間 例如在 int0 中取得 TC0並計算完 T_Rising 後,以 pin1 來表示上昇脈波的寬度: if ( T_Rising > 1ms ) pin1 = 1 else pin1 = 0 或是在 int1 中取得 TC0 並計算完 T_Falling 後,以pin4 來表示下降脈波的寬度: if ( T_Falling > 1ms ) pin4 = 1 else pni4 = 0 以上 -- 我是路人甲 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.205.238.166
文章代碼(AID): #19uFJfGi (ASM)
文章代碼(AID): #19uFJfGi (ASM)