اطلاعیه

Collapse
No announcement yet.

افزایش سرعت AVR

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

    #31
    پاسخ : افزایش سرعت AVR

    تابع fgetc داره 8بیت 8بیت از مموری میخونه. بنظرم اگه بشه تعداد بیتی که از مموری میخونه رو بیشترش کرد اوضاع بهتر میشه؟ :-? :read:
    دوستان اگه اطلاعاتی در این مورد هم دارند لطف کنن راهنمایی کنن :rolleyes:
    هر چند پیر و خسته دل و ناتوان شدم * * * هر گه که یاد تو کردم جوان شدم :rolleyes:

    دیدگاه


      #32
      پاسخ : افزایش سرعت AVR

      نوشته اصلی توسط J A V A D
      تابع fgetc داره 8بیت 8بیت از مموری میخونه. بنظرم اگه بشه تعداد بیتی که از مموری میخونه رو بیشترش کرد اوضاع بهتر میشه؟ :-? :read:
      دوستان اگه اطلاعاتی در این مورد هم دارند لطف کنن راهنمایی کنن :rolleyes:
      فک نمیکنم :-??
      تا اونجا که من میدونم ممکنه بدتر هم بشه! oo:
      چون cpuی .ای وی آر. میتونه 8بیت رو پروکسس کنه ، این کار که شما گفتید،باعث کم شدن سرعت میکرو میشه! ! ! :angry:
      1 در دنیا 100 در آخرت (درس و مشق فعالیتمو تو انجمن کم کرده)
      من آنچه شرط بلاغست با تو میآ‌گویم. تو خواه از سخنم پند گیر و خواه ملال. سعدی
      !Electronic On! Programming On
      هوشمندانه سوال بپرسیم!
      http://ir02x6.persiangig.com/logo/eca/tanks_01.png

      دیدگاه


        #33
        پاسخ : افزایش سرعت AVR

        راستی!
        یه روش برای دسترسی سریع به متغییر
        شما میتونی متغییر هارو اینجوری تعریف کنی که در ریجستر های مگا 32 ایجاد شود
        یعنی مثلا بجای
        کد:
        char a
        بنویسی
        کد:
        register char a
        با این کار متغییر بجای اینکه درحافظه ی sram ذخیره شود در یکی از 32ریجیستر مگا32 قرار میگیرد
        این ریجیستر ها از لحاظ فیزیکی جزئی از cpuهستند به همین دلیل میتوان به آن ها زود دسترسی پیدا کرد .
        با این کار برنامه ی شما سرعت زیادی خواهد داشت :applause: :redface:



        یه ذره اطلاعات درباره ی ریجیسترها:
        هر میکروی avrد 32ریجیستردارد !
        آدرس آنها از R0تا R31هستند.
        نکته:R0هم خودش یه ریجستره!

        برای متغییر های عمومی از R0تاR14جا هست
        برای متغییر های عمومی بیتی از R2تاR14جا هست
        و متغییر های بیتی محلی در R15جا هست (حداکثر 8بیت)

        درضمن میتوان متغییر رو در یک آدرس مشخص ذخیره کرد.
        مثال:
        کد:
        register char a @10
        در کد بالا ما متغییری از نوع char به نام aدر آدرس R10ریجیستر ها ذخیره کردیم
        حالا یه نکته ی مهم :
        در منوی project--->گزینه ی کنفیگور---> سربرگ c compiler چیزی بنام :bit varables size وجود دارد که باید حداقل مقدار را داشته باشد(زیرا برای متغییر های دیگر هم فضای کافی وجود داشته باشد) که حداقلش 0 است ولی اگر در یک برنامه ای به متغییر های بیتی نیاز بود پیشنهاد من این است که مقدار را بجای صفر ، 8 قرار دهیم
        برای اطلاعات بیشتر به گوگل مراجعه کنید :redface:
        1 در دنیا 100 در آخرت (درس و مشق فعالیتمو تو انجمن کم کرده)
        من آنچه شرط بلاغست با تو میآ‌گویم. تو خواه از سخنم پند گیر و خواه ملال. سعدی
        !Electronic On! Programming On
        هوشمندانه سوال بپرسیم!
        http://ir02x6.persiangig.com/logo/eca/tanks_01.png

        دیدگاه


          #34
          پاسخ : پاسخ : افزایش سرعت AVR

          در منوی project--->گزینه ی کنفیگور---> سربرگ c compiler چیزی بنام :bit varables size وجود دارد که باید حداقل مقدار را داشته باشد(زیرا برای متغییر های دیگر هم فضای کافی وجود داشته باشد) که حداقلش 0 است ولی اگر در یک برنامه ای به متغییر های بیتی نیاز بود پیشنهاد من این است که مقدار را بجای صفر ، 8 قرار دهیم
          خیلی ممنون جالب بود واقعا...میدونستم که روی CPU کامپیوتر میشه توی رجیسترهاش مقدار ریخت ولی میکرو رو نمیدونستم...
          ببخشید اگه بخوایم با کامپایلر AVR-GCC اینکارو کنیم مراحلش چجوریه؟...تنظیمات خاصی داره؟
          با تشکر
          تولید کننده تجهیزات برنامه پذیر اتوماسیون صنعتی

          www.intelart.ir


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

          دیدگاه


            #35
            پاسخ : پاسخ : افزایش سرعت AVR

            آقا ماهان ممنون
            متغیرهای red,green,blue رو تو رجیستر تعریف کردم ولی اصلا تو سرعت تاثیری نداشت :angry: :angry: :angry:
            هر چند پیر و خسته دل و ناتوان شدم * * * هر گه که یاد تو کردم جوان شدم :rolleyes:

            دیدگاه


              #36
              پاسخ : افزایش سرعت AVR

              نوشته اصلی توسط J A V A D
              آقا ماهان ممنون
              متغیرهای red,green,blue رو تو رجیستر تعریف کردم ولی اصلا تو سرعت تاثیری نداشت :angry: :angry: :angry:
              میشه برنامتو بزاری؟
              1 در دنیا 100 در آخرت (درس و مشق فعالیتمو تو انجمن کم کرده)
              من آنچه شرط بلاغست با تو میآ‌گویم. تو خواه از سخنم پند گیر و خواه ملال. سعدی
              !Electronic On! Programming On
              هوشمندانه سوال بپرسیم!
              http://ir02x6.persiangig.com/logo/eca/tanks_01.png

              دیدگاه


                #37
                پاسخ : افزایش سرعت AVR

                نوشته اصلی توسط punisher.x64
                خیلی ممنون جالب بود واقعا...میدونستم که روی CPU کامپیوتر میشه توی رجیسترهاش مقدار ریخت ولی میکرو رو نمیدونستم...
                ببخشید اگه بخوایم با کامپایلر AVR-GCC اینکارو کنیم مراحلش چجوریه؟...تنظیمات خاصی داره؟
                با تشکر
                شرمنده! من زیاد از gccسر در نمیارم! عوضش دوست دارم یاد بگیرم :redface:
                1 در دنیا 100 در آخرت (درس و مشق فعالیتمو تو انجمن کم کرده)
                من آنچه شرط بلاغست با تو میآ‌گویم. تو خواه از سخنم پند گیر و خواه ملال. سعدی
                !Electronic On! Programming On
                هوشمندانه سوال بپرسیم!
                http://ir02x6.persiangig.com/logo/eca/tanks_01.png

                دیدگاه


                  #38
                  پاسخ : افزایش سرعت AVR

                  نوشته اصلی توسط mahan.rafiee
                  میشه برنامتو بزاری؟
                  بفرما :rolleyes: :
                  کد:
                  #include <mega32a.h>
                  #include <ff.h>
                  #include <stdio.h>
                  #include <string.h>
                  #include <stdlib.h>
                  #include <delay.h>
                  #define xtal 27000000
                  //================================ LCD CONFIGURATIONS ======================================= 
                   #define PORTRAIT
                  
                   #define LCD_CONTROLPORT_DDR DDRA 
                   #define LCD_CONTROLPORT_PORT PORTA
                   #define LCD_CONTROLPORT_PIN PINA 
                   
                   #define LCD_RST_DDR DDRA
                   #define LCD_RST_PORT PORTA
                   #define LCD_RST_PIN 0
                   
                   #define LCD_RS_DDR DDRA
                   #define LCD_RS_PORT PORTA 
                   #define LCD_RS_PIN 1
                  
                   #define LCD_CS_DDR DDRA
                   #define LCD_CS_PORT PORTA 
                   #define LCD_CS_PIN 2
                   
                   #define LCD_RD_DDR DDRA
                   #define LCD_RD_PORT PORTA 
                   #define LCD_RD_PIN 3
                   
                   #define LCD_WR_DDR DDRA
                   #define LCD_WR_PORT PORTA 
                   #define LCD_WR_PIN 4
                   
                   #define LCD_DATAPORT_MSB_DDR  DDRD
                   #define LCD_DATAPORT_MSB_PORT PORTD 
                   #define LCD_DATAPORT_MSB_PIN  PIND 
                   
                   #define LCD_DATAPORT_LSB_DDR  DDRC
                   #define LCD_DATAPORT_LSB_PORT PORTC
                   #define LCD_DATAPORT_LSB_PIN  PINC
                   
                  #define T1_OVF_FREQ 100
                  #define T1_PRESC 1024L
                  #define T1_INIT (0x10000L-(_MCU_CLOCK_FREQUENCY_/(T1_PRESC*T1_OVF_FREQ)))
                  
                  register char blue @12;
                  register char green @13;
                  register char red @14;
                  
                  int counter;
                  char counter2;
                  long int col;
                  
                  FRESULT res;
                  unsigned int nbytes;
                  FATFS drive;
                  FIL file;
                  char path[]="0:/Picture/1.bmp";
                  
                  interrupt [TIM1_OVF] void timer_comp_isr(void)
                  {
                  // re-initialize Timer1 
                  TCNT1H=T1_INIT>>8;
                  TCNT1L=T1_INIT&0xFF;
                  // card access low level timing function
                  disk_timerproc();
                  }
                  
                  
                   //================================================================ 
                   
                  #include "tftlcd_functions.h"
                  
                  void main(void)
                  {
                  TCCR1A=0x00;
                  TCCR1B=(1<<CS12)|(1<<CS10);
                  TCNT1H=T1_INIT>>8;
                  TCNT1L=T1_INIT&0xFF;
                  TIMSK=1<<TOIE1;
                  delay_ms(10);
                  #asm("sei")
                  lcd_init();
                  f_mount(0,&drive);
                  f_open(&file,path,FA_READ);
                  f_lseek(&file,54);
                  for(counter2=0;counter2<3;counter2++)
                  for(counter=0;counter<25600;counter++)
                  {
                  blue = fgetc(&file);
                  green = fgetc(&file);
                  red = fgetc(&file);
                  col = RGB2COL(red,green,blue);
                  lcd_write_wdr(col);	
                  }
                  }
                  هر چند پیر و خسته دل و ناتوان شدم * * * هر گه که یاد تو کردم جوان شدم :rolleyes:

                  دیدگاه


                    #39
                    پاسخ : افزایش سرعت AVR

                    منظور من این بود که بیای همه ی متغییر های توی برنامه رو بریزی تو ریجیستر ها !
                    راستی نیازی هم به آدرس دهی متغییر ها نیست کامپایلر خودش همه کارارو میکنه!
                    1 در دنیا 100 در آخرت (درس و مشق فعالیتمو تو انجمن کم کرده)
                    من آنچه شرط بلاغست با تو میآ‌گویم. تو خواه از سخنم پند گیر و خواه ملال. سعدی
                    !Electronic On! Programming On
                    هوشمندانه سوال بپرسیم!
                    http://ir02x6.persiangig.com/logo/eca/tanks_01.png

                    دیدگاه


                      #40
                      پاسخ : افزایش سرعت AVR

                      نوشته اصلی توسط mahan.rafiee
                      منظور من این بود که بیای همه ی متغییر های توی برنامه رو بریزی تو ریجیستر ها !
                      خب تمام کند بودن این برنامه بخاطر همین سه تا متغیر و سه خط برنامش هست (red,green,blue) oo:
                      کد:
                      blue = fgetc(&file);
                      green = fgetc(&file);
                      red = fgetc(&file);
                      وگرنه باقی برنامه (ترکیب این سه متغیر و استفاده از تابع lcd_write_wdr) کمتر از نیم ثانیه زمان میبره
                      هر چند پیر و خسته دل و ناتوان شدم * * * هر گه که یاد تو کردم جوان شدم :rolleyes:

                      دیدگاه


                        #41
                        پاسخ : افزایش سرعت AVR

                        عزیز یرادر مطمئن شو که پس از شناخت حافظه SD سرعت SPI روی حداکثر هست (این خیلی مهمه) AVR کارا کمک کنن و بگن چه جوری سرعت SPI رو روی حداکثر بزاره؟؟؟؟؟ (چون سرعت خوندن از sd مستقیم به سرعت spi وابسته هست)
                        چقدر دور و ور مطالب مختلف چرخ میزنید که اطلاعات خوبی داره ولی ربطی به موضوع نداره!!! :mrgreen:
                        بیشترین زمان مربوط به خواندن از کارت حافظه هست که تلف میشه
                        برای بهبود اول سرعت SPI رو روی حداکثر بزارید چون دیتای SD از مسیر SPI میاد تو!!(زبونم مو دراورود :surprised
                        دوم بجای 24 بیت خوندن ونمایش 16 بیت ، همون 16 بیت رو بخون و 16 بیت رو نمایش بده
                        بعد از اون میرسیم به مراحل دیگه بهینه سازی ولی اولویت با دو مورد اول است
                        (حالا اگه می خواید روی مباحث دیگه بحث کنید خوبه ولی مشکل اصلی دو مرود اوله)

                        [glow=black,2,300]بردی جالب با سیستم عاملی جالب !!![/glow]

                        دیدگاه


                          #42
                          پاسخ : افزایش سرعت AVR

                          نوشته اصلی توسط abbasmh
                          چقدر دور و ور مطالب مختلف چرخ میزنید که اطلاعات خوبی داره ولی ربطی به موضوع نداره!!! :mrgreen:
                          بیشترین زمان مربوط به خواندن از کارت حافظه هست که تلف میشه
                          برای بهبود اول سرعت SPI رو روی حداکثر بزارید چون دیتای SD از مسیر SPI میاد تو!!(زبونم مو دراورود :surprised
                          دوم بجای 24 بیت خوندن ونمایش 16 بیت ، همون 16 بیت رو بخون و 16 بیت رو نمایش بده
                          بعد از اون میرسیم به مراحل دیگه بهینه سازی ولی اولویت با دو مورد اول است
                          (حالا اگه می خواید روی مباحث دیگه بحث کنید خوبه ولی مشکل اصلی دو مرود اوله)
                          چی چی رو ربطی نداره oo: :surprised:
                          ولی میگید که سرعت اس پی آی رو زیاد کنیم حق با شماس
                          آفرین :applause:
                          یه تشکر بهت میدم :redface:

                          نوشته اصلی توسط J A V A D
                          خب تمام کند بودن این برنامه بخاطر همین سه تا متغیر و سه خط برنامش هست (red,green,blue) oo:
                          کد:
                          blue = fgetc(&file);
                          green = fgetc(&file);
                          red = fgetc(&file);
                          وگرنه باقی برنامه (ترکیب این سه متغیر و استفاده از تابع lcd_write_wdr) کمتر از نیم ثانیه زمان میبره
                          خب آقا جواد
                          شما بیا این دستورات رو در اول تابع main بزار (اولین دستورات تابع main)
                          کد:
                          spsr=0x01
                          spcr=0x03
                          با این کار سرعت sd زیاد میشه :applause:
                          :nerd:
                          1 در دنیا 100 در آخرت (درس و مشق فعالیتمو تو انجمن کم کرده)
                          من آنچه شرط بلاغست با تو میآ‌گویم. تو خواه از سخنم پند گیر و خواه ملال. سعدی
                          !Electronic On! Programming On
                          هوشمندانه سوال بپرسیم!
                          http://ir02x6.persiangig.com/logo/eca/tanks_01.png

                          دیدگاه


                            #43
                            پاسخ : افزایش سرعت AVR

                            نوشته اصلی توسط abbasmh
                            بجای 24 بیت خوندن ونمایش 16 بیت ، همون 16 بیت رو بخون و 16 بیت رو نمایش بده
                            عباس آقا من وقتی عکس رو به 16 بیت تبدیل میکنم نسبت 24 بیت اگه دقت کنی یه خرده کیفیتش میاد پایین (یه خرده) و حالا وقتی اونو تو ال سی دی میارم این کیفیت بیشتر پایین میاد (کاملا ملموسه) :rolleyes: شاید بگین درست 16 بیت رو نمیخونم :redface: اما من از کد زیر برای پردازش و خوندن 16بیت استفاده میکنم :
                            کد:
                            color1 = fgetc(&file);
                            color2 = fgetc(&file);
                            color3=(color1&0b00000111)|((color2&0b00011111)<<3);
                            color4=(color2&0b11100000)|((color1&0b11111000)>>3);
                            color5=((color3<<8)|color4);
                            lcd_write_wdr(color3);
                            حالا این مورد هم درست بشه بجای 7-8 ثانیه. 5-6 ثانیه زمان میبره برای هر عکس (2ثانیه ناقابل) :mrgreen:
                            به احتمال زیاد اشکال از یه جای دیگست :angry: :angry: :angry:
                            هر چند پیر و خسته دل و ناتوان شدم * * * هر گه که یاد تو کردم جوان شدم :rolleyes:

                            دیدگاه


                              #44
                              پاسخ : پاسخ : افزایش سرعت AVR

                              .
                              هر چند پیر و خسته دل و ناتوان شدم * * * هر گه که یاد تو کردم جوان شدم :rolleyes:

                              دیدگاه


                                #45
                                پاسخ : افزایش سرعت AVR

                                نوشته اصلی توسط J A V A D
                                آقا ماهان کد ویژن این دوتا متغیر رو نمیشناسه (spsr و spcr). کتابخونه spi.h رو هم اینکلود کردم
                                ببخشید باید دو دستور رو با حروف بزرگ نوشت.
                                1 در دنیا 100 در آخرت (درس و مشق فعالیتمو تو انجمن کم کرده)
                                من آنچه شرط بلاغست با تو میآ‌گویم. تو خواه از سخنم پند گیر و خواه ملال. سعدی
                                !Electronic On! Programming On
                                هوشمندانه سوال بپرسیم!
                                http://ir02x6.persiangig.com/logo/eca/tanks_01.png

                                دیدگاه

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