فهرست مطالب:

پیکربندی بیت های فیوز میکروکنترلر AVR. ایجاد و بارگذاری در فلش مموری میکروکنترلر برنامه چشمک زن LED: 5 مرحله
پیکربندی بیت های فیوز میکروکنترلر AVR. ایجاد و بارگذاری در فلش مموری میکروکنترلر برنامه چشمک زن LED: 5 مرحله

تصویری: پیکربندی بیت های فیوز میکروکنترلر AVR. ایجاد و بارگذاری در فلش مموری میکروکنترلر برنامه چشمک زن LED: 5 مرحله

تصویری: پیکربندی بیت های فیوز میکروکنترلر AVR. ایجاد و بارگذاری در فلش مموری میکروکنترلر برنامه چشمک زن LED: 5 مرحله
تصویری: AVRDUDE vs HATTEL | پروگرام کردن میکروکنترلرهای AVR با آردینو | تنظیم کلاک میکروها 2024, ژوئن
Anonim
Image
Image

در این حالت ما یک برنامه ساده در کد C ایجاد کرده و آن را در حافظه میکروکنترلر می سوزانیم. ما برنامه خود را می نویسیم و فایل hex را با استفاده از Atmel Studio به عنوان پلت فرم توسعه یکپارچه کامپایل می کنیم. ما بیت های فیوز را پیکربندی کرده و فایل هگز را با استفاده از برنامه نویس و نرم افزار AVRDUDE خود در حافظه میکروکنترلر AVR ATMega328P بارگذاری می کنیم.

AVRDUDE - برنامه ای برای بارگیری و بارگذاری خاطرات روی تراشه میکروکنترلرهای AVR Atmel است. این برنامه می تواند Flash و EEPROM را برنامه ریزی کند و در صورت پشتیبانی از پروتکل برنامه نویسی سریال ، می تواند فیوزها و بیت های قفل را برنامه ریزی کند.

مرحله 1: نوشتن برنامه و کامپایل فایل Hex با استفاده از Atmel Studio

برنامه نویسی کنید و فایل Hex را با استفاده از Atmel Studio کامپایل کنید
برنامه نویسی کنید و فایل Hex را با استفاده از Atmel Studio کامپایل کنید
برنامه نویسی کنید و فایل Hex را با استفاده از Atmel Studio کامپایل کنید
برنامه نویسی کنید و فایل Hex را با استفاده از Atmel Studio کامپایل کنید

اگر Atmel Studio ندارید ، باید آن را بارگیری و نصب کنید:

این پروژه از C استفاده خواهد کرد ، بنابراین گزینه GCC C Executable Project را از لیست الگو انتخاب کنید تا یک پروژه اجرایی برهنه ایجاد شود.

در مرحله بعد ، باید مشخص شود که پروژه برای کدام دستگاه توسعه می یابد. این پروژه برای میکروکنترلر AVR ATMega328P توسعه داده می شود.

کد برنامه را در قسمت Main Source Editor Atmel Studio تایپ کنید. ویرایشگر منبع اصلی - این پنجره ویرایشگر اصلی فایل های منبع در پروژه فعلی است. ویرایشگر دارای قابلیت املا و ویژگی های کامل خودکار است.

1. ما باید به کامپایلر بگوییم که تراشه ما با چه سرعتی کار می کند تا بتواند تاخیرها را به درستی محاسبه کند.

#ifndef F_CPU

#تعریف F_CPU 16000000UL // کنترل فرکانس کریستال کنترل (16 مگاهرتز AVR ATMega328P) #endif

2. ما مقدمه را وارد می کنیم ، جایی که ما اطلاعات شامل سایر فایل ها را قرار می دهیم ، که متغیرها و توابع جهانی را تعریف می کند.

#include // header برای فعال کردن کنترل جریان داده روی پین ها. پین ها ، پورت ها و غیره را تعریف می کند.

#include // header برای فعال کردن عملکرد تاخیری در برنامه

3. بعد از مقدمه تابع main () می آید.

int main (باطل) {

تابع main () منحصر به فرد است و از همه توابع جدا شده است. هر برنامه C باید دقیقاً یک تابع main () داشته باشد. Main () جایی است که AVR هنگام شروع به کار کد شما را اجرا می کند ، بنابراین نقطه ورود برنامه است.

4. پین 0 PORTB را به عنوان خروجی تنظیم کنید.

DDRB = 0b00000001 ؛ // PORTB1 را به عنوان خروجی تنظیم کنید

ما این کار را با نوشتن یک عدد دودویی در ثبت داده جهت داده B انجام می دهیم. ثبت جهت داده B به ما اجازه می دهد تا بیت های ورودی یا خروجی ثبات B را بسازیم. نوشتن 1 آنها را خروجی می کند ، در حالی که 0 صفت آنها را ورودی می کند. با توجه به اینکه یک LED را به عنوان خروجی وصل می کنیم ، یک عدد دودویی می نویسیم و پین 0 PORT B را به عنوان خروجی در می آوریم.

5. حلقه.

در حالی که (1) {

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

6. LED متصل به پورت PB0 را روشن کنید

PORTB = 0b00000001؛ // LED متصل به پورت PB0 را روشن می کند

این خط 1 به PB0 PortB می دهد. PORTB یک سخت افزار ثبت شده در تراشه AVR است که شامل 8 پین ، PB7-PB0 ، از چپ به راست است. قرار دادن 1 در انتها 1 به PB0 می دهد. این PB0 را بالا تنظیم می کند که آن را روشن می کند. بنابراین ، LED متصل به پین PB0 روشن و روشن می شود.

7. تاخیر

_delay_ms (1000) ؛ // تأخیر 1 ثانیه ایجاد می کند

این عبارت یک ثانیه تأخیر ایجاد می کند ، به طوری که LED روشن می شود و دقیقاً 1 ثانیه روشن می ماند.

8. همه پین های B ، از جمله PB0 را خاموش کنید

PORTB = 0b00000000؛ // همه پین های B ، از جمله PB0 را خاموش می کند

این خط همه 8 پایه پورت B را خاموش می کند ، به طوری که حتی PB0 خاموش است ، بنابراین LED خاموش می شود.

9. تأخیر دیگر

_delay_ms (1000) ؛ // تأخیر 1 ثانیه ای دیگر ایجاد می کند

قبل از شروع مجدد حلقه و برخورد مجدد با خط ، که دوباره آن را روشن می کند ، دقیقاً به مدت 1 ثانیه خاموش می شود ، و این کار را دوباره در همه جا تکرار می کند. این امر بی نهایت اتفاق می افتد به طوری که LED مدام روشن و خاموش می شود.

10. دستور بازگشت

}

بازگشت (0) ؛ // این خط هرگز واقعاً به دست نمی آید}

آخرین خط کد ما عبارت بازگشت (0) است. حتی اگر این کد هرگز اجرا نشود ، زیرا یک حلقه نامتناهی وجود دارد که هرگز پایان نمی یابد ، برای برنامه های ما که روی رایانه های رومیزی اجرا می شوند ، مهم است که سیستم عامل بداند که آنها به درستی اجرا شده اند یا خیر. به همین دلیل ، GCC ، کامپایلر ما ، می خواهد هر () اصلی با یک کد بازگشت به پایان برسد. کدهای بازگشتی برای کد AVR ، که مستقل از هر سیستم عامل پشتیبانی کننده است ، نیازی ندارند. با این وجود ، اگر کامپایلر را با بازگشت () خاتمه ندهید ، کامپایلر هشدار می دهد.

آخرین مرحله ساخت پروژه است. این به معنی جمع آوری و در نهایت پیوند دادن تمام فایل های شی برای تولید فایل اجرایی (.hex) است. این فایل هگز در داخل پوشه Debug ایجاد می شود که در داخل پوشه Project قرار دارد. این فایل شش ضلعی آماده بارگیری در تراشه میکروکنترلر است.

مرحله 2: تغییر پیکربندی پیش فرض بیت های فیوز کنترلر میکرو

تغییر تنظیمات پیش فرض بیت های فیوز کنترلر میکرو
تغییر تنظیمات پیش فرض بیت های فیوز کنترلر میکرو
تغییر تنظیمات پیش فرض بیت های فیوز کنترلر میکرو
تغییر تنظیمات پیش فرض بیت های فیوز کنترلر میکرو
تغییر تنظیمات پیش فرض بیت های فیوز کنترلر میکرو
تغییر تنظیمات پیش فرض بیت های فیوز کنترلر میکرو

مهم است که به خاطر داشته باشید که برخی از فیوزها می توانند برای قفل کردن جنبه های خاصی از تراشه استفاده شوند و به طور بالقوه می توانند آن را آجر (غیر قابل استفاده) کنند

در مجموع 19 بیت فیوز وجود دارد که در ATmega328P استفاده می شوند و به سه بایت فیوز متفاوت تقسیم می شوند. سه بیت از فیوزها در "Extended Fuse Byte" ، هشت مورد در "Fuse High Byte" و هشت مورد دیگر در "Fuse Low Byte" قرار دارند. یک بایت چهارم نیز وجود دارد که برای برنامه ریزی بیت های قفل استفاده می شود.

هر بایت 8 بیت است و هر بیت یک تنظیم یا پرچم جداگانه است. وقتی در مورد تنظیمات ، نه تنظیمات ، برنامه نویسی ، فیوزهای برنامه ریزی شده صحبت می کنیم ، در واقع از باینری استفاده می کنیم. 1 به معنای تنظیم نشده ، برنامه نویسی شده و صفر به معنی تنظیم شده ، برنامه ریزی شده است. هنگام برنامه نویسی فیوزها می توانید از نماد دوتایی یا معمولاً نماد هگزادسیمال استفاده کنید.

تراشه های ATmega 328P دارای نوسان ساز RC با فرکانس 8 مگاهرتز هستند. تراشه های جدید با این مجموعه به عنوان منبع ساعت و فیوز CKDIV8 فعال می شوند و در نتیجه یک ساعت سیستم 1 مگاهرتز ارسال می شود. زمان راه اندازی بر روی حداکثر تنظیم شده و مهلت زمانی فعال است.

تراشه های جدید ATMega 328P به طور کلی دارای تنظیمات فیوز زیر هستند:

فیوز کم = 0x62 (0b01100010)

فیوز بالا = 0xD9 (0b11011001)

فیوز توسعه یافته = 0xFF (0b11111111)

ما از تراشه ATmega 328 با کریستال خارجی 16 مگاهرتز استفاده خواهیم کرد. بنابراین ، ما باید بیت های "فیوز کم بایت" را بر این اساس برنامه ریزی کنیم.

1. بیت های 3-0 انتخاب نوسان ساز را کنترل می کنند و تنظیم پیش فرض 0010 استفاده از نوسان ساز داخلی RC کالیبره شده است که ما نمی خواهیم. ما می خواهیم عملکرد نوسان ساز بلوری از 8.0 تا 16.0 مگاهرتز باشد ، بنابراین بیت های 3-1 (CKSEL [3: 1]) باید روی 111 تنظیم شود.

2. بیت های 5 و 4 زمان راه اندازی را کنترل می کنند و تنظیم پیش فرض 10 برای تاخیر راه اندازی شش سیکل کلاک از زمان خاموش شدن و ذخیره انرژی ، به علاوه تأخیر راه اندازی اضافی 14 چرخه کلاک به اضافه 65 میلی ثانیه از راه اندازی مجدد است.

برای اینکه بتوانیم از نوسان ساز کریستالی کم استفاده کنیم ، حداکثر تاخیر ممکن را 16000 دور کلاک از زمان خاموش و کاهش مصرف برق می خواهیم ، بنابراین SUT [1] باید روی 1 تنظیم شود ، بعلاوه تاخیر بیشتر در راه اندازی از 14 چرخه ساعت به اضافه 65 میلی ثانیه از تنظیم مجدد ، بنابراین SUT [0] باید روی 1 تنظیم شود. علاوه بر این ، CKSEL [0] باید روی 1 تنظیم شود.

3. بیت 6 خروجی ساعت را به PORTB0 کنترل می کند ، که ما به آن اهمیت نمی دهیم. بنابراین ، بیت 6 را می توان روی 1 تنظیم کرد.

4- بیت 7 عملیات تقسیم بر 8 را کنترل می کند و تنظیمات پیش فرض 0 این ویژگی را فعال کرده است ، که ما نمی خواهیم. بنابراین ، بیت 7 باید از 0 به 1 تغییر کند.

بنابراین ، Fuse Low Byte جدید باید 11111111 باشد که در نماد هگزادسیمال 0xFF است

برای برنامه ریزی بیت های "فیوز کم بایت" می توانیم از برنامه نویس خود (https://www.instructables.com/id/ISP-Programmer-fo…) و نرم افزار AVRDUDE استفاده کنیم. AVRDUDE یک ابزار خط فرمان است که برای بارگیری و بارگیری از میکروکنترلرهای Atmel استفاده می شود.

AVRDUDE را بارگیری کنید:

اول ، ما باید برنامه نویس خود را به فایل پیکربندی AVRDUDE اضافه کنیم. در Windows فایل پیکربندی معمولاً در همان محل فایل اجرایی AVRDUDE قرار دارد.

چسباندن متن در فایل پیکربندی avrdude.conf:

# ISPProgv1

برنامه نویس id = "ISPProgv1"؛ desc = "ضربه زدن پورت سریال ، تنظیم مجدد = dtr sck = rts mosi = txd miso = cts"؛ type = "serbb"؛ connection_type = سریال ؛ بازنشانی = 4 ؛ sck = 7 ؛ mosi = 3 ؛ miso = 8 ؛ ؛

طبق برنامه ، قبل از شروع AVRDUDE ، ما باید میکروکنترلر را به برنامه نویس متصل کنیم

پنجره اعلان DOS را باز کنید.

1. برای مشاهده لیست برنامه نویسانی که avrdude پشتیبانی می کند ، دستور avrdude -c c را تایپ کنید. اگر همه چیز خوب است ، لیست باید دارای شناسه برنامه نویس "ISPProgv1" باشد

2. برای مشاهده لیست دستگاه های Atmel که از avrdude پشتیبانی می شود ، دستور avrdude -c ISPProgv1 را تایپ کنید. این لیست باید دارای دستگاه m328p برای Atmel ATMega 328P باشد.

سپس ، avrdude -c ISPProgv1 –p m328p را تایپ کنید ، دستور به avrdude بگوید که از چه برنامه نویسی استفاده می شود و چه میکروکنترلر Atmel متصل است. این نشانگر ATmega328P را با نماد هگزادسیمال: 0x1e950f ارائه می دهد. این برنامه نویسی بیت فیوز را در حال حاضر در ATmega328P همچنین با نماد هگزادسیمال ارائه می دهد. در این حالت ، بایت های فیوز در هر پیش فرض کارخانه برنامه ریزی می شوند.

سپس دستور avrdude -c ISPProgv1 –p m328p –U lfuse: w: 0xFF: m را تایپ کنید ، این دستور است که به avrdude بگویید از چه برنامه نویسی استفاده می شود و چه میکروکنترلر Atmel متصل است و Fuse Low Byte را به 0xFF تغییر دهید.

در حال حاضر سیگنال ساعت باید از نوسان ساز کریستال با قدرت کم باشد.

مرحله 3: سوزاندن برنامه در حافظه میکروکنترلر ATMega328P

رایت برنامه در حافظه میکروکنترلر ATMega328P
رایت برنامه در حافظه میکروکنترلر ATMega328P
رایت برنامه در حافظه میکروکنترلر ATMega328P
رایت برنامه در حافظه میکروکنترلر ATMega328P

ابتدا فایل hex برنامه ای را که در ابتدای دستور ساختیم در فهرست AVRDUDE کپی کنید.

سپس ، در پنجره DOS prompt فرمان avrdude –c ISPProgv1 –p m328p –u –U flash را تایپ کنید: w: [نام فایل هگز شما]

دستور فایل هگز را در حافظه میکروکنترلر می نویسد. در حال حاضر ، میکروکنترلر مطابق دستورالعمل برنامه ما کار می کند. بگذار چک کنیم!

مرحله 4: عملکرد میکروکنترلر را مطابق دستورالعمل برنامه ما بررسی کنید

مطابق دستورالعمل برنامه ما ، عملکرد میکروکنترلر را بررسی کنید
مطابق دستورالعمل برنامه ما ، عملکرد میکروکنترلر را بررسی کنید
مطابق دستورالعمل برنامه ما ، عملکرد میکروکنترلر را بررسی کنید
مطابق دستورالعمل برنامه ما ، عملکرد میکروکنترلر را بررسی کنید
مطابق دستورالعمل برنامه ما ، عملکرد میکروکنترلر را بررسی کنید
مطابق دستورالعمل برنامه ما ، عملکرد میکروکنترلر را بررسی کنید

قطعات را مطابق نمودار شماتیک مدار LED چشمک زن AVR متصل کنید

اول ، ما مانند تمام مدارهای AVR به برق نیاز داریم. برای عملکرد تراشه AVR حدود 5 ولت برق کافی است. این را می توانید از باتری یا منبع تغذیه DC دریافت کنید. ما پین +5 ولت را به پین 7 وصل می کنیم و پین 8 را روی تخته نان به زمین وصل می کنیم. در بین هر دو پین ، یک خازن سرامیکی 0.1μF قرار می دهیم تا قدرت منبع تغذیه را هموار کند تا تراشه AVR یک خط برق صاف دریافت کند.

از مقاومت 10KΩ برای ارائه تنظیم مجدد برق (POR) به دستگاه استفاده می شود. هنگامی که برق روشن است ، ولتاژ روی خازن صفر می شود بنابراین دستگاه بازنشانی می شود (از آنجا که تنظیم مجدد کم است) ، سپس خازن به VCC شارژ می شود و تنظیم مجدد غیرفعال می شود.

ما آند LED خود را به پین AVR PB0 متصل می کنیم. این پین 14 ATMega328P است. از آنجا که یک LED است ، ما می خواهیم جریان جاری به LED را محدود کنیم تا نسوزد. به همین دلیل است که ما یک مقاومت 330Ω را به صورت سری با LED قرار می دهیم. کاتد LED به زمین متصل می شود.

کریستال 16 مگاهرتز برای تهیه ساعت برای میکروکنترلر Atmega328 و خازن های 22pF برای تثبیت عملکرد کریستال استفاده می شود.

اینها همه اتصالات لازم برای روشن کردن LED است. منبع تغذیه

خوب. LED با یک ثانیه تأخیر چشمک می زند. کار میکروکنترلر با وظایف ما مطابقت دارد

مرحله 5: نتیجه گیری

مسلماً این تنها یک روش طولانی برای چشمک زدن یک LED بود ، اما حقیقت این است که شما موانع اصلی را با موفقیت برطرف کرده اید: ایجاد یک بستر سخت افزاری برای برنامه نویسی میکروکنترلر AVR ، استفاده از Atmel Studio به عنوان پلت فرم توسعه یکپارچه ، استفاده از AVRDUDE به عنوان نرم افزاری برای پیکربندی و برنامه نویسی میکروکنترلر AVR

اگر می خواهید در پروژه های میکروکنترلرهای اصلی من به روز باشید ، در YouTube من مشترک شوید! تماشای و به اشتراک گذاری فیلم های من راهی برای حمایت از کاری است که انجام می دهم

در کانال YouTube FOG مشترک شوید

توصیه شده: