مجید بهره مند 43111 اشتراک گذاری ارسال شده در 30 اردیبهشت، ۱۳۹۳ سلام دوستان دیدم که برای اموزش avrها تاپیک کامل و جامع ای نداریم به خاطر همین تصمیم گرفتم که این تاپیک رو بزنم تا اموزشهای avr جامع و کامل باشه مجید بهره مند قسمت اول:میکروکنترلر چیست؟ میکرو کنترلر ها شاخه ای از میکرو پروسسورها هستند که برای انجام کارهای کنترلی طراحی شده اند بسیاری از سخت افزارهای جانبی مورد نیاز را در درون خود دارا می باشد . جهت گیری امکانات داخلی و حتی زبان اسمبلی یک میکرو کنترلر به سمت کارهای کنترلی است . از جمله این امکانات می توان به ROM,RAM تایمر ، شمارنده های متعد ، پورت سریال قوی ، دستورالعملهای قوی و مناسب برای کنترل و در برخی حتی A/D و.. اشاره کرد . علاوه بر میکرو کنترلر ها ، میکرو پرسسور های خاص دیگری نیز برای انجام مقاصد دیگر طراحی شده است . DSP1 ها شاخه دیگری از میکرو پرسسورها هستند که برای پردازش سیگنال به کار می روند . (سیگنالهای دیجیتال) . در یک جمع بندی کلی می توان گفت که چون هدف از طراح یک میکرو پروسسور ساخت یک تراشه همه منظوره می باشد. بنابراین از گنجاندن امکاناتی در داخل آن که در استفاده ها خاص کاربرد دارند خود داری می شوند . اما اگر یک نوع استفاده از میکرو پروسسور بسیار رایج و وسیع گردد که در آن به طور معمول نیاز به قطعات جانبی معینی باشد.آنگاه منطقی به نظر می رسد که برای این کار برد وسیع میکرو پروسسوری بسازیم که بسیاری از این قطعات جانبی را در خود جای داده باشد . به این ترتیب هم در هزینه صرفه جویی کرده ایم ، هم طرح سخت افزاری و سیستم ها را ساده کرده ایم و هم حجم دستگاه ها را کاهش داده ایم . مدارات مجتمعی مانند میکرو کنترلرها DSP ها بر اساس چینین ایده ای طراحی شده اند . در زمینه میکرو کنترلر ها ، شرکتهای مختنلفی مانند , Intel Microchip ,Motorolla در زمینه طراحی و ساخت آنها کارکرده اند . تصویر به عنوان یک تعریف ابتدایی می توان گفت که میکرو کنترلر کاملا شبیه میکرو پروسسور است اما با امکاناتی بیشتر که برای کارهای صنعتی و کنترلی از آن استفاده می گردد . برخی از بخش های که در میکرو پروسسور وجود دارند عبارتند از: DSP: Digital signal processing 1- C.P.U : که مغز کنترل کننده سیستم است و وظیفه آن اجرای دستورات است . 2- A.L.U که وظیفه آن اجرای تمام عملیات های ریاضی ، منطقی تعریف شده برای سیستم است . 3- رجیسترهای داخلی : منظور آن رجیسترهایی است که به منظور های مختلف داخل تراشه میکرو پروسسور تعبیه شده است . این رجیسترها دو نوع اند : الف – دسته از رجیسترها ی داخلی برای تسهیل د ر عملیات ریاضی و منطقی پیش بینی شده اند و در واقع شبیه چند بایت از RAM عمل می کنند . کارکردن با این رجیسترها از لحاظ آدرس دهی بسیار ساده تر به صرفه تر از RAM است( که باید به صورت خارجی تأمین گردد) می باشد. ب- دسته ای دیگر صرفا اعمال خاصی را انجام می دهند مثل PC که همواره آدرس دستور العمل است که باید از حافظه fetchواجرا گردد . میکرو کنترلرها نیز ساختمانی شبیه به میکرو پروسسور ها دارند . با تفاوتهای که کلیات آنها را در ذیل می گوییم : 1- ROM,RAM : در میکرو پروسسورها این حافظه باید ار خارج تأمین گردند . اما میکرو کنترلرها معمولا مقداری RAM و نیز مقدار قابل توجهی ROM در درون خود دارند . 2- در میکرو کنترلر با توجه به و جود RAM داخلی و مد های آدرس دهی متنوعی که برای دستیابی به بایتهای آن وجود دارد دیگر نیازی به رجیسترهای داخلی نوع الف نیست . 3- در میکرو کنترلر رجیسترهای داخلی نوع (ب) که صرفا اعمال خاصی را انجام می دهند . تحت عنوان رجیسترهای با عملکرد ویژه با SFR می باشند و تعداد آنها بسیار بیشتر از رجیسترهای داخلی یک میکرو پروسسور است . بسیاری از کارهای کنترلی را این رجیسترها انجام می دهند . 4- یک میکرو کنترلر می تواند دستگاه های ورودی و خروجی را آدرس دهی کند و و با آنها اطلاعات مبادله کند . میکرو کنترلر برای ورودی / خروجی از دو امکان استفاده می کند . الف – Memory Mapped I/O : می توان از حافظه به عنوان ورودی / خروجی استفاده کرد . ب- بیشتر پین های میکرو کنترلر دو طرفه هستند و در حین حال برخی از پنیها دارای وظیفه خاصی نیز میباشند . با توجه به مطالب گفته شده تعریف دقیق تری برای میکرو کنترلر ها تعریف می کنیم : میکرو کنترلر ها شاخه ای از میکرو پروسسورها هستند که برای انجام کارهای کنترلی طراحی شده اند و بسیاری از سخت افزار های جانبی مورد نیاز را در درون خود دارا می باشند . منبع پارس میزبان 8 لینک به دیدگاه
مجید بهره مند 43111 مالک اشتراک گذاری ارسال شده در 30 اردیبهشت، ۱۳۹۳ [h=1][/h] قسمت دوم:انواع میکروکنترلرهای AVR انواع میکروکنترلرهای AVR : AVR ها ، میکروکنترلرهای هشت بیتی از نوع CMOS با توان مصرفی پایین هستند که براساس ساختارپیشرفته ی RISC ساخته شده اند. خانواده ی میکروکنترلرهای AVR،تراشه هایی پیشرفته با امکانات جانبی کامل هستند که بطور کلی به سه دسته ی کلی تقسیم می شوند: 1. Tiny AVR ATiny)) 2.Classic AVR AT90S)) 3.Mege AVR ATmega)) تفاوت بین این سه نوع به امکانات موجود در آنها مربوط می شود.Tiny AVR ها غالبا״ تراشه هایی با تعداد پایه و مجموعه دستورات کمتری نسبت به Mega AVR ها می- باشند و به عبارتی از لحاظ پیچیدگی حداقل امکانات را دارند.Mega AVR ها حداکثر امکانات را دارند و Classic AVR ها جایی بین این دو نوع قرار می گیرند.البته ازآنجایی که از بین این سه دسته ی ذکر شده Classic AVR ها،قبل از دو گروه دیگر تولید شده اند،امروزه در طراحی های جدید کمتر از آنها استفاده می شودو عملا״ هریک از آنها باتراشه ای ازگروه Mega AVR یا Tiny AVR جایگزین شده اند. ممکن است در انتهای اسم میکروکنترلر پسوندی هم وجود داشته باشد، مثلا״ Mega16 L.تفاوت تراشه هایی که تنها پسوند اسامی آنها باهم اختلاف دارد،در میزان قابل قبول برای ولتاژ تغذیه و محدوده ی مجاز فرکانسی کریستال مورد استفاده می باشد.پسوندهای L و V را می توان به ترتیب مخفف عبارت های Low Power و Very Llow Power دانست. لازم به ذکر است که اصول کار همه ی میکروکنترلر های AVR یکی است و تفاوت آنها در میزان حافظه ی موجود بر روی تراشه و امکانات جانبی می باشد. 5 لینک به دیدگاه
مجید بهره مند 43111 مالک اشتراک گذاری ارسال شده در 30 اردیبهشت، ۱۳۹۳ قسمت سوم: خصوصیات ATmega16 این پردازنده دارای 131 دستور قدرتمند است که اکثر آنها در یک سیکل ساعت اجرا می شوند. دارای 16K بایت حافظه ی Flash قابل برنامه- ریزی،512 بایت حافظه ی EEPROM داخلی و1K بایت حافظه- ی SRAM داخلی است ،همینطور مجهز به قسمت Boot Loader می- باشد.( Boot Loader قسمتی از حافظه ی Flash است که توسط آن میکرو می تواند خودش را برنامه ریزی کند.) همچنین دارای امکانات جانبی زیر است: -ارتباط JTAG شامل اسکن کردن امکانات جانبی،پشتیبانی از دیباگ کردن تراشه و برنامه ریزی حافظه های Flash , EEPROM. - دو تایمر/کانتر 8 بیتی با تقسیم کننده ی فرکانسی مجزا و دارای مد Compare. - یک تایمر/کانتر 16 بیتی با تقسیم کننده ی فرکانسی مجزا ودارای مدهای capture , compare. - دارای Real-Time Clock) RTC) - چهار کانال PWM - 8 کانال ADC 10 بیتی - ارتباط سریال دو سیمه ((Two Wire - ارتباط سریال SPI به صورت Slave / Master - USART سریال قابل برنامه ریزی - و… . ولتاژ عملیاتی همانطور که پیشتر نیز بیان شد،برای ATmega16 از 2.7 ولت تا 5.5 ولت می باشد.فرکانس کاری نیز از 0 MHz تا 16 MHz باید باشد. 2-2 ا نواع حافظه در میکروکنترلرهای AVR: بطور کلی میکروکنترلرهای AVR سه نوع حافظه ی مختلف دارند: حافظه ی Flash: این حافظه محل قرار گرفتن کدهای برنامه است وبطور کلی به دو قسمت Application و Boot تقسیم می شود.قسمت Application برای برنامه ریزی تراشه،مشابه با میکروکنترلرهای دیگر مورد استفاده قرار می گیرد، و قسمت Boot که یکی از ویژگی های جالب AVR نیز می باشد،امکان برنامه ریزی AVR را بدون نیاز به پروگرامر فراهم می آورد. حافظه ی SRAM : این حافظه به سه قسمت تقسیم می شود.در ابتدای حافظه، 32 رجیستر همه منظوره قرار دارند،در ادامه هم رجیسترهای I / O قرار دارند که امکان کنترل و کار با امکانات جانبی تراشه را فراهم می کنند.بعد از این دو قسمت نیز حافظه ی داده ی داخلی قرار می گیرد. حافظه ی EEPROM: این حافظه قابلیت های ویژه ای را برای میکروکنترلر فراهم می کند.میکروکنترلر می تواند اطلاعاتی را روی این حافظه بنویسد.این اطلاعات با قطع برق یا قطع ولتاژ تغذیه ی میکرو از بین نمی روند و لذا می توانند با راه اندازی مجدد میکرو مورد استفاده قرار گیرند. AVRmega 16 دارای سه نوع بسته بندی است که عبارتند از: PDIP،TQFP و LF M که در میان آنها PDIP از همه ساده تر است و دارای 40 پایه می باشد. بررسی پایه های ATmega16: همانگونه که در شکل می بینیم،ATmega16 در این نوع بسته بندی دارای 40 پایه است که کاربرد هریک از این پایه ها را بررسی می کنیم. Vcc این پایه ولتاژ تغذیه ی میکرو است که باید در میکروکنترلر ATmega16L به ولتاژی در محدوده ی 2.7V تا 5.5V و در ATmega16 به ولتاژی در محدوده ی 4.5V تا 5.5V متصل گردد. GND این پایه به زمین متصل می شود PA0) Port A تا PA7): پورت A می تواند بعنوان ورودی های آنالوگ برای مبدل آنالوگ به دیجیتال استفاده شود.در صورتی که از مبدل آنالوگ به دیجیتال استفاده نگردد،می توان از این پورت بعنوان 8 پایه I / O دو طرفه استفاده کرد.هریک از پایه های پورت می تواند از یک مقاومت Pull-up خارجی استفاده کند.علاوه بر این،این پورت توانایی پذیرش و نیز دادن جریان های بالا را دارد.پایه های این پورت در زمان reset در حالت امپدانس بالا (Tri-state) قرار می گیرد. PB0 )Port B تا PB7)، Port C(PC0تاPC7)وPort D(PD0 تا(PD7 : این پورت ها،پورت هایI / O دو طرفه ی 8 بیتی،با مقاومت های Pull-up داخلی می باشند.بافر خروجی این پورت ها توانایی پذیرش و نیز دادن جریان های بالا را دارد و پایه های آنها در زمان reset در حالت امپدانس بالا قرار می گیرد. RESET یک پایه ی ورودی است که اگر برای حداقلS µ1.5 صفر (منطقی) بشود٬ حتی اگر کلاکی هم به تراشه اعمال نشود،با این وجود میکرو reset می گردد. XTAL1 این پایه ،یک پایه ی ورودی است که به تقویت کننده ی اسیلاتور متصل می شود و به مدار تولید کلاک تراشه نیز وارد می گردد. XTAL2 این پایه،یک پایه ی خروجی است که از تقویت کننده ی اسیلاتور خارج می شود. AVCC این پایه منبع تغذیه ی مربوط به پورت Aو مبدل آنالوگ به دیجیتال می باشد و حتی در صورتی که ازADC استفاده نشود، باید حتما״ به Vcc متصل گردد.اگر ازADC هم استفاده می شود بهتر است این پایه با یک فیلتر پایین گذر بهVcc متصل شود. AREF این پایه ولتاژ مرجع آنالوگ برای مبدل آنالوگ به دیجیتال می باشد. روش های پروگرام کردن میکروکنترلر: بطور کلی برای برنامه ریزی از چهار روش می توانیم استفاده کنیم: 1- روش موازی: در این روش که برای میکروکنترلر های قدیمی تر رایج است،میکرو باید در سوکت پروگرام قرار داده شود،علاوه بر این برای شروع برنامه ریزی، لازم است تا ولتاژ +12V به پایه ی RESETاعمال گردد.این روش (بر خلاف سه روش دیگر)برای تمام انواع خانواده یavr قابل اجراست و سریعترین روش برنامه ریزی نیز به حساب می آید. 2- JTAG: برای میکروکنترلرهایی که حافظه ی Flash در آنها از 16K بایت بیشتر باشد،امکان استفاده از ارتباط برای برنامه ریزی ،دیباگ کردن تراشه و چک کردن امکانات جانبی وجود دارد. 3- خود برنامه ریزی (Self programming): در میکروکنترلر های پیشرفته،قابلیتی بنام Boot Loader به آنها اضافه شده است که میکرو می تواند به کمک این قسمت و توسط هرگونه ارتباط جانبی (TWI, SPI, Parallel و…) به صورت خودکار خودش را برنامه ریزی کند. 4- ISP (In System Programming) که ما از روش اخیر استفاده می کنیم.در این روش میکرو در مدار اصلی خود بصورت مستقیم برنامه ریزی می گردد 6 لینک به دیدگاه
مجید بهره مند 43111 مالک اشتراک گذاری ارسال شده در 30 اردیبهشت، ۱۳۹۳ قسمت چهارم:انواع کامپایلرهای AVR در این قسمت ابتدا با نوع کامپایلرهای مختلف برای میکرو کنترلرهای AVR اشنا می شوید تصویر سپس در ادامه بر روی محیط برنامه ریزی Condvisisonمتمرکز می شویم . پس از توضیح مراحل نصب نرم افزار Condvisison AVR به معرفی محیط های Condvisison می پردازیم . د ر ادامه با ارائه یک مثال ساده دو روش را برای ایجاد یک پروژه جدید بیان می کنیم و در پایان نحوه استفاده از نرم افزار AVR Stydio برای شبیه سازی برنامه را توضیح می دهیم . 2-1 انواع کامپایلر : امروزه کامپایلر های مختلفی برای میکرو کنترلرهای AVR به بازار عرضه شده اند که از جمله مهمترین آنها می توان به کامپایلرهای و به زبان C و C++ و کامپایلرهای به زبان به زبان پاسگال اشاره کرد که از میان آنها کامپایلرهای از اهمیت بیشتری بر خوردارند . کامپایلرهای C : همان طور که می دانید امروزه زبان سطح بالای C هرچه بیشتر برای برنامه نویسی میکرو کنترولرها عمومیت یافته است . مزایای استفاده از C به جای اسمبلی کاهش زمانب رنامه نویسی ، نگهداری ساده تروقابلیت حمل بیشتر استفاده مجدد و ساده ترشدن فهم برنامه است.عیب آن افزایش حجم کدها و در نتیجه کاهش سرعت برنامه می باشد .برای کاهش یا رفع این معایب ساختار AVR به گونه ای طراحی شده تا دستورات تولید شده توسط کامپایلرهای C را به صورت بهینه دیکد و اجرا نماید . طراحی کامپایلر های C قبل از تکمیل ساختلر و مجموعه دستورات AVR صورت گرفته است . نتیجه عملکرد همزمان بین تیمهای کامپایلرو AVR میکرو کنترلرهای باکد های تولید شده جهت استفاده بهینه کارایی بالا می باشد . علاوه بر این از آنجایی که زبان بر نامه نویسی C در مقایسه با زبانهای سطح بالای دیگر به زبانهای سطح پایین نزدیک بیشتری دارد . مسلما حجم کد های تولید شده از یک برنامه C نسبت به کد های تولید شده از یک زبان سطح بالای دیگر کمتر خواهد بود و لذا زا این لحاظ بر بقیه ارحجیت دارد 5 لینک به دیدگاه
مجید بهره مند 43111 مالک اشتراک گذاری ارسال شده در 30 اردیبهشت، ۱۳۹۳ قسمت پنجم:آشنایی با Condvisison AVR Condvisison AVR یک کامپایلر C با محیط توسعه یافته گرافیکی یک پارچه (IDE) و تولید کننده خود کار کد های برنامه ای است که برای کار با میکرو کنترل های AVR ساخت شرکت Atmel طراحی شده است . این برنامه یک پروگرامر ISP را نیز شامل می گردد که امکان انتقال کد های برنامه به میکرو را بعد از انجام موفق عمل کامپایل فراهم می آورد . ارتباط SPI و I2Cارتباط یک سیمه و کار با سنسورهای دمای EEPROM ,DS1820 ,LM76 های سریال و RTS های سریال به راحتی صورت می پذیرد . ضمنا Condvisison برنامه Codcwizard را نیز شامل می شود . این برنامه به ما امکان می دهد که تا برای تنظیم امکانات مختلف تر از قبیل تایمر ها TWI,SPI,ADC بدون نیاز به نوشتن کد برای آنها به صورت گرافیکی تنظیمات اولیه مورد نیاز را انجام می دهیم که این صورت Condewizard کد های لازم را برای ما تولید می کند و به این ترتیب می توانیم در کمترین زمان ممکن برنامه های خود را بنویسیم . معرفی منوهای محیط Condvisison AVR : Condvisison AVRبرنامه ساده ای است و لذا یاد گیری آن راحت است با هر بار اجرای این نرم افزار آخرین پروژه ای قبلا به کمک این نرم افزار باز شده باشد ظاهر می شود و اگر برای اولین بار راه اندازی شود پنجره خالی خواهد بود . منوی File : New: با انتخاب این گزینه می توانید یک فایل جدید source با پسوند h با یک پروژه جدید ایجاد کنید . Open: با انتخاب این گزینه می توانید یک فایل پروژه و یا souree ذخیره شده در حافظه را باز نمایید . Save : با انتخاب این گزینه آخرین تغییرات اعمالی در فایل ذخیره می شود . Reopen: در صورتی که چند قایل souree یا پروژه را قبلا باز کرده باشد به کمک این گزینه می توانید هریک از آخرین هشت فایل بازشده را مجددا باز نمایید . Save as : با انتخاب این گزینه می توانید فایل موجود را با نام دیگری ذخیره کنید . Save all: با انتخاب این گزینه می توانید تغییرات اعمالی در تمام فایلهای باز را ذخیره کنید . Close: با انتخاب این گزینه فعایل موجود بسته خواهد شد . Close All : با انتخاب این گزینه تمام فایلهای باز موجود بسته خواهد شد . Close project : با انتخاب این گزینه تمام فایلهای مربوط به پروژه جاری بسته خواهند شد . Convert to library : با انتخاب این گزینه می توانید یک فایل را برای استفاده های مجدد به صورت یک کتابخانه در آورید . Page setup : با انتخاب این گزینه یم توانید تنظیمات مربوط به چگونگی پرینت از فایلهای را مشخص کنید Print: با انتخاب این گزینه تمام فایل جاری پرینت گرفته خواهد شد . Exit: با انتخاب این گزینه از نرم افزار Condvisison خارج می شود . منوی project Compile با انتخاب این گزینه تغییرات ایجاد شده در پروژه جاری ذخیره می گرددد و برنامه کامپایلر می شود . Make با انتخاب این گزینه تغییرات ایجاد شده در پروژه جاری ذخیره شده و برنامه نیز کامپایل می شود و در صورت عدم وجود خطا ، فایل به وجود آمده اسمبل شده و فایل hex ایجاد می گردد . Stop compitation در حین انجام کامپایل می توانید به کمک این گزینه آن را متوقف کنید . Information می توانید بعد ازانجام compilc و یا Make با انتخاب این گزینه اطلاعات مربوط به اعمال کامپایل اسمبل و تبدیل به فایل hec را مشاهده کنید . Notex با انتخاب این گزینه صفحه ویرایشگری باز می شود که می توانید در داخل آن اطلاعات مربوط به پروژه را وارد کنید. Configure با انتخاب این گزینه صفحه ای باز می شود که به کمک آن می توانید قسمتهای مختلف پروژه را تنظیم کنید . منوی Tools به کمک این قسمت می توانید برنامه های مختلف موجود در Condvisison را اجرا کنید 6 لینک به دیدگاه
مجید بهره مند 43111 مالک اشتراک گذاری ارسال شده در 30 اردیبهشت، ۱۳۹۳ قسمت ششم: ادامه منوهای محیط Condvisison AVR : Codewizrd : با انتخاب این گزینه برنامه codwizard اجرا می شود به مرور با آن آشنا خواهید شد Debugger : با انتخاب این گزینه در صورتی که قبلا آدرس برنامه AVRStudio را برای آن مشخص کرده باشید این نرم افزار اجرا می شود که از ان برای شبیه سازی برنامه استفاده می گردد . Terminal: با اجرای این گزینه برنامه Terminal اجرا می شود . از این برنامه در ارتباط سریال برای مشاهده کد های رسیده از میکرو برای کامپیوتر و فرستادن کد از کامپیوتر برای میکرو استفاده می گردد. chip programmer : با انتخاب این گزینه برنامه chip programmer باز می شود که به کمک آن می توانید تراشه را برنامه ریزی کنید و یا اطلاعات موجود بر روی آن را بخوانید . Configure: با انتخاب این گزینه پنجره configure Tools باز می شود که به کمک آن کاربرمی تواند برنامه های خود را به منوی Tools اضافه کند و یا برنامه هایی را حذف نماید . منوی settings : General : با انتخاب این گزینه می توانید نمایش نقش قسمتهای مختلف در پنجره اصلی را فعال یا غیر فعال کنید . Editor: با انتخاب این گزینه پنجره Editor setting باز می شود که به کمک آن می توانید تنظیمات مربوطه به ویرایشگر ، از ق بیل رنگ پیش زمینه ، کلمات کلیدی ، رشته ها، توضیحات و .. را تنظیم کرد . Assembler : با انتخاب این گزینه مشخص کنید که در هنگام بروز خطا از اسمبلر ، یکی از فایلهای با پسوند Lst یا nsm باز می شوند . Programmer : با انتخاب این گزینه پنجره programmer setting باز می شود که باید در آن در قسمت AVR chip programmer Type عبارت Kanda systems STK200+and STK300 را انتخاب کنید و سپس در قسمت EPTI ,printer port را انتخاب کنید . علاوه بر این در کامپیوترهای بسیار سریع در صورت بروز مشکل باید گزینه Delay Multiplier را هم افزایش دهید . Terminal : با انتخاب این گزینه Terminal setting باز می شود که در ان می توانید پورت COM متصل به میکرو ، سرعت ارسال و دیگر تنظیمات مربوط به ارتباط سریال را انجام دهید . معرفی پنجره Configure project : پنجره configure proect از سه بخش Aficr make ,C Compiler ,Files تشکیل شده است به کمک لبه Files می توانید فایلهای Souree جدید را به پروژه خودتان اضافه کنید . در این صورت اولین فایل Souree اضافه شده عنوان فایل اصلی پروژه در نظر گرفته خواهد شد . علاوه بر این میتوانید فایلهایی را از پروژه خود حذف کنید . لبه C Compiler به تنظیمان کامپایلر مربوط می گردد در این صفحه باید نوع میکرو کنترلر AVR کریستال مورد استفاده مشخص شود لازم به ذکر است که در صورتی که اندازه فرکانس کریستال به درستی انتخاب نشود ، در صورت استفاده از توابع تولید تأخید آنها به درستی کار نخواهند کرد . علاوه بر این در قسمت Code Generation علاوه برتنظیم نوع میکرو و فرکانس کریستال مورد استفاده می توان مدل ، حافظه چگونگی بهینه سازی کد های برنامه ( بر اساس کمترین اندازه و یا بیشترین سرعت ). میزان حافظه Boot Loader فرمت قابل قبول دستورات sscaf ,sprintf تعیین قسمتهای مختلف موجود در حافظه SRAM را نیز مشخص نمود که بعد ا بیشتر با آنها می شوید . در قسمتGlobally # define میتوانید ماکرو هایی را تعریف کنید که در تمام فایلهای پروژه قابل استفاده می باشند . این عمل معادل قرار دادن آن ماکرو ها با دستور #define در ابتدای هرفایل پروژه است . به کمک قسمت paths می توانید مسیرهای اضافی جدیدی را برای فایلهای سر آمد و فایلهای کتابخانه ای مشخص کنید . در لبه After make با انتخاب گزینه program the chip پارامترهای دیگر به صفحه اضافه می شوند در این صورت می توانید پس از انجام عمل کامپایل و سپس ساخت فایل hex در صورت متصل بودن کابل ISP آن را مستقیما بر روی تراشه AVR برنامه ریزی کنید و. علاوه بر این می توانید فیوز بیتها ممکن است میابل باشند تا عمل برنامه ریزی تراشه را به کمک نرم افزاری دیگری ( مثل pony prog) انجام دهید . در این صورت به جای انتخاب گزینه گزینه را انتخاب کنید . سپس لازم است تا مسیر برنامه مورد نظرتان را مشخص کنید . در این صورت هر بار انتخاب گزینه Make از منوی project در صورت عدم بروز خطا برنامه مورد نظرتان اجرا خواهد شد و می توانید از طریق آن میکرو را برنامه ریزی کنید 5 لینک به دیدگاه
مجید بهره مند 43111 مالک اشتراک گذاری ارسال شده در 30 اردیبهشت، ۱۳۹۳ قسمت هفتم: ایجاد یک پروژه جدید ایجاد یک پروژه جدید : به طور کلی دو روش برای ایجاد یک پروژه وجود دارد ، که در این قسمت هردو روش را با پیاده سازی یک مثال واحد اجرا می کنیم و سپس چگونگی شبیه سازی و برنامه ریزی تراشه را نیز با هم مرور می نماییم . فرض کنید می خواهیم برنامه ای بنویسیم تِِا LED ِِِ include موجود بر روی پایه ADCO)40)میکرو کنترلرATmega16را با فرکانس 1، HZ خاموش و روشن نمایید(شکل 7-1) در این صورت لازم است تا پایه 40 به مدت 0.5S روشن یک منظقی و به مدت 0.5S خاموش صفر منطقی باشد . برای تولید یک پروژه جدید دو روش وجود دارد : روش اول : در این روش برای تولید یک پروژه جدید از منوی File را از گزینه New انتخاب کنید و یا دکمه Create New File را از نوار ابزار فشار دهید . سپس از پنجره ایجاد شده گزینه project را انتخاب کنید و دکمه ok را فشار دهید . حالا پنجره دیگری باز می شود که می پرسد آیا قصد دارید تا از codewizard برای تولید پروژه جدید استفاده کنید . در این قسمت دکمه NO را فشاردهید . با این کار پنجره Creat New project بازخواهد شد که باید نام پروژه مورد نظرتان را در آن وارد کرد . دراین قسمت کلمه Test را وارد کنید . در این صورت فایل پروژه با پسوند prj ذخیره خواد شد . در این لحظه پنجره configure project باز می شود . در این پنجره در قسمت C Compiler نوع تراشه و فرکانس کریستال را به ترتیب برابر 4m HZ .ATmega16انتخاب کنید و دکه OK را فشار دهید در این مرحله باید یک فابل منبع به پروژه اضافه کنید برای این منظور از منویFile گزینه New را انتخاب کنید و سپس ازپنجره باز شده گزینه Source را علامت بزنید . در این صورت فایلی با نام Untitled.c ظاهرمی شود . کد های زیر را در آن وارد کنید و سپس به کمک گزینه Save as آن را با نام main.c ذخیره نمایید . include # #include /*This is a program that flashes the Led on PORTA.0 every 0.5 seconds*/ main() { while(1) /*Loop forever*/ { PORTA.0=1; delay_ms(500); PORTA.0=0; delay_ms(500); } } برای اضافه کردن این فایل به پروژه از منوی procet گزینه configure را انتخاب کنید . سپس در قسمت File main.c را به پروژه اضافه کنید . در ادامه در پنجره configure project به لبه Afier Make بروید و گزینه program the chip را علامت بزنید و با تأیید تغییرات ایجاد شده صفحه را بینید و سپس از منوی project گزینه Make / را انتخاب کنید . در این صورت پروژه کامپایل می شود و در نهایت فایل hexنیز ساخته می گردد و پنجره ای بر روی صفحه ظاهر می گردد . این پنجره شامل سه قسمت است . در لبه compiler اطلاعاتی را در مورد تنظیمات کامپایلر و میزان حافظه اشغال شده توسط برنامه می بینید . در لبه Assmbler اطلاعاتی را در مورد فایلهای تولید شده در این قسمت و میزان کد های تولید شده مشاهده می کنید و بالاخره در لبه programmer شمارنده ای را مشاهده می کنید که تعداد دفعات برنامه ریزی تراشه توسط Codevisionرا نشان می دهد . البته شما یم توانید این شمارنده را در صورت نیاز به کمک دکمهset counter صفر نمایید و یا مقدار آن را تغییر دهید . برای برنامه ریزی تراشه در صورتی که حداقل مدار لازم برای راه اندازی میکرو را قبلا بسته باشید . ( شکل7-2) و کابل هم متصل باشد می توانید با فشار دادن دکمهprogram تراشه را برنامه ریزی کنید . پس از پایان یافتن برنامه ریزی تراشه ، بلافاصله اجرای کد های توسط میکرو آغاز می شود وLED شروع به چشمک زدن می کند . روش دوم : در این روش برای ایجاد پروژه جدید از برنامه code Wizard استفاده می شود . همان طور که قبلا گفته شد برنامه code Wizard امکان انجام تنظیمات اولیه به صورت گرافیکی را فراهم می کند . درعمل اصولا این روش به دلیل سادگی و تولید کد های برنامه به صورت خود کار بیشتر از روش اول استفاده می شود . بنابراین در ادامه سعی می کنیم تا به توضیح قسمتهای مهم آن بپردازیم . در ابتدا باید از منوی Tools گزینه code Wizard را انتخاب کنید و یا دکمه code Wizardدر نوار ابزار را فشار دهید . شکل 7-3:CODEWIZARD در این پنجره ابتدا در لبهchip در قسمت chip نوع تراشه را برابر ATmega16 انتخاب کنید. سپس در قسمت clock فرکانس کریستال متصل به AVR را برابر 4MHZ قرار دهید . در ادامه به لبه ports بروید و در قسمت port A درقسمت Bit 0 با کلیک برروی in به out تغیر دهید .با این کار تنظیمات اولیه پروژه به پایان می رسد . در این مرحله باید فایلهای پروژه را ایجاد کنید . برای این منظور در پنجره code Wizard AVR از منوی File گزینه را انتخاب کنید . در این مرحله پنجره ای باز می شود و از شما می خواهد تا نامی را برای فایل اصلی پروژه انتخاب کنید . در این مرحله در پنجرهFile Name نام را انتخاب کنید و دکمه را فشار دهید در ادامه گنجره دیگری باز می شود و از شما می خواهد نامی را برای فایل پروژه انتخاب و آن را ذخیره کنید .با نام گذاری فایل با نام Test به مرحله بعدی بروید . در این قسمت پنجره دیگری باز می شود که نامی را برای فایل پروژه مربوط به تنظیمات code Wizard در خواست می کند وبا ذخیره سازی آن پنجره code Wizardبسته می شود و. فایل اصلی source باز می گردد . محتویات این فایل مشابه کدهای زیر است: /********************************************* This program was produced by the CodeWizardAVR V1.23.8c Professional Automatic Program Generator © Copyright 1998-2003 HP InfoTech s.r.l. برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام e-mail: office@hpinfotech.ro Project : Version : Date : 11/14/2005 Author : ali reza raei Company : Comments: Chip type : ATmega16 Program type : Application Clock frequency : 4.000000 MHz Memory model : Small External SRAM size : 0 Data Stack size : 256 *********************************************/ #include // Declare your global variables here void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port A initialization // Func0=Out Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In // State0=0 State1=T State2=T State3=T State4=T State5=T State6=T State7=T PORTA=0×00; DDRA=0×01; // Port B initialization // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T PORTB=0×00; DDRB=0×00; // Port C initialization // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T PORTC=0×00; DDRC=0×00; // Port D initialization // Func0=In Func1=In Func2=In Func3=In Func4=In Func5=In Func6=In Func7=In // State0=T State1=T State2=T State3=T State4=T State5=T State6=T State7=T PORTD=0×00; DDRD=0×00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0×00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off // Analog Comparator Output: Off ACSR=0×80; SFIOR=0×00; while (1) { // Place your code here [color=#000000]} } توضیحاتی راجع به نسخه مورد استفاده codevision نام پروژه ، تاریخ تولید ، نویسنده ، کمپانی ، نوع تراشه ، نوع برنامه و نوع حافظه. فایلهای سر آمد header مورد استفاده . تعیین چگونگی اتصال LCD و یا تراشه های SPI , I2C به میکرو کنترلر و فایلهای سر آمد مربوط به آنها در صورت نیاز . 4- روتین های مربوط به وقفه های فعال شده در داخل code Wizard در صورت وجود . 5- عبارت //Delare your global variables here برای تعریف متغیر های سراسری در صورت نیاز . شروع تابع main تابع اصلی برنامه 7- عبارت//Delare your global variables hereبرای تعریف متغیر های محلی در صورت نیاز 8- تنظیمات اولیه مربوط به پورتها ، تایمرها ، ارتباط سریال ، وقفه های خارجی ، ADC مقایسه کننده ، آنالوگ watchdog 9- شروع حلقه while(1) که دستورات موجود در این حلقه همواره اجرا می شود . 10- عبارت //place your code here برای نوشتن کد در داخل حلقه ، در صورت نیاز . پس ازتولید کد ها با code Wizard لازم است تا کد های خود را به فایل اصلی اضافه کنید . برای این منظور در ابتدای برنامه بعد از دستور #invlude دستور #invlude را اضافه کنید . سپس در داخل حلقه while(1) بعد عبارت place you’re here دستورات زیر را اضافه کنید . PoRTA.0=1; Delay -ms(500); PORTA.0=0; Delay -ms(500) ; حالا از منوی progect گزینه confifure را انتخاب کنید و در لبه After Make گزینه program the chip را علامت یزنید و دکمه ok را فشار دهید . دراین قسمت برنامه کامل شده است و می توانید از منوی project گزینه Meke را انتخاب و تراشه را برنامه ریزی کنید . در صورتی که بخواهید تا قبل از برنامه ریزی تراشه از صحت عمکلرد ـآن اطمینان حاصل کنید باید برنامه را به کمک نرم افزار AVR stdio شبیه سازی کنید . پس از انجام عمل کامپایل و اسمبل کردنب رنامه condevision یک فایل object با پسوند coff تولید می کند . به کمک نسخه AVR studio یا نسخه های بعد از آن امکان شبیه سازی این فایل فراهم شده است . برای اجرای این نرم افزار در صورتی که قبلا مسیر نصب آن را در نوی settins قسمت Debugger تنظیم کرده باشید می توانید از منوی Tools Debugger را انتخاب کنید و یا در نوار ابزار دکمه Run the debugger را فشار دهید . با اجرای پنجره نرم افزار AVRStudio پنجره welcome to AVRstudio باز می شود در این پنجره دکمه open را فشار دهید و فایل object مورد نظر را باز کنید . در این قسمت لازم است تا روش شبیه سازی و نوع تراشه را مشخص کنید برای این منظور در قسمت AVR simulator ,Dbug platform و درقسمت ATmega16 ,Device را انتخاب کنید و دکمه Finish را فشار دهید . در این مرحله AVRStudio فایل مورد نظر را باز می کند و برای اجرای شبیه سازی آماده می شود حالا می توانید با قرار دادن نقاط شکست (Break poins) درقسمکتهای مورد نظر برنامه و مشاهده رجیسترهای مختلف در پنجره workspace و تغییر آنها از صحت برنامه خود مطمئن شود 5 لینک به دیدگاه
مجید بهره مند 43111 مالک اشتراک گذاری ارسال شده در 30 اردیبهشت، ۱۳۹۳ قسمت هشتم:ساختار داخلی و کلاک در AVR در این قسمت در بخش اول ساختار اصلی AVR به صورت کلی همراه باALU ،رجیستر وضعیت، اشاره گر پشته و چگونگی اجرای دستورات و انواع حافظه میکرو کنترلهای AVR مورد بحث قرار می گیرند وسپس در بخش دوم کلاک سیستم مربوط به میکرو کنترلر ATmega16 بررسی می شود . ساختار : در این بخش ساختار اصلی AVR به صورت کلی موجود بحث قرار می گیرد . وظیفه اصلی CPU اطمینان از اجرای صحیح برنامه می باشد . CPU باید بتواند به حافظه های دسترسی داشته باشد و محاسبات را انجام دهد . وسایل جانبی را کنترل کند و وقفه ها را هم به طور صحیحی رهبری نماید . شکل 4-1:ساختار میکروکنترلر AVR AVR برای افزایش کارایی از ساختار Harvard با حافظه ها و باسهای جدا گانه برای داده و برنامه استفاده می کند . دستورات در حافظه برنامه با یک سطح pipelining اجرا می شوند. یعنی زمانی که یک دستور در حال اجرا می باشد . دستور بعد از حافظه برنامه خوانده می شود . با این روش در هرسیکل کلاک یک دستور اجرا می گردد . AVR ها 32 رجیستر 8 بیتی همه منظوره را هم شامل می شوند که تنها در یک سیکل کلاک در دسترس قرار می گیرند . در این صورتALU می تواند عملیات ها را در یک سیکل کلاک انجام دهد . در یک عملیات معممولی ALU ، دو عملوند از دو رجیستر خارج میشوند و بعد از اجرای عملیات نتیجه به یکی از آن رجیستر ها باز می گردد . شش عدد از 32 رجیستر می تواند به صورت اشاره گرهای غیر مستقیم به آدرسها دهی فضا داده به کار روند . این رجیسترها ی 16 بیتی X، Z,Y هستند که بعد ا توضیح داده می شوند . ALU : ALU در AVR به صورت مستقیم با تمام 32 رجیستر همه منظوره ارتباط دارد . عملیانهای ریاضی این قسمت در یک سیکل کلاک اجرا می شوند . عملیات های ALU به سه قسمت اصلی اعمال ریاضی منطقی و بیتی تقسیم می گردند . علاوه بر این در بعضی از انواع پیشرفته ALU, AVR به یک ضرب کننده با قابلیت ضرب اعداد بدون علامت علامت دار و نیز اعداد اعشاری مجهز شده است . رجیستر وضعیت (Status Register) : این رجیستراطلاعاتی را در مورد نتایج آخرین دستور محاسباتی اجرا شده در بر دارد . به کمک این اطلاعات با اجرای دستورات شرطی می توان نحوه اجرا ی برنامه را تغییر داد. بیت( 7)I(Global interrupt Enable) فعال سازی عمومی وقفه : برای فعال سازی و قفه های این بیت باید یک شود . علاوه بر این باید هریک از وقفه ها توسط رجیسترها کنترلی خاصی به صورت جدا گانه فعال گردند . اگر این بیت صفر شود . دیگر هیچ یک از وقفه ها فعال نمی شوند .این بیت با رخ دادن هریک از وقفه ها و ورود به رویتن وقفه ،به صورت سخت افزاری پاک شده ودر انتهای روتین دوباره یک می شود . علاوه بر این می توان در زبان اسمبلی به کمک دستورات SEI , CLI این بیت را به ترتیب یک یا صفر نمود . این دستورات در زبان C به صورت زیر استفاده می گردند: فعال سازی عمومی وقفه: asm# (“sei”)i غیرفعال سازی عمومی وقفه: asm# (“cli”)i بیت T-6 (Bit copy Storage) : می توانیم از بیت T به عنوان مبدأ و یا مقصد یک عملیات بیتی استفاده کنیم . بیت (Half carry flag)H-5 : این بیت وجود Haif carryدر بعضی از عملیات های ریاضی را نشان می دهد . بیت (sign Bit)s-4 بیت علامت : این بیت همیشه برابر با S = N XOR V است . بیت V-3 پرچم سر ریز مکمل 2 : از این بیت در محاسبات مربوط به اعداد مکمل 2 استفاده می شود . بیت (Negative fiag) : این بیت یک نتیجه صفر در یک عملیات محاسباتی یا منطقی را نشان می دهد . بیت c-0 پرچم (Carry) : این بیت وجود یک carry در عملیات محاسباتی یا منطقی را نشان می دهد . 5 لینک به دیدگاه
مجید بهره مند 43111 مالک اشتراک گذاری ارسال شده در 30 اردیبهشت، ۱۳۹۳ قسمت نهم:ادامه ساختار داخلی و انواع حافظه در میکروکنترلرAVR ادامه بررسی رجیسترها در ATmega16: رجیسترهای همه منظوره (General purpose Registers) : رجیسترهایی که برای اجرای بهینه مجموعه دستورات AVR طراحی شده اند . اکثر دستورات AVR مستقیما به تمامی رجیسترهای دسترسی دارند و در یک سیکل کلاک اجرا می شود . همان طور که در شکل 9-1می بینید ، هریک از رجیسترهای همه منظوره به یک آدرس در فضای حافظه ها نیز تعلق دارد . در حقیقت این رجیسترها در 32 محل اول حافظه داده ها ( در SRAM) قرار دارند . ساختار حافظه ، انعظاف پذیری زیادی را در دسترسی به این رجیسترها ایجاد می کند . رجیسترهای Z,Y,X : رجیسترهای R31,R20 علاوه بر استفاده های همه منظوره وظیفه دیگری هم دارند . این رجیسرتها ، اشاره گر های 16 بیتی ، جهت آدرس دهی غیر مستقیم فضای داده هستند. اشاره گر پشته (stack pointer) : اصولا از پشته برای ذخیره سازی موقت داده متغیر های محلی و آدرسهای بازگشت از روتینها ی وقفه و توابع استفاده می شود . محتوای این اشاره گر با ذخیره هر داده کاهش می یابد و پس از بازیابی داده افزایش پیدا می کند . این اشاره گر در AVRبه صورت دو رجیستر 8 بیتی در فضای I/O قرار دارد . انواع حافظه در میکرو کنترلرهای AVR : به طور کلی میکرو کنترلرهای AVR سه نوع حافظه مختلف دارند . حافظه Flash : این حافظه محل قرار گیری کد های برنامه است و به طور کلی به دو قسمت Boot , Application تقسیم می شود . قسمت Application برای برنامه ریزی تراشه ، مشابه ها با میکرو کنترلرهای دیگر مورد استفاده قرار می گیرند و و قسمت Boot که یکی از ویژگیهای جالب AVR نیز می باشد امکان برنامه ریزی AVR توسط خود آن را بدون نیاز به پرو گرامر فراهم می آورد . حافظه SRAM :. در ابتدای حافظه 32 رجیستر همه منظوره قرار دارند در ادامه هم رجیسترهای I/O قرار دارند که امکان کنترل با امکانات جانبی تراشه را فراهم می کنند . بعد از این دو قسمت نیز حافظه داده داخلی قرار دارد . حافظه EEPROM : این حافظه قابلیتهای ویژه را برای میکرو کنترلر فراهم می کند . میکرو کنترلر می تواند اطلاعاتی را بر روی این حافظه بنویسد . این اطلاعات با قطع برق یا قطع و لتاژ تغذییه میکرو از بین نمی رود و لذا می توانند با راه اندازی مجدد میکرو مورد استفاده قرار گیرند . امروزه اکثر وسایل اطراف ما از این قابلیت استفاده می کنند . برای مثال پرینتر شما همیشه تعداد بر گه های پرینت گرفته را در خود ذخیره می کند و در صورت نیاز آن را به اعلام می کند . کارت تلفن شما هم در حقیقت یک EEPROM است که میزان اعتبار موجود شما را نشان می دهد . 5 لینک به دیدگاه
مجید بهره مند 43111 مالک اشتراک گذاری ارسال شده در 30 اردیبهشت، ۱۳۹۳ قسمت دهم:کلاک سیستم در این بخش سیستم میکرو کنترلرATmega16 بررسی می شوند . دلیل انتخاب این میکروکنترلر وجود تمامی امکانات ذکر شده برای میکرو کنترلرهای AVR در این میکرو ، پر استفاده تر بودن نسبی آن نسبت به بقیه انواع AVR و تهیه آسان آن می باشد . توزیع کلاک : شکل زیر سیستم های کلاک اصلی در AVR و چگونگی گسترش آنها را نشان می دهد . لازم نیست تا در یک زمان تمامی کلاک ها فعال باشند . برای کاهش توان مصرف، کلاکهای ورودی مربوط به بخش هایی از آنها که استفاده نمی گردد ،می توانند به کمک مد های SIeep مختلف متوقف شوند . کلاک clkCPU)-CPU ): این کلاک به بخشهایی می رود که به عملکرد هسته AVR مربوط می شوند . مثالهایی از این بخشها رجیسترهای همه منظوره رجیستر وضعیت و اشاره گر پشته هستند . توقف این کلاک باعث می شود که عملیات و محاسبات AVR انجام نگیرد . کلاک CLKI/O-I/O : این کلاک توسط بسیاری از از بخشهای I/O مثل تایمر / کانترها ، USART, SPI مورد استفاده قرار می گیرند . کلاک CLKFLASH)-FLASH): این کلاک عمل ارتباط با حافظه را کنترل می کند . معمولا این کلاک به صورت همزمان با کلاک CPU فعال است. کلاک غیر همزمان CLKASY : این کلاک امکان اتصال مستقیم یک کریستال ساعتی 32KHZ خارجی به تایمر / کانتر را فراهم می آورد . در این صورت می توان از تایمر / کانتر به عنوان یک (Real – Time clock)RTC حتی در زمانی که تراشه در یکی از مد های SIEEP است ، استفاده نمود . کلاک CLKADC-ADC : کلاک محدوده فرکانسی دقیقی را برای ADC فراهم می کند و. در این صورت می توان بر کاهش نویز از دیجیتال کلاکهای I/O , CPU را متوقف نمود و به این ترتیب نتایحج تبدیل ADC ( مبدل آنالو گ به دیجیتال) با دقت بیشتری حاصل می گردد . منابع کلاک : میکرو دارای چهار منبع کلاک( جدول زیر) است که به کمک فیوز بیتهای موجود در حافپه Flash قابل تنظیم یم باشد . کلاک از منبع انتخاب شده به صورت ورودی به قسمت تولید کننده کلاک در AVR وارد می شود و از آنجا که به بخشهای مختلف می رود باید توجه داشت که برای تمامی فیوزها 1 به معنای بیت برنامه ریزی نشده و 0 به معنی بیت برنامه ریزی شده است . زمانی که CPU از حالت power-save,power-down خارج گردد . بسته به منبع کلاک انتخاب شده ، قبل شروع اجرای دستورات مدت زمانی برای اطمینان از پایداری عملکرد کریستال طول می کشد .. زمانی CPU از حالت Rest شروع به می کند . علاوه بر مورد قبلی یک تأخیر اضافی برای پایدار شدن سطح تغذیه نیز لازم است برای ایجاد این زمان بندی از سایلاتور watchdog استفاده می شود منبع کلاک پیش فرض : مبکرو با مقادیر پیش فرض SUT=10,, CKSEL =0001 طراحی می گردد . بنابراین منبع کلاک پیش فرض اسیلاتور RC داخلی IMHZ با بیشترین زمان شروع می باشد . این تنظیم اولیه امکان تغییر منبع کلاک را برای کاربران توسط پروگرامرهای موازی و یا ISP فراهم می کند . در ادامه به توضیح منابع کلاک مختلف می پردازیم 5 لینک به دیدگاه
مجید بهره مند 43111 مالک اشتراک گذاری ارسال شده در 30 اردیبهشت، ۱۳۹۳ قسمت یازدهم: ادامه توضیح منابع کلاک اسیلاتور کریستالی : پایه های XTAL2,XTAL1 به ترتیب پایه های ورودی و خروجی تقویت کننده اسلاتور هستند و همان طورکه در شکل11-1 نشان داده شد ه است . می توان یک کریستال کوارتز یا نوسانگر سرامیکی به این پایه ها متصل کرد . فیوز CKOPT دو حالت مختلف را برای تقویت کننده اسیلاتور ایجاد می کند . زمانی که CKOPT برنامه ریزی شود خروجی اسیلاتور می توان درمحدوده بیشتری نوسان کند . این حالت برای شرایط با نویز بالا مناسب است . زمانی که CKOPT برنامه ریزی نشود ، خروجی اسیلاتور در محدوده کوچکتری تغییر میکند ، بنابراین باعث کاهش قابل توجهی در توان مصرفی می شود این حالت محدوده فرکانسی کوچکتری دارد . در صورت عدم برنامه ریزی CKOPT حداکثر فرکانس برای نوسانگر ها 8MHZ است و در صورت برنامه ریزی CKOPT این مقدار 16MHZ می رسد . خازنهای C2, C1 نیز باید همواره با هم برابر باشند و مقادیر آنها به کریستال نوسانگر و نویز های الکترو مغناطیسی محیط بستگی دارد . اسیلاتور کریستالی فرکانس پایین: باید اسیلاتور کریستالی فرکانس پایین را با تنظیم فیوزهای CKSEL به صورت 1001 انتخاب کنید . در این حالت با برنامه ریزی فیوز CKOPT کاربر می تواند خازنهای داخلی موجود در پایه های XTAL1 و XTAL2 را فعال نماید و به این ترتیب نیاز به خازنهای خارجی را بر طرف کند . خازنهای داخلی مقدار نامی 36pf دارند . زمانی که این حالت برای اسیلاتور انتخاب می شود ، زمان شروع با فیوزهای SUT تعیین می گردد . اسیلاتور RC خارجی : در کاربردهایی که حساسیتی نسبت به زمان بندی ندارند ، می توان از ساختار اسیلاتور RC خارجی استفاده نمود . در این صورت فرکانس به صورت تقریبی از معادله : f = 1 / 3 R C به دست می آید . C باید حداقل 22pf باشد . با برنامه ریزی فیوز CKOPT کاربر می تواند خازن 36pf داخلی بین پایه های GND , XTAL1 را فعال کند . و به این ترتیب نیاز به استفاده از خازن خارجی را حذف نماید . اسیلاتور می تواند در چهار حالت مختلف کار کند ، که هریک برای محدوده خاصی از فرکانسها مناسب می باشد . این حالتها به کمک فیوزهای CKSEL3..0 تنظیم می گردند . در این حالت زمان های شروع نیز توسط فیوزهای SUT انتخاب می گردند. اسیلاتور RC کالبیره شده داخلی: این قسمت چهار کلاک ثابت 8.0,4.0 ,2.0,1.0MHZ را تأمین می کند . این فرکانسها مقادیر نامی در شرایط 25C,5V می باشند . لازم به ذکر است که این اسیلاتور به شدت تابع و لتاژ منبع تغذیه است. با برنامه ریزی فیوزها CKSEL می توان این کلاک را به عنوان کلاک سیستم انتخاب نمایید . زمانی که از این کلاک استفاده می کنید نباید فیوز CKOPT برنامه ریزی شود و در حیت Reset ،سخت افزار بایت مربوط به کالبیراسیون را به داخل رجیستر OSCAL بار می نماید وبه این ترتیب به صورت خود کار اسیلاتئور RC را کالبیره می کند . اگر در شرایط 25C,5V فرکانس اسیلاتور برابر 1.0MHZ انتخاب شود . این کالیبراسیون فرکانسی در محدوده 3% +,- فرکانس نامی را می دهد . با استفاده از روشهای کالیبراسیون در برگه های کاربردی مریوط به AVR در آدرس برای مشاهده این محتوا لطفاً ثبت نام کنید یا وارد شوید. ورود یا ثبت نام قابل دسترسی است . می توان در هر Vcc و دمای دلخواه به دفت 1%+,- دست یافت . زمانی که اسیلاتور به عنوان کلاک تراشه استفاده شود ، اسیلاتور watchdog هنوز برای تایمر watchdog و تنظیم زمان Reset به کارخواهد رفت . در صورتی که این اسیلاتور انتخاب شود ، زمان شروع با فیوزهای SUT معین می گردد در این حالت پایه های XTAL2,XTAL1 باید بدون اتصال رها شوند . کلاک خارجی : برای راه اندازی کلاک میکرو از یک منلع خارجی باید پایه XTAL1 را متصل کرد . علاوه براین باید فیوزهای CKSEL به صورت 0000 برنامه ریزی شوند . در این حالت کاربرمی تواند با برنامه ریزی فیوز CKOPT خازن 36pf بین پایه های GND,XTAL1 را فعال کند . زمانی که این منبع کلاک انتخاب شود زمان های شروع توسط فیوزهای SUT مشخص می گردند . در زمان استفاده از کلاک خارجی جهت اطمینان از عملکرد میکرو ، فرکانس کلاک نباید تغییرات نا گهانی داشته باشند . تغییرات بیش از 2% در فرکانس از یک سیکل کلاک تا سیکل بعدی باعث بروز رفتارهای غیر قابل پیش بینی می گردد . لازم است مطمئن شوید که میکرد در حین چنین تغییراتی در حالت Reset نگاه داشته خواهد شد . اسیلاتور تایمر / کانتر : درصورتی که میکرو کنترلر AVRپایه های مجزایی برای اسیلاتور تایمر/ کانتر (TOSC2,TOSC1) داشته باشد ،کریستال ساعتی به طور مستقیم به این پایه ها ی متصل می شوند که در این صورت نیازی به خازن خارجی هم نخواهد بود . اسیلاتور برای استفاده از کریستال ساعتی 32.768KHZ بهینه شده است و اعمال یک منبع کلاک خارجی پایه TOSC1 توصیه نمی شود . ::doc:: 4 لینک به دیدگاه
مجید بهره مند 43111 مالک اشتراک گذاری ارسال شده در 30 اردیبهشت، ۱۳۹۳ برای بهره مندی کامل از تمامی مزیتهای یک میکروکنترلر نیاز به ارتباط میکرو کنترلر با محیط خارج است،بطوریکه اغلب انجام یک پروژه صنعتی بدون ارتباطات متداول بین میکروکنترلر و محیط خارج ممکن نیست. به عنوان مثال یک میکرو باید بتواند تعدادی از المانهای محیطی را دریافت(به اصطلاح SENSE ) کند و پس از پردازشهای لازم و بدست آوردن معلوماتی که به آنها نیاز است آن دادها و نتایج حاصل را به دنیای خارج مثل یک کامپیوتر برای استفاده و یا احیانا پردازشهای بیشتر ارسال کند. به عبارت ساده تر میکرو باید داده های پردازش شده ی توسط خود را به شکلی به خارج ارسال کند تا برای انسان قابل استفاده باشد،بعنوان نمونه سنسور دمای دیجیتالی را در نظر بگیرید که خروجی دمای آن یک موج دیجیتال (مانند کلاک پالس) است،میکرو این خروجی سنسور را دریافت کرده و با مبدلهای دیجیتال به آنالوگ (D/A) خود و یا با استفاده از روشهای دیگر(مثل استفاده از فرمول سیکل عملکرد سنسور که در دیتا شیت آن موجود است)دما را اندازه گیری می کند.برای اینکه ما بتوانیم از این دما (به عنوان یک خروجی از میکرو )بهره ببریم،نیاز به مثلا یک LCD داریم. برای ارتباط میکرو با LCD روشهای مختلفی وجود دارد. همینکه ما در اینجا از ارتباط و انتقال داده بین دو وسیله مختلف که هماهنگی با یکدیگر نداند صحبت میکنیم،بحث پروتکلها مطرح میشود. از مطالبی که تا اینجا مطرح شده نتیجه می گیریم که ارتباط سریال USART در واقع یک پروتکل برای ارتباط میکروکنترلرها با محیط خارج است. ::book:: USART مخفف کلمات زیر است: Universal synchronous and Asynchronous Serial Receiver and Transmitter یا ارتباط سریال سراسری(سنکرون و آسنکرون) توجه داشته باشید که در مقابل ارتباط سریال USART ارتباط سریال سراسری آسنکرون یا به اختصار UART نیز وجود دارد که در آینده به آن نیز خواهیم پرداخت. با مقدمه که گفته شد در قسمت بعد به شرح این ارتباط سریال خواهیم پرداخت. قسمت دوازدهم:ارتباط سریال USART ارتباط سریال USART یکی از پروتکل هایی است که توسط انواع کامپیوترها نیز حمایت میشود و لذا برای بر قراری ارتباط بین میکرو کنترلرها و کامپیوتر غالبا از این روش استفاده می شود و به این دلیل مطالعه آن از اهمیت زیادی بر خوردار است . ما در این قسمت قصد داریم پس از معرفی USART و قسمتهای مختلف آن بر روی دریافت و ارسال اطلاعات به صورت رشته های کاراکتری متمرکز می شویم و در ادامه مزایای این روش را با دو پروژه عملی روشن کنیم . 1)آشنایی با ارتباط سریال USART : بخش ارتباطی سریال USART در میکرو کنترلرهای AVR قابلیتهای متنوعی دارد که از جمله آنها می توان به موارد زیر اشاره کرد : • عملکرد Full Duplex ( رجیسترهای سریال مستقل برای دریافت و ارسال ) • عملکرد سنکرون و آسنکرون . • عمل به صورت Slave , Master در حالت سنکرون • تولید کننده نرخ ارسال (baud rate) دقیق • حمایت از فریمهای سریال با 5-6-7-8-یا 9 بیت داده و 1 یا 2 بیت توقف . • تولید parity به صورت زوج وفرد و امکان چک کردن سخت افزاری آن . • تشخیص خطاهای سر ریز و نوع فریم . • فیلتر پایین گذر دیجیتال • تولید سه وقفه مجزا برای اتمام TX ،خالی شدن رجیستر داده TX و اتمام RX . • کار در حالت ارتباط چند پردازنده . • امکان دو برابر کردن سرعت در حالت آسنکرون . 2)سازگاری USART با UART در AVR: بعضی از انواع AVR تنها ارتباط سریال UART حمایت می کنند . به این معنی که ارتباط سریال تنها به صورت آسنکورن قابل انجام می باشد ،در انواع پیشرفته میکرو کنترلرهای AVR می توانند به صورت سنکرون و آسنکرون ارتباط برقرار کنند . این دو نوع ارتباط سریال از نظر محل بیتها در داخل رجیسترها ، نحوه تولید نرخ ارسال ، و دریافت اطلاعات و عملکرد بافر مربوط به ارسال اطلاعات کاملا مطابقت دارد و تنها عملکرد بافر مربوط به دریافت اطلاعات در ارتباط سریال USART بهبود یافته است . 3)تولید کننده نرخ ارسال (baudrate) داخلی: واحد ارتباط سریال ، یک تولید کننده کلاک داخلی را شامل می شود ، که از آن در حالت آسنکرون و حالت سنکرون در مد Master استفاده می کند . در این واحد یک کانتر وجود دارد که همیشه به صورت کاهشی می شمارد . این کانتر کلاک خود را به صورت مستقیم از کلاک سیستم (fosc) می گیرد . هربار که محتوای این کانتر به صفر می رسد یک کلاک تولید می شود و محتوای کانتر از رجیستر (USART Baud Rate Register) بار می شود ، سپس بسته به مد عمکلرد ارتباط سریال کلاک تولید شده بر 2،8 یا 16 تقسیم می گردد که قسمتهای مختلف از آن استفاده می کنند . جدول زیر روابط لازم برای محاسبه نرخ ارسال ( بر حسب تعداد بیتها در هر ثانیه ) و محاسبه مقدار UBRR را بسته به مد عملکرد ارتباط سریال نشان می دهد . که در آن BAUD نرخ ارسال ( بر حسب تعداد بیتها در یک ثانیه bps ) و fosc فرمانس کلاک اسیلاتور سیستم و UBRR محتوای رجیسترهای (0-4095)UBRRL , UBRRH می باشند . 4)کار با سرعت دو برابر (U2X) : می توان نرخ ارسال را با یک کردن بیت U2X واقع در رجیستر UCSRA دو برابر نمود . تنظیم این بیت تنها در مد آسنکرون تأثیر خواهد داشت و باید در مد سنکرون مقدار آن صفر گردد.با یک کردن این بیت نرخ ارسال به جای 16 بر 8 بیت تقسیم می گردد،بنابراین در ارتباط آسنکرون نرخ ارسال دو برابر می کند . 4 لینک به دیدگاه
مجید بهره مند 43111 مالک اشتراک گذاری ارسال شده در 30 اردیبهشت، ۱۳۹۳ قسمت سیزدهم: ادامه ارتباط سریال USART انواع ترکیب بندیهای فریم دادها : یک فریم سریال از یک کارکتر با بیتهای همزمان ساز ( بیتهای شروع و توقف و یک بیت parity اختیاری برای تشخیص خطا تشکیل شده است ) USART هر 30 ترکیب معتبر از فریمهای زیر ا حمایت می کند: • یک بیت شروع • 5-6-7-8-یا 9 بیت داده • بین parity زوج یا فرد و یا هیچکدام . • یک یا دوبیت توقف . هرفریم با بیت شروع آغاز می شود و بعد ازآن بیتهای داده ، از کم ارزش ترین بیت ارسال می شوند . بعد از بیتهای parity در آخر بیتها فرستاده می گردد در USART فرمت فریمها توسط بیتهای UCSZ2:0,UPM1:0,USBS واقع در جسیترهای UCSRC ,UCSRB تنظیم می شوند . این فرمت برای ارسال و دریافت اطلاعات یکسان است . ::doc:: تنظیمات اولیه ارتباط سریال : قبل از بر قراری ارتباط سریال باید USART تنظیم شود . این مراحل شامل تنظیم نرخ ارسال) ( Bodrate وتعیین نوع فریم وفعال کردن قابلیت ارسال (Transmit) و یا دریافت (Receive) است . برای نمونه تابع زیر تنظیمات اولیه ارتباط سریال را انجام می دهد : #define xtal 4000000 void USART_Init( unsigned int baud ) { /* Set baud rate */ UBRR = xtal/16/baud-1; /* Enable receiver and transmitter */ UCSRB = 0×18; /* Set frame format: 8data, 2stop bit */ UCSRC = 0×86;} این تابع با فرض این که کلاک میکرو 4MHZ ،است نرخ ارسال مورد نظر را بعنوان ورودی میگیرد و تنظیمات اولیه را انجام می دهد. ارسال داده ها : ارسال داده در USART با یک کردن بیت TXEN واقع در رجسیتر UCSRB فعال می گردد . زمانی که این فرستنده فعال شود ، نحوه عملکرد پایه TXD توسط USART کنترل خواهد شد . تابع زیر داده ها را به صورت polling می فرستند . این تابع تا زمانی که بیت UDRE صفر است منتظر می ماند و با یک شدن این بیت داده را در بافر فرستنده قرار می دهد. #define UDRE 5 void USART_Transmit( unsigned char data ) { /* Wait for empty transmit buffer */ while ( !( UCSRA & (1 /* Put data into buffer, sends the data */ UDR = data; } در تابع فوق متغیر data می تواند یک عدد 8 بیتی دلخواه باشد . 4 لینک به دیدگاه
مجید بهره مند 43111 مالک اشتراک گذاری ارسال شده در 30 اردیبهشت، ۱۳۹۳ قسمت چهاردهم:ادامه ارتباط سریال USART(دریافت داده) علاوه بر تابع قسمت قبل (در بالا)در محیط برنامه نویسی codevision تابعی با نام ()PUTCHAR وجود دارد که می توان از آن برای ارسال کد های اسکی مختلف استفاده کرد.این تابع در کتابخانه stdio.h قرار دارد و نحوه عملکرد آن به صورت زیر است : (‘+’)PUTCHAR دستور فوق کارکتر + را از طریق ارتباط سریال ارسال می کند . (43)PUTCHAR دستور فوق نیز ماشبه دستور قبلی کارکتر + را ارسال می کند . در حقیقت عد 43 کد معادل اسکی کارکتر + می باشد . بنابراین این تابع می تواند خود کارکتر و یا کد اسکی معادل آن که عددی بین 0 تا 127 است را عنوان ورودی قبول کند . در صورتی که بخواهیم تا کد اسکی یک رشته مثل Hello world را ارسال کنیم می توانیم این کار را کمک تابع ()PUTCHAR وارسال هریک از کارکتر ها انجام دهیم . برای انجام این کار در محیط codevision روش ساده تری نیز وجود دارد و آن استفاده از تابع print می باشد . برای مثال ارسال رشته فوق باید بنویسیم: (putchar(hellow world البته فایلهای این تابع بیشتر از این است. ما می توانیم به کمک این تابع مقادیر متغیر با زمان را نیز به صورت رشته ارسال نماییم . برای مثال دستور زیر در صورت فعال بودن ADC مقدار خوانده شده ازکانالهای اول و دوم را به صورت ASCO:xxxxADC1:xxxx که در آن مقادیر x بیانگر اعداد 0 تا 9 می باشند ارسال می کند . Print (ADCO:%047ADC1,%04U:read -adc(0)read-adc(1)); علاوه بر توابع ذکر شده از دو تابع() PUTSf و () PUTS نیز برای ارسال رشته ها استفاده می شود . تفاوت ایت دو تابع در این است که تابع () PUTS رشته های موجود در حافظه RAM را ارسال می کند و لی تابع () PUTSf رشته های موجود در حافظه Flash را ارسال می نماید . دریافت داده ها : در USART دریافت داده ها با یک کردن بیت RXEN واقع در رجیستر UCSRB فعال می شود . در این صورت نحوه عملکرد پایه RXD توسط UCSRA کنترل خواهد شد . زمانی که UCSRA یک بیت شروع معتبر را تشخیص می دهد . دریافت اطلاعات را آغاز می کند . بیتهای بعد از بیت شروع با نرخ ارسال (baudrate) نمونه برداری می شوند و زمانی که اولین بیت توقف برسد محتویات شیفت رجیستر سریال به بافر منتقل می شود . کد های زیر یک تابع دریافت داده های سریال بر اساس روش polling را نشان می دهد: #define RXC 7 unsigned char USART_Receive( void ) { /* Wait for data to be received */ while ( !(UCSRA & (1 /* Get and return received data from buffer */ return UDR; { این تابع با چک کردن پرچم RXC تا زمانی که داده ای بر روی بافر گیرنده وجود نداشته باشد . منتظرمی ماند و در صورت وجود داده در داخل بافر آن را می خواند و مقدار آن را بر می گرداند . در اینجا نیز مشابه با حالت ارسال Codevision توابعی را برای ساده نمودن کار با رشته های و کارکترهای ارا ئه نموده است . در نقطه مقابل تابع()PUTCHAR در ارسال در اینجا تابع وجود دارد . این تابع کارکتر ارسال شده برای میکرو را دریافت می کند و آن را به عنوان خروجی خود باز می گدارند . برای مثال دستور زیرزمانی کارکتری را دریافت نکند منتظر می ماند و پس از دریافت کارکتر آن را در داخل متغیر ch قرار می دهد . char ch; ch=getchar(); علاوه بر این می توان به کمک دستور scanf() رشته ای با قالب بندی مشخص را دریافت نمود مثال : char n; printf(“Which ADC channel do you want to read?”); scanf(“%u”,&n); printf(“Channel %u=%u”,n,read_adc(n)); در مثال فوق ابتدا میکرو یک رشته را ارسال می کند ، سپس کامپیوتر در جواب به آن رشته یک عد را به صورت کارکتری ارسال کرده و در ادامه کد اسکی Enter را برای میکرو می فرستد . در این لحظه تابع() scanf کارکتر مربوط به عدد را گرفته و آن را به عدد تبدیل می کند . درمتغیر n قرار می دهد . سپس کانال (n+1)ADC را خوانده و بافرمت خاصی ار طریق ارتباط سریال ارسال می کند . ( عدد N باید بین 0 تا 7 باشد ) رجیسترهای بافر داده مربوط به ارسال و دریافت UCSRA آدرس یکسانی دارند که به آن رجسیتر URD می گویند . در ارسال کارکترهای 5 -6-7 بیتیی بیتها ی بدون استفاده در فرستنده در نظر گرفته نمی شود . و در طرف دیگرگیرنده برابر صفر قرار داده می شوند . 4 لینک به دیدگاه
مجید بهره مند 43111 مالک اشتراک گذاری ارسال شده در 30 اردیبهشت، ۱۳۹۳ قسمت پانزدهم: رجیسترهای USART رجیسترهای بافر داده مربوط به ارسال و دریافت UCSRA آدرس یکسانی دارند که به آن رجسیتر URD می گویند . در ارسال کارکترهای 5 -6-7 بیتی بیتهای بدون استفاده در فرستنده در نظر گرفته نمی شود و در طرف دیگر (سمت گیرنده)برابر صفر قرار داده می شوند . بیت RXC-7 یا(USART Receive Complete): در صورتی که داده ها ی موجود در بافر گیرنده خوانده نشده باشند،این پرچم برابر یک و در غیر این صورت صفر خواهد بود . بیت TXC- 6 یا(USART Transmit Complete ): زمانی که آخرین فریم فرستاده شده باشد و داده ای در بافر فرستنده وجود نداشته باشد،این بیت برابر یک ودر غیر این صورت صفر خواهد بود. بیت UDRE-5 یا(USART Data Register Empty): اگر این بیت یک باشد،نشان می دهد که بافر فرستنده برای گرفتن داده جدید آماده است. بیت FE-4 یا(Frame Error): اگر کارکتر بعدی در زمان دریافت در بافر گیرنده یک خطای فریم داشته باشد این بیت یک می شود. بیت DOR-3 یا(Data Over Run): زمانی که بافر گیرنده پر باشد و کارکتر جدیدی هم در شیفت رجیستر گیرنده منتظر باشد و بیت شروع جدیدی هم تشخیص داده شود ، این بیت یک می گردد. بیت PE-2 یا(Parity Error): اگر در کارکتر بعدی موجود در بافر گیرنده خطای parity وجود داشته باشد،این بیت یک می شود. بیت UDX-1 یا(Double the USART transmission Speed): این بیت تنها در حالت آسنکرون کاربرد دارد و در حالت سنکرون باید صفر گردد.با نوشتن یک در این بیت نرخ ارسال به جای 16 بر 8 تقسیم می گردد و به این ترتیب در ارتباط آسنکرون سرعت انتقال را 2 برابر می کنند. بیت MPCM-0 یا(Multi-Processor comunication Mode): این بیت امکان ارتباط چند میکرو پروسسور با یک دیگر را فراهم می کند . بیت 7-RXCIE یا(RX Complete Interrupt Enable): با یک کردن این بیت،وقفه اتمام دریافت فعال می شود . بیت TXCIE-6 یا(TX Complete Interrutpt Enable): با یک کردن این بیت،وقفه مربوط به اتمام ارسال فعال می گردد . بیت 5-UDRIE یا(USART Data Register Empty Interrupt Enable) : با یک کردن این بیت،وقفه مربوط به اتمام ارسال فعال می گردد . بیت RXEN-4یا(Receiver Enable): با یک کردن این بیت،USART به صورت گیرنده فعال می گردد . بیت TXEN-3یا(Transmitter Enable): با یک کردن این بیت،USART به صورت فرستنده فعال می گردد . بیت UCSZ-2 یا(Character Siza): این بیت به صورت ترکیب با بیتهای USCZ 1:0 تعداد بیتهای داده در یک فریم را مشخص می کند. بیت RXB8-1 یا(Recieve Data Bit 8): زمانی که فریم 9 بیت داده داشته باشد این بیت نهمین بیت داده از کارکتر دریافتی را در خود جای می دهد. ::smiling:: بیتTXB8-0 یا(Transmit Data bit 8): زمانی که فریم 9 بیت داده داشته باشد این بیت نهمین بیت داده از کارکتر ارسالی را در خود جای می دهد. ::smiling:: 4 لینک به دیدگاه
مجید بهره مند 43111 مالک اشتراک گذاری ارسال شده در 30 اردیبهشت، ۱۳۹۳ قسمت شانزدهم:ادامه رجیسترهای USART رجیستر UCSRC یا(USART Control & status Register C): این رجیستر و رجیستر UBRRH در یک مکان قرار دارند. بیت URSEL-7 یا(Register Select): این بیت برای انتخاب دسترسی به رجیسترهایUCSRC یا UBRRH بکار می رود و برای دسترسی به رجیستر UCSRC باید یک شود. بیت UMSEL-6 یا(USART Mode Select): این بیت مد سنکرون یا آسنکرون را انتخاب می کند. اگر این بیت صفر باشد،عملکرد به صورت آسنکرون می باشد. بیتهای 4:UPM1:0-5 یا(USART Parity MOde): ای بیت USBS-3 یا(USART Stop Bit Select): این بیت تعداد بیتهای توقف در فریم را مشخص می کند. بیتهای UCSZ1:0-2:1 یا(Character Size): این بیتها به صورت ترکیب با بیت UCSZ2 تعداد بیتهای داده فریم را مشخص می کند. (جدول را نگاه کنید) بیت UCPOL-0 یا (Clock Parity): از این بیت تنها در حالت سنکرون استفاده می شود . رجیترهای UBRRL و UBRRH یا(USART Baudrate Register): رجیستر UBRRH و رجیستر UCSRC از یک مکان در حافظه I/O استفاده می کنند. بیت URSEL-15 یا(Register Select ): این بیت برای انتخاب دسترسی به رجیسترهای UBRRH , UCSRC به کار می رود و برای دسترسی به رجیستر UBRRH باید صفر شود. بیتهای Reserved Bits 14-12: این بیتها برای استفاده های بعدی ذخیره شده اند . بیتهای UBRR 11-0: این یک رجیستر 12 بیتی است که نرخ ارسال USART را تنظیم می کند . 4 لینک به دیدگاه
مجید بهره مند 43111 مالک اشتراک گذاری ارسال شده در 30 اردیبهشت، ۱۳۹۳ قسمت هفدهم: نکاتی در مورد تولید نرخ ارسال (Baudrate) : همان طور که قبلا بیان شد واحد تولید نرخ ارسال با استفاده از کلاک میکرو ، نرخهای مختلف را تولید می کند . نکته مهم در ارتباط سریال این است که تولید نرخ های ارسال مختلف به کمک نوسانگر ها وکریستالهایی با فرکانس های استاندارد می تواند خطایی به همراه داشته باشد و از آنجا که د ر بعضی از موارد این خطا بیش از حد بزرگ است باید در هنگام طراحی به این نکته توجه نمود . بنابراین اگر قصد دارید تا از ارتباط سریال برای ارتباط با کامپیوتر استفاده کنید توصیه می شود . تا از کریستالهایی با مقادیر 1.8432mhz ,18.432mhz ,14.7456mhz,7.33728mhz,3.6864mhz استفاده کنید . این کریستالها می توانند نرخ ارسال لازم در محدوده تا را بدون خطا تولید کنند .در ارتباط با 115.2kbpsتا 1200bps رابدون خطا تولید می کنند . در ارتباط با کامپیوترهای معمولی حداکثر نرخ ارسال قابل قبول کامپیوتر ها 115.2kbps است . ولی در صورتی که قصد داشته باشید تا از ارتباط سریال برای ارتباط بین دو یا چند میکرو کنترلراستفاده کنید نرخ ارسال می تواند افزایش یابد . در این حالت بسته به مقدار کریستال انتخاب شده برای برای میکرو کنترلر، حداکثر نرخ ارسال( که در آن UBRR=0 است) متفاوت خواهد بود که باید به آن توجه داشت . انجام تنظیمات اولیه ارتباط سریال در codeWizard : در صورتی که در برنامه codeWizard نوع تراشه را Atmega16 انتخاب کنید . با کلیک بر روی قسمت USART می توانید در قسمت Mode مد عملکرد USART را به صورت آسنکرون یا سنکرون انتخاب نمایید.در قسمت Communication parameter نیز می توایند هریک از فرمتهای فریم رایج در ارتباط آسنکرون را انتخاب کنید . برای فعال سازی ارتباط سریال به صورت گیرنده و یا فرستنده باید به ترتیب گزینه های Transmitert , Receiver را انتخاب کنید . با فعال کردن هریک از آنها این امکان فراهم می شود تا بتوانید وقفه مربوط به آن را نیز فعال کنید . در صورتی که هریک از وقفه های مروبطه به دریافت یا ارسال فعال شود codevision برای هریک از آنها یک بافر با یک نرم افزاری تولید می کند که اندازه ایم بافرها میزدر این پنجره قابل تنظیم است . این اندازه بیانگر تعداد بایتهای بافر می باشد و باید طوری تعیین شود که حداکثر طول داده ها بیشتر باشد . در صورتی که وقفه ارتباط سریال برای دریافت داده ها فعال گردد . Codevision یک بافر نرم افزاری با نام عمومی rx…buffer را تولید می کند که در آن متغیر عمومی rx…wr…index همواره شماره بایتی را که برای آخرین بار داده در آن قرار گرفته است ، در خود نگه می دارد. به همین ترتیب برای وقفه سریال مربوط به ارسال داده ها نیز با فر با نام عمومی tx..Buffer و متغیر عمومی tx. Wr…index برای تغییر اندیس آن تولید می شوند. برای کار با ارتباط سریال می توان به سادگی از توابع ورودی و خروجی استانداردputs ,putchar,scanf , printf, gets, getcha استفاده نمود . در صورتی که وقفه های مربوط به ارتباط سریال فعال شوند ، codeWizardبه صورت خود کار توابعputchar,getcharرا دوباره تعریف می کند به طوری که برای کار با وقفه ها مناسب باشند . 4 لینک به دیدگاه
مجید بهره مند 43111 مالک اشتراک گذاری ارسال شده در 30 اردیبهشت، ۱۳۹۳ قسمت هجدهم: اتصال AVR به RS232 : ازآنجایی که برای بر قراری ارتباط سر یال با کامپیوتر ناچاریم تا از RS232 استفاده کنیم . لازم است تا به نحوی بتوانیم سطوح ایجاد شده توسط میکرو و RS232 را به یکدیگر تبدیل کنیم .عموما برای تبدیل این سطح ولتاژ به یک دیگر تراشهMAX232 ,MAX232استفاده می شود و در میکرو کنترلرهای AVR و پابه با نامهایRXD,TXD وجود دارند که از پایه TXDبرای ارسال داده ها و از پایهRXD برای دریافت آنها استفاده می شود. اتصال AVR به RS485 : ارتباط سریال RS232 علی رغم اینکه به عنوان یک روش ارتباطی استاندارد بر روی کامپیوتر ها استفاده می شود . محدودیتهای خاص خود را دارد . این محدویتها موجب شده است تا درصنعت بسیاری ازموارد به جای RS485 , RS232 استفاده شود . این استاندارد به دلیل عملکرد دیفرانسیلی نسبت به RS232 حساسیت کمتری نسبت به نویز دارد ، علاوه بر این سرعت انتقال و حداکثر طول مجاز سیمها در این استاندارد به مراتب بیشتر از استانداردهای RS232 می باشد ،برای انتقال اطلاعات در فواصل دور اصولا از استاندارد RS485 استفاده می شود . البته باید خاطر نشان کرد که استاندارد RS485 تنها برای ارسال اطلاعات سریال USART مورد استفاده قرار نمی گیرند و کاربردهای متنوعی دارد . برای نمونه اگر قصد دارید تا دمای یک مخزن را که میکرو کنترلر 100 متر فاصله دارد اندازه گیری کنید می توانید با استفاده از سنسور SMT160 و سپس تبدیل خروجی آن به RS485 آن را انتقال داده و قبل از ورود به میکرو آن را به سطوح TTL تبدیل کنید . برای سطوح RS485 , TTL به یک دیگر از تراشه ADM485 استفاده می شود . تراشه ADM485 : از این تراشه برای تبدیل سطوح ولتاژ RS485 , TTL به یک دیگر استفاده می شود . این تراشه از یک درایو خط دیفرانسیلی و یک گیرنده خط دیفرانسیلی تشکیل شده است . درایو ر و گیرنده می توانند به صورت مستقل فعال شوند .و زمانی که غیر فعال شوند ، خروجی مربوط به آنها غیر فعال می شود . همان طورکه قبلا گفته شد استاندارد RS485 به صورت دیفرانسیلی عمل می کند . در این تراشه پایه های B,A به ترتیب خروجی های مثبت و منفی RS485 می باشند . برای تبدیل یک سیگنال TTL به سطوح RS485 کافی است تا سیگنال را به پایه DI متصل نمایند . و درایو را به کمک پایه DE فعال کنید در اینصورت سیگنال براساس استاندارد RS485 بر روی پایه های B,A به صورت دیفرانسیلی تولید خواهد شد . برای تغییر سطوح ولتاژ RS485 به سطوح ولتاژ TTL نیز کافی است تا پایه های دیفرانسیلی مثبت و منفی سیگنال را به ترتیب به پایه های B,A در تراشه MAM485 متصل کنید و گیرنده داخلی تراشه را نیز توسط پایه RE فعال نمایید در این صورت سیگنال با سطوح TTL از پایه RO خارج خواهد شد . با توجه به مطالب گفته شده در مورد نحوه عملکرد تراشه ADM485 مشخص است که در صورتی که یک تراشه ADM485 برای تبدیل سطوح پایه های RS485 ,RXD,TXD استفاده شود . در یک لحظه امکان ارسال و دریافت هزمان از بین خواهد رفت . (Half Duplex) .در این حالت در هر لحظه تنها یکی از پایه های RS485, TXD, RXD ارتباط خواهند داشت که این ارتباط با پایه DIR کنترل می شود و در حقیقت این پایه جهت حرکت اطلاعات را مشخص می کند . اگر این پایه در حالت پیش فرض برابر صفر باشد میکرو کنترلر تنها می تواند داده ها را از طریق ارتباط سریال دریافت کند . در این صورت اگر میکرو داده هایی را از این طریف دریافت نماید و بخواهد تا به به آنها پاسخ دهد ،ابتدا مقدار پایه DIR را از صفر به یک تغییر می دهد و سپس اطلاعات را ارسال می کند و پس از آن دوباره با صفر کردن پایه DIR به حالت پیش فرض بر می گردد و آماده دریافت اطلاعات می شود . 4 لینک به دیدگاه
مجید بهره مند 43111 مالک اشتراک گذاری ارسال شده در 30 اردیبهشت، ۱۳۹۳ قسمت نوزدهم: برنامه های وابسته در ارتباط سریال در برقراری ارتباط سریال با کامپیوتر غالبا لازم است تا برای ارسال و دریافت داده ها از نحوه عملکرد برنامه خود در داخل میکرو اطمینان حاصل کنید برای این منظور می توان از برنامه هایی استفاده نمود که داده های ارسالی از میکرو را نشان می دهد ، و داده های مورد نیاز را برای آن ارسال می کنند . ازجمله این برنامه ها می توان به محیط Terminal در داخل نرم افزار codevision و برنامه Advanced serial port Monitor اشاره کرد که در ادامه به توضیح آنها می پردازیم . آشنایی با محیط Terminal : قبل از بازکردن این محیط لازم است تا تنظیمات مربوط به آن را انجام دهید . برای این منظور باید در نرم افزار codevision از منوی setting گزینه terminal را انتخاب کنید،در این صورت پنجره ای باز می شود که می توانید در آن پورت COM متصل به میکرو کنترلر و مقدار نرخ ارسال (baud rate) و فرمت فریمهای تعریف شده در میکرو کنترلر را تنظیم کنید و پس از انجام تنظیمات می توانید این برنامه را از طریق منوی Tools و یا نوار ابزار اجرا کنید . در این صورت صفحه ای باز می شود که در آن اطلاعات رسیده از طرف میکرو قابل مشاهده است در صورتی که د ر این صفحه تایپ نمایید اطلاعات تایپ شده به میکرو فرستاده می شود علاوه بر این می توانید اطلاعات دریافت شده از طرف میکرو را در یک فایل متنی ذخیره کنید و یا محتویات یک فایل متنی را با باز کردن آن فایل در این برنامه، برای میکرو ارسال نمایید . آشنایی با برنامه Advanced serial port Monitor : در صورتی که برای آزمایش برنامه خود به یک برنامه قدر تمند نیاز داشتید،می توانید از این برنامه استفاده کنید . در صورتی که این برنامه را اجرا کنید می توانید تنظیمات مربوط به شماره پورت COM نرخ ارسال و فرمت فریمها را بر روی صفحه اصلی انجام دهید . سپس برای بازکردن پورت باید دکمه open را کلیک کنید . در این صورت می توانید داده ها ی ارسال شده توسط میکرو را ببنید و یا برای آن داده ارسال نمایید . این نرم افزار برای نمایش داده های نوع کاراکتری طراحی شده است . علاوه بر این لازم است تا برای نمایش داده های ارسال شده توسط میکرو کنترلر در پایان هر رشته کارکتری یک کارکتر خاص ( عموما enter) نیز فرستاده شود تا برنامه با تشخیص آن کارکترهای قبل از آن را بر روی صفحه نمایش دهد . به طور مشابه اگر بخواهید تا یک رشته کارکتری را برای میکرو ارسال کنید ، برای ارسال آن رشته باشد در پایان آن یک کارکتر خاص ( عموما enter) را وارد کنید . برای تعیین دو کارکتر خاص جهت مشخص کردن انتخاب رشته کارکتری در دریافت و یا ارسال داده ها باید از منوی option گزینه setting را انتخاب کنید . سپس در قسمت signs of and gtring می توانید کارکتر یا کارکترهایی را برای مشخص کردن رشته های کارکتری دریافت یا ارسال شده انتخاب نمایید که در این صورت برنامه در زمان فرستادن یک رشته کارکتری آنها را پایان رشته اضافه می کند . این کارکتر ها برای دریافت و ارسال به صورت پیش فرض به صورتOD -CR # هستند که بیانگر کارکتر Enter است . 4 لینک به دیدگاه
مجید بهره مند 43111 مالک اشتراک گذاری ارسال شده در 30 اردیبهشت، ۱۳۹۳ قسمت بیستم: ارتباط سریال SPI از آنجایی که برای بر قراری ارتباط بین وسایل الکتریکی مختلف ، پروتکلهای زیادی وجود دارند که هریک نقاط ضعف و قوت خود را دارند و در موارد خاصی به کار می روند پس از آشنایی با ارتباط سریال USART به بررسی سایر پروتکلها مورد استفاده در میکروکنترلرهایAVR می پردازیم این پروتکلها شامل : ارتباط سریال SPI ،ارتباط سریال دو سیمه یا I2C و ارتباط سریال یک سیمه یا One Wire هستند،که در ادامه به شرح هر یک از آنها خواهیم پرداخت. ارتباط سریال SPI: ارتباط سریال SPI یک پروتکل ارتباط سریال سنکرون باسرعت بالا است که می تواند برای برقراری ارتباط بین میکروکنترلرهای AVR مختلف و وسایل جانبی که در آنها تعریف شده باشد به کار رود ،خصوصیات این ارتباط به صورت زیر است : Full- Duplex ،ارسال داده به صورت سنکرون توسط سه سیم. عملکرد در حالتهای slave و Master . ارسال ابتدای بیت LSB یا MSB . هفت سرعت قابل برنامه ریزی . ایجاد وقفه های در پایان ارسال. بیدار شدن از مد Idle . امکان دو برابر کردن سرعت ارسال . زمانی که Master پایه SS مربوط به Slave را زمین کند سیکل ارتباطی آغاز می گردد ،در این صورت Master پالسهای کلاک لازم برای انتقال اطلاعات بین Master و Slave را بر روی پایه SCK تولید می کند.داده ها همواره به کمک پایه MOSI از Master به Slave و به کمک پایه MISO از Slave به Master شیفت می یابند.در پایان هربسته از داده ها نیز Master ، ماجول Slave را با یک پایه SS با خود سنکرون می کند.در حقیقت با اتصالMaster و Slave رجیسترهای 8 بیتی داده SPI در این دو وسیله یک شیفت رجیستر 16 بیتی را تشکیل می دهند که هربار محتویات آن به صورت چرخشی یک واحد شیفت می یابد،بنابراین در صورتی که محتویات این رجیستر 8 بار شیفت پیدا کند ، محتویات رجیستر های داده MasterوSlave با یک دیگر تعویض می گردند. SPI درحالت ارسال یک بافر و در حالت دریافت دو بافر دارد . این بدان معنی است که تا زمانی که عمل شیفت کامل نشود، نمی توان داده دیگری را برای ارسال در داخل رجیستر داده SPI نوشت . در زمان دریافت نیز باید قبل از رسیدن کارکتر بعدی ، کارکتر دریافت شده از داخل رجیستر داده SPI خوانده شود، در غیر این صورت بایت اول از بین خواهد رفت. در حالت Slave ، واحد کنترل SPI سیگنال ورودی از پایه SCK را نمونه برداری می کند لذا برای اطمینان از نمونه برداری صحیح سیگنال کلاک،فرکانس کلاک SPI نباید از fosc/4 بیشتر گردد . 4 لینک به دیدگاه
ارسال های توصیه شده