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

   

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 619
نشاط [ مشتاق الله ]
قوة السمعة:
قديم 27-01-2016, 10:54 PM المشاركة 9   
sun المؤمن لا ييئس



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

السلام عليكم و رحمة الله و بركاته


لله الفضل و المنة شكلك رجل صالح لانى بفضل الله غيرت شئ صغير جدا فاشتغلت
الدائرة بدون تعديل يذكر و لكن بزيادة الازمنة , و اليك الزيادات :


1- يفضل تغيير السطر للحلقة بالشكل التالى :

كود:
 while (kp && (kp!=4) && (kp!=12))
2- اضافة الازمنة التالية :

كود:
  

   if(portb.f4==1){x++; if(x==10){j++; x=0;}if(x==z){x++;}delay_ms(250);}
   if(portb.f5==1){m++; if(z==10){n++; m=0;}if(m==x){m++;}delay_ms(250);}
   
   portb=x; porta=2; delay_ms(10);      porta=0;    portb=j; porta=1; delay_ms(10);    porta=0;
   portb=m; porta=8; delay_ms(10);      porta=0;    portb=n; porta=4; delay_ms(10);    porta=0;
اذا اشتغلت الدائرة معك تمام فالحمد لله , و ان ظهر شيء محتاج مساعدة
ارفعها بالتعليقات و شرح ما تريد بالتفصيل .


و الله الموفق و المستعان
اللهم ادخلنا برحمتك فى عبادك الصالحين المصلحين



اعلانات

magdy_3
:: مهندس متميز ::
تاريخ التسجيل: Aug 2006
الدولة: Philippines
المشاركات: 339
نشاط [ magdy_3 ]
قوة السمعة:
قديم 28-01-2016, 12:34 AM المشاركة 10   
افتراضي



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

السلام عليكم و رحمة الله و بركاته

الافضل برمجيا لا يكتب امر بدون اقواس و من قال ان البروسيسور يفهم ما تفهمه فى عقلك
اخى يجب التعامل مع البروسيسور على انه الة غبية , ويمكن قراءة و فهم الامر السابق بطريقتين كالتالى :

كود:
     while ( kp && (kp!=4) && (kp!=12) )


وهذا ما تقصده بينما كان يمكن قراءته كالتالى :

كود:
       while ( ( kp && kp )   !=  (4 && kp!=12) )

هذا ما اقصده و لله الفضل و المنة .
فايهما سينفذه البروسيسور ؟؟؟؟ و الاثنين صحيحين بينما تقصد شئ البروسيسور ينفذ شئ اخر و الخطأ عندنا نحن .

و الله الموفق و المستعان

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

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

magdy_3
:: مهندس متميز ::
تاريخ التسجيل: Aug 2006
الدولة: Philippines
المشاركات: 339
نشاط [ magdy_3 ]
قوة السمعة:
قديم 28-01-2016, 12:41 AM المشاركة 11   
افتراضي


السلام عليكم شكرا لكل اضافاتكم المفيدة
حتى الان انا اريد دمج كود الكيباد مع الكود الرئيسي هدا هو المشكل الدي ان عاجز عن حله لتوضيح اظن كود الكيباد يؤثر على عملية multiplexing على العارضات فهل من حل وجزاكم الله مع اني سارفع ملف من جديد مع comment امام كل دوارة من اجل اخي في الله {مشتاق الله}
السلام عليكم
لا اخى العزيز كود الكى باد لا يؤثر على عملية multiplexing
تفضل اخى دائرة multiplexing باستخدام الكى باد و بيك pic16f628
واربعة سيفن سيجما
http://www.up-00.com/?3Oof


badr nahed
:: مهندس ::
تاريخ التسجيل: Sep 2015
المشاركات: 23
نشاط [ badr nahed ]
قوة السمعة:
قديم 29-01-2016, 06:24 PM المشاركة 12   
Talking


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

السلام عليكم و رحمة الله و بركاته


لله الفضل و المنة شكلك رجل صالح لانى بفضل الله غيرت شئ صغير جدا فاشتغلت
الدائرة بدون تعديل يذكر و لكن بزيادة الازمنة , و اليك الزيادات :


1- يفضل تغيير السطر للحلقة بالشكل التالى :

كود:
 while (kp && (kp!=4) && (kp!=12))
2- اضافة الازمنة التالية :

كود:
  

   if(portb.f4==1){x++; if(x==10){j++; x=0;}if(x==z){x++;}delay_ms(250);}
   if(portb.f5==1){m++; if(z==10){n++; m=0;}if(m==x){m++;}delay_ms(250);}
   
   portb=x; porta=2; delay_ms(10);      porta=0;    portb=j; porta=1; delay_ms(10);    porta=0;
   portb=m; porta=8; delay_ms(10);      porta=0;    portb=n; porta=4; delay_ms(10);    porta=0;
اذا اشتغلت الدائرة معك تمام فالحمد لله , و ان ظهر شيء محتاج مساعدة
ارفعها بالتعليقات و شرح ما تريد بالتفصيل .


و الله الموفق و المستعان
اللهم ادخلنا برحمتك فى عبادك الصالحين المصلحين


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

وهل يمكن ان اجد حل في طريقة interrupts .


التعديل الأخير تم بواسطة : badr nahed بتاريخ 29-01-2016 الساعة 08:05 PM

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 619
نشاط [ مشتاق الله ]
قوة السمعة:
قديم 29-01-2016, 09:09 PM المشاركة 13   
sun


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

السلام عليكم و رحمة الله و بركاته

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

بفضل الله لاحظت انك لو غيرت هذا الزمن التالى ستغير زمن التاخير فجربه بالقيمة التالية :

كود:
   for(i=0;i<12;i++) {
                  if (kp)
                  x=g[kp];
                  j=0;
                  delay_ms(50);
                  kp=keypad_key_click();
                  if(kp&&x) {j=x;
                             x=g[kp];
                             kp=0;
                             break;
                         }
                }
ثم لما حلقة for تتغير من 0 الى 11 فقط. ؟

و الله الموفق و المستعان
اللهم اذن لدينك ان يحكم الارض و ان يسود





badr nahed
:: مهندس ::
تاريخ التسجيل: Sep 2015
المشاركات: 23
نشاط [ badr nahed ]
قوة السمعة:
قديم 30-01-2016, 01:17 AM المشاركة 14   
Red face


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

السلام عليكم و رحمة الله و بركاته

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

بفضل الله لاحظت انك لو غيرت هذا الزمن التالى ستغير زمن التاخير فجربه بالقيمة التالية :

كود:
   for(i=0;i<12;i++) {
                  if (kp)
                  x=g[kp];
                  j=0;
                  delay_ms(50);
                  kp=keypad_key_click();
                  if(kp&&x) {j=x;
                             x=g[kp];
                             kp=0;
                             break;
                         }
                }
ثم لما حلقة for تتغير من 0 الى 11 فقط. ؟

و الله الموفق و المستعان
اللهم اذن لدينك ان يحكم الارض و ان يسود



تفضل اخي ملف به المطلوب مع الشرح بالتفصيل http://www.mediafire.com/download/tm...my_project.rar
شرح لحلقة for
الكيباد معدل لاستعمال مرتان على التوالي ادا ظغطت على رقم احادي سيمهلك بعض الوقت وادا ظغطت في دلك الوقت
سيتحول الرقم الاول لعشرات والرقم التاني للوحدات وفي حالة عدم الظغط في الوقت المحدد سيعتبر رقم الاول وحدات ويظهر الرقم صفر في العشرات وهكدا
دور حلقة for هو تحديد الوقت المحدد بعد الظغطة الاولة


التعديل الأخير تم بواسطة : badr nahed بتاريخ 30-01-2016 الساعة 01:27 AM

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 619
نشاط [ مشتاق الله ]
قوة السمعة:
قديم 31-01-2016, 09:57 PM المشاركة 15   
sun نصف البرنامج


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

السلام عليكم و رحمة الله و بركاته

اخى العزيز اليك ما وفقنى الله و وصلت اليه
انشئ مشروع جديد فى الميكرو و انشى ملفين باسمين مختلفين
كلاهما امتداده c. ثم قم بنسخ الكودين التاليين فيهما و جربه مع ملف البروتيوس , البرنامج الان ان شاء الله جاهز للعمل على الشاشة اليمين + لوحة مفاتيح خاصة بها + مفتاح * بلوحة الم
فاتيح للزيادة بواحد .

ملاحظة : لا يمكن استخدام مكتبة لوحة المفاتيح الجاهزة للوحتين على بورتين مختلفين فى نفس البرنامج , يجب تغيير ارجل الخارجة للشاشات
على بورت portB (pin 4,5,6,7
)

متبقى تشغيل الكود للوحة مفاتيح الثانية + شاشة اليسرى
ارجو ان تحاول فيهم ... لان الموضوع عايز تركيز .

و لو وصلت لنتيجة عرفنا سواء ايجابية او ايجابية ان شاء الله .
وان شاء الله يعينى و افكر لحل فيها .

كود البرنامج الرئيسي :


كود:
extern char button_press_1();
extern char button_press_2();
const char SEG[] ={0,1,2,3,4,5,6,7,8,9,0};
char RIGHT_1, RIGHT_10;
char LEFT_1,   LEFT_10;
char kp_1 , kp_2 , i , COUNTER=0;

void change() iv 0x0004 ics ICS_AUTO {    // this code for
                                         // external int. portb0  i did not use it .
INTCON &= ~(1<<INTF);
     }
void init_pic(){
           trisb=0b00000001;
           trisa=0b00000000;
           trisd=0x0f ;
           trisc=0x0f ;
           portb=0;
           porta=0;
           INTCON|= 1<< GIE ;
           INTCON |= 1<< INTE ;
           OPTION_REG |= 1<< INTEDG ;
        }
        
void main() {char j ,ONES_R , TENS_R ; unsigned int count_delay= 0 ; ADCON1=7;  init_pic();
     while(1) {   count_delay++;
              //   kp_2= button_press_2();
                kp_1= button_press_1();
            //**************** RIGHT DISPLAY UNIT
  if(kp_1 != 0 && kp_1 !=12 ){delay_ms(100);
              if(count_delay>0 && count_delay<2000) {TENS_R=ONES_R ; ONES_R=SEG[kp_1]<<4 ; count_delay=0; }
              else { ONES_R=SEG[kp_1]<<4 ; TENS_R= 0 ;count_delay=0;} }

              portb=ONES_R  ; porta=2; delay_ms(1); porta=0;  // RIGHT_UNIT ONES
              portb=TENS_R ; porta=1; delay_ms(1); porta=0;  // RIGHT_UNIT  TENS
              
              COUNTER = ((TENS_R>>4) * 10 + (ONES_R>>4)) ;

          //**************** RIGHT DISPLAY UNIT
              if(kp_1==12){delay_ms(100); COUNTER++ ;  ONES_R = COUNTER%10 ; ONES_R<<=4 ;
                                      TENS_R = COUNTER/10 ; TENS_R<<=4;  }  // prss *

       /*  //**************** LEFT DISPLAY UNIT
           if(kp_2=='*'){ COUNTER++; LEFT_1 =COUNTER%10 ; LEFT_10 = COUNTER/10 ;    }    // press #
              portb=SEG[LEFT_1]<<4 ;  porta=8; delay_ms(1); porta=0;   //LEFT_1
              portb=SEG[LEFT_10]<<4 ; porta=4; delay_ms(1); porta=0;   // LEFT_ 10
         //**********************/
       }
}
كود برنامج لوحة المفاتيح :
كود:
// KEYPAD 4x3 CODE
#define read_col portd      // for read INPUT COLUMN BIT 0,1,2,3
#define out_row portd         // OUTPUT ROW BIT 4,5,6
char x;
char button_press_1(){   char i ;
       for(i=1 ; i<=4 ; i=i<<1){  out_row=i<<4 ;  x = read_col & 0x0f ; if(x!=0){  delay_ms(200);}
             if(i==1){
                          switch (x){
                                    case 1:return 1;
                                    case 2:return 4;
                                    case 4:return 7;
                                    case 8:return 12;  //  key *
                                  }
                         }
            if(i==2){
                           switch(x){
                                        case 1: return 2;
                                        case 2: return 5;
                                        case 4: return 8;
                                        case 8: return 10; // key = 0 from array
                                       }
                       }
            if(i==4) {
                          switch(x){
                                        case 1: return 3;
                                        case 2: return 6;
                                        case 4: return 9;
                                        case 8: return 0;     // key = # like nothing pressed
                                       }
                        }
        }
return 0 ;
 }
و الله الموفق و المستعان
اللهم اذن لدينك ان يحكم الارض و ان يسود و استخدمنا فى ذلك يا رب



badr nahed
:: مهندس ::
تاريخ التسجيل: Sep 2015
المشاركات: 23
نشاط [ badr nahed ]
قوة السمعة:
قديم 03-02-2016, 07:13 PM المشاركة 16   
افتراضي


شكرا لك اخي لكن لم استوعب انشاء ملفين مختلفين بمتداد سي



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