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

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

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

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

أما بعد إخوتي الأعزاء اعتذر منكم لغيابي الطويل عن المنتدى لأسباب خاصة

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

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

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

تم تعديل هذه المشاركة بواسطة *Horizon* في 18 سبتمبر 2011 في 21:04

#77
*Horizon* كتب:

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

أما بعد إخوتي الأعزاء اعتذر منكم لغيابي الطويل عن المنتدى لأسباب خاصة

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

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

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

مشكووووور على المجهووود والله نفعتنا . استمر اخوي الله يوفقك

#78

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

إخوتي الأعزاء انا اعمل الأن في تصميم روبوت مع ذراع ألي وعند إنتهائي منه سأقوم بإعداد تقرير مفصل حول الهاردوير و السوفت وير و إظن ان

هذا المشروع سيقوم بتغطية 90% من التجهيزات الداخلية للمايكرو كونترولار و ربطه مع العتاد الخارجي من محركات و شاشات LCD

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

و السلام عليكم

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

#79

شكرا لييييييييييييييييييك كتير ع مجهودك الرائع

كنت اتمني مساعدتي انا ببرمج ال avr بواسطة برنامج avr studio 5

وعايز ادخل قيمة انالوج ع 6 بورت وتحويلهم لديجيتال ومقارنتهم بقيمة لعمل function

السؤال ازاااااااي اعرف افعل السته مره واحده

#80

كل الشكر والتقدير والاحترام لكاتب الموضوع avr موضوع رائع وشرح ممتاز لابعد الحدود، تسلم يداك استاذ avr وياريت كنت ملحق الموضوع من أوله

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

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

#81
فارس كمال كتب:

شكرا لييييييييييييييييييك كتير ع مجهودك الرائع

كنت اتمني مساعدتي انا ببرمج ال avr بواسطة برنامج avr studio 5

وعايز ادخل قيمة انالوج ع 6 بورت وتحويلهم لديجيتال ومقارنتهم بقيمة لعمل function

السؤال ازاااااااي اعرف افعل السته مره واحده

عذرا اخي العزيز على التأخير في الإجابة على سؤالك

أولا عليك أن تقوم بتعريف مصفوفة في بداية الكود البرمجي كما يلي :

uint16_t x[6];

ثانيا نقوم بإعداد المبدل التشابهي كما يلي

void InitADC(void)
{
	ADMUX  = (1<<REFS0);     				// For Aref = AVcc = 5.00V;
	ADCSRA = (1<<ADEN)|(1<<ADIE)|(1<<ADATE) // ADC Enable , Auto Trigger Enable , Enable Interrupt 
			|(1<<ADPS2)|(1<<ADPS1);  		// Rrescalar div factor = 64 = 125 KHZ @ 8MHZ
	SFIOR  = (1<<ADTS2);					// Trigger Timer/Counter0 Overflow
}

في هذا الكود قمنا بقدح المبدل ليبداء عملية التحويل كل 32 ميلي ثانية بواسطة المؤقت 0

void InitTimer0(void)
{
	TCCR0  = (1<<CS02)|(1<<CS00); // Fcpu / 1024 * 256 = 8MHZ = 30HZ = 32MS
	TIMSK |= (1<<TOIE0); // Timer/Counter0 Overflow Interrupt Enable
}

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

ISR(ADC_vect)
{
	static uint8_t Index = 0;
	x[Index] = ADC;
	if(++Index >= 6){Index = 0;} 
	ADMUX = (1<<REFS0)|(Index);
 }
#82

سؤال 1:

قراءت في التعليمات الحسابية والمنطقية فوجدت بعض التعليمات مثل الضرب بانواعه تستخدم اول سجلينR0 وR1 فلما هما بالتحديد وهل يعني هذا اننا في كتابة البرنامج نستبعد التعامل مع هذين السجلين لاستخدام المتحكم لهما ، يعني يمسح معلوماتهما من استخدام ناتج قيمة الضرب فيهما

سؤال 2:

في التعليمة اللحظية adiw لماذا فقط تضيف القيمة من 0 وحتى 63 بينما تعليمات اخرى تضيف من 0 وحتى 255 مثل subi

وما علاقة السجلات الاربعة 24 26 28 30 فقط بالتعليمة adiw

ايضا يوجد خطأ لاصلاحه لان التعليمة adiw تضيف من 0 حتى 63 ومكتوب في المثال تضيف من 1 الى 25 ، فيجب اضافة R25 ليعرف المبتدىء مثلي انها سجل بعد قراءتها عدة مرات

adiw   r25:r24, 1; Add 1 to 25:r24

سؤال 3:

هل تعليمات توفير الوقت هي نفسها التعليمات اللحظية التي تستخدم في نصف السجلات الاخير من R16 وحتى R31 وما علاقة الوقت بالسجلات من R0 وحتى R15

اخيرا

هل يمكن للاخوه الفضلاء شرح ارجل المتحكم باللغة العربية

post-160845-1221683527.jpg

#83
اقتباس
قراءت في التعليمات الحسابية والمنطقية فوجدت بعض التعليمات مثل الضرب بانواعه تستخدم اول سجلينR0 وR1 فلما هما بالتحديد وهل يعني هذا اننا في كتابة البرنامج نستبعد التعامل مع هذين السجلين لاستخدام المتحكم لهما ، يعني يمسح معلوماتهما من استخدام ناتج قيمة الضرب فيهما
نعم وحدة الضرب والقسمة غالبا فى اى ميكرو لها معمارية خاصة فى انها لا تدخل على خط نقل البيانات العام فى المتحكم ليتم تخصيص سجلين لها لتقوم فيهما بعمليات الجمع والإزاحة وكل العمليان التى يستخدمها المتحكم للضرب "اي كان نوع دائرة الضرب " وبعد ذلك تستخدم هاذين المسجلين فى الدخول على ناقل البيانات

اقتباس
سؤال 2:

في التعليمة اللحظية adiw لماذا فقط تضيف القيمة من 0 وحتى 63 بينما تعليمات اخرى تضيف من 0 وحتى 255 مثل subi

وما علاقة السجلات الاربعة 24 26 28 30 فقط بالتعليمة adiw

بالنسبة لجمع 16 بت فهو يعمل على المسجلات سابقة الذكر لانها حسب ال architecture لل AVR فهى التى تقبل بيانات 16 بت.

اما من 0 حتى 63 فهى معلومة غير دقيقة فأعتقد انه كان يقصد 65535 وهو اعلى رقم يمكن ان يحتوى فى 16 بت

تم تعديل هذه المشاركة بواسطة حريف برمجة في 9 مايو 2012 في 07:46

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

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

#84

اخ حريف البرمجة كلامك صح بس بسال فلما هما بالتحديد (هل لانهما في الاول) وهل يعني هذا اننا في كتابة البرنامج نستبعد التعامل مع هذين السجلين

وفي سؤالي الثاني الرسم يشير الى K تاخذ من 0 وحتى 63 post-160845-1223759620.jpg

فاذا كانت من 0 وحتى 65535 فلماذا الاخرى من 0 وحتى 255 (فهل لان التعليمة تضيف كلمة وليس بايت) وما علاقة السجلات الاربعة المشروحة للتعليمة adiw فقط

سؤال 4:

في التعليمة ANDI قال صاحب الموضوع جزاه الله خيرا

اقتباس
ستعرض هذه الأمثلة بعضاً من الاستخدامات الواسعة لهذه العملية المنطقية ، مثل : تصفير جزء من أحد السجلات ، أو عزل جزء منه أو غيرها من العمليات على مستوى البت .
andi r17, $0F; Clear upper nibble of r17 
andi r18, $10; Isolate bit 4 in r18 
andi r19, $AA; Clear odd bits of r19

في السطر المثال الاول تقوم التعليمة بمسح نصف السجل من القسم العلوي

في السطر الثاني السؤال كيف تم عزل 4 بت من السجل باسناد $10 بالست عشري فالقيمة 10 بالنظام الثنائي تعني 00010000 من اصل 11111111 ؟

وفي السطر الثالث كيف تم المسح والعزل وماهي النتيجة

سؤال 5:

في المثال

or   r15, r16; Do bitwise or between registers 
bst   r15, 6; store bit 6 of r15 in T Flag 
brts   ok; Branch if T Flag is set 
…. 
ok :   nop; Branch destination - do nothing

هل يمكن تشرحوا لي التعليمة bst و brts مذا فعلت

تم تعديل هذه المشاركة بواسطة View في 9 مايو 2012 في 15:19

#85
اقتباس
اخ حريف البرمجة كلامك صح بس بسال فلما هما بالتحديد (هل لانهما في الاول) وهل يعني هذا اننا في كتابة البرنامج نستبعد التعامل مع هذين السجلين
نعم يبدو ان الخطأ منى اذا كان هذا ما هو موجود فى الداتاشيت نعم الرقم K وهو ثابت يكون موجود داخل الكود اعلى رقم يمكن جمعه على word هو 63
اقتباس
الاربعة المشروحة للتعليمة adiw فقط
السجلات السابقة هى التى من الممكن ان تنفذ عليها التعليمة وهو ذكر او سجل من كل ثنائى يعنى لو تستخدم 24 يكون

ADIW r25:r24,K

اقتباس
في السطر الثاني السؤال كيف تم عزل 4 بت من السجل باسناد $10 بالست عشري فالقيمة 10 بالنظام الثنائي تعني
هو يقول انه عزل البت الرابعة وليس أربع بتات ومن تحليل الرقم 10 HEX ستعلم النتيجة

حلل الرقم AA ستجد انه يكافئ 10101010 وهى البتات الزوجية فى المسجل مع تعليمة AND يتم تصفيرها

اقتباس
هل يمكن تشرحوا لي التعليمة bst و brts مذا فعلت

BST هى إختصار ل bit store وتقوم بتخزين هذا الرقم فى بت موجودة فى مسجل الحالة

brts وهى تعليمة تتفحص البت T إذا كانت = 1 يقوم بعمل التفريع

تم تعديل هذه المشاركة بواسطة حريف برمجة في 10 مايو 2012 في 13:06

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

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

#86

جزاك الله خير اخي حريف برمجة على الشرح

اما بعلاقة السجلات الاربعة 24 26 28 30 بالتعليمة adiw ففهمت منك انها تستخدم 8 سجلات فقط من 24 الى 31 مقسمه على 2 (4 كلمات يمكن تخزينها معا وتبدا السجلات بالارقام الزوجيه) وليس السجلات اللخطية كاملة من 16 وحتى 32 (8 كلمات) ،يعني ما النا دخل بلذي اخترع التعليمه

السؤال 4 فهم

السؤال 5 فهم وجزاك الله خيرا ،ولكن مادخل التعليمات الاخرى بشرح تعليمة OR

في نقاط لم اجد اجابتها

سؤال 1:

قراءت في التعليمات الحسابية والمنطقية فوجدت بعض التعليمات مثل الضرب بانواعه تستخدم اول سجلينR0 وR1 فلما هذان السجلان، اي اذا كنت مثلا مخزن في السجلين R0 وR1 قيمة ما لاستفيد منها بالبرنامج في موضع معين ثم اراد المتحكم يعمل عملية ضرب في امر او سطر ما آخر بالبرنامج فعندئذ يمسح معلوماتهما من اجل الضرب ، فالسؤال لماذا الضرب يستخدم السجل الاول والثاني بالتحديد من أصل(32 سجل) هل لانهما اول سجلين ووهل يعني هذا اننا في كتابة البرنامج نستبعد التعامل مع هذين السجلين لاستخدام المتحكم لهما

سؤال 2:

في التعليمة اللحظية ADIW (إضافة لحظية لكلمة) لماذا فقط تضيف للسجلين القيمة من 0 وحتى 63 فقط بينما تعليمات اخرى مثل SBCI (الطرح اللحظي) تطرح من السجل من القيمة 0 وحتى 255 ،يعني ما علاقة الاختلاف بين الرقمين في التعليمتن واحده اخذت ل 63 والثانية ل 255

#87
اقتباس
ولكن مادخل التعليمات الاخرى بشرح تعليمة OR
لا أعلم تسأل فيها صاحب الشرح لكن ربما أراد ان يضع التعليمة فى كود مناسب
اقتباس
قراءت في التعليمات الحسابية والمنطقية فوجدت بعض التعليمات مثل الضرب بانواعه تستخدم اول سجلينR0 وR1 فلما هذان السجلان، اي اذا كنت مثلا مخزن في السجلين R0 وR1 قيمة ما لاستفيد منها بالبرنامج في موضع معين ثم اراد المتحكم يعمل عملية ضرب في امر او سطر ما آخر بالبرنامج فعندئذ يمسح معلوماتهما من اجل الضرب ، فالسؤال لماذا الضرب يستخدم السجل الاول والثاني بالتحديد من أصل(32 سجل) هل لانهما اول سجلين ووهل يعني هذا اننا في كتابة البرنامج نستبعد التعامل مع هذين السجلين لاستخدام المتحكم لهما
لماذا إستخدم هذين السجلين هذا السؤال الذى تسأله دائما إجابته تكمن فى معمارية المعالج

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

