اطلاعیه

Collapse
No announcement yet.

مشکل در یک ارتباط ساده در پروژه عملی بین دو میکرو با USART

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

    مشکل در یک ارتباط ساده در پروژه عملی بین دو میکرو با USART

    سلام
    چند روزیه دارم روی ارتباط USART بین دوتا میکرو کار میکنم یه برنامه ی ساده نوشتم ( اطلاعات PINB.0 میکرو فرستنده که یا یک یا صفره که توسط کلید معلوم میشه رو با TXD بفرسته میکرو گیرنده با RXD بگیره و یه led روی PORTA.0 روشن کنه ) تو پروتئوس درست کار میکنه اما عملی کار نمیکنه البته یه سری چیزا رو نمیدونم چون مبتدیم.
    فایل کل پروژه گذاشتم با یه عکس از مدار عملی که بستم نمیدونم مشکل کجاست که جواب نمیده چون هم از پروگرامر مطمئنم هم از سالم بودن میکروها چون با برنامه ساده امتحانشون کردم چنتا مشکل به نظرم اومد میپرسم و اگه مشکله دیگه ایم رو پروژه بود بهم بگید ممنون :
    1 - من میکروهامو (Mega32) گذاشتم روی کریستال داخلی (cksel0=0 و cksel1=0 و cksel2=1 و cksel3=0 ) باید کریستال خارجی استفاده بکنم یا نه ؟ اگه باید استفاده کنم باید برابر هم باشن هر دو کریستال و مقدارشون مهمه با اونی که تو کدویژن تعیین کردم یا نه ؟
    2 - یه چیزایی راجب Boud rate و stop bit خوندم ولی زیاد بلد نیستم البته من دست به تنظیماته اونا نزدم . باید تنظیمشون کنم یا پیش فرض درست هستش ؟
    3 - چیزی که به نظرم میاد انگار هیچ کاری روی پایه ی TXD میکرو فرستنده انجام نمیشه چه کلید قطع باشه و چه وصل.

    لینک عکس پروژه عملی روی برد برد :
    http://upload7.ir/imgs/2014-09/06737197754474929998.jpg
    لینک فایل کدها و پروتئوس پروژه :
    http://s5.picofile.com/file/8142102218/recive_send.zip.html

    برنامه فرستنده و گیرنده :
    [code][
    #include <mega32.h>
    #include <stdio.h>
    #include <delay.h>

    void main(void)
    {
    DDRB=0x0F;

    UCSRA=0x00;
    UCSRB=0x08;
    UCSRC=0x86;
    UBRRH=0x00;
    UBRRL=0x33;

    while (1)
    {
    putchar(PINB.0);
    delay_ms(10);
    }
    }
    ]



    برنامه گیرنده :

    کد:
    [
    #include <mega32.h> 
    #include <stdio.h> 
    #include <delay.h> 
    
    void main(void) 
    { 
    	char a;
    	DDRA=0xFF;
    	
    	UCSRA=0x00;
      UCSRB=0x10;
      UCSRC=0x86;
      UBRRH=0x00;
      UBRRL=0x33;
      
      while (1) 
      {
    		a=getchar();
    		PORTA=a;
        delay_ms(10); 
      };
    }
     ]

    #2
    پاسخ : مشکل در یک ارتباط ساده در پروژه عملی بین دو میکرو با USART

    سلام
    معلومه درست کار نمیکنه
    در فرستنده پین ورودی رو به صورت ورودی تعریف کن و با مقدار یک، pull up کنش
    بعد یک شرط بذار که اگر کلید فشرده شد مقدار 255 رو ارسال کنه

    در گیرنده هم پین رو خروجی قرار بده با مقدار صفر و دائم پورت سریال رو بخون و شرط بذار هر موقع مقدار 255 رو دریافت کردی led رو روشن کنه

    این راه ساده ای هست.
    شبنم از سعی به سرچشمه خورشید رسید صائب تبریزی

    دیدگاه


      #3
      پاسخ : مشکل در یک ارتباط ساده در پروژه عملی بین دو میکرو با USART

      الان فهمیدم , DDRB=0x00 گذاشتم تو فرستنده ولی بازم جواب نداد عملی
      عجیب واسم اینه همون کدهای اولم تو پروتئوس درست جواب میدن مشکل عملیه روی برد جواب نمیده
      منظورتون کد هارو اینطوری کنم : ( اینطوریم انجام دادم ولی نشد , انگار هیچی از پایه ی سریال نمیره اصلا )
      [code]
      [#include <mega32.h>
      #include <stdio.h>
      #include <delay.h>

      void main(void)
      {
      DDRB=0x00;

      UCSRA=0x00;
      UCSRB=0x08;
      UCSRC=0x86;
      UBRRH=0x00;
      UBRRL=0x33;

      while (1)
      {
      if(!PINB.0){
      putchar(0xFF);
      delay_ms(10);
      }
      }
      }
      ]

      برنامه گیرنده :

      کد:
      [
      #include <mega32.h> 
      #include <stdio.h> 
      #include <delay.h> 
      
      void main(void) 
      { 
      	char a;
      	DDRA=0xFF;
      	
      	UCSRA=0x00;
        UCSRB=0x10;
        UCSRC=0x86;
        UBRRH=0x00;
        UBRRL=0x33;
        
        while (1) 
        {
      		a=getchar();
      	if(a==0XFF){	
      PORTA=a;
          delay_ms(10); 
        };
      }
      }
       ]

      دیدگاه


        #4
        پاسخ : مشکل در یک ارتباط ساده در پروژه عملی بین دو میکرو با USART

        با سلام
        اینکه تو پروتئوس جواب میده یعنی مشکل سخت افزاری
        -یه پیشنهاد برای همیشه، تو سر راه منبع تغذیه میکرو یه خازن کوچیک بذار،ده یا صد نانو
        -توی ارتباط UART معمولا مشکل ناشی از تنظیم نادرست کلاک هست.مطمئن شین که کلاک یکرو ها و Baudrate هر دو درست تنظیم شده باشند.
        The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.

        دیدگاه


          #5
          پاسخ : مشکل در یک ارتباط ساده در پروژه عملی بین دو میکرو با USART

          سلام
          به نظرم مشکل سخت افزایه تنها مسئله ای که به مشکل نرم افزاری شک دارم که نمیدونم عملی دیتا ارسال میشه یا نه.یه نگاهی به دوتا لینک پست اولم میندازید لطفا.
          من الان کریستال خارجی برای هیچکدوم نزاشتم و دارن از کریستال داخلی میکرو استفاده میکنم باید کریستال خارجی بزارم ؟
          ببخشید از سوالام ولی میشه بگید دقیقا چیکار کنم واسه این تنظیمات ((مطمئن شین که کلاک میکرو ها و Baudrate هر دو درست تنظیم شده باشند))
          Baudrate کلا باید چطوری تنظیم کنم ؟

          دیدگاه


            #6
            پاسخ : مشکل در یک ارتباط ساده در پروژه عملی بین دو میکرو با USART

            من avr کار نیستم اما مگه با کدویژن کار نمیکنین؟
            می تونین خیلی راحت از wizard استفاده کنین و همه تنظیمات رو اونجا انجام بدین
            در ضمن نه نیازی به استفده از اسیلاتور خارجی نیست.
            و همچنین بله،چک کردم دیتا ارسال میشه از virtual terminal برای تست استفاده کنین.
            The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.

            دیدگاه


              #7
              پاسخ : مشکل در یک ارتباط ساده در پروژه عملی بین دو میکرو با USART

              درسته با کدویژن کار میکنم اما به همه چیزاش مسلط نشدم , مبتدیم . البته از wizard استفاده کردم فرقی با همین کدی که نوشتم نداره
              virtual terminal مگه برای تست یا ارتباط میکرو با pc نیست ؟ اگه اینطوره نمیشه فهمید چون این پروژه ارتباط دوتا میکرو هست

              دیدگاه


                #8
                پاسخ : مشکل در یک ارتباط ساده در پروژه عملی بین دو میکرو با USART

                باز هم مقدار پین وروئی رو در فرستنده یک نکردی. وقتی پین رو ورودی میکنی مقدارش رو هم باید یک کنی (portB = 0x01 , ddrB = 0x00) تا پورت به صورت داخلی pull up بشه
                یا از بیرون با یک مقاومت بالاکش راه اندازیش کنی.
                در گیرنده وقتی مقداری رو از پورت سریال میخونی و در خروجی قرار میدی، بعد از تاخیر دوباره مقدار خروجی رو به حالت قبل برگردون تا خاموش بشه
                مدارت رو هم قرار بده + baud rate
                فقط تصویر باشه ممنونم
                شبنم از سعی به سرچشمه خورشید رسید صائب تبریزی

                دیدگاه


                  #9
                  پاسخ : مشکل در یک ارتباط ساده در پروژه عملی بین دو میکرو با USART

                  عزیزم چه فزقی می کنه، :angry: virtual terminal توی پروتئوس باید به یه ارتباط سریال وصل شه حالا میکرو یا pc چه فرقی داره.شاید با hyper terminal اشتباه گرفتین.
                  حالا کلا همه چی رو ول کنیم.نظر من اینه.
                  -برنامه درسته چون داره درست اجرا میشه.پس اشکال baudrate نداریم
                  مشکلات که می تونه باشه:
                  -تنظیم نادرست فیوز بیت ها
                  -قطعی سیم های رابط(بوق چک بگیر ببین وصله)
                  -قطعی برد بورد(شاید یه تیکش مورد داره)
                  The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.

                  دیدگاه


                    #10
                    پاسخ : مشکل در یک ارتباط ساده در پروژه عملی بین دو میکرو با USART

                    shahab_taheri :
                    توی پست اولم دو تا لینک هست یکیش عکس مداره عملیه یکیش کله پروژه هست شامله کدها و پروتئوس
                    اگه تصویر عملیه مدارو ببینی با یه مقاومت pull up اومدم PINB.0 فرستنده صفر کردم و دادمش به یه کلید که اگه کلید وصل بشه PINB.0 یک میشه و برنامه اجرا میشه
                    *******************
                    hessam2013 :
                    قطعی برد ندارم چون با مولتی متر تست کردم
                    درسته شاید مشکل از فیوز بیت ها باشه اما من جز CKSElها بقیه اونا رو فعال نکردم

                    دیدگاه


                      #11
                      پاسخ : مشکل در یک ارتباط ساده در پروژه عملی بین دو میکرو با USART

                      اگر گفتم buad rate میخواستم توی کامپیوتر خودم امتحان کنم
                      اگر گفتم تصویر شماتیک چون عکس مدار عملی چیزی رو نشون نمیده
                      و من توی کامپیوترم پروتئوس ندارم
                      مقاومت pull up داخلی برای کم کردن حجم مداره
                      و گفتم که که بعد از فشار کلید led روشن میشه و شما خاموشش نمیکنی. قطعی برد و سیم و این چیزا هم خیلی کمه که بخواد توی یه همچین مدار ساده ای پیش بیاد.
                      شبنم از سعی به سرچشمه خورشید رسید صائب تبریزی

                      دیدگاه


                        #12
                        پاسخ : مشکل در یک ارتباط ساده در پروژه عملی بین دو میکرو با USART

                        :biggrin: :biggrin: :biggrin: :biggrin: :biggrin: :biggrin: :biggrin:
                        راستی اگه فیوز بیت ها رو همون طور که تو پست اول گفتی گذاشتی پس من می دونم مشکل از کجاست
                        :agree: :agree: :agree: :agree:
                        The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.

                        دیدگاه


                          #13
                          پاسخ : مشکل در یک ارتباط ساده در پروژه عملی بین دو میکرو با USART

                          shahab_taheri :
                          لینک عکس شماتیک مدار :
                          http://upload7.ir/imgs/2014-09/84077180880033060859.png
                          buad rate چیشو باید قرار بدم درست نمیدونم چون اصلا دست بهش نزدم

                          **************
                          hessam2013 :
                          آره فیوزبیت ها رو همونطور گذاشتم (cksel0=0 و cksel1=0 و cksel2=1 و cksel3=0 ) و بقیه شونم ی گذاشتم بمونه (غیرفعال)
                          مشکل از کجاس ؟

                          دیدگاه


                            #14
                            پاسخ : مشکل در یک ارتباط ساده در پروژه عملی بین دو میکرو با USART

                            اول ببین میتونی یه چشمک زن ساده بسازی یعنی 200 میلی ثانیه خاموش و 200 میلی ثانیه روشن
                            اگر نشد فیوزبیت کلاک داخلیت غیرفعاله
                            فکر نمیکنم توی پروتئوس برای میکروها فیوزبیت تعریف شده باشه به همین دلیل توی پروتئوس کار میکنه
                            شبنم از سعی به سرچشمه خورشید رسید صائب تبریزی

                            دیدگاه


                              #15
                              پاسخ : مشکل در یک ارتباط ساده در پروژه عملی بین دو میکرو با USART

                              یه سری به این سایت بزن
                              زین پس از این سایت استفاده کن
                              فیوز بیت های شما اسیلاتور داخلی رو از کار انداخته اند.
                              http://www.engbedded.com/fusecalc/
                              The healthy human mind doesn't wake up in the morning thinking this is his last day on earth.

                              دیدگاه

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