آموزش کامل استک پروتکل TCP/IP تحت زبان سی - مرجع تخصصی کتابخانه های حرفه ای 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 مواقعی که این ماژول های به صورت سخت افزاری در دسترس نیستند می توان به روش پیاده سازی نرم افزاری استفاده نمود در این روش دقت کار ماژول نرم افزاری پیاده سازی شده بسته به دقت برنامه نویس دارد.

Placeholder

۲,۰۰۰,۰۰۰ تومان ۱,۹۰۰,۰۰۰ تومان

در این دوره کاملا کاربردی کاربر با مفاهیم مقدماتی و پیشرفته استک TCP/IP آشنا خواهد شد . مفاهیمی که او را در استفاده از این پروتکل برای کاربردهای خانه هوشمند یاری خواهد کرد .

شاید برای پیش امده باشد که دوست داشته باشید خانه خودتان را از کیلومترها دورتر و توسط اینترنت کنترل کنید

موضوعی که بسیار دلچسب بوده و بعضا در بعضی مواقع بسیار مورد نیاز است .

لذا برای حل این موضوع چه میکنید ؟

شاید ساده ترین راه حلی که پیش روی ما باشد استفاده از جی اس ام مودم هایی است که به آنها سیم کارت متصل شده و توسط اس ام اس میتوان آنرا انجام داد

اما در حقیقت استفاده از جی اس ام مودم هزینه بر بوده و برای هر اس ام اس شما باید حداقل 100 ریال پول را بپردازید و این یعنی اینکه اجرای هر دستور 100 ریال برای شما هزینه بر است که در مقیاس بزرگتر واقعا به صرفه نیست

لذا راه حل این موضوع کنترل کردن این دستگاه ها توسط اینترنت است .

خوبی اینترنت این است که هزینه آن بسیار کم است و در بدترین حالت هزینه ای به ازای هر کیلو بایت 2 ریال است که به نسبت پیامک 50 برابر کم تر است .

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

دوم اینکه اینترنت در همه جای جهان در دسترس است و وابسته به نوع سیم کارت نیست

سوم اینکه سرعت اجرای فرامین اینترنتی بسیار بیشتر است

چهارم اینکه میتوان توسط این روش داده هایی با حجم های بالاتر را ارسال و یا دریافت کرد . فرض کنید قرار است یک عکس را دریافت کنید و یا یک فیلم

 

لذا استفاده از اینترنت برای هوشمند سازی موضوعی مبرهن است . اما باز هم در بین سرویس های اینترنتی موجود کدام یک به صرفه تر و تقریبا رایگان است

جواب را میتوان در اینترنت های خطوط ثابت و یا ADSL بیان نمود .

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

لذا پیشنهاد می شود که از اینترنت خطوط ثابت و یا ADSL استفاده نمود

اما حالا که قرار است این کار  را انجام دهیم لذا نیاز است که یک روتر هم نیز در اختیار داشته باشیم که این روتر ارتباط ما را با دهکده ی اینترنت برقرار میکند .

حالا باید دستگاه مان  را به این مودم و یا روتر وای فای و یا سیمی متصل کنیم

راه حل اولیه این است که این ارتباط را سیمی انجام دهیم زیرا

1- قطعی و وصلی ارتباط با مودم را نخواهیم داشت

2- نیاز به وصل شدن به مودم توسط یوزرنیم و پسورد را نخواهیم داشت

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

رابطی که قرار است برد الکترونیکی ما را به شبکه متصل کند

این رابط یک سوکت فیزیکی از نوع RJ45 است . سوکتی که باید به آی سی شبکه متصل شود و ما قرار است با فرمان دادن به این آی سی ترافیک شبکه را کنترل کنیم

آی سی های متعددی وجود دارند که سرعت های مختلفی را در اختیار ما قرار میدهند . سرعت های در حد 10 و یا 100 مگا بیت بر ثانیه و ما مختاریم که یکی از آنها را انتخاب نماییم

شاید پر کاربردترین تراشه ای که مورد استفاده قرار میگیرید تراشه ENC28J60 شرکت میکروچیپ است که این تراشه حداکثر سرعت ده مگا بیت بر ثانیه را برای ما فراهم میکند .

حالا که همه چی جور است نیاز داریم تا شروع به برنامه نویسی کنیم  .

لذا سر فصل های آموزشی ما به صورت زیر است  :

1- معرفی تراشه ENC28j60 جهت مرتبط نمودن میکرو کنترلر و روتر

2- بررسی ویژگی هایی این تراشه و همچنین ارائه یک کتابخانه واسط جهت راه اندازی توسط میکروکنترلرهای مختلف

3-معرفی مفاهیم اولیه شبکه مانند IP , GateWay, DNS , DHCP IP , STATIC IP , SUBNETMASK IP

4- بررسی استک TCP/IPدر لایه های مختلف

5- بررسی لایه فیزیکال استک TCPIP

6- بررسی لایه ETHERNET

7- بررسی لایه ARP

8- بررسی لایه IP

9- بررسی  پروتکل TCP

10- بررسی پروتکل UDP

11- بررسی پروتکل DHCP

12- بررسی پروتکل DNS

13- بررسی پروتکل NTP

14- بررسی پروتکل HTTP

15- بررسی پروتکل MQTT

 

موضوعی که در این بسیار حائز اهمیت است این است که ما قرار است با این تراشه و این استک برنامه نویسی خودمان را با میکروکنترلرها آشنا کتیم .

لذا جهت راحتی کار یک میکروکنترلر و یک تراشه شبکه ENC28J60 را همین اول کار برای خودمان تهیه میکنیم . بعد از معرفی  هر کدام از این سرفصل ها شروع به برنامه نویسی و راه اندازی همان قسمت می نماییم

و در نهایت که پروتکل MQTT را بررسی کردیم تست ارتباط خودمان را با اینترنت انجام داده و پروژه های مختلفی را با این پروتکل توسط اینترنت کنترل میکنیم

موفق باشید

 

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

مهندس احسانی نیا

تعداد

توضیحات

در این دوره کاملا کاربردی کاربر با مفاهیم مقدماتی و پیشرفته استک TCP/IP آشنا خواهد شد . مفاهیمی که او را در استفاده از این پروتکل برای کاربردهای خانه هوشمند یاری خواهد کرد .

شاید برای پیش امده باشد که دوست داشته باشید خانه خودتان را از کیلومترها دورتر و توسط اینترنت کنترل کنید

موضوعی که بسیار دلچسب بوده و بعضا در بعضی مواقع بسیار مورد نیاز است .

لذا برای حل این موضوع چه میکنید ؟

شاید ساده ترین راه حلی که پیش روی ما باشد استفاده از جی اس ام مودم هایی است که به آنها سیم کارت متصل شده و توسط اس ام اس میتوان آنرا انجام داد

اما در حقیقت استفاده از جی اس ام مودم هزینه بر بوده و برای هر اس ام اس شما باید حداقل ۱۰۰ ریال پول را بپردازید و این یعنی اینکه اجرای هر دستور ۱۰۰ ریال برای شما هزینه بر است که در مقیاس بزرگتر واقعا به صرفه نیست

لذا راه حل این موضوع کنترل کردن این دستگاه ها توسط اینترنت است .

خوبی اینترنت این است که هزینه آن بسیار کم است و در بدترین حالت هزینه ای به ازای هر کیلو بایت ۲ ریال است که به نسبت پیامک ۵۰ برابر کم تر است .

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

دوم اینکه اینترنت در همه جای جهان در دسترس است و وابسته به نوع سیم کارت نیست

سوم اینکه سرعت اجرای فرامین اینترنتی بسیار بیشتر است

چهارم اینکه میتوان توسط این روش داده هایی با حجم های بالاتر را ارسال و یا دریافت کرد . فرض کنید قرار است یک عکس را دریافت کنید و یا یک فیلم

 

لذا استفاده از اینترنت برای هوشمند سازی موضوعی مبرهن است . اما باز هم در بین سرویس های اینترنتی موجود کدام یک به صرفه تر و تقریبا رایگان است

جواب را میتوان در اینترنت های خطوط ثابت و یا ADSL بیان نمود .

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

لذا پیشنهاد می شود که از اینترنت خطوط ثابت و یا ADSL استفاده نمود

اما حالا که قرار است این کار  را انجام دهیم لذا نیاز است که یک روتر هم نیز در اختیار داشته باشیم که این روتر ارتباط ما را با دهکده ی اینترنت برقرار میکند .

حالا باید دستگاه مان  را به این مودم و یا روتر وای فای و یا سیمی متصل کنیم

راه حل اولیه این است که این ارتباط را سیمی انجام دهیم زیرا

۱- قطعی و وصلی ارتباط با مودم را نخواهیم داشت

۲- نیاز به وصل شدن به مودم توسط یوزرنیم و پسورد را نخواهیم داشت

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

رابطی که قرار است برد الکترونیکی ما را به شبکه متصل کند

این رابط یک سوکت فیزیکی از نوع RJ45 است . سوکتی که باید به آی سی شبکه متصل شود و ما قرار است با فرمان دادن به این آی سی ترافیک شبکه را کنترل کنیم

آی سی های متعددی وجود دارند که سرعت های مختلفی را در اختیار ما قرار میدهند . سرعت های در حد ۱۰ و یا ۱۰۰ مگا بیت بر ثانیه و ما مختاریم که یکی از آنها را انتخاب نماییم

شاید پر کاربردترین تراشه ای که مورد استفاده قرار میگیرید تراشه ENC28J60 شرکت میکروچیپ است که این تراشه حداکثر سرعت ده مگا بیت بر ثانیه را برای ما فراهم میکند .

حالا که همه چی جور است نیاز داریم تا شروع به برنامه نویسی کنیم  .

لذا سر فصل های آموزشی ما به صورت زیر است  :

۱- معرفی تراشه ENC28j60 جهت مرتبط نمودن میکرو کنترلر و روتر

۲- بررسی ویژگی هایی این تراشه و همچنین ارائه یک کتابخانه واسط جهت راه اندازی توسط میکروکنترلرهای مختلف

۳-معرفی مفاهیم اولیه شبکه مانند IP , GateWay, DNS , DHCP IP , STATIC IP , SUBNETMASK IP

۴- بررسی استک TCP/IPدر لایه های مختلف

۵- بررسی لایه فیزیکال استک TCPIP

۶- بررسی لایه ETHERNET

۷- بررسی لایه ARP

۸- بررسی لایه IP

۹- بررسی  پروتکل TCP

۱۰- بررسی پروتکل UDP

۱۱- بررسی پروتکل DHCP

۱۲- بررسی پروتکل DNS

۱۳- بررسی پروتکل NTP

۱۴- بررسی پروتکل HTTP

۱۵- بررسی پروتکل MQTT

 

موضوعی که در این بسیار حائز اهمیت است این است که ما قرار است با این تراشه و این استک برنامه نویسی خودمان را با میکروکنترلرها آشنا کتیم .

لذا جهت راحتی کار یک میکروکنترلر و یک تراشه شبکه ENC28J60 را همین اول کار برای خودمان تهیه میکنیم . بعد از معرفی  هر کدام از این سرفصل ها شروع به برنامه نویسی و راه اندازی همان قسمت می نماییم

و در نهایت که پروتکل MQTT را بررسی کردیم تست ارتباط خودمان را با اینترنت انجام داده و پروژه های مختلفی را با این پروتکل توسط اینترنت کنترل میکنیم

موفق باشید

 

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

مهندس احسانی نیا

دیدگاهها

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

اولین نفری باشید که دیدگاهی را ارسال می کنید برای “آموزش کامل استک پروتکل TCP/IP تحت زبان سی”

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

سبد خرید

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

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