جدول المحتويات:

تكوين وحدات بت وحدة التحكم الدقيقة AVR. إنشاء وتحميل برنامج وميض LED في ذاكرة فلاش الخاصة بالمتحكم الدقيق: 5 خطوات
تكوين وحدات بت وحدة التحكم الدقيقة AVR. إنشاء وتحميل برنامج وميض LED في ذاكرة فلاش الخاصة بالمتحكم الدقيق: 5 خطوات

فيديو: تكوين وحدات بت وحدة التحكم الدقيقة AVR. إنشاء وتحميل برنامج وميض LED في ذاكرة فلاش الخاصة بالمتحكم الدقيق: 5 خطوات

فيديو: تكوين وحدات بت وحدة التحكم الدقيقة AVR. إنشاء وتحميل برنامج وميض LED في ذاكرة فلاش الخاصة بالمتحكم الدقيق: 5 خطوات
فيديو: LDmicro 21: تكوين الوضع C و Arduino Mega (برمجة وحدة التحكم الدقيقة باستخدام LDmicro) 2024, يونيو
Anonim
Image
Image

في هذه الحالة ، سننشئ برنامجًا بسيطًا برمز C ونحرقه في ذاكرة وحدة التحكم الدقيقة. سنكتب برنامجنا الخاص ونقوم بتجميع ملف hex ، باستخدام Atmel Studio كمنصة تطوير متكاملة. سنقوم بتكوين بتات الصمامات وتحميل الملف السداسي في ذاكرة متحكم AVR ATMega328P ، باستخدام مبرمجنا الخاص وبرنامج AVRDUDE.

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 القابل للتنفيذ من قائمة القوالب لإنشاء مشروع قابل للتنفيذ.

بعد ذلك ، من الضروري تحديد الجهاز الذي سيتم تطوير المشروع من أجله. سيتم تطوير هذا المشروع لوحدة التحكم الدقيقة AVR ATMega328P.

اكتب كود البرنامج في منطقة Main Source Editor في Atmel Studio. محرر المصدر الرئيسي - هذه النافذة هي المحرر الرئيسي لملفات المصدر في المشروع الحالي. يحتوي المحرر على ميزات التدقيق الإملائي والإكمال التلقائي.

1. يجب أن نخبر المترجم بالسرعة التي تعمل بها الشريحة الخاصة بنا بحيث يمكنه حساب التأخيرات بشكل صحيح.

#ifndef F_CPU

#define F_CPU 16000000UL // إخبار وحدة التحكم بتردد الكريستال (16 ميجا هرتز AVR ATMega328P) #endif

2. نقوم بتضمين المقدمة ، حيث نضع المعلومات المتضمنة من الملفات الأخرى ، والتي تحدد المتغيرات والوظائف العالمية.

# تضمين // رأس لتمكين التحكم في تدفق البيانات عبر المسامير. يحدد المسامير والمنافذ وما إلى ذلك.

# تضمين // رأس لتمكين وظيفة التأخير في البرنامج

3. بعد التمهيد تأتي الوظيفة الرئيسية ().

int main (void) {

الوظيفة الرئيسية () فريدة ومتميزة عن جميع الوظائف الأخرى. يجب أن يحتوي كل برنامج C على وظيفة رئيسية واحدة () بالضبط. 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) ؛ // ينشئ تأخيرًا مدته ثانية واحدة

ينشئ هذا البيان تأخيرًا مدته ثانية واحدة ، بحيث يدور مؤشر LED ويظل مضيئًا لمدة ثانية واحدة بالضبط.

8. قم بإيقاف تشغيل جميع دبابيس B ، بما في ذلك PB0

PORTB = 0b00000000 ؛ // يقوم بإيقاف تشغيل جميع دبابيس B ، بما في ذلك PB0

يقوم هذا الخط بإيقاف تشغيل جميع دبابيس المنفذ B الثمانية ، بحيث يتم إيقاف تشغيل حتى PB0 ، لذلك ينطفئ مؤشر LED.

9. تأخير آخر

_delay_ms (1000) ؛ // يُنشئ تأخيرًا آخر مدته ثانية واحدة

ينطفئ تمامًا لمدة ثانية واحدة ، قبل أن تبدأ الحلقة من جديد وتواجه الخط ، الذي يعيد تشغيله ، ويكرر العملية في كل مكان. يحدث هذا بلا حدود بحيث يومض LED وإيقاف تشغيله باستمرار.

10. بيان العودة

}

عودة (0) ؛ // لم يتم الوصول إلى هذا الخط مطلقًا}

السطر الأخير من الكود لدينا هو عبارة return (0). على الرغم من عدم تنفيذ هذا الرمز أبدًا ، نظرًا لوجود حلقة لا نهائية لا تنتهي أبدًا ، بالنسبة لبرامجنا التي تعمل على أجهزة كمبيوتر سطح المكتب ، من المهم لنظام التشغيل معرفة ما إذا كانت تعمل بشكل صحيح أم لا. لهذا السبب ، يريد برنامج التحويل البرمجي GCC ، الخاص بنا ، أن ينتهي كل مفتاح رئيسي () برمز إرجاع. رموز الإرجاع غير ضرورية لرمز AVR ، الذي يعمل بشكل مستقل عن أي نظام تشغيل داعم ؛ ومع ذلك ، فإن المترجم سيصدر تحذيرًا إذا لم تنتهي main مع return ().

الخطوة الأخيرة هي بناء المشروع. وهذا يعني تجميع جميع ملفات الكائنات وربطها أخيرًا لإنشاء ملف الملف القابل للتنفيذ (.hex). يتم إنشاء هذا الملف السداسي العشري داخل المجلد Debug الموجود داخل مجلد المشروع. هذا الملف السداسي جاهز للتحميل في شريحة وحدة التحكم الدقيقة.

الخطوة 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 مع بلورة 16MHz خارجية. لذلك ، نحتاج إلى برمجة وحدات "Fuse Low Byte" وفقًا لذلك.

1. تتحكم البتات 3-0 في اختيار المذبذب ، والإعداد الافتراضي 0010 هو استخدام مذبذب RC الداخلي المعاير ، وهو ما لا نريده. نريد تشغيل مذبذب بلوري منخفض الطاقة من 8.0 إلى 16.0 ميجاهرتز ، لذلك يجب ضبط البتات 3-1 (CKSEL [3: 1]) على 111.

تتحكم البتتان 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 والإعداد الافتراضي للصفر تم تمكين الميزة التي لا نريدها. لذلك ، يجب تغيير البتة 7 من 0 إلى 1.

لذلك ، يجب أن يكون Fuse Low Byte الجديد 11111111 والذي ، بالتدوين السداسي العشري ، هو 0xFF

لبرمجة وحدات بت من "Fuse Low Byte" يمكننا استخدام مبرمجنا (https://www.instructables.com/id/ISP-Programmer-fo…) وبرنامج AVRDUDE. AVRDUDE هي أداة مساعدة لسطر الأوامر تُستخدم للتنزيل من ميكروكنترولر Atmel وتحميلها.

تنزيل AVRDUDE:

أولاً ، يجب أن نضيف وصف مبرمجنا إلى ملف التكوين الخاص بـ AVRDUDE. في نظام التشغيل Windows ، يكون ملف التكوين عادةً في نفس موقع الملف القابل للتنفيذ لـ AVRDUDE.

لصق النص في ملف التكوين avrdude.conf:

# ISPProgv1

معرف المبرمج = "ISPProgv1" ؛ desc = "ضرب المنفذ التسلسلي ، إعادة تعيين = dtr sck = rts mosi = txd miso = cts" ؛ اكتب = "serbb" ؛ نوع الاتصال = مسلسل ؛ إعادة تعيين = 4 ؛ sck = 7 ؛ موزي = 3 ؛ ميسو = 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 الأمر avrdude –c ISPProgv1 –p m328p –u –U flash: w: [اسم ملف hex الخاص بك]

يقوم الأمر بكتابة ملف سداسي عشري في ذاكرة وحدة التحكم الدقيقة. الآن ، يعمل الميكروكونترولر وفقًا لتعليمات برنامجنا. دعونا التحقق من ذلك!

الخطوة 4: تحقق من عمل وحدة التحكم الدقيقة وفقًا لتعليمات برنامجنا

تحقق من عمل وحدة التحكم الدقيقة وفقًا لتعليمات برنامجنا
تحقق من عمل وحدة التحكم الدقيقة وفقًا لتعليمات برنامجنا
تحقق من عمل وحدة التحكم الدقيقة وفقًا لتعليمات برنامجنا
تحقق من عمل وحدة التحكم الدقيقة وفقًا لتعليمات برنامجنا
تحقق من عمل وحدة التحكم الدقيقة وفقًا لتعليمات برنامجنا
تحقق من عمل وحدة التحكم الدقيقة وفقًا لتعليمات برنامجنا

قم بتوصيل المكونات وفقًا للرسم التخطيطي لدائرة AVR Blinking LED

أولاً ، نحتاج إلى الطاقة ، كما تفعل جميع دارات AVR. حوالي 5 فولت من الطاقة كافية لتشغيل شريحة AVR. يمكنك الحصول عليها إما من البطاريات أو من مصدر طاقة تيار مستمر. نقوم بتوصيل + 5 فولت من الطاقة بالدبوس 7 وربط السن 8 بالأرض على اللوح. بين كلا المسامير ، نضع مكثف سيراميك 0.1 درجة فهرنهايت لتنعيم طاقة مصدر الطاقة بحيث تحصل شريحة AVR على خط طاقة سلس.

يتم استخدام المقاوم 10KΩ لتوفير إعادة تشغيل الطاقة (POR) للجهاز. عند تشغيل الطاقة ، سيكون الجهد عبر المكثف صفريًا ، لذا تتم إعادة ضبط الجهاز (نظرًا لأن إعادة التعيين نشطة منخفضة) ، ثم يتم شحن المكثف إلى VCC وسيتم تعطيل إعادة الضبط.

نقوم بتوصيل أنود LED الخاص بنا بـ AVR pin PB0. هذا هو دبوس 14 من ATMega328P. نظرًا لأنه مصباح LED ، فإننا نريد الحد من تدفق التيار إلى LED حتى لا يحترق. هذا هو السبب في أننا نضع المقاوم 330Ω في سلسلة مع LED. يتم توصيل كاثود LED بالأرض.

يتم استخدام الكريستال 16 ميجاهرتز لتوفير ساعة للميكروكونترولر Atmega328 ومكثفات 22pF لتثبيت عمل الكريستال.

هذه هي جميع التوصيلات اللازمة لإضاءة LED. مزود الطاقة.

نعم. يومض مؤشر LED مع تأخير لمدة ثانية واحدة. يتوافق عمل المتحكم الدقيق مع مهامنا

الخطوة 5: الخاتمة

من المسلم به أن هذه كانت عملية طويلة لمجرد وميض مؤشر LED ، ولكن الحقيقة هي أنك نجحت في إزالة العقبات الرئيسية: إنشاء نظام أساسي للأجهزة لبرمجة متحكم AVR ، واستخدام Atmel Studio كمنصة تطوير متكاملة ، باستخدام AVRDUDE كبرنامج لـ تكوين وبرمجة متحكم AVR

إذا كنت ترغب في البقاء على اطلاع دائم بمشاريع وحدات التحكم الدقيقة الأساسية الخاصة بي ، فقم بالاشتراك في YouTube الخاص بي! إن مشاهدة ومشاركة مقاطع الفيديو الخاصة بي هي طريقة لدعم ما أقوم به

اشترك في قناة يوتيوب FOG

موصى به: