راه اندازی پورت سریال UART
ارتباطی سریال و قابل برنامه ریزی که در دو حالت نرم افزاری و سخت افزاری قابل تغییر است. این ارتباط بیشتر برای ارتباط با کامپیوتر طراحی شده اما منطق کار این ارتباط TTL است.
نکته : سطح ولتاژ در منطق TTL بین 0 تا 5 ولت بوده و در پروتکل RS-232 بین منفی 15 تا مثبت 15 ولت می باشد.
نکته : پایه های مورد استفاده در این ارتباط در میکروکنترلر AVR به نام TXD و RXD می باشد. در صورت استفاده از UART نرم افزاری, این پایه ها را می توان تغییر داد.
ارتباط بین میکرو کنترلر و استاندارد RS232
در صورت استفاده از ارتباط سریال uart بین میکرو کنترلر و استانداد RS232 باید از تراشه های تبدیل سطح ولتاژ استفاده کرد.
تراشه MAX232 و MAX233 : این تراشه ها برای انتقال اطلاعات بین استاندارد RS232 (کامپیوتر) و میکرو کنترلر AVR به کار می رود. لازم به ذکر است تنها تفاوت بین این دو نوع تراشه در این می باشد که برای راه اندازی تراشه MAX232 شما احتیاج به استفاده از چندین خازن دارید, اما در تراشه MAX233 احتیاج به استفاده از هیچ خازنی ندارید.
تراشه MAX235 : این تراشه برای میکروکنترلرهایی قابل استفاده هستند که دارای دو UART بوده با اینکه هم از UART سخت افزاری و هم نرم افزاری استفاده شده است.
نحوه اتصال کامپیوتر از طریق پورت سریال توسط آی سی MAX232 به میکروکنترلر AVR
نحوه اتصال کامپیوتر از طریق پورت سریال توسط آی سی MAX233 به میکروکنترلر AVR
نحوه اتصال کامپیوتر از طریق پورت سریال توسط آی سی MAX235 به میکروکنترلر AVR
UART سخت افزاری
در این حالت از پایه هایی استفاده می شود که در کاتالوگ میکروکنترلرها با نام RXD و TXD است. قبل از پیکر بندی و معرفی این ارتباط سریال باید سرعت و نرخ ارسال دیتا بین میکروکنترلر و هر سیستم دیگری برابر باشد تا دیتاهای صحیح بین آنها تبادل شود. به این نرخ باود (Baud) گفته می شود که تعیین کننده سرعت بین دو سیستم است. نرخ باود همیشه تقسیمی از فرکانس میکرو تنظیم شود چون باعث کاهش خطای میکرو می شود.
تعیین نرخ باود به زبان بیسیک BASIC
1 |
$ baud = x |
در اول برنامه باید این نرخ تعیین شود.
X : مقادیر استاندارد مانند :1200-2400-4800-9600-19200-28800-38400-57600-115200
تعیین نرخ باود دوم در زبان بیسیک BASIC
1 |
$baud1=x |
در میکروهایی که دارای دو ارتباط سریال Uart هستند برای تعیین نرخ باود دوم استفاده می شود.
تغییر نرخ باود در برنامه به زبان بیسیک BASIC
1 2 3 |
Baud = x Baud1 = x |
در صورتی که بخواهید با یک Uart میکرو با سیستم های مختلف ارتباط برقرار کنید و هر سیستم سرعت خاص خود را داشته باشد این دستورات کاربرد دارند. این دستورات برای دو Uart در هر جای برنامه سرعت نرخ را تغییر دهید.
نکته : سرعت Baud سیستم دریافت کننده و ارسال کننده باید برابر باشد.
پیکر بندی بافر Uart سخت افزاری برای ارسال دیتا
1 |
Config Serialout = Buffered , Size = x |
این دستور در حقیقت یک فضا به میزان x بایت در حافظه Sram اشغال می کند تا داده های ارسالی از طریق این بافر به خروجی ارسال شود.
نکته : در صورت استفاده از Terminal Emulator می توان داده های ارسالی از میکرو را مشاهده کنید.
دستور ارسال دیتا به پورت سریال در زبان بیسیک BASIC
1 2 3 4 |
Print var Print "www.electronics98.com" Print var ; "الکترونیک 98" |
با این دستور شما می توانید به پورت سریال داده رشته یا عددی و یا هر دو را انتقال دهید.
دستور ارسال دیتا به پورت سریال به صورت باینری
1 |
Printbin var |
این دستور متغیر var را به صورت باینری به پورت سریال ارسال می کند.
پیکر بندی بافر Uart سخت افزاری برای دریافت دیتا
1 |
Config Serialin = Buffered , Size = x |
این دستور در حقیقت یک فضا به میزان x بایت در حافظه Sram اشغال می کند تا داده های دریافتی از طریق این بافر به میکرو وارد می شود.
دستور دریافت دیتا از پورت سریال
1 |
Var = waitkey() |
در هنگام برنامه نویسی با این دستور شما می توانید از پورت سریال داده رشته یا عددی دریافت کنید و در متغیر var قرار می دهد. اما این دستور تا کارکتری را دریافت نکند برنامه را متوقف می کند.
دریافت داده از پورت سریال
1 |
Var = inkey() |
این دستور برنامه را متوقف نمی کند و اولین کارکتر دریافت شده از پورت سریال را به کد اسکی تبدیل کرده و در متغیر var می ریزد. در صورتی که داده ای برای دریافت وجود نداشته باشد عدد صفر را در var قرار می دهد.
نکته : متغیر var نمی تواند Bit و یا String باشد.
دریافت داده از terminal emulator
1 |
Input [ "data" ] , var [ noecho ] |
با این دستور می توان از طریق کیبرد متصل به کامپیوتر و وارد کردن داده در نرم افزار Bascom و در صفحه Terminal Emulator مقادیر داده را دریافت و در متغیر var قرار داد.
Noecho : در صورت وجود این گزینه با تایپ کردن در محیط Terminal Emulator مقادیر نمایش داده نخواهد شد.
Data : متنی که می توانید قبل از دریافت داده در محیط Terminal Emulator نمایش دهید.
1 |
Input "لطفا رمز ورود خود را وارد نمائید : ", Pass |
دریافت داده باینری از Terminal Emulator
1 |
Inputbin [ "data" ] , var [ noecho ] |
با این دستور می توان از طریق کیبرد متصل به کامپیوتر و وارد کردن داده در نرم افزار Bascom و در صفحه Terminal Emulator مقادیر داده را دریافت و در متغیر var قرار داد.
Noecho : در صورت وجود این گزینه با تایپ کردن در محیط Terminal Emulator مقادیر نمایش داده نخواهد شد.
Data : متنی که می توانید قبل از دریافت داده در محیط Terminal Emulator نمایش دهید.
دریافت داده هگزاد سیمال از Terminal Emulator
1 |
Inputhex [ "data" ] , var [ noecho ] |
با این دستور می توان از طریق کیبرد متصل به کامپیوتر و وارد کردن داده در نرم افزار Bascom و در صفحه Terminal Emulator مقادیر داده را دریافت و در متغیر var قرار داد.
Noecho : در صورت وجود این گزینه با تایپ کردن در محیط Terminal Emulator مقادیر نمایش داده نخواهد شد.
Data : متنی که می توانید قبل از دریافت داده در محیط Terminal Emulator نمایش دهید.
نکته : هر بایت مشخص کننده یک کارکتر است. پس زمانی که شما یک متغیر از نوع Byte را می خواهید ارسال یا دریافت کنید سیستم به تعداد کارکترها منتظر می ماند. برای مثال اگر از دستور input استفاده کرده اید و متغیر شما از نوع Integer می باشد در محیط Terminal Emulator تا دو کارکتر را تایپ نکنید داده ها ارسال و در میکرو دریافت نمی شوند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$regfile = "m88def.dat" $crystal = 8000000 $baud = 19200 Dim akey as byte Print "hello , hit any alphanumerical key…" Akey = waitkey() Print akey Wait 1 Print "but not the key you pressed." Dim inputstring as string * 12 Do Akey = inkey() Koop End |
UART نرم افزاری
در این حالت از پایه هایی استفاده می شود که شما به میکرو معرفی خواهید کرد. برای Uart نرم افزاری باید تمامی اطلاعات پایه های ارتباطی را شرح داد. از قابلیت های این ارتباط, استفاده از چندین کانال برای ارتباط سریال با سیستم های مختلف می باشد.
پیکر بندی Uart نرم افزاری در زبان بیسیک BASIC
1 |
Open "compin : speed , data , parity , stopbits [ , inverted ]" for mode as # channel |
Pin : نام پایه پورت.
Speed : سرعت نرخ ارسال دیتا.
Data : مشخص کننده تعداد بیت ارسال یا دریافتی با این پایه (7 یا 8 بیتی).
Parity : مشخص کننده خصوصیت دیتای ارسال یا دریافتی با این پایه (0 برای فرد – e برای زوج – n برای هر دو).
Stopbits : مشخصه ای که میزان فاصله بین دو داده ارسالی یا دریافتی را مشخص میکند (1 یا 2 بیت).
Inverted : این گزینه منطق ولتاژ ارتباط RS232 را معکوس می کند (در صورتی که در خروجی از بافر Not استفاده شده باشد کاربرد دارد).
Mode : ورودی یا خروجی بودن پایه را تعیین می کند. Input برای ورودی (RXD) و گزینه Output برای خرجی (Txd).
Channel : مشخص کننده عدد کانال.
تعیین نرخ باود در Uart نرم افزاری
1 |
$baud # channel , x |
در اول برنامه این نرخ تعیین می شود.
X : مقادیر استاندارد مانند: 1200-2400-4800-9600-19200-28800-38400-57600-115200
تعیین نرخ باود دوم در Uart نرم افزاری
1 |
$baud1 # channel , x |
در میکروهایی که دارای دو ارتباط سریال Uart هستند برای تعیین نرخ باود دوم استفاده می شود.
تغییر نرخ باود در برنامه برای Uart نرم افزاری
1 2 3 |
Baud # channel , x Baud1 # channel , x |
در صورتی که بخواهید با یک Uart میکرو با سیستم های مختلف ارتباط برقرار کنید و هر سیستم سرعت خاص خود را داشته باشد این دستورات کاربرد دارند. این دستورات برای دو UART , در هر جای برنامه سرعت نرخ را تغییر دهید.
نکته : سرعت BAUD سیستم دریافت کننده و ارسال کننده باید برابر باشد.
خروج از کانال UART نرم افزاری
1 |
CLOSE # CHANNEL |
دستورات ارسال دیتا به پورت سریال نرم افزاری
1 2 3 4 |
PRINT # CHANNEL , VAR Print # channel , "www.electronics98.com" Print # channel , var; "الکترونیک 98" |
با این دستور شما می توانید به پورت سریال داده شده رشته یا عددی و یا هر دو را انتقال دهید.
دستور ارسال دیتا به پورت سریال نرم افزاری به صورت باینری
1 |
Printbin # channel , var |
این دستور متغیر var را به صورت باینری به پورت سریال ارسال می کند.
دستور دریافت دیتا از پورت سریال نرم افزاری
1 |
Var = waitkey(# channel) |
با این دستور شما می توانید از پورت سریال داده رشته یا عددی دریافت کنید و در متغیر var قرار می دهد. اما این دستور تا کارکتری را دریافت نکند, برنامه را متوقف می کند.
دریافت داده از پورت سریال نرم افزاری
1 |
Var = inkey(# channel) |
این دستور برنامه را متوقف نمی کند و اولین کارکتر دریافت شده از پورت سریال را به کد اسکی تبدیل کرده و در متغیر var می ریزد. در صورتی که داده ای برای دریافت وجود نداشته باشد عدد صفر را در war قرار می دهد.
نکته : متغیر var نمی تواند Bit و یا String باشد.
دریافت داده از Terminal Emulator
1 |
Input # channel , [ "data" ] , var [ noecho ] |
با این دستور می توان از طریق کیبرد متصل به کامپیوتر و وارد کردن داده در نرم افزار Bascom و در صفحه Terminal Emulator مقادیر داده را دریافت و در متغیر var قرار داد.
Noecho : در صورت وجود این گزینه , با تایپ کردن در محیط Terminal Emulator مقادیر نمایش داده نخواهد شد.
Data : متنی که می توانید قبل از دریافت داده در محیط Terminal Emulator نمایش دهید.
دریافت داده باینری از Terminal Emulator
1 |
Inputbin # channel , [ "data" ] , var [ noecho ] |
با این دستور می توان از طریق کیبرد متصل به کامپیوتر و وارد کردن داده در نرم افزار Bascom و در صفحه Terminal Emulator , مقادیر داده را دریافت و در متغیر var قرار داد.
Noecho : در صورت وجود این گزینه, با تایپ کردن در محیط Terminal Emulator مقادیر نمایش داده نخواهد شد.
Data : متنی که می توانید قبل از دریافت داده در محیط Terminal Emulator نمایش دهید.
دریافت داده هگزاد سیمال از Terminal Emulator
1 |
Inputhex # channel , [ "data"] , var [ noecho ] |
با این دستور می توان از طریق کیبرد متصل به کامپیوتر و وارد کردن داده در نرم افزار Bascom و در صفحه Terminal Emulator مقادیر داده را دریافت و در متغیر var قرار داد.
Noecho : در صورت وجود این گزینه با تایپ کردن در محیط Terminal Emulator مقادیر نمایش داده نخواهد شد.
Data : متنی که می توانید قبل از دریافت داده در محیط Rerminal Emulator نمایش دهید.
نکته : هر بایت مشخص کننده یک کارکتر است پس زمانی که شما یک متغیر از نوع Byte را می خواهید ارسال یا دریافت کنید سیستم به تعداد کارکترها منظر می ماند. برای مثال اگر از دستور Input استفاده کرده اید و متغیر شما از نوع Integer می باشد در محیط Terminal Emulator تا دو کارکتر را تایپ نکنید داده ها ارسال و در میکرو یافت نمی شوند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$regfile = "m88def.dat" $crystal = 8000000 $baud = 19200 Dim b as byte Waitms 100 Open "comc.a:19200,8,n1"for output as # 1 Print#1 , "serial output" Open "comc.2:19200,8,n,1" for input as # 2 Print # 1 , "press any alpha numerical key" Do B = inkey(#2) If b > 0 then Print #1, chr (b) End lf Loop Close #2 Close #1 End |
مطالب شما کاربردی قابل فهم و به انسان جرات فراگیری رو میده ممنون زحمت کشیدید
مطالب مهم و ارزشمندی رو به سادگی بیان کردین متشکرم
سلام . ببخشید اگر توی برنامه بیسیک بخواهیم کتترل سرعت یک موتور دی سی را با ads و با مقاومت متغیر راه اندازی کنیم چگونه باید اطلاعات رو ارسال گرد هر کار کردم نمیشه