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

   

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



اخي نعم غير البيك ب 18
او ممكن استعمال الشيب atmega8 او 16 اكثر ثبات و بهي عديد المزاية ز الثمن جيد هنا

و عندي ميكروسي فور avr$

ساشرخ لكم

هذه الليد لتبين للراكب
الاولى لنفترض زرقاء
اليد -1 السيارة فارغة
اليد-2 السيارة بها راكب و العداد في طور استعمال
-3 العداد في وضع النهار
4 العداد في وضع اليل و تشتعل اليد من 21 الى 5
و اختر سويتش عن الضغط عليه لمدة يكتب العداد OFF
و عند الضغط على ستار يرجع يعمل من جديد
اخي تعديل مهم جدا ضع الوقت في 24 ساعة لان مشكل هناك عند التعديل
السلام عليكم
جرب هذا المشروع
http://up.top4top.net/downloadf-top4...3a7a1-rar.html

1- عند الضغط على speed اول ضغطه يعطيك السرعه وضغطه الثانيه يعطيك السعر الكلي او أجره كليه
2- في حاله مسح البيانات اي مسح السعر او أجره قم بالضغط على مفتاح inc وdec و set معا لاكثر من 10 ثواني الى ان ينطفئ ليد ازرق مربوط على بورت b بن رقم 5
3- اضافه ليد حسب اوقات احتساب السعر
4- تحويل نظام الساعه الى 24

مره القادمه سوف يتم أضافه أحتساب مسافه بكيلومتر
تحياتي

اعلانات

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


السلام عليكم
جرب هذا المشروع
http://up.top4top.net/downloadf-top4...3a7a1-rar.html

1- عند الضغط على speed اول ضغطه يعطيك السرعه وضغطه الثانيه يعطيك السعر الكلي او أجره كليه
2- في حاله مسح البيانات اي مسح السعر او أجره قم بالضغط على مفتاح inc وdec و set معا لاكثر من 10 ثواني الى ان ينطفئ ليد ازرق مربوط على بورت b بن رقم 5
3- اضافه ليد حسب اوقات احتساب السعر
4- تحويل نظام الساعه الى 24

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

في داله update_data () تم التعديل على الكود ادناه هذا لغرض تحفيز ds1307 لغرض تشغيل ليد ثواني هو من مفروض يشتغل اوتوماتيكيا لان ds1307 مزوده ببطاريه ولكن هذا الكود للتأكيد في حاله فقدان البيانات من ds1307 وهذه الكود ينفذ مره واحده عند تشغيل البرنامج بسبب متغير start_clock_system وايضا وضعنا 24 بدلا من 12 لغرض تحويل الساعه الى 24
CODE]if( start_clock_system==0) //
{
delay_ms(10);
if(start_clock_system==0)
{
set_DS1307(0,255);
}
start_clock_system=255;
Delay_ms(10);
set_DS1307(9,24);

}[/CODE]

=================================================

في قائمه الرئيسيه تم أضافه هذا الكود

كود:
if(EEPROM_Read(0)==0)// reading Price from eeprom
                 {
                  store_total_price=(10000*EEPROM_Read(1))+(100*EEPROM_Read(2))+EEPROM_Read(3);
                  led_clear=1;
                 }
 else 
     {
      store_total_price=0;
      led_clear=0;
     }
وهنا يتم قراءه السعر الكلي او أجره من ايبروم في حاله انه عنوان 0 من ايبروم =0 معناه انه يوجد بيانات في ايبروم وسوف يتم أضاءه ليد للدلاله على وجود البيانات
وهذا الكود لتشغيل ليد led_clear=1

اما في حاله انه عنوان 0 من ايبروم =255 معناه لاتوجد اي بيانات وبتالي سوف يتم أطفاء ليد وجعل متغير store_total_price مسؤول عن اجره الكليه=0

================================================

تم ايضا التعديل على مفاتيح set ,dec,inc
كود:
 // check all switches
             if(sw_set==0 && sw_inc==1 && sw_dec==1 && flag_clear==0)sw_set_flag=1;  // set switch is pressed
             if (sw_set==1 && sw_inc==1 && sw_dec==0)sw_dec_flag=1; // dec switch is pressed
             if (sw_set==1 && sw_inc==0 && sw_dec==1)sw_inc_flag=1; // inc switch is pressed
             if( sw_set==0 && sw_dec==0 && sw_inc==0)flag_clear=1; // code clear eeprom
             else flag_clear=0;
فكره ببساطه هو اذا تم ضغط على اي مفتاح منهما ولم يتم الضغط على اخر فانه سوف يتم تنفيذ اوامر الخاصه بالمفتاح وطبعا لايجوز الضغط مفناحين معا ولربما يعمل الذي يتم الضغط عليه اولا

ولكي نمسح البيانات موجوده في ايبروم نضغط على مفتاح dec او inc اولا لانك اذا ضغط على مفتاح set فأنه سوف يدخلك الى قائمه التعديل الوقت والتاريخ

وبعدما يتم الضغط فأنه يجب البقاء مفاتيح مضغوطه الى حين أطفاء ليد مسؤول علن البيانات في ايبروم لاحظ الكود و 5000 تعني 10 ثواني لان انتربت يحدث لكل 2 ملي ثانيه
كود:
if(clear_cont>=5000) // clear eeprom
                                {
                                 clear_cont=0;
                                 flag_clear=0;
                                 EEPROM_Write(0,0xFF);
                                 EEPROM_Write(1,0);
                                 EEPROM_Write(2,0);
                                 EEPROM_Write(3,0);
                                 led_clear=0;
                                 store_total_price=0;
                                }
================================================

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

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


التعديل على مفتاح start


كود:
 if (sw_start==0 && show_speed_price==0)
                              {
                               old_state=1; // inc switch is pressed
 
                             }
عند الضغط على مفتاح start فانه سوف يتم فانه old_state=1 وهذا متغير مهمته انه مادام انت ضاغط على سويج لايقوم بأي شيء حتى ترفع يدك ولكي يتحقق هذه عمليه لازم نكتب الشرط كتالي

كود:
 {
 if(sw_start==1 && old_state==1)
                                                  old_state=0;
                                                  sw_start_flag=1;
                                                }
وهنا تلاحظ انه سويج sw_start=1 معناه سويج تم تحريره وبما ان متغير old_state=1 اظن سوف نجعل sw_start_flag=1 وهذا متغير سوف يقوم بأحتساب الزمن خاصه بضغط مفتاح ولتمن 250ms طبعا لايتم كتابه ديلي بــ 250ms لان هذا سوف يخرب عمل سفن سكمنت

وبعد انقضاء 250ms يتم تصفير اعداد وقت وflag وهنا يزيد متغير جديد اسمه start2
كود:
if(sw_start_cont>130 && old_state==0)
                             {
                              sw_start_flag=0;
                              sw_start_cont=0;
                              start2++;
                             }

طبعا بعد ذلك سوف يتم تنفيذ هذا الكود
كود:
if( start==0 && start2==1 )
                             {
                              start=1;
                              kk=0;
                              transfer_display=4;  // show message "start"
                              old_value=0;
                              colomn=0;
                              end_digit=5;// run only 5 7seg
                              message_cont=0;
                              flag_measuring_speed=1;
                             }
وهنا سوف يعرض رساله start من خلال متغير transfer_display=4
اما colomn=0 و old_value=0 معناه أيبدأ من اول سفن سكمنت
كود:
else if(transfer_display==4)
                                   {
                                     for(x=0;x<8;x++) //
                                                      {
                                                       if(colomn>=2 && start==3)stop_price=3; // stop_price using to display message start and stop for Price
                                                                                            //  start message message_start={s,t,a,r,t} but stop message message_start{s,t,x , x,x,o,p} x mean cancel
                                                       else stop_price=0;
                                                       if(Check_bit((message_start[colomn+stop_price]) ,7-x))DS1=1;
                                                       else DS1=0;
                                                       SH1=0;SH1=1;
                                                      }
                                    }
كما ايضا يتم تفعيل داله قياس السرعه لغرض أحتساب الكلفه
من خلال جعل متغير flag_measuring_speed=1

=================================================
بعدها سوف يتم تنفيذ هذا الكود لان start=1 معناه أبدء العمليه وبالطبع سوف تبدأ من القيم الافتراضيه او يعني القيم اوليه

كود:
if(start==1 && message_cont>1000)//2sec
                                         { // finish for display message start
                                          start=2;
                                          transfer_display=5;// show Price value
                                          old_value=0;
                                          colomn=0; // run 7seg start from 1
                                          end_digit=6;// run 6   7seg
                                          if(Price_change==0)value_start=price_initial_1;// Price start from 125
                                          else if(Price_change==1)value_start=price_initial_2;// Price start from 200
                                          distance=0;// initial value
                                          Price_cont=0;// reset counter time
                                          
                                          //calculate_price();// now only display 0.125 after that start   calcalute
                                          check_price=1;// this char equal 1 if complete measuring distance , where every 3 sec complete mesauring
                                         }
وبعد أكتمال حساب السرعه سوف ينفذ مايكرو هذا الكود
كود:
if(start==2 && check_price==1)calculate_price();
طبعا لان start=2 حتى تمنع من دخول الى القيم اوليه لكي لايؤثر على احتساب السعر
طبعا check_price مهمته متى ما يكتمل مايكرو من أحتساب السرعه وهس تحدث لكل 3 ثواني تصبح قيمته =1 وبتالي يتم تنفيذ كود أحتساب السعر وفي داله احتساب السعر يتم تصفير هذا المتغير لغرض أحتساب سرعه جديده وهكذا


وعند الضغط على مفتاح start مره اخرى يتم تنفيذ الكود وهو مهمته اظهار مره كلمه stop ومره قيمه اجره حاليه
كود:
else if(start2==2 && (start==2||start==3) && message_cont>500 ) // now the 7seg will display Price value or message stop  every 1 second
                        {
                          start=3;
                          flag_measuring_speed=0;//disenable function  speed_measuring();
                          if(oscilation==0 )
                                            {
                                             transfer_display=4;  // show message "stop"
                                             end_digit=4;
                                            }
                          else {
                                 transfer_display=5;  // show Price value
                                 end_digit=6;
                                }
                          oscilation=~oscilation;
                          old_value=0;
                          colomn=0; // start from 1 7seg

                          message_cont=0;
                        }

وعند الضغط على start مره اخرى
هذا الكود يرجعنا الى داله الرئيسيه لاظهار الوقت والتاريخ بسبب جعل متغير kk=255 وايضا يتم خزن السعر او اجره الكليه في ايبروم

كود:
else  if(start2>=3  )
                        {  // return to main code " display date , clock
                          kk=255;
                          if(start==3)// store Price value in eeprom
                                     {
                                      store_total_price += value_start;
                                      EEPROM_Write(0,0);// store 0 in address 0 this flag mean the data storing in eeprom
                                      
                                      EEPROM_Write(1,store_total_price/10000);//123456 /10000=12
                                      EEPROM_Write(2,store_total_price/100%100);//123456 /100 =1234%100=34
                                      EEPROM_Write(3,store_total_price%100);
                                      led_clear=1;
                                     }
                          start=0;
                          start2=0;
                          transfer_display=0;// now start display date and clock;
                        }


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


اما لاظهار السعر الكلي الكود بلون أحمر

كود:
if(sw_speed_cont>130 )
                {
                 sw_speed_cont=0;
                 sw_speed_flag=0;
                 show_speed_price++;
                 if(show_speed_price==1)
                             {
                               flag_measuring_speed=1;// enable function speed_measuring()
                               IR_TX=1;// this mean run IR LEDS to measuring external speed (( must be connect IR_led to RC0
                               tmr0=0; // reset tmr0
                              }
                 else if(show_speed_price==2)
                             {
                               flag_measuring_speed=0;
                               old_value=0;
                               colomn=0; // start from 1 7seg
                               transfer_display=5;  // show Price value
                               end_digit=6;
                               Price_array(store_total_price);
                              }

                 if(show_speed_price==3)
                                       {
                                        show_speed_price=0;
                                        kk=255;
                                       }
                }
طبعا وضعت كود لغرض اظهار السعر او اي رقم على سفن سكمنت من خلال هذا الداله وبتالي مجرد أعطيها السعر الحالي او السعر الكلي تظهرلي القيم على السفن السكمنت
كود:
void Price_array(unsigned long Price_valuex)
{
 Price[0]=Price_valuex/100000;//123456/100000= 1
 Price[1]=Price_valuex/10000 %10;//123456/10000= 12  %10=2
 Price[2]=Price_valuex/1000%10;//123456/1000= 123  %10=3
 Price[3]=Price_valuex/100%10;//123456/100= 1234   %10=4
 Price[4]=Price_valuex/10%10;//123456/10= 12345    %10=5
 Price[5]=Price_valuex%10;//      %10=6

 // cance number if last number =0 ==> mean oFF 7seg
 if(Price[0]==0) Price[0]=11;
 if(Price[0]==11 && Price[1]==0) Price[1]=11;// 11 mean 7seg oFF


}


الصورة الرمزية المخترع01
المخترع01
:: مهندس متميز ::
تاريخ التسجيل: Dec 2009
المشاركات: 397
نشاط [ المخترع01 ]
قوة السمعة:
قديم 07-06-2014, 12:08 PM المشاركة 85   
افتراضي


السلام عليكم اخي هادي

رائــــــــــــــــــــــــــــــــــــــع جداا ممتاز شرح جميل مبدع اخي

طيب اخي

1- الكود يعمل جيد مع الوقت الليل و النهار و اليد
2-اخ هادي ملاحضتي
ان عملية الجمع بها اخطاء لم نجعل العداد يعمل ليقف عند 2.100 ثم 3.500 فالنتيجة ستكون 4300 لاكن عند استدعلء النتيجة ستجدها ارقام اخرى
في الليل و النهار


3- تعديل كود العرض سليب المرة الاولى يعرض البلغ الجملي بكتابة
total ثم يعرض الملغ الجملي و عند الضغط على سليب مرة اخرى
يكتب
vites ثم يعرض السرعة الى ان نطلب منه اعمال اخرى
و ان اكملت كود عرض الكلمترات المقطوعة
نضغط على سليب ثلاث مرات و يكتب total kh
ويعرضها

4- ارجو مراحعتي طلبي في ON/OFF
5- اخي اعجبيني فكرة مسح total بالضغط على ثلاث ازرار ان امكن تعديل بزرين و بالضغط 3 ثواني فقط و تمسح لاكن تبقا مسجلة في eeprom و نستدعيها عن الضغط على سليب اربع مرات تكتب total EE

ساشرح لكم فكرة
السيارة يعمل بها مالكها و موضف
هنا الموضف ياخذ نسبة من الارباح عن كل رحلة و النسبة الملغ على 3
3.000
____
3
=1000
هل ممكن عمل فكرة عند الضغط على سليب يتم عرض نصيب الموضف
يعني total
9.000
ثم بالضغط مرة اخرى يعرض 3.000 ثم الاوامر الخرى

عندما اريد تعديل عرض كلمت stop لثانية ثم الملغ المطلوب ل 5 ثواني
وهكذا فان الكود يصبح خاطئ لم استطع التعديل لعمل


الصورة الرمزية المخترع01
المخترع01
:: مهندس متميز ::
تاريخ التسجيل: Dec 2009
المشاركات: 397
نشاط [ المخترع01 ]
قوة السمعة:
قديم 07-06-2014, 11:22 PM المشاركة 86   
win


السلام اخي
تم تعديل عرض الليد الاول للسيارة شاغرة و الثاني لسيارة في انتضار حريف
اخ هادي حمل المشروع و اعطني رئيكم لاني فرخ جداا للعمل
http://up.top4top.net/downloadf-top4...bc8b1-rar.html


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


السلام عليكم اخي هادي

رائــــــــــــــــــــــــــــــــــــــع جداا ممتاز شرح جميل مبدع اخي

طيب اخي

1- الكود يعمل جيد مع الوقت الليل و النهار و اليد
2-اخ هادي ملاحضتي
ان عملية الجمع بها اخطاء لم نجعل العداد يعمل ليقف عند 2.100 ثم 3.500 فالنتيجة ستكون 4300 لاكن عند استدعلء النتيجة ستجدها ارقام اخرى
في الليل و النهار


3- تعديل كود العرض سليب المرة الاولى يعرض البلغ الجملي بكتابة
total ثم يعرض الملغ الجملي و عند الضغط على سليب مرة اخرى
يكتب
vites ثم يعرض السرعة الى ان نطلب منه اعمال اخرى
و ان اكملت كود عرض الكلمترات المقطوعة
نضغط على سليب ثلاث مرات و يكتب total kh
ويعرضها

4- ارجو مراحعتي طلبي في ON/OFF
5- اخي اعجبيني فكرة مسح total بالضغط على ثلاث ازرار ان امكن تعديل بزرين و بالضغط 3 ثواني فقط و تمسح لاكن تبقا مسجلة في eeprom و نستدعيها عن الضغط على سليب اربع مرات تكتب total EE

ساشرح لكم فكرة
السيارة يعمل بها مالكها و موضف
هنا الموضف ياخذ نسبة من الارباح عن كل رحلة و النسبة الملغ على 3
3.000
____
3
=1000
هل ممكن عمل فكرة عند الضغط على سليب يتم عرض نصيب الموضف
يعني total
9.000
ثم بالضغط مرة اخرى يعرض 3.000 ثم الاوامر الخرى

عندما اريد تعديل عرض كلمت stop لثانية ثم الملغ المطلوب ل 5 ثواني
وهكذا فان الكود يصبح خاطئ لم استطع التعديل لعمل

السلام عليكم
1-تم الكشف سبب عدم جمع الارقام بشكل صحيح طبعا لايوجد مشكله بالكود وانما يوجد خلل في عمليات حسابيه مثلا عندما يضرب الرقم 22X10000 ومن مفروض نحصل على 220000 ولكن حقيقه وجدت مايكرو يعطيني رقم ثاني مختلف وعليه تم اصلاح مشكله ستجد الحل في برنامج الجديد

2- تم تغير البك الى 18f45k22
3- بالنسبه للعمليه مسح انت قلت لاتريد مسحها من ايبروم ولكن اخي سترى ان قيمه السعر لما تصل الى 999.999 ماذا تفعل

عموما تم أضافه اشياء جديده


الصورة الرمزية المخترع01
المخترع01
:: مهندس متميز ::
تاريخ التسجيل: Dec 2009
المشاركات: 397
نشاط [ المخترع01 ]
قوة السمعة:
قديم 08-06-2014, 03:04 PM المشاركة 88   
افتراضي


السلام عليكم
1-تم الكشف سبب عدم جمع الارقام بشكل صحيح طبعا لايوجد مشكله بالكود وانما يوجد خلل في عمليات حسابيه مثلا عندما يضرب الرقم 22X10000 ومن مفروض نحصل على 220000 ولكن حقيقه وجدت مايكرو يعطيني رقم ثاني مختلف وعليه تم اصلاح مشكله ستجد الحل في برنامج الجديد

2- تم تغير البك الى 18f45k22
3- بالنسبه للعمليه مسح انت قلت لاتريد مسحها من ايبروم ولكن اخي سترى ان قيمه السعر لما تصل الى 999.999 ماذا تفعل

عموما تم أضافه اشياء جديده
طيب اخي شرحكم علمني الكثير

بالنسب لمسح المبلغ الكلي قصدي مثلا

عند الضغط على سليب مرتين نجد المبلغ الجملي و نستطيع ان نمسح لاكن عند البضغط على سليب اربع مرات نجد الملبلغ الجملي لم ينمسح الى بالبرنامج يعني

ان صاحب العداد يتابع النتيجة كل يوم و يمسخ متا يشاء لاكن هناك نتيجة دائما مسجلة لا تنمسخ و اخي معلومة اخرى الريد التسجيل الى 999.999



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