توضیحات

icon فایل هایی که با لینک مستقیم در سایت قرار گرفته اند بدون پسورد می باشند.

استفاده از EEPROM داخلی با Bascom AVR

E0

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

 

در این پروژه قصد داریم تا با ارئه یک نمونه آموزش نحوه استفاده از حافظه داخلی میکروکنترلر AVR را با استفاده از کامپایلر Bascom AVR آموزش دهیم.

 

برای این کار می توان از دستور Writeeeprom استفاده کرد. در زمان استفاده از این دستور باید مکان حافظه که قرار است اطلاعات در آن ذخیره شود نیز داده شود. یعنی مدیریت مکان های حافظه جهت ذخیره سازی اطلاعات به دست ما انجام می شود و باید دقت کرد تا در زمان آدرس دهی هم پوشانی رخ ندهد.

جهت روشن تر شدن این مسئله، سورس زیر بر روی میکرو کنترلر تست شد:

E1

وضعیت حافظه EEPROM از قرار زیر شد:

E2

چون متغییر مرد نظر از نوع word و با طول ۲ بایت می باشد پس باید حواسمان باشد که در صورت استفاده مجدد از دستور Writeeeprom ، باید اطلاعات را به خانه های غیر از ۰۲ و ۰۳ هدایت کنیم.

 

در صورتی که در آدرس دهی خانه های حافظه اشتباه کنیم اطلاعت ذخیره شده نا معتبر خواهند شد. پیشنهاد ما تغییر روش در استفاده از حافظه EEPROM می باشد. روشی موثر که این بار مدیریت مکان ها ذخیره سازی اطلاعات به صورت اتوماتیک توسط خود کامپایلر انجام می شود و ضریب اطمینان ۱۰۰% دارد.

بهتر است در زمان تعریف یک متغییر از نوع معمولی ( SRAM ) همان متغییر را با یک نام مشابه از جنس EEPROM نیز تعریف شود.

E3

 

با روش بالا، خود کامپایلر اولین جای خالی را برای ذخیره متغییر استفاده میکند و چون این فرایند توسط خود کامپایلر انجام می شود، احتمال خطا صفر می باشد.

 

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

 

برای درک بهتر این مسئله یک مثال آموزش تهیه شده است که در نرم افزار پروتیوس نیز شبیه سازی شده است. با استفاده از کلید های UP و DOWNE میتوان مقدار متغیر I را کم و زیاد کرد. مقدار این متغیر با ریست کردن میکروکنترلر از بین نمیرود.

 

برنامه این پروژه به روش ساب روتین نوشته شده است و جنبه آموزشی سورس این پروژه شامل نحوه کد نویسی نیز می شود.

جهت مشاهده سورس این پروژه اینجا کلیک کنید.

 

اهداف آموزشی:

       • آشنایی با حافظه EEPROM داخلی میکروکنترلر

.        • آشنایی با روش ذخیره کردن و خواندن اطلاعت از حافظه EEPROM داخلی میکروکنترلر AVR

.        • آشنایی با روش برنامه نویسی ساب روتین

 

محتویات فایل دانلود:

.        • سورس برنامه با کامپایلر Bascom AVR

.        • شبیه سازی پروژه با نرم افزار پروتیوس

 

جهت دانلود فایل های این پروژه اینجا کلیک کنید. ( ۷۸KB )

 

تهیه و تنظیم: علیرضا جودی

 

لینک منبع:

http://projects.m32.ir/2508/

 

خواننده گرامی : برای تهیه هر یک از این مقالات زمان ، انرژی و هزینه بسیار زیادی صرف می شود. در حق ما لطف نموده و مطالب را بدون هیچ تغییر و با ذکر منبع انتشار دهید. رعایت کپی رایت باعث انگیزه و امید تولید کننده های مطالب آموزشی میشود. با سپاس از خوانندگان محترم و با امید به روزهای بهتر
 
 

دی ۷ام, ۱۳۹۲ | 7,316 views | دسته: Alphanumeric LCD، Bascom AVR
برچسب ها: ، ،


نظرات دیگران در مورد این مطلب:
reza :

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

Navid Mohajeri :

اقا در حد تیم مللی آلمان مطلب خوب و کافی بود. دستت طلا <3

محمد :

اقا اگه متغیر هایی که خواستیم ذخیره کنیم از نوع اعشاری باشند چی ؟ اونوقت باید چیکارکرد؟

 

پاسخ:

تفاوتی در الگوی معرفی شده نخواهد داشت. به مثلا زیر توجه نمایید:

untitled

محمدن :

متغییر های اعشاری به همون روشی که گفتین جایگزین کردم ولی انگاردرخواندن دچارمشکل می شوند.ونشون داده نمی شوند.احتمالا متغیر های نوع اعشارباید قلق خاصی داشته باشند. .متغیرهای غیر اعشار مشکلی ندارند.

 

پاسخ:

دقیقا همین روش برای متغییر های اعشاری نیز باید جوابگو باشد. لطفا در برنامه آموزش داده شده دو خط زیر را جایگزین تعریف قبلی متغییر I نمایید:

Dim I As Single
Dim I_eerom As Eram Single

یه دانشجو میگه :

سلام ببخشید میشه کاری کرد که با زدن کلید به صورت نامحدود افزایش پیدا نکنه مثلا تا ۱۰ بره بعد پروژهایی که گذاشته اید مثل همین توضیح داده اید

یه دانشجو میگه :

سلام ببخشید میشه کاری کرد که تا ۲۰ بیشتر نشمره

 
پاسخ:

untitled

mehran amn :

ممنون از وبسایت خوبتون، واقعا کمک کننده س

کامران :

سلام چطور میشه در حافطه eeprom میکرو جستجو کرد؟ میشه دستورش رو بگید.

کامران :

هم داخلی هم خارجی؟ممنون

majid :

سلام دوست عزیز من یک سیستم قفل رمز با تعداد کاربر زیاد میخوام چطوری میتونم رمز های مختلف در حافظه ذخیره کنم؟
دعات میکنم جواب بدی.

امید :

واقع ممنون.خیلی به کارم اومد.

mostafa :

سلام چطوری میتونم متغیر رو بودن اینکه تو حلقه بندازم با ۰ کردن کلید افزایش بدم
یعنی هر بار که کلید رو میزنم و دوباره یک میشه متغیر افزایش پیدا کنه
مرسی

 

پاسخ:
لطفا کد زیر را بررسی کنید:

Dim Status_key_set As Bit
Dim Z As Single

If Pinc.0 = 0 And Status_key_set = 0 Then
Status_key_set = 1
Incr Z
End If
If Pinc.0 = 1 Then Status_key_set = 0

با فشردن کلید، مقدار Z فقط یک واحد افزایش می یابد. برای افزایش بعدی حتما باید کلید را رها کرده و مجددا فشار دهید.

امید وارم مد نظر شما همین روال بوده باشد.

mostafa :

سلام خیلی ممنونم و تشکر میکنم از شما

میشه اینم بگید که کجاش مورد داره مرسی

Dim C1 As Bit , C2 As Bit , H As Byte,Z A as byte

H = 0
Z = 0

Do

Waitms 10

If Pinb.0 = 0 Then : C1 = 1 : Else : C1 = 0 : End If

If Pinb.1 = 0 Then : C2 = 1 : Else : C2 = 0 : End If

H = C1 + C2

If H = 1 Then
A = 1

Else

A = 0

End If

if A=1 then
incr Z

DO
if A=0 then Exit DO
loop

End if

 

Loop

mostafa :

ببخشید اون اولی رو اشتب نوشتم

Dim C1 As Bit , C2 As Bit , H As Byte,Z A as byte

H = 0
Z = 0

Do

Waitms 10

If Pinb.0 = 0 Then : C1 = 1 : Else : C1 = 0 : End If

If Pinb.1 = 0 Then : C2 = 1 : Else : C2 = 0 : End If

H = C1 + C2

 

if H=1 then
incr Z

DO
if H=0 then Exit DO
loop

End if

Loop

 
پاسخ:
روال اجرای برنامه در قسمت زیر برای همیشه متوقف خواهد شد:
DO
if H=0 then Exit DO
loop
گزینه های مربوط به تغییر متغییر H در این حلقه بررسی نمی شوند. پس به محض یک شدن H دیگر راهی برای خروج از حلقه وجود ندارد. این مورد اصلاح شود.

 

mostafa :

سلام راستش هر کاری میکنم نمیشه و داخل حلقه گیر میافته

خواهشا اگه امکانش هس دستور کلی رو بنویسید

بسیار سپاسگزارم از شما و سایت خوبتون


افزودن نظر: