avr

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

91 ردود في هذا الموضوع

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

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

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

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

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

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

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

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

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

تم تعديل بواسطه avr
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

وعليكم السلام ورحمة الله وبركاته اذا اردت جمع الاصوات لن تجد الكثير

اجعل الدورة لوجه الله وتوكل على الله

0

شارك هذا الرد


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

اجعل الدورة لوجه الله وتوكل على الله

شكرا لك أخي حريف برمجة لزيارتك لموضوعي هذا

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

ولا يكون هناك أي شخص مهتم لما أشرحه .

والدورة لوجه الله تعالى وانا لا أطمع من هذه الدورة إلا بالدعاء لي ولوالدي .

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

أخوكم في الله : عبدالله جلول

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أهلا وسهلا بكم إخوتي الأعزاء

ولنبدء

بسم الله الرحمن الرحيم

الدرس الأول :

مقدمة عن متحكمات ATMEL AVR :

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

فبداية ، هناك عائلة المتحكم AT89 ، و أصل هذه العائلة هو المتحكم MCS80C51 من شركة INTEL .

و قد تنوعت خصائص أنظمة هذه المتحكمات ، فمنها :

أ. ISP Flash و هو ما يمكن برمجته و هو موجود في النظام مثل ( AT89S ) .

ب. Flash : لا يمكن برمجته و هو موجود في النظام مثل (AT89C ) .

جـ. OTP : و هو قابل للبرمجة لمرة واحدة فقط ( كما كان موجوداً في جيل سابق AT87 ) .

د. ROM : مزوّد بذاكرة من النوع ROM .

هـ. ROM less : ليس فيه ذاكرة من النوع ROM .

و. Special MCs : لتخديم تطبيقات خاصة .

و من ثم ظهر AT90 الذي تطور فيما بعد ليأخذ اسم AVR و ما تلاه من متحكمات أخرى ، فأصبحت عائلة AVR مؤلفة من أقسام هي :

1. AT90 أو AVR .

2. megaAVR أو ATmega .

3. tinyAVR أو ATtiny .

و تشترك هذه العائلة بمجموعة من الخصائص و المزايا العامة ، و هي أنها :

1. متحكمات بخط عنونة عرضه 8 بتات ، و بنية معالجة تعليمات من النوع RISC( Reduced Instructions Set Computer) .

2. تتضمن تنوعاً كبيراً فيما بينها يغطي أغلب التطبيقات .

3. توفر الشركة و بشكل دائم مجموعة من الأدوات المساعدة على تطوير التطبيقات المرتبطة بهذه المتحكمات مثل : المبرمجات ، المحاكيات بنوعيها Simulators & Emulators ، و Starter Kits .. و غيرها.

4. تشترك هذه المجموعة ببنية موحدة من حيث العناصر و تختلف فيما بينها بالمواصفات و المقاييس .

5. تمكّن المستخدم من كتابة البرامج بلغة C حيث صممت بنيتها لتلائم النصوص البرمجية المكتوبة بهذه اللغة .

AVR ATmega 16 من الناحية النظرية :

post-160845-1221683527_thumb.jpg

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

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

خصائص المتحكم AVR ATmega16 :

1. عالي مستوى الأداء ، و بتغذية منخفضة نسبياً ( 5 فولت ) و بخط عنونة عرضه 8 بت مما يعطيه سرعة في الأداء .

2. بنية تحكم بالبرمجيات و تعاطي بيانات من النوع RISC و هي توفر :

• 131 تعليمة ( أغلبها تُنفّذ بنبضة ساعية واحدة – أي – ميكرو ثانية في حال استخدام كريستالة بتردد 1 ميغا هرتز )

• 32 سجل عمل عام سعة 8 بت ( و هي السجلات المستخدمة لتناقل البيانات آنياً أثناء تطبيق البرنامج )

• سرعة في تنفيذ التعليمات تصل إلى مليون تعليمة في الثانية و ذلك باستخدام ساعة ترددها 1MHz .

3. الذواكر غير الطيارة Non Volatile ( و يقصد بها تلك الذاواكر التي لا تفقد البيانات بانقطاع التيار ) :

• ذاكرة للبرنامج بسعة 16 كيلو بايت قابلة لإعادة البرمجة ، و تحملية تصل إلى 10000 دورة ( محي / كتابة ) .

• إمكانية الحصول على قسم خاص لكود الإقلاع مع بتات تحكم مستقلة به .

• ذاكرة EEPROM بسعة 512 بايت ( تحمليتها 100000 دورة محي / كتابة )

4. الذاكرة الطيارة ( تزول محتوياتها بانقطاع التيار عن المتحكم ) :

• ذاكرة SRAM داخلية بسعة 1 كيلو بايت .

5. إمكانية إقفال برمجية و ذلك لحماية البرنامج المحمل على المتحكم .

6. واجهة JTAG ( موافقة لمعايير IEEE std. 1149.1 ) و هي الواجهة التي يمكن من خلالها التخاطب مع المتحكم أثناء عمله بشكل مباشر و تصحيح أعطاله بعمليات debug فورية و آلية و تتضمن :

• فحوصات كلية للبرنامج و عمليات مقارنة للنتائج و تصحيحها وفقاً للحاجة .

• إمكانية إعادة برمجة خارجية لذاكرة البرنامج و ذاكرة EEPROM و بتات الحماية و القفل .

7. مميزات التحكم و التخاطب و الواجهات Interface :

• عدادان مؤقتان ( Timer / Counter ) بسعة 8 بت مع prescalers ( ضابطات مسبقة للتحكم من قبل الساعة ) و سجلات مقارنة مستقلة بكل منهما .

• عداد مؤقت بسعة 16 بت مع ضابط مسبق للساعة و سجلات مقارنة و لاقط قيم مستقل به .

• 4 قنوات PWM ( Pulse Width Modulation ) ( لتعديل عرض النبضات ) .

• 8 قنوات لعمليات التحويل التماثلي إلى رقمي بعرض 10 بتات .

• 8 قنوات للدخل و الخرج في عمليات التحويل المشتركة في فرعها الأرضي ( وحيدة النهاية ) single ended .

• قناتان تفاضليتان بمكبر قابل للبرمجة للحصول على 10X أو 200X من قيمة الإشارة المدخلة .

• قناة برمجة لواجهة USART المستخدمة للتخاطب مع الحاسوب .

• واجهة تسلسلية SPI ( Master / Slave ) .

• مؤقت مراقب قابل للبرمجة مع هزاز مستقل خاص به .

8. وظائف خاصة بالمتحكمات الصغرية :

• قابلية لإعادة الضبط Reset أثناء وقت التشغيل و أنماط حماية للعمل قابلة للبرمجة .

• هزاز ( مقاومة – مكثفة ) داخلي معاير .

• مصادر مقاطعة داخلية و خارجية .

• ستة أنماط لحفظ الطاقة أثناء العمل ( يتم اختيار النمط حسب الحاجة إليه من خلال التطبيق ) .

9. الدخل / الخرج و الحزم :

• 32 خط ( 4 بوابات من ثمانية أرجل ) دخل / خرج قابل للبرمجة .

• 40 بن PIN من النوع PDIP ( و هو النوع المرفقة صورته في المقدمة ) .

10. جهود التغذية : تتراوح من 4.5 فولط و حتى 6.5 فولط ( و لكن وسطياً يمكن تشغيله على كافة التطبيقات بجهد 5 فولط ) – و مجال 2.7 ~ 5.5 فولط للمتحكمات من النمط L .

11. معدل تردد العمل : تتراوح من 0 ~ 16 MHz .

و مجمل هذه الخصائص يشكل بنية متكاملة لتحقيق أكبر قدر من التطبيقات بمواصفات عمل مناسبة ، و من ناحية الخصائص التسويقية فسعرمبيعه في السوق

3$ تقريبا.

و سيتم شرح بعض الأجزاء من الناحية العملية قريباً ، فترقبوا القسم العملي الذي سيحمل تفاصيل أكثر للتعامل مع هذه الأجزاء المذكورة عملياً بنصوص برمجية ... :wub:

تم تعديل بواسطه avr
1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

بقية الدرس الأول :

نواة المتحكم ATmega16:

و يقصد بها وحدة المعالجة المركزية للمتحكم ، و بالتالي ستتضمن جميع أجزاء تنفيذ البرامج (عداد التعليمات و سجلات العمل العام و سجل التعليمة و محول التعليمة ) و الذواكر بأنواعها و ممر المعطيات و ما يرتبط به من بنى تناقل البيانات ، و أخيراً و أهم شيء ، وحدة الحساب و المنطق .

و الصورة التالية توضح مخطط الأجزاء المكونة لهذه النواة ( كما وردت في دليل الاستخدام الخاص بالمتحكم ) :

post-160845-1221772146_thumb.jpg

و سنتناول اليوم بعض الأجزاء الرئيسية لهذه النواة :

وحدة الحساب و المنطق :

و ترتبط هذه الوحدة ب 32 سجلاً تسمى بسجلات العمل العام General Purpose Working Registers حيث تكون هذه السجلات هي أدوات هذه الوحدة للتعامل مع البرنامج ، أما أنواع العمليات التي تعالجها فهي ثلاث : العمليات المنطقية ، و الحسابية ، و عمليات على مستوى البت .

سجل الحالة Status Register :

post-160845-1221772272_thumb.jpg

و هو، كما نلاحظ ، سجل من 8 خانات و يعطي معلومات عن نتيجة عملية ما ، حيث تؤثر هذه النتيجة على معطيات معينة يمكن الاستفادة منها ، و لتوضيح هذه الفكرة سنأخذ هذه المثال :

