ترمینال آزاد

چرت نویس های یک مهندس بیکار

اصل و نسب VHDL و Verilog

Verilog و VHDL هر دو زبان توصیف سخت‌افزار (HDL) صنعتی هستند که از آن‌ها به منظور نوشتن برنامه برای مدارات مجتمع الکترونیکی (IC)، ASIC و FPGA استفاده می‌شود. بسیاری از طراحان سیستم‌های دیجیتالی با این سوال روبرو می‌شوند که کدام زبان را انتخاب کنند، VHDL یا Verilog!؟

پاسخ به این سوال نه آسان هست و نه مهم! هر دوی این زبان‌ها همواره به‌طور گسترده مورد مقایسه و تقابل قرار گرفته‌اند بدون اینکه پیروز مشخصی برای این قیاس معرفی گردد. هر دوی آن‌ها معایب و محاسن مختص خود را دارند هر چند از دو منشا متفاوت می‌باشند. این دو زبان دارای سهم عمده‌ای از زبان‌های توصیف سخت‌افزاری هستند که در جهان مورد استفاده قرار می‌گیرند. دشوار است که با اطمینان بگویم کدام زبان بهتر و برتر می‌باشد با این‌حال باید خاطر نشان شد که از بین این دو، VHDL قدیمی‌تر هست. شما می‌تواند طرح قوی و تست محیطی وسیعی را با هر دو زبان، برای FPGA یا ASIC پیاده‌سازی کنید.

زبان‌های VHDL و Verilog هر دو از زبان‌های برنامه‌نویسی مختلفی سرچشمه گرفته‌اند و توسط مکاتب فکری متفاوتی پشتیبانی می‌شوند. VHDL بر پایه Pascal و Ada ساخته شده، در نتیجه ویژگی‌های هر دوی این زبان‌ها را منعکس می‌کند. اما Verilog برخلاف VHDL بر‌اساس زبان برنامه‌نویسی C شکل گرفته و نسبت به VHDL جدیدتر می‌باشد. بررسی منابع اینترنتی حاکی از این است که Verilog عمدتا توسط برنامه‌نویسان HDL با پس‌زمینه و تجربه صنعتی پشتیبانی می‌شود درحالی که VHDL اکثرا توسط محافل علمی ساپورت می‌گردد.

توسعه VHDL در سال ۱۹۸۱ و توسط وزارت دفاع (DOD) ایالات متحده به منظور مقابله با بحران چرخه زندگی سخت‌افزاری آغاز شد. VHDL مختص وزارت دفاع توسعه داده شد تا یک زبان مدل‌سازی سخت‌افزاری استوار برای مستند‌سازی طراحی سیستم‌های دیجیتالی فراهم آورد. البته این واقعا به معنای طراحی سخت‌افزار فیزیکی نیست: بلکه هدف اصلی مدل‌سازی سخت‌افزاری بود. از آنجایی که Verilog یک دارایی معنوی برای Gateway Design Automation می‌باشد، برای بهره‌مندی از آن نهایتا باید از طریق Cadence اقدام کرد. بنابراین برای حفظ قدرت رقابتی و فاصله میان این دو از هرگونه روابط استراتژیک، Verilog از هرگونه کنترل پتانسیل رقابتی دور نگه داشته می‌شود. موسسات اتوماسیون طراحی الکترونیک (EDA)، موجب نفوذ قابل توجهی گردیده، ابتکار و سرمایه‌گذاری این شرکت موجب تبدیل این زبان به یک HDL مهم گردیده است. همین موسسات EDA، نسخه‌های نیمه یونیک (semi-unique) مختص خود از این زبان را در در سطوح مختلف پیاده‌سازی و توسعه، ایجاد و اجرا کرده‌اند. دلیل عدم پذیرش Verilog توسط EDA وجود یک اصل مهم بین موسسات EDA است که می‌گوید آنها باید مالک تمام فن‌آوری‌های core خود باشند که در این مورد توسط Verilog نقض می‌گردد، و آن بدلیل تعلق مالکیت معنوی آن به Cadence بود که امکان مالکیت عمومی را از آن سلب کرده بود. علاوه‌براین فروشندگان EDA خواستار شکستن سیطره Cadence روی ابزار طراحی IC و نرم‌افزاری در بازار بودند که موجب ترقی و ترویج VHDL به عنوان یک زبان باز می‌گردید. VHDL در سال ۱۹۸۷استاندارد IEEE 1076 را کسب نمود. این زبان در سال ۱۹۹۳ آپدیت گردید که امروزه با نام IEEE standard 1076 1993 شناخته می‌شود. مانند سایز استانداردهای IEEE، زبان VHDL باید فرآیندهای بررسی ۵ ساله (یا کمتر) را طی کند تا از ارتباط مداوم آن با صنعت اطمینان یافت. اولین اصلاحیه این زبان در سپتامبر ۱۹۹۳ انجام پذیرفت.

برخلاف VHDL، زبان Verilog سرچشمه گرفته از دنیای تجاری و صنعتی می‌باشد. Verilog به عنوان بخشی از شبیه‌ساز سیستمی توسعه یافته است، که شاید موجب گردیده به خوبی برای توصیف سیستم‌های سخت‌افزاری دیجیتال استفاده گردد. زبان Verilog در سال ۱۹۸۳ توسط gateway منتشر گردید. بعددا gateway در سال ۱۹۸۹ توسط Cadence خریداری گردید. Cadence به شرطی Verilog‌ را به رسمیت می‌شناخت که در رقابت با VHDL برابر فشار متعارفی که صنابع را مجبور به استفاده از VHDL می‌کند، بتواند نقش یک زبان بسته را برای رقابت ایفا کند. سراجام Cadence با انتشار رسمی Verilog در سال ۱۹۹۱، آن را به مالکیت عمومی درآورد. Verilog در سال ۱۹۹۵ موفق به کسب استاندارد IEEE گردید.

