-
 

نمایش تصویر از روی فلش میکروکنترلر

با درود.

دوستان زیادی سوال پرسیده بودند که چطور میشه یک تصویر ر ا از روی فلش میکرو کنترلر با استفاده از    کتابخانه  lcdنوکیا 1661 نمایش داد و به دلیل ابهامی که برای  تعداد زیادی از  افراد   وجود دارد ، در این مطلب توضیحات مربوطه رو به همراه یک نمونه کد اینجا قرار دادم .

************************************

************************************

کلیات نحوی نمایش تصویر از حافظه فلش روی :

1- فراهم آوردن عکس با سایز مناسب .

2 - تبدیل عکس به یک آرایه که هر عضو آرایه  کد رنگ مربوط به یک پیکسل است .

3 - ایجاد یک پنجره با تابع nlcd_set_widow  در مختصات مناسب و با ابعاد( پیکسل *پیکسل ) تصویر مورد نظر

4 - خواندن تک تک اعضای آرایه و ارسال آنها به lcd  از طریق تابع nlcd_paint_pixel .

************************************

************************************

حالا در ادامه مطلب در عمل نشان خواهیم داد که چطور اینکار انجام میشود .

 

************************************

توضیح مرحله 1 :

اینکار خیلی ساده هست . با استفاده از نرم افزار پاینت ویندوز ( یا هرر نرم افزار دیگه ای ) عکس رو باز کنید و اون رو به اندازه مناسب( که در اینجا برای اینکه حجم کمی از فلش میکرو اشغال بشه من  30*37 رو انتخاب کردم )تبدیل کنید و با فرمت jpg ذخیره کنید .

************************************

توضیح مرحله 2 :

من از یک سایت برای  تبدیل عکس به آرایه استفاده کردم .( و متاسفانه کد رنگها رو به صورت 8 بیت 8 بیت تبدیل میکنه ) و آدرسش اینجاست :

آدرس وبسایت تبدیل عکس به آرایه :

وقتی این آدرس رو باز کنید تصویری شبیه زیر میبینید .

 

************************************

 توضیح تصویر :

کادر آبی : آدرس تصویری هست که میخواهید تبدیلش کنید .

کادر قرمز : مربوط به عمق رنگ و فرمت نمایش پیکسلها هست که در مورد  lcd  nokia1661   طبق همین که در تصویر مبیبنید تنظیم کنید .

کادر صورتی:  مختصات نمایش تصویر روی  lcd   هست که مربوط به گوشه بالا سمت چپ تصویر میشه .

کادر سبز :  حالا اگر این دگمه رو بفشارید کارد های مشکی و زرد تولید میشوند .

کادر زرد :  این همون آرایه ای هست که برای نمایش تصویر نیاز داشتیم . و باید در کد کپی بشه .

کادر مشکی : مربوط به مختصات نمایش تصویر و طول و عرض تصویر هست .و از سمت چپ به ترتیب شامل :  ستونx ، ردیفy ، عرض تصویر ، ارتفاع تصویر میشود.

 

***********************************

 توضیح مراحل 3 و 4 :  را میتوانید به طور عملی در فایلهای .h و .c  که در زیر قراردادم مشاهده کنید .

من این کد رو  برای یک پروژه تجاری استفاده کردم و بنا به شرایط اون پروژه به این صورت نوشته بودمش.

خودتان میتوانید در این کد تغییراتی بدید و اون رو برای پروژه خودتان مناسب سازی کنید .

این فایل شامل یک فایل هدر و یک فایل سورس به همراه تصویری که برای تهیه این مثال از آن استفاده کردم میباشد .

 

دانلود فایل مثال

 

برای اطلاع از اخبار جدید و موارد اصلاحی در مورد این کتابخانه خواهشمندم در کانال تلگرام وبلاگ: dastsazemanblogfa@

 

مطالب مرتبط:

کتابخانه حرفه ای nokia 1661 lcd برای میکروهای stm32 و Avr + فونت فارسی

 

 

 

 

نرم افزار فونت برای میکروکنترلر

با سلام .

توی این پست میخوام یک نرم افزار طراحی فونت  را به شما معرفی کنم .

از این نرم افزار برای طراحی فونت  کتابخانه tft lcd  که نوشتم استفاده کردم .

 

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

 

این نرم افزار فونت را برای زبان C تولید میکنه و از یک سایت آلمانی دانلودش کردم . آن موقع که دانلودش کردم ظاهرا در حال تکمیل بود ولی با این حال خیلی خوب کار کرد  ،   البته محدودیتهایی داره ولی مزیتهاش خیلی جالب توجه هست .

نکته مهم : این نرم افزار کدهای حروف را به صورت سطری تولید میکنه . یعنی یک بایت مربوط به 8 پیکسل در یک سطر هست .

 

مزایای نرم افزار :

1- قابلیت تولید فونت با طول متغیر و ثابت

2 - استفاده از فونتهای ویندوز برای تولید حروف ( که شمارا از زحمت رنگ کردن پیکسلها و طراحی شکل حروف خلاص میکند)

3 - امکان استفاده از حروف فارسی ویندوز( با فونت دلخواه که با کیبرد تایپ میکنید) برای تولید فونت .

4 - امکان مشاهده فونت و رسم خطوط و اشکال روی صفحه نمایش نرم افزار .

معایب :

1 - عدم امکان ویرایش فونتها قبل از تولید و از داخل نرم افزار ( بعد از تولید فونت میتوانید از داخل هدر فایل تولید شده گلیف ها رو به صورت دستی اصلاح کنید )

 

2 - عدم امکان تولید یک آرایه برای تصویر روی صفحه نمایش .( فکر کنم زمانی که دانلودش کردم  این گزینه هنوز تکمیل نشده بود)

نرم افزار به صورت یک فایل اجرایی هست که وقتی باز میکنید تصویری شبیه زیر میبینید .

 

 من به صورت آزمایشی یک فونت (َArial__15 ) را درست کردم  و از اون برای نوشتن  اسم وبلاگ توی صفحه نرم افزار ( برای اینکه کیفیت فونت را ببینم) استفاده کردم .

دگمه Export  هم فونت شما رو به صورت فایل زبان C تولید میکنه .

 

اما چطور فونت بسازیم؟

اول دگمه فونت را بفشارید ، بعد پنجره ای به صورت تصویر زیر باز میشه :

1- ابتدا دگمه فونت را بفشارید .(فلش زرد)

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

 

2- بعد حروفی را که نیاز دارید در فونت موجود باشه در کادر سبز تایپ کنید ( که خودش به طور پیشفرض تعدادی را نوشته است) در این کادر هرچه تایپ کنید ( عربی  انگلیسی فارسی چینی ژاپنی هندی بنگالی و حتی علایم خاص غیره ....) در فونت شما هم موجود خواهد بود .حتی میتوانید کاراکترهای خاص را از یک نرم افزار مثل وورد در اینجا کپی کنید!!!

 

3- اگر نمیخواهید فونت شما از نوع طول متغیر باشد ، تیک گزینه فیکس را بزنید.( فلش قرمز)

 

4- در کادر نارنجی هم میتونید اندازه  فضای خالی بالا و پاین و چپ و راست حروف را مشخص کنید .

بعد از انجام این کارها دگمه Generate  را بفشارید .

 

فونت شما تولید شده است . حالا به صفحه اول نرم افزار بروید و مانند تصویر ابتدایی چیزی تایپ کنید و دگمه print  را بفشارید تا متن در صفحه ظاهر شود .

زمانی که فونت را پسندید ، دگمه Export را بفشارید تا فایلهای فونت شما تولید شود .

 

امیدوارم این مطلب برای شما مفید باشد .

 

دانلود نرم افزار تولید فونت

حروف لازم برای تولیت فونت فارسی

 

پستهای مرتبط:

کتابخانه tft lcd

 

مالکیت معنوی : انتشار مطلب با ذکر منبع بلا مانع است .

 

فونت ، میکروکنترلر ، ال سی دی ، گرافیگی ،C ، ساختن ، تولید نرم افزار ،font ,microcontroler ,lcd,tft,graphic , GLCD

 

 

راهنمای استفاده از کتابخانه lcd nokia1661 - قسمت11

لینک پست معرفی مشخصات کتابخانه

لینک اولین قسمت آموزش

لینک فهرست موضوعی مطالب

موضوع این قسمت: فرمت رنگ lcd نوکیا 1661 و شرح قسمت نمایش تصویر کتابخانه .

با سلام .

قبل از اینکه وارد مطلب بشم . لازم هست که از خلاصه خصوصیات این قسمت مطلع باشید .

خلاصه خصوصیات این قسمت از کتابخانه :

1 - قابلیت انخاب فرمت bmp 16 bit یا فرمتbmp 24bit برای نمایش تصاویر .

2 - قابلیت اتخاب کتابخانه ff14 یا pff برای ارتباط با میکرو sd کارت .( کتابخانه pff یک نسخه از کتابخانه

fatfs هست که برای کار با میکرکنترلر های با حافظه رم و فلش کم توسط شخصی به نام چان نوشته شده ، و در سایت شخصیش elm_chan قرار داده .)

3 - این کتابخانه با مدل ذخیره سازی litte-endian سازگارهست .

اگر نمیدونید این چیه ، زیاد فکرتون رو درگیرش نکنید .کمپایلر کدویژن ، GCC(شامل نرم افزارهایtruestudio ,winavr ، آردوینو و اتمل استودیو) و کمپایلر کیل همه به طور پیشفرض از این مدل ذخیره سازی استفاده میکنند .

نمونه فایل هگز ،برای نمایش تصویر در زیر قرار دادم که میتونید دانلود کنید .

توجه : این فایلهای تست مربوط به نسخه 1.1.3 هستند.

فایل هگز تست برای میکرو stm32f103 c8t6

فایل هگز تست برای میکرو stm32f072 c8t6

فایل هگز تست حالت ترانسپرانت برای میکرو stm32f103 c8t6

فایل هگز تست حالت ترانسپرانت برای میکرو stm32f072 c8t6

و اما ماجرا :

راستش قرار نبود این قسمت به کتابخانه اضافه کنم. چون این کتابخانه و این lcd قرار بود که برای میکروکنترلرهای کوچک مثل avr یا stm32 با سایز فلش کم به جای lcd کاراکتری استفاده بشه .

هدف این کتابخانه در ایتدا این بود ، برای همین لازم بود که حجم کم و سرعت بالا داشته باشه .

یکی از دلایلی که قسمتهای مختلف کتابخانه رو مثل هسته ، قسمت متنی ، قسمت گرافیک و حالا هم قسمت نمایش تصویر را ، جدا از هم نوشتم همین مورد بود . ( قسمتهایی که با اون کاری ندارید لازم نیست به پروژه اضافه کنید)

ولی به هر حال تعدادی از دوستان سوال پرسیدن که چطور روی ال سی دی تصویر نمایش داده میشه ؟ من هم دیدم چون اینکار ممکنه برای عده ای سخت باشه ، خودم توابعی رو برای اینکار نوشتم .

این توابع تصویر با فرمت bmp رو از micro sd card میخونن و روی ال سی دی نمایش میدن .

تصویر تست نمایش تصویر را در زیر میبینید .در این تست از میکرو stm32f103c8t6 و کتابخانه ff14 و فرمت bmp 24 bit برای تصویر استفاده شده است .

زمان لازم برای نمایش 380 میلی ثانیه است .

نکاتی پیرامون بخش نمایش تصویر :

این توابع تصویر را از روی میکرو sd میخونه . بنابراین یک لایه پایین تر از توابع خواندن و نمایش تصویر ، باید توابعی برای کار با sdکارت مهیا بشه . من برای اجرای مثال از کتابخانه fatfs استفاده کردم .

fatfs کتابخانه خیلی مرتبی هست .خوبیش اینه که میشه تصاویر رو به صورت فایل و در پوشه های مختلف همانطوری که توی ویندوز ذخیره میشه ، استفاده کرد و برای ارتباط با انواع حافظه ها میکرو sd کارت ها cf card و حافظه های usb و غیره ...بنا به نیاز استفاده کرد .(این کتابخانه را شخصی به نام چان نوشته و در سایت شخصیش( اینجا) قرار داده )

ولی در عین حال کتابخانه مفصلی هم هست و شاید همین باعث پرحجم شدن و کمی کند شدن اجرای برنامه میشه . بنابراین زمانهایی که برای نمایش تصاویر در مطلب اومده اگر کمی کند به نظر بیاد،مقداری از کتابخانه FatFs تاثیر میگیره . البته شما اگر از کتابخانه های ساده تر و شخصی شده استفاده کنید احتمالا سرعت افزایش هم پیدا کنه .

خوب بریم سر اصل مطلب :

فرمت رنگ در lcd نوکیا 1661:

این ال سی دی از عمق رنگ رنگ 16 بیتی استفاده میکنه ( کدهای رنگ پیکسلها 16 بیتی هستن )

و فرمتش به صورت RGB 5:6:5 هست .

و این عبارت یعنی 5 بیت برای رنگ قرمز ، 6 بیت برای رنگ سبز ، و 5 بیت هم برای رنگ آبی تعیین شده و ارزش و جایگاه بیتهای رنگ ها مطابق تصویر زیر است .