إذا أجرت الوحدة عملية حسابية لجمع العدد 0b11111111 مع العدد 0b00000001 فإن النتيجة ستكون عملياً 0b100000000 مؤلفة من 9 خانات ، ففي حالة السجلات المؤلفة من 8 خانات فقط سيتم إظهار الناتج على أنه 0b00000000 و يتم إهمال القيمة في المنزلة التاسعة ، فلذلك ، يقوم سجل الحالة بإعطاء قيمة ( 1 ) لبت من بتاته الثمان يفيد بأن ناتج العملية يحوي حملاً إضافياً Carry ( البت رقم 0 ). و بالتالي يستطيع المبرمج توظيف هذا البت لإجراء عملية ما في حالة الحمل الزائد للسجل .

كما يحوي السجل واحدة من أهم أسس التعامل مع المقاطعات الخارجية ( الإشارات الواردة من وسيط خارجي و يراد توظيفها لأداء عملية ما في المتحكم ) و هو بت تأهيل المقاطعة العام ( رقم 7 و رمزه I ) ، حيث يكون المتحكم بأكمله مستعداً لتلقي المقاطعات عندما تكوت قيمة البت 1 ، و العكس عندما تكون القيمة 0 .

نلاحظ بأن المتحكم في حالة تعامل دائم مع هذا السجل .

سجلات العمل العام :

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

و من المفيد عملياً أن نعرف أن هذه السجلات متاحة بأكملها للاستخدام و التحكم من قبل البرنامج ، و لكن ، هناك نوع من التعليمات التي تفيد في توفير الوقت ( و هي تعليمات Immediate ) لا يمكن أن تتعامل إلا مع قسم معين فقط من هذه السجلات و هو بدئاً بالسجل رقم 16 و حتى 31 فقط . كما أن السجلات من الرقم 26 و حتى 31 هي سجلات تستخدم كمؤشرات لمواقع معينة في ذاركة الرام و بشكل ثنائي ( حيث إن عنوان الموقع في الذاكرة هو أكبر من القيمة 255 التي يستطيع سجل بمفرده أن يشير إليها فيتم استخدام سجلين High & Low ) .

و هذه الصورة توضح توزع هذه السجلات في الذاكرة و ما يقابلها من فراغ عناوين البيانات ( مرمزة ست عشرياً ) .

post-160845-1221772413_thumb.jpg

مؤشر المكدس Stack Pointer :

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

ملاحظة : أكثر استخدامات هذا المؤشر تكون بتعليمات العودة من تابع لمقاطعة ما ، حيث تنتهي هذه التوابع بتعليمة RETI ، و هي كفيلة باستدعاء القيمة الموجودة على قمة المكدس للعودة بمؤشر تنفيذ البرنامج إلى الموضع الذي تم فيه استدعاء تابع المقاطعة .

و هذا السجل كذلك مؤلف من قسمين High & Low .

توقيت تنفيذ العمليات Instruction Execution Timing :

و هو موضوع يطول الحديث فيه أيضاً ، و لكن من المفيد عملياً معرفة أنه خلال نبضة ساعية واحدة من نبضات الساعة المرتبطة بوحدة المعالجة المركزية يتم تنفيذ تعليمة واحدة كاملة ، و ذلك خلال عملية مقسمة إلى 3 مراحل ( كما يوضح الشكل ) : تبدأ النبضة باستدعاء معاملات التعليمة ، و من ثم تنفذ التعليمة حسابياً أو منطقياً ، و تنتهي النبضة بإعادة القيمة الناتجة إلى السجل المراد خزن القيمة فيه ( و هي كما نلاحظ : مراحل متساوية زمنياً ) .

تداول عمليات التبدئة و المقاطعات :

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

و من الجدير بالذكر أنه عند التعامل مع ذاكرة البرنامج ( و هي قسم من الرام خاص بالتعامل مع البرنامج ، حيث يكون القسم الآخر مسؤولاً عن عمليات الإقلاع – و هو تقسيم اختياري من قبل المبرمج ) فيجب حينها الانتباه إلى أن العناوين الأدنى من تلك الذاكرة يحتوي على أشعة المقاطعات و التبدئة . و سنلاحظ هذا في القسم العملي عند الوصول إلى تطبيقات المقاطعات . فمثلاً : تحمل توابع التبدئة أولوية على باقي التوابع حيث يتوضع شعاع تابع التبدئة في أول موقع من الرام ( و المقصود بالشعاع هو المؤشر على موضع التابع ضمن كتلة البرنامج ) ، و من ثم تتالى أشعة توابع المقاطعات الأخرى .

و نتابع موضوع الذواكر في الدرس القادم

بانتظار أي استفسار أو توضيح .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أرى ان عدد المشاهدات قد وصل للـ 250 مشاهدة للموضوع ومش معقول !!!...

مافي ولا سؤال ؟...

ولا ما في أحد مهتم لما أضعه .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

اعتقد ان المشكلة هي ان avr غير شائع الاستخدام مثل pic خاصة في العالم العربي

ربما كانت المقارنة بينهما كالمقارنة بين وندوز و لينكس من حيث شيوع الاستخدام

والله اعلم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

جزاك الله خيراً أخي على هذا المجهود .

وجعله في ميزان حسناتك.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

على بركة الله

نحن معك

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكرا لكم إخوتي الأعزاء على المرور الكريم

ولنتابع الشرح .

الذواكر في المتحكمات الصغرية AVR ATMEL :

إن معظم هذه المتحكمات تشترك فيما بينها في أنواع الذواكر التي تحتويها و تتعامل معها ، و هي تنقسم إلى ثلاثة أنواع :

1 ) ذاكرة البرنامج Program Memory

2 ) ذاكرة البيانات Data Memory

3 ) ذاكرة EEPROM

سنتناول هذه الذواكر بشيء من التفصيل لمعرفة ماذا يحدث أثناء تنفيذ المتحكم للبرنامج ، حيث يتوجب مراعاة أمور كثيرة مرتبطة بها أثناء كتابة البرنامج .

1 ) ذاكرة البرنامج In-System Programmable Flash Program Memory :

و هي الذاكرة التي سيتم شحن كتلة البرنامج إليها و تخزينه بشكل دائم، و هي متفاوتة بين متحكم و آخر من حيث المساحة، أما المتحكم الذي نتناوله فمساحة ذاكرة البرنامج فيه هي 16 كيلوبايت ، و ترميز التعليمة الواحدة يأخذ عملياً 16 أو 32 بايت ( ما يسمى بالـ Op-Code ) فقسمت الذاكرة على الشكل 8K X 16 ( و بالتالي ، كل سطر من الذاكرة يحوي بايتين و ليس بايتاً واحداً ) ، كما يمكن تقسيم هذه الذاكرة من خلال بتات معينة قبل شحن البرنامج إلى قسمين ، قسم لكتلة الإقلاع ، و قسم للبرنامج التنفيذي ، و هذا يفيد في حماية البرنامج أثناء العمل المتكرر للمتحكم ، و تتوضع حينها كتلة الإقلاع في القسم الأعلى من الذاكرة ( المواقع الأخيرة منها ) .

2 ) ذاكرة البيانات SRAM Data Memory :

و هي الذاكرة المسؤولة عن تناقل المعطيات و تخزينها المؤقت أثناء عمل المتحكم ، و تنقسم عملياً إلى ثلاثة أقسام ( كما هو موضح في الشكل ) :

post-160845-1222693929_thumb.jpg

العناوين من $0000 و حتى $001F ( 32 موقعاً ) هي مخصصة لملف السجلات Register File.

العناوين من $0020 و حتى $005F ( 64 موقعاً ) هي مخصصة لسجلات الدخل و الخرج .

العناوين من $0060 و حتى $045F ( 1024 موقعاً ) هي مخصصة لقسم الرام الداخلي .

إن القسم الأخير يشكل مساحة 1K من الذاكرة ، و هي التي ذكرناها في البداية في مميزات المتحكم AVR Atmega16 .

يجب التنويه إلى أنماط العنونة في هذه الذاكرة و الوصول إلى مواقعها ، حيث توجد 5 أنماط من أنماط العنونة :

1) النمط المباشر : و هو يستطيع الوصول إلى كافة مواقع الذاكرة .

2) النمط غير المباشر مع الاستبدال

3) النمط غير المباشر مع الزيادة الأمامية .

4) النط غير المباشر مع الإنقاص الخلفي .

5) النمط غير المباشر

و من الجدير بالذكر أن جميع الأنماط غير المباشرة يتم التعامل معها من خلال المؤشرات X, Y, Z و هي المواقع الـ 6 الأخيرة من ملف السجلات R26:R27 , R28:R29 , R30:R31 على الترتيب ، و يفيد هذا النوع من العنونة في وضع عبء المتابعة للبيانات المخزنة بشكل مؤقت أو نتائج العمليات المنطقية و الحسابية أو مواقع العمل عند حدوث المقاطعات على عاتق المتحكم بدون تدخل من المستخدم . ( على سبيل المثال : المكدس و تعليمتي POP, PUSH ) .

في ذاكرة الرام يتطلب تنفيذ العملية بشكل كامل نبضتين ساعيتين من ساعة وحدة المعالجة المركزية ، نبضة لحساب العنوان و النبضة الثانية لتنفيذ العملية .

3 ) ذاكرة EEPROM :

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

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

تم تعديل بواسطه avr
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أخي ربي يجزاك الخير

أكمل شروحك إن لم يستفد أحد الآن سوف يأتي يوم احد ويجدها وتعم الفائده

فهذا النوع من المتحكمات غير شائع وشروحاته قليله لذلك أكمل وفقك الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

هسأل سوأل هوطرحك للموضوع لوجة الله والا استعراض مستني منة كلمات شكر

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

جزاك الله خير عن هذا المجهود واتمنى ان تكمل شرحك الرائع

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكرا اخي الكريم على هذا الموضوع والمجهود المبذول

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

ياخبر

ما شاء الله

يبدو أننى كنت فى سابع نومه متى فتح هذا الموضوع

أنا والله فوجئت بالموضوع و أنه زاد بهذه الدرجة

ماشاء الله و لا قوة إلا بالله

كنت أظنه كلما رايته موضوع آخر تماما غير محتواه

أرى ان عدد المشاهدات قد وصل للـ 250 مشاهدة للموضوع ومش معقول !!!...

