اطلاعیه

Collapse
No announcement yet.

مشکل در uart

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

    مشکل در uart

    سلام
    من دو تا میکرو رو با uart به هم وصل کردم
    از طریق میکروی سند و دستور putchar در فاصله های زمانی متفاوت اعدادی رو روی میکروی رسیو میفرستم
    این اعداد رو روی میکروی رسیو به کمک درستور get char روی سون سگمنت سه تایی نمایش میدم
    خوب مشکل از اینحا شروع میشه
    در واقع مشکل با رفرش اصلاعات روی سون سگمنت هست
    اعدادی که من میفرستم درست نمایش داده میشه ولی مثلا برای یک ثانیه
    اگر عدد دوم دیر بیاد سون سگمنت خاموش میشه تا عدد بعدی ارسال بشه
    این مشکل رو چطوری رو میتنوم بر طرف کنم .
    این متن دستور میکروی رسیو هست

    کد:
    while (1)
       {
       k=getchar();
       c=k;
         h=c/1000 ;
         s=c/100;
         d=c/10;
         y=c%10;
        
         for(i=0;i<80;i++)
         {
          PORTB=segy[y] ;
          
          PORTC.7=0;
          delay_ms(5);
          PORTC.7=1;
          
          PORTB= segd[d] ;
          
          PORTC.6=0;
          delay_ms(5);
          PORTC.6=1;
          
          PORTB= segs[s] ;
          
          PORTC.5=0;
          delay_ms(5);
          PORTC.5=1; 
          
          PORTB= segh[h] ;
          
          PORTC.4=0;
          delay_ms(5);
          PORTC.4=1; 
          
         
         }
        
        
         
         
       }
       
       
      }
    وقتی زندگی به سمت دشوار شدن تغییر مسیر میدهد
    شما به سمت قوی تر شدن تغییر مسیر دهید

    #2
    پاسخ : مشکل در uart

    سلام
    منظورت از این چیه ؟ [code=c]for(i=0;i<80;i++)[/code]
    چرا 80 بار ؟
    http://massoud68.persiangig.com/pict...1406891613.gif

    مشکلتون حل شده ؟؟؟
    پس روي "موضوع به نتيجه رسيد" کليک کنيد !! :job:

    دیدگاه


      #3
      پاسخ : مشکل در uart

      به نظر من شما باید این قسمت رو داخل روتین وقفه ی دریافت uart بذاری :
      [code=c] h=c/1000 ;
      s=c/100;
      d=c/10;
      y=c%10;[/code]

      بعد این قسمت رو داخل حلقه ی while بذاری و کلا for رو برداری :
      [code=c] PORTB=segy[y] ;

      PORTC.7=0;
      delay_ms(5);
      PORTC.7=1;

      PORTB= segd[d] ;

      PORTC.6=0;
      delay_ms(5);
      PORTC.6=1;

      PORTB= segs[s] ;

      PORTC.5=0;
      delay_ms(5);
      PORTC.5=1;

      PORTB= segh[h] ;

      PORTC.4=0;
      delay_ms(5);
      PORTC.4=1; [/code]


      هر موقع داده جدید میاد مقادیر مقادیر h,s,d,y به صورت خودکار پدیت میشن. و شما همیشه داخل حلقه ی while این مقادیر رو نشون بده.
      تابع getchar از polling استفاده میکنه . یعنی اگه داده ای در ورودی uart موجود نباشه اینقدر منتظر میمونه تا داده ی جدید بیاد و اونوقت از تابع خارج بشه و برای همین 7seg در این مدت خاموش می مونه . شما باید از وقفه دریافت uart استفاده کنی . برنامه ی شما نباید هیچ تصوری از زمان رسیدن داده ی جدید داشته باشه ، بلکه باید طوری باشه که هر موقع که داده ی جدید اومد قادر به نشون دادن اون باشه.
      http://massoud68.persiangig.com/pict...1406891613.gif

      مشکلتون حل شده ؟؟؟
      پس روي "موضوع به نتيجه رسيد" کليک کنيد !! :job:

      دیدگاه


        #4
        پاسخ : مشکل در uart

        شما میتونی اول فلاگ دریافت رو چک کنی بعد اگه داده ای اومده بود، توسط getchar داده رو بگیرید.

        کد:
        if(UCSRA & (1<<7) )
          k=getchar();
        گفت که دیوانه نهی لایق این خانه نهی

        دیدگاه


          #5
          پاسخ : مشکل در uart

          [quote=مسعود .]
          به نظر من شما باید این قسمت رو داخل روتین وقفه ی دریافت uart بذاری :
          [code=c] h=c/1000 ;
          s=c/100;
          d=c/10;
          y=c%10;[/code]

          بعد این قسمت رو داخل حلقه ی while بذاری و کلا for رو برداری :
          [code=c] PORTB=segy[y] ;

          PORTC.7=0;
          delay_ms(5);
          PORTC.7=1;

          PORTB= segd[d] ;

          PORTC.6=0;
          delay_ms(5);
          PORTC.6=1;

          PORTB= segs[s] ;

          PORTC.5=0;
          delay_ms(5);
          PORTC.5=1;

          PORTB= segh[h] ;

          PORTC.4=0;
          delay_ms(5);
          PORTC.4=1; [/code]


          هر موقع داده جدید میاد مقادیر مقادیر h,s,d,y به صورت خودکار پدیت میشن. و شما همیشه داخل حلقه ی while این مقادیر رو نشون بده.
          تابع getchar از polling استفاده میکنه . یعنی اگه داده ای در ورودی uart موجود نباشه اینقدر منتظر میمونه تا داده ی جدید بیاد و اونوقت از تابع خارج بشه و برای همین 7seg در این مدت خاموش می مونه . شما باید از وقفه دریافت uart استفاده کنی . برنامه ی شما نباید هیچ تصوری از زمان رسیدن داده ی جدید داشته باشه ، بلکه باید طوری باشه که هر موقع که داده ی جدید اومد قادر به نشون دادن اون باشه

          سپاسگذارم
          حل شد ممنونم از راهنمایتون
          از روش شما مشکل حل شد
          وقتی زندگی به سمت دشوار شدن تغییر مسیر میدهد
          شما به سمت قوی تر شدن تغییر مسیر دهید

          دیدگاه


            #6
            پاسخ : مشکل در uart

            دوستان چطوری میتونم تعداد دفعاتی که udr دریافت شده رو محاسبه کنم
            ببیند
            من تو فرستندم سه حالت دارم
            که در حالت اول کاربر میتواند از بین ده کلید سه کلید را فشار دهد
            در حالت دوم از بین ده کلید پنج کلید را فشار دهد
            و در حالت سوم از بین ده کلید ده کلید را فشار دهد
            میخوام تعداد کلیدهای فشرده شده را در میکروی رسیو داشته باشم
            نمیخوام همراه اطلاعاتی که برای میکروی رسیو میفرستم این اطلاعاتم بفرستم
            وقتی زندگی به سمت دشوار شدن تغییر مسیر میدهد
            شما به سمت قوی تر شدن تغییر مسیر دهید

            دیدگاه

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