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

   

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



تفضل أخي كريم
http://arabsh.com/files/0c33414c62f2...ssier-rar.html

اعلانات

abban270
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2009
المشاركات: 89
نشاط [ abban270 ]
قوة السمعة:
قديم 21-04-2014, 09:38 PM المشاركة 18   
افتراضي


بارك الله فيك لكني
لم أفهم مادا تعمل
كود:
portc=dat[x/10]
  portc=dat[x%10]
ولماذا اخترت
(++for (i=0;i<60;i


التعديل الأخير تم بواسطة : abban270 بتاريخ 21-04-2014 الساعة 09:54 PM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

abban270
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2009
المشاركات: 89
نشاط [ abban270 ]
قوة السمعة:
قديم 21-04-2014, 10:40 PM المشاركة 19   
افتراضي


تم تصحيح الكود الخاص بي
والفضل يرجع لك لأنك ساعدتني
شغال 100%
كود:
void main()
{
int  x,i,j ;
char dat[] = {192,249,164,176,153,146,130,248,128,144};
TRISB=0XFF;     // initialisation du port B en entrée
TRISC=0;TRISd=0xFC;        //initialisation du port C en sortie
ADCON1=0X06;
PORTC=0; PORTD=2;
while(1){   for  (x=0;x<100;x++)
          {
          for  (i=0;i<10;i++)
         {portd=~portd; portc=dat[x%10]; delay_ms(20) ;
          portd=~portd; portc=dat[x/10];  delay_ms(20) ;}
          }
}}


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


بارك الله فيك لكني
لم أفهم مادا تعمل
كود:
portc=dat[x/10]
  portc=dat[x%10]
ولماذا اخترت
(++for (i=0;i<60;i
السلام عليكم
بالنسبه لكود dat[x/10 معناه كتالي انا عندي سفن سكمنت قطعتين وبتالي تتكون من رقمين مثلا x=23 اذن لابد من أظهار رقم 2 على سفن سكمنت الاولى و 3 على سفن سكمنت الثانيه أذن لابد من تقسيم رقم
اذن 23/10 =2.3=2 هنا يهمل كسر لان متغير x من نوع char فهو يأخذ دائما رقم صحيح وبتالي لايهمل كسر
الان حصلنا على رقم 2 فكيف نحصل على رقم ثلاثه الجواب نأخذ باقي القسمه على 10 وبتأكيد باقي القسمه على 10 لرقم 23 هو 3
طبعا الرمز % يعني باقي القسمه
وبهذه طريقه يتم تجزئه الرقم الى احاد وعشرات ومئات والالاف و.....
======================================
واذا كانت لدينا ثلاث سفن سكمنت فكيف نظهر مثلا 123
نقسم رقم الاول على 100 والنتيجه هي 1
نأخذ باقي القسمه على 100 ثم نقسم النتيجه على 10 والنتيجه هي 2
نأخذ باقي القسمه على 10 ونتيجه هي 3


اما بالنسبه لرقم 60 هو رقم عشوائي ولكنك يمكن أختيار رقم الذي من خلاله يعطيك 1 ثانيه مثلا زمن كلي لسفن سكمنت هو 10ms وبتأكيد للحصول على 1 فأننا لابد من تكرار عرض رقم لمده 1000/10=100
طبعا 1 ثانيه =1000ms ولكن لابد أن تختار اقل من 100 لاننا لم نحسب زمن تنفيذ الاوامر والتي سوف تتكرر 100 مره وهذا يعني سيكون زمن اكبر من 1 ثانيه لذا حاول تقليلها الى ان يتم ضبط ها على 1 ثانيه تقريبا من خلال نظريه صح وخطأ يعني تضع قيم ثم تقارنها مع 1 ثانيه


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


تم تصحيح الكود الخاص بي
والفضل يرجع لك لأنك ساعدتني
شغال 100%
كود:
void main()
{
int  x,i,j ;
char dat[] = {192,249,164,176,153,146,130,248,128,144};
TRISB=0XFF;     // initialisation du port B en entrée
TRISC=0;TRISd=0xFC;        //initialisation du port C en sortie
ADCON1=0X06;
PORTC=0; PORTD=2;
while(1){   for  (x=0;x<100;x++)
          {
          for  (i=0;i<10;i++)
         {portd=~portd; portc=dat[x%10]; delay_ms(20) ;
          portd=~portd; portc=dat[x/10];  delay_ms(20) ;}
          }
}}
السلام عليكم
نحن بخدمه أخي
بس أخي لي ملاحظات
1- زمن 20ms كبير جدا يجب ان يكون زمن كلي لسفن سكمنت لايتجاوز من 20 الى 25 ms لربما يظهر مشاكل لديك عند تطبيقه عملي
2- بالتاكيد انت تعرف سفن سكمنت محتاجه الى مقاومات وترانزستورات
https://www.google.iq/search?q=7+seg...mo%3B600%3B403

3- الامر portd=~portd هذا امر صحيح لسفن سكمنت عد 2 ولكن اذا صارت 3 لايمكنك تطبيق هذا الامر وعليه يمكنك كتابه قيمه portd للعلم انت دائما تخلي سفن سكمنت واحده تعمل وبتالي الاطراف كمن دائما تخلي واحده تعمل وباقي على وضع off فمثلا كمن كاثود معناه محتاج الى 0 فولت لكي تعمل وكمن انود محتاجه الى 1 لكي تعمل

حاول تعمل عداد يعد من 0 الى 9999
سأساعدك بعد ان تحاول أنت لكي تصل الى فهم أكبر للموضوع تحياتي

تحياتي الطيبه لكم


abban270
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2009
المشاركات: 89
نشاط [ abban270 ]
قوة السمعة:
قديم 21-04-2014, 11:30 PM المشاركة 22   
افتراضي


بارك الله فيك على الشرح الممتاز
سأجرب عداد بأربع سجمنت


abban270
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2009
المشاركات: 89
نشاط [ abban270 ]
قوة السمعة:
قديم 22-04-2014, 12:45 AM المشاركة 23   
افتراضي


تم إنشاء الكود
لكن
هناك مشكلة لم أستطع أن أفهم لماذا !!!!

كود:
void main()
{
unsigned char  x,i;
char compt[] = {192,249,164,176,153,146,130,248,128,144};
TRISB=0XFF;     // initialisation du port B en entrée
TRISC=0;TRISd=0xF0;        //initialisation du port C en sortie
ADCON1=0X06;
PORTC=0; PORTD=0;
while(1){   for  (x=0;x<10000;x++)
          {
          for  (i=0;i<3;i++)
         {portd=1; portc=compt[x%10]; delay_ms(5) ;
          portd=2; portc=compt[x/10];  delay_ms(5) ;
          portd=4; portc=compt[x/100];  delay_ms(5) ;
          portd=8; portc=compt[x/1000];  delay_ms(5) ;
          }
          }
}}
SImulation file
http://www.gulfup.com/?a1zYAL


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


تم إنشاء الكود
لكن
هناك مشكلة لم أستطع أن أفهم لماذا !!!!

كود:
void main()
{
unsigned char  x,i;
char compt[] = {192,249,164,176,153,146,130,248,128,144};
TRISB=0XFF;     // initialisation du port B en entrée
TRISC=0;TRISd=0xF0;        //initialisation du port C en sortie
ADCON1=0X06;
PORTC=0; PORTD=0;
while(1){   for  (x=0;x<10000;x++)
          {
          for  (i=0;i<3;i++)
         {portd=1; portc=compt[x%10]; delay_ms(5) ;
          portd=2; portc=compt[x/10];  delay_ms(5) ;
          portd=4; portc=compt[x/100];  delay_ms(5) ;
          portd=8; portc=compt[x/1000];  delay_ms(5) ;
          }
          }
}}
SImulation file
http://www.gulfup.com/?a1zYAL
السلام عليكم
تفضل أخي هذا الكود
كود:
unsigned char  i;
unsigned int  x;
char compt[] = {192,249,164,176,153,146,130,248,128,144};
void main()
{

TRISB=0XFF;     // initialisation du port B en entrée
TRISC=0;TRISd=0xF0;        //initialisation du port C en sortie
ADCON1=0X06;
PORTC=0xFF;// off seven segment for CA
PORTD=0;
while(1){   for  (x=0;x<10000;x++)
          {
           for  (i=0;i<1;i++)
             {
               portd=1;portc=compt[x%10]; delay_ms(5) ;portc=0xFF; // 1234%10=4

               portd=2; portc=compt[x%100/10];  delay_ms(5) ;portc=0xFF; //1234%100=34/10=3
               portd=4; portc=compt[x%1000/100];  delay_ms(5) ;portc=0xFF;  //1234%1000=234 /100=2
               portd=8; portc=compt[x/1000];  delay_ms(5) ;portc=0xFF;    //1234/1000=1
             }
          }
        }
}
اولا خطأ
1- متغير x يجب ان يكون من نوع int فهذا يأخذ 2 بايت وبتالي سعته تصل الى 65535 بينما متغير من نوع char ياخذ بايت واحد وبتالي أقصى قيمه له 255
2- حاول دائما وضع متغيرات خارج قائمه الرئيسيه لكي تكون عامه يمكنك أستخدامها داخل اي داله بينما اذا وضعتها داخل قائمه الرئيسيه ستكون معرفه فقط داخل هذه داله ولايمكنك أستخدامها في داله اخرى

3- سفن سكمنت من نوع كمن انود لازم بالبدايه تكون سفن سكمنت مطفيه وهذا يتحقق بعكس حاله فأذا وضعنا portc=0xFF وportd=0 فهنا معناها سفن سكمنت على وضع OFF لانه يجب كمن انود يريد 5 فولت بينما البقيه بنات تريد 0 فولت
4- سفن سكمنت من نوع كمن كاثود لازم بالبدايه تكون سفن سكمنت مطفيه وهذا يتحقق بعكس حاله فأذا وضعنا portc=0 وportd=0xFF فهنا معناها سفن سكمنت على وضع OFF لانه يجب كمن كاثود يريد 0 فولت بينما البقيه بنات تريد 5 فولت

5-
كود:
portd=1;portc=compt[x%10]; delay_ms(5) ;portc=0xFF;
يجب أطفاء سفن سكمنت في نهايه كل امر يعني لما شغل واحده وتبقيها لمده 5ms لازم بعد ذلك تطفيها هذا ضروري جدا لعمل سفن سكمنت بشكل طبيعي

6-
اخي كريم اذا كان لديك رقم 1234 فكيف يتم تجزئه
لنأخذ رقم العشرات اذن نأخذ باقي قسمه على 10 لانك اذا قسمت على 10 تحصل على 123 وباقي 4 أذن ناخذ الباقي
كود:
portd=1;portc=compt[x%10]; delay_ms(5) ;portc=0xFF;
والان نحصل على العشرات =3
هنا لابد من تقسيم على 100 لنحصل على 12 وباقي 34 اذن نأخذ باقي القسمه على 100 ثم نقسم على 10
باقي القسمه=34
نقسم على 10 =3
كود:
portd=2; portc=compt[x%100/10];  delay_ms(5) ;portc=0xFF;
والان نحصل على مئات =2
هنا لابد من تقسيم على 1000 لنحصل على 1 وباقي 234 اذن نأخذ باقي القسمه على 1000 ثم نقسم على 100
باقي القسمه=234
نقسم على 100 =2
كود:
portd=4; portc=compt[x%1000/100];  delay_ms(5) ;portc=0xFF;
والان نحصل على الالاف =1
هنا لابد من تقسيم على 1000 لنحصل على 1
كود:
portd=8; portc=compt[x/1000];  delay_ms(5) ;portc=0xFF;


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 22-04-2014 الساعة 05:39 AM


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