اطلاعیه

Collapse
No announcement yet.

ارتباط سریال با چند وسیله ی جانبی

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    ارتباط سریال با چند وسیله ی جانبی

    من می خوام با چند وسیله ی جانبی که فقط RS232 رو ساپورت می کنن ارتباط برقرار کنم . این ارتباط هم به این صورت هست که فقط این وسایل دیتا می دن و من باید فقط گیرنده باشم . حالا چه جوری می تونم این 3-4 تا وسیله رو فقط با یک میکرو کنترل کنم؟ می خوام فقط از یک میکرو برای مدیریتشون استفاه کنم.

    #2
    پاسخ : ارتباط سریال با چند وسیله ی جانبی

    سلام
    شما می تونی در برنامه وسایلی که دیتا می دن تغییراتی داشته باشی یا نه؟
    راه حل پیش نهادی اینجوری که به هر کدوم از دستگاههای جانبی یک آدرس اختصاص بدی. بعد با ایجاد یک شبکه بین آنها با توپولوژی باس مشترک، یک فریم تعریف کنی که شامل این بایتها باشه:
    1) بایت شروع فریم 2) بایت آدرس فرستنده 3) بایت آدرس گیرنده 4) نوع دستور 5) داده های احتمالی 6) بایت پایان فریم 7) بایت کنترل خطا
    البته بایت کنترل خطا شاید زیاد لازم نباشه ولی در ساده ترین حالی می شه از تکنیک checksum استفاده کرد. بقیه راه ها مثل CRC الگوریتم های خاص خودش داره.
    همچنین در این شبکه ای که شما گفتید چون دستگاهها فقط فرستنده هستند بنابراین کنترل شبکه خیلی ساده تره. در صورتی که اگر دستگاههای مذکور خود مختار باشند کنترل شبکه پیچیده تر می شه.
    چیدن یک ساختار و کنترلر شبکه بحث خوبی که می تونه اینجا شروع بشه.

    دیدگاه


      #3
      پاسخ : ارتباط سریال با چند وسیله ی جانبی

      این وسیله ی جانبی فقط 3 تا پین داره : Vcc , GND , TX . شما فکر کنید می خواین 3 تا از این وسایل و راه اندازی کنید در نتیجه 3 تا خط دارید که مدام دارن دیتا میدن . حالا چه جوری می خواین اینا رو آدرس دهی کنید؟

      دیدگاه


        #4
        پاسخ : ارتباط سریال با چند وسیله ی جانبی

        من فکر می کنم باید با یه فاصله زمانی بین وسایل سوئیچ کنی

        دیدگاه


          #5
          پاسخ : ارتباط سریال با چند وسیله ی جانبی

          اگه فقط گیرنده باشی میشه.
          هرکدوم از دیتا ها را به هر پایه ای که دوست داشتید وصل کنید.
          پورت سریال رو تو حالتی بذار که یه خروجی پالس کلاک هم بده. حالا اون خروجی رو به پایه INT0 بده و وقفه اش رو فعال کن. حالا تو هر بار که وقفه INT0 رخ میده تو ISR اون از تمام پایه هایی که برای ورودی در نظر گرفتی رو نمونه بگیر و شیفت بده و بعد از ده بار حالا یک بایت رو دریافت کردی. البته باید Stop bit و Start Bit رو نرم افزاری تشخیص بدین.
          یه نکته اینه که این کار رو برای ارسال چند خطه هم می شه کرد. ولی باید تمام کارها نرم افزاری باشه. البته می تونید یکی از دیتا هاتون رو با سخت افزار ساپورت کنید و بقیه رو نرافزاری . ولی چندان فرق نمی کنه.
          البته میتونین سرریز تایمر رو هم طوری تنظیم کنید که با rate دیتا هاتون یکی بشه و اونموقع دیگه اصلا با پورت سریال کاری ندارید.
          بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
          اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

          دیدگاه


            #6
            پاسخ : ارتباط سریال با چند وسیله ی جانبی

            سلام
            چون هیچ کنترلی روی ارسال آنها نداری، یا باید خطوط Tx رو سوئیچ کنی مثلا با مالتی پلکسر یا اگر با بسکام کار می کنی و تعداد دستگاههات محدود هستند برای هر کدام USART نرم افزاری تعریف کنی. البته در هر صورت ممکن است داده هایی از ارسالهای متوالی را از دست بدهید. اگر داده ها برات مهم نیست، ببین از کدام یک از این راهها می تونی استفاده کنی.

            دیدگاه


              #7
              پاسخ : ارتباط سریال با چند وسیله ی جانبی

              کسی می تونه تو نوشتن USART نرم افزاری بهم کمک کنه؟

              دیدگاه


                #8
                پاسخ : ارتباط سریال با چند وسیله ی جانبی

                سلام
                به 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

                دیدگاه


                  #9
                  پاسخ : ارتباط سریال با چند وسیله ی جانبی

                  نوشته اصلی توسط حامد جعفری
                  من فکر می کنم باید با یه فاصله زمانی بین وسایل سوئیچ کنی
                  میشه این کار رو با ترانزیستور NPN انجام داد؟ مثلاً برای کنترل دو وسیله دو تا ترانزیستور برداری کلکتورهاش به هم و به RX وصل بشه و هر کدو از امیتر ها به یه وسیله؟ بیسشونم که با یه مقاومت به دو تا پایه ی میکرو بره ؟ درسته؟

                  دیدگاه

                  لطفا صبر کنید...
                  X