اطلاعیه

Collapse
No announcement yet.

ارسال دیتا با usart

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

    ارسال دیتا با usart

    همانطور که همه میدونن ارتباط uart اطلاعات با فریم حداکثر 9 بیتی میفرسته اما من میخوام 16 بیتی بفرسته .
    الا من باید چی کار کنم ؟؟؟
    اگه برنامه ای سراغ دارین با c خواهشن بنویسین !!!
    :eek: :eek: :angry: :angry: :cry: :cry:

    #2
    پاسخ : ارسال دیتا با usart

    برای چی لازم داری 16 بیت بفرستی ؟
    دوتا 8 بیت بفرست
    هرچه سعی کنیم لایه های نرم افزاری زیاد کرده و از سخت افزار دور کنیم مشکلات(باگ ها) کمتر خواهد شد(امنیت بیشتری خواهید داشت)
    بهترین جواب دهنده برای سوال شما، خود شما هستید البته بعد تلاش،پشتکار و مطالعه بیشتر
    میدونی مشکل ما کجاست؟سرمایه و مغز ها رو نمیتونیم یکجا جمع کنیم...

    تعدادی ماژول GPS GP5MX1513F1 با بالاتریت حساسیت -170db به قیمت خرید بفروش میرسد

    دیدگاه


      #3
      پاسخ : ارسال دیتا با usart

      نوشته اصلی توسط n340
      برای چی لازم داری 16 بیت بفرستی ؟
      دوتا 8 بیت بفرست
      من میخوام 16 بیت به ترتیب داخل یه پارامتر شبیه a ذخیره بشه ؟؟
      اگه میشه برنامشو بنویسید ؟؟؟
      سوال دیگه ای که داشتم این بود که دیتایی که ارسال میشوند به صورت عدد یا کاراکتر یا رشته ذخیره میشن ؟؟؟؟
      :cry: :cry: :eek: :eek: oo: oo:

      دیدگاه


        #4
        پاسخ : ارسال دیتا با usart

        تمام داده ها بصورت بایت های صفر و یک ارسال میشن . این شمایی که تعیین میکنی چطور ازش استفاده کنی. معمولن بصورت کاراکتر در نظر گرفته میشن و اگه یه تعداد از اونا رو بچینی پشت سر هم میشه رشته. دلت نخواست میتونی بصورت یه عدد یه بایتی هم در نظر بگیری. در کل فرقی نمیکنه.
        برای ارسال یه متغیر اگه بیشتر از یه بایته مثلا int دو بایتی هست میتونی از توابع printf استفاده کنی و با scanf هم داده رو دریافت کنی اما اگه بایت به بایت بخوای ارسال کنی خودت اول بایت پر ارزشتر رو ارسال کن و بعد کم ارزشتر رو . موقع دریافتش هم بایت اول رو 8 بیت به چپ شیفت بده و بعد داده دوم رو با اولیه جمع یا or کن درست میشه

        دیدگاه


          #5
          پاسخ : ارسال دیتا با usart

          نوشته اصلی توسط mojalan
          تمام داده ها بصورت بایت های صفر و یک ارسال میشن . این شمایی که تعیین میکنی چطور ازش استفاده کنی. معمولن بصورت کاراکتر در نظر گرفته میشن و اگه یه تعداد از اونا رو بچینی پشت سر هم میشه رشته. دلت نخواست میتونی بصورت یه عدد یه بایتی هم در نظر بگیری. در کل فرقی نمیکنه.
          برای ارسال یه متغیر اگه بیشتر از یه بایته مثلا int دو بایتی هست میتونی از توابع printf استفاده کنی و با scanf هم داده رو دریافت کنی اما اگه بایت به بایت بخوای ارسال کنی خودت اول بایت پر ارزشتر رو ارسال کن و بعد کم ارزشتر رو . موقع دریافتش هم بایت اول رو 8 بیت به چپ شیفت بده و بعد داده دوم رو با اولیه جمع یا or کن درست میشه
          یعنی اگه تابع ارسال مساوی با رشته قرار بدیم یک رشته به صورت اتوماتیک فرستاده میشه و سمت دیگه تابع دریافت باید مساوی با یک رشته قرار بدیم ؟؟؟؟
          یا اگه میخوایم یک عدد باینری 16 بیتی بفرستیم فقط کافیه مساوی با تابع ارسال قرار بدیم ؟؟؟ :cry: :cry: :eek: :eek: oo: oo:

          دیدگاه


            #6
            پاسخ : ارسال دیتا با usart

            عزیز وقتی شما مثلا کاراکتر 'H' رو ارسال میکنی کدی که ارسال میشه اینه 01001000 که میشه معادل اسکی کاراکتر 'H'
            حالا شما اگه عدد 72 رو هم بفرستی باز هم همون 01001000 ارسال میشه
            حتی اگه عدد 0x48 رو در مبنای هگز هم ارسال کنی باز 01001000 ارسال میشه.
            تو گیرنده هم همین صفر و یک ها دریافت میشه در هر سه حالت یکسانه این برنامه شماست که با این داده میتونه بعنوان یه عدد یا یه کاراکتر از یک رشته رفتار کنه.
            شما برای ارسال یه داده 16 بیتی (که ما فرض میکنیم یه عدد int هست) راحتتره که از تابع printf("%d" استفاده کنی اونطرف هم از scanf استفاده کن وگرنه خودت ببین کامپایلر چجوری متغیرها رو تو حافظه نگه میداره اونو تبدیل به بایت کن و ارسال کن اونطرف هم بگیر و بطور عکس بایتها رو بهم بچسبون

            دیدگاه


              #7
              پاسخ : ارسال دیتا با usart

              نوشته اصلی توسط mojalan
              عزیز وقتی شما مثلا کاراکتر 'H' رو ارسال میکنی کدی که ارسال میشه اینه 01001000 که میشه معادل اسکی کاراکتر 'H'
              حالا شما اگه عدد 72 رو هم بفرستی باز هم همون 01001000 ارسال میشه
              حتی اگه عدد 0x48 رو در مبنای هگز هم ارسال کنی باز 01001000 ارسال میشه.
              تو گیرنده هم همین صفر و یک ها دریافت میشه در هر سه حالت یکسانه این برنامه شماست که با این داده میتونه بعنوان یه عدد یا یه کاراکتر از یک رشته رفتار کنه.
              شما برای ارسال یه داده 16 بیتی (که ما فرض میکنیم یه عدد int هست) راحتتره که از تابع printf("%d" استفاده کنی اونطرف هم از scanf استفاده کن وگرنه خودت ببین کامپایلر چجوری متغیرها رو تو حافظه نگه میداره اونو تبدیل به بایت کن و ارسال کن اونطرف هم بگیر و بطور عکس بایتها رو بهم بچسبون
              اما من هنوز جواب سوال اولم نگرفتم !!!
              اصلا میشه یه برنامه با C بنویسین که 16 بیت ارسال کنه ویه برنامه دیگه بنویسین که 16 بیت دریافت کنه ؟؟؟
              گیج شدم آخه فریم USART حداکثر 9 بیته ؟ :cry: :cry: :cry:؟

              دیدگاه


                #8
                پاسخ : ارسال دیتا با usart

                در ارتباط سریال آسنکرون همیشه تبادل داده با ارسال یه دونه 0 شروع میشه. به این بیت میگن بیت شروع و جزو داده به حساب نمیاد.
                بعد 8 بیت داده ارسال میشه و کم ارزشترین بیت اول ارسال میشه . خب تا اینجا فقط 8 بیت داریم
                بعدش اگه شما خواسته باشین (با تنظیمات پورت) یه بیت هم بعنوان بیت توازن ارسال میشه برای بررسی وجود خطا در دریافت داده در طرف گیرنده. این بیت هم جزو دادهبه حساب نمیاد یعنی اینکه داخل بایت داده اصلی قرار نمیگیره.
                و در آخر هم یه بیت داده همواره 1 بعنوان بیت پایان ارسال میشه . خب ما فقط 8 بیت داده ارسال میکنیم
                1- شما نگران چند تا بودن بیت های داده نباش . سخت افزار خودش کارها رو انجام میده شما فقط کافیه که مثلا با تابع putchar بخوای که یه بایت برات ارسال بشه
                2- تو بعضی از سخت افزارها 7 و 8 و 9 بیت داده رو میشه ارسال کرد ولی AVR فقط 8 بیت رو ساپورت میکنه
                3- و تو بعضی از سخت افزارها بیت پایان میتونه تا دو بیت (1.5 بیت هم) هم باشه یعنی دو تا 1 ارسال میشه

                دیدگاه


                  #9
                  پاسخ : ارسال دیتا با usart

                  تو این تاپیک حتما جوابتون رو پیدا میکنید:
                  http://www.eca.ir/forum2/index.php?topic=53267.0

                  دیدگاه


                    #10
                    پاسخ : ارسال دیتا با usart

                    یعنی اگه من 16 بیت ارسال کنم 16 بیت دریافت میکنم ؟؟
                    اگه دیتا به این صورت باشه که کد اول بخونه بعد 8 بیت دوباره باید کد بخونه تا 8 بیت قسمت دوم بخونه ؟؟

                    دیدگاه


                      #11
                      پاسخ : ارسال دیتا با usart

                      16 بیت رو تبدیل کن به دو بایت و بفرست. توی گیرنده هم عکس همون کار رو انجام بده

                      دیدگاه


                        #12
                        پاسخ : ارسال دیتا با usart

                        و هیچکس درست جواب نداد :(

                        دیدگاه


                          #13
                          پاسخ : ارسال دیتا با usart

                          با وجود 8 بیتی بودن میکرو کنترلر و با استفاده از توابع و کتابخانه های آماده نمیشه اطلاعات رو به صورت 16 بیتی یا بیشتر فرستاد. مگر اینکه خودتون یه کتابخونه برای ارسال و دریافت بنویسید.

                          دلیل: ادغام دو پست برای جلوگیری از اسپم

                          نوشته اصلی توسط mojalan نمایش پست ها
                          16 بیت رو تبدیل کن به دو بایت و بفرست. توی گیرنده هم عکس همون کار رو انجام بده
                          برای اینکه از توابع آماده استفاده کنید روش بالا بهترین راه حل می باشد.
                          الهم صل علی محمد و آل محمد و عجل فرجهم
                          www.adaksell.com

                          دیدگاه

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