اطلاعیه

Collapse
No announcement yet.

مفهوم baudrate و حداکثر سرعت پورت سریال

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

    مفهوم baudrate و حداکثر سرعت پورت سریال

    تا جایی که یادم میاد بودریت تعداد بیت ارسالی در واحد ثانیه است.یعنی مثلا اگر بودریت 9600 باشد؛ با توجه به اینکه 2 بیت را به پریتی و یک بیت را به آغاز و یک بیت را به پایان ارسال هر بیت اختصاص می دهیم ؛پس هر 12 بیتی که ارسال میکنیم یک بایت را می توانیم دریافت کنیم.پس حداکثر تعداد بایت دریافتی با بود 9600 بابر 9600/12 است که بابر 800 بیت در ثانیه میشه!
    اما من برنامه مدارمو در بسکام نوشتم و سرعت دریافت فوقالعاده پایین تر است!!!!
    میخوام بدونم مشکل در محاسبات منه یا اینکه نحوه دریافت و ارسالم درست نیست؟
    لازم به توضیحه که بایت های داده دریافتی کاملا صحیح هستند و اطلاعات هیچ مشکلی ندارند فقط سرعت با روشی که من محاسبه میکنم جور در نمیاد!!!
    پیشاپیش ممنون از پاسخ

    #2
    پاسخ : مفهوم baudrate و حداکثر سرعت پورت سریال

    سلام.
    نرخ بودریت بسیار وابسته هست به کریستال و فرکانس میکرو ولی دقیق نمی دونم چقدر . اگه خواستین بگین تا یکم کتاب بخونم :read:ببینم چه جوری بود. :rolleyes:
    تاپیک جامع سیستم مدیریت ساختمان BMS و خانه هوشمند Smart Home
    دانلود مجموعه آموزشی شرکت Altium ا (Altium Training)
    مقالات و فایل های آموزشی نرم افزار Labview
    حل مشکل درایور و راه اندازی FT232 های غیراورجینال

    دیدگاه


      #3
      پاسخ : مفهوم baudrate و حداکثر سرعت پورت سریال

      نوشته اصلی توسط hamedhamidi
      تا جایی که یادم میاد بودریت تعداد بیت ارسالی در واحد ثانیه است.یعنی مثلا اگر بودریت 9600 باشد؛ با توجه به اینکه 2بیت را به پریتی و یک بیت را به آغاز و یک بیت را به پایان ارسال هر بیت اختصاص می دهیم ؛پس هر 12 بیتی که ارسال میکنیم یک بایت را می توانیم دریافت کنیم.پس حداکثر تعداد بایت دریافتی با بود 9600 بابر 9600/12 است که بابر 800 بیت در ثانیه میشه!
      اما من برنامه مدارمو در بسکام نوشتم و سرعت دریافت فوقالعاده پایین تر است!!!!
      میخوام بدونم مشکل در محاسبات منه یا اینکه نحوه دریافت و ارسالم درست نیست؟
      لازم به توضیحه که بایت های داده دریافتی کاملا صحیح هستند و اطلاعات هیچ مشکلی ندارند فقط سرعت با روشی که من محاسبه میکنم جور در نمیاد!!!
      پیشاپیش ممنون از پاسخ
      پریتی یا نداریم یا یک بیت است.
      پایان میتواند یک بیت ، یک بیت و یک مصراع(!) و یا دو بیتی باشد.(با رباعی فرق میکنه :biggrin
      طبق فرمول خودتون 800 "بایت" صحیح است.

      ولی حالا از جدی گذشته (!) برنامتو بذار ببینم مشکلش چیه.

      دیدگاه


        #4
        پاسخ : مفهوم baudrate و حداکثر سرعت پورت سریال

        برنامه فرستنده:
        $regfile = "m32def.dat"
        $crystal = 11059200
        $swstack = 200
        $hwstack = 200
        $framesize = 200
        '-------------------------------------------------------------------------------
        $baud = 230400
        Config Serialout = Buffered , Size = 200
        Enable Interrupts
        '-------------------------------------------------------------------------------
        Dim J As Byte
        '-------------------------------------------------------------------------------
        Do


        For J = 1 To 100
        Printbin J
        Next J

        Loop

        End
        '-------------------------------------------------------------------------------




        که تو این برنامه با بالاترین بودریت ممکن avr اعداد 0 تا 100 رو میریزم توی پورت سریال



        $regfile = "m64def.dat"
        $crystal = 11059200
        $swstack = 200
        $hwstack = 200
        $framesize = 200
        '-------------------------------------------------------------------------------
        Config Porte.2 = Output
        '-------------------------------------------------------------------------------
        $baud1 = 230400
        Config Serialin1 = Buffered , Size = 200
        Open "com2:" For Binary As #2
        Enable Interrupts
        '-------------------------------------------------------------------------------
        Dim I As Word
        Dim A As Byte
        '-------------------------------------------------------------------------------
        Do
        Set Porte.2
        If Ischarwaiting(#2) = 1 Then
        Incr I
        A = Inkey(#2)
        Print #2 , A
        End If
        Loop Until I = 65000
        Reset Porte.2
        End
        '-------------------------------------------------------------------------------


        برنامه گیرنده که توش گفتم حداکثر 65000 بایت رو بگیر

        حالا گه زمان بگیری می بینی که واسه ارسال 7000 بایت 1 دقیقه زمان میبره!!!!!!!!!!!!!!!!!!!!!!!!!!! oo:
        در حالی که باید بتونه توی 1 ثانیه 19200 تا بایت رو بگیره!!! البته با محاسبه ای که گفتم !!!
        پس یا محاسبه من غلطه یا ........
        ولی برنامه داره کار میکنه و داده های دریافتی هم درستن!!!!!!!!!!!!
        حالا بگین کجای برنامه یا محاسبات اشکال داره؟

        دیدگاه


          #5
          پاسخ : مفهوم baudrate و حداکثر سرعت پورت سریال

          محاسبات که بنظرم درسته.
          در قسمت دریافت خط Print #2 , A رو حذف کن بعد امتحان کن.
          کریستال هم درسته دیگه؟(اصلاً مدار رو عملی بستی یا با پروتیوس شبیه سازی میکنی؟)

          دیدگاه


            #6
            پاسخ : مفهوم baudrate و حداکثر سرعت پورت سریال

            دقیقا قبل از اینکه جوابتو ببینم همین کارو کردم.خیییییییییییییییییییییییییییییییییییییییییییی ییییییییییییییییییلی عجیبه !!!!!
            دارم نیگا میکنم میبینم دستور print v رو وقتی واسه یک متغیر استفاده میکنم 250 میکرو ثانیه طول میکشه تا انجام بشه اما همین دستور واسه یک استرینگ 10 تایی!!!! فقط 35 میکرو ثانیه زمان میبره!!!!!!!!!!!!!!!!!!!! oo:
            علت چیه!!!
            یک بایت عددی-----------250 میکروثانیه
            استرینگ 10 تایی--------35 میکرو ثانیه!

            دیدگاه


              #7
              پاسخ : مفهوم baudrate و حداکثر سرعت پورت سریال

              یه دستور print a که یه a یه عدد ثابت باشه به برنامت اضافه کن.و بعد کامپایل ببین حجم برنامت چقدر تغییر میکنه از نظر سایز برنامه؟
              هميشه به ياد خدا باش !

              دیدگاه


                #8
                پاسخ : مفهوم baudrate و حداکثر سرعت پورت سریال

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

                dim a as byte
                dim s as string*1
                a=100
                s=str(a)
                print s

                و یا

                dim a as byte
                dim s as string*1
                a=100
                print a


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

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


                راه حلی به نظرتون میرسه؟

                دیدگاه


                  #9
                  پاسخ : مفهوم baudrate و حداکثر سرعت پورت سریال

                  گمانم قسمت ارسال به پورت سریال رو با اسمبلی بنویسی
                  هميشه به ياد خدا باش !

                  دیدگاه


                    #10
                    پاسخ : مفهوم baudrate و حداکثر سرعت پورت سریال

                    نوشته اصلی توسط hamedhamidi
                    print کردن یک استرینگ زمانی نمیبره ولی پرینت عدد زمان زیادی میبره!!!
                    این که بدیهیه!
                    دستور print برای خروجی دادن به ترمینال جهت نمایش بر روی صفحه هست
                    و اگر ورودی یک متغیر عددی باشه زمانی برای تبدیل اون به رشته نیازه.
                    اگر اعداد رو برای نمایش ارسال میکنید از دستور print استفاده کنید و اگر برای انتقال داده بین دو سیستم ارسال میکنید از دستور printbin استفاده کنید.

                    حالا با حذف print #2 ,A ارسال 65000 بایت چقدر طول میکشه؟

                    دیدگاه

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