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

   

2sa1302
:: عضوية غير مفعلة ::
تاريخ التسجيل: Sep 2005
المشاركات: 81
نشاط [ 2sa1302 ]
قوة السمعة:
قديم 01-01-2010, 12:43 PM المشاركة 1409   
افتراضي



السلام عليكم ورحمة الله وبركاته
اخوانى المهندسين الاعزاء لااسع ان اشكر جهدكم الكريم الا بالدعاء لكم بان يوفقكم الله جميعا لما يحبة ويرضى واخص بشكرى مهندس : احمد سمير على هذا الجهد الكبير الذى لم ارى فى بساطتة ولقد كنت انوى تعلم البرمجة باستخدام لغة السى لولا مرورى قدرا على هذا النتدى الرائع الذى انا مشترك فية منذ امد بعيد ولقد اسعدنى ما رايت فيه من معلومات قيمة وروح جميلة بين من فيه ولقد رايت من مساعدة زملاءنا المهندسين ماشجعنى على ان اطلب منهم طلب بسيط
اولا لقد قرات كل دروس تعلم البرمجة باستخدام الميكروسى وانا بصدد التطبيق لها ولكن جأت لى فكرة من الدرس الخامس وهى اذا كنت اريد عمل عداد يقوم بالعد من 0 الى 99 مثلا عن طريق مفتاحين احدهما يزيد القيمة والأخر ينقص من قيمة العد ويقوم يحفظ قيمة العد لأخر رقم وصلت الية وليكن 33 ثم اقوم بفصل التغذية عن البك واريد عندما اقوم بتوصيل التغذية ان يظهر العدد 33 ثم عن طريق مفاتيح الزيادة والنقصان ادخل قيم جديدة يتم حفظها لدى البك فهل هذا ممكن باستخدام البك ام اننى سأحتاج لذاكرة من نوع flash memory فهل ممكن المساعدة فى ذلك ولكم جزيل الشكر اخوكم مهندس 2sa1302

اعلانات

الصورة الرمزية سعيد قادر
سعيد قادر
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2009
الدولة: العراق/ كوردستان
المشاركات: 2,892
نشاط [ سعيد قادر ]
قوة السمعة:
قديم 01-01-2010, 07:06 PM المشاركة 1410   
Question


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


التعديل الأخير تم بواسطة : سعيد قادر بتاريخ 01-01-2010 الساعة 07:28 PM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )

الصورة الرمزية ahmad_s_f
ahmad_s_f
:: المهندس/ أحمد سمير فايد ::
تاريخ التسجيل: Jun 2006
الدولة: سائح في ارض الله
المشاركات: 632
نشاط [ ahmad_s_f ]
قوة السمعة:
قديم 02-01-2010, 07:35 AM المشاركة 1411   
افتراضي


اخوانى كيف يتم التحكم بسرعة موتور دى سى ببرنامج مايكرو سى
الرجاء مراجعة شروط الدورة ...

(ضع سؤالك في موضوع مستقل وستجد من يجيبك بإذن الله )


علما أن المشاركات المخالفة سيتم نقلها في وقت لاحق بإذن الله


( الله المستعان)


نبيل د
:: مهندس ::
تاريخ التسجيل: Mar 2008
المشاركات: 27
نشاط [ نبيل د ]
قوة السمعة:
قديم 02-01-2010, 11:04 AM المشاركة 1412   
افتراضي


الأمر بسيط للغاية
يمكن تحويل نظام gray الى النظام الثنائي بواسطة العلاقة التالية
لتكن K معطات في النظام gray
R في النظام الثنائي
العلاقة هي
k=(k^2*k)/2;---------------------------------------------0
السلام عليكم
الاخ lahoioui هذه العلاقة تحول من الثنائي الى gray و هل يمكن ان تشرح لنا كيف يتم استخراج هذه العلاقات


lahoioui
:: مهندس متواجد ::
تاريخ التسجيل: May 2009
المشاركات: 177
نشاط [ lahoioui ]
قوة السمعة:
قديم 02-01-2010, 02:32 PM المشاركة 1413   
افتراضي


السلام عليكم
الاخ lahoioui هذه العلاقة تحول من الثنائي الى gray و هل يمكن ان تشرح لنا كيف يتم استخراج هذه العلاقات
الاخ نبيل أردت أن أوضح شيء :
ان ال usb يرسل المعلومة BYTE ثم BYTE ثم BYTE وهكذا وكل BYTE تحتوي
8BITS أي أكبر عدد يمكن أن ترسله في الدفعة هو 256 بمعنى لا يمكن ارسال
متغير من 16BITS
أي يجب أن ترسل المعلومة بال BYTE ثم تضم 2BYTE في المستقبل وليس في
الباعث أي يجب أن تعمل هكذا :

Write_buffer[0] = 'P'; Write_buffer[1] = '=';...................................0
Write_buffer[2] =portb;write_buffer[3]=portd;.............................0
Write_buffer[4] = 'T';.............................................. .............0
Hid_Write(&Write_buffer,5);....................... .......................... .0

ثم تضم ال byte رقم 2 و ال byte رقم 3 بعد الارسال
أي write_buffer[2] et write_buffer[3].......0

بالطريقة المذكورة سابقا أي :
ليكن tt يحتوي قيمة write_buffer[2].0
ليكن gg يحتوي قيمة write_buffer[3].0
k هو المتغير 16bits ونريد أن نضع فيه tt في 8bits الاولى و gg في 8bits الاخيرة :

k =tt;..........................................0
k =k<<8;...........................................0
k =k+gg;........................................0

هذا بعد الارسال وليس قبل الارسال أي في المستقبل

الان نحول الى ال benary من gray
لعمل ذلك نستعمل الدالة التالية :

unsigned short grayToBinary(unsigned short num)..........................0
{................................................. ...............................0
unsigned short temp = num ^ (num>>8);..............................0
temp ^= (temp>>4);........................................ .............0
temp ^= (temp>>2);........................................ .............0
temp ^= (temp>>1);........................................ .............0
return temp;}............................................ ....................0

^ تعني xor و << تعني ازاحة الى اليمين
بعد أن تكتب الدالة كما هي في بداية البرنامج يمكن أن تستعملها للتحويل
من ال gray الى benary كما يلي :
ليكن num في ال gray
k في ال benary
k=grayToBinary(num);........................0
أرجو أن أكون قد أوضحت وسوف أصحح أي خطأ قد أكتشفه
والسلام عليكم ورحمة الله تعالى وبركاته.


التعديل الأخير تم بواسطة : lahoioui بتاريخ 02-01-2010 الساعة 03:58 PM

نبيل د
:: مهندس ::
تاريخ التسجيل: Mar 2008
المشاركات: 27
نشاط [ نبيل د ]
قوة السمعة:
قديم 05-01-2010, 01:34 PM المشاركة 1414   
افتراضي


الاخ نبيل أردت أن أوضح شيء :
ان ال usb يرسل المعلومة BYTE ثم BYTE ثم BYTE وهكذا وكل BYTE تحتوي
8BITS أي أكبر عدد يمكن أن ترسله في الدفعة هو 256 بمعنى لا يمكن ارسال
متغير من 16BITS
أي يجب أن ترسل المعلومة بال BYTE ثم تضم 2BYTE في المستقبل وليس في
الباعث أي يجب أن تعمل هكذا :

Write_buffer[0] = 'P'; Write_buffer[1] = '=';...................................0
Write_buffer[2] =portb;write_buffer[3]=portd;.............................0
Write_buffer[4] = 'T';.............................................. .............0
Hid_Write(&Write_buffer,5);....................... .......................... .0

ثم تضم ال byte رقم 2 و ال byte رقم 3 بعد الارسال
أي write_buffer[2] et write_buffer[3].......0

بالطريقة المذكورة سابقا أي :
ليكن tt يحتوي قيمة write_buffer[2].0
ليكن gg يحتوي قيمة write_buffer[3].0
k هو المتغير 16bits ونريد أن نضع فيه tt في 8bits الاولى و gg في 8bits الاخيرة :

k =tt;..........................................0
k =k<<8;...........................................0
k =k+gg;........................................0

هذا بعد الارسال وليس قبل الارسال أي في المستقبل

الان نحول الى ال benary من gray
لعمل ذلك نستعمل الدالة التالية :

unsigned short grayToBinary(unsigned short num)..........................0
{................................................. ...............................0
unsigned short temp = num ^ (num>>8);..............................0
temp ^= (temp>>4);........................................ .............0
temp ^= (temp>>2);........................................ .............0
temp ^= (temp>>1);........................................ .............0
return temp;}............................................ ....................0

^ تعني xor و << تعني ازاحة الى اليمين
بعد أن تكتب الدالة كما هي في بداية البرنامج يمكن أن تستعملها للتحويل
من ال gray الى benary كما يلي :
ليكن num في ال gray
k في ال benary
k=grayToBinary(num);........................0
أرجو أن أكون قد أوضحت وسوف أصحح أي خطأ قد أكتشفه
والسلام عليكم ورحمة الله تعالى وبركاته.
quote=lahoioui;343223]الاخ نبيل أردت أن أوضح شيء :
ان ال usb يرسل المعلومة BYTE ثم BYTE ثم BYTE وهكذا وكل BYTE تحتوي
8BITS أي أكبر عدد يمكن أن ترسله في الدفعة هو 256 بمعنى لا يمكن ارسال
متغير من 16BITS
أي يجب أن ترسل المعلومة بال BYTE ثم تضم 2BYTE في المستقبل وليس في
الباعث أي يجب أن تعمل هكذا :

Write_buffer[0] = 'P'; Write_buffer[1] = '=';...................................0
Write_buffer[2] =portb;write_buffer[3]=portd;.............................0
Write_buffer[4] = 'T';.............................................. .............0
Hid_Write(&Write_buffer,5);....................... .......................... .0

ثم تضم ال byte رقم 2 و ال byte رقم 3 بعد الارسال
أي write_buffer[2] et write_buffer[3].......0
السلام عليكم
بارك الله فيك الاخ lahoioui على هذه المعلومات القيمة وزادك الله علما
نعم هذا البرنامج صحيح كما يمكنك كتابته بالشكل التالي
Write_buffer[0] =portb;....................0
Write_buffer[1] =portd;....................0
Hid_Write(&Write_buffer,4);.............0
بالطريقة المذكورة سابقا أي :
ليكن tt يحتوي قيمة write_buffer[2].0
ليكن gg يحتوي قيمة write_buffer[3].0
k هو المتغير 16bits ونريد أن نضع فيه tt في 8bits الاولى و gg في 8bits الاخيرة :

k =tt;..........................................0
k =k<<8;...........................................0
k =k+gg;........................................0

هذا بعد الارسال وليس قبل الارسال أي في المستقبل

العلاقة صحيحة في السي لكن برنامج المستقبل الذي استعمله بالفيجوال
الان نحول الى ال benary من gray
لعمل ذلك نستعمل الدالة التالية :

unsigned short grayToBinary(unsigned short num)..........................0
{................................................. ...............................0
unsigned short temp = num ^ (num>>8);..............................0
temp ^= (temp>>4);........................................ .............0
temp ^= (temp>>2);........................................ .............0
temp ^= (temp>>1);........................................ .............0
return temp;}............................................ ....................0

^ تعني xor و << تعني ازاحة الى اليمين
بعد أن تكتب الدالة كما هي في بداية البرنامج يمكن أن تستعملها للتحويل
من ال gray الى benary كما يلي :
ليكن num في ال gray
k في ال benary
k=grayToBinary(num);........................0
أرجو أن أكون قد أوضحت وسوف أصحح أي خطأ قد أكتشفه
والسلام عليكم ورحمة الله تعالى وبركاته.[/quote]

هل هذه الدالة تحول 8 بيت فقط واذا اردت تحويل 16 بيت هل استعمل هذه الدالة
عندي سؤال آخر وهو نفس البرنامج لكن مع زيادة temperature فكيف يتم ارسال Write_buffer و temperature مع بعضهما(قيمة temperature تظهر في خانة و قيمة Write_buffer تظهر في خانة اخرى في المستقبل) اي يجب ارسال Write_buffer في 2 بايت و temperature في 4 بايت
unsigned int i,j,k;............................................ ..................................0
unsigned long Vin;.............................................. ..............................0
unsigned char l,m;.............................................. ..............................0
unsigned int num;.............................................. ...............................0
unsigned char op[7],temperature[64],Write_buffer[64];.......................0
0................................................. .........................for(; // do forever
{
Vin = Adc_Read(1); // Read from channel 0 (AN0)..............................0
WordToStr(Vin,op); // Convert to string in "op"...................................0
for(j=0; j<3; j++)temperature[j]=' ';................................................ .0
j=0;.............................................. .................................................. 0
for(i=0;i<=6;i++)................................. ............................................0
{
if(op[i] != ' ') // If a blank............................................. ....................0
{
temperature[j]=op[i];................................................. .....................0
j++;.............................................. .................................................0
}
}
l=portb;.......................................... ................................................0
m=portd;.......................................... ..............................................0
Write_buffer[0] =l;............................................... ...........................0
Write_buffer[1] = m;................................................ .......................0
Delay_ms(1000);................................... ..........................................0
Hid_Write(temperature,4)&Hid_Write(Write_buffer,4) ;........................0
Delay_ms(1000);................................... ..........................................0
}
}


lahoioui
:: مهندس متواجد ::
تاريخ التسجيل: May 2009
المشاركات: 177
نشاط [ lahoioui ]
قوة السمعة:
قديم 05-01-2010, 06:15 PM المشاركة 1415   
افتراضي


لا هذه الدالة تعمل على 16bits وليس على 8bits


unsigned short grayToBinary(unsigned short num)..........................0
{................................................. ...............................0
unsigned short temp = num ^ (num>>8);..............................0
temp ^= (temp>>4);........................................ .............0
temp ^= (temp>>2);........................................ .............0
temp ^= (temp>>1);........................................ .............0
return temp;}............................................ ....................0

أستبدل short ب int اسف على الخطأ


الصورة الرمزية سلمى
سلمى
:: مهندس متواجد ::
تاريخ التسجيل: Jan 2006
المشاركات: 115
نشاط [ سلمى ]
قوة السمعة:
قديم 06-01-2010, 02:40 AM المشاركة 1416   
x4 البرنامج يعمل و الحمد لله


السلام عليكم...

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

هذا هو الكود النهائي....
كود:
 unsigned int j,k,i=0;

void main()
{ adcon1=0x06;
 trisa=1; trisb=trisd=0;
 portd=0;
  while(1)
  {
   check:
   if(porta.f1) goto car_out;
   if(porta.f0) goto go_in;
   if(porta==0) portb=0;
    goto check;
    }

go_in:

       if(portd<3)               //if there is place for parking
        {

            for(;;)
        {
        portb.f0=1; if(porta.f2) break;                          //open door B ,car out
        }
           portb.f0=0;
           portb.f1=1;
             i++;
             portd=i;
              for(j=0;j<3;j++)
           {
        // if((porta.f0)||(porta.f1)) goto check;
            delay_ms(600);     //wait for 3minut then
             }
              portb.f1=0;
           goto check;

          } else for(k=0;k<3;k++){portb.f3=1; delay_ms(200);
                                       portb.f3=0; delay_ms(200);}                   //if no place,no new car enter
   goto check;


  car_out:
       if ( portd==0 ){ goto check; }
       else
         {
          portb.f1=1;
          for(;;)
          {
             portb.f2=1; if(porta.f3) break;        //open door B ,car out
            }                                      // until sensor gives signal

            portb.f2=0; portb.f1=0;
            delay_ms(60);                       // close doorB & turn light off
            i=i-1;                                   // decrement counter
            portd=i;
            delay_ms(1500);
                  goto check; }

        }
الجملة باللون الأزرق مهمة جدا لأن البرنامج سيستمر بعملية الطرح حتى عندما تكون I=0 حيث البك يقوم بطرح الأعداد في الصورة الثنائية لذا سيكون ناتج I=0-1أكبر من ثلاثة و بالتالي لن يعمل البرنامج بالطريقة الصحيحة.


التعديل الأخير تم بواسطة : سلمى بتاريخ 06-01-2010 الساعة 02:52 AM


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