هر دوی این زبان‌ها مزایا و معایب منحصربه‌فرد خود را دارا می‌باشند و هیچ یک از آن‌ها کامل یا ایده‌آل نیست. در طراحی ASIC، زبان Verilog در تعریف سخت‌افزار بیشتر مناسب‌تر می‌باشد در حالی که برای مدلسازی سطح بالاتر، Verilog بدلیل عدم پکیج‌گذاری و تعاریف نوع حداقلی (records, access and enumeration) با محدودیت‌هایی مواجه است. هر کاری که با Verilog می‌توان به سرانجام رساند، با VHDL هم امکان‌پذیر می‌باشد در حالی که معکوس این قضیه صدق نمی‌کند. برنامه‌نویس HDL موظف به اتخاذ برخی سیاست‌های کاری/تجاری برای مواجهه با نیازهای طراحی می‌باشد و لازمه آن آشنایی با هر دوی این زبان‌های توصیف سخت‌افزار است.

 

این پست برگرفته از مطلب Verilog vs VHDL می‌باشد.

چی!؟ اف‌پی‌جی‌اِی!؟

داشتم تو یکی از وبلاگ‌های طراحی دیجیتال پرسه می‌زدم که یه پست جالب دیدم با عنوان “?what”. توضیح محاوره‌ای و خیلی جالبی در مورد اف‌پی‌جی‌اِی هستش برای کسی که تا حالا اسمشم نشنیده بود. به الگوی بقیه پست‌های وبلاگ نمی‌خورد این مطلبش (بقیه نوشته‌هاش تخصصی هستن) واسه همین واسم جالب اومد. گفتم ترجمه شده‌اش رو اینجا هم بذارم شاید کسی خواست قدم در این راه بندهد.

چی؟

اف‌پی‌جی‌اِی داداچ!

اف‌پی‌جی‌اِی چیه؟

یه تراشه کامپیوتری

شبیه چیزی که توی لپ‌تاپ و موبایلمه؟

تقریبا! تراشه‌های لپ‌تاپ و موبایل متمایل به کاربرد مخصوصی و خاصی هستند، در حالی که اف‌پی‌جی‌اِی می‌تونه برای هر کاری مورد استفاده قرار بگیره.

وایسا ببینم، مگه تراشه لپ‌تاپ من نمی‌تونه برای انجام هر کاری برنامه‌ریزی بشه؟

اونم تقریبا می‌تونه، تراشه معمولا برنامه‌هایی رو اجرا می‌کنه که بهش گفته شده، در حالی که اف‌پی‌جی‌اِی می‌تونه دوباره برنامه‌ریزی بشه تا بهش بگن چه کارهایی رو انجام بده.

آقا اوکی! ولی اینی که گفتی یعنی چی!؟

چی یعنی چی!؟ اف‌پی‌جی‌اِی؟ الان واست مسئله رو میشکافم. اف‌پی‌جی‌اِی تراشه کامپیوتری قابل برنامه‌ریزی هستش. این تراشه متشکل از گیت های منطقی بولین (AND, OR, Not, XOR) هستن که تعداد بسیار زیادی از این گیت‌ها در ساختار شبکه‌ای و سیم‌کشی های منطقی بینشون، یک تراشه اف‌پی‌جی‌اِی رو تشکیل میدن. تراشه‌های مدرن می‌تونن دفعات متعددی بعد از نصب هم برنامه‌ریزی بشن در حالی که تراشه‌های قبلی رو شما یک بار می‌تونید برنامه‌ریزی کنید یا بعضا مجبور هستیم تا شکاف کوچکی به داخل تراشه باز کرده و از نور ماورا بنفش استفاده کنیم. اف‌پی‌جی‌اِی مخفف عبارت آرایه گیت‌های قابل برنامه‌ریزی میدانی (FPGA: Field Programmable Gate Array) هستش. میدانی به این دلیل که می‌توان در هر نقطه‌ای پیاده‌سازی کرد، نه لزوما آزمایشگاه‌های ویژه، قابل برنامه‌ریزی بدلیل دستوری که برای اجرا ما برای تراشه تعریف می‌کنیم، گیت بدلیل کاکرد منطق دیجیتالی و در نهایت آرایه به دلیل شکلی که بلوک‌ها قرار دارند.

عجب! یه سوال دیگه: دلیل استفاده کسی از این تراشه‌ها چیه؟

در صنایعی که دارای میزان بالایی از تغییرات یا تعداد تولیدات محدودی هستند، اف‌پی‌جی‌اِی بهترین انتخاب هستش. بنابراین در صنایع دفعای که ممکنه از وسیله‌ای فقط ۲۰ عدد ساخته شود یا در تصویربرداری پزشکی که تعداد کم و چگونگی تغییرپذیری ملاک است نیاز می‌شود تا از دستگاه‌هایی استفاده گردد که توسط اف‌پی‌جی‌اِی ساخته شده‌اند. همچنین این تراشه برای نمونه‌سازی، گزینه مناسبی هستش. پس شاید اپل از اف‌پی‌جی‌اِی برای نمونه‌سازی آیپد بعدی استفاده کنه، اما بعدا آنها یک طراحی مخصوص مدار مجتمعی برای خط تولید طراحی خواهند کرد. هزینه ASIC اولیه یک میلیون دلار یا شایدم بیشتر باشه و نمونه بعدی حدود ده سنت. اما اف‌پی‌جی‌اِی اولیه چیزی حدود هزار دلار درمیاد اما تولیدهای بعدی هم به همین قیمت تموم میشه.

اما من فقط میخوام سرگرم بشم. یه هکرم یا یکی که واسه تفریح چیز میز می‌سازه نه یه شرکت. تکلیفم چیه؟

پس تو دنبال یک چیز دیگه‌ای. یک میکروکنترلر یا پردازنده ARM یا چیزی شبیه اینها. اف‌پی‌جی‌اِی گرون‌تر از اونیه که بشه ازش به عنوان سرگرمی استفاده کرد. از اینطرف سر و کله زدن باهاش دردسر داره و کار هر کسی نیست. من سایت‌های زیادی رو دیدم که میگن “خرید یک اف‌پی‌جی‌اِی و لود کردن هسته نرم‌پزدازشی روی اون‌ها وقت تلف کردنه، بجاش تراشه اصلی مخصوص رو بخرید.” اما ممکنه شما از اف‌پی‌جی‌اِی در طراحی یک امبدد سیستم استفاده کنید یا یک کارکرد بلادرنگ. این ویدئو نشان می‌دهد چگونه در سناریوی یک ربات، منطق متوازی مستقل اف‌پی‌جی‌اِی باعث ایجاد دقت بیشتری می‌شود.

اما این یه سایت سرگرمیه، درسته؟ چرا منو نسبت به استفاده از اف‌پی‌جی‌اِی دلسرد می‌کنی؟

اف‌پی‌جی‌اِی ها حقیقتا گزینه مناسبی برای هر کاربردی نیستند. آن‌ها کمی شبیه چاقوهای همه‌کاره سوئیسی هستند! پس شما می‌تویند هر کاری که با میکروکنترلر یا میکروپروسسور یا پردازنده سیگنال دیجیتال انجام می‌دید با اف‌پی‌جی‌اِی هم انجام بدین ولی چرا از یک چاقوی همه‌کاره سوئیسی واسه بریدن کره صبحانه استفاده کنیم وقتی یک کشو پر از انواع کارد صبحونه داریم که کار باهاشون راحت‌ترم هستش!؟ اما وقتی شما واسه پیک‌نیک میرین بیرون و همراهتون دلستر لیمو و کیک خونگی می‌برین نیاز به نوشابه بازکن و کارد آشپزخونه دارید (در یک اف‌پی‌جی‌اِی شما می‌دونید که برای مانیتورینگ یک سنسور، ایجاد ارتباط منطقی بین دو چیز و کنترل یک موتور به چه سخت‌افزار مخصوصی نیاز دارید) یا می‌تونید با یک چاقوی همه‌کاره سوئیسی کارتون رو راه بیندازید حتی اگه همیشه به درد بخور نباشد نسبتا راه مناسب‌تری هستش.

من یک طراح هستم و برنامه‌نویسی می‌کنم برای اینکه زندگی رو آسون‌ترش کنم و زبانی رو انتخاب می‌کنم که خیلی سریع باشه. رفتن سراغ برنامه‌نویسی اف‌پی‌جی‌اِی برای من چطوریاست؟ به کارم میاد یا نه؟

برای طراحی سخت‌افزار فاکتورای پیچیده زیادی هستش که باید باهاشون سر و کله بزنید. ابزارهای اینکار به خوبی ابزارهای طراحی نرم‌افزار نیستن. احتمالا شما برای تمامی مراحل طراحی نیاز به ابزار‌های مخصوص پولی خواهید داشت. در حالی که زبان‌های توصیف سخت‌افزاری (HDL: Hardware Description Language) به خاطر توابع آسانش خوانایی راحتی دارد، بخش دشوار ماجرا مربوط می‌شود به ماهیت متوازی طراحی سخت‌افزار. در نهایت، درباره اینکه اف‌پی‌جی‌آِی چه کاری می‌کند باید بگم جاهایی که موانعی برای حل و فصل انواع مسایل وجود داره، اف‌پی‌جی‌اِی به راحتی می‌تازه و همچنین برای کارهای دشواری مثل دیویژن، اعداد نقطه متغیر، اعداد بزرگ مراحال منطقی موجود در تناوب کلاک راه‌حل مناسبی هستش.

خب، قطعا این توضیحات مارو کمتر به عمق ماجرا برد، حتی اگه برم ویکیپدیا یا هر جای دیگه باز توضیحات سطحی هستن. من اگه بخوام عمقی اف‌پی‌جی‌اِی رو یاد بگیرم باید چیکار کنم؟

مثلا تو این سایت می‌تونید در مورد کاربرد اف‌پی‌جی‌اِی در بینایی ماشین بحث کنید. اینجا در مورد همین مسائلی که اینجا توضیح داده شد بحث میشه منتهی مفهومی‌تر و با توضیحات مفصل‌تر با تمرکز بر استفاده از اف‌پی‌جی‌اِی.

تفاوت آردوینو Unoهای موجود در بازار

بعد از نوشتن پست “در قلمرو آردوینو چه می گذرد” که محتواش چرایی استفاده از آردوینو بود، در آخر توصیه کردم به شروع یادگیری با آردوینو مدل Uno که چند مدل تو ایران هستش با قیمت‌ها و ظاهر متفاوت که شاید برای عده ای پیش بیاد کدوم مدل رو باید تهیه کنند.

اولین رفع ابهام در مورد تفاوت نام برندهای Arduino و Genuino هست. آردوینو در ابتدا فعالیت خودشو از ایتالیا شروع کرد و از همونجا محصولاتشو به همه دنیا توزیع می کرد. بعدا که کارش گرفت و سازمانش رو گسترش داد به نقاط بسیاری از دنیا، مرکز اصلی خودشو منتقل کرد به آمریکا و نام آردوینو رو براش حفظ کرد و تو سایر نقاط جهان (حتی ایتالیا) محصولاتشو با برند Genuino روانه بازار کرد. پس محصولات مخصوص بازار آمریکا با نام Arduino توزیع میشه و همون محصولات تو بقیه کشورها با نام Genuino تو بازار در دسترسه. پس تفاوتی در مدل نیست و فقط اسمشون فرق داره.

