PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : تبدیل سیگنال آنالوگ به دیجیتال به صورت پیوسته



a.moghadam
07-11-2012, 21:49
با سلام به همه دوستان
من میخوام یه سری سیگنال آنالوگ رو به صورت پیوسته به دیجیتال تبدیل کنم
میخوام بدونم که این اطلاعات دیجیتال شده در چه رجیستری ذخیره میشن؟؟؟
این رجیستر چه حجمی از این اطلاعات رو میتونه تو خودش ذخیره کنه؟؟؟
و چطور میشه این ریجیستر رو فراخوانی کرد و اطلاعات توش رو به sd card منتقل کرد؟؟؟

m_online3710
08-11-2012, 13:21
اگه اتمل بودي بلد بودم
اما الان شرمنده

a.moghadam
08-11-2012, 13:33
اگه کسی یا سایتی رو میشناسید که میتونه کمکی کنه لطفا معرفی کنید

mzarkoob
09-11-2012, 00:41
اینکه به صورت پیوسته یه سیگنال را می خواهید تبدیل کنید باید از مد burst استفاده کنید و برای ذخیره هم قائدتا میریزند در یک آرایه و اینکه چه حجمی از این اطلاعات رو میتونه تو خودش ذخیره کنه، خوب بستگی به این داره چی تعریفش بکنید.

Aghaeifar
09-11-2012, 01:08
با سلام به همه دوستان
من میخوام یه سری سیگنال آنالوگ رو به صورت پیوسته به دیجیتال تبدیل کنم
میخوام بدونم که این اطلاعات دیجیتال شده در چه رجیستری ذخیره میشن؟؟؟
این رجیستر چه حجمی از این اطلاعات رو میتونه تو خودش ذخیره کنه؟؟؟
و چطور میشه این ریجیستر رو فراخوانی کرد و اطلاعات توش رو به sd card منتقل کرد؟؟؟
جواب دو تا سوالت توی منوال میکرو به وضوح هست. یه سر منوال میکروت رو نگاه کن ببین اسمش چیه. اسمش توی میکروهای مختلف ممکنه کمی فرق کنه. رزولوشن مبدل رو هم ببین بعد متوجه میشی چه حجمی میشه. برای مشخص شدن اینها باید اسم میکروت رو بگی.

بحث SD card هم که کلا یه بحث جداگانه است که پروژه های آماده اش برای دانلود موجوده.

a.moghadam
09-11-2012, 02:41
ممنون از آقایان زرکوب و آقایی فر که جواب دادن
من از میکروی lpc1768 استفاده میکنم
منظورتون از اینکه گفتید بستگی به این داره که چطور تعریفش کنیم اینه که فرضا 16بیتی یا 32بیتی آرایه تعریف شه؟؟؟
تا اونجایی که من متوجه شدم رجیستر adc channel data register اطلاعات دیجیتال شده رو در خودش ذخیره میکنه
حالا میخوام بدونم با هر بار پر شدن این رجیستر چطور میشه اون رو مدام رو sd ریخت؟؟
البته من از دستورات cmsis استفاده میکنم
این رزولوشن مبدل چیه؟

لطفا یه نگاه هم به این کد برنامه که نوشتم بندازید از خط while ارور میگیره


