ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

نمایش نتایج: از 1 به 8 از 8
  1. #1
    2011/12/22
    کرمان
    2,954
    134

    خواندن و نوشتن در EEPROM

    سلام به همه دوستان
    من یه برنامه نوشتن به زبون C و با کامپایلر C18 توی MPLABX با میکروی PIC18F67K22 هم کار میکنم
    که توی آدرسی از EEPROM بنویسه و بخونه توی پروتئوس تست کردم مشکلی نداره روی میکرو هم ریختم اگر اول بنویسم و بعد بخونم کار میکنه
    ولی وقتی که تغذیه مدارو قطع میکنم و فقط بخونم 0xFF میخونه
    یعنی Data با قطع برق پاک میشه
    برنامه رو میذارم دوستان لطف کنن ببینن مشکل کار چییه؟

    کد:
    /* 
     * File:  EEPROM.c
     * Author: Hoax B0Y
     *
     * Created on January 31, 2013, 10:43 AM
     */
    #include <p18f67k22.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include "EEPROM_RW.h"
    
    #pragma config RETEN = OFF
    #pragma config INTOSCSEL = HIGH
    #pragma config SOSCSEL = DIG
    #pragma config FOSC = INTIO2
    #pragma config PLLCFG = OFF
    #pragma config FCMEN = OFF
    #pragma config IESO = OFF
    #pragma config BORPWR = HIGH
    #pragma config RTCOSC = INTOSCREF
    #pragma config DEBUG = ON
    #pragma config PWRTEN = OFF
    #pragma config BOREN = OFF
    #pragma config WDTEN = OFF
    #pragma config XINST = OFF
    
    unsigned char c;
    void main()
    {
      OSCCON = 0x72;
      OSCTUNE |= 0x20;
      
      Nop();
      //EEPROM_Write(0,0x10,0x6D); //Write 0x34 to EEPROM address 0x12
      Nop();
      Nop();
      c = EEPROM_Read(0,0x10); // Read EEPROM address 0x12 in to variable C
    
      while (1)
      {
      }
    }

    کد:
    /* 
     * File:  EEPROM_RW.h
     * Author: Hoax B0Y
     *
     * Created on January 31, 2013, 10:48 AM
     */
    
    void EEPROM_Write(unsigned char addh,unsigned char addl, unsigned char W_Data);
    unsigned char EEPROM_Read(unsigned char addh,unsigned char addl);
    //This function Writes data to given address in internal EEPROM of PIC MCU
    
    void EEPROM_Write(unsigned char addh,unsigned char addl, unsigned char W_Data)
    {
      unsigned char INTCON_SAVE;
    
      EEADRH = addh;
      EEADR = addl;
      EEDATA = W_Data;
    
      EECON1bits.EEPGD= 0; // 0 = Access data EEPROM memory
      EECON1bits.CFGS = 0; // 0 = Access Flash program or DATA EEPROM memory
      EECON1bits.WREN = 1; // enable writes to internal EEPROM
      PIR6bits.EEIF=0; //Clear EEPROM write complete flag.
    
      INTCON_SAVE=INTCON; // Save INTCON register contants
      INTCON=0;       // Disable interrupts, Next two lines SHOULD run without interrupts
    
      EECON2=0x55;    // Required sequence for write to internal EEPROM
      EECON2=0xaa;    // Required sequence for write to internal EEPROM
    
      EECON1bits.WR=1;  // begin write to internal EEPROM
      INTCON=INTCON_SAVE; //Now we can safely enable interrupts if previously used
    
      Nop();
    
      while (~PIR6bits.EEIF);//Wait till write operation complete
    
    
      EECON1bits.WREN=0; // Disable writes to EEPROM on write complete (EEIF flag on set PIR2 )
      PIR6bits.EEIF=0; //Clear EEPROM write complete flag. (must be cleared in software. So we do it here)
    
    }
    // This function reads data from address given in internal EEPROM of PIC
    unsigned char EEPROM_Read(unsigned char addh,unsigned char addl)
    {
      EEADRH = addh;
      EEADR = addl;
      EECON1bits.EEPGD= 0; // 0 = Access data EEPROM memory
      EECON1bits.CFGS = 0; // 0 = Access Flash program or DATA EEPROM memory
      EECON1bits.RD  = 1; // EEPROM Read
      Nop();
      Nop();
      return EEDATA;    // return data
    }

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    کنترلر CNC شش محوره براي پرينتر 3D و Pick n Place
    شبيه ساز تک تيرانداز و سيبل ديجيتال با پردازش تصوير
    فروش اسيلوسکوپ GWinstek GOS-630FC
  2. #2
    2009/02/18
    تهران
    270
    1

    پاسخ : خواندن و نوشتن در EEPROM

    سلام


    من با eeprom داخلی در کامپایلر C18 کار نکردم اما شما مطمئن هستید که بعد از نوشتن در این حافظه دوسیکل صبر کردن کافیه ؟!.. ( NOP )
    نا اميدي يه دروغ بزرگه که آدما به خودشون ميگن
    تلاش يه حقيقت بزرگه که با صبر به ثمر ميرسه
  3. #3
    2011/12/22
    کرمان
    2,954
    134

    پاسخ : خواندن و نوشتن در EEPROM

    نقل قول نوشته اصلی توسط ramezani.t
    سلام


    من با eeprom داخلی در کامپایلر C18 کار نکردم اما شما مطمئن هستید که بعد از نوشتن در این حافظه دوسیکل صبر کردن کافیه ؟!.. ( NOP )
    سلام
    مرسی که باز شما زحمت کشیدیو جواب دادی
    ببین دوست عزیز من اینجا while که نوشتم منتظر میمونم تا کارش تموم شه و توی این فاصله هیچکار نمیکنم

    کد:
      EECON1bits.WR=1;  // begin write to internal EEPROM
      INTCON=INTCON_SAVE; //Now we can safely enable interrupts if previously used
    
      Nop();
    
      while (~PIR6bits.EEIF);//Wait till write operation complete
    
    
      EECON1bits.WREN=0; // Disable writes to EEPROM on write complete (EEIF flag on set PIR2 )

    این تا کارش تموم نشه و نوشتن کامل نشه اصلا اجازه ادامه برنامه رو نمیده
    و حتی وقتی برنامه رو خط به خط اجرا میکنم کلی زمان بین خطوط تلف میشه و بنظرم نباید بیش از اینا طول بکشه

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    کنترلر CNC شش محوره براي پرينتر 3D و Pick n Place
    شبيه ساز تک تيرانداز و سيبل ديجيتال با پردازش تصوير
    فروش اسيلوسکوپ GWinstek GOS-630FC
  4. #4
    2008/10/29
    2,098
    219

    پاسخ : خواندن و نوشتن در EEPROM

    سلام
    مقدار 255 یا همان FF را تنها در موقعی دریافت خواهید کرد که داده ای در EEPROM نوشته نشده باشد یا به هر دلیلی این مقدار از بین رفته باشد.
    while (PIR2bits.EEIF==0)
    {
    Nop();
    }

    این خط را جایگزین کنید چون در هنگام نوشتن برای پی بردن به خطا بعضی از متغییرها تغییر وضعیت نمی دهند اما مقداری خاص را دریافت می کنند.مهمترین فاکتوری که باید مد نظر داشت trace کردن خطاها در حین نوشتن هست در حالتی که داده ای بر روی EEPROM می خواین بنویسید طبق دستورات خودتان باید ابتدا متغییرهای زیر را صفر کنید
    EECON1bits.EEPGD= 0; // 0 = Access data EEPROM memory
    EECON1bits.CFGS = 0; // 0 = Access Flash program or DATA EEPROM memory
    اما وقتی این متغییرهای مقداری برابر با یک داشته باشند از یک شدن بیت RD جلوگیری می کنند و این بدان معناست که اجازه خواندن را نمی دهند و بابت همین هست که شما در ابتدا مجبور هستین این ریجسترها را صفر کنید.
    پیشنهاد می کنم بعد از نوشتن داده و اجرا این تابع مقدارهای مختلف ریجستر EECON1 را بررسی کنید از ببینید در هنگام نوشتن خطا دارید یا خیر؟به عنوان مثال با بررسی بیت WRERR و ریجسترها بالا.
    هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.
  5. #5
    2011/12/22
    کرمان
    2,954
    134

    پاسخ : خواندن و نوشتن در EEPROM

    نقل قول نوشته اصلی توسط baby_1
    سلام
    مقدار 255 یا همان FF را تنها در موقعی دریافت خواهید کرد که داده ای در EEPROM نوشته نشده باشد یا به هر دلیلی این مقدار از بین رفته باشد.
    while (PIR2bits.EEIF==0)
    {
    Nop();
    }

    این خط را جایگزین کنید چون در هنگام نوشتن برای پی بردن به خطا بعضی از متغییرها تغییر وضعیت نمی دهند اما مقداری خاص را دریافت می کنند.مهمترین فاکتوری که باید مد نظر داشت trace کردن خطاها در حین نوشتن هست در حالتی که داده ای بر روی EEPROM می خواین بنویسید طبق دستورات خودتان باید ابتدا متغییرهای زیر را صفر کنید
    EECON1bits.EEPGD= 0; // 0 = Access data EEPROM memory
    EECON1bits.CFGS = 0; // 0 = Access Flash program or DATA EEPROM memory
    اما وقتی این متغییرهای مقداری برابر با یک داشته باشند از یک شدن بیت RD جلوگیری می کنند و این بدان معناست که اجازه خواندن را نمی دهند و بابت همین هست که شما در ابتدا مجبور هستین این ریجسترها را صفر کنید.
    پیشنهاد می کنم بعد از نوشتن داده و اجرا این تابع مقدارهای مختلف ریجستر EECON1 را بررسی کنید از ببینید در هنگام نوشتن خطا دارید یا خیر؟به عنوان مثال با بررسی بیت WRERR و ریجسترها بالا.
    آقا این کار مشکلو حل نکرد
    ببین من میخوام مثلا چنتا متغییر که دارم توی EEPROM باشن و اگر تغییر کردن Update بشن و هر وقت میکرو خاموش شد با آخرین وضعیت این متغییر ها بیاد بالا
    مثل AVR نمیشه متغییری رو از نوع EEPROM تعریف کرد و خودش این کارو بکنه؟!
    نمیخوام اصلا درگیر این چیزاش بشم
    میخوام بنویسم
    unsigned char eeprom a = 0;
    اینجوری نمیشه؟!

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    کنترلر CNC شش محوره براي پرينتر 3D و Pick n Place
    شبيه ساز تک تيرانداز و سيبل ديجيتال با پردازش تصوير
    فروش اسيلوسکوپ GWinstek GOS-630FC
  6. #6
    2008/10/29
    2,098
    219

    پاسخ : خواندن و نوشتن در EEPROM

    سلام
    تعریفهای خاص برای dataype های مختلف بسته به نوع کامپایلر بوده و نهایتا شاهد هستیم که در کامپایلری دستورات چنینی وجود دارد اما کامپایلرهای دیگر خیر ، به عنوان مثال در خانواده avr در برنامه Bascom چنین دستوراتی وجود دارد اما در کامپایلر C18 میکروچیپ باید از توابع دیگر که چه توسط خود کاربر یا دیگر کاربران نوشته شده است استفاده کرد.

    یک سوال : هنگام نوشتن اینتراپتها فعال هستن ؟اگر بله ، در ابتدای تابع اینتراپتها را غیرفعال و سپس سعی در نوشتن داده بر روی چیپ کنید
    هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.
  7. #7
    2011/12/22
    کرمان
    2,954
    134

    پاسخ : خواندن و نوشتن در EEPROM

    نقل قول نوشته اصلی توسط baby_1
    سلام
    تعریفهای خاص برای dataype های مختلف بسته به نوع کامپایلر بوده و نهایتا شاهد هستیم که در کامپایلری دستورات چنینی وجود دارد اما کامپایلرهای دیگر خیر ، به عنوان مثال در خانواده avr در برنامه Bascom چنین دستوراتی وجود دارد اما در کامپایلر C18 میکروچیپ باید از توابع دیگر که چه توسط خود کاربر یا دیگر کاربران نوشته شده است استفاده کرد.

    یک سوال : هنگام نوشتن اینتراپتها فعال هستن ؟اگر بله ، در ابتدای تابع اینتراپتها را غیرفعال و سپس سعی در نوشتن داده بر روی چیپ کنید
    بله فعال هست ولی همانطور که توی برنامه نوشتم

    INTCON_SAVE=INTCON; // Save INTCON register contants
    INTCON=0; // Disable interrupts, Next two lines SHOULD run without interrupts

    همه INTCON رو 0 میکنم که هیچ اینتراپتی فعال نباشه و GIE هم 0 میشه کلا خلاص :biggrin:

    INTCON=INTCON_SAVE; //Now we can safely enable interrupts if previously used
    اینجا هم برشون میگردونم به حالت اولیه که بودن
    همه چی به نطر درسته حتی اگه میکرو خاموش روشن نشه دیتا رو هزار بار هم از EEPROM بخونی درسته
    ولی میکرو خاموش روشن میشه 0xFF میخونه همش :sad:

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت


    کنترلر CNC شش محوره براي پرينتر 3D و Pick n Place
    شبيه ساز تک تيرانداز و سيبل ديجيتال با پردازش تصوير
    فروش اسيلوسکوپ GWinstek GOS-630FC
  8. #8
    2008/10/29
    2,098
    219

    پاسخ : خواندن و نوشتن در EEPROM

    سلام
    آقای بسطامی من قبلا با EEPROM ها با آدرسدهی های یک بایتی(مثل pic18f452 , ...) که کار کردم به خوبی و بدون مشکلی جواب می دادن و چون دیدم مقدار EEPROm تراشه شما آدرس دهیش دو بایتی هست تراشه ای رو انتخاب کردم که همچین فضای زیادی برای EEPROm داشته باشه که با تست برنامه و کلی ریست و خاموش کردن مشکلی رو ندیدم یعنی توابعتون بدون مشکل کار می کند ، حالا دقیقا باز شما مشکل رو ریشه یابی کنید ان شالله که ما هم از شما یاد بگیریم

    البته در توضیحات قبلی یه اشتباه عددی کرده بودم که همین جا بگم خط
    کد:
    while (PIR4bits.EEIF==1);//Wait till write operation complete
    رو باید عدد یک می دادین که من گفتم صفر کنید چون اصلا حواسم نبود قبلش صفر شده بود و باید یک می شد (البته باز این هم ذکر کنم که در تراشه من EEIF در ریجستر PIR4 هست که بر خلاف تراشه شما که در PIR6 قرار دارد )
    هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.
نمایش نتایج: از 1 به 8 از 8

موضوعات مشابه

  1. کمک در مورد نوشتن و خواندن از eeprom
    توسط sanei1370 در انجمن میکروکنترلرهای AVR
    پاسخ: 1
    آخرين نوشته: 2016/04/08, 13:41
  2. خواندن و نوشتن در eeprom
    توسط majedhoseini در انجمن میکروکنترلرهای AVR
    پاسخ: 14
    آخرين نوشته: 2014/12/28, 22:02
  3. نحوه نوشتن و خواندن در eeprom داخلي
    توسط hanamohsen در انجمن میکروکنترلرهای AVR
    پاسخ: 4
    آخرين نوشته: 2013/07/16, 17:56
  4. نوشتن و خواندن از eeprom داخلي
    توسط reza381 در انجمن میکروکنترلرهای PIC
    پاسخ: 3
    آخرين نوشته: 2013/05/01, 22:47
  5. مشکل با خواندن و نوشتن روی eeprom داخلی
    توسط electronet در انجمن میکروکنترلرهای AVR
    پاسخ: 5
    آخرين نوشته: 2010/12/02, 14:33

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •