اطلاعیه

Collapse
No announcement yet.

برنامه میکرو در پروتئوس درست کار میکنه ولی وقتی رو میکرو میریزمش جواب نمیده

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

    برنامه میکرو در پروتئوس درست کار میکنه ولی وقتی رو میکرو میریزمش جواب نمیده

    درود بر شما
    من دوتا atmega16l رو از طریق uart به هم وصل کردم، به پورت a یکی از میکرو ها که مستره 8 تا سوییچ وصل کردم و به پورت a میکروی دیگر (slave) هشتا Led وصل کردم، و برنامه های زیر رو براشون نوشتم:
    'program for master
    '************************
    $regfile = "m16def.dat"
    $crystal = 1000000

    $baud = 5000

    Dim A As Byte

    Config Porta = Input
    A = 0

    Do
    A = Pina
    Printbin A
    loop

    -----------------------------------------------------------------------------------------
    'program for slave
    $regfile = "m16def.dat"
    $crystal = 1000000

    $baud = 5000

    Config Porta = Output

    Dim A As Byte

    Do
    porta=a
    Inputbin A
    Loop

    end

    وقتی این برنامه رو توی پروتئوس شبیه سازی کردم درست کار کرد، اما وقتی که روی میکرو پروگرامشون کردم Led ها شروع کردند با سرعت خیلی زیاد خاموش و روشن شدن، و هر زمان که دکمه reset میکروی مستر رو فشار می دم، led های میکرو slave به صورت رندوم روشن و خاموش می مونند

    البته این برنامه ها رو با atmega32 هم تست کردم، و یک بار هم بودریت رو روی 9600 گذاشتم اما بازم کار نکرد
    مدار رو هم روی بردبرد بستم که فکر نکنم مشکل از بردبرد یا میکرو باشه چون وقتی تک تک به میکرو ها برنامه میدم درست کار می کنند و حتی وقتی که به صورت i2cهم به هم وصلشون کردم درست کار کردند، اما در حالت uart درست کار نمی کنند

    #2
    پاسخ : برنامه میکرو در پروتئوس درست کار میکنه ولی وقتی رو میکرو میریزمش جواب نمیده

    شاید باودریت با فرکانس کاری میکرو هماهنگ نیست و خطای سریال زیادی داری.
    باودریت 5000 که استاندارد نبود ولی کریستال 1 مگاهرتز و باودریت 9600 که انتخاب کردی (حالت دوم) نرخ خطای 7.84 درصد می ده که اصلا مناسب نیست و این نرخ خطا حداکثر نباید از %1 تجاوز کنه.

    دیدگاه


      #3
      پاسخ : برنامه میکرو در پروتئوس درست کار میکنه ولی وقتی رو میکرو میریزمش جواب نمیده

      ببین دوست عزیر
      دستور INPUTBIN منتظر رسیدندستور نمیمونه برای گرفتن دستور ی که منتظر بموته باید از Waitkey استفاده کنی
      و توی برنامه مستر هم بین فرستادن اطلاعات از دستور تاخیر مثل Waitms 500 استفاده کنی
      حتما جواب میگیری

      یعنی برنامه تبدیل میشه به:

      'program for master
      '************************
      $regfile = "m16def.dat"
      $crystal = 1000000

      $baud = 5000

      Dim A As Byte

      Config Porta = Input
      A = 0

      Do
      A = Pina
      Printbin A
      waitms 500
      loop

      -----------------------------------------------------------------------------------------
      'program for slave
      $regfile = "m16def.dat"
      $crystal = 1000000

      $baud = 5000

      Config Porta = Output

      Dim A As Byte

      Do
      A = WAITKEY()
      porta=a

      Loop

      دیدگاه


        #4
        پاسخ : برنامه میکرو در پروتئوس درست کار میکنه ولی وقتی رو میکرو میریزمش جواب نمیده

        نوشته اصلی توسط arashonline
        درود بر شما
        من دوتا atmega16l رو از طریق uart به هم وصل کردم، به پورت a یکی از میکرو ها که مستره 8 تا سوییچ وصل کردم و به پورت a میکروی دیگر (slave) هشتا Led وصل کردم، و برنامه های زیر رو براشون نوشتم:
        'program for master
        '************************
        $regfile = "m16def.dat"
        $crystal = 1000000

        $baud = 5000

        Dim A As Byte

        Config Porta = Input
        A = 0

        Do
        A = Pina
        Printbin A
        loop

        -----------------------------------------------------------------------------------------
        'program for slave
        $regfile = "m16def.dat"
        $crystal = 1000000

        $baud = 5000

        Config Porta = Output

        Dim A As Byte

        Do
        porta=a
        Inputbin A
        Loop

        end

        وقتی این برنامه رو توی پروتئوس شبیه سازی کردم درست کار کرد، اما وقتی که روی میکرو پروگرامشون کردم Led ها شروع کردند با سرعت خیلی زیاد خاموش و روشن شدن، و هر زمان که دکمه reset میکروی مستر رو فشار می دم، led های میکرو slave به صورت رندوم روشن و خاموش می مونند

        البته این برنامه ها رو با atmega32 هم تست کردم، و یک بار هم بودریت رو روی 9600 گذاشتم اما بازم کار نکرد
        مدار رو هم روی بردبرد بستم که فکر نکنم مشکل از بردبرد یا میکرو باشه چون وقتی تک تک به میکرو ها برنامه میدم درست کار می کنند و حتی وقتی که به صورت i2cهم به هم وصلشون کردم درست کار کردند، اما در حالت uart درست کار نمی کنند

        جناب آرش ان لاین عزیز
        ارتباط سریال بهتره که از سرعت های استاندارد استفاده بشه مثلا سرعت 4800 بجای 5000 می تونهتوی خطای ارسالی خیلی موثر باشه

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

        دیدگاه


          #5
          پاسخ : برنامه میکرو در پروتئوس درست کار میکنه ولی وقتی رو میکرو میریزمش جواب نمیده

          سلام
          من برنامه ها رو اینجوری کردم:
          program for master
          '************************
          $regfile = "m16def.dat"
          $crystal = 1000000

          $baud =4800

          Dim A As Byte

          Config Porta = Input
          A = 0

          Do
          A = Pina
          Printbin A
          waitms 500
          loop

          -----------------------------------------------------------------------------------------
          'program for slave
          $regfile = "m16def.dat"
          $crystal = 1000000

          $baud = 4800

          Config Porta = Output

          Dim A As Byte

          Do
          A = WAITKEY()
          porta=a

          Loop


          اما بازم درست کار نکرد، الان Ledها چشمک می زنند ولی سرعتشون خیلی کم شد، راستی مثلا اگه من 4 تا پین اول پورتa میکروی مستر رو یک می کنم، در میکروی اسلیو پین های متناظر بیشتر روشن و خاموش می شند اما باقی پین ها هم روشن و خاموش میشند

          راستی اگه بخوام یه کاراکتر رو بفرستم دستورش چیه؟ (میخوام توی میکروی اسلیو یه شرط بزارم که اگه مثلا کاراکتر z رو دریافت کرد یه led رو روشن کنه)

          دیدگاه


            #6
            پاسخ : برنامه میکرو در پروتئوس درست کار میکنه ولی وقتی رو میکرو میریزمش جواب نمیده

            خوب اگر میخوای این طوری بشه باید دستور Waitms 500 رو از برنامه Master برداری

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

            موفق باشی

            نمیدونم این آقای Saeed Bagherani چه اصراری داره که نمیشه از Baud rate های غیر استاندارد استفاده کرد
            توی تاپیک های قبل هم گفتم وقتی ارتباط به صورت Point to point باشه ، اشکال نداره و میشه از Baud rate های غیر استاندارد استفاده کرد چون اگر حجم اطلاعات ارسالی و دریافتی زیاد باشه (مثل کار این دوست عزیزمون) اونوقت بعد از ارسال هر 625 بایت (در صورت خطای 0.16%) اونوقت یا یک بایت خطا خواهیم داشت یا بعد از اون کل اطلاعات خراب میشه
            ولی آقای Saeed Bagherani هم درست میکن توی دستگاههای استادندارد باید از Baud rate های استاندارد استفاده کرد

            دیدگاه


              #7
              پاسخ : برنامه میکرو در پروتئوس درست کار میکنه ولی وقتی رو میکرو میریزمش جواب نمیده

              ضمن سلام به حضور همه دوستان و سلام وِیژه به استاد behi و با ذکر موکد این نکته که من در حضور ایشان درس پس می دهم باید ذکر کنم که برنامه پروتئوس فیوز بیت ها رو چک نمی کنه مطمئنن شما فیوز بیت ها رو چک کنید مساله حل می شه در ضمن برای نرخ انتقال اطلاعات کریستال داخلی 8 مگاهرتز سرعت 9600 ترتیب فیوز بیت ها 1000
              معجزه پس از معجزه می آید و شگفتی ها از تجلی باز نمی مانند.

              دیدگاه


                #8
                پاسخ : برنامه میکرو در پروتئوس درست کار میکنه ولی وقتی رو میکرو میریزمش جواب نمیده

                من مشکلم یه چیزایی شبیه شما بود فقط در پروتوس اجرا نشد اما در عمل جواب داد اصلا به پروتوس اطمینان نکنید :eek: :mrgreen:
                موفقيت بدست آوردن چيزيست كه دوست داري و خوشبختي دوست داشتن چيزيست كه بدست آوردهآ‌اي.

                دیدگاه

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