مراجعة وحدة (موديول) المحول من تناظرى لرقمى A/D converter module

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

مراجعة وحدة (موديول) المحول من تناظرى لرقمى A/D converter module

مُساهمة من طرف Admin في الأحد مارس 13, 2016 7:42 pm

مراجعة وحدة (موديول) المحول من تناظرى لرقمى A/D converter module

مقدمة :
على الرغم من أن استخدام المحول من تناظرى إلى رقمى A/D يبدو معقدا جدا ، لكنه فى الأساس فى غاية البساطة ، فهو أبسط من وحدات المؤقتات ومن وحدة (موديول) الاتصالات .
الخصائص :
• يقوم المحول A/D بتحويل إشارة الدخل التناظرية إلى عدد ثنائى مكون من 10 خانات .
• يتم تخزين نتيجة التحويل فى سجلات خاصة داخل الميكروكونترولر .
• يوجد فى مختلف أجهزة الميكروكونترولر PIC عدد مختلف من المداخل التناظرية والتى سوف نستعرض بعضها لاحقا .
• عمل المحول A/D يكون تحت سيطرة بتات سجل/ سجلات التحكم فى المحول A/D (ADCON) .

كيف يتم استخدام المحول A/D ؟
من أجل تمكين المحولA/D من العمل بدون مشاكل وكذلك لتجنب النتائج الغير متوقعة ، فمن الضروري الأخذ فى الاعتبار ما يلي :
• المحول A/D لا يفرق بين الإشارات الرقمية والتناظرية. من أجل تفادي الأخطاء في القياس أو تلف الشريحة ، يجب تهيئة الأطراف كمداخل تناظرية قبل بدء عملية التحويل .الخانات المستخدمة لهذا الغرض تخزن (تحفظ) في سجلات التحكم فى اتجاه المنفذ TRIS وتحديد الدخل التناظرى ANSEL .
• بشكل عام يمكن القول أن قياس الجهد فى المحول يستند على مقارنة جهد الدخل التناظرى مع مقياس أو مدى scale داخلى يحتوى على 1024 قسم أو علامة mark (عشر خانات أى 2 أس عشرة تساوى 1024 ) . أدنى قسم أو علامة فى هذا التدريج تناظر جهد يسمى جهد المرجع السالب Vref- (فى الوضع الافتراضى Vref-=0V ) ، بينما أقصى علامة تناظر جهد يسمى جهد المرجع الموجب Vref+ فى الوضع الافتراضى Vref+=5V ) .
الشكل التالى يبين جهود المراجع القابلة للاختيار فضلا عن قيم الحد الأدنى والحد الأقصى .


برمجة المحول ADC مع mikroC PRO تتم بدون عناء خاصة مع :
إمكانيات المترجم mikroC PRO فى التعامل مع المحول من تناظرى لرقمى ADC
مكتبة التحويل من تناظرى لرقمى ADC Library :
موديول (وحدة) المحول ADC متوفر فى عدد من الميكروكونترولر . يتم التحويل من تناظرى لرقمى عن طريق استخدام مكتبة الدالة ADC_Read ومن ثم يجب ضمها لتوفير العمل المريح مع هذا الموديول .
الدالة ADC_Read :
نموذج دالة التحويل من تناظرى إلى رقمى ADC ومثال على النموذج :



وهى دالة اسمها ADC_Read قيمة عودتها تكون unsigned أى unsigned int وتمرر بارامتر يمثل رقم القناة بالقيمة short أى short int .
النتائج أو العائدات Returns :
عند تنفيذ هذه الدالة فإنها تعيد قيمة ذات 10 بتات يتم قراءتها من قناة تناظرية محددة من بين القنوات المتاحة.
البارامتر channel يمثل قناة الدخل التناظرى والتى منها يتم التحصل (اكتساب) على القيمة التناظرية .
مثال للنموذج :



تعليق :
تقوم هذه الدالة بكل ما هو مطلوب لإتمام تتابع عملية التحويل من تناظرى لرقمى دون دخول المبرمج فى تفاصيل ، فلقد وفرت أفضل ظروف مناسبة للعملية ، مثل جعل الجهد المرجعى السالب متصل داخليا بالأرضى أى Vref-=0 والجهد المرجعى الموجب متصل داخليا بالجهد 5V أى أن Vref+ = 5V حتى نحصل على أكبر دقة ويكون 5V = 1024 ، كما جعلت محازاة النتيجة لليمين حتى يسهل معالجتها ووفرت أفضل تردد لمذبذب المحول والفترة الزمنية للتحويل كما تولت تتابع عملية التحويل نفسها .
لم تترك الدالة للمبرمج سوى خيار واحد هو اختيار قناة أو قنوات الدخل التناظرى والذى يتم عن طريق سجل أو سجلات الاختيار تحديد قنوات المداخل التناظرية ANSEL كما سوف يتضح من البرنامج التالى .

البرنامج الشائع للتعامل مع ADC وهو البرنامج الذى ياتى ضمن وثائق المترجم ميكروسى يرو :
• هذا البرنامج يستخدم الميكروكونترولر PIC16F887 ، وفيه يتم استخدام دالة المحول A/D لقراءة الجهد التناظرى (من على مقاومة متغيرة ويتغير من 00V إلى 5V ) من على طرف الدخل التناظرى AN2 (القناة الثانية) ، ثم تحويل هذا الجهد التناظرى إلى قيمة عددية مناظرة ، ولمشاهدة نتيجة التحويل (عدد يقع بين 0 و 1024 ) عن طريق عرضها على 8 ليدات متصلة بالمنفذ PORTB والمنفذ PORTC (لا يكفى منفذ واحد لعرض عدد حتى 1024 ) .
• فى البداية يجب تصفح الداتا شيت لمعرفة كيف يتم إعداد السجلات والمنافذ وفق البرنامج المطلوب ,
الميكروكونترولر PIC16F887 لديه 14 قناة تنظرية (كما هو مبين بالشكل أدناة) ومن ثم يوجد سجلين لاختيار القنوات التناطرية وهما ANSEL (السجل المنخفض) و ANSELH (السجل المرتفع) .



• الوضع الافتراضى لجميع بتات هذه السجلات هى الحالة (1) كما فى الشكل أدناه ، وهو ما يعنى أنها كلها محددة للتعامل كمداخل لقنوات تناظرية ومن ثم لتحديدها للتعامل على أنها مداخل / مخارج رقمية يجب تحد بت الطرف المقابل بالصفر .
• فى هذا البرنامج سوف نستخدم الطرف المقابل لدخل القناة AN2 (البت الثالثة) فقط وباقى الأطراف تكون مداخل مخارج رقمية ولذلك يكون ANSEL=0b00000100 و ANSELH=0 .



• يجب إلا ننسى إعداد بتات السجلات TRIS المناظرة كمداخل ، وهنا TRISA=0xFF لتكون جميع أطراف المنفذ PORTA كمداخل .
الدائرة الكهربية :



البرنامج :


الكود:


/*
 * Project name:
    ADC_on LEDs (Display the result of ADC on LEDs)
 * Description:
      A simple example of using the ADC library.
      ADC results are displayed on PORTC and PORTB.
 *  MCU:            PIC16F887
      Oscillator:      HS, 08.0000 MHz
      SW:              mikroC PRO for PIC
 * NOTES:
    - Turn on PORTC and PORTB LEDs.
    - To simulate analog input on ADC channel 2, use potentiometer .
 */

unsigned int temp_res;

void main() {

     ANSEL  = 0x04;                 // Configure AN2 pin as analog
     ANSELH = 0;                   // Configure other AN pins as digital I/O

     TRISA  = 0xFF;                 // PORTA is input
   TRISB  = 0;                   // PORTB is output
     TRISC  = 0;                   // PORTC is output


     do {
          temp_res = ADC_Read(2);     // Get 10-bit results of AD conversion
          PORTB = temp_res;           // Send lower 8 bits to PORTB
          PORTC = temp_res >> 8;       // Send 2 most significant bits to RC1, RC0

     }    while(1);
}

1- مقدمة البرنامج : التعليقات : /*………*/
• اسم البرنامج : ADC_on LEDs لعرض نتائج التحويل ADC على ليدات
• الوصف : مثال بسيط لاستخدام مكتوبة المحول ADC .
• الميكروكونترولر : PIC16F887 .
• تردد المذبذب : HS, 08.0000 MHz
• المترجم mikroC PRO for PIC
• ملاحظات : المدخل التناظرى : القناة الثانية AN2 ويتم محاكاته بمقاومة متغيرة .والليدات متصلة بالمنفذ PORTC والمنفذ PORTD .
2- قبل الدخول إلى الدالة الرئيسية يتم تعريف متغير نوع unsigned int ( بسعة 2 بايت أى 16 بت ليتسع لنتيجة التحويل ADC ذات العشر بتات ) بالاسم temp_res (أو أى اسم يناسب البرنامج الفعلى ) .



الكود:

unsigned int temp_res;

3- بداية الدالة الرئيسية

void main() {
4- أعدادات سجلات التحكم والمنافذ :
أ‌- إعداد : اختيار القناة (أو القنوات) المطلوب أن تكون كمدخل تناظرى وجعل باقى القنوات كمداخل /مخارج رقمية للاستفادة منها وذلك عن طريق سجل اختيار القنوات السفلية ANSELوسجل اختيار القنوات العلوية (يعتمد على عدد القنوات بالميكروكونترولر ).
• إعداد القناة الثانية أى الطرف AN2 كمدخل تناظرى والخانة المتحكمة فيه هى الخانة الثالثة بالسجل ANSEL لذلك يجب وضع القيمة 0x04 = 0b00000100 بهذا السجل .


الكود:

  ANSEL  = 0x04;              // Configure AN2 pin only  as analog 0b00000100

• لا توجد أى قنوات تناظرية مطلوبة فى سجل التحكم ANSELH ولذلك يتم وضع القيمة صفر به حتى يمكن الاستفادة منه كمداخل / مخارج رقمية وهى الوظائف العامة .


الكود:

  ANSELH = 0;                // Configure other AN pins as digital I/O

• إعداد جميع أطراف السجل PORTA كمداخل لأن به المدخل التناظرى .
• إعداد جميع أطراف السجل PORTC كمخارج لتوصيل ليدات بها .
• إعداد جميع أطراف المنفذ PORTB كمخارج لتوصيل ليدات بها .


الكود:


  TRISA  = 0xFF;              // PORTA is input
  TRISB  = 0;                // PORTB is output
  TRISC  = 0;                // PORTC is output



5- إنشاء حلقة غير منتهية باستخدام do { ……} while (1) وفيها يتم :
do {
• قراءة القيمة التاظرية من على القناة رقم (2) باستخدام الدالة ADC_Read(2) للحصول على نتيجة التحويل ذات العشر بتات ونسخها إلى المتغير ذات الستة عشر بت temp_res .


الكود:

    temp_res = ADC_Read(2);  // Get 10-bit results of AD conversion

• إرسال الثمانى خانات المنخفضة بالمتغير temp_res إلى الثمانى خانات الخاصة بالمنفذ PORTB .


الكود:

    PORTB = temp_res;        // Send lower 8 bits to PORTB

• عمل إزاحة لمحتويات المتغير ذات الستة عشر خانة بمقدار بايت أى 8 خانات جهة اليمين وتكون النتيجة أن تزاح الخانتان الأولى والثانية فى البايت العلوى للمتغير (وهما باقى النتيجة التناظرية) إلى الخانتان الأولى والثانية فى البايت السفلى للمتغير , عندئذ يتم نسخ محتويات المتغير بقيمته الجديدة إلى المنفذ PORTC فيتم نقل الخانتان المتبقيتان من نتيجة التحويل إلى الخانة RC1 و RC0 لعرض النتيجة كاملة على PORTB + (RC0+RC1)


الكود:

    PORTC = temp_res >> 8;    // Send 2 most significant bits to RC1, RC0

• تكرار الحلقة إلى مالا نهاية


الكود:

  } while(1);

6- نهاية الدالة الرئيسية والبرنامج .


الكود:

}

المحاكاة :










Admin
Admin

عدد المساهمات : 935
تاريخ التسجيل : 28/01/2014

معاينة صفحة البيانات الشخصي للعضو http://fathallaabdelaziz.forumarabia.com

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة

- مواضيع مماثلة

 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى