مثال توضيحى :
فى هذا المثال سوف يتم تهيئة موديول PWM وتحديده لكى يعطى قطار من النبضات بدورة خدمة بنسبة 50% .
لهذا الغرض : نستخدم ثلاثة دوال : دالة التهيئة PWM1_Init() ودالة البدء PWM1_Start() ودالة تحديد دورة الخدمة PWM1_Set_Duty() .
جميع هذه الدوال ضمن مكتبة PWM بالمترجم mikroC PRO for PIC فقط يجب ضم المكتبة لمشروع البرنامج عندئذ يمكن استدعائها .
الخطوات :- تعريف متغير يمثل دورة الخدمة
unsigned short duty_c; // Define variable duty_c
- إنشاء دالة جديدة تضم جميع الإعدادات الابتدائية الرئيسية باسم initMain ويتم استدعائها فى بداية الدالة الرئيسية بغرض تسهيل قراءة وفهم البرنامج علاوة على حفظ تلك الإعدادات لاستخدامها برامج أخرى مما يوفر سهولة تطوير وقت البرمجة .
void initMain() {
تحتوى هذه الدالة على الإعدادات التالية :
# إعداد جميع الأطراف كمداخل أو مخارج رقمية فقط عن طريق تصفير سجلى اختيار المداخل التناظرية ANSEL و ANSELH :
ANSEL = ANSELH = 0; // All I/O pins are configured as digital
# إعداد الحالة الابتدائية لأطراف المنفذ PORTC كمخارج :
PORTC = TRISC = 0; // Initial state of port C output pins
# إعداد نظام PWM للوحدة الأولى CCP1 ليعمل على تردد initMain
PWM1_Init(5000); // PWM module initialization (initMain)
}
void main() {
وتحتوى على :
# كما ذكرنا فى بدايتها يتم استدعاء دالة الأعدادات الرئيسية بما فى ذلك تهيئة نظام PWM.
initMain();
# الخطوة الأولى فى نظام PWM هى إعطاء(إسناد أو تخصيص) قيمة ابتدائية لمتغير دورة الخدمة , الرقم 127 يعنى النسبة 50% :
duty_c = 127; // Initial value of duty-cycle
# والخطوة الثانية بدء وحدة (موديول) نظام PWM باستدعاء دالة البدء :
PWM1_Start(); // Start PWM1 module
# والخطوة الثالثة استدعاء دالة تحديد (ضبط) نظام PWM ليعمل على القيمة المحددة بمتغيره وهى 50% :
PWM1_Set_Duty(duty_c); // Set PWM duty-cycle to 50%
...
...
كود:
/* In this example, PWM module is initialized and set to give a pulse
train of 50% dutycycle.
For this purpose, functions PWM1_Init(), PWM1_Start() and
PWM1_Set_Duty() are used.
All of them are already contained in the mikroC PRO for PIC PWM
library and just need to
be copied to the program. */
unsigned short duty_c; // Define variable duty_c
void initMain() {
ANSEL = ANSELH = 0; // All I/O pins are configured as digital
PORTC = TRISC = 0; // Initial state of port C output pins
PWM1_Init(5000); // PWM module initialization (5KHz)
}
void main() {
initMain();
duty_c = 127; // Initial value of duty-cycle
PWM1_Start(); // Start PWM1 module
PWM1_Set_Duty(duty_c); // Set PWM duty-cycle to 50%
...
...