حالا شما از هر فرمتی که برای تصاویر بخواهید استفاده کنید لازم هست که اون رو به فرمت RGB 5:6:5 تبدیل کنید . چون فرمت bmp خیلی ساده هست و کد رنگ پیکسلها بدون هیچ فشرده سازی و رمز گزاری در فایل تصویرقرار داده شده ، خیلی سریع تر از بقیه هست . البته bmpفرمت های مختلفی از نظر عمق رنگ داره مثلا 24 بیت ، 32 بیت و 16 بیت .

کتابخانه قابلیت خواندن فرمتهای bmp24bit و bmp16bit را داره ولی به دلیل سهولت ، در مثال از فرمت 24 بیت استفاده کردم چون به هیچ نرم افزار اضافه ای برای تبدیل عکس نیازه نداره و با paint ویندوز هم قابل انجام هست .

تهیه تصویر با فرمت مناسب :

فرمت bmp24 :

فقط کافیه تصویر را با نرم افزار paint ویندوز باز کنید و سایز اون رو به اندازه مناسب تغییر بدید . بعد اون رو سرو ته کنید و تصویر رو با فرمت bmp 24bit ذخیره کنید . ( موقع ذخیره خودش فرمت رو ازتون میپرسه ) . تصاویر رو روی sd card کپی کنید . به همین سادگی !! و احتیاج به نرم افزار خاصی هم نیست .

فرمت bmp16 :

البته از فرمت bmp16bit ویندوز هم میتوانید استفاده کنید . برای اینکار ابتدا تصویر را با paint به سایز مناسب تبدیل کنید و د رآخر اون رو سر و ته کنید . بعد با نرم افزار های دیگه ای باید اون رو به فرمت bmp 16 bit تبدیل نمایید . ( ظاهرا paint فرمت 16 بیت رو پشتیبانی نمیکنه .البته در ویندوز 7 اینطوریه )

** توجه :کاملا واضح هست که با فرمت رنگ 16 بیت برای تصویر ، زمان نمایش یک تصویر حدود 33.3% کمتر هست .

استراتژی نمایش تصویر روی lcd :

برای نمایش تصویر به طور کلی باید از توابع nlcd_set_window() و تابع nlcd_paint_pixel()

مربوط به هسته کتابخانه lcd nokia 1661 استفاده کرد . ( برای آشنایی با عملکرد توابع لطفا به قسمت پنجم مراجعه نمایید )

ابتدا با تابع nlcd_set_window() یک پنجره به ابعاد تصویر مورد نظر و در مکان مناسب تعریف میکنیم .

در مرحله بعدی رنگ پیکسلهای تصویر را از فایل که بر روی حافظه قرار دارد خوانده ، و سپس با تابع

nlcd_paint_pixel() به lcd ارسال میکنیم . این استراتژی کلی برای نمایش تصویر روی ال سی دی هست .

حالا اول بریم ببینیم توی پوشه picture هست؟

محتویا پوشه شامل فایلهای زیر هست :

در نسخه 1.1.3 محتویات به شکل زیر است .

و تنظیمات و الگوی تولبع در فایل picture_lcd.h قرار دارد . محتویات این فایل در تصویر زیر است .

در قسمت configuration :

PICT_LCD_COLOR_DEPT : مربوط به انتخاب فرمت رنگ فایل تصویر هست . اون عدد روبه رو طول عمق رنگ به بایت هست . برای bmp16 bit عدد 2 ( 2بایت = 16 بیت ) و برای bmp24 عدد 3 هست .

PICT_LCD_BUFFER_SIZE : این در واقع سایز بافر داخلی تابع نمایش تصویر هست .

لازم هست که اندازه بافر مضرب صحیحی از PICT_LCD_COLOR_DEPT باشه . و از 3 هم کوچکتر نباشه . البته لازم به نگرانی نیست ، اگر اشتباهی صورت بگیره کمپایلر خودش بهتون اخطار میده .

این بافر بهتره که به اندازه عرض بزرگترین تصویری که میخواهید نمایش بدید، ضرب در تعداد بایتهای عمق رنگ باشه .

مثلا برای یک تصویر با عرض 120 و فرمت bmp 24bit بهتره که اندازه بافر 360 باشه .

اینن اندازه باعث بالاترین سرعت نمایش تصویر میشه . البته در مواردی هست که شرایط رم میکرو و اجرای توابع اجازه این کار رو نمیده .

به طور مثال در همین تصویر میبینید که من اندازه رو 180 تعریف کردم . و برای تست روی cortex m0 ناچار شدم اون رو روی 3 !!!! تعریف کنم .

PICT_LCD_FATFS_LIB:

این مربوط به انتخاب نسخه کتابخانه fatfs مورد استفاده است .

برای ff14 عدد 0

و برای pff عدد 1

در نسخه 1.1.3 :

تنظیمات قسمت تصویر به فایل picture_lcd_conf.h منتقل شده است که در تصویر زیر میبینید .

همانطور که در تصویر میبینید قابلیت ترانس پارنت به کتابخانه اضافه شده است .( کادر قرمز)

ماکروی PICT_LCD_TRANSPARENT :

اگر 0 منظوربشه ترانسپرانت غیر فعال هست و تصاویر به صورت عادی نمایش داده خواهند شد .

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

ماکروی PICT_LCD_NONE_SHOW_COLOR :

این ماکرو برای کتابخانه کد رنگی که( یک عدد 16 بیتی است و ) باید از تصویر حذف شود را مشخص میکند .

و تمام پیکسلهایی که به این رنگ هستند چاپ نخواهند شد و در نتیجه قسمت هایی از تصویر قبلی نمایان خواهد ماند .

در این مثال من رنگ سیاه خالص ( کد 0x0000 ) را انتخاب کردم .

اما یک سوال :

اگر در تصویر اصلی رنگ مشکی وجود داشت چکار باید کرد .؟

اگر در تصویر اصلی تصویر همان رنگی که شما در ماکروی دوم به کار برده اید وجود داشت باید با نرم افزاری رنگها را کمی تغییر دهید تا کد رنگ آنها با رنگ مکروی دوم اندکی ( حداقل 1 واحد ) تفاوت کند و در عین حال با چشم هم قابل تشخیص نباشد .

به طورمثال کد رنگ 0x00 مربوط به سیاه خالص است ولی کد 0b 0000100000100001 در مبنای 2 ( کد 0x0821) خاکستری بسیار بسیار تیره است که در عمل همان سیاه دیده میشود .

با اینکار رنگهای سیاه تصویر حذف نخواهد شد .

عملکرد ترانسپرانت را در تصویرهای زیر میبینید که تصویر با پس زمنه مشکی تصویر اصلی و تصویر با پس زمینه سفید نتیجه فعال کردن حالت ترانسپرانت میباشد .

این تصاویر مربوط به استفاده از کتابخانه روی میکرو stm32f072 c8 با فرکانس کلاک 48 مگاهرتز است.

نکته ای که وجود دارد مربوط به زمانهای رفرش صفحه است . با توجه به عملکرد ترانسپرانت ، زمان بیشتری برای رفرش صفحه مورد نیاز است که در تصویر میبینید .

برای تست این عملکرد میتوانید با توجه به نوع میکرو یکی از فایلهای زیر را به کار ببرید .

فایل هگز تست حالت ترانسپرانت برای میکرو stm32f103 c8t6

فایل هگز تست حالت ترانسپرانت برای میکرو stm32f072 c8t6

در قسمت توابع :

توابع لایه اول :

lcd_picture_init() : این تابع از کتابخانه fat به نام mount رو اجرا میکنه .که یک فضای کاری برای کتابخانه fat ایجاد میشه . و مستقیم بامیکرو sd card ارتباط برقرار میکنه .

این تابع باید قبل از هر نمایش تصویر توسط توابع بعدی استفاده بشه .

البته اگر خودتون به طور دستی تابع mount را اجرا کرده باشید نیازی به استفاده از این تابع نیست .

lcd_picture_deinit() :

این تابع عملکرد mount رو با حالت 0 اجرا میکنه که فضای کار با میکرو sd رو میبنده .

استفاده از اون ضروری نیست .ولی ممکنه لازم بشه .

توابع لایه دوم :

lcd_picture_show(uint8_t x , uint8_t y , const TCHAR * str):

این همون تابعی هست که تصویر مورد نظر شما رو نمایش میده .

x , y : مربوط به مختصات گوشه بالا چپ تصویر هست .

و str : نام فایل مورد نظر همراه با پسوند در micro sd card هست .

در نسخه 1.1.3 :

در لایه دوم:

تابع lcd_picture_show_part( picture_lcd_cor_typedef lcd_start_col , picture_lcd_cor_typedef lcd_start_row ,
picture_lcd_cor_typedef pict_start_col , picture_lcd_cor_typedef pict_start_row ,
picture_lcd_cor_typedef pict_width , picture_lcd_cor_typedef pict_height ,
const TCHAR* picture_path);

این تابع یک قسمت از تصویر درون فایل را روی lcd نمایش میدهد .

متغیرهای lcd_start_col و lcd_start_row :

مربوط به ستون و سطر از lcd هست که گوشه بالا و چپ تصویر قرار هست در آنجا قرار بگیرد.

متغیرهای pict_start_col وpict_start_row :

به ترتیب از راست ، ستون و سطر گوشه بالا و چپ محدوده ای از تصویر درون فایل هست که میخواهید روی lcd نمایش دهید .

متغیرهای pict_width وpict_height :

به ترتیب از راست عرض و ارتفاع محدوده ای از تصویر درون فایل هست که میخواهید روی lcd نمایش دهید .

کاربرد :

این تابع کاربردهای زیادی میتونه داشته باشه .

مثلا نمایش قسمتی از تصاویر بزرگتر از سایز lcd .

یا وقتی که نیاز هست یک عدد یا مطلبی با پس زمینه تصویر مرتب آپدیت بشه .

یا ایجاد حالت اسکرول برای نمایش تصاویر.

در فیلم زیر این عملکرد را میبینید.

برای تست این قابلیت با توجه به نوع میکرو از یکی از فایلهای زیر استفاده نمایید .

فایل هگز تست برای میکرو stm32f103 c8t6

فایل هگز تست برای میکرو stm32f072 c8t6

در لایه سوم:

تابع lcd_picture_show هست که قبلا توضیح داده شده است .

توجه : در نسخه 1.1.3 این تابع با استفاده از تابع lcd_picture_show_part نوشته شده است . این کار حجم کتابخانه را کاهش داده اما در عمل اندکی( حدود 2 %) از سرعت تابع نسبت به نسخه اولیه کم کرده است . به همین جهت من تابع نسخه اولیه را به صورت کامنت در کتابخانه قرارداده ام که با فعال کردن آن میتوانید ازش استفاده کنید .

نحوه ی اضافه کردن به پروژه :

ابتدا فایلها رو داخل پروژه قرار بدید . و در آخر فایل picture_lcd.h را در اینکلود کنید .

*************************************************************************************

دانلود کد نمونه برای نمایش تصویر از روی sd card

توضیح : فایلهای مثال برای بورد blue pill (stm32f103) و میکرو stm32f072 برنامه نویسی شده است.

کتابخانه fat چان ( که خودم ویرایش کردم را) برای کار با فایلها در پوشه پروژه قراردادم.

این کدها در محیط true studio تولید شده است ولی فاقد کتابخانه lcd میباشد برای استفاده لازم است پوشه کتابخانه lcd را در پوشه پروژه کپی و سپس کمپایل کنید .

فایل cube Mx پروژه را در فایلها قرار دادم تا بتوانید برای اتصال پایه های میکروکنترلر به lcd و micro sd از آن استفاده کنید همچنین میتوانید پروژه را برای میکروکنترلرهای دیگر باز تولید کرده و استفاده کنید.

امیدوارم مطالب این قسمت برای شما مفید بوده باشد .

سربلند و پیروز باشید .

لینک قسمت قبلی

مطالب مرتبط :

نمایش تصویر از روی فلش میکروکنترلر

پایان

مالکیت معنوی : لطفا کپی نکنید ، لینک بدید .

راهنمای استفاده از کتابخانه lcd nokia1661 - قسمت10

لینک پست معرفی مشخصات کتابخانه

لینک اولین قسمت آموزش

لینک فهرست موضوعی مطالب

موضوع این قسمت: راه اندازی کتابخانه برای stm32 Cortex M0

با سلام .

در قسمت قبل راه اندازی کتابخانه را برای میکروهای stm32  CortexM3 توضیح دادم .

در این قسمت  تنظیمات لازم برای میکروهای  Stm32 CortexM0 توضیح خواهم داد.

فایل کیوب مربوط به تنظیمات پروژه همراه مثالی که برای شما ارسال میشود وجود دارد .

ولی برای رفع هرگونه ابهام توضیحات زیر رو میدم .

اولین قسمت فایل کیوب که باید تنظیم بشه مربوط به تب pinout هست .

در این تب تنظیمات مربوط به واحد SPI  دیده میشه .

من برای spi از واحد2 استفاده کردم . تننظیماتش رو توی کادر قرمز میبینید .

دوتا پایه هم برای cs و reset  احتیاج هست که اونها را باید خروجی قرار بدید .

و در تصویر زیر مشخص هست .

جزئیات تنظیم spi در سربرگ conf  را در تصویر زیر مشخص کردم .

شما با تنظیم  prescaler  ( بالای مستطیل  قرمز ) میتونید  baud rate که در مستطیل قرمز مشخص هست را تنظیم کنید که در اینجا روی 12  مگاهرتز تنظیم شده  است . این در واقع همون فرکانس کلاک spi  میکرو هست .

برای تنظیم gpio هم طبق تصویر زیر اقدام کنید.

نکته ای که باید بهش توجه کنید اون ستونهایی هست که با مستطیل قرمز بزرگ نمایش داده شده .

اگر روی هر سطر کلیک کنید های لایت میشه و گسترده  ی اون در پایین نمایش داده میشه . که میتونیدبرای pin  مورد نظر اسم هم بگذارید که در کادر قرمز کوچک  میبینید .

تا اینجا تنظیمات مربوط به پریفرال ها انجام شده است . یک تعداد تنظیمات دیگه داره که میشه گفت سلیقه ای هستن ولی میتونن مفید باشن .

برای این تنظیمات  لازم هست که برید توی منوی project  و setting   رو انتخاب کنید . پنجره ای به شکل زیر باز میشه .

نکته مهم این تصویر کادر قرمز هست . علت انتخاب این گزینه ها پوشه بندی مربوط به پروژه هست . که خیلی واضح و سهل و راحت و قابل فهم از کار در میاد. البته نرم افزار من true studio  هست. نمیدونم برای نرم افزارهای دیگه چطوره !! همانطور که گفتم این موضوع سلیقه ای هست .

تنظیمات در برگه code generator  را من طبق تصویر زیر انجام میدم .

که بازم سلیقه ای هست . ولی این تنظیمات که توی کادر قرمز اومده ، برای من سهولت بیشتری ایجاد میکنه .

مورد سوم برگه advanced stting هست .که در تصویر زیر میبینید.

همانطور که در کادر قرمز میبینید ، کتابخانه مورد استفاده برای SPI 2  را LL  انتخاب کردم .

علتش رو به صورت هشدار زیر توضیح میدم :

هشدار :

در نسخه cube MX  4.26.0  که مورد استفاده من هست . واحد spi2  با کتابخانه HAL درست کار نمیکنه !!! ولی با کتابخانه LL  مشکلی نداره . صحت این مطلب را در مورد نسخه 5 دقیقا نمیدنم ( روی سیستم من با مشکل مواجه هست و خوب کار نمیکنه ) ولی در هر صورت این موضوع را مد نظر داشته باشید .

 

بعد از اعمال این تنظیمات و تولید کد پروژه ، کدهای ضروری مربوط به  فایل  main  در تصاویر زیر نمایش داده  شده است .

ابتدا در فایل main.c  اینکلود ها را اضافه کنید و بهتر است در همان جایی که کیوب در نظر گرفته کدها را بنویسید . طبق تصویر زیر

 

و در خود تابع main()   دستورات درون کادر قرمز نوشته شود . دقت کنی که مکان آنها بعد از اجرای توابع مربوط به پیکر بندی gpio و spi  باشد. این مطلب را در تصویر زیر و درون کادر قرمز میبینید .

حال نوبت به معرفی یک تابع ، به عنوان تابع تاخیر میرسد .

بهتر است اینکار در فایل main.h  انجام شود .

یک مثال برای این هدف در کادر قرمز تصویر زیر نمایش داده شده است .

 راه اندازی در کمپایلر کیل uvision5

تمام موارد بالا برای کمپایلر کیل نیز صادق است با این تفاوت که 2 مورد اضاف وجود دارد یکی تعریف 2 متغیر عمومی که در تصویر زیر مشاهده میکنید . ( کادر قرمز)

توجه : این  دو متغیر برای نسخه های قدیمی احتیاج است و برای نسخه هایی که بعد از تاریخ 1399/3/6

تهیه نموده اید ، لازم نیست .

و یک تنظیمات در کمپایلر کیل احتایج هست که در 2 تصویر زیر میبینید .

تصویر زیر مربوط به تنظیم نسخه کمپایلر هست .

و تصویر زیر مربوط به استاندارد زبان C مورد استفاده است .

در اینجا توضیحات مربوط به راه اندازی کتابخانه برای stm32f0xx  به پایان رسید .

امیدوارم استفاده برده باشید و مورد توجه تان قرار گرفته باشد .

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

با سپاس از توجه تان.

 

لینک قسمت قبل

لینک قسمت بعد

 

مالکیت معنوی : لطفا کپی نکنید ، لینک بدید .

راهنمای استفاده از کتابخانه lcd nokia1661 - قسمت9

لینک پست معرفی مشخصات کتابخانه

لینک اولین قسمت آموزش

لینک فهرست موضوعی مطالب

موضوع این قسمت: راه اندازی کتابخانه برای stm32 Cortex M3

با سلام .

در قسمت قبل راه اندازی کتابخانه برای AVR  را توضیح دادم . در این قسمت راه اندازی کتابخانه را برای  stm32 f103 c8t6 که در واقع بورد blue pill  را توضیح میدم . البته برای تمام بوردهایی که میکروی اونها cortexm3  یا به بیان بهتر   stm32f1xx  هست ، قابل استفاده میباشد.

البته به همراه مثالی که برای شما ارسال میکنم یک فایل cube MX  هست که پیکر بندی توی اون انجام شده ولی دوستانی هستن که به صورت رجیستری کد مینویسن یا از spl   استفاده میکنند که این توضیحات برای اونها ضروری هست .

اولین قسمت فایل کیوب که باید تنظیم بشه مربوط به تب pinout هست . که در تصویر زیر میبینید .

 

من برای spi از واحد2 استفاده کردم . تننظیماتش رو توی کادر قرمز میبینید .

دوتا پایه هم برای cs و reset  احتیاج هست که اونها را باید خروجی قرار بدید . ( کادر زرد رنگ )

جزئیات تنظیم spi در سربرگ conf  را در تصویر زیر مشخص کردم .

شما با تنظیم  prescaler  ( بالای خط بسته  قرمز ) میتونید  baud rate که در خط بسته قرمز مشخص هست را تنظیم کنید که در اینجا روی 18  مگاهرتز تنظیم شده  . این در واقع همون فرکانس کلاک spi  میکرو هست .

برای تنظیم gpio هم طبق تصویر زیر اقدام کنید.

نکته ای که باید بهش توجه کنید اون ستونهایی هست که با خط قرمز نمایش داده شده .

اگر روی هر سطر کلیک کنید های لایت میشه و گسترده  ی اون در پایین نمایش داده میشه . که میتونیدبرای pin  مورد نظر اسم هم بگذارید که در کادر زرد میبینید .

تا اینجا تنظیمات مربوط به پریفرال ها انجام شده است . یک تعداد تنظیمات دیگه داره که میشه گفت سلیقه ای هستن ولی میتونن مفید باشن .

برای این تنظیمات  لازم هست که برید توی منوی project  و setting   رو انتخاب کنید . پنجره ای به شکل زیر باز میشه .

نکته مهم این تصویر کادر قرمز هست . علت انتخاب این گزینه ها پوشه بندی مربوط به پروژه هست . که خیلی واضح و سهل و راحت و قابل فهم از کار در میاد. البته نرم افزار من true studio  هست. نمیدونم برای نرم افزارهای دیگه چطوره !! همانطور که گفتم این موضوع سلیقه ای هست .

تنظیمات در برگه code generator  را من طبق تصویر زیر انجام میدم .

که بازم سلیقه ای هست . ولی این تنظیمات که توی کادر قرمز اومده ، برای من سهولت بیشتری ایجاد میکنه .

مورد سوم برگه advanced stting هست .که در تصویر زیر میبینید.

همانطور که در کادر قرمز میبینید ، کتابخانه مورد استفاده برای SPI 2  را LL  انتخاب کردم .

علتش رو به صورت هشدار زیر توضیح میدم :

هشدار :

در نسخه cube MX  4.26.0  که مورد استفاده من هست . واحد spi2  با کتابخانه HAL درست کار نمیکنه !!! ولی با کتابخانه LL  مشکلی نداره . صحت این مطلب را در مورد نسخه 5 دقیقا نمیدنم ( روی سیستم من با مشکل مواجه هست و خوب کار نمیکنه ) ولی در هر صورت این موضوع را مد نظر داشته باشید .

 

بعد از اعمال این تنظیمات و تولید کد پروژه ، کدهای ضروری مربوط به  فایل  main  در تصاویر زیر نمایش داده  شده است .

ابتدا در فایل main.c  اینکلود ها را اضافه کنید و بهتر است در همان جایی که کیوب در نظر گرفته کدها را بنویسید . طبق تصویر زیر

 

و در خود تابع main()   دستورات درون کادر قرمز نوشته شود . دقت کنی که مکان آنها بعد از اجرای توابع مربوط به پیکر بندی gpio و spi  باشد. این مطلب را در تصویر زیر و درون کادر قرمز میبینید .

حال نوبت به معرفی یک تابع ، به عنوان تابع تاخیر میرسد بهتر است اینکار در فایل main.h  انجام شود .

یک مثال برای این هدف در کادر قرمز تصویر زیر نمایش داده شده است .

 راه اندازی در کمپایلر کیل uvision5

تمام موارد بالا برای کمپایلر کیل نیز صادق است با این تفاوت که 2 مورد اضاف وجود دارد یکی تعریف 2 متغیر عمومی که در تصویر زیر مشاهده میکنید . ( کادر قرمز)

توجه : این  دو متغیر برای نسخه های قدیمی احتیاج است و برای نسخه هایی که بعد از تاریخ 1399/3/6

تهیه نموده اید ، لازم نیست .

و یک تنظیمات در کمپایلر کیل احتایج هست که در 2 تصویر زیر میبینید .

تصویر زیر مربوط به تنظیم نسخه کمپایلر هست .

و تصویر زیر مربوط به استاندارد زبان C مورد استفاده است .

در اینجا توضیحات مربوط بهراه اندازی کتابخانه برای stm32f1xx  به پایان رسید .

امیدوارم استفاده برده باشید و مورد توجه تان قرار گرفته باشد .

 در قسمت بعدی الزامات  راه اندازی  برای cortex M0 را شرح میدم .

با سپاس از توجه تان.

 

لینک قسمت قبل

لینکی قسمت بعد

 

مالکیت معنوی : لطفا کپی نکنید ، لینک بدید .

راهنمای استفاده از کتابخانه lcd nokia1661 - قسمت8

لینک پست معرفی مشخصات کتابخانه

لینک اولین قسمت آموزش

لینک فهرست موضوعی مطالب

موضوع این قسمت: راه اندازی کتابخانه برای AVR

با سلام .

 

در این پست میخوام به طور خلاصه در مورد نحوه ی راه اندازی کتابخانه  برای avr یک توضیحاتی بدم .

خوشبختانه در مورد AVR  خیلی کار پیجچیده ای نیاز نیست . فقط فایلها رو به پروژه اضافه کنید ( برطبق همون نرم افزاری که با اون کار میکنید )و ترتیب کدها در فایل main باید به صورتی باشه که در تصویر زیر میبینید.

 

 

در اینجا توضیحات مربوط به راه اندازی کتابخانه برای avr به پایان رسید .

امیدوارم استفاده برده باشید .

 در قسمت بعدی  راه انداز کتابخانه برای stm32  را شرح میدم .

با سپاس از توجه تان.

 

لینک قسمت قبل

لینکی قسمت بعد

 

مالکیت معنوی : لطفا کپی نکنید ، لینک بدید .

 

راهنمای استفاده از کتابخانه lcd nokia1661 - قسمت7

لینک پست معرفی مشخصات کتابخانه

لینک اولین قسمت آموزش

لینک فهرست موضوعی مطالب

موضوع این قسمت: معرفی کارکرد توابع قسمت گرافیکی  و نکات راه اندازی 

با سلام .

در این قسمت توابع  مربوط به بخش گرافیکی کتابخانه را توضیح میدم .

فایل های ایk بخش در پوشه glcd قرار داد . این بخش کتابخانه تنظیمات خاصی نداره و تنها با اینکلود کردن هدر فایل ، قابل استفاده است . دستور اینکلود قسمت گرافیکی باید بعد از اینکلود قسمتهای قبلی کتابخانه باشد.

جهت یادآوری محتویات پوشه glcd را در تصویر زیر میبینید .

 

الگوی توابع این قسمت در فایل  graphic_lcd.h  تعریف شده است .

لیست این توابع در تصویر زیر مشخص شده است .

عملکرد توابع گرافیکی در توضیحات زیر است :

تابع

glcd_draw_fill_rectangle (rgb_color_typedef   color ,uint8_t x1,uint8_t y1 ,uint8_t x2 , uint8_t y2);

 

این تابع یک مستطیل توپر رسم میکند . 

و متغیرهای آن به شرح زیر است

color  =  کد رنگ مستطیل میباشد.
 

x1 , y1   =   مختصات گوشه ی بالا سمت چپ مستطیل میباشد.

x2 , y2   =   مختصات گوشه ی پایین  سمت راست مستطیل میباشد.

*** توجه :

x =  شماره ستون  و   y = شماره سطر است .
 

تابع glcd_draw_line ( color ,  thicknes ,x1, y1 , x2 , y2);

این تابع یک خط از مختصات x1 ,y1  به مختصات x2 , y2 رسم میکند .

color  =  کد رنگ خط میباشد.

thicknes = ضخامت خط را مشخص میکند .

اگر شیب خط کمتر از 45 درجه باشد خط، به سمت پایین ضخیم میشود .و اگر بیشتر از 45 درجه باشد به سمت راست ضخیم میشود .

در واقع خط ضخیم  شده بیشتر شبیه متواضی الاضلاع هست .

 

تابع glcd_draw_fill_circle(color ,  x1, y1 , radius);

این تابع یک دایره توپر به رنگ color  رسم میکند .

x1,y1 مختصات مرکز دایره و radius شعاع دایره است .

 تابع :glcd_draw_fill_quadrant( color, quad_num, x0, y0 , radius)

این تابع یک ربع دایره توپر به رنگ color  و مرکز x0,y0  و شعاع radios رسم میکند .

quad_num : 

میتواند مقادیر 1 تا 4 را بپذیرد که تعیین کننده موقعیت ربع دایره است ، که به شرح زیر میباشد.

اگر صفحه ساعت را در نظر بگیرید .

1 =  ربع دایره بین ساعت 3 تا 6

2 =ربع دایره بین ساعت 6 تا 9

3 = ربع دایره بین ساعت 9 تا 12

4 = ربع دایره بین ساعت 12 تا 3

برای بقیه مقادیر چیزی رسم نمیکند .

تابع glcd_draw_rectangle( color , thicknes , x1,y1 ,x2 , y2)

این تابع دقیقا مانند تابع  رسم مستطیل توپر است با این تفاوت که یک مستطیل توخالی رسم میکند .

thicknes = ضخامت اضلاع مستطیل میباشد . و نکته اینکه اضلاع به سمت داخل مستطیل ضخیم میشوند .

 

تابع glcd_draw_circle( color , thicknes  , x0, y0 , radius)

این تابع مانند تابع رسم دایره توپر (glcd_draw_fill_circle) است با این تفاوت که یک دایره توخالی با ضخامت حاشیه ای به اندازه ی  thicknes  رسم میکند . البته تنها از مقدار 1 برای thicknes استفاده نمایید .

تابع glcd_draw_quadrant( color, quad_num, thicknes , x0, y0 , radius)

شرح متغیرهای این تابع دقیقا مانند تابع  glcd_draw_fill_quadrant است . با این تفاوت که یک ربع دایره توخالی رسم میکند و تنها مورد اضافی متغیر thicknes هست که ضخامت حاشیه ربع دایره را مشخص میکند . بهتر از تنها از مقدار 1 استفاده کنید .

**************************************************************

توابع اضافه شده در نسخه 1.1.3 : ( این نسخه در تاریخ 1399/4/3 منتشر شده است)

تابع :

glcd_draw_circle_rectangle(rgb_color_typedef   color ,glcd_cor_type  cir_rad  ,  uint8_t  thicknes ,glcd_cor_type x1,glcd_cor_type y1  ,glcd_cor_type x2 , glcd_cor_type y2)

این تابع برای شما یک مستطیل یا مربع توخالی  با گوشه های گرد رسم میکند . و متغیر cir_rad   شعاع انحای گوشه های مربع میباشد .

توضیح بقیه پارامتهرهای آن شبیه تابع  glcd_draw_rectangle  است .

تابع :

glcd_draw_fill_circle_rectangle(rgb_color_typedef   color ,glcd_cor_type  cir_rad,glcd_cor_type x1,glcd_cor_type y1 ,glcd_cor_type x2 , glcd_cor_type y2);

این تابع مانند تابع بالا است با این تفاوت که مستطیل یا مربع را به طور توپر رسم میکند .

**************************************************************

اضافه کردن به پروژه :

کافیست فایل graphic_lcd.h را به پروژه پیوست کنید و فایلی سورس و هدر کتابخانه را در جای مناسب درون پروزه قرار دهید .

 

در اینجا توضیحات مربوط به قسمت گرافیکی کتابخانه به پایان رسید .

امیدوارم استفاده برده باشید .

 در قسمت بعدی الزامات  راه اندازی  برای AVR  را شرح میدم .

با سپاس از توجه تان.

 

لینک قسمت قبل

لینکی قسمت بعد

 

مالکیت معنوی : لطفا کپی نکنید ، لینک بدید .

 

راهنمای استفاده از کتابخانه lcd nokia1661 - قسمت6

لینک پست معرفی مشخصات کتابخانه

لینک اولین قسمت آموزش

لینک فهرست موضوعی مطالب

موضوع این قسمت: معرفی کارکرد توابع قسمت متنی و نکات راه اندازی 

با سلام .

در قسمت قبلی توابع مربوط به هسته رو توضیح دادم . ر این قسمت توابع مربوط به قسمت متنی را توضیح میدم . این قسمت یک  سری تنظیمات داشت که در قسمت4 توضیح داده شده است .

هدر و سورس فایل های قسمت متنی در پوشه  txt_lcd_adjustablefont قرار دارد .جهت یادآوری به تصویر زیر نگاه کنید .

 

الگوی توابع در فایل txt_lcd.h و بدنه توابع در فایل txt_lcd.c قرار دارد . محتویات هدر فایل را در تصویر زیر میبینید.

 

 

 

 

تابع (rgb_color_typedef   color)alcd_SetBackgroundColor :

این تابع رنگ پس زمینه را تعیین میکند . برای اینکه رنگ جدید اعمال شود لازم است که حتما یکبار صفحه پاک شود .

تابع alcd_Set_aligment( lcd_aligment_typedef   alig):

این تابع برای انتخاب حالت نوشتن چپ به راست ( انگلیسی) و یا حالت نوشتن راست به چپ ( فارسی ) استفاده میشود . مقادیر مجاز برای متغیر تابع txtlcd_right_to_left و txtlcd_left_to_right هستند .که نامشان گویای عملکردشان هست .

 

تابع alcd_Set_orient(lcd_orientation_typedef   orient) :

این تابع برای چاپ متن در زوایای 0 و  90 و 180 و 270 در صفحه به کار برده میشود .متغیر تابع زاویه را تعیین میکند و مقادیر مجاز آن به صورت زیر است .

txtlcd_orientation_normal

txtlcd_orientation_90

txtlcd_orientation_180

txtlcd_orientation_270

 

تابع  alcd_set_font(txtlcd_font_def_typedef      font) :

با این تابع میتوان فونت مورد استفاده را تغییر داد . فقط کافیست نام فونت مورد نظر را در متغیر تابع وارد کنید .( در مورد نام فونت در قسمت 4 قبلا توضیح دادم )

تابع alcd_gotocharxy(uint8_t x, uint8_t y) :

این تابع مکاننما را به صورت متنی به سطر (y)و ستون (x) ، برای نوشتن یک متن در صفحه منتقل میکند.

یک تفاوتی بین مختصات x,y  در این تابع وجود دارد .

مختصات x  بر ساس همان تعداد پیکسلهای عرض lcd  است . که به طور مثال اگر صفحه را روی 90 در جه تنظیم کرده باشید . مقداری بین 0 تا 159 ( برای ال سی دی 128*160 ) خواهد داشت .

اما مختصات y ، شماره سطر چاپ به صورت متنی است و به فونت مورد استفاده بستگی دارد . به طور مثال اگر حروف فونتی دارای ارتفاع 16 باشند :

برای y=0 مکاننما به سطر 0 از مختصات گرافیکی منتقل میشود .

برای y=1 مکاننما به سطر 16 مختصات گرافیکی منتقل میشود .

برای y=2 مکاننما به سطر 32 مختصات گرافیکی منتقل میشود .

***توجه :

برای فارسی نویسی :

دستور   alcd_gotocharxy(0,0)   مکاننما را به گوشه راست و بالا  صفحه نمایش منتقل میکند .

برای حالت انگلیسی :

دستور   alcd_gotocharxy(0,0)   مکاننما را به گوشه چپ و بالا  صفحه نمایش منتقل میکند .

تابع alcd_gotoxy(uint8_t x, uint8_t y) :

عملکرد این تابع دقیقا مانند تابع بالا است با این تفاوت که متغیر y  هم مانند متغیر x بر حسب تعداد پیکسلهای ارتفاع lcd  هست و رطی به فونت مورد استفاده ندارد . به طور مثال برای یک ال سی دی با رزولوشن 128*160 : مقدار x بین 0 تا 127 و مقدار y  بین 0تا 159 خواهد بود .

این تابع به شما این امکان را میدهد که یک متن دلخواه با هر انداره فونتی را، در هر نقطه دلخواه از صفحه ، بنویسید .

تابع   alcd_clear(void) :

این تابع کل صفحه را پاک میکند . و آنرا به رنگ پس زمینه رنگ آمیزی میکند .

 

تابع alcd_init(void) :

این تابع قبل از اجرای هر تابعی از کتابخانه و بعد از تابع راه اندازی هسته ( lcd_init)  در متغیر تابع باید

متغیر عمومی lcd_position ( در ابتدای فایل تعریف شده است)را قرار داد .

تابع alcd_putc(rgb_color_typedef  color, char c) :

این تابع یک کارکتر را به رنگ دلخواه را  در lcd  چاپ میکند . مکاننما قبلا باید به جای مورد نظر منتقل شده باشد .

 تابعalcd_putsf(rgb_color_typedef  color, const char*  str) :

این تابع یک رشته را که در حافظه فلش قرار دارد به رنگ دلخواه در صفحه چاپ میکند .

تابع  alcd_putsf_persian(rgb_color_typedef  color, const char*  str) :

این تابع همانند تابع بالا است و یک رشته را که در حافظه فلش قرار دارد به رنگ دلخواه در صفحه چاپ میکند . با این تفاوت که هنگامی که فارسی نویسی را فعال کرده باشید در دسترس است و برای چاپ متون فارسی استفاده میشود . این تابع نوع حروف ( تنها ، اول چسبان ، وسط و آخر ) را به طور اتوماتیک تشخیص میدهد . البته این تابع میتواند حروف انگلیسی و نمادها را چاپ کند  ولی به دلیل امکانات اضافه ، سرعت کند تری دارد .

تابع alcd_puts( color,str)  :

این تابع یک رشته را که در حافظه رم قرار دارد . به رنگ دلخواه در صفحه چاپ میکند .

تابع  alcd_puts_persian( color,str)

این تابع برای فارسی نویسی است قابلیت تشخیص اتوماتیک حروف را دارد و برای نوشت یک رشته از حافظه رم روی lcd  استفاده میشود .

***توجه :

در هر 4 تابع بالا ابتدا باید مکاننما به محل مورد نظر منتقل شود .

***************************************************************

توابع اضافه شده در نسخه 1.1.3 : ( این نسخه در تاریخ 1399/4/3 منتشر شده است)

تابع alcd_get_pixel_len_of_flash_string(const char *str);

این تابع طول رشته ای که در حافظه فلش قرار دارد را  برحسب پیکسل بر میگرداند  .

 

تابع alcd_get_pixel_len_of_flash_string_persian(const char *str):

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

 

 ماکروی های alcd_get_pixel_len_of_string(str) و alcd_get_pixel_len_of_string_persian(str) :

ماکروهای معادل برای توابع بالا به منظور تعیین طول یک رشته در حافظه sram  هستند .

نکته : این توابع و ماکروها میتوانند طول رشته هایی به اندازه حدکثر  65535 پیکسل را دارد .

 

یک کاربرد این توابع زمانی است که شما میخواهد یک رشته به طور دقیق در وسط صفحه نمایش دهید . اگر فونت از نوع ثابت باشد اینکار بدون این توابع

آسان است . اما اگر از فونت باطول متغیر استفاده شود انجام اینکار بدون این توابع میتواند آزار دهنده و وقت گیر باشد .

***************************************************************

اضافه کردن قسمت متنی کتابخانه به پروژه :

برای اضافه کردن این قسمت کتابخانه کافیست فایلtxt_lcd.h   را در فایل main.c  اینکلود کنید .سپس در تابع main   و قبل از همه دستورات مربوط به کتابخانه و بعد از تابعnlcd_init(LCD_COLOR_SIZE )  تابع

alcd_init()  را بنویسید.

در اینجا توضیحات مربوط به قسمت متنی به پایان رسید . در قسمت بعدی بخش گرافیکی را توضیح میدهم .

با سپاس از توجه تان .

لینک قسمت قبلی

لینک قسمت بعدی

 

 

 

مالکیت معنوی : لطفا کپی نکنید ، لینک بدید .

 

 

 

 

 

 

 

 

 

راهنمای استفاده از کتابخانه lcd nokia1661 - قسمت5

لینک پست معرفی مشخصات کتابخانه

لینک اولین قسمت آموزش

لینک فهرست موضوعی مطالب

موضوع این قسمت : معرفی کارکرد توابع بخش هسته کتابخانه LCD و نکات راه اندازی .

با سلام .

مجموعه فایلهای قسمت هسته کتابخانه درون پوشه lcd قرار دارد . برای یاد آوری محتویات این پوشه  به تصویر زیر نگاه کنید .

 

 

 

 

 

 

 

 

 

 

در مورد اینکه این فایلها محتوی چه چیزهایی هستند در قسمتهای قبلی گفته شده است .

در این قسمت ما با 2 فایل  nokia1661_lcd.h و   nokia1661_lcd.c    سروکار داریم .این فایلها شامل تعریف الگوی توابع و همچنین کد توابع هست . در زیر تصویر تعریف الگوی توابع درون فایل  را میبینیم .

 

شرح توابع :

تابع  void lcd_spi_init(void) :

این تابع برای پیکر بندی پریفرال spi میکرو در نسخه avr استفاده میشود . البته فقط در حالتی که ارتباط سخت افزاری را انتخاب کرده باشید وجود دارد .  در نسخه stm32 هم وجود دارد . ولی فقط spi را روشن میکند .  کد درstm32  ، به علت تفاوت در رجیسترها و همچنین استفاده از کتابخانه های مختلف  میتواند بسیار متنونع باشد . بنابرای تنظیم پریفرال به عهده ی خود کاربر گذاشته شده است .

 

تابع  nlcd_write_cmd(cmd)

این در واقع یک ماکرو هست و برای ارسال یک کد فرمان ( 8 bit )  به lcd استفاده می شود .

***یادآوری: کدهای فرمان در فایل spdf54124b.h  قرار دارد .

تابع nlcd_write_data(data)

این ماکرو هم قالب یک تابع را دارد و برای ارسال یک داده یا پارامتر فرمان 8 بیتی به lcd  استفاده میشود .

***توجه : در مورد اینکه فرمانها چه هستند و پارامترهای آنها چیستند نیاز هست که دیتا شیت  ال سی دی را مطاله کنید . البته اینکار بیشتر برای موارد خاص نیاز است .

مختصری در باره ارتباط 2 تابع بالا:

بعضی فرامین ال سی دی پارامترهایی دارند ، ابتدا با nlcd_write_cmd(cmd) کد فرمان به ال سی دی ارسال میشود و سپس هر تعداد پارامتر مورد نیاز باشد بوسیله استفاده چند باره از تابع nlcd_write_data(data) ارسال خواهد شد .

تابع nlcd_read(uint8_t reg , uint8_t * readbuffer , uint8_t   num)

این تابع برای خواندن مقادیری از  ال سی دی  استفاده میشود .

 reg : کد فرمان مربوط به خواندن از lcd هست .

readbuffer : نام آرایه ای هست که قراره کدهای خوانده شده از lcd  در اون ذخیره بشه .

num: تعداد بایتهایی که  خوانده  خواهد شد.

تابع nlcd_init(lcd_colorsize_typedef  size)

این تابع ال سی دی را برای شروع به کار آماده میکند و قبل از اجرای هر تابعی از کتابخانه ، باید اجرا شود . برای متغیر  size باید از  عبارت LCD_COLOR_SIZE (که در فایل nokia1661_lcd_conf.h تعریف شده است ) استفاده شود .

 تابع  nlcd_paint_pixel(rgb_color_typedef  color) :

این تابع یک پیکسل را در جایی که مکان نمای فعلی قرار دارد رنگ میکند.

تابع nlcd_paint_pixels(rgb_color_typedef  color , uint16_t   num) :

عملکرد این تابع مانند تابع بالا هست فقط به تعداد num پیکسل را رنگ میکند.

***توجه:  این توابع معمولا با تابع بعدی استفاده میشود .

تابع nlcd_set_window(uint8_t  x , uint8_t  y , uint8_t  w , uint8_t  h ) :

این تابع یک محدوده برای مکان نمای گرافیکی lcd  تعیین میکند که مکان نما فقط درون آن حرکت میکند .

و برای رنگ کردن محدوده ی مشخصی از صفحه کاربرد دارد .

متغیرهای x شماره ستون و y  شماره سطر گوشه بالا چپ محدوده است .و w ( width )   پهنا و h (height) ارتفاع محدوده میباشد .

 

کاربرد 3 تابع بالا در ارتباط با یکدیگر :

1 - رنگ کردن قسمتی از صفحه :

ابتدا با تابع nlcd_set_window یک محدوده مشخص میکنیم . سپس با تابع nlcd_paint_pixels پیکسلهای محدوده را رنگ میکییم . مثال :

      nlcd_set_window(10,20, 18,36);

      nlcd_paint_pixels( color , 18*36);

     لازم است که متغیر num تابع nlcd_paint_pixels  به تعداد پیکسلهای محدوده مشخص شده توسط nlcd_set_window باشد .

2 - نمایش یک تصویر در  قسمتی از صفحه :

ابتدا یک محدوده به اندازه سایز تصویر در نقطه ای که مایل هستیم را بوسیله تابع nlcd_set_window مانند مثال بالا ، ایجاد میکنیم سپس رنگ پیکسلهای تصویر که از حافظه یا رابط سریال خوانده شده است را توسط تابع nlcd_paint_pixel  تک به تک به lcd ارسال میکنیم .

 

************************************

اضافه کردن قسمت هسته کتابخانه به پروژه :

برای اضافه کردن این قسمت کتابخانه کافیست فایل nokia1661_lcd.h  را در فایل main.c  اینکلود کنید .

سپس در تابع main   و قبل از همه دستورات مربوط به کتابخانه ، تابع nlcd_init(LCD_COLOR_SIZE )

 با همان متغیر داخل تابع را بنویسید.

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

در قسمت بعدی توابع مربوط به قسمت متنی را شح خواهم داد.

لینک قسمت قبلی

لینک قسمت بعدی 

مالکیت معنوی : لطفا کپی نکنید ، لینک بدید .

 

 

 

 

 

 

 

راهنمای استفاده از کتابخانه lcd nokia1661 - قسمت4

لینک پست معرفی مشخصات کتابخانه

لینک اولین قسمت آموزش

لینک فهرست موضوعی مطالب

موضوع این قسمت: تنظیمات قسمت متنی

با سلام مجدد.

در این بخش قصد دارم تنظیمات مربوط به قست متنی را توضیح بدم .اگر میخواهید روی ال سی دی متن بنویسید باید این قسمت از کتابخانه را تنظیم کنید.این تنظیمات در فایل txt_lcd_conf.h هست ، که این فایل درپوشه txt_adjustablefont قرار دارد.بهتر است اول نگاهی به محتویات فایل، در تصویر زیر  بیندازیم.

محتویات فایل txt_lcd_conf.h

در این فایل 5 ماکرو میبینید که کارکرد آنها به شرح زیر است :

TXTLCD_DEFULTFONT :

این ماکرو ، فونت پیش فرض برای کتابخانه را تعریف میکند . (البته لزوما نام فونت با نام هدر فایلی که فونت در آن تعریف شده یکسان نیست.... ).

کتابخانه قبل از راه اندازی نیاز دارد که یک فونت به عنوان پیشفرض برای آن تعریف شود . این فونت که در تصویر تعریف شده فونت انگلیسی هست . اگر قصد دارید روی ال سی دی فارسی بنویسید ، از ابتدا فونت فارسی رو به عنوان پیشفرض تعریف کنید .

برای اینکار فایل فونت را باز کنید . در درون فایل علاوه بر رشته ها ، که شکل حروف و غیره ... را در خود نگه داشته اند ، یک ساختار( struct ) وجود دارد . نام آن ساختار همان نام فونت است .

مثالی از مطالب بالا را در شکل زیر میبیند.

 

در تصویر قسمتی که هایلایت شده است نام فونت هست . این نام باید به عنوان نام فونت پیشفرض تعریف شود و مشاهده میکنید که با نام فایل متفاوت است .

TXTLCD_TRANSPARENT:

این ماکرو حالت ترانسپرانت را برای قسمت متنی ، فعال یا غیر فعال میکند . و فقط دو مقدار Txtlcd_enable  و   Txtlcd_disable را قبول میکند . این مقادیر در فایل txt_lcd_names.h تعریف شده اند.

و برای استفاده ، آنها را از فایل ، کپی پیست کنید.

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

TXTLCD_PERSIAN_type :

این ماکرو برای تسهیل در استفاده از فونت فارسی میباشد .

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

لازم به ذکر است فعال کردن این گزینه حدود 1 کیلوبایت به حجم کتابخانه اضافه میکند .

البته بدون فعال کردن این گزینه میتوان از فونت فارسی استفاده کرد ، ولی تشخیص اینکه حروف از کدام نوع هستند به  عهده خودتان خواهد بود و باید کد مخصوص حروف را از فایل اکسلی که همراه کتابخانه است پیدا کنید و در رشته قرار دهید .

TXTLCD_VERT_FONT_SPACE  :

این ماکرو فاصله بین دوسطر را افزایش میدهد که میتواند مقداری بین 0 تا 255 داشته باشد . مقادیر منفی باعث ایجاد خطا خواهد شد .

TXTLCD_HORZ_FONT_SPACE :

این ماکرو فاصله  افقی حروف از یکدیکر را افزایش میدهد و میتواند مقداری بین 0 تا 255 داشته باشد .

البته این تنظیم بیشتر برای حروف انگلیسی و نمادها قابل استفاده است . اگر آنرا برای حروف فارسی به کار ببرید و مقداری بیش از صفر مثلا 1 به آن بدهید ، باعث بریده بریده شدن حروف کلمات میشود . که البته میتواند افکت جالبی هم باشد .

 

تنظیم قسمت متنی کتابخانه در اینجا به پایان رسید  امیدوارم از این مطالب استفاده لازم را برده باشید .

در قسمت بعدی به شناخت و عملکرد توابع قسمت هسته lcd که تنظیم آن در قسمت قبلی توضیح داده شد خواهیم پرداخت .

لینک قسمت قبلی

لینک قسمت بعدی

 

مالکیت معنوی :لطفا کپی نکنید لینک بدید .

 

 

 

راهنمای استفاده از کتابخانه lcd nokia1661 - قسمت2

لینک پست معرفی مشخصات کتابخانه

لینک اولین قسمت آموزش

لینک فهرست موضوعی مطالب

موضوع این قسمت: شماتیک لازم برای راه اندازی lcd

باسلام.

در قسمت قبلی مشخصات فنی کتابخانه رو معرفی کردم .

توی این قسمت در مورد شماتیک لازم برای راه اندازی ، مطالبی رو میگم .

چون AVR  با 5 ولت کار میکنه ( البت سریهای Aمثل ATmega8A  یا ATmega32A با 3.3 هم میتونن کار کنن ) .و ولتاژ lcd  مقدار 3.3V هست بنابراین نمیشه مستقیم lcd  را به میکرو متصل کرد . بنا براین  لازم هست از شماتیک های زیر استفاده کنیم.

این شماتیک برای میکروهای stm32  و کلا هر میکرویی که با ولتاژ 3.3 ولت راه اندازی شده باید استفاده بشه .

و شماتیکی که در ادامه میبینید برای میکروهای AVR و ولتاژ تغذیه 5V  هست . البته در این تصویر 2 شماتیک میبینید که به دلخواه میتونید یکیش رو انتخا کنید .

شماتیک برای AVR

بحث شماتیک برای راه اندازی lcd به پایان رسید .

سپاس بابت توجه تان .

لینک قسمت قبلی

لینک قسمت بعدی

 

مالکیت معنوی : لطفا کپی نکنید لینک بدید .

 

راهنمای استفاده از کتابخانه lcd nokia1661 - قسمت3

لینک پست معرفی مشخصات کتابخانه

لینک اولین قسمت آموزش

لینک فهرست موضوعی مطالب

موضوع این قسمت: تنظیم کردن  هسته کتابخانه

با سلام .

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

همانطور که در قسمت قبلی توضیح دادم . کتابخانه شامل چند پوشه هست . پوشه lcd  شامل فایل های مربوط به هسته کتابخانه هست .و پوشه   txt_lcd_adjustablefont که در واقع به لایه متنی هست . هر دوی قسمت های این کتابخانه دارای تنظیماتی هست .

که ابتدا قسمت تنظیمات هسته رو توضیح میدم .

تننظیمات هسته در فایل nokia1661_lcd_conf.h  قرارداره . و محتویات این فایل رو  در تصویر زیر میبینید.

محتویات فایل nokia1661_lcd_conf.h

اولین قسمت مربوط به  پایه های lcd  هست .

LCD_RST_PORT :

  در واقع مربوط به پورتی هست که پایه ریست lcd  به اون متصل هست .

مثلا برای نسخه avr   از PORTB  یا PORTC  وغیره.... استفاده میشه و برای نسخه stm32  از عباراتی مانند GPIOA یا GPIOC یا غیره ....باید استفاده کرد .

LCD_RST_PIN :

مربوط به شماره پینی از پورت هست که پایه ریست lcd  به اون متصل شده .

عبارات  LCD_SCL_PORT    ،   LCD_SDA_PORT    ،    LCD_CS_PORT 

 به ترتیب مربوط به معرفی پایه های SCL ,  SDA , CS    از lcd هست .

و  عبارات  LCD_SCL_PORT    ،   LCD_SDA_PIN    ،    LCD_CS_PIN   مربوط به شماره پینها هستند.

اگر میخواهید از سخت افزار  spi میکرو برای ارتباط با lcd استفاده کنید . باید توی دیفاین پایه های میکرو رو جوری تعریف کنید که ارتباط زیر بین پایه ها برقرار باشه :

از طرف میکرو      از طرف lcd

پایه  SDA  ----->     MOSI

پایه        SCL -----> SCK 

پایه  CS و RST ال سی دی  رو به هر پایه دلخواه میکرو میتوانید متصل کنید .
توجه1 :

برای نسخه avr  لازم نیست که واحد spi  توسط شما تنظیم شود ، اینکار به طور اتوماتیک هنگام اجرای کد کتابخانه انجام می گردد . اما برای نسخه stm32 لازم است که واحد spi ، توسط نرم افزار کیوب یا به هر روشی که مایل بودید توسط کاربر روی مد Master  half Duplex تنظیم گردد .

 

توجه2:

در نسخه stm32 Cortex_M0  :درحالت ارتباط نرم افزاری لازم  است که پایه های مربوط به reset , CS ,SDA ,SCL را هنگام ساختن پروژه به وسیله نرم افزار کیوب روی  out put  و  pushpull تنظیم نمایید . در صورتی که از حالت ارتباط spi استفاده میکنید این کار را فقط برای reset , CS انجام دهید . برای پایه های SDA ,SCL  هنگام تنظیم spi  انجام خواهد شد.

***هشدار:

در مورد نسخه stm32 دقت کنید که پین های lcd  روی پایه های مربوط به پروگرامر stlink قرار ندهید . 

قسمت بعدی مربوط به گزینه  استفاده از سخت افزار میکرو هست .

LCD_INTERFACE_TYPE :

این گزینه مربوط به انتخاب ارتباط از طریق سخت افزار میکرو یا ارتباط به صورت نرم افزاری( شبیه سازی ارتباط spi روی پینهای میکرو ) است .

مقادیر مجاز برای این گزینه در فایل nokia_lcd_names.h  تعریف شده است .و شامل دوگزینه زیر است .

 Lcd_hardware_spi9bit       
 Lcd_software_spi9bit  

گزینهLCD_SPI_UNIT :

این قسمت مربوط نسخه Stm32 است و تنها زمانی کاربرد دارد که از حالت ارتباط سخت افزاری ( Lcd_hardware_spi9bit)  استفاده شود . و نام آن(SPI2 )  جزء نامهای کتابخانه نیست . و مربوط به هدر فایلهای کتابخانه های شرکت st ست . و معرف واحد spi میکرو هست که بنا به تعداد واحد های spi  میکرو میتوان یکی از مقادیر SPI1 ,SPI2  و غیره .... را انتخاب نمود .

قسمت مربوط به تعیین سایز  lcd  ( LCD screen size )  :

گزینه  LCD_CTRL_WIDTH:

این گزینه مربوط به تعداد پیکسلها در عرض lcd است که تعداد پیکسلها روبروی آن نوشته شده است.

گزینه  LCD_CTRL_HEIGHT:

این گزینه هم مربوط به تعداد پیکسلها درارتفاع lcd است که تعداد پیکسلها روبروی آن نوشته میشود .

بقیه قسمتها که توضیح داده نشده است ، نیازی به تغیر ندارد .

 

بحث مربوط به تنظیمات هسته کتابخانه به در اینجا به پایان رسید.

در قسمت بعدی در مورد تنظیمات مربوط به قسمت متنی توضیح میدم .

سپاس بابت توجه تان .

 

لینک قسمت قبلی

لینک قسمت بعدی

 

 

مالکیت معنوی : لطفا کپی نکنید . لینک بدید ....

 

 

راهنمای استفاده از کتابخانه lcd nokia1661 - قسمت1

لینک پست معرفی مشخصات کتابخانه

 

قسمت 2 : شماتیک برای راه اندازی lcd nikia1661

قسمت 3 : تنظیمات هسته کتابخانه

قسمت 4 : تنظیمات قسمت متنی کتابخانه

قسمت 5: آشنای با توابع قسمت هسته و اضافه کردن آن به پروژه

قسمت 6 : آشنایی با توابع قسمت متنی و اضافه کردن آن به پروژه

قسمت 7 : آشنایی با توابع قسمت گرافیکی و اضافه کردن آنها به پروژه

قسمت 8 : راه اندازی کتابخانه برای AVR

قسمت 9 : راه اندازی کتابخانه برای میکرو stm32f1xx  cortexM3

قسمت 10 : راه اندازی کتابخانه برای میکرو stm32f0xx  cortexM0

قسمت 11 : فرمت رنگ در lcd  و توضیحات مربوط به قسمت نمایش تصویر .

 

با سلام .

توی این سری از مطالب قرار هست  در موردفایلها ، قابلیتها ، نحوه ی تنظیمات، و راه اندازی  کتابخانه مربوط به lcd nokia1661  مطالبی را بیان کنم . این مطالب سبب صرفه جویی در زمان شما برای کار با کتابخانه خواهد شد پس به دقت مطالب را دنبال نمایید.

برای تهیه کتابخانه میتوانید به اینجا مراجعه نمایید

توی این پست ابتدا در مورد فایلها ی کتابخانه و اینکه هر کدام شامل چه چیزهایی هستند صحبت میکنم .

زمانی که فایل در یافتی رو از حالت فشرده خارج میکنید 4 پوشه در اختیار شما قرار میگیرد .

فایلهای کتابخانه

پوشه Example  مثال راه اندازی است که شامل کدها و فایل اجرایی برای avr یا stm32  است   .

پوشه glcd مربوط به قسمت گرافیک،

پوشه txt_lcd_adjustablefont مربوط به قسمت متنی  ،

و پوشه lcd  در واقع هسته کتابخانه  است.

قبل از اینکه در مورد فایلهای هر پوشه توضیح بدم ، یک مطلب کلی را در مورد نام فایلهاو کارکردشون توضیح میدم :

1 - فایلهایی که در نام آنها typedef  وجود دارد :

   این فایل شامل تعاریف مربوط به نوع داده های مورد استفاده کتابخانه است.

2 - فایلهایی که در نام آنها names وجود دارد :

  این فایل شامل مقادیر مجاز برای استفاده در فایل   conf  و typedef  است . که برای سهولت استفاده نامگذاری شده اند.

3- - فایلهایی که در نام آنها conf وجود دارد :

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

بعد از این توضیح کوتاه فایلهای هر پوشه را توضیح میدم .

پوشه lcd  شامل فایلهای زیر است:

فایل های هسته

فایل های nokia1661_lcd.h و nokia1661_lcd.c   :

در این فایل هاالگوی توابع و  بدنه توابع کتابخانه تعریف شده است .

فایل spdf54124b.h :

این فایل شامل کامندهای مربوط به درایور lcd  هست . که برمبنای دیتا شیت چیپ درایور lcd نامگذاری شده اند .

فایل spdf54124b_color.h :

این فایل شامل یک تعدادی از کدهای رنگ مربوط به lcd هست .

بقیه فایلها هم کارکردی مطابق طبق توضیحات کلی بالادارند .

 

فایلهای پوشه glcd شامل فایلهای زیر است :

فایلهای پوشه glcd

این دو فایل شامل الگوی توابع و بدنه توابع گرافیکی کتابخانه میباشند .

فایلهای پوشهtxt_lcd_adjustablefontشامل فایلهای زیر است :

فایلهای قسمت text

4 فایل اولی از بالا  فونت هستند .

فایلهای txt_lcd.h و txt_lcd.c  فایلهلی اصلی قسمت متنی هستندکه تعاریف الگو و سورس توابع در آنها قرار دارد.

فایل txt_lcd_persian_table.h :

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

داده های درون این فایل برای تشخیص اتوماتیک نوع حروف فارسی استفاده میشود .

فایل txt_lcd_font.h :

تمام فونتهایی را که قصد استفاده از آنها را دارید باید در این فایل تعریف شوند .

کارکرد بقیه فایلها هم طبق همان توضیحات کلی در مورد فایلها میباشد .

 

در اینجا قسمت معرفی فایلها به پایان رسید. در قسمت بعدی مطالب مربوط به راه اندازی کتابخانه و تنظیمات مربوطه را توضیح میدم .

لینک قسمت بعدی

 

سپاس بابت توجه تان .

 مالکیت معنوی : لطفا کپی نکنید . لینک بدید....

 

 

کتابخانه حرفه ای nokia 1661 lcd برای میکروهای  stm32 و  Avr + فونت فارسی

با سلام .

آپدیت :

این کتابخانه در تاریخ 1399/4/3 به نسخه 1.1.3 ارتقا یافته است .

برای اطلاع از تغیرات نسبت به نسخه قبلی(1.0.1) ، لطفا به اینجا مراجعه نمایید.

کتابخانه درایور tft 3.2" با چیپ ili9341 قابل اتصال به این کتابخانه را لطفا در ( اینجا) ببینید.

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

چند وقت پیش از یک کتابخانه که در مراحل اول نوشتنش بودم رونمایی کردم . اون موقع نیمه کاره بود و خوشبختانه الان کامل شد . و واقعا ازش رضایت دارم .

این که چرا این کتابخانه رو نوشتم در پست رونمایی محصول اولیه ( اینجا ) کامل توضیح دادم.

در رابطه با آپدیت این کتابخانه لطفا اینجا را ببینید.

این کتابخانه برای lcd های nokia1661 و nokia1616 و کلا تمام ال سی دی هایی که کنترلر اونها

SPFD54124B هست و در مود spi 9bit کار میکنه قابل استفاده هست.

از مزایای این lcd برای استفاده در مدارات میکروکنترلری این است که فقط به 4 پین از میکرو برای ارتباط احتیاج دارد و بسیار ارزان قیمت است ( از ماژولهای led با تعداد 3 رنگ نیز ارزانتر است )و با توجه به مزایایی که دارد نسبت بسیاری از lcd ها به صرفه تر است.

اما بریم سر اصل مطلب :

توضیح مختصری در مورد lcd nokia 1661 :

این یک ال سی دی ارزان قیمت tft 1.8" با رزولوشن 128×160 پیکسل هست ( البته برای نوکیا 1616 130×161 هست)که از 65 هزار رنگ پشتیبانی میکنه و از ارتباط spi 9bit استفاده میکنه و ولتاژ تغذیه و ولتاژ io ها 3.3 ولت است.

در زیر تصویر ال سی دی و نامگذاری پایه های اون رو میبینید .

تصویر lcd nokia1661

این کتابخانه برای میکروهای AVR شامل atmega16-32-64-128 وبرای میکروهای cortex m0وstm32f030 , stm32F0x1-2-8 و Cortex M4 شامل میکروهای STM32F429/439 STM32F405/415, STM32F407/417, STM32F427/437 به صورت رجیستری و cmsis نوشته شده است( یکی از دلایل سرعت بالای کتابخانه ) و برای سری stm32F1xx Cortext M3 هم آماده شده است ( با بورد blue pill تست گردید)

مشخصات آن به شرح زیر است :

1 - کمپایلر نسخه AVR : ـ avr gcc (نرم افزارهای winavr , Arduino , atmel studio ) با استاندارد زبانی c99 - gnu89 - gnu99

2 - کمپایلر نسخه stm32 : ـArm gcc ( نرم افزار true studio ) و با استاندارد زبانی c99 - c90 - gnu90 - gnu99 مطابقت دارد .( چون بر اساس زبان C استاندارد نوشته شده است ، برای دیگر کمپایلر ها و نرم افزارها قابل استفاده میباشد.)

3 - قابلیت تعریف pin های lcd روی پورتهای مختلف.

4 - قابلیت انتخاب ارتباط از طریق سخت افزار spi یا به صورت شبیه سازی روی پایه ها

5 - سرعت رفرش بالا خصوصابرای Avr :

به دلیل استفاده از سخت افزار spi و بهینه سازی توابع سرعت رفرش خصوصا در مورد نسخه AVR قابل توجه است . کلیپهای زیر به روشنی گویای این مطلب است .

سرعت رفرش در مورد نسخه stm32 با فرکانس کلاک spi 12MHZ و کلاک سیستم MHZ 48 در فیلم زیر مشاهده میکنید .

همانطور که میبینید در نسخهcortexM0 stm32 برای 10 بار رنگ کردن صفحه (رفرش) به 323 میلی ثانیه زمان نیاز هست . یعنی هر رفرش در 32.3 میلی ثانیه یا به عبارت بهتر 30.9 رفرش در ثانیه !!!

و این رقم برای AVR مقدار 11.2 بار رفرش در ثانیه هست . !!! که برای Avr و باتوجه به اینترفیس lcd رقم قابل توجهی هست که در فیلم زیر میبینید.

و برای نسخه stm32 CortexM3 سرعت رفرش را در تصاویر زیر مشاهده میکنید .

سرعت رفش تصویر بالا معادل 10.4 فریم در ثانیه است .

و سرعت رفرش در این تصویر 5.5 فریم در ثانیه است .

توجه : زمان مربوط به تصویر اول با استفاده از بهینه سازی کمپایلر روی سرعت ، بدست آمده و زمان مربوط به تصویر دوم بدون هیچگونه بهینه سازی بوده است . در هر دو حالت بوسیله سخت افزار spi با بادریت 18 مگاهرتز آزمایش شده است .

6. فونت :

6-1 - استفاده از فونتهای زیبا وشکیل .

6-2 - فونت این کتابخانه از نوع طول متغیر است .( البته قابلیت استفاده از فونت با طول ثابت را هم دارد ) که باعث فشردگی مناسب متن نوشته شده و زیبایی و طبیعی بودن آن میگردد.

6-3 - قابلیت استفاده همزمان ازانواع مختلف و سایزهای مختلف فونت بدون محدودیت در تعداد( تنها عامل محدودیت حافظه فلش میکروکنترولر شماست) .

6-4 - قابلیت استفاده از فونت فارسی با تشخیص خودکار نوع حروف ( اول ،آخر ،وسط یا تنها )

در تصویر زیر قابلیتهای شرح داده شده در بالا را مشاهده میکنید.

**** در تصویر به حروف ل و الف دقت کنید که همانند فونت های ویندوز به هم متصل شده اند

