سلام به همگی
دوستان emwin رو تا حالاتست نکرده بودن دیشب تست کردم و واقعا خوشم ازش
فقط نکته ای که هست رم و فلش بالاتری میخواد با 1788 برد فروشگاه تست کردم
فیلمش هم گرفتم تا ببینید
Dropbox - HY lpc1788.mp4 - Simplify your life
سلام به همگی
دوستان emwin رو تا حالاتست نکرده بودن دیشب تست کردم و واقعا خوشم ازش
فقط نکته ای که هست رم و فلش بالاتری میخواد با 1788 برد فروشگاه تست کردم
فیلمش هم گرفتم تا ببینید
Dropbox - HY lpc1788.mp4 - Simplify your life
من هم چک کردم البته با برد LPC1768-Mini DK
با اینکه ال سی دی اون سریاله ولی خیلی عالی کار می کنه. من موفق شدم EmWin رو توی سیستم عامل RTX با تاچ اجرا کنم که همین مساله باعث شد 40 کیلوبایت حافظه رم مصرف بشه. البته حداقل از فلش فقط 60 کیلوبایت مصرف میشه.
این رو هم بگم که مجبور شدم از خیلی از قابلیتهای EmWin مثل Fading و Virtual Screen صرف نظر کنم.
اگه می خواهید از همه قابلیتهای اون استفاده کنید به رم بالا (حداقل96 کیلوبایت) نیاز دارید.
یک سوال دارم. از آقای زارعی: آیا شما GUI_SUPPORT_MEMDEV رو set کرده بودید؟(در فایل GuiConfig.h)
ویرایش توسط mansoory : 24-01-2013 در ساعت 10:15
فیلم رو دیدم. پرش داره که.
احتمالا GUI_SUPPORT_MEMDEV صفره. کار این ماکرو اینه که به EmWin اعلام کنه که از حافظه مجازی استفاده کنه. در اینصورت بعد از محاسبات ابتدا مقدار پیسکلهای ناحیه ای که قراره رسم بشه، در حافظه رم میکرو قرار می گیرند و بعد با استفاده از دستور انتقال پی در پی، به ال سی دی منتقل میشوند. این قابلیت مخصوصا وقتیکه ال سی دی سریال باشه سرعت نمایش رو خیلی بالامیبره
مگه حافظه در دستري 1768، 32 كيلوبايت نيست؟همین مساله باعث شد 40 کیلوبایت حافظه رم مصرف بشه
مگه دروايور هايي مثل ssd1963 و ... خودشون رم ندارن. پس چرا رم بيشتر.فقط نکته ای که هست رم و فلش بالاتری میخواد با 1788 برد فروشگاه تست کردم
اگر با اين وضعي كه باشه كه ميگيد. كتابخونه خوبي نست ديگه هيچي رم براي كارهاي ديگه مثل برنامه ها و ... نمي مونه
اگه میشه تجربه هاتون رو در کار کردن با این کتاب خونه این جا قرار بدید تا ما هم استفاده کنیم .
ممنون
حافظه 1768-64 کیلوبایته.
همه درایورها خودشون رم دارند. مثلا ili9320 حدود 177000بایت رم داره ولی مساله چیز دیگه ای است. فرض کنید یه پنجره نیاز به ترسیم مجدد داره. بجای اینکه پیکسل به پیکسل داده ها به ال سی دی منتقل بشه، اول ترسیم کامل در حافظه میکرو انجام میشه (همون منطقه ای که نیاز به ترسیم داره). بعد داده های پردازش شده اون ناحیه بصورت پی در پی به درایور منتقل میشه. در صورتیکه داده های هرپیکسل جداگونه منتقل بشه اون وقت برای هر پیکسل باید یکبار دستورSetPoint هم صادر بشه. ولی در حالتی که داده ها پی در پی ارسال بشه مثل EEPROM اول داده آدرس شروع GRAMارسال میشه و بعد یک ردیف داده پیکسلها دنبال هم فرستاده میشه تا انتهای خط. خط بعد هم به همین ترتیب... و اینطوری سرعت انتقال اطلاعات خیلی خیلی بالاتر میره.(فکر کنم حتی مختصات XوY نقاط هم حذف میشه )
این حالت در Emwin با یک کردن ماکروی GUI_SUPPORT_MEMDEV در فایل GuiConf.h فعال میشه
ویرایش توسط mansoory : 24-01-2013 در ساعت 13:12
درسته ، منظور ایشون استفاده از بافر گرافیکی هست که تو برنامه نویسی کامپیوتر هم استفاده میشه . درواقع موقع تغییر در یک ناحیه تصویر تو کامپیوتر از دستورات Get_Image یا Put_Image استفاده میکنیم ..
کتابخانه هایی مثل همین emWin و uCGUI و ... گرچه خیلی کامل هستند و سرعت برنامه نویسی رو بالا میبرند ولی نباید فراموش کرد که در ازای اون باید مقدار زیادی رام و مخصوصا رم رو فدا کرد . در میکرو های با ظرفیت پایین بهتره اشکال گرافیکی ساخته بشه تا جا برای برنامه اصلی هم باشه !
سلام
آره 64 كيلو بايت هست. منتها 32 تاي اون براي دستگاه هاي جانبي كنار گذاشته شده. حتي فرض هم كنيم كه 64 كيلو هم در دسترس باشه بازهم 40 كيلو فقط براي ui يه مقدار زياده. دوستان واقعا براي خود من هم ميزان خافظه در دسترس 1768 سوال شده.حافظه 1768-64 کیلوبایته.
من الان دارم روي يه پروژه كار ميكنم و تمام دنگ و فنگم شدن ميزان sram. اگر ايم ميزان 64 باشه كه عاليه. يعني بهتر از 32 ايي هست كه توي يوزر منوال گفته. خود من دارم يك كتابخونه طراحي ميكنم كه تا اينجاي كار حدود 10 كيلو رم مصرف ميكنه اما كار كردن با 1768 و ... هلو ميكنه. به زودي ( توي 4و5 ماه آينده خبرش رو ميدم)
همه درایورها خودشون رم دارند. مثلا ili9320 حدود 177000بایت رم داره ولی مساله چیز دیگه ای است. فرض کنید یه پنجره نیاز به ترسیم مجدد داره. بجای اینکه پیکسل به پیکسل داده ها به ال سی دی منتقل بشه، اول ترسیم کامل در حافظه میکرو انجام میشه (همون منطقه ای که نیاز به ترسیم داره). بعد داده های پردازش شده اون ناحیه بصورت پی در پی به درایور منتقل میشه. در صورتیکه داده های هرپیکسل جداگونه منتقل بشه اون وقت برای هر پیکسل باید یکبار دستورSetPoint هم صادر بشه. ولی در حالتی که داده ها پی در پی ارسال بشه مثل EEPROM اول داده آدرس شروع GRAMارسال میشه و بعد یک ردیف داده پیکسلها دنبال هم فرستاده میشه تا انتهای خط. خط بعد هم به همین ترتیب... و اینطوری سرعت انتقال اطلاعات خیلی خیلی بالاتر میره.(فکر کنم حتی مختصات XوY نقاط هم حذف میشه )
این حالت در Emwin با یک کردن ماکروی GUI_SUPPORT_MEMDEV در فایل GuiConf.h فعال میشهخب بافر گرافيكي همون حافظه درايور هست ديگه كه توي PC بهش VRAM هم گفته ميشه. مساله اين نيست كه ديتا يهو يه جا بره يا تكه تكه. شما سه حالت ميتوني كار كني:کتابخانه هایی مثل همین emWin و uCGUI و ... گرچه خیلی کامل هستند و سرعت برنامه نویسی رو بالا میبرند ولی نباید فراموش کرد که در ازای اون باید مقدار زیادی رام و مخصوصا رم رو فدا کرد . در میکرو های با ظرفیت پایین بهتره اشکال گرافیکی ساخته بشه تا جا برای برنامه اصلی هم باشه !
1. ناحيه شروع GRAM رو مشخص كني و داده رو انتقال بدي. حالا اين داده مي خواد محاسبه شه يا اينكه مستقيما توسط هرچيزي مثل DMA ارسال بشه. مساله اينه كه توي اين حالت شما يه ناحيه مستطيلي داري و بايد اون رو پر كني.
2. هر دفعه مختصاتي رو كه ميخواي بدي و داخلش بنويسي
3. حافظه VRAM رو بصورت يك حافظه اكسترنال تعريف كني. و استفاده كني.
و نتايج
1. روش اول براي ارسال عكس و نمايش تمام صفحه مناسب هست و خيلي سريعه. سرعت پردازنده شما حدود 100 مگ هست و سرعت انتقال حدود 40 مگ بس هر چه قدر هم پردازش انجام بديد مشكلي پيش نمياد. (البته نه هرچقدر)
2. اين روش كنده منتها مزيتش نسبت به روش اول اينه كه مي تونيد مواردي كه احتياج به شفافيت دارن مثل نمايش فونت رو به كمك نشون بديد.
3. اگر داريور اين روش رو ساپورت كنه كه هم ili ميكنه و هم ssd . مي تونيد به صورت يك رم خارجي نوشتن رو انجام بديد و مابقي كارها رو بسپريد به ميكرو. ( تا اونجا كه مي دونم ميكرو هاي stm ، دقيقا stmf103zet اين قابليت رو داره در مورد مدلهاي ديگه مثل 1768 و ... مطمئن نيستم.
من هر سه روش امتحان كردم و شخصا جواب هم گرفتم.
ویرایش توسط pswin : 24-01-2013 در ساعت 17:31
ممنون از توضیحاتتون
LCD که من استفاده می کنم سریاله _SPI__ به همین دلیل نمیشه باهاش مثل رم خارجی برخورد کرد.
توی دیتاشیت 1768 درباره RAM اینطوری توضیح داده:
1- 32KB of SRAM on the CPU with local code/data bus for high-performance CPU access
2- Two / One 16kB SRAM Blocks with separate Access path for higher throughput. TheseSRAM blocks maybe used for Ethernet, USB, and DMA memory, AS WELL AS FOR GENERAL PURPOSE CPU INSTRUCTION AND DATA STORAGE.
یعنی:
32 کیلوبایت از رم فقط توسط CPU قابل استفاده است و 2تا بلوک 16 کیلوبایتی میتونه توسط Ethernet, Usb و DMA و همچنین CPU استفاده بشه.
وقتی توسط Keil برنامه رو کامپایل کردم جمع سه بخش RO-data, RW-data و ZI-data حدود 40 کیلوبایت شد.(البته با درنظر گرفتن اینکه من از سیستم عامل RTX هم استفاده کردم که برخلاف انتظارم مقدار زیادی رم مصرف شد و شد این که ملاحظه می فرمایید وگرنه بدون RTX حدود 22 کیلوبایت مصرف میشه)
RO-data=12kB
RW-data=400byte
ZI-data=29kB
البته مفهوم این سه بخش رو نفهمیدم چیه و ممنون میشم اگه توضیح بدین.
----
من دوتا مثال روی برد اجرا کردم و باهم مقایسه کردم. اولی UCOS 2+UCGUI که توی سی دی همراه برد وجود داشت و دومی هم مثالی بود که با EmWin 5.14 برای LPC1768 نوشته شده بود با ال سی دی SPI.مشاهده کردم که UCGUI برای هر ترسیم از SetPoint استفاده می کرد و سرعتش خیلی خیلی پایین بود، به حدی که اجرای یک دستور GUI_Clear() حدود 2 ثانیه وقت میبرد. تصمیم داشتم که برد رو پس بدم ولی وقتی با EmWin تست کردم از سرعتش شگفت زده شدم. وقتی فایل LCD_SPI.c رو مطالعه کردم متوجه شدم که ili9320 درحالت سریال یک دستوری داره که میشه برای نوشتن پی در پی روی حافظش استفاده کرد و توی فایل از این قابلیت استفاده شده بود. وقتی که درفایل GUIConf.h ماکروی GUI_SUPPORT_MEMDEV یک باشه سرعت خیلی خیلی بیشتره بطوریکه که پرش تصاویر تقریبا حذف میشه.
ویرایش توسط mansoory : 26-01-2013 در ساعت 11:37
۱۲ کیلو رم برای مصرف سیستم عامل خیلی خوبه. اون مزیتی رو که سیستم عامل فراهم میکنه ارزش ۱۲ کیلو رم رو داره.
درباره مقدار رم LPC1768 که بهش میشه دسترسی داشت تحقیق کردم. 64 کیلوبایت درسته. 32 کیلوبایت اول بصورت مستقیم توسط CPU قابل استفاده است و 32 کیلوبایت دوم هم آدرس شروعش با 32 کیلوبایت اولی فرق داره ولی مشکلی نیست و توسط CPU قابل دسترسی است. در Keil با تنظیماتی که در تصاویر پیوست می بینید می توانید به 32 کیلوبایت دوم دسترسی پیدا کنید.
تو یوزرمنوال emWin نوشته برای استفاده از هرکدام از امکانات اون به چه مقدار رم نیاز داره.
من یکم باهاش کار کردم و می تونم این مراحل رو توضیح بدم، ولی بهتره کسانی که مسلط هستند آموزش رو شروع کنند.
مواردی که من یاد گرفتم:
1-Config کردن LCD Spi و TouchScreen
2- تنظیمات اولیه
3- راه اندازی emwin در RTX(سیستم عاملی که در keil هست)
4- نحوه ترسیم پنجره ها و تنظیم خواص آنها. کار با GUI_MEMDEVICE
5- نحوه ترسیم و دسترسی به Widget ها(کنترل های Button , Text, labelو غیره) در emwin
6- نحوه کار با CallBack ها (رویدادهای window manager مثل Button_click وغیره)
این موارد رو با برد LPC1768-Mini-DK آزمایش کرده ام
ویرایش توسط mansoory : 09-02-2013 در ساعت 09:27
آقای منصوری شما هم شکسته نفسی میکنی ها ! خوب این چیزایی که کار کردید خیلی هم خوب و کامله و بقیه ی موارد دیگه در صورت راه اندازی اولیه کاری نداره . خیلی ممنون میشیم اینجا قدری ما رو هم فیض رسانی کنید .
نه عزیز، شکسته نفسی چیه.
تواین انجمن کسایی هستن که تسلط کافی روی emwinدارند و فن بیانشون هم خوبه. من از هرکدوم از بخشهایی که گفتم ، یه چیزایی درحد اینکه کار خودم راه بیافته فهمیدم. واقعا لازمه که دوستان دیگه ای که تسلط کافی دارند آموزش رو شروع کنند. اگه صلاح میدونید من هرچی یادگرفتم اینجا بگم ولی تضمین نمیکنم که 100 در100 درست باشه.
باشه.
اولین قدم اینه که emwin رو دانلود کنید. ورژن آخرش 5.18 است که قابلیتهای زیادی داره و به همون نسبت به RAM بیشتری برای اجرای موفق نیاز داره.
شما باید ابتدا از سایت LPCWARE.com ورژن مورد نیازتون رو دانلود کنید. چیزی که من دانلود کردم ورژن 5.14 است (NXP_emWin514_MCB1700_BSP ). نسخه BSP خیلی بهتر از نسخه خام اونه چون شامل تنظیماتیه که ال سی دی رو برای emwin تعریف می کنه. خوشبختانه این ورژن 514 که دانلود شده برای LCD سریال بوده و من فقط زحمت معرفی پینها رو کشیدم.
اگر شما از مد سریال استفاده نمی کنید اصلا ناراحت نباشید. ورژن 518 BSP برای LPC1788 و ال سی دی 16 bit تنظیم شده. فقط یادتون باشه توابع دسترسی به السیدی در emwin بسیار بهینه و ردیف شده است. نیازی نیست که شما از فایل glcd.c که بعنوان درایور ال سی دی همراهش فروخته میشه استفاده کنید. درمورد ال سی دی های سریال این هشدار خیلی جدیه چون باعث کاهش شدید سرعت نمایش میشه.
امروز دفترم رو نیاوردم. انشالله 23 بهمن دفترم رو بیارم و چیزهایی که یادداشت کردم رو براتون بگم. این فایلها رو دانلود کنید. پیشنهاد می کنم هردو ورژن 518 و 514 رو دانلود کنید. دلیلش رو بعد عرض می کنم.
518:
emWin 5.18 board support package for EA1788 Board | www.LPCware.com
514:
NXP_emWin514_BSP | www.LPCware.com
توضیح:
ظاهرا این فایل در سایت تغییر کرده. الان که بازش کردم دیدم که برای LPC1788 تغییرش دادن.
برای LPC1768 از این لینک استفاده کنید :
https://www.dropbox.com/s/t7s8nkmhno...Win514_BSP.zip
موفق باشین
ویرایش توسط mansoory : 02-12-2013 در ساعت 10:10
سلام.
پس از دانلود فایلها باید اونها رو که دومرحله فشرده شده اند باز کنید. پس از باز کردن شاخه اصلی، مشاهده می کنید که یک فایل به نام Simulation وجود داره که می تونید از این فایل برای کد نویسی هاتون در Visual studio استفاده کنید (و البت شبیه سازی).
خب بریم سر اصل مطلب.
تنظیمات emwin چند مرحله داره که خیلی قشنگ توی راهنمای پی دی اف اون توضیح داده شده. این تنظیمات شامل مراحل زیر است
1- مقدار حافظه ای که شما دوست دارید به emwin ببخشید. (برای استفاده بعنوان بافر گرافیکی)هرچی بیشتر بهتر.
2- تنظیمات LCD
3- مشخص کردن کد رنگ
4- تابع init_controller
این تنظیمات در فایلهای زیر هستند: GUIConf.c, LCDConf.c , GUI_X.c. یک فایل به نامSimConf.c هم هست که من نگاهش نکردم.
تابعی به نام GUI_Init همه تنظیمات رو می خونه و اجرا میکنه. از LCD شروع کنیم.
-----------------
بخش اول LCD:
emwin به دو روش با LCD کار میکنه. روش مستقیم و غیر مستقیم. در روش مستقیم LCD مانند یک حافظه RAM می مونه که بصورت موازی بهش دسترسی پیدا می کنیم. صفحه های 7 اینچ و بزرگتر همچین قابلیتی دارند. Emwin توصیه می کنه که اگه به سرعت نمایش خیلی بالا نیاز دارید از این LCD ها استفاده کنید. روش دوم غیر مستقیمه که دومرحله تنظیمات دارد. LCD که در برد LPC1768-mini-DK استفاده شده ili9320 است که بصورت SPI قابل استفاده است. اگر از روش مستقیم استفاده می کنید پردازنده 1768 به دردتون نمیخوره و باید به سراغ 1788 بروید.(چون LPC1788 واحد کنترل حافظه خارجی یا EMC داره)
الان شما باید نوع صفحه نمایشتون رو باتوجه به توضیحاتی که دادم انتخاب کنید. به صفحه 909 Manual مراجعه کنید.درایور Ili9320 درشاخه GUI_FlexColor قرارداره.
خبر خوب اینه که emwin زحمت کشیده و مجموعه ای از فایلهای تنظیمات برای LCDهای مختلف فراهم کرده. باتوجه به نوع LCD می تونید فایل LCDConf.c مربوطه رو از شاخه Samples\LCDConf پیدا کنید. هنگام پیداکردن اون به رزولوشن و بیت بر بپیکسل صفحه نمایشتون دقت کنید. درباره ili9320 باید 320*240 و نوع 16 بیت از شاخه GUI_FlexColor انتخاب بشه(متاسفانه برای 18 بیت اون فقط درایور دسترسی مستقیم نوشته شده). به دیتاشیت LCDتون مراجعه کنید. فایل LCDConf.c رو به همراه فایل LCDConf.h در فولدر Config کپی کنید.
اگه از روش مستقیم استفاده می کنید، کار شما در این مرحله تقریبا تمومه و باید منتظر بشین تا بقیه تنظیمات رو خدمتتون عرض کنم.//////
---- دوستان هر اشکالی که از نظر فنی در مطالبی که من مینویسم مشاهده می کنید حتما بهم گوشزد کنید.ممنون میشم---
ویرایش توسط mansoory : 01-12-2013 در ساعت 10:30
فایل LCDConf.c رو باز کنید.
در این فایل یک مشت توابع و ماکروها رو ملاحظه می فرمایید. اگر فایل رو درست انتخاب کرده باشین، توابعی به نام _write_reg یا set_reg می بینید که داخل توابع دیگه استفاده شده اند ولیکن خودشون تعریف نشده اند.(درفایلهای مربوط به LCD بادسترسی مستقیم این توابع داخل همان فایل تعریف شده اند)
اصل ماجرا همین ها هستند.
درواقع اینها توابعی هستند که مربوط به ارسال و دریافت یک بایت، دو بایت، 4 بایت و یا زنجیره ای از بایتها هستند. لیست توابعی که باید تعریف شود در صفحه915 راهنما وجود داره. برای بعضی از ال سی دی ها،emwin فایلهایی رو آماده کرده که می تونید در فولدر Sample\LCDX اونها رو پیدا کنید. در اینجا شما به فایل GLCD.C که همراه ال سی دی فروخته میشه نیاز دارید. فایل رو باز کنید و توابع write_reg یا set_reg رو با توابعی که در فایل GLCD.C برای این منظور نوشته شده اند مقایسه کنید. اگه اختلافی ندیدید به سلامتی زدید به هدف وگرنه باید اصلاحاتی انجام بدید تا این توابع درست کار کنند. توابعی که در آخرشون M هست مثل _write_reg08M برای انتقال زنجیره ای از بایتها کاربرد دارند. دقت کنید که تمام توابعی که در LCDConf.c برای تبادل اطلاعات با LCD اومده رو باید تعریف کنید.برای ili9320 که در مود سریال کار میکنه، این فایل قبلا آماده شده و در شاخه System\Hardware قرار گرفته. در آخر پینها رو باهم مطابقت بدهید. نکته ای که ممکنه باعث سردرگمی بشه حرف A0 و A1 هست که جلوی این توابع نوشته شده. این درواقع یک جور آدرس دهی است که در این مود دو آدرس 0 و 1 داریم و برای هر آدرس هم یک دسته توابع Write باید وجود داشته باشه. آدرس صفر برای ارسال/دریافت فرمان و آدرس 1 برای ارسال/دریافت داده مورد استفاده قرار میگیره.
خب اگه همه موارد رو چک کردید به فایل LCDConf.C برگردید.
ویرایش توسط mansoory : 11-02-2013 در ساعت 13:29