الاثنين، 17 فبراير، 2014

مكتبات خاصة بالأردوينو ديو 1 Arduino DUE

 ADVANCE FUNCTION 1




منذ أن بدأت في استعمال هذه اللوحة التطويرية Arduino DUE و كل مرة أكتشف فيها عالم كبير لا ينتهي من الأمكانيات و القدرات الهائلة المختزنة فيها .

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

مكتبة RTC Timer :

هذه المكتبة تمكنك من استخدام الساعة الداخلية في المتحكم SAM3X و هي تستطيع اعطاءك الوقت و التاريخ ! و أمكانية تعيين الوقت و التاريخ بسهولة تامه . بالإضافة لوجود منبه يعمل على مقارنة التاريخ او الوقت بقيمة معينة و اعطاء تنبيه عند حدوث تشابه بينهما .

في الأصدارات الأحدث من الأردوينو ديو Arduiono DUE يوجد هناك كريستالة داخليه مثبته على اللوحة يمكن رؤيتها في المخطط الخاص بتصميم الدارة  


التعامل مع المكتبة سهل , كل ما ستحتاجه في هذه التجربة :

1) بطاقة أردوينو ديو Arduino DUE  فقط.





بعد تحميل المكتبة و وضعها في مسار المكتبات في مجلد الأردوينو , ثم يمكن تحميل هذا البرنامج في الأسفل :
/*
 advancedFunctions.h - A collection of utilities for Arduino DUE to
 use the advanced functions of the integrated peripherals of
 the Atmel SAM3X8E microcontroller.

    For more infos, please read the README.txt file.

 Written by Leonardo Miliani <www DOT leonardomiliani DOT com>


    The latest version of this library can be found at:
    http://www.leonardomiliani.com/
    or at:
    https://github.com/leomil72


 This sketch tests the RTC module printing on the serial monitor
 the current time & date of the microcontroller.


   This code is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public
 License as published by the Free Software Foundation; either
 version 3.0 of the License, or (at your option) any later version.

    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>

 This code is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

 Copyleft 2013

*/

//include the library
#include "advancedFunctions.h"


//set up the sketch
void setup() {
    Serial.begin(19200);
    delay(2000); //wait a couple of seconds
    if(rtc.setTime(13, 0, 0, 24)) { //set here the time
        Serial.println(("AN ERROR HAS OCCURED WHILE SETTING UP THE CLOCK"));
    }
    if(rtc.setDate(2014, 6, 1, 3)) { //set here the date
        Serial.println(("AN ERROR HAS OCCURED WHILE SETTINH UP THE CALENDAR"));
    }
}


//main loop
void loop() {
    byte tempSec = rtc.getSeconds();

    printTimeAndDate(); //print the current time & date
 Serial.println(""); //empty line

    //wait 1 second
    while (tempSec == rtc.getSeconds());
}


//print the time & date
void printTimeAndDate() {
    Serial.print(rtc.getDay(), DEC);
    Serial.print(("/"));
    Serial.print(rtc.getMonth(), DEC);
    Serial.print(("/"));
    Serial.print(rtc.getYear(), DEC);
    Serial.print(("  -  "));
    Serial.print(rtc.getHours(), DEC);
    Serial.print((":"));
    Serial.print(rtc.getMinutes(), DEC);
    Serial.print((":"));
    Serial.println(rtc.getSeconds(), DEC);
}



أفضل استخدام Atmel Studio لرؤية المتغيرات التي تحدث في الكود بشكل أفضل .



لننتقل للجزء الثاني من المكتبات .


2)مكتبة التصفير الذاتي Watch Dog Timer :


تنبيه : ان أردت أن تثبت هذه المكتبة كما سأشرحها أدناه , يجب عليك أن تُضمن هذه المكتبة دائماً في أي برنامج ستكتبه في الأردينو ديو , لأنه في حالة عدم تضمينها فإن الأردوينو ديو ستعمل لوقت معين و بعدها تعيد تصفير Reset تلقائياً , لذا وجب الأنتباه .


في وقت سابق تحدثت عن هذا النوع من المؤقتات في المدونة لأهميته في عمل تصفير للبرنامج في حالة وقوعه في حاله تعليق deadlock . 


قبل استعمال المكتبة يجب الذهاب للمسار التالي :


arduino1.5.x/hardware/arduino/sam/variants/arduino_due_x/variant.cpp 




ثم تعديل السطر رقم 353 و وضع اشارتين تعليق  //  لعدم تفعيله .

بعد ذلك يمكن تحميل البرنامج ادناه .


/*
    advancedFunctions.h - A collection of utilities for Arduino DUE to
    use the advanced functions of the integrated peripherals of
    the Atmel SAM3X8E microcontroller.

    For more infos, please read the README.txt file.

    Written by Leonardo Miliani <www DOT leonardomiliani DOT com>


    The latest version of this library can be found at:
    http://www.leonardomiliani.com/
    or at:
    https://github.com/leomil72


    This sketch tests the WDT blinking the integrated LED for a while
    then resetting the MCU.


    This code is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public
    License as published by the Free Software Foundation; either
    version 3.0 of the License, or (at your option) any later version.

    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>

    This code is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

 Copyleft 2013

*/

//include the library
#include "advancedFunctions.h"

const byte ledPin = 13;
byte ledStatus = 1;

//set up the sketch
void setup() {
    wdt.enable(1000); //1000 ms of survival
    pinMode(ledPin, OUTPUT);
    Serial.begin(19200);
    Serial.println(" program started !");
}


//main loop
void loop() {
    static byte counter = 0;
    digitalWrite(ledPin, ledStatus);
    delay(500);
    ledStatus ^= 1;
    counter++;
    Serial.print("Counter = ");
    Serial.println(counter);
    if (counter > 10) { //after 10 timer, we freeze the code into an infinite loop
        for(;;); //this is a deadlock
    }
    wdt.restart(); //this ensures that the WDT will not reset the MCU
}




في هذا البرنامج يبقى تنفيذ البرنامج بشكل صحيح حتى يدخل البرنامج في حالة تعليق DeadLock فيعمل البرنامج اعادة تصفير ذاتية ! هذا رائع :) 


ستحتاج فقط لأردوينو ديو Arduino DUE فقط . و يمكن فتح شاشة السيريال لرؤية عمل البرنامج .


ممتاز , اذا تقوم المكتبة بعمل مؤقت للتحقق من وصول البرنامج لنهايته و اذا لم يصل خلال مدة زمنية محددة يقوم البرنامج تلقائياً بعمل تصفير ذاتي للبرنامج .



المكتبة الأخرى ضمن سلسلة المكتبات الخاصة هي مكتبة توليد الأرقام العشوائية  .

3) مكتبة بسيطة هدفها توليد ارقام عشوائية .

البرنامج :
/*
 advancedFunctions.h - A collection of utilities for Arduino DUE to
 use the advanced functions of the integrated peripherals of
 the Atmel SAM3X8E microcontroller.

    For more infos, please read the README.txt file.

 Written by Leonardo Miliani <www DOT leonardomiliani DOT com>


    The latest version of this library can be found at:
    http://www.leonardomiliani.com/
    or at:
    https://github.com/leomil72


 This sketch tests the TRNG module printing on the serial monitor
 some random numbers.


   This code is free software; you can redistribute it and/or
 modify it under the terms of the GNU General Public
 License as published by the Free Software Foundation; either
 version 3.0 of the License, or (at your option) any later version.

    You should have received a copy of the GNU General Public License
    along with this library.  If not, see <http://www.gnu.org/licenses/>

 This code is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

 Copyleft 2013

*/

//include the library
#include "advancedFunctions.h"


//set up the sketch
void setup() {
    Serial.begin(19200);
    delay(2000); //wait a couple of seconds
}


//main loop
void loop() {
    byte tempSec = rtc.getSeconds();

    printRndNumbers(); //print some random numbers
 Serial.println(""); //empty line

    //wait 1 second
    delay(1000);
}


//print some random numbers
void printRndNumbers() {
    Serial.print(("Random byte: "));
    Serial.println(trng.getByte(), DEC);
    Serial.print(("Random integer: "));
    Serial.println(trng.getInt(), DEC);
    Serial.print(("Random long: "));
    Serial.println(trng.getLong(), DEC);
}



يمكن توليد ارقام ذات حدود مختلفة  int, long , byte

يمكن رؤية المصدر الذي توجد فيه المكتبات من خلال الرابط 

0 التعليقات :

إرسال تعليق

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