الخميس، 11 أبريل، 2013

المتحكم الأصغري ATTINY 85

  المتحكم الأصغري ATTINY85 


هل لديك مشروع يحتاج عدد قليل من المداخل و المخارج  ؟ هل حجم المايكروكنترولر في بعض الأحيان يعتبر ميزة سلبية لمشروعك ؟ هل ترغب في تصغير مشروعك ليناسب الوظائف الدقيقة ؟  بعد قراءتك لهذه التدوينة ستتعرف على المتحكم ATTINY85 و ستعرف أكثر عن مزاياه و خصائصه و محدداته .

المتحكم الأصغري  
ATTINY85 من شركة اتميل Atmel له فقط 8 أرجل , بذاكرة فلاش 8Kbyte و وحدة معالجة مركزية 8 bit   , و الجدول أدناه يبين المواصفات القياسية لهذا المتحكم :



و يمكن التعرف على المواصفات الكاملة له من خلال زيارة موقع الشركة على هذا الرابط ATMEL



ما سنهتم به اليوم هو توصيل هذا المتحكم و برمجته ضمن بيئة أردوينو البرمجية Arduino IDE .

في البداية توزيع أرجل لهذا المتحكم :



 و بالنسبة للمسميات في لغة أردوينو , توزيع الأرجل يعطى في هذا المخطط :


  • المعدات التي سنحتاجها لهذه التجربة :

ستحتاج لتنفيذ هذه التجربة إلى :
1) بطاقة اردوينو " uno, deumilinova  " 

2) المتحكم ATTINY 85 
3)مكثف 10uF .
4) Breadboard .
5)اسلاك توصيل Solderless jumper .



لنبدأ :

سنقوم في هذه التجربة بتحويل بطاقة الأردوينو Uno إلى مبرمجة   تقوم من خلالها بتحميل البرنامج إلى 
ATTINY 85  .

البروتوكول المستخدم لهذا الغرض هو SPI .

في تجربة اليوم يجب أن تستخدم نسخة برمجية الأردوينو 1.0.1 او 1.0.3  لكي تنفذ التجربة بشكل صحيح .

في البداية يجب عليك تحميل هذا الملف الذي يحتوي على تعريف المتحكمين ATTINY 45/85 من هنا  

قم بفك ضغط هذا الملف و قم بنسخ المجلد الموجود بداخله الذي اسمه attiny و قم بوضعه ضمن مسار الSketchbook الخاص بالأردوينو  في مجلد قم بانشاءه و تسميته ب hardware " ستجده في جهازك في العنوان







 My document >>Arduino >>hardware>>attiny

بعد ذلك قم بفتح برمجية الأردوينو و اذهب إلى خيار 
tools >> Board 

 و سترى وجود الملفات التي اضفتها مؤخراً في القائمة 

بعد ذلك نقوم بتحويل بطاقة الأردوينو إلى مبرمجة ArduinoAs ISP , و تحميل برنامج arduino ISP .



هذا البرنامج يحول الأردوينو إلى مبرمجة , يستخدم ايضاً في حالة تنزيل برنامج الإقلاع Bootloader لمتحكم آخر .


إذا كنت تستخدم أردوينو UNO قم فقط بتعديل التأخير الزمني في الجملة heartbeat من 40 إلى 20 "في الإصدارات الحديثة تم وضعها 20 بشكل تلقائي " .




عدّل اعدادات البرنامج التالية
Board : Arduino Uno"or what you work with"
programmer: arduino as ISP .


بعدها قم بتحميل البرنامج على بطاقة الأردوينو , و انتقل لمرحلة توصيل بطاقة الأردوينو .

لا تنسى توصيل مكثف 10uF  بين مدخل الRESET و الGND




بعد أن تقوم بتوصيل القطع كما في المخطط , افتح برنامج Blink.ino و قم بتغيير رقم المدخل من 13 إلى 0 كما هو مكتوب في المثال ادناه .
/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
 
  This example code is in the public domain.
 */
 
// Pin D0 on Attiny 85 
//Modified by Mohannad Rawashdeh

//http://genotronex.blogspot.com/
//...................................
int led = 0;

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);     
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);               // wait for a second
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);               // wait for a second
}

غيّر اعدادات البرنامج لتصبح
Board : ATTINY 85(Internal 8MHz).
programmer: arduino as ISP .

ثم قم بتحميل البرنامج , ستظهر النتائج لك كما في الفيديو .

لا تهتم للرسالة التي ستظهر اسفل الشاشة .

و هذا برنامج fade ايضاً قمت بتعديله ليناسب الattiny .



هذا الفيديو يظهر نتائج تطبيق البرنامجين :


مميزات و محددات الATTINY85 :


من أهم المميزات التي يمكن لنا اكتشافها في هذا المتحكم :

1)عدد مداخل و مخارج كبير بالنسبة لعدد الأرجل "لها 6 I/O و هذا رقم كبير " .

2) وجود 4 مرابط Pins تعمل كمقاطعات خارجية .
3)وجود الرابط التسلسلي I2C و SPI .
)استهلاك منخفض للطاقة .


على الرغم من الميزات التي ذكرناها عن هذه القطعة إلا أن هناك عدة محددات لهذا المتحكم هي :


1)محدودية  ذاكرة الفلاش التخزينية  ذات مساحة 8kbyte  .
2)تعطيل بعض الأوامر و عدم عملها في هذا المتحكم .
3)  تتم برمجته بواسطة الSPI فلا وجود للسيريال فيه Serial Rx,Tx. 

هنالك عدة اوامر لا يستطيع هذا المتحكم ترجمتها و يعطي Error عند كتابة البرنامج بهذه الاوامر .
الأوامر التي يدعمها هذا المتحكم  ضمن بيئة اردوينو البرمجية :


SoftwareSerial (has been updated in Arduino 1.0)


باقي الأوامر قد لا تعمل أو تتوافق مع هذا المتحكم .

أرجو أن أكون قد وفقت في عرض امكانيات هذا المتحكم لكم , 

الى اللقاء 

الخميس، 4 أبريل، 2013

الدارة المتكاملة Max7219


الدارة المتكاملة  Max7219



Max7219 هي عبارة عن دارة متكاملة تستحدم لقيادة 64 باعثاً ضوئياً منفرداً , أو كحد أقصى 8 خانات من المقطعات 7segment و هو يستخدم طريقة نقل البيانات التسلسلي SPI .





يمكن التحكم بهذه الدارة بواسطة متحكم أصغريMCU , و في حالتنا هنا سنستخدم بطاقة اردوينو للتحكم بهذه الدارة باستخدام 3 خطوط فقط من أردوينو !


أولاً : المخطط و التوصيلات :



هذا المخطط يوضح  التوصيل بين أردوينو و هذه الدارة بكل مكوناتها .


كما نلاحظ هناك فقط 3 عناصر خارجية نحتاجها فقط لربطها مع هذه الدارة هي Iset  ,  C1, C2

وظيفة C1,C2 هي لتخفيض الضجيج القادم من مصدر التغذية , و يجب وضعهما أقرب ما يمكن بين مصدر التغذية و الأرضي للدارة " الأرجل 4 و 9 ".

المقاومة هي مقاومة مسؤولة عن تحديد تيار المغذي للباعثات الضوئية المربوطة مع الدارة و هذا الجدول يوضح القيم التي يجب أن تكون عليها Iset  و هذه القيم مأخوذة من النشرة الفنية datasheet

قيمة المقاومات هنا بالكيلو أوم .

القصود ب VLED هو الجهد الأمامي للباعث الضوئي المعطى في نشرته الفنية , و هي بالغالب 2 – 3,2 فولت حسب نوع الباعث" Diffused ,Ultra ,clear Ultra…etc " و Iseg هو التيار المار في كل منبع جهد Current source من الدارة .



لنأخذ مثال عليه : لو كان الجهد الأمامي للبواعث الضوئية المربوطة مع هذه الدارة 2.5 فولت , و التيار الأعظمي لها 25ملي أمبير , نقوم أولاً بأخذ قيمة للتيار أقل من قيمة التيار الأعظمي للباعث حتى نبقى في أمان من أن لا يتلف الباعث و لتكن 20 ملي امبير , من الجدول نأخذ قيمة المقاومة و هي 25.9كيلو أوم , و لعدم توافر هذه القيمة عملياً نأخذ قيمة أعلى منها و لتكن 27كيلو أوم أو 30 كيلو أوم J .

·      ربط أكثر من max7219 معاً :


يمكن ربط أكثر من جهاز على التسلسل بسهولة عبر توصيل المخرج D out  مع مدخل Din  للجهاز التالي , و يمكن بهذه الطريقة ربط حتى 8 أجهزة من max7219 باستخدام 3 مخارج من أردوينو .


لو احتجنا ربط اكثر من 8 أجهزة مع الأردوينو , يتوجب علينا عندها تعريف الجهاز التاسع مع 3 أرجل جديدة من أردوينو و سنتحدث عن هذا لاحقاً .

بقي الأمر الأخير لنا قبل أن ندخل في تفاصيل برمجته ألا وهو مشاكل مصدر الطاقة .!
هنا يجب الإنتباه لهذا الموضوع لأنه مهم جداً , كما نعلم فإن البواعث الضوئية تستهلك تيار كبير إذا تم وصلها كاملة "64 باعث ضوئي" فإن هذا التيار الكبير قد يتلف الأردوينو أو حتى لا يتحمله مصدر الجهد خصوصاً لو كان من خلال USB الحاسوب و قد يؤدي لتلفه أحياناً .
أختيار Rset مهم جداً لمعرفة التيار المُغذى للدارة وحيث يمكننا معرفة التيار الكلي المار بالدارة من خلاله زائد ونضيف عليه 10ملي امبير استهلاك ال max7219
عدد البواعث الضوئية المضاءة يحدد التيار المسحوب من مصدر الجهد .
تعطى معادلة التيار المسحوب بالعلاقة التالية :
PeakCurrent=(8 x LedCurrent) + MAX72XX-Supply
حيث :
LedCurrent: عبارة عن التيار المار في كل باعث ضوئي و وهو معطى بالنشرة الفنية .
MAX72XX-Supply : تيار الذي تستهلكه الدارة و مقداره 10 ملي امبير .
الرقم المضروب ب LedCurrent هو عدد البواعث الضوئية المربوطة بكل segment .
لو ربطنا مصفوفة ليدّات 8*8 يكون لدينا 8 بواعث ضوئية يكون العدد المضروب 8 "بعدد البواعث الضوئية "
لو تعدى التيار الكلي المستهلك 500 ملي امبير فعندها سيكون خطراً استخدام كيبل USB الخاص بالحاسوب أو من مصدر الجهد الموجود في الأردوينو من تغذية الدارة و يتوجب عندها استخدام مصدر جهد خارجي لتغذية الدارة , عكس ذلك ستتلف مدخل الusb
سيكون لديك  ثلاث خيارات  :
1) أن تستخدم مصدر جهد خارجي بتيار أعظمي أكبر من التيار المطلوب .
2) أن تستخدم البطاريات , و يمكنك أن تستخدم البطاريات بعمر أطول مع هذه الدارة لو تم تفّعيل خيار توفير الطاقة " سيوضح لاحقاً "و أستخدام Rset عالية لتقليل التيار و بذلك تقليل التيار المسحوب من مصدر الجهد 
3).و يمكن أيضاً تعديل السطوع بواسطة البرمجة أيضاً حيث نتمكن من التحكم بشدة الإضاءة Intensity  و هي طريقة فعّالة جداً في التحكم بمصفوفة البواعث الضوئية LED Matrix .


البرمجة و استخدام مكتبة LED Control



قبل أن تبدأ بالبرمجة عليك قراءة النشرةالفنية لهذه القطعة جيداً حتى تعرف أمكانياتها الكبيرة .

المكتبة التي سنشرحها هنا تمتلك إمكانيات كبيرة تمكنك من قيادة مصفوفة ليدّات لغاية 8*8  و أيضاً 7SEG لغاية 8 خانات و حتى قيادة بواعث ضوئية بصورة فردية .

سنبدأ باستدعاء المكتبة ...
يتم استدعاء هذه المكتبة بسهولة و تعريف المرابط التي سنستعملها من الأردوينو و عدد ال
MAX7219 التي سنربطها مع الأردوينو .
الأمر يكتب كالآتي
LedControl(int dataPin, int clkPin, int csPin, int numDevices);

   حيث: 
int dataPin    The pin on the Arduino where data gets shifted out
 * int clockPin   The pin for the clock
 * int csPin      The pin for selecting the device when data is to be sent
* int numDevices The maximum number of devices that can be controled

نقوم بتوصيل الأرجل كالآتي 
dataPin .... With D12
clockPin ... With D11
csPin ...... With D10


اساسيات تعريف المكتبة , يجب في البداية تحميل مكتبة LedControl 



حيث n هو عدد الأجهزة المربوطة .
لتفعيل وضع الShutdown  نضع true بدلأ من false و نستطيع ضبط شدة الإضاءة من 0 إلى 15 .

و لمسح او إعادة تصفير المخرجات نضع الأمر



أوامر التعريف سهلة , أليس كذلك ؟


سأبدأ بأول تطبيق عليه ألا و هو ال  7Segment المقطعات السباعية .

المقطعات السباعية 7Segment  تستخدم لإظهار الأرقام عليها , و يمكن للدارة المتكاملة Max7219 قيادة حتى 8خانات من ال7Segment "رقم كبير "


ستحتاج لتنفيذ هذه التجربة إلى :

1) بطاقة أردوينو 

2) اسلاك
3) مقاومة 33كيلو أوم 
4) مكثفين 100nF,10uF
5)الدارة المتكاملة Max7219
6) Bread Board .
7)اسلاك توصيل Solderless Jumper



لتقوم بتوصيل ال7Segment مع الMax7219  يمكنك توصيله كما في الشكل :




لبرمجة ال7Segment هناك عدة أوامر تساعدنا على اظهار الارقم و الرموز عليها .



 lc.setDigit(Device#,Digit#,data,Dot select);

Device#: تحدد الموقع الذي نريد أن نبعث الرقم عليه من (0-7)
Digit#: نحدد الخانة التي نريد اظهار الرقم عليها (0-7) 
data: الرقم أو الرمز الذي نريد كتابته 
Dot select(True,false): اذا كان مفعلاً تكون الفاصلة العشرية مضيئة , و تكون مطفئة اذا كانت غير مفعله

يمكن اظهار بعض الرموز على ال7Segment  و هي قليلة و منها :

'0','1','2','3','4','5','6','7','8','9',

'0','*'A','b','c','d','E','F','H','L','P

', ,'.','-','_',' ' 

و يكتب الكود على الصيغة التالية :
lc.setChar(0,0,'a',false);
بنفس خصائص الامر الخاص بالأرقام .

هنا أعرض مثال بسيط للتحكم بعداد يقوم بالعد من 0-9999 كل ثانية يزيد قيمة العد بمقدار واحد .

و يمكنك توصيل LED مع المربط D2 حيث سيضيء و يطفئ لمدة ثانية واحدة .





و الفيديو أدناه يوضح نتائج تطبيق البرنامج.



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