آموزش میکروکنترلر AVR – قسمت پنجم ;
این سری آموزش ها که به جرات می توان آنها را کاملترین آموزشهای موجود دانست با صرف هزینه زیاد و با کیفیت و جزییات بالا توسط استاد ارجمند جناب آقای کینژاد تهیه شده است و به صورت رایگان در اختیار عموم قرار گرفته است.
سیسوگ در قسمت چهارم آموزش میکروکنترلر AVR برنامه ی ساده ای را به وسیله ی کامپایلرهای کدویژن و بسکام مورد بررسی قرار داد،در این قسمت میخواهیم با توجه به شکل زیر یک دید کلی نسبت به سخت افزار AVR پیدا کنیم.
با توجه به شکل بالا ، CPU تحت فرمان کلاک که ممکن است از منبع اسیلاتور داخلی یا خارجی تامین شود، خطوط برنامه را از حافظه FLASH که توسط دستگاه پروگرامر ذخیره شده است، خط به خط اجرا میکند .
اگر در حین اجرای برنامه دیتایی ایجاد شود در حافظه SRAM داخلی ذخیره میشود، البته در برخی از شماره های AVR امکان اتصال SRAM خارجی نیز وجود دارد.
اطلاعاتی که نیاز است در میکروکنترلر ذخیره شوند و با قطع برق پاک نشوند در حافظه EEPROM ذخیره می شود.
تایمر:
شمارنده هایی در کنار میکروکنترلر هست که تحت عنوان TIMER COUNTER ها از آنها یاد می شود. تایمرها این امکان را دارند که شمارش خودشان را از طریق کلاک داخلی سیستم یا تقسیم شده های آن و یا کلاکی که از بیرون به میکروکنترلر اعمال میشود انجام دهند، که در حالت دوم به آنها COUNTER یا EVEN COUNTER نیز گفته می شود.
سپردن عملیات زمان سنجی و زمان گیری به تایمرها بار پردازشی CPU را کاهش می دهد، بدین نحو که شمارندهای توسط خطوط برنامه منبع کلاک را مشخص می کند و شمارنده راه اندازی می شود، سپس بعد از رسیدن شمارنده به مقدار مورد نظر این امکان برای CPU وجود دارد که از گذشت زمان اطلاع پیدا کند و برحسب نوع برنامه نوشته شده عملیات لازم را انجام دهد. اگر شمارنده در حال شمارش باشد، CPU به چند روش میتواند از گذشت زمان مطلع شود:
روش اول:
روش اولی که CPU ممکن است از گذشت زمان مطلع شود این است که مقادیر تایمر را مرتباً بخواند و هرموقع به این مقدار رسید عملیات مورد نظر را اجرا کند که به این امر polling یا سر زدن گفته میشود.
روش دوم:
روش دوم این است که بعد از رسیدن تایمر به مقدار مشخصی که در فضای SRAM به TIMER اختصاص یافته است، بیت های مشخصی یک می شوند، باز CPU به دو طریق میتواند از این یک شدن اطلاع پیدا کند;
1. توسط خطوط برنامه این بیت ها را بررسی کند و در صورت یک شدن آنها مطلع شود و از زمان سپری شده اطلاع پیدا کند.
2. بر مبنای وقفه یا interrupt میباشد که در صورت ایجاد تنظیمات خاصی که مجوز ایجاد وقفه را فراهم میکند به محض یک شدن آن بیت، روند اجرای برنامه در حافظه فلش متوقف میشود و cpu برنامه را به جای خطوط بعدی در فلش طبق روال عادی از آدرس مشخصی اجرا میکند.
در ادامه به این بحث میپردازیم که timer تنها منبع ایجاد وقفه در میکروکنترلر نیست و منابع دیگری نیز وجود دارد.
در حافظه فلش، برنامه به ترتیب خطوط در حال اجرا میباشد،اگرمجوز وقفه توسط خطوط نرم افزار صادر شده باشد، وقفه پذیرفته میشود. پذیرفته شدن وقفه توسط cpu به معنی این است که اگر برنامه در حال اجرا باشد، وقتی وقفه فعال میشود به جای اینکه خط بعدی برنامه اجرا شود، پرشی در حافظه فلش ایجاد میشود و به آدرس مشخصی میرود و برنامه از آن آدرس مشخص اجرا میشود.
بحث وقفه در مقابل بحث polling قرار میگیرد که cpu دائما مراجعه میکند و آن تغییراتی که مد نظرش هست را ایجاد میکند. اشکال روش polling در این است که وقت cpu اشغال میشود.
در بخش های مختلف سختافزار که امکان ایجاد وقفه وجود دارد یکبار تنظیمات وقفه انجام میشود و دیگر باری بر دوش cpu نیست و سخت افزار کار خودش را انجام میدهد و بعد از ایجاد وقفه، وقفه ایجاد میشود و در این مرحله است که cpu به وقفه توجه میکند و با انجام اقدامات لازم عملیات وقفه به ترتیب اجرای برنامه اجرا میشود. وظیفه اداره این بحث بر عهده بلوک interrupt controller میباشد.
ارتباط سریال:
در AVR سه روش ارتباط سریال وجود دارد که توسط بلوکهای SPI ,TWI ,USART انجام میشود. به صورت خلاصه این سه روش سه پروتکل ارتباط سریال هستند که چیپ های جانبی، سنسور ها و انچه که در بیرون از مجموعه AVR قرار دارد و ممکن است نیاز باشد با AVR ارتباط برقرار کند، از طریق این سه پروتکل انجام میگیرد. در این سه بلوک نیز بحث وقفه صدق میکند، برای مثال اگر در USART بایتی دریافت شود و مجوزهای لازم توسط نرم افزار صادر شده باشد وقفه درخواست میشود و CPU اطلاع حاصل پیدا میکند که بابتی توسط USART دریافت شده است. بنابراین برنامه لازم که توسط برنامه نویس نوشته شده است اجرا میشود و روی آن بایت به طریقی که لازم است عملیات انجام میشود.
بلوک ADC :
بلوک بعدی بلوک ADC نام دارد که مخفف ANALOG TO DIGITAL CONVERTER میباشد که A TO D نیز به آن گفته میشود. یک بلوک مبدل آنالوگ به دیجیتال میباشد. دقت ADC در خانواده AVR ، ده بیتی میباشد. از طریق این واحد سیگنالهای واقعی که از منابع واقعی تولید میشوند (به این معنی که سیگنال هایی که در طبیعت وجود دارند به صورت آنالوگ میباشند) قابلیت وصل به AVR و قرائت توسط CPU را پیدا میکنند.
بلوک AC:
واحد دیگر AC ،که مقایسه کننده آنالوگ میباشد که در واقع مقدار ورودی آنالوگ را با مقدار مشخص مقایسه میکند و CPU میتواند از وضعیت مقایسه این مقدار آنالوگ اطلاع پیدا کند. حال این سوال مطرح میشود که وقتی ADC هست چه نیازی به AC میباشد؟ جواب در بحث سرعت است که AC از لحاظ سرعت بسیار قوی تر از ADC میباشد.
بلوک GPIO:
بلوک بعدی بلوک GPIO میباشد که به معنی ورودی و خروجی های عمومی است، به عبارتی ارتباطی که پین های ورودی و خروجی میتوانند با دنیای خارج برقرار کنند که نمونه آن برنامه ای است که در جلسه قبل برای HIGH کردن یک پین نوشته شد.
بلوک JTAG:
بلوک بعدی JTAG میباشد که به منظور خطایابی، یا اصطلاحاً DEBOGING ،یا منظور ارتباط پروگرامر و اطلاع از وضعیت سخت افزاری میکروکنترلر میباشد. پروگرامرهای خاصی وجود دارند که از طریق JTAG امکان ارتباط با AVR را دارند. حسن بزرگ JTAG در این است که از طریق پروگرامر مجهز به JTAG در روند اجرای برنامه میتوان از یک سری مقادیر CPU اطلاع پیدا کرد.
بلوک WATCH DOG TIMER :
بلوک بعدی WATCH DOG TIMER میباشد که به آن تایمر سگ نگهبان نیز گفته میشود. این واحد به منظور تشخیص صحت عملکرد CPU میباشد. به این معنی که اگر در فواصل زمانی مشخصی توسط CPU،تریگری به WATCH DOG TIMER اعمال شود، متوجه میشود که CPU در حال انجام وظایف خود میباشد حال اگر این اتفاق نیفتد این واحد میتواند یک ریستی را انجام دهد.
این برای شرایطی است که اگر یک حالت هنگ کردنی برای میکروکنترلر اتفاق بیفتد توسط بلوک تایمر سگ نگهبان بتواند از این حالت خارج شود. حال اگر در عمل آنقدر در محیط نویز زیاد باشد که خود این بلوک از کار بیفتد ممکن خیلی مفید نباشد و بعد این بحث پیش میاید که چطور میشود از AVR در محیط های پر نویز و صنعتی استفاده کرد؟ و جواب این است که از AVR نمیشود در محیط های صنعتی و پرنویز استفاده کرد و این ناشی از عدم توجه استفاده کنندگان از معذوراتی است که در استفاده از میکروکنترلر باید در نظر گرفت.
بخش های دیگری نیز وجود دارند مثل BROWN OUT DETECTION که اگر تغذیه میکروکنترلر از حدی پایین تر بیاد ریست را اجرا میکند و موارد دیگر…
در قسمت ششم آموزش میکروکنترلر AVR پیاده سازی دکودر BCD-7segment با کدویژن و بسکام را مورد بررسی قرار میدهد. با سیسوگ همراه باشید.
بسیارممنون از زحمات همه شما
لینک در قسمت ششم اشتباه است و صفحه مربوط به آموزش قسمت سوم را باز می کند. لطفا اصلاح کنید.
متشکر دوست عزیز
لینک اصلاح شد
سلام
در قسمت jtag املای کلمه DIBOGING اشتباه هست!!
سلام
ممنون از دقت شما… اصلاح شد.