و همچنین به قابلیت افزایش طول حروف (حرف شین) .

نمایش قابلیتهای فونت

عملکرد تایپ انگلیسی و فارسی موجود در فونت فارسی.در تصویر زیر نمایش داده شده است .


تایپ فارسی و انگلیسی

در تصویر زیر تمام حروف موجود در فونت فارسی و انگلیسی به همراه اعداد را میبینید.


 حروف موجود در فونت

و در تصویر زیر علائم فونت فارسی و انگلیسی نمایش داده شده است .


نمادهای موجود در فونت

6-5- قابلیت فعال کردن transparent در مورد حروف چاپ شده در تصویر :

منظور از transparent چیست :

هر کدام از حروف فونت دارای یک فضای پس زمینه است که در واقع به شکل یک مستطیل است که حرف مورد نظر درون آن قرار دارد . هنگامی که قابلیت transparent فعال نباشد ، در هنگام چاپ حروف

پیکسلهای پس زمینه با رنگ مربوط به پس زمینه (bakground color ) که توسط کاربر تعیین میشود رنگ آمیزی میشود .و در واقع تصویر پشت حروف را پاک میکند . مانند تصویر زیر که میبینید قسمتی از مستطیل آبی و همچنین دایره بنفش رنگ پاک شده است .

تست عدم transparent

اما در هنگامی که قابلیت transparent فعال باشد ، تصویری که قبل از چاپ حروف روی lcd هست . در پس زمینه حروف ظاهر میشود و تغییری نمیکند. این قابلیت برای نوشتن متن روی تصاویر مناسب است . مانند تصویر زیر :

تست فعال بودن قابلیت ترانسپرنت

7 - سرعت مناسب چاپ حروف روی صفحه :

عملکرد سرعت چاپ حروف انگلیسی و فارسی برای cortexM0 stm32 ودر حالت transparent در تصاویر زیر میبینید .

سرعت تایپ حروف انگلیسی  نسخه stm32

توجه : زمان در تصویر بالا برای stm32 cortexm3 و بدون بهینه سازی مقدار 332 میلی ثانیه بدست آمده است

سرعت چاپ حروف فارسی در نسخه سفئ32

توجه : زمان در تصویر بالا برای stm32 cortexm3 و بدون بهینه سازی مقدار 222 میلی ثانیه بدست آمده است

و در مورد نسخه avr ، سرعت چاپ ، برای فعال بودن حالت transparent را در تصاویر زیر مشاهده میکنید .

سرعت چاپ حروف انگلیسی در نسخه avr

سرعت چاپ حروف فارسی در نسخه AVR

***توجه :

به طور کلی سرعت تایپ فونت فارسی از انگلیسی کند تر است و بسته به اندازه فونت و نوع حروف و شکل فونت متفاوت است . و این تصاویر بیشتر برای ایجاد یک درک نسبی از سرعت چاپ حروف میباشد و میتواند تغییر کند .

8 - قابلیت چاپ متن در زوایای 0 و 90 و180 و 270 درجه و قابلیت خواندن برخی پارامترها از lcd .

نوشته های قرمز رنگ برخی از پارامترهای خوانده شده مربوط به lcd هستن.

خواندن پارامترهای lcd  و چاپ متن در زوایای مختلف

9 - قابلیتهای گرافیکی :

9-1 - قابلیت رسم خط عودی افقی و مورب با ضخامتهای مختلف ( متوازی الاضلاع قرمز رنگ در واقع یک خط مورب با ضخامت 15 است .

9-2 - قابلیت رسم دایره تو پر و ربع دایره توپردر زوایای 0،90 ،180 ،270 درجه .

9-3 قابلیت رسم دایره توخالی و ربع دایره توخالی در زوایای 0 ، 90 ، 180 ،270 درجه.

9-4 - قابلیت رسم مستطیل توپر

9-5 - قابلیت رسم مستطیل توخالی .

قابلیتهای گرافیکی

10 - قابلیت نمایش تصویر با فرمت bmp از روی micro sd card .

لطفا برای اطلاعات بیشتر در زمینه نمایش تصویر و دانلود فایل تست ، به قسمت 11 راهنمای کتابخانه مراجعه فرمایید .

11 - میزان حافظه فلش و رم مورد نیاز برای کتابخانه :

این کتابخانه دارای 4 پوشه مهم است .که شامل قسمت هسته ،قسمت متنی و گرافیکی و قسمت نمایش تصویر هست .و حجم های مربوطه در جدول زیر آورده شده است .

حافظه فلشحافظه رم
نسخه AVR
قسمت گرافیکی3.6 K byte0 Kbyte
قسمت متنی و هسته با فونت پیش فرض و فعال بودن حالت فارسی5.92 K Byte30 Byte
فونت فارسی 5.02 K Byte10 Byte
نسخه stm32
قسمت گرافیکی16 K Byte
قسمت متنی و هسته با فونت پیش فرض و فعال بودن حالت فارسی10 K Byte
فونت فارسی 6.1 KByte

***مثال های درون فایلهای ارسالی برای atmega32 و stm32 f072نوشته شده است .

*** حجمهای قید شده در جدول بر مبنای حداکثر ، آورده شده است و در عمل میتواند کمتر از این مقدار باشد.

12 - متعلقات اضافی :

شامل دیتا شیت کنترلر و فایلهای pdf برای ساخت یک pcb ساده جهت دسترسی به پینهای lcd

************************************************************************

راهنمای راه اندازی و استفاده از کتابخانه را در اینجا ببینید .

************************************************************************

فایل هگز تست :

برای اینکه شما از عملکرد کتابخانه مطمئن باشید

من فایل های هگز کمپایل شده رو اینجا گذاشتم و میتوانید دانلود کنید و خودتون نتیجه رو ببینید :

دانلود فایل هگز تست برای نسخه AVR (atmega32)

دانلود فایل هگز تست برای نسخه stm32 CortexM0 (میکرو stm32f072c8t6 )

دانلود فایل هگز تست برای نسخه stm32 Cortex M3 (میکرو stm32f103c8t6 )

دانلود فایل هگز تست برای نسخه stm32 Cortex M3 و کمپایلر KEIL5 (میکرو stm32f103c8t6 )

لطفا برای اتصال lcd به میکرو، اینجا را مطالعه نمایید .

***************************************************************************

قیمت کتابخانه نسخه1.0.1 avr : مبلغ 60،000 تومان

( دو نسخه زیر در تاریخ1399/4/3 منتشر شده است )

قیمت کتابخانه نسخه cortexM0 stm32f0xx 1.1.3(KEIL5 و GCC) : مبلغ 120،000 تومان

قیمت کتابخانه نسخه cortexM3 stm32f1xx 1.1.3 (KEIL5 و GCC) : مبلغ 120،000 تومان

خرید هر دو نسخه stm32 با هم : مبلغ 210,000 تومان (12.5% درصد تخفیف)

***************************************************************************

نحوه ی خریداز طریق پرداخت مستقیم: برای خرید لطفا اینجا را ببینید

فایلهای لازم ظرف حداکثر 24 ساعت برای شما ارسال خواهد شد .

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

در صورت بروز هر گونه مشکل یا سوال در این باره لطفا با شماره 09169252500 تماس بر قرار کنید یا کامنت بگذارید.

برای اطلاع از اخبار جدید و موارد اصلاحی در مورد این کتابخانه خواهشمندم در کانال تلگرام وبلاگ: dastsazemanblogfa@

عضو شوید .

با سپاس.

پستهای مرتبط :

کتابخانه منو ( فارسی و انگلیسی ) 4 دگمه

نرم افزار تولید فونت برای میکروکنترلر

اتصال درایور ili9341 به کتابخانه lcd nokia1661

کتابخانه درایور برای ili9341

کتابخانه library tft lcd nokia1661 1616 c1 نوکیا حرفه ای تی اف تی ال سی دی .

راهنمای استفاده از کتابخانه spi میکرو avr (قسمت چهارم : توابع ارسال و دریافت)

 کتابخانه spi  برای میکروهای  avr  atmega8-16-32-64-128, کنترل حجم نسخه ,امکان تغییر تنظیمات هنگام کار,نرم افزار winavr , زبان c , کمپایلر gcc ,  آردوینوarduino

 

 

 

 

 

اولین پست مطلب :( قسمت اول :معرفی کتابخانه )

پست قبلی : (قسمت سوم :فایلهای کتابخانه )

پست بعدی :( هنوز تکمیل نشده )

 

 

با سلام .

توی این قسمت توابع مربوط به ارسال و دریافت رو توضیح میدم .

تابع spi_fast_communication_byte( uint8_t  data);

این تابع یک بایت بدون علامت را به عنوان ورودی دریافت کرده و آنرا ارسال میکند و بایتی را که همزمان از شیفت رجیستر spi  دریافت میکند به عنوان نتیجه برمیگرداند . یعنی به طور هم زمان یک بایت را ارسال و یک بایت را دریافت میکند.

تابع_spi_fast_transmit_string_array_nbyte( uint8_t  *data, uint8_t     cmd_nbyte);

این برای ارسال آرایه یا رشته استفاده میشود . data همان آرایه یا رشته است . و متغیر دوم یک کامند است که تعیین میکند تابع در مود ارسال رشته یا آرایه قرار بگیرد .ودر عین حال طول آرایه ارسالی را مشخص میکند . اگر بیت هشتم cmd_nbyte  عدد 0 باشد تابع در وضعیت ارسال آرایه قرار میگیرد و هفت بیت بعدی تعداد عناصر آرایه است که حداکثر میتواند 127 باشد .اما اگر اگر بیت هشتم cmd_nbyte  عدد 1 باشد ، تابع در وضعیت ارسال رشته قرار میگیرد و بقیه بیتها اندازه رشته را مشخص میکند که حداکثر میتواند 127 باشد . تفاوتی که حالت رشته با حالت آرایه دارد در این است که هرگاه تابع به کاراکتر '0\' برسد ارسال متوقف میشود حتی اگر تعداد کاراکترهای ارسال شده کمتر از مقدار مشخص شده درcmd_nbyte باشد . و اگر طول رشته بیشتر از مقداری باشد که در cmd_nbyte مشخص شده است . تمام رشته به طور کامل ارسال نخواهد شد. بنابر این برای حالت رشته بهتر است طول را حداکثر یعنی  127 در نظر بگیرید . چون تنظیمات cmd_nbyte در عمل کمی مشکل است . پیکر بندی های لازم برای ارسال رشته یا آرایه را به صورت ماکروهای زیر  در spi.h تعریف کردم .

spi_fast_transmit_array_nbyte( data,nbyte)

spi_fast_transmit_string( buff)

از اسم این ماکروها کاملا مشخص است که چه کاری را انجام میدهند و لی به خاطر داشته باشید که در ماکروی دوم طول رشته نباید از 127 بیشتر باشد .

ضمنا این تابع مقدار برگشتی دارد و مقدار برگشتی تابع ، تعداد کاراکترهایی است که ارسال شده اند.

تابع

_spi_fast_recive_string_array_nbyte( uint8_t  *data, uint8_t     cmd_nbyte);

این تابع برای دریافت رشته یا آرایه استفاده میشود . وقوانین مربوط به تنظیم کامند ، همانند تابع قبل است . این تابع مقدار برگشتی دارد و مقدار برگشتی تابع ، تعداد کاراکترهایی است که دریافت شده اند. برای راحتی کار تنظیمات لازم برای دریافت رشته یا آرایه به صورت ماکرو در فایل  spi.h قرار دادم.

ماکروها به شرح زیر هستند

spi_fast_recive_array_nbyte( data,nbyte) ;   
 spi_fast_recive_string( buff);

اسم ماکروها بیانگر عملکرد اونها هست . فقط در مورد ماکروی مربوط به رشته توجه داشته باشید که طول رشته ای که باید دریافت کنه نباید بیشتر از 127 باشه چون بیشتر ازین رو دیگه دریافت نمیکنه .

و در مورد ماکرو مربوط به آرایه لطفا دقت کنید طول آرایه data  از طول رشته ای که باید دریافت کنه بیشتر باشه .

کلیه توابع بالا هم در نسخه کم حجم و هم در نسخه کامل وجود دارد البته عملکردش بسته به حجم  نسخه کمی متفاوت است ، در نسخه کم حجم سرعت بالاتری داردولی  نسبت به تنظیمات حساس است به طور مثال اگر وقفه انتقال را فعال کرده باشید و در حین اجرای برنامه وقفه را خاموش کنید این تابع دیگر کار نخواهد کرد . و در نسخه کامل سرعت کمتر است ولی نسبت به تنظیم وقفه انعطاف دارد به طوری که حتی در حین اجرا ی برنامه وضعیت وقف را تغییر دهید توابع به خوبی کار خواند کرد.

توضیحات مربوط به توابع ارسال  دریافت به پایان رسید حال شما با توجه به فایل مثالی که همراه کتابخانه قرار دادم میتونید تنظیمات اولیه و ارسال و دریافت رو انجام بدید. در قسمت های بعدی در مورد توابع مربوط به تنظیمات spi  که البته فقط در نسخه کامل وجود دارد توضیح خواهم داد .

و در آخر لطفا بنده رو از نظرات خودتون در مورد این مطلب به صورت کامنت بهره مند سازید .

با تشکر .

پست قبلی : (قسمت سوم :فایلهای کتابخانه )

پست بعدی :( هنوز تکمیل نشده )

 

 حق مالکیت معنوی : محفوظ است . انتشار با ذکر منبع بلا مانع است .

راهنمای استفاده از کتابخانه spi میکرو avr (قسمت سوم: شروع کار با کتابخانه)

 کتابخانه spi  برای میکروهای  avr  atmega8-16-32-64-128, کنترل حجم نسخه ,امکان تغییر تنظیمات هنگام کار,نرم افزار winavr , زبان c , کمپایلر gcc ,  آردوینوarduino

 

 

 

 

 

 

 

اولین پست مطلب :( قسمت اول :معرفی کتابخانه )

پست قبلی : (قسمت دوم :فایلهای کتابخانه )

پست بعدی : (قسمت چهارم : توابع ارسال و دریافت)

 

با سلام مجدد به تمام خوانندگان .

 

در قسمت قبل(اینجا ) در مورد فایلهای کتابخانه توضیح دادم  و ماکرو های مهمترین فایل که spi_conf.h هست رو معرفی کردم و نقشش رو توضیح دادم .

بعد از اینکه تنظیمات رو در فایل spi_conf.h انجام دادید . دستور spi_init()  رو اجرا کنید ( برای راحتی کار و رعایت حروف کوچک و بزرگ پیشنهاد میکنم که نام توابع رو از spi.h کپی پیست کنید ) .

این تایع  تنظیمات واحد spi رو انجام میده و پینها رو در وضعیت مناسب قرار میده  و در هر دونسخه کم حجم و کامل وجود داره . و فرقی نمیکنه از کدوم حالت حجم نسخه استفاده میکنید ، باید قبل از هر کاری با spi  این تابع رو اجرا کنید .

تویحات تکمیلی در مورد spi_init() :

این تابع در واقع یک ماکرو در لایه 5هست که در فایل spi.h ( کلا ماکروها داخل فایل هدر قرار دارند )که اگر به تعریف اون  نگاه کنید میبینید که باز یک ماکرو به اسم   

_spi_init()

که یک تعداد پارامتر داره و در لایه 4 قرار دارد . این ماکرو یی هست که برای پیکر بندی یک تابع ( این یکی دیگه واقعا تابع هست ) به اسم :

__spi_init( cmd)

 تعریف شده و این تابعی هست که spi  رو اینیشیال میکنه منتها برای تنظیماتش یک کامند 8 بیتی در نظر گرفتم . و ماکروی  _spi_init()   که تعدادی پارامتر داره کار سازماندهی کامند رو بر اساس تنظیمات مورد نظر انجام میده .

در نسخه کم حجم از ماکروی

_spi_init()

میتونید برای تغیر تنظیمات spi  استفاده کنید . که البته تنظیمات رو که میخواهید اعمال  کنید باید در  پارامترهای ورودی ماکرو قرار بدید .

تابع spi_deinit() :

این تابع کلا spi رو از کار میندازه و رجیسترها رو به مقدار پیش فرض بر میگردونه . قبل از اینیشیال مجدد میتونید با این تابع spi  را به حالت پیشفرض بر گردونید .

خب تا اینجا مرحله راه اندازی spi  به پایان رسید .

در قسمت بعدی توابع  ارسال و دریافت رو معرفی میکنم .

لطفا بنده رو از نظرات خودتون در مورد این مطلب به صورت کامنت بهره مند سازید .

با تشکر .

 

 

پست قبلی : (قسمت دوم :فایلهای کتابخانه )

پست بعدی : (قسمت چهارم : توابع ارسال و دریافت)

حق مالکیت : محفوظ است . انتشار با ذکر منبع بلا مانع است .

 

 

 

راهنمای استفاده از کتابخانه spi میکرو avr (قسمت دوم: فایلهای کتابخانه)

با سلام مجدد.

 

 

اولین پست مطلب :( قسمت اول :معرفی کتابخانه )

پست قبلی : کتابخانه spi برایavr ( قسمت اول : معرفی)

پست بعدی : ( قسمت سوم : شروع کار با کتابخانه )

 

همانطور که در پست معرفی کتابخانه spi    گفته بودم قصد دارم روش استفاده از کتابخانه رو توضیح بدم .

برای شروع اول در مورد  فایلهای کتابخانه توضیح میدم .این کتابخانه شامل فایلهای زیر است .

spi.h  spi.c ,  spi_conf.h  ,spi_define_name.h , spi_typedef.h , bit.h

فایل bit.h  شامل ماکروهایی برای دستکاری رجیسترها به صورت بیتی هست که در اغلب کدهایی که من مینویسم این فایل دیده میشه .

فایل  spi .h که در اون فابلهای لازم پیوست و الگوی توابع تعریف شده است.

فایل spi.c تعریف بدنه توابع هست .

فایل spi_typedef.h مربوط به تعریف انواع داده هایی هست که کتابخانه در حالت نسخه کامل (در ادامه ماجرای نسخه کامل رو توضیح میدم )از اونها استفاده میکنه .

فایل  spi_define_name.h   که از فایلهای مهم کتابخانه هست و شامل اسامی هست که شما  برای پیکر بندی واحد spi به اونها نیاز دارید.

و اما مهمترین فایل برای کاربران کتابخانه  که برای تنظیم spi  باید اون رو تغیر بدید فایل spi_conf.h 

 هست ، که پیکربندی spi  در اون فایل تعیین میشه . با نگاهی به محتویات این فایل مطالب زیر رو در اون میبینید :

#define     SPI_VERSION_VOLUME                SPI_full_volume_version

#define     SPI_MASTER_SLAVE_SELECT           SPI_Master_Mode  

#define     SPI_INTERRUPT                     SPI_Enable  

#define     SPI_DATA_ORDER                    SPI_Msb_First

#define     SPI_MODE                          SPI_Mode_0 //SPI_Sample_Rising_Setup_Falling  

#define     SPI_CLOCK                         SPI_fosc_128//  fosc/128   

/* this just for master mode */
#define     SPI_SS_DIRECTION                  SPI_Ss_Output


//**************************

#define     SPI_SS_PORT          PORTB
#define     SPI_SS_DDR           DDRB
#define     SPI_SS_PIN           2U

#define     SPI_MOSI_DDR         DDRB
#define     SPI_MOSI_PIN         3U

#define     SPI_MISO_DDR         DDRB
#define     SPI_MISO_PIN         4U

#define     SPI_SCK_DDR          DDRB
#define     SPI_SCK_PIN          5U

 

اولین ماکرو SPI_VERSION_VOLUME    ماکروی مهمی هست . مقادیری که میتونید برای این ماکرو تعیین کنید در فایل  spi_define_name.h  تعیین شده و به صورت زیر هست .

//********  version volume  names   *****
#define     SPI_full_volume_version        1U     
#define     SPI_low_volume_version        0U

 مقدارSPI_full_volume_version  :

این مقدار کتابخانه در حالت نسخه کامل قرار خواهد داد .

مزیت کتابخانه دراین حالت اینه که میتوان تنظیمات spi( فرکانس پالس کلاک ، مد کاری ، حالت مستر و اسلیو و غیره ...) را در حین اجرای برنامه و بعد از تنظیمات اولیه ، بوسیله توابع کتابخانه ای تغییر داد. در این حالت کتابخانه  ، تقریبا کاری نیست که شما بخواهید انجام بدید و نتونید .

فقط عیبی که داره اینه که حجم کتابخانه زیادتر خواهد بود .

 

مقدار SPI_low_volume_version :

در این حالت کتابخانه قابلیت تغییر در تنظیمات رو به طور موردی نداره و برای تغییر تنظیمات باید بوسیله توابع خاصی ،  واحد spi  از اول به طور کامل راه اندازی بشه که شاید چندان مطلوب نباشه اما مزیتش اینه که حجم کتابخانه تقریبا نصف نسخع کامل هست . اگر در حین اجرای برنامه نیاز به تغییرات تنظیمات spi  نیست جهت صرفه جویی در حجم برنامه پیشنهاد میکنم از این حالت استفاده کنید .

ماکروی SPI_MASTER_SLAVE_SELECT  که مربوط به انتخاب حالت مستر و اسلیو هست .و شامل انتخابهای زیر است  :

//********   SPI_MODE   name   *****

#define     SPI_Master_Mode    1U     
#define     SPI_Slave_Mode     0U

ماکروی SPI_INTERRUPT مربوط به استفاده از وقفه است  .

ماکروی SPI_MODE :

مربوط به  مد کار spi  هست که تعیین میکنه  نمونه گیری در کدام لبه پالس ساعت و تغیر داده در کدام لبه انجام بشه . و 4 حالت داره که من برای برای تشخیص آسون آونها رو به صورت کامنت در قسمت مربوطه در فایل spi_define_name.h قرار دادم که در تشخیص کمک میکنه .

ماکروی SPI_CLOCK :

که مربوط به فرکانس پالس کلاک spi هست , در حالت مستر تاثیر گذار هست .

ماکروی SPI_SS_DIRECTION  :

که مربوط به تعیین جهت پایه ss  در حالت مستر هست که هر کدام از حالتهای ورودی و خروجی  یک قابلیتی داره اما در حالت  اسلیو تاثیر گذار نیست ولی برای امنیت سخت افزار اون رو ورودی کنید .( اگر این پایه خروجی باشه و شما spi اسلیو رو خاموش کنید پایه به حالت خروجی در میاد که در صورتی که پایه ss مربوط به spi مستر خروجی باشه و ارزش های متفاوتی داشه باشن به دلیل امپدانس کم پورت در حالت خروجی ممکنه جریان زیادی از پورتها عبور کنه .)

ماکروهای

//**************************

#define     SPI_SS_PORT          PORTB
#define     SPI_SS_DDR           DDRB
#define     SPI_SS_PIN           2U

#define     SPI_MOSI_DDR         DDRB
#define     SPI_MOSI_PIN         3U

#define     SPI_MISO_DDR         DDRB
#define     SPI_MISO_PIN         4U

#define     SPI_SCK_DDR          DDRB
#define     SPI_SCK_PIN          5U

مربوط به تعیین تعیین پایه های spi هستن ( و تا اونجا که من بررسی کردم برای میکروهای atmega8-16-32 یکسان هست ) فقط توجه داشته باشید که اون ماکروهایی که در اونها عبارت pin هست مربوط به شماره پایه های مربوطه ست .

تا اینجا توضیح در مورد فایلها به پایان رسید .( ادامه دارد )

پست قبلی : کتابخانه spi برایavr ( قسمت اول : معرفی)

پست بعدی : ( قسمت سوم : شروع کار با کتابخانه )

حق مالکیت : محفوظ است . انتشار با ذکر منبع بلا مانع است .

 

 

 

کتابخانه spi برایavr به زبان C در (winavr (GCC ( قسمت اول : معرفی)

 کتابخانه spi  برای میکروهای  avr  atmega8-16-32-64-128, کنترل حجم نسخه ,امکان تغییر تنظیمات هنگام کار,نرم افزار winavr , زبان c , کمپایلر gcc ,  آردوینوarduino

 

 

(این کتابخانه در تاریخ 1398/2/1 ساعت 16 به روز شده است .لطفا  فایل بروز شده را از آدرس موجود در متن دانلود کنید)

لینک دانلود:از اینجا دانلود کنید

با سلام .

این کتابخانه spi رو برای میکروهای avr با نرم افزار winavr (کمپایلرgcc) وبه زبان C نوشتم . چون کمپایلرش gcc هست روی آردوینو و atmel studio هم کار میکنه .و طوری  نوشتم که بشه از تمام قابلیتهای spi میکرو ، با استفاده از توابع  استفاده کرد .

این کتابخانه قابلیت این رو داره در حین کار با استفاده از توابع ، تنظیمات واحد spi رو تغییر داد مثلا کلاک ، مد کاری ، حالت master یا slave  و همینطور جهت پین SS برای حالت مستر رو تغیر داد . در این کتابخانه قابلیتی گنجاندم  که در جای دیگه ای ندیم و اون هم اینه که شما میتونید حجم کتابخانه رو کنترل کنید .

فعلا این رو علی الحساب داشته باشید تا سر فرصت روش استفاده رو توضیح بدم .( البته اگه خودتون کدها رو نگاه کنید متوجه میشید از کدام توابع باید استفاده بشه ...اسمها واضحه ) این هم لینک دانلود فایهای کتابخانه و شماتیک از گیتهاب. از اینجا دانلود کنید . و اگر در حین اجرای برنامه مستر و اسلیو بودن spi رو تغیر میدید به دلیل اینکه جهت پایه عوض میشه  پیشنهاد میکنم از شماتیک زیر استفاده کنید . البته فقط پیشنهاده .... اگر دقت کنید که  spi ها در یک زمان   در حالت master  نباشند ، نیازی به استفاده از شماتیک نیست .

 

مقاومت ها را بین 1.8 تا 2.2 کیلو اهم انتخاب کنید.

این کتابخانه رایگان نیست ولی لطفا همانطور که در قسمت معرفی وبلاگ گفتم عمل کنید .

بنده را از نظراتتان به صورت کامنت بهره مند سازید

با تشکر.

ادامه دارد.........

پست بعدی :  راهنمای استفاده از کتابخانه spi میکرو avr (قسمت دوم: فایلهای کتابخانه)

حق مالکیت : محفوظ است . لطفا کپی نکنید لینک بدید.

 
  BLOGFA.COM