مدارات الکترونیک circuits electronic

الکترونیک کامپیوتر رباتیک ماهواره اینترنت موبایل

مدارات الکترونیک circuits electronic

الکترونیک کامپیوتر رباتیک ماهواره اینترنت موبایل

الکترونیک

        عناوین

Remote Control   Transmitters  فرستنده گیرنده و ریموت کنترل  Arrow.GIF (101 bytes)

Audio Preamplifier, filter, crossover circuits مدارات صوتی Arrow.GIF (101 bytes)

Music and Special Effects   مدارات موزیک و تغییر صدا Arrow.GIF (101 bytes)

Automobile - car circuits  مدارات اتومبیل  Arrow.GIF (101 bytes)

Video circuits  مدارات ویدیویی Arrow.GIF (101 bytes)

Battery circuits  مدارات باطری Arrow.GIF (101 bytes)

Computer circuits  مدارات کامپیوتر و میکرو و رباتیک Arrow.GIF (101 bytes)

Clock and Timer circuits  مدارات ساعت و تایمر و شمارنده Arrow.GIF (101 bytes)

 Decoder circuits  مدارات اشکارساز و فلزیاب Arrow.GIF (101 bytes)

Digital circuits  مدارات دیجیتال Arrow.GIF (101 bytes)

Electronic Switch  circuits  مدارات سوئیچ و امنیتی و دزدگیر Arrow.GIF (101 bytes)

Vu Meter circuits  مدارات صوت سنج Arrow.GIF (101 bytes)

 Light Effect/Controller circuits  مدارات رقص نور دیمر فلاشر Arrow.GIF (101 bytes)

Measurement / Test circuits  مدارات تست و اندازه گیری Arrow.GIF (101 bytes)

Oscillator circuits  مدارات اسیلاتور  Arrow.GIF (101 bytes)

Power Supply circuits  مدارات منبع تغذیه و اینورتر Arrow.GIF (101 bytes)

Telephone circuits  مدارات تلفن و موبایل Arrow.GIF (101 bytes)

Other Circuits   سایر مدارات Arrow.GIF (101 bytes)

Pro. Circuits  مدارات حرفه ای Arrow.GIF (101 bytes)

پروژه ماه  Arrow.GIF (101 bytes)

مدارات ارسالی شما  Arrow.GIF (101 bytes)

 

 
 مدارات و مطالب در خواست شده شما  Arrow.GIF (101 bytes)Arrow.GIF (101 bytes) Arrow.GIF (101 bytes) 
 

 
 

آموزش ساخت ربات

قسمتهای مکانیکی - بخش اول

ربات پرتابگر - مسابقات روباتیک اصفهان
نمونه ای از ربات پرتابگر ساخته شده توسط دانش آموزان استان اصفهان

این قسمت ها شامل سازه مکانیکی ربات به همراه نیروی محرکه ربات می شود که مجموعاً علاوه بر شکل دهی به ربات قابلیتهای حرکتی ربات را نیز ایجاد می کنند.

سازه مکانیکی معمولاً به گونه ای ساخته می شود که همه حالاتی که ربات در آن قرار خواهد گرفت را پشتیبانی نماید. مثلاً اگر ربات شما قرار است یک وزنه 100 کیلوگرمی را جابجا نماید سازه مکانیکی ربات اولین قسمتی است که باید سازگاری کامل با این وزنه داشته باشد. وقتی می گوییم سازگاری کامل یعنی اولاً مقاومت کافی در برابر این وزن و ثانیاً شکا آن به گونه ای باشد که بتواند وزنه را به راحتی جابجا کند ممکن است در محیط محدودیتی برای روبات شما وجود داشته باشد ، مثلاً ارتفاع ربات یا وزن آن به دلیلی محدود باشد که این موارد نیز از جمله مواردی است که سازه ربات باید با آنها همخوانی داشته باشد. با توجه به نکات ذکر شده ، بهترین جنس را برای ساختن ربات انتخاب می کنند برای انتخاب مواد اولیه نکاتی مانند وزن ، مقاومت کششی و خمشی ، جنس ، قیمت ، قابلیت انعطاف پذیری و ... مورد توجه قرار می گیرد. در صورتی که می خواهید رباتی جهت پروژه های دانشجویی یا دانش آموزی خود بسازید، چوب – آلومینیوم – پلاستیک فشرده – تفلون و ... جزو گزینه های اساسی شما هستند که باید با توجه به شرایط خود یکی از آنها را انتخاب نمایید.

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



 

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

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

 

نیروی محرکه ربات
موتور DC  که توسط گریبکس به چرخ متصل است

یکی از مهمترین اجزای یک ربات نیروی محرکه آن است. برای حرکت دادن سازه ای که ساخته اید نیاز به انرژی مکانیکی دارید. این انرژی معمولا توسط یک موتور الکتریکی تامین می شود. موتور الکتریکی یا اصطلاحاً آرمیچر ها در واقع مبدل های انرژی هستند. موتورهای الکتریکی می توانند انرژی الکتریکی که از ترمینالهای آن وارد می شود را به انرژی مکانیکی تبدیل کنند. انرژی مکانیکی معمولاً به صورت دوران در شافت (محور) موتور ظاهر می شود. دوران این محور (شافت) دو مشخصه اساسی دارد : یکی سرعت دوارن آن و دیگری قدرت آن. از ضرب سرعت خطی (متر بر ثانیه) در نیروی موتور می توانید توان نهایی خروجی آن را محاسبه کنید. با توجه به اینکه گفتیم موتور یک مبدل است، اگر موتور شما ایده آل باشد توان خروجی که بدست می آورید با توان ورودی یعنی انرژی الکتریکی مصرف شده براب خواهد بود. موتورهای الکتریکی انوع مختلفی دارند از جمله استپ موتورها ، سرور موتورها ، موتورهای دی سی DC  ، موتورهای AC  و ...

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

همانگونه که گفتیم توان خروجی از ضرب سرعت در قدرت و با استفاده از فرمول W=f.d بدست می آید.

موتور های الکتریکی معمولاً به گونه ای ساخته می شوند که سرعت چرخش شافت آنها بسیار زیاد است ( بر خلاف قدرت خروجی که معمولاً کم است ) این سرعت به طور طبیعی بین 3 تا 10 هزار دور در دقیقه ( RPM ) است. شما می توانید با استفاده از مکانیزم هایی ( مانند چرخ دنده ها و یا تسمه ها ) این سرعت را پایین بیاورید و در عوض به قدرت بیافزایید. در ادامه قصد داریم در مورد انواع مکانیزم های تغییر نسبت سرعت و قدرت صحبت کنبم.

نمونه ای از چرخ و زنجیر
نمونه ای از چرخ و زنجیر

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

علاوه بر گریبکس روش های دیگری مانند استفاده از چرخ و زنجیر ( مانند دوچرخه ) و استفاده از تسمه ( مانند کولر آبی ) برای انتقال و تغییر نسبت انرژی مکانیکی متداول است.

 

موتور و گریبکس
موتور و گریبکس سر هم
موتور و گریبکس حلزونی
موتور و گریبکس حلزونی

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

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

در صورتی که ربات شما قسمت های متحرک دیگر ی به غیر از چرخ دارد ( مثلاً بازو ) می توانید جهت اتصال آنها به ربات از لولا و بلبرینگ استفاده نمایید. و برای حرکت دادن هر قسمت یک موتور و گریبکس نیاز دارید. نحوه اتصال موتور و گربکس در قسمتهای دیگر ممکن است با اتصال چرخ ها کمی متفاوت باشد که با کمی هوش و ابتکار می توانید بهترین روش اتصال را بیابید.


آموزش ساخت ربات ( بخشهای مکانیکی - 3 )

آموزش ساخت بخشهای مکانیکی ربات
ساخت بخشهای مکانیکی ربات

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

1- مکانیزم چرخ وشانه (Rack & Pinion)
2- مکانیزم پیچ و مهره
3- مکانیزم لنگ و لغزنده
4- مکانیزم چهار میله ای
5- مکانیزم بازگشت سریع
6- مکانیزم چرخ ژنوا
 

 

1- مکانیزم چرخ وشانه (Rack & Pinion)
چرخ و شانه
مکانیزم چرخ و شانه

این مکانیزم از دو عضو چرخ (Pinion) و شانه  (Rack)  تشکیل شده است و از آن برای تبدیل حرکت دورانی چرخدنده به حرکت مستقیم الخط شانه استفاده می کنیم. در مواردی که بخواهیم دریچه ای را باز و بسته کنیم و نیز در بسیاری موارد دیگر می توانیم از این مکانیزم بهره بگیریم. در اشکال زیر نمونه هایی از کاربرد این مکانیزم را می بینید.


مکانیزم چرخ شانه

مکانیزم چرخ و شانه
مکانیزم چرخ و شانه
اگر α حرکت زاویه ای چرخدنده (برحسب رادیان) و s حرکت مستقیم الخط شانه و d قطر دایره گام چرخدنده باشد رابطه زیر برقرار است :
 

 

2- مکانیزم پیچ و مهره :

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

3- مکانیزم لنگ و لغزنده :

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

مکانیزم لنگ و لغزنده

4- مکانیزم چهار میله ای :

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

مکانیزم چهار میله ای

5- مکانیزم بازگشت سریع :

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

مکانیزم بازگشت سریع
مکانیزم بازگشت سریع

 

5- مکانیزم چرخ ژنوا :

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

مکانیزم چرخ ژنوا
مکانیزم چرخ ژنوا
مکانیزم چرخ ژنوا
مکانیزم چرخ ژنوا
مکانیزم چرخ ژنوا
مکانیزم چرخ ژنوا
مکانیزم چرخ ژنوا
مکانیزم چرخ ژنوا

 

بر گرفته از سایت  ایران مدار

چگونه یک اسیلوسکوپ بسازیم

چگونه یک اسیلوسکوپ بسازیم

اسیلوسکوپ
 

شاید شما هم از اون دسته افرادی هستید ، که مایلند یک مدار اسیلوسکوپ داشته باشند ، که قابلیت اتصال و نمایش شکل موج ورودی را روی کامپیوتر داشته باشه . مداری که تصمیم به توضیح در موردش رو دارم از طریق پورت پرینتر به کامپیوتر وصل میشه . نرم‌افزار این اسیلوسکوپ به زبان C هست و در محیط Turbo C نوشته شده.

 

i

 

جهت دیدن نقشه در اندازه بزرگتر بر روی آن کلیک کنید.

 

مدار اسیلوسکوپ

 

 سیگنال ورودی به یک یکسوساز تمام موج شامل op-amp های A1,A2 و یک مدار آشکار کننده عبور از صفر(Zero Crossing detector)که توسط LM3914 ساخته شده اعمال میگردد. در نیم سیکل‌های مثبت D3 روشن و D4 خاموش است. در نتیجه op-amp های A1,A2 بصورت معکوس کننده ولتاژ عمل می‌نمایند و با توجه به اینکه

 R2=R3=R4=R5=R6=R=330Ω

   مقدار ضریب تقویت این دو op-amp یک است. لذا خروجی op-amp ، A2 (پین 7 آی سی) برابر با ولتاژ ورودی (Vi) است. در نیم سیکل منفی D3 خاموش و D4 روشن است. لذا بازدن یک KCL در پایه 2 ، op-amp ، A1 با فرض اینکه ولتاژ این پایه را V بنامیم خواهیم داشت :

 Vi/R + V/(2R) + V/R = 0

V = -(2/3)Vi

