線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1681
推到 Plurk!
推到 Facebook!

請問如何處理訊號源?

缺席
loveforme
一般會員


發表:22
回覆:39
積分:22
註冊:2009-03-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-03-31 21:05:11 IP:122.121.xxx.xxx 訂閱
目前我的接法如下:  
我用一顆電晶體C1815(npn) ,其中

B腳接訊號源
C接 5V 10歐姆電阻
E接地

接著我把C腳拉一條線接到INT0 作為中斷訊號~
B腳接收的訊號約1V的脈波...(像是反相放大的效果)

我用示波器測量C腳的波型,是一個還算蠻漂亮的低電壓觸發的波型...
但是頭痛的是,每當我在實驗版測試的時候,用手動按鈕觸發中斷時都會出現我預期的結果
但是接上我要處理的訊號源的時候就瘋掉了...

我的訊號源是測轉速的...我用電磁感應式的~轉速約在一千轉
不知道是不是因為訊號太快? 導致我的程式來不及運算..
可以請教大大們幫解惑 或是分享各位對於訊號源處理的心得~
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-03-31 21:29:11 IP:122.118.xxx.xxx 未訂閱
你不是說出了重點了嗎?
1.查查B點的示波器波型,看看是否正確.
2.轉速一千.以中斷來說.還好勒.是你怎麼寫的?你沒說呀.
===================引 用 loveforme 文 章===================
接著我把C腳拉一條線接到INT0 作為中斷訊號~
B腳接收的訊號約1V的脈波...(像是反相放大的效果)

我用示波器測量C腳的波型,是一個還算蠻漂亮的低電壓觸發的波型...
但是頭痛的是,每當我在實驗版測試的時候,用手動按鈕觸發中斷時都會出現我預期的結果
但是接上我要處理的訊號源的時候就瘋掉了...

我的訊號源是測轉速的...我用電磁感應式的~轉速約在一千轉
不知道是不是因為訊號太快? 導致我的程式來不及運算..
可以請教大大們幫解惑 或是分享各位對於訊號源處理的心得~
loveforme
一般會員


發表:22
回覆:39
積分:22
註冊:2009-03-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-03-31 22:05:12 IP:122.121.xxx.xxx 訂閱
我的程式...
是以time0 每50us T0中斷一次並且

count ;

因為偵測到一次訊號等於轉一圈所以我計數出來的count跟RPM的計算方式為:
利用INT0偵測到訊號時中斷並且運行以下程式碼

RPM = 1200000 / count ; //因為想不出更好的計算方式,所以只好用這種很耗資源的計算方式...
count = 0 ; //歸零 以便計算下一圈總共有多少 50us

RPM 再另外用七段顯示器 或是 UART 輸出 我都有個別寫程式碼
只是用手動輸入中斷,跟用實際轉速訊號時...好像是兩回事...
先別說 七段顯示器 跟UART ,我有另外實驗用INT0中斷執行

P1^0 = 0 ;
delay()
P1^0 = 1 ;

接著我用示波器測量...P1^0 針腳的波型,雖然有出現低電位的觸發...但是他觸發點會亂跳...(使用七段顯示器時也是都整個亂跳...)
因為我轉速是固定的...我測量INT0腳的低電位的位置都是固定的!
所以我才會懷疑是否是因為我輸入的訊號不好...

附帶一題...我T0的中斷優先是1
雖然執行INT0中斷程式時會遠遠大於50us但是中斷優先低於T0所以count 還是正常計時的...
編輯記錄
loveforme 重新編輯於 2009-03-31 22:07:20, 註解 無‧
loveforme
一般會員


發表:22
回覆:39
積分:22
註冊:2009-03-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-04-01 00:48:17 IP:122.121.xxx.xxx 訂閱
剛剛爬了很久的文,再找看看有沒有跟我這篇類似的文章...卻發現了這個!
http://delphi.ktop.com.tw/board.php?cid=173&fid=1167&tid=78789

因為我是直接學keil C 所以對於硬體方面不是很懂...
我知道用組合語言寫程式比較快,但是我只會用C...
C雖然方便 但是有計算上會比較慢...
像我剛剛回的文有一個RPM = 1200000 / count ;
這種東西真是獻醜了...

有沒有大大可以推薦我幾本有關如何用C寫出有執行效率的書呢?
像剛剛我有爬到一些文,有人寫乘法的程式碼是先設定
sfr a = 0xF0;
sfr b = 0xE0;

c = a * b; //如果是我,我就傻傻的直接寫這個了...

還有這個 在此引用(正)版主的這句話...
" (以10進制為例)假設你要做2222*21, 你可以把它拆成220*210 22*21 或 2200*21 22*21 16進制一樣的觀念,

我很希望學習這方面的東西,因為我目前看的書 都是敎人家寫出結構化的程式...
但是如何寫出,不讓晶片負擔太大的程式,我就不懂了...
編輯記錄
loveforme 重新編輯於 2009-04-01 01:09:55, 註解 無‧
暗黑破壞神
版主


發表:9
回覆:2301
積分:1627
註冊:2004-10-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-04-01 18:21:48 IP:122.118.xxx.xxx 未訂閱
PONT 這本可以給一些觀念.值得你看一下
http://rapidshare.com/files/14775815/Embedded_c_tutorial_-__8051_.pdf

