مذكره ميكرو كنترولر


(fikry) #1

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

عزيزي المهندس تامر انا اعدت هذه المذكره لك مخصوص لاني ويعلم الله اشعر بانك اخ فاضل لي . وامني ان تقوم هذه المذكره بتقريب مفهوم عمل الميكرو الي ذهن حضرتك وسوف اتناول شرح الميكرو في نقاط اساسيه محدده هذه النقاط اذاذ استوعبتها جيدا سوف تكون باذن الله قادر علي انجاز 98% من مشاريع الميكرو وسوف نستخدم في شرحنا مترجم البيك بيسك pic basic compilier والذي يستخدم لغه البسك السهله والمفضله لدي معظم المبرمجين.

دعنا نحدد النقاط الاساسيه ومفهومها الهندسي …

اولا : الادخال والاخراج input and output operation

المقصود بذلك هو ان نخرج خرج معين علي بورت او بين من بورتات الميكرو او نقوم بادخال دخل الي الميكرو أي نقرأ قيمه من سنسور او أي قيمه نريد ان نعمل لها معالجه .

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

ولكن كيف يتم ذلك يا فكري دعك من سرد النظري وأتنا بالعملي؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

معك عزيزي فخذ هذا الامر

output portname يستخدم هذا الامر لتوجيه البورت لكي يكون مهيأ لعمليه الاخراج.

you can also write this instuction

output port name .pin وهذا الامر يستخدم لتوجيه بين معين من البورت لكي يكون خرجا

مثال علي توجيه الاخراج :

output portb : يعني اجعلي البروت الذي اسمه بي يكون اخراج

output potrb.0 : يعني اجعل البين رقم 0 من البورت الذي اسمه بي يكون خرج وليس كل بينات البورت بي وهذا يوضح لنا كيف يمكن اختيار بين معين من بورت ما لكي يكون اخراج.

ولاخراج قيمه معينه علي البروت بي

portb=$54

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

portb.0=1

وهنا يتم اخراج لوجيك واحد علي البين 0 من البروت بي.

ولكن ماذا عن الادخال ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

نستخدم هذا الامر لتوجيه ادخال البروت ايه مثلا

input porta يعني توجيه البورت ايه لكي يكون دخل

input porta.2 يعني توجيه البين رقم 3 من البورت ايه لكي يكون دخل .

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

DIM fik AS BYTE

INPUT PORTA

fik=PORTA

فاصبح لدينا الان القيمه المدخله مخزنه في متغيرنوعه بايت اسمه FIK

ومن خلال هذه القيمه يمكن التعامل معها . دعنا نري مثال عملي علي الادخال والاخراج

DEVICE 16F877 كلمه device لابد ان يتبعها رقم الميكرو المستخدم

XTAL 4

قيمه الكريستاله المستخدمه لتشغيل الميكرو

OUTPUT PORTB توجيه للبورت بي والبين رقم 2 من البروت سي لكي يكون اخراج

OUTPUT PORTC.2

INPUT PORTA .4 توجيه للبين رقم 5 من البورت ايه لكي يكون ادخال

main: بدايه البرنامج تبدا دائما بعنوان تتبعه :

IF PORTA.4=1 THEN

هنا جمله شرط أي انه في حاله ان تكون القيمه المدخله علي البين 5 من البروت ايه=1فانه يقوم بتنفيذ الجمل التي تلي then

PORTB=$FF

PORTC.2=0

ELSE

او اغلق if

END IF

ثم ارجع الي بدايه البرنامج

GOTO main

بفرض اننا موصلين سويتش علي البين 5 من البورت ايه وفي هذا البرنامج نقوم بقرائته فعند تنفيذ هذا البرنامج عمليا ونوصل اجزاء الدائره سوف نواجه مشكله وهي التشويش علي المفتاح او debounce of switching وذلك ناتج من عوامل عديده لا مجال الان لسردها ولكن كيف يا فكري نتغلب علي تلك المشكله ؟

الحل بسيط وسهل وهو ادراج وتنفيذ هذا الامر في البرنامج

BUTTON Pin , DownState , Delay , Rate , Workspace , TargetState , Label

pin: يقصد بها اسم البين المتصل بها السويتش مثال porta.4

downstate: يقصد الوجيك الذي سوف يكون عليه السويتش في حاله ضغطه

delay: يقصد بها الفتره الزمنيه المنقضيه بين الضغط علي السويتش وبين تنفيذ الاوامر المتعلقه بهذا السويتش وهذا بالنسبه للضغطه الاولي فقط

rate: يقصد به الفتره الزمنيه الازمه لاعاده تنفيذ الاوامر المتعلقه بهذا مع استمرار الضغط علي السويتش

workspace: وهذا لابد ان يكون متغير ويكون مضبوط بقيمه =0 مسبقا

target state:وهذا يحدد اللوجيك الذي سوف يتحدد علي اساسه الذهاب لتنفيذ الاوامر المتعلقه بهذا السويتش0او 1

ف 1 يعني عندما تضغط علي السويتش و 0 يعني عند عدم الضغط علي السويتش

label1: وهذا هو اسم العنوان الذي يحتوي علي الاوامر المتعلقه بوظيفه هذا السويتش

ومثال علي ذلك :

[color=#000000]Example

[/color][font=‘Arial Black’] DIM BTNVAR AS BYTE ’ Workspace for BUTTON instruction.

Loop: ’ Go to NoPress unless BTNVAR = 0.
BUTTON 0 , 0 , 255 , 250 , BTNVAR, 0 , NoPress
PRINT
"* "
NoPress:
GOTO Loop
[/font]

ولكن يا فكري دعنا ننفذ هذا الامر في البرنامج الذي استخدمنا فيه if

device = 16f877

xtal 4

output portb

output portc.2

input porta.4

DIM fik AS BYTE

main:

BUTTON pina.4,0,150,0,fik,0,action

GOTO main

action:

PORTB=$FF

PORTC.2=0

goto action

وهذا مثال اخر

[left]’ BUTTON Command for the PROTON board

’ Demonstrates multiple BUTTON commands. Each of 3 buttons toggles an LED.

’ Hold a button for 1 second and the LED will flicker (auto-repeat).

SET_DEFAULTS PROTON_4 ’ Configure ports for PROTON dev board using a 4MHz crystal

Device 16F877

Dim BUF1 As Byte ’ Working buffer 1 for button command

Dim BUF2 As Byte ’ Working buffer 2 for button command

Dim BUF3 As Byte ’ Working buffer 3 for button command

Symbol SW1 = PORTB.4

Symbol SW2 = PORTB.5

Symbol SW3 = PORTB.6

Symbol LED1 = PORTD.5

Symbol LED2 = PORTD.6

Symbol LED3 = PORTD.7

DelayMS 500 ’ Wait for PICmicro to stabilise

ALL_DIGITAL = True ’ Set ports to digital mode

Clear ’ Clear buffers

Low PORTD ’ ALL LEDs off

TRISB = %11110000 ’ Set PORTB 0-3 outputs, 4-7 inputs

      PORTB_PULLUPS [color=black][font='Arial Black']= On                 [/font][/color][i][color=navy][font='Arial Black']' Enable PORTB pull-ups[/font][/color][/i]

Chk1: DelayMS 25

Button SW1,0,40,5,BUF1,0,Chk2 ’ Check Button 1 (Skip to 2 if Not Pressed)

Toggle LED1 ’ Toggle LED if pressed

Chk2: Button SW2,0,40,5,BUF2,0,Chk3 ’ Check Button 2 (Skip to 3 if Not Pressed)

Toggle LED2 ’ Toggle LED if pressed

Chk3: Button SW3,0,40,5,BUF3,0,Chk1 ’ Check Button 3 (Skip to 1 if Not Pressed)

Toggle LED3 ’ Toggle LED if pressed

GoTo Chk1 ’ Do it forever[/left]


(جنرال الهندسه) #2

مشكور الاخ (فكري) على الموجهود الطيب
بس في ملاحظه بسيطه لو تسمح
أنا عندي خلفيه بسيطه عن المايكروكنترولر
ومن خلال موضوعك فهمت انك تتكلم عن لغة البيسك … بس شرحك كان (Advanse) يعني مش للمبتدئين
سؤال : ما هي اللغات المستخدمه لحرق المايكرو كنترولر غير البيسك ؟
يعني على حسب ما اعرف ان الاسمبلي ايضا تستخدم لهذا الغرض
والسموحه


(fikry) #3

اللغات التي تتعامل مع الميكرو تتمثل في
1-الاسمبلي او لغه التجميع ودي الاساس وممكن تتعامل معاها من خلال avr studio programmولو حضرتك حبيت المساعده في فهمه ممكن اساعد حضرتك وهو سهل عكس يا يقول عنه الناس
2-البيسك ودي سهله جداوهي عباره عن بلوره للغه التجميع في اوامر محدده يسهل استخدامها
3- لغه السي وهذه اللغه سوف تكون سهله لمن درسها
وعلي العموم لمن يريد الساعده في شرح الميكرو يمكنه التواصل معي علي هذا الايميل
fikry_samy2001@yahoo.com
fikry_samy@hotmail.com


(tamerPLC) #4

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


(almohandes) #5

thanks alot for this important informations
goodluck


(AHMED SAMI) #6

شكرا اخ فكري ع المجهود الرائع ونتمني التواصل وياريت تكون ف البرنامجavr studio programm جزاك الله كل الخير _ مهندس_احمد سامي