شروع مجدد در سال نو؟

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

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

قبل از این که این سوالات پیش بیاد باید یک علامت سوال بزرگتر رو رفع میکردم. این که «چرا کامپیوتر یک باره فرع زندگی من شد؟»! فکر کنم هرکسی که این وبلاگ رو از مرداد ۹۰ (یا ۹۱؟) خونده باشه و قبلتر من رو از وبلاگهای قبلی، فروم اوبونتو یا حتی انجمن آیفون بشناسه، می‌دونه که من شدیدا علاقمند به مباحث علوم و مهندسی کامپیوتر بودم (و هستم! و حتی با تقریب درست و زیادی خواهم بود 😀 ) ولی مدتهاست در این زمینه خبری از من نیست. نه به شکل قدیم پروژه هایی رو تعریف میکنم و پیش می‌برم، و نه مثل قدیم به صورت فعال وسط بحث های تخصصی حضور پیدا میکنم و سعی میکنم یاد بگیرم.
موضوع از اینجا شروع میشه که مدت زیادیه که از پروژه های کامپیوتری دور شدم و به «موسیقی» رو آوردم. موسیقی خوب و لذتبخشه و حقیقتا لازمه که هر آدمی، درجه خاصی از هنرمندی رو در خودش داشته باشه. حالا یا موسیقی یا خوش‌نویسی یا نقاشی یا آشپزی و … . مهم این نیست که شما چقدر وقت صرف هنر میکنید، موضوع اینه که میخواید عنوان اصلی شما در جامعه «هنرمند» باشه؟ یا مثلا «مهندس»؟ خب طبیعیه که من بعنوان کسی که مهندسی میخونه (و حقیقتا کم هم بابت این عنوان مهندس خرج نشده، چه هزینه دانشگاه چه وقتی که صرف شده) و رشته انتخابیش رو دوست داره، دوست دارم قبل از این که بهم بگن «هنرمند»، «مهندس» خطابم کنن.

موسیقی ذهن من رو درگیر کرد، آهنگسازی رو در این مدت یاد گرفتم (به صورت درست و علمی)، دوباره کلاس گیتار رفتم، حتی قطعاتی که ساخته بودم رو در اینترنت منتشر کردم و … . ولی این توانایی در آهنگسازی رو از کجا آوردم؟ به نظرم بخاطر تسلطی که روی کامپیوتر داشتم. اگر به این اندازه به زیر و بم کامپیوتر وارد نبودم (گرچه ادعایی هم ندارم درش)، نمیتونستم توی نرم افزاری مثل FL Studio راه بیفتم و کارایی مثل ساخت موسیقی الکترونیک، میکس و مستر و … رو یاد بگیرم. حتی استفاده از گیتار الکتریکم بعنوان یک MIDI Synthesizer .

خب برگردیم به موضوع! این «شروع مجدد» چه چیزی میتونه باشه؟ به خودم قول دادم که در این ایام نوروز، که ماشالله ترکش های تعطیلیش تا اول اردیبهشت هم اصابت میکنه 😂 ، یکی از موضوعات مرتبط با رشته‌م رو مطالعه کنم، و سعی کنم تا جای قابل قبولی فرایند یادگیری و تمرین رو براش انجام بدم. حالا یا دوباره یکی از موضوعات مورد علاقم رو میخونم (سیستم عامل، معماری کامپیوتر، ریزپردازنده و …) یا این که یک موضوع جدید رو باز میکنم و سعی میکنم درش به یه حداقلی برسم (که میتونه از برنامه نویسی جاوا یا آندروید رو شامل بشه تا شبکه های عصبی و پردازش موازی یا حتی متدهای رسمی در مهندسی نرم افزار :|) و احتمالا کل امسال رو وقف همون موضوع کنم و در تابستان هم بتونم یک مقدار نوآوری درش داشته باشم!

نتیجه‌ش چه خواهد شد؟ این که من باز به اون اصالت کامپیوتری خودم برگردم. وقتی قراره به عنوان «مهندس» در جامعه حضور داشته باشم نیاز به «دید مهندسی» هم دارم، و دید مهندسی هم چیزی نیست که الکی و یک شبه به دست بیاد. پس امیدوارم امسال، برای من سال «دید مهندسی» و «مهندس بهتر شدن» باشه 🙂

Share

ساخت یک کلاک ساده با آی‌سی 555

وقتی که داشتم در مورد آی‌سی 555 و کاربردهاش تحقیق میکردم یک مثال ساده به چشمم خورد : چشمک زن با LED . خیلی از چشمک زن هایی که در اینترنت بودند رو تست کردم و ساختم و دیدم که کار بکن نیستن که نیستن! تا این که دیدم Ben Eater (کسی که یک کامپیوتر برد بوردی هشت بیتی ساخته) ، یک مدار Clock ساخته. یکی از کاربردهای Clock این هست که مدارهای ما رو در لحظات خاص فعال و در لحظات خاص غیرفعال میکنه. همچنین، مدارهایی داریم که میتونن چند تا کلاک رو هندل کنن و یا نیاز دارن دو تا کلاک داشته باشن که برعکس هم کار میکنن. کلاکی که بن ایتر طراحی کرده به قدر کافی خوب و مناسب هست، اما من یک فیچر (اگر بتونیم بهش بگیم فیچر 🤔) بهش اضافه کردم و محصول نهایی شد این :

timerهمانطوری که در شکل می بینید، خروجی کلاک درجای خودش به یک LED زرد متصل شده. و یک مدار ترانزیستوری هم بهش اضافه شده که حالا میخوایم بررسی کنیم اون چیه؟ اگر با NPN ها آشنا باشید میدونید که وقتی جریان در Base برقراره، امکان حرکت الکترونها از Collector به سمت Emitter هم فراهم میشه. یعنی در این مدار زمانی که خروجی ای که به اسم CLK مشخص شده، روشنه، جریان به راحتی از Collector میره به Emitter و اون LED قرمز که با CLK~ مشخص شده، خاموش میشه. زمانی که جریانی در Base ترانزیستور ما نیست، نتیجتا جلوی حرکت جریان از Collector به Emitter گرفته میشه و جریان به CLK~ میره. این به این معناست که زمانی که نیاز داریم کلاکمون برعکس بزنه، میتونیم از اون خروجی مدار استفاده کنیم! حالا یک سوال هست، و اون هم اینه که …

555 چطور کار میکنه؟

اگر دیتا شیت این آی سی رو بخونید، می بینید که پایه های VCC و GND اون با سه تا مقاومت پنج کیلو اهمی به هم وصل شدن، به همین خاطره که به این آی‌سی 555 گفته میشه. داخل آی‌سی، دوتا مقایسه گر و یک فلیپ فلاپ هست. در واقع زمانی که ما داریم از این آی‌سی کار میکشیم، مقادیر اون فلیپ فلاپی که درون آی‌سی تعبیه شده رو دستکاری میکنیم. برای اطلاعات بیشتر در مورد فلیپ فلاپ توصیه میکنم که دیتاشیت این تراشه رو مطالعه کنید.

در نهایت هم یک فیلم کوتاه از مداری که من ساختم ببینیم :

timer

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

Share

ساخت یک کامپیوتر ساده در Logisim – قسمت دوم (مجموعه دستور العمل ها)

در قسمت قبلی، چالش رو مطرح کردیم که کامپیوتر هشت بیتی خودمون رو بسازیم. ببینیم چه مداراتی نیاز داریم؟!

خب ما دو ورودی هشت بیتی A و B رو خواهیم داشت، پس به این موارد نیاز داریم :

  1. مداری برای NOT کردن ورودی A
  2. مداری برای NOT کردن ورودی B
  3. مداری برای AND کردن هر دو ورودی
  4. مداری برای OR کردن هر دو ورودی
  5. مداری برای جمع کردن دو ورودی
  6. مداری برای تفریق دو ورودی

خب، چون ما از یک قطعه به اسم «دیکدر» برای انتخاب دستورات استفاده میکنیم، و دیکدرها هم یک ورودی با سایز n میگیرن، و خروجی اونها «دو به توان n» هست، و ما اینجا «مجموعه دستور العمل» یا Instruction Set مون دارای ۶ دستور هست، بهینه ترین حالت استفاده از یک دیکدر ۳ به ۸ هست. خب، با این حساب، باید کد عملیات ها یا Operation Code ها رو به این شکل تعریف کنیم :

Operation Code
NOT A 000
NOT B 001
AND A, B 010
OR A, B 011
ADD A , B 100
SUB A, B 101

خب الان ما میدونیم که کامپیوتر محترم باید چه دستوراتی رو اچرا کنه. در واقع، وقتی میگیم ۰ ، کامپیوتر اون رو به دیکدر میده و میفهمه که باید نقیض A رو بهمون بده. وقتی ۱ رو فراخوانی میکنیم، باید نقیض B بهمون داده شه، وقتی میگیم ۵ در واقع مقدار B رو از A کم میکنیم و … . با توجه به این که الان، ما یک دیکدر ۳ به ۸ در مدار «واحد محاسبه و منطق» داریم، میتونیم ۴ دستور العمل دیگه هم بهش اضافه کنیم (با شما 🙂 ). در قسمت بعدی این آموزش، میرسیم به این که ورودی ها و خروجی ها رو چطوری مدیریت کنیم. بعدش هم در مورد ساختار کلی ALU صحبت میشه و بعد از چند پست دیگه، یک ALU کامل با هم خواهیم داشت. پس فعلا در مورد بلاهایی که سر ۸ بیت ورودی میشه آورد فکر کنید و شاد باشید 🙂

Share