بسم الله الرحمن الرحيم
اهلا اخى المظلوم
كود:
unsigned int adc_Value;
void main() {
تعريف متغير لحفظ القيم فية
__________________________________________________ _____
كود:
ADCON0 = 0;ADCON1 = 14;TRISB = 0;TRISA = 1;
هذة الاوامر لجعل الطرف A0 تعمل كامدخل انالوج
ولكن هذا قديم
والحديث الموجود داخل الميكروسى برو
هو
وهذا بديل هذا السطر
__________________________________________________ ______
كود:
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
ثم انتظار لمدة ثانية ويعد البرنامج الموضوع كلة مرة ثانية
اى استفسار يا خى انا تحت امرك ان شاء الله