Re: 各位前輩幫幫忙提供一下意見???
|
||||
---|---|---|---|---|
高級會員
|
非常感謝前輩的提供意見我已經照你的方式下去測試已經ok~~~~ 謝謝!!!
發表於: 2007/6/28 14:24
|
|||
|
Re: 各位前輩幫幫忙提供一下意見???
|
||||
---|---|---|---|---|
高級會員
|
想請問一下那我這裡需要怎改法才有辦法如我程式 IF ELSE
產生HI LOW 值
發表於: 2007/6/27 16:13
|
|||
|
各位前輩幫幫忙提供一下意見???
|
||||
---|---|---|---|---|
高級會員
|
為何我只有輸入0v的電壓才有HI的輸出電壓 可以提供我意見ㄇ???
#include <pic.h> #include "cnfig877a.h" void ADdelay(unsigned char i) { while(i--); } //********************************** //* Function Prototype Declaration //********************************** void Init_IO(void); void Init_Adc( void ); void A2D(void); void calculate(void); // ================================================================ // **** Establish PIC16F877A Configuration Word // **** == HS Oscillator Mode // **** == Brown-Out Detect Enabled // **** == Watch-Dog Timer Off // **** == Code Protect Off // **** == Low Voltage Programming Off // **** == ICD2 Debug Mode On __CONFIG ( HS_OSC & BODEN_ON & WDT_OFF & CP_OFF & LVP_OFF & DEBUG_ON ); // ================================================================= union { int AD_10bit; struct { char AD_LSB; char AD_MSB; }AD_Byte; }AD_Int; /***************************** INITIALIZE I/O PORT *****************************/ void Init_IO(void) { ADCON1=0b00000110; TRISD=0x00; PORTD=0x80; TRISA1=1; TRISB1=0; } /***************************************** Initialize A/D & Comparator Module ******************************************/ void Init_Adc( void ) { ADCON0=0b10001001; ADCON1=0b00000000; ADFM=1; } /*********************************** Convert A/D Channel ************************************/ void A2D( void ) { int temp; ADGO = 1; while (ADGO) ; AD_Int.AD_Byte.AD_MSB=ADRESH; AD_Int.AD_Byte.AD_LSB=ADRESL; temp= ADRESH *256+ ADRESL; } //****************************************************** // calculate //******************************************************** void calculate(void) { int b,A4; int e,a; a=1; b=A4; e=b/a; if(e>=2) { RB1=0; } else { RB1=1; } } //*************************************** //* Program Main ( ) * //*************************************** void main(void) { int A4, temp; Init_IO(); Init_Adc(); while(1) { A2D(); // Get 10-bit A/D result from CH1 A4=temp; calculate(); } }
發表於: 2007/6/26 22:58
|
|||
|
Re: 計算問題
|
||||
---|---|---|---|---|
高級會員
|
不好意思 我現在只有一個a/d的值 另一個為我設定
發表於: 2007/6/23 16:32
|
|||
|
計算問題
|
||||
---|---|---|---|---|
高級會員
|
我現在用c寫了有關 於 e=p(n)-p(n-1)/v(n)-v(n-1)這樣的一個式子 因為我利用a/d的方式將資料放在我所設定的暫存器中(也就是p 和v的值)我利用了 *和&讓 新資料和舊資料相減但是我測試結果就是無法無預期 不知道有人有這樣經驗ㄇ?可以討論依下
#include <pic.h> // processor if/def file #include "cnfig877a.h" unsigned char i ; //*************************** // A/D延遲 //***************************** void ADdelay(unsigned char i) { while(i--); } //********************************** //* Function Prototype Declaration //********************************** void Init_IO(void); void Init_Adc_1( void ); void A2D_1(void); void calculate(float A2, float *A4); //============================================================ // **** Establish PIC16F877A Configuration Word // **** == HS Oscillator Mode // **** == Brown-Out Detect Enabled // **** == Watch-Dog Timer Off // **** == Code Protect Off // **** == Low Voltage Programming Off // **** == ICD2 Debug Mode On __CONFIG ( HS_OSC & BODEN_ON & WDT_OFF & CP_OFF & LVP_OFF & DEBUG_ON ); //========================================================== unit int AD_10bit_1; struct { char AD_LSB_1; char AD_MSB_1; } AD_Byte_1; } AD_Int_1; /***************************** INITIALIZE I/O PORT *****************************/ void Init_IO(void) { ADCON1=0b00000110; TRISD=0x00; PORTD=0x80; TRISA0=1; } /***************************************** Initialize A/D & Comparator Module ******************************************/ void Init_Adc_1( void ) { ADCON0=0b10000001; ADCON1=0b00000100; ADFM=1; } /*********************************** Convert A/D Channel ************************************/ void A2D_1(void ) { float temp_1; ADGO = 1; while (ADGO) ; AD_Int_1.AD_Byte_1.AD_MSB_1=ADRESH; AD_Int_1.AD_Byte_1.AD_LSB_1=ADRESL; temp_1= ADRESH *256+ ADRESL; } //******************************************* // calculate //******************************************* void calculate(float A2, float *A4) { float a,b; float e; a=2; b=(A2-*A4); e=b/a; if(e<0) { RB1=1; } else { RB1=0; } *A4=A2; } //*************************************** //* Program Main ( ) * //*************************************** void main(void) { float A2, A4,temp_1; unsigned int j; Init_IO(); while(1) { Init_Adc_1(); ADdelay(2); A2D_1(); A4=temp_1; for( j=1; j<65535; j++) { A2=temp_1; calculate(A2, &A4); } } }
發表於: 2007/6/23 16:31
|
|||
|
訊號問題???
|
||||
---|---|---|---|---|
高級會員
|
請問ㄧ下各位前輩:
我現在輸出產生的訊號一個週期內可能是high訊號可能是low的訊號 也有可能是ㄧ個週期都是high訊號也有可能都是low訊號 這樣方式不知道有前輩可以提供一下意見~~~(因為我輸出的訊號是要驅動升壓電路的mos晶體)
發表於: 2007/6/14 17:05
|
|||
|
Re: 16f877a duty cycle問題??
|
||||
---|---|---|---|---|
高級會員
|
Thank~~~~
發表於: 2007/6/14 16:58
|
|||
|
Re: pwm執行問題
|
||||
---|---|---|---|---|
高級會員
|
自己已經解決 thank~~~
發表於: 2007/6/12 13:34
|
|||
|
Re: pwm執行問題
|
||||
---|---|---|---|---|
高級會員
|
請問ㄧ下您說的設定部份要從哪裡去設定阿???
發表於: 2007/6/12 13:13
|
|||
|