اطلاعیه

Collapse
No announcement yet.

دریافت 3 بایت از پورت سریال

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

    دریافت 3 بایت از پورت سریال

    سلام به همه
    دوستان من برای دریافت 3 بایت ارسالی از یک دستگاه میدی کیبورد (کیبورد موسیقی) که پیام های MIDI رو بصورت 3 بایت پشت سر هم ارسال میکنه و نرخ ارسال هم 31250 هست، مشکل دارم!!
    از کامپایلر بسکام استفاده میکنم...
    طرف ارسال کننده ی من استاندارد هست و با کارتهای صدا کار میکنه... مشکل سمت گیرنده هست...
    من میخوام پیام های ارسالی رو روی LCD نشون بدم و تا الان هر روشی رو که یاد داشتم رفت ولی پیام ها بصورت صحیح دریافت نمیشن! مثلا سمت ارسال کننده داره عدد 144 رو بصورت هگز میفرسته ولی سمت گیرنده یا نمیگیره یا یه چیزی به عشق دل خودش میگیره!
    با توجه به اینکه همیشه نمیتونم برنامه رو روی خط دریافت INPUT متوقف کنم اومدم از وقفه Urxc استفاده کردم که بپره توی زیر برنامه دریافت و داده رو دریافت کنه ولی باز هم نشد!!
    بجای Input از inkey(),waitkey() هم استفاده کردم ولی باز هم نشد!!
    اومدم از بافر استفاده کنم که بسکام ارور 249 میده و فکر کنم نمیشه همزمان از بافر و وقفه استفاده کرد!!آ‌(اگر اشتباه میکنم بخاطر اینکه تابحال امتحانش نکردم)

    دوستان کمک کنید که شدیدا گیرم...
    ممنون همه

    #2
    پاسخ : دریافت 3 بایت از پورت سریال

    ای بابا... یکی پیدا نمیشه من رو راهنمایی کنه؟؟

    ببینید من مشکل در دریافت 3 بایت رو از طریق بافر سریال دارم... الان من بافر ورودی رو اینطوری پیکربندی کردم:
    [code=vb]
    Config Serialin = Buffered , Size = 3 [/code]

    اومدم و توی یه شرط با استفاده از Ischarwaiting() <> 0 چک کردم که چیزی توی بافر اومده یا نه... حالا با چه دستوری کل محتوای داخل بافر ورودی رو که الان حاوی 3 بایت شده رو بخونم؟؟؟

    دوستان خواهشا کمک کنید! گیرم به خدا...

    دیدگاه


      #3
      پاسخ : دریافت 3 بایت از پورت سریال

      سلام. شما سطح کارت خیلی پیشرفته است و من کم سواد!
      برای رفع مشکل شما شش نکته می گم امیدوارم مشکل حل بشه.

      1. در لایه سخت افزاری حتما از مقاومت پول پ برای خط به مقدار 4.7K یا 10K استفاده کن.
      2. مقادیر hwstack , swstack و framesize رو با توجه به راهنمای بسکام تنظیم کن.
      3. از دستور inputbin استفاده کن ببین مشکل حل میشه.
      4. متغیری که برای ریختن دیتای ورودی به اون از دستور input استفاده کردی بهتره از نوع string و با طول مناسب باشه.
      5. اگر میشه شماتیک و برنامه ای رو که نوشتی قرار بده تا شاید بشه بهتر کمک کرد.
      6. در دیتاشیت تمام میکروکنترلرهای اتمل در بخش ارتباط سریال UART عدد دقیق کریستال به منظور دریافت باودریت های خاص آمده. کریستال مناسب انتخاب کن.

      موفق باشی
      STM32 واقعا یه چیز دیگه است...

      دیدگاه


        #4
        پاسخ : دریافت 3 بایت از پورت سریال

        سلام... ممنون از پاسختون
        در مورد مطالبی که فرمودید، در مورد مقاومت روی پورت انجام میدم همیشه (بخصوص چون فرستنده با سطح ولتاژ 5 کامل داره ارسال انجام میده)
        در مورد تنظیم پشته راستش من تابحال موردی برام پیش نیومده که پشته رو از حالت پیشفرض تغییر بدم... یه سری به help بسکام میزنم تا ببینم چی میشه ولی بعید میدنم تاثیر چندانی در دریافت 3 بایت داشته باشه...
        در مورد کریستال درست ولی نمیتونم!! چون دارم با کتابخانه swusb کار میکنم و قراره داده ها رو به usb بفرستم... ناچارم روی کریستال با کلاک 12 مگ باشم!!
        از inputbin که خیری ندیدم!
        ولی در مورد انکه رشته ورودی رو string بگیرم باید بررسی کنم... فقط من هنوز مشکل اصلیم سرجاش هست!
        اینکه چطوری از روی بافری که حالا یه رشته با طول 3 بایت در نظر بگیرم درست پیکربندی کنم... این چیزهایی که در مورد کار با uart اینور و اونور بچه ها نوشتن فقط تا اینجاش توضیح دادن که اینطوری: Config Serialin = Buffered , Size = 3 بافر ورودی رو تعریف میکنیم و برای گرفتن از inkey() یا اون 2تای دیگه استفاده میکنیم! که این دردی رو دعوا نکرد! من فهمیدم که برای بافر اتوماتیک و تا زمانی که از دستور clear براش استفاده نشه به محض رسیدن داده تا پر شدنش داده رو بافر میکنه... حالا من با استفاده از هر روشی که ممکن باشه میخوام محتوای روی بافر رو بردارم و بخونم و بعد باز بافر رو پاک کنم و دقیقا همین رو نمیدنم!!

        udr چطوری ازش باید استفاده کرد...؟
        چرا وقتی بافر ورودی رو تعریف میکنی با وقفه uart بسکام ارور بر میگردونه؟

        یکی راهی چیزی بذاره جلوی پای ما... 3 بایت ارسالی پشت سر هم رو میخوام بخونم... یه نمونه کدی... چیزی بدید خواهشا...

        دیدگاه


          #5
          پاسخ : دریافت 3 بایت از پورت سریال

          سلام. از بیا از خیر بافر بگذر و کل دیتای ورودی رو زمانی که به 3 بایت (24 بیت) رسید بخون. اون وقت پردازش کن. ببین مشکل حل میشه
          STM32 واقعا یه چیز دیگه است...

          دیدگاه


            #6
            پاسخ : دریافت 3 بایت از پورت سریال

            سلام جواد جان...
            یعنی کلا یه رشته 3 بایتی در نظر بگیرم و بعد با input رشته رو بگیرم؟

            راستش من همیشه توی دریافت و ارسال با uart مشکل داشتم... میترسم! حالا امتحان میکنم ولی بعید میدونم خیری ببینم...

            دیدگاه


              #7
              پاسخ : دریافت 3 بایت از پورت سریال

              نوشته اصلی توسط alimn2012
              سلام جواد جان...
              یعنی کلا یه رشته 3 بایتی در نظر بگیرم و بعد با input رشته رو بگیرم؟

              راستش من همیشه توی دریافت و ارسال با uart مشکل داشتم... میترسم! حالا امتحان میکنم ولی بعید میدونم خیری ببینم...
              دقیقا.... دستور input خیلی خوبه . من در راه اندازی SIM900 , RFID , HC-05و بسیاری لوازم ازش استفاده کردم و مشکلی نداره
              STM32 واقعا یه چیز دیگه است...

              دیدگاه

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