بخش ششم آموزش AVR : آموزش راه اندازی واحدهای ارتباط سریال

بازگشت به آموزشگاه

مقدمه

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

Data Com Serial Vs Paralell


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

تبادل دیتا با محیط خارجی میکروکنترلر علاوه بر واحد ورودی/خروجی می تواند از طریق واحدهای ارتباطی سریال صورت گیرد. واحد ورودی/خروجی به صورت موازی و واحدهای ارتباط سریال به صورت سریال با محیط پیرامون میکرو در ارتباط است . مهمترین مسائلی که در ارتباط سریال با آن درگیر هستیم به شرح زیر است :

  • پروتکل ارتباطی سریال
  • سرعت ارتباط سریال
  • نوع فرستنده و گیرنده در ارتباط سریال
  • انواع حالت های ارتباط سریال
  • روش ارسال سنکرون یا آسنکرون

 


پروتکل های ارتباطی سریال و سرعت آنها

مهمترین مسئله در ارتباطات سریال یکی پروتکل ارتباطی و دیگری سرعت ارسال و دریافت اطلاعات است. پروتکل های ارتباطی سریال که توسط میکروکنترلرهای AVR و اکثر میکروکنترلرهای دیگر پشتیبانی می شود عبارتند از :

  • پروتکل spi : دارای سرعت بسیار بالا می باشد و در فواصل بسیار کوتاه از آن استفاده می شود . از طریق این ارتباط میکروکنترلر ها را نیز میتوان پروگرام کرد .
  • پروتکل USB : دارای سرعت بالا می باشد و در فواصل کوتاه از آن استفاده می شود . یک پروتکل جهانی استاندارد برای ارتباط با اکثر دستگاههای جانبی است.
  • پروتکل USART : دارای سرعت متوسط می باشد و در مسافت های طولانی از آن استفاده می شود . همچنین برای ارتباط با اکثر ماژول های ارتباطی مانند GSM ، GPS ، HM-TR و … کاربرد دارد.
  • پروتکل TWI یا همان I2C : یا پروتکل دوسیمه بیشتر برای ارتباط با المانهای جانبی نظیر سنسورها و ماژول های سرعت پایین و در فواصل کوتاه است .

تذکر : پروتکل ارتباط سریالUSB توسط برخی از میکروکنترلرهای AVR پشتیبانی می شود .

نکته : از پروتکل های مهم ارتباطی سریال که توسط میکروکنترلرهای AVR پشتیبانی نمی شود میتوان پروتکل های Ethernet ، CAN ، HDMI و I2S را نام برد .

 


نوع فرستنده و گیرنده

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

 


انواع حالت ارتباط سریال

به طور کلی ۳ روش ارتباط بین فرستنده و گیرنده وجود دارد که میتوان در میکروکنترلرهای AVR نیز آنها را پیاده کرد :

روش یک طرفه یا ساده ( Simplex ) : در این روش اطلاعات فقط در یک جهت انجام می گیرد .

روش نیم دوطرفه ( Half Duplex ) : در این روش اطلاعات در هر دو جهت میتواند انجام گیرد اما در هر لحظه فقط در یک جهت امکان پذیر است .

روش دو طرفه ( Full Duplex ) : در این روش اطلاعات در یک لحظه میتواند در دو جهت انجام گیرد .

 

TransmissionModes


روش ارسال اطلاعات سریال

دو روش کلی برای انتقال سریال اطلاعات وجود دارد که در میکروکنترلرهای AVR هر دو روش وجود دارد :

روش سنکرون یا همزمان : در این روش به همراه خط ارتباط سریال یک خط دیگر برای کلاک وجود دارد به طوری که در هر لبه بالارونده کلاک ، یک نمونه از سیگنال اطلاعات برداشته می شود و کنار هم گذاشته می شود . بنابراین سرعت نمونه برداری را سرعت کلاک مشخص می کند و میتواند سرعت افزایش یا کاهش یابد .

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

USART Com


راه اندازی واحد ارتباطی سریال USART

همواره یکی از مسائلی که با آن درگیر هستیم ارتباط دو یا چند دستگاه با هم است که بتوانند با یکدیگر دیتا ارسال کنند. روش های متنوعی برای این منظور وجود دارد که یکی از آنها USART می باشد. ارتباط سریال یوزارت مخفف عبارت Universal Synchronous And Asynchronous Serial Receiver And Transmitter به معنای “فرستنده/گیرنده جهانی سریال سنکرون/آسنکرون” می باشد .  همانگونه که از اسم این واحد مشخص است ، واحد USART در میکروکنترلرهای AVR از دو حالت سنکرون و آسنکرون پشتیبانی می کند . در حالت ارتباط سنکرون از سیم بندی زیر بین فرستنده و گیرنده استفاده می شود :

Synchronous AVR Com

که در آن RXD برای دریافت دیتا ، TXD برای ارسال دیتا ، XCK برای کلاک حالت سنکرون و GND زمین مشترک دو دستگاه می باشد . اما به دلیل اینکه در صنعت همواره سعی بر این است که تعداد سیم ها کم شود ، در اکثر اوقات از حالت آسنکرون استفاده می کنیم . در ارتباط آسنکرون سیم کلاک را حذف کرده و به جای آن پارامتری به نام نرخ ارسال یا Baud Rate را اضافه کنیم که مشخص می کند که در هر ثانیه چند بیت ارسال یا دریافت می شود . این ارتباط می تواند بین دو یا چند دستگاه مختلف صورت بگیرد برای مثال می تواند ارسال/دریافت دیتا بین دو یا چند میکرو ، یک یا چند میکرو با یک کامپیوتر ، یک میکرو با ماژول های ارتباطی مختلف نظیر ماژول GSM ، ماژول GPS و … باشد . شکل زیر نحوه ارتباط سریال آسنکرون را بین Master و Slave نشان می دهد . به ارتباط یوزارت در حالت آسنکرون UART گفته می شود . در ادامه این آموزش به علت متداول بودن ، فقط ارتباط آسنکرون شرح داده خواهد شد .

Asynchronous AVR Com


قالب ارسال/دریافت دیتا در پروتکل UART ( آسنکرون )

هنگام ارسال دیتا علاوه بر خود دیتا تعدادی بیت کنترلی نیز همراه با آن ارسال می شود که به این مجموعه اصطلاحا یک فریم ( frame ) گفته می شود .

UART frame c2

بیت شروع START :

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

بیت های داده DATA :

بیت های داده اطلاعات اصلی را منتقل می کند و می تواند بین ۵ تا ۹ بیت متغیر باشد . انتخاب تعداد این بیت ها با کاربر است و باید در فرستنده و گیرنده به صورت یکسان تنظیم شود .

بیت توازن PARITY :

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

بیت یا بیت های پایان STOP :

در ادامه ی بیت های داده یا بیت توازن در صورت استفاده دست کم ۱ بیت پایان ارسال می شود. بیت پایان همواره یک است و وجود بیت دوم ( SP2 ) دلخواه است .

مفهوم Baud Rate :

Baud rate عرض هر بیت را مشخص می کند . دو طرف ارتباط باید از عرض هر بیت اطلاع داشته باشند. اگر در یک ارتباط سریال baud rate برابر ۹۶۰۰bps باشد به این معنی است که فرستنده باید ۹۶۰۰ بیت را در یک ثانیه ( Bit Per Second ) ارسال کند. در این صورت عرض هر بیت برابر می شود با :


پروتکل های استاندارد UART

استفاده از پروتکل UART معمولی برای مسافتهای بیشتر از چند متر و با Baud Rate بالا و در محیطهای با نویز زیاد ، قابل اطمینان و پیاده سازی نیست . چرا که اولا در مسافتهای طولانی اثرنویزهای محیطی بیشتر می شود و ثانیا در فرکانسهای بالا ، تشعشع خط فرستنده ، روی گیرنده اثر می گذارد . برای اینکه دستگاه ها بتوانند در فاصله ی بیشتری از هم قرار گیرند و از طریق پروتکل UART با هم ارتباط داشته باشند ، استانداردهایی تدوین شدند . پروتکل RS232 فراگیرترین و معمول ترین استاندارد جهت انتقال دیتا می باشد . در استاندارد RS232 در سرعت ۲۰Kbps بیت بر ثانیه حداکثر طول کابل قابل استفاده ۷٫۵ متر می تواند باشد تا داده ها تقریبا به صورت صحیح به مقصد برسند. پروتکل RS422 شباهت زیادی به RS232 دارد ولی تا ۱۰ گیرنده را پشتیبانی می کند. این پروتکل که از خطوط بالانس شده برای انتقال داده استفاده می کند ، اثر نویز پذیری را بشدت کاهش داده است به طوری که بیشترین فاصله بین فرستنده و گیرنده در این پروتکل ۱۲۰۰ متر و بیشترین سرعت برابر ۱۰Mbps است. در پروتکل RS485 تعداد گیرنده ها میتواند حداکثر تا ۳۲ هم باشد ضمن اینکه بیشترین فاصله ۱۲۰۰ متر و بیشترین سرعت ۱۰Mbps می باشد . شکل زیر مقایسه کلی بین این پروتکل ها را نشان می دهد . به علت اینکه در این آموزش به فواصل و گیرنده های زیادی نیاز نداریم تنها به تشریح استاندارد RS232 کفایت می کنیم.

Serial UART Protocol


استاندارد RS232

ساده ترین استاندارد برای ارتباط سریال در مسافت های بیشتر از چندین متر می باشد . اساس کار این پروتکل در تغییر سطوح منطقی ولتاژ است به طوری که سطح ۱ منطقی ( ۵ ولت ) را به ۲۵ ولت و سطح ۰ منطقی ( ۰ ولت ) را به -۲۵ ولت می رساند . در طول مسیر ممکن است سطح این ولتاژ کاهش یابد اما تا +۳ ولت برای منطق ۱ و تا -۳ ولت نیز برای منطق ۰ قابل قبول است . شکل زیر محدوده تغییرات این استاندارد را نشان می دهد .RS232_1

تبدیل سطوح ولتاژ توسط آی سی های مختلفی صورت می گیرد که مشهورترین آن ها به نام آی سی MAX232 است . بنابراین در صورت استفاده از این استاندارد دو آی سی Max232 میان Master و Slave به صورت شکل زیر اضافه می شود .

RS232 AVR Com

کابل مورد استفاده در پروتکل RS232 حداقل باید دارای ۳ رشته سیم باشند که یک سیم برای خط ارسال داده یا TX و یک سیم برای خط دریافت داده یا RX و سیم سوم نیز به عنوان سیم ولتاژ مرجع استفاده می شود. این کابل واسط می تواند از سیم های موازی ساده یا از سیم های جفت به هم تابیده شده باشند. طول کابل حداکثر نرخ انتقال داده (Buad Rate) را محدود می کند به طوری که طول کابل را در نرخ های انتقال پایین تر می توان طولانی تر در نظر گرفت .

RS232_2

از استاندارد RS232 در پورت های سریال پشت کامپیوتر های PC ( پورت DB9 ) استفاده شده است. بنابراین پورت سریالی که پشت PC ها وجود دارد دارای پروتکل RS232 است و با اضافه نمودن آی سی MAX232 به صورت شکل زیر و از طریق نرم افزارهای ترمینال موجود در کامپیوتر می توان ارتباط میان میکروکنترلر و PC را برقرار نمود .

Serial port interfacing MAX232


تنظیمات واحد USART در کدویزارد Codewizard

پس از رفتن به سربرگ USART ، بر حسب نیاز به حالت یک طرفه یا دوطرفه می توان Reciever ، Transmitter یا هر دو را فعال کرد . اگر گزینه فعالسازی وقفه ( interrupt ) نیز فعال شود ، وقفه داخلی برای ارسال/دریافت فعال می شود و به برنامه تابع سابروتین مربوطه اضافه می گردد . سپس در قسمت Baud Rate نرخ ارسال/دریافت دیتا را مشخص می کنیم . نرخ ارسال/دریافت باید طوری باشد که مقدار درصد خطا که زیر آن نوشته شده است ، مقدار قابل قبولی باشد . با فعال کردن گزینه x2 نیز میتوان نرخ ارسال/دریافت را توسط مدار ضرب کننده دو برابر کرد . در قسمت Communication Parameter نوع قاب دیتا را مشخص می کنیم . توجه شود که قاب دیتا و نرخ ارسال/دریافت در گیرنده و فرستنده باید یکی باشد . در قسمت Mode نیز سنکرون یا آسنکرون بودن ارتباط را مشخص می کنیم ( این قسمت همیشه روی آسنکرون است ).

USART_CodeWizard_Config

پس از تولید کد توسط برنامه کدویزارد مشاهده می شود کتابخانه stdio.h به برنامه اضافه می شود . درون این کتابخانه توابع کار با USART وجود دارد که در طول برنامه نویسی می توان از آنها برحسب نیاز استفاده کرد .

 


توابع پرکاربرد stdio.h در هنگام کار با واحد USART

1- تابع getchar :

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

2- تابع putchar :

