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

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

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

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

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

في المثال التالي سنقوم بقراءة للقيمة المخزنة في العنوان 0x10 و تخزين هذه القيمة في السجل r16 .

EEPROM_read: 
sbic   EECR, EEWE  ; check if the EEPROM is busy writing a byte 
rjmp   EEPROM_write 
ldi   r16, 0x10 ; load address register with 0x10 
out   EEAR, r16 
sbi   EECR, EERE ; set read enable bit 
in   r16, EEDR ; and get the data from address 0x10

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

سنتناول في المرة القادمة موضوع الساعات و مصادرها . فكونوا معنا ...

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

#27

التعليمات المنطقية

14 ) AND ( AND المنطقية ) :

post-160845-1225147191_thumb.jpg

تقوم بعملية AND بين محتوى سجل Rd و Rr و تخزن الناتج في السجل Rd .

المثال :

and   r2, r3; Bitwise and r2 and r3 , result in r2 
ldi  r16 , 1; Set bitmask 0000 0001 in r16 
and   r2, r16;Isolate bit 0 in r2

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

15 ) ANDI ( ANDI لحظية ) :

post-160845-1225147644_thumb.jpg

تقوم بعملية AND بين محتوى سجل Rd و قيمة ثابتة ، و تخزن الناتج عن العملية في السجل Rd

المثال :

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

andi r17, $0F; Clear upper nibble of r17 
andi r18, $10; Isolate bit 4 in r18 
andi r19, $AA; Clear odd bits of r19

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

16 ) OR ( OR المنطقية ) :

post-160845-1225147810_thumb.jpg

تقوم بعملية OR منطقية بين محتوى السجل Rd و السجل Rr و تخزن الناتج في السجل Rd .

المثال :

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

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

17 ) ORI ( ORI المنطقية اللحظية ) :

post-160845-1225148308_thumb.jpg

تقوم بعملية OR منطقية بين سجل Rd و قيمة ثابتة ( عددية ) و تخزن الناتج في السجل Rd .

نلاحظ أهمية العمليات اللحظية في التطبيقات حيث إنها تقوم بترميز تلقائي للعدد الثابت و تجري العملية المنطقية أو الحسابية و تخزن ناتجها في السجل المطلوب خلال نبضة ساعية واحدة فقط .

المثال :

ori   r16, $F0; Set high nibble of r16 
ori   r17, 1; Set bit 0 of r17

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

تم تعديل هذه المشاركة بواسطة avr في 28 أكتوبر 2008 في 02:34

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

#28

18 ) EOR :

post-160845-1225150753_thumb.jpg

تقوم بعملية EOR بين محتوى السجل Rd و محتوى Rr و تخزن الناتج في السجل Rd .

المثال :

eor   r4, r4; clear r4 
eor   r0, r22; Bitwise exclusive or between r0 and r22

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

19 ) COM ( الإتمام لواحد ) :

post-160845-1225151042_thumb.jpg

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

مثال :

com   r4; Take One's Complement of r4 
breq   zero; Branch if zero 
… 
zero : nop; Branch destination ( do nothing )

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

20 ) NEG ( الإتمام إلى إثنين 2 ) :

post-160845-1225151308_thumb.jpg

تقوم بعملية حساب لمحتوى Rd في نظام الإتمام إلى 2 . ( القيمة $80 لا تتغير عند إجراء العملية عليها – يمكن التجريب بواسطة الاستديو - ) . كما أنها تحافظ على القيمة الأصلية في لسجل و لا تغيرها ( و هي كذلك تفيد في عمليات التحكم و التفريع ) .

المثال :

sub   r11, r0; Subtract ro from r11 
brpl   positive; branch if result positive 
neg   r11; Take Two's Complement of r11 
positive : nop; Branch destination ( do nothing

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

تم تعديل هذه المشاركة بواسطة avr في 28 أكتوبر 2008 في 18:20

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

#29

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

حياكم الله

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

و هذه هى بداية أسألتى كما وعدتك

لقد قمت بتحميل الداتا شيت الخاصة به

و و جدت من نظرات الأولية أن الحد الأقصى الذى من الممكن أن يعمل عليه المعالج الداخلى هو 16 ميجا

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

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

معذرة فخبرتى محدودة بالأجيال الأولى فقط و هذه هى بدايتى مع الavr :)

تم تعديل هذه المشاركة بواسطة نــور في 31 أكتوبر 2008 في 07:40

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

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

#30

لدى إستفسار

أنا لم أستوعب

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

هل يستخدم تقنية الPipelines من أجل هذا الأمر

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

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

#31

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

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

PIC or ATMEL8051 : تعمل بسرعة الكوارتز تقسيم أربعة أي إذا كانت سرعة الكوارتز 20MHZ فهو ينفذ التعليمات ويعيد نتائجها فعليا بسرعة 5MHZ أما الـ AVR فهو يعمل بسرعة الكوارتز كما هي لهذا فهو الأفضل بالنسبة للسرعة التي يتميز بها.

فعليا هو يعمل بسرعة تفوق الجيل السابق بأربع أضعاف.

تم تعديل هذه المشاركة بواسطة avr في 1 نوفمبر 2008 في 19:45

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

#32

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

حسنا

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

سوف يكون أمر متع أن ننفذ تطبيق عملى

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

و أظن أن مبرمجات هذا النوع سهلة الصنع ليست كسابقتها

هل يا ترى عندك مخططات من أجل المبرمجة أم أن الأمر سهل !

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

المهم أكمل يا أستاذنا الله يعينك :)

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

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

#34

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

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

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

#35

أخى بارك الله فيك ألاحظ أن دارة المبرمجة تم توصيلها مباشرة على منفذ التوالى و لم يتم إستخدام MAX232 على سبيل المثال كابفر فهل هذا أمر جيد !!

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

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

#36

لقد قرأت أنك سوف تستخدم الAVR Studio

من الممكن أن يدخل الأخوة على هذا الموضوع لكى يتعرفوا عليه أكثر و يحملوه

/index.ph...mp;#entry891152

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

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

#37
نور (محمد نور) كتب:
أخى بارك الله فيك ألاحظ أن دارة المبرمجة تم توصيلها مباشرة على منفذ التوالى و لم يتم إستخدام MAX232 على سبيل المثال كابفر فهل هذا أمر جيد !!

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

نور (محمد نور) كتب:
لقد قرأت أنك سوف تستخدم الAVR Studio

من الممكن أن يدخل الأخوة على هذا الموضوع لكى يتعرفوا عليه أكثر و يحملوه

/index.ph...mp;#entry891152

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

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

#38

21 ) SBR ( أعطِ قيمة 1 منطقي لبتات معينة ) :

post-160845-1226262255_thumb.jpg

تعطي هذه التعليمة قيمة 1 منطقي لبتات محددة في سجل ما Rd ، و هي عملياً تقوم بعملية ORI ما بين محتويات ذلك السجل و القيمة العددية K ( تسمى علمياً بالقناع Mask ) و تخزن الناتج عن العملية في السجل Rd .

أمثلة :

sbr   r16,3 ; Set bits 0 and 1 in r16 
sbr   r17, $F0 ; Set 4 MSB in r17

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

22) CBR ( أعطِ قيمة 0 منطقي لبتات معينة ) :

post-160845-1226262402_thumb.jpg

تقوم هذه التعليمة بإعطاء قيمة 0 لبتات محددة في السجل Rd ، و هي عملياً تقوم بعملية AND منطقية ما بين محتويات ذلك السجل و متمم القيمة العددية K ، و من ثم تخزن النتيجة في السجل الهدف Rd .

أمثلة :

cbr   r16, $F0 ; Clear upper nibble of r16 
cbr   r18, 1; Clear bit 0 in r18

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

23 ) INC الزيادة بواحد :

post-160845-1226262505_thumb.jpg

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

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

و عند تنفيذ التعليمة على عدد بدون إشارة فإن هناك تعليمتين للتفريع فقط يمكن استخدامهما بعدهما و هما BREQ , BRNE ، أما في حالة الترميز المتمم إلى 2 فإن جميع تعليمات التفريع يمكن استخدامها .

أمثلة :

clr   r22 ; Clear r22 
loop :   inc   r22  ; Increment r22 
… 
cpi   r22, $4F  ; Compare r22 to $4F 
brne   loop  ; Branch if not Equal 
nop  ; Continue /or/ do nothing

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

24 ) DEC الإنقاص بـ 1 :

post-160845-1226262588_thumb.jpg

تطرح هذه التعليمة ( 1 ) من القيمة المخزنة في السجل Rd و تضع الناتج في ذات السجل .

كما هو الحال بالنسبة للتعليمة 23 : لا تتأثر قيمة الراية C بهذه التعليمة ، و هذا يسمح باستخدام هذه التعليمة في عدادات الحلقات في الحسابات متعددة الدقة .

عند التنفيذ على قيم عددية بدون إشارة فإن تعليمتي التفريع BRNE,BREQ فقط يمكن استخدامهما ، أما في حالة الترميز المتمم إلى 2 فيمكن استخدام جميع تعليمات التفريع ذات الإشارة.

المثال :

ldi   r17, $10 ; Load constant in r17 
loop :   add   r1, r2 ; Add r2 to r1 
dec   r17 ; Decrement r17 
brne   loop ; Branch if r17<>0 
nop   ; continue /or/ do nothing

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

25 ) TST الفحص الصفري السالب :

post-160845-1226262698_thumb.jpg

تقوم هذه التعليمة بفحص القيمة المخزنة في السجل Rd معدومة (0) أو سالبة ، و هي عملياً تقوم بعملية AND منطقية ما بين محتوى السجل و نفسه ، و بالتالي ، و تبقى قيمة السجل ذاتها بدون تغيير بعد تنفيذ التعليمة .

مثال :

tst   r0 ; Test r0 
breq   zero  ; Branch if r0 = 0 
… 
zero :	nop  ; Branch destination /or/ do nothing

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

26) CLR تصفير السجل - إعطاء جميع بتاته قيمة الصفر - :

post-160845-1226262840_thumb.jpg

تقوم بإعطاء جميع بتات السجل قيمة 0 ، و هي عملياً تقوم بعملية EOR ما بين قيمة السجل و نفسها ، و هي ستؤثر بالتالي على القيمة المخزنة كاملة و تعطي السجل بالتالي قيمة 0 .

مثال :

clr   r18  ; Clear r18 
loop:   inc   r18 ; Increase r18 
… 
cpi   r18, $50  ; Compare r18 to $50 
brne   loop

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

27 ) SER توحيد السجل – إعطاء جميع بتاته قيمة 1 - :

post-160845-1226262970_thumb.jpg

تقوم بتحميل القيمة $FF مباشرة في السجل Rd .

مثال :

clr   r16  ; Clear r16 
ser   r17 ; Set r17 
out   $18, r16 ; Write zeros to PortB 
nop   ; Delay /or/ do nothing 
out   $18, r17  ; Write ones to PortB

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

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

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

#39

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

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

لك منا جزيل الشكر والامتنان على هذه الدورة العظيمة والمهمة

ياريت لو تتكلم لينا عن fuse bit الضبط العام عندما تريد استخدام الهزاز الداخلي او الخارجي .

وشكرا

#40

السلام عليكم

حياكم الله

يا ترى أين ذهب الأخ صاحب الموضوع

لعل المانع خيرا

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

و لكن ها أنا ذا أرجع إليك مرة أخرى

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

ثانيا : هاك سؤال على الماشى لحين رجوعى بإذن الله تعالى

هل الفارق الوحيد بين المتحكمات الآتية هو سعة الذاكرة

ATMEGA8

ATMEGA16

ATMEGA64

ATMEGA128

أرجو توضيح هذه النقطة للأهمية

و أيضا لو أن الفارق هو حجم الذاكرة فقط

فهل يا ترى الأفضل أن أشترى الأعلى ذاكرة أم أن ال ATMEGA16 مناسب لكافة التطبيقات

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

تم تعديل هذه المشاركة بواسطة نور (محمد نور) في 3 يناير 2009 في 08:07

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

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

#41
محمد الغزالى كتب:
بسم الله الرحمن الرحيم

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

لك منا جزيل الشكر والامتنان على هذه الدورة العظيمة والمهمة

ياريت لو تتكلم لينا عن fuse bit الضبط العام عندما تريد استخدام الهزاز الداخلي او الخارجي .

وشكرا

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

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

ومن تكملة الموضوع وإن شاء الله بعد إنتهائي من المشروع الذي أعمل عليه سأتفرغ لتكملة ما بدءت

أما بالنسبة لسؤالك عن fuse bit :

تمتلك عائلة ATMEL AVR عدت خيارات متاحة للمستخدم في تحديد ساعة النظام

إما ساعة نظام داخلية RC و تأتي على الشكل التالي 1 , 2 , 4 , 8 MHz

ويمكن ضبطهم بواسطة fuse bit من CKSEL

1MHz = 0001
2MHz = 0010
4MHz = 0011
8MHz = 0100

وأيضا يمكن أستخدام هزاز RC خارجي والمجال المسموح هو من 100KHz حتى 12MHz وهذه البتات الخاصة بمعايرته

100KHz  to  900KHz  = 0101
900KHz  to  3MHz  = 0110
3MHz  to  8MHz  = 0111
8MHz  to  12MHz  = 1000

أما لأستخدام الكريستال فأنصحك بضبط الـ CKSEL على

0MHz  to  16MHz = 0000

أتمنى أن أكون قدمت لك ما تريد أخي محمد

نور (محمد نور) كتب:
السلام عليكم

حياكم الله

يا ترى أين ذهب الأخ صاحب الموضوع

لعل المانع خيرا

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

و لكن ها أنا ذا أرجع إليك مرة أخرى

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

ثانيا : هاك سؤال على الماشى لحين رجوعى بإذن الله تعالى

هل الفارق الوحيد بين المتحكمات الآتية هو سعة الذاكرة

ATMEGA8

ATMEGA16

ATMEGA64

ATMEGA128

أرجو توضيح هذه النقطة للأهمية

و أيضا لو أن الفارق هو حجم الذاكرة فقط

فهل يا ترى الأفضل أن أشترى الأعلى ذاكرة أم أن ال ATMEGA16 مناسب لكافة التطبيقات

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

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

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

ATMEGA16 يكفي لكافة التطبيقات التي سنتطرق لها في موضوعنا هذا بإذن الله.

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

#42

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

أعتذر منكم أخوتي في الله على غيابي الطويل عنكم

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

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

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

#43

انا متابع للاخبار الموضوع ايضا معك واضعه فى الخطة حين تكتمل وعندما تريد يمكننى ان انظم الموضوع بناء على تعليماتك عندما تنتهى

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

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

#44

شكرا لإهتمامك أخي حريف برمجة

والله أتمنى ان أرى الموضوع مرتب أكثر

ولكن كما قلت حتى انتهي .

وبالفعل أفضل

وشكرا لك مجددا

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

#45

السلام عليكم

حياكم الله

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

لقد تم إخفاء معظم المشاركات الغير مهمة حتى ينتظم الموضوع أكثر

ننتظر منك الإكمال

أعانك الله

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

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

#46

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

بســم الله الـرحمــن الرحيــم أبدء

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

مع اننا لم ننتهي من شرح جميع تعليمات العائلة ولكن حتى لا تحسون بالملل من التعليمات

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

لقد قام الأخ نور محمد نور بوضع رابط تحميل المترجم Avr Studio 4 الخاص بالعائلة وهو مجاني من الشركة المصنعة .

ولكن يطلب منكم بعض المعلومات قبل تحميل المترجم وهو أمر روتيني فلا تبخلو عليهم بهذه المعلومات :P

رابط تحميل AvrStudio4.16

الخطوات الأولى بعد تنصيب البرنامج

post-160845-1243713613_thumb.gif

post-160845-1243713905_thumb.gif

post-160845-1243714113_thumb.gif

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

#47

post-160845-1243799139_thumb.gif

1- و هو جزء مألوف للأخوة القراء حيث يتألف من أشرطة للقوائم و الأدوات ( و لا نفضل شرح محتويات هذه الأشرطة قبل معرفة الأغراض التي سنحتاجها منها حيث لا نرى فائدة مما يقوم به المدرسون من شرح لأداة برمجية كالمعاملات مثل (؟) قبل معرفة القارئ بأنه سيحتاج مبدأ الشرط في كتابته للبرنامج ، أو المعامل (::) قبل تناول مفهوم مجال الرؤية في لغة ++C ) .

2- المكان المخصص لخصائص المشروع و العمليات التي تحدث أثناء المحاكاة ، و الأجزاء التالية ستوضح الأمر أكثر .

3- Project هو الخيار الذي يعرض الملفات المحتواة في المجلد الخاص بالمشروع و هو أسهل طريق لتضمين ملفات إضافية .

4- Processor وهو المكان المخصص لسجلات المتحكم وهم R0 to R31.

5- هو الحقل الذي سيكتب فيه نص البرنامج بتعليمات لغة التجميع .

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

7- المكان المخصص لمشاهدة ما يحصل على أحد سجلات الدخل في المتحكم .

8- رسائل المعلومات الخاصة بالبناء و التحذيرات و الأخطاء و نتائج العمليات التي يقوم بها الاستوديو على التطبيق .

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

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

#48

مراحل كتابة البرنامج بلغة الأسمبلي assembly في AVR Studio:

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

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

2. تضمين الملفات : و كذلك ، فإنه من البديهيات في المترجمات للغات عالية المستوى ، يتم تضمين بعض الملفات الرأسية الحاوية على توابع هامة للعمل ، و توفر وقتا أكبر من كتابة هذه التوابع من جديد ، إلا أنه في مترجمات لغة الأسمبلي الخاصة بهذا المتحكم و تطبيقاته : فإنه تتلخص إلى حد كبير فائدة تضمين الملفات بإحضار مجموعة التعليمات الخاصة بنمط المتحكم الذي يتم إجراء التطبيق معه ، فليست كل المتحكمات تستطيع استيعاب جميع التعليمات بلغة الأسمبلي ، فمثلاً ، في المتحكم الذي سنتعامل معه ATmega 16 فإن له ( كما ذكر بالمقدمة ) 131 تعليمة ، بينما نجد في متحكمات أخرى بنية برمجية تقتصر على 64 تعليمة ( كما هو الحال في بعض المتحكمات الأخرى من النمط AT tiny ) .

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

تتم عملية التضمين بواسطة التعليمة :

.include "m16def.inc"

التي توضع في بداية البرنامج .

3. مرحلة ما قبل التوابع :

و تتضمن أكثر من عملية في وقت واحد ، و يراعى تسلسلها بقدر كبير من الاهتمام .

و هي على الترتيب :

1. التعريفات : بواسطة التعليمة .equ و تتلا باسم العنصر المراد إعطاء اسم ما أو قيمة له .

فمثلاً : تفيد التعليمة التالية : .equ one = 0b00000001 بإعطاء كلمة واحد القيمة العددية لهذا الرقم ، فإذا أريد استخدام هذه القيمة العددية أثناء البرنامج فسيتم استخدام الكلمة one ، و كذلك ، فإن التعريف يفيد بإعطاء اسم ما لسجل ما أو بت bit يلزم قراءته أثناء التطبيق . فمثلاً : .equ Col1 = PB4 تدل على القيمة المدخلة أو المخرجة للبت الخامس من البوابة B ، و إسناد الاسم Col1 لها . فهذه العملية تفيد في إعطاء ترميز مناسب لأرجل البوابات أثناء التعامل مع البرنامج .

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

و تستخدم التعليمة JMP لتنفيذ هذه القفزات و تتلا باسم التابع الخاص بالمقاطعة المراد الانتقال إليها .

مثل : JMP Reset ، تنقل هذه التعليمة مؤشر التطبيق إلى التابع الخاص بعملية ال Reset .

4. مرحلة التوابع :

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

و في هذه المرحلة تستخدم أغلبية التعليمات ضمن البنية البرمجية للمتحكم ، و يتم تعريف التابع بواسطة Label يتلا بنقطتين رأسيتين ( : ) ، و من ثم كتلة تعليمات هذا التابع .

سنلاحظ هذه الخطوات بشكل عملي أكثر في التطبيقات و المشاريع التي سنقوم بتنفيذها معا إن شاء الله .

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

#49

خطوات مرحلية في استخدام المترجم AVR Studio

أولاً : يسمح ال editor أو المحرر في البرنامج ( الاستوديو ) بكتابة النص دون الأخذ بعين الاعتبار الفراغات بين السطور و الكلمات ، و هو غير حساس للأحرف الكبيرة أو الصغيرة باللغة الإنجليزية ، كما يتجاهل الأسطر الفارغة بين كتل التوابع . و هذا من أهم القواعد في كتابة البرنامج .

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

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

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

رابعاً : بعد كتابة نص البرنامج ، فإنه يتوجب القيام بعملية بناء له build حيث تتولد مجموعة من الملفات بامتدادت مختلفة . asm و هو امتداد يستخدم بواسطة الاستوديو لإجراء التغييرات على البرنامج ، و امتداد hex و هو الملف الذي يتم شحنه إلى ذاكرة المتحكم . هذان هما أهم ملفين يتم توليدهما بواسطة المترجم بعد عملية البناء .

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

التطبيق الأول :

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

الهدف من تناول التطبيق في الدرس :

1. أخذ فكرة عن البرامج المكتوبة بلغة التجميع بواسطة الاستوديو .

2. تناول بعض التعليمات الهامة والمستخدمة في كتابة البرامج بكثرة.

و فيما يلي سنعرض النص البرمجي الذي سنكتبه في الحقل المخصص لذلك ( الحقل ذو الرقم 5 الذي أشرنا إليه في البداية ).

post-160845-1243955388_thumb.gif

الجزء الأول :

و هو مبتدئ بموجه التضمين .include و هي المرحلة التي تحدثنا عنها سابقاً .

الجزء الثاني :

يبتدئ بتعليق يوضح أن هذا الجزء خاص ببرمجة البوابة A على أنها بوابة خرج للقيمة .

السطر الأول : و تفيد هذه التعليمة SER : Set Register بوضع جميع قيم بتات السجل المطلوب R16 على القيمة 1 المنطقية .

السطر الثاني : تخرج القيمة المخزنة في السجل R16 على سجل الدخل و الخرج PortA الخاص بالقيمة المخرجة على أرجل البوابة A .

السطر الثالث: تبرمج أرجل البوابة على أنها مخارج أيضاً ، و ذلك بإسناد قيمة 1 منطقي لبتات هذا السجل .

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

الجزء الثالث ( التابع loop ) :

و هو عبارة عن حلقة تنفذ باستمرار بواسطة المتحكم .

السطر الأول : تعليمة in التي تأخذ قيمة مخزنة في سجل القيمة على البوابة PinB و تخزنه على سجل العمل العام المطلوب R16 للتعامل معه .

السطر الثاني : تعليمة out تقوم بإخراج القيمة التي خزنت في السجل R16 على البوابة A .

السطر الثالث : تعليمة rjmp تعود بمؤشر التنفيذ إلى بداية التابع loop لتغلق الحلقة اللامنتهية .

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

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

post-160845-1243955780_thumb.gif

سنتناول في الدرس القادم عملية المحاكاة خطوة بخطوة ، فكونوا معنا .

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

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

#50

تقابلنى مشكلة عند كتابة الكود بالسى فى الAVR Studio ألا و هى أن حجم الكود فجأة يتضخم من واحد كيلو إلى 11 أو 15 كيلو لمجرد أننى أقوم بإستخدام switch case !!

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

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

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