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

   

A-M-S
:: مهندس جيد ::
تاريخ التسجيل: May 2014
المشاركات: 242
نشاط [ A-M-S ]
قوة السمعة:
قديم 19-09-2015, 12:28 PM المشاركة 9   
افتراضي



تفضل اخي .
كود:
char x=0;
void main()
 {cmcon=7;
 trisa=0b00101111;trisb=0;portb=0;
 while(1){if(porta.f0==0){while(porta.f0==0){}portb.f0=~portb.f0;portb.f1=~portb.f0; }
          if(porta.f1==0){while(porta.f1==0){}portb.f2=~portb.f2;portb.f3=~portb.f2; }
          if(porta.f2==0){while(porta.f2==0){}portb.f4=~portb.f4;portb.f5=~portb.f4; }
          if(porta.f3==0){while(porta.f3==0){}x=~x;portb=x; }
          }

}
اخي حيدر بارك الله فيك و جعله في ميزان حسناتك .. جاري التجربه و ان شاء الله اوافيك بالنتيجه ...الله يكرمك

اعلانات

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


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

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

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

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

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

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



إليك برنامج قد يفى بالغرض بشكل مؤقت ولقد تم تجربته على برنامج بروتيس :
كود:
 #define ON 1
#define OFF 0
//====================
#define SW1 0//PORTA.F0
#define SW2 1//PORTA.F1
#define SW3 2//PORTA.F2
#define SW4 3//PORTA.F3
//========================
#define LED1 PORTB.F0
#define LED2 PORTB.F1
#define LED3 PORTB.F2
#define LED4 PORTB.F3
#define LED5 PORTB.F4
#define LED6 PORTB.F5
//=====================
short counter1=0,counter2=0,counter3=0,counter4=0;
bit oldstate1,oldstate2,oldstate3,oldstate4;
void main()
{
CMCON=7;
TRISA=0x00001111;
TRISB=0;
PORTA=0;
PORTB=0;
//==============
while (1)
{
//===============SW1=============================
if (Button(&PORTA, SW1, 20, 1))oldstate1 = 1;
if (oldstate1 && Button(&PORTA, SW1, 20, 0))
{
oldstate1 = 0;
counter1++;
if(counter1==3) counter1=0;
}//end if
//======================
switch (counter1)
{
case 0: LED1=OFF; LED2=OFF;delay_ms(100); break;
case 1: LED1=ON;  LED2=OFF;delay_ms(100); break;
case 2: LED1=OFF; LED2=ON;delay_ms(100); break;
//default : LED1=OFF; LED2=OFF; break;
}//end switch 1
//=============SW2================
if (Button(&PORTA, SW2, 20, 1))oldstate2 = 1;
if (oldstate2 && Button(&PORTA, SW2, 20, 0))
{
oldstate2 = 0;
counter2++;
if(counter2==3) counter2=0;
}//end if
//======================
switch (counter2)
{
case 0: LED3=OFF; LED4=OFF;delay_ms(100); break;
case 1: LED3=ON;  LED4=OFF;delay_ms(100); break;
case 2: LED3=OFF; LED4=ON;delay_ms(100); break;
//default : LED3=OFF; LED4=OFF; break;
}//end switch 2
//============SW3=================
if (Button(&PORTA, SW3, 20, 1))oldstate3 = 1;
if (oldstate3 && Button(&PORTA, SW3, 20, 0))
{
oldstate3 = 0;
counter3++;
if(counter3==3) counter3=0;
}//end if
//======================
switch (counter3)
{
case 0: LED5=OFF; LED6=OFF;delay_ms(100); break;
case 1: LED5=ON;  LED6=OFF;delay_ms(100); break;
case 2: LED5=OFF; LED6=ON;delay_ms(100); break;
//default : LED5=OFF; LED6=OFF; break;
}//end switch 3
//============SW4=============
if (Button(&PORTA, SW4, 20, 1))oldstate4 = 1;
if (oldstate4 && Button(&PORTA, SW4, 20, 0))
{
oldstate4 = 0;
counter4++;
if(counter4==3) counter4=0;
}//end if
//======================
switch (counter4)
{
case 0:  break;
case 1: PORTB=0b00111111;delay_ms(100); break;
case 2: PORTB=0;delay_ms(100); break;
//default : 
}//end switch 4
//====================


}//end while
}//end main
فى انتظار الرد لتعديل البرنامج حسب المطلوب تماما ولحسم مشكلة التداخل (التضارب) بين المفتاح الرابع وباقى المفاتيح


