اطلاعیه

Collapse
No announcement yet.

برنامه ساده برای تست USART در AVR

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

    برنامه ساده برای تست USART در AVR

    سلام می خواستم بصورت تستی یک کاراکتر رو از میکرو به لپتاپ ارسال کنم از ماژول PI2303 استفاده میکنم و بنظر میاد به لپتاپ متصل هستم اما برنامم درست کار نمیکنه کسی یک برنامه ساده برای ارسال کاراکتر داره؟
    م_________________نتظرم

    #2
    پاسخ : برنامه ساده برای تست USART در AVR

    زبان؟

    دیدگاه


      #3
      پاسخ : برنامه ساده برای تست USART در AVR

      نوشته اصلی توسط Rezash86
      زبان؟
      مرسی...
      با زبان C کامپیلر کدویژن
      م_________________نتظرم

      دیدگاه


        #4
        پاسخ : برنامه ساده برای تست USART در AVR

        این ی برنامه تستی هست از جایی گرفتم با اجرای این برنامه پایه tx تو میکروم یک میشه! باید چیکار کنم ؟؟؟؟ خواهشا کمک کنید گیر کردم ... مشکل کجاست
        کد:
        #include <mega32a.h>
        interrupt [USART_TXC] void uart_tx_isr (void)
        {
        UDR='A';
        }
        #include <stdio.h>
        void main(void)
        {
        
        UCSRA=0x00;
        UCSRB=0x48;
        UCSRC=0x86;
        UBRRH=0x00;
        UBRRL=0x33;
        #asm ("sei")
        UDR='A';
        while (1)
           {
           }
        }
        م_________________نتظرم

        دیدگاه


          #5
          پاسخ : برنامه ساده برای تست USART در AVR

          نوشته اصلی توسط MSAEED1900
          ای داااااااااااد ای هواااااااااااااااااااااار کمک کنید خواهشا گیر کارم یخداااااااااا :angry: :angry: :angry: :angry: :angry: :angry: :angry: :angry: :angry: :angry:
          چرا اینکارو کردی؟
          برای ارسال چه نیازی به وقفه هست.
          توی کد ویزارد یدونه فقط تیک TX رو بزن و سرعت ارسال رو هم بررسی کن تمام.
          از تابع putchar یا puts هم می تونی برای ارسال استفاده کنی
          If the wind will not serve, take to the oars

          دیدگاه


            #6
            پاسخ : برنامه ساده برای تست USART در AVR

            نوشته اصلی توسط ASHIT AXAR
            چرا اینکارو کردی؟
            برای ارسال چه نیازی به وقفه هست.
            توی کد ویزارد یدونه فقط تیک TX رو بزن و سرعت ارسال رو هم بررسی کن تمام.
            از تابع putchar یا puts هم می تونی برای ارسال استفاده کنی
            والا از صبح صد مدل نوشتم اینم تستی از ی جا کپی کرده بودم
            الان بی زحمت اینو چک کن ببین چی کم داره
            کد:
            #include <mega32a.h>
            #include <stdio.h>
            
            void main(void)
            {
            
            // USART initialization
            // Communication Parameters: 8 Data, 1 Stop, No Parity
            // USART Receiver: Off
            // USART Transmitter: On
            // USART Mode: Asynchronous
            // USART Baud Rate: 9600
            UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);
            UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
            UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
            UBRRH=0x00;
            UBRRL=0x33;
            
            while (1)
               {
            putchar(65);
               }
            }
            و یک سوال دیگه اینکه سطح پایه TX روی 1 هست آیا اینطور باید باشه؟
            م_________________نتظرم

            دیدگاه


              #7
              پاسخ : برنامه ساده برای تست USART در AVR

              نوشته اصلی توسط MSAEED1900
              والا از صبح صد مدل نوشتم اینم تستی از ی جا کپی کرده بودم
              الان بی زحمت اینو چک کن ببین چی کم داره
              کد:
              #include <mega32a.h>
              #include <stdio.h>
              
              void main(void)
              {
              
              // USART initialization
              // Communication Parameters: 8 Data, 1 Stop, No Parity
              // USART Receiver: Off
              // USART Transmitter: On
              // USART Mode: Asynchronous
              // USART Baud Rate: 9600
              UCSRA=(0<<RXC) | (0<<TXC) | (0<<UDRE) | (0<<FE) | (0<<DOR) | (0<<UPE) | (0<<U2X) | (0<<MPCM);
              UCSRB=(0<<RXCIE) | (0<<TXCIE) | (0<<UDRIE) | (0<<RXEN) | (1<<TXEN) | (0<<UCSZ2) | (0<<RXB8) | (0<<TXB8);
              UCSRC=(1<<URSEL) | (0<<UMSEL) | (0<<UPM1) | (0<<UPM0) | (0<<USBS) | (1<<UCSZ1) | (1<<UCSZ0) | (0<<UCPOL);
              UBRRH=0x00;
              UBRRL=0x33;
              
              while (1)
                 {
              putchar(65);
                 }
              }
              و یک سوال دیگه اینکه سطح پایه TX روی 1 هست آیا اینطور باید باشه؟
              یادم نیست ( الان هم امکان تست رو ندارم)
              فکر کنم یکی از چراغ های ماژول روشن میمونه (موقع ارسال مدوم چشمک میزنه)
              باید حتما GND ماژول رو هم به GND میکرو وصل کنی
              سعی کن از VCC ماژول استفاده نکنی.
              اگه پورت (نرم افزاری ) ماژول رو هم توی سیستم درست انتخاب کرده باشی باید کار کنه
              If the wind will not serve, take to the oars

              دیدگاه


                #8
                پاسخ : پاسخ : برنامه ساده برای تست USART در AVR

                نوشته اصلی توسط ASHIT AXAR
                یادم نیست ( الان هم امکان تست رو ندارم)
                فکر کنم یکی از چراغ های ماژول روشن میمونه (موقع ارسال مدوم چشمک میزنه)
                باید حتما GND ماژول رو هم به GND میکرو وصل کنی
                سعی کن از VCC ماژول استفاده نکنی.
                اگه پورت (نرم افزاری ) ماژول رو هم توی سیستم درست انتخاب کرده باشی باید کار کنه
                نخیر مثه اینکه قسمت نیست ... :cry2: :cry2:
                GND ماژول هم به GND میکرو وصل کردم تاثیر نداشت
                پورت ماژول هم درسته ..
                یک سوال اساسی که دارم اینه که چرا پایه TX میکرو که باید دیتا رو ارسال که همون پایه 15 کلا روی سطح منطقی یک هست ..
                دوستان یکی به داد ما برسه از صبح درگیرم
                م_________________نتظرم

                دیدگاه


                  #9
                  پاسخ : پاسخ : برنامه ساده برای تست USART در AVR

                  نوشته اصلی توسط MSAEED1900
                  نخیر مثه اینکه قسمت نیست ... :cry2: :cry2:
                  GND ماژول هم به GND میکرو وصل کردم تاثیر نداشت
                  پورت ماژول هم درسته ..
                  یک سوال اساسی که دارم اینه که چرا پایه TX میکرو که باید دیتا رو ارسال که همون پایه 15 کلا روی سطح منطقی یک هست ..
                  دوستان یکی به داد ما برسه از صبح درگیرم
                  پایه های RX و TX رو که به میکرو اشتباهی وصل نکردی؟
                  یه عکس کم حجم از مدار بزار
                  از برنامه کامپیوتر هم یه عکس بزار
                  ماژول از کدوم مدل هستش؟
                  If the wind will not serve, take to the oars

                  دیدگاه


                    #10
                    پاسخ : پاسخ : برنامه ساده برای تست USART در AVR

                    نوشته اصلی توسط ASHIT AXAR
                    پایه های RX و TX رو که به میکرو اشتباهی وصل نکردی؟
                    یه عکس کم حجم از مدار بزار
                    از برنامه کامپیوتر هم یه عکس بزار
                    ماژول از کدوم مدل هستش؟
                    عکس مدار خدمت شما...
                    پایه TX میکرو به RX ماژول هست
                    از ماژول PI2303 استفاده کردم وقتی دستم رو روی پایه RX ماژول میگیرم روی ترمینال کدویژن یک سری شر و ور نشون میده
                    اما وقتی به میکرو وصلش میکنم هیچ داده ای نمیاد یعنی اینکه مشکل از برنامه میکرو هست

                    م_________________نتظرم

                    دیدگاه


                      #11
                      پاسخ : برنامه ساده برای تست USART در AVR

                      درود
                      دوست عزیز اول برنامه رو توی پروتئوس تست کن.

                      پایه TX باید یک بمونه و این در واقع stop bit هست که از ارسال قبلی مونده. یعنی در هر ارسال پابه0 میشه که start bit هست بعد دیتا و بعد دوباره 1 که stop bit هست.
                      https://www.google.com/url?sa=i&rct=j&q=&esrc=s&source=im ages&cd=&ved=0ahUKEwi07efHqcXKAhWhh3IKHdJg DM0QjxwIAw&url=https%3A%2F%2Flearn.sparkfun.co m%2Ftutorials%2Fserial-communication%2Fwiring-and-hardware&bvm=bv.112454388,d.bGQ&psig=AFQjC NFlLjan1OQmDed9uY-r06Ok7jwWfA&ust=1453823723165794&cad=rja

                      مسئله مهمی که باید رعایت کنی baud rate هست. باید کریستالی که تو code vision انتحاب می کنی و طبق اون مثلا 9600 انتخاب میشه، باید همون رو برای میکرو بذاری. یعنی اگه با 16MHz باود ریت 9600 درست شده، کریستال 16M برای میکرو قرار بدی.

                      مسئله بعدی انتخاب باید (مثلا 9600 ) در ترمینال هست.

                      گراند ماژول باید به میکرو وصل بشه و tx به rx و برعکس.

                      قبلش می تونی ماژول رو تست کنی. به این صورت که rx ماژول و tx ماژول رو به هم وصل کنی و تو ترمینال (خود پروتئوس هم ترمینال داره) دیتا بفرستی و باید همون رو دریافت کنی.

                      اینم برنامه تست به همراه فایل پروتئوس:
                      http://uploadboy.me/zxui6mjoa39c/sample.rar
                      مـن هیچ ندانم که مرا آن که سرشت
                      از اهل بهشت کرد یا دوزخ زشت
                      جامی و بتی و بربطی بر لب کشت
                      این هر سه مرا نقد و تو را نسیه بهشت

                      دیدگاه


                        #12
                        پاسخ : برنامه ساده برای تست USART در AVR

                        نوشته اصلی توسط marychi
                        درود
                        دوست عزیز اول برنامه رو توی پروتئوس تست کن.

                        پایه TX باید یک بمونه و این در واقع stop bit هست که از ارسال قبلی مونده. یعنی در هر ارسال پابه0 میشه که start bit هست بعد دیتا و بعد دوباره 1 که stop bit هست.
                        https://www.google.com/url?sa=i&rct=j&q=&esrc=s&source=im ages&cd=&ved=0ahUKEwi07efHqcXKAhWhh3IKHdJg DM0QjxwIAw&url=https%3A%2F%2Flearn.sparkfun.co m%2Ftutorials%2Fserial-communication%2Fwiring-and-hardware&bvm=bv.112454388,d.bGQ&psig=AFQjC NFlLjan1OQmDed9uY-r06Ok7jwWfA&ust=1453823723165794&cad=rja

                        مسئله مهمی که باید رعایت کنی baud rate هست. باید کریستالی که تو code vision انتحاب می کنی و طبق اون مثلا 9600 انتخاب میشه، باید همون رو برای میکرو بذاری. یعنی اگه با 16MHz باود ریت 9600 درست شده، کریستال 16M برای میکرو قرار بدی.

                        مسئله بعدی انتخاب باید (مثلا 9600 ) در ترمینال هست.

                        گراند ماژول باید به میکرو وصل بشه و tx به rx و برعکس.

                        قبلش می تونی ماژول رو تست کنی. به این صورت که rx ماژول و tx ماژول رو به هم وصل کنی و تو ترمینال (خود پروتئوس هم ترمینال داره) دیتا بفرستی و باید همون رو دریافت کنی.

                        اینم برنامه تست به همراه فایل پروتئوس:
                        http://uploadboy.me/zxui6mjoa39c/sample.rar
                        بسیار ممنونم من به فرکانس اصلا توجهی نداشتم احتمالا مشکل دقیقا این هست بابت برنامه نمونه هم بسیااااااااااار سپاسگذارم عالی عالی عالی بود
                        م_________________نتظرم

                        دیدگاه


                          #13
                          پاسخ : برنامه ساده برای تست USART در AVR

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

                          دیدگاه


                            #14
                            پاسخ : برنامه ساده برای تست USART در AVR

                            اگر بخوام خروجی یک سنسور رو بصورتی که تکرار نشه روی ترمینال کدویژن نشون بدم چه دستوری رو باید بکار ببرم من الان می تونم خروجی سنسورم رو که رو میکرو هست توی ترمینال ببینم البته با کمک بچه ها اما تند تند تکرار میشه ... باید چه چیزی رو در آخر برنامه صفر کنم یا چه درستوری رو بنویسم که به جای اینکه رو ترمینال کدویژن ببینم
                            T=25T=25T=25T=25T=25T=25T=25T=25T=25T=25T=26T=26T= 26T=26T=26T=26T=26
                            ببینم :
                            T=25
                            و زمانی هم که مثلا دما تغییر کرد به جای 25 عدد 26 بیاد
                            متشکر
                            م_________________نتظرم

                            دیدگاه


                              #15
                              پاسخ : برنامه ساده برای تست USART در AVR

                              نوشته اصلی توسط MSAEED1900
                              اگر بخوام خروجی یک سنسور رو بصورتی که تکرار نشه روی ترمینال کدویژن نشون بدم چه دستوری رو باید بکار ببرم من الان می تونم خروجی سنسورم رو که رو میکرو هست توی ترمینال ببینم البته با کمک بچه ها اما تند تند تکرار میشه ... باید چه چیزی رو در آخر برنامه صفر کنم یا چه درستوری رو بنویسم که به جای اینکه رو ترمینال کدویژن ببینم
                              T=25T=25T=25T=25T=25T=25T=25T=25T=25T=25T=26T=26T= 26T=26T=26T=26T=26
                              ببینم :
                              T=25
                              و زمانی هم که مثلا دما تغییر کرد به جای 25 عدد 26 بیاد
                              متشکر
                              صفحه پاک نمیشه، ولی میتونی خیلی راحت تعداد ارسال ها رو کمتر کنی.
                              یه متغیر دیگه برای نگه داری مقدار قبلی داشته باش. اگه مقدار جدید که می خونی با اون قبلی متفاوت بود اونوقت داده جدید رو ارسال کن و مقدار قبلی رو هم به مقدار جدید پدیت کن. و دوباره همه چی از نو ....
                              اینجوری دست کم داده تکراری نمی فرسته . (تعداد ارسال ها خیلی کم میشه)
                              If the wind will not serve, take to the oars

                              دیدگاه

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