اطلاعیه

Collapse
No announcement yet.

مشکل در برنامه ای که متناسب با ولتاژ ADC ورودی قرار است پالسی با فرکانس متغیر در خروجی ایجاد کند

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    مشکل در برنامه ای که متناسب با ولتاژ ADC ورودی قرار است پالسی با فرکانس متغیر در خروجی ایجاد کند

    سلام . با میکروی آرم شماره LPC2368 یک برنامه ای نوشتم به این شرح:
    قرار است یکی از ورودی های ADC را بخوانم. زمان خواندن این مقدار توسط ADC توسط پالس ورودی به یک پایه دیگر کنترل میشود. به این معنی که هر گاه پالس ورودی آن پایه "یک" باشد،مرتبا ADC خوانده شده و اعداد خوانده شده با هم جمع میشوند. و هر زمانی که صفر باشد این حاصل جمع تقسیم بر تعداد میشود. در واقع با هر پالس داده شده به آن پایه میکرو، میانگینی از ولتاژ ورودی به ADC گرفته میشود.
    این تا اینجای کار . اما در ادامه متناسب با این مقدار میانگین، یک پالس بین 10 هرتز تا 10 کیلوهرتز باشد تولید شده و در خروجی قرار بگیرد. وقتی ولتاژ آنالوگ داده شده به ADC را با دست آرام تغییر میدهم مشکلی ایجاد نمیشود و پالس خروجی متناسب با آن تغییر فرکانس میدهد. اما اشکالی که من بهش برخوردم این است که وقتی این ولتاژ DC را سریع ( در حد کمتر از ثانیه) تغییر میدهم، فرکانس خروجی نمیتواند دقیق متناسب با آن تغییر کند. یعنی گیر میکند و بعد یکهویی به صورت پرشی تغییر میکند. کد برنامه را هم گذاشتم . ممنون میشوم اگر کسی راهنمایی کند.


    #include "LPC23xx.h"
    #include "stdio.h"
    #include "math.h"
    #include "LCD_4bit.h"
    unsigned char buf[16],jbuf[16];
    char i=1,cv;
    float j=1,z=0,u,p,t,d;
    unsigned short read_adc(void);
    unsigned int k,s,m,y;


    //////////////////////////////////////////Main
    void main (void){
    PINSEL0=0x03«12; //set P0.6 to MAT2.0
    T2TCR=0x02; //Initialize Timer 2
    T2EMR=0x31; //enable MAT2.0 and set toggle output
    T2MR0=6000000; //set for delay 1s considering CLK_IN=36 MHz
    T2CTCR=0x00; //select internal clock for Timer 2
    T2MCR=0x02; // Reset and interrupt on match T2MR0
    T2TCR=0x01; // start Timer 2
    //////////////////////////////////////////
    /*PINSEL4=1«22; //set P2.11 to EINT1
    PINMODE4=3«22; //set P2.11 to pull-down
    VICIntSelect=0; //set EINT0 interrupt to IRQ
    VICIntEnable=1«15; //enable EINT0 interrupt
    VICVectAddr15=(unsigned int)EINT1; //set address of T2_MR0 interrupt service routine
    EXTMODE=0x03; //set EINT0 to edge sensitive
    EXTPOLAR=0x02; //set rising edge for EINT0*/
    /////////////////////////////////////
    PINSEL1=0x01«14; //set P0.23 to AD0.0
    PINMODE1=0x02«14; //set P0.23 as tri state
    AD0CR=(1«21)|(3«8); //set PDN bit, and CLKDIV=3
    /////////////////////////////////////
    SCS|=0X01;
    PINSEL2=0x00; //set P1 to GPIO
    PINMODE2=0x02; //set P1 to tri state resistor
    FIO1DIR=0X00;
    /////////////////////////////////////
    lcd_init(); //initialize LCD
    sprintf(buf,"hello");
    for(m=0;m<5;m++)
    {
    lcd_clear();
    lcd_gotoxy(0,m);
    lcd_print(buf); //clear LCD
    for(s=0;s<120000;s++);
    }
    while(1)
    {
    while((FIO1PIN&0X01))
    {
    u+=read_adc(); //read AD0.0
    j++;
    }
    if(j>0)
    {
    p=u/j;
    y=(512/(19999*(p-512)-512))*36000000;
    T2TCR=0x02;
    T2MR0=y; //set for delay CLK_IN=36 MHz
    T2TCR=0x01;
    j=0;
    u=0;
    }
    if(k>50000)
    {
    d=t/50000;
    z=((d-512.0)*3.3)/1023.0; //convert result to voltage
    lcd_gotoxy(0,0); //go to position (0,0)
    sprintf(buf,"power=%f",z); //load ascii string to buf
    lcd_print(buf);
    lcd_gotoxy(1,0); //go to position (0,0)
    sprintf(jbuf,"j=%f",j); //load ascii string to buf
    lcd_print(jbuf); //write string
    k=0;
    t=0;
    d=0;
    }
    k++;
    t+=p;
    }
    }
    ///////////////////////////////////////////Read AD0.0
    unsigned short read_adc(void)
    {
    AD0CR&=0xFFFFFF00;
    AD0CR|=(1«24) |0X01; //start ADC conversion, and select AD0.0
    while ((AD0DR0&0x80000000)==0); //wait for end of ADC Conversion
    AD0CR&=0xF8FFFFFF; //stop ADC
    return ((AD0DR0»6)&0x03FF); //return bit 6:15 of AD0DR0 that is 10 bit ADC value
    }

    جدیدترین ویرایش توسط sina_javan; ۱۲:۴۵ ۱۳۹۵/۰۴/۳۰.
    دلا خوبـــان دل خونيــــن پســـندند
    دلا خون شو که خوبان اين پسندند
    متاع کفر و دين بيآ‌مشتري نيست
    گروهــــي آن گروهي اين پســـندند
لطفا صبر کنید...
X