تقييم الموضوع :
  • 6 أصوات - بمعدل 3.67
  • 1
  • 2
  • 3
  • 4
  • 5
سلسلة الالكترونيات - مقدمة المايكروكونترولر - 2
#1
السلام عليكم.


المقدمة:
قبل ان ابدا بالدرس. هناك قفزة كبيرة من المصطلحات الى المايكروكونترولر لكن المنتدى مهتم بالهندسة العكسية ولو بدات بتفاصيل الكترونيات فستكون السلسلة خارج محتوى الصرح. لذلك قد نرجع للاكترونيات في دروس قادمة في المستقبل حين نرى اهميتها او يتم طلبها بشكل خاص (اذا كانت لي المقدرة والعلم).

لذلك احب ان ابدأ بالدخول للمايكروكنترولر وبالطبع اشهر لوح اليوم هو الاردوينو .. باعتقادي ان الدرس موجه لمبرمجين اجهزة الكمبيوتر (الافضل انهم جربوا اردوينو) لذلك ان كنت تبحث عن دروس اردوينو ابحث عنها في الانترنت فهي متوفرة بكثرة .. ففي هذا الدرس سنحاول ان لا نجعل الدرس "لاردوينو" بل القليل من "فهم عمل الاردوينو".

شخصيا ارى ان الاردوينو منصة جميلة للبدأ ولكنها كالعادة تخلق غمامة تجعل مستخدمها لا يعلم ماهية \ قدرات \ كيفية .. المايكروكونترولر .

ملاحظة: تذكر ان اغلب المايكروكونترولر في الاجهزة الحديثة يستخدم معمارية ARM .. الاردوينو < اقصد uno R3 > يستخدم معمارية  AVR .. ولكن من المفيد الخوض في احدهما سيعلمك الاساسيات عن الاخر ايضا. بالنسبة لي لست محترفا في الاثنان
هناك الكثير من المحترفين للavr في منتدى avr freaks




المتطلبات:
- لوح اردوينو اونو atmega328 سعره 5 دولار انصحك باقتناءه للتجربة.  او اشتره من متجر اردوينو لدعمهم.
- حمل برنامج اردوينو بالنسبة ليي حملته من windows app store


----------------------------------------------------------------
لندخل في صلب الموضوع:

طبعا بعد تنزيل برنامج الاردوينو واستخدام لوح اردوينو معه اول درس في الانترنت او من file > examples هو برنامج blink
ملاحظة: blink هو ومض الليد في لوح الاردوينو وهو برنامج يعادل hello world



مما لابد منه ، الخوض في القليل من التفاصيل:


لوح اردوينو UNO R3

طبعا، لاني لم اخض في تفاصيل الكترونية سنرى اللوح من الخارج فقط من دون تفاصيل، (قد نخوض في ذلك مستقبلا..)
[صورة مرفقة: 4H3fsHZ.jpg]

[صورة مرفقة: inRWw2V.png]

1- atmega328 هو المعالج الذي نضع برنامجنا فيه ومتصل بالموصلات connectors على جانب اللوح
2- كرستالة بسرعة 16 ميغا هيرتز (تعطي المعالج ومضات او معدل ساعة clock rate)
3- معالج اخر يحتوي على خاصية usb ليتواصل مع الكمبيوتر . الهدف منه ان يكون جسر بين الكمبيوتر والمعالج الاول مثل تحميل البرامج على المعالج.
4- زر اعادة reset الهدف منه اعادة تشغيل المعالج atmega328
5- موصلات icsp connector .. للبرمجة in circuit serial programming (قد نتحدث عنها لاحقا).
6- كرستالة للمعالج الثاني atmega16u2
7- دائرة كهربائية للباور لتزويد اللوح بالطاقة.

طبعا هناك led عند موصل رقم 13 وستستخدمه في برنامجك الاول blink ...

لغة الاردوينو ؟ ماهي:


[صورة مرفقة: kXiNOkJ.png]

سترى واجهة اردوينو وهي في الحقيقة مبنية على مشروع اسمه processing
الواجهة غريبة نوعا ما، تستخدم الc++ ولكن هناك غلاف wrapping ..
مثلا لو ترون:
- void setup
- void loop

في الحقيقة هما بداخل main function وندائهم كالتالي << اضغط على الرابط لترى
 
int main() {
    //some code
    setup();
    while (1){
        loop();
    }
}



ماهو الdelay:



ايضا، لو ترى هناك delay من المفترض ان نسميها delay_ms ليكون الامر اوضح في النهاية هي مثل
 
void delay_ms(int milliseconds) {
 while (mlliseconds--) {
 for (volatile intn=0; n < 1437; n++); // 1437 makes exactly 1 millisecond
 }
 }


وهي فعليا ابقاء المعالج مشغولا لفترة معينة بما اننا نعرف معدل السرعة وسرعة عملية تنفيذ امر معين .. مثل n < 1437 و n++ ..
اذا كنت مهتم لكيفية ذلك (بصراحة لست خبيرا لعلمي المحدود في الاسمبلي وسرعة كل امر تنفيذي للاسف) تستطيع ان تحمل avrlibc وترى مجلد
avr-libc-2.0.0\include\util

حيث يحتوي على delay_basic.h و delay.h.in

[صورة مرفقة: JSdnFvC.png]

حسنا، اعتقد اني عقدت الموضوع بالنسبة لثاني درس ولكن وكما ارى الهدف هو فهم الاشياء وليس التطبيق فقط. ولست ارى الخوض مرة اخرى في شيء مشروح كثيرا مفيدا لي ولكم. good


ما يبقى شرحه من الصورة الاولى هو pinMode و digitalWrite .. سنبقيه لدرس اخر..


كيف يتم التحميل:

في الحقيقة لاعلم لي بكل التفاصيل ولكن الجواب قبل التحميل هناك ادوات toolchain مستخدم وهي محولات برمجية في المسار:
\hardware\tools\avr\bin

[صورة مرفقة: xx8sKy1.png]


وتستطيع ان ترى كيف يتم بناء الملف عبر file -> preferences
[صورة مرفقة: bdWO7Ws.png]


طبعا هي محولات يمكن ندائها لتحويل اللغة لملف hex والذي هو بمثابة ملف تنفيذي ..
انظر لهذا الموضوع
1- http://nuft.github.io/avr/2015/08/02/avr...mming.html
2- https://rajeshkovvuri.wordpress.com/2011...-hex-file/

ثم يتم تحميلها عن طريق برنامج اخر اسمه avrdude وهو مشروع مفتوح المصدر
شرح مبسط باللغة الاجنبية


تحميل برنامج الى الatmega328
هذا ستراه حينما تفعل الخاصية verbose في الاردوينو
[صورة مرفقة: GE7QgzO.png]


تحميل البرنامج من الatmega328 الى الكمبيوتر
 .\avrdude.exe -v -p atmega328 -P COM3 -c arduino -n -U flash:r:hex.hex:i -F

من هنا نرى
-v
verbose لترى اكثر مخرجات من البرنامج

-p تحدد الpart او اسم القطعة

-P البورت او المخرج في حالتي COM3

-c البروقرامر حاليا هو نفسها القطعة الموجودة بجانب الusb وتتواصل مع برنامج صغير bootloader في الاردوينو

-U لاخذ الملف من الاردوينو من flash area
r: read
hex.hex اسم الفايل ممكن اي اسم
^ اقرا الشرح لavrdude المبسط في الاعلى

-F امر تخطي اذا لم يتوافق الdevice signature بالنسبة لavrdude كان مختلف عندي فاضطررت لاستخدامه

[صورة مرفقة: AugR83A.png]

والنتيجة ملف هكس كان بداخل الكونترولر (لا تسالني عن debugging it ليس اختصاصي للاسف Sad )

جربت الاتي لاعلم بصحة المخرج:

[صورة مرفقة: sVHAd4J.png]

[صورة مرفقة: 3C2FMMP.png]






ملاحظة جانبية: ذكرت سابقا ان هناك كونترولر اخر بجانب مدخل الusb وهو يعمل كمحمل للبرنامج.. لن يعمل هذا البرنامج بدون بوت لودر في الكونترولر الهدف  atmega328  - target microcontroller
وفي الحقيقة من لحظة اقلاع المايكروكونترولر فهو يدخل على البوتلودر ثم يرى اذا كان هناك جهاز كبيوتر يريد ان يتواصل معه كبوتلودر ليبقى داخل البوتلودر وينتظر الاوامر والى فانه يسلم زمام الامر للبرنامج الموجود في منطقة اخرى من الفلاش اذا وجد..

ملاحظة اخرى: الموضوع متقدم نوعا ما لكني اردت جذب انتباه المهتمين للهندسة العكسية فقط.. اتمنى تعليقاتكم في خياري في وضع هذا الموضوع من الدرس الثاني.. ام اني يجب ان ارجع للاساسيات (اصلا ليس لي علم بتطبيق الهندسة العكسية كـsoftware debugging الا القليل)


الخاتمة: اتمنى ان تسامحني عزيزي القارئ على تشتت المووضوع اتمنى ان يكون مفيد (سيكون ان جربت بنفسك).
أعضاء أعجبوا بهذه المشاركة : a7mad elsh3rawy , M!X0R , Gu-sung18 , night , fantazma , xirox
#2
هل الاردوينو بيتم برمجته مره واحده فقط (مثل اسطوانه ال cd ) ولا ممكن اشيل البرمجه القديمه و اثبت عليه برمجه جديده ؟
أعضاء أعجبوا بهذه المشاركة :
#3
(19-05-2019, 04:36 AM)a7mad elsh3rawy كتب : هل الاردوينو بيتم برمجته مره واحده فقط (مثل اسطوانه ال cd ) ولا ممكن اشيل البرمجه القديمه و اثبت عليه برمجه جديده ؟

اهلا، يمكنك برمجته مراات عديدة جدا .. ولكن ليس بعدد غير منتهي

قد تصل ل 10,000 مرة من التعديلات في الكود.

اقرا عن eeprom
أعضاء أعجبوا بهذه المشاركة :
#4
تمام هتابع معاك 
ممكن تقولى اشترى ايه بالظبط يعني انا مش محتاج اشترى حاجه غير الاردوينوا  ولا هحتاج اشترى معاه حجات تانيه توصيلات مثلا ؟!
ولو  الاردوينوا انواع او موديلات ممكن تقولى على اسم الموديل اللى اشتريه 
شكرا
أعضاء أعجبوا بهذه المشاركة :
#5
(19-05-2019, 04:12 PM)a7mad elsh3rawy كتب : تمام هتابع معاك 
ممكن تقولى اشترى ايه بالظبط يعني انا مش محتاج اشترى حاجه غير الاردوينوا  ولا هحتاج اشترى معاه حجات تانيه توصيلات مثلا ؟!
ولو  الاردوينوا انواع او موديلات ممكن تقولى على اسم الموديل اللى اشتريه 
شكرا

يعتمد على الهدف اذا كنت تريد تعلم الاردوينو فانا انصحك بدخول سلسلة دروس مرتبة افضل من مواضيعي المشتتة mdr ..
مثل هذه:
http://www.coursat.org/subject-arduino

بالنسبة للمقتنيات:

انصحك بعدة اونو مثل هذه

اذا مهتم بالاتصال بالانترنت او الشبكة فـ esp مشهور جرب هذه المجموعة:

- esp32
- node-mcu
- esp8266
أعضاء أعجبوا بهذه المشاركة :
#6
بارك الله بك دروس جميله، ما رأيك ان تتطرق الى طرق تنقيح الانظمة الموجودة على الـ microcontroller اقصد ​Hardware-Based Software Debugging،  شرح بروتوكولات مثل JTAG و UART و I2C و SPI  ، خصوصاً JTAG لان هذه البروتوكولات تلعب دور مهم واساسي في تنقيح الانظمة المضمنة والروبوتات والروترات واجهزة انترنت الاشياء واجهزة الكونسول مثل xbox  و Playstation كذلك الحصول على الـFirmwares  في حال لم توفر الشركة الـFirmwares  للتحميل من النت (الروبوتات وما شابهها) او كان مشفر فيمكنك عمل Dump للذاكرة
إقتباس :قبل ان ابدا بالدرس. هناك قفزة كبيرة من المصطلحات الى المايكروكونترولر لكن المنتدى مهتم بالهندسة العكسية ولو بدات بتفاصيل الكترونيات فستكون السلسلة خارج محتوى الصرح.
اذا كانت تلك الدروس من الاساسيات ونقصها يؤدي الى مشكلة معرفية فمن المستحسن نشرها فاولا واخيراً هذا القسم هو نواة لقسم جديد وعلى الاغلب سيكون نواة لقسم الهندسة العكسية للهاردوير اذا توفرت له الدروس اللازمة كاساس
سبحان الله وبحمده، سبحان الله العظيم
أعضاء أعجبوا بهذه المشاركة : hsn93
#7
(21-05-2019, 02:48 AM)Gu-sung18 كتب : بارك الله بك دروس جميله، ما رأيك ان تتطرق الى طرق تنقيح الانظمة الموجودة على الـ microcontroller اقصد ​Hardware-Based Software Debugging،  شرح بروتوكولات مثل JTAG و UART و I2C و SPI  ، خصوصاً JTAG لان هذه البروتوكولات تلعب دور مهم واساسي في تنقيح الانظمة المضمنة والروبوتات والروترات واجهزة انترنت الاشياء واجهزة الكونسول مثل xbox  و Playstation كذلك الحصول على الـFirmwares  في حال لم توفر الشركة الـFirmwares  للتحميل من النت (الروبوتات وما شابهها) او كان مشفر فيمكنك عمل Dump للذاكرة
إقتباس :قبل ان ابدا بالدرس. هناك قفزة كبيرة من المصطلحات الى المايكروكونترولر لكن المنتدى مهتم بالهندسة العكسية ولو بدات بتفاصيل الكترونيات فستكون السلسلة خارج محتوى الصرح.
اذا كانت تلك الدروس من الاساسيات ونقصها يؤدي الى مشكلة معرفية فمن المستحسن نشرها فاولا واخيراً هذا القسم هو نواة لقسم جديد وعلى الاغلب سيكون نواة لقسم الهندسة العكسية للهاردوير اذا توفرت له الدروس اللازمة كاساس



شكرا جزيلا. هذا ما كنت اريد الدخول فيه، كل درس ساكتبه ساراعي اضافة الدروس الاساسية اذا حسست انها لازمة..
كنت ساشرح UART , I2C , SPI (ليست لدي خبرة في الjtag) ولكن اعتقد ان اهم الثلاثة المذكورين في الdebugging هو uart .

jtag قد ابدا في تعلمها لاحقا واكتب درس \ تجربتي ..

تعديل : هذا ماحاولته هنا في التعامل مع بوتلودر الاردوينو وسحب الذاكرة منه لملف هكس ثم اوبج دمب .. الا اني لست بصاحب خبرة في الامر انظر للكوماند OBJ-DUMP اعلاه في الواقع اول مرة استخدمه هو حين كتبت الدرس mdr

نسال الله التوفيق.
أعضاء أعجبوا بهذه المشاركة : Gu-sung18
#8
سؤال طيب..الاوردينيو انا بستخدمه علشان ابرمج به شيبات اجهزة تانية ولا مجرد انى ابرمجه هو واخليه ينفذ البرنامج..وايه اوجه الاستفادة من اولاردينيو لما ابرمجه
أعضاء أعجبوا بهذه المشاركة :
#9
(21-05-2019, 06:41 PM)pharaon كتب : سؤال طيب..الاوردينيو انا بستخدمه علشان ابرمج به شيبات اجهزة تانية ولا مجرد انى ابرمجه هو واخليه ينفذ البرنامج..وايه اوجه الاستفادة من اولاردينيو لما ابرمجه

يمكنك صنع اجهزة من خلاله سواء اجهزة بسيطة او معقدة مثل الروبوتات، الـArduino يعتبر العقل لهذه الاجهزة.
(21-05-2019, 06:41 PM)pharaon كتب : وايه اوجه الاستفادة من اولاردينيو لما ابرمجه

الـArduino تستفاد منه انك تتمكن من صنع اجهزة تنفذ الاوامر التي انت برمجتها، نحن ابتعدنا عن عالم الحواسيب هنا لعالم الالكترونيات (وربما الالكترونيات+الميكانيك في حال اردت صنع روبوت)
يوجد الكثير من المشاريع التي يمكنك الاطلاع عليها، مثلاً هذ المشروع المبني على اردوينو والذي يراقب الباب اذا فتح هذا الباب يرسل لك رساله على الماسنجر تبع الفيسبوك.
https://www.hackster.io/arduino/projects
https://create.arduino.cc/projecthub
https://circuitdigest.com/arduino-projects

بالمناسبة ارجوا الالتزام بالكتابة باللغة العربية الفصحى والابتعاد عن العامية.
سبحان الله وبحمده، سبحان الله العظيم
أعضاء أعجبوا بهذه المشاركة :
#10
بالمناسبة , هذا موقع مفيد جدا للقطع والأجزاء الممكن إضافتها إلى مشروع أردوينو

http://shieldlist.org/

مثال : قطعة التعامل مع الـ GPS
http://shieldlist.org/sparkfun/gps
أعضاء أعجبوا بهذه المشاركة :


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 5 ) ضيف كريم