NOTICE توجه: این یک موضوع قدیمی است که آخرین پست ارسالی آن مربوط به 2604 روز قبل است . لطفا فقط پاسخ ها ، سوالات و درخواست های 100 درصد مرتبط را به آن ارسال کنید و برای درخواست ها و سوالات جدید موضوع جدیدی را ایجاد کنید
نمایش نتایج: از 1 به 13 از 13

موضوع: امکان ارتقاء Sram در LPC1788

  1. #1
    عضو جدید
    تاریخ عضویت
    Feb 2017
    نوشته ها
    12
    تشکر
    1
    تشکر شده 2 بار در 1 پست

    New امکان ارتقاء Sram در LPC1788

    با سلام

    دوستان من یه برد lpc1788 کویر الکترونیک رو گرفتم و میخوام با استفاده از دو کانال ADC دو تا سیگنال رو با فرکانس نمونه برداری 275 هرتز یا مثلا 125 هرتز بخونم و هر کدومو توی یه آرایه بریزم.

    از اونجایی که لازمه طول نمونه گیریم 2دقیقه باشه، با نرخ نمونه گیری مثلا 125 هرتز، من 15000 نمونه رو باید از adc داخل این آرایه ذخیره کنم.

    یعنی مثلا دو تا آرایه sig1 و sig2 داریم، توی حلقه ی while که حدود دو دقیقه طول میشکه، دو تا کانال ADC مکرارا خونده میشن و مقدار خونده شده در درایه ی i-اُم آرایه های sig1 و sig2 نوشته میشن.

    در این صورت بعد از حلقه من دو تا آرایه ی 15000 تایی دارم که این حجم از داده حتی اگه int هم باشه انقدر زیاد میشه که میکرو هنگ میکنه! ضمنا.....!!!! تازه قسمت اصلی کد من که قسمت اصلی کارم هستش و پردازش زیادی روی این دوتا سیگنال انجام میشه، بیش از 2000 خطه و قاعدتا توش کلی متغیر double داره که الا ماشاله فضا میخواد.

    Sram فعلی میکرو 96KB هستش و نیاز به Sram بیشتری هست فکر میکنم. چطور میتونم Sram خارجی وصل کنم به این برد؟ و اینکه آیا توی این قضیه نمیشه اصلا با هیچ کلکی از SDram کمک گرفت؟!

    ضمنا یه جورایی تازه کارم توی کار با میکرو آرم اگه توضیحاتتون بیسیک تر باشه ممنون میشم. ارادت.

  2. # ADS
    Circuit advertisement
    تاریخ عضویت
    Always
    نوشته ها
    Many
     

  3. #2

  4. #3
    عضو جدید
    تاریخ عضویت
    Feb 2017
    نوشته ها
    12
    تشکر
    1
    تشکر شده 2 بار در 1 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mzarkoob نمایش پست ها
    سلام
    خوب مهندس رم خارجی که داره برد 1788 کویر !

    درسته داره SDram جداگونه داره ولی نمیدونم چرا وقتی حتی اونو هم initialize میکنم بازم میکرو هنگ میکنه!

    ببینین! من اول یه سری متغیر معرفی می کنم به برنامه:

    uint8_t indic[10];
    uint32_t adc_value;
    uint32_t sig1[2000];
    uint16_t i=0;

    که اینجا برای مثال تعداد درایه های آرایه ام رو 2000 فرض کردم. در صورتی که در اصل و واقعیت 15000 باید باشه! اونم دوتا آرایه! بگذریم... بعدش میام تنظیمات مربوط به پورت سریالمو انجام میدم:

    UART_CFG_Type UARTConfigStruct;
    UART_FIFO_CFG_Type UARTFIFOConfigStruct;
    بعد در واقع SDram رو initialize میکنم:

    SDRAM_32M_16BIT_Init();

    بعد در ادامه تنظیمات مربوط به سریالمو انجام میدم و پورتهای ADC رو مشخص میکنم و تنظیم میکنم که برای داده گیری آماده بشم، که دیگه اینجا نمی نویسم.

    بعد از تنظیمات ADC و سریال، توی یک حلقه ی while شروع میکنم به داده گیری یا data gathering که از ورودی ADC میخونم و میریزم توی متغیری به اسم adc_value و بعد در خط بعد توی درایه ی i-اُم از آرایه ی sig1 که در ابتدا معرفیش کردم ذخیره میکنمش:


    i<2000while(1)
    {
    // Start conversion
    ADC_ChannelCmd (LPC_ADC , ADC_CHANNEL_1, ENABLE);
    ADC_StartCmd(LPC_ADC,ADC_START_NOW);
    //ADC_BurstCmd (LPC_ADC , 1);
    //Wait conversion complete

    while (!(ADC_ChannelGetStatus(LPC_ADC, ADC_CHANNEL_1, ADC_DATA_DONE)));
    adc_value = ADC_ChannelGetData(LPC_ADC , 1);


    sig1[i]=adc_value;
    i++;

    بعد توسط توابع پورت سریال مقدار قرائت شده رو روی پورت سریال میفرستم. و بعد حلقه تموم میشه

    }

    و اینجا حلقه ی while تموم میشه! به ظاهر بعد از 2000 بار اجرا شدن باید حلقه استاپ کنه و نتایج دو هزار بار هم روی خروجی سریال نمایش داده بشه! ولی میکرو توی همون خطوط اول هنگ میکنه! یعنی خطی که اس دی رم رو داریم میشناسونیمش! این عکس رو توی لینک زیر ببینین، توی حالت دیباگ گرفتم:


    >>>>>>>>>>>>>>>>>>>>>>>فایل پیوست 9432 <<<<<<<<<<<<<<<<<<<<<<<<<<<



    جالب اینجاست که وقتی تعداد درایه های آرایه ی sig1 رو کم میکنم و میشه مثلا 200 تا یا کمتر .. همین کد اجرا میشه و هیچ ایرادی هم نداره! ممنون میشم کمکم کنین خیلی دیگه سر این داستان گیر کردم!
    ویرایش توسط soheil.azad : 20-02-2017 در ساعت 21:52

  5. #4
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

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

  6. #5
    عضو جدید
    تاریخ عضویت
    Feb 2017
    نوشته ها
    12
    تشکر
    1
    تشکر شده 2 بار در 1 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mzarkoob نمایش پست ها
    خوب مهندس آرایتونو در آدرس رم خارجی تعریف کردید!؟
    بفرمایید تا رم خارجی تعریف می کنید از چه طادرسی به بعد قابل دسترسی است؟

    راستش تغییری توی آدرسش ندادم و همون دیفالت هدرفایل اس دی رم سر جاشه! یعنی از آدرس: 0xA0000000 البته اگه منظورتون دستکاری آدرس هدر فایل باشه که توی عکس زیر گذاشتم:


    >>>>>>>>>>>>>>>>فایل پیوست 9433<<<<<<<<<<<<<<<<<<<<

    ضمنا توی هیچ جایی از کد آدرس رم خارجی رو ندادم و ارایه رو توی رم خارجی تعریف نکردم! و فقط توی ابتدای کد رم خارجی رو معرفی کردم. آیا همین کافی نیست؟! و الان که دارم فکر میکنم ظاهرا کافی نیست! و چطور باید این کارو بکنم؟!

  7. #6
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    خوبه خودتون متوجه شدید کافی نیست!
    خوب آدرس شروع آرایتون با اشاره گر باید تغیر بدید به رم خارجی

  8. #7
    عضو جدید
    تاریخ عضویت
    Feb 2017
    نوشته ها
    12
    تشکر
    1
    تشکر شده 2 بار در 1 پست

    New

    نقل قول نوشته اصلی توسط mzarkoob نمایش پست ها
    خوبه خودتون متوجه شدید کافی نیست!
    خوب آدرس شروع آرایتون با اشاره گر باید تغیر بدید به رم خارجی

    باسلام.مهندس ممنون از راهنماییتون. خیلی سریع انجامش دادم. و تا الان داشتم قسمتای دیگه ی الگوریتممو پیاده میکردم ولی به مشکل خوردم بازم یه جورایی. ببینین. من الان توی رم خارجیم هیچ آرایه ای تعریف نکردم و صرفا اومدم با پوینتر مقدار یک کانال ADC خونده شدم رو بردم توی رم خارجی ذخیره کردم. یعنی اینجوری:
    ;mypointer = (uint32_t *)SDRAM_BASE_ADD

    .
    .
    اینجاها مقدار ADC رو خوندم و بعد بردم به اینصورت توی رم خارجی نوشتم:
    ;mypointer++ = ADC_value1*

    این علامت پلاس پلاس هم بخاطر اینکه توی یک حلقه داره تکرار میشه. ولی در واقع اینجا من اومدم مقدار ای دی سی رو نوشتم توی حافظه نه اینکه بیام یک آرایه ی جداگونه توی رم خارجی تعریف کنم به اسم مثلا [signal[15000 و بعد بیام حالا مقدار ای دی سی رو بریزم توی مقدار i-ام این آرایه ام. اگه نتونم اینکار بکنم کل برنامه نویسی اصلیم که حدود2 تا 3 هزار خطه با مشکل مواجه خواهد شد.

    یه چیزی هست. اینکه میشه کلا یه آرایه به اسم signal با 15000 درایه تعریف کرد اول برنامه. ولی آیا میشه بعدش آدرس درایه های این آرایه ام رو مثلا از توی رم خارجی بدم؟ میشه؟! مثلا بگم مقدار ای دی سی رو بریز توی این درایه ی i-ام که در واقع این خونه ی i-ام آدرس رم خارجیه و به این ترتیب توی خونه فلان رم خارجی ذخیره بشه. خودمم قاطی کردم دیگه ببخشید اگه دارم پرت میگم!

  9. #8
    کاربر فعال
    تاریخ عضویت
    Mar 2010
    نوشته ها
    236
    تشکر
    101
    تشکر شده 246 بار در 163 پست

    پیش فرض

    شما داخل project option در تب target در بخش Read/Write memory Area می تونید ادرس و سایز رم خارجی رو به کامپابلر بدید تا
    خود کامپایلر از اون ادرس ها استفاده کنه و ارایه های بزرگ رو داخل رم خارجی بسازه .
    فقط باید قبل از شروع بخش init سکشن ها ، رم خارجی باید init شده باشه.(در میکرو St میشه بعد از تنظیم کلاک سیستم)

  10. تشکرها از این نوشته :


  11. #9
    مدیر انجمن mzarkoob آواتار ها
    تاریخ عضویت
    Jun 2011
    نام
    مهدی زرکوب
    نوشته ها
    2,902
    تشکر
    1,202
    تشکر شده 2,317 بار در 1,273 پست

    پیش فرض

    نقل قول نوشته اصلی توسط soheil.azad نمایش پست ها
    خودمم قاطی کردم دیگه ببخشید اگه دارم پرت میگم!
    مهندس مشکلی نداره این مبحث اشاره گر * و ادرس دادن & همین طوره! چون بیس برنامه نویسی می خواد و در اینجا در بحث dma این موضوع اساسی به کار میاد

  12. #10
    عضو جدید
    تاریخ عضویت
    Feb 2017
    نوشته ها
    12
    تشکر
    1
    تشکر شده 2 بار در 1 پست

    New

    نقل قول نوشته اصلی توسط mrm نمایش پست ها
    شما داخل project option در تب target در بخش Read/Write memory Area می تونید ادرس و سایز رم خارجی رو به کامپابلر بدید تا
    خود کامپایلر از اون ادرس ها استفاده کنه و ارایه های بزرگ رو داخل رم خارجی بسازه .
    فقط باید قبل از شروع بخش init سکشن ها ، رم خارجی باید init شده باشه.(در میکرو St میشه بعد از تنظیم کلاک سیستم)

    باسلام وتشکر از توجه شما. احسنت! دقیقا من یه همچین چیزی میخوام که خود میکرو بفهمه و آرایه های بزرگ رو ببره تو فضای حافظه و من نیاز نباشه هی آدرس دهی کنم. چون بالای دویس سیصد تا آرایه ی با طول بالا خواهم داشت. فقط یه چیزی ... اینکه من رم رو مطابق تصویر زیر آدرس دهی کردم تو همین قسمتی که شما فرمودین :


    >>>>>>>>>>>>>>>>>فایل پیوست 9438<<<<<<<<<<<<<<<<<<<<<

    1- آیا در همین حد کافیه؟! و اینکه اون رم داخلی on chip رو که تو توصویر بالا هم با علامت سوال مشخص کردم نیازی نیست حرکتی روش بزنم؟!
    2- این بحثی که میفرمایید :"با
    ید قبل از شروع بخش init سکشن ها ، رم خارجی باید init شده باشه" منظورتون از شروع سکشن ها کجاست؟! همون ابتدای تابع main رو میفرمایین که متغییر ها رو معرفی و قسمتهای مختلف میکرو رو init و راه اندازی میکنم؟! یعنی مطابق تصویر زیر:

    >>>>>>>>>>>>>>>>>>>>
    فایل پیوست 9439<<<<<<<<<<<<<<<<<<<<<<<<<<<


    اگه منظور همینه که این کارو کردم ولی وقتی توی حلقه دارم مقدار دهی میکنم به درایه های این آرایه ی مثلا در اینجا 12000 عضوی،
    باز هم میکرو هنگ میکنه و هیچی به هیچی! انگار نشناختته هنوز رم رو!

    اگه میبینین سه پیچم روی این داستان واسه اینه که واقعا باید این کار رو به هر قیمتی انجام بدم و تحت فشار هستم! واقعا تشکر از بذل توجه شما.
    ویرایش توسط soheil.azad : 01-03-2017 در ساعت 14:08

  13. #11
    عضو جدید
    تاریخ عضویت
    Feb 2017
    نوشته ها
    12
    تشکر
    1
    تشکر شده 2 بار در 1 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mzarkoob نمایش پست ها
    مهندس مشکلی نداره این مبحث اشاره گر * و ادرس دادن & همین طوره! چون بیس برنامه نویسی می خواد و در اینجا در بحث dma این موضوع اساسی به کار میاد

    تشکر از توجهتون مهندس. من مشکلی با برنامه نویسیش ندارم! چون الان حدود دو سه هزار خط برنامه نوشتم برای پردازش اصلیم و اینکه واقعا نه دیگه وقتش رو دارم و نه توانش رو که بیام کد اصلیم رو دوباره از اول با توجه به این تغییرات عوض کنم! متغییرام زیاد هستن! و من فکر میکنم باید راه ساده تری وجود داشته باشه. مثل این صحبتی که دوستمون در رابطه تعیین آدرس و سایز رم خارجی در سربرگ target کردن. قاعدتا اشتباه من اینجا بوده که اول نشستم کد اصلیمو نوشتم بعد به فکر پیاده سازیش روی میکرو افتادم ولی بحث اینجاست که واقعا چاره ای جز این کار نداشتم و باید ابتدا متوجه میشدم که این الگوریتم به صورت شبیه سازی نتیجه میده یا خیر! و وقتی نتیجه داد به فکر پیاده سازی افتادم! ولی فکرشو نمیکردم و نمیکنم که توی میکروهای آرم یه همچین محدودیت عجیبی وجود داشته باشه!!!!!!!!

    که البته قاعدتا راه حلی داره و من بلد نیستم و بدنبال پیدا کردنش هستم!

  14. #12
    کاربر فعال
    تاریخ عضویت
    Mar 2010
    نوشته ها
    236
    تشکر
    101
    تشکر شده 246 بار در 163 پست

    پیش فرض

    عکس ها پاک شدن ( چرا؟)
    من با میکروهای lpc اشنایی کاملی ندارم.شما یه پروژه جدید بساز و فقط متغییر ها رو تعریف کن بعد داخلشون بنویس و بخون ببین کار میکنه یا نه!!!!
    اگر نه که باید ببینی چرا رم کار نمیکنه.

    شما نباید دستی به تنظیمات رم داخلی بزنید.

    قبل از اینکه اصلا تابع main اجرا بشه کامپایلر میاد و متغییر های Global رو مقدار دهی اولیه میکنه.
    قبل از این اتفاق شما باید رم رو init کرده باشید. اگر تیک no init رو کنار off chip رم بزنید احتمالا ( تا حالا تست نکردم !!!) همون اول تابع main رو init کنید و بعدش ادامه روال برنامه.
    فکر کنم این شکی مشکل حل میشه

  15. #13
    عضو جدید
    تاریخ عضویت
    Feb 2017
    نوشته ها
    12
    تشکر
    1
    تشکر شده 2 بار در 1 پست

    پیش فرض

    نقل قول نوشته اصلی توسط mrm نمایش پست ها
    عکس ها پاک شدن ( چرا؟)
    من با میکروهای lpc اشنایی کاملی ندارم.شما یه پروژه جدید بساز و فقط متغییر ها رو تعریف کن بعد داخلشون بنویس و بخون ببین کار میکنه یا نه!!!!
    اگر نه که باید ببینی چرا رم کار نمیکنه.

    شما نباید دستی به تنظیمات رم داخلی بزنید.

    قبل از اینکه اصلا تابع main اجرا بشه کامپایلر میاد و متغییر های Global رو مقدار دهی اولیه میکنه.
    قبل از این اتفاق شما باید رم رو init کرده باشید. اگر تیک no init رو کنار off chip رم بزنید احتمالا ( تا حالا تست نکردم !!!) همون اول تابع main رو init کنید و بعدش ادامه روال برنامه.
    فکر کنم این شکی مشکل حل میشه

    تشکر از توجه شما ...
    1- عکسها رو چک کردم پاک نشدن که.. توی لینک هستش ها.. نمیدونم والا خودم که لینک فایل پیوست رو چک کردم بودن. روی لینک کلیک کنین باید بیان عکسا.

    2- من داخل رم با پوینتر نوشتم و بازخونی هم کردم که ببینم توی رم نوشته میشه یا نه. که شده. اوکی بوده مشکلی نداشته. ولی اینکه میکرو این رم خارجی رو بصورت خودکار بعنوان رم دیفالت بشناسه و خودش متغیرهای حجم بالا رو ببره توش ذخیره کنه و هی نیاز به آدرس دهی من بصورت پوینتری نباشه رو توش موندم.

    3-ببخشید خوب متوجه منظورتون از کل خط آخر صحبتتون نشدم! شما فرمودین :"
    قبل از این اتفاق شما باید رم رو init کرده باشید. اگر تیک no init رو کنار off chip رم بزنید احتمالا ( تا حالا تست نکردم !!!)
    "

    این جمله تون دو تا حالت میتونه داشته باشه:

    ****حالت اول - اینه که قبل از اجرای تابع main رم باید init بشه یعنی منظورتون اینه که تو خط های قبل از خط شروع تابع main رم رو init کنیم؟ خوب اینجوری که نمیشه که خطای conflicting type میده. یعنی اینکه این init کردن خودش با یه دستور و تابعی انجام میشه که این دستور فقط باید داخل تابع main و در ابتدای این تابع بعد از تعیین متغییرهای تابع main اجرا بشه. یعنی بعنوان مثال بصورت زیر:


    (int main(void
    }
    ;int x,y,z,o,p,q

    ;float k,h,g,f

    ;()SDRAM_32M_16BIT_Init
    ;()GLCD_Init
    ;(CLKPWR_ConfigPPWR (CLKPWR_PCONP_PCADC, ENABLE

    .
    .
    .
    و در ادامه بقیه روال کد و برنامه...


    ****حالت دوم- شاید منظورتون اینه که با زدن تیک no init توی سربرگ target این کار init کردن رم رو انجام بدم! این چه ربطی میتونه به init کردن رم داشته باشه!؟ چون no init به اسمش میخوره که به نظر عکس این داستان رو باید پیاده کنه!

    و اینکه فرمودین :"
    همون اول تابع main رو init کنید و بعدش ادامه روال برنامه.
    "
    خوب تابع main رو من init کردم دیگه!! اگه منظور از init کردن تابع main همون شروع تابع با متغیر های تعریفی در ابتدای تابع main و در ادامه ی اونها init کردن رم خارجی، کار init کردن تابع main رو انجام دادم!

    شما قبلا خودتون این کار رو کردین که یه رم رو بشناسونین و دیگه خیالتون از بابت حافظه راحت بشه و بتونین با خیالت راحت متغیر های با طول زیاد داشته باشین توی طول برنامه؟!
    ویرایش توسط soheil.azad : 01-03-2017 در ساعت 22:36

موضوعات مشابه

  1. خطای حافظه ی Sram برای Attiny13
    توسط mapmap در انجمن پرسش و پاسخ (نرم افزارهای تخصصی)
    پاسخ: 12
    آخرين نوشته: 10-09-2018, 10:10
  2. اتصال sram به stm32
    توسط mrmehdi در انجمن stm32
    پاسخ: 4
    آخرين نوشته: 09-05-2015, 12:26
  3. کم آوردن فضای sram
    توسط behnam6500 در انجمن AVR
    پاسخ: 12
    آخرين نوشته: 24-04-2012, 13:54
  4. سوال در مورد حافظه sram
    توسط mihman در انجمن AVR
    پاسخ: 13
    آخرين نوشته: 23-09-2011, 20:33
  5. ارتقاي sram در برد آموزشي آرم
    توسط ena در انجمن AT91 series (ATMEL)
    پاسخ: 8
    آخرين نوشته: 03-08-2010, 16:40

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •