قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

   

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 09-07-2013, 02:34 AM المشاركة 17   
افتراضي



المشروع الثالث الأضواء المتحركة
الغرض من المشروع :
أن تكون أكثر دراية</SPAN> بإدارة منافذ ports الميكروكونترولر ، فى هذه المرة سوف نستخدم الثمانى مخارج للمنفذ </SPAN>PORTBفى توليد تتابع من الأضواء يمثل الحركة من اليسار إلى اليمين ، واحد تلو الآخر ، مع فاصل زمنى مقداره 200 ميلي ثانية .
المكونات :
· 8 ليد 5 مم .
· 8 مقاومة 330 أوم نصف وات .
الدائرة الكهربية :



فى هذا البرنامج سوف نرى أوامر جديدة وهى "الذهاب إلى الروتين الفرعى" </SPAN>GOSUBو "العودة" RETURN، وهى تستخدم عندما يكون لديك الكثير من التكرار لسطر أو مجموعة أسطر من البرنامج ، فى حالتنا هىDelayMs 1000، فبدلا تكرارها عند كل تغيير للضوء فسوف يتم تجميعها فى روتين فرعى واحد باسم Delayواستدعاؤه عندما تريد ، عبارة "العودة" RETURNتجعل تنفيذ البرنامج يستمر من بعد عبارة الاستدعاء GOSUB.</SPAN> أحد المزايا الرئيسية هى أنه يتم توفير مساحة ذاكرة الميكروكونترولر PIC، والميزة الأخرى أنه إذا أردنا تغيير زمن التأخير فأنه يتم فقط تغيير قيمة واحدة والتى تمتد إلى الجميع بدلا من التكرار لعشرات المرات .
البرنامج :
كود:
Device = 16F628A ; Produce code for a 16F628a device Declare Xtal = 4 ; 4MHz oscillator TRISB =%00000000 ; converts all Port B pins outputs Disco: ; name of the subroutine PORTB =%00000001 ; lights B.0 port, others remain off GoSub Delay ; Delay subroutine and go back when you say RETURN PORTB =%00000010 ; lights B.1 port, others are off GoSub Delay ; go to subroutine and return time when you say RETURN PORTB =%00000100 ; lights B.2 port, others are off GoSub Delay ; Delay subroutine and go back when you say RETURN PORTB =%00001000 ; lights B.3 port, others are off GoSub Delay ; Delay subroutine and go back when you say RETURN PORTB =%00010000 ; lights B.4 port, others are off GoSub Delay ; Delay subroutine and go back when you say RETURN PORTB =%00100000 ; lights B.5 port, others are off GoSub Delay ; Delay subroutine and go back when you say RETURN PORTB =%01000000 ; lights B.6 port, others are off GoSub Delay ;Delay subroutine and go back when you say RETURN PORTB =%10000000 ; lights B.7 port, others are off GoSub Delay ;Delay subroutine and go back when you say RETURN GoTo Disco ; go to beginning of program Delay: ;this is the subroutine pedro DelayMS 1000 ; delay of 200 milliseconds, here we can change Return; back to the GOSUB that sent End
ملحوظة :
مكان الروتين الفرعى Delay يجب أن يكون خارج وبعد سطور البرنامج الرئيسى ، حتى تتمكن عبارة العودة RETURN من العودة إلى المكان الصحيح .





اعلانات

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 09-07-2013, 12:44 PM المشاركة 18   
افتراضي


المشروع الرابع استخدام التكرار فى البرنامج :
قواعد لغة Basic المستخدمة فى البرنامج :

1- إعلان (تعريف) المتغير بالأمر Dim :
الصيغة :

كود:
Dim Variable as Size


الغرض :
يجب إعلان جميع المتغيرات التى يتم تعريفها بمعرفة المستخدم بعبارة Dim .
العوامل :
Variable : "المتغير" يمكن أن يكون أى حروف أبجدية رقمية أو سلسلة نصية .
Size : "الحجم" هو الحجم الطبيعى للمتغير ، وقد يكون : Bit, Byte, Word, Dword, Float, String
مثال 1 :
إعلان متغيرات متعددة بحجم البايت Byte :

كود:
' Declare the variables all as Byte sized Dim A, B, My_Var1, fred, cat, zz


مثال 2 :
إعلان متغيرات ذات أحجام مختلفة

كود:
' Declare different sized variables Dim Var1 as Byte ' Declare an 8-bit Byte sized variable Dim Wrd1 as Word ' Declare a 16-bit Word sized variable Dim Dwrd1 as Dword ' Declare a signed 32-bit Dword sized variable Dim BitVar as Bit ' Declare a 1-bit Bit sized variable Dim Flt as Float ' Create a 32-bit floating point variable Dim StrnG as String*20 ' Create a 20 character string variable

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

كود:
Dim MyVar as Byte or Dim MY_Var as Word or Dim My_Var2 as Bit

· اسم المتغير قد يبدأ بالشرطة السفلية ، ولكن يجب ألا يبدأ برقم ، ولا يمكن أن يزيد طوله عن 32 حرف . أى حرف بعد ذلك سوف يتم تجاهله .

Dim 2MyVar is not allowed
· أسماء المتغيرات غير حساسة لنوع الحروف ، وهذا يعنى أن المتغير:

Dim MYVar
هو نفسه المتغير :
Dim MyVar

· يمكن استخدام Dim أيضا فى إنشاء أسماء مستعارة لمتغيرات أخرى كما يلى :

كود:
Dim Var1 as Byte ' Declare a Byte sized variable Dim Var_Bit as Var1.1 ' Var_Bit now represents Bit-1 of Var1


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

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 09-07-2013, 12:46 PM المشاركة 19   
افتراضي


2- حلقة التكرار For...Next...Step
الصيغة :

كود:
For Variable = Startcount to Endcount [ Step { Stepval } ] {code body} Next
الغرض :
تستخدم حلقة For…Next لتنفيذ عبارة أو سلسلة من العبارات عدد محدد من المرات .
العوامل :
Variable : يشير إلى متغير لفهرس index يستخدم كعداد للحلقة . يمكن استخدام هذا المتغير فى جسم الكود لكن يجب الحذر من تغيير قيمته داخل الحلقة حيث يمكن أن يسبب العديد من المشاكل .
Startcount :"عدد البداية" العدد الذى تبدأ به الحلقة ، والذى سوف يخصص للمتغير كحالة ابتدائية . ولا يشترط أن يكون عدد فعلى ، بل يمكن أن يكون محتويات متغير آخر .
Endcount : "عدد النهاية" العدد الذى تنتهى عنده الحلقة ، ولا يشترط أن يكون عدد فعلى ، بل يمكن أن يكون محتويات متغير آخر أو تعبير .
Stepval : "قيمة الخطوة" ثابت أو متغير اختيارى والذى بواسطته يتم "تزايد" أو "تناقص" المتغير عند كل تكرار من خلال حلقة For-Next . إذا كانت قيمة البداية startcount أكبر من قيمة النهاية endcount عندئذ يجب وضع علامة الطرح قبل قيمة الخطوة stepval..
مثال 1 :

كود:
' Display in decimal, all the values of Wrd within an upward loop Dim Wrd as Word For Wrd = 0 to 2000 Step 2 ' Perform an upward loop Print Dec Wrd ," " ' Display the value of Wrd Next ' Close the loop
مثال 2 :

كود:
' Display in decimal, all the values of Wrd within a downward loop Dim Wrd as Word For Wrd = 2000 to 0 Step -2 ' Perform a downward loop Print Dec Wrd ," " ' Display the value of Wrd Next ' Close the loop
مثال 3 :

كود:
' Display in decimal, all the values of Dwrd within a downward loop Dim Dwrd as Dword For Dwrd = 200000 to 0 Step -200 ' Perform a downward loop Print Dec Dwrd ," " ' Display the value of Dwrd Next
مثال 4 :

كود:
' Display all of Wrd1 using a expressions as parts of the For-Next construct Dim Wrd1 as Word Dim Wrd2 as Word Wrd2 = 1000 For Wrd1= Wrd2 + 10 to Wrd2 + 1000 ' Perform a loop Print Dec Wrd1," " ' Display the value of Wrd1 Next ' Close the loop
ملاحظات :
· لعلك لاحظت من الأمثلة أعلاه ، أنه لا يوجد متغير بعد الأمر Next . المتغير بعد Next هو اختيارى بحت .
· قد تتداخل حلقات For-Next بالعمق الذى تسمح به ذاكرة الميكروكونترولر .
· للخروج من الحلقة يمكنك استخدام الأمر Goto دون أى آثار سيئة، وهذا بالضبط ما يفعله الأمر Break كما يلى :

كود:
For Var1 = 0 to 20 ' Create a loop of 21 If Var1 = 10 Then Goto BreakOut ' Break out of loop when Var1 is 10 Next ' Close the loop BreakOut: Stop
المشروع :


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 09-07-2013, 12:47 PM المشاركة 20   
افتراضي


المشروع :
الدائرة الكهربية :





الغرض :
هذا المشروع مهم جدا لفهم عبارة FOR NEXT .
هذه العبارة تستخدم لتنفيذ سطر أو مجموعة من سطور البرنامج لعدد "n" من المرات .
طريقة التكرار باستخدام عبارة FOR…NEXT :
· فى البداية يتم إعلان متغير عداد حلقة التكرار بالحجم المناسب لعدد مرات التكرار . هنا عدد مرات التكرار "5" لذلك يكون الحجم المناسب هو البايت Byte كما يلى :

كود:
Dim Repeated as BYTE ;First create variable name:" Repeated ", size:BYTE
نبدأ حلقة التكرار بكلمة FOR يليها علامة التساوى "="ثم العدد الابتدائى "1" يليه "TO" ثم العدد النهائى "5" .
ملحوظة :
إذا كان العدد متزايد وقيمة خطوة التزايد بواحد "1" فى كل حلقة تكرار ، كما هو الحال هنا ، فيمكن عدم كتابة عامل قيمة الخطوة step value باعتبارها حالة افتراضية واختيارية . أما إذا كان العدد متناقص فيلزم كتابة الخطوة بالسالب أو تحدد قيمة الخطوة بكتابة عامل قيمة الخطوة بعد العدد النهائى .
بعد ذلك يبدأ تنفيذ سطور التعليمات التى تلى سطر for وحتى الوصول إلى كلمة NEXT ، عندئذ يتكرر تنفيذ التعليمات السابقة حتى الوصول إلى العدد النهائى ليستمر تنفيذ البرنامج من عند السطر الذى يلى كلمة NEXT .


كود:
FOR Repeated = 1 TO 5 ; Execute the following instructions 5 times to where it says NEXT ; and once completed the repetitions continues with the statement that is ; after NEXT, Repeated should be created as a variable, ;i.e. assign a memory space. NEXT
ملحوظة :
يتم إنشاء المتغيرات من نوع BIT, BYTE ,WORD لتخزين البيانات فى ذاكرة RAM والتى تعمل عند توصيل القدرة ويتم مسحها عند فصل القدرة ، وذلك عن طريق تخصيص اسم للمتغير ( مثل Repeat ) وتحديد حجمه لحجز الذاكرة اللازمة له ، على سبيل المثال :

كود:
Dim Repeated as BIT; creates a variable and assigns a size of a bit : 0 or 1 Dim Repeated as BYTE; creates a variable and assigns a size of 8 bits i.e. 0-255 Dim Repeated as WORD; creates a variable and assigns a size of 2 bytes is 0 to 65535
فى هذا البرنامج نريد التكرار 5 مرات ، وبالتالى يتم استخدام الحجم BYTE(0-255) .

البرنامج :

كود:
Dim Repeated as BYTE; make Repeated variable and assigns a memory space of 0-255 Dim Led1 as PORTB.0 ; Led1 names assigned to pin B.0 Start: FOR Repeated = 1 TO 5 ; for repeat 1-5 times HIGH Led1 ; turn on the LED DelayMs 500 ; wait 0.5 seconds LOW Led1 ; turn off the LED DelayMs 500 ; wait 0.5 seconds NEXT ; next iteration is repeated until = 5
DelayMs 2000 ; wait 2 seconds
FOR Repeated = 1 TO 3 ; for repeat 1-3 times HIGH Led1 ; turn on the LED DelayMs 500 ; wait 0.5 seconds LOW Led1 ; turn off the LED DelayMs 500 ; wait 0.5 seconds NEXT ; next repetition until it is repeated = 3
DelayMs 3000 ; wait 3 seconds
GOTO Start ; go to Start END ; end of programming
هذا البرنامج سوف يقوم بالآتى :
يبدأ البرنامج بالعنوان Start:
يتم تكرار الآتى 5 مرات FOR repeated = 1 TO 5 :
· تشغيل on الليد HIGH Led1المتصل بالطرف RB0 لمدة نصف ثانية DelayMs.
· ثم إيقافه LOW Led1 لمدة نصف ثانية DelayMs 500 .
بعدذلك توقف لمدة 2 ثانية DelayMs 2000 .
ثم يتم تكرار ما يلى ثلاثة مرات FOR repeated = 1 TO 3 :
· تشغيل on الليد HIGH Led1المتصل بالطرف RB0 لمدة نصف ثانية DelayMs 500.
· ثم إيقافه LOW Led1 لمدة نصف ثانية DelayMs 500 .
بعدذلك توقف لمدة 3 ثانية DelayMs 3000 .
وتتكرر العملية بصفة مستمرة بالذهاب إلى العنوان مرة أخرى GOTO Start .


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 09-07-2013, 02:33 PM المشاركة 21   
افتراضي


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

قواعد لغة Basic الموجودة بالمشروع :
عامل إزاحة البتات إلى اليسار Bitwise Shift Left '<<'
الغرض :
إزاحة بتات قيمة عدد إلى اليسار عدد محدد من الأماكن .
البتات التى يتم إزاحتها عند النهاية اليسرى للعدد تفقد ، والبتات التى يتم إزاحتها عند النهاية اليمنى للعدد تكون بأصفار .
إزاحة بتات قيمة عدد إلى اليسار بمقدار "n" من الأماكن يكون تأثيرها مثل ضرب هذا العدد فى "2" مرفوعة للأس "n" . على سبيل المثال 100 << 3 ( إزاحة بتات العدد العشرى 100 إلى اليسار 3 أماكن) تكافىء 100 * 2^3 .
مثال :

كود:
Dim Value1 as Word Dim Loop as Byte Value1 = %1111111111111111 For Loop = 1 to 16 ' Repeat with b0 = 1 to 16. Print Bin Value1 << Loop ' Shift Value1 left Loop places. Next

عامل إزاحة البتات إلى اليمين Bitwise Shift Right '>>'
الغرض :
إزاحة بتات قيمة عدد إلى اليمين عدد محدد من الأماكن .
البتات التى يتم إزاحتها عند النهاية اليمنى للعدد تفقد ، والبتات التى يتم إزاحتها عند النهاية اليسرى للعدد تكون بأصفار .
إزاحة بتات قيمة عدد إلى اليمين بمقدار "n" من الأماكن يكون تأثيرها مثل قسمة هذا العدد على "2" مرفوعة للأس "n" . على سبيل المثال 100 >> 3 ( إزاحة بتات العدد العشرى 100 إلى اليمين 3 أماكن) تكافىء 100 / 2^3 .
مثال :
كود:
Dim Value1 as Word Dim Loop as Byte Value1 = %1111111111111111 For Loop = 1 to 16 ' Repeat with b0 = 1 to 16. Print Bin Value1 >> Loop ' Shift Value1 right Loop places. Next
المشروع :
الدائرة الكهربية :




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

تتم الإزاحة باستخدام الضرب والقسمة ، فكما نعلم أن الميكروكونترولر PICيعمل بالنظام الثنائى ، فإذا كان لدينا متغير "X"بقيمة ابتدائية بالقيمة واحد 1 (% 00000001)وتم ضربه فى "2" فإن التنيجة تكون 2 2 (% 00000010)، وهذا بدوره عند ضربه فى 2 ستكون النتيجة 4 4 (% 00000100)، وهلم جرا حتى نصل إلى 128، وهى بالثنائى (% 10000000)، وهكذا فسوف نرى أضواء الليدات بنفس الطريقة كما في أضواء الديسكو، ولجعل أضواء تعود يجب القسمة على 2 ، عندئذ تكون النتيجة 128/2 = 64 أى
(% 01000000)، كما نرى الآن تمت العودة الى إلى اليمين .
يتم كتابة الإزاحة على على النحو التالى:

كود:
LEDS = LEDS << 1
وهو يكافىء الضرب فى 2 والإزاحة خطوة تلو الأخرى إلى اليسار

كود:
LEDS= LEDS << = 2
وهو يكافىء الضرب فى 4 والإزاحة 2خطوة تلو 2 خطوة إلى اليسار .

كود:
LEDS = LEDS >> 1

وهو يكافىء القسمة على 2 والإزاحة خطوة تلو الأخرى إلى اليمين .
البرنامج التالى يبين كيفية تنفيذ الإزاحة :

كود:
Device = 16F628A ; Produce code for a 16F628a device Declare Xtal = 4 ; 4MHz oscillator Dim x as BYTE ; variable x , size 255 Dim LEDS as PORTB ; port B called LEDS TRISB = 0 ; make all port B AS outputs LEDS = 1 ; Load port B with 1 (% 00000001) Start: FOR x = 1 TO 7 ; FOR …NEXT to repeat 7 times LEDS = LEDS << 1 ; move one place the left DelayMs 200 ; wait 200 milliseconds NEXT ; repeat until x is = to 7 FOR x = 1 TO 7 ; repeat 7 times LEDS = LEDS >> 1 ; move one place to the right DelayMs 200 ; wait 200 milliseconds NEXT ; repeat until x is = to 7 GOTO Start ;go to Start END ; end of programming
ملحوظة :
لا تنسى التحميل بالوضع الابتدائى الابتدائى LEDS = 1 ، فإن لم تفعل فلن تحصل على شىء لأن نتيجة ضرب الصفر فى 2 سوف يكون صفر دائما ولن ترى إزاحة .


الصورة الرمزية Omar Mekkawy
Omar Mekkawy
:: مهندس متميز ::
تاريخ التسجيل: Sep 2011
الدولة: مصر
المشاركات: 1,449
نشاط [ Omar Mekkawy ]
قوة السمعة:
قديم 09-07-2013, 05:12 PM المشاركة 22   
Talking


الله يخليك لينا يا مشرفنا العزيز شرح ممتاااااااز
ياحبذا لو تشرح كيفية استخدام المنافذ التناظرية بالبروتون لاني حاولت استخدم
An1 و An3 معاً ولكن البروتس يقول لي انني لم استخدم المنفذ An3 كمدخل تناظري !

كل ما أحتاجه هو شرح كيفية ضبط المنافذ التناظرية كدخل " و إستخدام أكثر من مدخل
في وقت واحد "
هذا الكود يستخدم لضبط المنافذ التناظرية في Pic16f877a وبه خطأ ما لأنني لست خبير بالبرمجة الآن " فأنا إنتهيت من مرحلة الثانوية العامة في مصر وداخل على الجامعة "
كود:
TRISA = %11011011
ADCON1= %10001110
يعطيك العافية
وكل عام وحضرتك بخير


التعديل الأخير تم بواسطة : Omar Mekkawy بتاريخ 09-07-2013 الساعة 05:15 PM السبب: خطأ بالتنسيق

الصورة الرمزية Omar Mekkawy
Omar Mekkawy
:: مهندس متميز ::
تاريخ التسجيل: Sep 2011
الدولة: مصر
المشاركات: 1,449
نشاط [ Omar Mekkawy ]
قوة السمعة:
قديم 09-07-2013, 05:14 PM المشاركة 23   
افتراضي


ويا حبذا لو تشرح لنا كيفية ضبط إعدادات pic16f628a للعمل على المذبذب الداخلي بدلاً من الخارجي


الصورة الرمزية F.Abdelaziz
F.Abdelaziz
:: استاذ و مشرف قسم الالكترونيات ::
تاريخ التسجيل: May 2007
المشاركات: 6,832
نشاط [ F.Abdelaziz ]
قوة السمعة:
قديم 10-07-2013, 02:04 AM المشاركة 24   
افتراضي


الله يخليك لينا يا مشرفنا العزيز شرح ممتاااااااز

ياحبذا لو تشرح كيفية استخدام المنافذ التناظرية بالبروتون لاني حاولت استخدم
An1 و An3 معاً ولكن البروتس يقول لي انني لم استخدم المنفذ An3 كمدخل تناظري !

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

كود:
TRISA = %11011011
كود:
ADCON1= %10001110

يعطيك العافية


وكل عام وحضرتك بخير



أخى الكريم

شكرا جزيلا لك

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

إن شاء الله نتناول التحويل من تناظرى لرقمى بالتفصيل

مع تمنياتى بدوام التوفيق



الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 04:44 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)