ArdGen_UNO

بعد فهمیدن تفاوت بین Arduino  و Genuino، ویژگی های ظاهری این دو رو معرفی می کنم تا اگه خواستین جنس اورجینال بخرین، با مدل های فیک و کلون اشتباه نگیرید.

اول میریم سراغ Genuino! این برند یه خوبی که داره، اینه که با اسم Genuino مدل فیک و کلون شده تو بازار ایران پیدا نمیشه. یعنی Genuino دیدین به احتمال خیلی زیاد اورجینال هستش. اما واسه اطمینان تصاویر این بورد رو نیگا کنین که به محض دیدن بتونین تشخیص بدین که اورجینال هستش یا نه:

genuino

دقت کنید که Genuino اورجینال توی جعبه عرضه میشه. رنگ‌های غالب بسته بندیش سفید و سبز تیره و نارنجی هستش. پشت بورد کاملا سبز هستش با یه سری توضیحات سفید رنگ. به کیفیت و تمیزی لحیم کاری بورد دقت کنید! تو مدل های کلون شاهد همچین دقت و تمیزی نخواهید بود. اما سراغ اجزای بورد که بریم یه میکروپروسسور ATmega 328 از نوع DIP می بینید. اگه غیر این باشه، بورد اورجینال نیست. همچنین بورد شامل یک پورت USB-B (پرینتری) هستش. سطح رویی مدار هم سبز رنگه و نشان و نام Genuino Uno با رنگ سفید در هر دو سمت بورد هک شده.

اما بریم سراغ برند Arduino که اگه بخواین جنس اورجینال بخرین، باید بیشترین دقت رو موقع خرید به خرج بدین. البته اصلی ترین تفاوت مدل اصلی و کلون ها، کیفیت ساخت هستش و در عملکرد (به جز یک مورد که پایین عرض می کنم) تفاوتی با هم ندارند. البته شرایط اینطوری نیست که تشخیص مدل اصلی با کلون خیلی سخت باشه. فقط ذره ای دقت می خواد تا متوجه بشید. به تصاویر دقت کنید:

arduino

مدل اورجینال هم مثل Genuino بسته بندی جعبه ای داره و رنگ غالب جعبه اش سفید و سبز روشن هستش. پشت بورد Arduino اورجینال دو رنگ هستش. نصف سفید و نصف سبز روشن. لوگو و نام Arduino Uno با رنگ سفید در دو سمت بورد قابل رویت هستش و البته دقت کنید که توضیحات در پشت بورد، در منطقه سبز نوشته شده. با دقت در لحیم کاری متوجه دقت و تمیزی اون میشید. در روی بورد یک میکروی ATmega328 موجوده به همراه یک پورت USB-B که رابط بین رایانه و بورد هستش. دقت کنید که هم میکرو از نوع DIP باشه و هم در گاه یو اس بی از نوع پرینتری که در غیر اینصورت بورد اصل نیست.

برند آردوینو بیشترین کلون رو داره. نزدیک ترین کلون به نسخه اورجینال، بورد زیر هستش:

clone

این محصول جعبه و بسته بندی نداره و بورد رو همینطوری خالی میندازن تو مشما میدن دستتون! قسمت زیری بورد کاملا سفید هستش و توضیحات بورد با رنگ آبی تیره نوشته شده روش. دیگه خبری از نام و لوگو Arduino Uno نیست و فقط آرم آردوینو رو میبینید. لحیم کاری ها خیلی تمیز هستند ولی نه در حد مدل اورجینالش. اما روی بورد کاملا شبیه نسخه اورجیناله به جز رنگش که کمی تیره تر. باز در قسمت بالایی مدار لوگو Arduino Uno رو مشاهده می کنید ولی نه دقیقا لوگویی که روی نسخه های اورجینال چاپ شده. تمامی اجزا بکار رفته واسه ساخته کلون عینا مشابه عناصر مداری بورد اورجینال هستش و تنها تفاوتش که موجب تفاوت قیمت با نسخه اصلی شده، اسمبل در چین و اورجینال نبودنشه.

اما ارزون ترین کپی از آردوینو Uno مدار زیر هستش که تو بازار معروفه به Arduino Uno CH340:

ch340g

این بورد هم بسته بندی و جعبه نداره. حتی پین‌ هدر‌ ها هم روش لحیم نشده و خودتون باید زحمتشو بکشید و اگه هم لحیم شده باشه کج و کوله و نامرتب لحیم شده، مثل تصویر بالا.  رنگ این بورد هم شبیه رنگ کلون قبلی هستش ولی زیر مدار هیچی چاپ یا نوشته نشده و شما فقط روتینگ مدار رو میبینید. روی مدار هم ممکنه هر چیزی نوشته شده باشه یا نشده باشه. شاید Arduino Uno بنویسن یا فقط Uno یا هیچی! کیفیت ساخت این بورد افتضاحه! یعنی ممکنه موقع لحیم کاری بورد صدمه ببینه. اما ببنیم چی باعث شده این بورد اینقدر ارزون باشه نسبت به بقیه:

uno-r3-rev3-development-board-atmega328p-ch340g-avr-cable-for-arduino-te113-64ba3f399f77c13ddb4ce042b5ae768e

اولین دلیل و تفاوت استفاده از ATmega328p-au که بصورت TQFP تولید میشه به جای ATmega328p-pu هستش که بصورت DIP رو نسخه های قبلی قرار داشت. این میکرو که SMD هستش نسبت به تراشه های قبلی ارزون تره ولی همون کارها رو انجام میده.

دومی تفاوت در درگاه های USB هستش. ممکنه روی این بورد ها از پورت USB-B استفاده بشه یا از USB-Micro

اما سومین تفاوت که مهم هستش متمایز بودن تراشه مبدل USB به TTL نسبت به نسخه های دیگست.

این بورد (و نسخه های اورجینال و کلون دیگه) موقع استفاده در سیستم عامل های گنو/لینوکسی به مشکلی بر نمی خورن ولی یک سری آردوینو هایی وارد شد که با سیستم عامل ویندوز ۷ و ۸ مشکل داشتن و توسط IDE آردوینو شناخته نمی شدند. برای حل این مشکل، روی این بورد ها از تراشه CH340G استفاده شده که با نصب یک درایور روی سیستم عامل، میشد به خوبی روی ویندوز ۸ ازش استفاده کرد. پس برای کسایی که قبلا با بوردهای آردوینو کنار ویندوز ۸ مشکل داشتن این کلون توصیه میشه.

البته بعد ویندوز ۸، ویندوز ۱۰ هم عرضه شده که درسته تست نکردم ولی فکر کنم این بورد هم با ویندوز ۱۰ مشکل داشته باشه. چون تراشه مبدل USB به TTL مدل CH340T رو دیدم که برای حل مشکل ویندوز ۱۰ ارائه شده ولی بورد آردوینو ای که از این تراشه استفاده بکنه تو بازار ندیدم.

در آخر توصیه من اینه که اگه از لحاظ مالی مشکلی براتون نداره از نسخه های اورجینال Arduino و Genuino بخرین و اگه می خواین کمی صرفه جویی کنید برین سراغ کلون اصلی آردوینو. اگه هم قصدتون هر چه ارزون تر کردن پروژه تون باشه مدل CH340G رو بخرین. شاید براتون جالب باشه که بگم، من خودم از ورژن CH340G برای تست پروژه ها استفاده می کنم.

در قلمرو آردوینو چه می گذرد !؟

تو بحث الکترونیک مخصوصا بخش دیجیتالش ما ICهای متنوعی استفاده می کنیم. آی سی که ازش با نام مدارات مجتمع (Integrated Circuit) یاد میشه یه سری تراشه ها هستن به شکل های مربع یا مستطیل که ازشون یه سری پایه که بهش PIN میگن زده بیرون. ورودی و خروجی پین آی سی ها بصورت ۰ و ۱ منطقی یا همون ۰ و ۵ ولت (گاها با ولتاژهای متفاوت مثل ۳٫۳ ولت) تعریف میشه .تو آی سی های سطح پایین یه سری پین ها مطلقا ورودی هستن و یه سری همیشه خروجی. تو این آی سی ها با دادن ولتاژ به تعدادی از ورودی ها، خروجی متناسبش رو دریافت می کنیم. می تونیم از این نوع آی سی ها، ۷۴HC08 که کار AND کردن دو ورودی رو انجام میده اسم ببرم.

OLYMPUS DIGITAL CAMERA

مثلا تو همین آی سی ۷۴۰۸ پین های ۱ و ۲ ورودی هستن و ۳ خروجی متناسب این دوتا رو میده. اگه به پین ها ۱ و ۲ مقدار ۵ ولت (۱ منطقی) اعمال کنیم پین ۳ بهمون خروجی ۱ منطقی میده. این آی سی ها عمدتا ساده هستن و نمیشه زیاد روشون مانور داد.

atmega168

اما تو تراشه های پیشرفته تر آی سی های programmable رو داریم. یعنی می تونیم برای آی سی برنامه بنویسیم و تراشه برامون اون برنامه رو از طریق پین هاش اجرا کنه. تو این نوع آی سی ها پین ها می تونن یه دفعه ورودی تعریف بشن و دفعه بعدی همون پین خروجی. معروف ترین این آی سی ها AVRها هستن که تو دانشگاه های ما این خانواده از آی سی هارو تدریس می کنن. به این آی سی ها میکروکنترلر میگیم. یه مثال می زنم از کاربرد میکروکنترلرها تا بهتر متوجه موضوع بشین. فرض کنید یه میکروکنترلر داریم که یه پینش رو توی برنامه، ورودی تعریف کردیم و حالت اولیه اش رو ۰ منطقی قرار دادیم و بهش یه سوییچ وصل کردیم. یه پین دیگه رو خروجی تعریف کردیم و حالت اولیه ۰ بهش اختصاص دادیم و یه LED‌ بهش وصل کردیم. داخل برنامه گفتیم که وقتی ورودی مقدارش ۱ شد خروجی رو ۱ کن. الان اگه ما به ورودی ۵ ولت بدیم که معادل ۱ منطقی هستش برنامه به خروجی میگه که از لحاظ منطقی ۱ بشه (همون خروجی ۵ ولت) و در نتیجه ال ای دی روشن میشه.

این توضیح کوتاه صرفا برای آشنایی مختصر با آی سی بود و اینکه اگه بخواین بیشتر در مورد انواع و اقسام آی سی‌ ها بدونین، متوجه باشید باید چه عباراتی رو جستجو کنید. میخواستم یه راست نرم سر توضیح آردوینو تا گیج نشین، چون اون موقع افرادی که آشنایی زیادی با مهندسی برق ندارند متوجه موضوع نمی شدند. یه سری توضیحات هم بود در مورد تغذیه آی سی ها و پین های جانبی که تو این مرحله نیاز نیست و گفتنش مطلب رو طولانی می کنه و شمارو خسته.

ArduinoCommunityLogo

بعد یه تعریف و آشنایی مختصر با میکروکنترلرها میریم سراغ اصل کاری! آردوینو گونه خاصی از میکروکنترلر هاست. یه پلتفورم متن باز که متشکل از دو بخش نرم افزاری و سخت افزاریه. میکروکنترلر بکار رفته بر روی برد آردوینو بر اساس زبان برنامه نویسی آردوینو (بر پایه Wiring) و محیط ویژه کدنویسی آن (بر پایه Processing) برنامه ریزی شده است و شما برای کد نویسی به هیچ نرم افزار جانبی و یا کامپایلر دیگری نیاز ندارید. میکروکنترلر این بوردها اکثرا از خانواده های AVR و ARM هستش و تک و توک با سایر پردازنده ها هم بوردهایی تحت عنوان آردوینو ساخته شدن.

گفتیم که آردوینو به کلی (نرم افزار + سخت افزار) متن باز هستش. یعنی هر کسی قادر به توسعه, ساخت و تغییرات روی اون هستش. می تونین واسه IDE آردوینو کتابخونه بنویسین و یا کتابخونه های موجودش رو ویرایش کنید و یا خودتون یه بورد آردوینو از نو طراحی کنید و طرحشو منتشر کنید. همین متن باز بودن باعث پیشرفت و برتری خیلی زیاد آردوینو نسبت به میکروکنترلرهای دیگه شده.

بوردهای آردوینو, بورد پیچیده و خاصی نیستن؛ بخوام سر راست بگم همون میکروکنترلر های ساده خودمونه که مجهز شده به یه سری عناصر دیگه مثل رگلاتورهای ۵ ولت و ۳٫۳ ولت, پین هدر, کریستال, سیستم ریست, و مبدل سریال به TTL و … پس فکر نکنین که با بوردی متشکل از قطعات الکترونیکی پیچیده سر کار دارید. این قطعات اضافه شده فقط برای اینکه کار کردن با آردوینو رو راحت تر کنن وگرنه آردوینو فقط همون میکروکنترلر روی بورد هستش. تفاوتی که بین آردوینو و میکروکنترلر های دیگه وجود داره و البته نقطه قوت آردوینو حساب میشه, زبان برنامه نویسی اون هستش.

اما خوب اگه آردوینو همون میکروکنترلرهای ساده خودمونه چرا بجای AVR از آردوینو استفاده کنیم!؟ دلایل متعددی داره که دونه به دونه با مثال توضیح میدم.

اولین دلیل که همونطور که گفتم نقطه قوت آردوینو هم حساب میشه, زبان برنامه نویسی اون هستش. اسم این زبان همون Arduino هستش! یه چیزی بسیار شبیه به زبان Cای که در AVR استفاده می کنیم. درواقع تلفیقی از C و ++C . این زبان تا حد بسیار زیادی آسون و ساده هستش و در عین حال خیلی قدرتمند!

یه مثال میزنم تا متوجه تفاوت Arduino با CodeVision بشید و ببینین که آردوینو چقدر از C مربوط به AVR, راحت تر,کوتاه تر و ساده تره. برنامه ای می نویسیم که عبارت Arduino روی سطر اول یک ال سی دی ۲در۱۶ کاراکتری از چپ به راست بصورت تابلو روان بصورت تکرار در بی نهایت حرکت کنه.

اول برنامه رو روی CodeVision با زبان C مینویسیم:

#include <mega16.h>
#include <delay.h>
#include <lcd.h>
int i,j,k,t=200;
char s[7]={'A','r','d','u','i','n','o'};
#include <alcd.h>
void main(void)
{
lcd_init(16);
while (1)
{
for(i=0;i<7;i++)
{
switch(i)
{
case 0 :
lcd_gotoxy(0,0);
lcd_putsf("o");
delay_ms(t);
lcd_clear();
break;
case 1 :
lcd_gotoxy(0,0);
lcd_putsf("no");
delay_ms(t);
lcd_clear();
break;
case 2 :
lcd_gotoxy(0,0);
lcd_putsf("ino");
delay_ms(t);
lcd_clear();
break;
case 3 :
lcd_gotoxy(0,0);
lcd_putsf("uino");
delay_ms(t);
lcd_clear();
break;
case 4 :
lcd_gotoxy(0,0);
lcd_putsf("duino");
delay_ms(t);
lcd_clear();
break;
case 5 :
lcd_gotoxy(0,0);
lcd_putsf("rduino");
delay_ms(t);
lcd_clear();
break;
case 6 :
lcd_gotoxy(0,0);
lcd_putsf("Arduino");
delay_ms(t);
lcd_clear();
break;
}
}
for(i=1;i<9;i++)
{
lcd_gotoxy(i,0);
lcd_putsf("Arduino");
delay_ms(t);
lcd_clear();
}
for(k=7,i=9;i<16;i++,k--)
{
lcd_gotoxy(i,0);
for(j=0;j<k;j++)
{
lcd_putchar(s[j]);
}
delay_ms(10);
lcd_clear();
}
delay_ms(500);
}
}
}

خب, حالا همون برنامه رو به زبان آردوینو روی IDE خود Arduino می نویسیم:

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
lcd.begin(16, 2);
}
void loop()
{
 lcd.setCursor(0, 0);
 lcd.print("Arduino");
 ScrollDisplayRight();
 delay(500);
}

جفتشون دقیقا یه برنامه هستن و یه کارو می کنن ولی کد دوم که مربوط به آردوینو هستش از همه نظر به کد اول برتری داره. کد اول ۸۰ خط هستش و دارای پیچیدگی زیادیه ولی کد دوم فقط ۱۳ خطه و با نگاه کردن بهش میشه فهمید برنامه دقیقا چه کاری رو انجام میده. از طرفی اگه بخوایم عبارتی که روی ال سی دی چاپ می کنیم تغییر بدیم باید تعداد caseهارو هم تغییر بدیم. مثلا اگه عبارت طولانی تری رو بخوایم جای Arduino بنویسیم باید به تعداد کاراکتر های بیشتر case جدید بنویسیم که موجب هر چه طولانی تر شدن برنامه ما میشه. یا مثلا برای عوض کردن هر عبارت باید تک به تک کارکتر های مربوط به هر case رو دستی تغییر بدیم و وقت گیر و سخته.

علاوه بر این ها به علت متن باز بودن آردوینو هر کسی می تونه کتابخانه هایی برای آردوینو بنویسه که به این شکل موجب راحتی و کم حجمی کدها بشه. این کتابخونه ها باعث میشه راه اندازی انواع سنسور ها و ماژول ها که خیلی سخته و کار هر کسی نیست به کمک کتابخونه نوشته شده به راحتی تایپ چندین خط کد باشه.

CUHM-teWIAENK7N

من از بعضیا شنیدم که میگن استفاده از آردوینو به صرفه نیستش, چون هم قیمت بالایی داره نسبت به یه میکروپروسسور معمولی و هم ابعادش بزرگه که در طراحی یکی از خصوصیات یه پروژه خوب جم و جور بودن اونه که این ابعاد بزرگ علاوه بر افزایش طول و عرض بورد, نیاز داره که بورد رو دو طبقه کنیم و با استفاده از اسپیسر آردوینو رو به بقیه بخش های بورد اتصال بدیم.

باید عرض کنم که اصلا اینطور نیست! در مورد قیمت باید عرض کنم وقتی شما یک بورد آماده آردوینو (مثل Uno) رو میخرین, پول بیشتری میدین. همونطور که گفتم آردوینو فقط همون قسمت میکروپروسسور بورد هستش. شما می تونین همون میکروپروسسوری رو که می خواستین به پروژتون اختصاص بدید رو با همون قیمت تهیه کنید و روش بوت لودر آردوینو رو پروگرام کنید و ازش به عنوان یه Arduino استفاده کنید و با زبان آردوینو بنویسیدش. پس تو قیمت هیچ تفاوتی نداره و شما همون پروژه رو با همون هزینه می سازین. این کار مشکل دوم که ابعاد بزرگ (نه چندان بزرگ) بوردهای آردوینو بود رو هم حل می کنه و ابعاد بورد ساخته شده با آردوینو در مقایسه با پروژه ای که با AVR ساده ساخته شده بزرگ نمیشه. بوردهای آردوینو با اون وسعت فقط برای استفاده آسون و یادگیری مبتدی ها ساخته شدند و الزامی در استفاده ازشون نیست.

علاوه بر اینها, آردوینو نه تنها موجب افزایش هزینه پروژه نمیشه که باعث کاهش اون هم میشه. شما با آردوینو دیگه نیازی به یه پروگرامر USB گرون قیمت ندارید و از طریق همون پورت usb روی بورد آردوینو و IDE آردوینو راحت برنامه هاتون رو روی میکرو پروگرام می کنید.

CZPnS-SWwAEVzkS

مورد دیگه ای که باید در موردش صحبت کنم, راجب تغییرات در پروژه های پیاده شده هستش. فرض کنید شما پروژه ای رو با یک میکرو AVR ساخته و پیاده سازی کردید. حالا بنا به دلایلی (مثلا نویزپذیری بالای AVRها) قصد تغییر نوع میکروپروسسور (مثلا به ARM ) رو دارید. حالا باید علاوه بر تعویض میکروپروسسور, برنامه ای که برای میکرو نوشته بودید رو هم تغییر بدید و همچنین از نو یک مدار چاپی جدید طراحی کنید و بسازید. در واقع یه پروژه دیگه رو از صفر باید شروع کنید! در حالی که اگر از AVR با بوتلودر آردوینو استفاده می کردید (چیزی شبیه به Uno) فقط کافی بود میکرو رو تغییر بدید به ARM ( مثلا بورد Due ) و هیچ گونه تغییری در برنامه نمی دادید! در IDE آردوینو, تنها از منوی tools و زیرمنوی boards, گزینه Uno را به Due تغییر می دادید و دکمه آپلود رو می زدید؛ تمام. در واقع در آردوینو شما اصلا نیازی به دونستن مدل و آشنایی با میکروپروسسور مورد استفاده خود ندارید. زبان آردوینو واسه همه میکروپروسسورها یکسانه و تفاوتی در نوشتن نداره.

یه مورد دیگه که موجب تسهیل کاربری آردوینو میشه پروگرام کردن راحت اونه. فرض کنید پروژه ای چند طبقه طراحی کردین و ساختین و داخل باکس قرار دادین. بنا به دلیلی لازم میشه میکرو رو دوباره برنامه نویسی کنید. باید اسپیسرها رو باز کنید و میکرو رو دوباره جدا کنید و با یه پروگرامر دوباره برنامه رو روش بریزید و همه مراحل جداسازی میکرو رو اینبار برعکس انجام بدید. در حالی که در آردوینو به هیچ کدام از این مراحل نیاز نیست. فقط کافیه کابل usb رو به پورتش روی Arduino وصل کنید و برنامه جدید رو آپلود کنید.

اما بخش نرم افزاری آردوینو خودش به دو قسمت تقسیم شده. یکی Arduino IDE و بعدی Arduino BootLoader آردوینو:

Arduinosoft-300x261

بوت لودر مرز و واسط بین نرم افزار و سخت افزار آردوینو هستش. در واقع این کار بوت‌لودر هستش که کد شما رو برای میکرو قابل فهم می کنه. بوت لودر آردوینو رو شما بارها می تونید پاک و دوباره روی میکرو آپلود کنید. همین امر باعث میشه شما خودتون تو خونه بتونید یه میکروپروسسور معمولی رو تبدیل به میکروی آردوینو کنید. بوت لودر خودش یه جور برنامه (کد) هستش که ازش به عنوان مترجم هم یاد میشه. همین بوت لودر باعث ویژه شدن میکرو میشه و بدون اون نمیشه برنامه ای که در پلتفورم آردوینو طراحی شده رو روی میکرو بریزیم.

Arduino 1.6.4

اما بخش بعدی IDE آردوینو هستش که روی هر سه سیستم عامل مطرح ویندوز و OS X و گنو/لینوکس قابل نصب هستش. IDE بخش های مختلفی مثل کامپایلر، پروگرامر سریال مانیتور و … داره و تموم نیاز های شما رو تامین می کنه. شما برنامه تون رو در محیط IDE می نویسید و همون جا عیب یابی می کنید و دوباره از همون جا آپلود (پروگرام) می کنید رو میکروپروسسورتون!

مزیت بعدی و بسیار بزرگ آردوینو، شیلدهای اون هستش. مدارات مجزایی که به سادگی امکار اتصال به بورد اصلی آردوینو را دارند و امکانات زیادی را در اختیار ما قرار می دهند. این بورد ها استفاده از آردوینو را برای مبتدی ها و کسانی که با مهندسی برق و الکترونیک آشنایی ندارند به راحت ترین روش ممکن مقدور می سازند.

arduino_megashield_5

تنوع در شیلدها راضی کننده هستش. با اتصال شیلد ethernet میتونید آردوینو و ماژول هاتون رو از طریق روتر محلی کنترل کنید. با اتصال شیلد wifi امکان برقراری ارتباط با آردوینو از طریق بی سیم را خواهید داشت، با اتصال شیلد موتور، قدرت کنترل و دستور دهی به انواع موتور ها (براشلس،پله ای و . . .) را خواهید داشت و شیلدهای دیگر هم به همین ترتیب. امکان اتصال چندین شیلد همزمان به بورد اصلی آردوینو وجود داره و نحوه اتصال هم بسیار ساده هستش.

مطرح‌ترین و مرسوم ترین بورد آردوینو، مدل Uno هستش که برای شروع کار با آردوینو و حتی انجام پروژه های پیشرفته گزینه بسیار مناسبی هستش. علاوه بر Uno مدل های متفاوتی از بوردهای آردوینو موجود است که هر کدام کاربرد خاص خود را دارند و برای کار خاصی طراحی شده اند.

arduinorev31s

البته شما خودتان در منزل هم می توانید آردوینو شخصیتون رو بسازید ولی توصیه من اینه که برای راحتی کار در شروع از مدل های آماده موجود در بازار استاده کنید.

با استفاده از آردوینو حتی دیگه لازم نیست با میکروکنترلری که استفاده می‌شود، آشنایی داشته باشید! تنها کافیست زبان برنامه نویسی آردوینو رو درک کرده باشید. آردوینو روی ویندوز, مک و لینوکس در دسترسه و سورس اون روی گیت هاب هم موجود هستش. این برنامه رو می تونین از خود سایت آردوینو دانلود کنید.

قاتلی از تبار usb

فلش مموری ها ابزار های ترسناکی هستن؛ آدم نمی کشن ولی می تونن به وسایل آدما آسیب برسونن! برای همین واسه وصل کردن یه فلش به کامپیوتر خیلی با احتیاط عمل می کنیم. به کامپیوترمون هر فلشی رو وصل نمی کنیم و حتی فلش هر کسی رو هم وصل نمی کنیم.
فلش مموری ها می تونن حاوی ویروس ها و تروجان های مختلفی باشن که سیستممون رو بهشون مبتلا کنه. بعضی ویروس ها فقط اذیت می کنن مثل ساخت بی شمار پوشه خالی و بعضی حتی ممکنه باعث آسیب رسیدن به اطلاعاتمون و پاک شدن قسمتی از داده هامون بشه.
واسه مقابله با این خطرات ما آنتی ویروس هارو روی سیستم هامون نصب می کنیم و اونا رو دائما آپدیت نگه می داریم تا در مقابل خطرات ناشی از انواع ویروس ها در امان باشیم ولی حالا با چیزی مواجهیم که حتی قوی ترین آنتی ویروس ها هم کاری از دستشون برنمیاد!

قاتلی تو لباس فلش مموری! این وسیله ای که در مورد صحبت می کنم درسته لباس فلش مموری تنشه ولی فلش مموری نیستش واسه همینه کاری از دست آنتی ویروس ها بر نمیاد. usb killer کاری با سیستم عامل و اطلاعاتمون نداره و یه راست میره سراغ سخت افزارمون.

 

usb-high-voltage-death-machine-100573271-large
مکعب های کوچکی که روی بورد usb killer میبینید در واقع خازن های smd هستن. این خازن ها جدا از سیستم شارژ می شن و موقعی که usb killer رو به پورت usb وسیلمون وارد کردیم خازن های شارژ شده شروع به تخلیه ولتاژشون می کنن و در چشم بر هم زدنی منفی ۲۲۰ ولت از طریق پورت usb وارد بورد اصلی میشه که باعث وارد شدن صدمه جدی و خراب شدن مادربورد میشه.
جالبه برای بکار انداختن این وسیله عملیاتی لازم نیست و هر کسی می تونه یکی از اینارو دستش بگیره و به هر وسیله ای رسید فقط اونو وارد پورت usb اون دستگاه کنه و تمام!
سازنده این وسیله ویرانگر Dark Purple (بنفش تیره) هستش که مدعیه وسیله ای که ساخته قادره هر نوع دستگاهی که مجهز به پورت usb هستش رو نابود کنه. یعنی قشر وسیعی از محصولاتی که همه روزه ازشون استفاده می کنیم مثل کامپیوتر و لپتاپ و تلویزیون هوشمند و ضبط صوت ماشین و غیره. البته در مواردی با تعویض جزء آسیب دیده میشه دستگاه رو احیا کرد و دوباره مورد استفاده قرار داد.

صفحه:12