19-05-2019, 03:32 AM
السلام عليكم.
المقدمة:
قبل ان ابدا بالدرس. هناك قفزة كبيرة من المصطلحات الى المايكروكونترولر لكن المنتدى مهتم بالهندسة العكسية ولو بدات بتفاصيل الكترونيات فستكون السلسلة خارج محتوى الصرح. لذلك قد نرجع للاكترونيات في دروس قادمة في المستقبل حين نرى اهميتها او يتم طلبها بشكل خاص (اذا كانت لي المقدرة والعلم).
لذلك احب ان ابدأ بالدخول للمايكروكنترولر وبالطبع اشهر لوح اليوم هو الاردوينو .. باعتقادي ان الدرس موجه لمبرمجين اجهزة الكمبيوتر (الافضل انهم جربوا اردوينو) لذلك ان كنت تبحث عن دروس اردوينو ابحث عنها في الانترنت فهي متوفرة بكثرة .. ففي هذا الدرس سنحاول ان لا نجعل الدرس "لاردوينو" بل القليل من "فهم عمل الاردوينو".
شخصيا ارى ان الاردوينو منصة جميلة للبدأ ولكنها كالعادة تخلق غمامة تجعل مستخدمها لا يعلم ماهية \ قدرات \ كيفية .. المايكروكونترولر .
ملاحظة: تذكر ان اغلب المايكروكونترولر في الاجهزة الحديثة يستخدم معمارية ARM .. الاردوينو < اقصد uno R3 > يستخدم معمارية AVR .. ولكن من المفيد الخوض في احدهما سيعلمك الاساسيات عن الاخر ايضا. بالنسبة لي لست محترفا في الاثنان
هناك الكثير من المحترفين للavr في منتدى avr freaks
المتطلبات:
- لوح اردوينو اونو atmega328 سعره 5 دولار انصحك باقتناءه للتجربة. او اشتره من متجر اردوينو لدعمهم.
- حمل برنامج اردوينو بالنسبة ليي حملته من windows app store
----------------------------------------------------------------
لندخل في صلب الموضوع:
طبعا بعد تنزيل برنامج الاردوينو واستخدام لوح اردوينو معه اول درس في الانترنت او من file > examples هو برنامج blink
ملاحظة: blink هو ومض الليد في لوح الاردوينو وهو برنامج يعادل hello world
مما لابد منه ، الخوض في القليل من التفاصيل:
لوح اردوينو UNO R3
طبعا، لاني لم اخض في تفاصيل الكترونية سنرى اللوح من الخارج فقط من دون تفاصيل، (قد نخوض في ذلك مستقبلا..)
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 ...
لغة الاردوينو ؟ ماهي:
سترى واجهة اردوينو وهي في الحقيقة مبنية على مشروع اسمه processing
الواجهة غريبة نوعا ما، تستخدم الc++ ولكن هناك غلاف wrapping ..
مثلا لو ترون:
- void setup
- void loop
في الحقيقة هما بداخل main function وندائهم كالتالي << اضغط على الرابط لترى
ماهو الdelay:
ايضا، لو ترى هناك delay من المفترض ان نسميها delay_ms ليكون الامر اوضح في النهاية هي مثل
وهي فعليا ابقاء المعالج مشغولا لفترة معينة بما اننا نعرف معدل السرعة وسرعة عملية تنفيذ امر معين .. مثل n < 1437 و n++ ..
اذا كنت مهتم لكيفية ذلك (بصراحة لست خبيرا لعلمي المحدود في الاسمبلي وسرعة كل امر تنفيذي للاسف) تستطيع ان تحمل avrlibc وترى مجلد
avr-libc-2.0.0\include\util
حيث يحتوي على delay_basic.h و delay.h.in
حسنا، اعتقد اني عقدت الموضوع بالنسبة لثاني درس ولكن وكما ارى الهدف هو فهم الاشياء وليس التطبيق فقط. ولست ارى الخوض مرة اخرى في شيء مشروح كثيرا مفيدا لي ولكم.
ما يبقى شرحه من الصورة الاولى هو pinMode و digitalWrite .. سنبقيه لدرس اخر..
كيف يتم التحميل:
في الحقيقة لاعلم لي بكل التفاصيل ولكن الجواب قبل التحميل هناك ادوات toolchain مستخدم وهي محولات برمجية في المسار:
\hardware\tools\avr\bin
وتستطيع ان ترى كيف يتم بناء الملف عبر file -> preferences
طبعا هي محولات يمكن ندائها لتحويل اللغة لملف hex والذي هو بمثابة ملف تنفيذي ..
انظر لهذا الموضوع
1- http://nuft.github.io/avr/2015/08/02/avr...mming.html
2- https://rajeshkovvuri.wordpress.com/2011...-hex-file/
ثم يتم تحميلها عن طريق برنامج اخر اسمه avrdude وهو مشروع مفتوح المصدر
شرح مبسط باللغة الاجنبية
تحميل برنامج الى الatmega328
هذا ستراه حينما تفعل الخاصية verbose في الاردوينو
تحميل البرنامج من الatmega328 الى الكمبيوتر
من هنا نرى
-v
verbose لترى اكثر مخرجات من البرنامج
-p تحدد الpart او اسم القطعة
-P البورت او المخرج في حالتي COM3
-c البروقرامر حاليا هو نفسها القطعة الموجودة بجانب الusb وتتواصل مع برنامج صغير bootloader في الاردوينو
-U لاخذ الملف من الاردوينو من flash area
r: read
hex.hex اسم الفايل ممكن اي اسم
^ اقرا الشرح لavrdude المبسط في الاعلى
-F امر تخطي اذا لم يتوافق الdevice signature بالنسبة لavrdude كان مختلف عندي فاضطررت لاستخدامه
والنتيجة ملف هكس كان بداخل الكونترولر (لا تسالني عن debugging it ليس اختصاصي للاسف )
جربت الاتي لاعلم بصحة المخرج:
ملاحظة جانبية: ذكرت سابقا ان هناك كونترولر اخر بجانب مدخل الusb وهو يعمل كمحمل للبرنامج.. لن يعمل هذا البرنامج بدون بوت لودر في الكونترولر الهدف atmega328 - target microcontroller
وفي الحقيقة من لحظة اقلاع المايكروكونترولر فهو يدخل على البوتلودر ثم يرى اذا كان هناك جهاز كبيوتر يريد ان يتواصل معه كبوتلودر ليبقى داخل البوتلودر وينتظر الاوامر والى فانه يسلم زمام الامر للبرنامج الموجود في منطقة اخرى من الفلاش اذا وجد..
ملاحظة اخرى: الموضوع متقدم نوعا ما لكني اردت جذب انتباه المهتمين للهندسة العكسية فقط.. اتمنى تعليقاتكم في خياري في وضع هذا الموضوع من الدرس الثاني.. ام اني يجب ان ارجع للاساسيات (اصلا ليس لي علم بتطبيق الهندسة العكسية كـsoftware debugging الا القليل)
الخاتمة: اتمنى ان تسامحني عزيزي القارئ على تشتت المووضوع اتمنى ان يكون مفيد (سيكون ان جربت بنفسك).
المقدمة:
قبل ان ابدا بالدرس. هناك قفزة كبيرة من المصطلحات الى المايكروكونترولر لكن المنتدى مهتم بالهندسة العكسية ولو بدات بتفاصيل الكترونيات فستكون السلسلة خارج محتوى الصرح. لذلك قد نرجع للاكترونيات في دروس قادمة في المستقبل حين نرى اهميتها او يتم طلبها بشكل خاص (اذا كانت لي المقدرة والعلم).
لذلك احب ان ابدأ بالدخول للمايكروكنترولر وبالطبع اشهر لوح اليوم هو الاردوينو .. باعتقادي ان الدرس موجه لمبرمجين اجهزة الكمبيوتر (الافضل انهم جربوا اردوينو) لذلك ان كنت تبحث عن دروس اردوينو ابحث عنها في الانترنت فهي متوفرة بكثرة .. ففي هذا الدرس سنحاول ان لا نجعل الدرس "لاردوينو" بل القليل من "فهم عمل الاردوينو".
شخصيا ارى ان الاردوينو منصة جميلة للبدأ ولكنها كالعادة تخلق غمامة تجعل مستخدمها لا يعلم ماهية \ قدرات \ كيفية .. المايكروكونترولر .
ملاحظة: تذكر ان اغلب المايكروكونترولر في الاجهزة الحديثة يستخدم معمارية ARM .. الاردوينو < اقصد uno R3 > يستخدم معمارية AVR .. ولكن من المفيد الخوض في احدهما سيعلمك الاساسيات عن الاخر ايضا. بالنسبة لي لست محترفا في الاثنان
هناك الكثير من المحترفين للavr في منتدى avr freaks
المتطلبات:
- لوح اردوينو اونو atmega328 سعره 5 دولار انصحك باقتناءه للتجربة. او اشتره من متجر اردوينو لدعمهم.
- حمل برنامج اردوينو بالنسبة ليي حملته من windows app store
----------------------------------------------------------------
لندخل في صلب الموضوع:
طبعا بعد تنزيل برنامج الاردوينو واستخدام لوح اردوينو معه اول درس في الانترنت او من file > examples هو برنامج blink
ملاحظة: blink هو ومض الليد في لوح الاردوينو وهو برنامج يعادل hello world
مما لابد منه ، الخوض في القليل من التفاصيل:
لوح اردوينو UNO R3
طبعا، لاني لم اخض في تفاصيل الكترونية سنرى اللوح من الخارج فقط من دون تفاصيل، (قد نخوض في ذلك مستقبلا..)
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 ...
لغة الاردوينو ؟ ماهي:
سترى واجهة اردوينو وهي في الحقيقة مبنية على مشروع اسمه 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
حسنا، اعتقد اني عقدت الموضوع بالنسبة لثاني درس ولكن وكما ارى الهدف هو فهم الاشياء وليس التطبيق فقط. ولست ارى الخوض مرة اخرى في شيء مشروح كثيرا مفيدا لي ولكم.
ما يبقى شرحه من الصورة الاولى هو pinMode و digitalWrite .. سنبقيه لدرس اخر..
كيف يتم التحميل:
في الحقيقة لاعلم لي بكل التفاصيل ولكن الجواب قبل التحميل هناك ادوات toolchain مستخدم وهي محولات برمجية في المسار:
\hardware\tools\avr\bin
وتستطيع ان ترى كيف يتم بناء الملف عبر file -> preferences
طبعا هي محولات يمكن ندائها لتحويل اللغة لملف hex والذي هو بمثابة ملف تنفيذي ..
انظر لهذا الموضوع
1- http://nuft.github.io/avr/2015/08/02/avr...mming.html
2- https://rajeshkovvuri.wordpress.com/2011...-hex-file/
ثم يتم تحميلها عن طريق برنامج اخر اسمه avrdude وهو مشروع مفتوح المصدر
شرح مبسط باللغة الاجنبية
تحميل برنامج الى الatmega328
هذا ستراه حينما تفعل الخاصية verbose في الاردوينو
تحميل البرنامج من ال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 كان مختلف عندي فاضطررت لاستخدامه
والنتيجة ملف هكس كان بداخل الكونترولر (لا تسالني عن debugging it ليس اختصاصي للاسف )
جربت الاتي لاعلم بصحة المخرج:
ملاحظة جانبية: ذكرت سابقا ان هناك كونترولر اخر بجانب مدخل الusb وهو يعمل كمحمل للبرنامج.. لن يعمل هذا البرنامج بدون بوت لودر في الكونترولر الهدف atmega328 - target microcontroller
وفي الحقيقة من لحظة اقلاع المايكروكونترولر فهو يدخل على البوتلودر ثم يرى اذا كان هناك جهاز كبيوتر يريد ان يتواصل معه كبوتلودر ليبقى داخل البوتلودر وينتظر الاوامر والى فانه يسلم زمام الامر للبرنامج الموجود في منطقة اخرى من الفلاش اذا وجد..
ملاحظة اخرى: الموضوع متقدم نوعا ما لكني اردت جذب انتباه المهتمين للهندسة العكسية فقط.. اتمنى تعليقاتكم في خياري في وضع هذا الموضوع من الدرس الثاني.. ام اني يجب ان ارجع للاساسيات (اصلا ليس لي علم بتطبيق الهندسة العكسية كـsoftware debugging الا القليل)
الخاتمة: اتمنى ان تسامحني عزيزي القارئ على تشتت المووضوع اتمنى ان يكون مفيد (سيكون ان جربت بنفسك).