الأربعاء، 5 فبراير، 2014

Arduino DUE دقة القراءة التماثلية


دقة القراءة التماثلية 





analog Pin Resolution









بطاقة الأردوينو ديو DUE تستخدم مبدلاً رقمياً تناظرياً ADC ذات سعة 12Bit و هذا مغاير لما كنا نستخدنه في بقية اصدارات الأردوينو السابقة التي تحتوي مبدلاً رقمياً تناظرياً سعته 10Bit هذا الأختلاف يسمح للأردوينو ديو DUE بأن تكون أكثر دقه و أكثر حساسية .


فمثلاً الأردوينو اونو Uno تكون حساسيتها :





بينما في الأردوينو ديو Due فتكون :




نلاحظ هنا مدى أكبر للقراءة"من 0-4095 " اضافة لدقة أكبر للقراءة .

لكن هناك ميزة أخرى , و هو الأمر analogReadResolution و يقوم هذا الأمر بالتحكم بطول المبدل الرقمي التناظري ADC فمثلاً :

analogReadResolution (12);

بطول 12Bit من (0-4095)


analogReadResolution (10); 


هكذا تصبح القراءة مشابها لمثيلتها في الأردوينو Uno,Mega و بطول 10Bit من (0-1023)

analogReadResolution (8);


بطول 8Bit من (0-255)


analogReadResolution (4);

بطول 4Bit من (0-16)


هذه ميزة كبيرة ! و سأعرض هذا المثال بحيث يقرأ مقاومة متغيرة باستخدام 4 انماط مختلفة .

التوصيل :






البرنامج :


void setup() { 
// open a serial connection 
Serial.begin(9600); 

} 
void loop() { 
// read the input on A0 at default resolution (10 bits) 
// and send it out the serial connection 
analogReadResolution(10); 
Serial.print("ADC 10-bit (default) : "); 
Serial.print(analogRead(A0)); 
// change the resolution to 12 bits and read A0 
analogReadResolution(12); 
Serial.print(", 12-bit : "); 
Serial.print(analogRead(A0)); 
// change the resolution to 8 bits and read A0 
analogReadResolution(8); 
Serial.print(", 8-bit : "); 
Serial.print(analogRead(A0)); 
// change the resolution to 4 bits and read A0 
analogReadResolution(4); 
Serial.print(", 4-bit : "); 
Serial.println(analogRead(A0)); 
// a little delay to not hog serial monitor 
delay(100); 



} 



الآن ننتقل لأمر الأمر الكتابة analogWriteResolution

بنفس مبدأ القراءة , يستطيع المبدل الرقمي التناظري ADC كتابة قيم ذات طول 12Bit او تحديدها من خلال هذا الأمر .

مثال :

analogWriteResolution(10); 


تكون قيمة المخرج بين 0-1023
analogWriteResolution(12);

تكون قيمة المخرج بين 0-4095

analogWriteResolution(8); 


تكون قيمة المخرج بين 0-255


يجب الأنتباه لأمر في غاية الأهمية , و هي أن الأردوينو Due ذات تيار محدود جداً و العديد من مداخله لا يستطيع اعطاء اكثر من 3 ملي أمبير و في احسن الأحوال 15ملي أمبير , لذلك يجب الحذر عند توصيل أي شيء يسحب او يُصرف تيار كبير .



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



التوصيل :






البرنامج

int sensorVal ;// SENSOR VALUE Stored here
void setup(){
// open a serial connection
Serial.begin(9600);
// make our digital pin an output
pinMode(A0, INPUT);
pinMode(11, OUTPUT);
pinMode(12, OUTPUT); 
}
void loop(){
// read the input on A0 and map it to a PWM pin
// with an attached LED
analogReadResolution(8);
sensorVal = analogRead(A0);
// the default PWM resolution
analogWriteResolution(8);
analogWrite(11,sensorVal );
int sensorVal = analogRead(A0);
// change the PWM resolution to 12 bits
// the full 12 bit resolution is only supported
// on the Due
analogReadResolution(12);
sensorVal = analogRead(A0);
analogWriteResolution(12);
analogWrite(12,sensorVal );
delay(100);



}

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

7 التعليقات :

  1. السلام عليكم
    شكرااا لك استاذ على كل هذا الابداع و جعله الله في ميزان حسناتك

    ردحذف
  2. احسنت معلومات رائعه

    ردحذف
  3. شكرا على هذه المدونة الرائعة .....
    عندي مشكلة في تعريف Arduino due مع العلم أنه لدي windows 8.1 64bit . ;وأيضا مشكلة في عدم ظهوره على arduino IdE
    و أرجو منك الرد في أقرب وقت ..
    ; و شكرا مجددا

    ردحذف

 
Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.