اطلاعیه

Collapse
No announcement yet.

ذخیره مقدار دو سنسور در حافظه AT24C512

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

    ذخیره مقدار دو سنسور در حافظه AT24C512

    سلام دوستان
    من میخوام اطلاعات دوتا سنسور رو بصورت دوره زمانی مشخص به شکل string تو حافظه EEPROM خارجی مدل 24c512 ذخیره کنم
    مثل این : "0.824,112.23"
    توابع خوندن و نوشتنش رو میدونم ولی نمیدونم چطوری ذخیرش کنم
    دوستانی که اینکارو کردن ممنون میشم راهنمایی کنن
    مرسی
    از سختی نترس! این سختی هاست که جایگاه و مقام انسان را بالا میبرد...

    #2
    پاسخ : ذخیره مقدار دو سنسور در حافظه AT24C512

    آقا خواهشا کمک کنید
    من هرکاری میکنم نمیشه!
    :angry:
    از سختی نترس! این سختی هاست که جایگاه و مقام انسان را بالا میبرد...

    دیدگاه


      #3
      پاسخ : ذخیره مقدار دو سنسور در حافظه AT24C512

      اگر مشکل شما فقط در ذخیره یک رشته در حافظه است که باید آنرا بسته به دستورات زبان مورد استفاده در حافظه ذخیره و فراخوانی کنید. مثلا در زبان C فقط کافیست بایت به بایت اطلاعات را خوانده و ذخیره کنید تا انتهای رشته. پس بهتر است زبان مورد استفاده را مشخص کنید.

      نکات بسیار مهم در تهیه پروگرامر که متاسفانه فراموش میشود!

      دیدگاه


        #4
        پاسخ : ذخیره مقدار دو سنسور در حافظه AT24C512

        ممنون از پاسخ
        من با زبان C و Codevision کار میکنم
        کلا نتونستم آی سی رو راه بندازم...
        اگه میشه نکات اصلی رو بگید
        بهتر نیست به جای اینکه مقادیر رو بصورت اعشاری ذخیره کنم مستقیما مقادیر ADC رو ذخیره کنم و موقع استفاده محاسبه کنم؟
        از سختی نترس! این سختی هاست که جایگاه و مقام انسان را بالا میبرد...

        دیدگاه


          #5
          پاسخ : ذخیره مقدار دو سنسور در حافظه AT24C512

          بلاخره راش انداختم
          ولی تا آدرس 255 مینویسه! بعد 255 دویاره از 0 شروع میکنه.... احتمالا هر پیج 255 بایته
          حالا اگه دوستان در مورد page writing کمک کنن ممنون میشم
          دیگه واقعا تو این موندم...
          از سختی نترس! این سختی هاست که جایگاه و مقام انسان را بالا میبرد...

          دیدگاه


            #6
            پاسخ : ذخیره مقدار دو سنسور در حافظه AT24C512

            مطالب خود دیتاشیت آی سی حافظه واضح و روشن هست. طول هر Page در این آی سی 128 بایت است نه 255!
            اگر از روش Byte Write استفاده میکنید، احتمالا در آدرس دهی مشکل دارید.
            و اگر از روش Page Write استفاده میکنید؛ احتمالا در بافر کردن داده ها و یا پیدا کردن آدرس دقیق برای هر داده مشکل دارید.
            میتوانید سورس و نقشه های خود را قرار دهید تا بررسی شود.

            نکات بسیار مهم در تهیه پروگرامر که متاسفانه فراموش میشود!

            دیدگاه


              #7
              پاسخ : ذخیره مقدار دو سنسور در حافظه AT24C512

              این برنامه اعداد 0 تا 255 رو ذخیره میکنه و بعد چاپ میکنه
              نمیدونم روش page write چطوریه ، اگه شما تجربه دارین خواهشا کمک کنید!
              من قراره داده هارو بصورت string تو eeprom ذخیره کنم و هر موقع کاربر خواست باید این استرینگ ها بصورت USART ارسال بشه
              هر چقدر در توانتون هست راهنمایی کنید که بدجور کارم گیره :mrgreen:

              [code=c]#define EEPROM_BUS_ADDRESS 0xA0

              #include <mega8.h>
              #include <i2c.h>
              #include <stdio.h>
              #include <delay.h>

              /* read a byte from the EEPROM */
              unsigned char eeprom_read(unsigned int address)
              {
              unsigned char data;
              i2c_start();
              i2c_write(EEPROM_BUS_ADDRESS | 0);
              /* send MSB of address */
              i2c_write(address >> 8);
              /* send LSB of address */
              i2c_write((unsigned char) address);
              i2c_start();
              i2c_write(EEPROM_BUS_ADDRESS | 1);
              data=i2c_read(0);
              i2c_stop();
              return data;
              }

              /* write a byte to the EEPROM */
              void eeprom_write(unsigned int address, unsigned char data)
              {
              i2c_start();
              i2c_write(EEPROM_BUS_ADDRESS | 0);
              /* send MSB of address */
              i2c_write(address >> 8);
              /* send LSB of address */
              i2c_write((unsigned char) address);
              i2c_write(data);
              i2c_stop();
              /* 10ms delay to complete the write operation */
              delay_ms(10);
              }

              i2c_init();

              void main(void)
              {

              for(i=0;i<255;i++)
              eeprom_write(i,i);

              for(i=0;i<255;i++)
              printf("Sample%d : %d\r\n",i,eeprom_read(i));

              while(1);

              }[/code]
              از سختی نترس! این سختی هاست که جایگاه و مقام انسان را بالا میبرد...

              دیدگاه


                #8
                پاسخ : ذخیره مقدار دو سنسور در حافظه AT24C512

                توابعی که شما استفاده میکنید از روش Page Write استفاده نمیکند. و بصورت تک بایتی اقدام به خواندن و نوشتن میکنند و ظاهرا مشکلی در توابع نیست.

                اما روند برنامه نویسی شما درست نیست؛ و دارای مشکلات زیر است :
                --- متغییر شمارنده i در برنامه تعریف نشده است.
                --- تابع i2c_init خارج از تابع main فراخوانی شده است.

                اگر برنامه شما همین باشد؛ باید عرض کنم که کمپایلر قطعا خطا داده و فایل هگزی تولید نمیشود که شما تست هم کنید! حالا چطور شما تست کردید، جای سئوال دارد؟
                اما بهتر است که یک پروگرامر با امکان خواندن و نوشتن در آی سی حافظه را داشته باشید و تا بهتر بتوانید مدار را تست کنید و یا حداقل آنرا در پرتیوس تست کنید.

                نکات بسیار مهم در تهیه پروگرامر که متاسفانه فراموش میشود!

                دیدگاه


                  #9
                  پاسخ : ذخیره مقدار دو سنسور در حافظه AT24C512

                  نه برنامه دقیقا این نیست من فقط بخشی رو که مربوط میشه جمع آوری کردم
                  خب میشه بگید چطوری باید page write کنم؟؟؟
                  از سختی نترس! این سختی هاست که جایگاه و مقام انسان را بالا میبرد...

                  دیدگاه


                    #10
                    پاسخ : ذخیره مقدار دو سنسور در حافظه AT24C512



                    کد:
                    PAGE WRITE: The 512K EEPROM is capable of 128-byte page writes.
                    A page write is initiated the same way as a byte write, but the microcontroller does not
                    send a stop condition after the first data word is clocked in. Instead, after the EEPROM
                    acknowledges receipt of the first data word, the microcontroller can transmit up to 127
                    more data words. The EEPROM will respond with a “0” after each data word received.
                    The microcontroller must terminate the page write sequence with a stop condition (see
                    Figure 9 on page 11).
                    The data word address lower 7 bits are internally incremented following the receipt of
                    each data word. The higher data word address bits are not incremented, retaining the
                    memory page row location. When the word address, internally generated, reaches the
                    page boundary, the following byte is placed at the beginning of the same page. If more
                    than 128 data words are transmitted to the EEPROM, the data word address will “roll
                    over” and previous data will be overwritten. The address roll over during write is from the
                    last byte of the current page to the first byte of the same page.

                    نکات بسیار مهم در تهیه پروگرامر که متاسفانه فراموش میشود!

                    دیدگاه


                      #11
                      پاسخ : ذخیره مقدار دو سنسور در حافظه AT24C512

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

                      دیدگاه


                        #12
                        پاسخ : ذخیره مقدار دو سنسور در حافظه AT24C512

                        یعنی ینفر مرررد پیدا نمیشه نحوه ذخیره سازی یه STRING تو EEPROM رو بهم یاد بده؟!!! :biggrin:
                        از سختی نترس! این سختی هاست که جایگاه و مقام انسان را بالا میبرد...

                        دیدگاه


                          #13
                          پاسخ : ذخیره مقدار دو سنسور در حافظه AT24C512

                          وقت بخیر

                          دوست عزیز اگه تونسته باشی یک بایت بنویسی و بخونی !! تکرارش که بکنی میشه چند بایت نوشت و خواند ! فقط نکته اینجاست که برای خواندن میشه از اول تا آخر حافظه رو پشت سر هم خواند ولی برای توشتن به اندازه page یه حافظه میشه نوشت و برای [page بعدی باید 10 میلی ثانیه مکث کرد .

                          دیدگاه


                            #14
                            پاسخ : ذخیره مقدار دو سنسور در حافظه AT24C512

                            ممنون از پاسخ
                            بله من میتونم بایتی بنویسم
                            یعنی با این توابع باید بعد 128 دوباره تاخیر ایجاد کنم تا بره page بعدی؟؟؟

                            [code=c]/* read a byte from the EEPROM */
                            unsigned char eeprom_read_byte(unsigned int address)
                            {
                            unsigned char data;
                            i2c_start();
                            i2c_write(EEPROM_BUS_ADDRESS | 0);
                            /* send MSB of address */
                            i2c_write(address >> 8);
                            /* send LSB of address */
                            i2c_write((unsigned char) address);
                            i2c_start();
                            i2c_write(EEPROM_BUS_ADDRESS | 1);
                            data=i2c_read(0);
                            i2c_stop();
                            return data;
                            }

                            /* write a byte to the EEPROM */
                            void eeprom_write_byte(unsigned int address, unsigned char data)
                            {
                            i2c_start();
                            i2c_write(EEPROM_BUS_ADDRESS | 0);
                            /* send MSB of address */
                            i2c_write(address >> 8);
                            /* send LSB of address */
                            i2c_write((unsigned char) address);
                            i2c_write(data);
                            i2c_stop();
                            /* 10ms delay to complete the write operation */
                            delay_ms(10);
                            }[/code]
                            از سختی نترس! این سختی هاست که جایگاه و مقام انسان را بالا میبرد...

                            دیدگاه


                              #15
                              پاسخ : ذخیره مقدار دو سنسور در حافظه AT24C512

                              [code=C]

                              str = "0.824,112.23";

                              while(str[i])
                              {
                              c = str[i++];
                              eeprom_write (address, c);
                              }


                              //************************************************** ************************
                              // write a byte to the EEPROM
                              //************************************************** ************************
                              void eeprom_write (unsigned char address, unsigned char data)
                              {
                              /*
                              //----------------------------
                              // I2C Address < 255
                              //----------------------------
                              i2c_start();
                              i2c_write (EEPROM_BUS_ADDRESS);
                              i2c_write (address);
                              i2c_write (data);
                              i2c_stop();
                              */

                              //----------------------------
                              // I2C Address >>>>>> 255
                              //----------------------------
                              i2c_start();
                              i2c_write(EEPROM_BUS_ADDRESS);
                              i2c_write((address & 0x1fff)>>8);
                              i2c_write(address & 0x1fff);
                              i2c_write(data);
                              i2c_stop();

                              /* 10ms delay to complete the write operation */
                              delay_ms(10);
                              }

                              [/code]

                              دیدگاه

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