الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

دورة ميكروكنترولر من نوع Atmel Avr

مثبّترائج
بدأه avr في 6 سبتمبر 2008 · 90 رد · 82,360 مشاهدة · في الميكروكنترولر (المتحكم) و الدوائر الرقمية و المنطقية
مشاركة: واتساب X فيسبوك تيليجرام
#51

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

مثال عن تعليمة Switch في الـ AVR Studio

switch(y)
	{
	   case 0: lcd_cmd(0x80+x); break;  
	   case 1: lcd_cmd(0xc0+x); break;
	   case 2: lcd_cmd(0x94+x); break;
	   case 3: lcd_cmd(0xd4+x); break; 
	}

تم تعديل هذه المشاركة بواسطة avr في 3 يونيو 2009 في 00:18

سبحان الله وبحمده .. سبحان الله العظيم

#52

أهداف الدرس :

1-التعرف على الأزرار الرئيسية المستخدمة في عملية المحاكاة

2-التدرب على التنقل المباشر ما بين لوحة المراقبة لدخل و خرج أجزاء المتحكم و مراحل تنفيذ البرنامج .

بعد ان قمنا بعملية الـ Build في الدرس السابق نقوم بعملية Debug للبرنامج المكتوب ( و هي عملية محاكاة لعمل المتحكم في موقع العمل مع إمكانية التصحيح للأخطاء ) و ذلك بالضغط على الأمر Start Debugging من القائمة Debug ، فيقوم بعدها البرنامج بعملية إعدادات للمحاكي و من ثم يظهر سهم أصفر بجانب التعليمة الأولى ، و هذا يدل على بدء عملية المحاكاة ، كما هو موضح بالشكل :

post-160845-1243977818_thumb.gif

تتيح القائمة Debug مجموعة من الأوامر للتحكم بسير عملية المحاكاة ، و ما يمكننا الاستفادة منه في هذه المرحلة هي :

F5 : Run – و هي تسمح بتشغيل البرنامج و تنفيذه من الموقع المؤشر إليه ( البداية ) .

Reset :SHIFT+F5 – و هي عملية إعادة تشغيل للبرنامج من بدايته حيث تعاد جميع السجلات إلى وضعها الابتدائي

Break : Ctrl+F5 – و هي توقف تنفيذ البرنامج

Single step, Trace Into :F11 – و هي تقوم بتنفيذ الخطوة التالية من البرنامج

Step Out :SHIFT+F11 – و هي تقوم بالقفز عن التعليمة التالية ( غالباً تستخدم في حال وجود التوابع و استدعاءاتها و يرغب بعدم المرور فيها أثناء عملية المحاكاة )

Run To Cursor :F7– تقوم بتنفيذ البرنامج حتى الوصول إلى الموقع المشار إليه بمؤشر الكتابة بواسطة المبرمج ضمن نص البرنامج

Auto Step – و تقوم بتنفيذ البرنامج بشكل أوتوماتيكي للخطوات ، و هي تفيد في حال وجود الحلقات اللامنتهية

و ترافق عملية المحاكاة متابعة للجانب الأيمن من نافذة البرنامج و المسمى I/O View ، حيث يمكننا مشاهدة التغيرات الحاصلة على كل من بوابات المتحكم والعدادات ولكل أجزاء المتحكم الداخلية.

نعود الآن إلى برنامجنا الصغير :

1. نضغط F5 لبدء تنفيذ البرنامج ، و نلاحظ توضع المؤشر عند التعليمة SER و ليس عند موجه التضمين أو سطر التعليق .

2. نضغط F11 لتنفيذ عملية Step Into حيث سنلاحظ انتقال المؤشر الأصفر إلى السطر التالي .

3. نذهب إلى الجانب الأيمن و نقرأ محتوى نافذة I/O View :

4. نتوجه إلى الجانب الأيسر Register 0 - 31 لنرى أن السجل R16 قد أخد بالفعل القيمة 0xFF

post-160845-1243978425_thumb.gif

5. نضغط F11 لإجراء الخطوة التالية ، و نتوجه إلى I/O View و منها إلى القسم PORT A ، حيث سنلاحظ أنه قد تم بالفعل إخراج للقيمة المخزنة على السجل R16 على البوابة A .

