Re: ADC轉換的奇怪問題?…
|
||||
---|---|---|---|---|
中級會員
|
是不是這裡?????
注意看! //-----A----- CHS0 = 0; //AN0 is A/D input Delay1us(32); //Delay 32us ConvertADC(); while(BusyADC()); Vset_AD = ReadADC(); //------------ 然後看!!!!!! //-----B----- CHS0 = 0; //AN1 is A/D input Delay1us(32); //Delay 32us ConvertADC(); while(BusyADC()); Vbat_AD = ReadADC(); //------------ ************************************** B 這一段裡面的 CHS0 = 0; //AN1 is A/D input 是不是要把它改為 CHS0 = 1; //AN1 is A/D input
發表於: 2007/6/25 17:01
|
|||
|
Re: PIC IC壞掉的原因?
|
||||
---|---|---|---|---|
中級會員
|
提供一個方法給你參考!!!
在當成輸入的 I/O 腳上先串接一個電阻, 這樣它會跟內部的兩個保護二極體形成鉗位電路, 輸入腳的電位會限制在 Vcc+0.7 和 Vss-0.7, 如果輸入訊號範圍在 0~24V , 那使用 2k 的電阻應該蠻適合的, 受電阻限制的關係, 流過保護二極體的電流將小於 10mA, 且因為此 I/O 腳為輸入狀態, 所以輸入阻抗會很大, 輸入訊號在 0~Vcc 時, 2k 遠小於輸入阻抗, 對原輸入特性的影響也很小。 需注意的是, 若使用的 I/O 腳內部無保護二極體時, 要記得自己在外部加上。
發表於: 2007/6/14 8:59
|
|||
|
Re: C語言行內組合引用變數錯誤
|
||||
---|---|---|---|---|
中級會員
|
我想..... 數值搬移的部份交回給 c 語言作塵該就可以了.
如下. 等數值搬好之後才開始組合語言的部分。 void test1(unsigned char datain,unsigned char var1) { unsigned char Buf1=0; Buf1 = var1; _asm .................. ............ ........ _endasm }
發表於: 2007/6/9 22:56
|
|||
|
Re: ASCII 轉 hex
|
||||
---|---|---|---|---|
中級會員
|
可以的! 因為雖然說是 ascii 轉 hex,
但是當你以 movlw 'A' 時, 其實際作用卻是 movlw 041H 以此類推 movlw 'G' 應為 movlw 047H, 所以啦, W 的數值內容可為 00 ~ FF, 那得到的結果便是 '00' ~ 'FF', 這也是其中的副程式名稱為何是 BIN_HEX, 而不是 ASC_HEX了。
發表於: 2007/6/7 20:03
|
|||
|
Re: ASCII 轉 hex
|
||||
---|---|---|---|---|
中級會員
|
LIST R=DEC
#INCLUDE <P16F876.INC> HEX_CODE0 EQU 020H HEX_CODE1 EQU 021H ORG 0 GOTO MAIN ORG 10 ; SOURCE FROM W BIN_HEX MOVWF HEX_CODE1 ANDLW 00FH ADDLW '0' MOVWF HEX_CODE0 SUBLW '9' MOVLW 007 BTFSS STATUS,W ADDWF HEX_CODE0,F SWAPF HEX_CODE1,W ANDLW 00FH ADDLW '0' MOVWF HEX_CODE1 SUBLW '9' MOVLW 007 BTFSS STATUS,W ADDWF HEX_CODE1,F RETURN MAIN MOVLW 'A' CALL BIN_HEX GOTO $ END 以上程式供你參考 轉換的結果在 HEX_CODE0, HEX_CODE1 使用方式, 將要轉換的值放入 W , 然後CALL BIN_HEX即可
發表於: 2007/6/7 15:36
|
|||
|
Re: 有關數值移位問題
|
||||
---|---|---|---|---|
中級會員
|
從你所希望的結果和所得的結果看來,
所得的結果是正確的, 而所希望的結果則恐怕是那裏有點問題了??? 所得的結果: 0x33 = 0011 0011 0x19 = 0001 1001 0x0C = 0000 1100 0x06 = 0000 0110 是右移的動作沒錯! 而且右移在算術上的意義也是除2沒錯的.
發表於: 2007/5/29 20:10
|
|||
|
Re: 請問大大dsPIC4011有關RS232的傳輸問題
|
||||
---|---|---|---|---|
中級會員
|
Hi ! 你的問題看起來很有趣。
與其使用時間 delay 來分隔, 似乎不如真的就加上分隔符號吧! 把你所要的 X, Y 夾在結果數字串中。 這樣字串會變成 062X112Y, pc接收字串時, X字符之前的3個數字就是 X 的數值, 而 Y字符之前的3個數字就是 Y 的數值。 這樣是不是會容易分辨點呢! 一點小建議給你參考...
發表於: 2007/5/19 9:12
|
|||
|
Re: 角度平均計算
|
||||
---|---|---|---|---|
中級會員
|
Hi !!! 你還看得真仔細,
if(new_angle >= 180) new_angle = new_angle - 360; if(new_angle <= -180) new_angle = new_angle + 360; 表示新角度差值大於 180 度或小於-180 度時作角度差值調整 將角度差值調整為相反方向, 因為此方向的夾角角度較小, 這是因為你有提到角度以 0 ~ 359.9 的角度來表示。 例: 前平均角度為 1, 新值為 350 角度差為 350 - 1 = 349 (實際值為 11) 大於 180 的條件成立, 調整為 349 - 360 = -11 (得正確值) ------------------------------------------------------------------- 前平均角度為 355, 新值為 30 角度差為 30 - 355 = -325 (實際值為 35) 小於180 的條件成立, 調整為 -325 + 360 = 35 (得正確值) ------------------------------------------------------------------- 至於你提了其中唯一的特例角度差 180 度, 因為剛好在正對面, 所以要不要在剛好差 180 度時調整就看你高興了, 如果改為 if(new_angle > 180) new_angle = new_angle - 360; if(new_angle < -180) new_angle = new_angle + 360; 在角度差超過 180 度時才調整, 嗯..嗯.....效果一樣呢!! 哈! 哈! 不過你不也提到了抖動的角度差會在 90 度內嗎, 那不理會它也沒關係吧!
發表於: 2007/5/9 0:38
|
|||
|
Re: 角度平均計算
|
||||
---|---|---|---|---|
中級會員
|
如果不是純要計算數學的平均值,
而只是希望降低sensor輸入訊號抖動的輸入均值的話! 那試試以下的方法吧! 看看合不合你的需求。 double average_angle, new_angle; average_angle = 0; ... ... ... ... ... // 以下這段請放在 sensor 取樣後的處理程式中 new_angle = (角度 sensor 輸入) - average_angle; if(new_angle >= 180) new_angle = new_angle - 360; if(new_angle <= -180) new_angle = new_angle + 360; average_angle = average_angle + (new_angle / 20); if(average_angle < 0) average_angle = average_angle + 360; if(average_angle >= 360) average_angle = average_angle - 360; // 係數 20 的地方會影響平均值的反應速度, 小一點反應快, 大一點反應慢 // 但是也會影響平均的效果, 小一點均值的效果好, 大一點均值的效果差 ... ... ... ... ...
發表於: 2007/5/8 15:06
|
|||
|