من می خوام با چند وسیله ی جانبی که فقط RS232 رو ساپورت می کنن ارتباط برقرار کنم . این ارتباط هم به این صورت هست که فقط این وسایل دیتا می دن و من باید فقط گیرنده باشم . حالا چه جوری می تونم این 3-4 تا وسیله رو فقط با یک میکرو کنترل کنم؟ می خوام فقط از یک میکرو برای مدیریتشون استفاه کنم.
اطلاعیه
Collapse
No announcement yet.
ارتباط سریال با چند وسیله ی جانبی
Collapse
X
-
پاسخ : ارتباط سریال با چند وسیله ی جانبی
سلام
شما می تونی در برنامه وسایلی که دیتا می دن تغییراتی داشته باشی یا نه؟
راه حل پیش نهادی اینجوری که به هر کدوم از دستگاههای جانبی یک آدرس اختصاص بدی. بعد با ایجاد یک شبکه بین آنها با توپولوژی باس مشترک، یک فریم تعریف کنی که شامل این بایتها باشه:
1) بایت شروع فریم 2) بایت آدرس فرستنده 3) بایت آدرس گیرنده 4) نوع دستور 5) داده های احتمالی 6) بایت پایان فریم 7) بایت کنترل خطا
البته بایت کنترل خطا شاید زیاد لازم نباشه ولی در ساده ترین حالی می شه از تکنیک checksum استفاده کرد. بقیه راه ها مثل CRC الگوریتم های خاص خودش داره.
همچنین در این شبکه ای که شما گفتید چون دستگاهها فقط فرستنده هستند بنابراین کنترل شبکه خیلی ساده تره. در صورتی که اگر دستگاههای مذکور خود مختار باشند کنترل شبکه پیچیده تر می شه.
چیدن یک ساختار و کنترلر شبکه بحث خوبی که می تونه اینجا شروع بشه.
-
پاسخ : ارتباط سریال با چند وسیله ی جانبی
اگه فقط گیرنده باشی میشه.
هرکدوم از دیتا ها را به هر پایه ای که دوست داشتید وصل کنید.
پورت سریال رو تو حالتی بذار که یه خروجی پالس کلاک هم بده. حالا اون خروجی رو به پایه INT0 بده و وقفه اش رو فعال کن. حالا تو هر بار که وقفه INT0 رخ میده تو ISR اون از تمام پایه هایی که برای ورودی در نظر گرفتی رو نمونه بگیر و شیفت بده و بعد از ده بار حالا یک بایت رو دریافت کردی. البته باید Stop bit و Start Bit رو نرم افزاری تشخیص بدین.
یه نکته اینه که این کار رو برای ارسال چند خطه هم می شه کرد. ولی باید تمام کارها نرم افزاری باشه. البته می تونید یکی از دیتا هاتون رو با سخت افزار ساپورت کنید و بقیه رو نرافزاری . ولی چندان فرق نمی کنه.
البته میتونین سرریز تایمر رو هم طوری تنظیم کنید که با rate دیتا هاتون یکی بشه و اونموقع دیگه اصلا با پورت سریال کاری ندارید.بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست
دیدگاه
-
پاسخ : ارتباط سریال با چند وسیله ی جانبی
سلام
چون هیچ کنترلی روی ارسال آنها نداری، یا باید خطوط Tx رو سوئیچ کنی مثلا با مالتی پلکسر یا اگر با بسکام کار می کنی و تعداد دستگاههات محدود هستند برای هر کدام USART نرم افزاری تعریف کنی. البته در هر صورت ممکن است داده هایی از ارسالهای متوالی را از دست بدهید. اگر داده ها برات مهم نیست، ببین از کدام یک از این راهها می تونی استفاده کنی.
دیدگاه
-
پاسخ : ارتباط سریال با چند وسیله ی جانبی
سلام
به Help بسکام مراجعه کنی خیلی بهتره. تو Search بزن Softeare UART. من چند نکته و کد از Help بسکام می ذارم. با این حال به اون جا هم نگاه کن.
The previous examples used the hardware UART. That means the compiler uses the internal UART registers and internal hardware (RxD(0) and TxD(0)) of the AVR. If you don’t have a hardware UART you can also use a software UART.یک نکته که نباید فراموش بشه:
The Bascom compiler makes it easy to “create” additional UART’s. Bascom creates software UART’s on virtually every port pin.
Remember that a software UART is not as robust as a hardware UART, thus you can get timing problems if you have lots of interrupts in your programدر ادامه:
For this example we use micro controller pins portc.1 and portc.2.
Connect portc.1 to TxD and portc.2 to RxD see the schematic above.
Change the $regfile and program this example:
$regfile = "m88def.dat"
$crystal = 8000000
$baud = 19200
Dim B As Byte
Waitms 100
'Open a TRANSMIT channel for output
برای تعریف خط Tx از دید میکرو' Open "comc.1:19200,8,n,1" For Output As #1
Print #1 , "serial output"
'Now open a RECEIVE channel for input
برای تعریف خط Rx از دید میکرو' 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
دیدگاه
-
پاسخ : ارتباط سریال با چند وسیله ی جانبی
نوشته اصلی توسط حامد جعفریمن فکر می کنم باید با یه فاصله زمانی بین وسایل سوئیچ کنی
دیدگاه
دیدگاه