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

أدوات الموضوع

الصورة الرمزية haidar ayad
haidar ayad
:: مهندس متواجد ::
تاريخ التسجيل: Nov 2011
الدولة: العراق
المشاركات: 178
نشاط [ haidar ayad ]
قوة السمعة:0
قديم 26-04-2013, 05:18 PM المشاركة 1   
ha سؤال في دالة الـ Delay Twitter FaceBook Google+



السلام عليكم
كنت كتبت برنامج في اشارة يخرج اشارة PWM ولكن عرض النبضة الـ high or low voltage كان بالمايكروا والزمن متغير ...فاستخدمت الدالة التالية :

كود:
int Ton=10;

LL:
vdelay_ms(Ton/1000);

Ton --;
goto LL;
لكن عندما رايت الموجة الخارجة وجدتها لا تتناقص وفق ما اريد ألا اذا حذفت قسمتها على الاف (/1000)
وانا لا اريدها بالملي بل اريدها ان يكون زمنها بالمايكروا فكيف الحل ؟

اعلانات

magdy_3
:: مهندس متميز ::
تاريخ التسجيل: Aug 2006
الدولة: Philippines
المشاركات: 343
نشاط [ magdy_3 ]
قوة السمعة:0
قديم 26-04-2013, 06:48 PM المشاركة 2   
افتراضي


اكتب
;(for(x=0;x<y;x++)delay_us(1
هنا عدد y هيساوى عدد المايكرو ثانية


التعديل الأخير تم بواسطة : magdy_3 بتاريخ 26-04-2013 الساعة 06:58 PM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:394
قديم 26-04-2013, 08:29 PM المشاركة 3   
افتراضي


قبل منقشة الكود اذا كان هناك كود اخر فانه سوف يتاثر بكود توليد النبضات و يؤثر فيه . و عليه من الافضل استخدام مكتبة PWM الجاهزة في معظم المتحكمات ...
اما اذا كان الكود يشمل توليد النبضات فقط فيمكنك التحكم بها من خلال مقاومة متغيرة ...


الصورة الرمزية haidar ayad
haidar ayad
:: مهندس متواجد ::
تاريخ التسجيل: Nov 2011
الدولة: العراق
المشاركات: 178
نشاط [ haidar ayad ]
قوة السمعة:0
قديم 26-04-2013, 10:33 PM المشاركة 4   
افتراضي


قبل منقشة الكود اذا كان هناك كود اخر فانه سوف يتاثر بكود توليد النبضات و يؤثر فيه . و عليه من الافضل استخدام مكتبة PWM الجاهزة في معظم المتحكمات ...
اما اذا كان الكود يشمل توليد النبضات فقط فيمكنك التحكم بها من خلال مقاومة متغيرة ...
شكرا لكما ....انا لم استخدم delay_us الجاهز اللي بالمايكروا واعمل له حلقة FOR

لانه لا يقبل ان اضع فيه كلمة وفقط رقم ...و وجدت الدلي المتغير اسهل ولكنه بالملي وليس بالمايكروا....

استاذ حيدر انا اريد ان اضم الكود السابق للمقارن مع هذا الكود اللي اولد فيه الاشارة التالية :
http://store2.up-00.com/Apr13/HOD15448.jpg

كود:
   void main()
     {
           int ToN=190,ToFF=10,i ;

        trisb = 0 ;                     // set PORTB as output
        portb = 0 ;                     // clear PORTB

        for(;;)
              {

                          portb=0b00000001;
                           vdelay_ms(ToN*0.001) ;
                           ToN-- ;

                          portb=0b00000000;
                            vdelay_ms(ToFF*0.001) ;
                           ToFF++ ;

                            if(Ton==10)
                        {
                                 for(i=1;i<=180;i++)
                         {
                           portb=0b00000001;
                            vdelay_ms(ToN*0.001) ;
                           ToN++ ;

                           portb=0b00000000;
                            vdelay_ms(ToFF*0.001) ;
                           ToFF-- ;
                         }
                       }


              }
     }
والكود ينجح علي اذا حذفت القسمة على الف او الضرب 0.001

وانا اريد الزمن بالمايكرو وليس بالملي ويجب ان يكون مع الكود السابق الذي كتبته لي استاذ حيدر

بالمناسبة هذا الكود كتبته للـ84 ونجح اما للـ683 فيجب تغيير اسم البورت مثلا تبديله بـ gpio.0=0 بدل portb


التعديل الأخير تم بواسطة : haidar ayad بتاريخ 26-04-2013 الساعة 10:37 PM

الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 10,061
نشاط [ حيدر علاج حسن ]
قوة السمعة:394
قديم 27-04-2013, 02:54 AM المشاركة 5   
افتراضي


استخدم مكتبة pwm ستوفر عليك الكثير من الجمل البرمجية و تعطيك دقة عالية ...
راجع المكتبة من مساعد الميكروسي ..


4th ENgineer
:: مهندس ::
تاريخ التسجيل: Mar 2013
المشاركات: 31
نشاط [ 4th ENgineer ]
قوة السمعة:0
قديم 27-04-2013, 02:35 PM المشاركة 6   
افتراضي


قبل منقشة الكود اذا كان هناك كود اخر فانه سوف يتاثر بكود توليد النبضات و يؤثر فيه . و عليه من الافضل استخدام مكتبة PWM الجاهزة في معظم المتحكمات ...
اما اذا كان الكود يشمل توليد النبضات فقط فيمكنك التحكم بها من خلال مقاومة متغيرة ...
كيف استخدم مكتبة PWM في atmega8 ؟؟


اميرسمير
:: مهندس ::
تاريخ التسجيل: Nov 2011
المشاركات: 30
نشاط [ اميرسمير ]
قوة السمعة:0
قديم 01-05-2013, 11:27 PM المشاركة 7   
افتراضي


اخوك الصغير المبتدى
حبيبي انت لقد ادخلت نفسك في مشكلة برمجية وهناك بدائل لتلك المشكلة وهي أن لا تستعمل VDELAY
والحل هو استخدم فقط (DELAY) لكن استخدم جمل شرط مثل (if) مع المتغير الذي حددته مثل إذا كانت قيمة TON عشرة فقم بالتاخير
DELAY_NS(1)

ولكن هذا طويل لان لديك 199 مرة

النص البرمجي الذي تبته في جملت DELAY يدلل من الناحية الرياضية على الأتي:

الزمن حددته بـ الملي ثانية وهذا يعني 10 اس -3 اليس كذالك مقسم ايضا على 1000 وهذا يعني ايضا مضروب مرة اخرى ب 10 اس 3-
يصبح الرقمان هو 10 اس 6-
الذي يمثل المايكرو ثانية
اليس كذالك
ثم قمت بضربه ب قيمة TON
فيصبح الزمن الكلي هو 10 اس (6-) مضروبة في TON
اي عدد المايروات هو بعدد TON

لذا سوف أكتب نص برمجي يقوم بأستخدام عدد مرات من زمن قدره مايكرو بعدد قيمة TON

ملاحضة انا نوعا ما مبتدئ بالبرمجة قد تصدف هناك هفوات ارجو الأنتباه لكن الجوهر فيي الفكرة)

FOR Ton to 0
delay_us(1)
next ton


اميرسمير
:: مهندس ::
تاريخ التسجيل: Nov 2011
المشاركات: 30
نشاط [ اميرسمير ]
قوة السمعة:0
قديم 01-05-2013, 11:34 PM المشاركة 8   
افتراضي


اخي النص النهائي الذي انت كتبته سوف يصبح

void main()
{
int ToN=190,ToFF=10,i ;

trisb = 0 ; // set PORTB as output
portb = 0 ; // clear PORTB

for(;
{

portb=0b00000001;
for ton to 0
delay_ms(1) ;
next ton
ToN-- ;

portb=0b00000000;

for ton to 0
delay_ms(1) ;
next ton

for ton to 0
delay_ms(1) ;
next ton
ToFF++ ;

if(Ton==10)



{
for(i=1;i<=180;i++)
{
portb=0b00000001;

for ton to 0
delay_ms(1) ;
next ton
ToN++ ;

portb=0b00000000;

for ToFF to 0
delay_ms(1) ;
next ToFF

ToFF-- ;
}
}


}
}

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


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

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025