نرم افزار متلب

پشگفتار
با تشکر از خداوند متعال که اینجانب را در به پایان رساندن این پروژه یاری کرد.
در این پروژه برای انجام بخشی از کار ها از برنامة مطلب(Matlab ) استفاده شده است. برنامة مطلب یک برنامة قوی جهت دانشجویان و محققین ریاضی و مهندسی است و بیشتر برای حل مسائل تئوری ماتریسها و جبر خطی و آنالیز های عددی بوجود آمده است.

در ابتدای این مقاله به معرفی برخی از دستورات مورد نیاز از برنامة مطلب برای انجام دادن این پروژه پرداخته شده است. همچنین مطالبی در مورد درگاه موازی و نحوة استفادة برنامة مطلب از این درگاه بیان شده است. پس از آن مشخصات عناصر سخت افزاری لازم برای انجام این پروژه آورده شده است و در ادامه طراحی سخت افزاری برای دو فاز:

فاز ۱: فاز دریافت از pc و قراردادن در حافظة داده

فاز ۲: برداشت از حافظة داده شده و نمایش برروی LCD پرداخته شده است.
سپس برنامه های مورد نیاز برای انجام این کار آورده شده است که هم شامل برنامه های Matlab و هم برنامه های اسمبلی ۸۰۵۱ بر ای انجام این پروژه است.
از آنجائیکه این پروژه هم برای نمایش عکس و هم انیمیشین کاربرد دارد در انتهای مقاله برنامهCorel R.A.V.E برای ساخت انیمیشین معرفی شده است.
در پایان لازم است از استاد راهنما جناب آقای مهندس احمدپور که مرا در انجام این پروژه یاری کردند کمال تقدیر و تشکر را داشته باشم.
پروژه:

نمایش عکس و انیمیشین برروی
GRAPHIC LCD
بسم الله الرحمن الرحیم
چکیده:
هدف از انجام این پروژه تبدیل عکس های رنگی با فرمتهای Jpeg .،bmp.، bmp .، gif .، TIF . به حالت سیاه و سفید(Black & White ) و نمایش اين تصویر برروی LCD گرافیکی(۶۴*۱۲۸ ) این پروژه از سه بخش تشکیل شده است.
بخش اول: عمل تبدیل عکس های رنگی به سیاه و سفید که این کار توسط برنامة مطلب(Matlab ) انجام می شود.
بخش دوم: عمل انتقال داده از pc به حافظة داده (RAM یا PROM E)
بخش سوم: عمل برداشت از حافظة داده و نمایش برروی LCD گرافیکی
بخش اول:

بر ای اینکه بتوان عکس های رنگی را به سیاه و سفید تبدیل کرد از برنامة مطلب استفاده کردیم. در این برنامه توابعی وجود دارد که براحتی عکس های رنگی را به سیاه و سفید(binary Image ) تبدیل می کند.
بخش دوم:

در این بخش با استفاده از برنامه مطلب و پورت چاپگر موازی و طراحی سخت افزاری برای انتقال داده بصورت موازی به حافظة داده عمل انتقال داده از pc به حافظة داده انجام گرفت.
بخش سوم:

در این بخش هم یک طراحي سخت افزاری برای برداشت داده از حافظة داده و نمایش روی LCD انجام گرفت. در ادامه هر کدام از بخش ها را به تفصیل شرح می دهیم.
فصل اول:

۱- مقدمه:
مطلب مانند یک ماشین محاسب با امکانات کامل است. مانند یک ماشین حساب معمولی، می تواند اعمال ریاضی ساده ای مثل: جمع، تفریق، ضرب و تقسیم را انجام دهد. مانند یک ماشین حساب مهندسی، قابلیت انجام عملی را روی اعداد مختلط، ریشه ها و توانهای مربعات لگاریتم ها و عبارات مثلثاتی مثل سینوس، کسینوس، تانژانت را دارد. مانند یک ماشین حساب قابل برنامه ریزی شما قادر به ذخیره و بازیابی اطلاعات هستید و می توانید دستورات را ایجاد، اجرا و برای خودکار کردن عملیات محاسباتی معادلات مبهم آنها را ذخیره کنید. می توانید مقایسه های منطقی را انجام دهید و ترتیب اجرای دستورات را کنترل کنید. مطلب ابزاری کار با محاسبات ریاضی است.

