کتابخانه AT24C32-64-128-256-512-1024 - مرجع تخصصی کتابخانه های حرفه ای 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 مواقعی که این ماژول های به صورت سخت افزاری در دسترس نیستند می توان به روش پیاده سازی نرم افزاری استفاده نمود در این روش دقت کار ماژول نرم افزاری پیاده سازی شده بسته به دقت برنامه نویس دارد.

۱۰,۰۰۰ تومان

پس از ارائه کتابخانه جامع i2c بر آن شدیم تا چیپ های مرتبط با این کتابخانه را با آن راه اندازی نماییم . یکی از این قطعات چیپ حافظه خارجی ای پی رام AT24C32  و چیپ های مشابه است.

این eeprom ها از کتابخانه i2c  استفاده می کنند و برای ارتباط خود با میکروکنترلر تنها به پین های scl و sda و یک پین محافظت تراشه به WP نیاز دارند که دو پینSCL , SDA  را باید در خود کتابخانه i2c  کانفیگ نمایید و همچنین پین WP را در داخل این کتابخانه تعریف میکنید .

کتابخانه پیش رو شامل ویژگی های زیر است :

1- پشتیبانی از تراشه های AT24C32 – AT24C64 – AT24C128 – AT24C256 – AT24C512 – AT24C1024

2-  دارای تابع نوشتن یک بایت در حافظه eeprom

3- دارای تابع نوشتن بلوک داده در حافظه eeprom

4- دارای تابع خواندن یک بایت از آدرس فعلی حافظه eeprom

5- دارای تابع خواندن یک بایت از آدرس دلخواه حافظه eeprom

6- دارای تابع خواندن بلوک داده از حافظه eeprom

7- با قابلیت فعال کردن بافرینگ جهت نگهداری دیتاهای ذخیره شده تا حداکثر یک کیلو بایت

 

تعداد

توضیحات

پس از ارائه کتابخانه جامع i2c بر آن شدیم تا چیپ های مرتبط با این کتابخانه را با آن راه اندازی نماییم . یکی از این قطعات چیپ حافظه خارجی ای پی رام AT24C32  و چیپ های مشابه است.

این eeprom ها از کتابخانه i2c  استفاده می کنند و برای ارتباط خود با میکروکنترلر تنها به پین های scl و sda و یک پین محافظت تراشه به WP نیاز دارند که دو پینSCL , SDA  را باید در خود کتابخانه i2c  کانفیگ نمایید و همچنین پین WP را در داخل این کتابخانه تعریف میکنید .

کتابخانه پیش رو شامل ویژگی های زیر است :

۱- پشتیبانی از تراشه های AT24C32 – AT24C64 – AT24C128 – AT24C256 – AT24C512 – AT24C1024

۲-  دارای تابع نوشتن یک بایت در حافظه eeprom

۳- دارای تابع نوشتن بلوک داده در حافظه eeprom

۴- دارای تابع خواندن یک بایت از آدرس فعلی حافظه eeprom

۵- دارای تابع خواندن یک بایت از آدرس دلخواه حافظه eeprom

۶- دارای تابع خواندن بلوک داده از حافظه eeprom

۷- با قابلیت فعال کردن بافرینگ جهت نگهداری دیتاهای ذخیره شده تا حداکثر یک کیلو بایت

۸- راه اندازی در محیط کامپایلرهای GCC

دیدگاهها

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

اولین نفری باشید که دیدگاهی را ارسال می کنید برای “کتابخانه AT24C32-64-128-256-512-1024”

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

سبد خرید

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