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

   

hamadalla31
:: مهندس متميز ::
تاريخ التسجيل: Mar 2009
المشاركات: 585
نشاط [ hamadalla31 ]
قوة السمعة:
قديم 02-04-2014, 05:58 PM المشاركة 41   
افتراضي بارك الله لك واثابك بكل ماتحب من خيري الدنيا والأخرة



السلام عليكم
مكتبه PCF8583 مع مثال تعمل بنظام 12 و 24 وتحتاج لضبط السنه في البدايه
https://www.mediafire.com/?gb13v1pli714it1

ملف مكتبه موجود ضمن ملفات بأسم PCF8583.c
بسم الله ماشاء الله ربنا يبارك لك ويزيدك من قضله وعلمه
كنت افكر في تجربة البرمجة بدون نزع البيك من علي الكارته ( ICSP ) وبحثت كثيرا ولكني لم اوفق لتصميم جيد فهل اجد لديك تصميم تكون قد جربته
وجزاكم الله عني بكل خير

اعلانات

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 02-04-2014, 08:11 PM المشاركة 42   
افتراضي


بسم الله ماشاء الله ربنا يبارك لك ويزيدك من قضله وعلمه
كنت افكر في تجربة البرمجة بدون نزع البيك من علي الكارته ( ICSP ) وبحثت كثيرا ولكني لم اوفق لتصميم جيد فهل اجد لديك تصميم تكون قد جربته
وجزاكم الله عني بكل خير
السلام عليكم
انا أستخدمت ممبرمجه جاهزه وهي تستطيع ان تبرمج البيك بدون الحاجه الى نزعه من دائره .

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

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 02-04-2014, 08:20 PM المشاركة 43   
افتراضي ماذا تحتاج المكتبه PCF8583


السلام عليكم
مكتبه PCF8583 مع مثال تعمل بنظام 12 و 24 وتحتاج لضبط السنه في البدايه
https://www.mediafire.com/?gb13v1pli714it1

ملف مكتبه موجود ضمن ملفات بأسم PCF8583.c
السلام عليكم
1- تحتاج المكتبه كما في مكتبه DS1307 الى تعريف الاتجاهات
مثال
كود:
// Software I2C connections
sbit Soft_I2C_Scl           at RC0_bit;
sbit Soft_I2C_Sda           at RC1_bit;
sbit Soft_I2C_Scl_Direction at TRISC0_bit;
sbit Soft_I2C_Sda_Direction at TRISC1_bit;
2- تحتاج الى تعريف المتغيرات
كود:
char extern seconds, minutes, hours, day, month, week,year , *txt_day , k_12_24=0 , setting_PCF8583[7] ; // Global date/time variables
وبالنتيجه هي بترجعلك
seconds, minutes, hours, day, month, week,year , *txt_day , k_12_24
k_12_24 هذا متغير له قيمتين اما 0 فمعناه الاشاره هي AM واما =1 ومعناها PM
*txt_day هذا متغير من نوع مؤشر (pointer) بيعطيك اليوم
شاهد الكود
كود:
 switch(week)
             {
              case 1: txt_day="Sun"; break;
              case 2: txt_day="Mon"; break;
              case 3: txt_day="Tue"; break;
              case 4: txt_day="Wed"; break;
              case 5: txt_day="Thu"; break;
              case 6: txt_day="Fri"; break;
              case 7: txt_day="Sat"; break;
             }
=================================================


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 02-04-2014, 08:41 PM المشاركة 44   
افتراضي كيف يتم أستخدام المكتبه PCF8583


يتم أستخدام المكتبه
1- في حاله القراءه
يتم أستدعائها بهذه الطريقه
كود:
Show_Time(hours,minutes,seconds,day,week,month , 255);
اما السنه فتحتاج في البدايه الى أعاده ضبط

2- في حاله الضبط
هنا نقم بتعريف متغير في البرنامج لقد سميته set بالبدايه قيمته =0 فعند الضغط على مفتاح setting وقيمه set=0 عندها يتم استدعاء الداله set_PCF8583 لغرض خزن البيانات الوقت والتاريخ في مصفوفه setting_PCF8583 لغرض كتابتها بعد ذلك في PCF8583
طبعا في حاله الضبط داله مسؤوله عن الضبط القيم والموجوده في مكتبه هي
كود:
static void set_PCF8583(unsigned  char set_switch,unsigned  char inc_dec_system_12_24)
 {
   if(set_switch==0)// start value before apdate setting
              {
               setting_PCF8583[0]=hours;
               setting_PCF8583[1]=minutes;
               setting_PCF8583[2]=seconds;
               setting_PCF8583[3]=day;
               setting_PCF8583[4]=week;
               setting_PCF8583[5]=month;
               setting_PCF8583[6]=year;
              }
   if(set_switch==9)//write new data to PCF8583
                   {
                     if(inc_dec_system_12_24==24)
                                                 {
                                                  kw_12_24=24;
                                                  if(k_12_24==1 && setting_PCF8583[0]<12)setting_PCF8583[0]=setting_PCF8583[0]+12;
                                                  // to change hours from system 12 to 24 for example if hours = 17  then change hours to sys 12
                                                  // then hours = 05 PM now  I wanted change sys to sys24 then must hours return to 17
                                                 }
                     else if(inc_dec_system_12_24==12)kw_12_24=12;
                     Show_Time(setting_PCF8583[0],setting_PCF8583[1],setting_PCF8583[2],setting_PCF8583[3],
                               setting_PCF8583[4], setting_PCF8583[5],0);
                   }
   if (inc_dec_system_12_24==0) // inc switch
                       {
                        setting_PCF8583[set_switch-1]++;
                        if(setting_PCF8583[0]>=24)setting_PCF8583[0]=23;// houres
                        if(setting_PCF8583[1]>=60)setting_PCF8583[1]=59;// minute
                        if(setting_PCF8583[2]>=60)setting_PCF8583[2]=59;// second ,
                        if(setting_PCF8583[3]>=32)setting_PCF8583[3]=31;// days
                        if(setting_PCF8583[4]>=7)setting_PCF8583[4]=7;// week
                        if(setting_PCF8583[5]>=13)setting_PCF8583[5]=12;// month
                        if(setting_PCF8583[6]>=99)setting_PCF8583[6]=99;// year
                       }
   if (inc_dec_system_12_24==1) // dec switch
                         {
                          if(setting_PCF8583[set_switch-1]>0)setting_PCF8583[set_switch-1]--;
                          if(setting_PCF8583[3]==0)setting_PCF8583[3]=1;// days
                          if(setting_PCF8583[4]==0)setting_PCF8583[4]=1;// week
                          if(setting_PCF8583[5]==0)setting_PCF8583[5]=1;// month
                         }
}
طبعا هذه الداله ممبرمجه على set_switch ويمثل مفتاح اختيار الداله وهو يقابل متغير set باعتبار اننا نريد ضبط وقت والتاريخ كلا على حدا
يعني بالضبط ساعه وبعدها دقائق وثواني وايام واسابيع والاشهر والسنه وصيغه الوقت هل بل 24 او 12 وبتالي لدينا 8 اختيارات
لذا لما يصبح set=9 معناها اعطي امر بالكتابه

inc_dec_system_12_24 اما هذا متغير فلهو وظائف منها
اذا كان يساوي 0 فمعناه قم بالزياده واذا كان يساوي 1 قم بالنقصان واذا كان لايساوي 1 ولايساوي 0 فلا ينفذ اي شيئ

ملاحظه // في داله show اخر متغير اذا تم وضعه بقيمه 0 معناها سوف يتم كتابه في متكامله PCF8583 واذا وضعنا غير ذلك مثلا 255 فقط يقوم بالقراءه ولهذا يتم برمجتها بوضع قيمه 0 عندما يتم الضغط على مفتاح setting لتسعه مرات عندها يتم كتابه شاهد الكود
كود:
 if(set_switch==9)//write new data to PCF8583
                   {
                     if(inc_dec_system_12_24==24)
                                                 {
                                                  kw_12_24=24;
                                                  if(k_12_24==1 && setting_PCF8583[0]<12)setting_PCF8583[0]=setting_PCF8583[0]+12;
                                                  // to change hours from system 12 to 24 for example if hours = 17  then change hours to sys 12
                                                  // then hours = 05 PM now  I wanted change sys to sys24 then must hours return to 17
                                                 }
                     else if(inc_dec_system_12_24==12)kw_12_24=12;
                     Show_Time(setting_PCF8583[0],setting_PCF8583[1],setting_PCF8583[2],setting_PCF8583[3],
                               setting_PCF8583[4], setting_PCF8583[5],0);
                   }


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 02-04-2014, 08:52 PM المشاركة 45   
افتراضي تصحيح الخطأ الموجوده في مكتبه DS1307 وهي عند التحويل من صيغه الوقت 12 الى 24


