سلام حق با مهندس منصوریه.
چیزی ک شما مد نظرته وابسته به سرعت خواندن و دسترسی cpu به داده های عکس و سرعت انتقال اونها به lcd داره. بهتره عکس حتی اگر تو sd ذخیره شده ابتدا کامل خونده بشه و در رم emc (یا اگر جا بشه داخلی) قرار بگیره بعد ازونجا لود بشه تو lcd.
رابط بین lcd و میکرو هم هرچه پارالل تر بهتر، یعنی از 18 بیتی موازی استفاده کن بالفرض.
تابع مورد استفاده درایورت هم بهینه کن ازین نظر که داده ها رو به صورت بلوکی به lcd بفرسته برا نمایش عکس.
اینا رعایت بشه با 1788 تصویر سریعی میتونی داشته باشی.
ویرایش توسط sjafarim : 24-08-2013 در ساعت 13:04
روش بلوکی به این معنیه که برای ارسال دیتا پیکسل ها به جای اینکه برای هر پیکسل یک فرمان سپس یک داده ارسال بشه، یک فرمان برای بلوک ارسال شده سپس کل داده های ان بلوک پشت سر هم ارسال میشه،اینجوریه که سرعت زیاد میشه،مربوط به میکرو نیست بلکه روش انتقالیه که مربوط به درایور lcd هست.
در مورد bmp هم خدمتتون بگم که در واقع فرمت عکس تا اونجایی در سرعت نقش داره که شما هنوز داده های rgb پیکسل هارو از تو فایل بیرون نکشیده باشید و در رم قرار داده نباشید.یعنی فرمت فایل فقط زمان decode کردن فایل رو تغییر میده، هرچه از فرمتی با compression کمتر برای نگهداری فایل استفاده کنید قطعا زمان decode کردن کمتر خواهد بود در ازای حافظه مورد نیاز بیشتر(معمولا!) برای نگهداری فایل.
سریعترین حالت نگهداری عکس همون برنامه هایی هست که خودشون عکسو میگیرن و یک فایل هدر با داده های پیکسلی 8-16-24 یا ... بیتی بهتون تحویل میدن.
توضیحات کامل را اقای جعفری دادن من چند نکته اضافه می کنم
من با1768 کار می کنم و 1788 ندارم نمی دونم سرعت خودند از nand flash یا norflash چقدره در 1768 هنگامی که من از روی فلش داخلی عکس لود می کنم برای lcd320*240 سرعت خیلی خوبه و هیچ گونه پرشی ندارم ولی چون حافظه ام محدوده وچندتا عکس بیشتر نمی شه به این روش پخش کرد از SD استفاده می کنم که در این قسمت خواندن از SD است که وقت زیادی می گیره برای همین رفتم سراغ JPG و دارم یه کارهایی می کنم زمانی که تمام شد برنامه را در قسمت پخش فیلم که در امضا من هم هست قرار می دهم درضمن در ان تاپیک در مورد روش بلوکی و تابعش صحبت کردیم شما تست کنید ببیند برای این LCD 7 inch شما چقدر طول می کشهlcd را رنگ امیزی کنه
فکر نکنم این موضوع ربطی به emwin داشته باشه شما باید برنامه ای در هدر lcd خود بنویسید که به صورت بلوکی پیکسل ها را پر کنه برای مثال برنامه ای شبیه این:
کد:void LCD_write_pic_fast (int x0, int y0 , const unsigned short *image) { unsigned int i; LCD_WindowMax(); LCD_SetCursor(0,0); LCD_CS(0) wr_cmd(0x22); wr_dat_start(); for(i = 0; i < (WIDTH*HEIGHT); i++) wr_dat_only(image[i+2]); wr_dat_stop(); }
به نظر من کار را ساده تر کنید بهتره ابتدا بدون emwin تست کنید بعد که جواب گرفتید emwin هم اضافه کنید
دوستان من هنوز وقت نکردم emwin را راه اندازی کنم اگر مثالی پورت شده کسی برای lpc1768 داره ممنون می شم در این قسمت قرار بدهید تا ما هم بتونیم سریع تر پیش بریم
ویرایش توسط skiboys : 26-08-2013 در ساعت 19:00
دوستان کسی با دستور زیر آشنایی داره؟
برای رسم از حافظه خارجی مثلا mmc ابتدا باید توسط نرم افزار تبدیل کد به عکس emwin به یک فایل تکست با فرمت عکس مثلا JPEG به صورت stream تبدیل و داخل مموری قرار داده و با استفاده از دستور زیر
[PHP]int GUI_GET_DATA_FUNC(void * p, const U8 ** ppData, unsigned NumBytesReq,
U32 Off);[/PHP]
مکان عکس رو به دستور رسم عکس از حافظه خارجی مثلا دستور زیر
[PHP]int GUI_JPEG_DrawEx(GUI_GET_DATA_FUNC * pfGetData, void * p,
int x0, int y0);[/PHP]
بدیم. خیلی تو نت دنبال این گشتم که چطور میتونم فایل استریم رو به این تابع GUI_GET_DATA_FUNC معرفی کنم یعنی آرگومان های ورودی رو چی بزارم. البته چند وقت پیش تو نت یک مثال تو یک سایتی دیدم ولی امروز چندین ساعت گشتم ولی نتونستم اون رو پیدا کنم کهفکر کنم به جای آرگومان اولی یک چیزی شبیه openfile نوشته بود.یکسری توضیحات صفحه 174 داکیومنت هست ولی چیزی متوجه نشدم و ساختار داخلی این تابع رو هم نوشته
[PHP]Example (BMP, GIF and JPEG)
The following code excerpt shows how to implement a GetData function for usage
with BMP, GIF and JPEG data:
int APP_GetData(void * p, const U8 ** ppData, unsigned NumBytes, U32 Off) {
static char _acBuffer[0x200];
HANDLE * phFile;
DWORD NumBytesRead;
phFile = (HANDLE *)p;
//
// Check buffer size
//
if (NumBytes > sizeof(acBuffer)) {
NumBytes = sizeof(acBuffer);
}
//
// Set file pointer to the required position
//
SetFilePointer(*phFile, Off, 0, FILE_BEGIN);
//
// Read data into buffer
//
ReadFile(*phFile, acBuffer, NumBytes, &NumBytesRead, NULL);
//
// Set data pointer to the beginning of the buffer
//
*ppData = acBuffer;
//
// Return number of available bytes
//
return NumBytesRead;[/PHP]
من mmc رو با کتابخانه کیل راه انداختم حال اگه دوستان بتونن نظری بدهند که من با سخت افزار تست کنم
مهندس دی کمپرس کردن یه عکس جی پی جی خیلی زمانبر هستش شما چرا از توابع fat برای این میکرو استفاده نمیکنید عکس رو بصورت فایل باینری روی اس دی کارت دخیره کنید و از روی اس دی کارت فایلو باز کنید و 16 بیت 16 بیت بخونید و روی اس دی رم بریزید با dma و عکسو روی ال سی دی نشون بدید من با توابع دیکد جی پیگ با اس تی ام 32 کار کردم سرعتش تعریفی نداره
دقیقا منم همینو میگم،نمیدونم چرا بچه ها اینقد دنباله decode کردن هستن!
به نظر من فقط زمانی این کار توجیه داره که دستگاه مستقیما از کاربر قرار باشه عکس دریافت کنه و نمایش بده.
titery:
من اون بخشو خوندم، باهاش کار نکردم ولی واقعا بد نوشتنش، کاملا گنگه، پوینتراش معلوم نیس چجوریه قضیش، من که نحوه عملکردشو نفهمیدم ...
در مورد ارسال بلوکی در emwin هم تابع LcdWriteDataMultiple یا همان pfWriteM16_A1 به احتمال قوی مخصوص ارسال بلوکیه.
نحوه عملکرد توابع سطح پایین درایور های lcd در emwin هم قابل تغییر (فهم!) نیستن.
ویرایش توسط sjafarim : 27-08-2013 در ساعت 01:37
من زیاد فرمت خاصی مد نظرم نیست(دیدم تو فروم بیشتر سر JPEG بحث شده من این مثالش رو گفتم) چون با همین نرم افزار emwin فرمت های دلخواه از جمله PNG,BMPو..میشه تبدیل کرد.یکی از مزیت های دستوری که گفتم موقع رسم یک لاین از پیکسل ها را لود و بعد رسم میکنه و اگر میکرو حافظه(حتی رم)کمی مثل 1768 داشته باشه قایل استفاده هست درست سرعت رسم پایین میاد ولی بستگی به این داره کجا بخواهیم استفاده کنیم (که حتی آهسته رسم شدن میتونه خودش یک افکت باشه).حالا بازم اگه کسی بتونه کمک کنه تو این زمینه عالی میشه؟
مهندس رحیمی در مورد توابع dma که فرمودید میشه یکم توضیح دهید کجا بهش اشاره(مطلب) شده؟
ویرایش توسط titery : 27-08-2013 در ساعت 09:58
سرعت نمایش رو تست کردم بدین صورت که 80 بار صفحه رو از رنگ های مختلف fill کردم و زمان کل رو تقسیم بر تعداد کردم:
بدون emwin در السیدی 7 اینچ هربار تقریبا 175 میلی ثانیه
با emwin قایل تست نبود چون وقتی دستور رسم بعدی رو میدادم ادامه صفحه که هنوز از رنگ قبل پر نشده بود رو رنگ جدید پر میکرد
سلام اقای رحیمی ما پیش دوستانی مثل شما داریم درس پس می دیم
بله بهترین حالت اینه که مستقیم از SD بریزیم داخل lcd بدون پردازش و با استفاده از DMA
شاید من زیاد گیر دادم به JPG همش از سر کنجکاوی بود که چطور یک عکس BMP به اندازه 125 کیلو حجم داره ولی همون عکس با فورمت JPG به اندازه 25 کیلو می شه و با کیفیت بهتر و اخرش سر از فرمول های ریاضی در اوردم خیلی جاهاش جالب بود و خیلی خوب بود وخیلی جاهاش دیگه سخت شده بود
در کل اگه JPG هم به صورت بلوکی ریخته بشه سرعت خیلی خوبه شما به صورت پیکسلی با JPG کار کردید؟
ولی همچنان jpg درگیری CPU را داره که پردازش زیادی از CPU می گیره و بقیه کارها مختل می شه
به هر حال دوستان ببخشند اگر صحبت های بی مورد کردم یا پر حرفی کردم
ویرایش توسط skiboys : 27-08-2013 در ساعت 12:34
در مورد استفاده از تبدیل شده فایل عکس به باینری خوب خیلی راحته شما هرچی که داری از مموری میخونی در حقیقت اطلاعات پیکسلات هستش بدون اینکه وقتی صرف دیکد کردنو از فرمول رد کردنو این حرفا داشته باشه من این حرکتو با میکرو اس تی ام 32 و با کمک اقا صادق گل پیاده کردم برنامه ای که ایشون برای تبدیل عکس به فایل باینری نوشته بودن محشر بود فقط عکسو بهش میدادم تبدیل به فایل باینری میکردم میریختمش رو اس دی کارت و تو برنامه با توابع فت فایلو باز میکردم و 24 بیت 24 بیت میخوندم و تک تک پیکسلهارو میچیدم کنار هم ولی با توجه به اینکه روش بلوکی سریعتر هستش وقتی که خوندین باید بصورت یه بلوک پشت سر هم اطلاعات رو بفرستین روی ال سی دی اینم یکم مهارت میخواد متاسفانه منم مثل بقیه دوستان برنامه اماده گرفته بودم و این قسمت dma او تو خود برنامه بود و منم چون درست کار میکرد اصلا روش ریز نشدم ولی مطمعننا خروجی تمام برنامه های emwine برای dma پورت شده فقط باید یکم با هدرا سروکله زد فهمید اونجا که داره اطلاعات پیکسلارو نمایش میده از چه طریقی با dma ارتباط داره برقرار میکنه همین نکته خاصی هم نداره ولی زحمت چرا؟؟!!
ویرایش توسط kamikazi : 27-08-2013 در ساعت 12:44
سلام دانیال جان.
-میدونی چرا jpg حجمش کمتره؟چون الگوریتم داخلی کدینگش دینامیکه، وارد جزئیات نمی خوایم بشیم، compression یه علم خیلیییی مفصلیه، اتفاقا کیفیت jpg اصلا بیشتر از bmp نیست چون میزان lossi بودنش بیشتره یعنی در ازای حجم کمتر اطلاعات بیشتری از عکسو حذف میکنه و بجاش تخمین میزنه با روش های ریاضی.
- jpg مستقیم بصورت بلوکی که نمیشه ریخت، داده های دیکد شده rgb نهایتا به lcd داده میشه و فرمت عکس مهم نیست، فرمت مال قبل دیکد کردنه.
- اصلا پرحرفی و بی مورد نیست، compression فوق العاده جذاب و مهمه، تو مخابرات حرف اولو میزنه، به فرض اگر کدینگی ابداع بشه که فقط روی داده های متنی مثلا rate دو برابر unicode یا ascii داشته باشه، سرعت اینترنتو بدون تغییر سخت افزارهای کل دنیا میشه 2 برابر کرد!
- یعنی اینکه شما از هدر درایوری که برا lcd نوشتی فقط توابع خام نوشتن و خواندن یک یا چند داده و دستور رو به emwin معرفی می کنید، اونه که تصمیم میگیره چجوری ازشون استفاده کنه، یعنی کی داده بفرسته، کی دستور بفرسته، چند تا داده بفرسته، داده هارو بلوکی بفرسته یا تکی و ... که اونم طبق اینکه کجا و چقدر از تصویر lcd رو باید تغییر بده تصمیم میگیره.این یعنی چی؟ یعنی من نمی تونم هدری که خودم نوشتم را به emwin بدم? برای درایور می گم
دوستان یکی یک مثال emwin برای 1768 بده من یک تستی بگیرم
چرا اینجوری تیکه تیکش کنی میشه ولی این تیکه ها کم نیستن هی هم باید پرش کنی بعیده خیلی سریع تر بشه ، همون بهتره کلشو دیکد کنی یه بلوک بفرستی.