آموزش میکروکنترلر AVR
در قسمت چهارم آموزش میکروکنترلر AVR برنامهی سادهای را بهوسیله ی کامپایلرهای کدویژن و بسکام موردبررسی قرار دادیم، در این قسمت میخواهیم باتوجهبه شکلزیر یک دیدکلی نسبتبه سختافزار AVR پیداکنیم.
باتوجهبه شکلبالا، CPU تحتفرمان کلاک که ممکناست از منبع اسیلاتورداخلی یا خارجی تامینشود، خطوط برنامه را از حافظه FLASH که توسط دستگاه پروگرامر ذخیرهشدهاست، خطبهخط اجرا میکند.
اگر درحین اجرای برنامه دیتایی ایجادشود در حافظه SRAM داخلی ذخیره میشود، البته دربرخیاز شمارههای AVR امکان اتصال SRAM خارجی نیز وجود دارد.
اطلاعاتی که نیاز است در میکروکنترلر ذخیرهشوند و با قطعبرق پاکنشوند در حافظه EEPROM ذخیره میشود.
تایمر:
شمارندههایی در کنار میکروکنترلر هست که تحتعنوان TIMER COUNTERها از آنها یاد میشود. تایمرها این امکان را دارند که شمارش خودشان را ازطریق کلاک داخلی سیستم یا تقسیمشدههای آن و یا کلاکی که از بیرون به میکروکنترلر اعمال میشود انجامدهند، که در حالتدوم به آنها COUNTER یا EVEN COUNTER نیز گفته میشود.
سپردن عملیات زمانسنجی و زمانگیری به تایمرها بار پردازشی CPU را کاهش میدهد، بدیننحو که شمارندهای توسط خطوط برنامه منبع کلاک را مشخص میکند و شمارنده راهاندازی میشود، سپس بعداز رسیدن شمارنده به مقدار موردنظر این امکان برای CPU وجود دارد که از گذشتزمان اطلاع پیداکند و برحسب نوع برنامهی نوشتهشده عملیاتلازم را انجامدهد. اگر شمارنده درحال شمارش باشد، CPU به چندروش میتواند از گذشت زمان مطلع شود:
روش اول:
روش اولی که CPU ممکناست از گذشتزمان مطلعشود این است که مقادیر تایمر را مرتباً بخواند و هرموقع به این مقدار رسید عملیات موردنظر را اجراکند که به این امر polling یا سرزدن گفته میشود.
روش دوم:
روش دوم این است که بعداز رسیدن تایمر به مقدارمشخصی که درفضای SRAM به TIMER اختصاصیافتهاست، بیتهای مشخصی یک میشوند، باز CPU به دوطریق میتواند از این یک شدن اطلاعپیداکند؛
- توسط خطوط برنامه این بیتها را بررسیکند و درصورت یکشدن آنها مطلع شود و از زمان سپریشده اطلاع پیداکند.
- برمبنای وقفه یا 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 با کدویژن و بسکام را موردبررسی قرار میدهیم. با ما همراه باشید.
منبع:سیسوگ