سلام
زبان برنامه نویسی: بیسیک
میکرو atmega16
دوستان من یک برنامه دارم که در آن از pwm استفاده میکنم.
خطوط مهم:
$regfile = "m16def.dat"
$crystal = 1000000
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1024
....
....
خوب تا اینجا برنامه درست کار میکنه یعنی یک موج pwm روی oc1a بهم میده که میتونم با زدن دکمه عرض رو کم و زیاد کنم.
اما مشکل از اینجا شروع میشه:
در همین برنامه وقتی که میخواهم از تایمر 0 استفاده کنم و این تایمر هر 200ms یکبار سرریز شود و پرش کند به مثلا برنامه prog1
Config Timer0 = Timer , Prescale = 1024
Enable Timer0
Enable Interrupts
Enable Ovf0
Start Timer0
Timer0 = 98
On Ovf0 Prog1
به محض اینکه اینها رو اضافه میکنم دیگه نمیتونم با زدن کلید عرض پالس رو تغییر بدم ولی اینها رو که پاک میکنم درست میشه.
حتی اگر در همون برنامه ای که مربوط به تغییر عرض پالس هست یک call prog1 یا gosub prog1 بزارم باز هم همین مشکل را دارم.
چی کار کنم؟
زبان برنامه نویسی: بیسیک
میکرو atmega16
دوستان من یک برنامه دارم که در آن از pwm استفاده میکنم.
خطوط مهم:
$regfile = "m16def.dat"
$crystal = 1000000
Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1024
....
....
خوب تا اینجا برنامه درست کار میکنه یعنی یک موج pwm روی oc1a بهم میده که میتونم با زدن دکمه عرض رو کم و زیاد کنم.
اما مشکل از اینجا شروع میشه:
در همین برنامه وقتی که میخواهم از تایمر 0 استفاده کنم و این تایمر هر 200ms یکبار سرریز شود و پرش کند به مثلا برنامه prog1
Config Timer0 = Timer , Prescale = 1024
Enable Timer0
Enable Interrupts
Enable Ovf0
Start Timer0
Timer0 = 98
On Ovf0 Prog1
به محض اینکه اینها رو اضافه میکنم دیگه نمیتونم با زدن کلید عرض پالس رو تغییر بدم ولی اینها رو که پاک میکنم درست میشه.
حتی اگر در همون برنامه ای که مربوط به تغییر عرض پالس هست یک call prog1 یا gosub prog1 بزارم باز هم همین مشکل را دارم.
چی کار کنم؟
دیدگاه