خواندن سیگنال PWM با AVR

در این پست می خواهیم که یک سیگنال PWM را با AVR بخوانیم. و از آن استفاده کنیم.

همانطور که می دانید برای خواندن این یک سیگنال PWM کافیست که زمان 1 بودن سیگنال را پیدا کنیم. برای فهمیدن تغییر وضعیت سیگنال ما از وقفه ی خارجی استفاده می کنیم. در ATMEGA 8 ما از وقفه ی صفر که پایه ی چهار است، استفاده می کنیم.  و برای اندازه گیری زمان هم از تایمر0 استفاده خواهیم کرد.

Use Interrupt For Reading PWM

Use Interrupt For Reading PWM

با استفاده از برنامه کدویژن و زبان برنامه نویسی C این کار را انجام خواهیم داد. در ابتدا وقفه ی خارجی را، برای میکرویی که می خواهیم از آن استفاده کنیم، فعال میکنیم. ما در اینجا از ATMEGA8 استفاده کرده ایم. در هنگام فعال کردن وقفه، آن را برای لبه ی بالا رونده تنظیم می کنیم. که با یک شدن سیگنال به ما وقفه دهد.

تایمر را هم فعال می کنیم و آن را روی هر مقداری که می خواهیم قرار می دهیم.

LCD را هم برای نمایش طول موج PWM برنامه ریزی می کنیم.

در ادامه برنامه را برای شما قرار می دهم تا با هم بررسی کنیم.

 

در ابتدا کتابخانه های لازم را فرا خوانی می کنیم. بعد از آن متغییر هایی را که لازم داریم تعریف می کنیم.

در داخل تابع مربوط به وقفه تایمر متغیر ما افزایش پیدا می کند. به این صورت ما می توانیم زمان را شمارش کنیم.

در داخل تابع مربوط به وقفه ی خارجی، ما این متغیر را برای نمایش بر می داریم. و آن را صفر می کنیم تا دوباره بشمارد.

همان طور که می دانید با تغییر بیت های رجیستر MCUCR می توان مُد وقفه را تعیین کرد. به عکس زیر توجه کنید.

 

Register EX Interrupt

Register EX Interrupt

این رجیستر را در هر بار وقفه به مُد لبه ی بالا رونده و لبه ی پایین رونده تغییر می دهیم. تا بتوانیم زمان بین این تغییر را اندازه بگیریم.

زمان یک بودن سیگنال برای ما مهم است. برای همین باید زمان بین وقتی که،  بترتیب سیگنال یک می شود تا صفر می شود را بخوانیم. از این رو خواندن متغیر شمارش زمان (countTime) را در دل IF ی قرار داده ایم، که وقتی وقفه روی مُد پایین رونده باشد داخل آن می رود.

در پایان برنامه هم که زمان یک بودن سیگنال PWM را بر روی LCD نشان می دهیم.

 

دیدگاه ها :

  1. TajhizKala Co. گفت:

    بسیار عالی سپاس از مطالب ارزشمندتون

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد.