You are on page 1of 457

1Page Technical Support 2015

 Introduction………………………………………………………….. (4)

Programming…………………………………………………………. (78)

 Input & output devices ……………….…………………………. (618)

Small projects…………………………………………………………. (686)

7 Segment ………………………………………………………… (254)

 LCD ………………………………………………………… (286)

 Keypad ........………………………………………………… (525)

Dc Motor ………………………………………………………… (537)

PWM ……………………………………………………….. (362)

ADC ………………………………………………………. (379)

Stepper Motor ………………………………………………………... (598)

 Serial communication(UART) ………………………………… (411 )

 References………………………… ………………………………… (458 )

2Page Technical Support 2015


‫الحمد هلل الذى بنعمته تتم الصالحات‬
‫بفضل هللا تعالى وتوفٌقه أنهٌنا نحن لجنه الدعم الفنى لفرٌق معرض األزهر‬
‫للتطبٌقات الهندسٌه تحضٌر ومراجعه هذه المــاده العلــمٌه والتى جعلنا هدفنا‬
‫األول فٌها إفاده الطالب المهتمٌن بهذا المجال وتقوٌه الجانب العملى لدٌهم‬
‫لٌصبح لدٌهم القدره على المنافسه فى سوق العمل والمشاركه بالمشارٌع فى‬
‫معرض األزهر للتطبٌقات الهندسٌه والمعارض المختلفه وإننا نرجو هللا تعالى‬
‫أن تكون عونا لكل من أراد طلب علم عامه وأن ٌجعل كل حرؾ فٌها فى مٌزان‬
‫حسنات كل من بذل جهد ألخراج هذا العمل‬
‫هذه الماده العلمٌه بمجهود طالبى بحت حٌث قام كل فرد فى لجنه الدعم الفنى‬
‫بتقدٌم كل ما لدٌه من خبرة فٌها باإلضافة إلى مصادر أخرى مثل بعض المواقع‬
‫والمراجع المشهوره فى هذا المجال‬
‫ونحن نتوجه بخالص الشكر والتقدٌر لكل فرد فى فرٌق معرض األزهر‬
‫للتطبٌقات الهندسٌه وكل من أعاننا على إخراج هذا العمل سائلٌن المولى عز‬
‫وجل أن ٌوفقنا وٌوفق جمٌع طالب العلم وأن ٌجعلنا سببا فً نفعهم‬
‫هذه الماده العلمٌه مجانٌه ٌمكن نسخها وتداولها بدون الرجوع إلٌنا وكذالك كل‬
‫ماهو تحت أسم ‪ AZEX‬ونرجو من هللا أن ٌجعل هذا خالصا لوجهه الكرٌم‬
‫‪Technical Support Committee‬‬
‫‪AZEX_2015‬‬
‫‪technicalcommitteeazex2015@gmail.com‬‬

‫‪3Page‬‬ ‫‪Technical Support 2015‬‬


4Page Technical Support 2015
‫عندما تنظر إلى ساعة ٌدك الرقمٌة أو إلى شاشة هاتفك الجوال‪ ،‬أن تعد طعامك فً المطبخ داخل‬
‫أم أنت اآلن داخل سٌارتك الحدٌثة هل فكرت ما وراء هذه األشٌاء التً "المٌكرووٌؾ " فرن‬
‫تعمل بلمسة واحدة ما الذي ٌجعلها تقوم بهذه المهام دون الحاجة إلى مراقبة عملها أو مراجعة‬
‫نتائجها ما الذي ٌجعلك تثق بها إلى هذه الدرجة سوؾ نذهب فً رحلة وراء شاشة هاتفك‬
‫الخاص بك هذا الشًء الذي ٌعرؾ )‪(mp3‬المحمول ومقود سٌارتك ومشؽل األؼانً المتنقل‬
‫رؼباتنا‪ ،‬وٌنفذها بهذه الكفاءة والدقة دون الحاجة إلى تدخلنا تمامًا‪ ،‬ما هذا الشًء الذي نجده فً‬
‫كل شًء حولنا‪....‬‬
‫)المنزل – السٌاره – الموبٌل – المصانع ‪ -‬االلعاب ‪-‬الكامٌرا‪ -‬الوربوت ‪-‬االجهزه الحربٌه –‬
‫االجهزه الطبٌٌه وؼٌرهم (‬
‫ستجد ان جمٌع هذه االشٌاء واكثر ٌتم التحكم فٌها من خالل الماٌكروكنترولر‬
‫هذا الماٌكرو كنترولر عباره عن مئات االالؾ من الترانسستورات فى رقاقه واحده‬
‫هذه الكتله من السلٌكون عدٌمة الفائدة ‪ ،‬تمتلك امكانٌات مذهله‬
‫ولكن هذه القطعة لن تفعل اى شئ اال تحت قٌادتك وبواسطه البرنامج الذى تقوم بكتابته‬

‫باختصار انك تستطٌع التحكم فى اى شئ فى هذا العالم باستخدام هذه القطعه التى التتجاوز العده‬
‫سنتٌمترات‬

‫‪5Page‬‬ ‫‪Technical Support 2015‬‬


6Page Technical Support 2015
‫فَ ىذا انكٌرص طٌف نحعهى‪:‬‬
‫‪ -‬يا ىٌ انًيكزًكنحزًنز ً يا انفزق بيو ًبين انًيكزًبزًطيظٌر‬
‫‪ -‬انٌااع انذاكزه انًٌجٌده داخم انًيكزًكنحزًنز ً كيفيو جخشين انبيانات‬
‫ًانًعهٌيات داخهو‬
‫‪-‬انٌاع انًيكزًنحزًنز انًظحخذيو ًكيفيو اخحيار ييكزًكنحٌنز انًناطب‬
‫‪-‬لزاءه انذاجا شيث انخاصو بًيكزًكنحزًنز ‪pic16f877a‬‬
‫‪-‬جعهى كحابو نغو ال‪C‬‬
‫‪-‬عًم يشاريع صغيزه عهَ ال‪switches , led’s‬‬
‫‪-‬جٌصيم ال‪ 7 SEGMENT‬يع انًيكزًكنحزًنز‬
‫‪-‬جٌصيم ال‪ lcd‬يع انًايكزًكنحزًنز‬
‫‪-‬جٌصيم ال‪ keypad‬يع انًيكزًكنحزًنز‬
‫‪-‬انححكى فَ ال‪ً dc motor‬طزعحيا عن طزيك انًيكزًكنحزًنز‬
‫‪-‬جحٌيم االشارات ال‪ analog‬انحَ يظحمبهيا انًايكزًكنحزًنز انَ اشارات‬
‫‪digital‬‬
‫‪ -‬اطحخذاو ال ‪ sensors‬يع انًايكزً كنحزًنز يثم طينظٌر درجو انحزاره‬
‫‪-‬انححكى فَ ال‪stepper motor‬عن طزيك انًايكزً كنحزًنز‬
‫جٌصيم انًيكزً كنحزًنز يع جياس انكٌيبيٌجز ًاجيش انًيكزًكنحزًنز‬
‫االخزٍ‬

‫‪7Page‬‬ ‫‪Technical Support 2015‬‬


‫قبل اختراع الماٌكروكنترولر اخذ التحكم اشكال متعدده منها ‪:‬‬
‫‪ -1‬التحكم الكالسٌكى )‪(classic control‬‬
‫وكان ٌتم التحكم فى المواتٌر واالجهزه عن طرٌق ال‪ switches‬والرٌالى‬

‫‪8Page‬‬ ‫‪Technical Support 2015‬‬


DIGITAL CONTROL‫ثم بدء التحكم باستخدام ال‬-2
(....AND-OR-NOT-XOR)

9Page Technical Support 2015


programmable control ‫ ثم بدء التحكم باستخدام ال‬-3
multiplexer ‫عن طرٌق استخدام ال‬

11Page Technical Support 2015


‫وفى سنه ‪1969‬قام مجموعه من المهندسٌن فى شركه ‪intel‬‬
‫بوضع اقتراح جدٌد هو ضرورة اٌجاد حلول بدٌلة للدوائر القدٌمه واٌجاد دوائر متكاملة حٌث ٌتم‬
‫بها تخزٌن للبرامج المستخدمة‬

‫وفى سنه ‪1971‬ظهر فى االسواق اول مٌكروبروسٌسور وهو المٌكروبروسٌسور ‪4004‬‬

‫لنتعرؾ اوال على الماٌكروبروسٌسور‬

‫‪11Page‬‬ ‫‪Technical Support 2015‬‬


‫عبارة عن وحدة معالجة للبٌانات كامله ومدمجة أو مجمعه فى ‪ IC‬واحد وعادة ما ٌطلق علٌها‬
‫)‪ (CPU‬أو وحدة المعالجة المركزٌة وهو ٌقوم بفهم مجموعه من االوامر وٌقوم بتنفٌذها لٌقوم‬
‫بوظٌفه معٌنه‪.‬‬
‫ٌتألؾ الماٌكروبروسٌسورمن ‪ 4‬وحدات رئٌسٌة‪:‬‬
‫‪1_ ALU (arithmetic & logic unit):‬‬
‫وهى خاصة بعملٌات ال ‪ processing‬سواء كانت عملٌات حسابٌة )جمع ‪ /‬طرح ‪ (...‬أو‬
‫منطقٌة ) ‪. (.... XOR‬‬
‫‪2_REGISTERS:‬‬
‫وهى خاصة بتخزٌن البٌانات االتٌة من ال ‪ DATA LINES‬وتحوٌلها الى ‪ ALU‬لتقوم‬
‫بمعالجتها ثم تخزٌنها مرة اخرى فى ال ‪. REGISTER‬‬
‫) ‪3_CU (control unit‬‬

‫‪4- system bus :‬‬


‫وهو عباره عن مجموعه من نواقل الداتا‬
‫لنقل الداتا من اطراؾ الدخل الى البروسٌسور‬
‫واالتصال بٌن المعالج والذاكره‬
‫ثم نقل الداتا الى اطراؾ الخرج‬

‫‪12Page‬‬ ‫‪Technical Support 2015‬‬


13Page Technical Support 2015
‫كما ٌوجد مع المٌكروبروسٌسور مجموعه من الوحدات الهامه ‪:‬‬
‫‪: oscillator _1‬‬
‫لكى ٌعمل ‪ CPU‬بكفاءة عالٌة البد ان تكون كل العملٌات التى تمت معالجتها متزامنة وتسٌر‬
‫وفقا لساعه داخلٌة عالٌة فى الدقة عن طرٌق استخدام ‪ oscillator‬وهو عبارة عن ساعة داخلٌة‬
‫الخراج اشارة زمنٌة ثابته ) ‪ (clock‬هذة الساعة عبارة عن وحدة ٌتم تركٌبها تسمى‬
‫‪ٌ Crystal‬تم تصنٌعها من مقاومة ومكثؾ وتسمى بساعه انتظام(‪system clock).‬‬

‫‪: Memory _2‬‬


‫ٌتم فٌها تخزٌن البٌانات التى تستخدم بواسطة ‪ CPU‬وهى نوعان ‪:‬‬

‫‪: RAM (read & write memory) _A‬‬


‫ٌستطٌع ‪ MP‬ان ٌكتب البٌانات على هذا النوع من الذاكرة واٌضا ٌقرأ البٌانات من هذة الذاكرة‬
‫والبٌانات على هذة الذاكرة ٌمكن تؽٌرها فى اى وقت ‪.‬‬

‫‪: ROM (read only memory) _B‬‬


‫ٌستطٌع ‪ MP‬ان ٌقرأ البٌانات من على ‪ ROM‬ولكنه ال ٌستطٌع ان ٌكتب علٌه اى بٌانات‬
‫والبٌانات داخل ‪ ROM‬تسمى ‪ٌ firmware‬تم تخزٌنها اثناء عملٌة التصنٌع وال ٌمكن تعدٌلها‬
‫عن طرٌق المستخدم ‪.‬‬

‫‪14Page‬‬ ‫‪Technical Support 2015‬‬


‫‪: o/p ports _3‬‬
‫تعمل ‪ interface‬بٌن ال ‪ processor‬والعالم الخارجى حٌث ان المدخالت ؼالبا تكون‬
‫عبارة عن مجموعه من االزرار والمفاتٌح اما ال ‪ outputs‬تكون على شاشة وحدة عرض ‪.‬‬

‫‪: timers _4‬‬


‫مؤقت ٌحدد علٌه زمن معٌن بعد مرورة ٌقوم ال ‪ processor‬بأداء وظٌفة معٌنه‪.‬‬

‫‪communication interface _5‬‬


‫اتفرج على الفٌدٌو دا ‪ ‬‬
‫‪http://www.youtube.com/watch?v=cNN_tTXABUA&sns=fb‬‬

‫‪15Page‬‬ ‫‪Technical Support 2015‬‬


16Page Technical Support 2015
‫‪ _1‬ال ٌمكنه التعامل مع اشارة ‪ ANALOG‬ولكن ‪ digital‬فقط والحل لهذة المشكلة استخدم‬
‫دائرة ‪ ADC‬للتحوٌل من ‪ analog‬الى دٌجٌتال لٌتعرؾ المٌكروبرسسور على االشارة ‪.‬‬
‫‪ _2‬ال ٌمكن ربطه بالكومبٌوتر الن عملٌة ربط الكومبٌوتر بأى شئ خارجى تتم عن طرٌق ال‬
‫‪ ports‬التى بداخله سواء ‪ USB PORT‬أو ‪ SERIAL PORT‬وال ‪ٌ serial port‬تم‬
‫استقبال البٌانات بالتتابع اما ال ‪ microprocessor‬بٌستقبل الداتا مرة واحدة بمعنى انه‬
‫بٌستقبلها ‪ parallel‬ولحل هذة المشكلة نستخدم ‪ serial interface‬لتحوٌل الداتا ال‬
‫‪ parallel‬الخارجة من المٌكروبروسسور الى داتا ‪ٌ serial‬فهمها الكومبٌوتر أو العكس ‪.‬‬
‫‪ _3‬ال ٌمكن ربطة بالنت مباشرة وذلك النه عند إرسال بٌانات الى النت فانه ٌتم اضافة علٌها‬
‫‪ parity check‬فلو مثال ارسلنا اشارة مكونة من ‪ 00000011‬فانظر الى عدد الواحد فى‬
‫الرسالة هل هو زوجى أم فردى فإذا كان زوجى نضٌؾ للرسالة خانة زٌادة فٌها ‪ zero‬فترسل‬
‫هكذا ‪ 000000011‬واذا كان عدد الواحد فردى نضٌؾ للرسالة خانة زٌادة فٌها ‪ one‬فٌنظر‬
‫ال ‪ interface‬على ال ‪ parity check‬هل هو واحد ام صفر فإذا كان صفر ٌنظر للرساله‬
‫هل عدد الواحد زوجى ام ال فإذا كان زوجى ٌقوم بارسال الرساله للنت بعد حذؾ االضافات لو‬
‫كان عدد ال ‪ ones‬فردى ٌقوم بارسال رسالة ان البٌانات المبعوثة خاطئة ولحل هذة المشكلة‬
‫استخدم دائرة ادخل علٌها البٌانات المرسلة تقوم بارسال البٌانات الى النت بعد إضافة ال ‪parity‬‬
‫‪ check‬وٌسمى هذا ال ‪ interface‬بال ‪. Ethernet‬‬
‫‪ _4‬ال ٌحتوى المٌكروبروسسور على ‪ internal memory‬ولكنه ٌحتاج الى ‪hard disk‬‬
‫واٌضا الى ‪. RAM‬‬
‫طب دلوقت عدد ال ‪ Components‬كتٌر ممكن ‪ 10 IC‬فبالتالى حجم كبٌر ٌعنى خطأ اكثر‬
‫ومن هنا جاءت فكرة ال ‪Micro Controller:‬‬

‫فقامو بتؽٌر ال ‪ processor‬مثل الموجود داخل الكومبٌوتر الى ‪microprocessor‬‬


‫صؽٌر ٌمكن وضعه داخل هذه الرقاقه الؽٌره‬
‫كما قامو بتؽٌر ال ‪HDD‬الى ‪ ROM‬صؽٌر‬

‫‪17Page‬‬ ‫‪Technical Support 2015‬‬


‫وتؽٌر ال ‪RAM‬الكبٌره الموجوده داخل الكومبٌوتر الى ‪RAM‬صؽٌره التتجاوز الكٌلوباٌت‬
‫ثم وضعو هذا كله باالضافه الى االضافات التى سبق الحدٌث عنها فى ‪IC‬واحد‬

‫‪18Page‬‬ ‫‪Technical Support 2015‬‬


‫عبارة عن كل المكونات السابقة ولكنها متجمعه فى ‪IC‬‬
‫واحده ‪ٌ SINGLE CHIP‬مكن التحكم فى خصائصة‬
‫ومكوناته باستخدام ‪. SOFTWARE‬‬

‫مكونات الماٌكروكنترولر من الداخل ما هو إال كمبٌوتر صؽٌر‬


‫‪ Minicomputer‬حٌث ٌتكون من وحدة معالجة ‪CPU‬وكذلك ذاكرة عشوائٌة ‪ RAM‬و‬
‫ذاكرة من النوع ‪ ROM‬باإلضافة إلى وحدة تخزٌن ٌوضع علٌها البرامج والبٌانات )كما فً‬
‫الكمبٌوتر الشخصً العادي( باإلضافة إلى وحدة اإلدخال واإلخراج حٌث ٌكون اإلدخال واإلخراج‬
‫عن طرٌق رجول الماٌكروكنترولر )‪ (Pins‬وأقصد بالرجول أطرافه حٌث ٌخرج‬
‫الماٌكروكنترولر اإلشارات الكهربٌة وكذلك ٌستقبلها‪ ,‬كل ذلك تتحكم فٌه أنت كما ترٌد من خالل‬
‫عملٌة البرمجة‪.‬‬

‫‪19Page‬‬ ‫‪Technical Support 2015‬‬


21Page Technical Support 2015
‫‪:‬‬

‫‪ _1‬عدد المكونات اقل من المكونات المطلوبة فى ال ‪.. Microcomputer‬‬


‫‪ _2‬رخٌص‬
‫‪ _3‬نسبة الخطأ اقل وسهل االستخدام لقلة مكوناته‬
‫‪-4‬المٌكروكنتولر ٌستخدم فى االؼراض الخاصه لبرمجه شئ بعٌنه‬
‫‪-5‬المٌكروكنتولر زاكرته محددوه جدا مقارنه بزاكره الرام الموصله بالمٌكروبروسٌسور‬
‫‪-6‬وحدات االخراج والدخال بسٌطه وقلٌله مقارنه بالوحدات المصله بالمٌكروبروسٌسور‬
‫‪-7‬وحدات المعالجة المركزٌة الخاصة بالمحاكم الدقٌق ؼالبًا ما تكون محدودة القدرة والسرعة أي‬
‫أنها قادرة على القٌام ببعض المهام التً ٌستطٌع المعالج ذي األؼراض العامة القٌام بها‪ ،‬كما أن‬
‫سرعة المحكام الدقٌق محدودة مقارنة بالمعالجات العادٌة حٌث من المعتاد أن ٌعمل على مذبذبات‬
‫‪ 4‬أو ‪ 5‬مٌجا هرتز على عكس المعالجات العادٌة التً تعمل عادة على مذبذبات ‪ 2‬و ‪ 3‬جٌجا‬
‫هرتز‬

‫‪21Page‬‬ ‫‪Technical Support 2015‬‬


‫‪-1‬سهوله تؽٌٌر مكوناته لكن فى المٌكروكنترولر ال ٌمكن تؽٌٌر الذاكرة او اى شىء ومن هنا‬
‫ٌمكن تحدٌث ال ‪ microcomputer‬باجهزة ذو مواصفات احسن ‪.‬‬
‫‪ٌ-2‬ستخدم البروسٌسور فى االؼراض العامه مثل الكومبٌوتر فهو مؤهل لفعل الكثٌر من االشٌاء‬

‫الخالصة ‪:‬‬
‫ٌستحب استعمال ال ‪ microprocessor‬فى اجهزة الحاسب المكانٌة التؽٌٌر فٌها‬
‫بمواصفات احسن وٌستحب استخدام المٌكروكنترولر فى باقى التطبٌقات تقرٌبا النها ذو برنامج‬
‫ثابت مثل التكٌٌؾ ال ٌحتاج الى تحدٌث ‪.‬‬

‫‪22Page‬‬ ‫‪Technical Support 2015‬‬


23Page Technical Support 2015
24Page Technical Support 2015
25Page Technical Support 2015
‫ط‬
‫ب‬

‫ق‬
‫ب‬
‫ل‬

‫م‬
‫ا‬

‫ن‬
‫ت‬
‫ك‬
‫ل‬
‫م‬

26Page Technical Support 2015


‫اوال محتاجٌن نعرؾ اٌه هو ال‬
bit-byte-register

27Page Technical Support 2015


‫‪.‬‬
‫المٌمورى ٌاما بتكون داخٌله زى فى المٌكروكنترولر)‪( embedded‬‬
‫او خارٌجه زى فى المٌكروكمبٌوتر ) ‪(externl‬‬

‫‪28Page‬‬ ‫‪Technical Support 2015‬‬


29Page Technical Support 2015
‫دٌه االنواع المعروفه لٌنا‬
‫ولكن خلٌنا نتكلم بتفاصٌل اكثر عن انواع ال‪MEMORY‬‬
‫عموما‬

‫انواع ‪MEMORY‬‬
‫‪volatile memory-1‬‬
‫‪non volatile memory-2‬‬

‫اول نوع ‪:‬وهو ال‪volatile memory‬‬


‫وهى الذاكره المتطاٌره‬

‫ذاكرة الوصول العشوائً)‪(RAM‬‬


‫هذا النوع من الذاكرة والمعروؾ بالرام ‪ RAM‬أو ‪ٌ Random Access Memory‬سمح‬
‫بعملٌات القراءة والكتابة أثناء تشؽٌل البرنامج‪ .‬فمحتوٌات هذه الذاكرة تفقد وتختفى بمجرد انتقطاع‬
‫او ازالة مصدرة التؽذٌة فهى تستخدم للتخزٌن المؤقت ولذلك تعتبر ذاكرة متطاٌرة وسمٌت‬
‫بالذاكرة العشوائٌة ألنه ٌمكن الوصول الى جمٌع خالٌاها عشوائٌا‪.‬‬

‫انواع ذاكرة الوصول العشوائً ٌمكن تصنٌؾ ذاكرة الرام الى نوعٌن اساسٌٌن وهما ‪:‬‬
‫ذاكرة الوصول العشوائً االستاتٌكٌة ‪Static RAM: SRAM‬‬ ‫‪‬‬

‫ذاكرة الوصول العشوائً الدٌنامٌكٌة ‪Dynamic RAM: DRAM‬‬ ‫‪‬‬

‫الذاكرة االستاتٌكٌة‪SRAM‬‬

‫ٌتم تخزٌن البٌانات فً الذاكرة االستاتٌكٌة فً دوائر منطقٌة تسمى ‪flip-flop‬حٌث ان كل بت‬
‫تخزن فً دائرة ‪ flip-flop‬تتمٌز بسرعتها وعدم حاجتها النعاش كهربائً بٌن الفٌنة واالخرى‬
‫لضمان استمرار البٌانات فٌها لكنها مرتفعة الكلفة لذلك فانها ؼٌر مستخدمة كذاكرة اساسٌة‬
‫بالحاسوب ومن اشهر استخادمات هذا النوع تسمى الذاكرة المخبئٌة )ذاكرة الكاش ‪) .‬‬

‫‪31Page‬‬ ‫‪Technical Support 2015‬‬


‫الذاكرة الدٌنامٌكٌة‪DRAM‬‬

‫فً هذا النوع من الذاكرة فان كل بت ٌتكون من مكثؾ وترانزستور حٌث انها تحتاج النعاش‬
‫كهربائً بٌن الفٌنة واالخرى فان فرؼت طاقة المكثؾ فانه الترانزستور ٌقفد القٌمة المخزنة فٌه ‪،‬‬
‫ٌكون هذا النوع من الذاكرة ابطئ من الذاكرة االستاتٌكٌة لكنها اقل تكلفة واكثر استخداما وانواعا ً‬
‫حتى انه اصبح المصطلح ‪ٌ RAM‬دل على ذاكرة الوصول العشوائً الدٌنامٌكة‪.‬‬

‫هل ممكن أن تكون ال ‪ program memory‬ذاكرة متطاٌرة ؟؟؟‬


‫معنى الذاكرة المتطاٌرة انه بمجرد فصل ال ‪ power‬فان المعلومات المخزنه تضٌع ال‬
‫الذاكرة المفروض ان تكون ‪ nonvolatile‬ؼٌر متطاٌرة‬
‫عشان كدا عملو النواع التانى وهو ال ‪non volatile memory-‬‬
‫وهى الذاكره الدائمه‬
‫والذاكره الدائمه تنقسم الى انواع متعدده‬

‫‪31Page‬‬ ‫‪Technical Support 2015‬‬


32Page Technical Support 2015
‫اما عن طرٌق التخزٌن البٌانات وطرٌقه الوصول الٌها داخل الذاكره‬
‫فتنقسم الى طرٌقتٌن حسب نوع المٌكروكنتولر‬

‫و ‪pic microcontroller‬‬
‫بتسخدم نظام ال‪harvard‬‬

‫‪33Page‬‬ ‫‪Technical Support 2015‬‬


34Page Technical Support 2015
‫جمٌع التعلٌمات القابه للفهم بواسطه المٌاكروكنترولر‬
‫تسمى‬
‫‪instruction set‬‬
‫عندما تكتب بلؽه االسٌمبلى فانك تكتب بنفسك كل االوامر والتعلٌمات التى ٌجب ان تنفذ‬
‫وهنا تاتى نقطه الخالؾ فٌوجد نوعٌن من كتابه االوامر‬
‫‪:‬‬

‫معظم المٌكروكنترولر دلوقتى بٌستخدمو نظام ال‪RISC‬‬


‫‪.‬‬

‫‪35Page‬‬ ‫‪Technical Support 2015‬‬


36Page Technical Support 2015
37Page Technical Support 2015
‫كل شركة قامت بتصنٌع المٌكروكونترولر فإنها أطلقت علٌه اسم من المحتمل أن ٌكون اسم‬
‫الشركة أم آل ‪.‬‬

‫اشهر الشركات الى بتقوم بانتاج المٌكروكنترولر ‪:‬‬


‫‪ATMEL-1‬‬
‫‪MICROCHIP-2‬‬
‫‪Texas instruments-3‬‬
‫‪INTEL-4‬‬
‫‪PHILIPS -5‬‬
‫‪HITACHI-6‬‬
‫‪ZILOG-7‬‬
‫‪NATIONAL SEMICONDUCRO-8‬‬
‫‪INFINEON-9‬‬

‫‪38Page‬‬ ‫‪Technical Support 2015‬‬


‫ودٌه اكثر الشركات المستخدمه والى موجوده فى السوق‪:‬‬

‫‪39Page‬‬ ‫‪Technical Support 2015‬‬


‫لٌه معظم الناس بتستخدم ال ‪PIC‬‬
‫الن سعرها رخٌص نسبٌا بالنسبه لباقى انواع المٌكروكنترولر و االمكانٌات فٌها مناسبه لمشارٌع‬
‫الطلبه‬
‫والماتلاير بتعها متوفره جدا على المواقع عكس بقٌت االنواع‬

‫‪41Page‬‬ ‫‪Technical Support 2015‬‬


‫اوال تقسم انواع الماٌكروكنتولر من حٌث الذاكره‬

‫ال ‪ 8‬او ال‪ 16‬او ال‪32‬‬


‫هى عباره عن اتساع الرٌجستر وعرض ال ‪bus‬بٌن المٌكروبروسٌسور والرٌجستر‬

‫‪41Page‬‬ ‫‪Technical Support 2015‬‬


‫وبما اننا اختارنا اننا هنشتؽل على ‪MICROCHIP‬‬
‫فاحنا هنختار اننا نشتؽل على نوع ‪8 BIT‬‬
‫الشركه بتعمل اربع انواع من ال‪8 BIT‬‬
‫وهم ال)‪(PIC 10,PIC12 ,PIC 16 ,PIC18‬‬

‫فهنختار احد منتاجات الشركه وهو ‪PIC 16‬‬


‫و ‪ pic 16‬بٌُنتج منها اكثر من نواع اشهرهم‬
‫‪• PIC16F873A‬‬
‫‪• PIC16F874A‬‬
‫‪• PIC16F876A‬‬
‫‪• PIC16F877A‬‬
‫وهنختار منها النوع ‪PIC16F877A‬‬

‫‪42Page‬‬ ‫‪Technical Support 2015‬‬


43Page Technical Support 2015
44Page Technical Support 2015
‫ الخاصة بها نزور موقع‬data sheet ‫ اللى هنشتؽل بٌها نقرأ ال‬IC ‫للتعرؾ على ال‬
www.microchip.com

. 7‫ و‬6‫ و‬4‫ و‬3 ‫ تعبر عن االرقام االتٌة‬X ‫ حٌث‬PIC16F87XA ‫هنختار‬


‫ وذلك النهم شبه بعض تقرٌبا فى الخواص‬Data sheet ‫طب لٌه وضعنا كذا نوع فى نفس ال‬
.
40 pin ‫ وهى عبارة عن‬PIC16F877A ‫احنا هنستخدم‬

‫اتفقنا اننا هنشتؽل على‬


pic microcontroller
‫طب اوال قبل ما نختار نواع معٌن محتاجٌن نعرؾ اٌه هى الى االمكانٌكات‬
‫والخصائص المتوفره داخل جمٌع انواع ال‬
PIC
All PIC microcontrollers offer the following features:
● RISC instruction set with only a handful of instructions to learn
● Digital I/O ports
● On-chip timer with 8-bit prescaler
● Power-on reset

45Page Technical Support 2015


● Watchdog timer
● Power saving SLEEP mode
● High source and sink current
● Direct, indirect, and relative addressing modes
● External clock interface
● RAM data memory
● EPROM or Flash program memory
Some devices offer the following additional features:
● Analogue input channels
● Analogue comparators
● Additional timer circuits
● EEPROM data memory
● External and internal interrupts
● Internal oscillator
● Pulse-width modulated (PWM) output
● USART serial interface.

46Page Technical Support 2015


‫هنقرأ الداتا شٌت لل ‪ PIC‬المستخدمة‬
‫لنتعرؾ على بعض خصائصها ومنها ‪:‬‬
‫أوال ‪ :‬ال ‪ operating speed‬لل‬
‫‪ clock‬تتراوح من تردد ‪. 0 _20 MHZ‬‬
‫ثانٌا ‪ :‬عدد المتؽٌرات فى ال ‪memory‬‬
‫هى ‪ 268‬وهى كافٌة الن أؼلب تطبٌقات‬
‫المٌكرو ال ٌدخل فٌها حسابات ‪.‬‬
‫ثالثا ‪ٌ :‬وجد منه أنواع ‪ 40‬أو ‪ pin 44‬وال‬
‫‪ pic16f877a‬واللى هنشتؽل بٌها عبارة‬
‫عن ‪. pin 40‬‬
‫وٌوجد بعض ال ‪ interfaces‬الموجودة فى المٌكرو والتى توضحها الداتا شٌت ومنها ‪:‬‬

‫ٌوجد لدى ‪:‬‬


‫‪1_ 3 timers‬‬
‫‪2_ serial port for connection with‬‬
‫‪computer‬‬

‫‪47Page‬‬ ‫‪Technical Support 2015‬‬


‫‪3_ADC with 8 channels‬‬

‫انواع الذاكره داخل المٌكروكنترولر ‪PIC16F877A‬‬

‫أوال‪ :‬الذاكرة المؤقته‪RAM‬‬


‫ذاكرة البٌانات‪Data Memory‬‬

‫وهً الذاكرة بالرام أو ذاكرة الوصول العشوائى والتً تحفظ فٌها التؽٌرات التً تتم فً السجالت‬
‫)‪(Registers‬أثناء تشؽٌل البرنامج ‪ ،‬وٌمكن القول بأنها خاصة ببٌانات المٌكروكنترولر والتى‬
‫ٌقوم باستخدامها أثناء تنفٌذ البرنامج مع األجهزة المتصلة به والذاكرة المؤقتة سمٌت بذلك ألنها‬
‫تفقد وتمحً كل بٌاناتها عند انقطاع التؽذٌة الكهربٌة عنها ‪.‬‬
‫وتبلػ سعتها ‪368 bytes‬‬

‫ثانٌا ‪ :‬الذاكرة الدائمة‪ROM‬‬


‫ٌمتلك نوعٌن من الذاكرة الدائمه‬
‫األولى لحفظ البرنامج والثانٌة لحفظ المعلومات‬
‫‪1-‬ذاكرة البرنامج‪Flash memory‬‬
‫وهى ذاكرة من النوع( ‪ Flash‬أى أنها تمحى وتكتب كهربائٌا(‪ ،‬ومهمتها أن تحتفظ ببرنامج‬
‫التشؽٌل )الذي تم برمجته من قبل المستخدم ألداء المهمة المطلوبة )حٌث ٌبدأ المعالج بتنفٌذ أوامر‬
‫البرنامج من أول موضع حتى النهاٌة تعاقبٌا وبشكل تسلسلى حسب سرعته‪ .‬فهى تقوم بعمل‬
‫الهارد دٌسك فً الكومبٌوتر‪ .‬ولها القدرة على حفظ البٌانات والتعلٌمات الخاصة بالبرنامج لمدة‬
‫أعوام كثٌرة ‪ ،‬وٌمكن محٌها وكتابتها ‪100.000‬مره‬
‫‪.‬والبٌانات فٌها ال تمحى عند فصل التؽذٌة الكهربٌة لكنها تمسح فً حالة الرؼبة بتؽٌٌر البرنامج‬
‫حٌث ٌعاد برمجتها‪ .‬وتبلػ سعة ذاكرة البرنامج ‪8K‬‬

‫‪48Page‬‬ ‫‪Technical Support 2015‬‬


‫‪2-‬ذاكرة المعلومات‪Information Memory‬‬
‫وهى من النوع ‪ EEPROM‬ذاكرة القراءة فقط للبرمجة والمحو الكهربائى هى ذاكرة للقراءة‬
‫فقط والتى تحتفظ وبشكل دائم بما فٌها من بٌانات المٌكروكنترولر وتعلٌماته وجمٌع القٌم الثابتة فً‬
‫البرنامج وهذه الذاكرة ال ٌتم إزالتها عند فصل التٌار الكهربى‪ ،‬لكنها تمسح بتؽٌٌر هذه القٌم الثابتة‬
‫حسب الرؼبة حٌث ٌعاد برمجتها بالقٌم األخرى الجدٌدة ‪ ،‬وهى ذاكرة ٌمكن استخدامها من قبل‬
‫البرنامج فى عملٌات القراءة والكتابة والموجودة بداخل ذاكرة البرنامج‪ ،‬ولها نفس مواصفات‬
‫الفالش ‪ Flash‬وتسع هذه الذاكرة ا‪256 bytes‬‬
‫وٌمكن مسحها وكتابه البٌانات علٌها ملٌون مره‬
‫وعمر البٌانات علٌها ٌستمر الربعٌن عام‬

‫‪49Page‬‬ ‫‪Technical Support 2015‬‬


‫الخصائص الكهربٌة للمٌكرو ‪:‬‬

‫هى الخصائص الكهربٌة التى بتعامل بها مع المٌكرو بمعنى الجهد اللى بدخلة للمٌكرو وكذلك‬
‫التٌار الداخل والخارج من المٌكرو ‪.‬‬
‫‪VDD (positive voltage)>>>>>>>>>>>>-0.3_7.5‬‬
‫الجهد الداخل البد أن ٌكون فى هذا ال ‪ range‬واال سٌحرق المٌكرو ‪.‬‬
‫‪VSS (negative voltage)>>>>>>>>>>>>>zero‬‬
‫التٌار سواء ‪ٌ sunk‬عنى داخل أو ‪ٌ sourced‬عنى خارج ال ٌزٌد عن ‪. 25mA‬‬

‫‪51Page‬‬ ‫‪Technical Support 2015‬‬


51Page Technical Support 2015
‫ٌوجد اشكال من هذا ال ‪PIC‬‬

‫‪PDIP‬‬
‫األرجل تكون فى صفٌن ‪ٌ 20‬مٌن و‪20‬‬
‫ٌسار‬
‫‪Through hole mount‬‬
‫بٌكون فٌه ‪ hole‬بتدخل رجل ال ‪ IC‬منها‬
‫وتتلحم من الناحٌة االخرى‬

‫‪TQFP‬‬
‫‪Thin quad flat package‬‬
‫تكون مثبته على السطح‬
‫‪Surface mount‬‬
‫مش بتنفع فى الشؽل العادى النها محتاجه ‪PCB‬‬
‫ٌوجد فى هذا النوع ‪ 4‬رجول مش مستخدمه مكتوب‬
‫علٌها ‪ NC‬الن ال ‪ standard‬لهذة ال ‪ package‬فى التصنٌع انها ‪. pin 44‬‬

‫‪52Page‬‬ ‫‪Technical Support 2015‬‬


PIC ‫التعرف على ال‬

53Page Technical Support 2015


‫”‪Specifications of microcontroller “data sheet‬‬
‫‪1_How to read micro pins.‬‬
‫‪ _1‬نصؾ الدائرة اللى فى اول ال ‪ IC‬عبارة عن ‪ notch‬اى ان هذا الجنب هو رأس ال ‪IC‬‬
‫‪ pin‬رقم ‪ 1‬هى االتى على ٌسار ال ‪ notch‬وٌوجد أحٌانا ‪ hole‬بجانب ‪. pin1‬‬

‫‪2_Oscillator 20MHZ‬‬
‫‪ٌ _2‬وجد فى التركٌب الداخلى للمٌكرو ‪ counters & registers‬ومن المعروؾ انها تعمل‬
‫ب ‪ clock‬وهذة ال ‪ clock‬عبارة عن ‪ digital signal‬لها تردد معٌن أقصى قٌمة تردد‬
‫بداخل المٌكرو ‪ pic16f877a‬هو ‪ 20MHZ‬ولهذا عند شراء كرٌستاله لكى تولد ‪clock‬‬
‫‪ pulses‬نشترٌها ‪ 20MHZ‬أو أقل والشائع‬
‫استخدامه هو ال ‪. 4MHZ & 8MHZ‬‬

‫‪3_Currents‬‬ ‫‪25mA‬‬
‫‪_3‬أقصى تٌار داخل ٌتحمله المٌكرو وأقصى تٌار خارج منه هو ‪ 25mA‬وهذا مهم جدا معرفته‬
‫وخاصة فى دوائر ال ‪ relay interface‬وسٌتم ذكرها الحقا ‪.‬‬

‫‪54Page‬‬ ‫‪Technical Support 2015‬‬


‫‪4_ Pins description.‬‬
‫‪33 I/O PINS‬‬
‫‪1_PORT A  6 PINS from RA0:RA5‬‬
‫‪2_PORT B  8 PINS from RB0:RB7‬‬
‫‪3_PORT C  8 PINS from RC0:RC7‬‬
‫‪4_PORT D  8 PINS from RD0:RD7‬‬
‫‪5_PORT E  3 PINS from RE0:RE2‬‬
‫ٌمكن معامله ال ‪ PIN‬على انهم ‪ Individual‬كل واحده لوحدها او على انهم‬
‫مجموعات المجموعه ‪ A‬مثال تخرجلى خرج كذا ‪.........‬‬
‫ال ‪ PIN‬ممكن تكون )‪ Analog (ANO‬او)‪ digital (RAO‬ما ٌنفعش ٌكون‬
‫االتنٌن مع بعض‪.‬‬
‫توصٌل ال ‪ٌ PORTS‬ختلؾ حسب برمجة الدائرة لكن ال ‪ PINS 7‬وهما‬
‫)‪ (1/32/11/12/31/14/13‬لهم توصٌلة ثابته ‪.‬‬
‫ٌفضل استخدام ‪ PORTB‬اثناء التوصٌل الن أرجلة ورا بعضها ‪.‬‬
‫‪ٌ PORTA & PORTE‬ستخدموا لقراءة قٌم ‪analog & digital‬‬
‫أما )‪ٌ (PORTD,PORTC,PORTB‬ستخدموا لقراءة قٌم ‪ digital‬فقط ‪.‬‬
‫ال ‪ programmer‬هو اللى بٌحدد ال ‪ pin‬هتستخدم ك ‪ in‬أو ‪ out‬أو هتستخدم ك‬
‫‪ analog‬أو ‪. digital‬‬
‫طب اٌه ‪ RC6/TX‬مكتوب علٌها ‪ PIN25‬وكذلك ‪ RC7/RX‬مكتوب علٌها ‪ Pin26‬‬
‫وهى توصٌل ‪ PIN‬هما ٌدالن على وظٌفة اخرى تقوم بها ال ‪ TX‬وال ‪RX‬هما ال‬
‫من خالل طرفى ‪SERIAL PORT‬المٌكرو بالكومبٌوتر وذلك عن طرٌق استخدام ال‬
‫‪ TX/RX‬وأوصلهم بال ‪ receive‬وال ‪ transmit‬وهما ال ‪SERIAL PORT‬ال‬

‫‪55Page‬‬ ‫‪Technical Support 2015‬‬


‫أو ‪ digital out‬أو ‪ digital in‬ك ‪ PIN 25‬و ‪PIN 26‬وبكده فأنا ممكن استخدم ال‬
‫إنى اربط الكومبٌوتر بٌهم ‪.‬‬

‫‪4 pins‬‬ ‫زى ما اتفقنا ان ‪ pic 16f877a‬بتحتوى على‬


‫كل مجموعه من ال ‪ pins‬مجمعه فى ‪port‬‬
‫وعددهم ‪ports 5‬‬
‫)‪(a,b,d,c,e‬‬

‫‪PORTA -1‬‬

‫‪6‬أطراف متاحة فقط للمنفذ ‪ PORT A‬بالمٌكروكونترولر‪PIC16F877A .‬‬ ‫‪‬‬

‫األطراف ‪ٌ RA0-RA5‬مكن أن تستخدم كمداخل رقمٌة‪.‬‬ ‫‪‬‬

‫األطراف ‪ٌ RA0-RA5‬مكن أن تستخدم كمخارج رقمٌة‪.‬‬ ‫‪‬‬

‫األطراف ‪ٌ AN0-AN4‬مكن أن تستخدم كمداخل تناظرٌة ( أى خمس مداخل تناظرٌة‬ ‫‪‬‬

‫بالمنفذ ‪)PORTA‬‬

‫‪56Page‬‬ ‫‪Technical Support 2015‬‬


‫المنفذ‪PORT B :‬‬
‫ٌمكن استخدام جمٌع األطراف الثمانٌة بالمفذ ‪PORT‬‬ ‫‪‬‬

‫‪B‬للمٌكروكونترولر‪PIC16F877A .‬‬
‫األطراف ‪ٌ RB0-RB7‬مكن أن تستخدم كمداخل رقمٌة‪.‬‬ ‫‪‬‬

‫األطراف ‪ٌ RB0-RB7‬مكن أن تستخدم كمخارج رقمٌة‪.‬‬ ‫‪‬‬

‫إمكانٌة المقاطعة الخارجٌة عن طرٌق الطرف‪RB0 .‬‬ ‫‪‬‬

‫إمكانٌة المقاطعة الخارجٌة عن طرٌق األطراف‪RB4-RB7 .‬‬ ‫‪‬‬

‫‪57Page‬‬ ‫‪Technical Support 2015‬‬


‫المنفذ‪PORT C :‬‬
‫ٌمكن استخدام جمٌع األطراف الثمانٌة بالمفذ ‪PORT‬‬ ‫‪‬‬

‫‪C‬للمٌكروكونترولر‪PIC16F877A .‬‬
‫األطراف ‪ٌ RC0-RC7‬مكن أن تستخدم كمداخل رقمٌة‪.‬‬ ‫‪‬‬

‫األطراف ‪ٌ RC0-RC7‬مكن أن تستخدم كمخارج رقمٌة‪.‬‬ ‫‪‬‬

‫إمكانٌة نظام التعدٌل فى عرض النبضات على باألطراف ‪ RC1‬و‪RC2 .‬‬ ‫‪‬‬

‫ٌحتوى المنفذ ‪ PORT C‬أٌضا على إمكانٌة لالتصال التسلسلى‪USART .‬‬ ‫‪‬‬

‫‪58Page‬‬ ‫‪Technical Support 2015‬‬


‫المنفذ‪PORT D :‬‬
‫ٌمكن استخدام جمٌع األطراف الثمانٌة بالمفذ ‪PORT‬‬ ‫‪‬‬

‫‪C‬للمٌكروكونترولر‪PIC16F877A .‬‬
‫األطراف ‪ٌ RD0-RD7‬مكن أن تستخدم كمداخل رقمٌة‪.‬‬ ‫‪‬‬

‫األطراف ‪ٌ RD0-RD7‬مكن أن تستخدم كمخارج رقمٌة‪.‬‬ ‫‪‬‬

‫‪59Page‬‬ ‫‪Technical Support 2015‬‬


‫المنفذ‪PORT E :‬‬
‫المتاح فقط ‪ 3‬أطراف للمنفذ ‪ PORT E‬بالمٌكروكونترولر‪PIC16F877A .‬‬ ‫‪‬‬

‫األطراف ‪ٌ RE0-RE2‬مكن أن تستخدم كمداخل رقمٌة‪.‬‬ ‫‪‬‬

‫األطراف ‪ٌ RE0-RE2‬مكن أن تستخدم كمخارج رقمٌة‪.‬‬ ‫‪‬‬

‫األطراف ‪ٌ AN5-AN7‬مكن استخدامها كمداخل تناظرٌة( ثالثة مداخل تناظرٌة‬ ‫‪‬‬

‫بالمنفذ‪(PORT E‬‬

‫‪61Page‬‬ ‫‪Technical Support 2015‬‬


61Page Technical Support 2015

‫وٌمكن تلخٌص امكانٌات‬
: ‫فٌما ٌلى‬PIC16F8777A

main features of PIC16F877A are listed below:


o High-Performance RISC CPU:
• Only 35 single-word instructions to learn
• All single-cycle instructions except for program
branches, which are two-cycle
• Operating speed: DC – 20 MHz clock input
DC – 200 ns instruction cycle
o Types of memory in PIC16F877A and its capacity:
 368 bytes RAM memory
 256 bytes EEPROM memory
 1,000,000 erase/write cycle Data EEPROM memory typical
 Data EEPROM Retention > 40 years
 8K ROM memory in FLASH technologyChip can be
reprogrammed up to 100.000 times

o Peripheral Features:
1. timers:
 Timer0: 8-bit timer/counter with 8-bit prescaler
 Timer1: 16-bit timer/counter with prescaler, can be
incremented during Sleep via external crystal/clock
 Timer2: 8-bit timer/counter with 8-bit period register,
prescaler and postscaler
2. Two Capture, Compare, PWM modules
 Capture is 16-bit, max. resolution is 12.5 ns

62Page Technical Support 2015


 Compare is 16-bit, max. resolution is 200 ns
 PWM max. resolution is 10-bit
3. Synchronous Serial Port (SSP) with SPI™ (Master mode) and
I2C™ (Master/Slave)
4. Universal Synchronous Asynchronous Receiver Transmitter
(USART/SCI) with 9-bit address detection
5. Parallel Slave Port (PSP) – 8 bits wide with external RD, WR
and CS controls
6. Brown-out detection circuitry for Brown-out Reset (BOR)
o Analog Features:
1. 10-bit, up to 8-channel Analog-to-Digital Converter (A/D)
2. Brown-out Reset (BOR)
3. Analog Comparator module with:
- Two analog comparators
- Programmable on-chip voltage reference (VREF) module
- Programmable input multiplexing from device inputs and
internal voltage reference
- Comparator outputs are externally accessible
o Power-Saving Sleep Mode
o Watchdog Timer

63Page Technical Support 2015


‫ودول عباره عن‬
‫‪7 PINS‬‬
‫لٌهم توصٌل ثابت‬
‫هى اول حاجه بتعملها اول ما تبدء تستخدم البٌك انك توصل‬
‫ال ‪pins‬‬
‫دول هم )‪(32-31-14-13-12-11-1‬‬

‫‪Pin1 :‬‬
‫مكتوب علٌها ‪ MCLR‬فهى تشٌر إلى ‪MASTER‬‬
‫‪ CLEAR‬بمعنى انه بٌعمل ‪ٌ reset‬عنى لو ال‬
‫‪ PIC‬بٌقوم بتنفٌذ برنامج معٌن وعملت ‪reset‬‬
‫هٌقوم بتنفٌذ البرنامج من االول وهذة ال ‪pin‬‬
‫‪ active low‬بمعنى أنها لكى تعمل اضعها على‬
‫‪ low voltage‬اى ) ‪ (0v‬لكن لكى ال تعمل اضع‬
‫علٌها ‪ٌ VCC‬عنى ‪ 5v‬طب دلوقت انا عاوز ال‬
‫‪ pin1‬لما احب اعمل ‪ reset‬توصل باالرضى‬
‫وبعد كده تكون موصله بال ‪ VCC‬علطول لذا ٌتم‬
‫توصٌلها بهذا الشكل‬
‫لما اضؽط على ال ‪ٌ push button‬عمل ‪ reset‬الن ال ‪ pin1‬هٌكون واصل‬
‫ارضى لما اشٌل اٌدى من على ال ‪ button‬هتكون ال ‪ float pin‬بمعنى اى ‪noise‬‬
‫ممكن تخلٌها ‪ high‬او ‪ low‬بس انا عاوز لما اشٌل اٌدى تكون موصله بال ‪ VCC‬لذا اضع‬
‫مقاومة مع ال ‪ VCC‬التٌار المار فى المقاومة قلٌل جداً الن مقاومة الدخل لل ‪ pin‬كبٌرة جداً‬

‫‪64Page‬‬ ‫‪Technical Support 2015‬‬


‫ٌعنى ال ‪ drop‬اللى على المقاومة تقرٌبا ‪ٌ zero‬عنى الفولت على ‪ pin 1‬هٌكون‬
‫‪VCC‬وتسمى المقاومة فى هذة الحالة ‪ٌ pull up resistance‬عنى جعلتها بدل ما هى‬
‫‪ float‬جعلتها ‪. high‬‬
‫ال ‪ push button‬دا اختٌارى ممكن احطه او ال واستعمل لما الجهاز ٌهنج زر ال‬
‫‪ power‬اطفى منه الجهاز وافتحه تانى كده انا عملت ‪ reset‬للجهاز اما المقاومة اجبارى ان‬
‫اضعها عشان تكون ‪ pin 1‬موصله بال ‪ VCC‬علطول ‪.‬‬

‫‪PIN32/PIN 11‬‬
‫توصل بال ‪ VDD‬اى ‪ +POWER SUPPLY‬وبٌكون ‪5V‬‬
‫‪PIN12 /PIN31‬‬
‫توصل بال ‪ٌ VSS‬عنى االرضى‬
‫‪ ‬المفروض اقل فولت ‪ٌ VDD‬دخل من ‪ٌ -0.3:7.5‬عنى لو عكست البوالرتى‬
‫لل ‪ POWER‬ودخلت السالب على ال ‪ VDD‬فانه المٌكرو ٌبوظ‬
‫‪ ‬المفروض ال ‪ SUPPLY‬مش ٌقل عن ‪ 4‬وال ٌزٌد عن ‪ 5.5‬طب لو وضعت‬
‫‪ 3V‬على ‪ VDD‬فان ال ‪ IC‬مش ٌبوظ لكن مش ٌشتؽل‪.‬‬
‫‪ ‬المفروض اضع بٌن الرجل ‪ 11‬و‪ POWER SUPPLY 12‬ثابت بهذا الشكل‬

‫‪65Page‬‬ ‫‪Technical Support 2015‬‬


‫او عن طرٌق ‪adaptor‬‬

‫ٌوصل بٌن الرجل ‪ 11‬و‪ 12‬مكثؾ سٌرامٌكى ‪ٌ 0.1uf‬شٌل ال ‪ noise‬اللى جاٌه من اسالك‬
‫التوصٌل لل ‪ supply‬وكذلك بٌن ‪ 31‬و‪.. 32‬‬
‫ممكن بدل ال ‪ adaptor‬بطارٌة ‪. 9v‬‬
‫ممكن شاحن موبٌل ٌقطع طرفة وٌوصل طرفٌة بروزته لسهولة تركٌبة فى الدائرة ‪.‬‬
‫ممكن ‪ power supply of computer‬وهو االفضل النة ٌعطى تٌار عالى ألن فٌه‬
‫‪ component‬فى الدائرة بتسحب تٌار عالى زى الرٌالى والمواتٌر فالزم اتاكد ان التٌار اللى‬
‫بٌدٌه الباور اللى شؽال بٌه كافى لتشؽٌل الكومبونانت اللى موجودة فى الداٌرة وٌتم حساب ذلك‬
‫من العالقة‬
‫‪P=V* I‬‬
‫بقسم جهد تشؽٌل الرٌالى على الباور بتاعته احصل على التٌار اللى بٌشؽله‪.‬‬

‫‪66Page‬‬ ‫‪Technical Support 2015‬‬


‫‪Pin 13 /pin14‬‬
‫‪OSC1&OSC2‬‬
‫طب مش المفروض ان ال ‪ oscillator built in‬بداخل ال ‪ pic‬أل فى جوه ال ‪PIC‬‬
‫وخارجها ‪.‬‬

‫الكود بٌبقى عباره عن مجموعه من السطور واالوامر‬


‫الى الكرٌستال بٌعمله ان بٌروح ٌنفذ االمر دا‬
‫بس كل امر بٌحتاج فى تنفٌذه الى اربعه ‪PULSES‬‬

‫لالمر ٌعنى بٌروح ٌدور علٌه وٌجٌبه‬ ‫اول ‪ PULSE‬بتعمل ‪fetch‬‬

‫‪67Page‬‬ ‫‪Technical Support 2015‬‬


‫تانى ‪ PULSE‬بتعمل ‪ٌ decode‬عنى ٌفهم االمر‬
‫ثالث ‪ PULSE‬بتعمل ‪ٌ execute‬عنى ٌبتدى ٌنفذ االمر‬
‫رابع ‪ PULSE‬بتعمل ‪ transfer‬لالمر ٌعنى ٌبعته‬

‫عشان كدا التردد الفعلى الى شؽالٌن بٌه بٌبقى هو التردد الكلى بس مقسوم على اربعه‬

‫‪68Page‬‬ ‫‪Technical Support 2015‬‬


‫وتوصل الكرٌستاله بهذٌن الطرفٌن‬

‫‪69Page‬‬ ‫‪Technical Support 2015‬‬


‫السؤال المهم اآلن هو ما هً قٌم تلك المكثفات المستخدمة مع الكرٌستال؟‬
‫إن قٌم المكثفات تعتمد على شٌئٌن‪:‬‬

‫متى ٌفضل استخدام ال ‪ RC circuit‬؟؟؟؟؟؟‬


‫لما تكون حسابات الوقت مش شرط تكون دقٌقة زى ال ‪ open door‬وذلك النه رخٌص‬
‫اما لو فرق معاٌا الزمن زى ال ‪ stop watch‬استخدم ‪ crystal‬وبروح اشترى ‪crystal‬‬
‫بقٌمة التردد اللى عوزة ‪.‬‬

‫‪71Page‬‬ ‫‪Technical Support 2015‬‬


‫الشكل النهائى للتوصٌل‬

71Page Technical Support 2015


72Page Technical Support 2015
‫طب بعد ما تعرفنا على المٌكروكنترولر وعلى امكانٌته وتركٌبه من الداخل‬

‫‪73Page‬‬ ‫‪Technical Support 2015‬‬


‫ازاى اختار نوع ماٌكروكنترولر معٌن زى‬
AVR-PIC-ARM-…
‫او حتى لو اخترت مٌكروكنترولر معٌن زى ال‬
PIC
‫ازاى اختار بكاٌه معٌنه‬
‫باختصار نوع الماٌكروكنتولر الى انتا بتختاره هٌتوقؾ على مشروعك او الشؽل الى انتا بتشتؽله‬
‫والمتطلبات الى انتا محتاجها وؼالبا بتبقى‬

● Number of I/O pins required


● Required peripherals (e.g. USART, USB)
● The minimum size of program memory
● The minimum size of RAM
● Whether or not EEPROM non-volatile data memory is required
● Speed ( MIPS)
MIPS ( million instruction per second )
● Physical size
● Cost.

74Page Technical Support 2015


75Page Technical Support 2015
‫‪HARDWARE‬‬

‫الجزء الهارد وٌر اول حاجه فٌه هو اختٌار نوع المٌكروكنتولر نفسه ودا حسب المتطلبات الى انتا‬
‫محتاجها زى ما ذكرنا قبل كدا‬

‫تانى حاجه الكومبونانت الى هتوصلها على الماٌكرو والى هتحتاجها فى مشروعك زى الموتور‬
‫والسٌنسور وؼٌرهم‬

‫وممكن تلخٌص جزء الهارد وٌر الى هتاحتاجها فى اى مشروع كالتالى ‪:‬‬
‫‪HARDWARE REQUIREMENTS:‬‬
‫‪1_COMPUTER‬‬
‫‪2_PROGRAMMER‬‬
‫‪3_COMPONENTS‬‬
‫ودٌه الكومبونانت االساسٌه الى هنستخدمها فى اى مشروع‬

‫‪Such as :‬‬
‫‪pic16f877a‬‬

‫‪76Page‬‬ ‫‪Technical Support 2015‬‬


crystal 4MHZ
bread board
LEDS
PUSH BUTTONS
RESISTORS (330/10K/1KΩ)
transistor bc547
Pin header
RELAY
POWER SUPPLY

77Page Technical Support 2015


78Page Technical Support 2015
software

Low level language High level language

C , C++ ,
PASCAL ,
Assembly
BASIC

79Page Technical Support 2015


‫ٌمكن برمجة الماٌكروكنتورلر بلؽات عدٌدة لكن كان دائما لؽتٌن اساسٌتٌن لبرمجة‬
‫المٌكروكنترولر وان اللؽات االخرى او طرق البرمجة االخرى مشتقة عن هاتٌن اللؽتٌن‪:‬‬
‫‪ -1‬لؽة ‪.Assembly‬‬
‫‪ -2‬لؽة ‪) C‬وفى بعض االحٌان تستخدم الـ ‪ ,(C++‬وتستخدم هاتٌن اللؽتٌن لعدة اسباب‪:‬‬
‫‪ -1‬لؽة الـ ‪ Assembly‬من اقرب اللؽات الى لؽة االلة‪machine language‬‬
‫وبرنامجها بٌاخد مساحة صؽٌرة للؽاٌة مما ٌسهل عملٌة تخزٌنه وتنفٌذه‪.‬‬
‫‪ -2‬لؽة ) ‪ (C‬توفر صؽر حجم البرنامج وسهولة تنفٌذه لكن لٌس بقدر لؽة الـ‬
‫‪Assembly‬حٌث انها من اقرب لؽات المستوى العالى ) ‪High level‬‬
‫‪ (language‬فى تركٌبتها الى لؽة االلة ) ‪ (Machine Language‬بعد لؽة الـ‬
‫‪ Assembly‬كما تتمٌز لؽة الـ ‪ C‬بسهولة اوامرها مقارنة بلؽة الـ ‪Assembly‬التً‬
‫تتطلب معرفة جٌدة بمعمارٌة وحدة المعالجة المركزٌة داخل المحكام الدقٌق حٌث ال‬
‫تتطلب البرمجة بلؽة ‪ C‬معرفة قوٌة بمعمارٌة المحكام الدقٌق من الداخل‪.‬‬
‫وقد تختلؾ بعض اوامر البرمجة من نوع محكام دقٌق الى اخر حٌث تؽٌر الشركات بعض‬
‫االوامر وتستحدث اوامر جدٌدة خاصة بانتاجها من المحكامات الدقٌقة لكن المبدأ العام‬
‫ومجموعة كبٌرة من اوامر البرمجٌة موحدة بٌن اؼلب انواع المحكامات الدقٌقة‪.‬‬
‫وظهرت فى االسواق السنوات االخٌرة محكامات دقٌقة ٌمكن برمجتها باستخدام لؽة ‪ Basic‬فٌما‬
‫عرفت بـ ) ‪ ( Basic Stamp Microcontrollers‬وان كانت ؼٌر منتشرة فى اسواق الشرق‬
‫االوسط بكثرة‪.‬‬

‫‪81Page‬‬ ‫‪Technical Support 2015‬‬


‫هنختار لؽة ال ‪ C‬النها لؽة متداولة وسهلة ال ‪ MICRO‬مش ٌفهم ‪ C‬لذا نستخدم برنامج‬
‫ٌحول من ال ‪ C CODE‬الى ‪ Machine language‬وٌعرؾ باسم ‪. C compiler‬‬

‫‪81Page‬‬ ‫‪Technical Support 2015‬‬


‫ٌوجد اكثر من نوع من ال ‪ compiler‬اشهرهم‬
‫‪1- mplap:‬‬
‫‪2-micro c:‬‬
‫ال ٌوجد فرق ٌنهما ولكن ٌتمٌز كل منهما عن االخر فً االشٌاء الجاهزه فً ال‪library‬‬
‫مثل ‪delay‬جاهز فً الماٌكرو سً والٌكون جاهز فً ال ‪mplap‬والبد من عمله‬
‫وللتعلم افضل علٌك استخدام كومبٌلر بدون‪library‬‬
‫حتى تستطٌع كتابه الكود كامل بٌدك‬

‫‪82Page‬‬ ‫‪Technical Support 2015‬‬


‫ال ‪ compiler‬بٌحول الكود الى انتا بتكتبه للؽه االله عن طرٌق اربع مراحل‪:‬‬
‫‪: pre-processing-1‬ودٌه بٌنفذ فهٌا الملفات المخفٌه الى موجوده فى الكود‬
‫‪ : compilation-2‬ودٌه بتخبر فٌها كل الجمل الموجوده عشان لو فى اخطاء‬
‫‪: assembler-3‬ودٌه بٌحول الملؾ فهٌا للؽى االسمبٌلى‬
‫‪: Linker-4‬ودا بٌجمع الملفات ال‪ .C‬كلها وٌحولها لمؾ ‪.HEX‬‬
‫وكل دا هتفمه ان شاء هللا قدام ‪ ‬‬

‫‪83Page‬‬ ‫‪Technical Support 2015‬‬


‫‪content of any programming‬‬
‫‪uage‬‬ ‫‪‬‬

‫‪ ‬تتكون اى لؽة برمجة من ثالث اجزاء ‪:‬‬


‫‪1-text editor ‬‬
‫‪ ‬ودا اللى بكتب فٌه االكواد بتاعتى وتظهر على‬
‫الشاشة‬
‫‪2-compiler ‬‬
‫‪ ‬وهو المسئول عن تحوٌل اللؽة المكتوب بٌها كود‬
‫البرمجة الى لؽة االلة)‪(1,0‬‬
‫‪3-linker‬‬
‫‪ ‬هو المسئول عن تحوٌل لؽة البرمجة والمكتبات‬
‫الى ملؾ تنفٌذى‬
‫)‪.(exit able file‬‬
‫‪ ‬المكتبات ‪:‬هى عبارة عن القاموس الالزم للتعامل‬
‫مع االلة ‪.‬‬

‫‪84Page‬‬ ‫‪Technical Support 2015‬‬


‫‪.‬‬
‫الدالة ‪main‬‬
‫فى اى برنامج مٌكرو الزم تكون ‪ MAIN FUNCTION‬موجودة الن المٌكرو اول ما بٌشتؽل‬
‫بٌنفذ اوال ال ‪ code‬الموجود داخل ‪main‬‬

‫)( ‪Void main‬‬


‫{‬
‫…………………………………‬
‫‪………………………………..‬‬
‫}‬

‫‪structure program‬‬
‫‪ ‬مثل‬
‫{)(‪-Void main‬‬
‫‪}‬‬
‫‪ ‬وهى الدالة الرئٌسٌة التى ٌتم تنفٌذ جمٌع االوامر من‬
‫خاللها‪.‬‬
‫‪‬‬
‫‪-#define‬‬
‫‪ ‬بٌتم فٌها تخزٌن قٌم لثوابت مثل ‪ pi =3.14‬واٌضا‬
‫دوال المٌكرو‪.‬‬

‫‪85Page‬‬ ‫‪Technical Support 2015‬‬


‫ٌتكون جسم البرنامج من عبارات ‪ statements .‬كل عبارة برنامج ٌجب أن تنتهى بحرؾ‬
‫الفاصلة المنقوطة ) ; ( لإلشارة إلى نهاٌة العبارة ‪ ،‬وإال ٌتم تولٌد خطأ بواسطة المترجم ‪.‬‬

‫أمثلة ‪:‬‬

‫;‪k = 50‬‬

‫;‪i = k+5‬‬

‫‪2-VARIBALES‬‬
‫وهى اول حاجه بتتحط فى البرنامج بتاعك‬
‫ٌعنى مثال لو عندك رقمٌن وعاٌز تجمعهم‬
‫هتستخدم ‪ 3‬متؽٌرات )‪(X,Y,Z‬‬
‫المتؽٌر االول هتدخل فٌه اول رقم‬
‫المتؽٌر التانى هتدخل فٌه تانى رقم‬
‫المتؽٌر التالت هتدخل فً مجموع الرقمٌن‬
‫كل متؽٌر من دول لٌه نوع محدد‬

‫‪86Page‬‬ ‫‪Technical Support 2015‬‬


87Page Technical Support 2015
‫أنواع المتؽٌرات‪:‬‬

‫متؽٌر عدد صحٌح )‪:(int‬‬


‫;‪int x=10‬‬
‫وٌوجد ‪ 3‬انواع من ال‪ٌ int‬ختلفون على حسب المساحه فى الذاكره وهم بالترتٌب من االصؽر‬
‫الى االكبر ‪:‬‬
‫‪short‬‬
‫‪int‬‬
‫‪long‬‬

‫متؽٌر عدد كسرى) ‪: (float‬‬


‫;‪float y=10.1‬‬
‫وٌوجد ‪ 3‬انواع من ال ‪ٌ float‬ختلفون على حسب المساحه فى الذاكره وهم بالترتٌب من االصؽر‬
‫الى االكبر ‪:‬‬
‫‪float‬‬
‫‪double‬‬
‫‪long double‬‬

‫متؽٌر حرفى )‪: (char‬‬


‫ٌكتب حرؾ واحد فقط‬
‫;'‪char eng ='a‬‬

‫‪88Page‬‬ ‫‪Technical Support 2015‬‬


‫متؽٌر سلسلة حرفٌة ) ‪: (string‬‬
‫;''‪char eng []=''engineer‬‬
‫توضع الجملة بٌن قوسٌن تنصٌص‬

‫شروط كتابه المتؽٌر ‪:‬‬


‫‪ -1‬اسم المتؽٌر ٌكتب فٌه حروؾ او ارقام او عالمه ) _ (‬
‫‪ -2‬ال ٌجوز بدء اسم المتؽٌر برقم‬
‫‪ٌ-3‬وجد فرق بٌن الحروؾ‬
‫‪CAPITAL‬و ‪SMALL‬‬
‫فاذا كتبت نفس الحرؾ مره صؽٌر ومره كبً فان البرنامج ٌعتبرهم متؽٌٌرٌن‬
‫‪ٌ-4‬جب اال ٌكون اسم المتؽٌر باسم احد الدوال المحفوظه فى البرنامج مثل‬

‫‪89Page‬‬ ‫‪Technical Support 2015‬‬


‫‪ٌ-5‬جب ان ٌنتهى كل امر او كل متؽٌر بعالمه‬
‫);(‬
‫‪: comments‬‬
‫فهى توضح فائدة امر معٌن بداخل البرنامج حتى ٌسهل على من ٌقرأ البرنامج فهم كٌفٌة عمله ‪.‬‬
‫‪//one line comment‬‬
‫باكتب ال ‪ comment‬فى سطر واحد لو نزلت على سطر تانى هٌكون امر جدٌد ‪.‬‬
‫*‪/‬‬ ‫‪long‬‬ ‫‪comment‬‬ ‫‪*/‬‬
‫اقدر اكتب ال ‪ comment‬فى كذا سطر‬
‫‪: function‬‬
‫الدالة هى مجموعة سطور برمجٌة تستخدم ألداء وظٌفة معٌنة وٌتم اللجوء الى الدوال عند تكرار‬
‫وظٌفة معٌنة أكثر من مرة فال نضطر الى تكرار الكود أكثر من مرة بل نقوم بإستدعاء الدالة فى‬
‫المكان المطلوب‪ .‬وتأخذ الدوال عدة أشكال ولكنها جمٌعا لها صورة عامة واحدة وهى‪-:‬‬

‫فعند تعرٌؾ الدالة ٌجب معرفة نوع نوع البٌانات الراجعة من الدالة سواء أكانت' ‪int , float ,‬‬
‫‪ 'char.....etc‬وعند عدم ارجاع شئ تاخذ الدالة القٌمة'‪ 'void‬وٌكتب نوع البٌانات الراجعة قبل‬
‫اسم الدالة‪.‬وٌجب أن ٌكون اسم وٌفضل ان ٌكون هذا االسم ٌعبر عن وظٌفة الدالة فمثال عند عمل‬
‫دالة لتعٌن مكعب رقم ٌكون االسم مثال '‪ Cube‬أو ‪ 'get_cube‬والقواعد التى تنظم اختٌار‬
‫اسماء الدوال هى نفسها المستخدمة فى اختٌار اسماء المتؽٌرات‪.‬‬

‫‪91Page‬‬ ‫‪Technical Support 2015‬‬


‫وثالثا معرفة نوع معامالت الدالة'‪'parameters‬والتى سٌتم ادخالها عند استدعاء الدالة‪.‬ثم بعد‬
‫ذلك ٌتم كتابة الكود الذى سوؾ ٌتم تنفٌذه داخل االقواس{}‪.‬‬
‫أنواع الدوال‪:‬‬
‫‪ -1‬دالة ال تأخذ معامالت وال ترجع قٌمة وتكون على الصٌؽة {})(‪ void name‬مثل‪:‬‬

‫فالدالة السابقة مثال الؽرض منها اضاءة لٌد لمدة ثانٌة واطفاءه ثانٌة أخرى فهى بالتالى ال تحتاج‬
‫الى أرجاع قٌمة وال الى معامالت‪.‬‬

‫‪ -2‬دالة ال تأخذ معامالت وترجع قٌمة وتكون على الصٌؽة {})(‪ Type name‬مثل‪:‬‬

‫الدالة السابقة مثال الؽرض منها حساب الزمن الذى استمر فٌه الشخص فى الضؽط على الزر فٌتم‬
‫ارجاع هذا الزمن الى تم حفظة فى متؽٌر'‪ 'x‬ونوعه'‪ 'int‬دون استخدام أٌة بارامترات‪.‬‬

‫‪91Page‬‬ ‫‪Technical Support 2015‬‬


‫وعند استدعاء اى دالة من النوعٌن السابقٌن تكون الصٌؽة‬
‫;)(‪Return-type name‬‬
‫‪ -3‬دالة تأخذ معامالت وال ترجع قٌمة وهى على الصٌؽة {})‪ void name(parmeters‬مثل‬

‫الدالة السابقة هى دائرة فالشر كما فى الدالة األولى ولكنها تختلؾ عنها فى انها تعمل لعدد معٌن‬
‫ٌحدده المستخدم عند استدعائها بوضع هذا الرقم داخل االقواس)(‪.‬‬

‫‪92Page‬‬ ‫‪Technical Support 2015‬‬


‫‪ -4‬دالة تأخذ معامالت وترجع قٌم وصٌؽتها {})‪ Return-type name(parameters‬مثل‬

‫هذة الدالة تستخدم لجمع رقمٌن ٌقوم‬


‫المستخدم بادخال قٌمتهما عند استدعاء‬
‫الدالة وٌكون الراجع من الدالة هو‬
‫حاصل جمعهما‪٫‬‬
‫‪.‬‬
‫‪Variable scope‬‬
‫مدى المتغٌر بٌكون اما داخل الداله او خارجها‬
‫‪1) Local‬‬
‫ٌعنى معرؾ بداخل ال ‪ function‬دى مش فى اى ‪ function‬تانٌة ‪.‬‬
‫‪2) Global‬‬
‫ٌعنى معرؾ ‪ outside‬ال ‪ function‬كلها وبٌكون معروؾ لكل ال ‪. functions‬‬

‫طب ما اخلى كله ‪ global‬احسن هخسر اٌة ؟؟؟‬


‫الحقٌقة ان لما أخلى ال ‪ local variable‬فان المتؽٌر بٌموت بمجرد أن ال ‪function‬‬
‫الخاصة بٌه تنتهى ٌعنى ممكن ٌجى ‪ variable‬مكانه‬
‫اما لو ‪ global‬مكانه بٌتحجز مش ممكن ٌجى ‪ٌ variable‬حل مكانه فاالفضل ان المتؽٌر لو‬
‫ٌنفع ٌكون ‪ local‬نخلٌه كده الن ال ‪ RAM‬اللى عندى صؽٌرة‬

‫‪93Page‬‬ ‫‪Technical Support 2015‬‬


Operators

94Page Technical Support 2015


95Page Technical Support 2015
‫‪Arithmetic‬‬

‫تسخدم فى عملٌات ‪:‬‬


‫‪-1‬الجمع ;‪x=5+4‬‬
‫‪-2‬الطرح;‪x=5-4‬‬
‫‪-3‬الضرب;‪x=5*4‬‬
‫‪-4‬القسمه ;‪x=5/4‬‬
‫‪-5‬باقى القسمه ;‪x=5%4‬‬
‫‪-6‬باقى القسمه فى هذه الحاله ٌساوى ‪1‬‬
‫‪-7‬اضافه رقم ‪++‬‬
‫ٌعنى لو عندى ;‪x=5‬‬
‫;‪x++‬‬
‫هتكون ;‪x=6‬‬

‫‪96Page‬‬ ‫‪Technical Support 2015‬‬


-- ‫ نقص رقم‬-8
x=5; ‫ٌعنى لو عندى‬
x--;
x=4; ‫هتكون‬

97Page Technical Support 2015


Relational

98Page Technical Support 2015


‫وتسخدم فى عملٌات مقارنه‬
‫‪ (==)-1‬وستخدم فى مقارنه اذا كان رقم ٌساوى رقم ام ال‬
‫)‪(x==y‬‬

‫‪ (!=)-2‬وتسخدم فى مقارنه ان رقم الٌساوى رقم اخر‬


‫‪X!=y‬‬

‫‪-3‬وتسخدم فى مقارنه رقم اكبر من رقم ام ال‬


‫‪X>Y‬‬

‫‪ -4‬وتسخدم فى مقارنه رقم اكبر من رقم ام ال‬


‫‪X<Y‬‬

‫‪99Page‬‬ ‫‪Technical Support 2015‬‬


‫‪ -5‬وتسخدم فى مقارنه رقم اكبر من رقم او ٌساوٌه ام ال‬
‫‪X>=Y‬‬

‫‪ -6‬وتسخدم فى مقارنه رقم اصؽر من رقم او ٌساوٌه ام ال‬


‫‪X<=Y‬‬
‫‪.‬والناتج اما ان ٌكون ‪ 1‬او ‪0‬‬
‫‪ 1‬فى حاله ال ‪TRUE‬‬
‫‪ 0‬فى حاله ‪FLASE‬‬

‫‪111Page‬‬ ‫‪Technical Support 2015‬‬


‫‪Logic operators‬‬

‫وتسخدم فى عملٌات الشرط لمتؽٌرٌٌن او اكثر‬


‫‪(and) && -1‬‬
‫)‪EX: if (x==5 && y==4‬‬
‫}‪{do that‬‬
‫اى التاكد من ان المتؽٌر االول ٌٌساوى خمسه و المتؽٌر الثانى ٌساوى اربعه‬

‫‪(or)|| -2‬‬
‫)‪EX: if (x==5 || y==4‬‬
‫}‪{do that‬‬
‫اى التاكد من ان المتؽٌر االول ٌٌساوى خمسه او المتؽٌر الثانى ٌساوى اربعه‬
‫‪(not)!-3‬‬

‫‪111Page‬‬ ‫‪Technical Support 2015‬‬


Bitwise Operators

112Page Technical Support 2015


Logic operators‫ وال‬Bitwise Operators‫والفرق بٌن ال‬
Bitwise Operators‫ان ال‬
. bit ‫ على مستوى ال‬variable ‫بٌتعامل مع ال‬
Ex:
int x=1, y=2, q;
q=x & y;
binary ‫سٌقوم بتحوٌل الرقم االول والثانى الى‬
‫ثم سٌقوم باجراء عملٌه ال& علٌهم‬

113Page Technical Support 2015


‫‪X=00000001‬‬

‫‪Y=00000010‬‬

‫‪q=00000001‬‬
‫&‬
‫‪00000010‬‬
‫_______________‬
‫=‪q‬‬
‫‪00000000‬‬

‫اما فى ال‪Logic operators‬‬


‫فهو ٌختبر هل هى ‪false or true‬‬
‫‪ex:‬‬

‫;‪int x=1, y=2, q‬‬


‫‪q=x && yi‬‬

‫سٌقوم البرنامج بالذهاب الى الذاكره لٌرى هل ‪x==1‬‬


‫وهل ‪y==2‬‬
‫فاذا كانت كذلك سٌقوم البرنامج بوضع ‪ 1‬فى ‪ q‬اى ‪true‬‬
‫واذا كان الشرط ؼٌر متحقق سٌقوم البرنامج بوضع ‪ 0‬فى ‪ q‬اى ‪false‬‬

‫‪114Page‬‬ ‫‪Technical Support 2015‬‬


‫‪(|) -2‬‬
‫نفس الوضع مع ال‪or‬‬
‫ان البرنامج ٌقوم بعمل عملٌه ‪or‬لرقمٌن ‪binary‬‬
‫‪X=00000001‬‬

‫‪Y=00000010‬‬

‫‪q=00000001‬‬
‫|‬
‫‪00000010‬‬
‫_______________‬
‫=‪q‬‬
‫‪00000011‬‬

‫‪XOR-3‬‬
‫اذا كان الرقمٌن متشابهٌن ٌكون الناتج ‪0‬‬

‫‪115Page‬‬ ‫‪Technical Support 2015‬‬


‫اذا كان الرقمٌن مختلفٌن ٌكون الناتج ‪1‬‬

‫‪X=00110001‬‬

‫‪Y=10000010‬‬

‫‪q=00110001‬‬
‫^‬
‫‪10000010‬‬
‫_______________‬
‫=‪q‬‬

‫‪10110011‬‬

‫‪Complement-4‬‬
‫)ْْ~(‬

‫وتسخدم فى عكس الرقم‬


‫;‪X=1111111‬‬
‫;‪Y= ~x‬‬
‫‪X=11111111‬‬

‫‪116Page‬‬ ‫‪Technical Support 2015‬‬


‫‪Y=00000000‬‬

‫‪shift left-5‬‬
‫وتستخدم الزاحه الرقم باتجاه الٌسار‬
‫;‪x=00000100‬‬
‫;‪Y=x<<2‬‬
‫بٌزٌح خانتٌن من ال ‪ 8‬باتجاه الٌسار وٌضع مكانهم اصفار‬

‫;‪y=00010000‬‬

‫‪shift right-6‬‬
‫وتستخدم الزاحه الرقم باتجاه الٌمٌن‬
‫;‪x=00000100‬‬
‫;‪Y=x>>2‬‬
‫بٌزٌح خانتٌن من ال ‪ 8‬باتجاه الٌمٌن وٌضع مكانهم اصفار‬

‫‪117Page‬‬ ‫‪Technical Support 2015‬‬


y=00000001;

118Page Technical Support 2015


ASSIGNMENT OPERATORS

‫بستخدمها عشان اعمل عملٌه على الرقم نفسه‬

119Page Technical Support 2015


Control Structure
(IF-switch)

111Page Technical Support 2015


‫‪IF‬‬
‫وتستخدم الختبار اذا كان ما بداخل اقواس ‪ IF‬حقٌقى‬
‫افعل شئ معٌن‬

‫{ )‪If (expression‬‬
‫‪………………………….‬‬
‫‪…………………………..‬‬
‫}‬
‫لو كان الناتج لل ‪ٌ expression‬ساوى ‪ٌ 1‬نفذ الجملة بٌن ال ‪ curl brackets‬اما لو ‪zero‬‬
‫ٌعدى ال }{ وٌكمل عادى‪.‬‬

‫{ )‪If (expression‬‬
‫‪………………………….‬‬
‫‪…………………………..‬‬
‫}‬
‫{ ‪Else‬‬
‫‪…………………………….‬‬
‫………………………………‬
‫}‬
‫لو ‪ٌ true‬نفذ اللى بٌن ال ‪ curl brackets‬الخاص ب ‪ if‬لو ‪ٌ false‬نفذ اللى بٌن ال‬
‫‪ curl brackets‬الخاص ب ‪else‬‬

‫‪111Page‬‬ ‫‪Technical Support 2015‬‬


If (expression) {
………………………….
…………………………..
}
Else if {
…………………………….
………………………………
}
Else if {
…………………………….
………………………………
}
Else {
…………………………….
………………………………
}
true ‫ اذا كان‬if ‫ الخاص ب‬curl brackets ‫ٌنفذ اللى بٌن ال‬
curl ‫ اللى بٌن ال‬expression ‫ االولى اذا كان ال‬else if ‫ ٌروح ل‬false ‫فاذا كان‬
‫ ٌنفذه‬true ‫ االولى‬else if ‫ الخاص ب‬brackets
‫ ٌنفذه‬true ‫ التانٌة اذا كان‬else if ‫ ٌروح ل‬false ‫اذا كان‬
. else ‫ الخاص ب‬curl brackets ‫ ٌنفذ اللى بٌن ال‬false ‫لو‬

112Page Technical Support 2015


‫لو جملة واحدة مع ‪ if‬مش شرط اضع ال }{ اما لو كذا جملة ٌعنى مثال لو المفتاح مفتوح اللٌد‬
‫تنور والموتور ٌتحرك دا جملتٌن وقتها الزم اضع ال }{ لو مش وضعتها هٌنفذ االمر االول‬
‫بس‪.‬‬

‫‪The Case Control Structure‬‬

‫)‪(SWITCH‬‬
‫وتسخدم لفعل نفس ما تفعله‬
‫‪IF‬‬

‫) (‪main‬‬
‫{‬
‫; ‪Int i = 2‬‬
‫) ‪switch ( i‬‬
‫{‬
‫‪case 1 :‬‬
‫;‪do that‬‬
‫; ‪break‬‬

‫‪case 2 :‬‬
‫;‪do that‬‬
‫; ‪break‬‬

‫‪case 3 :‬‬
‫;‪do that‬‬
‫; ‪break‬‬

‫‪default :‬‬

‫‪113Page‬‬ ‫‪Technical Support 2015‬‬


‫;‪do that‬‬
‫}‬
‫}‬
‫‪The output of this program would be in case 2:‬‬

‫االمر‬
‫;‪break‬‬
‫ٌستخدم بعد كل حاله‬
‫حتى ٌقوم البرنامج بالخروج بعد تنفٌذ الحاله ولٌس تنفٌذ بقٌه الحاالت‬
‫التالٌه لها‬

‫‪114Page‬‬ ‫‪Technical Support 2015‬‬


(a) Using a for statement
(b) Using a while statement
(c) Using a do-while statement

115Page Technical Support 2015


‫وٌستخدم اللوب لتكرار مجموعه من االوامر عده مرات على حسب اختٌارى‬
‫ٌعنى لو عندى كود عاٌز اعٌده ‪ 3‬مرات‬
‫اكٌد مش هقعد اكتب اللكود دا ‪ 3‬مرات‬
‫ساعتها هستخدم ال‪loop‬‬

‫فى اى للوب نستخدم ‪ 3‬اشٌاء‬

‫‪Initialization‬‬
‫وهو الرقم الى بتبدء بٌه اللوب‬
‫مثل‬
‫‪i=0‬‬
‫وٌستخدم كعداد لعدد المرات الى ترٌد تنفٌذ ما بداخل اللوب‬

‫‪-2 condition‬‬
‫وهو الشرط الى على اساسه بٌتم اختبار اللوب‬
‫مثل‬
‫;‪i<5‬‬
‫اذا كان الشرط متحقق بٌتم الدخول الى اللوب‬
‫وتنفٌذ ما بداخله‬

‫‪increment or decrement -3‬‬


‫وتسخدم فى زٌاده او نقصان العداد الذى استخدمه‬
‫‪i++‬‬
‫‪i--‬‬

‫‪116Page‬‬ ‫‪Technical Support 2015‬‬


‫اى فى البداٌه ٌكون مثال العداد‬
‫‪i=0‬‬
‫ثم ٌبدء باختبار الشرط هل‬
‫‪i<5‬‬
‫اذا كان‬
‫‪true‬‬
‫ٌدخل داخل اللوب ٌنفذ االوامر داخله‬
‫ثم ٌزٌد العداد‬
‫‪i++‬‬
‫فتصبح‬
‫‪i=1‬‬
‫ثم ٌختبرها مره اخرى هل‬
‫‪i<5‬‬
‫وهكذا حتى ٌصبح الشرط ؼٌر صحٌح‬
‫فٌخرج من اللوب‬

‫‪117Page‬‬ ‫‪Technical Support 2015‬‬


‫‪1-for loop‬‬
‫)‪for(Initialization; condition; increment‬‬
‫{‬
‫‪………………….‬‬
‫}‬

‫{ )‪For (i=0; I<10; I++‬‬


‫}‪…………………….‬‬
‫ال ‪ sequence‬اللى بٌمشى بٌه البرنامج عند ‪ I=0‬دى القٌمة االبتدائٌة اللى بتبدأ عندها ال‬
‫‪ loop‬تتنفذ ٌدخل على ال ‪ٌ condition‬شوؾ هل ‪ 0<10‬اه ٌبدأ ٌنفذ البرنامج اللى بٌن }{‬
‫ثم ٌرجع لل ‪ increment‬هل ‪ 1<10‬نعم ٌبدأ ٌنفذ البرنامج اللى بٌن }{ تانى وهكذا لحد ما ال‬
‫‪ condition‬مش ٌتحقق وبكده ال ‪ loop‬تقؾ ‪.‬‬
‫{);;( ‪For‬‬
‫……………………‬
‫}‬
‫دى ‪ infinite loop‬عدد ال نهائى‬

‫‪118Page‬‬ ‫‪Technical Support 2015‬‬


While-2
‫ًجمٌو بنفض يا جمٌو بو‬
for
‫نكن بشكم يخحهف‬

initialise loop counter ;


while ( test loop counter using a condition )
{
do this ;
and this ;
increment loop counter ;
}

ex:
i=0
while(i<5)
{
do this;

i++;
}

‫ مش ٌعمل حاجة ٌمكن‬false ‫ ٌفضل ٌنفذ البرنامج لو‬condition is true ‫طول ما ال‬
for‫ ب‬while ‫استبدال‬
‫ ال نهائٌة‬loop ‫ بمعنى انها‬for (;;) ‫ تكافئ‬While (1)

119Page Technical Support 2015


‫‪Do while-3‬‬
‫وٌقوم بنفس ماٌقوم به النوعٌن السابقٌن‬
‫ولكن بشكل مختلؾ‬
‫{ ‪Do‬‬
‫}‪………….‬‬
‫)‪While (condition‬‬
‫تقوم بتنفٌذ البرنامج مرة واحدة ع االقل ثم تنظر الى الشرط هل هو ‪ true or false‬فاذا‬
‫كان ‪ false‬مش تعمل حاجة لو ‪ true‬ترجع ل ‪ do‬تنفذ ال ‪ statement‬اللى بداخلها مرة‬
‫تانٌه وهكذا‬

‫‪121Page‬‬ ‫‪Technical Support 2015‬‬


Data Direction

121Page Technical Support 2015


Data Direction

. output ‫ أم ك‬input ‫ تعمل ك‬pin ‫بٌحدد هل ال‬


0 ____________ output
1 _____________ input

122Page Technical Support 2015


‫زى ما اتفقنا اننا عندنا مجموعه من ال ‪ports‬‬
‫]‪[A, B, C, D, and E‬‬
‫كل ‪ port‬من دول فٌه مجموعه من ‪pins‬‬
‫طٌب افرض انا وصلت على اول ‪( LED) pin‬‬
‫ووصلت على ‪ pin‬تانى ‪switch‬‬
‫الماٌكرو هٌعرؾ منٌن ان دا ‪ LED‬ودا ‪SWITCH‬‬

‫الماٌكرو ما بٌفهش ؼٌر ‪ 0‬و‪1‬‬


‫الما داخل لٌه ‪1‬‬
‫فٌعرؾ ان فى حاجه متوصله على ال‪PIN‬‬
‫عنده بعتتله ‪ 1‬زى ‪SWITCH‬‬

‫او ٌخرج واحد فٌنور ال‪LED‬‬

‫ٌعنى كل اوامر الماٌكرو ٌأما‬


‫‪output/input‬‬

‫‪123Page‬‬ ‫‪Technical Support 2015‬‬


‫طٌب اٌه االمر الى انا بكتبه عشان احدد للمٌاكرو هل ال‬
‫‪pins output or input‬‬

‫االمر دا اسمه ‪:‬‬


‫;‪TRIS X=Value‬‬
‫حٌث ‪ X‬هى ال ‪ PORTS‬الى بستخدمهم فى الماٌكرو ]‪[A, B, C, D, and E‬‬
‫وال ‪ٌValue‬اما تبقى ب‪ 0‬او ب‪1‬‬
‫لو ‪ٌ 1‬بقى ال ‪ port‬دا ‪input‬‬
‫لو ‪ٌ 0‬بقى ال‪ port‬دا ‪output‬‬
‫وكل ‪ PORT‬فى دول فٌه مجموعه من ال‪PIN‬‬
‫انا بحدد باالمر دا انهى ب ‪ pin‬فى انهى ‪port‬‬
‫‪input or output‬‬

‫‪Ex:‬‬
‫دلوقتى انا عرفت هل ال‪PORT :INPIUT OR OUTPUT‬‬
‫مفروض اعرؾ نوع الخرج الى هٌخرج علٌه‬
‫هل هٌكون‬
‫لو عاٌز اخلى ‪PORTA:INPUT‬‬
‫هكتب ;‪TRISA=0b11111111‬‬
‫‪ٌ 0b‬عنى انا بكتب بال‪binary‬‬
‫لو عاٌز اكتب ‪hex‬‬
‫هكتب ‪0X‬‬
‫;‪TRISA=0X1111 1111‬‬
‫لو عاٌز اكتب بال‪DECIMAL‬‬
‫هكتب ;‪TRISA=255‬‬
‫)‪(255=11111111‬‬

‫‪124Page‬‬ ‫‪Technical Support 2015‬‬


‫طٌب انا كدا عملت ال ‪ PORT‬كامل هل هو ‪OUTPUT OR INPUT‬‬
‫لو عاٌز اختار ‪PIN‬معٌن هكتب رقم ال ‪PIN‬الى انا عاٌزه‬

‫‪:EX‬‬
‫لو انا عاٌز ال‪ PIN‬التالت فى ال‪ٌ PORTA‬كون ‪OUTPUT‬‬

‫هكتب ;‪TRISA.F3=0‬‬
‫طٌب لو انا عاٌز مجموعه ‪ٌ PIN‬بقو ‪OUTPUT‬والباقى ‪INPUT‬‬
‫هكتب ‪TRISA=0B11001100‬‬
‫ال ‪ PINS‬الى علٌها )‪(0‬هتبقى ‪OUTPUT‬‬
‫والى علٌها ) ‪ (1‬هبقى ‪INPUT‬‬

‫دلوقتى انا عرفت هل ال‪PORT :INPIUT OR OUTPUT‬‬


‫مفروض اعرؾ نوع الخرج الى هٌخرج علٌه‬
‫هل هٌكون‬

‫‪125Page‬‬ ‫‪Technical Support 2015‬‬


0:MEAN 0 VOLT
1:MEAN 5 VOLT

: ‫وٌتم ذلك عن طرٌق االمر‬


PORTX = Value;
PORT OR PIN‫ هو اسم ال‬X
VALUE IS (0 OR 1)

EX:
TRISA=0B00000000
PORTA=11111111
OUTPUT ‫ هٌكون‬PORTA ‫انا كدا حددت انى‬
‫ الى فٌه‬PINS ‫ فولت على كل ال‬1 ‫وهٌخرج‬

126Page Technical Support 2015


‫لو عاوز ‪ PIN‬واحدة من ‪ PINS‬ال ‪ PORT‬اضع علٌها اما ‪ 5V / 0V‬استخدم االمر‬
‫االتى ‪:‬‬

‫;‪PORTX .fN =0 or 1‬‬

‫لو عاوز ‪ PIN‬واحدة من ‪PINS‬‬


‫االمر ‪TRIS‬واالمر ‪PORT‬‬

‫‪127Page‬‬ ‫‪Technical Support 2015‬‬


REGISTER ‫هم عباره عن‬
OUTPUT ‫ او‬INPUT ‫بتكتب فٌها انتا عاٌز‬
‫بتاعك‬OUTPUT ‫ونوع ال‬

128Page Technical Support 2015


129Page Technical Support 2015
131Page Technical Support 2015
‫الرسالة‬ ‫المعنى‬
Array size too large ‫حجم المصفوفة كبٌر‬
Bad file name format in include ‫اسم المكتبة خطأ‬
directive
Case outside of switch switch ‫ خارج جمله‬case ‫جمله‬
Compound statement missing} ‫القوس { مفقود‬
Conflicting type modifiers ‫تعارض فً النوع‬
Could not find file 'filename' ‫اسم المكتبة ؼٌر موجود‬
Declaration missing; ‫إعالن مفقود‬
Declaration syntax error ‫خطأ فً بناء الجملة‬
Suspicious pointer conversion ‫نقطة تحول مرٌبه‬
Declaration terminated ‫انتهاء خاطئ لإلعالن‬
incorrectly
Default outside of switch switch ‫ خارج‬Default ‫جمله‬
Default value missing ‫القٌمة مفقودة‬
Division by zero ‫قسمه على صفر‬
do statement must have while while ‫ تنقصها جملة‬do ‫جمله‬
do-while statement missing) ) ‫تنقصها‬do-while ‫جمله‬
do-while statement missing( )( ‫تنقصها‬do-while ‫جمله‬
do-while statement missing; ; ‫تنقصها‬do-while ‫جمله‬
Duplicate case ‫مكررة‬
expected) ) ‫عدم وجود قوس‬
expected( ( ‫عدم وجود قوس‬
expected, ‫عدم وجود فاصلة‬
expected{ } ‫عدم وجود قوس‬
expected} {‫عدم وجود قوس‬
expected> > ‫عدم وجود قوس‬

131Page Technical Support 2015


Expression syntax ‫جملة ؼٌر صحٌحة‬
For statement missing) ) ‫ تنقصها قوس‬for ‫جمله‬
For statement missing( ( ‫ تنقصها قوس‬for ‫جمله‬
For statement missing; ; ‫ تنقصها الفاصلة المنقوطة‬for ‫جمله‬
Function call missing( ( ‫الدالة تنقصها قوس‬
function' cannot return a value' ‫الدالة ال تستطٌع الرجوع بقٌمة‬
function' must be declared with ‫ٌجب أن تعلن الدالة بدون بارمٌتر‬
no parameters'
function' must be declared with ‫ٌجب أن تعلن الدالة ببارامٌتر واحد‬
one parameter'
function' must be declared with ‫ٌجب أن تعلن الدالة واثنان بارمٌتر‬
two parameters'
If statement missing) ) ‫الدالة تنقصها قوس‬
If statement missing( ) ‫ تنقصها قوس‬if ‫جمله‬
Misplaced else ( ‫ تنقصها قوس‬if ‫جمله‬
Undefined symbol ‫متؽٌر ؼٌر معرؾ‬
Unable to open include file ' (‫الٌمكن فتح الملؾ)المكتبة‬
'
Statement massing ; ‫عدم وجود فاصله ; فً السطر السابق‬

132Page Technical Support 2015


133Page Technical Support 2015
‫بعد تسطٌب البرنامج هتظهرلك الشاشه دٌه‬

‫‪134Page‬‬ ‫‪Technical Support 2015‬‬


135Page Technical Support 2015
136Page Technical Support 2015
137Page Technical Support 2015
138Page Technical Support 2015
4.0000000 clock

139Page Technical Support 2015


141Page Technical Support 2015
141Page Technical Support 2015
142Page Technical Support 2015
143Page Technical Support 2015
144Page Technical Support 2015
145Page Technical Support 2015
146Page Technical Support 2015
147Page Technical Support 2015
148Page Technical Support 2015
149Page Technical Support 2015
151Page Technical Support 2015
151Page Technical Support 2015
‫دلوقتى احنا وصلنا اننا اتعرفنا على الماٌكروكنترولر وتركٌبه من الداخل وال‪ FETURES‬الى فٌه‬
‫واتعلمنا اساسٌات البرمجه‬

‫تانى حاجه مفروض نتعلمها‬


‫ازاى نعمل ‪ simulation‬للداٌره بتعتنا‬
‫ٌعنى انا لو عندى داٌره او مشروع عاٌز انفذه‬
‫وخالص اخترت نوع الماٌكروكنتولر وعملت البرمجه بتعته‬
‫قبل ما انزل واشترى الكوبونانت والمٌكروكنتولر‬
‫مفروض اعملهم محاكاه االول عشان اتاكد ان الكومبونانت الى انا مختارها‬
‫صح وان البرمجه بتعتى صح‬

‫فى اكتر من برنامج للمحاكاه زى‬

‫احنا هنشتغل على ال‪Proteus‬‬


‫اوال‪:‬طرٌقه التسطٌب‬

‫‪152Page‬‬ ‫‪Technical Support 2015‬‬


153Page Technical Support 2015
154Page Technical Support 2015
155Page Technical Support 2015
156Page Technical Support 2015
157Page Technical Support 2015
158Page Technical Support 2015
159Page Technical Support 2015
161Page Technical Support 2015
161Page Technical Support 2015
162Page Technical Support 2015
163Page Technical Support 2015
164Page Technical Support 2015
165Page Technical Support 2015
166Page Technical Support 2015
167Page Technical Support 2015
168Page Technical Support 2015
‫زى ما اتفقنا ان المٌكروكنترولر ما بٌفهمش هو متوصل بٌه اٌه‬
‫هو بٌفهم برمجه‬
‫ومجموعه من االصفار والوحاٌد‬
‫ٌعنى لو جاٌله ‪ٌ INPUT 1‬بقى فى جهاز زى ال ‪SWITCH‬‬
‫متوصل بٌه‬
‫ولو مطلع ‪ٌOUTPUT 1‬بقى فى جهاز زى ال ‪ LED‬متوصل بٌه‬
‫فى ال ‪ Chapter‬دا هنتعرؾ على اشهر انواع ال‬
‫‪INPUT AND OUTPUT‬‬
‫الى بتتوصل بالماٌكرو‬

‫‪169Page‬‬ ‫‪Technical Support 2015‬‬


171Page Technical Support 2015
‫مصطلح ال ‪ i/o‬هو االتصال بٌن اى ‪ information processing system‬زى مثال‬
‫الكمبٌوتر وبٌن العالم الخارجى‪.‬‬
‫ممكن ٌكون انسان او اى سٌستم تانى‬
‫ال ‪ input‬هى االشارات اللى بٌستقبلها السٌستم وال ‪ output‬هى االشارات اللى بٌخرجها‬
‫السٌستم وٌستقبلها العالم الخارجى او اٌا كان مستقبله‬

‫)‪A‬‬

‫ٌوجد طرٌقتٌن لتوصٌل ال ‪: push button‬‬

‫الطرٌقة االولى )‪: (active high switch‬‬


‫فى حاله عدم الضؽط على السوٌتش بٌكون المٌكرو قارى ‪ 5‬فولت‬
‫وفى حاله الضؽط المٌكرو بٌقرى ‪ 0‬فولت‬

‫‪171Page‬‬ ‫‪Technical Support 2015‬‬


‫الطرٌقة الثانٌة )‪:(active low switch‬‬
‫فى حاله عدم الضؽط على السوٌتش بٌكون المٌكرو قارى‬
‫‪ 0‬فولت وفى حاله الضؽط المٌكرو بٌقرى ‪ 5‬فولت‬
‫ٌفضل استخدام الطرٌقة الثانٌة الن احتمال ان ال ‪VCC‬‬
‫تعطى ‪ low‬قلٌل فٌفضل على ال ‪ٌ high pin‬عنى‬
‫مفٌش ‪. reset‬‬

‫)‪2‬‬

‫زى اللى موجود فى االسانسٌر عبارة عن ذراع فى اخرة‬


‫عجلة عند مرور االسانسٌر علٌه ٌقفل ال ‪ switch‬وبكده‬
‫اكون عرفت ان ده الدور اللى مفروض انزل فٌه حٌث ٌكون‬
‫ال ‪ switch‬اللى فى الدور اللى مفروض انزل فٌه مؽلق‬
‫وال ‪ switch‬فى باقى االدوار مفتوح ‪.‬‬

‫أما فى المٌكرو فانه ٌعامل معاملة ال ‪Push button‬‬


‫رمز ال ‪ٌ limit switch‬ختلؾ عن ال ‪ push button‬لكن ٌوصل المفتاح كما هو‬
‫موجود بالشكل‬

‫‪172Page‬‬ ‫‪Technical Support 2015‬‬


‫)‪3‬‬
‫القطعه البالستٌك فى المقدمة تعمل ك ‪ sensor‬بٌحس بأى‬
‫امامه ‪.‬‬ ‫شئ‬
‫ٌوجد منه نوعان ‪:‬‬
‫)‪ First type (inductive‬‬
‫بٌحس بال ‪metal‬‬
‫)‪ Second type (capacitive‬‬
‫بٌحس بال ‪metal& nonmetal‬‬
‫لو فٌه حاجه قدامه الخرج بٌكون ‪high 24v DC‬‬
‫لو مش فٌه حاجه قدامه الخرج بٌكون ‪low 0V‬‬
‫طب المٌكرو بٌشتؽل ب ‪ 5‬فولت ولٌس ‪ 24‬فولت لذا الزم اعمل ‪ clamping‬لل ‪24‬فولت‬
‫وتكون دائرتها بهذا الشكل‪:‬‬

‫لو واصل ‪ zero‬من ال ‪ sensor‬معنى كده ان ‪ٌ D1& D2 Is off‬عنى ‪ٌ O.C‬عنى‬


‫واصل لل ‪zero volt pin‬‬
‫أما لو داخل من ال ‪ sensor 24v‬فان‬

‫‪173Page‬‬ ‫‪Technical Support 2015‬‬


‫‪ D1 is on‬و‬
‫‪ٌ D2 is off‬عنى داخل لل ‪ 5 pin‬فولت الن الداٌود عمل ‪ S.C‬بٌن ال ‪ VCC‬وال‬
‫‪ PIN‬وٌكون فى فرق جهد ع المقاومة ‪ 19=5-24‬فولت ‪.‬‬
‫فى هذة الدائرة ‪ D2‬مش له الزمة اال لو الفولت اللى داخل سالب‬
‫المفاجأة ان بداخل المٌكرو دائرة ‪ clamping‬جاهزة ٌعنى مش هحتاج اضع داٌود لكن الزم‬
‫اضع المقاومة عشان تشٌل فرق الجهد بٌن ال ‪ 24‬فولت وال ‪ 5‬فولت‬
‫طب المقاومة دى قٌمتها كام ؟؟؟؟‬

‫لو فرضنا مر فى المقاومة ‪ 1mA‬النى بٌخرج من ال ‪ switch‬اقصى تٌار ‪ 20mA‬اذا‬


‫‪R= (24-5)/1mA=19KΩ‬‬
‫تتعٌن المقاومة بقٌاس الباور لٌها‬
‫‪P = I^2R = (1mA)^2*19K=19mW‬‬
‫المقاومة اللى بشترٌها من السوق بتكون ربع وات ٌعنى شؽاله معاٌا ‪.‬‬
‫الدائرة تكون بهذا الشكل‬

‫‪174Page‬‬ ‫‪Technical Support 2015‬‬


‫)‪4‬‬

‫لو حصل ان فٌه ‪ object‬فى النص بٌن ال ‪ sensor‬وال ‪ reflector‬الضوء مش‬


‫هٌنعكس ٌعنى الخرج ‪ high‬لو مفٌش ‪ object‬الضوء هٌنعكس فالخرج ٌكون‬
‫‪ low‬حٌث ان ال ‪ٌ SENSOR‬خرج اشعه تحت الحمراء ‪.‬‬
‫ٌوصل بهذا الشكل‪:‬‬

‫مٌزة ال ‪ photocell‬عن ال ‪ proximity‬ان المسافة بٌن ال ‪ object‬وال‬


‫‪ sensor‬تكون باالمتار اما فى ال ‪ proximity‬المسافه بالملى متر لكن مٌزة ال‬
‫‪ proximity‬ان فى الصناعه ٌوجد ‪ dust‬فممكن ال ‪ٌ reflector‬تؽطى بالتراب‬
‫فال ‪ٌ sensor‬عطى ‪ high‬علطول وبكده هحتاج انى انظؾ ال ‪reflector‬‬
‫بانتظام‪.‬‬

‫‪175Page‬‬ ‫‪Technical Support 2015‬‬


‫)‪5‬‬
‫‪Passive infra red‬‬
‫من أشهر الطرق اللى بقدر اعرؾ بٌها فى حد فى المكان وال‬
‫ال حٌث ٌوضع ال ‪ PIR‬مثبت على سطح الؽرفة وبٌشتؽل‬
‫هذا ال ‪ sensor‬ب ‪ 5‬فولت‬

‫وٌوصل بهذا الشكل‬

‫‪176Page‬‬ ‫‪Technical Support 2015‬‬


‫ٌوضع ال ‪ PIR‬فى اعلى سطح الؽرفه وٌكون معلوم عندى طول السطح الؽرفة‬
‫وزاوٌة مٌل االشعة النافذة منه فأقدر أحدد ال مساحة اللى ال ‪ sensor‬بٌتفقد فٌها ‪.‬‬

‫‪177Page‬‬ ‫‪Technical Support 2015‬‬


: ‫ملخص ما سبق‬

178Page Technical Support 2015


‫ال ‪ delay‬معناه انى لو مخرج على ال ‪ 5 pin‬فولت أقول للمٌكرو خلى ال ‪ 5v‬على ال ‪pin‬‬
‫للمدة دى من الزمن ‪.‬‬

‫ممكن اختبر الخرج ب ‪ led‬حٌث ان ال ‪ pin‬بٌخرج منها تٌار تقرٌبا ‪ 20mA‬فلو الخرج‬
‫‪high led is on/ low led is off‬تقرٌبا لو قرٌنا ال ‪ data sheet‬لل ‪ led‬هاجد ان ال‬
‫‪ led‬بٌقع علٌها تقرٌبا ‪ voltage drop‬قٌمته ‪ 1.2v‬لذا ٌوضع مقاومة مع اللٌد تشٌل فرق‬
‫الجهد بٌن ال ‪ 5‬فولت وال ‪ 1.2‬قٌمة هذة المقاومة ‪ ،‬أقصى تٌار خارج من ال ‪25 pin‬ملى‬
‫امبٌر هى ‪:‬‬
‫‪R= (5-1.2)/25mA=152Ω‬‬
‫إذن فإن أقل مقاومة ٌمكن استخدامها بحٌث ال تؤثر على ال ‪ pin‬هً ‪ Ω152‬وٌفضل أن تكون‬
‫قٌمة المقاومة أكبر من ذلك لكً ال ٌتم استهالك أقصى قٌمة للتٌار من ال ‪pin‬‬
‫لذا الموجود فى السوق المقاومة‪ 220‬اوم لذا اضعها قبل اللٌد‬

‫‪179Page‬‬ ‫‪Technical Support 2015‬‬


‫ال ‪ device‬الوحٌد اللى مش بٌحتاج دائرة ‪ interface‬بٌنه وبٌن المٌكرو هو اللٌد النه بٌشتؽل‬
‫بتٌار صؽٌر لكن لو انا عاوز اشؽل ‪ device‬ب ‪ 220v‬لكن المٌكرو أما بٌخرج ‪ 0v / 5v‬فى‬
‫الوقت دا اعمل داٌرة ‪ interface‬تربط بٌن ال ‪ 5v‬الخارجة من المٌكرو وال ‪ 220v‬اللى‬
‫محتاج اشؽل بٌها ال ‪ device‬لذا اخرج ال ‪ 5v‬من المٌكرو اشؽل بٌهم داٌرة ال ‪interface‬‬
‫لما ٌجٌها من المٌكرو ‪ 0v‬تفصل ال ‪ 220v‬لما ٌجٌها ‪ 5v‬توصل ال ‪. 220 v‬‬

‫ٌخرج من ال ‪ pin‬تٌار صؽٌر عندما ٌمر تٌار فى الملؾ ٌتولد ‪ٌ magnetic wave‬جذب ال‬
‫‪ contact‬الخاص بال ‪ swit ch‬الموجود بال ‪ relay‬وبذلك ٌكون ال ‪switch‬‬
‫‪closed‬فٌؽلق الدائرة فٌمر ‪ v220‬طب ال ‪ relay‬محتاج ‪30‬ملى امبٌر واٌضا‬
‫‪ 12‬فولت او ‪ 6‬او ‪ 34‬او ‪ 22‬فولت عشان ٌشتؽل حسب نوعه لكن انا هنا بشتؽل ب ‪12‬‬
‫فولت ‪ relay‬لكن المٌكرو ٌعطى اقصى تٌار ‪ 20‬ملى امبٌر لذا اوصل على ال ‪ pin‬للمٌكرو‬
‫مقاومة وترانزستور ‪ NPN‬ممكن ‪ bc547‬حٌث ٌدخل من ال ‪ base‬تٌار صؽٌر اقدراخده‬
‫من المٌكرو وٌمر فى ال ‪ collector‬تٌار أكبر ٌالئم تشؽٌل ال ‪relay‬‬
‫لما تكون ال ‪ٌ pin high‬مر تٌار فى الترانزستورهٌصل الترانزستور الى حالة ال‬
‫‪ saturation‬وهٌكون بٌن ال ‪ emitter‬وال ‪ collector‬عبارة عن ‪short circuit‬‬
‫فهٌوصل ارضى للدائرة فٌمر تٌار فى ملؾ ال ‪ٌ relay‬جذب ال ‪ contact‬وبالتالى ٌصل‬

‫‪181Page‬‬ ‫‪Technical Support 2015‬‬


‫لل ‪ 12 relay‬فولت فٌشتؽل وٌمر تٌار فى اللمبه فتنور اللمبه ‪ ,‬عندما ٌكون الخرج ‪ low‬فان‬
‫الترانزستورسٌصل الى مرحلة ال ‪ cutoff‬وهٌكون بٌن ال ‪ emitter‬وال ‪collector‬‬
‫عبارة عن ‪ٌ High impedance‬عنً ‪Open circuit‬فال ٌصل ارضى للدائرة فال ٌمر تٌار‬
‫فى الملؾ فال تضئ اللمبة ‪.‬‬
‫اضع مع ال ‪ relay‬داٌود ‪ 1N4007‬وذلك الن الملؾ بٌخزن ‪ٌ energy‬عنى لما اعمل ‪off‬‬
‫هٌكون هناك ‪ Reverse current‬ممكن ٌحرق الترانزستور لما ٌمر فٌه لذا البد ان اجد له‬
‫مسار بدٌل هو الداٌود حٌث انه فى الوضع الطبٌعى عندما تكون الدائرة ‪ on‬فان الداٌود ٌكون‬
‫‪ 0ff‬وعندما نؽلق الدائرة ٌكون التٌار الراجع سالب فٌمر فى الداٌود وال ٌمر فى الترانزستور ‪.‬‬
‫المقاومة اللى مع الترانزستور تكون ‪1kΩ‬‬

‫‪http://www.youtube.com/watch?v=srwVRkGes2c‬‬
‫‪http://www.youtube.com/watch?v=KzxVZgO-iOA‬‬

‫‪181Page‬‬ ‫‪Technical Support 2015‬‬


182Page Technical Support 2015
‫هنبدأ نتكلم عن شوٌة مشارٌع صؽٌرة باستخدام المٌكرو سً و البروتس المشارٌع دي هتالقوها‬
‫شؽالة فً الملؾ ‪projects‬‬

‫بس قبل ما نبدء فى المشارٌع محتاجٌن نعرؾ ازاى اربط البرمجه الى انا بعملها على الكومبٌوتر‬
‫بال ‪PIC‬‬
‫عن طرٌق ال ‪PROGRAMMER‬‬
‫طرٌقة حرق البرنامج على ال ‪: PIC‬‬
‫سنضع ال ‪ PIC‬فى جهاز البرمجة كما بالشكل ‪:‬‬

‫‪183Page‬‬ ‫‪Technical Support 2015‬‬


‫ٌتم الحرق بواسطة االستعانة ببعض برامج البرمجة مثل ال ‪ WINPIC‬وهو خاص لحرق البٌك‬
‫عن طرٌق توصٌل البٌك بالكومبٌوتر بواسطة كابل ال ‪: SERIAL‬‬
‫لحرق البرنامج على ال ‪PIC‬‬
‫‪ _1‬اتاكد ان المفتاح اللى على ال ‪ kit‬لل ‪ programmer‬فى وضع ال ‪. burn mode‬‬
‫‪ _2‬اضع المٌكرو واشٌله من ال ‪ socket‬وال ‪ power‬مقفولة ‪.‬‬
‫‪ _3‬لحرق المٌكرو باستخدم برنامج ‪. winpic800‬‬
‫الزم االول احدد نوع ال ‪ programmer‬من ع البرنامج لذا من قائمة ‪ settings‬اختار‬
‫‪hardware‬‬

‫الجهاز المستخدم من النوع ‪ JDM‬لذا ‪:‬‬


‫*اختار ‪JDM programmer‬‬
‫*‪ Com1‬ثم اضؽط ‪apply‬‬

‫‪184Page‬‬ ‫‪Technical Support 2015‬‬


185Page Technical Support 2015
‫*اتاكد ان نوع ال ‪ pic 16‬من ع الجنب االٌمن اختار من قائمة ‪device‬اختار ‪hardware‬‬
‫‪test‬‬

‫* ثم من قائمة ‪ device‬اختار ‪ detect device‬عشان اتاكد ان المٌكرو واصل لو مكتوب‬


‫‪ unknown‬معنى كده المٌكرو مش واصل طب لو ادى ‪ unknown‬ممكن ٌكون احد‬
‫االحتماالت االتٌة‬

‫‪186Page‬‬ ‫‪Technical Support 2015‬‬


‫_ مش ع ال ‪ burn mode‬اعمله ‪ run‬ثم ارجعه ‪burn mode‬‬
‫_ال ‪serial‬مش داخل كوٌس‬
‫_ ممكن كابل ال ‪ serial‬باٌظ او ال ‪ kit‬باٌظه‬

‫من‬

‫قائمة ‪ file‬اختار ‪ open‬ثم اختار المشروع اللى عاوزة احرقه ع ال ‪ pic‬بامتداد ‪.hex‬‬
‫من ‪ setting‬اختار من ‪ osc‬اختار منها ‪ XT‬وتاكد ان االختٌاران ‪ WDTEN‬و ‪LVP‬‬
‫مش علٌهم صح ‪UNCHECKED‬‬

‫‪187Page‬‬ ‫‪Technical Support 2015‬‬


PROGRAM ALL ‫ثم اضؽط‬

188Page Technical Support 2015


189Page Technical Support 2015
‫دلوقتى نبدء فى المشارٌع‬

‫المشروع االول‬

‫هنوصل داٌره بسٌطه عباره عن لٌد واحد بس بالماٌكرو‬


‫المشروع عبارة عن لٌد بٌنور ثانٌة و ٌطفً ثانٌة و ٌستمر علً كده‬

‫توصٌل الدائرة ‪:‬‬

‫‪191Page‬‬ ‫‪Technical Support 2015‬‬


‫‪Explain of proteus program‬‬
‫ممكن اختبر الخرج ب ‪ led‬حٌث ان ال ‪ pin‬بٌخرج منها تٌار تقرٌبا ‪ 20mA‬فلو الخرج‬
‫‪high led is on/ low led is off‬تقرٌبا لو قرٌنا ال ‪ data sheet‬لل ‪ led‬هاجد ان ال‬
‫‪ led‬بٌقع علٌها تقرٌبا ‪ voltage drop‬قٌمته ‪ 1.2v‬لذا ٌوضع مقاومة مع اللٌد تشٌل فرق‬
‫الجهد بٌن ال ‪ 5‬فولت وال ‪ 1.2‬قٌمة هذة المقاومة ‪ ،‬أقصى تٌار خارج من ال ‪ pin 25‬ملى‬
‫امبٌر هى ‪:‬‬
‫‪R= (5-1.2)/25mA=152Ω‬‬
‫إذن فإن أقل مقاومة ٌمكن استخدامها ٌتم استهالك أقصى قٌمة للتٌار من ال ‪pin‬بحٌث ال تؤثر‬
‫على ال ‪ pin‬هً ‪ Ω152‬وٌفضل أن تكون قٌمة المقاومة أكبر من ذلك لكً ال‬
‫لذا الموجود فى السوق المقاومة‪ 220‬اوم لذا اضعها قبل اللٌد‬

