فرستنده گیرنده چهار کانال RF ASK 315 MHZ 433 MHZ EV1527 - مرجع تخصصی کتابخانه های حرفه ای AVR
اخباربرنامه نویسی
  • در برنامه نویسی حرفه ای بین این دو جمله تفاوت بسیاری است : if(a++) و if(++a) در جمله اول ابتدا متغیر a مقایسه می شود و سپس بعد از مقایسه مقدار آن یک واحد افزایش می یابد. اما در جمله دوم ابتدا مقدار a یک واحد افزایش می یابد و سپس عمل مقایسه و شرط مورد نظر انجام می شود. با فرض اینکه مقدار اولیه a صفر باشد می توانید متوجه این موضوع شوید که در مقایسه اول نتیجه شرط منفی است و دستورات بعد از if اجرا نخواهد شد اما در جمله دوم نتیجه شرط مثبت است و در نتیجه دستورات پیرو این شرط اجرا خواهد شد. لذا برنامه نویس حرفه ای باید به ترکیب این دو دقت نماید و هر کدام را در موقعیت خود به درستی استفاده نماید.

  • در هنگاه ارسال دیتا بین دو دستگاه اگر بخواهید دیتای مورد نظر خود را کد کنید در ساده ترین راه حل پیشنهادی می توانید آنها را Not کنید و یا اینکه می توانید انها را با مقدار 0xff Xor کنید که نتیجه معکوس شدن مقادیر صفر ویک خواهد شد و در سمت گیرنده برای دیکد کردن این دیتا می توانید این دیتا را دوباره با مقدار 0xff Xor کنید تا دیتای اولیه دوباره ساخته شود.

  • در برنامه نویسی حلقه های تو در تو باید از خاصیت indent کامپایلر خود استفاده نمایید . با این روش شما می توانید به خوانایی برنامه خود کمک کنید. همچنین در استفاده از آکولاد های تو در تو این موضوع مدنظرتان باشد.

  • برای طراحی عمر مفید برای دستگاه های مبتنی بر میکروکنترلرهای AVR می توان از تایمر ها کمک گرفت بدین گونه که با ست کردن وقفه یک تایمر در تایم زمانی مثلا 20 میلی ثانیه ، با هر بار رخ دادن وقفه یک شمارش به مقدار شمارنده تایمر اضافه شود و به محض رسیدن به عدد خاص تایمر از کار بیفتد و عملیات شمارش به اتمام برسد و در صورت نیاز برنامه در درون یک حلقه گیر کند و یا اینکه مدام خودش را ریست نرم افزاری کند. همچنین برای طراحی قفل سخت افزاری می توان به روش مشابه عمل کرد بدین گونه که مثلا کاربر با هر بار کار کردن با دستگاه یک شمارنده زیاد شود و به محض رسیدن به عدد خاص دستگاه از کار بیفتد دقیقا شاید شبیه چیزی که در pattern کدهای گوشی های اندرویدی می بینیم که بعد از 5 بار اشتباه زدن الگو دستگاه موقتا از کار می افتد. اما با این تفاوت که در این روش دستگاه به کل از کار می افتد .

  • متغیرهای نوع char همیشه ۸ بیتی هستند. اما سایز متغیرهای نوع int بسته به نوع کامپایلر لزوما ۱۶ بیت نیست (حداقل سایز این نوع متغیر ۱۶ بیت است).

  • در ارتباط rs485 هنگامی که بایتی ارسال می شود و سمت مقابل باید پاسخ دهد، به دلیل یک طرفه بودن ارتباط باید تاخیر کافی در پاسخ دادن سمت مقابل لحاظ شود تا فرستنده فرصت داشته باشد وضعیت خود را به گیرنده تغییر دهد و قبل از تغییر وضعیت از فرستنده به گیرنده، ارسال پاسخ از سمت مقابل آغاز نشود. همچنین کدنویسی بخش فرستنده باید به گونه ای باشد که بعد از ارسال و برای دریافت پاسخ، در حداقل زمان ممکن جهت خط به عنوان گیرنده تغییر داده شود و مواردی مانند وقوع یک وقفه نتواند تاخیری را در این تغییر جهت از فرستنده به گیرنده ایجاد کند.

  • در میکروکنترلرهایی که پین ریست آنها نیز می توانند به عنوان پین I/O مورد استفاده قرار گیرد . اگر با تنظیم فیوز بیت مورد نظر ان پین ریست از کار بیفتد و به عنوان I/O مورد استفاده قرار بگیرد . توسط پروگرمر های عادی قابل بازگردانی نخواهد بود.

  • توابع printf و scanf و توابع مشابه این دو در محیط کامپایلرهای زبان سی حافظه های زیادی را از کد هگز اشغال می کنند لذا تا زمانی که مجبور نشدید از این توابع استفاده ننمایید و حتی الامکان در صورت استفاده مود توابع را در حالت int قرار دهید.

  • متغیرهای نوع char همیشه یک بایتی هستند. اما سایز متغیرهای نوع int بسته به کامپایلر لزوما 16 بیت نیست (حداقل سایز این نوع متغیر 16 بیت است).

  • در ارتباط rs485 هنگامی که بایتی ارسال می شود و سمت مقابل باید پاسخ دهد، به دلیل یک طرفه بودن ارتباط باید تاخیر کافی در پاسخ دادن سمت مقابل لحاظ شود تا فرستنده فرصت داشته باشد وضعیت خود را به گیرنده تغییر دهد و قبل از تغییر وضعیت از فرستنده به گیرنده، ارسال پاسخ از سمت مقابل آغاز نشود. همچنین کدنویسی بخش فرستنده باید به گونه ای باشد که بعد از ارسال و برای دریافت پاسخ، در حداقل زمان ممکن جهت خط به عنوان گیرنده تغییر داده شود و مواردی مانند وقوع یک وقفه نتواند تاخیری را در این تغییر جهت از فرستنده به گیرنده ایجاد کند.

  • فرق بین debug و releaseدر محیط های برنامه نویسی این است که تازمانی که پروژه شما در مرحله تست و خطا است شما از مود debug و زمانی که پروژه به اتمام رسید و شما قصد داشتید که آنرا در حالت نهایی منتشر کنید از مود release استفاده می کنید.

  • برای ارتباط با مموری کارت ها مانند SD Card / MMC card , .... می توانید از کتابخانه ی fatfs و یا کتابخانه petitfat استفاده نمایید . این کتابخانه بسیار کامل و بسیار تخصصی طراحی شده است . برای دانلود این کتابخانه می توانید به آدرس سایت دوست ژاپنی خوش سلیقه مان مراجعه نمایید. www.elm-chan.org

  • اگر نیاز باشد تا به میکروکنترلرتان حافظه های خارجی مانند eeprom و یا SRAM خارجی را وصل کنید بهتر است با استاده از روش جدول fat به طبقه بندی اطلاعات مورد نظر خودتان بپردازید.

  • در میکروکنترلرهایی که نمی توان مستقیما SRAM های خارجی را به آن وصل نمود با توجه به اینکه وصل کردن یک SRAM به آن تعداد زیادی از پایه ها را به هدر خواهد داد لذا می توان با ترفندی ساده کلاک و دیتا را کنترل نمود و در تعداد پایه ها را به حداقل رساند.

  • در عملیات ADC باید جهت درست خواندن مقدار آنالوگ فرکانس خواندن نمونه ها را حداقل دو برابر فرکانس ورودی در نظر گرفت.

  • با برنامه نویسی مناسب میکرو کنترلر در مود MPCM می توان از عملیات مستر واسلیوی یوزارت استفاده نمود.

  • با توجه به اینکه میکروکنترلرهای سری مگا و تاینی عموما فاقد RTC داخلی هستند ، لذا می توان این مهم را توسط تایمر 2 و با وصل کردن یک کریستال 32768 هرتزی به این تایمر و انجام برنامه نویسی مناسب این کار را انجام داد. فقط باید در نظر داشت که به محض قطع شده منبع تغذیه این تایمر از کار خواهد افتاد . لذا در کاربردهایی که منبع تغذیه قطع نمی شود این موضوع بسیار مناسب خواهد بود.

  • ماژول داخلی SPI در میکرو کنترلرهای اتمل بر خلاف دیگر ماژول ها مانند TWI و یا USART یک پروتکل خام است که در آن آدرس دهی ، بیت پریتی و کشف خطا پیش بینی نشده است .برعکس این کا باعث یک مزیت بزرگ در آن شده است و ان اینکه طراح به دلخواه خود می تواند پروتکل دلخواه خود را با حداکثر سرعت 1/4 سرعت کلاک سی پی یو تعریف نمود . آدرس دهی ، کشف خطا ، کد کردن دیتا و ... ازمزیت های خاص این پروتکل است.

  • در شیفت دادن بیتی به چپ و یا راست حداکثر می توان 16 بیت را شیفت داد .

  • در ارتباط با ال سی دی های گرافیکی و رنگی که نیاز به تغییر آنی و سریع دارند باید نوع کامپایل را در حداکثر سرعت قرار داد.

  • در محیط برنامه نویسی اتمل استودیو برای تعریف ثوابتی که قرار است در چندین فایل هدر و چندین فایل سی مورد استفاده قرار بگیرند می توان به راحتی از مسیر زیر و با یک بار تعریف آن را انجام داد : ابتدا ALT+F7 را فشار دهید . سپس از منوی سمت چپ Toolchain و سپس AVR/GNU C Compiler و سپس Symbols را انتخاب و ثابت را در آن تعریف کنید به عنوان مثال کاربردی ترین تعریف فرکانس میکرو است که در این محیط می توان اینگونه تعریف نمود : F_CPU=8000000UL

  • در سری های مگا و تاینی میکروکنترلرهای شرکت اتمل نمی توان اولویت وقفه ها را تعیین کرد ولی در سری ایکسمگا این کار به راحتی قابل انجام است و با تعیین اولویت وقفه ها می توان از روند اینتراپت مطمئن شد.

  • برای چک کردن منبع ریست در میکروکنترلرهای ای وی آر از رجیستر MCUCSR استفاده نمود. و با تعیین بیت یک شده نوع منبع ریست را تعیین نمود.

  • به هنگام ارسال و یا دریافت دیتا در ماژول های مختلف یوزارت ، i2c , 1wire , spi باید از سیستم timeout استفاده نمود . برای پیاده سازی این روش می توان از وقفه تایمر استفاده نمود و با یک کردن یک فلگ در تایم زمانی مورد نظر از داخل حلقه while بیرون آمد.

  • برای تشخیص صحت درستی دیتای ارسالی بین دو دستگاه و یا میکروکنترلر می توان از روش checksum استفاده نمود . این روش بسیار ساده بوده و تشخیص دیتای خطا در آن مشکل است و فقط دیتای خطا را تشخیص می دهد و توسط آن نمی توان بیت خطا را در یک بایت تشخیص داد. روش دیگر استفاده از بیت parity است این روش هم به نوبه خود مفید است اما روش ساده ای است. روش دیگر استفاده از روش CRC است . این ترفند شامل CRC8 , CRC16 , CRC32 , CRC64 است و روش بسیار پیشرفته تری نسبت به روش های قبل است .

  • برای اجرا کردن توابع وقفه بدون پیش آمدن شرایط وقفه و یا فلگ های مرتبط میتوان از روش ریست نرم افزاری استفاده نمود . فرض کنید تابع وقفه ای نوشته شده اما اصلا این وقفه در تابع main پیکر بندی نشده است . حال به نظر شما برای اجرای این تابع در هر لحظه دلخواه چه باید کرد ؟ راه حل کاملا اصولی و قابل اجرا استفاده از روش ریست نرم افزاری است . برای فهمیدن این روش می توانید در محصولات رایگان سایت به دنبال محصول " چگونه می توان میکرو را ریست نرم افزاری کرد " بگردید و با دانلود رایگان آن و مطالعه تمام بحث های آن به این ترفند ناب دست پیدا کنید.

  • در ارتباط USART با طول دیتای 9 بیتی ، بیت نهم می تواند به عنوان شاخص تعیین کننده Command یا Data بودن 8 بیت دیگر بکار رود. از این بیت از طریق کدنویسی مناسب حتی می توان برای reset کردن و شروع مجدد ارتباط هایی استفاده کرد که ارتباط در وسط تبادل دیتا قطع شده باشد.

  • برای پیاده سازی پورت USB در میکروکنترلرهایی که این ماژول سخت افزاری را بر روی خود ندارند می توان از درایور نرم افزاری این ماژول استفاده نمود. این ماژول فقط نیاز به یک وقفه خارجی و یک پین آزاد جهت ارتباط دارد.

  • عموما در سیستم کامند برنامه نویس می تواند با تعاریف قراردادی کامند های مورد نظر به ارسال و دریافت مستر اسلیوی بپردازد.

  • یکی از پروتکل های قدرتمند تحت ماژول یوزارت ، پروتکل مودباس است .این پروتکل را به راحتی میتوان بر روی اغلب میکروکنترلرها پیاده نمود و توسط آن یک سیستم کامندی استاندارد را تعریف نمود و مورد بهره برداری قرار داد.

  • برای ریست کردن میکرو کنترلر به صورت خود خواسته می توان به چندین روش این کار را انجام داد : اولین روش استفاده از پین خارجی است - راه حل دوم استفاده از تایمر واچ داگ و یا سگ نگهبان است و راه حل سوم استفاده از ریست نرم افزاری است . راه حل سوم توسط کدهای برنامه نویسی به راحتی قابل اجرا است و نیازمند زمان TimeOut نیست و در همان لحظه عملیات ریست را انجام میدهد.

  • برای پیاده سازی عملکردهای DAC در میکروکنترلرهایی که این قابلیت را در درون خود ندارند می توان از خروجی تایمرها استفاده نمود بدین صورت که با کنترل میزان دیوتی سایکل، موج دلخواه و یا سیگنال آنالوگ دلخواه را تولید نمود.

  • برای ایجاد فرکانس های دقیق مانند فرکانس های صوتی می توان از سری میکرو کنترلرهای تاینی استفاده نمود .به عنوان مثال تاینی 25 و تاینی 45 و تاینی 85 و تاینی 861 برای این کار بسیار مناسب هستند . این میکرو کنترلرها دارای تایمر با فرکانس 64 مگاهرتزی هستند که در حالت عادی دارای دقت 8 برابری نسبت به فرکانس های 8 مگاهرتزی است.

  • با یک تایمر در میکروکنترلر، به تعداد واحدهای compare در آن تایمر می توان پایه (base) زمانی مستقل از هم ایجاد کرد. مثلا اگر یک تایمر دارای سه واحد مقایسه باشد، از طریق این تایمر و وقفه های مقایسه یا بررسی flag های آن می توان سه پایه زمانی مختلف و مستقل از هم را ایجاد کرد. برای این کار باید تایمر در مد نرمال خود قرار بگیرد و بعد از هر بار عملیات مقایسه، بسته به زمان مورد نیاز مقدار مشخصی با رجیستر مقایسه جمع شود.

  • قرار دادن خازن های بزرگ (مثلا 1000 میکروفاراد) در خروجی رگولاتورهای سری 78 و رگولاتورهای مشابه در زمان خاموش شدن مدار و در صورتی که ولتاژ ورودی رگولاتور سریع تر از ولتاژ خروجی آن افت کند، به دلیل تخلیه خازن از طریق پین خروجی رگولاتور می تواند باعث سوختن آن شود. بنابراین در صورت وجود خازن های بزرگ در خروجی این نوع رگولاتورها باید یک دیود بصورت معکوس از خروجی به ورودی رگولاتور متصل شود تا مسیر دشارژ خازن را فراهم کند و مانع از سوختن احتمالی آن شود.

  • در صورت نیاز به وجود مقاومت pull up در پین ورودی میکروکنترلر، فعال کردن این مقاومت بصورت داخلی ممکن است به تنهایی در محیط های پر نویز کافی نباشد و در مواقعی لازم است مقاومت pull up با مقدار مناسب بصورت خارجی قرار داده شود. همچنین در صورت نیاز به مقاومت pull down برای خانواده هایی که امکان فعال کردن این نوع مقاومت در آنها وجود دارد، در شرایط پرنویز ممکن است لازم باشد این مقاومت بصورت خارجی قرار داده شود.

  • در AVR برای جلوگیری از پاک شدن eeprom داخلی باید Brownout detection فعال شود و سطح ولتاژ آن با توجه به مقدار تغذیه، در بالاترین سطح ممکن تنظیم شود.

  • در کاربردهای صنعتی و پر نویز بهتر است پین reset بعد از برنامه ریزی میکروکنترلر بصورت مستقیم از طریق جامپر یا لحیم کاری (بسته به نوع میکروکنترلر و منطق این پین) به vcc یا gnd اتصال کوتاه شود.

  • برای جلوگیری از پاک شدن یا نوشته شدن اطلاعات ناخواسته بر اثر نویز و نوسانات در eeprom های خارجی مانند سری 24 بهتر است پین write protect به یکی از پین های میکروکنترلر متصل شود و با کد نویسی مناسب در تمام زمان ها به غیر از لحظات نوشتن، eeprom در وضعیت محافظت در برابر نوشته شدن قرار بگیرد.

  • با توجه به immediate و فوری بودن تغییر مقدار رجیستر compare در مد CTC تایمرهای AVR، تغییر مقدار رجیستر مقایسه می تواند منجر به ایجاد سیکل های ناخواسته برای صفر شدن تایمر کانتر شود. برای درک بهتر، فرض کنید تایمر شماره یک در مد CTC قرار داشته باشد و OCR1A برابر 200 باشد و مقدار فعلی تایمر برابر 101 باشد. اگر در این وضعیت مقدار OCR1A به 100 تغییر کند، به دلیل تاثیر فوری این تغییر مقدار، تایمر به شمارش خود تا 65535 ادامه می دهد و بعد مجددا صفر می شود تا در سیکل بعدی مقدار 100 اثرگذار باشد. بنابراین در فرض این مثال، تعداد کلاک لازم برای صفر شدن تایمر به دلیل تغییر مقدار OCR1A، بسیار بیشتر از مقدار مورد انتظار خواهد بود که در عملیات زمان گیری، وقوع این شرایط باعث ایجاد خطا در زمان گیری می شود.

  • تغییر مقدار رجیستر مقایسه در مد CTC تایمرهای AVR، می تواند باعث عملکرد ناخواسته در تعداد کلاک لازم برای صفر شدن مقدار تایمر کانتر شود.

  • اگر در تایمری از میکروکنترلر مورد استفاده، مدی از fast pwm وجود داشته باشد که مقداز TOP تایمر کانتر قابل تنظیم باشد، برای اجتناب از مشکل فوق بجای مد CTC می توان از این نوع fast pwm استفاده کرد. مثلا در mega64 مدهای 14 و 15 تایمر کانترهای 1 و 3 چنین خاصیتی دارند. در مد 15 مقدار TOP برابر OCR1A است و با توجه به اینکه در این مد، عملیات update بصورت immediate نیست و از مکانیزم double buffering استفاده می شود، بنابراین مشکل بوجود آمده در مد CTC در مقداردهی به OCR1A در صورت استفاده از مد 15 دیگر بوجود نخواهد آمد.

  • در کد نویسی برای هر گونه ارتباطی که انتظار برای پاسخ سمت مقابل وجود دارد، باید مکانیزم timeout در انتظار برای دریافت در نظر گرفته شود تا در صورت قطع ارتباط و عدم پاسخ سمت مقابل، برنامه در یک حلقه بی نهایت انتظار قرار نگیرد. منظور از timeout این است که اگر سمت مقابل برای مدت مشخصی پاسخ نداد، اجرای برنامه از حلقه انتظار خارج شود و روتین مناسب خطا اجرا شود.

  • در کدنویسی برای میکروکنترلرها، برای خودداری از استفاده از متغیرها و محاسبات اعشاری که در مواردی می تواند منجر به طولانی شدن زمان اجرای برنامه یا افزایش حجم آن شود، یک روش این است که اگر تعداد مشخصی از اعداد بعد از ممیز مورد نظر باشد، کلیه اعداد را با مقیاسی در نظر بگیریم که همه اعداد اعشاری به صحیح تبدیل شوند و محاسبات بصورت صحیح انجام شوند و در نهایت هنگام نمایش و ارسال و ...، ممیز را در محل مناسب قرار دهیم. به عنوان مثال اگر در اعداد و متغیرهای مورد استفاده تا دو رقم اعشار مورد نظر باشد، می توان عددها و متغیرها را از همان ابتدا با مقیاس صد برابر در نظر گرفت و در نهایت ممیز را در محل مناسب اعمال کرد. مثلا بجای حاصلضرب 1.99 در 2.1 می توان با صد برابر در نظر گرفتن اعداد، حاصلضرب 199 در 210 را محاسبه کرد و در نهایت برای نمایش نتیجه، چهار رقم ممیز در نظر گرفت. در اینحالت روش حذف صفرهای اضافه سمت راست هم می تواند مورد استفاده قرار بگیرد. چنانکه در همین مثال بجای 4.1790 به عنوان نتیجه می توان صفر اضافه سمت راست را حذف کرد و 4.179 را نمایش داد یا ارسال کرد.

  • در ارتباط rs485 هنگامی که بایتی ارسال می شود و سمت مقابل باید پاسخ دهد، به دلیل یک طرفه بودن ارتباط باید تاخیر کافی در پاسخ دادن سمت مقابل لحاظ شود تا فرستنده فرصت داشته باشد وضعیت خود را به گیرنده تغییر دهد و قبل از تغییر وضعیت از فرستنده به گیرنده، ارسال پاسخ از سمت مقابل آغاز نشود. همچنین کدنویسی بخش فرستنده باید به گونه ای باشد که بعد از ارسال و برای دریافت پاسخ، در حداقل زمان ممکن جهت خط به عنوان گیرنده تغییر داده شود و مواردی مانند وقوع یک وقفه نتواند تاخیری را در این تغییر جهت از فرستنده به گیرنده ایجاد کند.

  • یکی از موارد مهم در کدنویسی که عدم توجه به آن می تواند منجر به اشکالات غیر تکراری و با عملکرد به ظاهر تصادفی در اجرای برنامه شود، دسترسی به متغیرها از دو سطح مختلف برنامه است. منظور از دو سطح مختلف برنامه، حلقه اصلی و یک وقفه و یا دو سطح وقفه مختلف است. دسترسی از سطوح مختلف به یک متغیر در صورتی که یک سطح از برنامه مقدار متغیر را تغییر دهد، در صورت عدم توجه برنامه نویس به تبعات این نوع دسترسی می تواند در عملکرد برنامه خطاهایی را ایجاد کند. برای توضیح بیشتر فرض کنید در AVR به یک متغیر چهار بایتی در حلقه اصلی برنامه و یکی از وقفه ها دسترسی وجود داشته باشد، به نحوی که حلقه اصلی مقدار این متغیر را تغییر دهد. به عنوان مثال عددی، اگر یک متغیر چهار بایتی دارای مقدار 0x10ff0000 باشد و لازم باشد در حلقه اصلی با متغیر چهار بایتی دیگری با مقدار 0x00010000 جمع شود و در محل متغیر اولیه ذخیره شود که حاصل این جمع در نهایت 0x11000000 خواهد بود. اما با توجه به هشت بیتی بودن ساختار AVR این جمع بصورت بایت به بایت انجام و ذخیره سازی می شود . حال اگر فرض کنیم وقفه ای در بین ذخیره سازی این متغیر و بعد از ذخیره سازی سه بایت با ارزش کمتر پذیرفته شود و در روتین آن وقفه مقدار این متغیر از حافظه خوانده شود، در این وضعیت مقدار متغیر 0x10000000 خوانده خواهد شد چون بایت با ارزش بیشتر که قبلا 0x10 بوده و اکنون باید 0x11 باشد، هنوز ذخیره سازی نشده است. بنابراین مقدار خوانده شده صحیح نخواهد بود و می تواند باعث خطا در عملکرد برنامه شود. شبیه همین مثال را می توان برای تغییر مقدار یک متغیر توسط روتین وقفه و قضاوت اشتباه روی مقدار متغیر در حلقه اصلی مطرح کرد.

  • بطور کلی در این نوع دسترسی ها که از دو سطح مختلف برنامه انجام می شود، باید در شیوه کدنویسی مراقب چنین خطاهای احتمالی باشیم که یک روش برای جلوگیری از چنین خطاهایی این است که قبل از انجام عملیات روی این نوع متغیرها، وقفه هایی که می توانند منجر به چنین تغییراتی شوند بصورت موقت غیر فعال و بعد مجددا فعال شوند.

  • در ارتباط USART با طول دیتای 9 بیتی ، بیت نهم می تواند به عنوان شاخص تعیین کننده Command یا Data بودن 8 بیت دیگر بکار رود. از این بیت از طریق کدنویسی مناسب حتی می توان برای reset کردن و شروع مجدد ارتباط هایی استفاده کرد که ارتباط در وسط تبادل دیتا قطع شده باشد.

  • برای آنکه بتوان یک استپر موتور را کنترل کرد باید فرکانس 50 هرتز با دیوتی سایکل مشخصی را تولید نمود . گاهی ممکن است نیاز باشد تا این کار را توسط یک تایمر 8 بیتی ایجاد نمود .از آنجایی که تایمر های 8 بیتی ممکن است خاصیت مقایسه ای را در درون خود نداشته باشند می توان این کار را به صورت مجازی انجام داد . در این روش برنامه نویس می تواند به صورت مجازی و توسط کدهای برنامه واحد های مقایسه را تولید و در آن واحدهای مقایسه عملیات تولید موج را انجام دهد به عنوان مثال توسط یک تایمر 8 بیتی و فقط با فعال کردن وقفه سرریز تایمر می توان سه عدد استپر را روی هر پین دلخواهی کنترل نمود.اگر بخواهیم به صورت خلاصه توضیح دهیم می توانیم بگوییم که باید موج PWM با دیوتی سایکل دلخواه به صورت مجازی تولید گردد.

  • برای کنترل غیر دقیق مانند کنترل نور یک لامپ و یا ساخت یک دیمر می توان از PWM مجازی استفاده نمود که در این روش براحتی میتوان از تمامی پین ها به عنوان خروجی PWM استفاده نمود.

  • در اغلب میکروکنترلرهای تاینی حداکثر فرکانس MCU فرکانس 20 مگاهرتز است که این فرکانس در میکروکنترلرهای سری مگا در حداکثر خود مقدار 16 مگاهرتز است لذا در استفاده های خاص میتوان از این میکروکنترلرها استفاده نمود.

  • برای پیاده سازی ماژولهای ارتباطی مانند SPI, Usart , TWI مواقعی که این ماژول های به صورت سخت افزاری در دسترس نیستند می توان به روش پیاده سازی نرم افزاری استفاده نمود در این روش دقت کار ماژول نرم افزاری پیاده سازی شده بسته به دقت برنامه نویس دارد.

۵۵,۰۰۰ تومان ۵۰,۰۰۰ تومان

شاید برایتان پیش امده باشد که بخواهید درب حیاط، چراغ داخل حیاط و یا یکسری مصرف کننده های برقی را توسط ریموت کنترل از راه دور کنترل کنید .
راه حل های ساده و تقریبا ارزان استفاده از فرستنده گیرنده های مادون قرمز و RF هستند . که در این حیطه ماژول های فراوانی در بازار یافت می شوند که از آنها میتوان به ماژول های با مدولاسیون ASK در فرکانس های 315 مگاهرتز ، 433 مگا هرتز ، 868 مگاهرتز اشاره نمود
سورس کدی که در اختیار شما قرار دارد از ماژول های گیرنده ASK در فرکانس های 315 و 433 استفاده می کند .
لذا ویژگی های این محصول به صورت زیر است :
سورس کد زبان سی سازکار با کامپایلر و IDE کدویژن
میکرو کنترلر ATMEGA8
با قابلیت فعال سازی حداکثر چهار کانال در مودهای مختلف
با قابلیت تعیین تعداد کانال ها در داخل برنامه در ویزارد آسان
با قابلیت تعیین مود هر کانال که در سه مود : لحظه ای ، فلیپ فلاپ و قفل درب قابل استفاده است.
با قابلیت فعال و یا غیر فعال سازی جامپر جهت تعیین مودهای هر کانال
با قابلیت تعیین سرعت دریافت اطلاعات توسط گیرنده
سازگار با تراشه های EV1527 , EV527
با قابلیت تغییر پین های خروجی کانال ها توسط برنامه (به راحتی )
با قابلیت لرن کردن و یا اضافه و کم کردن ریموت توسط کلید تعبیه شده بر روی ریموت
کار کردن در فرکانس کاری 8 مگا هرتز
با قابلیت تعیین پین های جامپر بر روی پین های دلخواه
با قابلیت اضافه کردن حداکثر 40 ریموت
با قابلیت تعیین کردن عمر سخت افزاری دستگاه ( که مثلا دستگاه بعد از 2000 بار استفاده از ریموت از کار بیفتد و نیاز مند پشتیبانی باشد )
دارای ال ای دی وضعیت جهت نشان دادن وضعیت دستگاه در حالت های مختلف
ارائه نقشه PCB در محیط پروتئوس به صورت کامل و ایزوله شده جهت استفاده در مصارف گوناگون مانند درب باز کن ، کنترل وسایل روشنایی و …

نکته : برنامه اولیه این پروژه توسط آقای اسدی نوشته شده است و این پروژه توسط مرجع تخصصی کتابخانه های حرفه ای AVR کاملا بهینه شده است و توابع گوناگون آن جدا سازی شده اند به گونه ای که یک ویزارد برای آن تهیه شده است که مشتریان محترم می توانند به راحتی تغیرات دلخواه را بر روی برنامه بدون هیچ اطلاعی از کدهای داخل برنامه انجام دهند.

تعداد

توضیحات

پس از باز کردن پروژه توسط کدویژن ویزاردی به شما نشان داده خواهد شد که توسط آن میتوانید پارامترهای برنامه را تعیین نمایید:پ

این پروژه شامل چهار کانال می باشد که به دلخواه می توان سرعت تغییر و نیز تنظیمات مورد نیاز خود را اعمال نمود.
۱- تعیین تعداد کانال های مورد نیاز:
#define ASK_Number_Of_CHS 4
در ابتدا باید تعیین کنید که دوست دارید از چند کانال این دستگاه استفاده نمایید.
نکته۱:حداکثر تعداد کانال ۴ و حداقل تعداد کانال ۱ می باشد.
نکته۲ : اگر کاربر نخواهد از هر ۴ کانال استفاده نماید و بالفرض مثال خواسته باشد از ۱ و ۲ و یا ۳ کانال این دستگاه استفاده نماید. وضعیت دیگر کانال ها به شکل زیر تغییر وضعیت می دهند.

