منتدى الإلكترونيات قسم الالكترونكس لمناقشة الافكار والمعلومات المتعلقة بالهندسة الالكترونية للمبتدئين والهواة والفنيين - Electronics

   

masul
:: مهندس ::
تاريخ التسجيل: Jun 2006
الدولة: اليمن
المشاركات: 43
نشاط [ masul ]
قوة السمعة:
قديم 03-12-2012, 11:35 AM المشاركة 25   
افتراضي



حياك لله اخي حيدر

الكود وملف المحاكاة موجده في الروابط اعلاه


وهذه الروابط مرة اخرى والكود موجود فيها كاملا مع المحاكاة
http://www.mediafire.com/?o24bqdg9d4owkko

http://www.4shared.com/rar/HoNqLnQR/Counter_5.html

واذا كان قصدك شيء آخر فلوسمحت وضحه لي اكثر.
هذه صوره من المحاكاة


وهذه نسخة من الكود

كود:
 const unsigned short DIGIT[]={63,6,91,79,102,109,125,7,127,111};
void Display  (int Number)
         {
            PORTA.F1 = 0;
            PORTA.F0 = 1;
            PORTB = DIGIT [Number%10] ;    // áÅÙåÇÑ ÇáÂÍÇÏ
            delay_ms (4) ;
            PORTb = 0;

            PORTA.F0 = 0 ;
            PORTA.F1 = 1 ;
            PORTB = DIGIT [Number/10] ;     // áÅÙåÇÑ ÇáÚÔÑÇÊ
            delay_ms (4);
            PORTb = 0;

         }
 void init(){

       cmcon=0x07;
       trisa.f0=0; trisa.f1=0;
       porta.f0=0; porta.f1=0;
       trisb = 0;  portb = 0;
       trisa.f2=trisa.f3=trisa.f4=1;

       trisa.f7=0; porta.f7=0;
          }
void main (void)
 {
    unsigned short N = 0 ,eep,read;
          int Number = 0;

    init();
       eep=eeprom_read(0x3f);
         Number=eep;

            loop:
            {

               Display (Number);
                         if(porta.f2==0){ while(porta.f2==0)Display (Number);
                                             Number++; if(Number==100)Number=0;
                                             eeprom_write(0x3f,Number);
                                          }
                         if(porta.f3==0){ while(porta.f3==0)Display (Number);
                                             Number--; if(Number<0) Number=99;
                                             eeprom_write(0x3f,Number);
                                          }
                         if(porta.f4==0){ while(porta.f4==0) Display (Number);
                                             read=eeprom_read(0x3f);
                                             porta.f7=1;
                                             Number=read;
                                             while(Number>0){ Number--;
                                                              for(N=0;N<125;N++) {
                                                              Display (Number);
                                                                                 if(porta.f4==0){while(porta.f4==0){Display(Number);}
                                                                                                 porta.f7=0;
                                                                                                 Number=eeprom_read(0x3f);
                                                                                                 Display(Number);
                                                                                                 goto loop;
                                                                                                }
                                                                                 }
                                                                                  
                                                            }
                                                    porta.f7=0;
                                                   read=eeprom_read(0x3f);
                                                   Number=read;
                                                   Display(Number);

                                        }
            } goto loop;
 }
حاول تحميله من الروابط أعلى لانه جاهز من المحاكاة والكود سي حتى يكون التطبيق متكامل كما عملته.
ولك خالص شكري وتقديري

اعلانات

masul
:: مهندس ::
تاريخ التسجيل: Jun 2006
الدولة: اليمن
المشاركات: 43
نشاط [ masul ]
قوة السمعة:
قديم 08-12-2012, 04:57 PM المشاركة 26   
افتراضي


حياك الله اخي حيدر

الآن عرفت قصدك عندما طلبت مني الكود

اني اعمل على برنامج المايكرو سي mikroC

وليس المايكرو سي برو mikroC PRO for PIC

حيث يختلف امتداد ملف الكود في كلا البرنامجين
في المايكرو سي mikroC يكون الامتداد بي بي سي مثل CounterOwad30.ppc

اما في المايكرو سي برو mikroC PRO يكون الامتداد سي مثل CounterOwad30.c

سوف احاول ان ارسل لك الكود والمحاكاة والهكس المعمول على برنامج mikroC PRO

ربما سيأخذ مني بعض الوقت .

تحياتي

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

masul
:: مهندس ::
تاريخ التسجيل: Jun 2006
الدولة: اليمن
المشاركات: 43
نشاط [ masul ]
قوة السمعة:
قديم 13-12-2012, 11:24 PM المشاركة 27   
افتراضي


حياكم الله..
حياك لله اخي حيدر .. وفتح الله عليك من واسع علمه

هذه روابط جديدة للمشروع الكود والمحاكاة والهكس المعمول على برنامج mikroC PRO

http://www.mediafire.com/?8bwo66r3xf9j8ay
http://www.4shared.com/rar/YltGyNnh/MyProject1.html

تصحيح لما سبق :
في المايكرو سي برو mikroC PRO يكون الامتداد مثل CounterOwad30.mcppi

يعوقني الان كيفية عمل مفتاح للمشروع (On_Off) بحيث عند ضغطه تعمل الداره ، وعند ضغطه مرة اخرى تنطفئ الدارة بالكامل ؟
وهل ممكن عمله عن طريق المايكروكنترولر ؟

رزقك الله العفو والعافية
وجمعة مباركة
تحياتي


masul
:: مهندس ::
تاريخ التسجيل: Jun 2006
الدولة: اليمن
المشاركات: 43
نشاط [ masul ]
قوة السمعة:
قديم 03-01-2013, 07:02 PM المشاركة 28   
افتراضي


اكود السابق عندما انفذه عملي على ارض الواقع لا سشتغل
وعندما احذف منه امر القراءه من الذاكره eeprom يعمل دون مشاكل مع انه في المحاكاة يشتغل تمام
لست ادري ما السبب
وللتذكير اني استخدم البيك pic16f628a


masul
:: مهندس ::
تاريخ التسجيل: Jun 2006
الدولة: اليمن
المشاركات: 43
نشاط [ masul ]
قوة السمعة:
قديم 07-01-2013, 10:38 PM المشاركة 29   
افتراضي


اظن انني وجدت سبب المشكلة
وهي في الكود
في امر القراءة من الذاكرة عندما اسندتها الى المتغير number
او انه في موقع وضعي للامر

حيث اني عندما غيرت من موقع الخزن للامر eeprom وعمل المحاكة لم تشتغل وانما اظهرت لي الرقم 5 فقط ولم تتستجيب للضغط على الازرار
وهو مايحدث لي في الواقع ، ثم بعد عدة محاولات اعدت الكود كما كان فشتغل في المحاكاة فقط ولم يعمل في الواقع

و الى الان لم اجد الحل
و المحاولات مستمرة
والله في العون


masul
:: مهندس ::
تاريخ التسجيل: Jun 2006
الدولة: اليمن
المشاركات: 43
نشاط [ masul ]
قوة السمعة:
قديم 08-01-2013, 11:45 PM المشاركة 30   
افتراضي


الحمدلله
اظنني وجدت الحل
لقد قمت بنقل امر القراءة من الذاكرة الى داخل اللوب في الاخير
هذه صورة المشروع
الزر الواسط لتنقيص الرقم ، الزر على اليمني لزيادة الرقم ، الزر على الشمال لتشغيل الداره
يجب ان يكون الجمبر JP1 مغلق ON والجمبر JP2 مفتوح OFF حتى تشتغل الدائره


حيث كان الكود صاحب المشكلة هكذا
كود:
  

  const unsigned short DIGIT[]={63,6,91,79,102,109,125,7,127,111};
void Display  (int Number)
         {
            PORTA.F1 = 0;
            PORTA.F0 = 1;
            PORTB = DIGIT [Number%10] ;    // لإظهار الآحاد
            delay_ms (4) ;
            PORTb = 0;

            PORTA.F0 = 0 ;
            PORTA.F1 = 1 ;
            PORTB = DIGIT [Number/10] ;     // لإظهار العشرات
            delay_ms (4);
            PORTb = 0;

         }
 

 void init(){

       cmcon=0x07;
       trisa.f0=0; trisa.f1=0;
       porta.f0=0; porta.f1=0;
       trisb = 0;  portb = 0;
       trisa.f2 =trisa.f3 =trisa.f4 =trisa.f5 =trisa.f6 =1;

       trisa.f7=0; porta.f7=0;
          }
void main ()
 {
    unsigned short N = 0 ;
          int Number = 0 ,eep,read;

    init();
             eep=eeprom_read(0x2);
             Number=eep;

            loop:
            {


               Display (Number);

                         if(porta.f2==0){ while(porta.f2==0)Display (Number);
                                             Number++; if(Number==100)Number=0;
                                             eeprom_write(0x2,Number);
                                          }
                         if(porta.f3==0){ while(porta.f3==0)Display (Number);
                                             Number--; if(Number<0) Number=99;
                                             eeprom_write(0x2,Number);
                                          }
                         if(porta.f4==0&&porta.f5==1&&porta.f6==0){ while(porta.f4==0) Display (Number);
                                             read=eeprom_read(0x2);
                                             porta.f7=1;
                                             Number=read;
                                             while(Number>0){ Number--;
                                                              for(N=0;N<125;N++) {
                                                              Display (Number);
                                                                                 if(porta.f4==0){while(porta.f4==0){Display(Number);}
                                                                                                 porta.f7=0;
                                                                                                 Number=eeprom_read(0x2);
                                                                                                 Display(Number);
                                                                                                 goto loop;
                                                                                                }
                                                                                 }

                                                            }
                                                    porta.f7=0;
                                                   read=eeprom_read(0x2);
                                                   Number=read;
                                                   Display(Number);

                                        }
             
            } goto loop;
 }
ثم اصبح هكذا بعد التحويل

كود:
 
  const unsigned short DIGIT[]={63,6,91,79,102,109,125,7,127,111};
void Display  (int Number)
         {
            PORTA.F1 = 0;
            PORTA.F0 = 1;
            PORTB = DIGIT [Number%10] ;    // &#225;&#197;&#217;&#229;&#199;&#209; &#199;&#225;&#194;&#205;&#199;&#207;
            delay_ms (4) ;
            PORTb = 0;

            PORTA.F0 = 0 ;
            PORTA.F1 = 1 ;
            PORTB = DIGIT [Number/10] ;     // &#225;&#197;&#217;&#229;&#199;&#209; &#199;&#225;&#218;&#212;&#209;&#199;&#202;
            delay_ms (4);
            PORTb = 0;

         }
 

 void init(){

       cmcon=0x07;
       trisa.f0=0; trisa.f1=0;
       porta.f0=0; porta.f1=0;
       trisb = 0;  portb = 0;
       trisa.f2 =trisa.f3 =trisa.f4 =trisa.f5 =trisa.f6 =1;

       trisa.f7=0; porta.f7=0;
          }
void main ()
 {
    unsigned short N = 0 ;
          int Number = 0 ,eep,read;

    init();


            loop:
            {


               Display (Number);

                         if(porta.f2==0){ while(porta.f2==0)Display (Number);
                                             Number++; if(Number==100)Number=0;
                                             eeprom_write(0x2,Number);
                                          }
                         if(porta.f3==0){ while(porta.f3==0)Display (Number);
                                             Number--; if(Number<0) Number=99;
                                             eeprom_write(0x2,Number);
                                          }
                         if(porta.f4==0&&porta.f5==1&&porta.f6==0){ while(porta.f4==0) Display (Number);
                                             read=eeprom_read(0x2);
                                             porta.f7=1;
                                             Number=read;
                                             while(Number>0){ Number--;
                                                              for(N=0;N<125;N++) {
                                                              Display (Number);
                                                                                 if(porta.f4==0){while(porta.f4==0){Display(Number);}
                                                                                                 porta.f7=0;
                                                                                                 Number=eeprom_read(0x2);
                                                                                                 Display(Number);
                                                                                                 goto loop;
                                                                                                }
                                                                                 }

                                                            }
                                                    porta.f7=0;
                                                   read=eeprom_read(0x2);
                                                   Number=read;
                                                   Display(Number);

                                        }
             eep=eeprom_read(0x2);
             Number=eep;
            } goto loop;
 }
هذا الكود الاخير اشتغل معي على الواقع طبيعي
الحمدلله
الحمدلله
الحمدلله رب العالمين

يبقى مع الان ان اعمل له زر رابع لعمل سليب sleep للبرنامج للحفاظ على الطاقة (عمل اطفاء وتشغيل للداره)
واعتقد لابد من عمل مقاطعة فيها امر سليب . وهذا امر لا اعرفه
والله الموفق
ارجو المساعدة بشرح الامر سليب والمقاطعة (المقاطعة اعرفها قليلا)
وشكرا جزيلا لكل من ساعدني وشجعني حيث كان لهم الفضل بعد الله فيما وصلت اليه.


masul
:: مهندس ::
تاريخ التسجيل: Jun 2006
الدولة: اليمن
المشاركات: 43
نشاط [ masul ]
قوة السمعة:
قديم 08-01-2013, 11:51 PM المشاركة 31   
افتراضي



لقد نقلت هذه المشاركة الاخيره الى قسم الميكروكنترولر
تحت عنوان مشكله في حرق الكود المحتوي على الامر eeprom

وهذا رابط الصفحة
http://www.qariya.com/vb/showthread....540#post710540
وذلك لتعم الفائدة.


تحياتي


التعديل الأخير تم بواسطة : masul بتاريخ 08-01-2013 الساعة 11:55 PM


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