اطلاعیه

Collapse
No announcement yet.

mmc با زبان c

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

    #91
    پاسخ : mmc با زبان c

    نوشته اصلی توسط hamidcia
    وقتی با کتابخانه کدویژن FAT on MMC/SD/SD HC card به نظرم سرعت نوشتن پایین بود!
    حالا چند تا سوال دارم:
    1- راه هایی برای افزایش سرعت نوشتن هست توی کدویژن؟
    2- دوستانی که با AVR Studio کار کردند آیا کتابخانه آقای chaN در آنجا سرعتش بالاتر است؟ در صورت امکان حدود سرعت نوشتن رو بفرمایید؟
    دوست عزیز حق با شماست من سرعت کتابخونه رو با کتابخونه خود کدویژن مقایسه کردم سرعت خوندن نوشتنش پایین تره دلیلش هم تنظیمات spi هست که خود کدویژن انجام میده به نظرم قابل تغییر نیست مگر اینکه کتابخونه رو خودتون دانلود کنید و تنظیماتش رو خودتون انجام بدید

    دیدگاه


      #92
      پاسخ : mmc با زبان c

      من حدود 120 کیلوبایت در ثانیه رو کارت نوشتم و حدود 460 کیلو دارم ازش می خونم
      در زیر این نقاب چیزی بیشتر از گوشت هست. در زیر این نقاب یک ایده هست و ایده ها ضدگلوله هستند.

      1-به اندازه ی باورهای هر کسی ؛ با او حرف بزن …. بیشتر که بگویی ، تو را احمق فرض خواهد کرد …!!!
      2-تنها دو گروه نمى توانند افکار خود را عوض کنند: دیوانگان تیمارستان و مردگان گورستان.
      3-آدم ها مثل عکس ها هستند: زیاد بزرگشون کنی ، کیفیتشون میاد پایین!

      دیدگاه


        #93
        پاسخ : mmc با زبان c

        با سلام خدمت دوستان.

        حقیقتش من با توجه به آموزش های پیج اول همین تاپیکی ,کدی رو از اونجا برداشتم و فیزیکال AVR وLCD وMMC رو بستم به هم و پروگرم کردم ولی جواب نداد.
        کمی تغییرش دادم تا بفهمم ایراد از کجاست.

        ولی چیزی که متوجه شدم این بود که AVR فانکشن های زیر رو به ترتیب درست اجرا میکنه.
        f_mount
        f_open
        ولی وقتی به f_read میرسه مقدار زیر رو برمیگردونه
        FR_NOT_READY
        نا گفته نمونه که کد به طور کاملا درست در پرتئوس با LCD 4*20 کاملا درست اجرا میشه و خروجی مطلوب رو میده.
        کمکم کنید واقعا دوروزه گیره اینم و درستم نمیشه.
        چیزایی هم که LCD موقع اجرا به صورت فیزیکال نشون میده به ترتیب اینا هستند.
        FAT mounted = OK
        working ...
        File Opened
        FR_NOT_READY

        اینم از کدی که تغییر دادم.

        کد:
        /*****************************************************
        This program was produced by the
        CodeWizardAVR V2.05.3 Standard
        Automatic Program Generator
        © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
        http://www.hpinfotech.com
        
        Project : 
        Version : 
        Date  : 2012/02/17
        Author : Hamid.....
        Company :
        Comments: 
        
        
        Chip type        : ATmega32A
        Program type      : Application
        AVR Core Clock frequency: 8 MHz
        Memory model      : Small
        External RAM size    : 0
        Data Stack size     : 512
        *****************************************************/
        
        #include <mega32a.h>
        #include <alcd.h>
        #include <ff.h>
        #include <stdio.h>
        #include <delay.h>
        
        #define T1_OVF_FREQ 100
        #define T1_PRESC 1024L
        #define T1_INIT (0x10000L-(_MCU_CLOCK_FREQUENCY_/(T1_PRESC*T1_OVF_FREQ)))
        
        
        unsigned char buffer[14];
        
        FRESULT res;
        unsigned int nbytes;
        FATFS drive;
        FIL file;
        char path1[]="0:/a.txt";
        interrupt [TIM1_OVF] void timer_comp_isr(void)
        {
        TCNT1H=T1_INIT>>8;
        TCNT1L=T1_INIT&0xFF;
        disk_timerproc();
        }
        
         
        void main(void)
        {
        
        TCCR1A=0x00;
        TCCR1B=(1<<CS12)|(1<<CS10);
        TCNT1H=T1_INIT>>8;
        TCNT1L=T1_INIT&0xFF;
        TIMSK=1<<TOIE1;
        #asm("sei")
        
        lcd_init(20);
        lcd_clear();
        
        if ((res=f_mount(0,&drive))==FR_OK)
          lcd_putsf("FAT mounted = OK");
        delay_ms(100);
        lcd_clear();
        lcd_putsf("working ...");
        res=f_open(&file,path1,FA_READ);
        if (res==FR_OK){
           lcd_clear();
          lcd_putsf("File Opened");
          } 
        else if(res==FR_DISK_ERR){
           lcd_clear();
          lcd_putsf("FR_DISK_ERR");
        }
        else if(res==FR_INT_ERR){
          lcd_clear();
          lcd_putsf("FR_INT_ERR");
        }
        else if(res==FR_NOT_READY){
           lcd_clear();
          lcd_putsf("FR_NOT_READY");
        }
        else if(res==FR_INVALID_OBJECT){
          lcd_clear();
          lcd_putsf("FR_INVALID_OBJECT");
        }
        else if(res==FR_TIMEOUT){
           lcd_clear();
          lcd_putsf("FR_TIMEOUT");
        }
        else{
          lcd_clear();
          lcd_putsf("CAN'NT Open File");
        } 
                  
                   
        delay_ms(100);
        lcd_clear();
          
        res=f_read(&file,buffer,14,&nbytes);
        if (res==FR_OK){
          lcd_putsf("Reading Data...");          
          } 
          else if(res==FR_DISK_ERR){
           lcd_clear();
          lcd_putsf("FR_DISK_ERR");
        }
        else if(res==FR_INT_ERR){
          lcd_clear();
          lcd_putsf("FR_INT_ERR");
        }
        else if(res==FR_NOT_READY){
           lcd_clear();
          lcd_putsf("FR_NOT_READY");
        }
        else if(res==FR_INVALID_OBJECT){
          lcd_clear();
          lcd_putsf("FR_INVALID_OBJECT");
        }
        else if(res==FR_TIMEOUT){
           lcd_clear();
          lcd_putsf("FR_TIMEOUT");
        }
        else {
          lcd_putsf("CANN'T Reading Data");  
        }
          delay_ms(100);
          lcd_clear();
          lcd_puts(buffer);         
          
        delay_ms(100);                 
        lcd_clear();
          
        if ((res=f_close(&file))==FR_OK)
          lcd_putsf("File closed");  
        
        while(1){}
         }

        دیدگاه


          #94
          پاسخ : mmc با زبان c

          در ضمن دوستان موقع اجرای برنامه پروتئوس این وارنینگ رو هم میده :
          کد:
          clock frequency changed while in master mode

          دیدگاه


            #95
            پاسخ : mmc با زبان c

            کسی نیست بتونه جواب سوال منو بده?
            واقعا لازم دارم و کارم گیره.

            دیدگاه


              #96
              پاسخ : mmc با زبان c

              این فایلی که بازش می کنین رو دیسک هست؟
              در زیر این نقاب چیزی بیشتر از گوشت هست. در زیر این نقاب یک ایده هست و ایده ها ضدگلوله هستند.

              1-به اندازه ی باورهای هر کسی ؛ با او حرف بزن …. بیشتر که بگویی ، تو را احمق فرض خواهد کرد …!!!
              2-تنها دو گروه نمى توانند افکار خود را عوض کنند: دیوانگان تیمارستان و مردگان گورستان.
              3-آدم ها مثل عکس ها هستند: زیاد بزرگشون کنی ، کیفیتشون میاد پایین!

              دیدگاه


                #97
                پاسخ : mmc با زبان c

                نوشته اصلی توسط siyavash2k
                این فایلی که بازش می کنین رو دیسک هست؟
                بله رو دیسک هستش.
                شبیه سازیش کاملا درست جواب میده.
                ولی رو برد که میبندم مدارو جواب نمیده.

                دیدگاه


                  #98
                  پاسخ : mmc با زبان c

                  با یک مموری کارت دیگه تست کنین شاید درست بشه. برای من هم مورد های مشابه پیش اومده.
                  در زیر این نقاب چیزی بیشتر از گوشت هست. در زیر این نقاب یک ایده هست و ایده ها ضدگلوله هستند.

                  1-به اندازه ی باورهای هر کسی ؛ با او حرف بزن …. بیشتر که بگویی ، تو را احمق فرض خواهد کرد …!!!
                  2-تنها دو گروه نمى توانند افکار خود را عوض کنند: دیوانگان تیمارستان و مردگان گورستان.
                  3-آدم ها مثل عکس ها هستند: زیاد بزرگشون کنی ، کیفیتشون میاد پایین!

                  دیدگاه


                    #99
                    پاسخ : mmc با زبان c

                    جناب siyavash2k درست می گن.
                    ما امتحان کردیم. با fat16.
                    مموری 128 مگابایت جواب داد.
                    مموری 2 گیگابایت جواب داد.
                    مموری 4 گیگابایت جواب نداد.(احتمالا بیشتر از اینم جواب نمی ده)

                    دیدگاه


                      پاسخ : mmc با زبان c

                      من با یک 4 گیگ جواب گرفتم. این در حالی بوده که با همین چهار گیگ یک موقعی جواب نمی داد. طول اتصالات را که کم کردم درست شد. باید تا جای ممکن طول اتصالات را کم کنید. در ضمن کارت های حافظه هم با هم فرق دارند.
                      من تصور می کنم هر چی سرعت کارت بالاتر باشه نویز پذیری اون هم بیشتر میشه. برای همین هم باید تا جای ممکن طول اتصالات را کم کرد.
                      در زیر این نقاب چیزی بیشتر از گوشت هست. در زیر این نقاب یک ایده هست و ایده ها ضدگلوله هستند.

                      1-به اندازه ی باورهای هر کسی ؛ با او حرف بزن …. بیشتر که بگویی ، تو را احمق فرض خواهد کرد …!!!
                      2-تنها دو گروه نمى توانند افکار خود را عوض کنند: دیوانگان تیمارستان و مردگان گورستان.
                      3-آدم ها مثل عکس ها هستند: زیاد بزرگشون کنی ، کیفیتشون میاد پایین!

                      دیدگاه


                        پاسخ : mmc با زبان c

                        جناب siyavash2k باز هم درست می گن.
                        اشتباه من همونی بود که ذکر شد.
                        سیم ارتباطی ماکسیمم باید 5 سانت باشه اگه pcb باشه که چه بهتر.

                        دیدگاه


                          پاسخ : mmc با زبان c

                          سلام و با تشکر از دوستانی که اطلاعات خود را به اشتراک گذاشتند. :applause:

                          دیدگاه


                            پاسخ : پاسخ : mmc با زبان c

                            نوشته اصلی توسط حمیدجان
                            بله دوست من همین طوره این برنامه رو عمدا گذاشتم تا ببینی با اینکه فقط یه فایل رو باز کردیم و 10 بایت اطلاعات ازش خوندیم به میزان 1147 بایت از حافظه ی RAM مورد استفاده قرار گرفت یعنی اثبات حرفی که گفتم.

                            جالبه بدونی اگه با همین mega8 همین برنامه رو تغییر بدی و یه سری کارای زیاد دیگه مثل ریختن اطلاعات در فایل انجام بدی حجم رم اشغالی تفاوت زیادی با برنامه ی قبلی نمیکنه ، یعنی اضافه کردن توابع یه میزان مشخص از حافظه ی رو اشغال میکنه ولی استفاده از توابع حافظه ی خیلی کمتر.

                            و اما حالا برای اینکه بری و حالشو ببری یه مثال کامل با mega32 میذارم تا هم بتونی رو پروتئوس شبیه سازی کنی و هم در عمل:

                            در پیج سوم همین تاپیک هم یه تعداد مثال گذاشتم میتونید استفاده کنید

                            برنامه همون خوندن اطلاعات از یه فایل TXT هست اما با توضیحاتی که میدم هر چیزی خواستی میتونی بهش اضافه کنی.

                            برای اینکه کارت راحت بشه فایل کامل پروژه رو برا دانلود میذارم:

                            برای عملی بستن برنامه میتونی از هر مموری استفاده کنی من از microSD 1 GB استفاده کردم با FAT سیستم 16.

                            توجه کن مراحل رو به دقت همون جوری که میگم انجام بده تا به جواب برسی:

                            ابتدا برنامه زیر رو تو میکرو بریز.فایل هگز رو برای دانلود گذاشتم:

                            کد:
                            /*****************************************************
                            This program was produced by the
                            CodeWizardAVR V2.05.3 Standard
                            Automatic Program Generator
                            © Copyright 1998-2011 Pavel Haiduc, HP InfoTech s.r.l.
                            http://www.hpinfotech.com
                            
                            Project : 
                            Version : 
                            Date  : 2012/02/17
                            Author : Hamid.....
                            Company :
                            Comments: 
                            
                            
                            Chip type        : ATmega32A
                            Program type      : Application
                            AVR Core Clock frequency: 8 MHz
                            Memory model      : Small
                            External RAM size    : 0
                            Data Stack size     : 512
                            *****************************************************/
                            
                            #include <mega32a.h>
                            #include <alcd.h>
                            #include <ff.h>
                            #include <stdio.h>
                            #include <delay.h>
                            
                            #define T1_OVF_FREQ 100
                            #define T1_PRESC 1024L
                            #define T1_INIT (0x10000L-(_MCU_CLOCK_FREQUENCY_/(T1_PRESC*T1_OVF_FREQ)))
                            
                            
                            unsigned char buffer[10];
                            
                            FRESULT res;
                            unsigned int nbytes;
                            FATFS drive;
                            FIL file;
                            char path1[]="0:/hamid.txt";
                            char path2[]="0:/test.txt";
                            
                            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();
                            }
                            
                            
                            void main(void)
                            {
                            TCCR1A=0x00;
                            TCCR1B=(1<<CS12)|(1<<CS10);
                            TCNT1H=T1_INIT>>8;
                            TCNT1L=T1_INIT&0xFF;
                            TIMSK=1<<TOIE1;
                            
                            delay_ms(1000);
                            #asm("sei")
                            
                            // Alphanumeric LCD initialization
                            // RS - PORTA Bit 0
                            // RD - PORTA Bit 6
                            // EN - PORTA Bit 1
                            // D4 - PORTA Bit 2
                            // D5 - PORTA Bit 3
                            // D6 - PORTA Bit 4
                            // D7 - PORTA Bit 5
                            // Characters/line: 16
                            lcd_init(16);
                            lcd_clear();
                            
                            
                            if ((res=f_mount(0,&drive))==FR_OK)
                              lcd_putsf("FAT mounted = OK");  
                            
                            delay_ms(1000);
                            lcd_clear();
                            if ((res=f_open(&file,path1,FA_READ))==FR_OK)
                              lcd_putsf("File open hamid"); 
                                      
                                       
                            delay_ms(1000);
                            lcd_clear();  
                            if ((res=f_read(&file,buffer,14,&nbytes))==FR_OK)
                              lcd_putsf("Reading Data");  
                              delay_ms(1000);
                              lcd_clear();
                              lcd_puts(buffer);         
                              
                            delay_ms(1000);                 
                            lcd_clear();  
                            if ((res=f_close(&file))==FR_OK)
                              lcd_putsf("File closed");
                            
                             
                            delay_ms(1000);
                            lcd_clear();
                            if ((res=f_open(&file,path2,FA_READ))==FR_OK)
                              lcd_putsf("File opened test");  
                              
                            delay_ms(1000);
                            lcd_clear();  
                            if ((res=f_read(&file,buffer,14,&nbytes))==FR_OK)
                              lcd_putsf("Reading Data");  
                              delay_ms(1000);
                              lcd_clear();
                              lcd_puts(buffer); 
                              
                            delay_ms(1000);                 
                            lcd_clear();  
                            if ((res=f_close(&file))==FR_OK)
                              lcd_putsf("File closed"); 
                             
                            
                            while(1);
                             }


                            این برنامه دو فایل TXT با نامهای مختلف رو باز میکنه واطلاعاتش رو تو lcd نشون میده.

                            تو فایلی که برای دانلود گذاشتم همه چیز اماده هست وشما فقط باید کلید ران رو بزنی اما با این حال به صورت شکل مراحل رو توضیح میدم.

                            شکل زیر مربوط به کانفیگ کردن میکرو هست:



                            شکل زیر مربوط به تنظیم پایه های مموری هست:



                            شکل زیر مربوط به تنظیم پایه های lcd هست:



                            شکل زیر مربوط به تنظیم مموری در پروتئوس هست:



                            شکل زیر مربوط به نرم افزار WINIMAGE هست که با اون میتونیم فایل های image مورد استفاده در پروتئوس رو باز و ویرایش کنیم.فایل های txt که ساختیم درون این فایل image قرار داره که با پسوند zip. ذخیره شده:



                            شکل زیر هم نتیجه ی کار هست:




                            توجه کن برای اینکه عملا مدار رو ببندی یه بار باید مموری که میخوای استفاده کنی فرمت کنی میتونی با هر مدل فت 16 یا 32 خواستی این کار رو انجام بدی:



                            وبعد از فرمت باید فایل های txt رو داخل مموری بریزی:






                            ودر آخر این هم لینک دانلود کل پروژه به همراه نرم افزار WINIMAGE :

                            http://s1.picofile.com/file/73046916...Dcard.rar.html


                            و لینک مثال های بعدی :

                            http://www.eca.ir/forum2/index.php?topic=59702.30


                            اگه دوستان نظری دارن در رابطه مطالب گفته شده لطفا از من دریغ نفرمایند

                            بنده مثال 7 شمارو بصورت عملی بستم ولی جواب نگرفتم...
                            در دستور open، ارور FR_INT_ERR میده
                            در پروتئوس هم با ارور جواب میده،هم مینویسه هم میخونه ولی به open میرسه در پروتئوس ارور هی اضافه میکنه!!!
                            فایل هگز شما 41kb هستش....این مشکلی ایجاد نمیکنه؟چون از atmega32 استفاده میکنیم؟
                            در یکی از forum های eca خواندم باید پایهآ‌ی cs مموری رو به خروجی تایمر 1 میکرو بزنیم!؟
                            بنده از ماژول آمادهآ‌ی microsd adapter استفاده میکنم...
                            و از فرکانس داخلی 8mh
                            بعصی جاها در مورد rtc نوشته بودند..آیا لازمه از ساعت استفاده کنیم؟
                            اگه جواب منو بدید ممنون میشم...تایم تحویل پروژم داره نزدیک میشه.... :sad:
                            خواهشا جواب بدید

                            دیدگاه

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