الف:اگر کاربر تعداد کانال ها را ۱ انتخاب نماید:
نتیجه:
نتیجه:
با فشردن دکمه اول ، کانال یک تعییر وضعیت می دهد.
با فشردن دکمه دوم : کانال یک تغییر وضعیت می دهد.
با فشردن دکمه سوم : کانال یک تغییر وضعیت می دهد.
با فشردن دکمه چهارم : کانال یک تغییر وضعیت می دهد.

ب ) اگر کاربر تعداد کانال را دو انتخاب نماید :
نتیجه:
با فشردن دکمه اول ، کانال یک تعییر وضعیت می دهد.
با فشردن دکمه دوم : کانال دو تغییر وضعیت می دهد.
با فشردن دکمه سوم : کانال یک تغییر وضعیت می دهد.
با فشردن دکمه چهارم : کانال دو تغییر وضعیت می دهد.

ج) اگر کاربر تعداد کانال را ۳ انتخاب نماید:
نتیجه:
با فشردن دکمه اول ، کانال یک تعییر وضعیت می دهد.
با فشردن دکمه دوم : کانال دو تغییر وضعیت می دهد.
با فشردن دکمه سوم : کانال سه تغییر وضعیت می دهد.
با فشردن دکمه چهارم : کانال یک تغییر وضعیت می دهد.

