اطلاعیه

Collapse
No announcement yet.

usart

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

    usart

    با سلام و خسته نباشید
    من یه پروزه ای دارم که باید بین دو میکرو ارتباط بیسیم برقرار بشه یعنی ارتباط باید دو طرفه باشد.
    یه مشکلی پیش امده, که به صورت سیمی که ارتباط برقرار می کنم ارتباط دو طرفه برقرار می شه اما سرعتش خیلی پایینه و اگه بصورت بیسیم ارتباط برقرار کنم که اصلا ارتباط برقرار نمی شه و اگه یکی از مازول های یک طرف را قطع کنم ارتباط برقرار می شه, یعنی به صورت بیسیم نمی شه ارتباط دو طرفه برقرار بشه
    ممنون می شم که بگید مشکل این برنامه کجاست (مازول هاhmt433وhmr433)و میکروavr-16
    باتشکر
    اینم برنامه


    http://upload.yazdkit.com/download.php?file=530fg.zip

    #2
    پاسخ : usart

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

    دیدگاه


      #3
      پاسخ : usart

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

      دیدگاه


        #4
        پاسخ : usart

        با سلام
        دوست عزیز فایل زیپ باز نمیشه !

        دیدگاه


          #5
          پاسخ : usart

          hmt و hmr یک طرفه هستند اگر می خواهید دو طرفه باشه باید از hmtr ها استفاده کنید. که اون هم full douplex نیست یعنی در یک لحظه نمی توانید هم ارسال داشته باشید و هم دریافت(مثل ارتباط دو سیمه)...
          فایلتون هم باز نشد ولی اگر با hmr و hmt کار می کنید سرعت ارسال دیتا مهمه اگر خیلی سریع یا خیلی آهسته باشه دریافت ندارید. البته این در صورتی هست که ارتباط رو کد کرده باشید....و حتماً باید این کار رو بکنید(کد کنید) دیدید که زمانی که هیچ ارسالی هم نداریم دیتا دریافت می کنه که برای جلوگیری از این کار باید کد کرد و اگر کد می کنید باید به سرعت ارسال توجه کنید.

          دیدگاه


            #6
            پاسخ : usart

            ممنون از جوابتون
            من تو کد کردن وفرستادن مشکل دارم اگه براتون ممکنه می شه کمی درباری کد کردن توضیح دهید خیلی از تون ممنون می شم

            دیدگاه


              #7
              پاسخ : usart

              نوشته اصلی توسط 1morteza
              ممنون از جوابتون
              من تو کد کردن وفرستادن مشکل دارم اگه براتون ممکنه می شه کمی درباری کد کردن توضیح دهید خیلی از تون ممنون می شم
              سلام مرتضی جان ببخشید که من چند وقت نبودم...
              روش های مختلفی است ولی یکی از بهتریناش اینه:
              به ازای هر کدام از data ها چند تا کد بفرستی...5 تا 6 تا خوبه...
              فرض کن مثلا شش تا کد 0x14 , 0x30 , 0xA0 و .......
              اون موقع تو گیرندت این کد ها رو تعریف می کنی..
              یک متغیر تعریف می کنی مثل permit
              اون موقع به ازای اولین کد permit رو یک می کنی
              به ازای دومین کد و در صورت یک بون permit , permit رو دو می کنی
              به ازای سومین کد و رد صورت دو بودن permit ,permit رو سه می کنی...
              یه چیزایی اینجا برات می نویسم:
              کد:
              if(data==0x14 && permit=2)          permit=3;
              if(data==0x30 && permit=1)         permit =2;
              if(data==0x0A)     permit=1;
              فقط توجه کنید که ترتیب if ها باید همینطور باشد یعنی از پایین به بالا . اولین کد در آخرین if بررسی می شود و همینطور رو به بالا....

              دیدگاه


                #8
                پاسخ : usart

                البته این فرمی که دوستمون گفتن یک پیاده سازی اولیه یک ماشین وضعیت هست. کاری که با یک switch معمولا انجام میشه.
                اما عمدتا این جور مواقع ایراد از دو تا مورد اساسی هست. اول اینکه همیشه فرض میکنیم مثلا 10 بایت همیشه باید اون طوری که ارسال کردیم به دست گیرنده برسه. و دوم اینکه timeout چک نمیشه. مثلا اگر به هر دلیلی منتظر عدد 10 باشیم ممکنه این بایت هیچ وقت به دست گیرنده نرسه. بنا براین بعد از یک مدتی عمل خوندن باید ری استارت بشه.
                تازه ممکنه به هر دلیلی ما عدد 10 رو بفرستیم ولی گیرنده عدد 11 رو بگیره. توجه کنین که این دو تا عدد فقط در یک بیت تفاوت دارن.

                دیدگاه

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