جناب منصوری خیلی متشکرم این یه نمونه برنامه از lcd N96
اگه لطف کنید و یه نمونه برنامه emwin رو این برد و ال سی دی راه اندازی کنید ممنون میشم از بس به این ال سی دی ور رفتم دیگه کلافه شدم
سلام به همه
من از visual studio و یا eclipse برای emwin استفاده نکردم و داخل uVision4 نوشتمش . مشکلی که الان دارم اینکه فارسی تو uVision نمیشه تایپ کرد . با نرم افزار font converter for emwin5.18 ، فونت فارسی ساختم ولی به دلیل این مشکلی که عرض کردم نمیشه بهش دسترسی داشت و لطفا راهنمایی بفرمایید .
خودم متوجه شدم و برای ساخت و استفاده از فونت فارسی صفحه 889 به بعد به همراه قسمت font converter را بخوانید .
این فایلهایی که فرستاده اید ظاهرا با ili9320 همخوانی ندارد.
فکر کنم بهترباشه N96 را هم بیخیال بشین. البته من فایل درایورش رو دقیق میخونم ولی با نگاه اول به نظرنمیاد بشه ردیفش کرد. همونili9320 رو کار کنید بهتره. درایورش رو براتون میفرستم
این فایل رو تست کنید و نتیجه رو خبر بدین. اگر کار نکرد در تعاریف پورت داده، بجای 15، 16 رو امتحان کنید. موفق باشید
ویرایش توسط mzarkoob : 30-03-2014 در ساعت 14:17 دلیل: ادغام
سلام به همه ...
آقا ما یه سوال داریم ... کسی نیست جواب بده ...؟
چطوری این بورد 1788 رو با حافظه های خارجی راه اندازی کنم ...
سلام به همگی مخصوصا مهندس منصوری عزیز که زحمت زیادی کشیدن
دوستان برای ili9320 و... من داریورهاش دارم دقیقا چه مدلی دارین؟
من خودم ili9320 به صورت 8 بیت با Ucgui پورتش کردم ولی emwinزیر تست نبردم ببینم چطور هست
استاد ضمن خسته نباشید میشه لطف کنید یه پروزه کامل (شماتیک و برنامه با تمامی فایلهای h , .c. و... مورد نیاز) بفرستید شاید بالاخره بعد از 20 روز تلاش یه نتیجه بگیریم. خیلی متشکرم
اینم پروژه نمونه باشماتیک. وقتی که موفق شدید السیدی رو خارج از emwinراه اندازی کنید اطلاع بدهید. من هم درایور16بیت روبراتون آماده میکنم نگران نباشید
اصلاحیه:کار با تاچ
سلام.
مدتی بود باتاچ مشکل پیداکرده بودم و فهمیدم که تاچ رو اشتباه راه اندازی کرده ام! لطفا به توضیحات زیرتوجه کنید:
دو روش برای راه اندازی تاچ درemwin ارایه شده. روش اول استفاده از فایل GUI_X_TouchStoreState.Cبود که قبلا توضیح دادم. یه اشتباهی رخ داده اونجا که خدمتتون شرح میدم:
چندتا خطا وجود داره:
1- تاچ خیلی دقیق کارنمیکنه و اشاره گر موس پرشهایی داره
2- اگه یه باتون ایجاد کنید و اون رو لمس کنید، با اینکه دستتون رو از باتون برنداشته اید ولی باتون مدام کلیک و آزاد میشه...
----------------
برای مشکل اول، بجای استفاده از دستورات ReadXو ReadY از دستور Read_ADS7846 استفاده کنید.خروجی این دستور از نوع Coordinate است که درواقع یک استراکچر با دوعضو XوY است. این تابع 9بار از تاچ نمونه گیری میکنه و میانگین رو درخروجی قرار میده. به این ترتیب پرش ها ازبین میره.
[PHP]
#include <RTL.h>
#include "TouchPanel.h"
#include "Global.h"
#include "includes.h"
#include "GUI.h"
void TouchTask(void) {
static U16 xOld;
static U16 yOld;
static U8 PressedOld;
U16 x, y, xDiff, yDiff,Diff;
U32 res;
while(1)
{
res=(LPC_GPIO2->FIOPIN)&(1<<TP_IRQ_PIN_NUM);
GUI_PID_STATE State;
if(res==0)
{
Coordinate *scr=Read_Ads7846();
if (scr==(void*)NULL) continue;
State.x = scr->x;// TBD: Insert function which reads current x value
State.y = scr->y;// TBD: Insert function which reads current y value
State.Layer=0;
State.Pressed=1;
// The touch has already been pressed
//
if (PressedOld == 1)
{
//
// Calculate difference between new and old position
//
xDiff = (State.x > xOld) ? (State.x - xOld) : (xOld - State.x);
yDiff = (State.y > yOld) ? (State.y - yOld) : (yOld - State.y);
//
// Store state if new position differs significantly from old position
//
Diff=xDiff+yDiff;
if (Diff> 20)
{
xOld = State.x;
yOld = State.y;
GUI_TOUCH_StoreStateEx(&State);
}
}
//
// The touch was previously released
// Store state regardless position
//
else
{
if ((State.x > 0) && (State.y > 0))
{
xOld = State.x;
yOld = State.y;
PressedOld = 1;
GUI_TOUCH_StoreStateEx(&State);
}
}
}
//
// Touch screen is not pressed
// Store state if it was released recently
//
else {
if (PressedOld == 1) {
PressedOld = 0;
State.Pressed=0;
State.x=-1;
State.y=-1;
GUI_TOUCH_StoreStateEx(&State); //RELEASED!
}
}
//
// Make sure
//
// GUI_TOUCH_Exec();
GUI_X_Delay(10);
};
}
[/PHP]به جزییات تابع دقت کنید. تغییرات کوچکی داده ام.
اما مشکل دوم که خیلی مهمتره. من کلا نا امید شده بودم. بالاخره بعد از خوندن مجدد راهنما متوجه شدم که من از هر دوروش همزمان استفاده کرده ام.اگه دقت کنید در انتهای تابع دستوری به نامGUI_TouchExecرو حذف کردم.
این دستور مربوط به روش دومه.
نکته دیگه اینه که در دستور GUI_Touch_StoreState(x,y)، آرگومانها باید مقادیرکالیبره شده مختصات باشند. یعنی مقادیر اونها باید در محدوده سایز صفحه نمایش باشه. پس اینجا که من مستقیما مقادیر A/D تاچ رو به این تابع فرستادم اشتباه بوده و منجر به این میشه که اشاره گر موس از صفحه ناپدید بشه (چون مختصاتی که بهش داده میشه خارج از صفحه نمایشه)...
احساس کردم اگه مقادیر رو کالیبره کنم و بعد به دستور وارد کنم یه جورایی دارم دوباره کاری میکنم.چون emwin دستوری برای کالیبره کردن تاچ داره که اینطوری بی استفاده می مونه.. این شد که رفتم سراغ روش دوم...
ویرایش توسط mansoory : 01-04-2013 در ساعت 13:10
روش دوم راه اندازی تاچ:
در این روش ازدو تابعGUI_Touch_MeasureXوGUI_Touch_MeasureY برای ارسال خروجی کالیبره نشده تاچ بهemwin استفاده می کنیم.دوتابع دیگه به نامهایGUI_Touch_Activate_XوGUI_Touch_Activa te_Yهم هستند که در اخر توضیح میدهم.
در این روش، یک تابع به نام TouchTask میسازیم که محتویات آن باید هر 10 تا 20 میلی ثانیه یکبار فراخوانی شود.[PHP]
Void TouchTask()
{
GUI_Touch_Exec();
}[/PHP]تمام. این تابع رو مثلا در روال وقفه تایمر قرار بدهید یا اگر از سیستم عامل استفاده می کنید بصورت زیر تابع رو بنویسید:[PHP]
void TouchTask()
{
while(1)
{
GUI_TOUCH_Exec();
GUI_X_Delay(10);
}
}[/PHP]خب. حالا باید دوتا تابع زیر رو هم ایجاد کنید:[PHP]
int GUI_TOUCH_X_MeasureX(void) {
return Read_X();
}
int GUI_TOUCH_X_MeasureY(void) {
return Read_Y();
}
[/PHP]توضیح اینکه این دوتابع در فایل GUI_Touch_Analog.C وجود دارند.
تمام شد. emwin بقیه کارها رو انجام میده. دستورGUI_Touch_Execخودش این دوتا تابع رو فراخوانی می کنه و مقادیر خونده شده رو کالیبره کرده و با دستور GUI_Touch_StoreState وارد PID میکنه. نکته جالب اینه که ظاهرا چندبار نمونه گیری هم انجام میده چون خروجی کار بسیار باثبات و بدون پرش است.
دوتا تابع به نامهایGUI_Touch_ActivateXو GUI_Touch_ActivateYهم وجود دارند. این دوتا برای زمانی است که واحد A/D ما (در اینجا آی سی ADS7846) نیاز به Enable شدن داشته باشه (برای اعمال ولتاژ به صفحه تاچ). این توابع قبل از توابع اندازه گیری اجرا میشوند... در اینجا ما به اونها نیاز نداریم چون آی سی همیشه فعاله.
خب دیگه به فایل GUI_Touch_StoreState.C نیازی نیست. میتونید از پروژه خارجش کنید.
آزمایش کنید و لذت ببرید...
ویرایش توسط mansoory : 01-04-2013 در ساعت 13:06
سلام بالاخره حالت felx قسمت های مختلف راه افتاد برای فعال سازی لازم هست توابع زیر فراخوانی شود من توابع را در اول maintask فراخوانی کردم [PHP]
CHECKBOX_SetDefaultSkin(CHECKBOX_SKIN_FLEX);
DROPDOWN_SetDefaultSkin(DROPDOWN_SKIN_FLEX);
HEADER_SetDefaultSkin(HEADER_SKIN_FLEX);
RADIO_SetDefaultSkin(RADIO_SKIN_FLEX);
SCROLLBAR_SetDefaultSkin(SCROLLBAR_SKIN_FLEX);
SLIDER_SetDefaultSkin(SLIDER_SKIN_FLEX);
SPINBOX_SetDefaultSkin( SPINBOX_SKIN_FLEX);
BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
PROGBAR_SetDefaultSkin(PROGBAR_SKIN_FLEX);
[/PHP]اینم یک نمونه اجرا شده
دقیقا.
من کاری شبیه با این کردم.
برای السیدی 320*240. مقادیر خروجی ADS7846رو برای 0,0و 319,239 بدست آوردم. و با این تابع تاچ رو کالیبره کردم:
[PHP]
#define TOUCH_AD_LEFT 3756
#define TOUCH_AD_RIGHT 185
#define TOUCH_AD_TOP 248
#define TOUCH_AD_BOTTOM 3884
void Touch_Calibrate()
{
GUI_TOUCH_Calibrate(GUI_COORD_X, 0, 319, TOUCH_AD_LEFT, TOUCH_AD_RIGHT);
GUI_TOUCH_Calibrate(GUI_COORD_Y, 0, 239, TOUCH_AD_TOP, TOUCH_AD_BOTTOM);
}
[/PHP]
دیگه نیازی به تابع Exec_Calibrateو کالیبراسیون دستی نیست.