مطلب یک زبان برنامه نویسی آسان برای کاربر با مشخصات بسیار پیشرفته و ساده تر از زبانهای کامپیوتری نظیر بیسیک و پاسکال و C است.
۲- نحوة نوشتن برنامه در Matlab: پس از واردشدن به برنامه از منوی File گزینةNew و سپس M-File را برگزینید. با این کار پنجره ای جهت نوشتن دستورات ظاهر می شود پس از اتمام نوشتن برنامه و ذخیره کردن آن که بصورت پیش فرض در پوشة work ذخیره می شود. با استفاده از Debuge Run می توان برنامه را اجرا کرد.

Matlab با استفاده از یکسری توابع عمل تبدیل عکس های رنگی به سیاه و سفید را انجام میدهد. به این صورت که هر عکس رنگی را ابتدا به gray scale و سپس Black & White تبدیل می کند.

مطلب برای انجام این کار به صورت زیر عمل می کند. ابتدا فایل رنگی توسط تابع Imread خوانده می شود( هر کدام از توابع توضیح داده می شود) و در یک متغیر آرایه ای ذخیره می شود. در مرحلة بعد با استفاده از تابع rgb2gray عمل تبدیل عکس رنگی به gray scale انجام می شود. در انتها تابع Im2bw عمل تبدیل عکس gray scale را به Black &white انجام می دهد.

۳- تبدیل عکس های رنگی به Binary Image
1-3-1 تابع Imread

این تابع یک تصویر را از یک فایل گرافیکی می خواند و در یک متغیر آرایه ای ذخیره می کند.
A=Imread (‘filename ‘, fmt);

این تابع یک تصویر رنگی gray scale را از طریق مسیری که توسط رشتة file name مشخص می شود می خواند و د ر آرایة A ذخیره می کند. fmt فرمت فایل است. که می تواند .Tif .gif .bmp .jpeg باشد اگر تصویر بصورت grayscale باشد آرایه A بصورت دوبعدیی(M-by-N ) خواهد بود و اگر تصویر رنگی باشد آرایة A بصورت سه بعدی(M-by-N-by-3 ) است.
۲-۳-۱ تابع rgb 2 gray :

این تابع یک تصویر RGB را به gray scale تبدیل می کند.
gray(RGB); I=rgb 2
3-3-1تابع Im 2 bw : Bw=im 2 bw(I,Level)

این تابع عمل تبدیل یک تصویر را به تصویر باینری انجام می دهد. اینکار براساس مقدار آستانه ای که در Level تعیین می شود انجام می گیرد. این تابع ابتدا تصویر RGB را به حالت gray Scale تبدیل می کند.- اگر قبلاً این کار انجام نشده باشد – سپس با استفاده از مقدار آستانه ای که در Level تعیین می شود عمل تبدیل تصویر به یک تصویر باینری را انجام می دهد و حاصل را در یک آرایه دو بعدیBW(M-by-N) ذخیره می کند. خروجی تصویر باینری که در BW ذخیره می شود برای تمام پیکسل های تصویر ورودی که روشنایی آنها بیشتر از سطح Level است مقدار یک(white ) و برای تمام پیکسلهای ورودی که روشنایی آنها کمتر از سطح Level است مقدار صفر(black ) را در نظر می گیرد.

۴-۳-۱ تابع Imshow : از این تابع هم برای نمایش تصویر استفاده می شود. Imshow(I);
فصل دوم: رابط موازی
با توجه به اینکه برنامه Matlab از پورت موازی به صورت یک پورت ساده استفاده می کند از این پورت برای انتقال داده از pc به حافظة داده استفاده شد.

۱- پورت موازی در Matlab :
در برنامة مطلب برای استفاده از پورت موازی باید ابتدا یک شی ورودی / خروجی دیجیتال(Digital I/O Object ) ایجاد کرد. این کار توسط تابع digitalio انجام می شود.
۲- تابع Digitalio : DIO=digitalio (‘adaptor’,ID);

این تابع یک شی ورودی/ خروجی دیجیتال را بوجود می آورد و به متغیر DIO نسبت می دهد.
‘adptor’ : نام رابط است که در اینجا parallel می باشد.
:ID مشخصة رابط را تعیین می کند.
در یک کامپیوتر PC سه پورت موازی وجود دارد که با برچسب های LPT3,LPT2,LPT1 مشخص می شود. این سه پورت به صورت استاندارد هستند و مطلب فقط از آنها استفاده می کند. اگر پورت جدیدی به سیستم اضافه شود مطلب نمی تواند از آنها استفاده کند. درواقع LPT2 LPT1 LPT3 مشخصه های رابط موازی هستند. آدرس این پورتها بصورت ۲۷۸h,378hex و ۳Bch است.
Creat a digital I/O Object for parallel port LPT 1 .

DIO=digitalio (‘parallel ‘, ‘LPT1’);
نکاتی که در موردdigital I/O object باید بیان کرد آن است که:
۱- وقتی این شی بوجود می آید، هیچگونه خط سخت افزاری ندارد. برای اجرایی کردن این وسیله، باید خطوط سخت افزاری به این شیء اضافه گردد که این کار توسط تابع addline انجام می شود.
۲- برنامة مطلب پورت موازی را برای خود قفل نمی کند بلکه برنامه های دیگر هم نمی توانند به آن دسترسی داشته باشند که این ممکن است باعث ایجاد برخورد(ConFlict ) گردد.
پس از ساختن شی دیجیتال ورودی / خروجی (digital I/O Object) باید به آن خطوط سخت افزاری اضافه گردد. این کار توسط تابع addline انجام می شود.
۳- تابع addline : addline (obj, hwline,port,’direction’);
A digital I/O object : obj

Hw Line :The numrie IDS of the hardware lines added to the device object. Port : the numric IDS of the digital I/O port
Direction : the line directions can be In or out

دستور addline خطوط سخت افزاری که با یک شماره یا یک بازه از اعداد مشخص می شود را به پورت شی دیجیتالی که در مرحلة قبل ایجاد شد نسبت می دهد. direction هم جهت خطوط را که می تواند ورودی یا خروجی باشد مشخص می کند. همانطور که معلوم است می توان مقادیر را از یک خط ورودی خواند و یا مقادیر را در یک خط خروجی نوشت: بطورکلی پورتهای I/O دیجیتالی را می توان به ۲ گروه طبقه بندی کرد:
۱- Port – configurable device :

در یک Port – configurable device نمی توان به صورت منحصر به فرد به هر خط آدرس دهی کرد یعنی هر خط پورت نمی تواند به صورت جداگانه ورودی یا خروجی باشد. بنابراین وقتی به این نوع پورتها آدرس دهی می شود تمام خطوط یا ورودی می شوند یا خروجی. مثلاً اگر یکی از خطوط Port – configurable device را بصورت ورودی قرار دهیم تمام خطوط پورت به صورت ورودی می گردد.
۲- Line -configurable devices :

در Line -configurable devices می توان به صورت منحصر به فرد به هر خط آدرس دهی کرد. یعنی هر خط پورت می تواند بصورت جداگانه ورودی یا خروجی شود یعنی از هر خط Line -configurable می توان به صورت جداگانه خواند یا نوشت. Port 0 هميشه Line –configurable است و باقي Port ها به صورت Port –configurable هستند .

نکته: Line -configurable است و باقی پورتها به صورت Port – configurable device است.
۴- خصوصیات پورت موازی:
پورت موازی دارای ۸ خط داده، ۴ خط کنترل، ۵ خط وضعیت، و ۸ خط زمین است. در استفاده های عادی این خطوط بوسیله نرم افزار کامپیوتر و وسایل جانبی براساس پروتکل مانند Standard 1284-1994 IEEE کنترل می شود. این پروتکل ها پروسیجرهایی را برای ارسال و دریافت داده به صورت دست دهی، بازگردانده اطلاعات وضعیت و سایر موارد تعریف می کند. به هر حال مطلب از این پورت موازی بصورت یک وسیله I/O دیجیتال استفاده می کند و به هیچ پروسیجری نیاز نیست. برای دسترسی به خطوط پورت موازی بیشتر PC ها به کانکتور DB-25 مجهز هستند.
این خطوط از سطوح منطقی TTL استفاده می کنند.
نکته مهم: خطوط ۱۷،۱۴،۱۱،۱ بصورت سخت افزاری inverse هستند.

Descriptions Pins Port ID
Eight I/O Lines, with pin 9 begin the significant bit(MSB) 2-9 0
Five input Lines used for status 10-13 and 15 1

Four I/O Lines used for control 1,14,16 and 17 2
Port 0 بصورت Line-configure able است و پورتهای ۱ و ۲ بصورت port-configurable هستند.
علاوه بر نکته فوق پورتهای ۰-۲ دارای خصوصیات زیر نیز هستند.
Port 0 is line configurable for reading and writing.

Port 1 is port configurable for reading.
Port 2 is port configurable for reading and writing.
بنابراین پورتهای صفر و۲ هم قابلیت پیکربندی برای نوشتن و هم قابلیت پیکربندی برای خواندن دارند. ولی از پورت یک فقط می توان خواند.
این پورتها به صورت پیش فرض مقدار یک منطقی(v 5) را برروی خطوط خود دارند.
در LPT1 ثبات داده با آدرس port0= 378 h
ثبات وضعیت با آدرس port1= 379 h
ثبات کنترل با آدرس port2= 37Ah

Par port = digitalio(‘parallel’,Lpt1′);
addline(par port , 0:7,’out’);
addline(par port , 0,2,’out’);
addline(par port , 0,1 ,’in’);

Addline(par port , 1,2,’out’);

Direction
Out
Out
Out
Out
Out
Out
Out
Out
Out
in
Out Port
0
0
0
0
0
0
0
0
2
1
2
HwLine
0
1
2
3
4
5
6
7
0
0
1 Linename
Pin2
Pin3
Pin4
Pin5
Pin6
Pin7
Pin8
Pin9
Pin1
Pin15
Pin14
Index
1
2
3
4
5
6
7
8
9
10
11 رنگ سیم
بنفش
قرمز
سبز
سیاه
آبی کمرنگ
آبی پررنگ
زرد
سفید
خاکستری
قهوه ای
صورتی
حالت خط شماره پورت شماره pin
درپورت موازی Index

از شماره های Index در برنامه مطلب برای دسترسی به خطوط سخت افزاری پورت موازی استفاده می شود.

۵- نوشتن در خطوط پورت:
عمل نوشتن در خطوط پورت بوسیله تابع putvalue انجام می شود.
Putvalue (obj.Line(Index),data)
Obj.Line(index)=one or more lines contained by obj.
Data = a decimal value or binary vector
این دستور مقدار data رادر خطی از شی ورودی / خروجی دیجیتال که بوسیله Index مشخص می شود می نویسد.
اگر پورت از نوع port-configurable باشد مقدار data در تمام خطوط پورت نوشته می شود. ولی اگر مقدار پورت بصورت Line-configurable باشد مقدار فقط در خطی که توسط Index مشخص می شود نوشته می شود.
۶- خواندن از خطوط پورت:
عمل خواندن از خطوط پورت بوسیله تابع getvalue انجام می شود.
Out=getvalue(obj.Line(Index);
این تابع مقدار جاری را که در خطLine(Index) وجود دارد را بازمی گرداند. مقداری که این تابع باز می گرداند بصورت binary vector است.

فصل سوم: قطعات مورد استفاده :
۱- میکروکنترلر ۸۰۵۱: در سال ۱۹۸۱ شرکت intel میکروکنترلری به نام۸۰۵۱ را معرفی کرد. این میکروکنترلر دارای ۱۲۸ بایتRAM ، k 4 بایت Rom ، دوتایمر، یک پورت سریال و چهارپورت موازی( هر یک ۸ بیت) بود که همة آنها در یک تراشه تعبیه شده بودند. ۸۰۵۱ یک پروسسور ۸ بیت است. یعنی cpuهر بار می تواند فقط روی ۸ بیت داده کار می کند. داده های بزرگتر از ۸بیت باید به قطعات ۸بیت بشکنند و سپس بوسیله cpu پردازش شوند. ۸۰۵۱ کلاً چهار پورت I/0 با عرض ۸ بیت دارد. امروزه شرکتهای مختلفی به تولید ۸۰۵۱ با مقدار Rom داخلی متفاوت می پردازند.
Feature Quantity
Rom 4k bytes
RAM 128 bytes
Timer 2
I/0 pin 32
Serial port 1
Intruppt sources 6

نحوه اتصال اولیه برای میکروکنترلر ۸۰۵۱ :
آی سی ذخیره ساز ۷۴ls373 latch شامل ۸ فلیپ فلاپ D می باشد که از آن می توان بعنوان یک پورت خروجی استفاده کرد. پایه های D 1 تا D 8 بیان کننده بایت ورودی( الی ) و خروجی های Q 1 الی Q 8 بیان کننده بایت خروجی( الی ) می باشد. پایه ۱۱(G ) و پایه ۱( ) برای کنترل عملکرد پورت می باشد. اگر پایة به زمین وصل گردد آنگاه پایة G یا فعالساز به صورت زیر عمل می کند.
اگر پایة G غیرفعال( صفر) باشد ورودی هیچ تأثیری بر خروجی ندارد.
اگر پایة G فعال( یک ) باشد وروی در خروجی ظاهر می گردد و با لبة پائین رونده G ورودی در خروجی ذخیره(Latch ) می گردد. معمولاً از این آی سی بعنوان پورت خروجی استفاده می شود که در آن پایة به زمین وصل می گردد و پایة G بعنوان پایة انتخاب(chip select ) عمل می کند که البته فعال با ولتاژ بالا می باشد.
Graphic LCD

فصل چهارم: بخش سخت افزاری
طراحی سخت افزاری برای دریافت داده ها از pc و قراردادن در حافظه داده:
برای انتقال دیتا از pc به حافظة داده از روش دست دهی استفاده می کنیم و مبنای طراحی را براساس آن قرار میدهیم.
۱- روال دست دهی در چاپگر :
۱-۱یک بایت داده به گذرگاه داده چاپگر ارسال می شود.
۲-۱وجود داده موردنظر با فعال کردن سیگنال به چاپگر اطلاع داده می شود.
۳-۱ هر وقت چاپگر داده را دریافت کرد، ارسال کننده را با فعال کردن سیگنال خروجی مطلع می سازد.
۴-۱سیگنال فرآیند تهیه بایت دیگری را برای ارسال به چاپگر آغاز می کند.
ما هم از همین روال برای انتقال دیتا از PC به حافظه داده استفاده می کنیم.
برای انجام عمل دست دهی از پورتهای ۱ و ۲ ،LPT1 استفاده شد. پورت ۱ فقط قابلیت خواندن دارد ولی پورت ۲ هم قابلیت خواندن وهم قابلیت نوشتن دارد با توجه به اين نکته که دو پورت به صورت port-configurable هستند. بنابراین از ۲ خط از پورت و ۲ و یک خط از پورت یک استفاده شد. یکی از Lineهای پورت ۲ را برای نشان دادن آمادگی ۸بیت برروی گذرگاه داده استفاده می کنیم. مشخصه این Line به صورت زیر است.
رنگ سیم Direction Port Hw Line Line name Index نام
خاکستری Out 2 0 Pin1 9
خط برای نشان دادن اینکه دیتا روی گذرگاه داده و جود دارد صفر فعال است.
خط دیگراز پورت ۲ بر ای نشان دادن اتمام ارسال کل دیتا استفاده می شود. مشخصه این Line به صورت زیر است:

رنگ سیم Direction Port Hw Line Line name Index نام
صورتی Out 2 1 Pin14 11
هم صفر فعال است یعنی صفر بمنزله اتمام ارسال و یک به منزله عدم اتمام ارسال است.

خطوط و به صورت سخت افزاری در پورت موازی inverse هستند به این نکته در حین ارسال داده روی این خطوط باید توجه کرد.
یک Line از پورت یک هم برای نشان دادن دریافت داده از طرف میکرو و قرارگرفتن داده در حافظه داده استفاده شده است. مشخصه این خط به صورت زیر است:

رنگ سیم Direction Port Hw Line Line name Index نام
قهوه ای in 1 0 Pin15 10
هم صفر فعال است یعنی:
خروجی ازمیکرو نشانه دریافت داده= ‘ ۰ ‘
ورودی به pc
نشانه عدم دریافت داده = ‘ ۱ ‘ (p3.4) پایه ۱۴ ( ) (pin15 )
قهوه ای
۲- روال کلی دریافت داده:
Pc :
1- pc خط را به علامت عدم اتمام ارسال يک می کند (باید توجه داشت که این خط بصورت سخت افزاری inverse است پس مقدار صفر روی آن فرستاده می شود.)
۲- pc یک بایت را آماده می کند.
۳- بایت آماده شده را روی پورت قرار میدهد و سپس خط را به نشانه وجود داده بروی گذرگاه داده صفر می کند.
۴- pc منتظر پاسخ از طرف میکرو می ماند تا زمانی که این خط یک است صبر می کند به محض صفر شدن به مرحله بعد می رود.
۵- خط به علامت عدم وجود دیتا یک می شود و سپس به مرحله ۲ می رود.
۶- پس از اتمام ارسال خط فعال می شود که نشانه اتمام ارسال داده است.
میکرو:
۱- میکروخط را چک می کند اگر این خط یک بود به مرحله بعد می رود در غیراینصورت به برنامه خاتمه می دهد.
۲- میکروخط را چک می کند هر وقت این خط فعال شد به مرحله بعد می رود.

۳- مقدار از گذرگاه داده خوانده می شود.
۴- مقداردر حافظه داده ذخیره می شود.
۵- بمنزلة دریافت داده فعال می شود.
۶- پس از یک زمان تأخیر مجدداً غیرفعال می شود و به مرحله ۱ بازمی گردد.
۳- توضیح کلی درباره نحوه آماده کردن داده توسط pc :

همانطور که گفتیم Matlab تصویر را بصورت یک binary Image که تر کیبی از صفر ها و یکها است در یک آرایه(M-by-N ) ذخیره می کند. بنابراین برای ارسال این آرایه از ۲ حلقه for استفاده می شود. یکی برای سطرها و دیگری برای ستونها.

نکته مهم: با توجه به آنکه LCD گرافیکی دارای ۶۴ سطر و ۱۲۸ ستون است بنابراین برای نمایش تصویر برروی LCD باید یک محدودیت را در اندازه تصویر قرار دهیم که تصویر باید در ابعاد باشد. بنابراین تصویر در یک آرایه ذخیره میشود. برای اینکه داده ها بصورت یک بایت(۸ بیت) آماده شود از ۲ حلقه for استفاده می کنیم. نحوه پویش آرایه را هم به صورت سطری در نظر می گیریم. یعنی در ستون اول از آرایه به صورت ۸ بیت ۸ بیت سطرها را ارسال می کنیم و به همین ترتیب در سمت گیرنده( میکرو) این داده ها را در خانه صفر حافظه قرار می دهیم تا ستون اول تمام شود سپس ستون دوم و به همین ترتیب تا هر ۱۲۸ ستون ارسال شود.