اما البيانات الموجودة بالأصل فى السجلين نعم يجب اما تخصيصهما لعملية الضرب فقط أو "انت من بنى البرنامج وتعرف متى سيتم الضرب" قبل ان تدخل لتعليمة الضرب تضع فى الإعبار ان السجلين فارغين

اقتباس
في التعليمة اللحظية ADIW (إضافة لحظية لكلمة) لماذا فقط تضيف للسجلين القيمة من 0 وحتى 63 فقط بينما تعليمات اخرى مثل SBCI (الطرح اللحظي) تطرح من السجل من القيمة 0 وحتى 255 ،يعني ما علاقة الاختلاف بين الرقمين في التعليمتن واحده اخذت ل 63 والثانية ل 255
إذا صح موضوع 53 هذا فلا ترهق نفسك كثيرا بلماذا سمع ولماذا لم يسمح كلها تكمن فى معمارية المتحكم

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

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

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

#88

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

اقتباس
اما البيانات الموجودة بالأصل فى السجلين نعم يجب اما تخصيصهما لعملية الضرب فقط أو "انت من بنى البرنامج وتعرف متى سيتم الضرب" قبل ان تدخل لتعليمة الضرب تضع فى الإعبار ان السجلين فارغين
هذا مااردته معرفته والتاكد منه وهي ملاحظه هامه ساستبعد السجيلين R0 R1 في تصميم برنامجي وتخزين القيم فيهم واتركهما عند ازدحام باقي السجلات 32 وشكرا لك
اقتباس
إذا صح موضوع 53 هذا فلا ترهق نفسك كثيرا بلماذا سمع ولماذا لم يسمح كلها تكمن فى معمارية المتحكم

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

طبيعتي بحب اعرف، وانا بنتظر جواب ممن قد يعرف لماذا، وانا مالي مستعجل بالاجوبه وجزاك الله خيرا بماافدتني فيه

سؤال 6

في المشاركة 28 مكتوب تعليمه COM ( الإتمام لواحد )

اقتباس
تقوم هذه التعليمة بإتمام محتوى السجل Rd إلى الواحد ( مجرد طرح لقيمة السجل من $FF دون التأثير على محتواه )
هل ممكن اعرف كيف بدون التاثير على محتوى السجل واين سيوضع ناتج الطرح

سؤال 7

المشاركة 28

NEG( الإتمام إلى إثنين 2 ) هل يمكن شرح التعليمه اكثر بمثال عددي وما هو الجواب الناتج ،وسؤال اخر :لماذا القيمة $80 لا تتغير عند إجراء العملية عليها

سؤال 8

هل يمكن شرح التعليمات brpl ، neg، breq

#89

الفرق بين الإثنين هو ان الأمر com يعطى المتمم الأحادى وناتج هذه التعليمة اذا جمعته على الرقم الأصلى سيعطيك 0xff

اما NEG هو يعطى المتمم الثنائى وناتج التعليمة يعطيك 0x00

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

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

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

#90

جزاك الله خيراً أخ view+horizon+حريف برمجة على هذا النقاش الرائع الذى لا يقل عن حوار علماء أفاضل فى مجال شيق وجميل

وأرجو منك التواصل حتى تعم الفائدة على الجميع

وجزاكم الله خيراً

#91

السلام عليكم

 اسنخدمت الضبط كما فى الصورة هل هذا الضبط صحيح لمتحكم atmega 8  فى ضبط fuse مع مذبب خارجى 16mhz وطبعا كما اسلف الاخ فى الشرح الدقة مهمة جدا اثناء برمجة المتحكم وان لم يكن صحيح ,,  ما هو التعديل الصحيح  لضبط fuseعلى مذبب  خارجى اذا كان 16mhz

123.jpg

تم تعديل هذه المشاركة بواسطة الوعد الصادق2 في 18 ديسمبر 2018 في 12:23

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