مافي ولا سؤال ؟...

ولا ما في أحد مهتم لما أضعه .

إصبر أخى و إحتسب صدقنى وف تأتيك الأسئلة و لكن إصبر فقط

أنا كتبت موضوع و موجود فى قسم الصوت و الاسلكى مثبت هناك

يتحدث عن الأنظمة الصوتية متعددة القنوات و القنوات الفرعية

كتبت الموضوع كاملا و هو يزيد عن الثمان صفحات و لم يكن يتفاعل معىغير واحد فقط الله أعلم أين هو الأن

فأنت يجب عليك أن تصبر و تكمل إلى النهاية و لا تيأس

و خصوصا أننى أنوى قراءته بإذن الله و سوف تجد منى سيل أسئلة :wink: و لكن فقط أكمل حيث أننى لا أعلم أى شئ ع الAvR :P

لذلك برجاء أكمل ما بدأته و لا تضيع مجهودك سدى

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

مشكوووووووووووووووووووووووورررررر وبارك الله فيك يا معلم

0

شارك هذا الرد


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

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

أخي الكريم tareksayedsayed تم طرح هذا الموضوع لوجه الله تعالى ولا انتظر من أحد أن يقدم لي ولا كلمة شكر واحدة

ولكني عندما لم أجد من يهتم أو من يسأل :S ظننت أنه لا أحد مهتم لما أضعه وقررت التوقف عن الشرح أما الأن وبعد أن رأيت من يهتم بهذا الموضوع سأتابع الموضوع حتى النهاية

إن شاء الله تعالى.

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

سأحاول قدر الإمكان توفير الوقت حتى يتثنى لي إكمال كا بدءت

وشكرا لك أخي نور على تثبيت الموضوع لك مني أجمل وأرق التحيات

أخوكم عبدالله جلول

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

دليل تعليمات AVR :

إن بنية تعليمات المتحكم الذي نتناوله هي من النوع RISC و تتألف من مجموع 131 تعليمة فعالة في لغة الأسمبلي ، و لكن يمكن تقسيم هذه المجموعة الكبيرة عملياً إلى 3 مجموعات رئيسية و ذلك لتسهيل دراستها ، و هذا التقسيم وظيفي فقط و سنبيّن وظيفة كل منها في هذا الدليل لكي يكون شبه مرجع لنا ، و كل فترة و أخرى سنضيف و نضيف حتى يسهل العمل علينا انتهاءً بآخر تعليمة .

أما التقسيم فهو كالآتي :

1 ) التعليمات الحسابية و المنطقية

2 ) تعليمات البتات

3 ) تعليمات التفريع ( و هي التعليمات الخاصة بالانتقالات المرحلية لمؤشر البرنامج Program Counter ضمن كتلة البرنامج ) .

سنبدأ بالتعليمات الحسابية و المنطقية ، و ننتهي بعون بالله بتعليمات التفريع ، كما سنحاول تخصيص موضوع مستقل خاص بالموجهات Directives التي تخص الـ Compiler الذي نقوم بكتابة البرنامج ضمنه ، و هو الخاص بـ AVR Studio ، و لكن قبل أن نبدأ سنعرض الرموز المستخدمة ضمن الدليل :

• رموز سجل الحالة Status Register SREG :

C : راية ( مؤشر ) الحمل Carry Flag

Z : راية ( مؤشر ) الصفر Zero Flag

N : مؤشر السلبية Negative Flag

V : مؤشر طفحان الإتمام إلى إثنين Two's Complement Overflow Indicator

S : فاحص الإشارة ( و هو يقوم بعملية XOR ما بين N , V )

H : مؤشر نصف الحمل Half Carry Flag ( المفيد في نظام الترميز BCD )

T : مؤشر تناقل البت المستخدم بتعليمتي BLD, BST

I : مؤشر تفعيل / تعطيل المقاطعة العام

المعاملات و السجلات :

Rd : السجل الهدف ( المراد إجراء العملية عليه ، أو ، تخزين القيمة فيه )

Rr : السجل المصدر ( المراد أخذ القيمة منه )

R : الناتج بعد تنفيذ التعليمة

K : بيانات ثابتة Constant

k : عنوان ثابت

b : بت في ملف السجل أو سجل دخل / خرج .

s : بت في سجل الحالة

X,Y,Z : سجلات العنونة غير المباشرة من سجلات العمل العام (X=R27:R26, Y=R29:R28, Z=R31:R30 ) .

A : عنوان لمكان إجراء الدخل أو الخرج

q : التبديل للعنونة المباشرة

الرايات ( يمكن تسميتها بمؤشرات ) :

السهم : الراية المتأثرة بالعملية

0 : المؤشر قد تم إسناد قيمة الصفر إليه بواسطة التعليمة

1 : المؤشر قد تم إسناد قيمة 1 إليه بواسطة التعليمة

- : لم يتأثر المؤشر بالتعليمة .

