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

   

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



البرنامج :
بعد كتابة التعليقات لتوثيق التدريب نتبع الخطوات التالية :
1- نبدأ بإنشاء دالة الإعدادات اللازمة للتدريب :

كود:
void init_port(void) { ANSEL = 0x00; //set port as digital I/O , not analog input ADCON0 = 0x00; //shut off the A/D converter(default) CMCON = 0x07; //shut off the comparator VRCON = 0x00; //shut off the voltage reference(default) TRISIO = 0x08; // 0b001000 = GP3 bit only as input GPIO = 0x00; //make all pins low "0" }

2- ثم إعلان متغير من نوع البت لحفظ حالة المفتاح السابقة لمقارنتها بحالته الراهنة :

كود:
bit oldstate; // Old state flag

3- وتبدا الدالة الرئيسية باستدعاء دالة الإعدادات وتصفير بت متغير الحالة السابقة للمفتاح لتكون بصفر وندخل إلى حلقة التكرار :

كود:
void main() { init_port(); oldstate = 0; do {


4- نبدا الحلقة باختبار حالة المفتاح ( التحول إلى الحالة المرتفعة) عن طريق وضع "عائد" دالة المفتاح كشرط لعبارة if . إذا تحقق الشرط (عند الضغط على المفتاح يكون عائد دالة المفتاح بواحد ويكون عائدها بواحد أو true ) يتم تنفيذ عبارة الشرط وهى تحديث بت متغير الحالة السابقة للمفتاح ليكون بواحد كإشارة أو علامة على حالة المفتاح المضغوط (التحول من الحالة المنخفضة إلى الحالة المرتفعة تبعا لصيغة دالة المفتاح ) . لاحظ أن دالة المفتاح تحتوى على زمن تاخير 20 ملى ثانية لعلاج ارتدادات المفتاح .



كود:
if (Button(&GPIO, 3, 20, 1)) { // Detect logical one ie pressed button oldstate = 1; // Update flag

5- مرة أخرى يتم عمل اختبار المفتاح ( التحول للحالة المنخفض) وتشكيل عبارة شرط if . الشرط هذه المرة هو نتيجة عملية AND ( ورمزها && ) بين حالة المفتاح السابقة والمخزنة ببت الحالة السابقة للمفتاح وبين نتيجة دالة المفتاح (عند التحول للوضع المنخفض) . فإذا كانت الحالة السابقة للمفتاح هى الحالة المضغوطة ( المرتفعة) وتلتها حالة راهنة غير مضغوطة ( منخفضة) كانت نتيجة الشرط صواب true ويتم تنفيذ عبارة الشرط , حيث يتم تحويل حالة أطراف المنفذ وتصفير بت متغير الحالة السابقة للمفتاح . بعبارة أخرى عند الضغط على المفتاح يتم تذكر هذه الحالة , ثم بعد تحرير المفتاح يتم تغيير حالة أطراف المنفذ من حالة الفصل off إلى حالة التوصيل on , وفى الضغطة التالية ثم التحرير يتم التحويل من حالة التوصيل on إلى حالة الفصل off وهلم جرا .


كود:
if (oldstate && Button(&GPIO, 3,20, 0)) { // Detect one-to-zero transition ie press then release GPIO = ~GPIO; // Invert GPIO oldstate = 0; // Update flag } // beginning of a repeat loop
البرنامج :

اعلانات

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




كود:
//EX3:Button : ON-OFF All output using PIC12F675
//4MHz internal clock
//Oscillator : Internal RC No Clock
//Master Clear Enable : Disable
//Eng:F.Abdelaziz
//Date :03-01-2013*/

void init_port(void)
{
ANSEL = 0x00;         //set port as digital I/O , not analog input
ADCON0 = 0x00;      //shut off the A/D converter(default)
CMCON = 0x07;       //shut off the comparator
VRCON = 0x00;        //shut off the voltage reference(default)
TRISIO = 0x08;         // 0b001000  = GP3 bit only as input
GPIO = 0x00;            //make all pins low "0"
}

bit oldstate;              // Old state flag
void main() {
init_port();
oldstate = 0;
  do {
    if (Button(&GPIO, 3, 20, 1)) {  // Detect logical one ie pressed button
      oldstate = 1;                // Update flag
    }
    if (oldstate && Button(&GPIO, 3,20, 0)) {
      // Detect one-to-zero transition ie press then release
      GPIO = ~GPIO;               // Invert GPIO
      oldstate = 0;               // Update flag
    }                     // beginning of a repeat loop
  }  while(1);           // endless loop
}

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

ENG. B.A
:: مهندس ::
تاريخ التسجيل: Mar 2011
الدولة: egypt
المشاركات: 8
نشاط [ ENG. B.A ]
قوة السمعة:
قديم 21-01-2013, 04:51 PM المشاركة 11   
افتراضي


السلام عليكم بارك الله في حضرتك الموضوع انا كنت محتاجه جدا ولكن عندي سؤال حضرتك في التجربه الثانيه وهي اضاءة اربع ليدات في الاعدادات جعلت TRISIO = 0X00 بالرغم من ان GP3 - دخل فقط حتي حضرتك في التجربه الاولي عرفتها 08 TRISIO = 0X


ENG. B.A
:: مهندس ::
تاريخ التسجيل: Mar 2011
الدولة: egypt
المشاركات: 8
نشاط [ ENG. B.A ]
قوة السمعة:
قديم 21-01-2013, 05:01 PM المشاركة 12   
x4 لو سمحت سؤال


بارك الله في حضرتك
في التجربه الثانيه وهي الاضواء المتحركه حضرتك في الاعدادت جعلت TRISIO=0X00
بالرغم من GP3 دخل فقط
يعني المفروض نخليها TRISIO=0X08 مثل التجربه الاولي


الصورة الرمزية ميكرومان
ميكرومان
:: عضو فضي ::
تاريخ التسجيل: Oct 2012
المشاركات: 372
نشاط [ ميكرومان ]
قوة السمعة:
قديم 21-01-2013, 05:27 PM المشاركة 13   
افتراضي


الله يجزيك خير اخي الرائع علي مجهوداتك وتذكر اخي

خير الناس انفعهم للناس


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


بارك الله في حضرتك
في التجربه الثانيه وهي الاضواء المتحركه حضرتك في الاعدادت جعلت TRISIO=0X00
بالرغم من GP3 دخل فقط
يعني المفروض نخليها TRISIO=0X08 مثل التجربه الاولي
أخى الكريم شكرا جزيلا لك
بارك الله فيك :

شكرا للاستفسار :

بالرجوع إلى الداتا شيت , الشكل الخاص بسجل التحكم فى اتجاه أطراف المفذ TRISIO يتضح :

* أن البت <3> بت مخصصة للقراءة فقط (R/1) وأنها دائما تقرأ بواحد .

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

* باقى البتات قابلة للكتابة والقراءة (W/R) ويتم إعدادها بواسطة المستخدم وبالتالى وللاختصار يمكن تجاوزا كتابة TRISIO=0 عند إعداد باقى جميع البتات كمخارج (لكن داخليا تظل البت <3> دخل , كما يمكن كتابتها بصورة أكثر تعبيرا ليس إلا TRISIO=0X08 .

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


ENG. B.A
:: مهندس ::
تاريخ التسجيل: Mar 2011
الدولة: egypt
المشاركات: 8
نشاط [ ENG. B.A ]
قوة السمعة:
قديم 21-01-2013, 07:49 PM المشاركة 15   
ha


بشمهندس انا كتبت التجربه الاولي في mickroc واستخمدمت protues والبرنامج صحيح عملت له buit وهذه الرساله
0 103 Finished successfully: 21 &#237;&#228;&#199;&#237;&#209; 2013, 18:32:33 LED ONLY.mcppi

لكن لا يعمل في protues ولا ادري كيفية وضع الصوره لدائره علي بروتس علي الموقع .
هل لا يعمل بسبب اعدادات pic12 مثل osc - mclr

sbit LED at gpio.b0;

void main()
{
ANSEL = 0x00; //set port as digital I/O , not analog input
ADCON0 = 0x00; //shut off the A/D converter(default)
CMCON = 0x07; //shut off the comparator
VRCON = 0x00; //shut off the voltage reference(default)
TRISIO = 0x08; //GP3 input , rest all output
GPIO = 0x00; //make all pins low "0"
while(1)
{
LED = 0 ; //LED off
delay_ms(500); // half sec delay
LED = 1 ; //LED on
delay_ms(500); // half sec delay
}
}

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


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


بشمهندس انا كتبت التجربه الاولي في mickroc واستخمدمت protues والبرنامج صحيح عملت له buit وهذه الرساله
0 103 Finished successfully: 21 &#237;&#228;&#199;&#237;&#209; 2013, 18:32:33 LED ONLY.mcppi

لكن لا يعمل في protues ولا ادري كيفية وضع الصوره لدائره علي بروتس علي الموقع .
هل لا يعمل بسبب اعدادات pic12 مثل osc - mclr

sbit LED at gpio.b0;

void main()
{
ANSEL = 0x00; //set port as digital I/O , not analog input
ADCON0 = 0x00; //shut off the A/D converter(default)
CMCON = 0x07; //shut off the comparator
VRCON = 0x00; //shut off the voltage reference(default)
TRISIO = 0x08; //GP3 input , rest all output
GPIO = 0x00; //make all pins low "0"
while(1)
{
LED = 0 ; //LED off
delay_ms(500); // half sec delay
LED = 1 ; //LED on
delay_ms(500); // half sec delay
}
}

شكرا علي مجهود حضرتك
أخى الكريم

سبب عدم التشغيل على البروتيس يرجع لعدم توافق الإعدادات , لذلك وكما تم ذكرة فى تعليقات البرامج :
ادخل على قائمة المشروع Project ومنها إلى خيار تحرير المشروع Edit Project حيث يتم :

1- تعديل خيار المذبذب Oscillator ليكون
Internal RC No Clock

2- تعديل خيار تمكين Master Clear ليكون Disabled

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



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