6. و بالضغط على F11 مرة أخرى نرى ذات الأمر قد تكرر على السجل DDRA .

7. نضغط F11 للانتقال إلى التابع Loop ، حيث يبدأ بتعليمة إدخال محتوى السجل PinB إلى السجل R16 ، فسنقوم بالانتقال إلى السجل PinB في القائمة الفرعية الخاصة بالبوابة B و نؤشر بالمربعات الفارغة لكتابة قيمة اختيارية و لتكن 0x0F أي المربعات الأربعة الأولى إلى اليمين .

post-160845-1243978671_thumb.gif

8. بضغط F11 سنلاحظ انتقال المؤشر إلى السطر التالي وأن السجل R16 قد أخذ القيمة التي قد حددناها في التعليمة السابقة و هي 0x0F .

9. نضغط F11 فنلاحظ أن السجل PortA قد أخذ بالفعل القيمة المخزنة في السجل R16 .

post-160845-1243978882_thumb.gif

10. مهما استمر الضغط على F11 في هذه المرحلة فسيستمر التنفيذ داخل هذا التابع مع تغيير القيمة المخرجة على البوابة A بحسب القيمة المدخلة على البوابة B .

11. نلاحظ أنه بالضغط على Auto Step فسيستمر المؤشر بالانتقال داخل التابع Loop إلى ما لا نهاية .

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

فنرجو أن يكون الدرس قد حقق أهدافه ، و إلى لقاء آخر مع تطبيق آخر

سبحان الله وبحمده .. سبحان الله العظيم

#53

طبعا لكن ليس لهذه الدرجة من حجم الكود والا بهذه الطريقة لا استخدم السى او لا استخدم هذا المترجم

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#54

أنا أعلم أن الأسمبلى هى الأفضل قطعا بالنسبة لبرمجة الأنظمة المدمجة

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

و لكن السى بالنسبة لشخص مثلى حاليا أسهل بكثير لكونها أقرب إلى لغات البرمجة الأخرى التى أعرفها

هل تعلم, لقد كتبت برنامج لقادة ثلاث محركات خطوية من خلال ستة أوضاع مختلفة للسرعات و أسلوب الخطوة كل هذا بالسى و أنا لا أعلم عنها إلا القليل جدا

كل الذى قمت به هو معرفة keywords الأساسية المستخدمة من أجل ان أتحكم فى المداخل و المخارج الخاصة بالمنافذ

و قمت بتجربة البرنامج عملى على atmega16 و نجح بفضل الله

إن شاء الله من خلال هذه السلسلة المباركة من الدروس سوف أعمل على تعلم الأسمبلى لكى أتمكن من العمل معه بإذن الله تعالى

لا إله إلا الله محمد رسول الله

アッラー以外に神はなし。ムハンマドはアッラーの使徒である

#55

بالمناسبة يا حريف

المترجم المستخدم من أجل السى ليس مضمنا ضمن الAVRSTudio بل إنك لكى تعمل Compile لكود سى هناك لابد أن تقوم بتثبيت مترجم

و المستخدم هو من نوع GCC

و الذى هو winavr

و هو مجانى و الحمد الله

لا إله إلا الله محمد رسول الله

アッラー以外に神はなし。ムハンマドはアッラーの使徒である

#56

عملت التحكم بالسى للستيبر

وعرفت تضبط ال Timing ازاى ولا سبتها بطاطا :D

طبعا يجب ان تنهى الاسمبلى فبالاخص الانظمة التى تحتاج فى التوقيت لابد لها من الاسمبلى وذلك لمعرفة كل كود تكتبة يأخذ ماذا من ال cycle وبذلك تستطيع اخراج وقت مضبوط بناء على ال clock التى ادخلتها للميكرو

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#57

تستطيع من خلال السي وبعد تعريف Compile بتردد الساعة التي ستعمل عليها ان تقوم بتحديد الزمن الذي تريد وبكل سهولة وبدون ان تستخدم حتى المؤقتات بل بواسطة حلقات تأخير زمني وأظن أن الأخ محمد نور إستخدم هذه الطريقة لسهولتها .

سبحان الله وبحمده .. سبحان الله العظيم

#58

يعنى ممكن اعرف زمن تنفيذ مثلا جملة If والعمليات الاخرى بدقة هل فعلا المترجم يخبرنى بهذا

وما اقصدة بالزمن اقصد تطبيقات ال real time اى معرفة زمن كل تعليمة وليس مجرد تأخير زمنى

على العموم سأرى المناسب لكل تطبيق بعد الدخول لهذا النوع من المتحكمات

لكن سؤال خارج الموضوع سمعت ان هناك احد متحكمات AVR مبنى على نظام معالجات Intel فهل هذا صحيح لانى اريده

ايضا هل هناك بداخله تعليمات تقوم بعمليات الضرب لان نوع Pic لا يدعم هذا وشكرا

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#59

أخي الكريم المترجم لن يخبرك بزمن تعليمة If ولا غيرها حتى ولكن يمكن عمل حلقات تأخير زمني بالـ us أو ms بستخدام الدالة delay_ms أو delay_us

delay_ms(100); // Wait 100 ms

وهذا ماقصدته بمشروع الأخ محمد نور .

نعم أخي الكريم متحكمات Atmel AVR تدعم عملية الضرب ولكن تقتصر هذه التعليمة على الـ ATmega ولو قراءة في البداية لرأيت عدة أمثلة عن تعليمات الضرب المتوفرة في الـ ATmega16

تم تعديل هذه المشاركة بواسطة avr في 3 يونيو 2009 في 20:34

سبحان الله وبحمده .. سبحان الله العظيم

#60

بطاطة مين يا حبيبى

ده شغل على مياه بيضة :P

أنا كنت بستخدم دالة بعطيها الزمن بالميلى و هى إلى بتقوم بعمل التأخير كما أشاء بس مش فاكر إسمها

و استخدمت 8 مفاتيح للتحكم فى زمن النبضة من أجل التحكم فى السرعة

كانت تجربة ليس أكثر

نعم بالضبط هذه هى

delay_ms

لا إله إلا الله محمد رسول الله

アッラー以外に神はなし。ムハンマドはアッラーの使徒である

#61
اقتباس
ولو قراءة في البداية لرأيت عدة أمثلة عن تعليمات الضرب المتوفرة في الـ ATmega16

انا قلت لك انى لن استطع القراءة الان بسبب الامتحانات ومشغوليات اخرى

لكنها اسئلة كدة على الماشى لتشجعنى للبداية :D

لكن لازال هناك بعض الاشياء فى ال synchronization ففى احد المشاريع احتجت تصميم decoder بال pic وهذا يتطلب وبدقة تحديد الزمن لكل نبضة تأتى له على العموم المشروع فى الخر لم ينجح بسبب بعض المشاكل :lol:

لم تجبنى اخى على موضوع معالجات intel سمعت وجود فئه ال instruction set لها هى نفس 8086 هل هذا صحيح

اقتباس
بطاطة مين يا حبيبى

ده شغل على مياه بيضة

يابنى انت بطاطة من الاساس :haha:

تم تعديل هذه المشاركة بواسطة حريف برمجة في 5 يونيو 2009 في 01:46

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#62

انا لم أعمل على الـ 8086 من قبل ولا أدري إذا كانت instruction set لها هي نفسها ولا أظن .

سبحان الله وبحمده .. سبحان الله العظيم

#63

8051

مثل تعليمات mov

jmp, cmp, Ax, Bx

أى شئ من هذه الكلمات

لكن مش مهم كنت فقط ابحث عن شئ قريب شكرا لك

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#64
avr كتب:

السلام عليكم ورحمة الله وبركاته

وكل عام وانتم بألف خير

من خلال تصفحي للمنتدى لم أرى أي مشاركة أو أي دورة تدريبية على الميكروكنترولار Atmel AVR

والذي يعد حاليا من أقوى المعالجات وأكفائها و اما بالنسبة لسعره فهو أرخص بكثير من الـ PIC

ولذلك أفتتح هذا الإستفتاء حتى أعرف ما إذا هناك ترحيب بفكرة عمل دورة على هذه المعالجات

والتي ستتضمن البنية الداخلية للمتحكم وشرح تعليماته بلغة assembly و شرح طريقة التعامل مع مترجم ومحاكي هذه العائلة

وأيضا سيكون هناك مشاريع للتعامل مع شاشات LCD & 7SEG و الكثير الكثير بإذن الله

فأرجو منكم التشجيع لنبدء بهذه الدورة

والسلام عليكم ورحمة الله وبركاته

:wub: :wub: :wub: :wub: :wub: :wub: :wub: :wub: :wub: :wub: :wub:

من اميز المواضيع على الاطلاق

بارك الله فيك اخى وجعله فى ميزان حسناتك

عن أبي هريرة رضي الله عنه عن النبي صلى الله عليه وسلم أنه قال: سيأتي على الناس زمان سنوات خداعات: يصدق فيها الكاذب ويكذب فيها الصادق، ويؤتمن فيها الخائن ويخون فيها الأمين، وينطق فيها الرويبضة. قيل يا رسول الله وما الرويبضة؟ قال: الرجل التافه ينطق في أمر العامة . رواه احمد والحاكم وصححه الالبانى من حديث ابى هريره.‏

#65

شكرا لمرورك الكريم أخي محمد الأمين

المؤقتات / العدادات :

يعد المؤقت العداد Timer/Counter الطرفية الأكثر إستخداما في المتحكمات الصغرية فهي متعددة الإستخدامات

كقياس أدوار زمنية وتحديد عرض نبضةوقياس سرعة وترددوتوليد إشارات خرج .

تشمل تطبيقات المؤقت العداد قياس سرع محرك ما و توليد دور زمني بدقة وكذالك توليد نغمات موسيقية أو لتوليد إشارة قيادة بعرض نبضة PWM

متغيرة أو تردد متغير للتحكم بسرعة المحركات سوف نناقش هذه الفقرات بشكل عام ومن ثم سنتحدث عن المؤقتات العدادة بشكل مفصل أكثر .

ومع أن المؤقت / العداد يستخدم وفق نمطي عمل مختلفين (( التزامن والعد )) إلا أنه عبارة عن عداد ثنائي بسيط .

فعند تشغيله في نمط التزمين يعمل العداد الثنائي على عد أدوار زمنية مطبقة على مدخله أما عند تشغيله في نمط العد فإنه يعمل على عد الأحداث و النبضات أو ماشابه فمثلا

إذا كان دخل العداد الثنائي عبارة عن نبضات دورها 1 ميلي ثانية عندها يمكن قياس الدور الزمني بتشغيل العداد في بداية حدث ما وإيقافه عند نهاية الحدث وتكون قيمة العداد النهائية هي

عدد الأدوار بالميلي ثانية التي إنقضت خلال الحدث السابق

عند إستعمال المؤقت / العداد كعداد تطبق الأحداث المراد عدها على دخل العداد الثنائي لكي يتم عدها مثلا يمكن إستعمال العداد لحساب عدد علب التونا (( لأنني أحبها وخاصة الحار منها :lol: ))

التي مرت على خط الإنتاج.

تحتوي متحكمات AVR مؤقتات / عدادات 8 بت و 16 بت . النقطة المهمة هنا في كلا الحالتين هي أن يعرف البرنامج أن العداد قد وصل إلى قيمته النهائية (( العظمى )) وعاد إلى قيمة العد

الإبتدائية إذ بالنسبة لعداد 8 بتات يحدث ذلك عند القيمة 255 حيث تؤدي النبضة التالية إلى إعادته إلى القيمة 0 من جديد

أما في حالة عداد 16 بت فيحدث نفس الأمر عند القيمة 65535 من المهم للبرنامج ان يعرف متى يحدث ذلك لكي تكون القيمة المقروءة من العداد صحيحة .

ونظرا لأهمية ذلك فقد تم وضع مقاطعة خاصة تحدث عند تجاوز القيمة العظمة للعداد

وتسمى بمقاطعة طفحان المؤقت العداد Timer/Counter Overflow

غالبا ما تحتوي متحكمات AVR مؤقتين بعرض 8 بت (( Timer2 & Timer0 )) و مؤقت بعرض 16 بت (( Timer1 ))

ولكن ذلك قد يتغير تبعا لرقم المتحكم المستخدم

سنناقش في الفقرات القادمة عمل المؤقت و إعداداته وهي ميزة مشتركة لكل المؤقتات ثم سنناقش كل مؤقت منهم على حدى إذ سنتحدث عن الإستعمالات الأكثر شيوعا لكل مؤقت / عداد

بالرغم من أن العديد منها ذو وظائف أكثر من تلك التي سنناقشها هنا.

على أي حال راجعو مواصفات المتحكم الذي ستتعاملون معه لمعرفة كل الوظائف الممكنة للمؤقتات / العدادات فيه .

تم تعديل هذه المشاركة بواسطة avr في 18 يونيو 2009 في 18:48

سبحان الله وبحمده .. سبحان الله العظيم

#66

اخ Avr ماهو سبب الغياب لعله يكون خير ان شاء الله

لكن سؤال هل هناك برنامج غير ponyprog لا اعداداته صغير ولا يوجد بها اختبار لكل بن على حدة كبرنامج Winpic مما يصعب تنفيذ دائرة البرمجة

انا اقوم بعمل واحدة تعتمد على ال parallel port

موقع البرنامج

مبارك لشعب تونس photo-thumb-42837.png

#68

الاخ Avr لك جزيل الشكر والإمتنان على موضوعك الرائع والمفيد

ونتمنى عودتك لتتحفنا بالجديد

#69

جزاك الله خيرا ان شاء الله

لى عندك سؤال لو سمحت اريد ان اعرف اى مكان يعطى كورس لبرمجة ال AVR بلغة ال C

شكرا لك و ايميلى هو

m.diaa@hotmail.com

#70

اخوتي الكرام

لدي خبرة ممتازة في برمجة الميكرو avr &pic

my msn : abokamelscs@hotmail.com

#71

جزاك الله خيراً و استمر على بركة الله

#72
avr كتب:

السلام عليكــم ورحمـة الله وبركاتــة

هذا مخطط المبرمجة الخاصة بـ ATMEL AVR

post-160845-1225643199_thumb.jpg

ومن هنا صفحة تحميل برنامج الـ PonyProg2000 الخاص ببرمجة المايكروكونترولار

******************************

السلام عليكم ورحمة الله وبركاته

اعذروا جهلي ب avr أرجوكم أن تساعدوني في فهم مخطط المبرمجة الخاصة بـ ATMEL AVR هذا

هل SPI يتم ربطه بالمتحكم

لكم مني جزيل الشكر

#73
avr كتب:

السلام عليكم ورحمة الله وبركاته

وكل عام وانتم بألف خير

من خلال تصفحي للمنتدى لم أرى أي مشاركة أو أي دورة تدريبية على الميكروكنترولار Atmel AVR

والذي يعد حاليا من أقوى المعالجات وأكفائها و اما بالنسبة لسعره فهو أرخص بكثير من الـ PIC

ولذلك أفتتح هذا الإستفتاء حتى أعرف ما إذا هناك ترحيب بفكرة عمل دورة على هذه المعالجات

والتي ستتضمن البنية الداخلية للمتحكم وشرح تعليماته بلغة assembly و شرح طريقة التعامل مع مترجم ومحاكي هذه العائلة

وأيضا سيكون هناك مشاريع للتعامل مع شاشات LCD & 7SEG و الكثير الكثير بإذن الله

فأرجو منكم التشجيع لنبدء بهذه الدورة

انا مهتمية بهذه الدوره جداااا وجزاك الله خير

والسلام عليكم ورحمة الله وبركاته

#74

السلام عليكم ورحمة الله وبركاتة .

مجهود أكثر من رائع جزاك الله كل خير . وزادك علما وعملا بة ونفعا للغير .

#75

:clapping: السلام عليكم وحمة الله وبكاتة

يا أخى بالك الله فيك .

مجهود رائع . جعلة الله فى ميزان حسناتك

مواضيع مشابهة