بسمه تعالی
پایان نامه دوره کارشناسی نا پیوسته
مهندسی برق – الکترونیک
موضوع:
پردازش تصویردر متلب و انتقال اطلاعات آن به
میکرو کنترلر
استاد راهنما:
جناب آقای مهندس آیت اکبری
دانشجو:
میثم توتونچی رازلیقی
شماره دانشجویی :9233109
خرداد 94
سپاسگزاری
حضرت علی(ع) فرمودند:
" مَن عَلَّمَنی حَرفاً فَقَد سَیَرنی عَبداً "
با تشکر فراوان از استاد محترم آقای
…..
که با رهنمایی خود مرا یاری کردند.
تقدیم به مادر فداکار
و
برادر دلبندم
چکیده
در فصل اول به معرفی پردازش تصویر و دستورات آشکار سازی آن در نرم افزار متلب می پردازیم
در فصل دوم این پایان نامه،به معرفی میکرو کنترلر AVR))
در فصل سوم به پروتکل های ارتباطی (سریال) ما بین میکروکنترلر و کامپیوتر خواهیم پرداخت
در فصل چهارم، به برنامه ساخته شده توسط نرم افزار متلب و میکرو کنترلر جهت آشکار سازی و نشان دادن رنگ خواهیم پرداخت
فهرست مطالب
عنوان——————————————————————– صفحه
فصل اول: پردازش تصویر(ماشین بینایی) درمتلب
معرفی پردازش تصویر
4
معرفی ماشین بینایی
آشنایی با دستورات پردازش تصویر در متلب
13
17
فصل دوم: میکروکنترلر AVR
آشنایی با میکرو کنترلر
فصل سوم: پورت سریال
برنامه نویسی BASIC – پورت سریال UART
برخی از ارتباطات سریال
38
64
71
فصل چهارم: برنامه متلب وبیسیک جهت تشخیص رنگ و انتقال آن به میکرو و نمایش در ال سی دی
برنامه میکرو
برنامه متلب
81
82
فصل پنجم: جمع بندی کلی
توضیح کلی در مورد فواید پردازش تصویر و مدار
85
پیشنهادات:
86
منابع:
87
مقدمه
کنترل ماشین آلات و تجهیزات صنعتی یکی از وظایف مهم در فرآیندهای تولیدی است. بکارگیری کنترل خودکار و اتوماسیون روزبه روز گسترده تر شده و رویکردهای جدید با بهره گیری از تکنولوژی های نو امکان رقابت در تولید را فراهم می سازد. لازمه افزایش کیفیت و کمیت یک محصول، استفاده از ماشین آلات پیشرفته و اتوماتیک می باشد . ماشین آلاتی که بیشتر مراحل کاری آنها به طور خودکار صورت گرفته و اتکای آن به عوامل انسانی کمتر باشد.
امروزه استفاده از تکنولوژی ماشین بینایی و تکنیک های پردازش تصویر کاربرد گسترده ای در صنعت پیدا کرده است و کاربرد آن بویژه در کنترل کیفیت محصولات تولیدی، هدایت روبات و مکانیزم های خود هدایت شونده روز به روز گسترده تر می شود.
عدم طلاع کافی مهندسین از تکنولوژی ماشین بینایی و عدم آشنایی با توجیه اقتصادی بکارگیری آن موجب شده است که در استفاده از این تکنولوژی تردید و در بعضی مواقع واکنش منفی وجود داشته باشد. علی رغم این موضوع، ماشین بینایی روز به روز کاربرد بیشتری پیدا کرده و روند رشد آن چشمگیر بوده است.
کاربردهای ماشین بینایی
صنعتی: بازرسی و کنترل کیفیت، اندازه گیری، هدایت ربات، کنترل فرآیند، شناسایی قطعات، بارکدینگ، بازشناسی حروف و علائم، بازشناسی و تایید فرم ها
پزشکی: تشخیص پزشکی، اشکارسازی و تشخیص خودکار تومورها، تحلیل تصاویر متحرک پزشکی، بازسازی سه بعدی اندام ها، استخراج اطلاعات کارکردی اندام ها، سیستم های آرشیو و مخابره تصاویر پزشکی
نظامی و امنیتی: شناسایی اهداف، هدایت و کنترل هوشمند، ردیابی اهداف در تصاویر متحرک، وسائط نقلیه ی بدون سرنشین، پردازش تصاویر ماهواره ای نظامی، چهره شناسی، اثر انگشت و امضاء بیومتری
کشاورزی: کنترل کیفیت و دسته بندی محصولات کشاورزی، دارویی و …
ارتباطات: انتقال تصاویر (با تکیه بر شبکه های اطلاع رسانی جهانی)، مکالمه تصویری، استاندارد مخابره اطلاعات تصویری
ترافیک: مانیتورینگ، کنترل هوشمند و …
نقشه برداری: پردازش تصاویر ماهواره ای و هوایی (تفکیک نواحی، استخراج اطلاعات، نقشه بردازی)، ادغام اطلاعات تصویری ماهواره ای، تصویربرداری چندطیفی، سیستم های تصویربرداری ماهواره ای و هوایی.
فصل اول:
پردازش تصویر (ماشین بینایی) درمتلب
معرفی پردازش تصویر
پردازش تصاویر: امروزه بیشتر به موضوع پردازش تصویر دیجیتال گفته می شود که شاخه ای از دانش رایانه است که با پردازش سیگنال دیجیتال که نماینده تصاویر برداشته شده با دوربین دیجیتال یا پویش شده توسط پویشگر هستند سر و کار دارد. پردازش تصاویر دارای دو شاخه عمده بهبود تصاویر و بینایی ماشین است. بهبود تصاویر دربرگیرنده روشهایی چون استفاده از فیلتر محوکننده و افزایش تضاد برای بهتر کردن کیفیت دیداری تصاویر و اطمینان از نمایش درست آنها در محیط مقصد (مانند چاپگر یا نمایشگر رایانه) است، در حالی که بینایی ماشین به روشهایی می پردازد که به کمک آنها می توان معنی و محتوای تصاویر را درک کرد تا از آنها در کارهایی چون رباتیک و محور تصاویر استفاده شود.
در معنای خاص آن پردازش تصویر عبارتست از هر نوع پردازش سیگنال که ورودی یک تصویر است مثل عکس یا صحنه ای از یک فیلم. خروجی پردازشگر تصویر می تواند یک تصویر یا یک مجموعه از نشانهای ویژه یا متغیرهای مربوط به تصویر باشد. اغلب تکنیک های پردازش تصویر شامل برخورد با تصویر به عنوان یک سیگنال دو بعدی و بکاربستن تکنیک های استاندارد پردازش سیگنال روی آنها می شود. پردازش تصویر اغلب به پردازش دیجیتالی تصویر اشاره می کند ولی پردازش نوری و آنالوگ تصویر هم وجود دارند. این مقاله در مورد تکنیک های کلی است که برای همه آنها به کار می رود.
تصاویر رقمی (دیجیتالی)
تصاویر سنجش شده که از تعداد زیادی مربعات کوچک (پیکسل) تشکیل شده اند. هر پیکسل دارای یک شماره رقمی(Digital Number) می باشد که بیانگر مقدار روشنایی آن پیکسل است. به این نوع تصاویر، تصاویر رستری هم می گویند . تصاویر رستری دارای سطر و ستون می باشند.
مقادیر پیکسلها
برای مشخص کردن یک پیکسل روش های مختلفی استفاده می شود. آن چه که متداول تر است RGB است، که ۳ کانال مختلف برای ۳ رنگ قرمز، سبز و آبی در نظر می گیرد. اما در پردازش تصویر از فضاهای رنگی دیگری استفاده بیش تری می شود. برای مثال فضای رنگ HSV. در صورتی که از ۳ کانال قرمز و سبز و آبی استفاده شود و برای هر کانال ۱ بایت در نظر گرفته شود، هر کانال دارای ۲۵۶ حالت (۲ به توان ۸) خواهد بود. در نتیجه هر پیکسل ۱۶۷۷۷۲۱۶ (۲۵۶ به توان ۳) رنگ مختلف را می تواند نشان دهد.
تفکیک پذیری تصویر
تفکیک پذیری تصویر به تعداد پیکسل ها در طول و عرض تصویر بستگی دارد.
رزولیشن تصویر
با یک تصویر ۴ بیتی، حداکثر دامنه روشنایی ۱۶ (۲ به توان ۴) می باشد که دامنه آن از ۰ تا ۱۵ نشان داده می شود. در این حالت تصویر کیفیت پایینی را به نسبت تصاویری با نرخ بیت بالاتر ارائه می کند. تصویر ۸ بیتی حداکثر دامنه ۲۵۶ دارد و تغییرات آن بین ۰ تا ۲۵۵ است؛ که دقت بالاتری دارد.
عملیات اصلی در پردازش تصویر
1. تبدیلات هندسی: همانند تغییر اندازه، چرخش و…
2. رنگ: همانند تغییر روشنایی، وضوح و یا تغییر فضای رنگ
3. ترکیب تصاویر: ترکیب دو یا چند تصویر
4. فشرده سازی پرونده: کاهش حجم تصویر
5. ناحیه بندی پرونده: تجزیهٔ تصویر به نواحی با معنی
6. بهبود کیفیت پرونده: کاهش نویز، افزایش کنتراست، اصلاح گاما و …
7. سنجش کیفیت تصویر
8. ذخیره سازی اطلاعات در تصویر
9. انطباق تصاویر
فشرده سازی تصاویر
فشرده سازی تصاویر
برای ذخیره سازی تصاویر مطلوب است حجم اطلاعات تا جایی که ممکن است کاهش یابد و اساس بسیاری از روش های فشرده سازی کنار گذاردن بخش هایی از اطلاعات و داده ها است. می توان با ضریب یا نسبت فشرده سازی است میزان کنار گذاشتن اطلاعات را مشخص کرد. فشرده سازی تصاویر، ذخیره سازی و انتقال اطلاعات را آسان تر می کند و می تواند سبب کاهش پهنای باند و فرکانس مورد نیاز شود.
امروزه روش های متعدد و پیشرفته ای برای فشرده سازی وجود دارد. فشرده سازی تصویر با توجه به این گزاره مهم صورت می گیرد که چشم انسان حد فاصل دو عنصر تصویری نزدیک به هم را یکسان دیده و به خوبی تمایز آنها را نمی تواند تشخیص دهد. همچنین اثر نور و تصویر برای مدت زمان معینی در چشم باقی می ماند که این پدیده در ساخت تصاویر متحرک مورد توجه می باشد.
* روش JPEG
نام این فرمت در واقع مخفف کلمات JOINT PHOTOGRAPHIC EXPERT GROUP است. از این روش در فشرده سازی عکس و تصاویر گرافیکی ساکن استفاده می شود JPEG اولین و ساده ترین روش در فشرده سازی تصویر است به همین دلیل در ابتدا سعی شد برای فشرده سازی تصاویر متحرک مورد استفاده قرار گیرد. برای این منظور تصاویر به صورت فریم به فریم مانند عکس فشرده می شدند وبا ابداع روش MOTION JPEG برای ارتباط دادن این عکس ها به هم تلاش شد که با مشکلاتی همراه بود.
* روش MPEG
نام این فرمت مخفف عبارت MOVING PICTURE EXPERT GROUP است. این روش در ابتدای سال ۹۰ ابداع شد و در آن اطلاعات تصویر با سرعت حدود ۵/۱ مگابیت بر ثانیه انتقال پیدا می کرد که در تهیه تصاویر ویدئویی استفاده می شد. با این روش امکان ذخیره حدود ۶۵۰ مگابایت اطلاعات معادل حدود ۷۰ دقیقه تصویر متحرک در یک دیسک به وجود آمد. در MPEG بیت های اطلاعات به صورت سریال ارسال می شوند و به همراه آنها بیت های کنترل و هماهنگ کننده نیز ارسال می شوند که موقعیت و نحوه قرارگیری بیت های اطلاعاتی را برای انتقال و ثبت اطلاعات صدا و تصویر تعیین می کند.
* روش MPEG۲
در روش MPEG ۲ از ضریب فشرده سازی بالاتری استفاده می شود و امکان دسترسی به اطلاعات ۳ تا ۱۵ مگابیت بر ثانیه است از این روش در دی وی دی های امروزی استفاده می شود در اینجا نیز هر فریم تصویری شامل چندین سطر از اطلاعات دیجیتالی است.
* روش MPEG ۴
از این روش برای تجهیزاتی که با انتقال سریع یا کند اطلاعات سرو کار دارند استفاده می شود. این روش توانایی جبران خطا و ارائه تصویر با کیفیت بالا را دارد. مسئله خطا و جبران آن در مورد تلفن های همراه و کامپیوترهای خانگی و لپ تاپ ها و شبکه ها از اهمیت زیادی برخوردار است. در شبکه های کامپیوتری باید تصویر برای کاربرانی که از مودم های سریع یا کند استفاده می کنند به خوبی نمایش داده شود، در چنین حالتی روش MPEG ۴ مناسب است. از این روش در دوربین های تلویزیونی نیز استفاده می شود. ایده اصلی این روش تقسیم یک فریم ویدئویی به یک یا چند موضوع است که مطابق قاعده خاصی کنار هم قرار می گیرند مانند درختی که از روی برگ های آن بتوان به شاخه تنه یا ریشه آن دست یافت. هر برگ می تواند شامل یک موضوع صوتی یا تصویری باشد. هر کدام از این اجزا به صورت مجزا و جداگانه قابل کپی و یا انتقال هستند. این تکنیک را با آموزش زبان می توان مقایسه کرد.
همان طوری که در آموزش زبان کلمات به صورت مجزا و جداگانه قرار داده می شوند و ما با مرتب کردن آن جملات خاصی می سازیم و می توانیم در چند جمله، کلمات مشترک را فقط یک بار بنویسیم و هنگام مرتب کردن آن ها به کلمات مشترک رجوع کنیم، در اینجا هم هر یک از این اجزا یک موضوع خاص را مشخص می کند و ما می توانیم اجزا مشترک را فقط یک بار به کار ببریم و هنگام ساختن موضوع به آنها رجوع کنیم. هر یک از موضوعات هم می توانند با موضوعات دیگر ترکیب و مجموعه جدیدی را بوجود آورند. این مسئله باعث انعطاف پذیری و کاربرد فراوان روش MPEG۴ می شود. برای مثال به صحنه بازی تنیس توجه کنید. در یک بازی تنیس می توان صحنه را به دو موضوع بازیکن و زمین بازی تقسیم کرد زمین بازی همواره ثابت است بنا بر این بعنوان یک موضوع ثابت همواره تکرار می شود ولی بازیکن همواره در حال حرکت است و چندین موضوع مختلف خواهد بود. این مسئله سبب کاهش پهنای باند اشغالی توسط تصاویر دیجیتالی می شود. توجه داشته باشید که علاوه بر سیگنال های مربوط به این موضوعات سیگنال های هماهنگ کننده ای هم وجود دارند که نحوه ترکیب و قرارگیری صحیح موضوعات را مشخص می کند.
کنترل ماشین آلات و تجهیزات صنعتی یکی از وظایف مهم در فرآیندهای تولیدی است. به کارگیری کنترل خودکار و اتوماسیون روزبه روز گسترده تر شده و رویکردهای جدید با بهره گیری از تکنولوژی های نو امکان رقابت در تولید را فراهم می سازد. لازمه افزایش کیفیت و کمیت یک محصول، استفاده از ماشین آلات پیشرفته و اتوماتیک می باشد. ماشین آلاتی که بیشتر مراحل کاری آنها به طور خودکار صورت گرفته و اتکای آن به عوامل انسانی کمتر باشد. امروزه استفاده از تکنولوژی ماشین بینایی و تکنیک های پردازش تصویر کاربرد گسترده ای در صنعت پیدا کرده است و کاربرد آن بویژه در کنترل کیفیت محصولات تولیدی، هدایت روبات و مکانیزم های خود هدایت شونده روز به روز گسترده تر می شود. عدم اطلاع کافی بعضی مهندسان در بعضی کشورها از تکنولوژی ماشین بینایی و عدم آشنایی با توجیه اقتصادی به کارگیری آن موجب شده است که در استفاده از این تکنولوژی تردید و در بعضی مواقع واکنش منفی وجود داشته باشد. علی رغم این موضوع، ماشین بینایی روز به روز کاربرد بیشتری پیدا کرده و روند رشد آن چشمگیر بوده است. عملیات پردازش تصویر در حقیقت مقایسه دو مجموعه عدد است که اگر تفاوت این دو مجموعه از یک محدوده خاص فراتر رود، از پذیرفتن محصول امتناع شده و در غیر این صورت محصول پذیرفته می شود. در زیر پروژه هایی که در زمینه پردازش تصاویر پیاده سازی شده است، توضیح داده می شود. این پروژه ها با استفاده از پردازش تصویر، شمارش و اندازه گیری اشیا، دسته بندی اشیا، تشخیص عیوب مثل تشخیص ترک، و بسیاری عملیات دیگر را انجام می دهند:
* اندازه گیری و کالیبراسیون
* جداسازی پینهای معیوب
* بازرسی لیبل و خواندن بارکد
* بازرسی عیوب چوب
* بازرسی قرص
* بازرسی و دسته بندی زعفران
* درجه بندی و دسته بندی کاشی
* بازرسی میوه
* بازرسی شماره چک
کالیبراسیون و ابزار دقیق
اندازه گیری دقیق و سنجش فواصل کوچک یکی از دغدغه های اصلی در صنایع حساس می باشد. دوربین های با کیفیت امکان کالیبراسیون با دقت بسیار بالا در حد میکرون را فراهم آورده اند. به کمک سیستم های مبتنی بر پردازش تصویر می توان اشکال پیچیده صنعتی را با سرعت و دقت بالا اندازگیری کرد.
حمل و نقل
سیستم کنترل سرعت ثابت:
سیستم سرعت سنج ثابت نصب شده در جاده تهران- فیروزکوه. این سیستم با ثبت سرعت لحظه ای، سرعت متوسط، لاین تردد خودرو و خواندن اتوماتیک پلاک آن تخلفات مورد نظر را در شب و روز ثبت می کند.
سرعت سنجی خودرو
رشد استفاده از سیستم های کنترل هوشمند سرعت و ثبت تخلف در سال های اخیر مشهود بوده است. این سیستم ها برای تشخیص سرعت خودروهای عبوری، از روش های متفاوتی استفاده می کنند. در این زمینه می توان از الگوریتم های پردازش تصویر استفاده کرد. با استفاده از دو دوربین و کالیبره کردن آن ها و پردازش تفاوت دید موجود در تصاویر بدست آمده از دو دوربین امکان تشخیص عمق خودروی عبوری فراهم می شود؛ و با توجه به مکان خودرو در لحظه های مختلف، سرعت خودرو قابل محاسبه است. از مزایای استفاده از روش سرعت سنجی خودروها به کمک پردازش تصویر نسبت به دیگر روش ها مانند رادار و یا لیزر، پسیو بودن این روش است. بدین ترتیب امکان ثبت نشدن تخلف به علت استفاده متخلف از دستگاه های مختل کننده (jammer) وجود ندارد. همچنین دستگاه های هشدار دهنده وجود سیستم های سرعت سنج که با آشکار سازی امواج رادار به متخلف هشدار می دهند نیز دیگر کاربری نخواهند داشت. این سیستم های سرعت سنج دارای دو نوع هستند.
سرعت سنج ثابت که بر روی پایه هایی در کنار بزرگراه ها و جاده ها نصب می شوند. سرعت سنج خودرویی که بر روی خودروی پلیس سوار می شود. به علت حرکت خودروی پلیس استفاده از الگوریتم های ثابت کننده تصویر به منظور حذف حرکت خودروی پلیس لازم می باشد. از این نمونه بر روی خودروهای زانتیای کنترل نامحسوس پلیس ایران نصب شده است.
پلاک خوان
پلاک خوانی خودرو با آموختن کاراکترهایی که پلاک خودرو از آن تشکیل شده است می توان در تصویر بدست آمده از دوربین پلاک خوان به دنبال آن کاراکترها گشت. سیستم های پلاک خوان خودرو کاربردهای مختلفی دارد که می توان به چند نمونه اشاره کرد.
* پلاک خوانی جهت کنترل عبور و مرور در مرزها
* پلاک خوانی خودروهای متخلف در سیستم های ثبت تخلف و اعمال جریمه
پلاک خوان پارکینگی
پلاک خوان پارکینگی با بهره گیری از توان قرائت پلاک به منظور هوشمندسازی و اتوماسیون پارکینگ های عمومی مورد استفاده قرار می گیرد. این سامانه با ثبت ورود و خروج هر یک از خودروها و محاسبه هزینه پارک خودرو بر حسب تعرفه و زمان پارک بودن خودرو کمک شایانی به مدیریت پارکینگ می نماید.
پلاک خوان سازمانی
از این پلاک خوان به منظور ثبت پلاک خودرو و کنترل تردد خودروها استفاده می گردد. به کار گیری این نوع از پلاک خوان ها برای سازمان ها و ادارات جهت امکان کنترل تردد خودروها و انواع گزارشها، تعریف افراد مجاز و مهمان در سامانه، کنترل درب ها با راهبند مکانیزه برای افراد مجاز مناسب می باشد.
پلاک خوان آماری
این پلاک خوان جهت ثبت پلاک خودرو و آمارگیری تردد خودروها استفاده شده و از نرم افزار ساده ای بهره برده و قرائت و ثبت پلاک های عبوری با آن صورت می پذیرد.
پلاک خوان جامع
پلاک خوان جامع در واقع به منظورکاربرد ترکیبی پلاک خوان سازمانی و پارکینگی تعریف شده است و برای مواردی بکار می رود که محاسبات مالی برای پلاک های ناشناس با تعریف افراد مجاز دائمی ترکیب می شود و قابلیت های هر دو سامانه را دارا می باشد.
معرفی ماشین بینایی:
بینایی رایانه ای یا بینایی ماشین به یکی از شاخه های علوم کامپیوتر است که شامل روش های مربوط به دستیابی تصاویر، پردازش، آنالیز و درک محتوای آن ها است. معمولاً این پردازش ها تصاویر تولید شده در دنیای واقعی را به عنوان ورودی دریافت و داده هایی عددی یا سمبلیک را به عنوان خروجی تولید می کنند، مانند در شکل هایی از تصمیم گیری یکی رویه های توسعه این شاخه بر اساس شبیه سازی توانایی بینایی انسان در رایانه است.
بینایی رایانه ای به مسائل مختلفی از جمله استخراج داده از عکس، فیلم، مجموعه چند عکس از زوایای مختلف و پردازش تصاویر پزشکی می پردازد. معمولاً ترکیبی از روش های مربوط به پردازش تصاویر و ابزارهای یادگیری ماشینی و آمار برای حل مسایل مختلف در این شاخه استفاده می گردد.
کاوش در داده ها
کاوش های ماشینی در داده ها
بینایی ماشینی را می توان یکی از مصادیق و نمونه های بارز زمینه مادر و اصلی تر کاوش های ماشینی داده ها به حساب آورد که در آن داده ها تصاویر دوبعدی یا سه بعدی هستند، که آن ها را با استفاده از هوش مصنوعی آنالیز می کنند.
وظایف اصلی در بینایی رایانه ای
تشخیص شیء
تشخیص حضور و/یا حالت شیء در یک تصویر. به عنوان مثال:
جستجو برای تصاویر دیجیتال بر اساس محتوای آن ها
بازیابی محتوامحور تصاویرشناسایی صورت انسان ها و موقعیت آن ها در عکس ها.
تخمین حالت سه بعدی انسان ها و اندام هایشان.
پیگیری
پیگیری اشیاء شناخته شده در میان تعدادی تصویر پشت سر هم.
به عنوان مثال:
پیگیری یک شخص هنگامی که در یک مرکز خرید راه می رود.
تفسیر منظره
ساختن یک مدل از یک تصویر/تصویر متحرک. به عنوان مثال:
ساختن یک مدل از ناحیه پیرامونی به کمک تصاویری که از دوربین نصب شده بر روی یک ربات گرفته می شوند.
خودمکان یابی
مشحص کردن مکان و حرکت خود دوربین به عنوان عضو بینایی رایانه. به عنوان مثال:
مسیریابی یک ربات درون یک موزه.
سامانه های بینایی رایانه ای
یک سامانه نوعی بینایی رایانه ای را می توان به زیرسامانه های زیر تقسیم کرد:
تصویربرداری
تصویر یا دنباله تصاویر با یک سامانه تصویربرداری (دوربین، رادار، لیدار، سامانه توموگرافی) برداشته می شود. معمولاً سامانه تصویر برداری باید پیش از استفاده تنظیم شود.
پیش پردازش
در گام پیش پردازش، تصویر در معرض اَعمال "سطح پایین" قرار می گیرد. هدف این گام کاهش نوفه (کاهش نویز – جدا کردن سیگنال از نویز) و کم کردن مقدار کلی داده ها است. این کار به نوعی با به کارگیری روش های گوناگون پردازش تصویر (دیجیتال) انجام می شود. مانند:
* زیرنمونه گیری تصویر.
* اعمال فیلترهای دیجیتال.
* پیچش ها.
همبستگی ها یا فیلترهای خطی لغزش نابسته.
* عملگر سوبل.
* محاسبه گرادیان و احتمالاً گرادیان زمانی
* تقطیع تصویر.
آستانه گیری پیکسلی.
* انجام یک ویژه تبدیل بر تصویر.
تبدیل فوریه.
* انجام تخمین حرکت برای ناحیه های محلی تصویرکه به نام تخمین شارش نوری هم شناخته می شود.
* تخمین ناهمسانی در تصاویر برجسته بینی.
* تحلیل چنددقتی.
استخراج ویژگی
هدف از استخراج ویژگی کاهش دادن بیش تر داده ها به مجموعه ای از ویژگی هاست، که باید به اغتشاشاتی چون شرایط نورپردازی، موقعیت دوربین، نویز و اعوجاج ایمن باشند. نمونه هایی از استخراج ویژگی عبارت اند از:
* انجام آشکارسازی لبه.
* استخراج ویژگی های گوشهای.
* استخراج تصاویر چرخش از نقشه های ژرفا.
* بدست آوردن خطوط تراز و احتمالاً گذر از صفرهای خمش.
ثبت
هدف گام ثبت برقراری تناظر میان ویژگی های مجموعه برداشت شده و ویژگی های اجسام شناخته شده در یک پایگاه داده های مدل و/یا ویژگی های تصویر قبلی است. در گام ثبت باید به یک فرضیه نهایی رسید. چند روش این کار عبارت اند از:
* تخمین کمترین مربعات.
* تبدیل هاگ در انواع گوناگون.
* درهم سازی هندسی.
* پالودن ذره ای.
آشنایی با دستورات پردازش تصویر در متلب:
باز کردن عکس های درون ویندوز با متلب :
فایل های عکس درون ویندوز را به دو روش می توانیم باز کنیم. روش اول این است که فایل در درون خود نرم افزار متلب باز شود که برای مواردی مفید است که بخواهیم با دستوراتی، تغییرات مورد نظر خود را بر عکس اعمال کنیم. روش دوم این است که عکس توسط برنامه ای باز شود که خود ویندوز برای آن نوع فایل تعیین کرده است که این مورد نیز می تواند در ساخت برنامه های کاربردی توسط متلب، مفید واقع شود.
در ادامه، دستورات مربوط به این دو روش را شرح خواهیم داد.
باز کردن عکس به وسیله خود نرم افزار متلب :
چنانچه بخواهیم که عکس به وسیله خود نرم افزار متلب باز شود، باید از دستور open استفاده کنیم. به مثال زیر توجه کنید :
مثال :
open('c:1.jpg')
نتیجه :
متلب پنجره ای را باز کرده و عکس مورد نظر را نمایش می دهد.
باز کردن عکس به وسیله نرم افزارهای ویندوز:
چنانچه بخواهیم عکس یا هر فایل دیگر در برنامه ای باز شود که ویندوز برای آن مشخص کرده است (نه در نرم افزار متلب)، باید از دستور winopen استفاده کنیم. به مثال زیر توجه کنید :
مثال :
winopen('c:1.jpg')
وارد کردن عکس های ویندوز به درون متلب :
فرض کنید در یکی از درایوهای ویندوز خود، عکسی دارید که می خواهید به وسیله نرم افزار متلب، بر روی آن عکس، تغییراتی را اعمال کنید. مسلما قبل از هر چیز، نیاز دارید که آن عکس را در نرم افزار متلب وارد کنید. برای این منظور می توانید از هر یک از روش های زیر اقدام کنید :
روش اول :
در پنجره اصلی متلب، بر روی گزینه Open file (به شکل ) کلیک کنید. در پنجره ای که باز می شود، گزینه Files of type برابر All MATLAB files قرار داده شده است، باید این گزینه را به All Files تغییر دهید تا بتوانید هر نوع فایلی را انتخاب کنید (مثلا عکسی با فرمت jpeg). سپس فایل خود را یافته و بر روی گزینه Open کلیک کنید. پنجره ای به شکل زیر باز می شود:
در این مرحله، متلب می خواهد اطلاعات عکس شما را در متغیری ذخیره کند. اگر نام عکس شما یک نام مجاز برای متلب باشد، متلب همان نام را برای متغیر انتخاب می کند و اگر نام، غیر مجاز باشد، متلب آن را تغییر می دهد. مثلا اگر عکسی با نام 1.jpeg را انتخاب کرده باشید، متلب نام x1 را برای متغیر انتخاب می کند.
شما می توانید بر روی نام انتخاب شده، دو بار کلیک کنید و نامی دیگر را انتخاب نمایید. پس از انتخاب نام مورد نظر خود، بر روی گزینه Finish کلیک کنید تا پنجره بسته شود.
برای آن که عکس خود را در متلب مشاهده کنیم، دستور زیر را اجرا می کنیم. برای متغیر با نام x1 :
image(x1)
title 'x1'
axis off
axis image
روش دوم : استفاده از دستور imread
در این روش نیز اطلاعات عکس در متغیری ذخیره خواهد شد و تنها تفاوت با روش قبل این است که باید آدرس عکس مورد نظر را به طور دقیق در دستور imread بنویسید. به مثال زیر توجه کنید :
مثال :
A = imread('c:1.jpg');
نتیجه :
متلب متغیری با نام A ایجاد می کند که حاوی اطلاعات عکس می باشد. برای مشاهده عکس در متلب، کدهای زیر را اجرا می کنیم :
image(A)
title 'A'
axis off
axis image
نتیجه :
متلب پنجره ای را باز کرده و عکس را نمایش می دهد.
تغییر اندازه یک تصویر با دستور imresize در متلب :
با استفاده از دستور imresize در متلب، می توانیم اندازه یک تصویر را تغییر بدهیم. با دستور imresize ، می توانیم تعیین کنیم که اندازه تصویر تا چه اندازه بزرگتر یا کوچکتر شود. دستور imresize را می توانیم به چندین روش مختلف به کار ببریم. این روش ها را در ادامه توضیح می دهیم.
تغییر اندازه بر اساس ضریبی از اندازه تصویر اولیه :
با فرض اینکه اطلاعات تصویر، در متغیر image ذخیره شده باشد، آنگاه چنانچه دستور imresize را به صورت imresize(image,A) به کار ببریم، که در آن A یک ضریب عددی است، آنگاه دستور imresize ، تصویر image را به اندازه ضریب A ، بزرگتر یا کوچکتر می کند. اگر ضریب A بین 0 تا 1 باشد، آنگاه تصویر حاصل، از تصویر image ، کوچکتر خواهد بود و چنانچه ضریب A ، بزرگتر از 1 باشد، آنگاه تصویر حاصل، از تصویر image ، بزرگتر می شود. به مثال زیر توجه کنید :
مثال :
کدهای زیر را می نویسیم:
clear all
close all
clc
image=imread('friend.jpg');
imshow(image)
image_new=imresize(image,0.5)
figure
imshow(image_new)
ابتدا تصویری با نام friend.jpg را با دستور imread، در نرم افزار متلب وارد می کنیم و آن را با دستور imshow ، نمایش می دهیم. سپس با دستور imresize ، اندازه تصویر را به نصف کاهش می دهیم (ضریب برابر با 0.5 انتخاب شده است). در پایان، تصویر حاصل شدهش با نام image_new را با دستور imshow نمایش داده ایم. دستور figure ، برای باز شدن یک پنجره مخصوص شکل جدید است تا در انتها، هر دو تصویر را داشته باشیم.
نتیجه :
تصویر اولیه به صورت زیر می باشد :
و تصویر کوچک شده، به صورت زیر :
تغییر اندازه بر اساس تعداد ردیف ها و ستون های ماتریس اطلاعات تصویر ثانویه :
می توانیم اندازه تصویر ثانویه را بر اساس تعداد ردیف ها و تعداد ستون های ماتریس مربوط به آن، تعیین کنیم. برای این منظور، باید از دستور imresize ، به صورت imresize (image, numrows numcols) استفاده کنیم که در آن، پارامتر numrows برابر تعداد ردیف ها و پارامتر numcols برابر تعداد ستون های مورد نظر ما برای ماتریس مربوط به تصویر ثانویه می باشد. همان مثال قبل را این بار با این روش می نویسیم:
مثال :
کدهای زیر را می نویسیم:
clear all
close all
clc
image=imread('friend.jpg');
imshow(image)
image_new=imresize(image,[200,80])
figure
imshow(image_new)
تعداد ستون ها را به عمد کمتر از تعداد ردیف ها، انتخاب کرده ایم تا تصویر در جهت افقی، فشرده تر شود.
نتیجه:
تصویر اولیه به صورت زیر می باشد:
و تصویر کوچک شده، به صورت زیر :
مشاهده میزان به کار رفته از هر رنگ در یک تصویر با دستور imhist در متلب :
با استفاده از دستور imhist در متلب، می توانیم برای هر تصویر دلخواه، یک هیستوگرام رسم کنیم که در این هیستوگرام، میزان به کار رفتن رنگ های مختلف در تصویر، نمایش داده می شود. به مثال زیر توجه کنید : مثال:
clear all
close all
clc
img=imread('image.jpg');
img=rgb2gray(img);
imshow(img);
figure
imhist(img);
نتیجه :
تصویر :
هیستوگرام میزان رنگ های به کار رفته در تصویر :
مشاهده اطلاعات مربوط به یک تصویر بادستور imfinfo در متلب :
با استفاده از دستور imfinfo در متلب، می توانیم اطلاعات و مشخصات مربوط به یک تصویر را مشاهده کنیم. این اطلاعات عبارتند از : نام فایل تصویر، زمان ساخت فایل تصویر، نوع فایل تصویر، عرض تصویر، طول تصویر و … . به مثال زیر توجه کنید :
مثال :
clear all
close all
clc
imfinfo('image.jpg')
نتیجه :
ans =
Filename: 'C:UsersaliDesktopimage.jpg'
FileModDate: '05-Apr-2013 22:49:51'
FileSize: 62837
Format: 'jpg'
FormatVersion: ''
Width: 482
Height: 599
BitDepth: 24
ColorType: 'truecolor'
FormatSignature: ''
NumberOfSamples: 3
CodingMethod: 'Huffman'
CodingProcess: 'Sequential'
Comment: {}
پردازش عکس های با پسوند bmp در متلب :
فرض کنید که یک عکس با نام myImage.bmp (با پسوند bmp) داریم. ابتدا بد نیست اندازه عکس مورد نظرمان را بررسی کنیم، بنابراین در محیط ویندوز، بر روی عکس، با موس، کلیک سمت راست نموده و گزینه Properties را انتخاب می کنیم. سپس در بخش Details ، می توانیم اندازه عکس را مشاهده کنیم :
همان طور که می دانیم، کوچکترین بخش سازنده عکس را پیکسل می نامیم (که در آن، رنگ، ثابت می باشد). عکس فوق دارای اندازه 213 در 161 پیکسل می باشد. یعنی 213 پیکس در جهت افقی داریم و تعداد 161 پیکسل هم در جهت عمودی داریم و بنابراین تعداد کل پیکسل ها برابر 213 ضرب در 161 می باشد. خوب حالا به سراغ نرم افزار متلب می رویم.
برای وارد کردن اطلاعات عکس مورد نظر به درون نرم افزار متلب، دستورات زیر را می نویسیم :
clear all
close all
clc
A = imread('myImage.bmp');
A_size = size(A)
با دستورات فوق، اطلاعات مربوط به عکس را در ماتریسی با نام A ذخیره می کنیم. همچنین با دستور size ، اندازه ماتریس A را به دست می آوریم. نتیجه اجرای کد متلب بالا، به صورت زیر می باشد:
A_size =
161 213 3
بنابراین ماتریس A ، یک ماتریس سه بعدی است که در بعد اول، دارای اندازه 161، در بعد دوم، دارای اندازه 213 و در بعد سوم، دارای اندازه 3 می باشد. عدد 161 برابر همان تعداد پیکسل در جهت عمودی است و عدد 213 برابر تعداد پیکسل در جهت افقی می باشد، بنابراین دو بعد اول ماتریس A ، برای ارجاع به پیکسل های عکس به کار می روند. اما یک بعد سوم هم داریم که دارای اندازه 3 می باشد، بنابراین ما در ماتریس A ، برای هر پیکسل، 3 مقدار داریم. در واقع، این سه مقدار هستند که رنگ آن پیکسل را مشخص می کنند، پس با تغییر دادن آنها، می توانیم رنگ آن پیکسل را تغییر بدهیم.
چنانچه بخواهیم عکس ذخیره شده در ماتریس A را با نرم افزار متلب نمایش بدهیم، از دستور ؟ استفاده می کنیم:
clear all
close all
clc
A = imread('myImage.bmp');
A_size = size(A)
imshow(A)
نتیجه :
اکنون کدها را به گونه ای می نویسیم که در ماتریسی با نام B بخشی از عکس را داشته باشیم:
clear all
close all
clc
A = imread('myImage.bmp');
A_size = size(A)
horizontal_start_pixel = 50;
horizontal_end_pixel = 160;
vertical_start_pixel = 10;
vertical_end_pixel = 100;
B = zeros(vertical_end_pixel-vertical_start_pixel+1, horizontal_end_pixel-horizontal_start_pixel+1, 3);
for ii = vertical_start_pixel:vertical_end_pixel
for jj = horizontal_start_pixel:horizontal_end_pixel
B(ii-vertical_start_pixel+1,jj-horizontal_start_pixel+1,:) = A(ii,jj,:);
end
end
B=mat2gray(B); % important
imshow(B)
استفاده از دستور mat2gray بسیار مهم است و چنانچه آن را به کار نبرید، عکس با رنگ های متفاوتی نمایش داده می شود که مطلوب نیست.
نتیجه :
مشاهده می کنید که تنها اطلاعات مربوط به بخشی از عکس اصلی در ماتریس B ذخیره شده است.
تبدیل یک عکس به عکس باینری (binary) (پیکسل ها تنها دارای مقادیر 0 و 1)، با دستور im2bw در متلب :
با استفاده از دستور im2bw در متلب، می توانیم یک عکس که هر پیکسل آن می تواند دارای مقادیر دلخواهی باشد را به یک عکس باینری (binary) که پیکس های آن، تنها دارای مقدار 0 یا 1 هستند، تبدیل کنیم.
به مثال زیر توجه کنید :
مثال خود نرم افزار متلب :
clear all
close all
clc
load trees
BW = im2bw(X,map,0.4);
imshow(X,map)
figure
imshow(BW)
با دستور load ، اطلاعات مربوط به یک عکس که در نرم افزار متلب ذخیره شده است (جزء اطلاعات داخلی خود متلب) را به درون workspace آورده ایم تا پردازش های بعدی را بر روی آن انجام بدهیم. دستور imshow برای نمایش یک عکس به کار می رود. دستور figure باعث می شود که عکس دوم، در یک پنجره جدید نمایش داده شود.
در دستور im2bw ، باید یک حد آستانه (threshold) تعیین شود تا بداند که مقادیر عکس اولیه را چگونه در دو گروه قرار دهد (تبدیل به 0 یا 1). ما مقدار 0.4 را برای آن انتخاب کرده ایم.
نتیجه :
عکس اولیه :
عکس باینری (پیکسل ها تنها دارای مقادیر 0 و 1) :
اگر مقادیر عناصر موجود در ماتریس BW را بررسی کنید، مشاهده می کنید که تنها برابر 0 یا 1 می باشند.
نمایش عکس در یک پنجره با گزینه های کاربردی بیشتر (مثل تعیین کد معادل رنگ نقطه ها، تعیین فاصله بین دو نقطه، ابزار crop و …)، با دستور imtool در متلب :
در مبحثی دیگر، با دستور imshow در متلب آشنا شدیم که برای نمایش یک عکس به کار می رفت. اما علاوه بر دستور imshow ، یک دستور دیگر با نام imtool در متلب وجود دارد که علاوه بر نمایش عکس در یک پنجره، یک سری ابزارهای مفید نیز در اختیار ما قرار می دهد.
به مثال زیر توجه کنید :
مثال :
برای مقایسه دستورهای imshow و imtool ، هر دو را به کار می بریم :
clear all
close all
clc
load trees
imshow(X,map)
imtool(X,map)
با دستور load ، اطلاعات مربوط به یک عکس که در نرم افزار متلب ذخیره شده است (جزء اطلاعات داخلی خود متلب) را به درون workspace آورده ایم.
نتیجه :
پنجره زیر توسط دستور imshow نمایش داده می شود:
پنجره زیر توسط دستور imtool نمایش داده می شود
مشاهده می نید که یک سری ابزار در آن در نظر گرفته شده است. در ادامه، دو ابزار از میان آنها را شرح می دهیم. با ابزار Inspect pixel values می توانیم مقادیر متناظر با هر پیکسل از عکس را ببینیم :
یک پنجره جدید باز می شود و مقادیر مربوط به چند پیکسل را نمایش می دهد :
با ابزار Measure distance می توانیم فاصله بین دو پیکسل (دو نقطه) از عکس را به دست آوریم :
فصل دوم :
میکروکنترلر AVR
آشنایی با میکروکنترلر AVR
میکروکنترلرها به عنوان یک ابزارقدرتمند نزد مهندسان برق وکامپیوتر شناخته شده اند با توجه به کاربرد روز افزون میکروکنترلرها در صنعت , شرکت های سازنده زیادی اقدام به تولید آنها می نمایند .
میکروکنترلرهای AVR ساخت شرکت ATMEL از جمله معروف ترین و پرکاربردترین میکروکنترلرهای موجود در بازار ایران می باشند.تنوع این میکرکنترلرها به مهندس طراح این امکان را می دهد که برای هر پروژه از میکرکنترلر بهینه آن استفاده کند . به دلیل مقبولیت این میکروکنترلرها شرکت های زیادی اقدام به نوشتن نرم افزارهایی نموده اند که امکان برنامه نویسی با زبان های سطح بالا را برای کاربر فراهم می کنند .
میکرو کنترلرهای AVR به دسته های TINY و AT90S و ATMEGA تقسیم می شوند . از این میان میکروکنترلرهای نوع سوم قدرتمندتر و پرکاربردتر هستند.با توجه به اینکه نوشتن برنامه به زبان اسمبلی بسیار زمان بر و دشوار است, زبانهای سطح بالا در این زمینه کمک بسیار زیادی کرده اند .
زبان برنامه نویسی BASIC و C بیشترین استفاده در برنامه نویسی میکروها دارند. ولی در اکثر کاربردها کدهای بیشتری را نسبت به زبان برنامه نویسی اسمبلی تولید می کنند. ATMEL ایجاد تحولی در معماری , جهت کاهش کد به مقدار مینیمم درک کرد که نتیجه این تحول میکروکنترلرهای AVR هستند که علاوه بر کاهش و بهینه سازی مقدار کدها به طور واقع عملیات را تنها در کلاک سیکل توسط معماری RISC انجام می دهد .هدف ATMEL طراحی معماری بود که هم برای زبان اسمبلی وهم زبانهای HLL مفید باشد .
AVR ها به عنوان میکروهای RISC با دستورات فراوان طراحی شده اند که باعث می شود حجم کد تولید شده کم و سرعت بالا تری به دست آید.
میکروکنترلرها :
تفاوت میکروکنترلر و میکروپروسسور :
میکروپرسسورها بر خلاف میکرو کنترلرها فاقد RAM و ROM و پورتهای I/O در درون خود تراشه هستند بنابراین برای اینکه بتوان سیستمی مبتنی بر میکروپرسسور را طراحی کنیم باید RAM و ROM و پورتهای I/O و تایمرها به آن اضافه شود. با توجه به اینکه طراح می تواند روی مقدار RAM و ROM و پورتهای I/O اعمال نظر نماید , این سیستم ها انعطاف پذیری بشتری دارند. وبه آنها سیستمهای چند منظوره می گویند.
میکروکنترلرها شامل یک CPU به همراه مقدار ثابتی از RAM , ROM , پورتهای I/O وتایمر هستند که همگی این اجزا در یک تراشه جای داده شده اند و طراح سیستم نمی تواند یک حافظه , I/O یا تایمر را بدون گسترش لازم از بیرون اضافه کند بنابراین میکروکنترلرها انعطاف پذیری میکروپرسسورها را ندارند .
کاربرد میکروکنترلرها :
با توجه به آنچه که گفته شد میکروکنترلرها برای کاربردهایی که در آنها مشکل قیمت و حجم سیستم وجود دارد , مناسب است زیرا اضافه کردن حافظه , پورت I/O تایمرها و مدار واسط لازم به میکرپرسسور سبب افزایش قیمت وحجم سیستم می گردد. اما در میکروکنترلر این مشکل وجود ندارد. میکروکنترلرها به طور گستردهای در تولید سیستمهای تک منظوره به کار می روند. منظور از سیستم تک منظوره سیستمی است که از میکروکنترلر یا میکرپروسسور فقط برای یک کار استفاده می کند.مانند پردازنده درون یک موس که تنها به منظور یافتن مکان اشاره گر موس و ارسال آن به PC برنامه ریزی شده است. این سیستم ها در مقابل سیستمهای چند منظوره قرار می گیرند. که نمونه بارز آن یک PC است که می تواند برای کاربردهای متعدد و گوناگونی همچون واژه پردازی , بازی های ویدئویی , سرویس شبکه و … مورد استفاده قرار گیرد. این توانایی PC در اجرای کارهای گوناگون به دلیل وجود سیستم عاملی است که نرم افزار کاربردی را در RAM بار می کند تا PC بتواند آن را اجرا کند. اما در یک سیستم تک منظوره تنها یک نرم افزار کاربردی موجود است که معمولا درROM نوشته می شود. چند نمونه از وسایلی که در ساخت آنها از میکروکنترلرها استفاده شده است , عبارت اند از : کنترل از راه دور تلویزیون , تلفن , دوربین فیلمبرداری , فاکس , چاپگر , دستگاه فتوکپی ,سیستم های حفاظتی , دزد گیر و سیستم های کنترل صنعتی.به طور کلی می توان کاربرد میکروکنترلرها را در طراحی مدارهای کنترل و اتوما سیون خلاصه کرد.
ویژگی های اصلی یک میکروکنترلر :
با توجه به گستردگی میکروکنترلرها و شرکتهای سازنده آنها چگونگی انتخاب یک میکروکنترلر برای کاربردی خاص , از اهمیت فراوانی برخوردار است.بطور کلی ابتدا باید نیازهای سیستم و هزینه آنرا کاملا مشخص کنیم تا به کمک آنها بتوانیم انتخابی بهینه انجام دهیم. برای انتخاب یک میکروکنترلر باید موارد زیر را در نظر بگیریم:
1- تعداد بیتهای باس داده میکروکنترلر که می تواند 8 , 16 , 32 بیت باشد.
2- بیشترین سرعت میکروکنترلر.
3- توان مصرفی میکروکنترلر.
4- نوع بسته بندی میکروکنترلر (DIP , QFP , MLF , PLCC و…
5- مقدار حافظه RAM و ROM موجود در تراشه وقابل اضافه شدن به آن.
6- امکاناتی که کاربر را در کار با میکروکنترلر یاری می نماید , مانند اسمبلر در دسترس , عیب یاب , کامپایلر زبانهای سطح بالا ( C) و BASIC و … امولاتور وشبیه ساز.
7- قیمت میکروکنترلر و در دسترس بودن آن.
میکروکنترل های AVR:
در مباحث بالا با میکروکنترلرها آشنا شدیم حال در این بخش میکروکنترلرهای 8 بیتی شرکت ATMEL را که از ساختار RISC بهره می برند معرفی می کنیم . اما پیش از آن تفاوت های ساختار RISC وساختار CISC را بیان می کنیم .
ساختار RISC :
تا اوایل دهه 1980 , کلیه پردازنده ها از ساختار CISC استفاده می کردند. در این ساختار چندصد دستور طراحی شده بود که این دستورها کلیه عملیات ممکن راپوشش میداد.این روش طراحی پردستور مشکلاتی همانند تعداد زیاد ترانزستورها , پیچیدگی طراحی و ساخت مدار, زمان بری عملیات و گران بودن تراشه را به همراه داشت0 به همین دلیل در اوایل دهه 80 ساختار جدیدی به نام RISC ابداع شد . برخی از ویژگی های ساختار RISC از این قرارند :
1- اندازه دستورها در RISC بر خلاف CISC ثابت است و این امر کمک می کند که CPU سریعتر دستور ها را دیکد نماید
2- RISCاز روش STORE/LODE استفاده می کند. در این روش انتقال داده فقط از حافظه به رجیستر( LODE ) واز رجیستر به حافظه( STORE ) انجام می شود و انتقال مستقیم از رجیستر به رجیستر و از حافظه به حافظه ممکن نیست
3- تعداد رجسترها در RISC زیاد است . همه پردازنده ها 32 رجستر 32 بیتی دارند.
4- در RISC تعداد دستور ها کم است و فقط دستورهای پایه موجود است و برنامه نویس و کامپایلر باید دستورهای دیگر را با این دستور های پایه بسازند. کم بودن تعداد دستورها باعث دشواری برنامه نویسی به زبان اسمبلی ( نسبت به پردازنده های CISC ) می شود. بنابراین از RISC در محیط های برنامه نویسی به زبانهای سطح بالا مثل C استفاده می شود. کم بودن تعداد دستورها همچنین سبب می شود که برنامه بزرگ شود و حافظه بیشتری را اشغال کند
5- برتری اصلی RISC در این است که 95 درصد دستورهای آن یک کلاک و بقیه فقط دو کلاک زمان می برند که این امر باعث افزایش سرعت می شود.ضمن اینکه در تعداد ترانزیستورها به دلیل سادگی مدار صرفه جویی می گردد.
6- بر خلاف پردازنده های CISC که باس آدرس و داده در آن مشترک است , در پردازنده های RISC این باس ها جدا جدا هستند
7- الف) برای ورود و خروج داده (OPERAND) به CPU ب) برای دستیابی و آدرس دهی داده (OPERAND). ج) برای حمل .OPECODE پ) برای دستیابی و آدرس دهیOPECODE. به این روش ساختار HAVARD گویند.
8- چون CISC تعداد زیادی دستور دارد روش های فراوانی هم برای آدرس دهی دارد که اجرای این روش ها به وسیله ریز دستورهایی انجام می شود . پیاده سازی این ریز دستورها در CPU بیش از %60 ترانزیستورها را مصرف می کند حال آنکه در RISC ریز دستورها با استفاده از روش Harvard توسط کمتر از 10% ترانزیستورها پیاده سازی می شود.
به طور کلی پردازنده هایی که از ساختار RISC ریز دستورها بهره مند هستند در اکثر زمینه ها بر پردازنده های CISC برتری دارند اما مشکل RISC این است که برنامه های MSDOS بر روی آن اجرا نمی شود , بنابراین از پردازنده های CISC برای ساخت PC استفاده می شود. نمونه هایی از پردازنده هایی با ساختار CISC عبارتند از:
میکروپروسسورهای 80X86 ساخت INTEL و 68X0 ساخت Apple Mclntosh . میکروکنترلر 8051 هم از ساختار CISC استفاده می کند .
ویژ گی های میکروکنترکرهای AVR :
1- میکروکتنرلرهای AVR از یک ساختار RISC استفاده می کنند. دستورها در این میکروکتنرلرها به گونه ای طراحی شده است که حجم برنامه کوچک شود حتی اگر به زبان اسمبلی ساخته شده باشد. ساختار RISC با دستورهای فراوان در این میکروکتنرلرها باعث کم شدن حجم برنامه و بالا رفتن سرعت می شود. AVR دارای مجموعه دستورات فراوان با 32 رجیستر عمومی است که همه آنها با ALU در ارتباط هستند که سبب می شود دو رجیستر مستقل در یک دستور به طول یک کلاک در دسترسی باشند. این ساختار منجر به بهینه سازی کد و ده برابر سریعتر شدن آن نسبت به CISC می شود.
2- ساختار بهینه I/O در این میکروکتنرلرها باعث کاهش نیاز به افزودن اجزای خارجی می شود .
3- میکروکتنرلرهای AVR دارای اسیلاتور داخلی , تایمر , UART و SPI درون تراشه هستند .
4- این میکروکتنرلرها دارای مقاومت UP – PULL درونی هستند .
5- AVR از تکنولوژی حافظهVOLATILE – NONوDENSITY HIGH برخوردار است.
6- میکروکتنرلرهای AVR دارای مبدل A/D , مقایسه کننده آنالوگ , تایمر WATCHDOG و قابلیت مدولاسیون عرض پالس هستند .
7- حافظه های FLASH و EEPROM در این میکروکتنرلرها , قابلیت برنامه ریزی شدن در داخل مدار را دارند(ISP ) .
8- حافظه FLASH از دو روش در داخل مدار , برنامه ریزی می گردد. یکی , توسط PROGRAMMER حافظه VOLATILE – NON و از طریق رابطه سریال SPI و دیگری به وسیله اجرای BOOT PROGRAM می تواند از هر مدار واسطی برای ریختن برنامه بر روی حافظه FLASH استفاده کند .
9- ساختار میکروکتنرلرهای AVR به گونه ای طراحی شده است که هم برای زبان اسمبلی وهم زبانهای سطح بالا مفید باشد. بنابراین می توان از زبانهای سطح بالایی مثل C و BASIC هم در برنامه ریزی این میکروکتنرلرها استفاده کرد که این امر برنامه نویسی را برای کاربران آسان می کند .
طبقه بندی میکروکنترلهای AVR
میکروکنترلر های AVR به سه دسته اصلی تقسیم می شوند:
سری AT90S یا AVR
سری TINYAVR
سری MEGAAVR
میکروکنترلرهای نوع MEGAAVR دارای قابلیت های بیشتری نسبت به دو سری دیگر هستند.
در اینجا به بررسی مشخصات و پایه های یکی از یکروکنترلرهای پرکاربرد سری MEGA به نام ATMega32 می پردازیم:
مشخصات میکروکنترلر ATMega32
مهمترین مشخضات این میکروکنترلر 40 پایه عبارت است از:
کارایی بالا و توان مصرفی کم
32 رجیستر (ثبات) 8 بیتی
سرعت با سقف 16 میلیون دستور در ثانیه در فرکانس 16 Mhz
32کیلو بایت حافظه FLASH داخلی قابل برنامه ریزی با قابلیت ده هزار بار نوشتن و پاک کردن
2 کیلو بایت حافظه داخلی SRAM
1024 بایت حافظه EEPROM داخلی قابل برنامه ریزی با قابلیت صد هزار بار نوشتن و خواندن
قابلیت ارتباط JTAG
دو تایمر/شمارنده هشت بیتی
یک تایمر/شمارنده شانزده بیتی
چهار کانال PWM
هشت کانال مبدل A/D ده بیتی
یک مقایسه کننده آنالوگ داخلی
WATCHDOG قابل برنامه ریزی با اسیلاتور داخلی
ارتباط سریال برای برنامه ریزی: ISP
USART سریال قابل برنامه ریزی
دارای شش حالت SLEEP
منابع وقفه داخلی و خارجی
اسیلاتور داخلی RC
کار با ولتاژ 4.5 تا 5.5
فرکانس کاری 0 تا 16 مگاهرتز
32 خط داده ورودی و خروجی قابل برنامه ریزی
و …
میکروکنترلر ATMega32
در این بخش به معرفی پایه های مختلف میکروکنترلر ATmega32 می پردازیم. دلیل انتخاب میکروکنترلر ATmega32 وجود پروژه های مختلف در اینترنت که با مشاهده و کار کردن با این پروژه های آماده موجب یادگیری آسانتر میشود دلیل دیگر وجود تمامی امکانات موجود در میکروکنترلر سری mega میکروکنترلر AVR در این میکرو و بسته بندی PIDP آن که کار بروی برد برد را آسان میکند. و قیمت مناسب آن نسبت امکانات مناسب آن می باشد.
خلاصه ای از امکانات موجود بر روی تراشه ی ATmega32:
دارای ۱۳۰ دستور که اکثر آن ها در یک سیکل ساعت اجرا می شود.
۳۲k بایت حافظه ی قابل برنامه ریزی داخلی
مجهز به قسمت Boot Loader داخلی
۱k بایت حافضه ی EEPROM داخلی
قفل قابل برنامه ریزی برای امنیت نرم افزار
امکانات جانبی میکروکنترلر ATmega32:
ارتباط JTAG برای پروگرم کردن میکرو و عملیات دیباگ
دو تایمر کانتر ۸ بیتی با تقسیم کننده ی فرکانسی مجزا و دارای مد Compare
یک تایمر کانتر ۱۶ بیتی
دارای RTC (Real-Time Clock) با اسیلاتور مجزا
چهار کانال PWM
8 کانال ۱۰ بیتی ADC هشت کانال تک پایه
ارتباط دو سیمه I2C
ارتباط SPI به صورت Master/Slave
Watchdog قابل برنامه ریزی
اسیلاتور RC داخلی کالیبره شده
دارای ۶ مد برای مدریت انرژی
خطوط I/O و انواع بسته بندی
۴۰ پایه در نوع PIDP و ۴۴ پایه در نوع TQFP
32 خط ورودی در نوع/خروجی قابل برنامه ریزی
توضیح پایه های ATmega32:
میکرو کنترلر ATmega32 در بسته بندی های مختلفی وجود دارد که ما به دلیل سادگی کار پایه ای نوع PIDP این میکرو را شرح میدهیم.
VCC
این پایه ی تغذیه ی میکروکنترلر است که باید با توجه به نوع میکرو به ولتاژی در حدود ۲٫۷ تا ۵٫۵ ولت وصل شود.
GND
این پایه باید به زمین متصل شود.
PA0 تاPA7 (PORT A)
پورت A میتواند به عنوان ورودی های آنالوگ برای مبدل آنالوگ به دیجیتال استفاده شود. علاوه بر این در صورتی که از مبدل آنالوگ به دیجتال استفاده نگردد میتوان از این پورت به عنوان ۸ پایه ی I/O استفاده کرد.
PORT B و PORT C و PORT D
این پورت ها پورت های I/O دوطرفه ۸ بیتی با مقاومت Pull-Up داخلی قابل انتخاب میباشند. علاوه بر این هریک از این پورت ها وظایف دیکری نیز دارند که در بخش های دیگر این آموزش یه تدریج با آن ها آشناد خواهیم شد.
RESET
این پایه یک پایه وروردی است اگر این پایه صفر (منطقی) شود میکرو ریست می شود.
XTAL 1
این پایه یک پایه ورودی است که به تقویت کننده ی اسیلاتور متصل می شود و به مدار تولید کننده ی کلاک تراشه نیز وارد میشود.
XTAL 2
این پایه یک پایه ی خروجی است که از تقویت کننده اسیلاتور خارج میشود.
AVCC
این پایه مبع تغزیه مربوط به پورت A و مبدل آنالوگ به دیجیتال است. که در صورتی که از ADC نیز استفاده نشود حتما باید به VCC وصل شود.
AREF
این پایه ولتاژ مرجع آنالوگ برای مبدل آنالوگ به دیجیتال میباشد.
فرم کلی نوشتن یک برنامه در کامپایلر بسکام
1- میکروکنترلر مورد استفاده خود را انتخاب کنید.
2- فرکانس کار میکرو را انتخاب کنید.
3- امکانات میکروکنترلری را که می خواهید در برنامه از آن ها استفاده کنید را پیکربندی کنید.
4- متغیرهای مورد نیاز خود را نام گذاری کنید.
5- برنامه اصلی خود را پیاده سازی کنید.
تشریح پورت ها و پین های میکروکنترلر
در میکروکنترلر ATMEGA 32 چهار پورت به نام های A، B، C و D وجود دارد که هر کدام خود دارای 8 پین می باشند.هر پورت دارای 3 رجیستر به نام هایPORT، PIN و DDRمی باشد که در زبان بیسیک به رجیستر DDR دسترسی نداریم (منظور از نداشتن دسترسی به رجیستر DDR غیر قابل استفاده بودن آن نیست بلکه منظور وجود دستورات پیکربندی (config portx)در بسکام به جای مقدا دهی مستقیم رجیسترهاست.)بنابراین رجیسترهای PORT و PIN باقی می ماند که PORT رجیستر خروجی و PIN رجیستر ورودی می باشد یعنی اگر پورت را به عنوان ورودی استفاده کنید باید از PIN و اگر از آن به عنوان خروجی استفاده شود باید از رجیستر PORT استفاده کنید.
دستورات مربوط به پیکربندی وسایل I/O و تنظیمات کامپایلر
معرفی میکروکنترلر به کامپایلر
$regfile = "MxDef.Dat"
که نام میکروی مورد استفاده به جای x نوشته می شود.مثلا برای Atmega32 داریم:
$regfile = "M32Def.Dat"
انتخاب فرکانس کاری میکرو
$crystal = X Hz
توسط این دستور سرعت پردازش اطلاعات به کامپایلر معرفی می شودکه مقدار آن از صفر تا 16 مگاهرتز می باشد که تا فرکانس 8 مگاهرتز توسط اسیلاتور داخلی تامین می شود و برای استفاده از فرکانس بالاتر از 8 مگاهرتز باید از کریستال خارجی استفاده کرد.
نکته:تعیین این فرکانس فقط برای کامپایلر است و در عمل باید فیوزبیت کلاک را برای فرکانس مورد نظر چه در هنگام استفاده از اسیلاتور داخلی و چه کریستال خارجی تنظیم کنیم، چون مسیر حافظه فلاش و فیوزبیت ها در میکروکنترلرهای AVR از هم جدا بوده و این یکی از معایب میکروکنترلرهای AVR محسوب می شود.
پیکربندی پورت ها به عنوان ورودی و خروجی
Config portX=Input/Output
پورت مورد نظر جایگزین Xمی شود و همچنین می توانیدپین های مورد نظر را تک تک نیز به عنوان ورودی یا خروجی تعیین کنید.
انتخاب پورت C به عنوان خروجی
Config portc = output
انتخاب پین C.0 از پورت C به عنوان خروجی
Config portc.0 = output
مقدار دهی پین و پورت
portx.y=constant
با این دستور می توان مقدار دلخواه 8 بیتی را به پورت ها داد و همچنین می توان پین ها را نیز مقداردهی نمود.
Portc.2= 0
مقداری که به پورت اختصاص می یابدمی تواند باینری، هگز و یا محتویات یک متغیر باشد.
برای مقادیر باینری از l&bو برای مقادیر هگزادسیمال از h& استفاده می شود.
PORTD= &B00001100
PORTD= &H7f
ست کردن پین و پورت
set pin/port
با این دستور می توان یک پورت یا پین را 1 کرد.
Set Pind.5
Set PORTD
ریست کردن پین و پورت
Reset pin/port
با این دستور می توان یک پورت یا پین را 0 کرد.
Reset Pind.5
Reset PORTD
متغیر و دستورات مربوطه
معرفی متغیرها
متغیر چیست؟ متغیر نامی برای کلمات حافظه است که داده ها در آن قرار می گیرند و ممکن است در طول اجرای برنامه تغییر کنند.برای دسترسی به متغیرها از نامشان استفاده می شود.
متغیرها دارای نوع می باشند که هنگام نام گذاری باید آن را مشخص کرد. در جدول زیر انواع متغیرها نمایش داده شده است.
تعریف متغیر
DIM var AS Data Type
var نام متغیر و Data Type نوع یا جنس متغیر را تعیین می کند که می توان آن را بسته به نیاز از روی جدول بالا انتخاب کرد. مانند:
Dim A AS Word
حالت دیگری هم برای تعریف متغیر وجود دارد که به صورت زیر است:
DEF Data Type Var، که Data Type نوع متغیر و Var نام متغیر می باشد.
افزایش یک واحدی
Incr var
با این دستور یک واحد به متغیر عددی اضافه می شود.
کاهش یک واحدی
Decr var
با این دستور یک واحد از متغیر عددی کم می شود. استخراج داده از جدول داده ها
جدول Lookup
فرم کلی دستور:
var = Lookup(Value,Lable)
Varمتغیری که مقدار استخراج شده در آن قرار می گیرد.
Value:اندیس (شماره) داده دلخواه است به طور مثال اگر Value=0باشد، اولین داده جدول در متغیر قرار می گیرد.
Lable: برچسب جدول است که معمولا پس از دستور End و در پایان برنامه نوشته می شود.
نکات مربوط به دستور:
• حداکثر مقدار Value (تعداد اندیس ها) 255 می باشد.
• حداکثر مقدار داده برگشتی 65535 (Integer,Word) می باشد.
• در داده های دو بایتی (Integer,Word) هر داده بایستی به علامت % ختم شود. مانند:
Dim B As Integer
B = Lookup( 1 , Dta )
lcd B
End
Dta:
Data 1000% , 2000%
نسبت دادن اسم به متغیر و پورت ها
NewName ALIAS OldName
NewName: نام دلخواه
OldName: متغیر یا پورت و یا پایه مورد نظر برای تغییر نام
کاربرد: در زمان کار با پورت ها برای مثال یک پایه از پورت C را به یک بلندگو وصل کرده ایم، حال به جای آنکه در طی برنامه شماره پایه مورد نظر را حفظ کنید با این دستور می توان نام آن را به Speaker تبدیل کرده و از آن استفاده کنید.
معکوس کردن بیت
Toggle pin/var
با این دستور می توان یک بیت از متغیر یا یک پین از پورت ها را معکوس کرد.
Toggle PORTd.0
ایجاد تاخیر در برنامه
wait X
با این دستور می توان در برنامه به مقدار مورد نظر x تاخیر ایجاد کرد که مقدارتاخیر می تواند میکرو ثانیه، میلی ثانیه و ثانیه باشد.
ایجادتاخیر 10 ثانیه
Wait 10
ایجاد تاخیر 50 میکرو ثانیه
Waitus 50
نکته: x می تواند مقدار یک متغیر هم باشد.
تعریف آرایه
DIM Name(X) AS Data Type
آرایه مجموعه ای از عناصر هم نوع است.هر آرایه دارای نامی است که مشابه متغیرهای معمولی نامگذاری می شود. برای دسترسی به عناصر آرایه از اندیس آرایه استفاده می شود و از صفر شروع می شود.
X تعداد مورد نیاز متغیر است.
Data Type نوع یا جنس متغیر می باشد.
مثال:
DIM A(10) AS Byte
حلقه ها و دستورات شرطی
ایجاد حلقه تکرار
Do … Loop
فرم کلی دستور به شکل زیر است:
Do
Statements
Loop [Until expression]
تا زمانی که شرط درست باشد این حلقه تکرار می شود و چون شرط حلقه در پایان آن است پس حداقل یک بار اجرا می شود.
نکته: از این حلقه در اکثر موارد به عنوان حلقه بی نهایت و بدون شرط استفاده می شود و همچنین با دستور Exit DOمی توان از حلقه خارج شد.
حلقه تکرار محدود
For … Next
شکل کلی حلقه:
For Var=Start To End [Step Value]Next var
:Var مانند یک شمارنده عمل می کند.
START: مقدار اولیه (ثابت یا متغیر عددی)
End: مقدار نهایی (ثابت یا متغیر عددی)
:Step Valueمقدار گام حلقه می باشد که می تواند مثبت یا منفی باشد و اگر نوشته نشود مقدار 1 در نظر گرفته می شود.
حلقه while
شکل کلی دستور:
WHILE condition
statements
WEND
Condition: شرط حلقه
Statement: دستورات حلقه
:Wend پایان حلقه
انجام عملیات شرطی
IF … THEN
دستور IF به صورت های مختلفی مورد استفاده قرار می گیرد که در زیر 3 نمونه از آن نشان داده می شود:
شکل ساده دستور:IF comp or( comps )Then Statement
Comp: شرط مورد نظر است.در صورتیکه بیش از یک شرط داشته باشیم، شروط را در داخل پرانتز قرار داده و با توابع منطقی مانند OR و AND از هم جدا می کنیم.
Statement: دستوری که در صورت درستی شرط اجرا می شود و در صورت عدم درستی شرط برنامه به خط بعد از شرط IF منتقل می شود.
اگر بیش از یک دستور Statement داشته باشیم دستور IF به شکل زیر استفاده می شود:
IF comp or( comps ) Then
Statement
End IF
در صورتی که هم تعداد شروط و هم تعداد Statement ها بیش از یکی باشد از فرم زیر استفاده می شود:
IF comp or( comps ) Then
Statement 1
Elseif comp or( comps ) Then
Statement 2
Elseif comp or( comps ) Then
Statement 3
.
.
.
Else
Statement n
End IF
اتصال کلید به پین با دستور
Debounce
شکل کلی دستور:
Debounce Px.y , state , label
Px.y :X نام پورت و Y نام پایه ای از پورت است که به عنوان ورودی تعریف شده است.
:State وضعیت کلید که 0 یا 1 می باشد.پردازنده بابررسی وضعیت پایهY و مقایسه آن با State، در صورت برابری به برچسب Lable پرش می کند و در غیر این صورت برنامه از خط بعد از دستور Debounce ادامه پیدا می کند.
:Lable نام یک تابع است که خود شامل یک سری دستورات است و در انتهای آن باید از دستور Return استفاده کرد تا به برنامه اصلی بعد از Debounce برگردد.
نکته: در اتصال کلیدها به میکرو باید از مقاومت های بالاکش (Pull Up) و یا پایین کش (PullDown) مطابق با برنامه خود استفاده کنید در غیر این صورت میکرو دچار مشکل خواهد می شود.
مناسب ترین مقاومت ها برای PullDown و یا Pull Up کردن کلیدها،مقاومت های 3.3 کیلواهم تا 10 کیلواهم می باشند.
نکته:بر روی برد آموزشی از مقاومت هایPullup استفاده نشده و باید از Pullup داخلی استفاده کنید.
انتظار برای بیتBITWAIT
شکل کلی دستور:
BITWAIT Pinx.y,Set/Reset
Px.y:X نام پورت و Y نام پایه ای از پورت است که به عنوان ورودی تعریف شده است.
این دستور تا زمانی که پین مورد نظر به دلخواه SET یا Reset نشود، برنامه را در همان خط متوقف می کند.
استفاده از عملگرها و توابع در برنامه نویسی
نرم افزار بسکام این امکان را فراهم کرده که بتوان در برنامه نویسی از عملگرها و توابع ریاضی مانند جمع، ضرب، سینوس، کسینوس و…و یا توابعی آماده غیر از توابع ریاضی استفاده کرد.در جداول زیر لیست تمام عملگرها و یک سری از توابع ریاضی آورده شده است.
نکات:
• نوع متغیرهای Var و X باید از نوع Single باشد.
• تمامی توابع مثلثاتی بر حسب رادیان هستند.
فصل سوم:
پورت سریال
برنامه نویسی BASIC – پورت سریال UART
ارتباطی سریال و قابل برنامه ریزی که در دو حالت نرم افزاری و سخت افزاری قابل تغییر است. این ارتباط بیشتر برای ارتباط با کامپیوتر طراحی شده اما منطق کار این ارتباط TTL است.
نکته : سطح ولتاژ در منطق TTL بین 0 تا 5 ولت بوده و در پروتکل RS-232 بین منفی 15 تا مثبت 15 ولت می باشد.
نکته : پایه های مورد استفاده در این ارتباط در میکروکنترلر AVR به نام TXD و RXD می باشد. در صورت استفاده از UART نرم افزاری, این پایه ها را می توان تغییر داد.
ارتباط بین میکرو کنترلر و استاندارد RS232
در صورت استفاده از ارتباط سریال uart بین میکرو کنترلر و استانداد RS232 باید از تراشه های تبدیل سطح ولتاژ استفاده کرد.
تراشه MAX232 و MAX233 : این تراشه ها برای انتقال اطلاعات بین استاندارد RS232 (کامپیوتر) و میکرو کنترلر AVR به کار می رود. لازم به ذکر است تنها تفاوت بین این دو نوع تراشه در این می باشد که برای راه اندازی تراشه MAX232 شما احتیاج به استفاده از چندین خازن دارید, اما در تراشه MAX233 احتیاج به استفاده از هیچ خازنی ندارید.
تراشه MAX235 : این تراشه برای میکروکنترلرهایی قابل استفاده هستند که دارای دو UART بوده با اینکه هم از UART سخت افزاری و هم نرم افزاری استفاده شده است.
نحوه اتصال کامپیوتر از طریق پورت سریال توسط آی سی MAX232 به میکروکنترلر
نحوه اتصال کامپیوتر از طریق پورت سریال توسط آی سی MAX233 به میکروکنترلر:
نحوه اتصال کامپیوتر از طریق پورت سریال توسط آی سی MAX235 به میکروکنترلر:
UART سخت افزاری
در این حالت از پایه هایی استفاده می شود که در کاتالوگ میکروکنترلرها با نام RXD و TXD است. قبل از پیکر بندی و معرفی این ارتباط سریال باید سرعت و نرخ ارسال دیتا بین میکروکنترلر و هر سیستم دیگری برابر باشد تا دیتاهای صحیح بین آنها تبادل شود. به این نرخ باود (Baud) گفته می شود که تعیین کننده سرعت بین دو سیستم است. نرخ باود همیشه تقسیمی از فرکانس میکرو تنظیم شود چون باعث کاهش خطای میکرو می شود.
تعیین نرخ باود
$ baud = x
در اول برنامه باید این نرخ تعیین شود.
X: مقادیر استاندارد مانند: 1200-2400-4800-9600-19200-28800-38400-57600-115200
تعیین نرخ باود دوم
$baud1=x
در میکروهایی که دارای دو ارتباط سریال Uart هستند برای تعیین نرخ باود دوم استفاده می شود.
تغییر نرخ باود در برنامه
Baud = x
Baud1 = x
در صورتی که بخواهید با یک Uart میکرو با سیستم های مختلف ارتباط برقرار کنید و هر سیستم سرعت خاص خود را داشته باشد این دستورات کاربرد دارند. این دستورات برای دو Uart در هر جای برنامه سرعت نرخ را تغییر دهید.
نکته : سرعت Baud سیستم دریافت کننده و ارسال کننده باید برابر باشد.
پیکر بندی بافر Uart سخت افزاری برای ارسال دیتا
Config Serialout = Buffered , Size = x
این دستور در حقیقت یک فضا به میزان x بایت در حافظه Sram اشغال می کند تا داده های ارسالی از طریق این بافر به خروجی ارسال شود.
نکته : در صورت استفاده از Terminal Emulator می توان داده های ارسالی از میکرو را مشاهده کنید.
دستور ارسال دیتا به پورت سریال
Print var
Print "www.electronics98.com"
Print var ; "الکترونیک 98″
با این دستور شما می توانید به پورت سریال داده رشته یا عددی و یا هر دو را انتقال دهید.
:: دستور ارسال دیتا به پورت سریال به صورت باینری
Printbin var
این دستور متغیر var را به صورت باینری به پورت سریال ارسال می کند.
پیکر بندی بافر Uart سخت افزاری برای دریافت دیتا
Config Serialin = Buffered , Size = x
این دستور در حقیقت یک فضا به میزان x بایت در حافظه Sram اشغال می کند تا داده های دریافتی از طریق این بافر به میکرو وارد می شود.
دستور دریافت دیتا از پورت سریال
Var = waitkey()
با این دستور شما می توانید از پورت سریال داده رشته یا عددی دریافت کنید و در متغیر var قرار می دهد. اما این دستور تا کارکتری را دریافت نکند برنامه را متوقف می کند.
:: دریافت داده از پورت سریال
Var = inkey()
این دستور برنامه را متوقف نمی کند و اولین کارکتر دریافت شده از پورت سریال را به کد اسکی تبدیل کرده و در متغیر var می ریزد. در صورتی که داده ای برای دریافت وجود نداشته باشد عدد صفر را در var قرار می دهد.
نکته : متغیر var نمی تواند Bit و یا String باشد.
دریافت داده از terminal emulator
Input [ "data" ] , var [ noecho ]
با این دستور می توان از طریق کیبرد متصل به کامپیوتر و وارد کردن داده در نرم افزار Bascom و در صفحه Terminal Emulator مقادیر داده را دریافت و در متغیر var قرار داد.
Noecho : در صورت وجود این گزینه با تایپ کردن در محیط Terminal Emulator مقادیر نمایش داده نخواهد شد.
Data : متنی که می توانید قبل از دریافت داده در محیط Terminal Emulator نمایش دهید.
"Input pass"لطفا رمز ورود خود را وارد نمائید :
دریافت داده باینری از Terminal Emulator
Inputbin [ "data" ] , var [ noecho ]
با این دستور می توان از طریق کیبرد متصل به کامپیوتر و وارد کردن داده در نرم افزار Bascom و در صفحه Terminal Emulator مقادیر داده را دریافت و در متغیر var قرار داد.
Noecho : در صورت وجود این گزینه با تایپ کردن در محیط Terminal Emulator مقادیر نمایش داده نخواهد شد.
Data : متنی که می توانید قبل از دریافت داده در محیط Terminal Emulator نمایش دهید.
دریافت داده هگزاد سیمال از Terminal Emulator
Inputhex [ "data" ] , var [ noecho ]
با این دستور می توان از طریق کیبرد متصل به کامپیوتر و وارد کردن داده در نرم افزار Bascom و در صفحه Terminal Emulator مقادیر داده را دریافت و در متغیر var قرار داد.
:Noecho در صورت وجود این گزینه با تایپ کردن در محیط Terminal Emulator مقادیر نمایش داده نخواهد شد.
:Data متنی که می توانید قبل از دریافت داده در محیط Terminal Emulator نمایش دهید.
نکته : هر بایت مشخص کننده یک کارکتر است. پس زمانی که شما یک متغیر از نوع Byte را می خواهید ارسال یا دریافت کنید سیستم به تعداد کارکترها منتظر می ماند. برای مثال اگر از دستور input استفاده کرده اید و متغیر شما از نوع Integer می باشد در محیط Terminal Emulator تا دو کارکتر را تایپ نکنید داده ها ارسال و در میکرو دریافت نمی شوند.
$regfile = "m88def.dat"
$crystal = 8000000
$baud = 19200
Dim akey as byte
Print "hello , hit any alphanumerical key…"
$regfile = "m88def.dat"
$crystal = 8000000
$baud = 19200
Dim akey as byte
Print "hello , hit any alphanumerical key…"
key = waitkey()
Print akey
Akey = waitkey()
Print akey
Wait 1
Print "but not the key you pressed."
Dim inputstring as string * 12
Do
Akey = inkey()
Koop
End
برخی ازارتباطات سریال:
در بعضی موارد از انتقال داده موازی نمی توان استفاده کرد، در این حالت از انتقال سریال استفاده می کنیم. مفهوم انتقال سریال همان مفهوم ساده ای است که شما در درس مدارهای منطقی دیده اید.
روشهای انتقال سریال متعددی وجود دارد، که غالب آن ها در AVR پیاده سازی شده است. مشکل غالب ما در استفاده از ارتباط سریال، قبل از پیاده سازی آن ها روی AVR انتخاب روش است. برای مثال از USB,CAN Bus,TWI(I2C),SPI,RS485,RS232 کدامیک را استفاده کنیم.
در ابتدا می خواهم نگاهی کلی به این روش ها داشته باشم. توجه داشته باشید، اینها پروتکلهای ارتباطی نیستند، بلکه بیشتر مشخصات فیزیکی و الکتریکی را مشخص می کنند.
:RS232 برای فواصل طولانی در حدود چند 100 متر قابل استفاده است. یک روش اتصال دو دستگاه به شکل زیر است. همانطور که می بینید، خط TxD دستگاه 1 به خط RxD دستگاه 2 وصل می شود و بر عکس خط TxD دستگاه 2 به خط RxD دستگاه 1 متصل می گردد و زمینها به هم وصل می شوند.
لذا RS23 به صورت باس قابل استفاده نیست. یعنی نمی توان بیش از دو دستگاه را بصورت دو طرفه وصل کرد، چرا که دو خروجی TxD را نمی توان به هم متصل کرد، چون خروجی مبدل RS232 بصورت کلکتور باز یا درین باز نیست.
پس هر پورت RS232 برای اتصال فقط به یک پورت RS232 دیگراست. واضح است که یک TxD را می توان به چندین RxD متصل کرد، در این صورت اطلاعات یک طرفه است.
* در صورتی که دستگاهها را بصورت زنجیری یا پشت سرهم Daisy Chain وصل کنید، می توان چندین دستگاه را به هم متصل کرد. در این روش داده بین تمام دستگاهها دست به دست می شود، تا به مقصد برسد و اگر یک دستگاه خراب شود، ارتباط کل دستگاهها خراب می شود. در اینجا TXD فرمانده Master را به RXD فرمانبر1 Slave1 می دهید و TXD فرمانبر1 را به RXD فرمانبر2 و TXD فرمانبر2 را به … تا به آخرین فرمانبر می رسید، حال خروجی TXD فرمانبر آخری را به RXD فرمانده وصل می کنید. در واقع یک رینگ تشکیل می دهید. این روش توصیه نمی شود، مگر مجبور باشید.
از نظر سطوح ولتاژی برای 0 و 1 توجه داشته باشید، که مشابه TTL نیست، بلکه همانطور که در شکل زیر می بینید، منطق 0 متناظر ولتاژ 3 تا 15 ولت و منطق1 متناظر با ولتاژ 3- تا 15- است. لذا یک AVR را نمی توان مستقیماً به یک وسیله مانند کامپیوتر که دارای پورت سریال RS232 است، وصل کرد. برای تبدیل سطوح TTL به RS232 از آی سی MAX232 استفاده می شود.
RS485 : RS485 نیز برای ارسال فواصل طولانی استفاده می شود، به دلیل ارسال داده ها به صورت دیفرانسیلی فاصله از RS232 بیشتر است. از طرف دیگر تجهیزاتی که دارای پورت RS485 هستند، به صورت باس مطابق شکل زیر به هم متصل می شوند. در کل RS485 تمام کارآیی های RS232 را دارد و فقط در برنامه نویسی باید دقت بیشتری کرد و یک پایه میکروکنترلر را برای کنترل جهت انتقال داده باید استفاده کنید. برای تبدیل سطوح TTL به RS485 از MAX485 استفاده می کنند. دستگاههای صنعتی غالباً به جای پورت RS232 پورت RS485 دارند.
برای درک عملکرد RS485 بهتر است ابتدا با مبدل MAX485 آشنا شوید.
آشنایی با پایه ها :
Receiver Output – RO خروجی گیرنده : این پایه به پایه RxD میکروکنترلر برای دریافت داده متصل می شود. اگر A>B به اندازه 200mV باشد، این پایه 1 می شود و اگر A<B به اندازه 200mV باشد، این پایه 0 می شود.
Driver Input – DIورودی درایور : این پایه به پایه TxD میکروکنترلر برای ارسال داده متصل می شود. اگر به این پایه 1 داده شود، خروجی A یا Y بالا و خروجی B یا Z مقدار پایین را میگیرد و اگر 0 بدهیم، برعکس. همانطور که می بینید، داده ها به صورت دیفرانسیلی روی خروجی های A و B قرار می گیرند. حدود ولتاژ خروجی درایور ( ارسال ) و حساسیت درایور ( دریافت ) در شکل زیر آمده است.
Receiver Output Enable – RE فعال ساز خروجی گیرنده : برای دریافت داده باید این پایه را 0 کنیم. اگر این پایه 1 باشد خروجی RO به حالت شناور یا امپدانس بالا (High Impedance) می رود.
Driver Output Enable – DE فعال ساز خروجی درایور : با 1 کردن این پایه خروجی های A و B فعال می شوند و داده روی ورودی DI روی خروجی های A و B برای ارسال قرار می گیرد. اگر این پایه غیر فعال یعنی 0 باشد، خروجی های A و B به حالت شناور می روند.
حالت فعال پایه های کنترلی RE و DE برعکس هم هستند، شما می توانید دو پایه را به هم وصل و به یکی از پایه های میکروکنترلر متصل کنید. برای حالت دریافت این پایه مشترک را 0 و برای ارسال این پایه را 1 کنید.
مطابق شکل زیر شما میتوانید دهها دستگاه با خروجی RS485 را به هم به کمک یک زوج سیم متصل کنید.
چند نکته در مورد USART :
* واحد سریال بطور سنکرون و آسنکرون برنامه ریزی می شود. پورت RS232 کامپیوتر فقط بصورت آسنکرون است.
* در روش سرکشی برای ارسال داده جدید از بیت UDRE به جای TXC استفاده کنید، این بیت پس از RESET میکروکنترلر 1 است و مبین اینست که بافر ارسال UDR میکروکنترلر آماده دریافت داده جدید است.
* خطای FE فقط در حالت آسنکرون رخ می دهد.
* در موقع دریافت همواره قبل از خواندن UDR رجیستر UCSRA را بخوانید. چون خواندن رجیستر UDR باعث پاک شدن خطاها به طور خودکار می شود، و شما خطاهای احتمالی که ممکن است رخ داده باشد، را پاک می کنید.
* برای ارسال داده سعی کنید از اطلاعات درس شبکه خود استفاده کنید. داده ها را حتماً به صورت یک فریم ارسال کنید. در زیر چند فریم نمونه آمده است. فرمت PROFIBUS در کارخانجات و صنایع استفاده می شود.
* داده ها را با فرمت ASCII بفرستید، تا مشابه بقیه قسمتها نباشد.
* FCS که عبارت چک کردن فریم است، معادل متمم 2 جمع تمام داده ها با حذف کری است .
PROFIBUS
رابط SPI
یکی دیگر از روشهای انتقال سریال واسط SPI است. این واسط سریال سنکرون است و برای فواصل کم در حد چند متر با سرعت بالا استفاده می شود. به صورت دو طرفه است. به صورت Master/Slave عمل می کند. تمام کنترل ها توسط Master انجام می شود.
شکل زیر روش انتقال داده را نشان می دهد. دو رجیستر انتقال داده به صورت زنجیری به هم متصل هستند، در زمانیکه داده، بیت به بیت از Master به Slave منتقل می شود، همزمان داده Slave نیز به Master منتقل می گردد. همانطور که می بینید، پالس کلاک توسط Master ایجاد می شود. برای تبادل داده باید پایه SS=Slave Select دستگاه Slave فعال یعنی 0 شود. از این پایه برای انتخاب دستگاه Slave در حالتیکه چندین Slave داریم، استفاده می شود.
در صورتیکه چندین Slave داشته باشید، به کمک پایه های دیگر میکروکنترلر مستقیماً و یا با استفاده از یک دیکدر می توانید Slave ها را انتخاب کنید.
همانطور که متوجه شده اید، انتخاب Slave ها به صورت سخت افزاری انجام می شود، پس در اضافه کردن دستگاه یا برد جدید، شما محدودیت دارید. در صورتیکه علاقه به استفاده از SPI دارید، بهتر است ، گسترش سیستم را از ابتدا در نظر داشته باشید و چند خروجی انتخاب فرمانبر Slave Select اضافه درنظربگیرید.البته Master و چندین Slave را به صورت زنجیری نیز می توان به هم متصل کرد، که توصیه نمی شود.
واسط سریال TWI یا I2C
این واسط برای فواص کم در حد چند متر و سرعت بالا استفاده می شود.همانطور که از نام آن پیداست، یک واسط دو سیم است. انتخاب دستگاه با آدرس دادن به صورت نرم افزاری انجام می شود و تا 128 دستگاه را می توان به هم متصل کرد.
اضافه کردن دستگاه جدی به سادگی انجام می شود. کافیست دو سیم SDA و SCL را به دستگاه جدید اضافه کنید یا به زبان ساده باس انتقال را بدوانید.
شکل زیر سیگنال های TWI و باس انتقال را نشان می دهد. حتماً تا به حال متوجه شده اید، هر گاه خروجی یک سیگنال مطابق شکل زیر به صورت درین باز (Open Drain) باشد، آنرا به باس می توان متصل کرد. در TWI هر کدام از دستگاهها می توانند، تصمیم به انتقال داده بگیرند و کلاک توسط خودشان ایجاد می شود. روش انتقال بین دستگاه ها به صورت Master/Slave و یا روش مرسوم در شبکه CSMA/CD باشد. در این روش باید در برنامه نویسی تجربه بیشتری داشته باشید.
مقایسه واسط های سریال :
در مورد RS232 با پایین آوردن سرعت انتقال، برای فواصل بیشتر قابل استفاده است.
در مورد سرعتهای TWI و SPI محدودیت شما بیشتر به سرعت AVR مربوط می شود.
فصل چهارم:
برنامه متلب وبیسیک جهت تشخیص رنگ وانتقال آن به میکرو و نمایش در ال سی دی
برنامه استفاده شده در میکرو:
$regfile = "m32def.dat"
$crystal = 8000000
Config Lcdpin = Pin , Db4 = Portb.3 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.2 , Rs = Portb.0
Dim B As Byte
Dim X As Byte
X = 0
Config Lcd = 16 * 2
Config Porta = Output
$baud = 9600
Dim A As Byte
Locate 1 , 1 : Lcd "Hello meysam"
Waitms 900
Cls
Do
Dim F As String * 40
F = Waitkey()
F = String(1 , F)
X = X + 1
Locate 1 , X : Lcd F
Waitms 150
Loop
برنامه استفاده شده در متلب:
clc
clear all
close all
p=serial('com24');
fopen(p)
a = imread('d:sher2.jpg');
imshow(a)
a1=a(:,:,1);
r=a1(100:143,100:143);
a2=a(:,:,2);
g=a2(100:143,100:140);
a3=a(:,:,3);
b=a3(100:143,100:143);
r1=mean(r(:));
g1=mean(g(:));
b1=mean(b(:));
if g1>r1
disp('green')
fprintf(p,'c')
end
if r1>g1+50
disp('red')
fprintf(p,'b')
elseif r1>g1
disp('yellow')
fprintf(p,'a');
end
fclose(p)
delete(p)
clear p
فصل پنجم:
جمع بندی کلی
توضیح کلی در مورد فواید پردازش تصویر و مدار:
این مدار طراحی شده که شکل کلی آن موجود می باشد برای پردازش تصویر در متلب و انتقال اطلاعات آن به میکرو می باشد.
کنترل ماشین آلات و تجهیزات صنعتی یکی از وظایف مهم در فرآیندهای تولیدی است. بکارگیری کنترل خودکار و اتوماسیون روزبه روز گسترده تر شده و رویکردهای جدید با بهره گیری از تکنولوژی های نو امکان رقابت در تولید را فراهم می سازد. لازمه افزایش کیفیت و کمیت یک محصول ، استفاده از ماشین آلات پیشرفته و اتوماتیک می باشد . ماشین آلاتی که بیشتر مراحل کاری آنها به طور خودکار صورت گرفته و اتکای آن به عوامل انسانی کمتر باشد.
امروزه استفاده از تکنولوژی ماشین بینایی و تکنیک های پردازش تصویر کاربرد گسترده ای در صنعت پیدا کرده است و کاربرد آن بویژه در کنترل کیفیت محصولات تولیدی، هدایت روبات و مکانیزم های خود هدایت شونده روز به روز گسترده تر می شود. عدم اطلاع کافی مهندسین از تکنولوژی ماشین بینایی و عدم آشنایی با توجیه اقتصادی بکارگیری آن موجب شده است که در استفاده از این تکنولوژی تردید و در بعضی مواقع واکنش منفی وجود داشته باشد. علی رغم این موضوع، ماشین بینایی روز به روز کاربرد بیشتری پیدا کرده و روند رشد آن چشمگیر بوده است.
پیشنهادات:
مدار فوق کاربردهای زیادی دارند، ازجمله آنها می توان به موارد زیر اشاره کرد:
1 کاربردها :
صنعتی: بازرسی و کنترل کیفیت، اندازه گیری، هدایت ربات، کنترل فرآیند، شناسایی قطعات، بارکدینگ، بازشناسی حروف و علائم، بازشناسی و تایید فرم ها
پزشکی: تشخیص پزشکی، اشکارسازی و تشخیص خودکار تومورها، تحلیل تصاویر متحرک پزشکی، بازسازی سه بعدی اندام ها، استخراج اطلاعات کارکردی اندام ها، سیستم های آرشیو و مخابره تصاویر پزشکی
نظامی و امنیتی: شناسایی اهداف، هدایت و کنترل هوشمند، ردیابی اهداف در تصاویر متحرک، وسائط نقلیه ی بدون سرنشین، پردازش تصاویر ماهواره ای نظامی، چهره شناسی، اثر انگشت و امضاء بیومتری
کشاورزی: کنترل کیفیت و دسته بندی محصولات کشاورزی، دارویی و …
ارتباطات: انتقال تصاویر(با تکیه بر شبکه های اطلاع رسانی جهانی)، مکالمه تصویری، استاندارد مخابره اطلاعات تصویری
ترافیک: مانیتورینگ، کنترل هوشمند و …
نقشه برداری: پردازش تصاویر ماهواره ای و هوایی (تفکیک نواحی، استخراج اطلاعات، نقشه بردازی)، ادغام اطلاعات تصویری ماهواره ای، تصویربرداری چندطیفی، سیستم های تصویربرداری ماهواره ای و هوایی.
منابع:
کتاب پردازش تصاویر دیجیتال رافائل سی. گونزالز
مرجع میکروکنترلر های AVR / مهندس پرتوهی فر
میکرو کنترولرهایAVR /ره افروز
میکرو کنترولرهایAVR / علی کاهه
www.electronics98.com
با تشکر فراوان از استاد محترم آقای
آیت اکبری
که با رهنمایی خود مرا یاری کردند.
9