اطلاعیه

Collapse
No announcement yet.

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

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

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

    برای دستورات For هست
    http://vz.iminent.com/vz/39a77668-19...h-fishing.giff

    دیدگاه


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

      نوشته اصلی توسط Soodi
      برای دستورات For هست
      احتمالا آکولاد کم یا زیاد گذاشتی

      دیدگاه


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

        احتمالا 1155 رو اشتباه نوشتید با برنامه ای که شما نوشتید 1125 باید بنویسیه.بعدم قرار بود از هر متغیر 48 تا کم کنین.تازه خودتون تو این دستور جای متغییر های 5و 6و7 بذارید ببینید اصلا 567 ساخته میشه؟
        d = a * 10 + b * 10 + c;

        دیدگاه


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

          سلام

          *** در ابتدا اعلام کنم که در کل برنامه از متغیر Long Int استفاده شده است

          به نتایج خیلی عجیبی رسیدم
          من با 3 دستور getkey داده ها رو دریافت کردم و یکی یکی روی LCD نمایش دادم و متوجه شدم که اگر با دستور Printf داده رو ارسال کنم ، 3 متغیر که با getkey دریافت کرده ام ، (همیشه) به ترتیب اعداد 55 و 53 و 54 هستند !!!!!!!!!!!!!!!!!!!

          ولی اگر با دستور sendChar ارسال کنم ، اگر عدد ارسالی از 255 کمتر باشد هر 3 متغیر همان عدد می شوند یعنی عدد رو به صورت یکجا ارسال می کند به طور مثال اگر عدد 123 رو ازسال کنم هر 3 متغیری که با Getkey دریافت کردم 123 می شوند !!!!!!!!!!!!!!!!!!!!!

          ولی اگر عدد 256 باشد ، انگار هیچی دریافت نمیکند !!!!!!!!!!!!!!!!

          ولی اگر عدد از 256 بیشتر باشد ، خوب حالا دیگه رسیدیم به نقات رمز دار ( ارسال با دستور SendChar می باشد ) !!!!!!!!!!!!
          خوب حالا من جیکار کردم ، رفتم و متغیر هارو 8 تا کردم و همه اش رو روی LCD نشان دادم ، ماژول هم نامردی نکردو همه ی متغیر ها رو پر کرد یعنی اگر عدد 567 و ارسال می کردم 8 تا متغیر می شدند عدد 25 یعنی 8 تا عدد 25 روی LCD نشان داده می شد !!!!!!

          این برنامه فرستنده :

          #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)
          {

          long int a;
          a = 567;

          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);
          }
          }


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

          #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>

          #define Set_Buzzer() *AT91C_PIOB_SODR = 0x100000;
          #define Reset_Buzzer() *AT91C_PIOB_CODR = 0x100000;

          int main (void)
          {

          long int a[8];

          *AT91C_PIOB_PER = 0x100000;
          *AT91C_PIOB_OER = 0x100000;

          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();
          a[0] = getkey();
          a[1] = getkey();
          a[2] = getkey();
          a[3] = getkey();
          a[4] = getkey();
          a[5] = getkey();
          a[6] = getkey();
          a[7] = getkey();
          lcd_gotoxy(1,1);
          lcd_puts(a[0]);
          lcd_gotoxy(1,5);
          lcd_puts(a[1]);
          lcd_gotoxy(1,9);
          lcd_puts(a[2]);
          lcd_gotoxy(1,13);
          lcd_puts(a[3]);
          lcd_gotoxy(2,1);
          lcd_puts(a[4]);
          lcd_gotoxy(2,5);
          lcd_puts(a[5]);
          lcd_gotoxy(2,9);
          lcd_puts(a[6]);
          lcd_gotoxy(2,13);
          lcd_puts(a[7]);
          delay_ms(100);
          }
          }


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

          دیدگاه


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

            من که نفهمیدم آخرش با چی مشکل داری؟
            در ضمن ورودی تابع sendchar حتما باید char باشه نه long int عدد 567 هم توی char جا نمیشه
            256 سر ریز میشه از اونور میشه 0
            بقیش هم ...
            حتما متغیری که ارسال میکنی باید char باشه

            دیدگاه


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

              با سلام .همینطور که اقای رجب زاده گفتن مقدار کاراکتری بیشتر از 255 نباید باشه.چرا؟
              چون مقدار کاراکتری از 48 شروع میشه و سپس حروف بزرگ و حروف کوچک تا تقریبا 120 و بقیه کاراکتر ها و سمبل ها تا 256 و چیز دیگه ای نمیمونه که بخواد بیشتر باشه.اگه شما از ان مقدار بیشتر بدید یه جوره دوره میزنه ولی قابل تشخیص برای شما نیست.من پیشنهاد میکنم شما که میخواستید عدد adc رو بفرستید اونو تو مد 8 بیتی قرار بدید تا حداکثر عددش برابر 256 بشه و حالا که تست هم کردید جواب داده با همین دستور بفرستید

              دیدگاه


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

                سلام

                خیلی ممنون

                پس من تا عدد 255 بیشتر نمیتونم بفرستم ، خوب این چه ارتباطیه که اینقدر محدودیت داره ، آخه ارتباط سریال که نباید اینطوری باشه که !

                ××××× نمیشه مثلا عددی رو که می خواهم بفرستم توی 2 تا متغیر قرار بدهم و بعد بفرستم و در گیرنده این 2 متغیر رو یکی کنم ا¾ا¾ا¾ا¾ا¾* یعنی خودمون یک دستور تعریف کنیم که اگر عدد از 255 بیشتر بود خودش بریزه توی 2 تا متغیر و ارسال کنه و در گیرنده هم خودش این دوتا متغیر رو یکی کنه

                ××× یا که ، نمیشه که یک دستور خودمون بسازیم مثلا sendint که متغیر های int یا دیگر متغیر ها رو هم بفرسته ، چون به نظر من که چیز سختی نباید بشه چون خود دستور sendchar هم توی هدر چندتا خط بیشتر نیست.

                خوب حالا متن رو چطوری بفرستم ؟؟؟؟

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

                دیدگاه


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

                  متن رو به صورت کد اسکی میفرستید اونور هم به صورت کد اسکی میخونید مشکلی که اول کار داشتید دیگه اینجا مشکل نیست و مفیده
                  راستی ایتقدر پیام ندید من اینجارو هر روز میبینم فقط شما یکم کند جواب میدید

                  دیدگاه


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

                    سلام

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

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

                    دیدگاه


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

                      البته خود ارتباط سریال هم حداکثر دیتا بیتش 8 میتونه باشه و بیشتر از 256 نمیونه بفرسته مشکل این جاست که حتی متن تکه تکه میاد.من پیشنهاد میکنم اول طول رشترو اندازه بگیر و بفرست و اونور توی فرستنده بیا با یک حلقه for و عددی که دریافت کردی به ترتیب متن رو روی lcd نشون بده
                      در ضمن به نظرم تغییر هیدر ها هم فکر خوبیه و کارتو راحت تر کنه برای اینکار متنو داخل یک استرینگ بریز و توسط
                      strlen طولشو اندازه بگیر.

                      دیدگاه


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

                        سلام

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

                        راستی من برای اعداد بزرگتر از 255 روش زیر رو پیشنهاد می دهم و اگر لطف کنید و من رو در برنامه نویسی این قسمت راهنمایی کنید ممنون می شوم تا این قسمت رو هم در هدر اضافه کنم

                        ××××× نمیشه مثلا عددی رو که می خواهم بفرستم توی 2 تا متغیر قرار بدهم و بعد بفرستم و در گیرنده این 2 متغیر رو یکی کنم ا¾ا¾ا¾ا¾ا¾* یعنی خودمون یک دستور تعریف کنیم که اگر عدد از 255 بیشتر بود خودش بریزه توی 2 تا متغیر و ارسال کنه و در گیرنده هم خودش این دوتا متغیر رو یکی کنه


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

                        دیدگاه


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

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

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

                          راستی من برای اعداد بزرگتر از 255 روش زیر رو پیشنهاد می دهم و اگر لطف کنید و من رو در برنامه نویسی این قسمت راهنمایی کنید ممنون می شوم تا این قسمت رو هم در هدر اضافه کنم

                          ××××× نمیشه مثلا عددی رو که می خواهم بفرستم توی 2 تا متغیر قرار بدهم و بعد بفرستم و در گیرنده این 2 متغیر رو یکی کنم ا¾ا¾ا¾ا¾ا¾* یعنی خودمون یک دستور تعریف کنیم که اگر عدد از 255 بیشتر بود خودش بریزه توی 2 تا متغیر و ارسال کنه و در گیرنده هم خودش این دوتا متغیر رو یکی کنه


                          با سپاس
                          پس چی شد ؟؟؟؟
                          http://vz.iminent.com/vz/39a77668-19...h-fishing.giff

                          دیدگاه


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

                            سلام.فرضا میخوایم یک دستو sendint اضافه کنه باید یک تابع براش درست کنیم که یک مقدار int رو بگیره برای مثال
                            void delay_s(unsigned long c)
                            اینو از تابع delay برداشتم.کاری که میکنه میاد مقداری رو که ما دادیم توی متغییر c که از نوع unsigned long هست میریزه و توی طول برنامش ازش استفاده میکنه
                            شما هم همینجری یک int تعریف کن
                            چون int در ارم فکر میکنم 32 بیتی هست بهتره به 4 بخش 8 بیتی تقسیم به .برای این کار از روالی مثل زیر استفاده کن
                            a[0]=(b&0xff) ;
                            a[1]=((b&0xff00)>>8);
                            a[2]=((b&0xff0000)>>16);
                            a[3]=((b&0xff000000)>>24);
                            البته خودم هم باید امتحان بکنم
                            از اون ور هم متغییر ها رو بگی و به اندازه مورد نیاز شیفت بده و با هم or کن

                            دیدگاه


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

                              با سلام

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

                              حالا که مشکل ارسال اعداد حل شد
                              برای ارسال متن از کد اسکی استفاده کنم
                              خوب اگر بخواهم از کد اسکی استفاده کنم باید یک تابع درست کنم که چیزی که من تایپ می کنم رو به کد اسکی تبدیل و ارسال کند و در گیرنده هم این کد اسکی رو کنار هم بچیند و کلمه رو روی ال سی دی نشان بدهد ( توی وب گشتم یک چیزایی در مورد تبدیل کاراکتر به اسکی بود )

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

                              دیدگاه


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

                                b[0]=a[0];
                                b[1]=(a[1]<<8);
                                b[2]=(a[2]<<16);
                                b[3]=(a[3]<<24);
                                c=(b[0]|b[1]|b[2]|b[3]);

                                اگه سایت مفیدی پیدا کردید بذارید :mrgreen:

                                دیدگاه

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