اطلاعیه

Collapse
No announcement yet.

EEPROM داخلی NVM ) XMEGA )

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

    #31
    پاسخ : EEPROM داخلی NVM ) XMEGA )

    نوشته اصلی توسط majid68
    با سلام
    بنده در خصوص استفاده ار eeprom داخلی xmega اخیرا موردی را مشاهده کردم که خواستم هم در اینجا مطرح کنم و هم اینکه از راهنمایی دوستان مخصوصا جناب استاد کی نژاد بهره مند شوم
    اخیرا یک سخت افزار بر مبنای xmega طراحی کردم و داخل دستگاهی گذاشتم و این دستگاه به یکی از استان ها جهت کاربری ارسال شد . عملکرد اولیه دستگاه بدین صورت است که پس از روشن شدن یک عدد را از داخل یک آدرس مشخص از eeprom را خوانده و در صورتی که با عدد مشخصی برابر نباشد پیغام خطایی را بر روی صفحه نمایشگر ظاهر می کند و منتظر وارد کردن کد و نوشتن آن داخل eeprom توسط دستورات atomic write می ماند . متاسفانه پس از مدتی استفاده از دستگاه , پیغامی بر روی صفحه نمایش ظاهر شد که بیانگر حالتی می باشد که قبلا داخل eeprom عدد صفر نوشته شده است . با توجه به اینکه در برنامه داخلی میکروکنترلر گزینه ای تحت عنوان نوشتن عدد صفر داخل eeprom وجود ندارد می خواستم ببینم علت این مشکل چیه ؟ و راه حل چیست؟
    لازم به ذکر است که در فیوز بیت ها مد brown out فعال شده و بر روی مقدار 2.4 ولت تنظیم شده است
    با تشکر از راهنمایی دوستان
    از چه شماره ای از XMEGA و چه ابزار برنامه نویسی استفاده می کنید. این نوع اشکالات از جمله مواردی هستند که تا کلیه جوانب مسئله شامل جزئیات نمونه کد و مدار تغذیه و غیره مشخص نباشد، پی بردن به دلیل وقوع مشکل و رفع کردن آن به سختی قابل حصول است.
    اوژن: به معنای افکننده و شکست دهنده است
    دانایی، توانایی است-Knowledge is POWER
    برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
    وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
    قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
    اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
    ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

    دیدگاه


      #32
      پاسخ : EEPROM داخلی NVM ) XMEGA )

      با تشکر از جناب استاد کی نژاد
      خدمتتون عرض کنم که آی سی مورد سوال atxmega64a3 و برنامه نوشته شده در محیط کامپایلر IAR نوشته شده و واحد تغذیه هم دقیقا مشابه آنچه که شما در یکی از فیلمهای اموزشی AVR توصیه نمودید طراحی شده است. برای نوشتن داخل eeprom از دستور زیر استفاده شده است:

      Reg1_unsigned_char = 100;
      EEPROM_LoadByte(0,Reg1_unsigned_char);
      EEPROM_AtomicWritePage(0);

      و برای خواندن از eeprom از دستور زیر استفاده شده است:

      Reg2_unsigned_char = EEPROM_ReadByte(0,0);

      مقدار رجیستر Reg2 بر روی سه رقم سون سگمنت نمایش داده می شود. با توجه به اینکه در متن برنامه به هیچ وجه عدد صفر داخل eeprom نوشته نمی شود ولی پس از مدتی بر روی سون سگمنتها عدد 000 نمایش داده شده است که بیانگر خواندن عدد صفر از eeprom و طبیعتا به نوعی صفر بودن حافظه eeprom است.
      با تشکر از راهنماییتون
      مشخصات من در لینک زیر
      http://www.eca.ir/forum2/index.php?topic=1721.msg698645#msg698645

      www.********

      دیدگاه


        #33
        پاسخ : EEPROM داخلی NVM ) XMEGA )

        نوشته اصلی توسط majid68
        آی سی مورد سوال atxmega64a3
        در بعضی از شماره های سری قدیمی A (که از طرف Atmel از رده خارج اعلام شده) و از جمله شماره بالا، برای نوشتن در eeprom باید روال خاصی انجام شود که توضیح آن مفصل است. در غیر اینصورت عملیات نوشتن به درستی انجام نمی شود. برای رفع این مشکل از خانواده جدید ATXMEGA64A3U استفاده کنید.
        اوژن: به معنای افکننده و شکست دهنده است
        دانایی، توانایی است-Knowledge is POWER
        برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
        وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
        قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
        اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
        ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

        دیدگاه


          #34
          پاسخ : EEPROM داخلی NVM ) XMEGA )

          با تشکر از راهنمایی خوبتون مثل همیشه
          حتما به راهنمایی شما توجه خواهم کرد و از شماره ای که شما ذکر فرمودید استفاده خواهم کرد.
          آیا در صورت استفاده از شماره آی سی ای که شما فرمودید دیگر نیازی به استفاده از آن دستورات atomic جهت نوشتن و خواندن eeprom نیست ؟ بعبارت دیگر آیا فقط با تعریف یک متغیر از نوع eeprom امکان برقراری ارتباط با واحد eeprom وجود دارد؟
          مشخصات من در لینک زیر
          http://www.eca.ir/forum2/index.php?topic=1721.msg698645#msg698645

          www.********

          دیدگاه


            #35
            پاسخ : EEPROM داخلی NVM ) XMEGA )

            در صورت استفاده از شماره های جدید می توانید متغیر را در IAR بصورت eeprom__ تعریف کنید.
            اوژن: به معنای افکننده و شکست دهنده است
            دانایی، توانایی است-Knowledge is POWER
            برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
            وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
            قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
            اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
            ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

            دیدگاه


              #36
              پاسخ : EEPROM داخلی NVM ) XMEGA )

              سلام به همه
              من میخام توی eeprom داخلی میکرو xmega32e5 یه عدد رو ذخیره کنم و بعد بخونمش.
              لطفا کسی هست که بتونه کمکم کنه؟
              از atmel studio 6.2 هم استفاده می کنم.
              از همه ممنونم
              : :angry:
              من کلی فایل های شرکت atmel رو خوندم ولی چون تا حالا با xmega کار نکردم نتونستم eeprom رو initial کنم و چیزی روش بنویسم یا بخونم.
              لطفا کمکم کنید.

              دیدگاه


                #37
                پاسخ : EEPROM داخلی NVM ) XMEGA )

                نمونه کدی که در این پست قرار دارد رو تست کنید
                گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

                دیدگاه


                  #38
                  پاسخ : EEPROM داخلی NVM ) XMEGA )

                  سلام
                  برای خانواده xmega سری E، کامپایلر atmel studio دستور "eeprom_flushBuffer" یا "eeprom_LoadBuffer" را ندارد.
                  در ضمن من هنوز نمیدونم دقیقا برای ادرس دهی به یک بایت از eeprom باید چطور آدرس دهی کنم.مثلا مدل emega32e5 دارای 1k Byte حافظه eeprom است که شامل 32page می شود و eeprom از آدرس 0x1000 شروع می شود. حالا مثلا اگر بخواهیم عدد هگز 0x25 را در eeprom بنویسم باید چطور آدرس دهی کنیم؟
                  ممنون.

                  دیدگاه


                    #39
                    پاسخ : EEPROM داخلی NVM ) XMEGA )

                    دو روش آدرس دهی وجود دارد. Memory map و IO map که به صورت پیش فرض IO map فعال هست. اگر از کتابخانه معرفی شده استفاده کنید برای آدرس دهی در حالت IO فقط به شماره page و شماره byte نیاز دارید.( هر Page برابر 32 بایت هست)
                    [code=c]// Write 1 byte
                    EEPROM_WriteByte(PageNumber, ByteNumber, DataByte);
                    // Read 1 byte
                    uint8_t Data = EEPROM_ReadByte(PageNumber, ByteNumber);

                    // Write 1 Page
                    uint8_t Buffer[32];
                    EEPROM_LoadPage(Buffer);
                    EEPROM_AtomicWritePage(PageNamber);[/code]
                    گاهی افرادی به موفقیت های بزرگ می رسند، تنها به این دلیل ساده که نمی دانند کاری که به آن دست زده اند بسیار دشوار، بلکه غیر ممکن است.

                    دیدگاه


                      #40
                      پاسخ : EEPROM داخلی NVM ) XMEGA )

                      با سلام خدمت استاد کی نژاد
                      من از atxmega256a3u استفاده می کنم.
                      متاسفانه تا کنون موفق نشدم به صورت اتمیک یک صفحه را درون eeprom بنویسم.
                      تقریبا تمام این کد ها را هم امتحان کردم.
                      لطفا در صورت امکان کد مناسبی را به این منظور در اینجا قرار دهید.
                      با سپاس
                      در زیر این نقاب چیزی بیشتر از گوشت هست. در زیر این نقاب یک ایده هست و ایده ها ضدگلوله هستند.

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

                      دیدگاه


                        #41
                        پاسخ : EEPROM داخلی NVM ) XMEGA )

                        من با کد زیر روی EEprom مینویسم مشکلی که هست اعداد رو محدودیت دارم تا255 (unsigned char) برای ذخیره کردن عددی مثل65000 چطوری باید عمل کنم.

                            Reg1_unsigned_char=256;

                        EEPROM_LoadByte(0,Reg1_unsigned_char);
                        EEPROM_AtomicWritePage(0);



                        Reg2_unsigned_char = EEPROM_ReadByte(0,0);

                        LCDClr();
                        _delay_ms(100);
                        LCDGotoXY(0,0);
                        sprintf(buffer, "data:%d", Reg2_unsigned_char);
                        LCDStringRam(buffer);

                        _delay_ms(2000);
                        A-Hosseini

                        دیدگاه


                          #42
                          پاسخ : EEPROM داخلی NVM ) XMEGA )

                          نوشته اصلی توسط electronet نمایش پست ها
                          برای ذخیره کردن عددی مثل65000 چطوری باید عمل کنم.
                          بخش های Low و High را به دو بایت تفکیک کنید و بصورت جدا ذخیره کنید.
                          اوژن: به معنای افکننده و شکست دهنده است
                          دانایی، توانایی است-Knowledge is POWER
                          برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                          وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                          قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                          اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                          ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                          دیدگاه


                            #43
                            پاسخ : EEPROM داخلی NVM ) XMEGA )

                            نوشته اصلی توسط طراح نمایش پست ها
                            بخش های Low و High را به دو بایت تفکیک کنید و بصورت جدا ذخیره کنید.
                            ممنون که جواب دادین .
                            تا به حال این کار رو انجام ندادم ممکنه نمونه کد برام بزارید. ممنون
                            A-Hosseini

                            دیدگاه


                              #44
                              پاسخ : EEPROM داخلی NVM ) XMEGA )

                              volatile unsigned int second_number,first_Number = 32767; 
                              volatile unsigned char high,low,ee_high,ee_low;

                              high = ((first_Number >> 8) & 0xff);
                              low = first_Number & 0xff;

                              EEPROM_LoadByte(0,high);
                              EEPROM_AtomicWritePage(0);
                              EEPROM_LoadByte(0,low);
                              EEPROM_AtomicWritePage(1);

                              ee_high = EEPROM_ReadByte(0,0);
                              ee_low = EEPROM_ReadByte(1,0);

                              second_number = (((ee_high & 0xff) << 8) | (ee_low & 0xff));


                              LCDClr();
                              _delay_ms(100);
                              LCDGotoXY(0,0);
                              sprintf(buffer, "data:%d", second_number);
                              LCDStringRam(buffer);
                              _delay_ms(2000);


                              با روش بالا تونستم عدد رو تقسیم کنم و روی دو تا پیج بنویسم . مشکل اینجاست که تا عدد 32767 بیشتر نمیتونم بنویسم

                              دلیل: ادغام دو پست برای جلوگیری از اسپم

                              مشکل کد بالا برطرف شد یه ایراد کوچیک تو خوندن sprintf بود از %d به %u تفییر دادم درست شد
                              A-Hosseini

                              دیدگاه


                                #45
                                پاسخ : EEPROM داخلی NVM ) XMEGA )

                                عرض سلام و ادب خدمت دوستان و استاد محترم جناب مهندس کی نژاد.
                                استاد عزیز، من اکثر آموزش های شما رو دنبال میکنم و از اینهمه دقت و توجه شما به بحث آموزش در این زمینه کمال قدردانی رو دارم. فقط در مورد نحوه نوشتن و خواندن eeprom متاسفانه روش اصولی و کاملی که همانند دیگر بخشها که در فیلمهای آموزشی زحمتش رو کشیدید، پیدا نکردم. manual و app note خود اتمل رو هم مطالعه کردم که باز هم کمکی به من نکرد. مطالب این پست هم متاسفانه برای بنده که فعلا کار نکردم با این حافظه گنگ بود یکم. اگر امکانش هست بصورت مختصر و ساده یک توضیح در رابطه با نحوه نوشتن و خواندن بر روی این حافظه لطف کنید قرار بدید در اینجا و یا اگر در فیلمهای آموزشی اشاره ای به این بحث شده ، ممنون میشم بفرمایید در کدامیک از فیلمها است. با سپاس فرآوان از تمامی زحمات چندین سالتون.

                                دیدگاه

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