برق. قدرت. کنترل. الکترونیک. مخابرات. تاسیسات.

دایره المعارف تاسیسات برق (اطلاعات عمومی برق)

مقدمه:
گاهی موارد یک سری کد و DATA داریم که علاقمندیم آنها را در حافظه eeprom ذخیره کنیم ولی بدلیل عواملی مثل عدم گنجایش آنها در حافظه  eeprom داخلی و یا اینکه نمی خواهیم ظرفیت حافظه eeprom داخلی میکرو را بیهوده اشغال کنیم وعوامل دیگر ... دوست داریم از یک حافظه eeprom خارجی استفاده کنیم.

ic های eeprom انواع مختلفی دارند که از نظر ظرفیت و گنجایش data و همچنین نحوه آدرس دهی در طبقه بندی های مختلف قرار می گیرند و معمولا از رنج 1kb شروع می شوند.
خیلی از دوستان وکسانی که تازه کار با میکروکنترلرهای avr را شروع کرده اند در زمینه استفاده از این نوع حافظه دچار اشکال هستند و محور اشکالات آنها موارد زیر است:

1- ازچه پروتکلی برای اتصال میکرو به حافظه خارجی استفاده کنیم؟
2- ساپورت نشدن بعضی از حافظه ها توسط avr .
3- ذخیره شدن دیتای جدید بر روی دیتای قبلی.
4- عدم خواندن دیتای صحیح از حافظه eeprom .

در این پست که جنبه آموزشی دارد من توضیحات مفصل و کارگشایی رادر این باره آموزش می دهم و به عنوان مثال یک حافظه eeprom را به یکی از تراشه های خانواده avr متصل می کنیم و یک برنامه هم می نویسم که تمام معایب بالا را برطرف کند.
برای اتصال avr به ادوات و تراشه ها و حافظه ها یک سری پروتکل ارتباطی نظیر: spi,usart.twi,i2c,... وجود دارد که پروتکل I2C یکی از بهترین این پروتکلها برای این کار است.
این پروتکل (I2C)  در اوایل سال 1980 میلادی توسط شرکت فیلیپس ابداع شد و بسرعت معروف شد برای کسب اطلاعات بیشتر درباره این پروتکل میتوانید به دانشنامه ویکیپدیا ویا سرچ در موتورهای جستجو گربپردازید.

ویژگی های این پروتکل (I2C) در میکرو کنترلر avr بشرح زیر است:

1- اطلاعات به صورت سریال ارسال می گردد.
2- سنکرون بودن اطلاعات ارسالی (یعنی به همراه اطلاعات پالس ساعت هم فرستاده می شود).
3- کانال ارتباطی 2 سیمه (برای اتصال بین میکرو و حافظه eeprom از دو تکه سیم استفاده می شود) دو پایه ای از avr که برای اینکار استفاده می شود در اصطلاح فنی SDA , SCL نام می گیرند.
4- حداکثر سرعت نرخ ارسال اطلاعات در این پروتکل برابر 400kb/sec (کیلو بایت بر ثانیه) می باشد.
5- خطوط SDA , SCL میکرکنترلر avr به صورت open drain ساخته شده اند پس باید از دو مقاومت بالا کشنده ولتاژ یا در اصطلاح pull up در خروجی این پایه ها استفاده شود. در ضمن مقدار این مقاومتها وابسته به دو پارامتر " سرعت تبادل (نرخ ارسال) و طول گذرگاه " است.


برای وابستگی مقاومت pull up به سرعت اطلاعات شرکت سازنده میکروکنترلرavr یک جدول داده که من آنرا از کاتالوگ اش استخراج کردم که به صورت زیر است:

400KB/SEC 100KB/SEC 100KB/SEC> Speed
1.0K 2.2K 4.7K Resistor

همانطور که مشاهده می کنید با افزایش سر عت تبادل اطلاعات از مقدار مقاومت های pull up کاسته می شود.
از آنجاییکه استفاده از پروتکل i2c دارای پیچیدگی های زیادی است و استفاده مستقیم با رجیسترهای این واحد قدری مشکل است از توابع کتابخانه که نرم افزار Code vision برای این واحد قرار داده است استفاده خواهیم نمود. و این تابع باید در ابتدای برنامه ودر فسمت فایل های سرآیند ( header ) معرفی شود.

تراشه 24C04 :

شکل زیر پایه های این آی سی را نشان می دهد:


درمورد استفاده از این تراشه باید بگویم یک سری تنظیمات و ریزه کاری دارد که برای اتصال به میکرو باید در نظر گرفته شوند :
پایه های ۴ و  ۸ به زمین و vcc متصل می شوند.پایه های شماره 2 و 3 پایه های فعال ساز تراشه هستند که با توجه به جدول زیر عملکرد تراشه را تحت تاثیر قرار می دهند:
 

RW

Bloak Select

Chip Enable

Device Code

 

b0

b1

b2

b3

b4

b5

b6

b7

Bit

RW

A8

E1

E2

0

1

0

1

Device Selec


همان طور که از جدول پیداست ورودی های توانا ساز E1 و E2 به پایه RW (پایه7) نیز بستگی دارند که این پایه را با مقدار VL یا VH باید تعریف کنیم به عبارت دیگر میتوان با 0 و 1 کردن این بیت  به همراه ورودی های تواناساز (b3,b2) عملکرد تراشه را تعریف کرد.
پایه شماره 7 : این پایه مربوط به PROTECT تراشه هست با این تراشه می توانیم عمل نوشتن در تراشه را کنترل کنیم.
بیت های b4 تا b7 در اختیار ما نیستند و با مقدار 1010 برنامه ریزی شذه اند.
پایه های 5 و 6 بترتیب پایه های SDA و SCL هستند که جهت اتصال به میکرو استفاده می شوند. باز هم تاکید می کنم توسط دو مقاومت باید PULL UP شوند.

برای آشنایی با این تراشه بهتر است datasheet آن را مطالعه کنید. آنجا بطور کامل و مفصل در این باره صحبت شده است.

سخت افزار:

شکل زیر نحوه اتصال میکرو کنترلر AVR - Atmega8 را به یک حافظه eeprom خارجی نشان میدهد:


همان طور که از شکل پیداست  توسط دو مقاومت 1 کیلو اهم pull up گذرگاه i2c را آماده بهره برداری کرده ایم و برای نمایش اطلاعات در خروجی از یک سری LED در PORTD استفاده کرده ایم وبرای کنترل جریان LED ها از 8 مقاومت 100 اهم استفاده کرده ایم .در ضمن کلاک پالس بصورت خارجی و توسط کریستال 8MHZ به مدار تزریق می شود.
حافظه EEPROM مورد ااستفاده آی سی 24C04 می باشد که یک حافظه باظرفیت 4KB  می باشد دقت کنید از آی سی 24C01 هم می توانید استفاده کنید که ظرفیت آن 1KB می باشد.
در ضمن پایه شماره 1 تراشه 24c04 هم بصورت(nc) و بدون استفاده است.
اما در مورد نرم افزار وکدهای برنامه که با نرم افزار Code vision  وبرنامه نویسی به زبان C نوشته شده اند.در این برنامه از دو زیر برنامه یا تابع استفاده شده است که عملیات خواندن و نوشتن از حافظه EEPROM خارجی را بر عهده دارند بهتر است ابتدا برنامه را ببینیم .
 
برنامه:
 


در ابتدای برنامه و در قسمت HEADER ها نوع تراشه و پایه هایی از میکروکنترلر که قرار است به حافظه متصل شوند (SDA , SCL) را معلوم می کنیم همچنین توابع کتابخانه ای مورد استفاده را در این قسمت معرفی می کنیم .
سپس یک ثابت به نام EEPROM_BUS_ADDRESS تعریف می کنیم و مقدار آنرا 0XA0 قرار می دهیم دقت کنید این ثابت برنامه است و مقدار آن تغییر نمی یابد همانطور که در فسمت معرفی تراشه 24C04 گفتیم این حافظه دارای 8 بیت کنترلی است(b0  تا b7) که باید برنامه ریزی شوند با ارسال عدد هگز 0XA0 به تراشه می توان این بیت های کنترلی را بر نامه ریزی کرد.
سپس دو تابع با نامهای eeprom_read و eeprom_write تعریف کرده ایم که مخصوص خواندن و نوشتن اطلاعات در EEPROM خارجی هستند دقت شود این توابع از آن دسته توابعی هستند که یک مقدار و عدد را دریافت و ارسال می کنند.
سپس به بدنه اصلی برنامه می رسیم که مخصوص پیکر بندی تراشه AVR است و رجیسترها و پارامترها را در این قسمت مقدار دهی می کنیم و سپس یک حلقه با تکرا بی نهایت برای انجام متوالی دستورات ایجاد می کنیم.

طرز کار برنامه :

در این برنامه مقدار عدی هگز 0XAA را ابتدا در آدرس 0X00 از حافظه خارجی می نویسیم سپس با مراجعه به آدرس 0X00 از حافظه خارجی اطلاعات ذخیره شده را می خوانیم (که باید همان مقدار هگز 0XAA باشد) ونتیجه را در خروجی PORTD  نمایش می دهیم در حقیقت یک برنامه برای تست عملکرد میکروکنترلر و تراشه 24C04 نوشته ایم شما می توانید هر مقدار و هر آدرسی که دلخواهتان هست را انتخاب کنید.


در انتها ذکر یک نکته فنی باقی می ماند که بسیار مهم است و من هنگام کار با AVR آن را بصورت تجربی نیز درک کرده ام و آن حالت گذرا و لحظه اولیه در مدارات میکرو کنترلی است زمانی که تجهیزاتی مثل تراشه های حافظه به آن ها متصل است اگر حالت گذرا پیش آید باعث می شود آنها درست مقدار دهی و ساپورت نشوند بهتر است از مدار RESET شکل زیر استفاده کنید و توضیحات زیر آن را هم بخوانید:

مدار RESET :

مدارRESET علاوه بر اینکه عمل راه اندازی مجدد را برعهده دارد مزایا یی نیز دارد که عبارت است از:

۱) در هنگام اتصال برق باعث می شود تا برای چندمیلی ثانیه مبکرو کنترلر RESET گردد( همان طورکه می دانیم میکرو کنترلر دارای پارامترها و ثبات ها وشمارنده هاو....میباشد ومقدار آنها ممکن است در لحظه اولیه تغییریابد مدار RESET از این پدیده جلوگیری می کند.)

۲) ممکن است در مدارهایی که طراحی می کنیم برای نویز گیری در کنارخطوط تغذیه از خازنهایی استفاذه کنیم که باعث می شوند ظرفیت خازنی خط افزایش یابد وزمان لازم برای پر شدن این خازن ها بیشترشود مدار RESET باعث می شود زمان لازم برای پر شدن این خازن ها فراهم گردد.

۳) در صورتیکه از تراشه ها و حافظه های جانبی استفاده کنیم ممکن است درلحظه اولیه تغذیه میکرو کنترلر فراهم شود ولی ممکن است تغذیه کافی برای تراشه های جانبی فراهم نشده باشد ومواردی که گفتیم برای آنها پیش آید مدار RESET از این حالت جلوگیری می کند.

به صورت جمع بندی مدار RESET باعث می شود لحظه اول وگذرا سپری شود وبه حالت پایدار برسیم.

باتوجه به مطالب گفته شده در تمامی سخت افزارهای میکرو کنترلری از مدار RESET حتما استفاده کنید!!!!!!

http://www.goldencrownco.blogfa.com

صفحات جانبی

نظرسنجی

    لطفاً نظرات خود را درمورد وبلاگ با اینجانب در میان بگذارید.(iman.sariri@yahoo.com)نتایج تاکنون15000مفید و 125غیرمفید. با سپاس


  • آخرین پستها

آمار وبلاگ

  • کل بازدید :
  • تعداد نویسندگان :
  • تعداد کل پست ها :
  • آخرین بازدید :
  • آخرین بروز رسانی :