===================引 用 loveforme 文 章===================
剛剛爬了很久的文,再找看看有沒有跟我這篇類似的文章...卻發現了這個!
http://delphi.ktop.com.tw/board.php?cid=173&fid=1167&tid=78789

因為我是直接學keil C 所以對於硬體方面不是很懂...
我知道用組合語言寫程式比較快,但是我只會用C...
C雖然方便 但是有計算上會比較慢...
像我剛剛回的文有一個RPM = 1200000 / count ;
這種東西真是獻醜了...

有沒有大大可以推薦我幾本有關如何用C寫出有執行效率的書呢?
像剛剛我有爬到一些文,有人寫乘法的程式碼是先設定
sfr a = 0xF0;
sfr b = 0xE0;

c = a * b; //如果是我,我就傻傻的直接寫這個了...

還有這個 在此引用(正)版主的這句話...
" (以10進制為例)假設你要做2222*21, 你可以把它拆成220*210 22*21 或 2200*21 22*21 16進制一樣的觀念,

我很希望學習這方面的東西,因為我目前看的書 都是敎人家寫出結構化的程式...
但是如何寫出,不讓晶片負擔太大的程式,我就不懂了...
loveforme
一般會員


發表:22
回覆:39
積分:22
註冊:2009-03-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-04-01 22:37:01 IP:122.121.xxx.xxx 訂閱
暗黑大你好~
這本書我有拜讀過了,真的很不錯!
尤其第五章影響我很多...結構化我的程式碼~
只是不知道版大是要我著重哪個地方?
我所欠缺的觀念是不知道如何寫出對程式較無負擔程式碼...
因為C語言是個方便的東西>"< 但是卻不是對晶片直接做溝通...
所以我想了解 同樣一個東西怎樣寫才是有同樣效果又可以讓晶片很快計算出來!
之前有看過一個文章,他舉了一個例子:
如何計算圓周率??
她總共用了三種方法...我有點忘了第三種
第一種是直接3.14
第二種是直接圓周/直徑
第三種是兩個數字相除然後<<8(位移)
只是不知道這個想法是怎麼來的...

KSC
一般會員


發表:4
回覆:18
積分:4
註冊:2006-09-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-04-04 03:24:33 IP:143.89.xxx.xxx 未訂閱
這兒有講
http://chamberplus.myweb.hinet.net/ems_2.htm


單晶片是八位元的世界,您就應該轉換成八位元的思考模式,才能寫出有效率的好程式。

到現在我還是基於此點去寫我的程式

===================引 用 loveforme 文 章===================
暗黑大你好~
這本書我有拜讀過了,真的很不錯!
尤其第五章影響我很多...結構化我的程式碼~
只是不知道版大是要我著重哪個地方?
我所欠缺的觀念是不知道如何寫出對程式較無負擔程式碼...
因為C語言是個方便的東西>"< 但是卻不是對晶片直接做溝通...
所以我想了解 同樣一個東西怎樣寫才是有同樣效果又可以讓晶片很快計算出來!
之前有看過一個文章,他舉了一個例子:
如何計算圓周率??
她總共用了三種方法...我有點忘了第三種
第一種是直接3.14
第二種是直接圓周/直徑
第三種是兩個數字相除然後<<8(位移)
只是不知道這個想法是怎麼來的...
?
loveforme
一般會員


發表:22
回覆:39
積分:22
註冊:2009-03-24

發送簡訊給我
#8 引用回覆 回覆 發表時間:2009-04-04 22:32:52 IP:122.121.xxx.xxx 訂閱
KFC大大~~你連結的那個網站,也恨是我很崇拜的一個作者之ㄧ!!
剛好就在你連結的那個網址中!
她有一個計算ADC轉換溫度的程式,裡面有一段...
以我的笨腦袋真的想不懂他這樣寫的意思是怎樣...
我要說的就是他計算 cnt_offset 的這個變數!
一般來說~我簡單的腦袋會想到計算cnt_offset這個東西的時候...
我應該會計算(BT_table( cnt_1) - BT_table(cnt_1 1) ) / 5 ;
這個就是 cnt_offset 每增加 1度C ..adc_v 所增加的值!
可是他的算法真是令我百思不得其解...
不過我以我的算法下去算的時候...會遇到一種狀況 當差值小的時候 又 除 5
很可能這個cnt_offset會被忽略掉
只是我不明白他的算法...還有謂何他要一直定義它的變數型態??

版主


發表:261
回覆:2302
積分:1667
註冊:2005-01-04

發送簡訊給我
#9 引用回覆 回覆 發表時間:2009-04-20 19:30:17 IP:60.249.xxx.xxx 未訂閱
條條大路通羅馬. 首先要了解的是"你要的是什麼". 它的精神所在.  程式.語法....都只是工具.

了解自己的目標, 再利用有限的資源達到你的目標. 工具都是人設計的!

FYI.
------
-------------------------------------------------------------------------
走是為了到另一境界,停是為了欣賞人生;未走過千山萬水,怎知生命的虛實與輕重!?
loveforme
一般會員


發表:22
回覆:39
積分:22
註冊:2009-03-24

發送簡訊給我
#10 引用回覆 回覆 發表時間:2009-04-21 21:55:47 IP:122.121.xxx.xxx 訂閱
版大的意思是要我用自己的方法去寫嚕??

可是能了解別人一些自己不知道的想法,總是一件好事~~

話說到現在我還是不知道那段語法的意思...

看來只好去買他介紹的書來看了...
系統時間:2024-04-20 18:11:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!