التعديل الأخير تم بواسطة : F.Abdelaziz بتاريخ 19-09-2015 الساعة 02:44 PM

A-M-S
:: مهندس جيد ::
تاريخ التسجيل: May 2014
المشاركات: 242
نشاط [ A-M-S ]
قوة السمعة:
قديم 20-09-2015, 02:12 PM المشاركة 12   
افتراضي



إليك برنامج قد يفى بالغرض بشكل مؤقت ولقد تم تجربته على برنامج بروتيس :
كود:
 #define ON 1
#define OFF 0
//====================
#define SW1 0//PORTA.F0
#define SW2 1//PORTA.F1
#define SW3 2//PORTA.F2
#define SW4 3//PORTA.F3
//========================
#define LED1 PORTB.F0
#define LED2 PORTB.F1
#define LED3 PORTB.F2
#define LED4 PORTB.F3
#define LED5 PORTB.F4
#define LED6 PORTB.F5
//=====================
short counter1=0,counter2=0,counter3=0,counter4=0;
bit oldstate1,oldstate2,oldstate3,oldstate4;
void main()
{
CMCON=7;
TRISA=0x00001111;
TRISB=0;
PORTA=0;
PORTB=0;
//==============
while (1)
{
//===============SW1=============================
if (Button(&PORTA, SW1, 20, 1))oldstate1 = 1;
if (oldstate1 && Button(&PORTA, SW1, 20, 0))
{
oldstate1 = 0;
counter1++;
if(counter1==3) counter1=0;
}//end if
//======================
switch (counter1)
{
case 0: LED1=OFF; LED2=OFF;delay_ms(100); break;
case 1: LED1=ON;  LED2=OFF;delay_ms(100); break;
case 2: LED1=OFF; LED2=ON;delay_ms(100); break;
//default : LED1=OFF; LED2=OFF; break;
}//end switch 1
//=============SW2================
if (Button(&PORTA, SW2, 20, 1))oldstate2 = 1;
if (oldstate2 && Button(&PORTA, SW2, 20, 0))
{
oldstate2 = 0;
counter2++;
if(counter2==3) counter2=0;
}//end if
//======================
switch (counter2)
{
case 0: LED3=OFF; LED4=OFF;delay_ms(100); break;
case 1: LED3=ON;  LED4=OFF;delay_ms(100); break;
case 2: LED3=OFF; LED4=ON;delay_ms(100); break;
//default : LED3=OFF; LED4=OFF; break;
}//end switch 2
//============SW3=================
if (Button(&PORTA, SW3, 20, 1))oldstate3 = 1;
if (oldstate3 && Button(&PORTA, SW3, 20, 0))
{
oldstate3 = 0;
counter3++;
if(counter3==3) counter3=0;
}//end if
//======================
switch (counter3)
{
case 0: LED5=OFF; LED6=OFF;delay_ms(100); break;
case 1: LED5=ON;  LED6=OFF;delay_ms(100); break;
case 2: LED5=OFF; LED6=ON;delay_ms(100); break;
//default : LED5=OFF; LED6=OFF; break;
}//end switch 3
//============SW4=============
if (Button(&PORTA, SW4, 20, 1))oldstate4 = 1;
if (oldstate4 && Button(&PORTA, SW4, 20, 0))
{
oldstate4 = 0;
counter4++;
if(counter4==3) counter4=0;
}//end if
//======================
switch (counter4)
{
case 0:  break;
case 1: PORTB=0b00111111;delay_ms(100); break;
case 2: PORTB=0;delay_ms(100); break;
//default : 
}//end switch 4
//====================


}//end while
}//end main
فى انتظار الرد لتعديل البرنامج حسب المطلوب تماما ولحسم مشكلة التداخل (التضارب) بين المفتاح الرابع وباقى المفاتيح
كل الشكر لحضرتك استاذ ...الجزء الاول اللي حضرتك عملته سابقا كان هو المطلوب 100% و ما اردته من حضرتك ان تكمل لي باقي المفاتيح بنفس الطريقه باستثناء المفتاح الرابع الذي يقوم بتشغيل البورت و اطفائه بالكامل .. و الغرض العملي من الموضوع انني اريد ان اقوم بتبديل كل ليد بريلي و تركيب dc motor على عدد 2 من الريلي (بدل الليد) بحيث نقوم بتشغيل المتور في كلا الاتجاهين (كل ضغطه على المفتاح يكون لها اتجاه للموتور) و هذه المواتير موجوده في شبابيك البيت عندي اردت من خلال الدائره ان اقوم بفتحها و تسكيرها عن طريق rf remote , و ما اردته من المفتاح الرابع ان يفتح جميع الشبابيك و يسكرها بكبسه واحده ...و سبق ان قمت بعمل هذه المشروع عمليا و كانت النتيجه ناجحه 100% و الحمد لله و لكن انا عملتها انه كل شباك له مفتاحين واحد يقوم بتسكيره و الثاني يقوم بفتح .. اما ما اردت هنا ان اقوم باتتسكير و الفتح عن طريق مفتاح واحد و ليس اثنين كما عملته انا بالسابق و ذلك بسبب وجود اربه مفاتيح فقط في الريموت .. يعني باختصار اردت ان استغل عدد مفاتيح اكبر في الريموت ... و دمتم اخي ...و احب ان اشكر من خلال حضرتك اخي حيدر علاج حسن على الكود اللي عمللي اياه حيث انه قام بالنتيجه المطلوبه.. بارك الله بكما


A-M-S
:: مهندس جيد ::
تاريخ التسجيل: May 2014
المشاركات: 242
نشاط [ A-M-S ]
قوة السمعة:
قديم 20-09-2015, 02:30 PM المشاركة 13   
افتراضي


تفضل اخي .
كود:
char x=0;
void main()
 {cmcon=7;
 trisa=0b00101111;trisb=0;portb=0;
 while(1){if(porta.f0==0){while(porta.f0==0){}portb.f0=~portb.f0;portb.f1=~portb.f0; }
          if(porta.f1==0){while(porta.f1==0){}portb.f2=~portb.f2;portb.f3=~portb.f2; }
          if(porta.f2==0){while(porta.f2==0){}portb.f4=~portb.f4;portb.f5=~portb.f4; }
          if(porta.f3==0){while(porta.f3==0){}x=~x;portb=x; }
          }

}
بارك الله فيك اخي حيدر ..فعلا قمت بتجربة البرنامج و اعطى النتيجه المطلوبه .. بارك الله فيك و لك و رزققك من حيث لاتحتسب ...كذلك الاخ عبد العزيز ما قصًر الله يجزيكم كل خير ... اخي حيدر ماذا لو اردت عمل تأخير معين لكل ليد بحيث يضيئ دقيقه مثلا و ينطفئ؟؟اي يبقى الكود كما هو ولكن بدلا من ان يضيئ الليد على طول نعمل له فتره زمنيه معينه و ينطفئ و لتكن دقيقه مثلا؟؟ delay_ms(60000;portp.f0=0 و لكن ليس البورت بالكامل .. فقط لكل ليد...و دمت اخي ...


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


بارك الله فيك اخي حيدر ..فعلا قمت بتجربة البرنامج و اعطى النتيجه المطلوبه .. بارك الله فيك و لك و رزققك من حيث لاتحتسب ...كذلك الاخ عبد العزيز ما قصًر الله يجزيكم كل خير ... اخي حيدر ماذا لو اردت عمل تأخير معين لكل ليد بحيث يضيئ دقيقه مثلا و ينطفئ؟؟اي يبقى الكود كما هو ولكن بدلا من ان يضيئ الليد على طول نعمل له فتره زمنيه معينه و ينطفئ و لتكن دقيقه مثلا؟؟ delay_ms(60000;portp.f0=0 و لكن ليس البورت بالكامل .. فقط لكل ليد...و دمت اخي ...

الحمد لله على الوصول إلى المطلوب

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


التعديل الأخير تم بواسطة : F.Abdelaziz بتاريخ 20-09-2015 الساعة 03:07 PM

الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 9,848
نشاط [ حيدر علاج حسن ]
قوة السمعة:
قديم 20-09-2015, 05:25 PM المشاركة 15   
افتراضي


بارك الله فيك اخي حيدر ..فعلا قمت بتجربة البرنامج و اعطى النتيجه المطلوبه .. بارك الله فيك و لك و رزققك من حيث لاتحتسب ...كذلك الاخ عبد العزيز ما قصًر الله يجزيكم كل خير ... اخي حيدر ماذا لو اردت عمل تأخير معين لكل ليد بحيث يضيئ دقيقه مثلا و ينطفئ؟؟اي يبقى الكود كما هو ولكن بدلا من ان يضيئ الليد على طول نعمل له فتره زمنيه معينه و ينطفئ و لتكن دقيقه مثلا؟؟ delay_ms(60000;portp.f0=0 و لكن ليس البورت بالكامل .. فقط لكل ليد...و دمت اخي ...
حياك الله اخي الكريم انت و المهندس فتح الله واشكركم جزيل الشكر ...
لم توضح فيما يخص المفتاح الرابع اي عندما يعمل المنفذ بالكامل ...
عموما جرب التعديل واخبرني

كود:
char x=0;
int i,j,k;
void main()
 {cmcon=7;
 trisa=0b00101111;trisb=0;portb=0;
 while(1){delay_ms(100);
          if(porta.f0==0){while(porta.f0==0){}portb.f0=~portb.f0;portb.f1=~portb.f0; }
          if(porta.f1==0){while(porta.f1==0){}portb.f2=~portb.f2;portb.f3=~portb.f2; }
          if(porta.f2==0){while(porta.f2==0){}portb.f4=~portb.f4;portb.f5=~portb.f4; }
          if(porta.f3==0){while(porta.f3==0){}x=~x;portb=x; }
          
          if(portb.f0)i++;if(i>500){portb.f0=0;portb.f1=1;i=0;}
          if(portb.f2)j++;if(j>500){portb.f2=0;portb.f3=1;j=0;}
          if(portb.f4)k++;if(k>500){portb.f4=0;portb.f5=1;k=0;}
          }

}


A-M-S
:: مهندس جيد ::
تاريخ التسجيل: May 2014
المشاركات: 242
نشاط [ A-M-S ]
قوة السمعة:
قديم 22-09-2015, 05:58 PM المشاركة 16   
افتراضي


حياك الله اخي الكريم انت و المهندس فتح الله واشكركم جزيل الشكر ...
لم توضح فيما يخص المفتاح الرابع اي عندما يعمل المنفذ بالكامل ...
عموما جرب التعديل واخبرني

كود:
char x=0;
int i,j,k;
void main()
 {cmcon=7;
 trisa=0b00101111;trisb=0;portb=0;
 while(1){delay_ms(100);
          if(porta.f0==0){while(porta.f0==0){}portb.f0=~portb.f0;portb.f1=~portb.f0; }
          if(porta.f1==0){while(porta.f1==0){}portb.f2=~portb.f2;portb.f3=~portb.f2; }
          if(porta.f2==0){while(porta.f2==0){}portb.f4=~portb.f4;portb.f5=~portb.f4; }
          if(porta.f3==0){while(porta.f3==0){}x=~x;portb=x; }
          
          if(portb.f0)i++;if(i>500){portb.f0=0;portb.f1=1;i=0;}
          if(portb.f2)j++;if(j>500){portb.f2=0;portb.f3=1;j=0;}
          if(portb.f4)k++;if(k>500){portb.f4=0;portb.f5=1;k=0;}
          }

}
تسلم اخي حيدر سأجرب و اوافيك بالنتيجه و لكن ان شاء الله بعد عيد الاضحى المبارك .. كل عام و انتم بألف خير ينعاد علينا و عليكم بالخير و اليمن و البركات ....



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