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

   

ennng
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 453
نشاط [ ennng ]
قوة السمعة:
قديم 13-04-2013, 02:26 PM المشاركة 9   
افتراضي



لاحظ ان عبارة التاخير تؤخر الزمن بمقدار 10 مايكرو ثانية في كل عملية تكرار و عند وصول عمليات التكرار الى 300 فان الزمن سيكون 300 × 10 = 3 ملي ثانية ...
بارك الله فيك اخي حيدر الان وضح الامر وممكن نعمل الوقت هذا لدورة واحدة او دورتين على حسب مانريد وممكن نعملها على حسب التردد اللي عندي لدورة واحدة على سبيل المثال ان التردد عندي 10 هيرتز فان الزمن الدوري راح يكون 100ms وبالتالي نحتاج الي تكرار و delay مناسب للوصول الي هذا الوقت. هل كلامي صح او لا!
ممتاز اخي طيب اذا انتهى الوقت بيصفر ويبدأ من جديد لاخذ الدورة الثانية لكن قدنا حفظنا max1 الاول بالنسبة للدورة الاولى ونعمل مثلها في الدورة الثانية ونحفظ max2 وهكذا...

مانحتاجة هنا:
1- هو عمل مثل ذالك لدورة واحدة يعني نخزن max1 للدورة الاولى ونخزن max2 للدورة الثانية max2 ... وهكذا لمدة ولنقل اربعة او ثلاث دورات.
2-الامر الاخر كيف نتأكد اذا كان عندنا sine wave بمقدار واحد راح تكون قيم max مثل بعض نحن نحتاج عملها لاشارة مختلفة في المقدار مثل اللي في الصورة الاولى في المشاركة حتى نتأكد ان العملية ماشية صح!!
3-هل اذا تعاملنا مع دورة واحدة في جهود منخفضة ولنقل من 50 هيرتز واقل هل نحتاج الى كرستالة عالية او 1 ميغا تؤدي الغرض.


بارك الله فيك اخي حيدر

اعلانات

الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 9,848
نشاط [ حيدر علاج حسن ]
قوة السمعة:
قديم 13-04-2013, 04:07 PM المشاركة 10   
افتراضي


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

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

ennng
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 453
نشاط [ ennng ]
قوة السمعة:
قديم 13-04-2013, 09:32 PM المشاركة 11   
افتراضي


عندي اشارة ب 5 هيرتز و الamplitude بتاعها 1 فولت اي peak to peak ب 2
وهذا حصلت علية لكن انت بتقول نخزن max الاول قبل مانصفر !!
ياليت تشوف الكود وهنا حصلت على نفس القيمة لدورتيين لان الاشارة متساوية في amplitude . نريد عملها على اشارة اخرى يكون max تبعها مختلف


الكود
كود:
sbit LCD_RS at Rd2_bit;
sbit LCD_EN at Rd3_bit;
sbit LCD_D4 at Rd4_bit;
sbit LCD_D5 at Rd5_bit;
sbit LCD_D6 at Rd6_bit;
sbit LCD_D7 at Rd7_bit;

sbit LCD_RS_Direction at TRISd2_bit;
sbit LCD_EN_Direction at TRISd3_bit;
sbit LCD_D4_Direction at TRISd4_bit;
sbit LCD_D5_Direction at TRISd5_bit;
sbit LCD_D6_Direction at TRISd6_bit;
sbit LCD_D7_Direction at TRISd7_bit;
char txt[12];
char k[12];
float current=0, current1=1023;
int i=0;
void main()
 {
 trisa=1;trisb=0;trisc=0;
 lcd_init();
 lcd_cmd(_LCD_CURSOR_OFF);
 while(1)
         {
          if(current<adc_read(0))current=adc_read(0);
          FloatToStr(((current/100)),txt);
          lcd_out(1,1,txt);
          
          
          i++;
          delay_us(10);
          if(i>20000){i=0;current=0;}
          
          if(current<adc_read(0))current=adc_read(0);
          FloatToStr(((current/100)),k);
          lcd_out(2,1,k);



          }

}


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 9,848
نشاط [ حيدر علاج حسن ]
قوة السمعة:
قديم 13-04-2013, 10:02 PM المشاركة 12   
افتراضي


طبعا تضهر نفس النتيجة لانك حسبت القيمة العظمى لنفس الاشارة مرتين ...
سوف اجهز لك الكود و نخزن 10 او 20 قيمة عظمى في مصفوفة ..ز


ennng
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 453
نشاط [ ennng ]
قوة السمعة:
قديم 14-04-2013, 09:42 AM المشاركة 13   
افتراضي


بارك الله فيك اخي حيدر..


الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 9,848
نشاط [ حيدر علاج حسن ]
قوة السمعة:
قديم 14-04-2013, 12:41 PM المشاركة 14   
افتراضي


هذا الكود يقوم بجمع 20 عينة من القيم العظمى و تخزينها داخل المصفوفة ....
كود:
sbit LCD_RS at Rd2_bit;
sbit LCD_EN at Rd3_bit;
sbit LCD_D4 at Rd4_bit;
sbit LCD_D5 at Rd5_bit;
sbit LCD_D6 at Rd6_bit;
sbit LCD_D7 at Rd7_bit;

sbit LCD_RS_Direction at TRISd2_bit;
sbit LCD_EN_Direction at TRISd3_bit;
sbit LCD_D4_Direction at TRISd4_bit;
sbit LCD_D5_Direction at TRISd5_bit;
sbit LCD_D6_Direction at TRISd6_bit;
sbit LCD_D7_Direction at TRISd7_bit;
char txt[12];
char j=0;
int current=0;
int i=0;
char matrix[]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
void main()
 {
 trisa=1;trisb=0;trisc=0;
 lcd_init();
 lcd_cmd(_LCD_CURSOR_OFF);
 while(1)
         {
          if(current<adc_read(0))current=adc_read(0);

          i++;
          delay_ms(1);
          if(i>200)
                  {matrix[j]=current*5;
                  IntToStr(matrix[j],txt);
                  lcd_out(1,1,txt);
                  current=0;
                  i=0;j++;
                  if(j >= 20)j=0;
                  }


          }

}


ennng
:: مهندس متميز ::
تاريخ التسجيل: Jul 2010
المشاركات: 453
نشاط [ ennng ]
قوة السمعة:
قديم 14-04-2013, 03:30 PM المشاركة 15   
افتراضي


اكثر من رائع اخي حيدر وبارك الله فيك وكثر من امثالك, عندي بعض الاستفسارات وتحملني شوي:

1- هل الكود يقرأ max كل دورة وهي (0.2s اي 5 هيرتز وذالك من خلال 200*0.001)
وكل قيمة max تتخزن في المصفوفة matrix[] !! هل كلامي صحيح.

2-بيقرأ عندي قيمة واحدة على شاشة LCD واعتقد ان السبب هو لان max تبع الاشارة متساوي في جميع الحالات!! هل بالامكان ادخال اشارة amplitudes تبعها مختلف لكل دورة للتأكد.

3- بالنسبة للقيمة الصغرى لكل دورة اعتقد نفس المبدأ لكن السؤال هل نفصلها ب if statement لوحدها او نضعها داخل ال if تبع max حتى نضمن القراءة العظمى والصغرى لنفس الدورة.

4-طيب اذا اصلا الاشارة الداخلة غير معروف ترددها او انه متغير هل هذه الطريقة تنفع او لا .


التعديل الأخير تم بواسطة : ennng بتاريخ 14-04-2013 الساعة 04:30 PM

الصورة الرمزية حيدر علاج حسن
حيدر علاج حسن
:: مشرف منتدى الهندسة الكهربائية ::
تاريخ التسجيل: Mar 2005
الدولة: IRAQ
المشاركات: 9,848
نشاط [ حيدر علاج حسن ]
قوة السمعة:
قديم 15-04-2013, 01:32 AM المشاركة 16   
افتراضي


1- نعم الكود يقرا قيمة عضمى واحدة لكل دورة ( 200 ملي ثانية ) و حسب التردد 5 هرتز ..
وكل قيمة عضمى تخزن في المصفوفة لحد عشرين قيمة ثم يبدا بتخزين قيم جديدة ...
2- يقرا قيمة واحدة على الشاشة لاننا طلبنا منه ذلك ولك ان تعرض كمية من القيم حسب اسيعاب الشاشة ... القيم متساوية لان الدخل واحد ... غير اشارة الدخل من خلال البوت و سوف ترى التغيير في القراءات ..

3- نضعها مع MAX لكي يستطيع البك اللحاق بالموجة و اخذ عينات اكبر منها . و ايضا كما تفضلت اخذ القيمة العظمى و الصغرى لنفس الدورة ...

4- تنفع لو اخذنا الجانب الاحتياطي برفع تردد الكرستالة الى 20 او اكثر و تقليل زمن اخذ العينات على ان يكون اصغر من الزمن الدوري للموجة القادمة ...



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