اطلاعیه

Collapse
No announcement yet.

ارسال به صورت هگز در ارتباط سریال

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

    ارسال به صورت هگز در ارتباط سریال

    دوستان میدونم که در این مورد زیاد تو سایت صحبت شده، اما من جواب این سوال رو نتونستم پیدا کنم
    تو لب ویو و ارتباط سریال، فقط میشه اطلاعات رو به صورت رشته ارسال کرد؟
    نمیشه به صورت عادی، مثل میکرو به میکرو که هگز اعداد رو می فرسته، این کار رو انجام داد؟
    ممنون
    ---------
    .
    .
    ...........

    #2
    پاسخ : ارسال به صورت هگز در ارتباط سریال



    دیدگاه


      #3
      پاسخ : ارسال به صورت هگز در ارتباط سریال

      ممنون از جوابت
      راستش من میخوام که برنامه نوشته شده یه عدد رو از کاربر بگیره و یه سری محاسبات ریاضی و منطقی روشون انجام بده، بعد نتیجه رو بشه به صورت هگز (کد اسکی معادل عدد بین 0 تا 255) ارسال مرد.
      مثلا یه عدد اغشاری دو رقمی در یه عدد اعشاری مثل 1234.567 ضرب بشه، بعد 4 بیت به سمت راست یا چپ شیفت داده شه، و در آخر جوابش که از 255 بزرگتره رو بشه به چند قسمت تقسیم کرد و با کد اسکی فرستاد.
      ---------
      .
      .
      ...........

      دیدگاه


        #4
        پاسخ : ارسال به صورت هگز در ارتباط سریال

        قبلا هم بحث کردیم که اطلاعات بصورت بایت میتونن به هر صورت تعبیر بشن مثلا ascii که آرایه ای از اونها میشه رشته
        یا عدد یا هر چیز دیگه . مهم اینه که شما یک بایت یعنی 8 بیت را بین لب ویو و یه چیز دیگه ردوبدل میکنید
        عدد هگز هم چیزی جز نمایش یک بایت در مبای 16 نیست بیتها فرقی نمیکنند در این حالت
        شما عدد هگزت رو هر بلایی سرش خواستی دربیار بعد با تابع byte array to string تبدلیش کن به رشته و ارسال کن. نگران هیچی نباش در طرف دیگه همون چیزی که فرستادی (همون هگز) رو دریافت میکنی

        دیدگاه


          #5
          پاسخ : ارسال به صورت هگز در ارتباط سریال

          خیلی ممنون از جوابتون
          تو لب ویو برای اینکه بشه یه عدد رو تبدیل به حالت هگز کرد که بعدش بشه با تابعی که گفتین به رشته تبدیلش کنیم، چی هست ؟
          من از to unsigned byte integer استفاده می کنم و ورودی بهش عددی که کاربر وارد میکنه رو میدم و خروجیش که عدد هگزش هست رو به تابعی که شما گفتی میدم، خطا میده و درست کار نمی کنه !!
          ---------
          .
          .
          ...........

          دیدگاه


            #6
            پاسخ : ارسال به صورت هگز در ارتباط سریال

            هگز بودن عدد هیچ فرقی مثلا با حالت دسمال نداره و فقط نوع نمایش فرق میکنه
            مثال عدد 01001000 باینری اگه بصورت دسیمال نوشته بشه میشه 72 و اگه بصورت هگز نوشته بشه میشه 48 و اگه بصورت یه کاراکتر باهاش برخورد بشه (کد اسکی معادل کاراکتر) میشه کاراکتر 'H'
            شما هر آرایه ای از بایتها (چه عدد یک بایتی باشه و چه کاراکتر) رو با تابع byte array to string به رشته تبدیلش کنید در لب ویو
            و هگز یا بانیری یا دسیمال بودن اون بایتها هیچ تفاوتی در نتیجه عمل نمیکنه

            دیدگاه


              #7
              پاسخ : ارسال به صورت هگز در ارتباط سریال

              من برنامه تو لب ویو رو جوری نوشتم که با فشردن دکمه LOAD، یه رشته که معادل اسکی اعداد به دست آمده داخل برنامه هستند رو به به پورت سریال میریزه. از کریستال معروف 11.0592 هم استفاده کردم. تو برنامه کدویژن روش پایینو استفاده کردم:
              کد:
              interrupt [USART_RXC] void usart_rx_isr(void)  {
              char temp1,temp2;
              temp1=UCSRB;
              temp2=UDR;
                rx_buffer[rx_wr_index]=temp2;
                rx_wr_index++;
                if (rx_wr_index==RX_BUFFER_SIZE) Program_USB();
                }
              در ادامه وقتی برنامه داخل تابع Program_USB میشه، از آرایه های بافر که پر شده استفاده می کنم.
              حالا سوال من اینه که مثلا [0]rx_buffer که قبلا و تو لب ویو 0x50 بوده، الان هم همون 0x50 هستش یا کارکتر شده و با دستور دیگه ای تبدیلش کنم به 0x50 ؟
              راهی هستش که همه رشته رو وقتی که ارسال شد بگیرم ؟ یعنی از توابعی مثل scanf استفاده کنم ؟ ولی مثل وقفه فقط زمانی که اطلاعات ارسال شد، اجرا بشه ؟
              اینم عکس از محیط برنامه تو لب ویو.


              ---------
              .
              .
              ...........

              دیدگاه


                #8
                پاسخ : ارسال به صورت هگز در ارتباط سریال

                کسی از دوستان چیزی به ذهنش نیومد ؟؟؟؟ :angry:
                ---------
                .
                .
                ...........

                دیدگاه


                  #9
                  پاسخ : ارسال به صورت هگز در ارتباط سریال

                  من یکم گنگم درباره مشکل شما
                  شما الان تو ارسال مشکل دارید یا دریافت

                  این p که گذاشتی برای ارسال به خاطر چیه .اگه برای به وجود آوردن پروتکله زیاد جالب نیست .چون اول وآخرش یه شکله

                  اگه تو سمت میکرو تو در یافت مشکل داری و می خوای وقتی همه رشته ارسال شد دریافت کنی باز مشکلت نبود پروتکله.

                  بهتره یه قانون خوبی برای ارسال و دریافتت در نظر بگیر بعد .................

                  یه توضیح کامل از برنامت بده تا کمکت کنم.مثال نزن اصل برنامت رو مبگو




                  دیدگاه


                    #10
                    پاسخ : ارسال به صورت هگز در ارتباط سریال

                    ممنون از جوابت
                    اولین P توی برنامه لب ویو برای پروتکلی که خودم تعریف کردم و باهاش ابتدای رشته رو مشخص می کنم. بقیه Pها مثل مثل اون بلوک زیربرنامه هستن که یه روندی مثل همونا تکرار میشه و اعداد هگز برای ارسال آماده میشن، برای انتهای رشته هم یه حرف دیگه مثل A گذاشتم. همون طور که میبینید برنامه داخل حلقه case هستش و با فشردن کلید تو صفحه اصلی لب ویو اطلاعات فقط یه بار ارسال میشن. من کد معادل اسکی اعداد رو برای ارسال استفاده می کنم چون داخل میکرو کد هگز معادل اون اعداد رو میخوام. تا اینجاش داخل لب ویو بوده.
                    داخل میکرو هم کدی که می نویسم برای دریافت اطلاعات اینه :
                    کد:
                    char rx_buffer[RX_BUFFER_SIZE];
                    unsigned char rx_wr_index;
                    bit usb;
                    .
                    .
                    .
                    interrupt [USART_RXC] void usart_rx_isr(void)  {
                    char temp1,temp2;
                    temp1=UCSRB;
                    temp2=UDR;
                    if (usb==1) {       // USB Communication
                      rx_buffer[rx_wr_index]=temp2;
                      rx_wr_index++;
                      if (rx_wr_index==RX_BUFFER_SIZE) Program_USB();
                      }
                    }
                    .
                    .
                    .
                      usb=1;
                      UCSRA=0x00;   // Communication Parameters: 8 Data, 1 Stop, No Parity
                      UCSRB=0x98;   // USART Receiver: On
                      UCSRC=0x86;   // USART Transmitter: O
                      UBRRH=0x01;   // USART Mode: Asynchronous 
                      UBRRL=0xA0;   // USART Baud Rate: 2400
                    .
                    .
                    .
                    void Program_USB(void) { 
                    
                    //for (i=1;i<=4;i++) {
                    //  D[i+10]=rx_buffer[i];
                    //  } 
                    for (i=5;i<=8;i++) {
                      D[i+21]=rx_buffer[i];
                      } 
                    }
                    داخل تابعی که اجرا میشه تک تک کارکترها رو می ریزم توی یک آرایه که از قبل تعریف کردم و بعد همه رو با تابع spi می فرستم به یک قطعه دیگه.
                    ---------
                    .
                    .
                    ...........

                    دیدگاه


                      #11
                      پاسخ : ارسال به صورت هگز در ارتباط سریال

                      نوشته اصلی توسط sadegh-emrah
                      من یکم گنگم درباره مشکل شما
                      شما الان تو ارسال مشکل دارید یا دریافت

                      این p که گذاشتی برای ارسال به خاطر چیه .اگه برای به وجود آوردن پروتکله زیاد جالب نیست .چون اول وآخرش یه شکله

                      اگه تو سمت میکرو تو در یافت مشکل داری و می خوای وقتی همه رشته ارسال شد دریافت کنی باز مشکلت نبود پروتکله.

                      بهتره یه قانون خوبی برای ارسال و دریافتت در نظر بگیر بعد .................

                      یه توضیح کامل از برنامت بده تا کمکت کنم.مثال نزن اصل برنامت رو مبگو




                      من هنوز منتظرم
                      ---------
                      .
                      .
                      ...........

                      دیدگاه


                        #12
                        پاسخ : ارسال به صورت هگز در ارتباط سریال

                        سلام دوستان
                        من خیلی اطلاعات درمورد labview ندارم و الان تو یک پروژه ای هستم که قراره یک سری عدد به صورت دیجیتال از طریق وایرلس یا وای فای به کنترلر برسه و بعد با توجه به برنامه ،کنترلر سه تا خروجی انالوگ و یک دیجیتال به من بده که با ان Mass Flow Controller رافعال کنیم حالا من میخوام یدونم میشه به جای کنترلر با لب ویو این کار رو انجام داد و خروجی آنالوگ را از طریق DAQ فرستاد به MFC ؟؟ راستش به خاطر وایرلس بودن سیستم استفاده از پی ال سی مقرون به صرفه نیست و برد اماده که با AVR یا PIC کارکنه هم نتونستم پیدا کنم برا همین یه گزینه که مونده اینه که با نرم افزار قسمت کنترلی را انجام بدیم چون فقط باید دیتا ها چک بشه و معادل انالوگ انها ارسال بشه و کار خاصی نداره... ممنون میشم راهنمایی کنید
                        یاور همیشه مومن تو برو سفر سلامت غم من مخور که دوری برای من شده عادت

                        دیدگاه


                          #13
                          پاسخ : ارسال به صورت هگز در ارتباط سریال

                          نوشته اصلی توسط ajapyy
                          تو لب ویو و ارتباط سریال، فقط میشه اطلاعات رو به صورت رشته ارسال کرد؟
                          نمیشه به صورت عادی، مثل میکرو به میکرو که هگز اعداد رو می فرسته، این کار رو انجام داد؟
                          ممنون
                          با سلام
                          دوست عزیز، توی ارتباط سریال همه اطلاعات بصورت باینری ( صفر و یک ) ارسال میشن. حالا توی گیرنده، شما این امکانو داری که بصورت باینری، هگز، اسکی یا استرینگ نمایششون بدی. در حقیقت همه اینا یه چیزن. من با لب ویو آشنا نیستم. ولی تو سی شارپ بایت فرستادم. البته اونجوری که یادم مونده دردسر داشت و خیلی سرو کله زدم باهاش.

                          البته تو یه کاری مجبور شدم به این حرکت. وگرنه ارسال استرینگی خیلی بهتر و مطمئن تره، چون دیگه تداخل دیتا و کاراکتر های کنترلی پیش نمیاد و شما دقیقا میتونی با پریفرالت صحبت کنی.

                          برای اطمینان از صحت ارسالت هم بگو میکروت بعد از دریافت دیتا، دوباره اونا رو به PC بفرسته تا چکشون کنی. البته میتونی بعد از برطرف شدن باگت، این بخشو حذف کنی.
                          موفق و شاد باشی.
                          کمترین توقع از یک فرد تحصیلکرده، دانستن املای صحیح کلمات است.

                          دیدگاه

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