int ADCValue;
float i;
int main(void)
{
PINSEL_CFG_Type Pincfg;
Pincfg.Portnum=1;
Pincfg.Pinnum=30;
Pincfg.Funcnum=2;
Pincfg.Pinmode=PINSEL_PINMODE_TRISTATE;
Pincfg.OpenDrain=PINSEL_PINMODE_NORMAL;
PINSEL_ConfigPin(&Pincfg);
ADC_Init(LPC_ADC,200000);
ADC_ChannelCmd(LPC_ADC,ADC_CHANNEL_4,ENABLE);
ADC_StartCmd(LPC_ADC,ADC_START_NOW);
ADC_BurstCmd(LPC_ADC,ENABLE);
}
while(1)
{
ADC_ChannelGetStatus(LPC_ADC,ADC_CHANNEL_4,ADC_DAT A_BURST);
ADCValue+=ADC_ChannelGetData(LPC_ADC,ADC_CHANNEL_4 );
ACDValue/=i;

mzarkoob
09-11-2012, 19:49
آها حالا متوجه منظورتون شدم. دقت در 1768 دوازده بیتی هست یعنی بهتون 0 تا 4095 می دهد. در رجیستر LPC_ADC->ADDR0 تا LPC_ADC->ADDR7 (بستگی به ایکه از کدام کانال استفاده می کنید) مقدار آن قرار دارد. فکر کنم قبلا در این انجمن در مورد جزیییات بیشتر صحبت شده
هر عددی هم که خوانده شد میریزید در SD card

a.moghadam
09-11-2012, 23:13
آها حالا متوجه منظورتون شدم. دقت در 1768 دوازده بیتی هست یعنی بهتون 0 تا 4095 می دهد. در رجیستر LPC_ADC->ADDR0 تا LPC_ADC->ADDR7 (بستگی به ایکه از کدام کانال استفاده می کنید) مقدار آن قرار دارد. فکر کنم قبلا در این انجمن در مورد جزیییات بیشتر صحبت شده
هر عددی هم که خوانده شد میریزید در SD card

ممنون از آقای زرکوب
راستش مطالبی رو که گفتیدو میدونستم :0013:
مشکل اصلی من اینجاست که میخوام بدونم از کجا باید فهمید که رجیستر کی سر ریز میکنه ؟؟
وآیا مستقیم میشه اطلاعات موجود در رجیستر رو ریخت رو sd??? اگه میشه چطوری؟؟؟
اگه یه نمونه کد بذارید ممنون میشم
یه سوال دیگه:
برای ارسال این اطلاعات به sd از تابع SD_Send_DataBlock استفاده کرد؟؟؟میشه درباره پارامترهای این تابع هم توضیح بدید؟؟؟

mzarkoob
09-11-2012, 23:49
رجیستر کی سر ریز میکنه را متوجه نمی شم یعنی چه؟ کدوم رجیستر سر ریز می کنه!؟

a.moghadam
10-11-2012, 00:10
چون میخوام سیگنالها به طور پیوسته و در مدت زمان طولانی تبدیل شن .رجیستری که نتیجه تبدیل توش میره یه زمانی بلخره پر میشه و به قولی سر ریز میشه.
از کجا بدونم رجیستر(همون رجیستر lpc_ADC0 که گفتید)کی پر میشه؟؟
چون میخوام به محض پر شدن تو sd بریزمش

mzarkoob
10-11-2012, 00:43
نه آقا درست مطلب را متوجه نشدید. نتیجه یک بار تبدیل آنالوگ به دیجیتال برای کانال 0 ریخته میشه داخل رجیستر LPC_ADC->ADDR0 که تا عمل Done انجام شد، قابل خواندن است. حال شما می توانید عدد داخل این رجیستر را داخل هر جایی یا متغییری قرار دهید. مثلا هر بار که تبدیل انجام شد مقدار خواند شده را داخل sd caed ذخیره کنید(چون طولانیه) یا یک آرایه تعریف کنید هر بار بریزه داخل اون :

int p[1000]; و در آخر از آن استفاده کنید.
حالا این که طول این آرایه چقدر می تونه باشه بهش دقت نداشتم تا حالا

a.moghadam
10-11-2012, 00:59
نه آقا درست مطلب را متوجه نشدید. نتیجه یک بار تبدیل آنالوگ به دیجیتال برای کانال 0 ریخته میشه داخل رجیستر LPC_ADC->ADDR0 که تا عمل Done انجام شد، قابل خواندن است. حال شما می توانید عدد داخل این رجیستر را داخل هر جایی یا متغییری قرار دهید. مثلا هر بار که تبدیل انجام شد مقدار خواند شده را داخل sd caed ذخیره کنید(چون طولانیه) یا یک آرایه تعریف کنید هر بار بریزه داخل اون :

int p[1000]; و در آخر از آن استفاده کنید.
حالا این که طول این آرایه چقدر می تونه باشه بهش دقت نداشتم تا حالا

آقا مهدی ممنون
فقط یه سوال میمونه از کجا باید فهمید که بیت Done این رجیستر یک شده و رجیستر قابل خوندن هست؟؟؟

a.moghadam
10-11-2012, 01:32
تا اونجایی که از یوزر منوال فهمیدم بیتهای 0 تا 3 و 16 تا 29 این رجیستر باید صفر باشن ،بیتهای 4 تا 15 هم مخصوص ذخیره نتایج هستند و بیتهای 30 و 31 هم وقتی تبدیل تمام میشه وبعبارتی رجیستر سرریز میکنه 1 میشن پس باید یه متغییر مثل

i=0xc000fff0
تعریف شه که نشون بده رجیستر پر شده
درست میگم؟