بایگانی دسته‌ها: AVR

سیستم عامل Multitasking روی AVR

مثال C برای پیاده سازی کرنل چند وظیفه ای برای AVR

معرفی :

وظیفه یک سیستم عامل Real Time این است که بین Task ها سوئیچ کند و مطمئن شود که هر Task با توجه به اولویتی که دارد پردازش خواهد شد .این که این سوئیچ شدن چطور انجام شود به معماری میکروکنترلر بستگی دارد . این مقاله از کد های FreeRTOS( an open source real time scheduler ) و GCC برای نشان دادن سوئیچ شدن Task روی AVR استفاده می کند .

کد ها از پایین به بالا توضیح داده می شوند . موضوع مورد بحث شامل پیکر بندی Tick دوره ای و استفاده از GCC برای نوشتن سرویس وفقه با C و ویژگیهای GCC در FreeRTOS و Execution Context درباره AVR می شود .

قسمت آخر راهنمای گام به گام در مورد سوئیچ شدن کامل یک وظیفه می شود.

دنبال کردن سورس کد میتواند راه خوبی برای یادگیری کامپایلر و سخت افزار باشد – حتی اگر این موضوع مستقیماً مربوط به برنامه شما نباشد . من امیدوارم این مقاله مورد علاقه کسانی باشد که می خواهند یاد بگیرند که چطور در AVR با استفاده از GCC سرویس  وقفه بنویسند ، کسانی که تازه وارد AVR شدند و یا کسانی که فقط به RTOS علاقه دارند .

خوانندگان محترم باید با مباحث پایه ای Real Time Operating System مثل Task ، Multitaskig ، Context Switching آشنا باشند . توضیحات مختصری در مورد این موضوعات را می توانید از www.FreeRTOS.org کسب کنید .

 

The RTOS Tick

ساختار برنامه های کاربردی که از Real Time Oprating System (RTOS) استفاده میکنند به این صورت است که از تعدادی وظایف مستقل از هم تشکیل شده اند که سیستم عامل در هر لحظه تصمیم میگیرد کدام وظیفه باید اجرا شود . Kernel یا هسته RTOS هر جا که نیاز باشد وظایف را به طور موقت کنار میگذارد یا اجرای وظیفه ای را ادامه میدهد تا مطمئن شود وظیفه ی با اولویت بیشتر برای گرفتن زمان CPU آماده اجرا است . Read the rest of this entry

Advertisements

Hello Tiles

در این درس ، مثال Hello World را توسعه می دهیم و با یاد گرفتن Tile ها به آن رنگ اضافه می کنیم.

بکار بردن Tile

نمایشگر های گرافیکی مانند تلویزیون ، مانیتور کامپیوتر و LCDها تصاویر گرافیکی را با استفاده از اجزایی به نام pixel(picture elements)نمایش میدهند .مانیتورهای VGA قدیمی تصاویر را با وضوح 640×480 پیکسل نمایش می دادند . امروزه نمایشگرهای hi-definition(HD)میتوانند تا وضوح 1920×1080 یا حتی بیشتر را نمایش دهند! Fuzeboxقدرت نمایش تصاویر با وضوح بالا روی نمایشگرهای HD را ندارد اما روی تلویزیون های عادی با رزلوشن 240×224 پیکسل به خوبی کار می کند . شاید به نظر خوب نباشد ولی بیشتر کنسول های بازی 8بیتی هم با همین رزلوشن بودند و بازیهای بسیار جالبی هم داشتند .

بخاطر اینکه در جریان بازی صفحه نمایش تغییر می کند پس باید اطلاعات ویدیویی (video data) در RAM ذخیره شوند . اگر هر پیکسل شامل 8 بیت (یک بایت) دیتا باشد ما به این مقدار از حافظه RAMبرای ذخیره کردن نگاشت ویدیویی (video map) در حافظه نیاز داریم :

 pixels240 wide  * 224 pixels high * 1 byte per pixel = 53760 bytes = 52 KB

گرچه به نظر زیاد نمی آید ولی برای یک میکروکنترلر کوچک این طور نیست چون تمام حافظه RAM در دسترس فقط 4KB است ! و هیچ راهی برای جا دادن دیتا های ویدیویی در RAM نیست ولی با یک ترفند به نام tiling این کار امکان پذیر میشود . اساسا ما میگیم که » OK ، بازی های ساده ی ما یک پس ضمینه دارند که زیاد تغییر نمی کند ویا تکرار می شود . پس بجای اینکه هر پیکسل را به طور جداگانه داشته باشیم ، از یک سری قطعات از پیش تعریف شده به نام tile استفاده می کنیم «. اجازه بدید به عنوان مثال به یک تصویر از بازی Super Mario Brothersکه شناخته شده ترین بازی 8 بیتی هم هست یه نگاه بیندازیم.

Read the rest of this entry

ســـــــــــــــلام Fuzebox


بعد از اینکه کنسول بازی رو ساختیم ( ! ) حالا نوبت برنامه نویسی میرسد . ابتدا از برنامه کلاسیک Hello World شروع می کنیم . این برنامه تا حد ممکن ساده است و تنها عبارت Hello World را روی صفحه می نویسد ولی پایه و اساس تمام بازی هاست .
خوشبختانه نیاز نیست که شما از صفر شروع کنید و موتور ویدیویی و صدا رو خودتون بنویسید ! تمام بازی ها و دموها بر پایه یک Firmware Kernel/Core ساخته میشوند که تمام این کارهای سخت را در بک گراند انجام می دهد . اول از همه باید آخرین نگارش از این هسته را دانلود کنید سپس آنرا در پوشه ای که بازی های خود را در آن قرار می دهید از حالت فشرده شده خارج کنید .

محتوای پوشه باید چیزی شیبه این باشد . Read the rest of this entry

معرفی دو کنسول بازی Fuzebox و Uzebox

در این پست می خوام شما رو با یکی از پروژه های جالبی که با AVR انجام شده و هم نرم افزارش و هم سخت افزارش متن باز هست آشنا کنم . کنسول بازی با AVR ! ! ! ! ! اصولا میکرو کنترلرها به عنوان جزء مرکزی در طراحی ها بکار نمی روند ولی قدرت AVR در پردازش و سرعت بالای اون باعث شده که در کاربردهای غیر معمولی مثل این بکار برده بشه .

     

Uzebox یک کنسول بازی 8 بیتی متن باز (Open Source) است که با کمترین اجزا ساخته شده . این کنسول بر پایه میکروکنترلرهای همه منظوره و 8 بیتی AVR ساخته شده یکی از خصوصیات این سیستم Read the rest of this entry

تابلوروان و گسترش پورت ها

 

در زمانهای نه چندان دور تابلوهای روان بسیار ساده بودند و فقط یک متن تبلیغاتی رو نشان میدادند ولی الان اوضاع فرق کرده ،انواع و اقسام افکتها رو در تابلو ها میبینید .همه اینها به لطف میکروکنترولر هاست .

دانلود DataSheet آیسی 74HC_HCT573_3.pdf
دانلود برنامه و شماتیک پروتئوس LED Display.rar

تابلو روان از تعدادی Dot Matrix تشکیل شده . دات ماتریس از یک شبکه دیودهای نورانی ساخته میشود.
ساختار داخلی دات ماتریس به این صورت است که تمام کاتدها در یک سطر به هم وصل هستند و تمام آندها در یک ستون به هم وصل میشوند یا برعکس . این ساختار باعث میشود که تعداد سیم هایی که برای روشن و خاموش کردن دیود ها لازم است کاهش یابد اما باز هم تعداد سیم های مورد نیاز خیلی بیشتر از تعداد پورت های ورودی خروجی AVR است . برای رفع این مشکل میتوان از IC های گسترش دهنده استفاده کرد . انواع مختلفی از این IC ها وجود دارند . در اینجا من از آی سی 74573 که یک آی سی Latch هست استفاده کردم .

همان طور که میدانید Latch در واقع یک حافظه است که میتواند مقداری که در آن Load میشود را در خود ذخیره کند . از این آی سی برای افزایش پورت خروجی استفاده میشود . با ایجاد یک Data Bus  و قرار دادن دیتا در باس و فعال کردن پایه LE یا Latch Enable میتوانید مقداری را در حافظه ذخیره کنید . پایه LE را می توان مستقیماً به پورت AVR  وصل کرد و آنرا کنترول کرد یا اگر به تعداد بیشتری Latch نیاز دارید ابتدا پورت را به یک دیکدر وصل کنید بعد خروجی دیکدر را به پایه های LE وصل کنید . پایه OE یا Output Enable هم چون Active Low است باید در سطح منطقی صفر باشد تا مقدار ذخیره شده در خروجی ظاهر شود .

برای اطلاعات بیشتر میتوانید به سایت فوق العاده www.hlachini.com مراجعه کنید . بهترین سایت فارسی در زمینه تابلوروان هستش به همین دلیل من بیشتر از این بحث نمیکنم و بقیه اش (مباحثی مثل حرکت در تابلو روان) رو به عهده خودتون میذارم _ تخصص من چیز دیگه ایه_.

Do you have any question about AVR? come here

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

هرچه میخواهد دل تنگت بگو . ( البته در مورد AVR)

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

پرسش و پاسخ درباره ی AVR

Real Time Clock

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

دانلود الگوریتم و فلوچارت doc1259.pdf (حجم در حدود 67KB)
دانلود سورس کد همراه با شماتیک Proteus  و RTC.rar PCB  (حجم در حدود 82KB)

مثل همیشه بحث من روی Mega8 هست ولی منطق کار برای دیگر قطعات همینه .Mega8 سه تا تایمر/کانتر دارد که از صفر شروع میشوند و از آنها برای تولید موج در مد های مختلف و سنجش دقیق فواصل زمانی استفاده میشود . Read the rest of this entry

LCD

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

LCD مخفف کلمات Liquid Crystal ِِDisplay است .شاید این سوال برای شما هم پیش آمده باشد که چرا این کلمات کنار هم جمع شده اند .اصولا کریستال به نوع خاصی از آرایش ملکولها در مواد جامد گفته میشود پس کریستال مایع یعنی چی ؟
من در ابتدا یه توضیح ساده و مختصر در مورد نحوه عملکرد LCD میدهم بعد به کار خودمون میپردازیم .

ساختار اصلی یک LCD نوع TN از یک مایع کریستالی محصور بین دو لایه تشکیل شده . سطح داخلی بین این صفحات از یک ماده پلیمری شیار دار پوشیده شده که کریستال مایع را به صورت منظم در می آورد .این دو صفحه پلیمری نسبت به هم 90 درجه اختلاف دارند و باعث این میشود که ملکولها به صورت مارپیچی از بالا به پایین قرار گیرند . دو عدد صافیPolarizer در بالا و پایین هر سلول قرار گرفته و این صافی ها هم 90 درجه با هم اختلاف دارند و هر کدام فقط یکی از مولفه های نور را از خود عبور میدهند . در صورتی که کریستال مایع وجود نداشته باشد به دلیل این اختلاف 90 درجه ای هیچ نوری از آنها عبور نمی کند اما ساختار حلزونی مایع بین آنها باعث شکست نور میشود و نور را میچرخاند در نتیجه نور از هر دو عبور می کند اما در انتها نور به یک Reflector میرسد وبازتاب پیدا میکند و ناظر یک ضمینه نقره ای خاکستری رنگ را میبیند .
به دلیل ساختار قطبی ملکولهای مایع با اعمال یک ولتاژ به Electrode ها یک میدان الکتریکی در سلول ایجاد میشود و همه ملکولها جهت گیری میکنند و به صورت قائم نسبت به سطح صافی ها قرار میگیرند در این وضعیت نور بدون تغییر از صافی اول عبور میکند و تغییر زاویه نمی دهد و در نتیجه از صافی دوم عبور نمیکند و بازتاب نمیشود و ناظر یک منطقه تیره رنگ را میبیند .

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

حالا میرسیم به ارتباط AVR و LCD . در بازار سه نوع LCD میتوان پیدا کرد : Read the rest of this entry

صفحه کلید یا Keypad

ارتباط با صفحه کلید در تمام پروژه های میکروکنترولری مشترک است . در پست قبلی یک روش ساده ارتباطی که از یک پورت استفاده میکرد توضیح داده شد .این روش در مواردی که تعداد کلید ها کم باشد و پین های I/O خالی و استفاده نشده داشته باشیم مناسب است .اما کیبورد کامپیوتر را در نظر بگیرید که از حدود بیش از 105تا دکمه تشکیل شده در صورتی که بخواهیم یک کیبورد با میکروکنترولر بسازیم نمی توان از این روش استفاده کرد چون حداکثر 23تا دکمه به Mega8 میتوان وصل کرد در ضمن خروجی را هم باید در نظر گرفت که باز هم کمتر میشود .در نتیجه این روش اصلا برای این مسئله خاص مناسب نیست چون تعداد زیادی از پین های میکرو را اشغال میکند و بهینه نیست .

راه حل استفاده از یک Read the rest of this entry

خواندن از پورت AVR

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

در موارد زیادی از کاربرد میکروکنترولر , در ابتدا یا در هنگام کار با سیستم نیاز است مقادیری به نام داده برای تعیین روند عملیات به سیستم داده شود . یک مثال از سیستم های میکروکنترولری همان Read the rest of this entry

Blinking -2

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

بعد از ایجاد پروژه جدید در Codevision ونوشتن برنامه برای کامپایل کردن از نوار ابزار روی دکمه Build All کلیک میکنیم.با این کار یک گزارش از وضعیت و پارامترهای کامپایل داده میشود.درصورتیکه برنامه Syntax Erorr نداشته باشد در پوشه پروژه یک فایل با پسوند hex قرار می گیرد که آن را به میکرو انتقال میدهیم .برای Debug کردن از فایلهای با پسوند cof,elf استفاده میشود .AVR Studio از فایل cof برای دیباگ استفاده میکند.

محیط برنامه Proteus به شکل زیر است .برای انتخاب قطعه باید روی دکمه Pick Devices کلیک کنید تا Read the rest of this entry

Blinking

حتما اولین برنامه ای که با #C نوشتید یادتون هست .معمولا همه با Hello World شروع میکنند . اما برنامه نویسی AVR با Blinking شروع می شود . چون چاپ متن پیچیده تر از روشن خاموش کردن LED ست و نیاز به LCD دارد .

در این برنامه به ترتیب 8 تا LED که به PORTD وصل شده اند را روشن و خاموش می کنیم .می خواهیم هر LED برای250ms روشن بماند و بعد LED بعدی روشن شود.

Read the rest of this entry