اطلاعیه

Collapse
No announcement yet.

راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR

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

    #31
    پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR

    سلام

    خیلی خیلی ممنون
    ولی چرا وقتی که من با بسکام و AVR کار می کردم یک کلمه مثلن Masood رو در یک رشته یعنی String قرار می دادم و با HM-T می فرستادم و در گیرنده که HM-R بود به طور کامل کلمه Masood رو دریافت می کردم ، تازه If هم میزاشتم که اگه Masood شد ....
    حالا چرا با ARM نمیشه این کار رو کرد؟؟
    الان من HM-TR هارو قطع کردم و HM-T و HM-R رو وصل کردم ولی باز هم همان مشکل بود
    با راهنمایی های شما آقای روزیطلب من اعداد رو پس می توانم بفرستم ولی دائمن (این کلمه درست است مثلن باید بگید حتمن) باید getkey بگذارم ،
    منظور شما همان مبنای ده دهی هست دیگه آره ؟

    با سپاس
    http://vz.iminent.com/vz/39a77668-19...h-fishing.giff

    دیدگاه


      #32
      پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR

      این برنامه گیرنده :
      درست است ؟

      while (1)
      {
      lcd_clear();
      cursor_off();
      lcd_gotoxy(1,1);
      lcd_putsf("Resived Data :"
      a = getkey();
      b = getkey();
      c = getkey();
      d = getkey();
      e = a * 10 + b * 10 + c * 10 + d;
      lcd_gotoxy(2,1);
      lcd_putchar(e);
      delay_ms(100);
      }
      }
      http://vz.iminent.com/vz/39a77668-19...h-fishing.giff

      دیدگاه


        #33
        پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR

        سلام

        برنامه قبلی عمل نکرد به برنامه زیر تغییرش دادم ولی رو LCD حرف K رو نشان می دهد ؟

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

        char a,b,c,d,e,f,g,h,i,j;

        while (1)
        {
        lcd_clear();
        cursor_off();
        lcd_gotoxy(1,1);
        lcd_putsf("Resived Data :"
        a = getkey();
        b = getkey();
        c = getkey();
        d = getkey();
        e = a * 10;
        f = e + b;
        g = f * 10;
        h = g + c;
        i = h * 10;
        j = i + d;
        lcd_gotoxy(2,1);
        lcd_putchar(j);
        delay_ms(100);
        }
        }

        با سپاس
        http://vz.iminent.com/vz/39a77668-19...h-fishing.giff

        دیدگاه


          #34
          پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR

          خوب مگه کتابخونه اش تابع نداره که آرایه رو دونه دونه پر کنه؟
          در مورد برنامه:
          فکر کنم شما درست فرق بین کد اسکی و مقدار عددی رو نفهمیدید
          اون مقدار که به lcd میفرستید فکر کنم معادل اصلیش بشه K برای اینکه خود مقدار رو ببینی باید یه تابع پیدا کنی که مقدار عددی رو به اسکی تبدیل کنه تا روی LCD ببینی امتحان کن ببین تابع itoa هست یا نه؟تابعی که مثلا متغیر از نوع int رو به کد اسکی یا ascii تبدیل کنه
          این تابع میاد متغیر مورد نظر و یه آرایه رو میگیره و کد اسکی رقم های عدد توی متغیر رو میریزه توی آرایه بعد شما میای و رشته رو نمایش میدی البته این کد اسکی استانداردیه که برای نمایش توی کامپیوتر و LCD به کار میره ولی از نظر مقدار یه عدد هست مطمئنم اگر روی پایه های پورت نشون بدی و تبدیل مبنا بکنی میبینی مقدارش همونه

          دیدگاه


            #35
            پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR

            سلام

            یعنی با برنامه ی بالا من به عدد 1234 رسیده ام ولی روی LCD به صورت کاراکتر K نمایش داده می شود ، درسته ؟؟

            با سپاس
            http://vz.iminent.com/vz/39a77668-19...h-fishing.giff

            دیدگاه


              #36
              پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت &#

              نوشته اصلی توسط Soodi
              سلام

              یعنی با برنامه ی بالا من به عدد 1234 رسیده ام ولی روی LCD به صورت کاراکتر K نمایش داده می شود ، درسته ؟؟

              با سپاس
              الآن که برنامه رو میبینم میفهمم که شما عملا به هیچ جواب درستی نمیرسید
              اون قضیه ای رو که گفتم درباره LCD هنوز پا برجاست ولی متغیر های شما اینقدر جا نداره!!!
              فکر کنم باید از long long استفاده کنید
              متغیرتون سر ریز میشه!
              شما کاری که میخواید بکنید رو دقیق بگید تا خدمتتون عرض کنم چی کار کنید
              چون اینطوری عملا جواب نمیگیرید دو راه دارید که برنامع درست کار کنه

              دیدگاه


                #37
                پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR

                سلام.مثلما 1234 برابر با مقدار کاراکتری k نیست.برای اینکه ببینید چه مقدار عددی ارسال شده از lcd_puts استفاده کن تا بفهمی جه مقداری ارسال شده

                دیدگاه


                  #38
                  پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت &#

                  سلام

                  من با برنامه زیر تا 3 رقم رو بدون مشکل ارسال و دریافت کردم ولی بالاتر از 3 رقم رو Keil هم Warning می داد ، فکر کنم اشکال از متغیر ها باشه ؟

                  گیرنده :

                  #include <AT91SAM7X256.H>
                  #include <delay.h>
                  #include <usart.h>
                  #include <stdio.h>

                  #define LCD_PORT_B
                  #define LCD_RS 0
                  #define LCD_E 1
                  #define LCD_DB4 5
                  #define LCD_DB5 4
                  #define LCD_DB6 3
                  #define LCD_DB7 2
                  #include <lcd.h>

                  int main (void)
                  {

                  char a;

                  lcd_init();
                  lcd_clear();
                  cursor_off();
                  lcd_gotoxy(1,1);
                  lcd_putsf("Resived Data With"
                  lcd_gotoxy(2,1);
                  lcd_putsf(" ++** HM-TR ++**"
                  usart0_init(2,9600);
                  delay_ms(500);

                  while (1)
                  {
                  lcd_clear();
                  cursor_off();
                  lcd_gotoxy(1,1);
                  lcd_putsf("Resived Data :"
                  a = getkey();
                  lcd_gotoxy(2,1);
                  lcd_puts(a);
                  delay_ms(100);
                  }
                  }

                  فرستنده :

                  #include <AT91SAM7S64.H>
                  #include <delay.h>
                  #include <usart.h>
                  #include <stdio.h>

                  #define LCD_PORT_A
                  #define LCD_RS 30
                  #define LCD_E 29
                  #define LCD_DB4 25
                  #define LCD_DB5 26
                  #define LCD_DB6 27
                  #define LCD_DB7 28
                  #include <lcd.h>

                  int main (void)
                  {

                  char a;
                  a = 153;

                  lcd_init();
                  lcd_clear();
                  cursor_off();
                  lcd_gotoxy(1,1);
                  lcd_putsf("Sending Data With"
                  lcd_gotoxy(2,1);
                  lcd_putsf(" ++** HM-TR ++**"
                  usart0_init(2,9600);
                  delay_ms(500);

                  while (1)
                  {
                  lcd_clear();
                  cursor_off();
                  lcd_gotoxy(1,1);
                  lcd_putsf("Sending Data :"
                  sendchar(a);
                  delay_ms(100);
                  }
                  }


                  با سپاس
                  http://vz.iminent.com/vz/39a77668-19...h-fishing.giff

                  دیدگاه


                    #39
                    پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR

                    جوابی نیست ؟؟؟؟؟؟؟؟؟

                    تازه این 3 رقم هم تا 231 بیشتر نمیشه ، اگه بیشتر بدم 48 و 27 و این چرت و پرت هارو میفرسته

                    با سپاس
                    http://vz.iminent.com/vz/39a77668-19...h-fishing.giff

                    دیدگاه


                      #40
                      پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR

                      اولا اینکه من فکر کنم شما تمام قسمت های پروژتون رو از این و اون پرسیدید از تاپیک های مرتبط کمی معلومه
                      دوما اینکه شما اصلا به حرف های من توجه نمیکنید که من بتونم کمکتون کنم داریم اصولی جلو میریم و قدم به قدم که یاد بگیرید اگر هم کد میخواید خوب بگید کد میخواید دیگه
                      سوما من با توابع این کتابخونه ها زیاد آشنا نیستم ولی این ها خیلی شبیه کد ویژن هستند و من با مشابهشون کار کردم دنبال تابع تبدیل int به ascii گشتید؟
                      یا اینکه بجای نمایش روی LCD روی پورت نشون دادید که ببینید مقدار داخلی متغیر دریافتی چیه؟
                      تا این کار ها رو انجام ندید من هم نمیفهمم مشکلتون دقیقا از چیه چند بار هم جواب دادم ولی مثل اینکه متوجه نشدید
                      از اونجایی که من فهمیدم شما میخواید که مثلا مقدار داخل متغیر رو روی کاغذ بنویسید و اون رو رقم رقم همون طوری که روی کاغذ نوشته شده بفرستید
                      اما یه راه دیگه هم هست شما خود مقدار متغیر رو میریزید توی رجیستر ارسال و بعد اونور میگیرید خوبی این کار اینه که قبل از اینکه قابل نمایش دادن بشه شما میتونید از اون استفاده بکنید و دیگه نیازی ندارید اون رو دوباره رقم رقم جدا کنید و ضرب در توانی از 10 بکنید و بتونید از خود مقدار که برای محاسبات استفاده میشه تبدیل کنید
                      تا درست و دقیق جواب ندید کار جلو نمیره

                      دیدگاه


                        #41
                        پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت &#

                        سلام

                        پروژه ای که شما می فرمایید من هنوز کاری نکرده ام فقط راه اندازی HM-TR هست که به دلیل این که راه اندازی این ماژول و هنچنین ماژول های HM-T و HM-R در Bascom-AVR بسیار آسان است من نیز به چنین مشکلاتی بر نخورده بودم و فقط با ارسال یک String که می توانست شامل حروف نیز باشد و یا ارسال یک متغیر و دریافت آن ، این ماژول رو به درستی راه اندازی کرده بودم
                        و در مورد تاپیک هایی که شما می فرمایید من بار دیگر اعلام می کنم که کار با ARM رو به تازگی شروع کرده ام و با زبان C یا C++ هیچ آشنایی ندارم
                        و به دلیل آسانی کار با زبان بیسیک و Bascom-AVR خودم رو درگیری مسائلی همچون آرایه ها و توابع و ... نکردم زیرا در بیسیک و بسکام احتیاجی به این چیز ها نیست

                        که من برای یادگیری زبان C کتاب آقای جعفرنژادقمی رو تهیه کردم ولی هنوز موفق به خواندن آن نشده ام و برای یادگیری ARM نیز از مجله های PMM استفاده کردم و LCD کاراکتری و LCD N96 + Toch Screen و سنسور شتاب سنج 3 بعدی و LM35 و گیرنده لیزر و .......... رو راه اندازی کردم و الان هم که روی پروژه HM-TR کار می کنم و در کنار این آیسی ساعت M48T86 رو نیز در سدد راه اندازی آن هستم
                        لازم به ذکر است که ساعت و ارتباط بیسیم و ... همه در یک پروژه نهایی که راهنمای بیماران هست کاربرد دارد و هدف اصلی من این پروژه است که الان دارم روی قسمت های اصلی آن کار می کنم که یکی از این قسمت ها ارتباط بی سیم است
                        و راه اندازی سنسور شتاب سنج نیز برای ساخت رباتی است که روی 2 چرخ تعادل خود رو حفظ می کند که این ربات نیز در مراحل پایانی است و همه ی مدارات لازم طراحی و ساخته شده است ولی به دلیل مسائل حفظ تعادل و چند طبقه بودن و ارتقاع زیاد ربات هنوز باتری و مدار ها رو روی ربات نصب نکرده ام اگر شد یک تصویر ازش میزارم خیلی جالب شده


                        با سپاس
                        http://vz.iminent.com/vz/39a77668-19...h-fishing.giff

                        دیدگاه


                          #42
                          پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR

                          آرایه اینطوری تعریف میشه:
                          کد:
                          char a[10];
                          به اینصورت که a نام آرایه هست و 10 تعداد عضو ها که هر کدوم قابل تغییر هستند
                          برای دسترسی به اون هم میتونی از
                          کد:
                          a[0]=9;
                          استفاده کنید که 0 عدد عضویه که میخواید بهش دسترسی داشته باشید که از 0 شروع میشه تا تعداد اعضا منهای یک
                          به جای 0 متغیر هم میشه گذاشت که مثلا بشه توی یه حلقه راحت عضو ها رو مقدار دهی کرد
                          کد:
                          int x=1;
                          char a[10];
                          a[x]=78;
                          حالا نگفتید میخواید رقم رقم ارسال کنید یا کل متغیر رو یک جا؟
                          من پیشنهادم کل متغیر رو یک جا ارسال کنیم بهتره
                          بهتره بیسیک رو برای آرم فراموش کنید اینجا زبان فقط C هستش

                          دیدگاه


                            #43
                            پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR

                            سلام

                            من می خواهم که کل متغیر رو یکجا ارسال کنم و یا یک کلمه رو به صورت یکجا ارسال کنم و در گیرنده نیز به صورت یکجا دریافت کنم ولی دوستان فرمودند که اساس کار این ماژول به این صورت است که یک متغیر رو به صورت تکه تکه و در چند مرحله ارسال می کند ولی چرا با توجه به برنامه ای که در بالا گزاشتم تا 3 رقم رو به صورت یکجا ارسال می کرد و در گیرنده نیز به درستی این 3 رقم دریافت می شد ، البته این 3 رقم فقط تا 231 بود یعنی اگر بالاتر می زدم همون 231 رو دوباره می گرفت ، اگر راهی بود که بالاتر از 3 رقم رو می شد ارسال کرد و یا حداقل این 3 رقم تا 999 بود ، نه تا 231 !!!!

                            بالاخره با این اوصاف AVR و زبان بیسیک بهتر بود چون کل متغیر و یا یک رشته (یک کلمه یا جمله) رو به صورت یکجا ارسال می کرد و به صورت یکجا دریافت می کرد ، حتا روی LCD هم به درستی و بدون تبدیل کد اسکی و این چیز ها نشان می داد

                            با سپاس
                            http://vz.iminent.com/vz/39a77668-19...h-fishing.giff

                            دیدگاه


                              #44
                              پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR

                              باسلام.شما وقتی از دستور lcd_putchar استفاده میکردی و عدد یک و دو و سه نشون میداد دلیلش این بوده که مقدار کاراکتری یک و دو سه ارسال میشه.مقدار کاراکتری 1 برابر 49 هست یعنی اگه شما بنویسید(49)lcd_putchar تازه روی lcd مقدار 1 رو نشون میده!یه امتحانی بکن ببین اگه از هر متغییری که توی دستور getkey() استفاده کردی،اگه 48 تا کم کنی درست میشه؟
                              بله avr صد در صد برای این کار بهتره.اشتباه ما هم اینجاست که بجای اینکه بریم امکاناتی از arm مثل ethernet,usb,can ,...... رو یاد بگیریم،میخوایم همون کارهایی رو که با avr مثل اب خوردن انجام میدیم،بریم با ارم یاد بگیریم

                              دیدگاه


                                #45
                                پاسخ : راه اندازی واحد USART در AT91SAM7S64 و ارسال و دریافت با HM-TR

                                سلام

                                من دیگه AVR رو کنار گزاشتم ، برایم فرقی ندارد که از هیچ کدوم از امکانات ARM استفاده نکردم من فقط می خواهم کارم راه بیفتد ، مگه ARM رو ساختن که فقط باهاش پروژه های خیلی بزرگ یا ethernet,usb,can رو راه انداخت ، هر کسی می تونه هر کاری با این میکرو بکنه ، شاید دلش بخواهد که چراغ چشمک زن بسازه ، چه اشکالی داره ؟ ، اون موقع هم که AVR تازه اومده بود همه فکر می کردند که برای کار های بزرگ ساخته شده ولی کم کم یک چیز بهتر مثل ARM اومد و حالا AVR رو کسی قبول نداره !!!

                                ****** خوب من ماژول ها رو از مدار خارج کردم و با یک تکه سیم میکرو ها را به یکدیگر متصل کردم و متوجه شدم که وقتی من با دستور SendChar عدد 789 رو ارسال می کنم (با متغیر int ) در گیرنده عدد 25 دریافت می شود ، حتا این دفعه یک دستور IF گزاشتم که وقتی متغیر 21 شد بازر رو روشن کن و دیدم که بازر روشن شد ولی وقتی IF رو تغییر دادم که وقتی متغیر 789 شد ..... بازر روشن نشد !!!

                                با دستور Printf هم همینطور ، عدد 123 رو ارسال می کنم و در گیردنده عدد 51 دریافت می شود که باز هم با بازر امتحان کردم و متوجه شدم که واقعا عدد 51 دریافت می شود !!!!!!!!!!!!!

                                با سپاس
                                http://vz.iminent.com/vz/39a77668-19...h-fishing.giff

                                دیدگاه

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