اطلاعیه

Collapse
No announcement yet.

مشکل با ارتباط سریال usart

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

    مشکل با ارتباط سریال usart

    سلام دوستان
    کل اینترنت رو زیر و رو کردم اما نمیدونم چرا اینطوریه
    مشکل من ارتباط usart بین دو میکرو هستش وقتی یه رشته به عنوان مثال کلمه kavosh رو میفرستم ، ارتباط بر قرار میشه ، دیتا میره ، اما رو lcd کارکتر های عجیب غریب نشون میده ، چند بار امتحان کردم اما نشد ولی توی پروتوس همه چیز صحیح کار میکنه
    اومدم کار رو ساده تر کردم، و با دستور putchar(a) یه ارتباط برقرار کردم ، اما اونور معادل اسکی رو نشون داد
    کل مقاله های در مورد usart رو خوندم اما به نتیجه ای نرسیدم
    این کد فرستنده:

    کد:
    #include <mega16.h>
    #include <delay.h>
    #include <stdio.h>
    #define xtal 8000000
    void main(void)
    {
    UCSRA=0x00;
    UCSRB=0x08; // USART Transmitter: On
    UCSRC=0x86; //8 Data, 1 Stop, No Parity
    UBRRH=0x00;
    UBRRL=0x33; // USART Baud rate: 9600
    delay_ms(1000);
    putsf(" Kavosh ");
    while (1);
    }

    اینم کد گیرنده:
    کد:
    #include <mega16.h>
    #include <stdio.h>
    #include <lcd.h>
    #define xtal 8000000
    #asm
    .equ __lcd_port=0x1B ;PORTA
    #endasm
    char a[10];
    void main(void)
    {
    UCSRA=0x00;
    UCSRB=0x10; // USART Receiver: On
    UCSRC=0x86; //8 Data, 1 Stop, No Parity
    UBRRH=0x00;
    UBRRL=0x33; // USART Baud rate: 9600
    lcd_init(16);
    lcd_clear();
    lcd_putsf("Waiting...");
    gets(a,10);
    lcd_clear();
    lcd_puts(a);
    while(1);
    }

    سوال دومم هم اینه که اگه بخوام یه عدد اعشاری مثل دمای خونده شده از ds18b20 رو بستم برای میکروی دوم و میکرو روی lcd نشون بده ، کد برنامه نویسیش چطوری میشه؟

    #2
    پاسخ : مشکل با ارتباط سریال usart

    (با توجه به اینکه میگی تو پروتئوس جواب درسته) احتمالا در مدار واقعی یه چیزی مثل رابط jatg رو باید غیر فعال کنی

    دیدگاه


      #3
      پاسخ : مشکل با ارتباط سریال usart

      Jtag غیر فعال هست
      میکرو با کریستال خارجیه 11.0592 کار میکنه
      باود ریت ها از کمترین تا بیشترین تست شد
      میکرو mega 16 , mega32 رو امتحان کردم نشد
      خیلی مشکل عجیبیه اینو من رو چنتا برد ساختم جواب نداد ، اما تو پروتوس خیلی قشنگ جواب میده
      سوال دومی رو کسی نظری نداره؟

      دیدگاه


        #4
        پاسخ : مشکل با ارتباط سریال usart

        یعنی سوالم اینقدر عجیب بود که هیچ کسی کمک نمیکنه؟
        بابا اینهمه مهندس اینجاس

        دیدگاه


          #5
          پاسخ : مشکل با ارتباط سریال usart

          با سلام،

          من پیشنهاد میکنم که میکروی فرستنده و گیرنده رو تک - تک به پورت سریال PC متصل کنی یعنی با فرستنده به PC ارسال بشه، ببینی که فرستنده درست میفرسته و گیرنده رو هم بعدش به PC متصل کنی و با هایپر ترمینالی، چیزی، بهش بفرستی و ببینی که گیرنده هم درست میگیره یا نه، اینطوری از سخت افزار و نرم افزارت مطمئن میشی، اگر این تست هات درست بود، اونوقت بگو تا یه فکری بکنیم :biggrin:

          و اما در مورد سوال دومت، رویه اینه که مقادیر رو بریزی روی یه متغیر رشته ای و بعدش متغیر رشته ای رو بفرستی روی پورت سریال ( همونطوری که میخوای بریزی روی مثلا LCD ، دقیقا همون کار رو باید انجام بدی، فقط فرقش اینه که بجای LCD میفرستیش روی پورت سریال ) ....
          مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

          Sh_Nourbakhsh@Yahoo.com

          http://s2.picofile.com/file/7170362468/_Wall_e_.jp

          دیدگاه


            #6
            پاسخ : مشکل با ارتباط سریال usart

            سلام دوستان
            درسته که من اینجا نتونستم جوابمو از استید که سرشون شلوغه بگیرم ، اما اینقدر با این ماژول ها سروکله زدم تا راه افتاد
            دوستانی که تو راه اندازی این ماژول ها مشکل دارن به نکات زیر دقت کنن
            1- باود ریت رو روی 9200 ، 8 بیت ارسال بدون توقف ( حالت پیش فرض ماژول همینه ) بزارن!
            2- اول با اوسیلاتور کالیبره داخلی میکرو که روی 8 مگ تنظیم شده جواب بگیرن ، بعد از کریستال خارجی استفاده کنن
            3-توی ماژول های ht-tr حتما حداقل یک طرف از آنتن استفاده کنن ، چون واقعا توی فاصله 5 سانتی هم هیچی ارسال نمیشه
            4- رمزگذاری روی اطلاعات توی شروع مهم نیست ، اول با ماژولتون به نتیجه برسید ، بعد از رمز گذاری و این چیز میزا استفاده کنید
            5- ابتدا با سیم به جواب برسید و ببینید که میکرو واقعا داره یه چیزی ارسال میکنه ، بعد بی سیمش کنید!
            6- نویز زیاد توی دیتای این ماژول ها تاثیر نمیذاره ، پس وقتی یه دیتای واقعا عجیب غریب رسید دستتون گیر ندید به نویز ( مداری که من ساختم با یه آداپتور 12 ولت قدیمی ، با یه پل دیود آماده ؛ بدون خازن که وصل شده به 7805 و باز بدون خازن رفته تو میکرو و ماژول ، اما دیتا داره عین آدم ارسال میشه )
            7- توی شروع برنامه نویسیتون ، اگه به محض وصل شدن برق به میکرو ، یه دیتایی ارسال میشه ، چون این ماژول ها یه زمانی لازم دارن تا با هم ست بشن ، احتمال داره یکمی از دیتاتون بپره! پس یه تاخیر 1 ثانیه بدید ، بعد که ماژول آماده بود ، ارسال و دریافت رو انجم بدید
            این ها همش تجربیات این چند وقته بود !!!
            موفق باشید

            دیدگاه


              #7
              پاسخ : مشکل با ارتباط سریال usart

              با سلام،

              ایول!!! اینایی که شما گفتی مربوط به موضوع این تاپیک بود؟!

              من فکر کردم که موضوع سوال اینه :
              نوشته اصلی توسط x_force
              .... مشکل من ارتباط usart بین دو میکرو هستش وقتی یه رشته به عنوان مثال کلمه kavosh رو میفرستم ، ارتباط بر قرار میشه ، دیتا میره ، اما رو lcd کارکتر های عجیب غریب نشون میده .....
              :-O ~x( oo:
              مادامی که از شخصی یاد میشود، او و افکارش زنده اند ....

              Sh_Nourbakhsh@Yahoo.com

              http://s2.picofile.com/file/7170362468/_Wall_e_.jp

              دیدگاه


                #8
                پاسخ : مشکل با ارتباط سریال usart

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

                دیدگاه


                  #9
                  پاسخ : مشکل با ارتباط سریال usart

                  سلام
                  اقایون من یه کد نوشتم به شرح زیر و یه ال ای دی به پورت b.0 گیرنده زدم وقتی که 1 ارسال میشه ال ای دی روشن و 2 ارسال شد خاموش میشه ولی یه مشکل واقعا مسخره وجود داره اینه که برای اولین بار خودم روشن خاموش میکنم بعدش خودش روشن و خاموش میشه

                  فرستنده:
                  #include <mega8.h>
                  #include <stdio.h>
                  #include <delay.h>

                  void main(void)
                  {

                  UCSRA=0x00;
                  UCSRB=0x8;
                  UCSRC=0x86;
                  UBRRH=0x00;
                  UBRRL=0x33;
                  DDRB=0b00000000;
                  while (1)
                  {

                  if(PINB.0==1)
                  {
                  putchar('1'
                  }
                  delay_ms(50);

                  if(PINB.1==1)
                  {
                  putchar('2'
                  }
                  delay_ms(50);
                  }
                  }


                  گیرنده:
                  #include <mega8.h>
                  #include <stdio.h>
                  #include <delay.h>


                  void main(void)
                  {
                  char input;

                  UCSRA=0x00;
                  UCSRB=0x10;
                  UCSRC=0x86;
                  UBRRH=0x00;
                  UBRRL=0x33;
                  DDRB=11111111;

                  while (1)
                  {
                  input=getchar();

                  if(input=='1&#039
                  {
                  PORTB.0=1;
                  }

                  if(input=='2&#039
                  {
                  PORTB.0=0;
                  }

                  }
                  }

                  دیدگاه


                    #10
                    پاسخ : مشکل با ارتباط سریال usart

                    سلام به دوستان
                    یه مشکل عجیب در ارتباط میکرو با pc بوجود اومده
                    این برنامه رو ببینید :
                    کد:
                    [FONT=Yekan]gets(str,1);[/FONT]       for ( i=0; i<80; i++ )
                            {
                             str[0] = i; 
                             str[1] = read_adc(5);      
                             delay_ms(2);
                             puts( str );
                    [FONT=Yekan]        }[/FONT]
                    تو این برنامه هر 2ms یکبار سطح ولتاژ متصل به پین پنجم ADC اندازه گیری میشه و به pc فرستاده میشه
                    هر داده ارسالی به این صورت هست 0A 01 7F که 01 شماره داده اندازه گیری شده هست ( شماره 1 ) و 7F مقدار ولتاژ اندازه گیری شده
                    حالا این ترکیب ارسال از شماره 13 به بعد عوض میشه به عکس کنید
                    خواستم دلیل این مسئله رو بدونم ؟؟؟

                    آرزوی سرافرازی برای ایران عزیز . . .


                    دیدگاه


                      #11
                      پاسخ : مشکل با ارتباط سریال usart

                      سلام
                      وقتی با تابع gets() میخوای یه رشته رو دریافت کنی, باید انتهای رشته هم معلوم باشه و در این تابع gets() , انتهای رشته با کلید اینتر (CR) معلوم میشه.... معادل کاراکتر اینتر هم عدد 13 هست…
                      حالا وقتی که شما میخوای توی خونه های اون رشته Str , دیتا بریزی, چون رسیده به 13, فکر میکنه انتهای رشته هست و درنتیجه حالت سرریز رخ میده و اطلاعات بافر قبلی هم پاک نمیشه و همینطوری ادامه پیدا میکنه...

                      پیشنهادی که دارم, دیتا رو به جای تابع gets(), با وقفه RX میکرو دریافت کن, بعد توی حلقه اصلی با Printf , به جای ()puts ارسال کن...

                      دیدگاه

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