این تابع که دارای یک ورودی از نوع char و بدون خروجی می باشد ، کاراکتر ورودی را توسط USART ارسال می کند.

3- توابع puts و putsf :

برای ارسال یا دریافت یک رشته به صورت کامل به وسیله USART از دستورات putsf و puts استفاده می شود. تفاوت puts با putsf در این است که تابع puts رشته ی موجود در SRAM را و putsf رشته ذخیره شده در فلش را ارسال می کند.

نکته : برای مقدار دهی به یک متغیر رشته ای از تابع sprintf استفاده می شود .

4- تابع gets :

برای دریافت رشته ها از واحد USART و ذخیره آنها روی یک متغیر رشته ای از این تابع استفاده می شود . این تابع دارای دو ورودی و بدون خروجی می باشد . ورودی اول این تابع رشته ای است که میخواهیم اطلاعات دریافت شده روی آن ذخیره شود و ورودی دوم این تابع که از نوع unsigned char است طول رشته را مشخص می کند . تا زمانی که به تعداد معین کاراکتر دریافت نشود ، کاراکترهای دریافت شده را از USRAT گرفته و در متغیر رشته ای ذخیره می کند.

5- تابع printf :

تفاوت دستور printf با puts یا putsf در این است که می توان با دستور printf متغیر ها و رشته ها را با هم و با فرمت دلخواه ارسال کرد. برای مثال میخواهیم دمای اتاق را ارسال کنیم ، به صورت زیر میتوان این کار را انجام داد . با نوشتن کد زیر تمامی کاراکترهای موجود در عبارت ” Temp=%d ” به سرعت و پشت سر هم از طریق واحد یوزارت ارسال می شود و به جای %d در عبارت فوق دمای اتاق که در متغیر i قرار دارد ، ارسال می شود .

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

کاراکتر نوع اطلاعات ارسالی
 c%  یک تک کاراکتر
 d%  عدد صحیح علامت دار در مبنای ۱۰
 i%  عدد صحیح علامت دار در مبنای ۱۰
 e%  نمایش عدد ممیز شناور به صورت علمی
 E%  نمایش عدد ممیز شناور به صورت علمی
 f%  عدد اعشاری
 s%  عبارت رشته ای واقع در حافظه SRAM
 u%  عدد صحیح بدون علامت در مبنای ۱۰
X% به فرم هگزا دسیمال با حروف بزرگ
 x%   به فرم هگزا دسیمال با حروف کوچک
 P%  عبارت رشته ای واقع در حافظه FLASH
 %%  نمایش علامت ٪

 

تعیین طول ( width ) و دقت ( precision ) خروجی در تابع printf :

تابع printf این قابلیت را دارد که طول داده ارسالی و دقت آن را تعیین نماید . طول و دقت بعد از کاراکتر % و قبل از حروف نشان دهنده فرمت به صورت دقت.طول نوشته می شود . برای مثال میخواهیم دقت یک عدد اعشاری را تا ۴ رقم اعشار و طول آن را تا ۷ رقم در نظر بگیریم باید آن را در تابع printf به صورت زیر بنویسیم :

در مثال فوق بعد از A= به اندازه ۷ کاراکتر قرار میگیرد که حداکثر ۴ تا از آن برای اعشار و ۳ تا از آن برای قسمت صحیح عدد است . در صورتی که طول متغیر i کمتر از ۷ کاراکتر را اشغال کند به همان تعداد کاراکتر خالی سمت چپ عدد قرار می گیرد .

نکته : برای ارسال عددی از نوع Long از کاراکتر ویژه ‘l’ استفاده می شود . این کاراکتر ویژه را میتوان بعد از کاراکتر % و قبل از کاراکترهای فرمت c ، d ، u و x به کار برد . مثال :

نکته مهم : با توجه به اینکه تابع printf حجم زیادی از حافظه برنامه را به خود اختصاص می دهد ، در نرم افزار CodeVision برای استفاده بهینه از این تابع کاربر می تواند تنظیمات نوع عملکرد تابع printf را بر حسب نیاز تغییر دهد . برای این کار از منوی Project گزینه ی Configure Project را انتخاب کرده و در سربرگ C Compiler به زیر برگ Code Generation بروید . همانطور که در شکل زیر نیز مشاهده می کنید در قسمت printf feature می توان طول ، دقت و نوع تابع printf یا sprintf را در صورت وجود معین کرد .

CodeWizard_Printf

6- تابع scanf :

می تواند رشته یا متغیر را از ورودی با یک فرمت مشخص دریافت و در یک آرایه ذخیره کند. مثال :

در مثال فوق مقدار مورد نظر را به صورت int دریافت کرده و به صورت فرمت مشخص شده در متغیر A ذخیره می کند. برای استفاده بهینه از این تابع نیز در نرم افزار CodeVision در همان قسمت Code Generation بخش scanf feature میتوان نوع و طول ورودی را تنظیم کرد .

7- تابع sprintf :

این تابع همانند printf عمل می کند با این تفاوت که خروجی آن به جای ارسال توسط واحد USART در یک آرایه که در آرگومان اول تابع مشخص می شود ، ذخیره می شود . مثال :

8- تابع sscanf :

این تابع همانند scanf عمل می کند با این تفاوت که ورودی آن به جای دریافت از واحد USART از یک آرایه که در آرگومان اول تابع مشخص می شود ، گرفته می شود . مثال :

پس از اجرای دستور فوق محتویات آرایه s به آرایه a منتقل می شود .

 


توابع پرکاربرد کتابخانه string.h برای کار با رشته ها :

در صورتی که با رشته ها و آرایه های رشته ای کار می کنید ، میتوانید با اضافه کردن هدر فایل string.h از توابع مفید این کتابخانه در برنامه استفاده نمایید . در پروژه هایی مانند راه اندازی ماژول های GSM ، GPS و Bluetouth به برخی از آنها نیاز خواهید داشت .

1- تابع strcmp:

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

  • اگر str1<str2 باشدمقدار برگردانده شده عددی کوچکتر از صفر خواهد بود.
  • اگر str1=str2 باشد مقدار برگردانده شده برابر صفر خواهد بود.
  • و اگر str1>str2 باشد مقدار برگردانده شده عددی بزرگتر از صفر خواهد بود.

 

2- تابع strcpy :

به علت اینکه مقدار دادن به متغیر رشته ای بطور مستقیم امکان پذیر نیست ، از طریق این تابع رشته ای در رشته ی دیگر قرار می گیرد . مثال :

3- تابع strncpy:

تابع strncpy تعداد مشخصی از کاراکتر های یک رشته را در رشته ی دیگر کپی می کند. مثال :

در مثال فوق str1 رشته ای است که به تعداد n کاراکتر از کاراکترهای str2 در آن کپی می شود .

4- تابع strlwr:

رشته ای را به عنوان ورودی پذیرفته و کلیه ی حروف بزرگ آن را به کوچک تبدیل می کند.

5- تابع struper :

رشته ای را به عنوان ورودی پذیرفته و کلیه ی حروف کوچک آن را به بزرگ تبدیل می کند.

6- تابع strlen :

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

7- تابع strrev :

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

…..


مثال عملی شماره ۷

برنامه ای با Atmega32 بنویسید که دارای یک LCD کاراکتری ۲ در ۱۶ و یک سنسور LM35 باشد . میکروکنترلر از طریق پورت سریال به کامپیوتر وصل است . کاربر میتواند با هر بار زدن کلید b از صفحه کلید کامپیوتر ، دمای سنسور را روی LCD به نمایش درآورده و به کامپیوتر ارسال و نمایش دهد . برنامه را ابتدا در پروتئوس شبیه سازی کرده و سپس پیاده سازی نمایید .

حل :

مرحله اول : پیاده سازی سخت افزار در Proteus

پس از قراردادن Atmega32 و LM35 و LM016L در نرم افزار پروتئوس ، همانطور که در شکل زیر نیز مشاهده می کنید ، برای شبیه سازی اتصال میکرو به کامپیوتر از قطعه Virtual Terminal استفاده می شود . برای قرار دادن این قطعه از نوار ابزار سمت چپ instrument را انتخاب کرده و از منو Virtual Terminal را انتخاب کرده و به صورت ضربدری به میکرو متصل می کنیم.

Atmega32_Mesal7_Proteus

مرحله دوم : پیاده سازی نرم افزار توسط کدویژن

پس از انجام تنظیمات کدویزارد مربوط به سربرگ های port ، chip ، Alphanumeric LCD و ADC به همان صورت توضیح داده شده در مثال ۶ به سربرگ USART رفته و تنظیمات مربوطه را به صورت شکل زیر انجام دهید .

Atmega32_Mesal7_Codewizard

پس از تولید کد اولیه توسط کدویزارد و حذف کدها و کامنت های اضافی نوبت به برنامه نویسی پروژه می رسد . برنامه به صورتی نوشته شده است که ابتدا میکرو منتظر می ماند تا کلید b از صفحه کلید کامپیوتر زده شود سپس از adc مقدار سنسور دما را خوانده و ابتدا روی lcd نمایش داده و سپس به کامپیوتر ارسال می نماید .

مرحله سوم : شبیه سازی برنامه در پروتئوس

قبل از شروع شبیه سازی باید نرخ ارسال/دریافت ( Baud Rate ) ابزار ترمینال با نرخ ارسال/دریافت که در کدویزارد تنظیم کرده ایم یکسان باشد تا به درستی کار کند . برای این منظور روی Virtual Terminal دابل کلیک کرده و در پنجره باز شده قسمت Baud Rate را روی ۴۸۰۰ قرار می دهیم .

Atmega32_Mesal7_Proteus_Run

مرحله چهارم : پیاده سازی پروژه

در هنگام پیاده سازی پروژه می بایست نکات زیر را در خصوص ارتباط سریال رعایت نمود :

  • از آن جایی که برای اتصال میکرو به کامپیوتر از استاندارد RS232 استفاده می شود نیاز است که از یک عدد آی سی Max232 استفاده گردد . نحوه اتصال این آی سی به میکروکنترلر را در شکل زیر مشاهده می کنید .

MAX232

  • به علت اینکه برای راه اندازی تراشه MAX232 شما احتیاج به استفاده از چندین خازن دارید ، میتوان از تراشه MAX233 یا تراشه MAX3232 استفاده کرد که در آن احتیاج به استفاده از هیچ خازنی ندارید. نحوه ارتباط این آی سی را در شکل زیر مشاهده می کنید .

max233

  • بعد از اتصال میکرو به پورت RS232 ، نیاز به یک کابل ارتباطی سریال ( DB 9 ) برای اتصال میکرو به پورت سریال PC دارید که در شکل زیر آن را مشاهده می کنید .

rs232

  • پس از بعد از پروگرام کردن و کامل کردن اتصالات ، برای شروع ارتباط کامپیوتر با میکروکنترلر نیاز به یک اینترفیس نرم افزاری در PC داریم که از طریق آن با پورت سریال و میکرو ارتباط برقرار کنیم. نرم افزار های متعددی به نامTerminal برای این منظور طراحی شده اند که میتوان از همه آنها استفاده نمود. در نرم افزار کدویژن ابزاری برای این منظور تعبیه شده است که در منوی Tools قرار دارد. بنابراین بعد از اتصال کابل سریال به کامپیوتر و وصل کردن منبع تغذیه به میکرو و روشن نمودن آن ، از منوی Setting در نرم افزار کدویژن Terminal را انتخاب کرده و تنظیمات مربوط به COM پورتی که میکرو به آن وصل است و قاب دیتا و نرخ ارسال/دریافت را نیز مشخص می کنیم.

codevision_terminal

  • سپس از طریق منوی Tools وارد Terminal می شویم و روی دکمه Connect کلیک می کنیم. حالا میتوان برای میکرو کاراکتری را فرستاد یا هر آنچه میکرو ارسال می کند را مشاهده کرد .

 

دانلود سورس مثال عملی شماره ۷

 


مبدل های USB به سریال

در کامپیوتر های امروزی پورت USB پورتی عمومی و کاربرپسند می باشد. همچنین در لپتاپ ها و بسیاری از وسایل پورت سریال DB9 وجود ندارد. وجود این مسائل باعث می شود تا در هنگام استفاده از رابط USART برای اتصال به کامپیوتر، از مبدل های USB به سریال استفاده کنیم. ماژول های USB به سریال به طور کلی شامل انواع زیر هستند:

1- مبدل USB to TTL : این ماژول ها نوعی مبدل USART به USB هستند که از یک طرف دارای Rx و Tx برای اتصال به میکرو و از طرف دیگر دارای پورت USB برای اتصال به کامپیوتر هستند.

USBtoTTL

2- مبدل USB to RS232 : این ماژول ها دارای یک آی سی مبدل USART به USB به همراه یک آی سی Max232 برای تبدیل USART به RS232 هستند.

USBtoRS232

3- مبدل USB به RS422 و RS485 : در این نوع مبدل ها نیز از همان آی سی های USB به سریال به همراه آی سی مبدل سریال به RS422/RS485 استفاده می شود.

 


انواع مبدل های USBtoTTL

برخی از آی سی هایی که به عنوان مبدل USART به USB عمل می کنند، معرفی می شود:

1-مبدل سریال FT232 : این ماژول بر اساس آی سی FT232 شرکت FTDI chip ساخته شده است.

FT232_TTL

2-مبدل سریال PL2303 : این ماژول بر اساس آی سی PL2303 شرکت Prolific ساخته شده است و در دو نوع بدون کابل و دارای کابل وجود دارد.

PL23203_TTL

3- مبدل سریال CP2102 : این ماژول بر اساس آی سی CP2102 شرکت SiliconLAB ساخته شده است.

CP2102_TTL

تذکر : تفاوتی میان نحوه عملکرد این آی سی ها وجود ندارد. تنها تفاوت میان این آی سی ها به قیمت آن در بازار و نیز سرعت تبدیل دیتا بر می گردد.

تذکر : هر کدام از این آی سی ها درایور خاص خود را برای راه اندازی نیاز دارد که از سایت شرکت سازنده دانلود و نصب می گردد.

توجه : در این آموزش از ماژول PL2303 استفاده می کنیم که میتوانید درایور آن را از این لینک دانلود نمایید. شکل زیر پایه های نوع سیم دار این ماژول را نشان می دهد.

PL2303_USB_TO_SERIAL


اتصال PL2303 به میکرو

در مثال قبل به جای استفاده از تبدیل RS232 میتوان از آی سی مبدل USB به سریال نظیر PL2303 استفاده کرد. نحوه برنامه نویسی هیچ تفاوتی ندارد و تنها تفاوت در سیم بندی مدار است. همانطور که در شکل زیر مشاهده می کنید، پایه های Rx و Tx میکرو با پایه های Rx و Tx ماژول باید به صورت ضربدری به هم متصل شوند و پایه زمین هر دو نیز به هم وصل باشد. در این روش حتی میتوان تغذیه مدار را از پایه Vcc ماژول گرفت.

PL2303_micro


معرفی و تشریح واحد ارتباط سریال SPI

SPI یا serial peripheral interface یک ارتباط سریع سریال است که بوسیله ی شرکت موتورلا طراحی شده است. SPI تنها به صورت full-Duplex عمل کرده و امکان ارسال و دریافت همزمان را دارد. از واسط SPI برای انتقال اطلاعات با سرعت انتقال بالا و برای فواصل کوتاه استفاده می کنند. در باس SPI ارتباط دو وسیله به صورت Master/Slave است. آغاز کننده ی ارتباط همیشه Master است و فقط Master است که می تواند شروع به انتقال کند و Slave باید منتظر دریافت اطلاعات بماند. برای استفاده از واحد SPI سیم بندی زیر بین Master و Slave مورد استفاده قرار می گیرد .

SPI_slave1

نتیجه : ارتباط سریال بوسیله پروتکل SPI دارای ۴ پایه است که به صورت شکل فوق به هم متصل می شود .

MISO: Master Input Slave Output

MOSI: Master Output Salve Input

SCK: Serial Clock

SSEL: Slave Select


طرز کار واحد SPI

SPI_Master_Slaveسیستم دارای دو بخش Master و Slave است. در بخش Master سیستم دارای یک شیفت رجیستر ۸ بیتی و مولد پالس است و بخش slave فقط شامل یک شیفت رجیستر هشت بیتی است. کلاک این دو رجیستر از واحد تولید کلاک در وسیله ی Master تامین می شود. با اعمال هر پالس کلاک به طور هم زمان یک بیت از شیفت رجیستر Master خارج شده و وارد شیفت رجیستر Slave می شود. و یک بیت نیز از شیفت رجیستر Slave وارد شیفت رجیستر Master خواهد شد. پایه ی SS فعال ساز شیفت رجیستر Slave است و تا زمانی که بوسیله ی Master صفر ( Low ) نشود بیتی منتقل نخواهد شد.

در صورتی که محتوای این رجیستر ها ۸ بیت شیفت پیدا کند محتویات رجیستر داده ی Master و Slave با یکدیگر تعویض می شود. یعنی به صورت چرخشی ( Shift ) محتوای master با slave عوض می شود یعنی محتویات slave به master منتقل شده و در مقابل محتوای master نیز با slave تعویض خواهد شد.

 


خصوصیات واحد SPI در میکروکنترلرهای AVR

  • Full-Duplex ارسال اطلاعات به صورت سنکرون توسط ۳ سیم
  • عملکرد در حالت های Master و Slave
  • اولویت در ارسال بیت ابتدایی LSB یا MSB
  • قابلیت تنظیم سرعت انتقال دیتا
  • قابلیت ایجاد وقفه در پایان ارسال
  • بیدار شدن خودکار از حالت بیکاری ( Idle )
  • امکان دو برابر کردن سرعت ارسال ( در برخی از AVR ها )

 


شبکه بندی چند Slave توسط یک Master در پروتکل SPI

با استفاده از پروتکل SPI میتوان از ارتباط یک Master با چندین Slave استفاده کرد . همانطور که در شکل زیر نیز مشاهده می کنید ، هر سه سیم SCK ، MISO و MOSI به تمامی Slave های درون شبکه به یکدیگر متصل هستند اما Master توسط Slave Select انتخاب می کند که با کدام Slave ارتباط برقرار کند به طوری که Master پین SS در Slave مورد نظر را Low کرده و پین SS مابقی Slave ها را High می کند . با انجام این کار بین Master و یکی از Slave ها ارتباط SPI برقرار می شود و دیتای آن دو مبادله می گردد .

نکته : پین های SS1 ، SS2 و SS3 در Master میتواند هر پایه ای از پورت های خروجی میکروکنترلر باشد . یعنی پایه SS در Master بدون استفاده است و برای انتخاب Slave از سه پایه دیگر میکرو استفاده می گردد .

SPI_Master_Three_Slaves


تنظیمات واحد SPI در کدویزارد CodeWizard

پس از رفتن به سربرگ Spi و فعال کردن واحد Spi ، تنظیمات چگونگی ارتباط Spi به راحتی و با انتخاب گزینه های موجود صورت می گیرد . در صورت فعالسازی SPI interrupt وقفه داخلی مربوط به این واحد فعال می شود که پس از تولید کد میتوان برنامه مورد نظر را داخل تابع سابروتین وقفه اضافه شده نوشت . در قسمت SPI Clock Rate سرعت ارسال/دریافت دیتا توسط واحد spi مشخص می شود و با فعال کردن Clock Rate X2 نیز میتوان سرعت کلاک انتخاب شده در SPI Clock Rate را دوبرابر کرد . در قسمت SPI Type نوع Master یا Slave بودن میکرو مشخص می گردد . در بخش Clock Phase موقعیت لبه پالس کلاک نسبت به بیت های داده را مشخص می کند به طوری که وقتی روی Cycle Start قرار گیرد عمل نمونه برداری در لبه بالارونده انجام گرفته و عمل شیفت در لبه پایین رونده اتفاق می افتد و در حالت Cycle Half برعکس حالت فوق است یعنی عمل نمونه برداری در لبه پایین رونده انجام و شیفت در لبه بالا رونده صورت می گیرد . در بخش Clock Polarity مشخص می شود که پالس کلاک در حالت بیکاری ( Idle ) در منطق Low یا High قرار گیرد . براساس تنظیمات قسمت های Clock Phase و Clock Polarity چهار حالت مختلف برای ارسال/دریافت دیتا در واحد SPI بوجود می آید که به آنها Mode های واحد Spi گویند . دقت شود که مد Master و Slave ها باید یکسان باشند . در بخش Data Order نیز مشخص می شود که اولین بیت ارسالی در شیفت رجیستر بیت با ارزش ( بیت هشتم یا MSB ) باشد یا بیت کم ارزش ( بیت اول یا LSB ) باشد .

CodeWizard_SPI_Config

پس از تولید کد توسط برنامه کدویزارد مشاهده می شود کتابخانه spi.h به برنامه اضافه می شود . درون این کتابخانه توابع کار با واحد SPI وجود دارد که در طول برنامه نویسی می توان از آنها برحسب نیاز استفاده کرد . مهم ترین تابع که در برنامه ها از آن استفاده می شود تابع spi است که دارای ۸ بیت ورودی و ۸ بیت خروجی است . با فراخوانی این تابع در برنامه به طور همزمان ۸ بیتی که در ورودی تابع قرار دارد به پورت spi ارسال می شود و ۸ بیت دیگر خروجی تابع نیز از پورت spi دریافت می شود و در یک متغیر از نوع unsigned char قرار می گیرد . مثال :

توضیح : در خط سوم مقدار ۰x45 از طریق رابط سریال spi به میکروکنترلر Master/Slave ارسال می شود و هر آنچه که از آن میکروکنترلر دریافت شده است درون متغیر recieve ریخته می شود .

 


مثال عملی شماره ۸

دو میکروکنترلر Atmega32 را از طریق پورت Spi به یکدیگر متصل کنید . به هر یک از میکروکنترلرها یک LCD کاراکتری ۲ در ۱۶ و یک صفحه کلید ۴ در ۴ متصل کرده و سپس برنامه ای بنویسید که با زدن کلیدی از هر میکروکنترلر ، کاراکتر مورد نظر به میکروکنترلر دیگر ارسال شده و روی LCD آن نمایش داده شود .

حل :

مرحله اول : پیاده سازی سخت افزار در Proteus

بعد از قرار دادن المانها و سیم کشی آنها ، ارتباط spi میان دو میکرو را به صورت زیر برقرار کرده سپس یکی از آنها را به دلخواه به عنوان Master و دیگری را Slave انتخاب کرده و Slave Select را به زمین متصل می کنیم تا همواره فعال گردد .

Atmega32_Mesal8_Proteus

مرحله دوم : پیاده سازی نرم افزار توسط codewizard

در این مرحله می بایست دوبار از نرم افزار کد ویزارد استفاده کرده و دو برنامه یکی برای Master و دیگری برای Slave تولید کرد . پس از تنظیم سربرگ های PORT و Alphanumeric LCD در کدویزارد به همان صورت مثال شماره ۴ به سراغ سربرگ SPi می رویم و تنظیمات زیر را انجام می دهیم .

Atmega32_Mesal8_Codewizard

بعد از تولید کد و حذف کامنت های اضافی به سراغ نوشتن برنامه های Master و Slave می رویم .

تذکر : در هنگام کار با رابط SPI باید سعی کنیم برنامه های Master و Slave تا جای ممکن شبیه به هم باشد .

نکته مهم : محل قرار گیری تابع delay_ms در برنامه و نیز مقدار آن در برنامه بسیار اهمیت دارد و کم یا زیاد بودن آن باعث ایجاد باگ و مشکل می گردد .

برنامه Master :

برنامه Slave :

توضیح : همانطور که مشاهده می کنید برنامه Master و Slave تنها در یک خط ( مقدار دهی رجیستر SPCR در تابع main ) با هم تفاوت دارند و این نوع برنامه نویسی باعث کمتر شدن مشکلات در هنگام پیاده سازی می گردد . همچنین در کل برنامه تنها از یکبار استفاده از تابع delay و به اندازه ۲۰۰ میلی ثانیه کفایت شده است که باعث بهبود عملکرد میکرو می گردد .

 

مرحله سوم : شبیه سازی برنامه در پروتئوس

Atmega32_Mesal8_Run

مرحله چهارم : پیاده سازی پروژه

نکته خاصی در این قسمت وجود ندارد و اگر همه اتصالات و خصوصا برنامه نویسی صحیح باشد برنامه به درستی کار می کند .

 

دانلود سورس مثال عملی شماره ۸

 


با کلیک بر روی تصویر زیر به بخش بعدی آموزش بروید

next-image



در صورتی که این مطلب مورد پسندتان بود لایک و اشتراک گذاری فراموش نشود.

 

دیدگاه (49)

  • mehrnaz پاسخ

    سلام با سپاس فراوان از سایت خوبتون منتظر قسمت های بعدی آموزش AVR هستم
    متشکرم

    1394-04-08 در 11:22
    • ادمین الکترو ولت پاسخ

      سلام . سپاسگزارم . قسمت بعدی در حال تدوین است و به زودی قرار خواهد گرفت .

      1394-04-08 در 21:02
  • mehrnaz پاسخ

    سلام متشکرم از شما

    1394-04-09 در 08:52
    • ادمین الکترو ولت پاسخ

      متشکر از شما همراه گرامی

      1394-04-09 در 09:25
  • علی پاسخ

    سلام….!
    خیلی خوبه ممنون میشم همچنین ادمه بدید…!

    1394-04-28 در 16:42
    • ادمین الکترو ولت پاسخ

      سلام دوست عزیز متشکر از حسن نظر شما ایشالا به زودی آماده میکنم

      1394-04-29 در 23:59
  • saeed پاسخ

    kheyli khub bud.ketab khundam vali in mataleb kheylii ba zabune sade tar va ghabel fahm tar gofte shode.lotfan edame dahid.kheyli mamnun

    1394-05-09 در 01:14
    • ادمین الکترو ولت پاسخ

      خیلی ممنون و متشکر دوست عزیز…آموزش ها حتما ادامه خواهد داشت…

      1394-05-09 در 17:38
  • ali-ali پاسخ

    سلام و تشکر از مطالب مفید و کاربردیتون…..

    1394-06-31 در 00:42
    • ادمین الکترو ولت پاسخ

      سلام دوست عزیز خواهش میکنم

      1394-06-31 در 18:08
  • kiokio پاسخ

    سلام ممنونم لطفا قسمت توضیحات را نیز بصورت فایل PDF جهت دانلود بزارید.

    1394-07-14 در 10:42
    • ادمین الکترو ولت پاسخ

      سلام خواهش می کنم دوست عزیز
      منظورتونو از قسمت توضیحات متوجه نمیشم ولی همه این آموزش ها به طور کامل به صورت pdf با عنوان جزوه آموزش کاربردی AVR از ۰ تا ۱۰۰ روی سایت موجود است که میتوانید دانلود کنید

      1394-07-15 در 11:17
  • پدرام سرحدی پاسخ

    آموزش ها بسیار عالی و کاربردی بود
    بسیار عالی می شود اگر واحد TWI یا همان I2C رو هم توضیح میدادید
    باتشکر سرحدی

    1394-11-04 در 08:43
    • ادمین الکترو ولت پاسخ

      سلام مهندس جان ممنون از حسن نظرتون آموزشش در بسته جامع آموزشیمون وجود داره بعدا حتما میزارم رو سایت

      1394-11-04 در 13:02
  • 9299778849 پاسخ

    سلام………………
    ممنون سایت خوبی جمع جور کردین و مطالب مفیدی بطور (کامل)ارائه دادید

    1394-11-12 در 23:39
    • ادمین الکترو ولت پاسخ

      سلام دوست عزیز سپاسگزارم از حسن نظرتون

      1394-11-13 در 06:55
  • علی پاسخ

    سلام
    خیلی عالی بود!
    واقعا آموزشاتون کامله!
    فقط یه سوال دارم!
    میگم از چه راهی باید میکرو رو به کامپیوتر وصل کرد! از طریق spi نه uart
    کابل خاصی داره؟!
    به کجای کامپیوتر وصل میشه؟!
    و ار کجای میشه ورودی های میکرو کنترلر که برای کامپیوتر دیتا فرستاده رو مشاهده کرد؟!
    خیلی ممنون!

    1394-11-24 در 15:43
    • ادمین الکترو ولت پاسخ

      سلام دوست عزیز ممنونم از حسن نظرتون
      کامپیوترهای شخصی (PC) فقط دارای پورت های USB و UART هستند که با استفاده از میکروهایی که قابلیت USB و UART دارند ، میتوان به صورت مستقیم ارتباط برقرار کرد. بنابراین به صورت مستقیم نمیتوان با SPI به کامپیوتر متصل شد اما با استفاده از هر گونه مبدل سخت افزاری یا نرم افزاری SPI به UART یا USB میتوان این کار را انجام داد.

      1394-11-26 در 06:38
  • حامد پاسخ

    سلام
    آقا من یه سوال خیلی اساسی دارم
    من وقتی توی proteus میکرو شبیه سازی میکنم به هیچ عنوان پلی نمیشه هی خطا میدهVSM DEBUGGER
    میگه:
    FATAL SIMULATION ERRORS INCOUNTURED
    چیکا کنم لطفا راهنماییم کنید
    بابت مطالبتون هم ممنون

    1394-11-29 در 19:48
    • ادمین الکترو ولت پاسخ

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

      1394-11-29 در 21:31
  • mas993 پاسخ

    سلام محمد حسین جان
    من پروژم در مورد rs48 هستش و برای پایان نامه ام میخواستم ازین اطلاعات با ذکر منبع استفاده کنم ولی متاسفانه نشد.
    با توجه به این که 3 روز بیشتر وقت ندارم امکان تایپشون رو ندارم میخواستم بدونم راهی هست که بتونم این اطلاعات رو به صورت word داشته باشم.

    1394-11-30 در 06:37
    • ادمین الکترو ولت پاسخ

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

      1394-11-30 در 11:18
  • علی پاسخ

    با سلام و ممنون بابت مطالب مفیدتان

    2 میکرو دارم 1284.
    از هر میکرو یک یوارت به وسیله ای است و مشکلی نیست.

    2 یوارت های دیگر به هم وصل هستند.

    بعضی مواقع یوارتها هم رونمیشناسند و مثلا دریافت ندارند.
    آیا میشود بصورت دستوری دوباره یوارتها را شناسائی کرد؟

    1394-12-15 در 07:39
  • حشمت اله پاسخ

    سلام.مهندس اگه برای ارتباط سریال بین دو میکرو ویا میکرو به یک ماژول از آیسی بافر مثل74als245 استفاده کنیم مشکلی به وجود میاد؟

    1395-01-27 در 06:45
    • ادمین الکترو ولت پاسخ

      سلام دوست عزیز بله آی سی 74245 یک بافر دو طرفه است و در حالت TTL یعنی استفاده از ولتاژ منطقی بین 0 تا 5 مشکلی بوجود نمیاد

      1395-01-28 در 18:25
      • حشمت اله پاسخ

        با تشکر.فاصله مجاز بین دو میکرو با استفاده از آی سی بافر74245 چقدر میتونه باشه؟

        1395-01-29 در 10:11
        • ادمین الکترو ولت پاسخ

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

          1395-01-29 در 19:41
        • حشمت اله پاسخ

          سلام هنگام استفاده از rs232 ارتباط دو میکرو به خوبی و بدون هیچگونه خطایی برقرار میشیه ولی هنگام استفاده از max485 در هر دو میکرو خطای rx frame error زده میشود.طریقه استفاده ازmax485 بدین صورت است که هر دو پایهRE,DE را به هم وصل کرده و در تنظیم اولیه در هر دو میکرو آنها را صفر کرده ولی در هنگام ارسال در میکرویی که ارسال را انجام میدهد ایتدا یک و سپس صفر میشود.لطفا در صورت امکان راهنمایی کنید که ایراد کار از کجاست؟

          1395-01-31 در 17:00
  • amir پاسخ

    سلام 2 تا سوال داشتم براي استفاده از usart براي ارتباط ميكرو با ماژول بلوتوث hc-05 ايا max232 لازمه؟ و اينكه اگر بخوام از baud rate 9600 استفاده كنم بايد از كريستال خارجي 11.0592 استفاده كنم؟ميكرو هم atmega9a

    1395-01-29 در 14:47
    • ادمین الکترو ولت پاسخ

      سلام دوست عزیز خیر نیازی به max232 و کریستال خارجی نیست

      1395-01-29 در 19:48
  • Mahdi پاسخ

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

    1395-03-30 در 18:34
    • ادمین الکترو ولت پاسخ

      سلام دوست عزیز لطفا سوال خود را با توضیحات کامل بفرمایید. در نرم افزار پروتئوس میتوانید از یک میکرو برای ارسال به میکرو دیگر استفاده نمایید و یا از Terminal موجود در پروتئوس استفاده نمایید.

      1395-03-31 در 07:17
  • REYHANE پاسخ

    سلام
    من میخوام خروجی یک مدار (آنالوگ) را با USB به لپ تاپ ببرم و با Lab VIEW روی اسکوپ نمایش بدم.میشه برای برنامه نویسی میکرویی که سیگنال آنالوگ رو به صورت سریال به USB میبرد. راهنماییم کنید؟؟
    ممنون

    1395-03-31 در 15:25
    • ادمین الکترو ولت پاسخ

      سلام
      شما ابتدا باید سیگنال آنالوگ را با راه اندازی واحد ADC به دیجیتال تبدیل کنید و دیتاهای دیجیتال را توسط واحد USART و ماژول USB به کامپیوتر منتقل کنید. در نرم افزار LabView نیز از پورت سریال دیتا ها را خوانده و به صورت نمودار نمایش دهید.

      1395-03-31 در 20:50
  • علی پاسخ

    با سلام اگر بخواهم از adc بخوانم و فقط عدد را به کامپیوتر ارسال کنم با چه تابعی میتونم؟؟printf,puts نشد.

    1395-06-04 در 12:32
    • ادمین الکترو ولت پاسخ

      سلام دوست عزیز ابتدا از adc توسط تابع read_adc عدد را خوانده و سپس توسط تابع printf با آن عدد را به کامپیوتر ارسال می کنیم. مشکل شما در عدم صحیح برنامه نویسی یا تنظیمات کدویژن می باشد.

      1395-06-05 در 07:20
  • محمد دزفول پاسخ

    سلام، یه مدار با میکرو pic دانلود کردم که5تا lm35 با قابلیت رله دربازه مشخص داره و یه نمایشگر کاراکتری برای نمایش دمای لحظه ای…
    چطور میتونم فاصله 100 متری بین سنسورها و برد اصلی رو ایجاد کنم؟

    1395-06-17 در 22:17
    • ادمین الکترو ولت پاسخ

      سلام از دو بورد جداگانه میکرو یکی فرستنده و دیگری گیرنده استفاده کنید
      برای ارتباط های حدود 100 متر میتوانید از ماژول های مخابراتی نظیر hm-tr یا NRF استفاده کنید

      1395-06-18 در 13:36
      • محمد دزفول پاسخ

        آقای داوودی اگه سورس و فایل شبیه ساز پروتئوس رو براتون ارسال کنم امکان ایجاد تغییرات براتون امکانپذیر هست؟
        ( بطور مثال بجای lm35 از ترموکوبل استفاده کنم و یکجا مدار دما رو حس کنه و درجای دیگه دما برروی نمایشگر دیده بشه…)

        1395-06-21 در 21:10
  • ali h l پاسخ

    سلام.ممنون از اطلاعاتی که دادین.فقط یه سوالی دشتم این فرمت دیتایی که میگن دقیقا یعنی چی ؟الام من میخوام با کارتخوان بانکی با AVR ارتباط برقرار کنم که یه پورت RS232روش داره از هر کی میپرسم میگه باید فرمت دیتاشو داشته باشی.ممنون میشم اگه راهنماییم کنید

    1395-11-27 در 08:53
  • پویان پاسخ

    سلام..با تشکر از شما دوست عزیز بابت این توضیحات عالی و مفصلتون..خودمونی حال کردم لالیگا.

    1396-02-02 در 11:26
  • متی پاسخ

    سلام نحو استفاده از دستور printf برای ارتباط از طریق usart 1 چگونه می باشد ؟

    1396-08-18 در 13:51
    • ادمین الکترو ولت پاسخ

      سلام دوست عزیز تابع printf فقط برای USART0 هستش و برای USART1 باید از sprintf دقیقا مشابه همون printf استفاده کنید با این تفاوت که دیتا ابتدا در یک آرایه ریخته میشه و سپس با دستور puts1 ارسال میشه. دقت کنید تابع puts1 رو هم باید خودتون به صورت دستی قبل از main تعریف کنید

      1397-03-06 در 02:37
  • مریم پاسخ

    سلام
    خسته نباشین
    من میخوام از طریق ماژول وای فای و atmega16 یک led رو روشن و خاموش کنم !
    کد روشن و خاموش کردن led روی میکرو رو میخوام میشه کمکم کنین

    1397-03-03 در 19:14
    • ادمین الکترو ولت پاسخ

      سلام ممنونم روی سایت این پروژه هست کافیه esp8266 رو سرچ کنید

      1397-03-06 در 02:33
  • سعید پاسخ

    سلام
    من atmega رو توی کدویژن با clock 2mhz و باودریت 9600 برنامه ریزی کردم اما توی برنامه هایپرترمینال و برنامه های دیگه با 9600 جواب نمیده اصلا و روی 4800 جواب میده ، میخواستم بدونم مشکل کجاست؟
    روی 9600 و clock 1mhz هم برنامه رو اوکی کردم اما اصلا رو هیچ باودریتی جواب نگرفتم

    1398-04-26 در 13:37
  • pasha130 پاسخ

    با سلام و تشکر از سایت خوبتون
    علت قرار دادن کتابخونه stdlib توکد مثال 7 چیه و کاربرد این کتابخونه چیه؟

    1398-06-09 در 16:04
  • سعید پاسخ

    سلام . بنده کل کد بالا _شبیه سازی با ترمینال در کد ویژن و پروتِوس_را در هردو نرم افزار شبیه سازی کردم . یکبار فعال شد که دکمه B را زدم و دما را نشان داد. از ان پس هرکاری میکنم دیگر هیچی نشان نمیدهد. ممنون میشوم که راهنمایی کنید.اصلا دیگر صفحه ترمینال کد ویژن بعد از ران کردن باز نمیشود که بخواهد دما را نشان دهد.

    1399-10-29 در 16:21
  • رضا صباحی پاسخ

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

    1402-11-25 در 23:58

دیدگاهتان را بنویسید

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

بازگشت به آموزشگاه