با درود
من قبلا با 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++);
}
لطفا اگر چیزی به نظرتون میرسه کمک کنید
من قبلا با 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++);
}
لطفا اگر چیزی به نظرتون میرسه کمک کنید
دیدگاه