و در نهایت ولتاژ خروجی (Vo) در پایه 7 op-amp ، A2 از رابطه زیر بدست می آید :

 Vo = ( 1 + R/2R ) V = ( 1 + R/2R ) (-2Vi/3) = -Vi

   پس در نیم سیکل‌های منفی سیگنال خروجی مثبت خواهد بود. آشکار کننده عبور از صفر جهت مشخص کردن اینکه سیکل مثبت یا منفی است طراحی شده. اگر این قسمت درست عمل نکند باعث عدم نمایش صحیح سیگنال ورودی ، بر روی کامپیوتر خواهد شد. مدار آشکار ساز عبور از صفر وجود نیم سیکل منفی را با یک کردن پین 15 کانکتور پورت پرینتر به PC  اطلاع میدهد.در واقع مدار آشکار ساز عبور از صفر از طریق بیت D3 پورت وضعیت (379Hex) با کامپیوتر در ارتباط است .

    خروجی یکسوساز تمام موج به ورودی مدار نمونه گیر (Sample and Hold) شامل A3,A4,IC6,T1 و خازن C3 اعمال می‌شود.این مدار از سیگنال ورودی در زمان های معین نمونه برداری کرده و جهت تبدیل به فرمت دیجیتال در اختیار ADC قرار میدهد.

    زمانیکه بیس ترانزیستور از طریق پین 1 (بیت D0 از پورت 37A ) کانکتور پورت پرینتر صفر شود ، هدایت ترانزیستور قطع شده و ولتاژ کلکتور آن بالا میرود. بالا رفتن ولتاژ کلکتور ترانزیستور T1 باعث بسته شدن کلید داخل IC6 میشود. در نتیجه سیگنال آنالوگ ورودی به خازن اعمال شده و آنرا به اندازه سطح ولتاژ سیگنال شارژ میکند.

    هنگامیکه کلید مجددا باز شد توسط اعمال سطح ولتاز منطقی یک ، از پین 1 پورت پرینتر به بیس ترانزیستور T1 ، ولتاژ ذخیره شده در خازن از طریق بافر (A1) به پین 6 آی سی ADC0804 جهت تبدیل به فرمت دیجیتال داده میشود. هرچه تعداد نمونه‌های گرفته شده از شکل سیگنال ورودی بیشتر باشد ، شکل موج بدست آمده دقیقتر خواهد بود.

    ADC0804 دارای یک مدار تولید کننده پالس ساعت داخلی است ، واز طریق قطعات بیرونی که به آن متصل میشوند مقدار آن قابل تعیین است. با توجه به مقادیر R1=10k و C4=150pf زمان تبدیل مقدار آنالوگ به دیجیتال تقریبا 100 میکرو ثانیه است.

از آنجایی که از طریق پورت پرینتر فقط می‌توان در هر لحظه 4 بیت اطلاعات را خواند. لذا با استفاده از آی سی 74244 که بصورت مالتی پلکسر 2 به 1 هشت بیتی استفاده شده این مشکل مرتفع شده است.

 

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

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

 

/*
*******************************
* Hossein Lachini *
* Web Site : www.HLachini.Com *
* E-mail : eLachini@Gmail.Com *
* Mobile : +98 912 381 2060 *
*******************************
*/

#include
#include
#include
#include
#include
#include
#include
#define data 0x0378
#define stat 0x0379
#define cont 0x037


void graphics(int[],int[]); //FUNCTION TO DISPLAY GRAPH AND WAVEFORM
void settings(); //FUNCTION TO CHANGE THE SETTINGS(TIME AND VOLTAGE)
long int samp=7000; //PLEASE CHECK THESE VALUES WHEN CONVERSION IS
// NOT PROPER(+-3000)


float scale=1;
float times=1;
char again='a';
int number=800;
void main()
{
int i,j,k,a[1700],b[1700],c[1700],e[1700]; //This value 1700 is given when we want to compress the waveform
//done when we compress the time scale
long int b1;
clrscr();
settings();
while(again=='a')
{
for(i=0;i{
outportb(cont,0x05^0x0b);
outportb(cont,0x04^0x0b);
e[i]=(inportb(stat)^0x80)&0x08;
for(b1=0;b1<=samp;b1++) //sampling time is approximately 50 µsec
{}
outportb(cont,0x05^0x0b);
outportb(cont,0x01^0x0b);
outportb(cont,0x05^0x0b);
while((inportb(cont)&0x08)==0x00) //converstion time is approximately 100 µsec
{}
outportb(data,0xf0);
a[i]=(inportb(stat)^0x80)&0xf0;
outportb(data,0x01);
b[i]=(inportb(stat)^0x80)&0xf0;
outportb(data,0xff);
}
for(i=0;i{
a[i]=a[i]>>4;
c[i]=a[i]+b[i];
c[i]=c[i]*0.0196*45/scale;
}
graphics(c,e);
}
}
void graphics(int a1[],int e1[])
{
int gd=DETECT,gm,max,may,a,b,c,im,error,get=5;
char str[10],*st="-",d;
clrscr();
initgraph(&gd,&gm,""); //use default bgi path
error=graphresult();
if(error != grOk)
{
printf("Graphics error %s \n",grapherrormsg(error));
//reports error when
//graphics is not set
printf("\n -----------------------------------");
printf("\n --- http://www.HLachini.com ---");
printf("\n --- E-mail: eLachini@Gmail.com --- ");
printf("\n --- ************************* ---");
printf("\n --- Mobile:+98 912 381 2060 ---");
printf("\n --- Hossein Lachini ---");
printf("\n -----------------------------------");
printf("\n\nPRESS ANY KEY TO EXIT");
getch();
exit(1);
}
setbkcolor(LIGHTCYAN);
setcolor(MAGENTA);
settextstyle(2,0,5);
max=getmaxx();
may=getmaxy();
may=may-20;
outtextxy(0,may,"OSCILLOSCOPE [http://www.HLachini.com]");
settextstyle(0,0,1);
setcolor(BLUE);
outtextxy(max-200,may+2,"press 'a' for next sample");
setcolor(BROWN);
outtextxy(max-200,may+10,"press any key to exit");
setcolor(GREEN);
settextstyle(0,0,0);
for(a=0;a<=may;a+=get)
{line(0,a,800,a);
}
for(a=0;a<=max;a+=get)
{
line(a,0,a,may);
}
setcolor(BROWN);
setlinestyle(0,3,0);
line(max/2,0,max/2,may);
line(0,may/2,max,may/2);
setcolor(RED);
for(a=0,c=0;a<=max;a+=50,c++)
{
putpixel(a,may/2,BLUE);
itoa((a-c*30)*times/2,str,10);
outtextxy(a+3,may/2+3,str);
}
for(b=(may/2)-45,c=1;b>=0;b-=45,c++)
{
itoa((c*scale),str,10);
putpixel((max/2),b,BLUE);
outtextxy((max/2)+3,b+3,str);
}
for(b=(may/2)+45,c=1;b<=800;b+=45,c++)
{
itoa((c*scale),str,10);
strcat(st,str);
putpixel((max/2),b,BLUE);
outtextxy((max/2)+2,b+2,st);
strcpy(st,"-");
}
setcolor(MAGENTA);
outtextxy(max-80,may/2+30,"time(msec)");
settextstyle(0,1,0);
outtextxy((max/2)-10,0,"volt(s)");
setlinestyle(0,0,0);
setcolor(RED);
moveto(0,may/2);
for(b=0,c=0;b<=number;c+=1, b++)
{
if(e1[b]!=0x08)
{
lineto(c*times,((may/2)-a1[b]));
}
else
{
lineto(c*times,((may/2)+a1[b]));
}}
again = getch();
closegraph();
restorecrtmode();
}
void settings()
{
int gd=DETECT,gm,error,max,may,b;
char c,d,e[2],m,*n;
times=1;
initgraph(&gd,&gm,""); //default bgi directory path
error=graphresult();
if(error != grOk)
{
printf("Graphics error %s \n",grapherrormsg(error));
printf("\n -----------------------------------");
printf("\n --- http://www.HLachini.com ---");
printf("\n --- E-mail: eLachini@Gmail.com ---");
printf("\n --- ************************* ---");
printf("\n --- Mobile:+98 912 381 2060 ---");
printf("\n --- Hossein Lachini ---");
printf("\n -----------------------------------");
printf("\n\nPRESS ANY KEY TO EXIT");
getch();
exit(1);
}
max=getmaxx();
setbkcolor(LIGHTBLUE);
settextstyle(1,0,0);
setcolor(BROWN);
/*
outtextxy(max/2-90,10,"www.HLachini.com");
outtextxy(max/2-90,20,"Hossein Lachini");
outtextxy(max/2-120,30,"E-mail : H_Lachini@YahoO.com");
outtextxy(max/2-120,40,"Mobile : +98 912 381 2060");
*/
outtextxy(max/2-60,50,"SETTINGS");
line(0,60,800,60);
setcolor(MAGENTA);
settextstyle(1,0,1);
outtextxy((max/4)-70,80,"Voltage Scale");
settextstyle(0,0,0);
setcolor(BROWN);
outtextxy(10,120,"DEFAULT :");
outtextxy(10,130," 1 unit = 1 volt");
setcolor(RED);
outtextxy(10,170,"TYPE 'C' TO CHANGE AND 'D' TO DEFAULT");
c=getch();
if(c=='c')
{
outtextxy(10,200,"TYPE 1 for 1 unit = 2 volt");
outtextxy(10,240,"TYPE 2 for 1 unit = 4 volt");
outtextxy(10,300,"TYPE 3 for user defined");
switch(getch())
{
case '1' :
{ scale=2;
break;
}
case '2' :
{scale = 4;
break;
}
case '3':
{
outtextxy(10,340,"TYPE VALUES FROM 1 TO 9 (minimize) or m to (magnify)");
d=getch();
if(d=='m')
{
outtextxy(10,360,"TYPE a (1 unit = 0.5 volt) or b (1 unit = 0.25 volt)");
switch(getch())
{
case 'a':
{
scale=0.5;
break;
}
case 'b':
{
scale=0.25;
break;
}
}
}
else
{ e[0]='0';
e[1]= '0';
e[2]=d;
scale=atoi(e);
break;
}
}
}
}
setcolor(BROWN);
outtextxy(10,380,"TYPE C TO CHANGE TIME SETTINGS");
m=getch();
if( m=='c')
{
cleardevice();
outtextxy(10,20,"X AXIS 1 unit= 10msec CHANGE TO x(10msec)");
outtextxy(10,40,"TYPE 'a' IF x IS (2 to 9) ,'b' IF x IS (10 to 99) AND 'c' IF x IS (.5 TO .9)");
switch(getch())
{
case 'a':
outtextxy(10,60,"x value is ....");
n[0]=getch();
times=atoi(n);
itoa(times,n,10);
outtextxy(10,70,n);
break;
case 'b':
outtextxy(10,60,"x value is ....");
n[0]=getch();
n[1]=getch();
times=atoi(n);
itoa(times,n,10);
outtextxy(10,70,n);
break;
case 'c':
outtextxy(10,60,"x value is...");
getch();
n[0]=getch();
times=atoi(n)*0.1;
outtextxy(10,70,"scale decremented");
break;
}
number=800;
if(times<1)
{number=number/times;
}
getch();
}
closegraph();
restorecrtmode();
}
 

 

 

من برای شما سورس برنامه و فایل اجرائی بهمراه فایل EGAVGA.BGI را درون یک فایل زیپ قرار دادم . برای دانلود این فایل که حجم آن 38.7 کیلوبایت هست اینجا کلیک کنید.

دقت کنید که فایل اجرایی بایستی همراه با فایل EGAVGA.BGI در یک مسیر قرار داشته باشند . در غیر اینصورت برنامه اجرا نخواهد شد.

 

Í

جهت دانلود فایلهای فوق اینجا کلیک کنید.

حجم فایل : 38.7 کیلو بایت

فرمت فایل Zip

 

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

 - این برنامه چون مستقیما با سخت افزار سر و کار دارد لذا در ویندوزهای 2000 و Xp و بالاتر اجرا نمیشود. لذا من توصیه میکنم که این برنامه در ویندوز 98 یا 95 یا حتی DOS اجرا گردد.

 - این برنامه در هر بار اجرا یک نمونخ از سیگنال ورودی دریافت کرده و آنرا نمایش میدهد لذا جهت نمایش اطلاعات تازه تر حتما باید حرف "A" را بر روی کیبورد بزنید.