ملاحظة 1: النصوص المرفقة لكل تعليمة توضح قواعد كتابتها في برنامج AVR Studio بالإضافة لمجال القيم المسموح بها لكل معامل ضمن معاملات التعليمة ، و كذلك ، تأثير التعليمة على عداد البرنامج الذي يدل المتحكم على التعليمة التي يراد تنفيذها ( فمثلاً : PC + 1 ستقوم بزيادة العداد بقيمة 1 ، أو ، تدل المتحكم لتنفيذ التعليمة التالية مباشرة بعد التعليمة الحالية ضمن تسلسل البرنامج ) .

ملاحظة 2 : التعليمات اللحظية تعمل فقط على سجلات العمل العام ما بين R16 و حتى R31 .

تم تعديل بواسطه avr
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

أولاً : التعليمات الحسابية و المنطقية .

1 ) ADD ( الإضافة بدون الحمل )

post-160845-1223759103_thumb.jpg

و تقوم بجمع سجلين بدون القيمة المخزنة في مؤشر الحمل C و تضع القيمة الناتجة في السجل الهدف Rd .

مثال:

add   r1, r2;  r1 = r1 + r2 
add r28, r28; r28 = r28 + r28

عدد النبضات ( الدورات ) : 1

2 ) ADC ( الإضافة مع الحمل ) :

post-160845-1223759398_thumb.jpg

تجمع سجلين بالإضافة لمحتوى مؤشر الحمل C ، و تضع الناتج في السجل الهدف .

مثال:

add   r2, r0; Add low byte 
adc r3, r1; Add with carry high byte

إضافة محتوى سجل ثنائي البايتات إلى سجل ثنائي البايتات آخر ( حيث سيتطلب الأمر مراعاة بت الحمل )

عدد النبضات الساعية: 1

3 ) ADIW ( إضافة لحظية لكلمة – 2 بايت - ) :

post-160845-1223759620_thumb.jpg

تقوم بإضافة قيمة ما ( ما بين 0 و 63 ) إلى محتوى سجل مزدوج و تخزين القيمة الجديدة فيه مباشرة

مثال :

adiw   r25:r24, 1; Add 1 to 25:r24 
adiw ZH:ZL, 63; Add 63 to the Z-Pointer r31:r30

عدد النبضات الساعية: 2

4) SUB ( الطرح بدون الحمل ) :

post-160845-1223759773_thumb.jpg

تطرح محتوى سجلين من بعضهما و تخزن القيمة في السجل الهدف Rd .

مثال :

sub   r13 , r12; Subtract r12 from r13

عدد النبضات الساعية : 1

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

5 ) SUBI ( الطرح اللحظي ) :

post-160845-1223761324_thumb.jpg

تقوم بطرح قيمة ثابتة ما ( ما بين 0 و 255 ) من سجل و تخزن القيمة في السجل الهدف Rd .

مثال :

subi   r22,0b00000001; Substract 1 from r22

عدد النبضات الساعية : 1

6 ) SBC ( الطرح مع الحمل ) :

post-160845-1223761651_thumb.jpg

تطرح سجلين من بعضهما بمراعاة محتوى مؤشر الحمل و تخزن القيمة الناتجة في السجل الهدف Rd .

مثال :

( طرح سجلين r1:r0 من r3:r2 )

sub   r2, r0; Subtract low byte 
sbc r3, r1; Subtract with carry high byte

عدد النبضات الساعية : 1

7 ) SBCI ( الطرح اللحظي بمراعاة قيمة الحمل ) :

post-160845-1223762311_thumb.jpg

تطرح قيمة عددية ثابتة من السجل بمراعاة قيمة الحمل و تخزن القيمة الناتجة في السجل ذاته Rd .

مثال :

طرح القيمة الست عشرية $4F23 من السجل المزدوج r17:r16

subi   r16, $23; Subtract low byte 
sbci r17, $4F; Subtract with carry high byte

عدد النبضات الساعية : 1

وغدا بإذن الله سنتابع

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

لقد قمت بوضع دليل تعليمات Atmel AVR وذلك حتى نتابع ما توقفنا عنده بالدرس السابق (( التعامل مع ذواكر EEPROM )) والتي سنتعامل معها برمجيا في الدرس القادم

تم تعديل بواسطه avr
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شككككككككككككككككككككككككرا ياأخى العزيز على هذا المجهود الكبير

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

أخي الكريم عبد الله أشكرك على هذا الموضوع الرائع و أرجو أن تكمله للنهاية و أنا معك من المتابعين بإذن الله

و أنا منذ مدة أبحث عن هكذا موضوع رائع و أخيرا وجدته

جزاك الله خيرا و نحن متابعون معك بإذن الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

بســم الله الـرحمــن الرحيــم

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

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

وأشكر الأخ نور على زيارته لموضوعي المتواضع وأسأل الله عز وجل أن يقدرني على أن أفيد أعضاء هذا المنتدى قدرما أستطيع

تكملة الدرس السابق :

8 ) MUL ( الضرب بدون مراعاة الإشارة ) :

post-160845-1225041044_thumb.jpg

