會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客



(1) 2 »


關於ADC處理
新會員
註冊日期:
7月30日 11:05:58
來自 高雄
所屬群組:
註冊會員
文章: 7
等級: 1; EXP: 60
HP : 0 / 15
MP : 2 / 9
離線
各位大神您們好:

不好意思我是一個硬體工程師,最近需要學習如何用組合語言寫韌體

目前我遇到一些問題,不知道是否各位大神能夠給我範本提供我學習呢?

不好意思再麻煩大家。

我想連續讀取23次的ADC值,之後再將其平均後再做判斷!!

希望大家可以給我指教!!謝謝大家!

7月30日 11:38:04
轉換PDF檔 列印


Re: 關於ADC處理
新會員
註冊日期:
7月30日 11:05:58
來自 高雄
所屬群組:
註冊會員
文章: 7
等級: 1; EXP: 60
HP : 0 / 15
MP : 2 / 9
離線
抱歉是32次

7月30日 13:14:44
轉換PDF檔 列印


Re: 關於ADC處理
資深會員
註冊日期:
2007/06/05 21:45
所屬群組:
註冊會員
文章: 1007
等級: 28; EXP: 8
HP : 0 / 677
MP : 335 / 22499
離線
...硬體工程師,...用組合語言寫韌體

基本上,現在都直接用C語言...

7月30日 14:12:33
轉換PDF檔 列印


Re: 關於ADC處理
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14501
等級: 73; EXP: 6
HP : 1080 / 1801
MP : 4833 / 76171
離線
引用:

阿三 寫道:
抱歉是32次


這是取平均,32 次為 2^5。

1. 所以只要先將 ADC 加 32 次的總和向右移 5 bits 就有除以 32 的效果。而且這是最簡單的作法。

2. 最貼切的做法是開一個 2 bytes 為一組共 32 個組的 Ring Buffer, ADC 轉換完成只要將資料填入到 Ring Buffer 的新位址上後 (蓋掉最後一筆資料) 最 32 組資料的加總後在右移 5 bits 即可。

1 & 2 的差異是,1 是一次處理 32 的轉換,無法即時取得資料。2 是隨時隨地都是新資料的平均。

7月30日 14:31:31
轉換PDF檔 列印


Re: 關於ADC處理
新會員
註冊日期:
7月30日 11:05:58
來自 高雄
所屬群組:
註冊會員
文章: 7
等級: 1; EXP: 60
HP : 0 / 15
MP : 2 / 9
離線
謝謝大家我再試試看,因為之前工程師是用組合語言寫,所以需要用組合語言,對於我這個硬體工程師~光是看書覺得很吃力~感覺書上給的東西都是很難懂的,不知道是否有推薦淺顯易懂的書呢?不好意思一直麻煩各位

7月31日 14:14:15
轉換PDF檔 列印


Re: 關於ADC處理
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14501
等級: 73; EXP: 6
HP : 1080 / 1801
MP : 4833 / 76171
離線
Microchip 有很多的中文教育訓練講義,可以到右邊的 "教育訓練光碟" 裡找到參考資料。

因為你是初學者,不建議用組合語言來撰寫,改用 C 來寫會比較容易上手。

底下有些課程建議看一下:

http://www.microchip.com.tw/Data_CD/

8-Bits MCU 相關課程 ==>
PIC101 X IDE & MCC & XC8 的綜合基礎課程 New!
XC8T v1.0 New!

8月01日 10:38:43
轉換PDF檔 列印


Re: 關於ADC處理
新會員
註冊日期:
7月30日 11:05:58
來自 高雄
所屬群組:
註冊會員
文章: 7
等級: 1; EXP: 60
HP : 0 / 15
MP : 2 / 9
離線
非常謝謝版主,我之前有嘗試過寫C!的確比較容易上手,但是因為現在公司有需求必須要用組合語言寫,非常謝謝您給的資訊。

目前寫的狀況遇到一些問題想請問一下大家我這邊是否有寫錯呢?
還有我不知道如何將兩個暫存器除32後變成一個可以使用的暫存器!
不知道是否有人可以給我指點,不好意思再麻煩各為了謝謝

ADC_COUNTER_BASE:

MOVLW 32 //除32次
MOVWF ADC_DETECTOR //將32次丟到計數暫存器

ADC_COUNTER:

BSF PORTC,2 //驗證是否執行LDE2亮
CALL DELAY
BCF PORTC,2 //驗證是否執行LDE2滅
CALL PWM_ADC_AVERAGE

PWM_ADC_AVERAGE:

DECF ADC_DETECTOR //減計數暫存器數值

BSF PORTC,1 //驗證是否執行LDE1亮
CALL DELAY


-----------------------ADC讀取程式------------------------

BANKSEL ADCON0
MOVLW B'00000001'
MOVWF ADCON0
CALL ADC_DELAY
BANKSEL ADCON0
BSF ADCON0,GO
BTFSC ADCON0,GO
GOTO $-1
BANKSEL ADRESH
MOVFW ADRESH //將讀取到的值挪到W

------------------------ADC讀取程式-----------------------

BANKSEL ADC_L
ADDWF ADC_L //將讀取到的值加到ADC_L
BTFSS STATUS,C //檢查是否溢位
INCF ADC_H //如果溢位ADC_H+1如果沒有跳下行


(問題就在這裡,我不知道要怎麼將讀取到的兩個數值除32,如果是只有單單一個暫存器我知道但現在有兩個,再麻煩各位專家指點謝謝大家)


BCF PORTC,1 //驗證是否執行LDE1滅


BTFSC ADC_DETECTOR //執行32次後到除法區,如果沒有繼續執行ADC.

GOTO ADC_COUNTER

GOTO DIVIDED

DIVIDED:

RRF ADC_DETECTOR_TEMP,5 //除32
BANKSEL ADC_DETECTOR_TEMP
MOVFW ADC_DETECTOR_TEMP //最終取得的平均值

8月01日 15:10:06
轉換PDF檔 列印


Re: 關於ADC處理
資深會員
註冊日期:
2007/06/05 21:45
所屬群組:
註冊會員
文章: 1007
等級: 28; EXP: 8
HP : 0 / 677
MP : 335 / 22499
離線
除以2,4,8,16,32,64,128,...
除以2^N(2的N次方)...

這種的就移位就好了,注意以下兩點...
1. 加總是否會溢位
2. 多位元組(byte)移位

1. 加總是否會溢位
例: 12bits解析度的32次加總會超過16bits
2. 多個 byte(位元組)移位
如果單一個byte移位,有指令支援(直接移即可)
多個byte則要借由C flag來位移

ADC_H => C => ADC_L
ADC_H先(右)移位到C (carry進位) flag
C flag 再(右)移入 ADC_L

觀念有了,把(移位)指令拿來試試就可以了...

8月01日 17:25:39
轉換PDF檔 列印


Re: 關於ADC處理
新會員
註冊日期:
7月30日 11:05:58
來自 高雄
所屬群組:
註冊會員
文章: 7
等級: 1; EXP: 60
HP : 0 / 15
MP : 2 / 9
離線
謝謝您我再試試看~我目前是8bit的所以我用兩個8bit暫存器做處理!!不知道我上述的程式有沒有寫錯..其實我還是有一點看不懂不好意思

8月02日 10:59:56

阿三 於 2018年08月02日 11:17:29
轉換PDF檔 列印


Re: 關於ADC處理
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 14501
等級: 73; EXP: 6
HP : 1080 / 1801
MP : 4833 / 76171
離線
真的非用組合語言嗎? 在你還在研究 32 的平均數時,用 C 早就寫完了。既是上級交代要用組語那就參考一下別人寫的數學副程式吧!

http://www.piclist.com/techref/microchip/math/basic.htm

首先要有一個 16-bit 的加法 (ADC 結果是 10-bit, 加 32 次是 2 ^5 次方,所以你需要一個 16-bit 的加法)

movf twofour0,w ; twofour0 ADC 的 LSB 的資料輸入
addwf prod0,f

movf twofour1,w ; twofour ADC 的 MSB 的資料輸入
btfsc STATUS,c ; 檢查 LSB 有進為嗎?
incfsz twofour1,w ; 有進位加 1
addwf prod1,f ; 加入 ADC 的 MSB
; 16-bit 的累計輸出在 [prod1:prod0]


至於除 32 次,哪只要將這 16-bit 的累加值向右移為 5-bit 就是除 32 的值了。

8月02日 11:31:25
轉換PDF檔 列印



(1) 2 »



無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
Microchip連結

網頁捷徑
2018 Winter Elite 報名
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project