السلام عليكم
تم تحديث مكتبه DS1307 لكي تتعامل مع النظامين 12 و 24 مع اعطاء اشاره AM , PM
http://arabsh.com/files/0c34434d65fa...-data-rar.html
ملاحظه المكتبه موجوده ضمن مشروع باسم clock_data
كود:
static void set_DS1307(unsigned  char set_switch,unsigned  char inc_dec_system_12_24)
 {
   if(set_switch==0)// start value
              {
               setting_DS1307[0]=hours;
               setting_DS1307[1]=minutes;
               setting_DS1307[2]=seconds;
               setting_DS1307[3]=day;
               setting_DS1307[4]=week;
               setting_DS1307[5]=month;
               setting_DS1307[6]=year;
              }
   if(set_switch==9)//write new data to DS1307
                   {
                     if(inc_dec_system_12_24==24)kw_12_24=24;
                     else if(inc_dec_system_12_24==12)kw_12_24=12;
                     Show_Time(setting_DS1307[0],setting_DS1307[1],setting_DS1307[2],setting_DS1307[3],
                               setting_DS1307[4],setting_DS1307[5],setting_DS1307[6],0);
                   }
طبعا اذا ارسلت بعد عمل setting رقم 12 يعني اريد الوقت يعمل بنظام 12 واذا ارسلت 24 يعني اريده يعمل بــ 24
طبعا لنرجع قليلا الى البرنامج
كود:
while(1)
  {
    if (Button(&PORTA, 0, 100, 0)) // set switch
                                {
                                 kk=0;
                                 if(set==0)set_DS1307(0,255);// to sore data in setting_DS1307 before change value
                                 set++;
                                 lcd_cmd(1);
                                 if(set>=9)
                                          {
                                            kk=255;
                                            LCD_Chr(1,8,'.');
                                            LCD_Chr(1,11,'.');
                                            LCD_Out(2,1,"Time ");
                                            LCD_Chr(2,8,':');
                                            LCD_Chr(2,11,':');
                                            LCD_Out(1,12,"20");
                                            set_DS1307(set,system_12_24);
                                            set=0;
                                          }
تلاحظون ايضا لاختيار نظام 24 نضغط على سويج -- وموجود على بورت a بن 2
اما لاختيار النظام 12 نضغط على سويج++ وموجود على بورت a بن 1
وتلاحظون ايضا انه عندما اريد اظهار system على شاشه امنع من ظهور الارقام
حيث كتبت
كود:
   if(kk!=255 && set !=8)
             {
              Lcd_Chr(1, 14, (setting_DS1307[set-1]/ 10) + 48);
              Lcd_Chr(1,15, (setting_DS1307[set-1] % 10) + 48);
             }
اما كيف يتم ضبط النظام لاحظ كود من البرنامج
كود:
if (Button(&PORTA, 1, 150, 0)) // dec switch
                                {
                                 set_DS1307(set,1);
                                 if(set ==8){
                                               lcd_out(1,8,"24");
                                               system_12_24=24;
                                             }
                                }
   if (Button(&PORTA, 2, 150, 0)) // inc switch
                                {
                                 set_DS1307(set,0);
                                 if(set ==8)
                                            {
                                             lcd_out(1,8,"12");
                                             system_12_24=12;
                                            }

                                }
نعود الى مكتبه وهذا هو كود مضاف لاختيار النظام 12 او 24
كود:
static void Show_Time(unsigned char c_hours, unsigned char c_minutes, unsigned char c_seconds,
                unsigned char c_day, unsigned char c_week, unsigned char c_month, unsigned char c_year,unsigned char states)
{ 

 if(states==0){
                c_hours=dec2bcd(c_hours);
                c_minutes=dec2bcd(c_minutes);
                c_seconds=dec2bcd(c_seconds);
                c_day=dec2bcd(c_day);
                c_month=dec2bcd(c_month);
                c_year=dec2bcd(c_year);
                Write_Time(c_hours,c_minutes,c_seconds,c_day,c_week,c_month,c_year);
              }

 Read_Time(&hours, &minutes, &seconds, &day, &week, &month, &year);
 seconds  =  ((seconds & 0x70) >> 4)*10 + (seconds & 0x0F);
 minutes  =  ((minutes & 0xF0) >> 4)*10 + (minutes & 0x0F);
 hours =((hours & 0x10) >> 4)*10  + (hours& 0x0F);[COLOR="DimGray"]
 if(kw_12_24==24)k_12_24=24;//for system 24
 else if(kw_12_24==12)// for system 12
                    {
                    
                     if(hours <= 12 )
                                     {
                                       k_12_24=0; // this mean AM,
                                       if(hours==0)hours=1;
                                     }
                     if(hours >= 13)
                                {
                                 k_12_24=1;//this mean PM,
                                 hours = hours -12;
                                }
                     }
 week     =  (week & 0x07);
 day      =  ((day & 0xF0) >> 4)*10 + (day & 0x0F);
 month    =  ((month & 0x10) >> 4)*10 + (month & 0x0F);
 year     =  ((year & 0xF0)>>4)*10+(year & 0x0F);
السلام عليكم
تم تصحيح الخطأ والموجود في مكتبه DS1307 وهي عندما نحول التوقيت من 12 الى 24 فانه لايتم التحويل بشكل الصحيح يعني مثى الساعه 04 PM عند التحويل سوف تتحول الى 04 فقط ولهذا تم تصحيح الكود لكي تتحول الى التوقيت الصحيح لتصبح الساعه 16
كل ماعليك سوى أتباع هذه التعليمات
1- افتح المكتبه لاحظ كود التعريف
كود:
static char setting_DS1307[7] , k_12_24=24 , kw_12_24=100;
اجعل k_12_24=24 كما موضح بلون أحمر

2- في داله
كود:
static void set_DS1307(unsigned  char set_switch,unsigned  char inc_dec_system_12_24)
قم بستبدال الكود القديم بالكود الموجود بلون احمر

كود:
 if(set_switch==9)//write new data to DS1307
                   {
                     if(inc_dec_system_12_24==24)
                                                  {
                                                    kw_12_24=24;
                                                    if(setting_DS1307[0]<12 && k_12_24==1)setting_DS1307[0]=setting_DS1307[0]+12;
                                                  }
                     else if(inc_dec_system_12_24==12)kw_12_24=12;
                     Show_Time(setting_DS1307[0],setting_DS1307[1],setting_DS1307[2],setting_DS1307[3],
                               setting_DS1307[4],setting_DS1307[5],setting_DS1307[6],0);
                   }


hamadalla31
:: مهندس متميز ::
تاريخ التسجيل: Mar 2009
المشاركات: 585
نشاط [ hamadalla31 ]
قوة السمعة:
قديم 02-04-2014, 10:22 PM المشاركة 46   
افتراضي


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


حمودي الحلو
:: مهندس متواجد ::
تاريخ التسجيل: Sep 2006
الدولة: العراق
المشاركات: 104
نشاط [ حمودي الحلو ]
قوة السمعة:
قديم 03-04-2014, 03:14 PM المشاركة 47   
افتراضي


شكرا جزيلا على التغديل الذي اجريته على البرنامج الذي اسرلته لك وشكرا على استخدام التعديلات بتكوين مكتبة ينتفع بها البقية
وساكمل مسيرتي واعطيك النتائج


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 03-04-2014, 03:51 PM المشاركة 48   
افتراضي


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

ويؤسفني كثيرا لانني لم أجد أحد من الاخوه أبدا شيئا في مساهمه ولو بمكتبه واحده لكثير من الاجهزه او الحساسات لغرض التسهيل على الكثير منا في البرمجه
للعلم ماقصده هو ان هناك الكثير من الحساسات او الاجهزه لها وظيفه معينه مثل DS1307 او PCF8583 او STH1x أو GSM اوIR او motion senser او .........
فكلها لها وظيفه ثابته يمكن تحويلها الى مكتبه نتعامل معها
عموما بالنسبه الي سأضع أي شيئ ممكن ان ينتفع بها الاخوه
تحياتي الطيبه



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