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

   

سعد الجسري
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2005
الدولة: UAE
المشاركات: 144
نشاط [ سعد الجسري ]
قوة السمعة:
قديم 28-06-2012, 05:40 AM المشاركة 9   
افتراضي



شكرا والله يجزيك الخير

اعلانات

eng_hamo
:: مهندس ::
تاريخ التسجيل: May 2011
المشاركات: 13
نشاط [ eng_hamo ]
قوة السمعة:
قديم 28-06-2012, 03:25 PM المشاركة 10   
Thumbs up


شكر جزاكم الله خير

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

الصورة الرمزية المظلوم
المظلوم
:: مهندس متميز ::
تاريخ التسجيل: Oct 2011
الدولة: BH
المشاركات: 636
نشاط [ المظلوم ]
قوة السمعة:
قديم 14-08-2012, 04:30 AM المشاركة 11   
افتراضي


بسم الله الرحمن الرحيم

هذا رابط الدائرة والكود وكل شىء

http://www.4shared.com/rar/ycIfjWHR/eng_hemo.html?

وانا عدلت الكود ليصبح هكذا

كود:
unsigned int adc_Value;
 void main() {
  ADCON0 = 0;ADCON1 = 14;TRISB = 0;TRISA = 1;

PWM1_Init(5000);PWM1_Start();

  while(1){
   adc_value = ADC_Read(0);
   if(adc_value==1023){adc_value=255;}
   adc_Value=adc_value/4;
   PWM1_Set_Duty(adc_value);
   delay_ms(1000);
           }
 }
والحمد لله صلحت البروتوس
وجربت الكود وشغال تمام الحمد لله

أستاذي ،، المهندس محمد ،،

هل تتكرم ،، وتشرح لي الكود ولو ببساطه ،،

أنا اريد ان اوصل LDR " حساس ضوء " ،، وذلك على الA0 ،، بدلا من الإنبوت الموجود في الدائرة التي سبقت ! ،،

وبناء على هذا الــدخل INPUT ،، اريد تخزين القيمة في متغير وليكن G مثلا ،، ومن ثم تطبيق هذا المتغير (G) وبعد ذلك تطبيق هذه القيمة في معادلات معينة ،، وتظهر قيم أخرى ولتكن DELTA مثلا ،، ويتم اخراج pwm عن طريق ccp1 ،، لتوصيلها بموسفت مثلا ،،

هذه هي الدائرة :

http://upload.qariya.info/images/qar...fa21b95274.jpg



تمنياتي


الصورة الرمزية funky112233
funky112233
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2009
المشاركات: 664
نشاط [ funky112233 ]
قوة السمعة:
قديم 15-08-2012, 06:15 AM المشاركة 12   
افتراضي


بسم الله الرحمن الرحيم

اهلا اخى المظلوم

كود:
unsigned int adc_Value;
 void main() {
تعريف متغير لحفظ القيم فية
__________________________________________________ _____

كود:
ADCON0 = 0;ADCON1 = 14;TRISB = 0;TRISA = 1;
هذة الاوامر لجعل الطرف A0 تعمل كامدخل انالوج

ولكن هذا قديم

والحديث الموجود داخل الميكروسى برو
هو
كود:
ADC_Init();
وهذا بديل هذا السطر

__________________________________________________ ______

كود:
PWM1_Init(5000);PWM1_Start();
هذا السطر لتفعيل ال PWM وجعل يخرج اشارة بتردد 5 كيلوا هرتز
وجعلة يعمل
__________________________________________________ ______

كود:
 adc_value = ADC_Read(0);
اخذ قيمة العينة الانالوج من طرف المحول رقم 0
__________________________________________________ _______

كود:
if(adc_value==1023){adc_value=255;}
   adc_Value=adc_value/4;
هذا السطر هو سر العمل
فكما تعلم ان المحول يخرج قيمة تصل فى اقصى فولت داخل الى 1024

ولكن ال duty cycle لل PWM تصل اقصى قيمة له الى 255

لهذا يجب تحويل القيمة 1024 الى 255

ولهذا قمت بقسمة الناتج على 4 لتحويلة الى قيمة يمكنا وضعها فى duty cycle

جرب اقسم اى رقم بين 0 و 1024 على 4 ستجد ان القيمة لا تتعدى 255
وهذا ما نريد

ولكن هناك نسبة خطا بسيطة جدا جدا ولا تاثر

ولكن وضعت لها هذا السطر
كود:
if(adc_value==1023){adc_value=255;}
وكى تنتهى مشكلة الخطا تماما قم بوضع القيمة 1020 فى هذا السطر افضل

__________________________________________________ ___________

كود:
PWM1_Set_Duty(adc_value);
   delay_ms(1000);
هنا وبعد القسمة يصبح المتغير adc_value جاهز للستخدام

وقمت بوضعه داخل محدد duty cycle

ثم انتظار لمدة ثانية ويعد البرنامج الموضوع كلة مرة ثانية

اى استفسار يا خى انا تحت امرك ان شاء الله



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