اطلاعیه

Collapse
No announcement yet.

کمک در مورد adc با at91sam7s

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

    کمک در مورد adc با at91sam7s

    با درود
    من قبلا با at91sam7s64 مبدل آنالوگ به دیجیتال رو راه انداخته بودم و قشنگ کار می کرد مثلا یه ولوم را که بهش وصل می کردی کاملا خطی و منظم بالا و پایین میرفت ( عددش ) البته بگم با iar
    تازگی یه پروژه باید ببندم که چون s64 گیرم نیومد با s128 بستم
    امان امان
    adc کار میکنه ولی پله پله بالا و پایین میره یعنی مثلا یهو 15 میشه 28 و الی آخر
    خودم فکر میکنم گیرش نرم افزاری باشه چون سخت افزارم جز میکروش همون قبلیه
    اینم کدم

    #include <Atmel/ioat91sam7s128.h>
    #include "lcd.h"
    void delay (void);
    void main ()
    {
    //--------------------start up--------------------------
    AT91C_BASE_WDTC->WDTC_WDMR = AT91C_WDTC_WDDIS; // AT91C_WDTC_WDDIS=(1<<15)
    AT91C_BASE_RSTC->RSTC_RMR=0xA5000001;
    //--------------------speed up--------------------------
    AT91C_BASE_CKGR->CKGR_MOR = 0xF01;
    AT91C_BASE_CKGR->CKGR_PLLR = 0x2903FFC;
    AT91C_BASE_PMC->PMC_MCKR = 0x3;
    AT91C_BASE_PMC->PMC_SCER = 0x1;
    //-----------------------------------------------------
    AT91C_BASE_PMC->PMC_PCER = ( 1<<AT91C_ID_PIOA ); // AT91C_ID_PIOA=2
    AT91C_BASE_PMC->PMC_PCER = ( 1<<AT91C_ID_ADC ); // AT91C_ID_ADC=4
    //------------------------------------------------------
    //AT91C_BASE_PIOA->PIO_PER = (1<<0|1<<1|1<<2|1<<3|1< <4|1<<5|1<<6|1<<7);
    //AT91C_BASE_PIOA->PIO_OER = (1<<0|1<<1|1<<2|1<<3|1< <4|1<<5|1<<6|1<<7);
    //AT91C_BASE_PIOA->PIO_OWER = (1<<0|1<<1|1<<2|1<<3|1< <4|1<<5|1<<6|1<<7);
    //AT91C_BASE_PIOA->PIO_ODSR = 0x0;
    AT91C_BASE_ADC->ADC_MR = 0x1000010;
    AT91C_BASE_ADC->ADC_CHER = (1<<4);
    lcd_pininit(31,0,1,2,3,6,7,8,9,10);
    lcd_init ();
    char i;
    while (1)
    {
    AT91C_BASE_ADC->ADC_CR = 0x2;
    while ((AT91C_BASE_ADC->ADC_SR&1<<4)==0);
    i = AT91C_BASE_ADC->ADC_CDR4&0xFF;
    lcd_clear();
    lcd_gotoxy(0,0);
    lcd_puts(i);
    lcd_gotoxy(0,3);
    lcd_putsf("^C"

    delay();

    }
    }

    void delay (void)
    {
    unsigned int i,j;
    for (i=0;i<20000000;i++)
    for(j=0;j<1000000;j++);
    }

    لطفا اگر چیزی به نظرتون میرسه کمک کنید

    #2
    پاسخ : کمک در مورد adc با at91sam7s

    سلام
    برای مد 8 بیتی رجیستر مد را به صورت زیر مقدار دهی کنید
    کد:
    AT91C_BASE_ADC->ADC_MR = 0x5000210;
    برای مد 10 بیتی رجیستر مد را به صورت زیر مقدار دهی کنید
    کد:
    AT91C_BASE_ADC->ADC_MR = 0x3000400;

    دیدگاه

    لطفا صبر کنید...
    X