اطلاعیه

Collapse
No announcement yet.

مشکل در ارتباط سریال

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

    مشکل در ارتباط سریال

    :angry:با سلام
    یه سوال دارم لطف کنید جواب بدید
    من 2 تا میکرو atmega 128 رو با ارتباط سریال به هم وصل کردم که میکرویی که عمل ارسال را انجام می دهد با codevision نوشته شده است و میکرویی که عمل دریافت را انجام می دهد با bascom نوشته شده .
    من می خوام اعداد اعشاری رو توسط میکرو فرستنده ارسال کنم ولی میکرو گیرنده عدد صحیح دریافت می کنه.
    خواهش می کنم کمکم کنید بتونم این مشکلو حل کنم.
    با تشکر :cry2:

    #2
    پاسخ : مشکل در ارتباط سریال

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

    شما واسه فرستادن اون عدد اعشاری از چه فرمت استفاده میکنین . oo:

    واسه فرستادن یه عدد تا اونجا که عقلم قد میده باید ارقامو یکی یکی تفکیک کنین بعد بفرستین . از اونور هم وقتی گرفتین چنر رقم اعشار که دوست دارین به 10 بتوان n تقسیم کنین تا عدد اعشاریتون بیاد

    دیدگاه


      #3
      پاسخ : مشکل در ارتباط سریال

      با توجه به اینکه داده به صورت بایت به بایت ارسال می شود و تمامی کارکترها مشخصه یگانه خودشون رو دارند نیازی به تبدیل به رشته و ارسال نیست چون بالاخره رشته هم به صورت بایت به بایت انتقال پیدا می کند

      مشکلاتون رو اینجوری چک کنید ببینید مشکل از کجاست
      1-داده فرستنده رو روی ال سی دی یا با پورت کام به کامپیوتر انتقال بدین ببینید که اعشاری ارسال می شود یا خیر
      2-در گیرنده داده های دریافتی رو به یکی از دو صورت زیر بخونید


      dim a as byte
      dim b as string*20
      dim c as single
      dim d as string*1
      dim o as byte
      o=0
      main:
      a=inkey()
      if a>0 then
      o=o+1
      d=str(a)
      b=b+d
      end if
      if o>=10 then
      d=val(b)
      o=0
      lcd d
      else
      goto main
      end if

      داخل دستورر بالا
      o تعداد ارقام اعداد هست(که به این معنی اگر عدد مورد نظر 12035.14654 باشد o باید برابر 11 باشد(دات نیز حساب می شود)
      یا

      dim s as string*20
      dim d as single
      input ,s
      d=val(s)

      مسلما با چک کردن دو مرحله بالا و تغییرات مشکلتون حل می شود
      هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

      دیدگاه


        #4
        پاسخ : مشکل در ارتباط سریال

        عدد اعشاری فرمت float 4 بایتیه. اونو با یک آرایه 4 کاراکتری union کن و بفرست. در هنگام دریافت در یک آرایه 4 بایتی دریافت کن و با یک float مثل دفعه قبل union کن و مقدارشو بردار.

        مثال:


        void send_float(float f)
        {
        union
        {
        float f;
        unsigned char c[4];
        }u;

        u.f = f;
        for(i=0; i<4; i++)
        send( u.c[i] );
        }

        float recv_float(void)
        {
        union
        {
        float f;
        unsigned char c[4];
        }u;
        for(i=0; i<4; i++)
        u.c[i] = recv();
        return u.f;
        }



        راستی من bascom بلد نیستم!

        دیدگاه


          #5
          پاسخ : مشکل در ارتباط سریال

          :NO: بین قسمت صحیح و اعشاری یه کاراکتری چیزی ارسال کن تا در گیرنده این دو قسمت قابل تفکیک باشه
          چار فرانسه نباش

          دیدگاه


            #6
            پاسخ : مشکل در ارتباط سریال

            مشکل شما اینه که نوع متغیری که می فرستین با متغیری که دریافت می کنید فرق می کنه من این کار رو توی بیسکام با دو متغیر single انجام می دم و اصلا احتیاجی به چیزی ندارم فقط می نویسم print و اون طرف input و متغیر تغریبا با 4 رقم اعشار انتقال پیدا می کنه

            دیدگاه

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