<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های mjavad48</title>
        <link>https://virgool.io/feed/@mjavad48</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-07 05:30:12</pubDate>
        <image>
            <url>https://static.virgool.io/images/default-avatar.jpg</url>
            <title>mjavad48</title>
            <link>https://virgool.io/@mjavad48</link>
        </image>

                    <item>
                <title>اطلاعاتی درباره Hadoop و کاربرد ها آن</title>
                <link>https://virgool.io/@mjavad48/%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA%DB%8C-%D8%AF%D8%B1%D8%A8%D8%A7%D8%B1%D9%87-hadoop-%D9%88-%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%AF-%D9%87%D8%A7-%D8%A2%D9%86-ghdodrbqbwtx</link>
                <description>بسمه الله الرحمن الرحیمپروژه : اطلاعاتی درباره Hadoopو کاربرد ها آناستاد : جناب آقای یعقوبی تبارمحقق : محمد جواد رهسپار یگانهآشنایی باHadoopتاریخچههادوپ توسط Doug Cutting خالق Lucene (کتابخانه پرکاربرد جستجوی متن) ساخته شد. هادوپ در پروژه Nutch (موتور جستجوی بازمتن وب) ریشه دارد که خود بخشی از پروژه Lucene بود.ساخت موتور جستجوی وب از صفر هدفی بزرگ محسوب می‌شود چرا که از یک‌سو نوشتن نرم‌افزاری که در وب‌سایت‌ها بخزد و آن‌ها را نمایه‌سازی کند کاری پیچیده است و از دیگر سو اجرای آم بدون یک تیم عملیاتی تمام‌وقت اختصاصی چالش‌برانگیز است.؛ Nutch در سال ۲۰۰۲ آغاز شد و به سرعت یک خزنده‌ی وب و یک سامانه جستجو برای آن ساخته شد. تیم سازنده دریافتند که معماری آن‌ها برای میلیاردها صفحه روی وب گسترش‌پذیر نیست. چاپ مقاله‌ای در سال ۲۰۰۳ به آن‌ها کمک کرد که این مساله را حل نمایند. در این سال مقاله‌ای چاپ شد  که در آن معماری سیستم‌فایل توزیع‌شده گوگل یا همان GFS توضیح داده شده بود و این نیاز آن‌ها به ذخیره‌سازی فایل‌های بسیار بزرگی که از خروجی فرآیند خزیدن در وب و نمایه‌سازی آن ساخته شده بود را حل می‌کرد. در سال۲۰۰۴ آن‌ها آغاز به پیاده‌سازی نسخه‌ای بازمتن از آن کردند و آن را سیستم‌فایل توزیع شده ناچ (NDFS) نامیدند.سال ۲۰۰۴ گوگل مقاله‌ی دیگری چاپ کرد که در آن MapReduce را به جهانیان معرفی کرد. اوایل سال ۲۰۰۵ سازندگانNutch  نسخه‌ی پیاده‌سازی شده از MapReduce را ساخته بودند و در میانه سال همه‌ی الگوریتم‌های اصلی Nutch برای کار با MapReduce  و NDFS  تغییر یافته بودند.نسخه‌ی پیاده‌سازی شده از MapReduce  و NDFS  در Nutch برای کاربری‌هایی فراتر از جستجو نیز کاربرد داشت بنابراین در آغاز ۲۰۰۶ آن‌ها از Nutch  جدا ومستقل شده وHadoop  نام گرفتند.تقریباً همزمان با این کار Doug Cutting  به یاهو پیوست که تیم و منابع اختصاصی را برای کار بر روی هادوپ فراهم کرده بود تا آن را به سیستمی برای کار در مقیاس وب تبدیل کند.در فوریه ۲۰۰۸ یاهو اعلام کرد که نمایه جستجوی آن توسط کلاستری از هادوپ با ۱۰۰۰۰هسته ساخته می‌شود.در ژانویه ۲۰۰۸ هادوپ یک پروژه سطح بالای بنیاد آپاچی شد که نشان دهنده موفقیت، مقبولیت و جامعه کاربری فعال آن است.تا این زمان هادوپ توسط شرکت‌های بسیاری دیگری جز یاهو نیز بکار گرفته شده است. از آن جمله‌اند Last.fm، فیس بوک و نیویورک تایمز.در یک کار جالب نییورک تایمز از سرویس ابری EC2 آمازون استفاده کرد تا ۴  ترابایت صفحه اسکن شده را به PDF مناسب برای وب تبدیل نماید پردازش با استفاده از ۱۰۰سرور کمتر از ۲۴ ساعت زمان برد.( واحدهای حافظه )در آوریل ۲۰۰۸ هادوپ رکورد جهانی را شکست و تیدیل به سریع‌ترین سیستم مرتب‌سازی یک ترابایت داده شد. با اجرا روی کلاستری با ۹۱۰ گره، هادوپ یک ترابایت را در ۲۰۹ ثانیه (کمتر از ۳/۵ دقیقه) مرتب کرد و از رکورد سال پیش که ۲۹۷ ثانیه بود گذشت.در نوامبر گوگل اعلام کرد که پیاده‌سازی MapReduce  یک ترابایت را در ۶۸ ثانیه مرتب کرده است. در می ۲۰۰۹ یاهو اعلام کرد که توانسته یک ترابایت را با استفاده از هادوپ در۶۲ ثاتیه مرتب نماید.در سال ۲۰۱۰ هادوپ با اقبال عمومی روبرو شده است.هدوپ چیست ؟؛ Hadoop یک چارچوب متن باز برای ذخیره سازی و پردازش داده های بزرگ است که در ابتداDoug Cutting در شرکت Apache آن را ارائه داد  و نام فیل اسباب بازی فرزندش را روی آن نهاد، هدف اصلی آنها از تولید این ابزار استفاده از آن در موتور جستجوی Apache به نامNutch بود که پس از آن بسیاری از شرکت های بزرگ مانند Facebook ، Google ، Yahoo و… از آن استفاده کردند. این تکنولوژی با ترکیب و توزیع داده به ذخیره سازی آن می پردازد و به زبان جاوا پیاده سازی شده است. بسیاری از داده هایی که سیستم های امروزی با آن سر و کار دارند داده های دارای ساختار هستند مانند یک فایل اکسل ، اما Hadoop کارایی تحلیل و پردازش داده های ساختارمند و غیر ساختارمند را نیز دارد.برای نمونه علاوه بر پردازش و ذخیره سازی ، از Hadoop برای ذخیره اطلاعات ساخت نیافته یا شبه ساخت یافته در پایگاه داده های NoSql نیز استفاده می شود.از آنجاییکه پایگاه داده های رابطه ای پس از بزرگ شدن داده ها و پخش داده ها روی سرورهای مختلف کارایی بالای خود رو از دست می دهند حرکت به سوی پایگاه داده های NoSql آغاز شد و امروز Hadoop بستری برای NoSql می باشد.؛Hadoop DFSدر شکل مولفه های سیستم فایل توزیع شده ی Hadoop نشان داده شده است. Hadoopبرای ذخیره سازی اطلاعات آنها را به تکه های کوچکتر تقسیم می کند و هر تکه را روی یک نود ذخیره کرده و آدرس آن را نگه داری می کند. اندازه ی بلاک ها یا همان تکه ها  بطور پیش فرض 64 مگابایت می باشد ولی قابل افزایش است، همچنین به طور پیش فرض هر بلاک روی سه ماشین ذخیره می شود که این عمل باعث افزایش کارایی پردازش ها و ذخیره مطمئن داده ها می شود[1]. در این بخش نود های سرور به دو نوع (Master and Slave) تقسیم می شوند که نود های Master وظیفه ی کنترل نودهای دیگر را بر عهده دارد و با نام NameNodeمشخص شده اند ، گاهی در یک سیستم دو NameNode خواهیم داشت که آنها داده ها را برای نودهای دیگر ارسال می کنند تا نودهای جانبی داده ها را ذخیره کنند. از وظایف دیگر آنها می توان به موارد زیر اشاره کرد :1-  ذخیره و مدیریت داده های مربوط به FS2-  دریافت محل بلوکها از DataNode ها3-  نگهداری شماره و محل بلاکهایی که تشکیل یک فایل را می دهند4-  مدیریت و ارسال مجدد بلاکهای گم شده5-  کنترل نوع دسترسی(خواندن و نوشتن) به فایلهانودهای Slave با نام DataNode مشخص می شوند و تعداد آنها بیش از یک مورد خواهد بود و گاهی اوقات با توجه به توان و کارایی  سیستم به صدها و هزاران نود می رسد.وظیفه ی نود های Slave که در واقع همان  سرور های جانبی هستند  ذخیره سازی اطلاعات روی هارد دیسک خود می باشد.علاوه بر این آنها باید در مورد بلاکهایی کهدر اختیار دارند به NameNode ها اطلاع دهند و به درخواست های خواندن و نوشتن روی داده ها پاسخ دهند.یکی از مکانیزم های دیگری که در HDFS برای افزایش تحمل خطا وجود دارد رونوشت داده ها  می باشد ، بطوریکه هر بلاک داده روی چندین سرور ذخیره می شود و اگر بلاکی گم شد یا سرور دچار مشکل شد امکان بازیابی آن وجود داشته باشد. با اعمال Data Replication  علاوه بر افزایش تحمل خطا و خرابی در سیستم ، نیازی به استفاده از تکنولوژی RAID نمی باشد و در استفاده از فضای دیسک صرفه جویی می شود.؛MapReduceنگاشت – کاهش یک مدل برنامه نویسی موازی جهت پردازش داده های موجود روی کلاسترها می باشد که از دو مرحله ی نگاشت و کاهش جهت پردازش داده ها تشکیل شده است.از استفاده های آن می توان به موارد زیر اشاره کرد : ü  گوگل  : ایندکس کردن صفحات برای SE ، تحلیل ترجمه گوگل و… ü  یاهو: جستجوی نقشه یاهو ، شناسایی هرزنامه ها ü  فیسبوک: داده کاوی ، بهینه سازی تبلیغات و شناسایی هرزنامه هاتعاریف :1-  فاز نگاشت : نودهای Master داده ها را به بلاک هایی تقسیم می کنند و آنها را در اختیار نودهای Slave قرار می دهند، گاهی اوقات نود Slave نیز خود این کار را انجام می دهد.2-  فاز کاهش : داده های تکه تکه شده پس از بر خوردن  در اختیار تابع کاهش قرار می گیرند و این تابع بر اساس مقدار کلید آنها داده های مربوط به یک فایل یا پردازش را با هم ترکیب می کند.علاوه بر موارد ذکر شده در نگاشت-کاهش به هر برنامه ی کامل یک Job و به اجرای هر یک از دو فاز مذکور Task گفته می شود.بنابراین یک Job روی نود Master و Task روی نودهای Slaveاجرا می شود.اعمال موجود در نگاشت-کاهش:1-Job Tracker : در این تابع عملیات از کاربران دریافت می شود، سپس وظایف Map و Reduceدر قالب تابع Task Tracker به نودهای Slave  محول می شود. زمانبندی ، برنامه ریزی و مدیریت وظایف نیز در این بخش کنترل می شود و در صورت ایجاد مشکل در انجام یک وظیفه مجددا آن را فراخوانی و اجرا می کند.2-Task Tracker : این تابع وظایف نگاشت و کاهش محول شده توسط Job Tracker را اجرا میکند و پس از تولید نتایج آنرا برای بخش بعدی می فرستد.تحمل خطا  در نگاشت-کاهش1-  اگر یک Task با خطا مواجه شود : آن عمل روی نود دیگر تکرار می شود، بنابراین نگاشت با مشکلی مواجه نمی شود چون وابسته به نودها نمی باشد و همچنین کاهش نیز مشکلی نخواهد داشت چرا که خروجی ها در دیسک ها هستند.2-  اگر یک نود با خطا مواجه شود : عمل کنونی این نود و همه ی نگاشت های انجام شده توسط آن روی نود دیگری مجددا اجرا می شوند.3-  اگر یک Task با سرعت اجرا نشود : یک کپی از آن عمل روی نود دیگری گرفته شده و اجرا می شود ، از نتیجه ی عملی که زودتر به پایان برسد استفاده شده و دیگری kill می شود.سیستم بدین صورت عمل میکند که اطلاعات دریافت شده به صورت تکه تکه (بطور پیشفرض بلاک های ۶۴ مگابایتی) در آمده و هر تکه در یک سرور جداگانه ذخیره می شود. در تصویر بالا سرور Name node در واقع همان سرور اصلی (Master) می باشد که وظیفه ی کنترل سرور های دیگر (Slave) را به عهده دارد. بخش Map Reduce نیز بر روی سرور اصلی اجرا می شود و بخش HDFS یا همان Hadoop Distributed File System بر روی سرورهای جانبی اجرا می شود. سرورهای جانبی وظیفه ی ذخیره سازی اطلاعات را بر روی هارد دیسک های خود به عهده دارند. یعنی زمانی که کاربر درخواست فراخوانی یک فایل را صادر می کند، سرور اصلی از طریق آدرس هایی که در اختیار دارد، بلاک های مورد نظر را از سرور های مختلف فراخوانی کرده و پس از سر هم کردن و تکمیل کردن فایل، آن را به کاربر تحویل می دهد.امّا نکته ی جالب ماجرا مربوط به Data Replication می شود. الگوریتم این برنامه طوری نوشته شده است که چندین نسخه کپی از بلاک ها بر روی دیگر سرور ها قرار می گیرد و این امر دو مزیت بزرگ دارد: اول این که شما در مقابل خطاهای سخت افزاری از قبیل سوختن هارد دیسک، اشکالات سخت افزاری سرورها و … در امان هستید و در صورتی که هر یک از سرور ها به دلایلی از شبکه خارج شوند، اطلاعات مورد نظر از روی سرور های دیگر فراخوانی می شوند. مزیت دوم این قابلیت این است که شما دیگر نیازی به استفاده از تکنولوژی RAID ندارید و می توانید از حداکثر فضای هارد دیسک های خود استفاده کنید!!هدوپ برای چه اهدافی کاربرد دارد؟سیستم هدوپ در واقع برای ذخیره سازی و فراخوانی اطلاعات حجیم (در حد گیگابایت، ترابایت و یا حتی پتابایت) مورد استفاده قرار می گیرد. این اطلاعات می تواند شامل فایل و یا پردازش باشد. برای مثال چندی قبل شرکت یاهو که بزرگترین سیستم هدوپ را در اختیار دارد، موفق شد رقم ۲،۰۰۰،۰۰۰،۰۰۰،۰۰۰،۰۰۰ام عدد پی و چند رقم بعد و قبل آن را محاسبه کند !! جالب است بدانید که این عملیات که بر روی ۱۰۰۰ سرور صورت گرفته به مدت ۲۳ روز به طول انجامید، در حالی که اگر این عملیات را بر روی یک سیستم اجرا کنیم، حدود ۵۰۳ سال به طول خواهد انجامید !!چه کسانی از هدوپ استفاده می کنند؟اکثر کمپانی های بزرگ دنیا از قبیل AOL،Facebook،Yahoo،IBM و ….. از این تکنولوژی استفاده می کنند. برای مثال شرکت یاهو با بیش از ۱۰۰،۰۰۰ هسته ی CPU در بیش از۴۰،۰۰۰ سرور بزرگترین مجری سیستم هدوپ در دنیا محسوب می شود. بزرگترین کلاستر (Cluster) این شرکت شامل ۴۵۰۰ سرور می باشد که هر کدام دارای ۲ پردازشگر۴ هسته ای، ۴ هارد دیسک ۱ ترابایتی و ۱۶ گیگابایت حافظه ی رم می باشند! برای مشاهده ی لیست کامل این شرکت ها به این لینک مراجعه فرمایید.چگونه فیسبوک داده های میلیون کاربر را در کسری از ثانیه پردازش میکند؟آیا می دانید فیسبوک در هر ثانیه میلیون ها عکس را ذخیره می کند و میلیونها پست و کامنت را ثبت می کند؟آیا می دانید پردازش داده های حجیم در محیط های ابری چگونه است؟امروزه با رشد روزافزون ابزارهایی مانند شبکه های اجتماعی و ظهور مفاهیمی همچون وب معنایی ، حجم داده ها و پردازش ها در سیستم های بزرگ بطور شگفت انگیزی افزایش یافته است. برای نمونه یک موتورجستجو در کسری از ثانیه نتایج جستجوهای کاربر را آماده می کند که این ناشی از تحلیلی کارآمد روی اطلاعات حجیم جمع آوری شده از سطح وب می باشد بنابراین وجود مکانیزمی برای پردازش اطلاعات حجیم با هزینه ای مقرون به صرفه بسیار پر اهمیت است. یکی از جنبه های مهم رایانش ابری که بسیار مورد استفاده قرار می گیرد پردازش روی مجموعه داده های حجیم می باشد. چارچوب متن باز Hadoop بستری روی ابر برای ذخیره سازی و پردازش این نوع داده های حجیم می باشد که توسط Apache ارائه شده است که با توجه به متن باز بودن آن از نظر اقتصادی نیز مقرون به صرفه تر می باشد. سیستم فایل توزیع شده ی هدوپ که برای مدیریت داده های حجیم طراحی شده و سرویس نگاشت کاهش که چارچوبی برای پردازش داده های حجیم در محیط توزیع شده ارائه شده است ، دو بخش مهم هدوپ، می باشند.فایل سیستم توزیع‌شده هادوپاچ‌دی‌اف‌اس (به انگلیسی: Hadoop Distributed File System) یک فایل سیستم توزیع‌شده، قابل‌گسترش و قابل‌حمل است که در جاوا نوشته شده. هر گره در یک نمونه هادوپ تنها یک گره داده دارد. هر گره داده با استفاده از یک پروتکل بلاک خاص اچ‌دی‌اف‌اس بلاک‌هایی از داده را در سرتاسر شبکه در اختیار می‌گذارد. این فایل سیستمی برای برقراری ارتباط از لایه مجموعه پروتکل اینترنت استفاده می‌کند و کارگزارها (به انگلیسی: client) برای گفتگو با هم از RPC استفاده می‌کنند. اچ‌دی‌اف‌اس فایل‌های بزرگ (اندازه مناسب برای یک فایل ضریبی از ۶۴ مگابایت است.) را در چندین ماشین ذخیره نموده و با تکرار کردن یک داده روی هاست‌های متفاوت قابلیت اطمینان را افزایش می‌دهد؛ و به همین دلیل نیازی به ذخیره‌سازی آرایه چندگانه دیسک‌های مستقل روی هاست‌ها ندارد. به صورت پیش‌فرض، داده روی سه گره، دو بار روی رک یکسان و یک بار روی رکی متفاوت ذخیره می‌شود. همچنین گره‌های داده می‌توانند با هم برای مواردی از قبیل متوازن‌سازی داده‌ها، انتقال کپی‌ها، و بالا نگه داشتن تعداد نسخ صحبت کنند. اچ‌دی‌اف‌اس چندان تابع پازیکس نیست، زیرا اصولاً اهداف یک فایل سیستمی POSIX با اهدافی که هادوپ دنبال می‌کند، متفاوت است؛ که نتیجه این امر، کارایی بالا برای گذردهی داده‌هاست و اچ‌دی‌اف‌اس نه به هدف فراهم‌کردن دسترس‌پذیری بالا، بلکه برای پاسخگویی به فایل‌های بسیار بزرگ طراحی شده‌است. یک نمونه فایل‌سیستمی اچ‌دی‌اف‌اس به یک سرور منحصربه‌فرد، یعنی همان گره نام احتیاج دارد که تنها نقطه خطای سیستم است. به این معنی که اگر گره نام با مشکل مواجه شود، فایل‌سیستمی قابل ‌استفاده نخواهد بود و هرگاه دوباره برگردد، گره نام می‌بایست تمام عملیات ثبت‌نشده را تکرار کند. این فرایند تکرار ممکن است بیش از نیم ساعت برای یک خوشه بزرگ به طول انجامد. این فایل‌سیستمی دارای یک گرهٔ نام ثانویه‌است که بسیاری را به این تصور اشتباه می‌اندازد که زمانی که گره نام اصلی از کار بیفتد، گره نام ثانویه جای آن را خواهدگرفت. در حقیقت، گره نام ثانویه مرتباً به گره نام اصلی وصل می‌شود و تصاویری لحظه‌ای از اطلاعات دایرکتوری آن گرفته و در دایرکتوری‌های محلی یا دوردست ذخیره می‌کند. این تصاویر می‌توانند برای راه‌اندازی مجدد یک گره نام اصلی که دچار خطا شده مورد استفاده قرار گیرند، بدون این که نیاز باشد تمام عملیات فایل‌سیستمی دوباره تکرار شود.یک مزیت استفاده از فایل‌سیستمی اچ‌دی‌اف‌اس آگاهی از داده‌ها بین دنبال‌کننده کار و دنبال‌کننده وظیفه‌است. دنبال‌کننده کار، کارهای نگاشت/کاهش دنبال‌کننده وظیفه را با آگاهی از محل داده‌ها مدیریت می‌کند. فرض کنیم گره A شامل داده (x,y،z) و گره Bشامل داده (a,b،c) باشد. دنبال‌کننده کار به این طریق مدیریت می‌کند که گره B را مسئول انجام کارهای نگاشت/کاهش روی (a,b،c) و گره A را موظف به انجام نگاشت/کاهش‌های روی (x,y،z) می‌کند. بدین‌ترتیب، حجم ترافیک روی شبکه کاهش پیدا می‌کند و از انتقال غیرضروری داده‌ها ممانعت به عمل می‌آید؛ که تاثیر قابل‌توجهی روی بهبود زمان اتمام کارها دارد. شایان ذکر است زمانی که هادوپ روی فایل‌سیستم‌های دیگر اجرا می‌شود، این مزیت همیشه وجود ندارد.سایر فایل سیستم‌هاتا مه ۲۰۱۱، فهرست فایل‌های سیستمی مورد پشتیبانی عبارت بود از:· اچ‌دی‌اف‌اس (به انگلیسی: HDFS)· آمازون اس ۳ (به انگلیسی: Amazon S3)· کلود استور (به انگلیسی: Cloud Store)· اف‌تی‌پی (به انگلیسی: FTP)· فایل‌های سیستمی اچ‌تی‌تی‌پی تنها قابل خواندن و اچ‌تی‌تی‌پی (به انگلیسی: Read-only HTTP and HTTP)هادوپ می‌تواند مستقیماً با هر فایل‌سیستمی توزیع‌شده‌ای که قابلیت نصب‌شدن روی سیستم‌های عامل سازگار را داشته‌باشد، به-آسانی با استفاده از یک آدرس //:file کار کند. هرچند که این با پرداخت هزینه‌ای صورت می‌گیرد: از دست رفتن محلیت. برای کاهش‌دادن ترافیک شبکه، هادوپ باید بداند که کدام سرور به داده نزدیکتر است و این اطلاعاتی است که فایل‌سیستم خاص هادوپ می‌تواند فراهم کند.دنبال‌کننده کار و دنبال‌کننده وظیفه: موتور نگاشت/کاهش؛(Job Tracker &amp; Task Tracker / Reduced Map )بعد از فایل‌های سیستمی، موتور نگاشت/کاهش قرار دارد که از یک دنبال‌کننده کار تشکیل شده که برنامه‌های کارگزار روی آن کارهای نگاشت/کاهش را ثبت می‌کنند. این دنبال‌کننده کار، کار را به گره‌های دنبال‌کننده وظیفه در دسترس خوشه می‌دهد و تلاش می‌کند کار را تا حدامکان نزدیک داده نگه دارد. با یک فایل‌سیستم آگاه از رک، دنبال‌کننده وظیفه می‌داند که هر گره چه داده‌هایی را شامل می‌شود و چه ماشین‌های دیگری در نزدیکی هستند. اگر امکان این وجود نداشته باشد که کار روی همان گره‌ای که شامل داده‌است، انجام شود، اولویت به گره‌هایی داده می‌شود که روی همان رک هستند. اگر یک دنبال‌کننده وظیفه دچار خطا شود یا زمانش تمام شود، آن بخش از کار دوباره زمان‌بندی می‌گردد. دنبال‌کننده وظیفه روی هر گره، یک پردازه جدای ماشین مجازی جاواتولید می‌کند تا خود دنبال‌کننده وظیفه در صورت مشکل‌دار بودن کار در حال اجرا، از خطا مصون بماند. هر چند دقیقه یک ضربان از سوی دنبال‌کننده وظیفه به دنبال‌کننده کار فرستاده می‌شود تا وضعیتش بررسی شود. وضعیت و اطلاعات این دو دنبال‌کننده به وسیله بلنداسکله نمایش داده می‌شود و از طریق یک مرورگر وب می‌توان آن را مشاهده کرد.در نسخه هادوپ ۰٫۲۰ یا پایین‌تر، اگر دنبال‌کننده کار دچار خطا می‌شد، تمام کار در حال پیشرفت از دست می‌رفت. نسخه ۰٫۲۱ هادوپ تعدادی نقطه بررسی به این فرایند اضافه کرد. به این صورت که دنبال‌کننده کار، کاری که تا آن لحظه انجام داده را در فایل‌سیستمی ذخیره می‌کند. زمانی که یک دنبال‌کننده کار آغاز به کار می‌کند، به دنبال هر گونه از چنین داده‌ای می‌گردد و کار را از همان جایی که قبلاً رها کرده‌بود شروع می‌نماید.سایر برنامه‌های کاربردیفایل سیستمی اچ‌دی‌اف‌اس محدود به کارهای نگاشت/کاهش نمی‌شود. بلکه می‌تواند برای برنامه‌های دیگر بسیاری که در آپاچی در حال اجرا و توسعه هستند، از قبیل پایگاه داده HBase، سیستم یادگیری ماشینی Mahout آپاچی، و سیستم انباره داده Hiveآپاچی مورد استفاده قرار گیرند. هادوپ در واقع می‌تواند برای هر گونه کار که بیش ازreal-time بودن، batch-oriented باشد، استفاده شود و قادر است با بخش‌هایی از داده به صورت موازی کار کند. به طور مثال در اکتبر ۲۰۰۹، برنامه‌های تجاری هادوپ عبارت بودنداز:· ثبت وقایع و تحلیل کلیک‌استریم به انواع مختلف· تحلیل‌های بازاریابی (به انگلیسی: Marketing Analytics)· یادگیری ماشینی و/یا استخراج داده‌های پیچیده· پردازش تصویری· پردازش پیام‌های XML· خزندگی وب (به انگلیسی: Web Crawling) و/یا پردازش متن· بایگانی عمومی (به انگلیسی: General Archiving) شامل داده‌های رابطه‌ای و جدولیاستفاده‌کنندگان مهمیاهودر ۱۹ فوریه ۲۰۰۸، شرکت یاهو چیزی را شروع کرد که ادعا می‌کرد بزرگترین محصول کاربردی هادوپ در جهان است. نقشه جستجوی یاهو یک برنامهٔ هادوپ می‌باشد که بیش از ۱۰۰۰۰ خوشه هسته لینوکس دارد و داده‌هایی را که اکنون در هر درخواست جستجوی یاهو استفاده می‌شود، تولید می‌کند. در یاهو چندین خوشه هادوپ وجود دارند که هرکدام یک مرکز داده را اشغال می‌کنند. هیچ فایل‌سیستمی اچ‌دی‌اف‌اس یا کار نگاشت/کاهش‌ی بین مراکز داده مختلف تقسیم نمی‌شود؛ در عوض، هر مرکز داده یک فایل‌سیستمی و بارکاری جدا دارد. در ۱۰ ژوئن ۲۰۰۹، یاهو کد منبع نسخه‌ای از هادوپ را که در محصولاتش استفاده می‌کرد، عرضه کرد. یاهو تمام کاری را که روی هادوپ انجام می‌دهد، به جامعه متن باز (به انگلیسی: Open Source) برمی‌گرداند و همچنین برنامه‌نویسان شرکت، اشکالات را رفع کرده و آن را پیشرفت می‌دهند و این کد منبع اصلاح‌شده را منتشر می‌کنند تا سایر کاربران هم از این تلاش‌ها بهره‌مند شوند.سایر استفاده‌ کنندگان· 1&amp;amp;1· A9· Amazon.com· AOL· Apple· Hamilton· EHarmony· eBay· Facebook· Fox Interactive media· FreeBase· Hewlett-Packard· IBM· ImageShack· ISI· Joost· Last.fm· LinkedIn· Meebo· Metaweb· NetFlix· The NewYork Times· Ning· Powerset· RackSpace· Razorfish· StumbleUpon· Twitterهادوپ روی سرویس‌های آمازون EC2/S3می‌توان هادوپ را روی ابر محاسباتی الاستیک آمازون (به انگلیسی: EC2) و سرویس ذخیره‌سازی سادهٔ آمازون (به انگلیسی: S3) اجرا کرد. به عنوان مثال نیویورک تایمز۱۰۰ نمونه آمازون ای سی ۲ و یک برنامه هادوپ را برای پردازش ۴ ترابایت داده تصویری خام TIFF (ذخیره‌شده در اس ۳) به ۱۱ میلیون PDF در فضای ۲۴ ساعت با هزینه حدود۲۴۰ دلار (بدون پهنای باند) به کار برد. هادوپ فایل سیستمی اس ۳ را پشتیبانی می‌کند و تیم هادوپ بعد از هر انتشار تصاویر ماشین ای سی ۲ را تولید می‌کنند. مشاهدات نشان داده که هادوپ روی این دو سرویس اس ۳ و ای سی ۲ کارآمد نیست، چرا که اس ۳ یک فایل سیستمی دوردست می‌باشد و در ازای اینکه تضمین شود داده‌ها در هر عملیات نوشتن از بین نمی‌روند، تاخیری به سیستم تحمیل می‌کند؛ و این، مزیت محلیت هادوپ را که کار را نزدیک به داده نگه می‌داشت، قربانی می‌کند. در دوم آوریل ۲۰۰۹، آمازون انتشار نسخه بتای یک سرویس جدید به نام نگاشت/کاهش الاستیک آمازون را اعلام کرد، با شعار “یک سرویس وب که به تجار، محققان، تحلیل‌گران داده و برنامه‌نویسان امکان پردازش آسان و بهینه حجم عظیمی از داده را می‌دهد.”هادوپ روی گوگل و آی‌بی‌امآی‌بی‌ام و گوگل در سال ۲۰۰۷ در یک ابتکار برای حمایت رشته‌های دانشگاهی در برنامه‌نویسی کامپیوتر توزیع‌شده اعلام آمادگی کردند. در سال ۲۰۰۸، این موسسه، بنیاد پردازش ابری آکادمیک (به انگلیسی: ACCI)، با بنیاد ملی علوم برای حمایت تحقیقات آکادمیک در شاخه برنامه‌های با حجم بالای داده شریک شد. این اقدام، به ایجاد برنامه Cluster Exploratory انجامید.کاربرد Hadoop&lt;br/&gt; نقش Hadoop در تولید بازی Candy Crush?چطورHadoop  و In-Memory analysis کمک کردند تا یکی از بازیهای معتادکننده جهان با نام Candy Crush ساخته شود. مردم این بازی را دوست دارند چون آنها در این بازی قادرند تعادل بین رقابت و لذت را برقرار کنند.؛King Digital Entertainment با 195 بازی در بیش از 200 کشور دنیا سالیانه به طور متوسط 1 petabyte داده تولید می کند. تحلیل داده ها و مدارک جمع آوری شده حاکیست که روزانه 1.5 میلیارد بازی توسط کاربران در دنیا اجرا می شود . کمپانیKing از این آمار 149 میلیون کاربر فعال دارد که روزانه به جمعیت آنها نیز افزوده می شوند. برای کنترل این حجم عظیم داده ، King از ترکیب Hadoop و ابزارهای In-Memory analysis برای رسیدن به این هدف استفاده کرده است.داده ها در مراحل تولید بازیهای King بسیار مهم هستند و EXASOL با ابزارهایش این زمینه را فراهم کرده است تا Kingبتواند محصولاتش را به بهترین نحو در اختیار کاربرانش بگذارد. King با استفاده از تجزیه و تحلیل داده هایش توانسته است زمینه های نوآوری را برای طراحانش به وجود آورد و بازیهایش را به طور مدام ارتقاء دهد .برای مثال در مرحله 65 از بازی Candy crush saga ، با تحلیل دقیق داده ها King  دریافتند که کاربران در این level با مشکل روبرو می شوند و در حقیقت عبور از این مرحله خیلی مشکل است و باعث شده خیلی از کاربران از این بازی صرف نظر کنند ، آنها به این نتیجه رسیدند که باید این مرحله را تغییر دهند.زیربنا و ساختار King قبل از اینکه به سمت Mobile برود تغییر یافت و به سمت Hadoop کشیده شد. در این حالت King می توانست به سرعت پردازش و مقیاس پذیری مورد نظرش برسد و هدوپ King را مجبور کرد که صدها سرور و تعداد زیادی از مهندسان خودش را از رده خارج کند و همه اینها به معنی کاهش هزینه ها بود.هدوپ در پردازش و توزیع داده ها بسیار قوی است ولی همه نیاز ما این نیست. هدوپ در زمینه آنالیز داده ها زیاد گزینه مناسبی نیست و به همین علت شرکت King به دنبال تکمیل رفع نقص موجود شروع به تحقیق کرد. متخصصان King بعد از مدتی تصمیم گرفتند که از MPP برای عملیات تحلیل بانکهای اطلاعاتیشان استفاده کنند.از مزایای ترکیب Hadoop و MPP سرعت بسیار بالای انجام Queryها می باشد. برای مثال Queryهایی که ساعتها طول می کشید که اجرا شوند با ترکیب این دو تکنولوژی اکنون طی چند ثانیه قابل انجام شدن هستند.چطورHadoop  و In-Memory analysis کمک کردند تا یکی از بازیهای معتادکننده جهان با نام Candy Crush ساخته شود. مردم این بازی را دوست دارند چون آنها در این بازی قادرند تعادل بین رقابت و لذت را برقرار کنند.؛King Digital Entertainment با 195 بازی در بیش از 200 کشور دنیا سالیانه به طور متوسط 1 petabyte داده تولید می کند. تحلیل داده ها و مدارک جمع آوری شده حاکیست که روزانه 1.5 میلیارد بازی توسط کاربران در دنیا اجرا می شود . کمپانیKing از این آمار 149 میلیون کاربر فعال دارد که روزانه به جمعیت آنها نیز افزوده می شوند. برای کنترل این حجم عظیم داده ، King از ترکیب Hadoop و ابزارهای In-Memory analysis برای رسیدن به این هدف استفاده کرده است.؛&lt;br/&gt; چطور NASA(ناسا) برای پیش بینی آب و هوا از هدوپ استفاده می کنددر چند سال اخیر بحث هواشناسی و بحران آب یکی از مباحث داغ و مهم جوامع بین المللی بوده است و کشورهای مختلف بنا بر ظرفیتهای خود به دنبال راه حلهای مختلف جهت بیش بینی و جلوگیری از تخریب روزافزون آن هستند.  ایالات متحده نیز در این بین با استفاده از سازمانهای گوناگون خود از جمله Nasa به دنبال یافتن راه حلهای موجود است.دانشمندان هواشناسی برای پیش بینی آب و هوا نیاز دارند تا داده های جمع آوری شده که مقدار آن بسیار زیاد است را به صورت کاملا نامرتب جمع آوری کنند ، سپس بعد از مراحل مرتب سازی و تمیز کردن داده ها آنها را ذخیره و استفاده کنند در این بین زمان بسیار زیادی هدر خواهد رفت. علاوه برآن پردازش این حجم عظیم داده نیازمند هزینه ای بسیار بالاست. در این موقعیت ، دولت شروع به سرمایه گذاری برای حل این مشکل می کند.ناسا تصمیم گرفت به وسیله تکنولوژی های فناوری اطلاعات، نسل آینده تحلیل و پیش بینی هواشناسی را تولید و راه اندازی کند. ناسا برای شبیه سازی و تحلیل آب و هوا از Apache Hadoop بدلیل بهره وری بالا استفاده می کند. زیرا هدوپ با توزیع داده ها مشکلاتی از قبیل دسترس پذیری داده ها و قابلیت اعتماد را حل کرده و علاوه بر آن با قابلیت پردازش موازی داده ها سرعت پردازش را بطور چشمگیری افزایش داده است.هدوپ یا هادوپ؟همواره این موضوع بین پژوهشگران و صاحب نظران حوزه داده های کلان مبتنی بر فریم ورک هدوپ در ایران مطرح بوده است که تلفظ صحیح این تکنولوژی چگونه است. ما نیز همواره به آنها یادآوری می کردیم که تلفظ صحیح این تکنولوژی ، هدوپ است و نه هادوپ!این موضوع به حدی همه گیر شده بود که ما تصمیم گرفتیم یک بار برای همیشه به این موضوع به عنوان یک مقاله نگاه کنیم و تحقیقات خود را شروع کردیم. پس از بررسی ویدئو ههای مختلف و چک کردن سایت های مربوطه به این نتیجه رسیدیم که واژه &quot;هدوپ&quot; بهترین ترجمه پارسی برای این کلمه می باشد.&lt;br/&gt; نصب هدوپنوع نصب: Single Node Cluster (نصب به صورت Multi-Node)برای نصب هدوپ راه های گوناگونی وجود دارد. با توجه به سطح آشنایی شما با فریم ورک هدوپ می تواند این فرآیند آسان و یا سخت باشد ولی نگران نباشید ما تمامی مراحل را شرح می دهیم.بسته عمومی هدوپ یا Hadoop Commonبسته عمومی هدوپ که از سایت رسمی به صورت بسته رسمی هدوپ قابل دریافت است و همینطور در صفحه اصلی این سایت به صورت مستقیم قرار گرفته است شامل پروژه ها و سرویس های HDFS یا سیستم فایل توزیع شده هدوپ،YARN یا زمان بند وظایف و مدیر کلاستر،MapReduce یا سیستم پردازش موازی داده های عظیم و همچنین فایل اجرایی hadoop می باشد که برای پیکربندی کلی هدوپ می باشد. به دلیل اینکه هدوپ به زبان جاوا نوشته شده است نسخه های مختلف برای سیستم عامل های مختلف وجود ندارد و یک بسته می تواند با استفاده از JRE بر روی تمامی سیستم عامل ها اجرا شود.مراحل نصب عادی بسته عمومیقبل از هر چیز مطمئن شوید که JRE یا Java Runtime Environment را بر روی سیستم خود نصب کرده اید. می توانید با اجرای دستور java –version در محیط خط فرمان از نصب بودن این برنامه مطمئن شوید.بسته عمومی هدوپ را از سایت رسمی یا از طریق همین وب سایت دانلود و فایل ها را استخراج نمایید. (توجه: اگر در سیستم عامل لینوکس هستید مطمئن شوید فایل ها را در مکانی استخراج کرده اید که دسترسی مدیر را دارا می باشد و همینطور قابلیت اجرا را به فایل هاعمال کرده اید. به همین جهت پیشنهاد می شود بسته را در پوشه Home خود استخراج کنید.)پس از استخراج به پوشه موردنظر رفته و وارد پوشه bin شوید. در اینجا فایل ها و پروژه هایی که در بالا توضیح داده شد را مشاهده می کنید.در اینجا با مراجعه به خط فرمان سیستم عامل خود و تغییر پوشه جاری به پوشه ای که استخراج کردید و همینطور پوشه bin ، می تواند با اجرای هر دستور مثل hadoop ، hadoop fs شروع به کار با هدوپ کنید.معماری هادوپ Hadoop V.1شکل زیر معماری Hadoop V.1 و دو مؤلفه اصلی آن را نمایش می‌دهد. همان‌طور که از شکل زیر پیداست، هادوپ (Hadoop) از یک گره (Node) یا کامپیوتر Master و چندین گره یا کامپیوتر Slave تشکیل شده است. (مجموع این گره‌های متصل‌به‌هم را کلاستر هادوپ می‌نامیم) گره Master یک گره اصلی است که گره‌های Slave را مدیریت و مراقبت می‌کند. هم گره Master و هم گره­های Slave شامل دو مؤلفه اصلی هادوپ یعنی HDFS و MapReduce می‌باشند.?فایل سیستم توزیع‌شده هادوپ (Hadoop) یا HDFS که دارای خواصی چون مقیاس‌پذیری و دسترس‌پذیری بالا می‌باشد، جهت ذخیره‌سازی و مدیریت داده‌ها استفاده می‌گردد. مؤلفه HDFS به‌گونه‌ای بهینه‌سازی شده است که به بهترین نحو ممکن عملیات خواندن و نوشتن کلان داده ها (بیگ دیتا) را انجام دهد.مؤلفه HDFS خود دارای دو زیرمولفه می‌باشد:؛1. NameNodeزیر مؤلفه NameNode که در گره Master قرار می‌گیرد برای ذخیره‌سازی MetaData های مربوط به DataNode ها استفاده می‌شود. برخی از MetaData هایی که ذخیره می‌شوند عبارت‌اند از: تعداد بلوک‌های ذخیره‌شده در DataNode ها، لیست DataNode های دارای داده، محل DataNode ها، جزئیات گره‌های Slave و غیره.؛2. DataNodeزیر مؤلفه DataNode که در گره‌های Slave قرار می‌گیرد به‌منظور ذخیره‌سازی داده‌های واقعی در HDFS استفاده می‌شوند و به‌صورت پیش‌فرض داده‌ها را در بلوک‌های ۶۴مگابایتی ذخیره می‌کنند.فریم ‏ورک MapReduce یک فریم‌ورک محاسباتی توزیع‌شده برای پردازش‌های دسته‌ای است که موازی‌سازی کارها را بر روی حجم عظیمی از داده‌ها امکان‌پذیر می‌سازد. اجرای چنین کارهایی که ممکن است با استفاده از تکنیک‌های برنامه‌نویسی سریال، چندین روز طول بکشد، می‌تواند در عرض چند دقیقه با استفاده از MapReduce بر روی کلاستر هادوپ (Hadoop) انجام شود.؛MapReduce هادوپ (Hadoop) سیستمی برای پردازش موازی حجم بزرگی از داده‌ها بر روی کلاسترهای بسیار بزرگ است. این سیستم در برابر خطا مقاوم بوده و امکان می‌دهد داده‌ها به‌صورت توزیع‌شده بر روی نودهای کلاستر ذخیره گردند. در این مدل برنامه‌نویسی داده‌های ورودی به قطعات کوچک‌تری شکسته می‌شوند که ورودی‌های توابع Map را شکل می‌دهند. سپس توابع Map این قطعه‌های داده را روی DataNode های کلاستر هادوپ(Hadoop)، فیلتر و دسته‌بندی می‌کنند. خروجی پردازش‌های Map به فرآیندهای Reduce تحویل داده شده که اطلاعات را برای تولید خروجی نهایی، درهم‌آمیخته و خلاصه می‌کند.نقش برنامه‌نویس در اینجا تنها تعریف توابع Map و Reduce بوده و از وارد شدن به جزئیات کار با سیستم‌های توزیعی (مانند توزیع کارها، مدیریت سخت‌افزار و نرم‌افزار و غیره) معاف است. خروجی تابع Map دوتایی‌های کلید/مقدار  (Key/Value) است که این خروجی‌ها توسط تابع Reduce به‌منظور ایجاد خروجی نهایی پردازش می‌شوند.مؤلفه MapReduce نیز همانند مؤلفه HDFS دارای دو زیرمولفه می‌باشد:؛1. Job Tracker،؛Job Tracker به‌منظور اختصاص کارها به Task Tracker ها و دریافت خروجی از آن‌ها استفاده می‌شود. در مواردی که یک Task Tracker به هر دلیلی از دسترس خارج شود، Job Tracker، کار اختصاص یافته به آن را به Task Tracker دیگری می‌دهد. بدین منظور Job Tracker همه وضعیت‌های Task Tracker ها مانند بالا بودن، در حال اجرا بودن، خراب بودن و بازیابی شده را نگهداری می‌کند.؛2. Task Tracker،؛Task Tracker ها وظیفه اجرای کارهایی را دارند که توسط Job Tracker ها به آن‌ها اختصاص داده می‌شود. همچنین آن‌ها وضعیت کارهای اختصاصی خود را به Job Tracker ها ارسال می‌کنند. Task Tracker خود شامل دو جزء می‌باشد که این دو جزء عبارت‌اند از: (۱) Map Task و (۲) Reduce Task.مسئولیت‌های چهار مؤلفه فوق و نحوه تعامل آن‌ها با یکدیگر برای اجرای کارهای برنامه کاربردی کلاینت به‌صورت زیر است:· کلاینت (کلاینت‌ها) کار (درخواست) خود را به سیستم هادوپ ارسال می‌کند.· سیستم هادوپ درخواست کلاینت را با استفاده از گرهMaster دریافت می‌کند.· مؤلفه Job Tracker در گره Master مسئول دریافت کار کلاینت و تقسیم آن به بخش‌های مستقل قابل مدیریت و اختصاص این بخش‌ها به Task Trackers‌ها می‌باشد.؛· Task Trackers ها کارهای دریافتی را با استفاده مؤلفه MapReduce اجرا می‌کنند.· هنگامی‌که همهTask Tracker ها کارهای خود را به اتمام رساندند، Job Tracker خروجی آن‌ها را گرفته و برای تولید خروجی نهایی آن‌ها را ترکیب می‌کند.· درنهایت سیستم هادوپ(Hadoop)خروجی نهایی را برای کلاینت ارسال می‌کند.در کل سیستم هادوپ(Hadoop) دو نوع درخواست از کلاینت دریافت می‌کند: (۱) درخواست ذخیره‌سازی؛ و (۲) درخواست محاسباتهنگامی‌که سیستم هادوپ(Hadoop) درخواستی را برای ذخیره‌سازی یک فایل داده‌ای بزرگ در HDFS دریافت می‌کند، آن را به بلوک‌های قابل مدیریت و معنی‌دار تقسیم کرده و سپس این بلوک‌ها را بین گره‌های متفاوت (با سه کپی) توزیع می‌کند. (فاکتور تکرار پیش‌فرض در هادوپ ۳ می‌باشد).هنگامی‌که هادوپ (Hadoop) یک درخواست محاسبات دریافت می‌کند، ابتدا برای بازیابی بلوک‌های داده‌ای مرتبط با درخواست، با نزدیک‌ترین گره‌ها تماس حاصل می‌کند و سپس محاسبات را انجام می‌دهد. هنگام خواندن داده و یا انجام محاسبات، اگر یک یا چند گره از دسترس خارج شوند، سیستم هادوپ (Hadoop) به‌صورت خودکار، کارها را به نزدیک‌ترین گره‌های در دسترس اختصاص می‌دهد. به‌این‌ترتیب سیستم هادوپ (Hadoop)، دسترس‌پذیری و تحمل‌پذیری در مقابل خطا را مدیریت می‌کند.مقایسه نسخه‌های هادوپ؛Hadoop V.1 تنها یک مدل برنامه‌نویسی را پشتیبانی می‌کند که همان MR) MapReduce) است؛ اما Hadoop V.2 به واسطه وجودYarn، چندین مدل شاملMR, Spark, Storm, Streaming, Graph و … را پشتیبانی می‌کند.؛ Hadoop V.1 تنها برای پردازش دسته‌ای کاربرد دارد درحالی‌که Hadoop V.2 برای پردازش‌های بی‌درنگ و کار با داده‌های جریانی نیز کاربرد دارد.· در Hadoop V.1، بسیاری از وظایف بر عهده JobTracker است و اگر این مؤلفه از دسترس خارج شود، مشکل ایجاد خواهد شد.؛ Hadoop V.1 حداکثر از ۴۰۰۰ گره در هر کلاستر پشتیبانی می‌کند اما Hadoop V.2 بیشتر از ۱۰۰۰۰ گره در هر کلاستر را نیز پشتیبانی می‌کند.؛ Hadoop V.1 برخی محدودیت‌ها در رابطه با مقیاس‌پذیری دارد که در Hadoop V.2 حل شده است.</description>
                <category>mjavad48</category>
                <author>mjavad48</author>
                <pubDate>Sat, 30 May 2020 17:35:49 +0430</pubDate>
            </item>
                    <item>
                <title>آموزش آزمایشگاه ریزپردازنده (ساعت با قابليت تنظيم )</title>
                <link>https://virgool.io/@mjavad48/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D8%B1%DB%8C%D8%B2%D9%BE%D8%B1%D8%AF%D8%A7%D8%B2%D9%86%D8%AF%D9%87-%D8%B3%D8%A7%D8%B9%D8%AA-%D8%A8%D8%A7-%D9%82%D8%A7%D8%A8%D9%84%D9%8A%D8%AA-%D8%AA%D9%86%D8%B8%D9%8A%D9%85-%D8%AA%D9%88%D8%B3%D8%B7-%D8%B3%D9%88%D8%A6%DB%8C%DA%86-%D9%88-%DA%A9%DB%8C%D9%BE%D8%AF-bdwzdlswt2js</link>
                <description>نام پروژه :آموزش گام به گام ساخت ساعت ديجيتالي روی سون سگمنتاجزاي مدار :ATMEGA8L-CRYSTAL(32.768KHZ)-74HC245-R220Ω-7segCC-Sowitch-Keypad4*4عملکرد مدار :ساعت با قابليت تنظيم توسط سوئیچ و کیپدنام استاد :جناب آقای مهندس یعقوبی تبارتهیه کننده : محمد جواد رهسپار یگانهمقدمهدر این پروژه ما قصد داریم توسط (real time clock) rtc میکروکنترلر avr  تحت کامپایلر قدرتمند codevisionیک ساعت بسازیم و آن را روی سون سگمنت به روش مولتی پلکس به نمایش در آوریم . در اکثر میکروکنترلرهای avr  ، تایمر دو می تواند به عنوان rtcعمل کند که در اینصورت کلاک مورد نیاز آن به صورت آسنکرون از طریق یک کریستال ساعت 32.768KHZ تامین می گردد .عملکرد روش مولتی پلکس :برای نمایش اعداد در روش معمولی ما باید برای هر سون سگمنت یک پورت یا یک آی سی لچ به کار ببریم اما در روش مولتی پلکس نیاز ما به سخت افزار به شدت کاهش می یابد .در روش نمایش به صورت مولتی پلکس تمامی سون سگمنت ها به صورت موازی به یکدیگر اتصال داده شده و یک دیتاباس را تشکیل می دهند بنابراین تنها یک پورت از میکروکنترلر ما اشغال می شود ، حال نکته اینجاست که اگر عددی را بر روی باس ارسال کنیم این عدد بر روی تمامی سون سگمنت ها قرار می گیرد و تمامی سون سگمنت ها این عدد را نشان خواهند داد ، برای حل این مشکل ما باید از پایه مشترک (پایه تغذیه) هر سون سگمنت به عنوان پایه های کنترلی استفاده کنیم و هر زمان که ما فرمان دادیم سون سگمنت روشن شده و عدد مورد نظر را نشان دهد بدین صورت که پس از ارسال هر عدد بر روی باس ، ما تنها فرمان روشن شدن یک سون سگمنت را می دهیم آن هم در مکانی که می خواهیم عددمان نمایش داده شود و با این روش مشکل روشن شدن همه سون سگمنت ها حل می شود اما هنوز کار تمام نشده زیرا در هر لحظه ما فقط یک عدد را می توانیم نشان دهیم در صورتی که ما می خواهیم چندین عدد را به صورت پیوسته به نمایش در آوریم برای رفع این مشکل ، ما می توانیم از خطای دید انسان استفاده کنیم ، می دانید که هر تصویر برای مدت زمان کوتاهی در ذهن انسان باقی می ماند بنابراین اگر ما اعداد را با سرعتی کمتر از ماندن تصویر در ذهن انسان بر روی سون سگمنت اسکن کنیم اعداد را به صورت پیوسته و بدون پرش خواهیم دید.عملکرد تایمر دو :به طور کلی عملکرد تایمر دو مشابه عملکرد تایمر صفر می باشد ؛  با  این تفاوت که نمی توان به عنوان کانتر از آن استفاده نمود ؛ اما  می توان با اتصال  یک  کریستال  ساعت 32.768KHZ   به پایه های  ,TOCS1 TOCS2 از آن در وضعیت آسنکرون جهت rtcاستفاده نمود . تایمر دو خود دارای یک prescaler   مجزا از بقیه  تایمرها  می باشد ؛ که  با  تقسیم  فرکانس  ایجاد  شده  توسط  کریستال 32.768KHZ  بر 128 می توان به زمان سرریز یک ثانیه که مناسب برای عملکرد ساعت است دست پیدا کرد . پیکربندی تایمر دو توسط جادوگر : بزرگترین مزیت کامپایلر codevision  نسبت به بقیه کامپایلرهایی که برنامه نویسی در محیط آنها به زبان c  می باشد وجود codewizard یا جادوگر می باشد ، زیرا شما بدون نیاز به دانش زیاد می توانید ماژول های avr را به راحتی پیکربندی کنید . که در اینجا ما نیز می خواهیم تایمر دو را در مد آسنکرون توسط جادوگر پیکربندی کنیم .ابتدا وارد محیط جادوگر شده سپس وارد زبانه Timer2  شوید و clock source  را از system clock  به TOSC1 pin تغییر دهید که در اینصورت کلاک تایمر دو جدا از کلاک سیستم و به صورت آسنکرون از روی پایه های  TOSC1 , TOSC2 تامین می گردد .حال باید مقدار clock value را روی PCK2/128 قرار دهیم .که در صورت استفاده از کریستال 32.768 کیلو هرتز روی پایه های TOSC1,TOSC2  می توان به سرریز یک ثانیه دست پیدا کرد و تایمر دو را به rtcیا ساعت زمان واقعی تبدیل کرد و با انتخاب تیک overflow interrupt می توان وقفه تایمر دو را فعال کرد که پس از سر ریز یک ثانیه وقفه اتفاق می افتد .شرح سخت افزار : در این مدار atmega8 هسته اصلی می باشد و وظیفه تمامی محاسبات را بر عهده دارد . 74HC245آی سی بافر است و نقش ایزوله کردن  و تقویت جریان را دارد  ،  البته خروجیهای  AVR  توانایی روشن کردن LEDرا به صورت مستقیم دارند اما در صورت استفاده از سون سگمنت در ابعاد بزرگتر باید از  بافر استفاده شود . مقاومتهای   220 اهم برای محافظت از سون سگمنتها در برابر اضافه جریان قرار داده شده است . کریستال 32.768 khz  کلاک تایمر دو  را  بصورت آسنکرون برای رسیدن به سرریز  یک  ثانیه تامین می کند و کلاک اصلی برنامه توسط نوسانساز  RC  داخلی که روی 8Mhz قرار داده شده  تامین می گردد. برای نمایش اعداد از یک سون سگمنت شش تایی از نوع کاتد مشترک استفاده شده همچنین برای کاهش سخت افزار می توان از قسمت نمایش ثانیه صرف نظر کرده و از یک سون سگمنت چهارتایی استفاده کرد ، برای نمایش ساعت نیاز است که اعداد به کد معادل برای سون سگمنت تبدیل شوند به این منظور آی سی های  دیکودر BCD TO 7S  با نام های 7448 برای سون سگمنت های کاتد مشترک و 7447 برای سون سگمنت های آند مشترک بکار برده می شود که ما برای کاهش سخت افزار به صورت نرم افزاری کدهای معادل برای سون سگمنت را تبدیل کرده ایم  و دیگر  نیازی  به  استفاده از  آی سی های دیکودر  نیست . برای تنظیم کردن ساعت نیز از سه سوئیچ استفاده شده .شرح نرم افزار : به طور کلی برنامه از چهار قسمت اصلی تشکیل شده :1. تابع mainکه پیکره اصلی برنامه است .2. زیربرنامه وقفه تایمر دو که هر ثانیه یک بار اتفاق می افتد .3. تابع set_time که وظیفه کلید خوانی و تنظیم مقادیر ثانیه ، دقیقه و ساعت را بر عهده دارد .4. تابع display که وظیفه نمایش و اسکن اعداد را بر عهده دارد .شروع برنامه :#include &lt;mega8.h&gt;#include &lt;delay.h&gt;در این قسمت ما توسط دستور پیش پردازنده #include  فایلهای هدر مربوط به  mega8 و delay را به برنامه خود اضافه می کنیم .__________________________________________________________________________________________#define  data_port    PORTD#define  comm_port   PORTCدر این قسمت ما از دستور پیش پردازنده #define  برای تعریف ماکرو استفاده کرده ایم که به خوانایی و سادگی کد اصلی برنامه می افزاید و پس از آن کامپایلر در هر کجا که از data_port  استفاده شود PORTD و در هر کجا که comm_port  استفاده شود PORTC  را لحاظ می کند و در اینجا PORTD پورتی است که دیتا یا همان اعداد را به آن ارسال می کنیم و PORTC پورتی است که عمل کنترل یا اسکن را انجام می دهد .void set_time(void);void display(void);در این قسمت دو تابع با نامهای set_time , display تعریف شده است .__________________________________________________________________________________________flash char cathode_seg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};//------------------------------------------0------1------2-------3-------4------5-------6------7-------8------9---در این قسمت کد های معادل سون سگمنت از نوع کاتود مشترک را درون یک آرایه تعریف کرده ایم و چون این مقادیر ثابت هستند و در طول برنامه تغییر نمی کنند می توان آنها را درون حافظه فلش تعریف کرد که برای این کار باید از کلمه کلیدی  const  یا flash  استفاده کرد .signed char second=0,minute=0,hour=0;در این قسمت سه متغییر از نوع char علامتدار با نامهای second  ،  minute  ،  hourبرای مقادیر ثانیه ، دقیقه و ساعت تعریف شده است . اگر متغییر های ما از نوع علامت دار نباشند هنگامی که برای تنظیم ساعت از کلید down  استفاده شود و عدد ما به مقدار کوچکتر از صفر برسد برنامه با مشکل مواجه شده . همچنین می توان در این قسمت از برنامه مقادیر ثانیه ، دقیقه و ساعت را مقدار دهی اولیه کرد .__________________________________________________________________________________unsigned char  key,dot,pointer;در این قسمت سه متغییر از نوع char بدون علامت با نامهای key , dot   و  pointerتعریف شده است که متغییر key  مقدار کلید خوانده شده را در خود جای می دهد و متغییر dot  وظیفه تفکیک ثانیه ، دقیقه و ساعت را در  بخش تنظیم ساعت بر عهده دارد و متغییر pointer. نقش چشمک زدن پوینتر بین اعداد (ساعت – دقیقه) و (دقیقه – ثانیه) را به نشانه وقوع هر یک ثانیه بر عهده دارد__________________________________________________________________________________unsigned char dot_set_min,dot_set_hour,dot_set_sec;در این قسمت سه متغییر از نوع char بدون علامت تعریف شده که در این متغیرها تنها بیت با ارزش آنها برای ما حائض اهمیت است(0b00000000) و هر کدام نقش روشن کردن پوینترهای مربوط به ثانیه ، دقیقه و ساعت را در هنگام تنظیم ساعت بر عهده دارند .__________________________________________________________________________________________تابع main  :این قسمت شروع تابع اصلی برنامه با نام main  است و درون آن رجیسترهای I/O مقداردهی اولیه می شوند .voidmain(void){PORTB=0x00;DDRB=0x00;در این قسمت PORTB به عنوان درگاه ورودی تعریف شده است .PORTC=0x00;DDRC=0xFF;PORTD=0x00;DDRD=0xFF;در این قسمت PORTC و  PORTD به عنوان درگاه خروجی تعریف شده اند .ASSR=0x08;TCCR2=0x05;TCNT2=0x00;OCR2=0x00;TIMSK=0x40;در این قسمت رجیسترهای مربوط به تایمر دو با توجه به تنظیماتی که توسط جادوگر انجام داده ایم مقدار دهی شده اند .#asm(&quot;sei&quot;)این دستور وقفه سراسری را فعال سازی می کند .while (1){set_time();   display();}}در این قسمت توسط دستور while یک حلقه نامتناهی ایجاد شده که درون آن توابع set_time , display  دائماً فراخوانی می شوند .__________________________________________________________________________________________زیر برنامه وقفه تایمر دو :   در این قسمت زیر برنامه وقفه تامر دو قرار دارد که پس از سرریز تایمر در هر یک ثانیه برنامه به این قسمت پرش خواهد کرد .این زیر برنامه وظیفه محاسبه زمان را بر عهده دارد .interrupt [TIM2_OVF] void timer2_ovf_isr(void){if(dot==0) {در این قسمت از برنامه متغیر dot با مقدار صفر مقایسه می شود که اگر ما در قسمت زیر برنامه set_time کلیدی را فشرده باشیم مقدار  متغیر dotتغییر خواهد کرد و در اینجا عمل محاسبه زمان انجام نمی شود و از زیر برنامه خارج خواهیم شد.Pointer = ~pointer &amp; 0b10000000;در این قسمت متغییر pointer  در هر یک ثانیه که زیر برنامه اجرا می شود تغییر وضعیت داده و پوینترهای چشمکزن را خاموش و روشن می کند .second++;if (second &gt; 59){second=0;  minute++;if (minute&gt;59){minute=0;  hour++;if(hour&gt;23){hour=0;}}}};}زیر برنامه تابع set_time  : در این قسمت زیر برنامه تابع set_time  قرار دارد که عمل کلیدخوانی در آن صورت می پذیرد و شامل سه بخش اصلی می شود :1. فشرده شدن کلید set که با هر بار فشرده شدن هر کدام از قسمتهای ثانیه ، دقیقه یا ساعت را قابل تنظیم می کند .2.فشرده شدن کلید up در صورتی عمل می کند که قبل از آن توسط کلید set یکی از قسمتهای ثانیه ، دقیقه یا ساعت را انتخاب کرده باشیم و با هر بار فشرده شدن یک واحد به مقادیر ثانیه ، دقیقه یا ساعت می افزاید .3. فشرده شدن کلید down در صورتی عمل می کند که قبل از آن توسط کلید set یکی از قسمتهای ثانیه ، دقیقه یا ساعت را انتخاب کرده باشیم و با هر بار فشرده شدن یک واحد از مقادیر ثانیه ، دقیقه یا ساعت می کاهد .void set_time(void){key=PINB &amp; 0b00000111;در این قسمت PINB با مقدار 0b00000111 ، and منطقی شده و حاصل درون متغیر key  قرار می گیرد که اگر متغیر key برابر با صفر باشد نشانگر این است که هیچ کلیدی فشرده نشده .switch(key) {/////press set buttoncase 0b00000001:در این قسمت اگر متغیر  keyبرابر با مقدار 0b00000001 باشد نشانگر این است که کلید set  فشرده شده است که با هر بار فشرده شدن  کلید  key، متغیر dot یک واحد افزایش می یابد .dot++;switch (dot) {case 1 :dot_set_sec =0b10000000;    dot_set_min =0b00000000;  dot_set_hour=0b00000000;pointer=0;break;در این قسمت اگر متغیر  dot برابر با مقدار  1  باشد پوینتر مربوط به تنظیم ثانیه مقداردهی شده و مقدار ثانیه قابل تنظیم خواهد بود و همچنین متغیر pointer برابر با صفر می شود که در اینصورت پوینترهای چشمکزن خاموش می شوند . __________________________________________________________________________________________case 2:dot_set_sec=0b00000000;  dot_set_min=0b10000000;  dot_set_hour=0b00000000;pointer=0;break;در این قسمت اگر متغیر  dot برابر با مقدار  2  باشد پوینتر مربوط به تنظیم دقیقه مقداردهی شده و مقدار دقیقه قابل تنظیم خواهد بود و همچنین متغیر pointer برابر با صفر می شود که در اینصورت پوینترهای چشمکزن خاموش می شوند . __________________________________________________________________________________________case 3:dot_set_sec =0b00000000;  dot_set_min =0b00000000;  dot_set_hour=0b10000000;pointer=0;break;در این قسمت اگر متغیر  dot برابر با مقدار  3  باشد پوینتر مربوط به تنظیم ساعت مقداردهی شده و مقدار ساعت قابل تنظیم خواهد بود و همچنین متغیر pointer برابر با صفر می شود که در اینصورت پوینترهای چشمکزن خاموش می شوند . __________________________________________________________________________________________default:if (dot &gt;= 4) {dot_set_sec =0b00000000;  dot_set_min =0b00000000;  dot_set_hour=0b00000000;    dot=0;}};break;در این قسمت اگر متغیر  dot بزرگتر یا مساوی با مقدار  4  باشد هیچ کدام از پوینترها  مقداردهی نمی شوند و همچنین متغیر dot  برابر با صفر می شود که در اینصورت برنامه از حالت تنظیم خارج می شوند . __________________________________________________________________________________________/////press up buttoncase 0b00000010:در این قسمت اگر متغیر  keyبرابر با مقدار 0b00000010 باشد نشانگر این است که کلید up فشرده شده است و در صورتی کلید upکارایی خواهد داشت که قبلاً توسط کلید  set  یکی از قسمتهای ثانیه ، دقیقه یا ساعت جهت تنظیم انتخاب شده باشند .switch (dot) {case 1 :second++; if (second&gt;59)  second=0;break;در این قسمت اگرمتغییر dot برابر با مقدار  1 باشد یک واحد به ثانیه اضافه می شود و اگر مقدار آن بزرگتر از 59شود مساوی صفر می گردد.__________________________________________________________________________________________case 2 :minute++;  if (minute&gt;59) minute=0;break;در این قسمت اگرمتغییر dot برابر با مقدار  2 باشد یک واحد به ثانیه اضافه می شود و اگر مقدار آن بزرگتر از 59شود مساوی صفر می گردد.__________________________________________________________________________________________case 3:hour++; if(hour&gt;23) hour=0;break;};در این قسمت اگرمتغییر dot برابر با مقدار  3 باشد یک واحد به ثانیه اضافه می شود و اگر مقدار آن بزرگتر از 59شود مساوی صفر می گردد.__________________________________________________________________________________________break;/////press down buttoncase 0b00000100:در این قسمت اگر متغیر  keyبرابر با مقدار 0b00000100 باشد نشانگر این است که کلید down فشرده شده است و در صورتی کلید downکارایی خواهد داشت که قبلاً توسط کلید  set  یکی از قسمتهای ثانیه ، دقیقه یا ساعت جهت تنظیم انتخاب شده باشند .switch (dot) {case 1 :second--; if (second&lt;0) second=59;break;در این قسمت اگرمتغییر dot برابر با مقدار  1 باشد یک واحد از ثانیه کاسته می شود و اگر مقدار آن کوچکتر از صفر شود مساوی  59می گردد.__________________________________________________________________________________________case 2 :minute--;  if(minute&lt;0) minute=59;break;در این قسمت اگرمتغییر dot برابر با مقدار  2 باشد یک واحد از دقیقه کاسته می شود و اگر مقدار آن کوچکتر از صفر شود مساوی 59 می گردد.__________________________________________________________________________________________case 3:hour--; if(hour&lt;0) hour=23;break;};در این قسمت اگرمتغییر dot برابر با مقدار  3 باشد یک واحد از ساعت کاسته می شود و اگر مقدار آن کوچکتر از صفر شود مساوی 23 می گردد.__________________________________________________________________________________________break;};}زیر برنامه تابع display  :در این قسمت ، زیر برنامه تابع display قرار دارد که وظیفه آن نمایش اعداد ثانیه ، دقیقه و ساعت بر روی سون سگمنت است و در آن سعی شده تمامی دستورات مربوط به نمایش هر عدد در یک خط نوشته شود تا به خوانایی و سادگی برنامه بیافزاید . در اینجا برای نمایش هر یک از اعداد ثانیه ، دقیقه و ساعت نیاز است که قسمتهای یکان و دهگان هر عدد بصورت مجزا از یکدیگر تفکیک شوند که جهت این امر از الگوریتمی بسیار ساده استفاده شده به عنوان مثال اگر مقدار ساعت برابر با عدد23  باشد برای جدا کردن رقم دهگان آن کافی است تا عدد 23را توسط عملگر /   بر عدد 10 تقسیم کنیم  23 /10=2.3 و چون متغییر hourاز نوع flout تعریف نشده فقط مقدار صحیح آن که عدد  2  باشد برگردانده می شود و برای جدا کردن رقم یکان  کافی است تا عدد 23  را توسط عملگر % بر عدد 10  تقسیم کنیم 23%10=2.3 که در اینصورت فقط مقدار باقیمانده تقسیم که عدد 3 است برگردانده می شود و اعداد حاصل از تقسیم به عنوان عدد آرایه cathode_seg  به کاربرده می شوند به این دستور data_port=cathode_seg [hour/10] دقت کنید ؛ با توجه به مثال فوق خواهیم داشت data_port=cathode_seg [2]  و این دستور دومین عدد از آرایه cathode_seg را که کد عدد دو (0X5B)  برای سون سگمنت است به data_port  ارسال می کند . در ادامه برای نمایش عدد 2 بر روی سون سگمنت باید توسط دستور comm_port=0b11111110 سون سگمنت متناظر با رقم دهگان ساعت روشن شود و توسط دستور delay_ms(4)برای مدت چهار میلی ثانیه عدد 2 روی سون سگمنت نمایش داده می شود و در نهایت توسط دستور comm_port=0xff سون سگمنت خاموش شده و آماده نمایش عدد بعد می شود ؛ اگر ما توسط دستور comm_port=0xff  سون سگمنت را خاموش نکنیم و عدد بعد را ارسال کنیم چون هنوز comm_port   ما برای نمایش عدد قبلی روشن است برای لحظات کوتاهی عدد جدید را نشان خواهد داد و در عمل باعث می شود یک سایه از عدد قبل را بر روی سون سگمنتها داشته باشیم ؛ که این امر هنگام شبیه سازی در نرم افزار  پروتئوس مشهود  نمی باشد.حلقه for  در زیر برنامه displayروی نمایش اعداد بی تاثیر است و برای ایجاد یک تاخیر در عمل کلید خوانی بکار برده شده اگر این تاخیر ایجاد نشود چون زیر برنامه های  set_timeو  display به صورت مداوم و با سرعت بالایی در حال اجرا هستند وقتی ما کلیدی را بفشاریم تا زمانی که کلید را رها کنیم چندین بار زیر برنامه set_time  اجرا می شود و کنترل دقیقی روی تنظیم مقادیر ساعت را نخواهیم داشت به همین منظور می توان با مقدار دهی متغییر i در حلقه  for میزان تاخیر در کلید خوانی را تغییر داد .void display(void){unsigned char i;for(i=0;i&lt;10;i++){data_port=cathode_seg[hour/10]   | dot_set_hour;  comm_port=0b11111110;delay_ms(4);comm_port=0xff;data_port=cathode_seg[hour%10]   | dot_set_hour | pointer;comm_port=0b11111101;delay_ms(4);comm_port=0xff;data_port=cathode_seg[minute/10]   |dot_set_min;  comm_port=0b11111011;delay_ms(4);comm_port=0xff;data_port=cathode_seg[minute%10]  | dot_set_min | pointer;  comm_port=0b11110111;delay_ms(4);comm_port=0xff;data_port=cathode_seg[second/10]  |dot_set_sec ; comm_port=0b11101111;delay_ms(4);comm_port=0xff;data_port=cathode_seg[second%10]  | dot_set_sec; comm_port=0b11011111;delay_ms(4);comm_port=0xff;};}ساعت دیجیتال روی سون سگمنت با قابلیت تنظیم توسط keypad شرح سخت افزار :در این مثال برای تنظیم ساعت از کیپد 4*4 استفاده شده . برای عمل کلید خوانی از روش wakeup یا interrupt استفاده گردیده که در این روش نیاز به چهار عدد دیود معمولی 1n4148می باشد که در ادامه مختصرا به آن خواهیم پرداخت .عملکرد روش wakeup در کلید خوانی : در این روش با استفاده از چهار عدد دیود معمولی 1n4148 سطرهای کیپد ( P.0 تا  P.3) را به یکی از وقفه های خارجی میکروکنترلر وصل می کنیم و با فعال سازی وقفه خارجی ، هنگامی که کلیدی فشرده شود زیر برنامه وقفه خارجی اتفاق می افتد و با نوشتن دستورات مربوط به کلید خوانی در زیر برنامه وقفه ، مقدار کلید فشرده شده را بدون نیاز به سرکشی دائم و اشغال شدن cpu  میکروکنترلر بدست می آوریم .شرح نرم افزار : ابتدا با استفاده از چهار عدد دیود 1n4148  پینهای صفر تا سه از پورتی که کیپد به آن متصل شده را مطابق شکل به پایه INT0 میکروکنترلر وصل کنید . سپس PIND.2  که ورودی وقفه خارجی صفر است را به عنوان ورودی و مقاومت poll up آن را فعال نموده و وقفه خارجی صفر را در مد low level  قرار دهید .پیکره اصلی این برنامه همانند برنامه قبلی می باشد ، فقط به بخشهایی که به برنامه تنظیم ساعت با کیپد اضافه شده می پردازیم . برنامه کلید خوانی به صورت جداگانه در یک فایل هدر با نام keypad.h  و فایل کتابخانه ای keypad.lib  نوشته شده که در کنار فایل پروژه قرار داده شده .برای سادگی و خوانا بودن پیکربندی keypadروی پورت مورد نظر ، از الگوی پیکربندی lcd  کاراکتری که در ورژن های قدیمیتر کدویژن و به زبان اسمبلی استفاده می شد بکار رفته . که در این پروژه کیپد به پورت Bمتصل شده .بعد از اجرای برنامه در صورتی که هرکدام از کلید های کیپد را بفشارم به زیر برنامه وقفه خارجی ارجاع داده می شویم ، اگر کلید فشرده شده set time (‘D’)  باشد ، متغییر dotمقدار دهی می شود که با هر بار فشرده شدن پوینتر های مربوط به مقادیر ساعت ، دقیقه یا ثانیه نیز روشن می شود و منتظر می ماند تا مقادیر جدید را وارد کنیم . این بخش از برنامه همانند برنامه set timeدر بخش تنظیم ساعت با سوئیچ می باشد .اگر کلید فشرده شده یکی از کلید های ‘B’ , ‘C’ , ‘*’ , ‘#’ باشد ، از زیر برنامه وقفه خارج می شویم چون ما برنامه ای برای آنها ننوشته ایم و فعلا بلا استفاده می باشند ، اما خود می توانید برای آنها کارایی تعریف کنید برای مثال یک برنامه آلارم به ساعت خود اضافه کنید .اگر کلید فشرده شده یکی از اعداد  0 تا 9 باشد ، به بخش defaultوارد می شویم . و با توجه به مقدار متغییر dot  که توسط کلید set time  قبلا مقدار دهی شده مقادیر ساعت مقداردهی می شوند .اگر مقدار متغییر dot  برابر 1 باشد مقدار ساعت قابلیت تنظیم خواهد داشت . مقدار کلید فشرده شده که درون متغییر key  قرار دارد درون متغییر Hبارگزاری می شود و چون ماکزیمم مقدار ساعت باید عدد 23 باشد و نباید از این مقدار تجاوز کند ، رقم دهگان ساعت با عدد 2 مقایسه می شود و اگر بزرگتر از عدد 2 باشد آن را صفر می کنیم و رقم یکان ساعت نیز با عدد 3 مقایسه می گردد و در نهایت عدد ساعت ما مقداردهی می شود .اگر مقدار متغییر dot  برابر 2 باشد مقدار دقیقه قابلیت تنظیم خواهد داشت .  مقدار کلید فشرده شده که درون متغییر key  قرار دارد درون متغییر Mبارگزاری می شود ، یک متغییر به نام hold نیز وجود دارد که در ابتدا با عدد صفر مقدار دهی شده . که رقم خوانده شده از صفحه کلید درون این متغیر نیز قرار می گیرد این متغییر در واقع رقم یکان را درون خود جای می دهد و چون ماکزیمم مقدار دقیقه نباید از عدد 59 تجاوز کند ، یعنی رقم دهگان نباید از عدد 5 بزرگتر باشد ، بنابراین  با عدد 5 مقایسه شده و اگر این عدد بزرگتر از عدد 5 باشد آن را صفر می کند سپس این عدد را در عدد 10 ضرب می کند تا به رقم دهگان انتقال یابد و در نهایت عدد دقیقه  ما مقداردهی می شود .اگر مقدار متغییر dot  برابر 3 باشد مقدار ثانیه قابلیت تنظیم خواهد داشت و دقیقا همانند تنظیم دقیقه عمل می کند .اگر کلید فشرده شده ‘A’ باشد ، برنامه از بخش تنظیم خارج خواهد شد .* با تشکر از لطف و زحمات شما استاد گرانقدر *</description>
                <category>mjavad48</category>
                <author>mjavad48</author>
                <pubDate>Fri, 29 May 2020 21:02:20 +0430</pubDate>
            </item>
            </channel>
</rss>