اطلاعیه

Collapse
No announcement yet.

کار با فایل در میکرو؟

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

    کار با فایل در میکرو؟

    سلام خسته نباشین دوستان...

    اقایون من میخواستم یه برنامه بنویسم که که یه سری شماره توی میکرو سیو بشه،بعد میکرو این شماره هارو در بیاره و حالا بررسی کنه ،تغییرشون بده و یه سری شماره خودش بسازه و ... و در اخرم سیو کنه! باید از چ حافظه ای استفاده کنم؟(ای 2 پی رام؟)

    و اینکه این لیست شماره رو چجوری بهش بدم؟؟!! :rolleyes:

    با کدویژنم کار میکنم
    ممنون

    #2
    پاسخ : کار با فایل در میکرو؟

    لیست شماره ها رو میتونی به صورت آرایه یا ساختار ذخیره کنی.
    در مورد حافظه هم میتونی از e2prom داخلی استفاده کنی تا حافظه های mmc یا spi flash. بستگی به نیازت داره و تعداد شماره هایی که میخوای ذخیره کنی.
    خیلی کلی گفتی
    ... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآ‌هاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآ‌ها، خاطره همتآ‌هاى بلند را از یادها محو کرده است. (نهجآ‌البلاغه، خطبه211)

    امام علی (ع):کسی که به وقت یاری رهبرش در خواب باشد، با لگد دشمنش بیدار می شود (غررالحکم،ص 422)

    دیدگاه


      #3
      پاسخ : کار با فایل در میکرو؟

      روی 200 شماره! شماره 14 رقمی!

      اگر توی ارایه باشه،با قطع تغذیه از بین نمیره؟!

      همیشه میخوام سیو باشه ،بشه پاک ی شماره رو،بشه تغییرش داد و...اخرشم سیو شه

      ممنون :rolleyes:

      دیدگاه


        #4
        پاسخ : کار با فایل در میکرو؟

        اگر بخوای عدد 14 رقمی به صورت باینری ذخیره بشه برای هر عدد 6 بایت احتیاجه میشه کلا 1200 بایت.
        اگر هم بخوای هر رقم رو به صورت کاراکتری ذخیره کنی میشه 2800 بایت.
        اگر بخوای شماره ها رو تغییر بدی باید از حافظه خارجی استفاده کنی. توی آرایه ذخیره بشه یا نشه فرقی نداره مثل کامپیوتر که اول فایل ها داخل رم قرار دارن و بعد که سیو رو بزنی میرن توی حافظه جانبی، شما هم وقتی داری یک شماره رو تغییر میدی عملیات بسته به تعریف متغیرها درون برنامه، ممکنه در رم ذخیره بشه که اگر برق قطع بشه همش میپره یا این مستقیما در حافظه جانبی تغییرات صورت بگیره که البته یکم سرعتش این طوری کمتره.
        اما کلا شما به فکر استفاده از یک حافظه خارجی باش چون میکروهای متداول بیشتر 1000 باید e2prom ندارن
        ... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآ‌هاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآ‌ها، خاطره همتآ‌هاى بلند را از یادها محو کرده است. (نهجآ‌البلاغه، خطبه211)

        امام علی (ع):کسی که به وقت یاری رهبرش در خواب باشد، با لگد دشمنش بیدار می شود (غررالحکم،ص 422)

        دیدگاه


          #5
          پاسخ : کار با فایل در میکرو؟

          سلام به همه
          صلوات
          این رو هم در نظر بگیرید که حافظه 100,000 EEPROM بار بیشتر نمیشه اون رو خوند و نوشت پس اگر خوندن و نوشتن توسط برنامه شما روزی 100 بار باشه دستگاه شما تا دو سال حافظه رو داره (که اگر دمای محیط هم حدود 25 درجه باشه نه بیشتر مثلا 40 درجه که خود این هم تعداد دفعات رو میاره پایین) من به شما استفاده از SD کارت هارو پیشنهاد میدم که هم ارزون هست و هم فضای خیلی زیادی در اختیارتون میزاره و هم میتونین با اتصال به کامپیوتر و کمی برنامه نویسی دقیقتر اون اطلاعات رو بخونین یا اگر خواستین کاری کنین که نشه خوند.
          ای خدا ، من باید از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از این راه طعنه زنند. باید به آن سنگدلانی که علم را بهانه کرده و به دیگران فخر میآ*فروشند، ثابت کنم که خاک پای من هم نخواهند شد. باید همه آن تیره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترین و افتاده ترین مرد روی زمین باشم.
          شهید دکتر مصطفی چمران
          اللهم صل علی محمد و ال محمد و عجل فرجهم
          ; C is not for children

          دیدگاه


            #6
            پاسخ : کار با فایل در میکرو؟

            ممنون نه اینقدر زیاد نیست ولی من تا حالا با EEPROM خارجی کار نکردم و تصمیم گرفتم از ای سی 24c32 استفاده کنم، حالا تو برنامه نویسیش ی مشکل دارم اونم اونم اینه که من میخوام 2تا عدد و بنویسم

            توی 2 تا ادرس ،حالا اونا رو بخونم .اگه یکی بودن یه پورت رو فعال کنه:

            کد:
            #include <mega8.h>
            
            /* the I2C bus is connect to PORTC */
            /* the SDA signal is bit 3 */
            /* the SCL signal is bit 4 */
            #asm
            .equ __i2c_port=0x15 //address PORTC = 0X15
            .equ __sda_bit=3
            .equ __scl_bit=4
            #endasm
            
            #include <i2c.h>
            
            #include <delay.h>
            
            #include <stdio.h>
            
            #define EEPROM_BUS_ADDRESS 0XA0
            
            /* function eeprom_read for read 
            a byte from the external eeprom*/
            unsigned char eeprom_read(unsigned char address)
             {
             unsigned char data;
             i2c_start();
             i2c_write(EEPROM_BUS_ADDRESS);
             i2c_write(address);
             i2c_start();
             i2c_write(EEPROM_BUS_ADDRESS | 1);
             data=i2c_read(0); // ????
             i2c_stop();
             return data;
             }
             
            /* function eeprom_write for writ 
            a byte to the external eeprom*/
            unsigned char eeprom_write(unsigned char address,unsigned char data)
             {
             i2c_start();
             i2c_write(EEPROM_BUS_ADDRESS);
             i2c_write(address);
             i2c_write(data);
             i2c_stop();
             delay_ms(20);  
             }
            
            void main(void)
             {    
                      
              char d1,d2;
            
             /* initialize the i2c bus */
             i2c_init();
             DDRD=0xff;    
             PORTB=0xff;
             eeprom_write(0x00,123456);  //in shomareye 1
             eeprom_write(0x01,654321); // in shomarame 2
             d1=eeprom_read(0x00);
             d2=eeprom_read(0x01);
             if(d1==d2)
             {
                  // PORTD=eeprom_read(0x00);  
                   PORTC.0=1;
            
             } 
             
             
            
             while(1);
             }
            مشکل اینجاست وقتی ب شرط میرسه چه d1==d2 چه نباشه، اون PORTC.0=1 میکنه

            ممنون

            دیدگاه


              #7
              پاسخ : کار با فایل در میکرو؟

              سلام به همه
              صلوات
              من با atmel Studio کار میکنم و نتونستم برنامه شمارو به درستی کامپایل کنم
              اما حافظه eeprom نمیتونه همچین عدد بزرگی رو در یک بایت از حافظش ذخیره کنه (البته هیچ وسیله دیگه ای هم نمیتونه عددی بزرگتر از یک بایت رو توی یک بایت ذخیره کنه )
              برای تست صحت عملکردی مدارت آدرس اول رو با عدد 3 پر کن و آدرس دوم رو با عدد 8 بعد همین رو تست کن.
              اگر جواب نگرفتی آدرس اولت رو خونه 2 بگیر و آدرس بهدیت رو خونه 8 بگیر ببین چی میشه .
              اما باید با کار اول جواب بگیری انشاالله
              نتیجه رو اعلام کن
              موفق و پر پول باشید
              ای خدا ، من باید از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از این راه طعنه زنند. باید به آن سنگدلانی که علم را بهانه کرده و به دیگران فخر میآ*فروشند، ثابت کنم که خاک پای من هم نخواهند شد. باید همه آن تیره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترین و افتاده ترین مرد روی زمین باشم.
              شهید دکتر مصطفی چمران
              اللهم صل علی محمد و ال محمد و عجل فرجهم
              ; C is not for children

              دیدگاه


                #8
                پاسخ : کار با فایل در میکرو؟

                سلام

                نمیشه

                من دارم توی کدویژن کار میکنم بعدش توی proteus میبرمش .

                توی پروتوس هم یه میکرو مگا 8 گذاشتم با یه ic m24c01.

                فایل cof رو میدم به میکرو! یه ال ای دی هم وصل کردم ب پورت c1.

                فک نکنم مدارش و درست بسته باشم :cry:

                اصن اگه بخوام رو ای2پی رام داخلی کار کنم چجوریه؟؟(چون فعلا ای سی رو ندارم)

                اینم سورسش
                AVR+IC.rar - 52 KB


                دیدگاه


                  #9
                  پاسخ : کار با فایل در میکرو؟

                  سلام به همه
                  صلوات
                  e2prom داخلی که باید خیلی راحت تر باشه
                  در حال حاظر دستورات کدویژن رو برای استفاده از e2prom داخلی میکرو رو یادم نمیاد اما یه سرچ فارسی بزنی مطمئن هستم به نتیجه میرسی اما یادت باشه که e2prom خود میکرو فقط 100هزاربار میشه روش نوشت و خوند.
                  ای خدا ، من باید از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از این راه طعنه زنند. باید به آن سنگدلانی که علم را بهانه کرده و به دیگران فخر میآ*فروشند، ثابت کنم که خاک پای من هم نخواهند شد. باید همه آن تیره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترین و افتاده ترین مرد روی زمین باشم.
                  شهید دکتر مصطفی چمران
                  اللهم صل علی محمد و ال محمد و عجل فرجهم
                  ; C is not for children

                  دیدگاه


                    #10
                    پاسخ : کار با فایل در میکرو؟

                    اقایون کسی جواب نمیده!!؟؟ :cry:

                    من روی EEPROM داخلی نوشتم:

                    حالا میخوام یه ادرس و که قبلا توش دیتا ریختم پاک کنم و دیتای جدید بریزم توی همون ادرس.چجوریه؟؟

                    ی سوال دیگه:

                    *ای 2پی رام داخلی و خارجی چندتا آدرس میگرن؟؟مثلا ادرس0و1و2و... تا چند؟

                    دیدگاه


                      #11
                      پاسخ : کار با فایل در میکرو؟

                      بهتره اول دیتا رو در یک آدرس مشخص از sram بریزی بعد بری تو مد اسمبلی و برنامه ات رو به زبان اسمبلی بنویسی و بعدش داده ها را از sram بخونی و در خونه مورد نظرت از e2prom بنویسی
                      ... و (بدانید) گرفتن تصمیمهاى محکم (براى رسیدن به اهداف بزرگ) با خوش گذرانى و سفرهآ‌هاى رنگین سازگار نیست و چه بسیار که خواب شبانه تصمیمهاى محکم روز را از میان برده و تاریکیآ‌ها، خاطره همتآ‌هاى بلند را از یادها محو کرده است. (نهجآ‌البلاغه، خطبه211)

                      امام علی (ع):کسی که به وقت یاری رهبرش در خواب باشد، با لگد دشمنش بیدار می شود (غررالحکم،ص 422)

                      دیدگاه


                        #12
                        پاسخ : کار با فایل در میکرو؟

                        من الان چکار کنم!؟؟

                        اسمبلی ک وارد نیستم.

                        من برناممو بر اساس همین کدا نوشتم :

                        کد:
                        unsigned charEEPROM_read(unsigned intuiAd
                        {
                        /* Wait for completion of previous write *
                        while(EECR & (1<<EEWE))
                        ;
                        /* Set up address register */
                        EEAR = uiAddress;
                        /* Start eeprom read by writing EERE */
                        EECR |= (1<<EERE);
                        /* Return data from data register */
                        return EEDR;
                        }
                        حالا میخوام رو آدرسا بگرده از 0تا 511 مثلا، اون شماره که از تابع read پیدا کرد! پاکش کنه.(الان اگه اشتباه نکنم ما از زو دیتا،آدرسشو پیدا میکنم و...) دنبال ی دستور مثل null تو زبونای دیگه میگردم!

                        دیدگاه


                          #13
                          پاسخ : کار با فایل در میکرو؟

                          سلام به همه
                          اول یک صلوات
                          *ای 2پی رام داخلی و خارجی چندتا آدرس میگرن؟؟مثلا ادرس0و1و2و... تا چند؟
                          بستگی داره به مقدار حافظه اون eeprom و نحوه بخش بندی
                          مثال:
                          اگر بخش بندی یک حافظه eeprom به byte باشه (مثل سری مگاها) و حافظه اون هم 512 byte باشه
                          (مثل مگا8 : 512Bytes EEPROM که داخل دیتاشیت نوشته) کافیه که شما مقدار حافظه رو تقسیم بر یک byte کنی که میشه:
                          512BYTE/BYTE=512
                          پس شما میتونی از 1 تا 512 یا 0 تا 511 تا آدرس داشته باشی. که هر آدرس تنها قابلیت ذخیره فقط یک BYTE رو داره و اگر هم بخوای حاصل رو به مقادیر دیگه مثل WORD ببینی اول WORD رو به BYTE تبدیل میکنی که میشه 2BYTE بعد کل حافظه رو تقسیم بر 2BYTE میکنی که میشه 256 WORD (دقت داشته باش که مقدار جدید به WORD یا 2BYTE بدست اومده)
                          اگر جاییش رو متوجه نشدی بگو تا بیشتر توضیح بدم.
                          حالا میخوام رو آدرسا بگرده از 0تا 511 مثلا، اون شماره که از تابع read پیدا کرد! پاکش کنه.(الان اگه اشتباه نکنم ما از زو دیتا،آدرسشو پیدا میکنم و...) دنبال ی دستور مثل null تو زبونای دیگه میگردم!
                          دوست عزیز حافظه EEPROM از لحاظ استفاده به عنوان یک حافظه فرقی با SRAM یا FLASH نداره (دقت شود گفتم از لحاظ حافظه نه ماندگاری یا سرعت برقراری ارتباط با CPU و خیلی چیزای دیگه )
                          حالا شما فکر کن می خوای با حافظه SRAM یا FLASH کار کنی ، خوب چیکار میکردی؟
                          اول برای آدرس های حافظه یک نام(همان متغیر) تعریف میکردی که میتونست محلی یا عمومی باشه ، ثابت یا متغیر باشه ، عددی یا آرایه و... باشه.
                          اگر راه حل رو متوجه نشدی بگو تا بیشتر توضیح بدم
                          رمضونه آدم حتی حال تایپ کردن هم نداره oo:
                          باز هم میگم اگر یه سرچ بزنی هم فارسی و هم انگلیسی باید آموزشش باشه.(توی گوگل سرچ کن)
                          ای خدا ، من باید از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از این راه طعنه زنند. باید به آن سنگدلانی که علم را بهانه کرده و به دیگران فخر میآ*فروشند، ثابت کنم که خاک پای من هم نخواهند شد. باید همه آن تیره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترین و افتاده ترین مرد روی زمین باشم.
                          شهید دکتر مصطفی چمران
                          اللهم صل علی محمد و ال محمد و عجل فرجهم
                          ; C is not for children

                          دیدگاه


                            #14
                            پاسخ : کار با فایل در میکرو؟

                            ممنون

                            یعنی یا 512 تا خونه 1 بایتی یا 256 تا خونه ی 2 بایتی،درسته؟

                            خوب الان من یه عدد مثلا 9 رقمی دارم.یه سایز گرفتم تو ی کامپایلر 4 بایت شد البته اینتجر فک کنم.پس تو یه بایت ذخیره نمیشه!؟چطوری بریزم تو ادرسا ک جاش بشه؟

                            دیدگاه


                              #15
                              پاسخ : کار با فایل در میکرو؟

                              سلام به همه
                              صلوات
                              خوب الان من یه عدد مثلا 9 رقمی دارم.یه سایز گرفتم تو ی کامپایلر 4 بایت شد البته اینتجر فک کنم.پس تو یه بایت ذخیره نمیشه!؟
                              نه
                              چطوری بریزم تو ادرسا ک جاش بشه؟
                              مثل زمانی که میخوای یه پارچ آب رو توی چند تا لیوان جا بدی ، کافیه توی هر لیوان به اندازه ظرفیتش آب بریزی.
                              زبان برنامه نویسیت c هست که خیلی قویه اگر توی کتابخونه های اصلی زبان c بگردی به احتمال زیاد تابع آماده ای برای اینکار پیدا میکنی اما اگر پیدا نکردی کافیه کار زیر رو انجام بدی:
                              عددت رو به واحد های یک بایتی تبدیل کنی که شیوه انجامش برمیگرده به نحوه برنامه نویسیه خودت.
                              یه عدد 9 تایی توی long int به درستی میشینه که 32 بیت یا همان 4 بایت میشه
                              توی اینترنت هم یه سرچ بزن به نام " تبدیل متغیر به کاراکتر " شاید اسمش عجیب باشه اما جواب هایی رو بهت حتما میده.
                              ای خدا ، من باید از نظر علم از همه برتر باشم، تا مبادا که دشمنان مرا از این راه طعنه زنند. باید به آن سنگدلانی که علم را بهانه کرده و به دیگران فخر میآ*فروشند، ثابت کنم که خاک پای من هم نخواهند شد. باید همه آن تیره دلان مغرور و متکبر را به زانو در آورم، آنگاه خود خاضع ترین و افتاده ترین مرد روی زمین باشم.
                              شهید دکتر مصطفی چمران
                              اللهم صل علی محمد و ال محمد و عجل فرجهم
                              ; C is not for children

                              دیدگاه

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