نوشته اصلی توسط evergreen
نمایش پست ها
اطلاعیه
Collapse
No announcement yet.
جدا کردن عدد از کارکتر در بسکام
Collapse
X
-
با سلامنوشته اصلی توسط r-el نمایش پست هاو اینکه یه مشکل دیگه هم دارم داخل این برنامه به نظر شما ایراد کجای کاره که هرچی هم پالس میدم وارد وقفهt1 نمیشه؟
الان باید مقدار 253 رو نشون بده ، داخل حلقه لوپ نشون میده داخل لیبل t1 نشون نمیده
برای استفاده از وقفه ها باید ابتدا با مفاهیم و اصول آن آشنا شوید.
چون توضیح آن بطوریکه مفهوم را کاملا برساند با چند خط نوشتن ممکن نیست میتوانید ابتدا از فیلمهای آموزشی موجود در آپارات و یا سایر سایتها استفاده کنید.
حتما هم لازم نیست مربوط به بسکام باشه چون اصول و ساختار وقفه تقریبا مشترکه.
اینکه در روتین وقفه از do...loop و یا gosub استفاده نموده اید نشان میده که بهتره ابتدا وقت بیشتری برای مطالعه و بررسی فلسفه استفاده و اصول و قواعد آن بگذارید.
موفق باشید.
- تشکرها 1
دیدگاه
-
داداش من حلقه روهم حذف کردم مشکل اینجاست که اصلا داخل t1 وارد نمیشه این دو و لوپ هم مال تست خودم بود اینجا پاکش نکردم
دقت کنید مقدار دستی دادم که فقط با اولین پالس وارد لیبل بشه و عدد رو نشون بده
کل وقفه رو داخلشو پاک کردم فقط یه متغیر گذاشم با اولین پالس یکی اضافه کنه ، تایمر و کانتر هم استپ شدن و عدد رو نمایش دادم باز فرقی نمیکنه
ضمنا همین برنامه رو با کانتر0 اجرا کردم درسته و مشکلی هم نداره مشکل اینه که با کانتر 1 کار نمیکنه جای تایمر و کانتر 0 و 1 رو جابجا میکنم هیچ مشکلی نیست با همین do و loopجدیدترین ویرایش توسط r-el; ۱۸:۳۲ ۱۴۰۵/۰۶/۲۱.{ خلاف قوانین - پاک شد }
دیدگاه
-
با سلام و احترامنوشته اصلی توسط r-el نمایش پست هاداداش من حلقه روهم حذف کردم مشکل اینجاست که اصلا داخل t1 وارد نمیشه این دو و لوپ هم مال تست خودم بود اینجا پاکش نکردم
دقت کنید مقدار دستی دادم که فقط با اولین پالس وارد لیبل بشه و عدد رو نشون بده
کل وقفه رو داخلشو پاک کردم فقط یه متغیر گذاشم با اولین پالس یکی اضافه کنه ، تایمر و کانتر هم استپ شدن و عدد رو نمایش دادم باز فرقی نمیکنه
ضمنا همین برنامه رو با کانتر0 اجرا کردم درسته و مشکلی هم نداره مشکل اینه که با کانتر 1 کار نمیکنه جای تایمر و کانتر 0 و 1 رو جابجا میکنم هیچ مشکلی نیست با همین do و loop
شما نوشته اید "مقدار دستی دادم که فقط با اولین پالس وارد لیبل بشه و عدد رو نشون بده" و بعد تایمر یک را بصورت زیر تعریف نموده اید:
لطفا دلیل استفاده از این دو خط را توضیح دهید تا بتوانیم قدم به قدم با هم مشکل را حل کنیم.کد:Config Timer1 = Counter , Edge = Falling On Ovf1 t1
موفق باشید.
- تشکرها 1
دیدگاه
-
داداش اینا رو حذف کردم . ببین من در حال تست برنامه ام مدام اینو حذف میکنم یچیز دیگه مینویسم بعد کنترلz میزنم و...اینجوریه که برنامه قاطی شده من برنامه رو همینجا که کپی کردم قبل ارسال باز یسری چیزارو حذف کردم اینو نکردم
تو برنامه اصلی من با وقفه 0 کار میکنم با پالس وارد وقفه میشه وقتی تغییر میدم به وقفه 1 دیگه با پالس وارد نمیشه که دیچه بیخیالش شدم چون فکرکنم پایه میکرو خرابه.دقیقا همون برنامه رو از 0 به 1 تغییر میدم کار نمیکنه دوباره صفرش میکنم کار میکنه{ خلاف قوانین - پاک شد }
دیدگاه
-
دوست عزیز، من اگه توصیه کردم قبل نوشتن کد، فلسفه و کارکرد وقفه را مطالعه کنید برای اینه که وقفه مبحثی است که اگر بخواهید با آزمون و خطا برید جلو معمولا جواب نمیده و شما رو خسته میکنه چون خودش انواع مختلفی داره و باید بدونید که هر وقفه چه زمانی فعال میشه و چه پارامترهایی را لازمه از قبل برایش تنظیم کنید.نوشته اصلی توسط r-el نمایش پست هاداداش اینا رو حذف کردم . ببین من در حال تست برنامه ام مدام اینو حذف میکنم یچیز دیگه مینویسم بعد کنترلz میزنم و...اینجوریه که برنامه قاطی شده من برنامه رو همینجا که کپی کردم قبل ارسال باز یسری چیزارو حذف کردم اینو نکردم
تو برنامه اصلی من با وقفه 0 کار میکنم با پالس وارد وقفه میشه وقتی تغییر میدم به وقفه 1 دیگه با پالس وارد نمیشه که دیچه بیخیالش شدم چون فکرکنم پایه میکرو خرابه.دقیقا همون برنامه رو از 0 به 1 تغییر میدم کار نمیکنه دوباره صفرش میکنم کار میکنه
تنها بخشی از برنامه نویسی نوشتن کد و تست اون میباشد، قدم اصلی در موفقیت اینه که ابتدا ساختار داخلی میکروکنترلی که میخواهید برایش برنامه بنویسید را تا حد خوبی بشناسید، با اصول کلی سخت افزار مثل رجیسترها، ورودی-خروجیها، ADC، تایمرها، کانترها، PWM, وقفه ها و .... آشنا شوید.
در مورد سوال آخر و اون دو خط کد هم نخواستم بگم نوشتن اونها غلطه، فقط خواستم متوجه بشم که آیا شما دقیقا میدونید که آن دو خط کد چه کاری انجام میده یا نه؟ اتفاقا دلیل اینکه میگید "با وقفه صفر کار میکنم و جواب نمیده و بیخیالش شدم چون فکر میکنم پایه خرابه" در همین دو خط کد میباشد.
مطالب بالا را به عنوان تجربه با شما درمیان گذاشتم، امیدوارم برایتان مفید باشد.
دیدگاه
-
در پست قبل نصیحت ها تموم شدنوشته اصلی توسط r-el نمایش پست هاداداش اینا رو حذف کردم . ببین من در حال تست برنامه ام مدام اینو حذف میکنم یچیز دیگه مینویسم بعد کنترلz میزنم و...اینجوریه که برنامه قاطی شده من برنامه رو همینجا که کپی کردم قبل ارسال باز یسری چیزارو حذف کردم اینو نکردم
تو برنامه اصلی من با وقفه 0 کار میکنم با پالس وارد وقفه میشه وقتی تغییر میدم به وقفه 1 دیگه با پالس وارد نمیشه که دیچه بیخیالش شدم چون فکرکنم پایه میکرو خرابه.دقیقا همون برنامه رو از 0 به 1 تغییر میدم کار نمیکنه دوباره صفرش میکنم کار میکنه
بریم سراغ اینکه چرا اون دو خط کد مهمه
Config Timer1 = Counter , Edge = Falling
این خط میگه که شما تمایل دارید از تایمر یک بعنوان کانتر استفاده نمایید.
بخش دومش هم میگه چه زمانی بشماره، وقتی مینویسید Falling یعنی میخواهید هر زمانی که پایه مربوطه ( بنابر دستور $regfile = "m16def.dat" که در اول برنامه نوشته اید و مربوط به ATmega16 میباشد، پایه مرتبط با تایمر یک پایه PD5 است ) لبه پایین رونده از یک به صفر را احساس کرد مقدار کانتر را یکی اضافه کنه.
On Ovf1 t1
این خط هم میگه شما میخواهید هنگامی که وقفه سرریز Timer1 رخ داد برنامه به لیبل t1 بره و روتین وقفه را که آنجا نوشته اید اجرا کنه. خب حالا با توجه به این خط چه زمانی به اون روتین خواهد رفت؟
تایمر یک در ATmega16 یک تایمر 16 بیتی است بنابراین وقتی سرریز خواهد شد که شما در پایه PD5 به تعداد 65536 بار لبه پایین رونده ایجاد کنید بطوریکه کانتر به ماکزیمم عدد 16 بیتی خود برسد و دوباره صفر شود.
دیدگاه




دیدگاه