‫‪191Page‬‬ ‫‪Technical Support 2015‬‬


‫اول حاجة فً البرنامج اعالن اتجاه الداتا ٌعنً هحدد كل‬
‫)‪Pin (input / ouput‬‬
‫و ده زي ما قلنا قبل كده بٌكون بامر اسمه ‪tris‬‬
‫تانً حاجة اعطً الخرج ‪ 0‬كقٌمة ابتدائٌة علشان اتأكد انه مخدش اي قٌمة عشوائٌة‬
‫بعد كده عمل ال ‪ infinite loop‬علشان البرنامج ٌفضل شؽال علً طول‬

‫‪192Page‬‬ ‫‪Technical Support 2015‬‬


‫و بعدٌن امر ‪ٌ port‬نور اللٌد و بعدٌن ٌستنً ثانٌة و بعدٌن ٌطفً اللٌد و بعدٌن ٌستنً ثانٌة و‬
‫ٌطفً اللٌد و ٌبدا بعد كده من اول ال ‪ loop‬تانً ‪..‬‬

‫ملحوظات‬

‫اوعً تنسً تقفل‬ ‫اوعً تنسً ال‬


‫االقواس‬
‫}{‬ ‫;‬

‫‪193Page‬‬ ‫‪Technical Support 2015‬‬


‫المشروع الثانى‬

‫فكرة المشروع ‪:‬‬


‫الهدؾ هو توصٌل ‪ 8‬لٌدات على ‪ portb‬اللٌدات الموصلة بالرجل ‪ B0,B1,B5,B7‬تضىء‬
‫لمدة ثانٌتٌن والباقى مطفى وبعد مرور ثانٌتٌن تضىء ‪ B2,B3,B4,B6‬والباقى ٌنطفئ وهكذا ‪.‬‬
‫البرنامج ‪:‬‬
‫نقوم بانشاء مشروع جدٌد وكتابة فٌه هذا الكود‬

‫‪194Page‬‬ ‫‪Technical Support 2015‬‬


‫توصٌل الدائرة ‪:‬‬

‫ملحوظة ‪:‬‬
‫من الممكن أن نضم االوامر الى بعضها دون الحاجة الى أن نضؽط ‪Enter‬‬
‫لكن ال ٌستحب ذلك حتى ٌكون شكل البرنامج منظم وٌسهل مراجعته وفهمه ‪.‬‬

‫‪195Page‬‬ ‫‪Technical Support 2015‬‬


196Page Technical Support 2015
‫المشروع‬
‫الثالث‬
‫فكرة المشروع ‪:‬‬
‫انارة ‪ 8‬لٌدات لمدة ثانٌتٌن وإطفاءهم ثانٌتٌن ‪.‬‬
‫البرنامج ‪:‬‬
‫نقوم بانشاء مشروع جدٌد وكتابة فٌه هذا الكود‬

‫ابتدائا كانت اللٌدات مطفٌة ثم جاء االمر بعكس حالة اللٌدات فتضىء ثم تعكس حالتها فتطفى‬
‫وهكذا‬

‫‪197Page‬‬ ‫‪Technical Support 2015‬‬


198Page Technical Support 2015
‫المشروع‬
‫الرابع‬
‫فكرة المشروع ‪:‬‬
‫برنامج ‪Flasher‬‬
‫لكن االربع لٌدات االولٌٌن ٌنوروا ثم ٌنطفؤا وٌنور االربعه اللى بعدهم ‪.‬‬
‫البرنامج ‪:‬‬
‫نقوم بانشاء مشروع جدٌد وكتابة فٌه هذا الكود‬

‫‪199Page‬‬ ‫‪Technical Support 2015‬‬


: ‫توصٌل الدائرة‬

211Page Technical Support 2015


‫المشروع‬
‫الخامس‬

‫فكرة المشروع ‪:‬‬


‫عند الضؽط علً المفتاح و ٌقفل عند عدم الضؽط ‪ B0‬الموصل علً ‪ Led‬تشؽٌل‬
‫البرنامج ‪:‬‬
‫نقوم بانشاء مشروع جدٌد وكتابة فٌه هذا الكود ‪.‬‬
‫‪ ACTIVE LOW‬فى هذا المشروع نعرؾ المفتاح على انه دخل المقتاح موصل‬

‫‪Push Button‬‬

‫بنفكركو تانـــــــــــــــــــــــــــــــــــً ‪....‬‬

‫‪Active high‬‬ ‫‪Active low‬‬


‫المفتاح لما ٌكون مضغوط بٌطلع ‪ 1‬علً المٌكرو‬ ‫المفتاح لما ٌكون مضغوط بٌطلع ‪ 0‬علً المٌكرو‬
‫و التوصٌل كالتالً‬ ‫و التوصٌل كالتالً‬

‫‪211Page‬‬ ‫‪Technical Support 2015‬‬


: ‫و ده المشروع‬

212Page Technical Support 2015


‫و لهذا تم استخدام ‪ if‬ة استخدام == للمقارنة فاذا كان الدخل = ‪ 0‬معنً كده ان المفتاح مضؽوط‬
‫فٌطلع ‪ 5‬فولت علً اللٌد و العكس بالعكس‬

‫‪213Page‬‬ ‫‪Technical Support 2015‬‬


‫المشروع‬
‫السادس‬

‫ده برنامج لما اضؽط علً ‪ Button‬االول اللٌد االول ٌنور فقط و لما اضؽط علً ال ‪Button‬‬
‫التانً اللٌد التانً بنور فقط و لما اضؽط علً ال ‪Button‬الثالث ٌنور اللٌد االول و الثانً معا ً ‪.‬‬

‫البرنامج ‪:‬‬
‫نقوم بانشاء مشروع جدٌد وكتابة فٌه هذا الكود ‪.‬‬

‫توصٌل الدائرة ‪:‬‬

‫‪214Page‬‬ ‫‪Technical Support 2015‬‬


215Page Technical Support 2015
‫المشروع السابع‬

‫فكرة المشروع ‪:‬‬


‫عاوز اعمل برنامج بٌنور لٌد واحدة اول ما اضؽط على ال ‪ Push button‬و ٌطفً اللٌد اول‬
‫ما اضؽط علً ال ‪ Bush button‬تانً !!‬

‫البرنامج ‪:‬‬
‫وانا بفكر فى البرنامج اوال هخلى ‪ PORTB‬هو الدخل و ‪ PORTC‬هو الخرج و الحالة‬
‫االبتدائٌة للٌد مطفً و لما اضؽط علً ال ‪ٌ Bush button‬ؽٌر حالة اللٌد لو شؽال ٌطفً و‬
‫العكس ‪.‬‬

‫بس فى مشكله دلوقت ان المٌكرو بٌنفذ االمر فى ‪ٌ u sec‬عنى المٌكرو هٌنفذ االمر قبل ما‬
‫الشخص ٌشٌل اٌده من ع ال ‪ push button‬فمحتاج ان المٌكرو ٌتاخر شوٌة طب الحل ممكن‬
‫ٌكون انى اعمل ‪ delay‬بس الفكرة دى مش كوٌسة النى معرفش ال ‪ user‬هٌشٌل اٌده امتى‬
‫الحل التانى انى اعمل ‪ loop‬تعمل ‪ check‬ال ‪ user‬شال اٌده وال ال اضٌؾ ع الكود‬
‫}{)‪ٌ While (RB0==0‬عنى طول ما المستخدم ضاؼط ع ال ‪ push button‬افضل ادور‬
‫فى ‪ loop‬من ؼٌر ما تعمل حاجه اول ما ٌشٌل اٌده اعكس حالة اللٌد ‪.‬‬
‫سٌصبح الكود هكذا ‪:‬‬

‫‪216Page‬‬ ‫‪Technical Support 2015‬‬


‫فى مشكلة تانٌة هتواجهنا ان اى ‪ mechanical button‬لما اضؽط علٌه فان اجزاءه‬
‫بتنضؽط بٌفضل ٌرتعش شوٌة لحد ما ٌستقر تانى وبٌعمل ‪ bounce‬المٌكرو بٌترجم ال‬
‫‪ bounce‬علً انها اكتر من ‪ press‬الزمن لل ‪ bounce‬مش بٌزٌد عن ‪ 10m sec‬انا‬
‫دلوقت عارؾ الزمن ممكن اعمل ‪ delay‬وعمر ما المستخدم هٌلحق ٌشٌل اٌده فى الزمن‬
‫الصؽٌر ده ال ‪ button‬بٌعمل ‪ bounce‬وهو بٌنضؽط وهو بٌطلع عشان كده اضع ‪delay‬‬
‫مرتٌن ‪..‬‬
‫الحظ لو شؽلت البرنامج من ؼٌر ‪ delay‬على البروتس هٌشتؽل وٌكون كوٌس الن البروتس‬
‫مش بٌعمل ‪ simulate‬لل ‪. mechanical bouncing‬‬

‫فى مشكلة اٌضا لو وضعت الداٌرة فى ‪ noisy environment‬المٌكرو بٌفسر ال ‪noise‬‬


‫على انها ‪ press‬الزم افرق ال ‪ noise‬عن ال ‪ key press‬طٌب ال ‪ noise‬بتقعد فترة‬

‫‪217Page‬‬ ‫‪Technical Support 2015‬‬


‫قلٌلة اقل من ‪ٌ 10m sec‬عنى اشوؾ بعد مرور ‪ 10m sec‬لو لو ‪ rb0==0‬اقلب حالة اللٌد‬
‫ٌعنى انا لو عدت ‪ noise‬من ؼٌر ما اضؽطت والمٌكرو فسرها على انها ‪ press‬بعد ‪ 10‬ملى‬
‫ثانٌة هٌشوؾ لو لقى ‪ٌ high‬عنى دى ‪ noise‬هٌتجاهل االمر لو لقاها ‪ low‬هٌعرؾ انها‬
‫‪ press‬و ٌنفذ االمر و ٌعكس حالة اللٌد ‪.‬‬
‫الكود النهائً بعد التعدٌل‬

‫توصٌل الدائرة ‪:‬‬

‫‪218Page‬‬ ‫‪Technical Support 2015‬‬


‫المشروع الثامن‬

‫فكرة المشروع ‪:‬‬


‫برنامج ‪ PIR‬عندما ٌدخل شخص الؽرفة ال ‪ٌ PIR‬حس وٌعطى ‪ HIGH‬فاللمبة تنور لما‬
‫الشخص ٌخرج اللمبة تطفى لو اراد الشخص الجلوس فى الظلمة ٌضؽط على ‪SWITCH‬‬
‫ٌطفى النور ولو خرج من الؽرفة ودخل النور ٌكون مطفى الن اخر حالة لل ‪ SWITCH‬انه‬
‫كان مطفى اما لو كان خارج من الؽرفة والنور مفتوح لما ٌدخل الؽرفة تانى هٌكون النور مفتوح‬
‫‪.‬‬

‫البرنامج ‪:‬‬
‫عاوز انا ‪ٌ register‬حتفظ بأخر حالة لٌه لذا هنعرفة على انه ‪unsigned char x=0‬‬
‫اى حالتة االبتدائٌة صفر‬
‫عندى ‪ 2‬دخل ال ‪ PIR sensor‬وال ‪ switch‬وعندى خرج واحد وهو اللمبة ‪.‬‬

‫‪219Page‬‬ ‫‪Technical Support 2015‬‬


‫نشوؾ هل البرنامج سلٌم وال ال لو الشخص دخل ٌعنى هٌطبق حالة ‪ IF‬الثالثة الن الشرطٌن‬
‫متوفرٌن الشخص دخل الؽرفة و ‪ x=0‬طبقا لقٌمتها االبتدائٌة فاللمبة هتنور لو خرج هٌطبق حالة‬
‫‪ else‬واللمبة تطفى لكن لو دخل اللمبه هتنور ولو داس ع المفتاح فان ‪ x‬هتعكس حالتها وتصبح‬
‫واحد وقتها شرط ‪ IF‬مش هٌتحقق الن ‪ x=1‬وبالتالى اللمبة هتنطفى لو ضؽط على ال ‪switch‬‬
‫مرة تانٌه ‪ x‬هتعكس حالتها وتصبح ‪ zero‬وبالتالى شرط ‪ if‬هٌتحقق الشخص بالؽرفة و ‪x=0‬‬
‫فاللمبة هتنور تانى طب لو خرج من الؽرفة اللمبة هتطفى لو دخلها تانى اللمبه هتنور ‪.‬‬
‫زى اخر حالة هو ساٌبها علٌها طب لو ضؽط على ال ‪ switch‬فان ‪ x‬هتعكس حالتها وتصبح‬
‫‪ x=1‬فاللمبة هتطفى لو خرج من الؽرفة وبعد كده دخلها تانى هتكون ‪ x=1‬والشخص فى‬
‫الؽرفة فاحد الشرطٌن مش متوفر فاللمبة مش هتنور وبكده حققت البرنامج اللى انا محتاجه ‪.‬‬

‫‪211Page‬‬ ‫‪Technical Support 2015‬‬


‫توصٌل الدائرة ‪:‬‬
‫عندما ٌطبق هذا البرنامج على بروتس ممكن نعمل ‪ simulate‬لل ‪ PIR‬ب ‪switch‬من‬
‫النوع ‪ٌ SW-SPDT‬عطى مرة ‪ VCC‬اذا كان الشخص دخل ومرة ‪ GROUND‬اذا‬
‫خرج الشخص ‪.‬‬

‫‪211Page‬‬ ‫‪Technical Support 2015‬‬


‫المشروع التاسع‬

‫فكرة المشروع ‪:‬‬


‫عداد ثنائى ‪ binary‬أوتوماتٌكى باستخدام اللٌدات )‪ 8‬لٌدات فقط (‬
‫العداد المكون من ‪ 8‬لٌدات ٌستطٌع العد من ‪ 255_0‬وذلك الن ‪11111111‬تكافئ ‪ 255‬بال‬
‫‪. decimal‬‬
‫البرنامج ‪:‬‬
‫نقوم بانشاء مشروع جدٌد وكتابة فٌه هذا الكود ‪.‬‬
‫العد بال ‪ٌ binary‬كون كاالتى ‪:‬‬

‫االمر ‪ٌ portb=0‬كافئ ;‪ portb=0b00000000‬واٌضا ;‪ٌ portb=1‬كافئ‬


‫;‪ portb=0b00000001‬وهكذا ‪.‬‬

‫‪212Page‬‬ ‫‪Technical Support 2015‬‬


: ‫كود البرنامج‬

213Page Technical Support 2015


: ‫توصٌل الدائرة‬

214Page Technical Support 2015


‫المشروع العاشر‬

‫فكرة المشروع ‪:‬‬


‫عند الضؽط على ال ‪ switch‬الموصل ب ‪ٌ C0‬ضئ لٌد معٌن ‪ B0‬ثم اذا ضؽطنا مرة أخرى‬
‫على نفس ال ‪ٌ switch‬ضئ هذا ال ‪ led‬والذى ٌلٌه وهكذا الى ان تضئ ال ‪ 8‬لٌدات فاذا‬
‫ضؽطنا بعد ذلك على السوتش تطفئ جمٌعا‬

‫طرٌقة التفكٌر فى البرنامج ‪:‬‬


‫طبٌعى هنستخدم جملة ‪ if‬عشان تختبر هل ضؽطت على ال ‪ switch‬أم ال لكى ٌضئ اللٌد ‪B0‬‬
‫لكن كٌؾ سٌعرؾ أنى ضؽطت على ال ‪ switch‬مرة أخرى لكى ٌضئ اللٌد التى تلٌها ‪ ,‬من‬
‫الممكن التفكٌر فى وضع جملة ‪ if‬ثانٌه بداخل االولى تختبر هل تم الضؽط على ال ‪switch‬‬
‫مرة ثانٌة أم ال وبالتالى ٌمكن كتابة الكود هكذا‪:‬‬

‫فبالتالى البٌك سٌختبر هل ضؽط على المفتاح أم ال فاذا ضؽط هٌضئ الٌد ‪ B0‬ثم ٌنتظر ثانٌة‬
‫وٌختبر هل تم الضؽط على ال ‪ SWITCH‬مرة تانٌة أم ال فاذا تم الضؽط علٌه مرة ثانٌة ٌضئ‬

‫‪215Page‬‬ ‫‪Technical Support 2015‬‬


‫اللٌد ‪ B1‬ولكن اذا لم ٌتم الضؽط ٌنتقل الى االمر الذى بعده ثم الى الذى بعدة وعندما اقوم أنا‬
‫بالضؽط على ال ‪ SWITCH‬سٌضئ لٌد ؼٌر اللى انا محتاجها ‪ ...‬طب اٌه الحل ؟؟؟؟؟‬
‫الحل انى اعمل ‪ٌ loop‬فضل ٌلؾ فٌها لحد ما اضؽط على ال ‪ switch‬مرة تانٌة‬
‫;}{)‪While (rc0_bit==1‬‬
‫ٌفضل ٌلؾ فى ال ‪ loop‬طول ما ال ‪ switch‬مش مضؽوط‬

‫وٌصبح الكود بهذا الشكل ‪:‬‬

‫‪216Page‬‬ ‫‪Technical Support 2015‬‬


217Page Technical Support 2015
218Page Technical Support 2015
‫لكن فى مشكلة ان البٌك هتفضل ماشٌة فى البرنامج هتعدى ‪ if‬االولى والتانٌة وهكذا لحد ما‬
‫اضؽط ع ال ‪ switch‬وٌبدأ ٌنفذ البرنامج فممكن ٌبدأ ٌشتؽل من عند اللٌد الثالثة طب أنا عاوز‬
‫اول لٌد هى اللى تنور أعمل اٌه ????‬

‫اضع شرط ال ‪ loop‬فى اول البرنامج بحٌث ٌفضل ٌلؾ فى لوب لحد ما اضؽط ع المفتاح وٌبدأ‬
‫ٌنور ال ‪ led‬االولى ‪.‬‬
‫لٌصبح الكود النهائى‬

‫‪219Page‬‬ ‫‪Technical Support 2015‬‬


221Page Technical Support 2015
221Page Technical Support 2015
: ‫توصٌل الدائرة‬

222Page Technical Support 2015


‫المشروع‬

‫الحادي عشر‬

‫سنقوم بعمل برنامج ٌقوم بنفس وظٌفة البرنامج السابق لكن بطرٌقة اخرى ‪.‬‬

‫‪223Page‬‬ ‫‪Technical Support 2015‬‬


‫خطوات سٌر البرنامج ‪:‬‬
‫نقوم باالعالن عن المتؽٌر ‪ x‬واعطائة قٌمة ابتدائٌة ‪ zero‬وعند كل ضؽطه على ال ‪switch‬‬
‫ٌزٌد قٌمة المتؽٌر ‪ x‬بمقدار واحد وكل قٌمة لل‪ x‬تقوم بتنفٌذ أمر معٌن فلنتابع ماذا ٌفعل البرنامج‬
‫عندما ٌضؽط المستخدم على ال ‪ switch‬تصبح ‪ x=1‬وبالتالى ٌنفذ جملة ‪ if‬الثانٌة وٌضئ اللٌد‬
‫‪ b0‬وعند الضؽط مرة ثانٌه على ال ‪ switch‬تزداد قٌمة ‪ x‬وتصبح ‪ 2‬وٌنفذ جملة ‪ if‬الثالثة‬
‫وٌضئ اللٌد ‪ b0, b1‬وهكذا الى أن تصبح ‪ x=8‬وتضئ اللٌدات جمٌعا وعند الضؽط على ال‬
‫‪ switch‬مرة أخرى تصبح ‪ x=9‬فٌقوم بجعل ‪ x=0‬وبالتالى ٌنفذ جملة ‪ if‬االولى وٌطفئ‬
‫اللٌدات جمٌعا وهكذا ‪.‬‬

‫‪224Page‬‬ ‫‪Technical Support 2015‬‬


‫المشروع‬

‫الثانً عشر‬

‫فكرة المشروع ‪:‬‬


‫الهدؾ من هذا المشروع أوال هو التعرؾ على بعض الطرق البرمجٌة والتى ستسهل علٌك‬
‫المشارٌع فٌما بعد ‪.‬‬

‫المطلوب إضاءة اللٌدات بالشكل التالى ‪:‬‬

‫ملحوظة هامه ‪:‬‬

‫‪225Page‬‬ ‫‪Technical Support 2015‬‬


‫ٌجب االعالن عن المتؽٌرات أوال أى شئ بعد دالة ‪ main‬علطول‬ ‫الكود ‪:‬‬

‫تحلٌل الكود ‪:‬‬


‫االمر ;‪ portb=0b00000001‬سٌجعل اللٌد ‪ bo‬مضئ وننتظر نصؾ ثانٌة والهدؾ من‬
‫جملة ‪ for‬هو تكرار االوامر ‪ 8‬مرات بدل من كتابة أمر االنتظار وأمر ال ‪ 8 shift‬مرات‬
‫أما االمر الهام وهو ;‪ portb=portb<<1‬سٌقوم بعمل ازاحة لل ‪ bit‬ناحٌة الٌسارفٌجعل قٌمة‬
‫‪ٌ portb‬ساوى القٌمة السابقة لل ‪ port‬مزاحة مرة الى الٌسار فمن المعلوم أن المسجل ‪portb‬‬
‫ٌتكون من ‪ 8 bit‬وتتم االزاجه بهذا الشكل‬

‫فنرى ان ال ‪ bit‬رقم ‪ 1‬سٌحل مكانه ال ‪ bit‬رقم زٌرو وٌحل مكان ال ‪ bit‬رقم زٌرو صفر من‬
‫الخارج وهكذا لٌصبح الخرج مع كل ‪ shift‬كاالتى ‪:‬‬

‫‪226Page‬‬ ‫‪Technical Support 2015‬‬


‫‪00000001‬‬
‫‪00000010‬‬
‫‪00000100‬‬
‫‪00001000‬‬
‫‪00010000‬‬
‫‪00100000‬‬
‫‪01000000‬‬
‫‪10000000‬‬
‫فالعالمة << تعبر عن ازاحة الى الٌسار والعالمة >> تعبر عن ازاحة الى الٌمٌن كأن رأس‬
‫السهم تشٌر الى اتجاه االزاحة ‪.‬‬

‫‪227Page‬‬ ‫‪Technical Support 2015‬‬


‫المشروع‬

‫الثالث عشر‬

‫فكرة المشروع ‪:‬‬


‫مفتاحٌن احدهما ٌعمل ازاحة للٌدات الى الٌسار واالخر الى الٌمٌن ‪.‬‬
‫الكود‪:‬‬
‫عند الضؽط على المفتاح ‪ٌ c0‬قوم بعمل ازاحة الى الٌسار وعند الضؽط على المفتاح ‪ٌ C1‬قوم‬
‫بعمل ازاحة الى الٌمٌن‬

‫لكن ٌوجد مشكلة فى هذا الكود فى البداٌة ٌكون ;‪ PORTB=0B00000001‬واذا قمنا‬


‫بالضؽط على المفتاح الذى ٌقوم بعمل ازاحة للٌمٌن سٌصبح ;‪PORTB=0B00000000‬‬

‫‪228Page‬‬ ‫‪Technical Support 2015‬‬


‫واٌضا اذا كان ;‪ portb=0b100000000‬وقمنا بعمل ازاحة الى الٌسار سٌصبح‬
‫;‪portb=0b00000000‬‬
‫اذا البد من وضع جملة تختبر هل ;‪ PORTB=0B00000001‬فاذا تم الضؽط على المفتاح‬
‫‪ c1‬فان ;‪portb=0b100000000‬واٌضا عندما ٌكون ;‪ portb=0b100000000‬وتم‬
‫الضؽط على المفتاح ‪ C0‬فان ;‪PORTB=0B00000001‬‬
‫سٌصبح الكود هكذا ‪.......‬‬

‫‪229Page‬‬ ‫‪Technical Support 2015‬‬


‫لكن الحل ؼٌر كافى الن ‪ portb‬فى بداٌة البرنامج ٌساوى ;‪ portb=0b00000001‬وبالتالى‬
‫تتحقق جملة ‪ if‬التى تختبر هذا الشرط وهى )‪ if (portb=0b10000000‬وداخل جملة ‪ if‬هذة‬
‫جملة ‪ if‬أخرى تختبر هل تم الضؽط على المفتاح أم ال فاذا لم ٌتم الضؽط على المفتاح تنتقل الى‬
‫االوامر التى تلى هذا االمر الن المٌكرو ٌنفذ االوامر فى ؼاٌة السرعة فبالتالى ال ٌنفذ االمر‬

‫‪231Page‬‬ ‫‪Technical Support 2015‬‬


‫المرؼوب لذا نضع شرط انه ٌفضل ٌلؾ فى لوب لحد ما اضؽط ع المفتاح وهذا االمر هو‬
‫;}{)‪ while (portb.f0==1‬لٌصبح الكود بهذا الشكل ‪:‬‬

‫‪231Page‬‬ ‫‪Technical Support 2015‬‬


‫لكن ٌوجد مشكلة بهذا البرنامج انه ;‪ portb=0b00000001‬فى بداٌة البرنامج لذا سٌذهب‬
‫لشرط ‪ if‬لو ضؽطت على المفتاح ‪ co‬مش هٌعمل حاجه لحد ما اضؽط على ‪ c1‬عندما نضؽط‬
‫على المفتاح ‪ٌ C1‬صبح ;‪ portb=0b10000000‬لو ضؽطت بعدها على ‪ c1‬مش هٌعمل‬
‫حاجه لحد ما اضؽط على ‪ c0‬لو ضؽطت على ‪ co‬هٌصبح ;‪ portb=0b00000001‬واذا‬
‫ضؽطت بعدها على ‪ c1‬وهكذا فهٌفضل اللى ٌنور اللٌد االولى واللٌد االخٌرة طب اٌه الحل‬

‫الحل ‪:‬‬
‫عندما ٌكون ;‪ portb=00000001‬ندخلة فى شرط اذا كان ;‪ portb=00000001‬افضل‬
‫لؾ فى لوب لحد ما اى مفتاح ٌتم الضؽط علٌة وذلك عن طرٌق االمر‬
‫)‪ {};while (portc.f0==1 && portc.f1==1‬وقولة اذا ضؽط على ال ‪ c1‬خلى‬
‫;‪ portb=0b10000000‬اذا ضؽطت على ‪ c0‬خلى ;‪portb=0b00000010‬‬
‫وكذلك عندما ٌكون ;‪ portb=10000000‬ندخلة فى شرط اذا كان ;‪portb=0b00000001‬‬
‫افضل لؾ فى لوب لحد ما اى مفتاح ٌتم الضؽط علٌه وقولة اذا ضؽط على المفتاح ‪ c0‬خلى‬
‫;‪ portb=0b00000001‬واذا ضؽطت على ‪ c1‬خلى ;‪ portb=0b01000000‬وبكده‬
‫تكون المشكلة اتحلت ‪.‬‬
‫الكود بعد التعدٌل‬

‫‪232Page‬‬ ‫‪Technical Support 2015‬‬


233Page Technical Support 2015
234Page Technical Support 2015
235Page Technical Support 2015
‫المشروع‬

‫الرابع عشر‬
Binary Counter with Flag

236Page Technical Support 2015


‫المشروع عباره عن ‪ COUNTER‬بس باستخدام ال‪FLAG‬‬
‫وال‪ FLAG‬بٌضمن ان ما ٌحصلش اى زٌاده فى الكونتر اال لما ٌكون ال ‪FLAG=0‬‬
‫فى البداٌه بٌكون ال‪FLAG=0‬‬
‫فلو ضؽت على ال‪ SWITCH‬هٌتحقق الشرط الى موجود وهو انى ضاؼط على ال‪SWITCH‬‬
‫وفى نفس الوقت ال ‪FLAG =0‬‬
‫فٌحصل زٌاده فى الكونتر‬
‫واول ما ارجع ال‪ SWITCH‬لحالته ال‪ٌ OFF‬رجع تانى ال‪ FLAG‬ب‪0‬‬
‫عشان ٌضمن انى لما ادوس على ال‪ SWITCH‬تانى ٌتحقق الشرط وبالتالى ٌحصل زٌاده ى‬
‫الكونتر‬
‫الوضع دا ٌضمنلى ان ماٌحصلش اى زٌاده طول مانا داٌس على ال‪ SWITCH‬وكمان ٌضمنلى‬
‫ان اقدر اشؽل ‪ 2‬سوٌتش واحد للزٌاده وواحد للنقصان من ؼٌر ما ٌعٌقو عمل بعض‬

‫‪237Page‬‬ ‫‪Technical Support 2015‬‬


‫فى هذة المحاضرة سنتعرؾ على ال ‪ PIC‬مع بعض العناصر الكهربٌة االخرى كال ‪buzzer‬‬

‫المشروع االول‬
‫فكرة المشروع‪:‬‬
‫عمل جرس لباب عند الضؽط على المفتاح نسمع صوت صفٌر ولما نشٌل اٌدنا ٌقؾ الصوت‬
‫طرٌقة التفكٌر فى المشروع ‪:‬‬
‫ٌتم اصدار الصوت بواسطة القطعة االلكترونٌة والمعروفة باسم ال ‪buzzer‬‬

‫‪238Page‬‬ ‫‪Technical Support 2015‬‬


239Page Technical Support 2015
‫قم بتوصٌل الطرؾ الموجب لل ‪ buzzer‬على رجل من رجول‬
‫الكود ‪:‬‬

‫‪241Page‬‬ ‫‪Technical Support 2015‬‬


: ‫توصٌل الدائرة‬

‫ على بروتس وٌصدر صوت ٌتم الضؽط علٌه مرتٌن وتعدٌل ال‬buzzer ‫لكى ٌعمل ال‬
operating voltage=5v
Load resistance=120

241Page Technical Support 2015


‫ولكن بعض أنواع ال ‪ٌ buzzer‬عمل ب ‪ 9v‬و ‪ 12v‬فما الحل ؟؟؟؟؟‬

‫ٌحتاج ال ‪ buzzer‬الى تٌار اكتر من ‪ 25‬ملى امبٌر لكى ٌعمل ولكن ٌخرج من ال ‪ pin‬تٌار‬
‫صؽٌر حوالى ‪ 15‬ملى أمبٌر ولكى اشؽل ‪ 9 buzzer‬فولت او ‪ 12‬فال ٌمكننى توصٌل ال‬
‫‪ buzzer‬على رجل المٌكرو مباشرة لذا اوصل على ال ‪ pin‬للمٌكرو مقاومة وترانزستور‬
‫‪ NPN‬ممكن ‪ bc547‬حٌث ٌدخل من ال ‪ base‬تٌار صؽٌر اقدراخده من المٌكرو وٌمر فى‬
‫ال ‪ collector‬تٌار أكبر ٌالئم تشؽٌل ال ‪buzzer‬‬
‫لما تكون ال ‪ٌ pin high‬مر تٌار فى الترانزستورهٌصل الترانزستور الى حالة ال‬
‫‪ saturation‬وهٌكون بٌن ال ‪ emitter‬وال ‪ collector‬عبارة عن ‪short circuit‬‬
‫فهٌوصل ارضى للدائرة فٌمر تٌار فى ال ‪ buzzer‬فٌصدر صوت صفٌر ‪ ,‬عندما ٌكون‬
‫الخرج ‪ low‬فان الترانزستورسٌصل الى مرحلة ال ‪ cutoff‬وهٌكون بٌن ال ‪ emitter‬وال‬
‫‪ collector‬عبارة عن ‪ open circuit‬فال ٌصل ارضى للدائرة فال ٌمر تٌار فى ال ‪buzzer‬‬
‫فال ٌصدر صوت ‪.‬‬

‫‪242Page‬‬ ‫‪Technical Support 2015‬‬


‫المقاومة اللى مع الترانزستور تكون ‪. 1kΩ‬‬

‫المشروع الثانى‬
‫فكرة المشروع ‪:‬‬
‫نفس فكرة المشروع السابق لكن باستخدام عناصر الكترونٌة )‪(speaker/buzzer/piezo‬‬
‫تعتمد على التردد وٌتم تشؽٌلها بواسطة موجه مربعه ‪.‬‬

‫‪243Page‬‬ ‫‪Technical Support 2015‬‬


244Page Technical Support 2015
245Page Technical Support 2015
246Page Technical Support 2015
247Page Technical Support 2015
‫وٌستخدم المكثؾ لعمل ‪ coupling‬لل ‪ DC‬لكى تدخل على السماعة موجة مربعة نقٌة ‪.‬‬
‫الحظ أنه مع تؽٌر التردد فان الصوت الصادر سٌتؽٌر فعند زٌادة التردد تزداد حدة الصوت ‪.‬‬
‫الكود ‪:‬‬

‫‪248Page‬‬ ‫‪Technical Support 2015‬‬


Tones

If (x=0; x<100; x++) {delay _ ms(x) ;}

249Page Technical Support 2015


‫لكن هذة الطرٌقة تصدر نؽمات عشوائٌة لذا الٌك بعد االكواد المجربة لبعض النؽمات ‪.‬‬

‫‪251Page‬‬ ‫‪Technical Support 2015‬‬


‫المشروع الثالث‬
‫فكرة المشروع ‪:‬‬

‫‪251Page‬‬ ‫‪Technical Support 2015‬‬


‫المشروع الرابع‬

252Page Technical Support 2015


253Page Technical Support 2015
‫ال ‪ 7 segment‬تتكون من ‪ 7‬لٌدات )من اسمها( رتبت بطرٌقه مستطٌله كما بالشكل‬

‫كل لٌد من السبعه تسمى سٌجمنت اى شرٌحه النه عندما تضاء تمثل جزء من الرقم ) ‪decimal‬‬
‫‪ (or Hex‬لٌتم عرضها وهناك لٌد تامن ٌستخدم احٌانا للسماح لالشاره العشرٌه ‪DP‬‬
‫) ‪ (decimal point‬عند استخدام اتنٌن او اكتر من ال ‪ 7 segment‬لعرض ارقام اكبر من ‪9‬‬
‫‪.‬‬
‫وده شكل بٌوضح كل لٌد ٌعبر عنها حرؾ‬

‫فمثال لو عاوزٌن رقم ‪ 8‬سٌتم اضاءه كل الحروؾ اما رقم ‪ 3‬فٌتم ا‬

‫‪254Page‬‬ ‫‪Technical Support 2015‬‬


‫ضاءه الحروؾ ‪ A,B,G,C,D‬وهكذا‬

‫ونالحظ من الشكل العلوى ان كل اطراؾ االنود متصله ببعضها وتسمى ال ‪common‬‬


‫‪. anode‬‬
‫وفى الشكل السفلى نالحظ ان الكاثود لكل لٌد متصل ببعضه وٌسمى ال ‪common cathode‬‬
‫‪.‬‬
‫وهناك نوع من ال ‪ 7 segment‬له طرفان ‪ٌ common‬مكن استخدام اى منهما وال فرق‬
‫بٌنهما ‪.‬‬
‫عشان توضح اكتر اتفرج ع ده ^_^‬
‫‪www.youtube.com/watch?v=p3NXwmNu71Y‬‬
‫‪-‬ال ‪ common cathode‬كل اطراؾ الكاثود لكل اللٌدات متصله ببعضها ع الجروند ) ‪logic‬‬
‫‪(0‬‬
‫كل سٌجمنت بتنور عند )‪ (logic 1‬او ‪ high‬من خالل ‪ current limiting resistor‬لجعل‬
‫كل انود ‪. forward biased‬‬
‫‪-‬ال ‪ common anode‬كل اطراؾ االنود لكل لٌد متصله ببعضها ب )‪(logic 1‬‬
‫كل سٌجمنت بتنور عند )‪ (logic 0‬عند ‪suitable current limiting resistor‬‬
‫عموما ال ‪ common anode‬هى االكثر استخداما‬

‫‪255Page‬‬ ‫‪Technical Support 2015‬‬


‫عند استخدامه فى الماٌكرو‬
‫مثال ع ال ‪common anode‬‬

‫نالحظ ال ‪7 segment‬علٌها ‪ logic 1‬وعند وضع ع التٌرمنال ‪logic 0‬نورت‬


‫والعكس مع ال ‪common cathode‬‬

‫‪256Page‬‬ ‫‪Technical Support 2015‬‬


‫فٌكون الكود‬
‫)(‪Void main‬‬ ‫‪or‬‬ ‫)(‪void main‬‬
‫{‬ ‫{‬
‫;‪TRISB=0‬‬ ‫;‪TRISB=0‬‬
‫;‪PORTB=~0b00110000‬‬ ‫;‪PORTB=0b11001111‬‬
‫}‬ ‫}‬

‫‪---‬‬

‫ٌجى سؤال ؟؟!‬


‫ازاى اعرؾ ان الطرؾ كذا هو الطرؾ ‪ a‬مثال فى ال ‪ 7 segment‬عملى وع بروتس ؟؟؟‬
‫عملى عن طرٌق االفو فى ال ‪ٌ common cathode‬تم وضع الطرؾ االسود من االفو‬
‫)السالب( ع الرجل اللى فى المنتصؾ من ارجل‬
‫ال ‪ 7 segment‬وهى رجل ال ‪ common‬والطرؾ االحمر )الموجب( ٌكون ع اى رجل‬
‫فتضئ لٌد معٌنه فٌكون هذه الرجل تشٌر الى الطرؾ ‪ a‬مثال والتى تعبر عنه اللٌد والمرقمه‬
‫بالصوره‬

‫‪257Page‬‬ ‫‪Technical Support 2015‬‬


‫على برناج بروتس ‪ isis‬قؾ ع الرجل المراد معرفتها بالماوس سٌتم اظهار ع شرٌط الحاله‬
‫‪ status bar‬اسم الطرؾ‬
‫كما هو موضح بالشكل‬

‫‪258Page‬‬ ‫‪Technical Support 2015‬‬


259Page Technical Support 2015
‫البرنامج ‪:‬‬
‫عبارة عن عداد تصاعدى ‪up counter‬‬

‫ممكن استخدم الطرٌقة دى اكتب كل رقم واعمل ‪ delay‬بعدة واعرض اللى بعدٌة‬

‫‪261Page‬‬ ‫‪Technical Support 2015‬‬


261Page Technical Support 2015
‫من الممكن إنشاء متؽٌر ‪ x‬قٌمته تزداد ومع كل قٌمة ٌنفذ أمر معٌن مع مالحظة أننا نعرؾ ‪ x‬فى‬
‫البداٌة على أنها تساوى صفر ‪:‬‬

‫‪262Page‬‬ ‫‪Technical Support 2015‬‬


‫وبكده وفرنا كتابة االمر ‪ 8 delay‬مرات‬

‫*** لكن هذة الطرٌقة ؼٌر عملٌة وخصوصا لو بعمل مشروع ساعة أو ‪counter‬‬
‫الطرٌقة االحسن باستخدام االمر ……… ‪switch‬‬
‫)‪(case‬‬
‫هنعمل ‪ function‬ننادى علٌها ندٌها ‪ input‬وترجعلنا ب ‪ output‬هنسمٌها ‪count‬‬
‫وهنعرؾ متؽٌر اسمه ‪ up‬له قٌمة ابتدائٌة ب ‪ zero‬وكل ثانٌة ٌزٌد بمقدار ‪ 1‬مع كل عدة ٌروح‬

‫‪263Page‬‬ ‫‪Technical Support 2015‬‬


‫لل ‪ function‬المسماة ب ‪ count‬اخد الرقم ال ‪ binary‬اللى بٌنورلى اللٌدات الموجودة فى‬
‫السجمنت والتى تكافئ هذا الرقم مثال عند ‪ up=0‬هٌروح للدالة ‪ count‬وٌرجع ب‬
‫‪0b001111110‬واللى بخرجها على ‪ portb‬فبتخلى ال ‪ segment‬تعرض رقم ‪zero‬‬
‫وهكذا‬
‫واالمر ‪ switch …..case‬هٌختبر لو عندى المتؽٌر ‪ٌ up=2‬قوم بتنفٌذ أمر معٌن لو ٌساوى‬
‫‪ 4‬هٌنفذ أمر تانى وهكذا ‪.‬‬

‫‪264Page‬‬ ‫‪Technical Support 2015‬‬


‫فى االول ‪ up=0‬هٌنادى على ال ‪ function count‬هٌروح ل ‪ count‬وهٌخلى قٌمة‬
‫‪ =up=0 num‬هٌروح ل )‪ switch (0‬فهٌختار ‪ case 0‬وٌرجع بالقٌمة المخزنة وهى‬
‫;‪ ob00111111‬وٌخرجها على ‪ portb‬فٌظهر على السجمنت رقم ‪ zero‬وبعدٌن تزٌد ‪up‬‬
‫بمقدار ‪ 1‬فتصبح ‪ up=1‬ثم ٌنتظر لمدة تانٌة وٌشوؾ هل ‪ up==10‬ال فٌروح ٌنادى على‬
‫‪ count‬وٌرجع ب ‪ case1‬فٌظهر رقم ‪ 1‬على السجمنت وهكذا ال ان تساوى ‪ up=10‬فى‬
‫الوقت دا ‪ up=0‬وٌبدأ ٌعد من جدٌد وهكذا ‪.‬‬
‫توصٌل الدائرة ع بروتس‬

‫‪265Page‬‬ ‫‪Technical Support 2015‬‬


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

‫ففى السطر االول من للكود تم إنشاء مصفوفة مكونة من عشر عناصر تمثل ما ٌقابل االرقام من‬
‫‪ 0‬الى ‪ 9‬على السٌفن سٌجمنت‪ .‬وداخل الدالة الرئٌسٌة تم إنشاء حلقة تكرار لعشر مرات بحٌث‬
‫فى اول مرة تعرض الرقم ‪ 0‬والمرة التالٌة الرقم ‪ 1‬وهكذا‪.‬‬

‫الفرق بٌن استخدام الجمل الشرطٌة والمصفوفات فى تنفٌذ البرنامج السابق‪-:‬‬

‫‪266Page‬‬ ‫‪Technical Support 2015‬‬


‫عند استخدام الجمل الشرطٌة سٌتم تخزٌنها داخل الـ'‪ 'ROM‬مما ٌعنى توفٌر فى مساحة‬
‫الـ'‪ 'RAM‬أما عند استخدام المصفوفات فسٌتم تخزٌنها داخل الـ'‪ 'RAM‬وفى الؽالب تكون مساحة‬
‫الـ'‪ 'ROM‬أكبر من مساحة الـ'‪ 'RAM‬فٌفضل استخدام الجمل الشرطٌة‪ .‬وفى التطبٌقات البسٌطة‬
‫لن ٌؤثر استخدام أى الطرٌقتٌن حٌث أنه ال ٌتم استخدام مساحة الـ'‪ 'RAM‬كاملة ولكن فى‬
‫التطبٌقات االكبر ٌجب استخدام الجمل الشرطٌة‪.‬‬

‫ٌمكن التؽلب على مشكلة مساحة الـ'‪ 'RAM‬مع المصفوفات عن طرٌق استخدام مصفوفة عبارة‬
‫عن ثوابت عن طرق اضافة كلة '‪ 'const‬قبل نوع المصفوفة فٌتم تخزٌنها داخل الـ'‪.'ROM‬‬
‫ٌمكنك مالحظة المساحة المستهلكة فى الـ'‪ 'RAM‬عند استخدام المصفوفة العادٌة وعند استخدام‬
‫مضفوفة الثوابت‪.‬‬

‫‪ -1‬المصفوفة العادٌة‬

‫‪ -2‬مصفوفة‬

‫‪267Page‬‬ ‫‪Technical Support 2015‬‬


‫البرنامج ‪:‬‬
‫عداد تنازلى ‪. down counter‬‬
‫الكود ‪:‬‬
‫النه عداد تنزلى بدأنا ‪ up‬بقٌمة ابتدائٌة ‪ 10‬وتقل بمقار ‪ 1‬كل ثانٌة وعندما تصل ‪ up‬الى قٌمة ‪0‬‬
‫فاننا نجعلها تساوى ‪ 10‬لٌبدأ العد من جدٌد الحظ انه تم تقدٌم خطوة انقاص ‪ up‬بمقدار واحد عن‬
‫خطوة ال ‪ function call‬على عكس البرنامج السابق وذلك النه اذا لم ٌتم عمل ذلك فلن‬
‫ٌعرض رقم ‪ zero‬على ال ‪ segment‬وذلك النه عند الرقم ‪ 1‬سٌظهر على السجمنت هٌقل‬
‫‪ up‬بمقار واحد فتصبح زٌرو ٌتحقق الشرط وتصبح ‪ up‬بمقدار ‪ 9‬دون ظهور ‪ zero‬على‬
‫السجمنت لذا تم تقدٌم هذة الخطوة كما هو مبٌن فى الكود ‪.‬‬

‫‪268Page‬‬ ‫‪Technical Support 2015‬‬


‫نفس توصٌل الدائرة السابقة ‪.‬‬

‫البرنامج ‪:‬‬

‫‪269Page‬‬ ‫‪Technical Support 2015‬‬


‫هو عبارة عن عداد زوجى ‪even counter‬‬

‫الكود مش هٌختلؾ عن ال ‪ up counter‬اال ان العد هٌزٌد بمقار ‪ 2‬فهستبدل االمر ‪up++‬‬


‫ب ;‪ up=up+2‬فقط‬
‫*** نال حظ فى هذة الرسمة وجود مقاومات قبل ال ‪seven segment‬‬

‫‪271Page‬‬ ‫‪Technical Support 2015‬‬


‫فكرة البرنامج ‪:‬‬
‫عمل برنامج مكون من مفتاحٌن عند الضؽط على المفتاح االول ٌقوم بالعد التصاعدى عند‬
‫الضؽط على المفتاح الثانى ٌقوم بالعد التنازلى ‪.‬‬

‫‪271Page‬‬ ‫‪Technical Support 2015‬‬


‫فنالحظ أنه تم تعرٌؾ ال ‪ call function‬فى بداٌة البرنامج قبل ال ‪ main‬وتم تعرٌؾ المتؽٌر‬
‫‪ up‬على أنه من النوع ‪ signed‬وذلك حتى ٌشمل االعداد الموجبة والسالبة للسبب الذى سنذكره‬
‫بعد قلٌل فالمتؽٌر ‪ up‬له قٌمة ابتدائٌة بصفر وعند الضؽط على المفتاح االول تزداد قٌمة ‪up‬‬
‫لتصبح واحد ثم ٌختبر ‪ up‬هل هى أكبر من ‪ 10‬أم ال فان كانت أقل من ‪ٌ 10‬ذهب لل ‪call‬‬
‫‪ function‬وٌاخذ منها القٌمة اللى هٌخرجها على رجول المٌكرو والتى تعرض الرقم الموجود‬
‫فى ‪ up‬وهكذا حتى تصٌر ‪ٌ up=10‬ختبر الشرط ٌلقٌه اتحقق ٌجعل قٌمة ‪ up=0‬وٌذهب لل‬
‫‪ call function‬وٌظهر رقم صفر على السجمنت فاذا قمنا بالضؽط بعدها على المفتاح الثانى‬
‫ٌقلل قٌمة ‪ up‬بمقدار واحد فتصبح ب ‪ -1‬فٌجد أن الشرط لو ‪ up<0‬تحقق فٌجعل قٌمة ‪up=9‬ثم‬
‫ٌذهب لل ‪ call function‬وٌعرض القٌمة ‪ 9‬على السجمنت ومن هنا عرفنا لماذا تم تعرٌؾ‬
‫المتؽٌر ‪ up‬على أنه ‪ signed‬عشان لما ٌكون عندى صفر واقلله ٌصبح ‪ 1-‬أما لو المتؽٌر كان‬
‫‪ char‬لما أقلل الصفر بمقار واحد سٌصبح الرقم ‪ٌ 255‬عنى مش أقل من الصفر فالسجمنت مش‬
‫هتعرض ‪. 9‬‬
‫توصٌل الدائرة ‪:‬‬

‫‪272Page‬‬ ‫‪Technical Support 2015‬‬


‫فكرة المشروع‪:‬‬
‫عمل برنامج ٌتكون من ‪ 4‬مفاتٌح عند الضؽط على االول ٌعد تصاعدى وعند الضؽط على التانى‬
‫ٌعد تنازلى وعند الضؽط على الثالث ٌعد االعداد الزوجٌة وعند الضؽط على الرابع ٌعد االرقام‬
‫الفردٌة ‪.‬‬
‫الكود ‪:‬‬

‫‪273Page‬‬ ‫‪Technical Support 2015‬‬


274Page Technical Support 2015
275Page Technical Support 2015
‫فى العداد الزوجى نجد أن ‪ for‬مكونة من ‪ 4‬مرات تكرار عندما تكون ‪ up=0‬فانه من المعادلة‬
‫‪ up*2‬نحصل على الرقم ‪ 0‬لٌعرض ع السجمنت وعند ‪ up=1‬نحصل على ‪ 2‬وعند ‪up=3‬‬
‫نحصل على ‪ 6‬وعند ‪ up=4‬نحصل على ‪ 8‬وكذلك فى العداد الفردى فان معادلته تكون‬
‫‪ (UP*2)+1‬عندما ‪ UP=0‬فانها تعرض ‪ 1‬وهكذا ‪.‬‬
‫توصٌل الدائرة ‪:‬‬

‫‪276Page‬‬ ‫‪Technical Support 2015‬‬


‫سؤال ؟؟!!‬
‫هل معنى ذلك أننى إذا أردت أن استخدم ال ‪ 7 segment‬ال بد من شؽل ‪ 8 pins‬من المٌكرو‬
‫لصالح ال ‪ 7 segment‬؟؟‬
‫وماذا لو كان لدى مخارج اخرى اكثر اهمٌة ومع ذلك فاننى احتاج ال ‪ 7 segment‬لعرض‬
‫ارقام معٌنة فى مشروعى‪...‬هل اضحى بال ‪ 7 segment‬على حساب المخارج االخرى أم‬
‫العكس ؟؟!!‬
‫االجابه ‪ ....‬انه ٌمكننى تشؽٌل السفن سٌجمنت على ‪ 4‬بٌنات فقط‬
‫من المٌكرو )ٌعنى نصؾ عدد البٌنات( وذلك باستخدام‬
‫‪ IC‬تسمى )‪(74LS48‬‬
‫وهى عبارة عن )‪(BCD to 7 segment Decoder‬‬

‫وهذه صورة لها‬

‫حٌث نالحظ ان لها ‪ 4‬مداخل فقط من المٌكرو ‪..‬و‪ 8‬مخارج لل‪7 segment‬‬

‫‪277Page‬‬ ‫‪Technical Support 2015‬‬


‫*** كٌفٌة عملها ‪:‬‬
‫ان كلمة ‪ BCD‬تعنى ‪ binary coded decimal‬بمعنى اننى ٌمكننى عمل تشفٌر لكل رقم‬
‫عشرى لكى ٌكون له رقم مناظر باالعداد الثنائٌة )‪.. (0,1‬‬
‫فمثالً‪ ....‬كما فى المثال نالحظ ان المتكاملة تم توصٌلها على البورت ‪ b‬فإذا قمنا بكتابة االمر‪:‬‬
‫;‪portb =3‬‬
‫فمعنى ذلك ان المٌكرو سٌقوم بترجمته الى االتى ‪:‬‬
‫;‪Portb = 0b00000011‬‬
‫وهذا ٌعنى انه تم تحوٌله الى اعداد ثنائٌة‪....‬‬
‫عندها ‪..‬تقوم ال ‪) IC‬اختصارا ٌمكن تسمٌتها ‪ (7448‬باخراج ارقام مكافئة للعدد ‪ 3‬الظهارها‬
‫على السفن سٌجمنت )ستقوم بتشؽٌل اللٌدات الداخلٌة فى ال ‪ 7 SEGMENT‬المسماة‬
‫‪(a,b,c,d,g‬‬
‫وبذلك ٌظهر لدٌنا الرقم ‪ 3‬بكل سهولة‪..‬‬

‫وهذه صورة توضح جدول التحوٌالت الخاص بال ‪(7448) IC‬‬


‫حٌث توضح كل مدخل ) ِِِ‪(A,B,C,D‬لل ‪ IC‬وما ٌكافئه من مخرج على ال ‪7 SEGMENT‬‬
‫)‪(a,b,c,d,e,f,g‬‬

‫‪278Page‬‬ ‫‪Technical Support 2015‬‬


SEVEN SEGMENT 2 ‫استخدام‬

279Page Technical Support 2015


281Page Technical Support 2015
281Page Technical Support 2015
‫طرٌقه اخرى لعمل عداد تصاعدى من ‪ 0‬الى ‪99‬‬

‫‪282Page‬‬ ‫‪Technical Support 2015‬‬


283Page Technical Support 2015
The trut table for BCD :

284Page Technical Support 2015


285Page Technical Support 2015
‫‪LCD‬‬

‫‪ ‬نبذة عن ال ‪ LCD‬و انواعها ‪.‬‬


‫‪ ‬توصٌل ال ‪ LCD‬بال ‪. PIC‬‬
‫‪ ‬اوامر ال ‪ LCD‬فً المٌكرو سً‬

‫‪286Page‬‬ ‫‪Technical Support 2015‬‬


‫نبذة عن ال ‪LCD‬‬

‫تخيم يؼٗ اٌ كم إَاع ال ‪ٔ LCD‬احذج‬ ‫يا ْٗ شاشح ال ‪ٔ LCD‬يًا تتكٌٕ ؟‬


‫اٖ اَُا ارا اسدَا استخذاو ال ‪ LCD‬فٗ ساػح‬
‫يثال‬ ‫شاشح اي ‪ ٝ٘ LCD‬ػثاسج ػٓ شاشح ذرى‪ِٓ ْٛ‬‬
‫سٕف يكٌٕ ُْاك انكثيش يٍ انثكسم تذٌٔ فائذج‬ ‫ٔماط صغ‪١‬شج ِٓ تٍ‪ٛ‬ساخ عائٍح ‪٠ٚ‬رُ اٌرذىُ ف‪ٙ١‬ا ِٓ‬
‫ْٔزا تانطثغ يشفغ انسؼش ٔانتكهفح ٔكم شٗء‬ ‫خالي اٌر‪١‬اس اٌى‪ٙ‬شت‪٘ٚ ٝ‬زا ‪٠‬ؼٕ‪ ٝ‬إٔا ‪ّ٠‬ىٓ اْ ٔرذىُ‬
‫نٓزا تقٕو انششكاخ انًصُؼّ تصُغ َقاط‬ ‫ف‪ ٝ‬وً ٔمطح ػٍ‪ ٝ‬اٌشاشح‪ٚ ..‬ف‪ ٝ‬اٌرٍفض‪ٔٛ٠‬اخ‬
‫اٌىث‪١‬شج ٘زا ‪٠‬ؼٕ‪ ٝ‬اٌرذىُ ف‪ِ ٝ‬ال‪ ٓ١٠‬إٌماط ‪.‬‬
‫ػهٗ ال ‪ LCD‬يحذدج نهغشض انًشاد ‪.‬‬
‫ففٗ انساػّ يثال تكٌٕ انُقاط ػهٗ يساحح‬ ‫‪ٚ‬تّا إٔا ٔرذىُ ف‪ ٝ‬وً ٔمطح ارْ ٘زا ‪٠‬ؼٕ‪ ٝ‬أح‬
‫االػذاد انتٗ سٕف تظٓش فقط ايا فٗ‬ ‫‪ّ٠‬ىٓ صٕغ اشىاي ‪ٚ‬أ‪ٛ‬اع ال دصش ٌ‪ٙ‬ا ‪ٚ‬وال ً ػٍ‪ٝ‬‬
‫انشاشاخ انصغيشج انتٗ َستخذيٓا فيكٌٕ‬ ‫دغة اعرخذاِٗ‬
‫انؼذد اكثش تكثيش حتٗ َستطيغ كتاتح يا َشيذ‬ ‫‪ٌٚ‬فع ‪ ٛ٘ LCD‬اخرصاس ٌجٍّح ( ‪Liquid Crystal‬‬
‫ػهيٓا ٔنكٍ انؼذد فٗ تؼط االحياٌ ال يكٌٕ‬ ‫‪ِٚ )Display‬ؼٕا٘ا تاٌؼشت‪١‬ح (ػشض اٌثٍ‪ٛ‬ساخ اٌغائٍح )‬
‫كافٗ ‪ ...‬جشب انكتاتح تحشٔف ػشتيح ػهٗ‬
‫ْزِ انشاشاخ ستجذج صؼة ٔغيش يُسق‬
‫‪ ...‬انخالصح اٌ كم االَٕاع تستخذو َفس‬
‫انًثادٖء ٔنكٍ تختهف ػهٗ حسة االغشاض‬
‫ٔاالستخذاو‬

‫انخالصح اٌ كم االَٕاع تستخذو َفس‬


‫انًثادٖء ٔنكٍ تختهف ػهٗ حسة االغشاض‬
‫ٔاالستخذاو‬

‫‪287Page‬‬ ‫‪Technical Support 2015‬‬


‫نعلم أن المواد فً الطبٌعة إما فً الحالة الصلبة أو السائلة أو الؽازٌةفالحالة الصلبة تكون فٌها‬
‫جزٌئات المادة مرتبة باتجاه محدد وفً مواقع محددة بالنسبة لبعضها البعض أي ال تتحرك‪ .‬أما‬
‫فً الحالة السائلة فإن جزٌئاتها تكون فً حالة حركة مستمرة وال ٌجمعها اتجاه ترتٌب محدد‪.‬‬
‫ولكن هناك بعض المواد تكون فً حالة وسطٌة أي بٌن السائل والصلب حٌث تحافظ جزٌئات‬
‫المادة فً هذه الحالة على اتجاه ترتٌبها كما فً جزٌئات المادة الصلبة ولكن فً نفس الوقت‬
‫تتحرك مثل جزٌئات الحالة السائلة‪ ،‬وهذا ٌعنً أن البلورات السائلة هً لٌست حالة صلبة ولٌست‬
‫حالة سائلة ولكن بٌن الحالتٌن معا ومن هنا جاءت التسمٌة بالبلورات السائلة‪.‬‬

‫لتصنٌع شاشة عرض من البلورات السائلة نستخدم لوحٌن من الزجاج المستقطب للضوء‪ ..‬وهو‬
‫عبارة عن مواد من البولٌمر تحتوي على شرائح مٌكروسكوبٌة )ال ترى بالعٌن المجردة( تؽطً‬
‫احد سطحً لوح الزجاج الذي ال ٌحتوي على شرٌحة االستقطاب‪ٌ .‬تم ضبط الشرائح‬
‫المٌكروسكوبٌة لتكون فً نفس اتجاه استقطاب الشرٌحة المثبتة على السطح المقابل‪ .‬تتم بعد ذلك‬
‫إضافة طبقة رقٌقة من البلورات السائلة ذات الطور الدوار‪ .‬تعمل طبقة الشرائح المٌكروسكوبٌة‬
‫على توجٌه البلورات السائلة لتصطؾ فً اتجاه تلك الشرائح‪ٌ .‬تم وضع الطبقة األخرى من‬
‫الزجاج ولكن مع التأكد ان شرٌحة االستقطاب عمودٌة على اتجاه استقطاب الشرٌحة األولً‪.‬‬
‫تترتب الطبقات المتعاقبة من البلورات السائلة ذات الطور الدوار الملتوي بعضها فوق بعض من‬
‫بدوران تدرٌجً ٌصل إلى ‪ 90‬درجة بالنسبة لترتٌب الطبقة األولى‬

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

‫‪.‬‬

‫‪288Page‬‬ ‫‪Technical Support 2015‬‬


‫وهذه صورة توضح كٌؾ تترتب جزٌئات الكرٌستال السائلة فى حالة تشؽٌلها و اؼالقها***‬

‫‪289Page‬‬ ‫‪Technical Support 2015‬‬


‫بعض انواع ال ‪LCD‬‬

‫‪CHARACTER‬‬
‫‪LCD‬‬

‫‪ ٝ٘ٚ‬ذى‪ ْٛ‬ػثاسج ػٓ ػذد‬


‫ِٓ اٌصف‪ٛ‬ف ‪ٚ‬اٌّشتؼاخ ‪ٚ‬وً‬
‫ِشتغ ‪٠‬طٍك ػٍ‪١‬ح‬
‫‪ٚCharacter‬وً ِشتغ ‪٠‬ىرة‬
‫ف‪١‬ح سِض ا‪ ٚ‬دشف ا‪ ٚ‬سلُ‬
‫‪ٚ‬ادذ فمظ أ‪ ٜ‬ارا وأد صف‬
‫‪ٚ‬ادذ ‪ِ 16ٚ‬شتغ ‪ّ٠‬ىٕٕا ػشض‬
‫‪ 16‬سلُ ا‪ 16 ٚ‬دشف ا‪16 ٚ‬‬
‫سِض ػٍ‪ٙ١‬ا ِشج ‪ٚ‬ادذج ‪,‬‬
‫‪ٚ‬ذماط تّمذاس اٌصف‪ٛ‬ف‬
‫‪ٚ‬اٌّشتؼاخ تذاخٍ‪ٙ‬ا ‪٘ٚ‬زٖ‬
‫ص‪ٛ‬سج ٌ‪ٙ‬ا‬

‫‪291Page‬‬ ‫‪Technical Support 2015‬‬


‫‪SEGMENT TYPE‬‬
‫‪LCD‬‬

‫‪ ٝ٘ٚ‬راخ اشىاي وث‪١‬شج‬


‫جذا ‪ٌٙٚ‬ا اشىاي ثاترح‬
‫ٌٍرذىُ ت‪ٙ‬ا ٌ‪ٙ‬زا ذصٕغ‬
‫ػٍ‪ ٝ‬دغة اٌطٍة ٌ‪١‬ظ‬
‫ٌ‪ٙ‬ا ِما‪١٠‬ظ ِذذدج تً‬
‫تاٌطٍة ‪٘ٚ‬زٖ ص‪ٛ‬سج ٌ‪ٙ‬ا‬

‫‪GRAPHICAL‬‬
‫‪LCD‬‬

‫‪ِ ٝ٘ٚ‬ثً ‪ Color LCD‬ف‪ٝ‬‬


‫اٌرشو‪١‬ة ‪ٌٚ‬ىٓ تذ‪ ْٚ‬اٌ‪ٛ‬اْ‬
‫ا‪ّ٠ ٜ‬ىٓ ػشض ا‪ ٜ‬ش‪ٝ‬ء‬
‫ػٍ‪ٙ١‬ا ‪ٌٚ‬ىٓ تذلح الً ِٓ‬
‫‪ّ٠ٚ Color LCD‬ىٓ اٌشعُ‬
‫ػٍ‪ٙ١‬ا ا‪٠‬ضا ‪ٚ‬ذماط‬
‫تاٌث‪١‬ىغً‬

‫‪291Page‬‬ ‫‪Technical Support 2015‬‬


‫‪COLOR LCD‬‬

‫‪ِ ٝ٘ٚ‬ثً اٌّ‪ٛ‬ج‪ٛ‬دج ف‪ ٝ‬اٌرٍفض‪ٔٛ٠‬اخ ‪ٚ‬اٌّ‪ٛ‬ت‪١‬الخ اٌٍّ‪ٔٛ‬ح‬


‫‪ٚ‬ذماط تاٌثىغً ‪ٚ‬ج‪ٛ‬دج االٌ‪ٛ‬اْ ‪٘ٚ‬زٖ ص‪ٛ‬سج ٌ‪ٙ‬ا‬

‫‪292Page‬‬ ‫‪Technical Support 2015‬‬


‫‪TOUCH LCD‬‬

‫‪ٔٚ‬ظشاًألْ اغٍة ِشاس‪٠‬غ اٌّثرذئ‪ ٓ١‬ذى‪ ْٛ‬تأ‪ٚ‬ي ٔ‪ٛ‬ع ‪ٛ٘ٚ‬‬


‫اي ‪ٌcharacter LCD‬زٌه عٕىرف‪ ٝ‬تششح ٘زا إٌ‪ٛ‬ع‬
‫فمظ‬

‫‪293Page‬‬ ‫‪Technical Support 2015‬‬


‫هذا النوع عبارة عن مربعات موضوعه على شكل اعمدة وصفوف وكل مربع مكون من عدد‬
‫من البكسل اما ‪ 5*8‬او ‪ 5*11‬وهذه االرقام هى عدد البكسل لمربع واحد بس وهذه الصورة‬

‫توضح هذا الكالم (‪)5*8‬‬

‫‪294Page‬‬ ‫‪Technical Support 2015‬‬


‫وتقاس بعدد هذه المربعات وهذا ما ٌقال علٌة ان الشاشة مثال ‪ 16*2‬هذا ٌعنى ان هناك صفان فى‬
‫كل صؾ ‪ 16‬مربع اى الشاشة كاملة تحتوى على ‪ 32‬مربع اى ‪ 32‬حرؾ او رمز او رقم ٌمكن‬
‫عرضهم مرة واحدة‬

‫‪295Page‬‬ ‫‪Technical Support 2015‬‬


‫ٌوجد ‪ IC‬خاصة للتعامل مع الشاشة والتحكم فٌها فقط كل ما علٌك انك هتتخاطب مع الشاشة‬
‫ببروتوكول محدد ومن خالل البروتوكول دة(( وهو ما ٌحدد الكتابة بما ٌسمى ال ‪ASCI‬‬
‫‪)) CODE‬ال ‪ IC‬الى فى الشاشة هٌعرؾ انت بعت انهى حرؾ وال انهى رمز وال انهى رقم‬
‫وهٌكتبوا على الشاشة وكل مخزن على الذاكرة الداخلٌة‪..‬‬

‫ِثال ٌ‪ ٛ‬اٌذشف“ ‪ ٛ٘” A‬ػاسف ٘‪١‬شغً ا‪ ٞ‬تىغً ‪١٘ٚ‬طف‪ٝ‬‬


‫ا‪ ٞ‬تىغً ف‪ ٝ‬اٌّشتغ‬
‫اٌ‪ ٝ‬أد اخرشذح ػٍشاْ ‪٠‬ظ‪ٙ‬شٌه اٌ‪ ٝ‬أد تؼرٗ‬
‫‪ٚ‬طثؼا اٌطش‪٠‬مح ترغ‪ ًٙ‬ػٍ‪ٕ١‬ا شغً ور‪١‬ش ‪ٚ‬شىً اٌشاشح‬
‫‪ٚ‬شىً اي ‪ IC‬اٌ‪ ٝ‬ت‪١‬م‪ َٛ‬تاٌ‪ٛ‬ظ‪١‬فح <<‬

‫الدع إٌمطح اٌغ‪ٛ‬داء اٌٍ‪ ٝ‬ػٍ‪ ٝ‬ظ‪ٙ‬ش اٌشاشح‬


‫٘‪ ٝ‬د‪ ٜ‬اي‪. IC‬‬
‫‪ٚ‬تاٌراٌ‪ٔ ٝ‬ف‪ ِٓ ُٙ‬وذج اْ اٌىراتح ػٍ‪ ٝ‬اٌشاشح د‪ِ ٜ‬ذذ‪ٚ‬دج‬
‫ٔ‪ٛ‬ػا ِا الٕٔا ٌ‪ ٛ‬ورثٕا ا‪ ٜ‬داجح غ‪١‬ش اٌّرغجً ػٍ‪ ٝ‬راوشج اي ‪IC‬‬
‫ِش ٘‪١‬ظ‪ٙ‬ش داجح الْ اٌشاشح ِرؼشفرش ػٍ‪ٚ ٗ١‬فؼال دج‬
‫صذ‪١‬خ ٌ‪ ٛ‬جثد شاشح ِٓ د‪ٚ‬ي ‪ٚ‬ورثد ػٍ‪ٙ١‬ا دشف ػشت‪ِ ٝ‬ش‬
‫٘‪١‬رؼشض ‪ٚ‬اٌشاشح ٘رخشف الْ اٌشاشح ِرؼشفش اٌشىً دج‬
‫‪ٚ‬دٌ‪ٛ‬لر‪ ٝ‬تذئ‪ٛ‬ا ‪ٕ٠‬رج‪ٛ‬ا شاشاخ ذمشا اٌذش‪ٚ‬ف اٌؼشت‪ٚ ٝ‬ذظ‪ٙ‬ش٘ا‬

‫‪296Page‬‬ ‫‪Technical Support 2015‬‬


‫كٌفٌة توصٌل ال ‪ LCD‬بال ‪PIC‬‬

‫ال ‪ LCD‬اللً هنشتغل علٌها لٌها ‪ 16 pin‬و تقسٌمهم ‪:‬‬


‫‪8 pins for the data ‬‬
‫‪3 pins for the control ‬‬
‫‪5 pins for the power ‬‬
‫‪type‬‬ ‫الوظٌـــــــــــــــــــــــــــــــــــــــفة‬ ‫‪Pin‬‬
‫‪P‬‬ ‫تؽذى الشاشة بالجهد الالزم للتشؽٌل وٌتم توصٌلها عاالرضى‬ ‫‪1‬‬
‫‪P‬‬ ‫تؽذى الشاشة بالجهد الالزم للتشؽٌل وٌتم توصٌلها عالموجب)‪ 5‬فولت (‬ ‫‪2‬‬
‫مسئولة عن التباٌن للشاشة وٌتم توصٌلها باالرضى للحصول على اعلى تباٌن ‪P‬‬ ‫‪3‬‬
‫‪C‬‬ ‫مسئولة عن تحدٌد نوع الداتا الداخلة للشاشة هل هى معلومات ٌتم عرضها‬ ‫‪4‬‬
‫)‪ (high volt‬ام اوامر ٌتم تنفٌذها)‪ٌ](low volt‬تم تحدٌد ذلك من خالل البٌك‬
‫لذلك نقوم بتوصٌلها على البٌن ‪ B4‬فى البٌك‬
‫مسئولة عن تحدٌد هل سٌتم الكتابة على الشاشة )‪ (low volt‬ام قراءة ما علٌها ‪C‬‬ ‫‪5‬‬
‫)‪ٌ) (high volt‬تم توصٌلها عاالرضى للكتابة علٌها(‬
‫‪C‬‬ ‫مسئولة عن اعطاء نبضات للشاشة من المٌكروكونترولرالدخال الداتا الٌها]‬ ‫‪6‬‬
‫ٌتم توصٌلها بالبٌن ‪ B5‬فى البٌك‬
‫‪D‬‬ ‫مسئولة عن تلقى الداتا القادمة من المٌكروكونترولر)وهم ثمان ارجل من ‪7‬‬ ‫‪7‬‬
‫الى ‪] (14‬ال ٌتم توصٌلها[‬
‫‪D‬‬ ‫ال ٌتم توصٌلها‬ ‫‪8‬‬
‫‪D‬‬ ‫ال ٌتم توصٌلها‬ ‫‪9‬‬
‫‪D‬‬ ‫ال ٌتم توصٌلها‬ ‫‪10‬‬
‫‪D‬‬ ‫ٌتم توصٌلها بالبٌن ‪ B0‬فى البٌك‬ ‫‪11‬‬
‫‪D‬‬ ‫ٌتم توصٌلها بالبٌن ‪ B1‬فى البٌك‬ ‫‪12‬‬
‫‪D‬‬ ‫ٌتم توصٌلها بالبٌن ‪ B2‬فى البٌك‬ ‫‪13‬‬
‫‪D‬‬ ‫ٌتم توصٌلها بالبٌن ‪ B3‬فى البٌك‬ ‫‪14‬‬

‫‪297Page‬‬ ‫‪Technical Support 2015‬‬


‫‪P‬‬ ‫مسئولة عن شدة االضاءة وٌتم توصٌلها بموجب الدائرة)‪ 5‬فولت(‬ ‫‪15‬‬
‫‪P‬‬ ‫مسئولة عن شدة االضاءة وٌتم توصٌلها بارضى الدائرة حٌث ان الشاشة‬ ‫‪16‬‬
‫تحتوى على لٌدات خلفٌة ٌتم تشؽٌلها عندما توصل الرجل ‪ 15‬بالموجب‬
‫وتوصل الرجل ‪ 16‬باالرضى مما ٌساعد على رؤٌة ما ٌتم كتابته على الشاشة‬
‫فى الظالم‬

‫‪298Page‬‬ ‫‪Technical Support 2015‬‬


‫ملحوظات‬

‫االسجً ‪ 7,8,9,10‬غ‪١‬ش ِ‪ٛ‬صٍ‪ٓ١‬‬


‫اٌشاشح اٌخضشاء ذ‪ٛ‬صً‬
‫الٔ‪ ٝ‬تشرغً ػٍ‪4 bit ٝ‬‬
‫ػٍط‪ٛ‬ي تاالسض‪ٌ ٝ‬ىٓ‬
‫‪ mode‬تٕمً اٌذاذا ‪ 4 bit‬ب ‪4‬‬
‫‪ٚbit‬د‪١‬ث أْ اي ‪ char‬ت‪١‬ى‪ْٛ‬‬ ‫اٌشاشاخ االخش‪ ٜ‬اد‪١‬أا‬
‫‪ 4 bit‬فث‪١‬رُ اسعاي اٌذاذا‬ ‫ذى‪ ْٛ‬غاِمح ا‪ ٚ‬فاذذٗ‬
‫ػٍ‪ِ ٝ‬شذ‪ ٓ١‬د‪ ْٚ‬اٌشؼ‪ٛ‬س‬ ‫فث‪ٛ‬صً ِما‪ِٚ‬ح ِرغ‪١‬شج‬
‫تاٌفشق الْ عشػح اٌّ‪١‬ىش‪ٚ‬‬ ‫ػٍ‪ ٝ‬اٌشجً ‪ 3‬ذى‪ ْٛ‬ف‪ٝ‬‬
‫وث‪١‬شج أِا ٌ‪ ٛ‬تشرغً ػٍ‪ ٝ‬اي‬ ‫دذ‪ٚ‬د ِٓ ‪ 5‬اٌ‪ 10 ٝ‬و‪ٍٛ١‬‬
‫‪ 8 bit mode‬تاعرخذَ اي‬
‫اضثظ ت‪ٙ١‬ا ٌ‪ ْٛ‬اٌشاشح ٌ‪ٛ‬‬
‫‪ data bus‬وٍ‪ٙ‬ا ٌزا فأٗ ف‪ٝ‬‬
‫‪ٚ‬صٍد اٌشجً ‪ 3‬ػٍ‪ٝ‬‬
‫اي ‪ 4 bit mode‬فاْ ‪pin‬‬
‫االسض‪ٚ ٝ‬واْ اٌٍ‪ٚ ْٛ‬اضخ‬
‫‪ 7,8,9,10‬ترى‪leave ْٛ‬‬
‫ِش ششط ا‪ٚ‬صً اٌّما‪ِٚ‬ح‬
‫‪ٚ open‬اي ‪pin‬‬ ‫اٌّرغ‪١‬شج ٌىٓ ال أدع ‪pin3‬‬
‫‪ 11,12,13,14‬ترى‪in ْٛ‬‬ ‫ذى‪float ْٛ‬‬
‫‪. use‬‬

‫فى الشاشات االلفا نومٌرٌكال )زى بتاعتنا ٌعنى( نقوم بتوصٌل ‪ 4‬رجول‬
‫للداتا فقط اما فى شاشات الكلر والجرافٌك ال بد من توصٌل ال‪ 8‬ارجل‪.‬‬

‫‪299Page‬‬ ‫‪Technical Support 2015‬‬


‫‪LCD in Micro C‬‬

‫‪Configuration‬‬
‫‪s‬‬
‫فً بعض االوامر اللً الزم اكتبها فً بداٌة الكود و دي هً البروتوكوالت اللً ال ‪LCD‬‬
‫بٌتبعها مع المٌكرو و االوامر دي بقدر اجٌبها من ال ‪ library‬بتاعة ال ‪ LCD‬فً المٌكرو‬
‫سً ‪.‬‬
‫االوامر دي مش بتحفظها دي بتجٌبها من المٌكرو سً عن طرٌق الخطوات التالٌة ‪:‬‬
‫‪ – 1‬هتفتح المٌكرو سً و تضغط ‪ F1‬هتظهرلك الشاشة دي‬

‫هتضؽط علً‬
‫‪Index‬‬

‫‪ – 2‬بعد ما تضغط علً ‪ Index‬هتظهرلك الشاشة دي ‪:‬‬

‫‪311Page‬‬ ‫‪Technical Support 2015‬‬


‫‪ – 3‬فً ال ‪ search‬هتكتب ‪ LCD‬و تضغط ‪ display‬هٌظهرلك كل حاجة تتعلق بٌها‬

‫‪ -4‬هتاخد االوامر دي ‪ copy‬و تحطها فً اول الكود‬

‫لو ركزت كده فً االوامر اللً فاتت هتالقً ان دي ال ‪ default connection‬معنً كده ان‬
‫انا ممكن اغٌر فً ال ‪ pins‬اللً انا عاٌز اوصل علٌها ال ‪ LCD‬و ده بٌكون علً اساس‬
‫المبرمج هو عاٌز اٌه ‪ ....‬طٌب السؤال لٌه ال ‪ default‬هو ‪ portB‬؟‬

‫‪311Page‬‬ ‫‪Technical Support 2015‬‬


‫علشان ‪ PORTB‬كله ورا بعض فبٌكون اسهل فً التوصٌل ‪.‬‬

‫اوامر التحكم فً ال ‪LCD‬‬

‫)(‪Lcd_Init‬‬
‫;‬

‫‪٘ٚ‬زا االِش ػثاسج ػٓ داٌٗ اٌرؼش‪٠‬ف ا‪ ٜ‬االِش اٌز‪٠ ٜ‬خثش اٌّ‪١‬ىش‪ٚ‬و‪ٔٛ‬رش‪ٌٚ‬ش تاْ‬
‫ٕ٘ان شاشح ع‪ٛ‬ف ذشوة ػٍ‪١‬ح ‪ٚ‬اْ ٕ٘ان تش‪ٚ‬ذ‪ٛ‬و‪ٛ‬ي ‪٠‬جة اذثاػٗ ِغ ٘زٖ‬
‫اٌشاشح ف‪ ٝ‬اٌؼًّ ‪.‬‬

‫‪Lcd_Out‬‬

‫٘زا االِش ‪٠‬خشج اٌث‪١‬أاخ ػٍ‪ ٝ‬اٌشاشح تّىاْ أد ذذذدج ‪٠‬ؼٕ‪ ٌٛ ٝ‬ػا‪٠‬ض‬
‫ذخشج وٍّح ا‪ ٚ‬ػذد ف‪ِ ٝ‬ىاْ ِذذد ِثال اٌصف اٌثأ‪ٚ ٝ‬تذا‪٠‬ح اظ‪ٙ‬اس ٘زٖ‬
‫اٌىٍّح ذى‪ ْٛ‬ف‪ ٝ‬اٌّشتغ اٌخاِظ ٘زا االِش ٘‪ِ ٛ‬ا ‪٠‬فؼً رٌه ٌه ‪.‬‬
‫‪ٚ‬ذ‪ٛ‬ضغ اٌىٍّح داخً ٘زا اٌشِض "ٕ٘ا ذضغ اٌىٍّح"(‪)double quotations‬‬
‫ِ‪ّٙ‬ا واْ دجُ اٌىٍّح ‪ٌٚ‬ىٓ ارا صادخ ػٓ ػذد ِشتؼاخ اٌشاشح فٍٓ‬
‫‪٠‬ظ‪ٙ‬ش اٌثم‪١‬ح ‪ّ٠ٚ‬ىٕه ا‪٠‬ضا وراتح وٍّح داخً ِرغ‪١‬ش ثُ وراتح اعُ اٌّرغ‪١‬ش‬
‫داخً ٘زا االِش ‪ ٛ٘ٚ‬ع‪ٛ‬ف ‪٠‬ؼشض اٌىٍّح اٌر‪ ٝ‬داخً ٘زا اٌّرغ‪١‬ش‬
‫ِثال ارا اسدٔا اظ‪ٙ‬اس وٍّح ‪ Hello‬ف‪ ٝ‬اٌصف اال‪ٚ‬ي اٌؼّ‪ٛ‬د اٌغاتغ ذى‪ْٛ‬‬
‫٘ىزا ‪:‬‬
‫;(”‪Lcd_Out)1, 7, “Hello‬‬

‫‪312Page‬‬ ‫‪Technical Support 2015‬‬


‫‪Lcd_Out_Cp‬‬

‫اٌفشق ت‪ ٓ١‬االِش دٖ ‪ ٚ‬اٌٍ‪ ٟ‬لثٍٗ أٗ االِش دٖ ت‪١‬ىرة ف‪ ٟ‬اٌّشتغ اٌٍ‪ٟ‬‬


‫اٌّؤشش ‪ٚ‬الف ػٕذٖ ‪٠‬ؼٕ‪ ٟ‬ت‪١‬ىًّ تؼذ اخش دشف وٕد ورثرٗ ‪.‬‬

‫‪Lcd_Chr‬‬

‫دٖ ِثً االِش )‪ (Lcd_Out‬تاٌضثظ ٌىٓ اٌفشق أٗ ت‪١‬ظ‪ٙ‬ش دشف ‪ٚ‬ادذ تظ ‪ٚ‬‬
‫ترىرثٗ ت‪ٓ١‬‬
‫‟‪ ٚ „Single quotation‬ترذ‪ ٍٗ٠‬سلُ اٌصف ‪ ٚ‬اٌّشتغ اٌٍ‪١٘ ٟ‬ثذا ِٕٗ ‪.‬‬

‫‪Lcd_Chr_Cp‬‬

‫دٖ ِثً االِش )‪ (Lcd_Out_Cp‬تاٌضثظ ٌىٓ اٌفشق أٗ ت‪١‬ظ‪ٙ‬ش دشف ‪ٚ‬ادذ‬
‫تظ ‪ ٚ‬ترىرثٗ ت‪ٓ١‬‬
‫‟‪ ٚ „Single quotation‬ت‪١‬ظ‪ٙ‬ش فة اٌّىاْ اٌٍ‪ ٟ‬اٌّؤشش ‪ٚ‬الف ػٕذٖ ‪.‬‬

‫‪313Page‬‬ ‫‪Technical Support 2015‬‬


‫‪Lcd_Cmd‬‬

‫٘زا االِش ٘‪ٌ ٛ‬ىراتح اشىاي ‪ٚ‬اػطاء ا‪ٚ‬اِش ٌٍشاشح تّؼٕ‪ ٝ‬أٗ ارا اسدخ ِغخ اٌشاشح ا‪ٚ‬‬
‫ذذش‪٠‬ه اٌّؤشش ا‪ ٚ‬ذذشن اٌىٍّاخ ػٍ‪ ٝ‬اٌشاشح ا‪ ٚ‬ا‪ ٚ‬ا‪ ٚ‬ا‪ ٚ‬اٌ‪ ٝ‬اخش اال‪ٚ‬اِش‪..‬‬

‫‪٘ٚ‬زٖ اٌص‪ٛ‬سج ت‪ٙ‬ا اال‪ٚ‬اِش اٌر‪ ٝ‬ذغرخذَ ٌٍشاشح ‪:‬‬

‫‪314Page‬‬ ‫‪Technical Support 2015‬‬


315Page Technical Support 2015
‫فمثالً لكتابة امر مسح الشاشة نكتب هكذا‪:‬‬
‫; )‪Lcd_Cmd(_Lcd_Clear‬‬
‫و هكذا ‪....‬‬

‫كٌف ٌتم عرض أرقام على الشاشة‪:‬‬


‫إذا أردنا عرض رقم على ال‪ ، LCD‬نقوم بتحوٌل الرقم من ‪ int‬إلى ‪ string‬أوال حٌث أن‬
‫ال‪ LCD‬ال تستطٌع عرض إال ‪ string‬فقط‬
‫وللقٌام بهذا نكتب األمر التالً‬
‫‪//1‬‬ ‫;‪int temp‬‬
‫‪//2‬‬ ‫;]‪char temp_txt[7‬‬
‫;)‪//3 inttostring(temp,temp_txt‬‬
‫‪//4‬‬ ‫;)‪lcd_out(1,1,temp_txt‬‬

‫سنقوم اآلن بشرح كل سطر من األسطر السابقة‪:‬‬


‫‪ .1‬تم تعرٌؾ متؽٌر من نوع ‪ integer‬وتم تسمٌته ‪.temp‬‬
‫‪ .2‬تم تعرٌؾ مصفوفة من الحروؾ)ألن لؽة ال ‪ C‬لٌس بها ‪ (string‬سعتها ‪ 7‬وتم تسمٌتها‬
‫‪)temp_txt‬إذا كنت ستقوم بتخزٌن ‪ int‬مثل هذه الحالة فٌجب أن ٌكون طول المصفوفة‬
‫هو‪ ،7‬ولكن إذا كنت ترٌد عرض ‪ float‬فٌجب أن ٌكون طول المصفوفة هو ‪ ،16‬وٌجب‬
‫أن ٌكون األمر التالً ‪ floattostr‬بدال من ‪.(inttostr‬‬
‫‪ .3‬تم نسخ األرقام من المتؽٌر ‪ temp‬إلى المصفوفة ‪.temp_txt‬‬
‫‪ .4‬سٌتم عرض القٌمة المخزنة فً المصفوفة ‪ temp_txt‬على ال‪ LCD‬بداٌة من السطر‬
‫األول والحرؾ األول‪.‬‬

‫‪316Page‬‬ ‫‪Technical Support 2015‬‬


‫إذا طبقنا هذا المثال سنالحظ أن الرقم حتى وإن كان صؽٌرا ‪ٌ ،‬ستؽل مساحة من ال‪ LCD‬بمقدار‬
‫‪ 7‬حروؾ)مساحة المصفوفة(‬
‫وللتؽلب على هذه المشكلة نقوم بكتابة اآلتً‪:‬‬
‫باعتبار أن الرقم المراد عرضه ٌتكون من ثالث أرقام‪ ،‬وقد تم تخزٌنه فً متؽٌر ٌسمى ‪temp‬‬

‫‪int temp, ons, tens, hun; //1‬‬


‫‪//2‬‬ ‫;‪ons=temp%10‬‬
‫;‪//3 temp=temp/10‬‬
‫;‪//4 tens=temp%10‬‬
‫‪//5‬‬ ‫;‪hun=temp/10‬‬
‫;)‪lcd_chr(1,1,hun+48‬‬ ‫‪//6‬‬
‫‪lcd_chr_cp(tens+48); //7‬‬
‫;)‪lcd_chr_cp(ons+48‬‬ ‫‪//8‬‬

‫سنقوم اآلن بشرح كل سطر من األسطر السابقة‪:‬‬


‫‪ .1‬تم تعرٌؾ ثالث متؽٌرات ‪ ons‬و ‪ tens‬و ‪ hun‬ألن الرقم المراد عرضه على الشاشة‬
‫ٌتكون من ثالث أرقام‪.‬‬
‫‪ .2‬سٌتم تخزٌن باقً قسمة الرقم ‪ temp‬على ‪ 10‬فً المتؽٌر ‪ ،ons‬وبما أن ‪ ons‬هو من‬
‫نوع ‪ ،int‬فسٌتم فً هذا السطر تخزٌن رقم األحاد من الرقم ‪ temp‬فقط فً المتؽٌر ‪ons‬‬
‫فعلى سبٌل المثال إذا كانت قٌمة المتؽٌر ‪ temp‬هً ‪ 452‬فعند قسمته على ‪ 10‬سٌكون‬
‫الناتج ‪ 45‬و باقً القسمة ‪ ،2‬وهذا هو رقم األحاد من الرقم ‪.452‬‬
‫‪ .3‬تم قسمة ال ‪ temp‬على ‪ 10‬ثم تخزٌنه فً ‪ temp‬مرة أخرى ‪ ،‬وبما أن ‪ temp‬هً من‬
‫نوع ‪ int‬فسٌتحول قٌمة ال‪ temp‬من ‪ 452‬إلى ‪.45‬‬
‫‪ .4‬كما تم فً السطر الثانً سٌتم أٌضا فً السطر الرابع‪ ،‬حٌث سٌتم تخزٌن رقم العشرات من‬
‫ال‪ temp‬فً المتؽٌر ‪.tens‬‬
‫‪ .5‬سٌتم تخزٌن رقم المئات من ال‪ temp‬فً المتؽٌر ‪.hun‬‬

‫‪317Page‬‬ ‫‪Technical Support 2015‬‬


‫‪ .6‬تم عرض قٌمة رقم المئات فً أول سطر فً الشاشة ‪ ،‬فً أول حرؾ‪.‬‬
‫وتم إضافة ‪ 48‬إلى قٌمة المئات ألن أمر‪ٌ lcd_chr‬عرض األسكً كود بتاع الرقم‬
‫المكتوب‪ ،‬واألسكً كود بتاع رقم ‪ 0‬هو ‪ ،48‬فتم إضافة ‪ 48‬إلى أي رقم سٌكون فً المئات‬
‫لٌتكون األسكً كود الصحٌح المقابل للرقم‬

‫‪ .7‬سٌتم فعل ما تم بالنسبة للمئات مع رقم العشرات‪.‬‬


‫‪ .8‬سٌتم فعل نا تم بالنسبة للمئات والعشرات مع األحاد‪.‬‬
‫وبذلك تم عرض الرقم المكون من ثالث أرقام فً ثالث خانات فقط‪ ،‬على عكس ما تم فً الطرٌقة‬
‫األولى من حجز ‪ 7‬أماكن للرقم‪.‬‬

‫‪318Page‬‬ ‫‪Technical Support 2015‬‬


‫ثالتاً‪ :‬كيف يتن تىصيل الشاشة عوليا ً وها الذي يستلزم كتابته فً البرناهج‬
‫هيكروسً لهذا التىصيل ؟‬

‫لو نظرنا جٌداً للشاشة سنجد ان لها‪16 pin‬‬

‫والحظ ان الرجل رقم ‪ 1‬على أقصى الٌسار والرجل رقم ‪ 16‬على اقصى الٌمٌن‬

‫ىذه ال‪ 16‬بين يمظًة‬


‫نالجَ‪:‬‬

‫‪ 8‬بينات‬ ‫‪ 3‬بينات‬
‫‪ 5‬بينات نم ‪power‬‬
‫نم‪data‬‬ ‫نم‪control‬‬

‫‪319Page‬‬ ‫‪Technical Support 2015‬‬


‫وسنشرح ال‪ 16‬بٌن بالتفصٌل حسب ترتٌبهم وسنضع بجانب كل بٌن حرؾ لنعرؾ هل هى‬
‫لل ‪(P) power‬او لل ‪ (D) data‬او لل ‪(C) control‬‬

‫نوعها‬ ‫وظٌفتها‬ ‫رقم‬


‫البٌن‬
‫‪P‬‬ ‫تؽذى الشاشة بالجهد الالزم للتشؽٌل وٌتم توصٌلها عاالرضى)االرضى مشترك‬ ‫‪1‬‬
‫للبٌك ولكل الملحقات من شاشة وخالفه(‬
‫‪P‬‬ ‫تؽذى الشاشة بالجهد الالزم للتشؽٌل وٌتم توصٌلها عالموجب)‪ 5‬فولت وهو موجب‬ ‫‪2‬‬
‫دائرة البٌك(‬
‫‪P‬‬ ‫مسئولة عن التباٌن* للشاشة وٌتم توصٌلها باالرضى للحصول على اعلى تباٌن‬ ‫‪3‬‬
‫)انظر معنى التباٌن باالسفل(‬
‫‪C‬‬ ‫مسئولة عن تحدٌد نوع الداتا الداخلة للشاشة هل هى معلومات ٌتم عرضها ) ‪high‬‬ ‫‪4‬‬
‫‪ (volt‬ام اوامر ٌتم تنفٌذها)‪ٌ](low volt‬تم تحدٌد ذلك من خالل البٌك لذلك نقوم‬
‫بتوصٌلها على البٌن ‪ B4‬فى البٌك‬
‫‪C‬‬ ‫مسئولة عن تحدٌد هل سٌتم الكتابة على الشاشة )‪ (low volt‬ام قراءة ما علٌها‬ ‫‪5‬‬
‫)‪ٌ) (high volt‬تم توصٌلها عاالرضى للكتابة علٌها(‬
‫‪C‬‬ ‫مسئولة عن اعطاء نبضات للشاشة من المٌكروكونترولرالدخال الداتا الٌها] ٌتم‬ ‫‪6‬‬
‫توصٌلها بالبٌن ‪ B5‬فى البٌك‬
‫‪D‬‬ ‫مسئولة عن تلقى الداتا القادمة من المٌكروكونترولر)وهم ثمان ارجل من ‪ 7‬الى‬ ‫‪7‬‬
‫‪] (14‬ال ٌتم توصٌلها[‬
‫‪D‬‬ ‫]ال ٌتم توصٌلها[‬ ‫‪8‬‬
‫‪D‬‬ ‫] ٌتم توصٌلها[‬ ‫‪9‬‬
‫‪D‬‬ ‫]ال ٌتم توصٌلها[‬ ‫‪10‬‬
‫‪D‬‬ ‫] ٌتم توصٌلها بالبٌن ‪ B0‬فى البٌك[‬ ‫‪11‬‬
‫‪D‬‬ ‫] ٌتم توصٌلها بالبٌن ‪ B1‬فى البٌك[‬ ‫‪12‬‬
‫‪D‬‬ ‫] ٌتم توصٌلها بالبٌن ‪ B2‬فى البٌك[‬ ‫‪13‬‬
‫‪D‬‬ ‫] ٌتم توصٌلها بالبٌن ‪ B3‬فى البٌك[‬ ‫‪14‬‬
‫‪P‬‬ ‫مسئولة عن شدة االضاءة وٌتم توصٌلها بموجب الدائرة)‪ 5‬فولت(‬ ‫‪15‬‬
‫‪P‬‬ ‫مسئولة عن شدة االضاءة وٌتم توصٌلها بارضى الدائرة حٌث ان الشاشة تحتوى‬ ‫‪16‬‬
‫على لٌدات خلفٌة ٌتم تشؽٌلها عندما توصل الرجل ‪ 15‬بالموجب وتوصل الرجل‬

‫‪311Page‬‬ ‫‪Technical Support 2015‬‬


‫‪ 16‬باالرضى مما ٌساعد على رؤٌة ما ٌتم كتابته على الشاشة فى الظالم‬

‫*التباٌن ‪contrast‬فً البصرٌات هو االختالؾ فً اللون أو االختالؾ فً‬


‫الظل الذي ٌجعل األشٌاء واضحة فً الصورة وٌفرقها عن بعضها ‪ .‬إذا‬
‫انخفض معدل التباٌن فً صورة صعب التفرقة بٌن األشٌاء فً الصورة ‪،‬‬
‫ونقول أن الصورة ضبابٌة أو تعترٌها ؼمامة ‪.‬‬
‫مالحظات ‪:‬‬
‫أوال ‪:‬‬
‫الشاشة الخضراء توصل علطول باالرضى لكن الشاشات االخرى احٌانا‬
‫تكون ؼامقة او فاتحه فبوصل مقاومة متؽٌرة على الرجل ‪ 3‬تكون فى‬
‫حدود من ‪ 5‬الى ‪ 10‬كٌلو اضبط بٌها لون الشاشة لو وصلت الرجل ‪3‬‬

‫‪311Page‬‬ ‫‪Technical Support 2015‬‬


‫على االرضى وكان اللون واضح مش شرط اوصل المقاومة المتؽٌرة لكن ال أدع ‪ pin3‬تكون‬
‫‪. float‬‬

‫ثانٌا ‪:‬‬
‫االرجل ‪ 7,8,9,10‬ؼٌر موصلٌن النى بشتؽل على ‪ 4 bit mode‬بنقل الداتا ‪ 4 bit‬ب ‪4‬‬
‫‪bit‬وحٌث أن ال ‪ char‬بٌكون ‪ 4 bit‬فبٌتم ارسال الداتا على مرتٌن دون الشعور بالفرق الن‬
‫سرعة المٌكرو كبٌرة أما لو بشتؽل على ال ‪ 8 bit mode‬باستخدم ال ‪ data bus‬كلها لذا‬
‫فانه فى ال ‪ 4 bit mode‬فان ‪ pin 7,8,9,10‬بتكون ‪ leave open‬وال ‪pin‬‬
‫‪ 11,12,13,14‬بتكون ‪. in use‬‬

‫فى الشاشات االلفا نومٌرٌكال )زى بتاعتنا ٌعنى( نقوم بتوصٌل ‪ 4‬رجول‬ ‫يهحٌظة‬
‫للداتا فقط اما فى شاشات الكلر والجرافٌك ال بد من توصٌل ال‪ 8‬ارجل‪.‬‬
‫يهحٌظة ‪:‬‬

‫التوصٌالت عالبٌك المذكورة فى الجدول بنا ًء على اوامر جاهزة ٌتم‬


‫كتابتها من مكتبةبرنامج المٌكروسى وفى حالة الرؼبة فى تؽٌٌر هذه االماكن ٌتم تؽٌٌرها‬
‫تباعا ً فى الكود بالمكان الجدٌد بمعنى‬

‫ان هذه االوامر ثابتة وما ٌتؽٌر فٌها هو االرجل التى سوؾ تربط بها البك بالشاشة وهى‬

‫;‪sbit LCD_RS at RB4_bit‬‬


‫;‪sbit LCD_EN at RB5_bit‬‬
‫;‪sbit LCD_D7 at RB3_bit‬‬
‫;‪sbit LCD_D6 at RB2_bit‬‬
‫;‪sbit LCD_D5 at RB1_bit‬‬
‫;‪sbit LCD_D4 at RB0_bit‬‬

‫‪312Page‬‬ ‫‪Technical Support 2015‬‬


‫;‪sbit LCD_RS_Direction at TRISB4_bit‬‬
‫;‪sbit LCD_EN_Direction at TRISB5_bit‬‬
‫;‪sbit LCD_D7_Direction at TRISB3_bit‬‬
‫;‪sbit LCD_D6_Direction at TRISB2_bit‬‬
‫;‪sbit LCD_D5_Direction at TRISB1_bit‬‬
‫;‪sbit LCD_D4_Direction at TRISB0_bit‬‬

‫هنا ستجد ان كل طرؾ من الشاشة مكتوب بجواره اسم الرجل التى سوؾ ٌربط معها من المٌكرو‬
‫مثال‬

‫‪LCD_RS at RB4_bit‬‬
‫هنا طرؾ الشاشة وهو ‪LCD_RS‬سوؾ ٌربط مع الطرؾ ‪RB4‬اى الطرؾ رقم ‪ 4‬فى‬
‫البورت ‪B‬فى المٌكرو وهكذا واذا اردت مثال تؽٌر مكان تركٌب االطراؾ فؽٌر فى الجزء‬
‫الخاص بالبورت مثال مكان ‪ٌRB4‬كون ‪RA4‬وهكذا وهذه االوامر ٌجب كتابتها فى بداٌة الكود‬
‫اى قبل ال‬

‫)(‪void main‬‬
‫وداخله‪.‬‬
‫اسم ال ‪ lcd‬على البروتس هو ‪LM016L display‬‬

‫‪313Page‬‬ ‫‪Technical Support 2015‬‬


‫برنامج الظهار رسالة على الشاشة‬

‫‪314Page‬‬ ‫‪Technical Support 2015‬‬


‫برنامج الظهار رسالة متحركة ع الشاشة‬

‫الفكرة انى بعرؾ متؽٌر ‪ i‬بدخلة فى ‪ for loop‬الن عرض السطر ‪ 16‬حرؾ فى الشاشة بجعل‬
‫هذا المتؽٌر هو رقم المربع اللى المفروض الكلمة ت‬

‫بدأ تتعرض من عنده وكل ما ٌزٌد المتؽٌر ده الكلمة تنتقل من المربع للمربع الذى ٌلٌه وبكده‬
‫تظهر الكلمة كأنها تتحرك على الشاشة ‪.‬‬
‫الحظ بعرض الكلمة لمدة نصؾ ثانٌة لكن لماذا وضعنا أمر مسح الشاشة بعد كل عدة وذلك النها‬
‫سٌعرض كلمة ‪ computer‬حرؾ ال ‪ c‬هٌكون فى المربع االول من الشاشة ثم تزداد ‪ i‬بمقدار‬
‫‪ 1‬فسٌعرض كلمة ‪ computer‬ولكن من اول المربع الثانى فٌظهر من كلمة ‪computer‬‬
‫االولى والتى كانت عند ‪ i=1‬حرؾ ال ‪ c‬وتعرض كلمة ‪ computer‬الثانٌة والتى كانت عند‬
‫‪ i=2‬وال ٌظهر منها اٌضا ؼٌر حرؾ ال ‪ c‬عند عرض كلمة ‪ computer‬والتى تكون عند ‪i=3‬‬
‫وهكذا فٌظهر ع الشاشة ‪ ccccccccomputer‬لهذا نضع أمر مسح الشاشة ‪.‬‬

‫‪315Page‬‬ ‫‪Technical Support 2015‬‬


‫ال ‪ lcd‬مش بتعرض أرقام مباشرة ولكنها خاصة بال ‪ char‬وال ‪ string‬لذا بعلن عن متؽٌر‬
‫‪ char‬ممكن ٌكون ‪ 16‬حرؾ عن طرٌق االمر ]‪char txt [16‬‬
‫; وعندى متؽٌر ‪ i‬من النوع ‪ int‬لذا احوله الى ‪ string‬عن طرٌق االمر ;)‪IntToStr(i, txt‬‬
‫وبعد كده اعرض ال ‪ string‬وهذا مثال بسٌط ‪.‬‬

‫فكرة البرنامج ‪:‬‬


‫عرض أرقام من ‪ 0‬الى ‪ 8‬على الشاشة‬

‫‪316Page‬‬ ‫‪Technical Support 2015‬‬


‫من المعلوم ان الدالة ‪ lcd_out_cp‬تظهر الرقم بعد عالمة = مباشرة لكن المشكلة فى االمر‬
‫‪ inttostr‬أنه ٌؽٌر شكل الداتا وٌخلى الرقم ٌظهر على مسافة من = كما هو موضح بالشكل ‪.‬‬

‫‪317Page‬‬ ‫‪Technical Support 2015‬‬


‫عمل عداد تصاعدى وعداد تنازى باستخدام السوتشات‬
‫فكر؟؟‬
‫‪CGI Custom Character‬‬

‫هل ٌممكنا كتابه او رسم اى شئ على شاشه ال‪ LCD‬بخالف االرقام والحروف المعروفه لنا‬
‫نعم نستطٌع فعل ذلك عبر‪Custom Character‬‬
‫وهى خاصٌه موجوده داخل المٌكرو سى تسطٌع من خاللها كتابه او رسم اى شئ على شاشه‬
‫ال‪LCD‬‬

‫‪318Page‬‬ ‫‪Technical Support 2015‬‬


319Page Technical Support 2015
321Page Technical Support 2015
321Page Technical Support 2015
322Page Technical Support 2015
323Page Technical Support 2015
‫وهكذا ٌمنك التعامل مع اى شكل عبر رسمه‬

‫‪324Page‬‬ ‫‪Technical Support 2015‬‬


325Page Technical Support 2015
326Page Technical Support 2015
‫اتفرج ع الفٌدٌو ده ‪:D‬‬
‫‪http://www.youtube.com/watch?v=blzWCEwFIKU‬‬
‫الكى باد هى مجموعه من الزراٌر مترتبه فى بلوك او ‪ PAD‬بندخل من خاللها االرقام وممكن‬
‫فى بعض االحٌان رموز او جمله من الحروؾ االبجدٌه‬
‫اذا كانت تحتوى ع ارقام فقط فتسمى ‪numeric keypad‬‬
‫سنستخدم ‪4 X 4 matrix keypad.‬‬
‫تعاملها مع البٌك ‪:‬‬

‫‪327Page‬‬ ‫‪Technical Support 2015‬‬


328Page Technical Support 2015
‫الصوره اللى فوق دى بتبٌن ازااى اوصل ال ‪ keypad‬مع ال ‪ microcontroller‬على ‪2‬‬
‫‪ports‬‬
‫تتصل الصفوؾ بال ‪ output port‬واالعمده بال ‪input port‬‬
‫عشان ٌحس الماٌكرو بضؽطه ع زر من ازرار الكى باد بٌكون الخرج اللى هٌتقرا ب ‪ 0‬لو‬
‫هٌقرا من عمود ‪ D3-D0=1111‬لن ٌتم قراءه اى شئ فى حٌن انه اذا تم قراءه ‪ 0‬فى بت فى‬
‫العمود سٌتم قراءه زر مثل ‪ٌ D3-D0=1101‬تم رصد ان عمود ‪ D1‬تم الضؽط علٌه ‪.‬‬
‫اول ما ٌتم الضؽط ع الزرار ٌذهب الماٌكرو لٌتحقق اى زرار تم الضؽط علٌه ٌبدا من اول صؾ‬
‫ٌضع علٌهم ‪ 0‬وٌقرا االعمده اذا كانت القراءات كلها ‪ٌ 1‬بقى مفٌش اى زرار فى الصؾ ده تم‬
‫الضؽط علٌه وبعدٌن ٌنتقل للصؾ التانى ٌحط ‪ٌ , 0‬قرا االعمده ‪ٌ ,‬دور ع اى ‪ 0‬وهكذا لحد ما ٌتم‬
‫رصد الزرار اللى تم الضؽط علٌه ‪.‬‬
‫فى حاله ال ‪ 4 X 4 matrix keypad.‬اربع صفوؾ واربع اعمده ‪ 16 ,‬سوٌتش متصلٌن ع‬
‫‪ 8‬خطوط‬
‫‪Pin Assignment with PIC16F877A‬‬

‫‪329Page‬‬ ‫‪Technical Support 2015‬‬


‫تعال دلوقت نجرب المٌكرو سى‬

‫‪331Page‬‬ ‫‪Technical Support 2015‬‬


‫اول حاجه المفروض بعرؾ البورت اللى حوصل علٌه الكى باد واللى هو هنا ‪PORT D‬‬
‫بعدٌن )(‪ KEYPAD_INIT‬بهٌا الفانكشن والعملٌه بعدٌن )(‪KEYPAD_KEY_CLICK‬‬
‫دى الداله الى بترجع قٌمه الزرار اللى حٌتم الضؽط علٌه ولو مضؽطش ع حاجه بترجع ‪0‬‬
‫لما اجى استخدم الكود اللى فات ده حالقى حاجه ؼرٌبه انى لما اضؽط ع رقم ‪ 7‬حٌظهرلى انى‬
‫ضؽطت ع الزرار االول‬

‫‪331Page‬‬ ‫‪Technical Support 2015‬‬


‫طب ازااى ؟!!!‬
‫الن االرقام دى مجرد ارقام مطبوعه على الكى باد اما الترقٌم الحقٌقى فهو ترقٌم التوصٌل بتااعه‬
‫السوٌتشاات‬

‫‪332Page‬‬ ‫‪Technical Support 2015‬‬


‫طٌب لو انا عاوزه اخلى ٌطبعلى الرقم المكتوب فعالا مش رقم الترتٌب ٌعنى لما ادوس ع ‪7‬‬
‫ٌظهرلى ‪7‬‬
‫حضطر هنا استخدم ال ‪ARRAY‬‬

‫وساعتها لما حضؽط ع ‪ 7‬حٌظهرلى ‪  7‬‬

‫‪333Page‬‬ ‫‪Technical Support 2015‬‬


334Page Technical Support 2015
‫المشروع االول‬
‫فكرة المشروع ‪:‬‬
‫ربط الكٌباد مع المٌكرو مع ال ‪lcd‬‬

‫‪335Page‬‬ ‫‪Technical Support 2015‬‬


‫شرح الكود ‪:‬‬
‫فى البداٌة قمت بتعرٌؾ الشاشة وقمت بتعرٌؾ أمر ربط أطراؾ الكٌباد بال ‪portd‬‬
‫‪char keypadPort at PORTD‬‬

‫قمت بتعرٌؾ متؽٌر ‪ kp‬لكى أحفظ فٌه قٌمة الزر الذى ٌتم الضؽط علٌه ثم ٌبدأ البرنامج فنقوم‬
‫داخل ‪ main‬بعمل االتى ‪:‬‬
‫نقوم بعمل ‪ initialization‬للكٌباد ولل ‪ lcd‬ثم نعرض على الشاشة كلمة ‪ pressed‬وهنا نبدأ‬
‫فى البرنامج الرئٌسى ‪.‬‬

‫كود ‪:‬‬
‫{)‪while(1‬‬
‫;‪kp=0‬‬
‫};)(‪while(!kp){kp = Keypad_Key_Click‬‬

‫قمنا بعمل ‪ infinite loop‬وقمنا بتعرٌؾ متؽٌر ‪ kp‬وأعطٌناه قٌمة ‪0‬‬


‫ثم قلت له طالما المتؽٌر ‪ kp=0‬ال تفعل شئ سوى أن تختبر أطراؾ الكٌباد‬
‫هل تم الضؽط على زر أم ال فأن تم الضؽط على زر من أزرار الكٌباد فسوؾ‬
‫تصبح قٌمة ‪ kp‬التساوى ‪ 0‬وبالتالى ٌتحقق شرط ‪ while‬وتصبح قٌمة المتؽٌر ‪ kp‬قٌمة تتراوح‬
‫من ‪ 1‬الى ‪ 16‬وهذا الرقم ٌعبر عن الزر الذى تم الضؽط علٌه ‪.‬‬
‫ٌقوم االمر‪:‬‬
‫)(‪kp = Keypad_Key_Click‬‬

‫بقراءة قٌمة الزر الذى تم الضؽط علٌه باالسكى كود فاذا تم الضؽط على الزر ‪ 1‬فان قٌمة‬
‫‪ kp=49‬الن ‪ٌ 1‬كافئ باالسكى كود ‪ 49‬وفى هذة الحالة ٌذهب ل ‪ case1‬الن ال ‪ kp‬فٌها‬
‫قٌمتها ب ‪ 49‬ثم ٌعمل ‪ break‬وٌخرج بره ال ‪ loop‬وٌعرض قٌمة ال ‪ kp‬على ال ‪ lcd‬عن‬

‫‪336Page‬‬ ‫‪Technical Support 2015‬‬


‫طرٌق االمر ;)‪lcd _char (1,7,kp‬وٌقوم بعرض الرقم ‪ KP‬باالسكى كود زى ما هو الن‬
‫الشاشة بتفهم اسكى كود فهتفهم الرقم ‪ 49‬على أنه ‪ 1‬وتعرض ع الشاشة ‪. 1‬‬
‫هذا هو جدول ال ‪ ascii code‬الموجود فى المٌكرو سى ‪:‬‬

‫والذى من خاللة ٌتم تحدٌد قٌمة المتؽٌر ‪ kp‬والذى ٌكافئ قٌمة السوتش الذى قمت بالضؽط علٌه ‪.‬‬

‫‪337Page‬‬ ‫‪Technical Support 2015‬‬


: ‫توصٌل الدائرة‬

338Page Technical Support 2015


‫المشروع الثانى‬
‫فكرة المشروع ‪:‬‬

‫الكود ‪:‬‬

‫‪339Page‬‬ ‫‪Technical Support 2015‬‬


341Page Technical Support 2015
341Page Technical Support 2015
342Page Technical Support 2015
‫سنجد أن الكود نفس الكود الخاص بالمشروع السابق لكن ٌزٌد بعض االوامر لعرض عدد مرات‬
‫الضؽط ع السوتش الخاص بالرقم نجد أنه فى بداٌة البرنامج ٌظهر رسالة ثابته ع الشاشة عن‬
‫طرٌق االمرٌن ‪:‬‬

‫نقوم بتعرٌؾ المتؽٌران ‪ oldstate‬و ‪cnt‬‬

‫اذا تم الضؽط على زر رقم ‪ 1‬فان قٌمة ‪ kp=49‬فهحتاج متؽٌر اسمه ‪ old state‬لتخزٌن القٌمة‬
‫القدٌمة لل ‪ kp‬فاذا كانت أول مرة اضؽطت على الزر ‪ 1‬فان الشرط‬

‫ٌتحقق الن ‪ kp ≠0‬ووقتها هٌجعل ‪ cnt=1‬النى لم اضؽط على الزر واحد سوى مرة وسٌتم‬
‫عرض قٌمة ‪ cnt‬على الشاشة من خالل االمر‬

‫وٌتم تخزٌن قٌمة ‪ kp‬فى ال ‪ old state‬عن طرٌق االمر‬

‫فاذا تم الضؽط مرة أخرى على الزر ‪ 1‬فان قٌمة ‪ kp=old state‬ووقتها ال ٌتحقق الشرط االول‬
‫وٌتحقق شرط ‪else‬‬

‫‪343Page‬‬ ‫‪Technical Support 2015‬‬


‫وتزداد قٌمة ‪ cnt‬وتصبح ب ‪ 2‬وتعرض على الشاشة وهكذا ‪......‬‬
‫فاذا قمت بالضؽط على زر ‪ 2‬فان ‪ kp≠ old state‬وبالتالى شرط ‪ٌ if‬تحقق وٌعرض ع الشاشة‬
‫انى ضؽطت ع السوتش مرة واحدة وبذلك أكون تمكنت من معرفة عدد المرات التى قمت‬
‫بالضؽط على السوتش فٌها وتمكنت من عرضها ع الشاشة أٌضا ‪.‬‬
‫وٌتم اضافة هذة االوامر فى الكود ان لو ضؽطت ع السوتش بحٌث اصبح عدد مرات ‪cnt=255‬‬
‫كده هٌحصل ‪ over flow‬النى معرفها على انها ‪ unsigned‬وقتها هقولة اجعل قٌمة ‪cnt=0‬‬
‫وٌظهر عدد مرات الضؽط ‪ 0‬وبكده اقدر اعد عدد مرات الضؽط على السوتش من أول وجدٌد ‪.‬‬

‫نفس توصٌل الدائرة السابقة ‪.......‬‬

‫‪344Page‬‬ ‫‪Technical Support 2015‬‬


‫ال حظ هذا النوع من ال ‪: keypad‬‬

‫نجد أن رقم ‪ٌ 1‬كافئ ‪ 7‬و ‪ 7‬تكافئ ‪ 1‬الن الترتٌب معكوس عن الكٌباد السابقة ‪.‬‬
‫لذا فان هذة هى ال ‪ cases‬الخاصة بها ‪.‬‬
‫الحظ اذا قمنا بعدم توصٌل ‪ 4 line‬و ‪ line D‬فان عند الضؽط على )‪ (+/_/÷/×/=/0/on‬ال‬
‫ٌظهر على الشاشة شئ ‪ ).‬راجع الكود الموجود فى المشارٌع المرفقة مع ملؾ الشرح (‬

‫‪345Page‬‬ ‫‪Technical Support 2015‬‬


346Page Technical Support 2015
347Page Technical Support 2015
‫هو ابسط انواع الموتور‬
‫ببساطه ٌمتلك سلكٌن اذا قمت بتوصٌل بطارٌه بٌن السلكٌن فانه سٌدور مع عقارب الساعه‬
‫واذا قمت بعكس البطارٌه فانه سٌدور عكس عقارب الساعه‬
‫وذا قمت بزٌاده فولت البطارٌه فانه سٌزٌد من سرعه الموتور واذا قمت بتقلٌل من قٌمه فولت‬
‫البطارٌه فانه سٌٌقلل من سرعه الموتور‬
‫وهذا هو التحكم فى ال ‪ DC MOTOR‬فى ابسط صوره‬

‫‪348Page‬‬ ‫‪Technical Support 2015‬‬


‫لكن هل ٌمكن ان نتحكم فى حركه الدى سى موتور باستخدام الماٌكروكنترولر !؟‬

‫)‪If RB0_bit=1 (5 volts‬‬

‫الموترو مفروض ٌدور النه واخد ال‪ 5‬فولت الخرج‬

‫لكن فى الحقٌقه هذه التوصٌل فٌه عده مشاكل ‪:‬‬


‫‪ -1‬ان المٌكروكنتولر ال ٌستطٌع ان ٌتحمل اكثر من ‪ 25‬مٌلى امبٌر‬
‫والموتور ٌسحب تٌار اكبر من ذلك بكثٌر‬
‫‪-2‬ان المٌكروكنتولر الٌخرج جهد اكثر من ‪ 5‬فولت‬
‫واؼلب المواتٌر ال تعمل على ‪ 5‬فولت‬
‫بل تعمل على )‪(...,12,24‬‬
‫لذللك ال ٌمككنا ان نستخدم هذا التصمٌم‬
‫وسنقوم بالتعدٌل علٌه باضافه الرٌالى‬

‫‪349Page‬‬ ‫‪Technical Support 2015‬‬


‫االكثر استخداما وتدوال هو الرٌالى‬
5 PINS
Pin 1 is the first coli pin (C1).
Pin 2 is the second coli pin (C2).
Pin 3 is the normally open pin (NO).
Pin 4 is the normally closed pin (NC).
Pin 5 is the common pin (CO).

351Page Technical Support 2015


‫والرٌالى عباره عن مفتاح كهرومؽناطٌسى ٌتم التحكم فٌه من خالل التٌار المتدفق بٌن رجلى‬
‫الملؾ الموجود فٌه‬
‫عندما ٌمر تٌار داخل الملؾ فان الملؾ ٌولد مجال كهروؼناطٌسى‬
‫هذا المجال ٌقوم بحسب الرٌشه الموصله على ال‪normally closed‬‬
‫الى الطرؾ االخر وهو ‪normally open‬‬
‫وعند انقطاع التٌار ٌنقطع المجال الكهرومؽناطٌسى فتعود الرٌشه مره اخرى‬
‫وبذلك استطٌع ان استخدم الرٌالى كمفتاح للفصل بٌن الموتور وبٌن المٌكروكنترولر‬
‫وٌصبح التصمٌم هكذا‬

‫لكن ال زال ٌوجد عده مشاكل ‪:‬‬


‫‪ -1‬ان مقاومه الملؾ فى الرٌالى الموصل بالمٌكرو حوالى ‪ 100‬اوم‬
‫وبالتالى هذه المقاومه ستسحب تٌار قٌمته حوالى ‪ 50‬مٌللى امبٌر‬
‫وهى قٌمه اكبر من التٌار الذى ٌتحمله الماٌكرو)‪ 25‬مٌللى امبٌر(‬

‫‪-2‬ان بعض انواع الرٌالى ال تعمل على ‪ 5‬فولت بل تعمل على )‪(...24,12‬‬
‫وهكذا تصبح ؼٌر مناسبه للماٌكرو‬

‫‪351Page‬‬ ‫‪Technical Support 2015‬‬


‫لذا سنقوم باضافه جزء جدٌد وهو الترانسٌستور ‪:‬‬

‫الترانسٌستور ٌعمل هنا كمفتاح كهربى‬


‫)‪(OPEN Circuit or Short circuit‬‬
‫اذا دخل الى الترانسٌستور ‪ 5‬فولت من الماٌكروكنتولر‬
‫فانه سٌكون فى حاله ال‪saturation mode‬‬
‫وبالتالى سٌصبح ‪Short circuit‬‬
‫اما اذا كان الخرج ‪ 0‬فولت من الماٌكرو الى الترانسٌستور‬
‫فان التراسٌستور سٌكون فى حاله ‪CUTOFF MODE‬‬
‫وبالتالى سٌصبح ‪OPEN Circuit‬‬
‫وبهذه الطرٌقه نستطٌع ان نستخدم التراسٌستور للتحكم فى الرٌالى‬
‫فاذا كان الترانسٌتسور فى حاله الـ ‪SHORT circuit‬‬

‫سٌكون طرؾ الكوٌل موصل بٌن ال‪ 12+‬فولت واالرضى‬


‫وبالتالى سٌمر تٌار فى الملؾ هذا التٌار سؤدى الى تولٌد مجال كهرومؽناطٌسى ٌؤدى الى سحب‬
‫رٌشه الرٌالى وبالتالى ٌسعمل الموتور‬

‫‪352Page‬‬ ‫‪Technical Support 2015‬‬


‫واذا كان الترانسٌستور فى حاله ‪open circuit‬‬
‫فان الطرؾ الموصل ب‪ 12+‬فى الملؾ لن ٌوصل باالرضى وبالتالى لن ٌمر تٌار فى الملؾ ولن‬
‫ٌعمل الموتور‬

‫‪353Page‬‬ ‫‪Technical Support 2015‬‬


‫ملحوظه‬

‫ٌتم اضافه داٌود فى وضع عكسى مع الملؾ لتجنب التٌارات المستحثه العكسٌه المتولده من‬
‫الملؾ‬
‫النه فى حاله انقطاع الجهد الذى ٌؽذى الملؾ وبالتالى انقطاع التٌار فان الملؾ ٌحاول ان ٌقاوم‬
‫هذا التؽٌر بتٌار مستحث فى االتجاه المعاكس هذا التٌار اذا مر فى الترانسٌستور فانه سٌحرقه لذا‬
‫ٌتم وضع داٌود فى وضع عكسى لمنع مرور هذا التٌار‬

‫ما هى كمٌه التٌار االن المسحوبه من المٌكروكنتولر وكٌؾ اتاكد انها اقل من ‪ 25‬مٌللى امبٌر‬
‫حتى ال ٌتم حرق الماٌكروكنتولر‬
‫عندما ٌكون الترانسٌستور ‪short circuit‬‬

‫فان الداٌره المكافئه له والموصله بالمٌكرو ستكون كالتالى‬

‫‪354Page‬‬ ‫‪Technical Support 2015‬‬


‫والبطارٌه هى عباره عن الداٌود فى حاله‬
‫‪forward=0.70‬‬
‫سٌكون التٌار كاتالى‬
‫‪I = V/R = (5-0.7)/(1000) = 4.3/1000 = 4.3 mA‬‬
‫وهو اقل من ‪ 25‬مٌللى امبٌر‬

‫وهذه هى التوصٌله النهائٌه للموتور مع الماٌكرو‬

‫‪355Page‬‬ ‫‪Technical Support 2015‬‬


‫وٌتم التحكم فً حركه الموتور فقط عن طرٌق اخراج ‪ 5‬فولت من الـ‬
‫‪pin‬‬
‫الموصله مع الترانسٌستور‬

‫‪356Page‬‬ ‫‪Technical Support 2015‬‬


‫فى الحاله السابقه تعملنا كٌؾ ٌتم التحكم فى الموتور باستخدام الرٌالى والترانسٌستور فى اتجاه‬
‫واحد فقط‬
‫االن سنتعلم كٌؾ ٌمكن التحكم فى الموتور فى االتجاهٌن‬
‫سنستخدم نفس الدائره السابقه ولكن عن طرٌق ‪ 2‬رٌالى و‪ 2‬ترانسٌستور‬
‫ووضع مفاتٌح للتحكم‬

‫‪357Page‬‬ ‫‪Technical Support 2015‬‬


358Page Technical Support 2015
‫طرٌقه اخرى للتحكم فى الموتور عن طرٌق المٌكروكنترولر‪:‬‬
‫وهو التحكم فى الموتور من خالل ‪ IC‬جاهز‬
‫وسنقوم بشرح ‪IC L293D‬‬

‫ما عملها‬

‫ال ‪l293d‬هو ‪ٌ ic‬عمل على تدوٌر الموتور من الٌمٌن الى الٌسار و من الٌسار الى الٌمٌن عن‬
‫طرٌق ‪ input‬و ذلك بما ان الماٌكرو ال ٌعطً الى ‪ hi 5volt‬و ‪low0volt‬‬

‫و هً توضع هكذا‬
‫انتبه هذه الصورة هً فقط للتوضٌح‬

‫‪359Page‬‬ ‫‪Technical Support 2015‬‬


361Page Technical Support 2015
‫ٌوجد طرٌقه اخرى للتحكم فى اتجاه الموتور وسرعته عن طرٌق استخدام ‪IC L298‬‬
‫وسنقوم بشرحه فى الفصل القادم‬

‫‪361Page‬‬ ‫‪Technical Support 2015‬‬


362Page Technical Support 2015
‫فى الشابتر السابق تعلمنا انه تستطٌع ان تقود اى ماتور لالمام او للوراء او اٌقافه باستخدام‬
‫الرٌالى‬
‫لكن ماذا لو اردت التحرك بهذا الموتور بسرعه ‪ %50‬او ‪ %60‬من سرعته االساسٌه‬
‫ٌعنى لو عندنا ماتور ‪ 12‬فولت وبطارٌه موصله بٌه ‪ 12‬فولت‬
‫لو اردنا التحكم بالموتور بحٌث انه ٌتحرك بنص سرعته هنخلى البطارٌه ‪ 6‬فولت‬
‫طب انا معاٌا دلوقتى بطارٌه ‪ 12‬ازاى اقدر ادٌله ‪ 6‬فولت فقط ؟‬
‫ممكن واحد ٌقول نحط‪regulator‬‬
‫طب لو عاٌز اخلٌه ٌتحرك ب ‪ %75‬من سرعته ٌعنى ببطارٌه ‪ 9‬فولت هحط ‪regulator‬تانى‬

‫كدا الحل دا مش مُجدى‬


‫عشان كدا هنستخدم تقنٌه ال‬

‫طٌب قبل ما نشرح ٌعنى اٌه‬


‫خلٌنا نسئل شوٌه اسئله االول‬
‫‪- 1‬اٌه الى هٌحصل لو انا وصلت بطارٌه ‪ 12‬فولت على موتور ‪ 12‬فولت ؟‬
‫االجابه‪:‬هٌدور بسرعته كامله‬

‫‪- 2‬طب لو وصلت بطارٌه ‪ 12‬فولت للموتور لمده ثانٌه وفصلتها لمده ثانٌه وكررت هذه العملٌه؟‬
‫هٌحصل ان الموتور هٌتحرك ثانٌه باقصى سرعته و بعدٌن ٌقؾ ثانٌه وهكذا االجابه ‪:‬‬

‫‪ -3‬طب لو وصلت بطارٌه ‪ 12‬فولت للموتور لمده نصؾ ثانٌه وفصلتها لمده نصؾ ثانٌه‬

‫‪363Page‬‬ ‫‪Technical Support 2015‬‬


‫وكررت هذه العملٌه؟‬
‫االجابه‪ :‬الموتور هٌدور فى النص ثانٌه وٌقؾ بس مش هٌلحق ٌوصل القصى سرعته‬
‫فالبتالى لو لحظته هتالقى ان تقرٌبا بٌدور بنص سرعته على مدار الوقت كله‬

‫‪ -4‬طٌب لو انا خلٌت وقت التشؽٌل ‪ %75‬ووقت ااالٌقاؾ ‪%25‬؟‬


‫االجابه‪ :‬هنالقى ان الموتور بٌدور ب‪ %75‬من سرعته‬

‫‪ -5‬طٌب لو انا خلٌت وقت التشؽٌل ‪ %25‬ووقت ااالٌقاؾ ‪%75‬؟‬


‫هنالقى ان الموتور بٌدور ب‪ %25‬من سرعته‬
‫وهكذا‬

‫الخالصه ‪ٌ:‬عنى انا لو عاٌز ادور موتور ب‪ %50‬من سرعته مش هدٌله ‪ 12‬فولت متواصلٌن‬
‫انما هدٌله ‪ 12‬فولت فى نص الوقت وصفر فولت فى النص التانى‬
‫وبالتالى المحصله هتكون ‪ 6‬فولت والموتور ٌدور بنص سرعته‬

‫ولو عاٌز ادور الموتور على ‪ %75‬من سرعته‬


‫هدٌله ‪ 12‬فولت فى ‪ %75‬من الوقت و‪ 0‬فولت فى ‪ %25‬من الوقت‬
‫وبالتالى المحصله هتكون ‪ 9‬فولت‬

‫هى دٌه فاٌده ال‬


‫انى اقدر اتحكم بال‬
‫وال‬
‫هو المسؤل عن الفولت وعن النبضات الى خارجه من الماٌكرو كنتولر‬
‫وبستطٌع التحكم فٌها من خالل رٌجٌتسر اسمه‬

‫‪364Page‬‬ ‫‪Technical Support 2015‬‬


‫الرٌجستر دا عباره عن ‪ 8‬بت‬
‫وبالتالى لو الرٌجستر ملٌان ‪(2^8)-1 =255‬‬

‫ٌعنى ال‪255= Duty cycle‬‬

‫ولو نص الرٌجستر بس‬


‫‪Duty cycle‬‬
‫‪=0.50*255‬‬
‫‪=127‬‬
‫وهكذا‬

‫‪365Page‬‬ ‫‪Technical Support 2015‬‬


‫داخل‬

‫ٌوجد‬
‫على ال‪pins‬‬
‫)‪(16,17‬‬ ‫)‪(ccp1,ccp2‬‬
‫لكل واحده فٌهم رٌجستر ‪ 8‬بت‬
‫وهذا الرٌجستر متصل عمله ب‪timer2‬‬
‫ٌمكن تفعٌل االثنٌن معا‬
‫ولكن الٌمكن تشؽٌل اكثر من ‪ 2 pwm‬فى وقت واحد‬

‫‪366Page‬‬ ‫‪Technical Support 2015‬‬


367Page Technical Support 2015
‫اذا اردت ان تعرؾ اكثر عن ال‬
‫اقرا الجزء الخاص بٌه فى الداتا شٌت‬
‫‪page 63.‬‬

‫‪368Page‬‬ ‫‪Technical Support 2015‬‬


‫ملحوظه‬

‫ٌمكن استخدام ال‬


‫ؾ اكثر من ؼرض ولٌس فى التحكم فى سرعه المواتٌر فقط‬
‫بل ٌمكن استخدمه فى التحكم فى شده االضاءه وقوتها‬

‫______________________________________________‬

‫فً بداٌة البرنامج نقوم بكتابة األمر الذي من خالله نهٌئ البك لهذه العملٌة‬
‫ومن خالل هذا األمر ٌمكننا ضبط التردد ‪ ....‬أنظر للمثال التالً‬
‫;)‪pwm_init(5000‬‬
‫األمر السابق قام بتهٌئة البك وجعل التردد الخاص بالموجة هو ‪ 5‬كٌلو هٌرتز‬
‫) ‪ 5000‬هٌرتز ( ‪ ..‬وٌمكنك تؽٌٌر هذا الرقم ) هذا التردد ( على حسب‬

‫‪369Page‬‬ ‫‪Technical Support 2015‬‬


‫الحاجة فبعض أنواع المواتٌر تحتاج لتردد معٌن ‪ .‬مثل مواتٌر السٌرفو‬

‫االمر الثانى وهو االمر التى تبدأ به العملٌه‪:‬‬


‫علٌك أن تنتبه أن الموجة المطلوبة لن تخرج إال عن طرٌق األمر الذي ٌبدأ‬
‫هذه العملٌة وهذ االمر هو ‪:‬‬
‫;)(‪Pwm_start‬‬

‫‪:‬االمر الثالث وهو الذى نستخدمه اذا اردنا اٌقاؾ العملٌه‬


‫;)(‪Pwm_stop‬‬
‫‪.‬‬
‫األمر االخٌر وهو األهم على اإلطالق هو‬
‫;)‪pwm_set_duty(127‬‬
‫هذا األمر من خالله نستطٌع بكل سهولة وٌسر تؽٌٌر الـ ‪ duty cycle‬الذي ٌؽٌر الفولت‬
‫الناتج ‪ .‬ففً المثال السابق ستكون النسبة ) ‪ ( duty cycle‬تساوي خمسٌن فً المئة‬
‫تقرٌبا أي لو كان الجهد المصدري خمسة فولت سٌكون الفولت الناتج عن ‪ pwm‬هو‬
‫‪ 2.5‬فولت‪.‬‬

‫‪371Page‬‬ ‫‪Technical Support 2015‬‬


pin 17 ‫شكل الخرج على‬
oscillsocope‫لو وصلتها بال‬

371Page Technical Support 2015


‫طرٌقه توصٌل الموتور فى حاله استخدام‬

‫وذلك عن طرٌق‬

‫ولكن ال ٌمكن استخدام السوٌتشات المٌكانٌكٌه‬

‫الن عند التحكم فً سرعة الموتور عن طرٌق‪pwm‬‬

‫فاننا نقوم بتٌولٌد نبضات سرٌعة‬


‫تشؽٌل واطفاء تشؽٌل واطفاء‬
‫ولألسؾ سرعة استجابة السوٌتش بطئٌة جدا فربما ال ٌستطٌع أن ٌعمل وٌنطفئ إال مرات‬
‫معدودة فً الثانٌة الواحدة فبالتالً لن ٌكون مناسب فً‬
‫هذا التطبٌق لذا نستخدم الترانزستور سواءا كان ‪ BJT‬أو‪MOSFET‬‬
‫الن سرعة استجابته عالٌة جدا‬
‫وهى ان نقوم بتوصٌل الموتور باستخدام ترانزستور ألن معظم المواتٌر تحتاج لتٌار كبٌر لكً‬
‫تعمل وتٌار أكبر فً بداٌة التشؽٌل وهذا التٌار أكبر بكثٌر من التٌار الذي ٌستطٌع أن ٌقدمه‬

‫‪372Page‬‬ ‫‪Technical Support 2015‬‬


‫المٌكروكنترولر ‪.‬‬

‫ملحوظه ‪ٌ:‬جب اضافه الداٌود للحماٌه من التٌارات العكسٌه الناتجه عن الموتور‬

‫‪373Page‬‬ ‫‪Technical Support 2015‬‬


374Page Technical Support 2015
‫الطرٌقه االخرى وهى االفضل واالسرع واالمن على االطالق ‪:‬‬
‫وهى استخدام ‪ٌIC‬سمى‪L298‬‬
‫وٌحتوى على ‪2 H-BRIDGE‬‬

‫‪375Page‬‬ ‫‪Technical Support 2015‬‬


376Page Technical Support 2015
‫ومن الممكن استخدام هذا ال‪IC‬‬

‫لفعل نفس ما ٌفعله الرٌالى وهو التحكم فى اتجاه الموتور بدون التجكم فى سرعته‬
‫ولكن فى هذه الحاله لن استخدم خاصٌه ال ‪pwm‬‬

‫‪377Page‬‬ ‫‪Technical Support 2015‬‬


378Page Technical Support 2015
379Page Technical Support 2015
‫فى الكثٌر من التطبٌقات فى المٌكروكنترور نحتاج اى استخدام‬
‫االشارات الـ‪ANLOG‬‬
‫ولكن اوال ما هى ال ‪analog signal‬‬
‫وما هى ال ‪digital signal‬‬
‫وما الفرق بٌنهما ؟!!‬
‫اـ الـ‪ : analog signal‬هى اشارات تعطى قٌم مختلفه للفولت فى كل لحظه زمنٌه‬
‫مثل الـ ‪SINE WAVE‬‬

‫اما ال ‪: digital signal‬فهى اشارات تعطى قٌم ثابته للفولت اما )‪ 1‬او ‪(0‬‬

‫‪381Page‬‬ ‫‪Technical Support 2015‬‬


‫مثل ال‪square wave.‬‬

‫وبما ان المٌكرو كنترولر هو نظام ٌتعامل مع االشارات الـ‪. Digital‬‬


‫بمعنى ادق ان الـ ‪ PINS‬فى المٌكروكنترولر ال ٌمكنها قراءه بٌانات او اشارات اال اذا كانت ‪1‬‬
‫او ‪(5V OR 0V) 0‬‬
‫لذلك اذا قمت بقٌاس اى قٌمه فولت على اى ‪PIN‬فى المٌكروكنترولر فانه سٌقوم بقرائتها على‬
‫انها ‪ 5V‬او ‪0V‬‬

‫فلنفترض اننا قومنا بتعرٌؾ ‪PIN‬على المٌكروكنترولر على انها ‪ INPUT‬ووضعنا علٌها فولت‬
‫مقداره ‪2V‬‬
‫ماذا ستكون االستجابه من المٌكروكنترولر ؟‬
‫ماذا اذا وضعنا فولت مقداره ‪ 3V‬او ‪4V‬؟؟‬
‫فى الحقٌقه ان المٌكروكنترولر ال ٌستطٌع قراءه جهد مقداره اقل من ‪2.5 V‬‬
‫فاى شئ اقل من ‪ 2.5 V‬فان المٌكروكنترولر ٌعتبره ‪ 0V‬واى شئ بٌن ‪ 2.5V‬و ‪ 5V‬فان‬
‫المٌكروكنترولر ٌعتبره ‪5V‬‬
‫لذا فان القٌم التالٌه )‪(2.5 , 3 ,4 ,4.5‬تعتبر كلها ‪5V‬‬
‫وكل هذا ) ‪ٌ (1 , 1.5 , 2 ,2.4‬عتبر ‪0V‬‬
‫ولكن ما المشكله فى هذا ؟‬

‫دعنا نقٌس درجه الحراره ونعرضها على ‪LCD‬‬


‫اوال لقٌاس درجه الحراره سنستخدم سٌنسور درجه الحراره ‪LM35‬‬

‫‪381Page‬‬ ‫‪Technical Support 2015‬‬


‫من الداتا الشٌت اخاصه ب ‪ lm35‬نالحظ ان‬
‫اذا كانت الفولت ٌساوى ‪ 5v‬فان ‪T=100*V‬‬
‫فاذا كان درجه الحراره تساوى ‪100 C‬‬
‫فان الفولت ٌساوى ‪1 V‬‬
‫واذا كانت درجه الحراره تساوى ‪150 C‬‬
‫فان الفولت ٌساوى ‪1.5 V‬‬

‫‪382Page‬‬ ‫‪Technical Support 2015‬‬


‫اذا اردنا اضائه ‪ LED‬عند عندما تكون درجه الحراره اعلى من‬
‫‪ 40‬واطفاء اللٌد عندما تكون درجه الحراره اقل من ‪40‬‬
‫لذا ساقوم بتوصٌل السٌنسور بالمٌكروكنترولر‬
‫وفى حاله ان درجه الحراره اعلى من ‪ 40‬سٌنٌر اللٌد‬

‫المشكله ان المٌكروكنترولر كما اتفقنا الٌمكن قرائه لفولت اقل من ‪2.5V‬‬


‫وسٌعتبر ما هو اقل من ذلك ٌساوى ‪0V‬‬
‫لذا انا ارٌد مٌكروكنترولر ٌفهم القٌم ال ‪ANALOG‬‬
‫وٌسطٌع ان ٌفرق بٌن ‪ 0.4V‬وبٌن ‪0.41 V‬‬

‫لهذا تم وضع ال‪ADC‬داخل المٌكروكنترولر لنستخدمه فى هذه الحاالت‬


‫لتحوٌل االشارات ال ‪ analog‬الى اشارات ‪digital‬‬
‫وٌتم ذلك عبر مجموعه من الخطوات وهى ‪:‬‬

‫‪ٌ-1‬قوم فً البداٌة بأخذ عٌنات من اإلشارة األصلٌة وٌثبتها خالل فترات زمنٌة ثابتة‪..‬‬
‫‪ٌ-2‬تم تقسٌم المسافة على مجال اإلشارة المطلوبة إلى مستوٌات ثابتة‪..‬‬
‫‪ٌ-3‬تم تحدٌد المستوى الذي تنتمً إلٌه اإلشارة عند العٌنة المطلوبة‪.‬‬
‫‪ٌ-4‬تم إخراج قٌمة المستوى المطلوب على مخارج ال‪.ADC‬‬

‫كما نالحظ فان عمل ال‪ٌ ADC‬تلخص فً مجموعة خطوات بسٌطة اآلن سنبدأ شرح كل خطوة‬
‫بالتفصٌل‪:‬‬

‫‪383Page‬‬ ‫‪Technical Support 2015‬‬


‫‪ -1‬أخذ العٌنات من االشارة االصلٌة وتثبٌتها)‪ : (Sampling‬فً بداٌة عملٌة التحوٌل ٌتم اخذ‬
‫عٌنات)‪ (Samples‬تعبر فً شكلها عن االشارة االصلٌة ‪ ...‬كما فً الشكل التالً‪:‬‬

‫االن ٌتم اخذ العٌنة وتثبٌت القٌمة لهذه العٌنة خالل فترة عملٌة التحوٌل كما فً الشكل التالً‪:‬‬

‫‪384Page‬‬ ‫‪Technical Support 2015‬‬


‫كلما زاد عدد العٌنات المأخوذة نالحظ اقتراب شكلها اكثر من االشارة االصلٌة وهذا ٌسمى‬
‫)‪..(Sampling Frequency‬‬
‫طبعا اذا قل عدد العٌنات عن عدد معٌن فان االشارة سٌحدث لها تشوٌه وستختلؾ عن االشارة‬
‫االصلٌة لذلك ٌجب ان ٌكون عدد العٌنات كافً لٌشابه االشارة االصلٌة‪.‬‬

‫‪- 2‬تقسٌم المسافة على كامل مجال االشارة الى مستوٌات )‪ : (Quantization‬االن بعد ان تم‬
‫تثبٌت قٌمة العٌنة خالل فترة التحوٌل فانه ٌتم تقسٌم المجال العمودي الى مستوٌات ثابتةكما فً‬
‫الشكل التالً‪:‬‬

‫‪ -3‬نالحظ ان الشكل السابق مقسم الى ‪ 16‬مستوى عمودي ) من ‪( 15 – 0‬حٌث ٌتم تحدٌد العٌنة‬
‫ورقم المستوى المقابل لها ‪..‬فكما نرى مثال ان العٌنة )‪ (A‬لها قٌمة مستوى مساوٌة لـ ‪، 13‬‬
‫والعٌنة )‪ (B‬لها قٌمة مساوٌة لـ ‪ ، 9‬والعٌنة )‪ ( C‬لها قٌمة مساوٌة لـ ‪ ، 2‬والعٌنة )‪ (D‬لها قٌمة‬
‫مساوٌة لـ ‪.6‬‬

‫‪385Page‬‬ ‫‪Technical Support 2015‬‬


‫‪-4‬االن ٌتم اخراج قٌمة المستوى المكافىء على اطراؾ خرج المبدل من ‪analog‬الى ‪digital.‬‬

‫‪PIC16F877A‬تستطٌع قرائه بٌانات ‪ analog‬حٌث انها تمتك ‪8ADC‬‬


‫موصلٌن بمجموعه من ال ‪ pins‬عددهم ‪ 8 pins‬فى ‪port A‬‬
‫‪AN0, AN1 …. AN7‬‬

‫‪386Page‬‬ ‫‪Technical Support 2015‬‬


‫ٌمكن التحكم فى هذا التحوي وفى ال ‪ADC PINS‬‬
‫عبر مجموعه من الرٌجستر‬

‫‪387Page‬‬ ‫‪Technical Support 2015‬‬


‫ٌتم ادخال البٌانات من خالل هذه ال ‪ PINS‬ثم ٌتم تحوٌلها من‬
‫‪DIGITALanalog TO‬‬
‫بالطرٌقه التى اتفقنا علٌها مسبقا‬
‫ثم ٌتم تسجٌل القٌم ال ‪DIGITAL‬‬
‫فى رٌجستر ٌسمى ‪ADRESLH/ADRESL‬‬
‫هذا الرٌجستر ‪10 BIT‬‬
‫‪(2^10)-1=1023‬‬
‫اى ان اقصى ما ٌستطٌع تحمله هذا الرٌجستر هو ‪1023‬‬
‫واقصى فولت للمٌكرو هو ‪5V‬‬

‫‪388Page‬‬ ‫‪Technical Support 2015‬‬


‫اى عندنا ٌكون الفولت ٌساوى ‪5V‬‬
‫فان الرٌجستر ٌكون ممتلئ )‪(1023‬‬
‫وعندما ٌكون الفولت ٌساوى صفر فان الرٌجستر سكون فارغ)‪(0‬‬
‫ومن هنا ٌممكنا استنتاج معادله‬

‫حٌث ان ‪ X‬ما تم ملئه من الرٌجستر وهو ٌعتمد على القٌمه الداخله من السٌنسور او من اى شئ‬
‫اخر‬
‫وبعد معرفه قٌمه ‪X‬من المٌكرو كنترولر نقوم بكتابه المعادله السابقه لمعرفه قٌمه الفولت‬

‫‪389Page‬‬ ‫‪Technical Support 2015‬‬


391Page Technical Support 2015
‫كٌفٌه كتابه اوامر البرمجه فى ال‪:ADC‬‬

‫اوال ٌجب توصٌل ال‪the analog input‬‬


‫على اى ‪PIN‬من ال ‪ADC PINS‬‬
‫‪-1‬هنختار ‪AN0‬‬
‫‪-2‬هٌتم عمٌه التحوٌل داخل المٌكروكنترولر‬
‫‪-3‬تسجٌل الناتج فى ‪ADRESH & ADRESL registers.‬‬

‫هذه االوامر من الممكن اختصارها فى امر واحد فى المٌكروسى‬


‫وهو ‪:‬‬
‫;)(‪ADC_Read‬‬

‫نقوم بقرائه القٌمه المحوله والمحفوظه فى الرٌجستر من خال هذا االمر‬


‫;)‪X = ADC_Read(0‬‬
‫ثم نقوم بتحوٌل الناتج الى فولت من خالل هذه االمر‬
‫‪V = X * (5/1023) = X * 0.004887‬‬

‫‪391Page‬‬ ‫‪Technical Support 2015‬‬


392Page Technical Support 2015
393Page Technical Support 2015
‫المشروع االول‬

‫نرٌد ان نحص على درجه الحراره ونعرضها على ال ‪LCD‬‬


‫سنقوم بنفس البرنامج السابق ولكن باضافات بسٌطه‬
‫بعد الحصول على قٌمه الفولت‬
‫سنقوم بالحصول على قٌمه درجه الحراره وذك من خال المعادله الموجوده فى الداتا شٌت‬
‫الخاصه ب‪lm35‬‬
‫وهى ‪T=100*V‬‬

‫‪394Page‬‬ ‫‪Technical Support 2015‬‬


395Page Technical Support 2015
396Page Technical Support 2015
‫المشروع الثانى‬

‫نظام حماٌه من الحرائق‬


‫ٌحتوى على جهاز لقٌاس درجه الحراره‬
‫موصل ب‪ lcd‬لعرض نتائج درجه الحراره‬
‫عندما تكون درجه الحراره اعلى من ‪ 50‬درجه‬
‫ٌتم االنذار عن طرٌق اضائه لٌد واخراج صوت‬
‫عندما تكون درجه الحراره اقل من ‪ 50‬فان اللٌد ٌكون منطفئ‬
‫وال ٌوجد صوت‬

‫فكر؟؟؟؟‬

‫‪397Page‬‬ ‫‪Technical Support 2015‬‬


398Page Technical Support 2015
‫لماذا نحتاج الى نوع اخر من ال ‪ MOTORS‬ؼٌر ال‪ DC MOTOR‬؟‬

‫فى الماضى كنا نستخدم ال ‪ DC MOTOR‬فى جمٌع التطبٌقات الخاصه بالحركه و التى تحتاج‬
‫الى ‪ MOTOR‬ولكن ال ‪DC MOTOR‬اثبت انه الٌمكن استخدامه فى جمٌع التطبٌقات‬
‫ببساطه الن ال ‪ٌ DC MOTOR‬متلك مشكله انه ال ٌمكن تحرٌكه بزاوٌا دقٌقه ومحسوبه‬
‫افترض انك ترٌد وضع كامٌرا على ‪DC MOTOR‬وترٌد تحركٌها ‪ 60‬درجه باتجاه الٌمٌن‬
‫و‪ 60‬درجه باتجاه الٌسار‬
‫كٌؾ ٌمكنك ان تفعل ذلك ؟‬
‫ستبدء فى حساب الوقت الى ٌستؽرقه الموتور حتى ٌدور الى زاوٌه ‪ 60‬درجه ولٌكن ٌستؽرق‬
‫ثانٌه‬
‫ولكن هذا الحل لٌس هو الحل االفضل على االطالق النه ٌتعمد على عده عوامل منها البطارٌه‬
‫ونوع الموتور نفسه وؼٌرها من العوامل‬
‫وبالتالى لن ٌستؽرق الوقت نفسه فى كل مره وبالتالى لن ٌعطى نفس قٌمه الزاوٌه فى كل مره‬

‫‪399Page‬‬ ‫‪Technical Support 2015‬‬


‫لذا نحن فى حاجه الى استخدام نوع اخر من الموتور عنده القدره على اعطاء زواٌا دقٌقه من ؼٌر‬
‫االعتماد على الوقت او البطارٌه‬

‫‪411Page‬‬ ‫‪Technical Support 2015‬‬


‫ٌستخدم فً اآلالت الصؽٌرة التً تحتاج لدقة فً التحكم بمحركاتها مثل الروبوت والطابعة ‪.‬‬
‫و من أهم مٌزات هذا النوع من المحركات انه ٌمكن التحكم فً سرعة دورامه وزاوٌة التوقؾ‬
‫بدقة‪.‬‬
‫ٌستخدم هذا المحرك أٌضا فً التطبٌقات الروبوتٌة‪ ،‬نظراً إلمكانٌة التحكم فً إٌقافه عند زاوٌة‬
‫محددة‪.‬‬

‫االن عندما نوصل ‪ coil A‬للبطارٌه فانه سوؾ ٌمر به تٌار ٌؤدى الى تولد مجال مؽناطٌسى‬
‫هذا المجال سٌقوم بجذب القطب الشمالى للمؽناطٌس‬
‫ولو قمت بفصل ‪ coil A‬وتوصٌل ‪ coil B‬فان القطب الشمالى سوؾ ٌتحرك الى ‪coil B‬‬
‫وهكذا هو الحال مع ‟‪ coil B‬و ‟‪coil A‬‬
‫لذلك لكى ٌدور دوره كامله نحن فى حاجه الى توصٌل واطفاء ال ‪ coilS‬تلو بعضهم البعض‬

‫‪411Page‬‬ ‫‪Technical Support 2015‬‬


‫نالحظ ان الخطوه الواحده لحركه الموتور هى ‪ 90‬درجه وهى المسافه بٌن ال ‪TWO COILS‬‬
‫هل ٌمكننا ان نقلل هذا الخطوه ل‪ 45‬درجه عن طرٌق ان نوصل البطارٌه ب‪coil A‬‬
‫فٌتجه القطب الشمالى ل‪ coil A‬ثم نوصل البطارٌه ل‪ coil B‬دون اطفاء ‪coil A‬‬
‫فٌقؾ القطب الشمالى للمؽناطٌس فى منتصؾ المسافه بٌن ‪, coil A‬و ‪coil B‬‬
‫اى ٌاخذ وضع ‪ 45‬درجه‬

‫‪412Page‬‬ ‫‪Technical Support 2015‬‬


‫االكثر استخداما هو الموتور ذو ال‪ 5‬او ال‪ 6‬اسالك‬
‫فى الموتور ال‪ 6‬اسالك ٌكون السلكٌن ‪ A‬و '‪ A‬متصلٌن معا‬
‫وهكذا هو الحال فى السلكٌن ‪ B‬و‟‪B‬‬

‫فى الموتور ال‪ 5‬اسالك ٌتم وصل هذٌن السلكٌن معا‬


‫وٌتم توصٌله بالطرؾ الموجب للبطارٌه‬
‫وٌتم اعطاء ال‪ ground‬للكوٌل من المٌكروكنترولر‬

‫اوال ‪ :‬كٌفٌة معرفة اطراف ال‪)common , coil( steper motor‬‬


‫ٌتم تحدٌد أطراؾ وملفات المحرك نستخدم اوم مٌتر )جهاز قٌاس االوم ( او االفومٌتر على وضع‬
‫اوم‬

‫‪413Page‬‬ ‫‪Technical Support 2015‬‬


‫وٌتم توصٌل طرفً االفو)ٌتم وضع طرؾ عند كل من ال‪a,b,c,d‬والطرؾ التانً من االفو عند‬
‫ال ‪ (com‬كما فً الشكل اّذا خرج ‪120‬اوم ٌبقً ده طرؾ ‪coil‬‬

‫‪414Page‬‬ ‫‪Technical Support 2015‬‬


415Page Technical Support 2015
‫كده تم تحدٌد اطراؾ ال ‪coil‬‬
‫اّذا اخرج نصؾ ‪120‬اوم ٌبقً الطرؾ ‪common‬وٌتم توصٌل الطرفٌن ال ‪common‬معا‬
‫وٌوضع علٌها ‪12‬فولت كما فً الشكل‬

‫‪416Page‬‬ ‫‪Technical Support 2015‬‬


‫ولكن طرٌقة القٌاس باستخدام األوم لن تفلح !؟ وهذا ٌرجع ألسباب كثٌرة ٌكفى أن أذكر منها سبب‬
‫واحد فقط ٌحسم معنا األمر وهو أنك لن تستطٌع تحدٌد اى طرؾ من طرفان الملؾ هو الذى‬
‫ٌحتاج موجب على سبٌل المثال كى ٌتم تنظٌم عملٌة الخطوات وترتٌب اتجاهها أو ٌمكننا القول‬
‫ٌصعب تحدٌد اتجاه الملؾ بطرفان وتحدٌد أى ملؾ بجوار اآلخر وهل من (بمعنى آخر وهو‬
‫‪ ) ،‬ناحٌة الٌمٌن أم الٌسار‬
‫فٌوجد بعض المودٌلز ٌعرؾ من خالل االلوان االطراؾ مثال‬

‫‪417Page‬‬ ‫‪Technical Support 2015‬‬


‫ثا نٌا ترتٌبهم ‪:‬‬
‫ٌتم توصٌل كل من طرفٌن ال ‪ coil‬ب االجهد الموجب وباقً االطراؾ ‪ a,b,.c.d‬بالجهد‬
‫السالب حتً ٌصبح ترتٌبهم فً نفس االتجاه وّ ذالك بمجرد حركته‬

‫‪418Page‬‬ ‫‪Technical Support 2015‬‬


‫االن كٌؾ ٌمكن ان اتحكم فى الموتور عن طرٌق المٌكروكنترولر‬
‫سوؾ نوصل الموتور بال ‪IC ULN2803‬‬

‫ملحوظة ‪:‬‬
‫فإذا كان الخرج من البٌك ‪ 1‬تجعله اآلي سً ‪ Not gate‬كعاكس للجهد ‪IC ULN2803‬تعمل‬
‫والعكس صحٌح‪ ،‬فعملٌا ٌكون الموتور متصل بمصدر التؽذٌة ولكن الطرؾ اآلخر من الملؾ ‪0‬‬
‫أو األرضً عن طرٌق اآلي سً ) ‪ 1‬فً كود ‪0‬ؼٌر متصل باألرضً وعندما ٌتصل ب‬
‫البرمجة ( ٌمر التٌار فً الملؾ فٌمؽنطه مما ٌسبب دوران الموتور خطوة واحدة وهكذا مع بقٌة‬

‫‪419Page‬‬ ‫‪Technical Support 2015‬‬


‫الملفات‬

‫اذا اردنا اان ٌتحرك الموتور ‪ 60‬درجه للٌمٌن و‪ 60‬درجه للٌسار فانه ٌعتمد على خطوه الموتور‬
‫ولنعتبر انها ‪5 degrees.‬‬
‫نستٌطع ان نحدد خطوه الموتور عبر ان نضؽط ضؽطتٌن متتالٌتٌن على الموتور فى ‪protues‬‬

‫‪411Page‬‬ ‫‪Technical Support 2015‬‬


5 DEGRESS ‫ونؽٌر درجه الموتور الى‬

411Page Technical Support 2015


412Page Technical Support 2015
‫لماذا نحتاج لبروتوكول االتصال فى المٌكرو كنترولر؟؟؟!‬
‫دي الطرٌقة اللً بقدر اربط بٌها بٌن المٌكرو و بٌن العالم الخارجً سواء كان كمبٌوتر او مٌكرو‬
‫تانً و سواء كنت بوصل باسالك او بدون اسالك ‪.‬‬
‫علشان الداتا بتتبعت ‪ٌ bit by bit‬عنً‬
‫سٌلاير ورا بعض مش ‪parallel‬‬ ‫لٌه اسمه ‪ Serial‬؟‬
‫فً نوعٌن من ال ‪serial communicatio‬‬
‫‪• Universal Synchronous-Asynchronous‬‬
‫‪Receiver/Transmitter‬‬
‫• المرسل و المستقبل بٌكونوا مرتبطٌن ب ‪ clock‬واحدة‬
‫ؼالبا او المرسل بٌبعت ‪ timing signal‬معٌنة علشان‬
‫‪USATR‬‬ ‫ٌعرؾ المستقبل امتً ٌقرأ ال ‪ bit‬التالً من الداتا‬

‫‪• Universal Asynchronous‬‬


‫‪Receiver/Transmitter‬‬
‫• مش مرتبط فى االرسال واالستقبال بزمن معٌن لكن مرتبط بعالمة‬
‫معٌنة المٌكرو ٌقول للمٌكرو ضع ع ال ‪ PIN‬اللى هتستقبل علٌه ‪1‬‬
‫‪UART‬‬ ‫عشان ارسلك البٌانات وساعة ما الكومبٌوتر ٌبعت للمٌكرو ‪ٌ 0‬عرؾ‬
‫أن اللى بعد ال ‪ 0‬هى الداتا اللى هٌستقبلها ‪.‬‬

‫‪n‬‬

‫‪413Page‬‬ ‫‪Technical Support 2015‬‬


‫ اللى موجوده فى الماٌكرو‬serial I\O ‫ واحد من االتنٌن‬USART
serial communication interface ‫واسمها كمان‬
: 3 modes ‫ٌمكن ضبطه على‬
(Asynchronous (full-duplex •
(Synchronous – Master (half-duplex •
(Synchronous – Slave (half-duplex •
‫ ٌجب ان ٌهٌاو بجانب‬Bit SPEN (RCSTA<7>) and bits TRISC<7:6>
.‫ مستقبل ومرسل‬USART ‫ ك‬pins RC6/TX/CK and RC7/RX/D
R/W-0 R/W-0 R/W-0 R/W-0 U-0 R/W-0 R-1
R/W-0
CSRC TX9 TXEN SYNC __ BRGH TRMT TX9D
bit7 Bit0

bit 7 CSRC: Clock Source Select bit


:Asynchronous mode
.Don’t care
:Synchronous mode
(Master mode (clock generated internally from BRG = 1
(Slave mode (clock from external source = 0
bit 6 TX9: 9-bit Transmit Enable bit
Selects 9-bit transmission = 1

414Page Technical Support 2015


Selects 8-bit transmission = 0
bit 5 TXEN: Transmit Enable bit
Transmit enabled = 1
Transmit disabled = 0
.Note: SREN/CREN overrides TXEN in Sync mode
bit 4 SYNC: USART Mode Select bit
Synchronous mode = 1
Asynchronous mode = 0
’bit 3 Unimplemented: Read as ‘0
bit 2 BRGH: High Baud Rate Select bit
:Asynchronous mode
High speed = 1
Low speed = 0
:Synchronous mode
.Unused in this mode
bit 1 TRMT: Transmit Shift Register Status bit
TSR empty = 1
TSR full = 0
bit 0 TX9D: 9th bit of Transmit Data, can be Parity bit

415Page Technical Support 2015


:Legend
R = Readable bit W = Writable bit U = Unimplemented bit, read
’as „0
n = Value at POR „1‟ = Bit is set „0‟ = Bit is cleared x = Bit is -
unknown

R/W-0 R/W-0 R/W-0 R/W-0 R/W-0 R-0 R-0


R-x
SPEN RX9 SREN CREN ADDEN FERR OERR RX9D
bit7 Bit0

bit 7 SPEN: Serial Port Enable bit


Serial port enabled (configures RC7/RX/DT and = 1
(RC6/TX/CK pins as serial port pins
Serial port disabled = 0
bit 6 RX9: 9-bit Receive Enable bit
Selects 9-bit reception = 1
Selects 8-bit reception = 0
bit 5 SREN: Single Receive Enable bit
:Asynchronous mode
.Don‟t care

416Page Technical Support 2015


:Synchronous mode – Master
Enables single receive = 1
Disables single receive = 0
.This bit is cleared after reception is complete
:Synchronous mode – Slave
.Don‟t care
bit 4 CREN: Continuous Receive Enable bit
:Asynchronous mode
Enables continuous receive = 1
Disables continuous receive = 0
:Synchronous mode
Enables continuous receive until enable bit CREN is = 1
(cleared (CREN overrides SREN
Disables continuous receive = 0
bit 3 ADDEN: Address Detect Enable bit
:(Asynchronous mode 9-bit (RX9 = 1
Enables address detection, enables interrupt and load of = 1
<the receive buffer when RSR<8
is set

417Page Technical Support 2015


Disables address detection, all bytes are received and ninth = 0
bit can be used as parity bit
bit 2 FERR: Framing Error bit
Framing error (can be updated by reading RCREG register = 1
(and receive next valid byte
No framing error = 0
bit 1 OERR: Overrun Error bit
(Overrun error (can be cleared by clearing bit CREN = 1
No overrun error = 0
bit 0 RX9D: 9th bit of Received Data (can be parity bit but must
(be calculated by user firmware
:Legend
R = Readable bit W = Writable bit U = Unimplemented bit,
’read as „0
n = Value at POR „1‟ = Bit is set „0‟ = Bit is cleared x = Bit is -
unknown

418Page Technical Support 2015


‫ٌعنى لو عندى جهاز كمبٌوتر او مٌكرو كنترولر وعاٌز اتحكم فى مٌكرو كنترولر تانى‬
‫هعمل كدا ازاى‬

‫ٌعنى لو عاٌز ادوس على سوٌتش موصل بمٌكرو كنترولر ٌضى لٌد موصل بمٌكرو كنترولر‬
‫تانى‬

‫االجابه ببساطه اننا نمتلك قناه لالتصال بٌنهم‬

‫‪419Page‬‬ ‫‪Technical Support 2015‬‬


For example if we programmed the first micro which we will call
(Transmitter) when we press the first button send a signal which can
be character (A,B,%,#, … etc ) to the other micro which we will call
(Receiver) and we programmed the RX if it received this signal to
turn the LED on …
All what we need to do this just to connect the TX pin (25) to
RX pin (26) and use the UART channel….

‫اذا قمنا ببرمجه اول مٌكرو كنترولر )المُرسل( انه عندما اؼضط على السوٌتش االول‬
‘A’ ‫ مثل‬char ‫قم بارسال اى حرؾ‬
‘A’ ‫واقوم ببرمجه المٌكرو كنترولر االخر )المستقبل ( انه عندما تستقبل حرؾ‬
‫قم باضائه اللٌد‬
PIN25 ‫كل ما نحتاجه انه نقوم بتوصٌل طرؾ التوصٌل بٌن المٌكروكنترولر المرسل على ال‬
(TX)
PISN26(RX) ‫والطرؾ االخر فى المٌكروكنترولر المستقبل على‬
‫ وبرمجته فى المٌكروكنترولر‬UART‫واستخدام ال‬

421Page Technical Support 2015


421Page Technical Support 2015
‫برمجه المٌكروكنترولر ا ُلمرسل‬

‫‪422Page‬‬ ‫‪Technical Support 2015‬‬


‫برمجه المٌكرو كنترولر المستقبل‬

‫‪423Page‬‬ ‫‪Technical Support 2015‬‬


‫فى هذا البرنامج قمنا باستخدام عدد من ال‪UART functions‬‬
‫سنقوم بشرحها االن‬

‫يفاْيى أساسيح ‪: Bit Rate & Baud Rate‬‬


‫أذ‪ٕ١‬ا ٌجضء ِ‪ ُٙ‬ف‪٘ ٟ‬زا إٌ‪ٛ‬ع ِٓ االذصاي ِغأٌح ِؼذي إٌمً‬

‫‪: Bit Rate‬‬

‫٘‪ ٛ‬ػثاسج ػٓ ِؼذي ٔمً اٌثراخ ف‪ ٟ‬اٌثأ‪١‬ح ‪ bps‬ع‪ٛ‬اءاً وأد أصفاس أ‪ ٚ‬آداد‪.‬‬

‫‪: Baud Rate‬‬

‫ػذد اٌشِ‪ٛ‬ص ف‪ ٟ‬اٌثأ‪١‬ح ‪ ٚ‬لذ ذى‪ ْٛ‬أوثش ِٓ تد ف‪ ٟ‬اٌثأ‪١‬ح ‪٠ ٚ‬ماط تاٌرشدد ‪.‬‬

‫اٌـ ‪ Baud Rate‬لذ ‪٠‬غا‪ Bit Rate ٞٚ‬ػٕذِا ‪ٕ٠‬مً وً تد ف‪ ٟ‬اٌثأ‪١‬ح‬

‫;)‪UARTX _Init (const unsigned long baud _rate‬‬

‫هذا االمر خاص ببدء ال ‪ UART hardware modules‬بتجهٌز عمله‬


‫باالضافه الى اعداد ال اعداد ‪TX and RX pins‬‬
‫ونعرؾ سرعه ارسال البٌانات‬
‫القبمه االكثر االستخداما وهى ال ‪ default‬بالنسبه للمٌكروكنترولر هى‪9600 bps‬‬
‫وٌجب ان ٌكون االثنٌن المٌكروكنترولر المستقبل والمرسل االتنٌن بنفس السرعه‬

‫‪424Page‬‬ ‫‪Technical Support 2015‬‬


‫وٌمكن تؽٌٌر الرقم ‪ 9600‬وهو سرعة االرسال وهو عدد البت فى الثانٌة فلو عندى حرؾ مكون‬
‫من ‪ 8bit‬فانه باالضافة الى ال ‪ start bit‬وال ‪ٌ stop bit‬صبح عددهم ‪ٌ 10 bit‬عنى‬
‫‪960=10/9600‬حرؾ ٌعنى ٌتم ارسال ‪ 960‬حرؾ فى الثانٌة الرقم ‪ 9600‬هو الرقم ال‬
‫‪. default‬‬
‫الرقم ‪ٌ X‬شٌر الى رقم ال ‪ UART‬المستخدم الن هناك مٌكرو لها اكتر من ‪ UART‬أما‬
‫‪ PIC16F877A‬لها ‪ UART‬واحد فقط لذا نكتب ‪ UART1‬وان لم نكتب ‪ 1‬سٌحدث خطأ‬
‫اثناء عملٌة ال ‪. COMPILING‬‬

‫;)(‪UARTx _Data_Ready‬‬

‫هذا األمر ٌختبر ما إذا كان هناك بٌانات مرسلة من الجهاز للمٌكرونترولرهل الداتا الموجودة فى‬
‫ال ‪ wire‬اتبعتت وال ال وبٌعرؾ انها اتبعتت من ال ‪ start bit‬أو بمعنى آخر هذا األمر ٌحتمل‬
‫قٌمتٌن إما واحد فً حال تم استقبال بٌانات أو صفر فى حالة عدم استقبال بٌانات ‪.‬‬

‫{)‪While (1‬‬

‫‪425Page‬‬ ‫‪Technical Support 2015‬‬


‫{))(‪If (UARTx _ Data_ Ready‬‬
‫}‪……………….‬‬

‫{)‪If (UARTx _ Data _Ready()==1‬‬

‫{))(‪If (UARTx _ Data _Ready‬‬

‫;)(‪UARTx_Read‬‬

‫هذا األمر ٌستقبل باٌت واحد فقط أي وظٌفته استقبال باٌت قادم من الجهاز للمٌكرونترولر فً‬
‫حٌن األمر السابق‪ UARTX _ Data_ Ready‬كان ٌختبر فقط وجود بٌانات أم ال ‪.‬‬
‫كلمة ‪ receive‬او اى متؽٌر اخر مثل ‪X‬عبارة عن متؽٌر فقط و ٌجب أن ٌكون هذا المتؽٌر‬
‫من نوع ‪ char‬و من خالل هذا المتؽٌر اخزن الباٌت القادم من الجهاز عن طرٌق األمر‬
‫;)(‪ uartx_read‬فى المتؽٌر ‪. receive‬‬

‫‪426Page‬‬ ‫‪Technical Support 2015‬‬


‫أي اآلن استطٌع مثال لو ارسل حرؾ ‪ a‬او ‪ b‬أو أى حرؾ من حروؾ الكومبٌوتر للمٌكرو أن‬
‫أعرضه على شاشة ‪ LCD‬وهذا االمر ٌستقبل ‪. bit by bit‬‬

‫)_‪UARTx_Write(char data‬‬

‫هذا االمر ٌرسل بٌت واحدة فقط من المٌكرو للكومبٌوتر اذا تم ارسال اكتر من بٌت فانه ٌحدث‬
‫‪ error‬كما فى هذا الكود ‪:‬‬
‫)"‪UART1_ Write("aaa‬‬

‫;)‪UARTx _Write_Text(char * UART_text‬‬

‫هذا االمر الرسال ‪ text‬فلو أردنا ارسال كلمة ‪ engineer‬سنكتب االتى‬


‫;)"‪UART1_Write_Text("engineer‬‬
‫هذا لو اردت ارسال كلمة علطول أما لو أردت ارسال متؽٌر استخدم االمر االتى‬

‫‪427Page‬‬ ‫‪Technical Support 2015‬‬


‫هذا هو المتؽٌر‬
‫;"!‪char output[]="Hi World‬‬
‫الحظ االمر )‪ uart1_read_text(output,"ok",10‬ال ‪ output‬هو المتؽٌر اللى هٌقرى‬
‫منه ال ‪ text‬أما ‪ ok‬أنا هفضل ابعت داتا لحد ما ٌجٌلة كلمة ‪ ok‬هٌتوقؾ عن استقبال الداتا ‪.‬‬
‫الرسال المتؽٌر استخدم االمر ‪:‬‬
‫;)‪UART1_Write_Text(output‬‬
‫فى هذة الحالة لن ٌظهر كلمة ‪ output‬ولكن ٌرسل ما بداخل هذا المتؽٌر على عكس المثال‬
‫السابق فكان ٌعرض كلمة ‪ engineer‬علطول ‪.‬‬
‫الحظ أن االمر ‪ write‬اذا تم تخزٌن البٌانات اللى فٌه فى متؽٌر فان المتؽٌر ٌكون حرفى ‪char‬‬
‫زى االمر ‪ read‬بالضبط وٌسع المتؽٌر ‪ 50‬حرؾ ‪.‬‬

‫‪428Page‬‬ ‫‪Technical Support 2015‬‬


429Page Technical Support 2015
‫اتفقنا اننا ممكن نوصل المٌكروكنترولر بمٌكروكنترولر اخر ودا تم شرحه‬
‫واٌضا ٌمكن اوصل المكٌو كنترولر بالكومبٌروتر وٌاخد اوامره منه‬
‫بس فٌه مشكله ان المٌكروكنتولر بٌستخدم )‪digital system (0,1‬‬
‫الى بٌعبر عنها‬
‫ونظام الكمبٌوتر بٌتخدم برضو ‪also digital system‬‬
‫‪-‬‬ ‫لكن‬
‫عشان كدا هنتستخد‪ٌ IC‬حول ‪-12‬‬
‫ال‪ IC‬دا اسمه ‪MAX 232‬‬
‫وهنستخدم برضو ‪ SERIAL PORT‬لبرط المٌكروكنتولر بالكمبٌوتر‬
‫وهنبدء بشرح ال‪serial port‬‬

‫ط‪١‬ة اصا‪ٛ٘ ٞ‬صً اٌّ‪١‬ىش‪٠ ٚ‬اٌىّث‪ٛ١‬ذش ؟؟‬

‫‪Serial Port‬‬

‫‪431Page‬‬ ‫‪Technical Support 2015‬‬


‫هو عبارة عن منفذ بٌن الكمبٌوتر و األجهزة األخرى وتمتلك بروتوكول خاص بها سوؾ نتطرق‬
‫له إن شاء هللا هذا البروتوكول ٌستخدم لربط ‪ 2 devices‬أو أكثر االول ٌكون الكومبٌوتر‬
‫والثانى من الممكان أن ٌكون طابعة أو المٌكرو ‪ ......‬ومعنى كلمة بروتوكول مجموعة من‬
‫القواعد التى تحكم أمر معٌن وهو االتصال بٌن الكومبٌوتر واى جهاز اخر هذة القواعد منها ‪:‬‬
‫‪ _1‬أن الداتا بتتبعت ‪ serial‬واحدة تلو االخرى ‪.‬‬
‫‪ _2‬ال ‪ logic level‬للسلاير فنجد أن ال ‪ high level‬للسلاير لما ٌكون الجهد أكبر من ‪3-‬‬
‫بالسالب ٌعنى من ‪ 4-‬الى ‪25-‬‬
‫أما ال ‪ low level‬لما ٌكون الجهد أكبر من ‪ 3‬بالموجب ٌعنى من ‪ 4‬الى ‪. 25‬‬

‫اٌث‪١‬أاخ ‪٠‬رُ اسعٍ‪ٙ‬ا ػٓ طش‪٠‬ك ٘زا اٌىاتً ‪ٚ serial‬ادذج ذٍ‪ٛ‬‬


‫االخش‪ bit by bit ٜ‬ػشاْ وذٖ ِش تذراج غ‪١‬ش ‪ٚ line‬ادذ‬
‫أِا ٌ‪٘ ٛ‬شعً ‪ٚ‬اعرمثً ف‪ٔ ٝ‬فظ اٌ‪ٛ‬لد ٘ذراج ‪2 lines‬‬
‫‪٠ٚ‬غّ‪ ٝ‬ف‪٘ ٝ‬زج اٌذاٌح ‪ٚ directional‬وذٖ التذ ِٓ‬
‫عٍى‪ full-duplex ٓ١‬أِا ارا ذُ االسعاي ‪ٚ‬االعرمثاي ِٓ‬
‫ٔفظ اٌغٍه فأٗ ال ‪٠‬ى‪ ْٛ‬ف‪ٔ ٝ‬فظ اٌ‪ٛ‬لد ‪٠ٚ‬غّ‪half- ٝ‬‬
‫‪.duplex‬‬

‫ٌٍغش‪٠‬اي ِٕفزاْ أدذّ٘ا ‪ٚ male‬االخش ‪ ٚ female‬ذغّ‪ٝ‬‬


‫ِٕافز٘ا تاي ـ‪. COM ports‬‬

‫‪431Page‬‬ ‫‪Technical Support 2015‬‬


‫‪Pin assignment‬‬

‫محتاج أعرؾ ‪ 3 pins‬هما واحد بٌرسل ‪ pin3‬واحد بٌستقبل ‪ pin2‬واالرضى ‪pin5‬‬


‫الترقٌم دا خاص بال ‪ male‬أما ال ‪ female‬ترقٌمها عكس ال ‪ male‬عشان لما ٌتركبوا فى‬
‫بعض ودا شكل ال ‪. female‬‬

‫‪432Page‬‬ ‫‪Technical Support 2015‬‬


‫طٌب الكالم ده من جهة الكمبٌوتر ‪ ...‬طٌب اٌه الكالم من جهة المٌكرو ؟؟‬

‫‪433Page‬‬ ‫‪Technical Support 2015‬‬


‫من المعلوم أن المٌكرو بٌعمل على ‪ LOGIC LEVEL 5V/0V‬والسلاير بٌشتؽل على ‪logic‬‬
‫‪ level‬مختلؾ كما ذكرنا سابقا لذا البد من دائرة ‪ hardware‬تقوم بتحوٌل ال ‪logic level‬‬
‫الخاص بالمٌكرو لل ‪ logic level‬الخاص بالمٌكرو والعكس عشان البٌانات تنقل بصورة‬

‫صحٌحة‬
‫ٌوجد ‪ IC‬بتعمل الكالم ده اسمها ‪MAX232‬‬

‫كٌفٌة التوصٌل مع الكومبٌوتر هتالقٌها فً الصورة الل تحت و هتالحظ ‪:‬‬


‫أن ‪ pin 15‬لل ‪ max232‬موصلة بال ‪ GND‬و ‪ pin 16‬موصلة بال ‪ VCC‬و ‪pin‬‬
‫‪ 14/13/12/11‬ؼٌر مستخدمة‬
‫‪ٌ T2IN‬عنى بٌدخلها بٌانات من المٌكرو لذا توصل‬ ‫ونجد أن ‪ pin 10‬مكتوب علٌها‬
‫بال‪ transmit‬للمٌكرو وهو ‪ pin RC6‬واٌضا ‪ pin 9‬لل ‪ max232‬مكتوب علٌها‬
‫‪ٌ T2OUT‬عنى بٌخرج بٌانات منها للمٌكرو لذا نوصلها على ال ‪ receive‬للمٌكرو اللى هى‬
‫‪pin RC7‬‬
‫نجد أن ‪ PIN7‬لل ‪ MAX232‬مكتوب علٌها ‪ٌ T2OUT‬عنى بٌخرج من ال ‪ MAX‬عشان‬
‫الكومبٌوتر ٌستقبل لذا ٌوصل ب ‪ PIN 2‬فى السلاير والمسئولة عن االستقبال للبٌانات واٌضا‬
‫‪ PIN8‬لل ‪ MAX‬مكتوب علٌها ‪ IN‬لذا بٌدخلها بٌانات من السلاير لذا توصل بب ‪ PIN3‬فى‬
‫السلاير النها المسئولة عن ارسال البٌانات ‪.‬‬
‫باقى ال ‪ PINS‬موصلة بمكثفات مع العلم ان الخط االسود ٌمثل موجب المكثؾ والطرؾ الذى‬
‫ٌشبه القاعدة ٌمثل الطرؾ السالب للمكثؾ‬

‫‪434Page‬‬ ‫‪Technical Support 2015‬‬


435Page Technical Support 2015
‫اتكلمنا عن كٌفٌة التوصٌل مع الكمبٌوتر ‪ ..‬هنتكلم دلوقتً عن شكل الداتا و هً بتتبعت بال‬
‫‪UART‬‬

‫احنا بنشتؽل ‪ asynchronous‬الداتا هٌكون لٌها ‪ format‬معٌن هتتبعت بٌه هتتبعت الداتا‬
‫ومعاها ‪ other bits‬وهى ‪:‬‬
‫‪1_Start bit‬‬
‫‪2_data bits‬‬
‫‪3_parity bit‬‬
‫‪4_ Stop bits‬‬

‫أول حاجة هتتبعت من الداتا هو ال ‪ start bit‬وهو الذى ٌحدد بداٌة عملٌة االرسال لو ال ‪start‬‬
‫‪ٌ bit‬ساوى ‪ zero‬فا المٌكرو هٌستقبل الداتا اللى بعده طبعا بعد ال ‪ start bit‬هٌكون ال ‪data‬‬
‫‪ bits‬وهى البٌانات المرسلة بال ‪ ASCII Code‬وعددها ‪ 8‬بٌت بعد ال ‪.data bits‬‬
‫هٌكون ال ‪ parity bit‬وهو الذى ٌتأكد من اذا كانت البٌانات المرسلة صحٌحة أم خطأ نتٌجة‬
‫تأثٌر ‪ noise‬اثناء ارسلها وتحدثنا عنه فى الدرس االول فارجع الٌه وبعدٌن ال ‪ stop bit‬وهى‬
‫التى تحدد نهاٌة االرسال وبتخلى ‪ pin‬المٌكرو بواحد عشان تتهٌئ الستقبال بٌانات جدٌدة ‪.‬‬
‫ولكن لٌه ببعت الداتا باالسكى كود ؟؟؟؟‬

‫‪436Page‬‬ ‫‪Technical Support 2015‬‬


‫داٌما كنت بسال نفسى لٌة داٌما اما كنت ببعت الداتا ل ‪ lcd‬كان الزم تبقى اسكى او ابعت‬
‫للكمبٌوتر او اى جهاز خارجى لحد ما فلوٌد حللى المشكلة دى كل جهاز بٌبقى لٌة لؽة بٌفهمها‬
‫مثال انا بتكلم عربى حد تانى بٌتكلم انجلٌزى وحد تالت بٌتكلم لؽة تانٌة بس فى النهاٌة علشان اتكلم‬
‫مع اى حد الزم اتكلم بلؽة كلنا نفهمها الى هٌا االسكى ‪.‬‬
‫دلوقتى انا اما كنت ببعت الداتا للكمبٌوتر كنت ببعتها اسكى والكمبٌوتر رد علٌا اسكى مثال‬
‫الكمبٌوتر بعتلى رقم ‪ 1‬فهٌبعتهولى ب ‪ 49‬انا دلوقتى الفكرة ان المتؽٌر الى استقبلت فٌة الداتا‬
‫متخزن فٌة قٌمة ‪ 49‬بس دى مش قٌمة حقٌقٌة علشان كده هطرح الرقم من ‪ 48‬علشان ٌدٌنى‬
‫قٌمتة الحقٌقٌة‬
‫انما بقى الداتا دى لو انا هبعتها لجهاز تانى اؼٌر فى قٌمتها لٌة مالجهاز التانى بٌفهم اسكى فبعتلة‬
‫الداتا علطول ‪.‬‬

‫عندما تكون ال ‪ pin idle‬بمعنى أن مفٌش داتا بتتنقل بٌكون علٌها ‪ logic high‬اول ما الداتا‬
‫تتبعت بتصبح ‪ low‬بسبب ال ‪ start bit‬وبعد ما ٌتم ارسال الداتا تصبح ‪ high‬بسبب ال ‪stop‬‬
‫‪. bit‬‬

‫نقوم بعمل برنامج بسٌط لتوضٌح ما سبق‬

‫‪437Page‬‬ ‫‪Technical Support 2015‬‬


‫المشروع االول‬

438Page Technical Support 2015


‫ٌقوم البرنامج بعرض البٌانات المرسله من الكومبٌوتر على شاشة ال ‪ LCD‬ففى البداٌة نقوم‬
‫بتعرٌؾ ال ‪ lcd‬ثم ندخل فى دالة ‪ main‬ونعمل ‪ initialize‬لل ‪lcd‬‬
‫وبعدٌن نعمل ‪ initialize‬لل ‪ uart‬ثم نعرض كلة ‪ eng‬على ال ‪ lcd‬فى السطر االول وذلك‬
‫للتأكد من أن البرنامج شؽال فعندما اشؽل البرنامج لو لقٌت كلمة ‪ eng‬مكتوبه ٌبقى البرنامج‬
‫شؽال وبعدٌن هكتب على شاشة الكومبٌوتر ‪ engineer 2012‬باستخدام االمر ‪write text‬‬
‫وبكده اول ما اشؽل البرنامج هٌظهر كلمة ‪ eng‬على ال ‪ lcd‬وٌظهر كلمة ‪engineer 2012‬‬
‫على الكومبٌوتر وبكده ندخل للبرنامج االساسى داخل ‪ while‬الزم داخل ‪ while‬أتاكد ان‬
‫البٌانات جاهزة عن طرٌق االمر {))(‪ if (UART_DATA_READY‬وبعدٌن أقرى البٌانات‬
‫اللى مرسلة من الكومبٌوتر واخزنها فى المتؽٌر ‪ uart_rd‬واللى البد ان ٌكون من النوع ‪char‬‬
‫البٌانات اللى الكومبٌوتر هٌرسلها هطلب من الكومبٌوتر انه ٌعرضها باستخدام االمر ‪ write‬وفى‬
‫نفس الوقت ٌعرضها على ال ‪ lcd‬فى السطر الثانى فالحظ فى البداٌة هٌظهر ‪ eng‬و‬
‫‪ engineer 2012‬كما ذكرنا مسبقا وأٌضا لو كتبت ع الكومبٌوتر حرؾ فان هذا الحرؾ‬
‫سٌظهر ع الكومبٌوتر واٌضا ع ال ‪ lcd‬فى السطر التانى العمود االول ثم ‪ i‬تزٌد بمقدار واحد فلو‬
‫كتبت حرؾ تانى هٌتكتب ع الكومبٌوتر وهٌظهر ع ال ‪ lcd‬فى السطر التانى العمود التانى‬
‫بجوار الحرؾ االول وهكذا ‪......‬‬
‫لكن ازاى ابعت داتا من المٌكرو للكومبٌوتر والعكس عن طرٌق البروتس ؟؟؟‬
‫االداة ‪ virtual terminal‬هى التى عن طرٌقها نتاكد ان البرنامج شؽال فى هى تضم دائرة ال‬
‫‪ hardware‬والتى تتحكم فى ال ‪ logic level‬وهى دائرة ال ‪ max232‬واٌضا تضم‬
‫الكومبٌوتر وناتى بها من ال ‪ virtual instruments mode‬على الجانب االٌسر من البروتس‬
‫ولها طرفٌن طرؾ استقبال ‪ RXD‬وٌوصل بطرؾ االرسال ‪ RC6‬فى المٌكرو واٌضا له طرؾ‬
‫ارسال ‪ TXD‬وٌوصل بطرؾ االستقبال ‪ RC7‬فى المٌكرو ‪.‬‬

‫‪439Page‬‬ ‫‪Technical Support 2015‬‬


‫توصٌل الدائرة ‪:‬‬

‫ستجد انه عند كتابتك كلمة ‪ azex 2013‬فى الكومبٌوتر فانه ٌتم كتابتها فى الكومبٌوتر والذى‬
‫ٌمثل الشاشه السمراء وٌتم عرضها ع الشاشة‬
‫لكن كٌؾ أتاكد أن الكلمة ‪ azex 2013‬اللى أرسلتها من الكومبٌوتر للمٌكرو فعال اتكتبت على‬
‫الكومبٌوتر مش أنا اللى كتبتها ؟؟؟؟‬
‫هنجد أنى بكتب ع الكومبٌوتر‬ ‫لو شلنا االمر السابق من الكود‬
‫بٌظهر ع الشاشة كلمة ‪ azex 2013‬ومش بٌظهر ع الكومبٌوتر كما هو موضح بالصورة‬

‫‪441Page‬‬ ‫‪Technical Support 2015‬‬


‫طب فى الحقٌقة هبعت ازاى من الكومبٌوتر للمٌكرو اٌه ال ‪graphical user interface‬‬
‫اللى هبعت بٌها أو هستقبل علٌها هل ‪ notepad‬وال شئ اخر ؟؟؟‬
‫هاستخدم ‪ tool‬موجودة فى المٌكروسى من قائمة ‪ tool‬هختار ‪ UART terminal‬هتظهر‬
‫القائمة‬
‫التالٌة‬
‫‪:‬‬

‫‪441Page‬‬ ‫‪Technical Support 2015‬‬


‫هختار من ‪ com port‬هختار ‪ com 1‬وهختار من ال ‪ band rate‬الرقم اللى كتبته فى‬
‫البرنامج وهو ‪ 9600‬وبعد ما وصلت كل حاجة برمجة المٌكرو ووصلت دائرة ال ‪ max‬عن‬
‫طرٌق كابل السلاير بالكومبٌوتر ووصلت دائرة ال ‪ max‬بالمٌكرو هضؽط ‪ connect‬كما فى‬
‫الصورة اللى عاوز ابعته اكتبه فى الخانة ‪ send‬وأقوله ‪ send‬واللى الكومبٌوتر هٌستقبله‬
‫هٌستقبله فى الخانة ‪. receive‬‬

‫‪442Page‬‬ ‫‪Technical Support 2015‬‬


‫المشروع الثانى‬
‫فكرة البرنامج ‪:‬‬
‫ٌقوم المٌكرو باستقبال بٌانات من الكومبٌوتر واعادة ارسالها الى الكومبٌوتر‬
‫الكود ‪:‬‬

‫‪443Page‬‬ ‫‪Technical Support 2015‬‬


‫فى البداٌة سٌظهر ع الكومبٌوتر كلمة ‪ start‬من خالل االمر‬
‫;)"‪UART1_Write_Text("Start‬‬
‫كذلك قلت له اجعل المؤشر ٌنتقل لسطر جدٌد من خالل األمر التالً‬
‫;)‪UART1_Write(10‬‬
‫;)‪UART1_Write(13‬‬
‫أو ما ٌسمى بلؽة السى ‪ \n‬سطر جدٌد ‪.‬‬

‫توصٌل الدائرة ‪:‬‬

‫قد ٌسأل المبرمج اٌن ال ‪RS232‬؟؟؟؟‬


‫المٌكرو سى ٌوفر لك االداة ‪ virtual terminal‬واٌضا ربط المٌكرو بالكومبٌوتر عن طرٌق ال‬
‫‪ RS232‬والتى تكون فى بروتس بهذا الشكل‬

‫‪444Page‬‬ ‫‪Technical Support 2015‬‬


‫وٌكون اسمها فى البروتس ‪COMPIM‬‬

‫ٌتم توصٌلها كاالتى ‪:‬‬

‫‪445Page‬‬ ‫‪Technical Support 2015‬‬


‫اضؽط على ال ‪ RS232‬ضؽطتٌن بالماوس ستظهر لك شاشة قم بتضبٌط االعدادات التى بها‬
‫كما فى الصورة ‪:‬‬

‫‪446Page‬‬ ‫‪Technical Support 2015‬‬


‫الحظ أختارنا للبروتس ‪ com2‬الننا أخترنا للمٌكرو سى ‪. com1‬‬
‫وٌتم االرسال واالستقبال من االداة الموجودة فى المٌكرو سى‬
‫‪Tools>>USART Terminal‬‬
‫والتى ٌتم من خاللها التاكد من الكود واالرسال واالستقبال من خالل االداة ‪RS232‬‬

‫وهذة االداة تحتاج الى منفذٌن ‪ COM1 & COM2‬واحد للمٌكروسى والتانى لل ‪ RS232‬ع‬
‫البروتس‬
‫البرنامج الذى ٌقوم بانشاء المنفذٌن هو‬

‫‪447Page‬‬ ‫‪Technical Support 2015‬‬


Virtual Serial Ports Driver 6.9
add pair ‫نقوم بتسطٌبة الى ان تظهر الصورة التالٌة نضؽط على‬
‫سٌظهر االتى‬

448Page Technical Support 2015


‫للـتأكد من وجود المنفذٌن الذهاب لمنافذ الجهاز عن طرٌق ضؽط ‪ٌ click‬مٌن بالماوس على ‪my‬‬
‫‪ computer‬هتظهرقائمة اختار منها ‪ properties‬ستظهر صفحة اختار منها ‪device‬‬
‫‪ manger‬الموجودة على ٌسار الصفحة ستظهر لك صفحة اخرى بهذا الشكل ‪:‬‬

‫‪449Page‬‬ ‫‪Technical Support 2015‬‬


‫اختار منها ‪ ports‬وتاكد من وجود الموجود بالصورة التالٌه ‪:‬‬

‫بعد ذلك نذهب للمٌكروسً لضبط اإلعدادات ونختار لٌه ‪ port‬معٌن ولٌكن ‪com1‬‬

‫‪451Page‬‬ ‫‪Technical Support 2015‬‬


‫اذهب للبروتس واضؽط ‪ run‬وشاهد عملٌة االرسال واالستقبال‬
‫الحظ ال تضؽط ‪ run‬فى البروتس قبل أن تضؽط ‪ connect‬فى أداة المٌكرو سى‬

‫عند تنفٌذ البرنامج البرنامج التانى ٌظهر ع المٌكرو سى ‪:‬‬

‫‪451Page‬‬ ‫‪Technical Support 2015‬‬


452Page Technical Support 2015
‫المشروع الثالث‬
‫فكرة البرنامج ‪:‬‬
‫برنامج عندما ٌرسل الكومبٌوتر للمٌكرو حرؾ ال ‪ٌ g‬قوم باضاءة لٌد‬
‫الكود ‪:‬‬

‫الحظ ‪ pin RC0‬خرج هنضع علٌها اللٌد و ‪ PIN RC7‬دخل النها تستقبل من الكومبٌوتر لذا‬
‫ٌجب تعرفها فى ‪ TRIS‬بانها ‪ٌ 1‬عنى دخل ‪.‬‬

‫‪453Page‬‬ ‫‪Technical Support 2015‬‬


‫توصٌل الدائرة ‪:‬‬

‫البرنامج الرابع‬
‫فكرة البرنامج ‪:‬‬
‫ٌقوم ال ‪ user‬بادخال كلمة سر ‪ az_ex‬الى الكومبٌوتر فاذا ادخلها ٌقوم الكومبٌوتر باظهار‬
‫رسالة لل ‪ user‬مكتوب فٌها ‪ yes welcome azex orgnizer‬واذا لم ٌدخل االسم‬
‫الصحٌح ٌظهر الكومبٌوتر رساله مكتوب فٌها ‪. wrong enter right name‬‬
‫الكود ‪:‬‬

‫‪454Page‬‬ ‫‪Technical Support 2015‬‬


‫نقوم بتعرٌؾ متؽٌر ‪ x‬مكون من ‪ 5‬حروؾ عدد حروؾ كلمة ‪ az_ex‬فى البداٌة ٌقرأ المٌكرو‬
‫الحروؾ المدخله عن طرٌق الكومبٌوتر والتى تدخل حرؾ ٌلٌه حرؾ لذا نقوم بزٌادة قٌمة‬
‫المتؽٌر ‪ y‬بمقدار واحد الى ان ٌتم ادخال ال ‪ 5‬حروؾ فاذا ساوت ‪ y==5‬فٌقوم المٌكرو باختبار‬
‫الكلمة فاذا كانت ‪ٌ az_ex‬بعث برساله للكومبٌوتر ‪ yes …..‬وتركنا مسافة قبل ‪ yes‬حتى ال‬

‫‪455Page‬‬ ‫‪Technical Support 2015‬‬


‫ٌكون الكالم متشابك على شاشة الكومبٌوتر ولكن اذا لم ٌدخل ال ‪ user‬كلمة ‪ٌ az_ex‬تحقق‬
‫شرط ‪ else‬وٌظهر رسالة ‪ٌ wrong….‬طلب من المستخدم ادخال االسم الصحٌح وهكذا الحظ‬
‫قمنا بكتابة ;‪ y=0‬وذلك الن ‪ y=5‬فاذا لم نكتب هذا االمر فال ٌستطٌع المستخدم ادخال االسم مرة‬
‫اخرى ‪.‬‬

‫ذ‪ٛ‬ص‪ ً١‬اٌذائشج ‪:‬‬

‫‪456Page‬‬ ‫‪Technical Support 2015‬‬


Azex’13 microcontroller
Introduction for Embedded Systems
new microcontroller book (artronix)
PIC Microcontrollers - Programming in C
mikroc pro for pic
Interfacing PIC Microcontrollers Embedded
Microcontroller and Embedded Systems by ALIMAZIDI.
‫منتدى األلكترونات العصرٌه‬
‫منتدى القرٌه االلكترونٌه‬
‫ حمدى سلطان‬.‫شرح المٌكروكنترولر لـ م‬
‫ احمد سمٌر فاٌد‬.‫كتاب المٌكروكنترولر لـ م‬

AZEX’15
Technical Support Committee
Contact Us:
technicalcommitteeazex2015@gmail.com
01222262200

...‫ولو كنت وحدك‬

457Page Technical Support 2015

You might also like