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

   

نبيل د
:: مهندس ::
تاريخ التسجيل: Mar 2008
المشاركات: 27
نشاط [ نبيل د ]
قوة السمعة:
قديم 03-11-2009, 04:03 PM المشاركة 1177   
افتراضي



وما هو المطلوب ؟ وماذا تقصد بوضعية المحرك ؟
المشروع هو مراقبة حرارة فرن مصنع والمحرك وظيفته تدوير مرآة لها 6 واجهات ونضع مقابل المرآة خلية الاشعة تحت الحمراء لالتقاط الحرارة ثم ارسالها الى الحاسب عبر usb باستعمال البك 18f4550 اما الوضعية فانا لا اريد ارسال جميع المجال الذي تمسحه المرآة ولكن ارسال 30 درجة من كل واجهة

اعلانات

shannaq
:: مهندس ::
تاريخ التسجيل: Jun 2008
المشاركات: 3
نشاط [ shannaq ]
قوة السمعة:
قديم 03-11-2009, 09:47 PM المشاركة 1178   
ha


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

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

abuhajer06
:: مهندس ::
تاريخ التسجيل: Jul 2007
المشاركات: 42
نشاط [ abuhajer06 ]
قوة السمعة:
قديم 05-11-2009, 03:04 PM المشاركة 1179   
Post حلول الدرس الخامس من دورة الأستاذ/ أحمد س. ف. - وفقه الله


هذا الدرس يحتوي على تسع تجارب مختلفة .. وأحب أن أخبركم أن هذا الدرس يحتوي على نوعية مختلفة من الشرح فقد ارتقينا من مستوى المبتدئين لمستوى أعلى .. ففي هذا الدرس تم نقاش الكود بطريقة مختلفة تنشط العقل أكثر وأكثر (خصوصا التجربة رقم 12).. فالهدف من هذا الدرس الفهم الأقوى لما ينفذه البك خطوة خطوة .. وكيف يمكننا التعديل في ترتيب الأوامر ..
أيضا في هذا الدرس تم استخدام عنصر إلكتروني جديد ::
ففي الدروس السابقة استخدمنا الليدات led والسويتشات push button أما في هذا الدرس فسنستخدم عناصر إضافية وهي السفن سيجمنت ومفكك الترميز 7447 وتم استخدام السفن سيجمنت بطريقة معينة .. وفي دروس قادمة سيكون هناك تفصيل أكثر وأكثر ,, بالإضافة إلى العديد من الطرق والأوامر البرمجية وسأشير بإذن الله إلى كيفية استخدام أكثر من سفن سيجمنت بالعديد من الطرق وسأشرحها بتفصيل أكثر إن شاء الله ..
السؤال الأول :: لدينا أربع ليدات موصلين بالبك عن طريق B0,B1,B2,B3 المطلوب عمل عداد يقوم بالعد من صفر إلى 15 ثم يقوم بتكرار ذلك العد مرة أخرى من صفر إلى 15 وهكذا باستمرار ...( طبعا العد سيكون بالثنائي لأنه عن طريق الليدات ) .
الحل
كود:
void main() { char x; trisb=0; lop: portb=0; delay_ms(500); for(x=0;x<15;x++) { portb++; delay_ms(500); } goto lop; }
حل آخر
كود:
void main()
{
trisb=0;
portb=0;
while(1)
{
for(portb=0;portb<=15;portb++)
delay_ms(500);
}
 
 
}
السؤال الثاني :: لدينا أربع ليدات موصلين بالبك عن طريق B0,B1,B2,B3 المطلوب عمل عداد يقوم بالعد من 15 إلى صفر ثم يعود مرة أخرى إلى 15 ويعد تنازلياً إلى أن يصل للصفر وهكذا باستمرار ..

الحل1

كود:
void main() { char x; trisb=0; while(1) { portb=15; delay_ms(500); for(x=0;x<15;x++) { portb--; delay_ms(500); } } }
حل آخر

كود:
void main() { trisb=0; portb=0; while(1) { for(portb=15;portb>=0;portb--) delay_ms(500); } }
السؤال الثالث :: لدينا خمس ليدات موصلين بالبك عن طريق B0,B1,B2,B3,B4 المطلوب عمل عداد يقوم بالعد من 10 إلى 31 ثم يبدأ العد من جديد من 10 إلى 31 وهكذا باستمرار ..

الحل

كود:
void main() { trisb=0; portb=0; while(1) { for(portb=10;portb<=31;portb++) delay_ms(500); } }

السؤال الرابع :: لدينا أربع ليدات موصلين بالبك عن طريق B0,B1,B2,B3 المطلوب هنا عمل عداد يقوم بالعد من 0 إلى 15 وعند وصول العداد إلى الرقم 15 يقوم بالعد تنازليا 15 ثم 14 ثم 13 ثم .. وهكذا إلى أن يصل إلى الصفر . وعند وصوله للصفر يبدأ بالعد تصاعديا من جديد إلى أن يصل إلى 15 .. وبالطبع عند وصوله لـ 15 يبدأ بالعد التنازلي إلى أن يصل للصفر .. وهكذا باستمرار .
الحل
كود:
void main()
{
char x;
trisb=0;
lop:
portb=0;
delay_ms(500);
for(x=0;x<15;x++)
{
portb++;
delay_ms(500);
}
for(x=0;x<14;x++)
{
portb--;
delay_ms(500);
}
goto lop;

}


التعديل الأخير تم بواسطة : abuhajer06 بتاريخ 05-11-2009 الساعة 03:25 PM

abuhajer06
:: مهندس ::
تاريخ التسجيل: Jul 2007
المشاركات: 42
نشاط [ abuhajer06 ]
قوة السمعة:
قديم 05-11-2009, 03:28 PM المشاركة 1180   
Post تابع - حلول الدرس الخامس من دورة الأستاذ/ أحمد س. ف. - حفظه الله


السؤال الخامس :: قم بعمل عداد باستخدام سفن سيجمنت واحدة أول ما يبدأ البرنامج يظهر الرقم صفر على السفن سيجمنت. و عند الضغط على السويتش الموصل بـ A0 يقوم البك بزيادة الرقم الموجود على السفن سيجمنت وطبعا هذا العداد يمكنه العد من صفر إلى تسعة فقط . وعند الضغط على السويتش الموصل بـ A1 يقوم البك بتنقيص العدد الظاهر على السفن سيجمنت . ( إلى الآن هذا يشبه التجربة رقم 16 ) الجديد هنا هو أنه عند الضغط على السويتش الموصل بـ A2 يقوم البك بإظهار الرقم 5 على السفن سيجمنت وبالتالي لو ضغطنا على هذا السويتش ثم ضغطنا على السويتش الموصل بـ A0 سيظهر الرقم 6 . لأن السويتش A0 يزيد الرقم الحالي .
الحل
كود:
void main()
{
trisa=0xff;
trisb=0x00;
portb=0x00;
while(1)
{
if(porta.f2==0x00)
portb=0x05;
if(porta.f0==0)
{
portb++;
if(portb==10)
portb=0;
delay_ms(500);
}
if(porta.f1==0)
{
portb--;
if(portb==255)
portb=9;
delay_ms(500);
}
}
}
السؤال السادس(سؤال قوي نوعا ما):: باستخدام السفن سيجمنت و مفتاحين قم بعمل البرنامج الذي يؤدي الوظيفة التالية : يقوم البرنامج بالعد تلقائيا من 9 إلى صفر عند تشغيله مباشرة وعند الضغط على السويتش الموصل بـ a0 مرة واحدة فقط يقوم البرنامج بالعد تصاعديا من صفر إلى 9 وعند الضغط على السويتش الموصل بـ a1 مرة واحدة فقط يقوم البرنامج بالعد تنازليا من 9 إلى صفر وهكذا باستمرار ...
السؤال بعبارات أخرى البرنامج يقوم بالعد من 9 إلى صفر تلقائيا بمجرد تشغيله ثم يكرر هذا باستمرار إلى أن يتم الضغط على المفتاح الموصل بـ a0 مرة واحدة فقط حينها يعكس طريقة العد فيقوم بالعد من 0 إلى 9 باستمرار (ودون الحاجة للضغط على السويتش كل مرة ) ولكن إذا تم الضغط من على المفتاح الموصل بـa1 مرة واحدة فقط سيقوم بالعد من 9 إلى صفر باستمرار .
الحل
كود:
void main()
{
trisa=0xff;
trisb=0x00;
while(1)
{
a1:
portb=0x09;
delay_ms(500);
portb-=1;
if(porta.f0==0)
goto a2;
if(portb==255)
portb=9; } a2: portb=0; delay_ms(500); while(1) { portb+=1;
if(portb==10)
portb=0; delay_ms(500);
if(porta.f1==0)
goto a1; } }
السؤال السابع (سؤال قوي نوعا ما ):: قم بعمل نفس البرنامج السابق ولكن بتعديل بسيط وهو أنه عند الضغط على المفتاح الموصل بـ a0 يقوم البك بزيادة نفس الرقم الظاهر على السفن سيجمنت فلو كان الرقم الظاهر هو 5 وقبل أن يصبح أربعة تم الضغط على المفتاح a0 مرة واحدة فقط سيقوم البك بإظهار الرقم 6 ثم ينتظر نصف ثانية ثم يظهر الرقم 7 تلقائيا دون ضغطة أخرى ثم ينتظر ثم يظهر الرقم ثمانية وهكذا .. ولو كان الرقم الظاهر 8 ثم تم الضغط على المفتاح الموصل بـ a1 ضغطة واحدة سيقوم البك عندها بجعل الرقم الظاهر 7 ثم ينتظر نصف ثانية وتلقائيا دون ضغطة أخرى يجعله 6 .. وهكذا ...
الحل
كود:
void main()
{
trisa=0xff;
trisb=0x00;
while(1)
{
a1:
portb=9;
delay_ms(500);
portb-=1;
if(porta.f0==0)
goto a2;
if(portb==255)
} a2: while(1) { portb+=1;
if(portb==10)
portb=0; delay_ms(500);
if(porta.f1==0)
goto a1; } }
السؤال الثامن (سؤال قوي نوعاً ما ) : باستخدام السفن سيجمنت و مفتاحين قم بعمل البرنامج الذي يؤدي الوظيفة التالية : في بداية البرنامج يظهر الرقم صفر فقط ولا يحدث أي تغير إلا عند الضغط على السويتش الموصل بـA0 ضغطة واحدة عندها يقوم البك بزيادة الرقم ويجعله واحد وبعد نصف ثانية يقوم تلقائيا دون الضغط على السويتش مرة أخرى بزيادة هذا الرقم ويجعله اثنين ثم ينتظر نصف ثانية ويجعله ثلاثة وهكذا .. ولكن في أثناء ذلك إذا تم الضغط على السويتش الموصل بـ A1 ضغطة واحدة يقوم البك بوقف هذا العداد بمعنى لو أن العداد وصل مثلا إلى الرقم ثلاثة وقبل أن يصل للرقم أربعة تم الضغط على السويتش الموصل بـ A1 سيقوم البك بوقف هذا العداد وسيظل الرقم ثلاثة ظاهر على السفن سيجمنت وفي حالة تم الضغط مرة أخرى على المفتاح الموصل بـ A0 سيقوم البك بزيادة الرقم الموجود حاليا على السفن سيجمنت ( 3 مثلا ) فيجعله 4 ثم ينتظر نصف ثانية ودون أن نضغط مرة أخرى على المفتاح يجعله 5 .. وهكذا إلى أن يتم الضغط على المفتاح A1 فيتوقف هذا العداد . . وهكذا
الحل
كود:
void main()
{
trisa=0xff;
trisb=0x00;
portb=0x00;
while(porta.f0==0)
while(1)
{
delay_ms(500);
if(porta.f1==0)
goto a2; a1: portb+=1;
if(portb==10)
portb=0; } a2: while(1) {
if(porta.f0==0)
goto a1; } }



التعديل الأخير تم بواسطة : abuhajer06 بتاريخ 05-11-2009 الساعة 03:33 PM

abuhajer06
:: مهندس ::
تاريخ التسجيل: Jul 2007
المشاركات: 42
نشاط [ abuhajer06 ]
قوة السمعة:
قديم 05-11-2009, 03:36 PM المشاركة 1181   
افتراضي تابع - حلول الدرس الخامس من دورة الأستاذ/ أحمد س. ف. - حفظه الله


السؤال التاسع :: قم بعمل برنامج يقوم بإظهار الرقم 0 على السفن سيجمنت وعند الضغط على المفتاح الموصل بـ a0 يقوم بجمع واحد على الرقم السابق فبالتالي لو كان الرقم الظاهر صفر سيجعله واحد ولو كان الرقم الظاهر 5 سيجعله 6 وهكذا ( معنى هذا أن كل ضغطة على المفتاح (السويتش) يتم زيادة الرقم ). وعند الضغط على المفتاح الموصل بـ a1 سيقوم بجمع 2 على الرقم السابق فلو كان الرقم الظاهر على السفن سيجمنت 2 سيجعله 4 ولو كان أربعة سيجعله 6 . وهكذا .
الحل
كود:
void main()
{
trisa=0xff;
trisb=0x00;
portb=0x00;
while(1)
{
if(porta.f0==0)
{ portb+=1;
if(portb==10)
portb=0; delay_ms(500); }
if(porta.f1==0)
{ portb+=2;
if(portb>=10)
portb=0; delay_ms(500); } } }
السؤال العاشر :: قم بعمل نفس البرنامج السابق ولكن بطريقة عكسية فعند الضغط على المفتاح الموصل بـ a0 يقوم البك بطرح واحد من العدد السابق .. وعند الضغط على المفتاح الموصل بـ a1 يقوم البك بطرح اثنين من العدد السابق .

الحل

كود:
void main()
{
trisa=0xff;
trisb=0x00;
portb=0x00;
while(1)
{
if(porta.f0==0)
{ portb-=1;
if(portb==255)
portb=9; delay_ms(500); }
if(porta.f1==0)
{ portb-=2;
if(portb==255)
portb=9;
if(portb==254)
portb=8; delay_ms(500); } }
}
كود:

السؤال الحادي عشر :: نريد أن نقوم بعمل برنامج تعليمي يقوم بتعليم الأرقام الثنائيةومقابلها بالنظام العشري وتم ما يلي : قمنا بتوصيل 4 ليدات موصلة بـ a1 , a0 , a2 ,a3 وقمنا بتوصيل سفن سيجمنت بـ portb . المطلوب هو عمل برنامج يقوم بالعد من صفر إلى تسعة بالنظامين في نفس الوقت بمعنى أن الرقم الذي سيظهر على الليدات بالنظام الثنائي هو نفس الرقم الذي سيظهر على السفن سيجمنت ولكن بالنظام العشري . فمثلا عن ظهور الرقم 5 على السفن سيجمنت في نفس الوقت سيظهر الرقم 0101 على الليدات ثم بعد ثانية يظهر الرقم 6 على السفن سيجمنت ويظهر في نفس الوقت الرقم 0110 على الليدات وهكذا باستمرار إلى أن يصل العداد للرقم تسعة ثم يبدأ العداد من صفر من جديد .

الحل

كود:
void main()
{
trisa=0x00;
trisb=0x00;
portb=porta=0x00;
while(1)
{
delay_ms(500);
porta+=1;
if(porta==10)
porta=0; portb+=1;
if(portb==10)
portb=0; }
}
كود:

السؤال الثاني عشر :: لنقوم بعملية تطوير للبرنامج التعليمي السابق سنجعل الرقم الذي يبدأ به البرنامج هو صفر (صفر على الليدات وصفر على السفن سيجمنت) وعند الضغط على السويتش الموصل بـ لB6 سيتم تزويد هذا الرقم وجعله واحد أي أن كل ضغطة على هذا السويتش سيتم فيها زيادة الرقم . ويوجد أيضا مفتاح موصل بـ B7 كل ضغطة عليه يقوم بتنقيص هذا العدد .

الحل

كود:
void main()
كود:
{
trisa=0x00;
trisb=0xc0;
porta=portb=0;
while(1)
{
if(portb.f6==0)
{
delay_ms(500);
porta=portb+=1;
if(porta==10)
portb=porta=0;
}
if(portb.f7==0)
{
delay_ms(500);
porta=portb-=1;
if(portb==255)
portb=porta=9;
}
}
}
========================================
وفقنا الله جميعا لما يحب ويرضى ورزقنا وإياكم العلم النافع والعمل الصالح
والسلام عليكم ورحمة الله وبركاته

========================================
في انتظاركم - أي تعليق أي رد
والله الموفق



التعديل الأخير تم بواسطة : abuhajer06 بتاريخ 05-11-2009 الساعة 03:50 PM

نبيل د
:: مهندس ::
تاريخ التسجيل: Mar 2008
المشاركات: 27
نشاط [ نبيل د ]
قوة السمعة:
قديم 07-11-2009, 11:38 AM المشاركة 1182   
افتراضي


اتمنى من الاخوة الرد على السؤال
اريد استعمال 14 مدخل للتحكم في البيك و قد اخترت portb و portd
كيف اضع المتغير k بدلا عن portb و portd في الجملة التالية
trisb=1;//1
trisd=1;//1
for (k=0;k<16384;k++){//1
if (k>1020&&k<2000)//m
}
Hid_Write(&température,4); // l
}
}


الصورة الرمزية ahmad72
ahmad72
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2004
المشاركات: 723
نشاط [ ahmad72 ]
قوة السمعة:
قديم 07-11-2009, 11:58 AM المشاركة 1183   
sun


السلام عليكم ورحمه الله وبركاته
اخى الفاضل انت لم تذكر portbاوportdفى مثالك
الا اذا كنت تريد ان تكتب tris
وبعدها المتغير المقصود k بعد ان تساويه بالمنفذ
ان كان هذا قصدك فلا يجوز فعل ذلك
لابد من كتابه trisوبعدها المنفذ
مثل trisb
اما لو كنت تقصد شى اخر ارجو التوضيح
ارجو ان اكون قد استطعت ان افيدك
بالتوفيق
السلام عليكم


lahoioui
:: مهندس متواجد ::
تاريخ التسجيل: May 2009
المشاركات: 177
نشاط [ lahoioui ]
قوة السمعة:
قديم 07-11-2009, 05:08 PM المشاركة 1184   
افتراضي


اتمنى من الاخوة الرد على السؤال
اريد استعمال 14 مدخل للتحكم في البيك و قد اخترت portb و portd
كيف اضع المتغير k بدلا عن portb و portd في الجملة التالية
trisb=1;//1
trisd=1;//1
for (k=0;k<16384;k++){//1
if (k>1020&&k<2000)//m
}
Hid_Write(&température,4); // l
}
}
هل تقصد أن k يحتوي على 16bits ؟
اذا كنت تقصد ذلك واذا كانت ال bit1 تبدأ من ال portb فلاحظ :
0---------------------------------------------------------------------void main(){-----------------------------------------------------------------------0
trisb=0xff;-----------------------------------------------------------0
trisd=0xff;------------------------------------------------------------0
int k;------------------------------------------------------------------0
k=portd;--------------------------------------------------------------0
k=k*2*2*2*2*2*2*2*2+portb;--------------------------------------0
هنا ال k يحمل قيمة ال portb في ال 8bits الأولى وقيمة ال portd في ال
8bits الأخيرة
ثم تكمل مثالك.


التعديل الأخير تم بواسطة : lahoioui بتاريخ 08-11-2009 الساعة 02:10 PM


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