ج) اگر کاربر تعداد کانال را ۴ انتخاب نماید:
نتیجه:
با فشردن دکمه اول ، کانال یک تعییر وضعیت می دهد.
با فشردن دکمه دوم : کانال دو تغییر وضعیت می دهد.
با فشردن دکمه سوم : کانال سه تغییر وضعیت می دهد.
با فشردن دکمه چهارم : کانال چهار تغییر وضعیت می دهد.

۲- تعیین استفاده کردن ویا نکردن از جامپر: کاربر بسته به نیاز خود می تواند از جامپر استفاده نماید و یا خیر.
#define JUMPER_INCLUDED YES
اگر کاربر مایل به استفاده از جامپر بود کافی است YES را به نرم افزار ارسال نماید و در صورتی که مایل به استفاده از جامپر در پروژه خود نبود کافی است عبارت NO را به نرم افزار ارسال نماید.
۳- تعیین روش تعیین وضعیت کانال ها:
#define RemoteMode_F1 SetResetMode
#define RemoteMode_F2 SetResetMode
#define RemoteMode_F3 SetResetMode
#define RemoteMode_F4 SetResetMode
بسته به نیاز کاربر دو حالت مختلف برای تعیین وضعیت یک کانال دو حالت مختلف به وجود می آید:
مود تغییر لحظه ای : در این مود ، هر موقع کاربر یک دکمه از فرستنده را فشار دهد ، کانال مورد نظر ابتدا یک و پس از مدت کوتاهی دوباره صفر می شود.
مود تغییر وضعیت کلی: در این مود ، هر موقع کاربر یک دکمه از فرستنده را فشار دهد ، کانال مورد نظر تغییر وضعیت می دهد به این معنا که اگر قبلا صفر بوده یک می شود و اگر یک بوده صفر می شود و تا زمانی که دوباره کاربر دکمه مورد نظر را فشار ندهد تغییر وضعیت بعدی رخ نخواهد داد.
در قسمت قبل گفتیم که اگر کاربر عبارت NO را به نرم افزار ارسال نماید این بدان معناست که دوست ندارد از جامپر در مدار خود استفاده نماید و در نتیجه دوست دارد تا این کار را به صورت نرم افزاری خودش انجام دهد.
حال با فرض اینکه در مرحله قبل عبارت NO را به دستگاه ارسال نموده باشیم می توانیم مود کاری هر کدام از کانال ها را تعیین کنیم بدین صورت که با فرستادن عبارت SetResetMode می توانیم مود تغییر لحظه ای و با فرستادن عبارت ToggleMode می توانیم مود تغییر وضعیت کلی را انتخاب نماییم.
به عنوان مثال فرض کنید که می خواهیم از کانال یک به صورت لحظه ای ، از کانال دو به صورت تغییر کلی و از کانال سه و چهار به صورت لحظه ای استفاده نماییم در اینصورت عبارت زیر را به نرم افزار ارسال می کنیم:
#define RemoteMode_F1 SetResetMode
#define RemoteMode_F2 ToggleMode
#define RemoteMode_F3 SetResetMode
#define RemoteMode_F4 SetResetMode
۴- تعیین سرعت تغییر لحظه ای کانال ها:
#define Function1_Delay_ms 500
#define Function2_Delay_ms 500
#define Function3_Delay_ms 500
#define Function4_Delay_ms 500
در صورتی که کاربر به صورت نرم افزاری بخواهد از مود تغییر لحظه ای استفاده نماید و یا اینکه ترتیب جامپر ها را به گونه ای چیده باشد که نمایشکر مود تغییر لحظه ای باشد می بایست سرعت تغییر وضعیت هر کانال را تعیین نمود که عدد ۵۰۰ روبروی هر کدام بدین معناست که کانال مورد نظر اگر در مراحل قبل و یا توسط جامپر در مود تغییر لحظه ای باشد ، با فشردن کلید مورد نظر بر روی فرستنده ، کانال ابتدا یک شده و سپس بعد از ۵۰۰ میلی ثانیه به حالت صفر بر می گردد.
به عنوان مثال برای فرستادن اعدادی بالاتر مثلا ۲ ثانیه کافی است عدد ۲۰۰۰ را به جای ۵۰۰ به نرم افزار ارسال کنیم.

دیدگاهها

هیچ دیدگاهی برای این محصول نوشته نشده است.

اولین نفری باشید که دیدگاهی را ارسال می کنید برای “فرستنده گیرنده چهار کانال RF ASK 315 MHZ 433 MHZ EV1527”

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

سبد خرید

حضورتان را خوش امد میگوییم پیشنهاد های ویژه را از دست ندهید رد کردن

یه سری از محصولاتمون تخفیف ویژه خوردند ، اونا رو از دست نده که به زودی قیمتشون زیاد میشه