تقوم بضرب القيم المخزنة في سجل أول مع القيمة المخزنة في سجل ثاني دون مراعاة إشارة كليهما ، و تخزن قيمة الجداء الناتج في السجلين r1:r0 ( إذا احتوى هذان السجلان على قيم قبل إجراء الضرب فإن القيم القديمة يتم استبدالها بناتج الجداء ) .

مثال :

ضرب عددين مخزنين في سجلين و نسخ ناتج الجداء إلى ذات السجلين

mul   r5, r4; Multiply unsigned r5 and r4 
movx r4, r0; Copy result back in r5:r4

عدد النبضات الساعية : 2

9 ) MULS ( الضرب بمراعاة الإشارة )

post-160845-1225041548_thumb.jpg

تقوم بضرب القيمة المخزنة في Rr بقيمة Rd ، و تخزن ناتج الجداء في r1:r0 .

مثال : ضرب عددين مخزنين في سجلين و نسخ ناتج الجداء إلى ذات السجلين

muls   r21, r20; Multiply signed r21 and r20 
movw r20, r0; Copy result back in r21:r20

عدد النبضات الساعية : 2

10 ) MULSU ( ضرب عدد ذو إشارة مع آخر بدون إشارة )

post-160845-1225042066_thumb.jpg

تقوم بضرب العدد المخزن في Rd ذو الإشارة مع العدد الموجود في Rr دون مراعاة إشارته ، و تخزين ناتج الجداء في r1:r0 .

ملاحظة : يجب العودة إلى دليل التعليمات الخاص بالمتحكم للتأكد من صلاحية هذه التعليمة ، حيث لا تكون قابلة للاستخدام في جميع المتحكمات .

و بالنسبة للمثال المخصص لها فلا يمكن عرض مثال مبسط ، حيث تستخدم هذه التعليمة في عمليات الضرب المعقدة التي لايمكن أن تأتي منفردة في كتلة البرنامج دون توابع خاصة بها ( مثال : ضرب عددين يتألف كل منهما من بايتين فالناتج سيكون مؤلفاً من 4 بايتات ، و ذلك سيتطلب إجراءات مرحلية لعملية الضرب ) .

11 ) FMUL ( الضرب الكسري بدون إشارة ) :

post-160845-1225042377_thumb.jpg

تقوم بضرب قيمة من 8 بت بقيمة أخرى من 8 بت بدون مراعاة الإشارة و من تقوم بعملية إزاحة بمقدار (1 بت ) نحو اليسار .

لماذا عملية الإزاحة ؟ بفرض (N.Q ) عدد ثنائي يحوي N خانة على يسار الفاصلة ، و Q خانة على يمين الفاصلة . إن ناتج جداء عددين من هذا الشكل ( و ليكونا N1.Q1 و N2.Q2 ) سيعطي نتيجة من الشكل ( (N1+N2).(Q1+Q2) ) . و لتطبيقات معالجة الإشارة فإن الشكل ( 1.7 ) هو الأكثر استخداماً للتعبير عن الدخل ، معطياً جداءً من الشكل ( 2.14 ) ، فلذلك ، يجب أن تتم عملية الإزاحة للبايت الأعلى حتى يظهر العدد بهذا الشكل.

و لكن من الجدير بالذكر أن الشكل (1.7 ) هو الأكثر شيوعاً في نظام الأعداد مع الإشارة ، بينما تستخدم تعليمة FMUL في عمليات الضرب الكسري بدون الإشارة ، فلذلك ، تكون هذه التعليمة مفيدة في الحصول على ناتج جداء جزئي عند إجراء ضرب كسري لعددين يتألف كل منهما من 16 بت ( 1.15 ) ليعطيا جداءً بـ 32 بت ( 1.31 ) ، كما يجب مراعاة حالة الطفحان لنظام الإتمام إلى 2 في حال التعامل مع الشكل 1.15 و سنوضح في المثال كيفية التعامل مع هكذا حالات .

إذن ، تقوم التعليمة بضرب عددين من الشكل ( 1.7 ) بدون إشارة و تعطي جداءً من الشكل ( 1.15 ) .

المثال :

ضرب كسري لعددين مؤلف كل منهما من 16 بت مع إشارة و إعطاء ناتج مؤلف من 32 بت .

r19:r18:r17:r16 = (r23:r22 * r21:r20 ) << 1 
fmuls16x16_32:
clr r2
fmuls r23, r21;((signed)ah * (signed)bh) << 1
movw r19:r18, r1:r0
fmul r22, r20;(a1 * b1 ) << 1
adc r18, r2
movw r17:r16, r1:r0
fmulsu r23, r20;((signed)ah * b1 ) << 1
sbc r19, r2
add r17, r0
adc r18, r1
adc r19, r2
fmulsu r21, r22;((signed)bh * al ) << 1
sbc r19, r2
add r17, r0
adc r18, r1
adc r19, r2

عدد النبضات الساعية : 2

12 ) FMULS ( الضرب الكسري مع الإشارة )

post-160845-1225043178_thumb.jpg

تقوم بضرب مع مراعاة للإشارة لعددين من 8 بتات و تعطي ناتجاً بـ 16 بت مع إزاحة يسارية بمقدار 1 بت .

ملاحظة : عند ضرب عددين مثل 0x80(-1) و 0x80(-1) ) سيكون الناتج 0x8000(-1) . و عملية الإزاحة اليسارية ستسبب طفحاناً في النظام المتمم لإثنين .

المثال :

fmuls r23, r22; Multiply signed r23 and r22 in (1.7) format, result in (1.15) format 
movw r23:r22 , r1:r0; Copy result back in r23:r22

عدد النبضات الساعية : 2

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

بســم الله الـرحمــن الرحيــم

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

أعتذر منكم أحبتي في تأخري بوضع الدرس الجديد وها انا أعود لكم بعد غياب وقد أعددت لكم درس التعامل مع الذواكر EEPROM ولنبدء بـ بســم الله الـرحمــن الرحيــم

EEPROM :

تسميتها عبارة عن اختصار لـ ( ذاكرة القراءة فقط القابلة للبرمجة و المحي كهربائياً ) أو Electrically Erasable Programmable Read Only Memory ، و هي كما سلف و ذكرنا إنها النوع الثالث من الذواكر المتواجدة في بنى المتحكمات الصغرية ( تذكرة : النوعان الآخران هما ذاكرة الفلاش و ذاكرة الرام ) ، و أهم ميزة تتمتع بها هي احتفاظها بمحتوياتها حتى في وقت انقطاع التغذية عنها ، كما أن باستطاعة المستخدم تغيير هذه المحتويات أثناء وقت عملها ( وصل التغذية بها ) أو ما يسمى اصطلاحاً RunTime Access . إذن ، فهي وسيط هام جداً لتخزين المعلومات . و لكن قد نتساءل .. ما نوع المعلومات التي نحتاج أن نحتفظ بها أثناء استخدامنا للمتحكم بعد الانقطاع للتغذية ؟ سنرى لاحقاً أن إحدى المهارات التي يجب على المبرمج التمتع بها هي متابعته لحالة بيانات التحكم بإعدادات المتحكم و مواءمتها لأوضاع حفظ الطاقة المختلفة ، فهي إذن معلومات من الضروري الاحتفاظ بها حتى وقت الخروج من وضع حفظ الطاقة ، و غيرها الكثير كقيم المعايرة أو محتويات بعض السجلات الهامة للبرنامج أثناء التطبيق ( يتحدد استخدامها إذن بالتطبيق ) .

أغلب المتحكمات AVR تحتوي على ذواكر من هذا النوع ( نستثني منها ATtiny11 , ATtiny28 ) ، فيجب العودة إلى صفحات البيانات الخاصة بالمتحكم للتأكد من وجودها و مدى المساحة المتطلب توافرها فيها .

عملية الكتابة في الذاكرة :

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

يحدد الموقع ( أو العنوان ) المراد تخزين البيانات فيه في سجل عنوان EEPROM ( EEAR ) ، و هو مقسوم في المتحكم المستخدم في هذه الدورة إلى قسمين : EEARL , EEARH . كما أن البيانات المراد تخزينها يجب أن تكون متضمنة في السجل EEDR أو سجل بيانات EEPROM .

إن سجل التحكم بالـ EEPROM هو السجل المستخدم للتحكم بعمل هذه الذاكرة ، حيث يتضمن ثلاث بتات و هي : EEMWE, EEWE, EERE . البت EERE هو البت المسؤول عن عملية القراءة و ستتم مناقشته لاحقاً .

لإجراء عملية الكتابة : يتوجب على المبرمج القيام بالإجراء التالي :

وضع (1) في البت EEMWE ، و من ثم وضع (1) في البت EEWE،. فإذا لم تكن قيمة EEMWE مساوية (1) فإن وضع (1) في البت EEWE لن يؤثر شيئاً ، كما أن البت EEWE يستخدم لمعرفة إذا ما كان بالإمكان كتابة قيمة جديدة في الذاكرة . و عندما تكون هذه الذاكرة مشغولة بقيامها بعملية كتابة ما فإن قيمة البت EEWE تظل محافظة على (1) حتى الانتهاء من العملية حيث تقلب تلقائياً إلى (0) ، فيمكن للبرنامج المكتوب أن يقوم بفحص متكرر لهذا البت حتى احتوائه على قيمة (0) فيقوم حينها بعملية كتابة جديدة .

في المثال التالي ، سنقوم بتوضيح لعملية كتابة للذاكرة للقيمة 0xAA في الموقع 0x10 مع المراقبة لجاهزية الذاكرة للعملية :

 

cli ; disable interrupts

EEPROM_write:
sbic EECR,EEWE ; if EEWE is cleared, EEPROM is ready
rjmp EEPROM_write; else loop until EEWE cleared
ldi r16, 0x10 ; load r16 with address 0x10
out EEAR, r16 ; and write it to the address register
ldi r16, 0xAA; load with the data we want to write 0xAA
out EEDR, r16; and write it to the data register
sbi EECR, EEMWE ; set master write enable bit
sbi EECR, EEWE; set write enable bit

sei; and allow interrupts again

تم تعديل بواسطه avr
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .