請教關於pic 16f877 capture
|
||||
---|---|---|---|---|
初級會員
|
請問各位前輩:
pic裡面使用capture功能時,他正緣觸發或是負緣觸發 是當他訊號大於幾V時,他才認定是HIGH? 或是幾V以下,他當成是LOW? 因為小弟使用PIC配合多工器去擷取多個,PWM輸入 HIGH的時間,一直都有問題,所以有點懷疑是不是因為準 位的認定問題
發表於: 2006/11/22 22:14
|
|||
|
Re: rs232 傳輸資料錯誤??
|
||||
---|---|---|---|---|
初級會員
|
好像就算你都算好也有可能會錯
但是不會常常錯就是了 好像可以在資料前後加check的位元 我是沒有用過啦~~~但是通常好像都是這個方法 好像叫check sum吧... 例如你傳8byte,程式判斷有傳到8個byte過來才接收當成正確資料 還是請高手解釋吧~~~我是嫩BB.....XD
發表於: 2006/11/21 2:17
|
|||
|
Re: 使用多工器來擷取多個PWM訊號?
|
||||
---|---|---|---|---|
初級會員
|
那再請教一下,我多工器的input或是output需要再多接什麼東西(例如:電阻)嗎?
或是說我將我要擷取的pwm訊號,直接接到多工器的input 而output直接接到pic的接腳就好呢?
發表於: 2006/10/24 23:31
|
|||
|
使用多工器來擷取多個PWM訊號?
|
||||
---|---|---|---|---|
初級會員
|
請問有人用多工器來擷取多個PWM訊號嗎?
我目前需要將感測器輸出的PWM訊號HIGH的時間抓出來 可能至少需要抓10組以上的PWM訊號 但是PIC 16F877並沒有那麼多的CPP模組 所以我想說透過多工器去切channel 不知道各位有沒有遇過這種狀況,可行否??? 因為我初步測試起來好像第二個channel就會有問題?
發表於: 2006/10/24 2:01
|
|||
|
<求助>關於rs232傳輸資料到電腦介面端
|
||||
---|---|---|---|---|
初級會員
|
各位先進大家好:
小弟想請問一下,目前我欲將A/D轉換的資料傳輸到電腦介面端(VB)繪製成圖,請問一般大家都會用哪種方式去傳.ADRESH和ADRESL這二個暫存器的資料算是16進制的嗎? 我是否要將之弄成字串或是陣列的方式來傳呢? 目前我會將ㄧ串字串傳到VB端並順利接收,但是因為字串後面會有一個空格(/0),這個好像會造成我進去VB之後要把"char"轉換成"int"的錯誤. 問題描述的不好,請各位見諒,希望各位前輩能幫我解答一下,或是有一些範例可以提供參考 感謝大家抽空看我的問題.謝謝!
發表於: 2006/8/7 20:19
|
|||
|
Re: 請教關於16F877的A/D轉換RE2接腳不能使用的問題
|
||||
---|---|---|---|---|
初級會員
|
還是不太懂版主的意思耶...
可以再說清楚些嗎? 抱歉囉~~小弟真的對單晶片沒有什麼概念
發表於: 2006/1/4 21:01
|
|||
|
Re: 請教關於16F877的A/D轉換RE2接腳不能使用的問題
|
||||
---|---|---|---|---|
初級會員
|
程式碼如下~~拜託各位了~~謝謝!
#include <pic.h> #include "MID_LCD.h" void A2D_0( unsigned char ); void LCD_ItoA(unsigned int); unsigned char Set_BCD_ASCII(unsigned char); unsigned int AD_Temp; bit DS_Zero_Flag; union { int AD_10bit; struct { char AD_LSB; char AD_MSB; }AD_Byte; }AD_Int; /***************************** DELAY FUNCTION *****************************/ void delay_x_ms(int); void del_1ms(void); void delay_x_ms(int N_ms) { int Loop_ms; for(Loop_ms = 0;Loop_ms<N_ms;Loop_ms++) { del_1ms(); } } void del_1ms(void) { int del_1ms; for(del_1ms = 0;del_1ms<199;del_1ms++) { asm("nop"); asm("nop"); } } /*********************************** Convert A/D Channel ************************************/ void A2D_0( unsigned char channel ) { unsigned char temp; // Temp storage ADCON0=0b10111001; temp = channel << 3; // Shift channel value three bits left ADCON0 &= 0b11000111; // Clear channel select bits in ADCON0 ADCON0 |= temp; // Logically OR shifted channel value into place in ADCON0 delay_x_ms(100); ADGO = 1; // Initiate conversion on selected channel while (ADGO) ; // Poll ADGO bit until it clears, indicating conv. done AD_Int.AD_Byte.AD_MSB=ADRESH; AD_Int.AD_Byte.AD_LSB=ADRESL; } //*************************************** //* Program Main ( ) * //*************************************** void main(void) { OpenLCD(); ADCON1=0b10000000; //all channel is A/D input and Right justified PSPMODE=0; TRISE2=1; TRISC=0x00; // Set PortC for Output PORTC=0x80; // Initila LED display = 0x80 while(1) { A2D_0(0x07); // Get 10-bit A/D result from CH7 LCD_Set_Cursor(0,0); LCD_ItoA(AD_Int.AD_10bit); } } void LCD_ItoA(unsigned int AD_Data) { AD_Temp=AD_Data; DS_Zero_Flag=1; putcLCD(Set_BCD_ASCII(AD_Data/1000)); // 顯示千位數 AD_Temp=AD_Temp%1000; // 取出百位以後的數 putcLCD(Set_BCD_ASCII(AD_Temp/100)); // 顯示百位數 AD_Temp=AD_Temp%100; putcLCD(Set_BCD_ASCII(AD_Temp/10)); // 顯示十位數 AD_Temp=AD_Temp%10; putcLCD(AD_Temp+='0'); // 顯示個位數 } unsigned char Set_BCD_ASCII(unsigned char BCD_Data) { if (BCD_Data==0) { if (DS_Zero_Flag) return ' '; // 居先零抑制 else return '0'; // 顯示一般的零 } else { DS_Zero_Flag=0; // 取消居先零的抑制 return (BCD_Data +='0'); // 並傳回 ASCII Code } }
發表於: 2005/12/22 16:03
|
|||
|
請教關於16F877的A/D轉換RE2接腳不能使用的問題
|
||||
---|---|---|---|---|
初級會員
|
版主以及各位先進,小弟在此想請教一個問題
那就是我使用16F877的A/D轉換時,其他CHANNEL都沒問題, 偏偏RE2就是無法使用,我可能的設定均已設定,設定如下: ADCON1 裡的 PCFG0~PCFG3 的設定,全部設定為類比應無問題。 相關暫存器TRISE裡面的Bit4,設定為PSPMODE=0 小弟實在已經想不出辦法囉~~~ 希望各位前輩可以幫幫忙,感恩ㄚ~~~
發表於: 2005/12/20 17:04
|
|||
|
Re: 請問A/D取多個通道輸入的問題
|
||||
---|---|---|---|---|
初級會員
|
請問版主的意思是
直接把 PSPMODE=0; 這樣設定嗎? 我是直接這樣設定,但是RE2那支接腳還是不能使用耶 而ADCON1沒有設錯
發表於: 2005/11/24 16:39
|
|||
|