سلام خسته نباشید !!
کسی میتونه برنامه کامل زیر رو بهم بده :
میخواهیم یک موج مربعی متقارن بر روی یکی از پایه های AVR تولید کنیم به نحوی که دو کلید فشاری به نامهای UP و Down به میکروکنترلر متصل باشد و فرکانس مربعی را با گام مناسب 500 هرتز کم یا زیاد نماییم.کلاک اصلی 8 مگاهرتز فرض شود و از تایمر در مد مقایسه استفاده شود .
ممنون میشم کمکم کنید برای فردا بشدت نیاز دارمش.
سلام.
شما تلاش کنید و تا جایی که می تونید برنامه رو بنویسید، هر جاییش رو مشکل داشتید مطرح کنید تا دوستان راهنماییتون کنن.
موفق باشید.
شما درست میفرمایید ولی مشکل اینجاست که این بحث اخرین بحث کلاس بود و بعد از امتحانات استاد یک پروژه برای بنده در نظر گرفته که چون من اولین بار هست میخوام بصورت عملی کدنویسی کنم و روی پروتوس ببندم فقط پیکربندی و یه سری اصطلاحات رو بلدم .
اگه میشه این برنامه رو برای من یکی از دوستان کامل بنویسه چون فردا باید حتما بفرستم دست استاد بد بخت میشم .
): ): ): ): ): ): ): ):
هر چی تونستم نوشتم جواب نداد لطفا کمکم کنید
کد:
$regfile = "m32def.dat"
$crystal = 8000000
Config Timer1 = Timer , Prescale = 8 , Compare A = Set , Compare B = Disconnect , Clear Timer = 0
Config Porta = Input
Config Portb = Output
Dim F As Integer , Up As Bit , Down As Bit
Porta.0 = Up
Porta.1 = Down
Portb.0 = F
F = 0
Enable Interrupts
Enable Timer1
On Oc1a L1
Start Timer1
L1:
If Up = 1 Then F = F + 500
If Down = 1 Then F = F - 500
Do
Loop
Return
یه مقدار اشکالات پایه ای به چشم می خوره که اول باید اونها رو مرتفع کنید.
مثلا یک حلقه ی بینهایت در روتین وقفه نوشتید!
به این مفهوم که با اولین بار که وقفه رخ می ده، میکرو تو روتین وقفه گیر می کنه و دیگه نمی تونه خارج بشه ...
یا در روتین وقفه یه متفییر بی هدف داره مقدار دهی می شه و ...
یه مورد خیلی مهم اینه که خود برنامه نویس بدونه چی می خواد و با توجه به قوانین کامپایلر، کدها رو به صورت صحیح بنویسه... چون کامپایلر علم غیب نداره ...
در بسکام برای استفاده از کلید می تونید از دستور debounce استفاده کنید.
برای pwm مهمه که درکی از نحوه ی تولیدش توسط میکرو داشته باشید. بعد از پیدا کردن آشنایی با انواع مودهای pwm آشنا بشید.
کاری رو که می خواهید انجام بدید، بسکام براش تابع مستقیمی نداره، پس باید قدری با رجیسترهای واحد pwm آشنایی داشته باشید.
برای این منظور می تونید از یه کتاب مرجع میکرو AVR به زبان C کمک بگیرید و بخش pwm اش رو بخونید.
نحوه ی تنظیم رجیسترها رو که یاد گرفتید، سمت بسکام رجیسترها رو به همون صورت مقدار دهی کنید.
2-3 تا رجیستر مهم بیشتر نداره .
موفق باشید.
ممنون من این برنامه رو نوشتم و دیدم جواب نداد و استاد یه سری راهنمایی کرد :
فقط از تایمر یک در مد مقایسه استفاده شود و شکل موج مربعی مورد نظر روی پایه oc1a تولید شود. شکل موج اولیه را دارای یک فرکانس دلخواه در نظر بگیرید و سپس کلیدها را به گونه ای طراحی کنید که با هر بارفشردن کلید up فرکانس شکل موج مربعی تولید شده 500Hz افزایش یابد و با هر بار فشردن کلید down فرکانس شکل موج مربعی تولید شده 500Hz کاهش یابد.
بازم گیج شدم !!!!
درضمن استاد گفت فقط باید با تایمر یک باشه :|
من تازه کارم یعنی اینو بگم اولین برنامه منه :((
اون برنامه ای که نوشتم رو میتونید واسم کامل کنید :|
تا ندونید صورت مسئله چیه، نباید شروع به کد زنی کنید... !
کارهایی رو که باید انجام بدید در پست قبل نوشتم، اما قبل از اونها در مورد pwm و timer ها قدری سرچ بزنید و با مفاهیم و کاربرداش آشنا بشید. وقتی فهمیدید قراره چیکار کنید و صورت مسئله چی می خواد، اون موقع می تونید کد زنی رو شروع کنید.
اصل کار دونستن مفهوم هست، کدها فقط یه سری ابزار هستن ...
چون بسکام با تایمر 0 نمی تونه pwm رو با توابعش پیکربندی کنه، به همین دلیل گفته با تایمر 1 انجام بدید. گرچه همونطور که گفتم نیاز شما رو توابع بسکام رفع نمی کنه و باید رجیستر نویسی کنید ... .
طبیعیه که هرکس کار خودش رو خودش باید انجام بده ، خیلی هنر کنم و وقت پیدا کنم، نهایتا می تونم راهنمایی کنم.
موفق باشید.