اطلاعیه

Collapse
No announcement yet.

مشکل با N96 LCD

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

    #16
    پاسخ : مشکل با N96 LCD

    آقا امید من فرکانس رو کردم 50 مگ. البته من چون با IAR کار می کنم باید رجیسترها رو خودم بنویسم. این تنظیماته:
    کد:
    AT91C_BASE_CKGR->CKGR_PLLR = 0x4AE3FDD;
    AT91C_BASE_PMC->PMC_MCKR = 0x7;

    بر اساس اون عددایی که محاسبه شد این فرکانس 50 مگ میده.

    اما هنوز هم سرعت خیلی کمه. یعنی وقتی زدم کل صفحه رو قرمز کنه حدود 1 ثانیه طول کشید.

    من فکر میکنم اشکال کار از توابعه. چون من دارم از کتابخونه ای که مال pmm هست استفاده می کنم. اما شما احتمالاً از توابع دیگه ای استفاده می کنید. به نظرم ایت تابعهایی که اینا نوشتن اصلاً بهینه نیست.

    می تونید کتابخونه lcd رو اینجا هم بذارید؟

    ممنون میشم.
    دانش فني تا به عمل تبديل نشده، ذره اي ارزش نداره. اما بعضي وقت ها بايد از دانش براي باز کردن مرزهاي جديدي در علم استفاده کرد، نه اينکه اونها رو صرفاً فقط به عمل تبديل کرد.

    دیدگاه


      #17
      پاسخ : مشکل با N96 LCD

      :mrgreen: oo: oo:
      کار سختی نیست
      منتها باید یکی از توابعی که نوشتم رو استفاده کنی هااااا
      یه چیزی تو مابه های fast show اسمش رو گزاشتم
      علم چندانکه بيشتر خواني چون عمل در تو نيست ناداني

      دیدگاه


        #18
        پاسخ : مشکل با N96 LCD

        ممنون، اما تنها چیزی که پیدا کردم توی فایل SD_File.c بود که یه موقع آوردن تصویر از تابع استفاده نکرده بودید و مستقیم از روی حافظه فایل رو خونده بودید و بصورت پروفشنال روی LCD کذاشته بودید. این:
        کد:
        void type_lcd_picture (char *par) {
         char *fname,*next,lsb;
         FILE *f;
         int ch,adder,add_con,starter;
         
         fname = get_entry (par, &next);
         if (fname == NULL) {
          printf ("\nFilename missing.\n");
          return;
         }
         printf("\nRead data from file %s\n",fname);
         f = fopen (fname,"r");       /* open the file for reading      */
         if (f == NULL) {
          printf ("\nFile not found!\n");
          return;
         }
         counter_x=0;
         counter_y=319;
         starter=0;
         init_lcd_for_picture();TFTLCD_RS_HIGH;	
         while ((ch = fgetc (f)) != EOF) {  
        starter++;
        if (starter>72){
        adder = fgetc (f)<<8;
        TFTLCD_CS_LOW;
        TFTLCD_WR_LOW;
        TFTLCD_DATAPORT_CLEAR;
        _TFTLCD_DATAPORT_SODR_ = (adder+ch << TFTLCD_DATAPORT_OFFSET);
        TFTLCD_WR_HIGH;
        TFTLCD_CS_HIGH;	}  }
         fclose (f);             /* close the input file when done   */
         printf ("\nFile closed.\n");
        }

        توی این هم فقط یه تابع بود که چشمم رو گرفت. اونم init_lcd_for_picture بود که البته اون رو هم که داخل کد کپی کردیم دیگه اصلاً کار نکرد :mrgreen:

        یه کم میشه راجع به این تابعی که میگید توضیح بدید؟؟؟
        دانش فني تا به عمل تبديل نشده، ذره اي ارزش نداره. اما بعضي وقت ها بايد از دانش براي باز کردن مرزهاي جديدي در علم استفاده کرد، نه اينکه اونها رو صرفاً فقط به عمل تبديل کرد.

        دیدگاه


          #19
          پاسخ : مشکل با N96 LCD

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

          با تابعی که من نوشتم این جوری میشه
          کد:
          init_lcd_for_picture();for (timer=0;timer<76800;timer++){tftlcd_write_wdr(PURPLE);}
          و این هم اون قسمت مهمش
          کد:
          init_lcd_for_picture(){
           tftlcd_write_index_register(TS_INS_START_ADX);
            tftlcd_write_wdr(0x0000);
            tftlcd_write_index_register(TS_INS_END_ADX);
            tftlcd_write_wdr(0x00EF);
            tftlcd_write_index_register(TS_INS_GRAM_ADX);
            tftlcd_write_wdr(0x0000);
          
            
          
            tftlcd_write_index_register(TS_INS_START_ADY);
            tftlcd_write_wdr(0x000);
            tftlcd_write_index_register(TS_INS_END_ADY);
            tftlcd_write_wdr(0x013F); 
          	tftlcd_write_index_register(TS_INS_GRAM_ADY);
            tftlcd_write_wdr(0x0000);
          	tftlcd_write_index_register(TS_INS_RW_GRAM);
            }

          علم چندانکه بيشتر خواني چون عمل در تو نيست ناداني

          دیدگاه


            #20
            پاسخ : مشکل با N96 LCD

            حالا این تابع init_lcd_for_picture رو کی باید فراخوانی کنیم ؟ :read:
            من قبل نوشتن یه عکس تو LCD فراخوانیش کردم ولی هیچ بهبودی حاصل نشد.
            این تابع دقیقا چی کار میکنه؟ :nerd:

            دیدگاه


              #21
              پاسخ : مشکل با N96 LCD

              این تابع init_lcd_for_picture رو متوجه شدم، گفتم که به کدم هم اضافه کردم، اما اضافه می کنم دیگه کد اصلاً کار نمی کنه. ضمناً اون بخش تعریفش رو هم کپی کرده بودم، البته اون بخش تعریفش نوع تابع رو اولش جا افتاده بود که من void زدم.

              اما این تابع که فقط برای آماده سازیه. میتونید یه مقدار در مورد تابعی که گفتم برای نوشتن عکس هست کمک کنید؟ این:
              نوشته اصلی توسط حامد پور آزاد
              ممنون، اما تنها چیزی که پیدا کردم توی فایل SD_File.c بود که یه موقع آوردن تصویر از تابع استفاده نکرده بودید و مستقیم از روی حافظه فایل رو خونده بودید و بصورت پروفشنال روی LCD کذاشته بودید. این:
              کد:
              void type_lcd_picture (char *par) {
               char *fname,*next,lsb;
               FILE *f;
               int ch,adder,add_con,starter;
               
               fname = get_entry (par, &next);
               if (fname == NULL) {
                printf ("\nFilename missing.\n");
                return;
               }
               printf("\nRead data from file %s\n",fname);
               f = fopen (fname,"r");       /* open the file for reading      */
               if (f == NULL) {
                printf ("\nFile not found!\n");
                return;
               }
               counter_x=0;
               counter_y=319;
               starter=0;
               init_lcd_for_picture();TFTLCD_RS_HIGH;	
               while ((ch = fgetc (f)) != EOF) {  
              starter++;
              if (starter>72){
              adder = fgetc (f)<<8;
              TFTLCD_CS_LOW;
              TFTLCD_WR_LOW;
              TFTLCD_DATAPORT_CLEAR;
              _TFTLCD_DATAPORT_SODR_ = (adder+ch << TFTLCD_DATAPORT_OFFSET);
              TFTLCD_WR_HIGH;
              TFTLCD_CS_HIGH;	}  }
               fclose (f);             /* close the input file when done   */
               printf ("\nFile closed.\n");
              }
              توی این تابع شما اطلاعات رو از فایل روی حافظه خوندید و روی lcd نشون دادید. اما من کار با اونا رو هنوز خوب بلد نیستم. می تونید خوندن و نشون دادن عکس از روی فلش خود میکرو رو توضیح بدید؟

              ممنون.
              دانش فني تا به عمل تبديل نشده، ذره اي ارزش نداره. اما بعضي وقت ها بايد از دانش براي باز کردن مرزهاي جديدي در علم استفاده کرد، نه اينکه اونها رو صرفاً فقط به عمل تبديل کرد.

              دیدگاه


                #22
                پاسخ : مشکل با N96 LCD

                خیلی سادست که دوست من
                72 تا دیتای اول رو نمیگیرم چون فایل bmp 72 تا دیتای اولش مربوط به اطلاعات فایل هست
                با fgetc دیتا رو ار مموری گرفتم و 2 بار گرفتم یکی ch و adder بعد یکی رو low بزار یمی رو high و کردمش یه long و فرستامش روی ال سی دی
                در مورد اون کلاک هایی که فرستادم روی ال سی دی تا کامل نشینین و ili2593 رو نخونی نمیتونم واسط توضیح بدم خیلی پیچ در پیچه :mrgreen:

                نوشته اصلی توسط رامین جعفرپور
                حالا این تابع init_lcd_for_picture رو کی باید فراخوانی کنیم ؟ :read:
                من قبل نوشتن یه عکس تو LCD فراخوانیش کردم ولی هیچ بهبودی حاصل نشد.
                این تابع دقیقا چی کار میکنه؟ :nerd:
                بابا مثالش رو که گزاشتم جیگرت برم من :mrgreen:
                کد:
                init_lcd_for_picture();for (timer=0;timer<76800;timer++){tftlcd_write_wdr(PURPLE);}
                الان این رنگ بنفش رو در عرض سیم ثاینه میریزه روکل ال سی دی


                علم چندانکه بيشتر خواني چون عمل در تو نيست ناداني

                دیدگاه


                  #23
                  پاسخ : مشکل با N96 LCD

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

                  دیدگاه


                    #24
                    پاسخ : مشکل با N96 LCD

                    آقا افتاد. :applause:
                    برم تست کنم ببینم جواب میده.
                    تو EEPROM ها هم چنین حالتی دیده بودم.

                    دیدگاه


                      #25
                      پاسخ : مشکل با N96 LCD

                      فعلاً که نتونستیم چیزی از تابع های جناب حبیبی در بیاریم! :mrgreen:

                      اما الان اومدم تاچ رو تست کنم. به یه مشکل خیلی بد خوردم. من چهارتا پایه تاچ رو هر کدوم رو به یه پایه از adc وصل کردم تا در بیارم اعدادش چطورن. اما نتیجش خیلی عجیبه. اعدادی که بهم میده حتی تو زمانی که به تاچ چیزی رو تماس ندادم هم به شدت تغییر می کنه. حتی اومدم براش یه سری بازه های 100 تایی تعیین کردم که توی اون بازه ها رو یک عدد نشون بده، اما تغییرات ها خیلی خیلی زیادن و اصلاً ثابت نمیشه.
                      حتی گفتم شاید این +X و -X ها یه جورایی تفاضلشون یا میانگینشون مختصات رو بده، اما این روش هم درست نشد.

                      میشه بگید کجای کار اشتباه هست که اینطور میشه؟
                      دانش فني تا به عمل تبديل نشده، ذره اي ارزش نداره. اما بعضي وقت ها بايد از دانش براي باز کردن مرزهاي جديدي در علم استفاده کرد، نه اينکه اونها رو صرفاً فقط به عمل تبديل کرد.

                      دیدگاه


                        #26
                        پاسخ : مشکل با N96 LCD

                        هامد جان تو تابع tuch همون اولش coment کردم که کدوم پین تاچ رو به کدوم پایه وصل کنین.اگر وصل کردین و باز هم درست کار نکرد مشکل از تاج هست و به خودت فشار نیار
                        علم چندانکه بيشتر خواني چون عمل در تو نيست ناداني

                        دیدگاه


                          #27
                          پاسخ : مشکل با N96 LCD

                          نوشته اصلی توسط اٌمید حبیبی
                          هامد جان تو تابع tuch همون اولش coment کردم که کدوم پین تاچ رو به کدوم پایه وصل کنین.اگر وصل کردین و باز هم درست کار نکرد مشکل از تاج هست و به خودت فشار نیار
                          می دونم، آخه من هدرم SAM7S64 هست که کلاً یه پورت a بیشتر نداره. و در ضمن اون 32 پایه رو نیاز دارم نمیتونم از AD های 1 تا 3 استفاده کنم. فقط از چهارتای آخر (از 4 تا 7) می تونم استفاده کنم. اما خوب برنامه ای که نوشتم شبیه به مال شماست:
                          کد:
                          config_adc (0xF0);
                           start_adc();
                           a = num_corr(read_adc(7)); //X+
                           b = num_corr(read_adc(6)); //X-
                           c = num_corr(read_adc(5)); //Y+
                           d = num_corr(read_adc(4)); //Y-

                          ابنم عددا رو هم فرستادم روی lcd که ببینم چه خبره:
                          کد:
                          g= ((a+b)/2);
                           h = ((c+d)/2);
                           sprintf(e,"%u",g);
                           sprintf(f,"%u",h);
                          tftlcd_gotoxy(1,0);
                           tftlcd_putsf ("X+ =",BLACK,WHITE,0);
                           tftlcd_gotoxy(5,0);
                           tftlcd_putsf (e,BLACK,WHITE,0);
                           
                           tftlcd_gotoxy(1,5);
                           tftlcd_putsf ("X- =",BLACK,WHITE,0);
                           tftlcd_gotoxy(5,5);
                           tftlcd_putsf (f,BLACK,WHITE,0);


                          البته اون تابع num_corr هم اینه که برای این نوشتم که یه مقدار بازه بندی کنم بلکه بهتر شه. اینه:
                          کد:
                          int num_corr (int temp){
                           if (temp < 0)
                            temp = 0;
                           else if (temp >0 && temp <=100)
                            temp = 50;
                           
                           else if (temp >100 && temp <=200)
                            temp = 150;
                           
                           else if (temp >200 && temp <=300)
                            temp = 250;
                           
                           else if (temp >300 && temp <=400)
                            temp = 350;
                           
                           else if (temp >400 && temp <=500)
                            temp = 450;
                           
                           else if (temp >500 && temp <=600)
                            temp = 550;
                           
                           else if (temp >600 && temp <=700)
                            temp = 650;
                           
                           else if (temp >700 && temp <=800)
                            temp = 750;
                           
                           else if (temp >800 && temp <=900)
                            temp = 850;
                           
                           else if (temp >900 && temp <=1000)
                            temp = 950;
                           
                           else if (temp >1000 && temp <=1100)
                            temp = 1000;
                           
                           else
                            temp = 0;
                           
                           
                           return temp;
                           
                          }



                          اگه مشکل از تاچ هست، عوضش می کنم. اما آخه فکر می کنم مشکل از برنامه یا کد من باید باشه.
                          دانش فني تا به عمل تبديل نشده، ذره اي ارزش نداره. اما بعضي وقت ها بايد از دانش براي باز کردن مرزهاي جديدي در علم استفاده کرد، نه اينکه اونها رو صرفاً فقط به عمل تبديل کرد.

                          دیدگاه


                            #28
                            پاسخ : مشکل با N96 LCD

                            سلام آقا حامد پور آزاد
                            تا اونجایی که یادم هست و کارکرده بودم و هدر های مجله نویز7 رو دیدم. برای استفاده از تاچ های مقاومتی باید برای خواندن مقدار x,y باید در زمانی که می خواهید مثلا x را بخونید باید از 4 پایه یک پایه را یک کنید و یک پایه دیگر را صفر کنید و از پایه وسطی به وسیله ADC مقدار آنرا بخوانید. برای y هم به همین صورت است فقط پایه ها جابجا می شود. حالا شما می خواهید از ADC4,5,6,7 استفاده کنید که این پایه ها مستقیم به واحد ADC وصل است و با PIO ها مالتی پلکس نشده است پس شما نمی توانید آنها را به صورت خروجی صفر و یک کنید. نتیجه اخلاقی از این پایه ها نمی توانید برای تاچ استفاده کنید و باید از ADC0,1,2,3 استفاده کنید.

                            دیدگاه


                              #29
                              پاسخ : مشکل با N96 LCD

                              نوشته اصلی توسط حامد AT91
                              سلام آقا حامد پور آزاد
                              تا اونجایی که یادم هست و کارکرده بودم و هدر های مجله نویز7 رو دیدم. برای استفاده از تاچ های مقاومتی باید برای خواندن مقدار x,y باید در زمانی که می خواهید مثلا x را بخونید باید از 4 پایه یک پایه را یک کنید و یک پایه دیگر را صفر کنید و از پایه وسطی به وسیله ADC مقدار آنرا بخوانید. برای y هم به همین صورت است فقط پایه ها جابجا می شود. حالا شما می خواهید از ADC4,5,6,7 استفاده کنید که این پایه ها مستقیم به واحد ADC وصل است و با PIO ها مالتی پلکس نشده است پس شما نمی توانید آنها را به صورت خروجی صفر و یک کنید. نتیجه اخلاقی از این پایه ها نمی توانید برای تاچ استفاده کنید و باید از ADC0,1,2,3 استفاده کنید.
                              دقیقاً مشکلی که انتظارش رو داشتم پیش اومد. من قصد داشتم روی این میکرو LCD رو با تاچش راه اندازی کنم، و در ضمن دیتا رو از روی مموری بخونم و روی LCD نمایش بدم. این یعنی به SPI نیاز دارم و ADC. اما SPI های اینا که توی پایه های 11 تا 14 هست، اون چهارتا ADC اول هم توی 17 تا 20. در ضمن 16 بیت دیتا هم برای LCD نیاز دارم که باید پشت سر هم باشه. امیدوار بودم که بشه با این 4 تای آخر کار کرد. دلیل اینکه می خواستم مقدار این پورت ها رو بخونم همین بود. وگرنه با این شرایط به نظرم نمیشه با یه SAM7S64 همه این کارها رو انجام داد. درسته؟
                              دانش فني تا به عمل تبديل نشده، ذره اي ارزش نداره. اما بعضي وقت ها بايد از دانش براي باز کردن مرزهاي جديدي در علم استفاده کرد، نه اينکه اونها رو صرفاً فقط به عمل تبديل کرد.

                              دیدگاه


                                #30
                                پاسخ : مشکل با N96 LCD

                                نوشته اصلی توسط حامد پور آزاد
                                دقیقاً مشکلی که انتظارش رو داشتم پیش اومد. من قصد داشتم روی این میکرو LCD رو با تاچش راه اندازی کنم، و در ضمن دیتا رو از روی مموری بخونم و روی LCD نمایش بدم. این یعنی به SPI نیاز دارم و ADC. اما SPI های اینا که توی پایه های 11 تا 14 هست، اون چهارتا ADC اول هم توی 17 تا 20. در ضمن 16 بیت دیتا هم برای LCD نیاز دارم که باید پشت سر هم باشه. امیدوار بودم که بشه با این 4 تای آخر کار کرد. دلیل اینکه می خواستم مقدار این پورت ها رو بخونم همین بود. وگرنه با این شرایط به نظرم نمیشه با یه SAM7S64 همه این کارها رو انجام داد. درسته؟
                                به 7s جسارت نکنید :biggrin: اگر کتابخانه LCD طوری نوشته می شد که به توان از هر 16 پینی که نیاز هست استفاده کرد اونوقت مشکل شما حل بود. پس باید تغییراتی در کتابخانه LCD انجام داد که بشود از هر پین دلخواه استفاده کرد و لزومی نداشته باشد که پشت سر هم باشد. مثلا کتابخانه LCD کاراکتری کتاب AT91 رو ببین از هر پینی که بخواهید برای اطلاعات استفاده می کنید و نیازی به پشت سرهم بودن آن نیست.

                                دیدگاه

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