اطلاعیه

Collapse
No announcement yet.

مشکل با بافر گیرنده سریال

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

    مشکل با بافر گیرنده سریال

    سلام
    با کدویزارد بافر گیرنده سریال رو فعال کردم
    وقتی میخوام داده های ورودی رو توسط میکرو بخونم بریزم تو یه آرایه با اینکه اندازه بافرو بالا تعیین میکنم (مثلا 256) ولی فقط حدود 60 تای اول رو میخونه !!! اگه بعد این 60 تا رو بخونم برنامه همونجا گیر میکنه!!!
    ضمنا با مگا8 اینکارو انجام میدم...
    تا حالا کسی به این مشکل برخورده؟؟؟
    از سختی نترس! این سختی هاست که جایگاه و مقام انسان را بالا میبرد...

    #2
    پاسخ : مشکل با بافر گیرنده سریال

    نوشته اصلی توسط shahin2222
    سلام
    با کدویزارد بافر گیرنده سریال رو فعال کردم
    وقتی میخوام داده های ورودی رو توسط میکرو بخونم بریزم تو یه آرایه با اینکه اندازه بافرو بالا تعیین میکنم (مثلا 256) ولی فقط حدود 60 تای اول رو میخونه !!! اگه بعد این 60 تا رو بخونم برنامه همونجا گیر میکنه!!!
    ضمنا با مگا8 اینکارو انجام میدم...
    تا حالا کسی به این مشکل برخورده؟؟؟
    سلام
    مشکلتون به احتمال زیاد اینه که حافظه استک کمه ...
    بیشترش کنید
    موفق باشید
    [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
    معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
    معرفی نرم افزار Codewizard PWM
    با من بیشتر آشنا شوید

    دیدگاه


      #3
      پاسخ : مشکل با بافر گیرنده سریال

      نوشته اصلی توسط Saman.Asadi
      سلام
      مشکلتون به احتمال زیاد اینه که حافظه استک کمه ...
      بیشترش کنید
      موفق باشید
      ممنون از جواب
      استک روی 256 هستش
      موقع کامپایل مینویسه که از 256 تا فقط حدود 13تاش استفاده شده!
      با کدویژن ورژن جدیدتر هم تست کردم بازم نشد، گفتم شاید از کامپایلر باشه...
      از سختی نترس! این سختی هاست که جایگاه و مقام انسان را بالا میبرد...

      دیدگاه


        #4
        پاسخ : مشکل با بافر گیرنده سریال

        نوشته اصلی توسط shahin2222
        ممنون از جواب
        استک روی 256 هستش
        موقع کامپایل مینویسه که از 256 تا فقط حدود 13تاش استفاده شده!
        با کدویژن ورژن جدیدتر هم تست کردم بازم نشد، گفتم شاید از کامپایلر باشه...
        کدتون رو بگذارید
        [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
        معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
        معرفی نرم افزار Codewizard PWM
        با من بیشتر آشنا شوید

        دیدگاه


          #5
          پاسخ : مشکل با بافر گیرنده سریال

          نوشته اصلی توسط Saman.Asadi
          کدتون رو بگذارید
          بفرمایید اینجا گذاشتم:
          http://www.eca.ir/forum2/index.php?topic=93478.0
          از سختی نترس! این سختی هاست که جایگاه و مقام انسان را بالا میبرد...

          دیدگاه


            #6
            پاسخ : مشکل با بافر گیرنده سریال

            نوشته اصلی توسط shahin2222
            بفرمایید اینجا گذاشتم:
            http://www.eca.ir/forum2/index.php?topic=93478.0
            کدتون رو چک کردم
            ظاهرش که درسته ...
            این رو امتحان کنید
            کد:
            /*****************************************************
            This program was produced by the
            CodeWizardAVR V2.05.0 Professional
            Automatic Program Generator
            © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
            http://www.hpinfotech.com
            
            Project :
            Version :
            Date  : 5/6/2014
            Author : NeVaDa
            Company :
            Comments:
            
            Chip type        : ATmega8
            Program type      : Application
            AVR Core Clock frequency: 8.000000 MHz
            Memory model      : Small
            External RAM size    : 0
            Data Stack size     : 256
            *****************************************************/
            
            #include <mega8.h>
            #include <stdio.h>
            #include <delay.h>
            #include <alcd.h>
            
            // Declare your global variables here
            unsigned char i,buffer,number[16],message[16];
            //------------------------------------------------------------------------------------------
            void read_sms()
            {
              lcd_clear();
              lcd_gotoxy(0,0);
              lcd_putsf("1 new message");
            
              while('"' != getchar());//wait_to_get('"');
            
              for(i=0;i<13;i++)
              number[i]=getchar();
            
              //----------------------
              while(10 != getchar());
              while(13 != getchar());
              //wait_to_get('\n');
            
              for(i=0;i<3;i++)
              message[i]=getchar();
            
              while(PIND.5);
            
              lcd_clear();
              lcd_gotoxy(0,0);
              lcd_puts(number);
              lcd_gotoxy(0,1);
              lcd_puts(message);
            }
            //------------------------------------------------------------------------------------------
            void main(void)
            {
              PORTD=0x20;
            
              // USART initialization
              // Communication Parameters: 8 Data, 1 Stop, No Parity
              // USART Receiver: On
              // USART Transmitter: On
              // USART Mode: Asynchronous
              // USART Baud Rate: 9600
              UCSRA=0x00;
              UCSRB=0x98;
              UCSRC=0x86;
              UBRRH=0x00;
              UBRRL=0x33;
            
              // Alphanumeric LCD initialization
              // Connections specified in the
              // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
              // RS - PORTB Bit 1
              // RD - PORTB Bit 2
              // EN - PORTB Bit 3
              // D4 - PORTB Bit 4
              // D5 - PORTB Bit 5
              // D6 - PORTB Bit 6
              // D7 - PORTB Bit 7
              // Characters/line: 16
              lcd_init(16);
            
              // Global enable interrupts
              #asm("sei")
            
              lcd_clear();
              lcd_gotoxy(0,0);
              lcd_putsf("Receive SMS\nProject");
              delay_ms(2000);
              lcd_clear();
            
              while (1)
              {
                buffer=getchar();
                if(buffer=='+')
                {
                  buffer=getchar();
                  if(buffer=='C')
                  {
                    buffer=getchar();
                    if(buffer=='M')
                    {
                      buffer=getchar();
                      if(buffer=='T')read_sms();
                    }
                  }
                }
              }
            }
            [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
            معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
            معرفی نرم افزار Codewizard PWM
            با من بیشتر آشنا شوید

            دیدگاه


              #7
              پاسخ : مشکل با بافر گیرنده سریال

              نوشته اصلی توسط Saman.Asadi
              کدتون رو چک کردم
              ظاهرش که درسته ...
              این رو امتحان کنید
              کد:
              /*****************************************************
              This program was produced by the
              CodeWizardAVR V2.05.0 Professional
              Automatic Program Generator
              © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
              http://www.hpinfotech.com
              
              Project :
              Version :
              Date  : 5/6/2014
              Author : NeVaDa
              Company :
              Comments:
              
              Chip type        : ATmega8
              Program type      : Application
              AVR Core Clock frequency: 8.000000 MHz
              Memory model      : Small
              External RAM size    : 0
              Data Stack size     : 256
              *****************************************************/
              
              #include <mega8.h>
              #include <stdio.h>
              #include <delay.h>
              #include <alcd.h>
              
              // Declare your global variables here
              unsigned char i,buffer,number[16],message[16];
              //------------------------------------------------------------------------------------------
              void read_sms()
              {
                lcd_clear();
                lcd_gotoxy(0,0);
                lcd_putsf("1 new message");
              
                while('"' != getchar());//wait_to_get('"');
              
                for(i=0;i<13;i++)
                number[i]=getchar();
              
                //----------------------
                while(10 != getchar());
                while(13 != getchar());
                //wait_to_get('\n');
              
                for(i=0;i<3;i++)
                message[i]=getchar();
              
                while(PIND.5);
              
                lcd_clear();
                lcd_gotoxy(0,0);
                lcd_puts(number);
                lcd_gotoxy(0,1);
                lcd_puts(message);
              }
              //------------------------------------------------------------------------------------------
              void main(void)
              {
                PORTD=0x20;
              
                // USART initialization
                // Communication Parameters: 8 Data, 1 Stop, No Parity
                // USART Receiver: On
                // USART Transmitter: On
                // USART Mode: Asynchronous
                // USART Baud Rate: 9600
                UCSRA=0x00;
                UCSRB=0x98;
                UCSRC=0x86;
                UBRRH=0x00;
                UBRRL=0x33;
              
                // Alphanumeric LCD initialization
                // Connections specified in the
                // Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
                // RS - PORTB Bit 1
                // RD - PORTB Bit 2
                // EN - PORTB Bit 3
                // D4 - PORTB Bit 4
                // D5 - PORTB Bit 5
                // D6 - PORTB Bit 6
                // D7 - PORTB Bit 7
                // Characters/line: 16
                lcd_init(16);
              
                // Global enable interrupts
                #asm("sei")
              
                lcd_clear();
                lcd_gotoxy(0,0);
                lcd_putsf("Receive SMS\nProject");
                delay_ms(2000);
                lcd_clear();
              
                while (1)
                {
                  buffer=getchar();
                  if(buffer=='+')
                  {
                    buffer=getchar();
                    if(buffer=='C')
                    {
                      buffer=getchar();
                      if(buffer=='M')
                      {
                        buffer=getchar();
                        if(buffer=='T')read_sms();
                      }
                    }
                  }
                }
              }
              آقا ممنونم به خاطر توجه
              ولی این اصن جواب نداد!
              بافر نداشته باشه شاید اطلاعات اون وسطا گم بشه

              نمیدونم چرا همیشه تو پروژه هام به مشکلات عجیبی برمیخورم!!! :biggrin: :angry:
              از سختی نترس! این سختی هاست که جایگاه و مقام انسان را بالا میبرد...

              دیدگاه


                #8
                پاسخ : مشکل با بافر گیرنده سریال

                به نظرم اگه امکانش هست از کتابخونه هایی که واسه اینکار نوشته شدن استفاده کنید...
                خودم یکیشو واسه کامپایلر AVR-GCC نوشتم...هم می تونید واسه ارسال و هم واسه دریافت بافر بزارید....اگه حوصله داشته باشید میتونید با یکمی تغییر توی کدویژن هم استفاده کنید...یا اصلا سرچ کنید به احتمال زیاد یه کتابخونه واسه کدویژن پیدا میکنید...
                تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                www.intelart.ir


                ساخت کنترلر دما PID فازي با AVR [آموزشی]

                دیدگاه


                  #9
                  پاسخ : مشکل با بافر گیرنده سریال

                  نوشته اصلی توسط punisher.x64
                  به نظرم اگه امکانش هست از کتابخونه هایی که واسه اینکار نوشته شدن استفاده کنید...
                  خودم یکیشو واسه کامپایلر AVR-GCC نوشتم...هم می تونید واسه ارسال و هم واسه دریافت بافر بزارید....اگه حوصله داشته باشید میتونید با یکمی تغییر توی کدویژن هم استفاده کنید...یا اصلا سرچ کنید به احتمال زیاد یه کتابخونه واسه کدویژن پیدا میکنید...
                  ممنون میشیم کتابخانه ای که نوشتید رو قرار دهید ...
                  [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                  معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                  معرفی نرم افزار Codewizard PWM
                  با من بیشتر آشنا شوید

                  دیدگاه


                    #10
                    پاسخ : مشکل با بافر گیرنده سریال

                    نوشته اصلی توسط punisher.x64
                    به نظرم اگه امکانش هست از کتابخونه هایی که واسه اینکار نوشته شدن استفاده کنید...
                    خودم یکیشو واسه کامپایلر AVR-GCC نوشتم...هم می تونید واسه ارسال و هم واسه دریافت بافر بزارید....اگه حوصله داشته باشید میتونید با یکمی تغییر توی کدویژن هم استفاده کنید...یا اصلا سرچ کنید به احتمال زیاد یه کتابخونه واسه کدویژن پیدا میکنید...
                    والا منم تو نت گشتم ولی پیدا نکردم، اگه سراغ دارین ممنون میشم معرفی کنید

                    راستی منظور از rx_buffer چیه؟ مثلا بزاریم روی 8 یعنی موقع دریافت میتونه هربار 8بایت رو بافر بکنه؟؟؟
                    چون روی 8 هم گذاشتم هیچ فرقی نکرد! فکر میکنم مشکل از کامپایلر باشه...

                    میشه لطف کنید شما یا Saman.Asadi عزیز اینو کامپایل کنید و فایل هگزشو برام بزارید؟
                    ممنون

                    http://upir.ir/1393.2/S900.rar
                    از سختی نترس! این سختی هاست که جایگاه و مقام انسان را بالا میبرد...

                    دیدگاه


                      #11
                      پاسخ : مشکل با بافر گیرنده سریال

                      نوشته اصلی توسط shahin2222
                      راستی منظور از rx_buffer چیه؟ مثلا بزاریم روی 8 یعنی موقع دریافت میتونه هربار 8بایت رو بافر بکنه؟؟؟
                      برای اینکه زمان ارسال و دریافت داده CPU مشغول نماند وقفه سریال را به کار میگیریم که هر موقع یک بایت ارسال یا دریافت شد درون آرایه بافر قرار بگیرد ... با این روش در پردازش کردن صرفه جویی میکنیم ...
                      منظور از 8 بایت بافر این است که شما یک بسته اطلاعاتی دارید که 8 بایتی هست و زمانی که 8بایت داده را کامل گرفتید باید از آن 8 بایت که درون بافر هست ، استفاده کنید ...
                      چون شما در برنامه تان از بافر استفاده نکردید من هم اونها را حذف کردم و به روش دستی که خودتون قبلا نوشته بودید برنامه رو تغییر دادم ...
                      نوشته اصلی توسط shahin2222
                      چون روی 8 هم گذاشتم هیچ فرقی نکرد! فکر میکنم مشکل از کامپایلر باشه...
                      نه عزیزم ... مشکل از کامپایلرتون نیست ...
                      راستی چرا فایل Hex نتونستی از این فایلی که گذاشتید بگیرید ؟؟؟
                      این رو نصب کن ... حدود 2 ساله دارم با این کار میکنم ...مطمئنه
                      http://s5.picofile.com/file/8119398126/CodeVisionAVR_V2_05_3_Std_Techno_Electro_COM_.zip. html
                      نوشته اصلی توسط shahin2222
                      میشه لطف کنید شما یا Saman.Asadi عزیز اینو کامپایل کنید و فایل هگزشو برام بزارید؟
                      http://upir.ir/1393.2/S900.rar
                      بفرمایید
                      http://s5.picofile.com/file/8122964018/S900.zip.html

                      موفق باشید
                      [b]چگونه همه پایه های میکروکنترلر AVR را PWM کنیم؟
                      معرفی نرم افزارEasy 7segment (برای راه اندازی آسانتر 7segment )
                      معرفی نرم افزار Codewizard PWM
                      با من بیشتر آشنا شوید

                      دیدگاه


                        #12
                        پاسخ : مشکل با بافر گیرنده سریال

                        نوشته اصلی توسط Saman.Asadi
                        برای اینکه زمان ارسال و دریافت داده CPU مشغول نماند وقفه سریال را به کار میگیریم که هر موقع یک بایت ارسال یا دریافت شد درون آرایه بافر قرار بگیرد ... با این روش در پردازش کردن صرفه جویی میکنیم ...
                        منظور از 8 بایت بافر این است که شما یک بسته اطلاعاتی دارید که 8 بایتی هست و زمانی که 8بایت داده را کامل گرفتید باید از آن 8 بایت که درون بافر هست ، استفاده کنید ...
                        چون شما در برنامه تان از بافر استفاده نکردید من هم اونها را حذف کردم و به روش دستی که خودتون قبلا نوشته بودید برنامه رو تغییر دادم ... نه عزیزم ... مشکل از کامپایلرتون نیست ...
                        راستی چرا فایل Hex نتونستی از این فایلی که گذاشتید بگیرید ؟؟؟
                        این رو نصب کن ... حدود 2 ساله دارم با این کار میکنم ...مطمئنه
                        http://s5.picofile.com/file/8119398126/CodeVisionAVR_V2_05_3_Std_Techno_Electro_COM_.zip. htmlبفرمایید
                        http://s5.picofile.com/file/8122964018/S900.zip.html

                        موفق باشید
                        چرا من که استفاده کرده بودم از بافر!!! مگه از تابع getchar نباید استفاده کرد؟؟؟
                        کد:
                        char getchar(void)
                        {
                        char data;
                        while (rx_counter==0);
                        data=rx_buffer[rx_rd_index++];
                        #if RX_BUFFER_SIZE != 256
                        if (rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
                        #endif
                        #asm("cli")
                        --rx_counter;
                        #asm("sei")
                        return data;
                        }
                        ببینید خود کدویزارد تابع getchar تعریف میکنه و هربار که ازش بخونیم در واقع از بافر یا rx_buffer داده هارو خوندیم
                        درسته؟ نکنه من نحوه کار با بافر رو نمیدونم!

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

                        دیدگاه


                          #13
                          پاسخ : مشکل با بافر گیرنده سریال

                          ممنون میشیم کتابخانه ای که نوشتید رو قرار دهید ...
                          بله چشم در اسرع وقت میزارمش...فقط ی توضیح کلی در موردش بدم...واسه ارسال کاراکتر بافر نداره!واسه ارسال رشته هایی که داخل فلش هستند از Polling استفاده میکنه...
                          ولی ویژگی اصلیش که بیشتر هم همین مد نظرم بوده اینه که واسه ارسال رشته های طولانی هیچ محدودیتی ندارید...میتونید تابع ارسال رشته ( ()Puts ) رو واسه چند تا رشته پست سر هم استفاده کنید...مثلا 20 بار این تابع رو پشت سر هم داخل کدتون قرار بدید و طول رشته ها هم هر کدوم بالای 100 کاراکتر باشه...اصلا به طول رشته وابستگی نداره...تمام این ها رو توی صف قرار میده و پست سر هم ارسال میکنه...

                          به زودی زود میذارمش داخل انجمن...
                          تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

                          www.intelart.ir


                          ساخت کنترلر دما PID فازي با AVR [آموزشی]

                          دیدگاه

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