UART مخفف کلمات Universal Asynchronous Receiver and Transmitter است که برای ارسال و دریافت اطلاعات بین دو وسیله استفاده میشود و غالبا برای ارتباط :
PC-to-PC
PC-to-micro controller
micro controller-to-micro controller
استفاده میگردد.
در ارتباط سریال از سطوح ولتاژ TTL صفر و 5 ولت و یا LVTTL بسته به ولتاژ تغذیه میکرو استفاده میشود.
در تصویر زیر شکل کانکتور و شماتیک اتصال MAX232 به میکرو و تصویر خود آی سی Max232 نشان داده شده است.
کانکتور DB-9 دارای 9 پین است که برای ارتباط سریال فقط به 3 پین آن نیاز داریم.در تصویر بالا نمای روبروی کانکتور نشان داده شده و برای لحیم کاری باید از پایه های سمت دیگر استفاده کنید.
اگر میکروکنترولر شما فاقد UART است شما از UART نرم افزاری میتوانید استفاده کنید که در زیر توضیح داده شده است. در صورتیکه میکرو دارای یک UART است، پین های TxD و RxD را به TxD و RxD شماتیک بالا وصل کنید. اگر میکروکنترولر بیش از یک UART دارد، پین های TxD0 و RxD0 را به TxD و RxD شماتیک بالا متصل کنید.
در این مرحله شما نیاز دارید که برنامه را مقدار دهی اولیه کنید. برای این منظور یک فایل جدید bas را باز کنید و کدهای زیر را در ابتدای برنامه اضافه کنید.
:کد |
$regfile = "your micro here def.dat" $crystal = 8000000 $baud = 19200 |
حتما میکروکنترولر خود را بعد از عبارت $regfile تعریف کنید، بعنوان مثال اگر میکروی شما ATMega32 است :
:کد |
$regfile = "m32def.dat" |
برخی از میکروهای جدید دارای اسیلاتور داخلی هستند و همچنین برخی بصورت پیش فرض بر روی اسیلاتور داخلی پیکربندی شده اند. استفاده از اسیلاتور داخلی به معنای عدم نیاز به استفاده از اسیلاتور خارجی است.
این مرحله را در صورتیکه اسیلاتور داخلی وجود دارد انجام دهید
پروگرمر BASCOM-AVR را مطابق زیر باز کنید :
تب “Lock and Fuse Bits” را انتخاب کنید و پنجره پروگرمر را ماکزیمایز کنید.
- بررسی کنید در بخش “Fusebit” بصورت زیر باشد :
:کد |
"1:Divide Clock by 8 Disabled" |
و
:کد |
"Int. RC Osc. 8 MHz; Start-up time: X CK + X ms; [CKSEL=XXXX SUT=XX]" |
این تنظیمات در تمامی AVR ها وجود ندارد، در صورتیکه چنین تنظیماتی وجود نداشت، هیچکدام از فیوز بیتها را تغییر ندهید.
در صورتیکه این تنظیمات وجود داشتند اما در وضعیت درست نبودند. آنها را توسط منو کشوئی با کلیک کردن بروی گزینه دیگر فیوز تغییر دهید. نهایتا بر روی دکمه "Program FS" کلیک کنید. بر روی دکمه "Refresh" کلیک کنید تا مقادیر واقعی این فیوز بیتها را ببینید.
اکنون یک کابل تخت را بین کانکتورهای DB-9 سمت میکرو و سمت کامپیوتر وصل کنید.
یک برنامه آزمایشی را در میکرو پروگرم کنید، این برنامه باید مثل برنامه زیر باشد :
:کد |
$regfile = "m32def.dat" "Define your own $crystal = 8000000 $baud = 19200 Do Print "Hello World" Waitms 25 Loop End |
اکنون برنامه ترمینال BASCOM-AVR را باز کنید و ارتباط را توسط کلیک کردن بر روی :
:کد |
“Terminal” -> “Settings” |
تنظیم کنید و پورت COM کامپیوتر را انتخاب کنید و موارد زیر را انتخاب کنید :
:کد |
baud 19200, Parity none, Data bits 8, Stop bits 1, Handshake none, emulation none |
در صورتیکه در پنجره ترمینال امولاتور BASCOM-AVR عبارت Hello World را مشاهده کردید تنظیمات را بدرستی انجام داده اید.
مثال :
شما میتوانید مثال زیر را نیز اجرا کنید توسط این چگونگی ارسال و دریافت را توسط دستورات مختلف نشان میدهد :
:کد |
$regfile = "m88def.dat" $crystal = 8000000 $baud = 19200 Dim Akey As Byte "Here we declare a byte variable Print Print "Hello, hit any alphanumerical key..." Akey = Waitkey() "Waitkey waits untill a char is received from the UART Print Akey
Wait 1 Print Print "Thanks!, as you could see the controller prints a number" Print "but not the key you pressed." Wait 1 Print Print "Now try the enter key..." Akey = Waitkey() Akey = Waitkey() Print Akey Print Print "The number you see is the ASCII value of the key you pressed." Print "We need to convert the number back to the key..." Print "Notice what this line does Print "Please try an alphanumerical key again..." Akey = Waitkey() Print Chr(akey) "Notice what this does Print "That"s fine!" Wait 1 Print Print "For a lot of functions, just one key is not enough..." Print "Now type your name and hit enter to confirm"
Dim Inputstring As String * 12 "Declare a string variable here Do Akey = Waitkey() If Akey = 13 Then Goto Thanks "On enter key goto thanks Inputstring = Inputstring + Chr(akey) "Assign the string Loop
Thanks: Print "Thank you " ; Inputstring ; " !" "Notice what ; does
Wait 1 Print Print "Take a look at the program code and try to understand" Print "how this program works. Also press F1 at the statements" Print Print "If you understand everything continue to the next experiment" End |
اسکی :
همانطور که در مثال بالا دیده شد ما از دستور PRINT برای ارسال هر چیزی به UART استفاده کردیم. در واقع ما چیزی جز متن ارسال نکردیم. ما کاراکترهای ASCII را ارسال نمودیم. ASCII مخفف American Standard Code for Information Interchange به معنای کد استاندارد آمریکائی برای تبادل اطلاعات است. اساسا ASCII یک لیست از 127 کاراکتر است.
شما میتوانید جدول کامل ASCII را در اینجا مشاهده کنید.
کدهای CR و LF :
در مثال قبلی شما مشاهده کردید که دومین عبارت PRINT متن را در خط بعدی چاپ میکند. در حقیقت دستور PRINT همیشه کدهای CR و LF را اضافه میکند.
بصورت ابتدایی ما با عبارت :
ما کدهای زیر را به UART ارسال میکنیم :
کد 13 مکان نما را به ابتدای خط جاری برمیگرداند و کد 10 آنرا به خط بعدی میبرد.
زمانیکه ما سمیکالن ";" را در انتهای دستور تایپ میکنیم ...
بسکام کدهای 13 و 10 را ارسال نمیکند. پس شما میتوانید متن دیگر را بعد از ABC و در همان خط چاپ میکند.
:کد |
Print “ABC” ; Chr(13) ; |
در کد بالا کد 13 ارسال میشود و عبارت print بعدی بروی ABC باز نوشته خواهد شد.
نمای کلی :
در اینجا برخی دیگر از دستورات که میتوان برای ارتباط UART استفاده نمود آورده شده است :
Waitkey تا کاراکتری بافر سریال دریافت کند تاخیر ایجاد میکند.
مقدار 1 را در صورتیکه در بافر سخت افزاری UART کاراکتری در انتظار باشد را برمیگرداند.
Inkey نخستین کاراکتر اسکی موجود در بافر سریال را برمیگرداند.
Print یک رشته را به UART ارسال میکند.
مثال دیگر :
این مثال نشان میدهد که چگونه به استفاده از Ischarwaiting برای تست زده شدن کلید است. در صورتیکه کلیذی زده شد آنرا میخواند.
:کد |
"Print "Press B key to start" Dim Serialcharwaiting As Byte, Serialchar As Byte Serialcharwaiting = Ischarwaiting() "Check if B or b pressed then goto If Serialcharwaiting = 1 Then Serialchar = Inkey() If Serialchar = 66 Or Serialchar = 98 Then Goto MyRoutine End If End If Goto Main Myroutine: "Statements Main: "Statements End |
بافر نمودن اطلاعات سریال :
در صورتیکه ارتباط سریال سرعت بالا داشته باشیم حتما باید از بافر ورودی و خروجی سریال استفاده کنیم. این بافر کردن توسط بسکام انجام شده و فقط برای UART سخت افزاری استفاده میشود.
برای پیکربندی بافر جهت استفاده در UART ، شما نیاز به استفاده از عبارت Config دارید.
:کد |
Config Serialout = Buffered , Size = 20 |
و یا
:کد |
Config Serialin = Buffered , Size = 20 |
اطلاعات بیشتر را میتوانید در HELP بسکام عبارت "config serialin" را جستجو کنید.
و نیز برنامه نمونه “RS232BUFFER.BAS” را در فولدر مثالهای بسکام میتوانید مشاهده کنید.
UART نرم افزاری :
در مثال قبلی ما از UART سخت افزاری استفاده کردیم. و این به معنای این است که کمپایلر از رجیسترهای داخلی UART و سخت افزار داخلی RxD , TxD استفاده میکند.اگر شما UART سخت افزاری نداشته باشید میتوانید از UART نرم افزاری استفاده کنید.
کمپایلر بسکام بسادگی UART اضافه را ایجاد میکند. کمپایلر بسکام بصورت مجازی UART نرم افزاری را بر روی هر پینی از پورتها ایجاد میکند.
بخاطر داشته باشید که UART نرم افزاری به اندازه UART سخت افزاری مطمئن نیست. بدین صورت که در هنگامی که شما از وقفه ها استفاده میکنید ممکن است که با مشکلات زمانبندی مواجه شوید.
در این مثال ما پین های portc.1 و portc.2 از میکروکنترولر را.
portc.1 به TxD و portc.2 به RxD در شماتیک بالا متصل کنید.
:کد |
$regfile = "m88def.dat" $crystal = 8000000 $baud = 19200 Dim B As Byte Waitms 100 "Open a TRANSMIT channel for output Open "comc.1:19200,8,n,1" For Output As #1 Print #1 , "serial output" "Now open a RECEIVE channel for input Open "comc.2:19200,8,n,1" For Input As #2 "Since there is no relation between the input and output pin "there is NO ECHO while keys are typed Print #1 , "Press any alpha numerical key" "With INKEY() we can check if there is data available "To use it with the software UART you must provide the channel Do "Store in byte B = Inkey(#2) "When the value > 0 we got something If B > 0 Then Print #1 , Chr(b) "Print the character End If Loop Close #2 "Close the channels Close #1 End |
بعد از پروگرم کردن میکرو و اتصال به کابل سریال، ترمینال امولاتور را توسط کلیک کردن بر روی در بسکام را اجرا کنید.
درخواستهای برنامه را در محیط متنی مشاهده خواهید نمود و از طریق این برنامه به آن پاسخ دهید.
این متن توسط سایت www.HLachini.com و از روی راهنمای نرم افزار بسکام ترجمه شده است.