اطلاعیه

Collapse
No announcement yet.

مشکل با فرستادن یک عدد در پروتکل UART

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

    مشکل با فرستادن یک عدد در پروتکل UART

    سلام
    می خوام یه عدد رو که از ADC می خونم رو به میکرو دیگه انتقال بدم اما عدد که بر می گرده 10 هست یا 22

    برنامه گیرنده
    $regfile = "M16def.dat "
    $crystal = 8000000
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Disconnect , Prescale = 1
    Config Timer2 = Pwm , Prescale = 1 , Pwm = On , Compare Pwm = Disconnect
    Baud = 9600
    Dim Pw1 As Byte
    Dim Pw2 As Byte
    Dim Pw3 As Byte
    Declare Sub Pwm.1
    Declare Sub Pwm.2
    Declare Sub Pwm.3
    Dim A As Word

    Do
    Inputbin A
    Pwm1a = A
    Print A
    Loop


    برنامه فرستنده

    $regfile = "M16def.dat "
    $crystal = 8000000
    Baud = 9600
    Config Adc = Single , Prescaler = Auto
    Dim Adc1 As Word
    Dim Adc2 As Word
    Dim Adc3 As Word
    Dim U1 As Single
    Dim U2 As Word
    Dim U3 As Byte
    Declare Sub Pwm.1
    Declare Sub Pwm.2
    Declare Sub Pwm.3
    '******************ADC*********************** **************************************
    Do
    Cls
    Adc1 = Getadc(2)
    Adc1 = Adc1 / 4
    Print Adc1
    Waitms 100
    Loop



    #2
    پاسخ : مشکل با فرستادن یک عدد در پروتکل UART

    میکروری گیرنده عددو کجا بر میگردونه . اگه به همون میکرو برمیگردونه تو او ننوشتی که عددو بگیره

    دیدگاه


      #3
      پاسخ : مشکل با فرستادن یک عدد در پروتکل UART

      نوشته اصلی توسط hadi_hashemi_85
      میکروری گیرنده عددو کجا بر میگردونه . اگه به همون میکرو برمیگردونه تو او ننوشتی که عددو بگیره
      نه به کامپیوتر وصل کردم :agree:

      دیدگاه


        #4
        پاسخ : مشکل با فرستادن یک عدد در پروتکل UART

        تو تو کامپیوتر که این عددو میگیری که فک کنم با vb کار میکنی ، عددو به صورت بایت میگیره و تو باید اونو تبدیل به چار بکنی که بتونه نشون بده . این کارو تو میکرو هم میتونی بکنی . یعنی ارقامشو تفکیک کنی و کد اسکیشونو یکی یکی بفرستی . اگه با هایپر بگیریم که اصلا اون عددو نشون نمیده . یه چیزای دیگه نشون میده .
        اگه اینا هم نشد استاپ بیتاشونو دستکاری کن انشاالله درست شد

        دیدگاه


          #5
          پاسخ : مشکل با فرستادن یک عدد در پروتکل UART

          نوشته اصلی توسط hadi_hashemi_85
          تو تو کامپیوتر که این عددو میگیری که فک کنم با vb کار میکنی ، عددو به صورت بایت میگیره و تو باید اونو تبدیل به چار بکنی که بتونه نشون بده . این کارو تو میکرو هم میتونی بکنی . یعنی ارقامشو تفکیک کنی و کد اسکیشونو یکی یکی بفرستی . اگه با هایپر بگیریم که اصلا اون عددو نشون نمیده . یه چیزای دیگه نشون میده .
          اگه اینا هم نشد استاپ بیتاشونو دستکاری کن انشاالله درست شد
          نه با یه چیز بسکام دریافت می کنم :biggrin:
          بعد توی پروتیوس هم تست کردن همین 10 رو می فرستاد oo:
          توی بسکام فکر نکنم بشه بایت ها استپ و استارت دستکاری کرد باید دیتاشیت رو بخونم که دیتاشیت های AVR 700 صحفه هم تر نیستن :-O

          دیدگاه


            #6
            پاسخ : مشکل با فرستادن یک عدد در پروتکل UART

            نیاز به خوندن دیتا شیت نیست!
            اخه بسکامه مگه چیه
            این دستورش
            CONFIG COM1 = baud , synchrone=0|1,parity=none|disabled|even|odd,stopbi ts=1|2,databits=4|6|7|8|9,clockpol=0|1
            کافیه تو هلپ پیداش کنی و بخونیش!
            بازم متوجه نشدی بگو بچها همه مهندسن!

            در مورد ارسال هم از دستور
            print chr(adc1)m استفاده کن اون حرف m هم نیست گذاشتمش فرمش منظم بشه!
            انجام پروژه هاي برنامه نويسي اندرويد
            [glow=red,2,300]نرم افزار نقشه هاي پاور کامپيوتر اندوريد[/glow]
            http://cafebazaar.ir/app/?id=com.atxdroid

            دیدگاه


              #7
              پاسخ : مشکل با فرستادن یک عدد در پروتکل UART

              با دستور Printbin عدد رو ارسال کن شاید درست شه

              دیدگاه


                #8
                پاسخ : مشکل با فرستادن یک عدد در پروتکل UART

                نوشته اصلی توسط hadi_hashemi_85
                تو تو کامپیوتر که این عددو میگیری که فک کنم با vb کار میکنی ، عددو به صورت بایت میگیره و تو باید اونو تبدیل به چار بکنی که بتونه نشون بده . این کارو تو میکرو هم میتونی بکنی . یعنی ارقامشو تفکیک کنی و کد اسکیشونو یکی یکی بفرستی
                اینی که الان گفتی یعنی چی ؟ :mrgreen:
                باید چی کار کنم ؟
                الان بایت استپ رو کردم یک اما الان عدد برگشتی 4 5 رقمی هست oo:
                اینم از هلپ بسکام کپی کردم
                Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
                نوشته اصلی توسط aed
                با دستور Printbin عدد رو ارسال کن شاید درست شه
                اگر PRINTBIN باشه توی بسکام این عدد رو نمیتونم دریافت کنم عدد حروف های نا مفهوم میشه

                دیدگاه


                  #9
                  پاسخ : مشکل با فرستادن یک عدد در پروتکل UART

                  نوشته اصلی توسط erfan m
                  اگر PRINTBIN باشه توی بسکام این عدد رو نمیتونم دریافت کنم عدد حروف های نا مفهوم میشه
                  دستور Print رشته ارسال میکنه یهنی 1+n بایت به ازای یک عدد n رقمی و یا n+1 بایت به ازای یک رشته n کاراکتری و توی محیط ترمینال نشون داده میشه. Printbin داده رو به صورت باینری ارسال میکنه یعنی n بایت به ازای یک متغیر n بایتی. و شما در برنامه گیرنده از دستور Inputbine استفاده کردید. توی ترمینال کاراکترهای نامشخص نشون داده میشه و لی احتمالا با میکروی گیرنده جواب میده.

                  دیدگاه


                    #10
                    پاسخ : مشکل با فرستادن یک عدد در پروتکل UART

                    والا من بسکام بلد نیستم .
                    نکنه مشکل از a2d باشه . تو کجای برنامت تنظیمات a2d رو دادی
                    یه عدد ثابتو امتحان کردی بازم همون ارور و میده ؟

                    دیدگاه


                      #11
                      پاسخ : مشکل با فرستادن یک عدد در پروتکل UART

                      فعلا درست شد
                      اما وقتی عدد از یه مقدار 140 بیشتر میشه بهم میریزه
                      برنامه جدید
                      فرستنده
                      $regfile = "M16def.dat "
                      $crystal = 8000000
                      Baud = 9600
                      Config Adc = Single , Prescaler = Auto
                      Dim Adc1 As Word
                      Dim Adc2 As Word
                      '******************ADC*********************** **************************************
                      Do
                      Adc1 = Getadc(2)
                      Adc1 = Adc1 / 4
                      Adc1 = Makebcd(adc1)
                      Printbin Adc1
                      loop

                      برنامه گیرنده
                      $regfile = "M16def.dat "
                      $crystal = 8000000
                      Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Disconnect , Prescale = 1
                      Config Timer2 = Pwm , Prescale = 1 , Pwm = On , Compare Pwm = Disconnect
                      Baud = 9600
                      Dim A As Byte
                      Enable Interrupts
                      Enable Urxc
                      On Urxc Uart
                      Do
                      Waitms 1
                      Print Makedec(a)
                      Loop



                      End
                      Uart:
                      A = Udr
                      Return







                      دیدگاه


                        #12
                        پاسخ :

                        یه لحظه احساس کردم منم خیلی وقت پیش این مشکلو داشتم . عدد 140 برام خیلی آشنا اومد
                        هایپر ترمینالم اینطوری میشه ؟
                        همیشه باهاش تست کن ، اگه سیگنالت ایراد نداشته باشه نشون میده . گیر بازارش کمتره

                        دیدگاه


                          #13
                          پاسخ : مشکل با فرستادن یک عدد در پروتکل UART

                          مشکلم حل شد :wow: :applause: :wow: :wow: :wow:
                          واقعا از همتون ممنون

                          حالا مشکل ها چی بود ؟
                          استفاده از متغیر های 16 بیتی باید متغیر 8 بیتی باشه

                          اینم برنامه درست شده
                          فرستنده :

                          $regfile = "M16def.dat "
                          $crystal = 8000000
                          Baud = 9600
                          Config Adc = Single , Prescaler = Auto
                          Dim Adc1 As Word
                          Dim Adc2 As Byte
                          '******************ADC*********************** **************************************
                          Do
                          Adc1 = Getadc(2)
                          Adc1 = Adc1 / 4
                          Adc2 = Adc1
                          Printbin Adc2
                          Waitms 200
                          Loop
                          End

                          گیرنده :

                          $regfile = "M16def.dat "
                          $crystal = 8000000
                          Baud = 9600
                          Enable Interrupts
                          Enable Urxc
                          On Urxc Sub1
                          Dim A As Byte
                          Do
                          Loop
                          End


                          Sub1:
                          A = Udr
                          Print A
                          Return


                          :wow:
                          :wow:

                          دیدگاه

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