با سلام
همانطوری که قبلا قول داده بودم امروز فلاشر 8 کانال را برای دوستان و همکاران عزیز آماده کردم که ساده ترین و البته اساسی ترین نوع فلاشر هست. این فلاشر یک فلاشر ساده هشت کانال با چندین افکت است که اساس و زیربنای تمامی فلاشرهای موجود در بازار نیز به همین گونه است. هسته اصلی فلاشر را یک میکروکنترلر Atmega8 تشکیل می دهد که با کریستال داخلی فعالیت می کند. در این فلاشر یک ولوم وظیفه تعیین سرعت را بر عهده دارد و 8 عدد ال ای دی به پورت B میکروکنترلر وصل شده است.
توضیحات برنامه:
دو خط ابتدایی مربوط به شناسایی و تعریف میکروکنترلر و فرکانس کریستال می باشد.
کد:
$regfile = "m8def.dat"
$crystal = 8000000
در این برنامه مقدار آنالوگ خروجی ولوم هر 2 میلی ثانیه چک شده و بر اساس مقدار خروجی یک متغیر به نام Speed مقداردهی می شود. این متغیر در روند برنامه باعث توقف برنامه به مدت مشخص میلی ثانیه می گردد. لذا اولا باید سیستم آنالوگ به دیجیتال میکروکنترلر پیکره بندی شود سپس تایمر صفر برای ایجاد وقفه در هر 2 میلی ثانیه پیکره بندی می گردد.
کد:
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Timer0 = Timer , Prescale = 1024 'Interrupt every 2mS
Tcnt0 = &HF0
On Timer0 Read_adc
Enable Interrupts
Enable Timer0
Start Timer0
پورت B میکروکنترلر به عنوان خروجی و پورت C.0 به عنوان ورودی تعریف می شود.
کد:
Config Portb = Output
Config Pinc.0 = Input
دو متغیر که در روند برنامه مورد استفاده قرار می گیرد تعریف می شود. متغیر Speed برای تعیین سرعت فلاشر و متغیر Count برای شمارش حلقه اجرا به کار می رود.
کد:
Dim Speed As Word 'Speed Value in mS
Dim Count As Byte
Speed = 500
حلقه ای بی نهایت به مانند اکثر دیگر برنامه های نوشته شده ایجاد می شود.در داخل این حلقه، حلقه ای برای تعیین وضعیت جاری پورت قرار دارد. این حلقه به تعداد مشخص (مثلا 128 بار) تکرار می شود. در داخل این حلقه یک lookup وجود دارد که داده مورد نیاز جهت تعیین وضعیت پورت ها را از یک جدول به نام Table خوانده و در پورت B قرار می دهد.سپس به اندازه مقدار Speed توقف کرده و داده بعدی را می خواند. کد:
Do
For Count = 0 To 128
Portb = Lookup(count , Table)
Waitms Speed
Next Count
Loop
در روتین مربوط به آنالوگ به دیجیتال ابتدا دو بار مقدار ADC اندازه گیری می شود و سپس از آن دو میانگین گرفته می شود. این به علت وجود نویز محیطی و تاثیر بر روی ADC می باشد.
سپس از مقدار به دست آمده جهت تعیین سرعت فلاشر استفاده می شود. این عمل از طریق یک Select Case صورت می گیرد.
کد:
Read_adc:
Dim I As Word , J As Word
I = Getadc(0)
Delay
J = Getadc(0)
I = I + J
I = I / 2
Select Case I
Case 0 To 100 : Speed = 100
Case 101 To 200 : Speed = 150
Case 201 To 300 : Speed = 250
Case 301 To 400 : Speed = 400
Case 401 To 500 : Speed = 500
Case 501 To 600 : Speed = 600
Case 601 To 700 : Speed = 800
Case 701 To 800 : Speed = 1000
Case 801 To 900 : Speed = 1200
Case 901 To 1100 : Speed = 1500
End Select
Return
در پایان نیز جدول داده ها قرار دارد. در این جدول مقدار 1 باینری برای Set کردن و مقدار 0 باینری برای Reset کردن مورد استفاده قرار می گیرد.
فایل پیوست شامل:
برنامه نوشته شده در بسکام
کد هگز برنامه
فایل پروتئوس برای شبیه سازی
رمز فایل پیوست:
موفق و پایدار باشید