اطلاعیه

Collapse
No announcement yet.

مشکل با AT24CXXX و TWI

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

    مشکل با AT24CXXX و TWI

    سلام خدمت دوستان پس از مدت ها!!!
    من برای ذخیره یه سری اطلاعات نیاز به EEPROM خارجی داشتم و AT24C128 رو انتخاب کردم که با TWI کار میکنه،
    از تابع استاندارد خود کدویژن استفاده کردم
    twi_master_trans(EEPROM_TWI_BUS_ADDRESS,Addr_Buf,2 ,Data,Data_len);
    حالا مشکلی که هست اینه که گاهی وقتا موقع خوندن اطلاعات بعضی از بایت ها رو FF میخونه، شاید از هر 10 باری که اطلاعات رو می خونم یک بار این مشکل پیش میاد.
    ولتاژ کاری میکرو و EEPROM هر دو 3.3 ولت و
    twi_master_init(100) و
    مقاومت های Pullup برابر 10K هست!
    جایی رو اشتباه کردم؟
    همچین مشکلی داشتین تا حالا؟
    چه کنم؟ :question: :question: :question:
    با تشکر!
    دوش دیوانه شدم عشق مرا دید و بگفت آمدم نعره مزن جامه مدر هیچ مگو
    گفتم ای عشق من از چیز دگر می​ترسم گفت آن چیز دگر نیست دگر هیچ مگو
    من به گوش تو سخن​های نهان خواهم گفت سر بجنبان که بلی جز که به سر هیچ مگو
    قمری جان صفتی در ره دل پیدا شد در ره دل چه لطیف است سفر هیچ مگو
    مولانا

    #2
    پاسخ : مشکل با AT24CXXX و TWI

    سلام دوباره...
    یادم رفت بگم، فرکانس های بالاتر و پایینتر TWI رو هم امتحان کردم ،
    مقدار مقاومت های Pullup رو هم کم کردم ولی فایده ای نداشت!

    دوش دیوانه شدم عشق مرا دید و بگفت آمدم نعره مزن جامه مدر هیچ مگو
    گفتم ای عشق من از چیز دگر می​ترسم گفت آن چیز دگر نیست دگر هیچ مگو
    من به گوش تو سخن​های نهان خواهم گفت سر بجنبان که بلی جز که به سر هیچ مگو
    قمری جان صفتی در ره دل پیدا شد در ره دل چه لطیف است سفر هیچ مگو
    مولانا

    دیدگاه


      #3
      پاسخ : مشکل با AT24CXXX و TWI

      دادشم این یه نمونه برنامس واسه کار با epprom ها شاید به کارت بیاد
      کد:
      #include<mega16.h>
      #define xtal 1000000
      
      /* the I2C bus is connected to PORTB */
      /* the SDA signal is bit 3 */
      /* the SCL signal is bit 4 */
      
      #asm
      
        .equ __i2c_port=0x18
        .equ __sda_bit=3
        .equ __scl_bit=4
      
      #endasm
      
      /* now you can include the I2C Functions */
      
      #include <i2c.h>
      
      /* function declaration for delay_ms */
      #include <delay.h>
      
      #define EEPROM_BUS_ADDRESS 0xa0
      
      /* read a byte from the 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;
      }
      
      /* write a byte to the EEPROM */
      void eeprom_write(unsigned char address, unsigned char data) {
      
      i2c_start();
      i2c_write(EEPROM_BUS_ADDRESS);
      i2c_write(address);
      i2c_write(data);
      i2c_stop();
      
      /* 10ms delay to complete the write operation */
      delay_ms(10);
      }
      
      void main(void) {
      unsigned char i; 
      DDRD=0xFF;
      
      /* initialize the I2C bus */
      i2c_init();
      
      /* write the byte 55h at address 10h */
      eeprom_write(0x23,0x01);
      
      /* read the byte from address AAh */
      i=eeprom_read(0x23);
      PORTD=i;
      
      while (1); /* loop forever */
      }
      .The best question deserves a better answer
      =-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=
      «پناه»می برم «به خدا»
      از عـیبی که ، «امروز» در خود می بینم، و «دیروز» «دیگران را» به خاطر، «هـمان عیـب» ملامت کرده ام.
      محتاط باشیم، در «سرزنش» و «قضاوت کردن دیگران». وقتی نه از «دیروز او» خبر داریم و نه از "فردای خودمان" .

      دیدگاه


        #4
        پاسخ : مشکل با AT24CXXX و TWI

        نوشته اصلی توسط •.´™ مَسِِــــح`.•
        دادشم این یه نمونه برنامس واسه کار با epprom ها شاید به کارت بیاد
        کد:
        #include<mega16.h>
        #define xtal 1000000
        
        /* the I2C bus is connected to PORTB */
        /* the SDA signal is bit 3 */
        /* the SCL signal is bit 4 */
        
        #asm
        
          .equ __i2c_port=0x18
          .equ __sda_bit=3
          .equ __scl_bit=4
        
        #endasm
        
        /* now you can include the I2C Functions */
        
        #include <i2c.h>
        
        /* function declaration for delay_ms */
        #include <delay.h>
        
        #define EEPROM_BUS_ADDRESS 0xa0
        
        /* read a byte from the 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;
        }
        
        /* write a byte to the EEPROM */
        void eeprom_write(unsigned char address, unsigned char data) {
        
        i2c_start();
        i2c_write(EEPROM_BUS_ADDRESS);
        i2c_write(address);
        i2c_write(data);
        i2c_stop();
        
        /* 10ms delay to complete the write operation */
        delay_ms(10);
        }
        
        void main(void) {
        unsigned char i; 
        DDRD=0xFF;
        
        /* initialize the I2C bus */
        i2c_init();
        
        /* write the byte 55h at address 10h */
        eeprom_write(0x23,0x01);
        
        /* read the byte from address AAh */
        i=eeprom_read(0x23);
        PORTD=i;
        
        while (1); /* loop forever */
        }
        مشکل توی درست خوندن اطلاعات نوشته شدست، من یه سری اطلاعات رو روی EEPROM نوشتم و وقتی هم که می خونم درست خونده میشه، ولی تو هر چند بار خوندن یه بار با خطا خونده میشه، که چند بایت انتهایی FF میشه، و خود تابع TWI هم مقدار برگشتیش برابر ERROR نیست!
        به هر حال ممنون از توجه ت،
        شاد و پایدار باشی.
        دوش دیوانه شدم عشق مرا دید و بگفت آمدم نعره مزن جامه مدر هیچ مگو
        گفتم ای عشق من از چیز دگر می​ترسم گفت آن چیز دگر نیست دگر هیچ مگو
        من به گوش تو سخن​های نهان خواهم گفت سر بجنبان که بلی جز که به سر هیچ مگو
        قمری جان صفتی در ره دل پیدا شد در ره دل چه لطیف است سفر هیچ مگو
        مولانا

        دیدگاه


          #5
          پاسخ : مشکل با AT24CXXX و TWI

          دوست عزیز حتما حواست به این موضوع هست که اطلاعات بایت بایت ذخیره و بازیابی میشه . دیگه ؟
          منظورم اینکه مثلا یه عدد int رو نمی دی بهش بعد توقع داشته باشی همون عدد int رو هم بهت بده (البته بیشتر 255 ) .
          - به دنبال فرصت عمري تباه کردم ! فرصت جواني ام بود من اشتباه کردم .

          دیدگاه


            #6
            پاسخ : مشکل با AT24CXXX و TWI

            سلام
            ببخشید تو این چند وقت نشد سر بزنم اینجا، مشکل با یه اشکال کوچیک تو برنامه نویسیم بود!
            مشکل هم این بود که اطلاعات از EEPROM درست خونده می شد، و تو یه رشته محلی (Local Array) میریختم بعد پویتر اونو برمیگردوندم به تابع بالا دستی ، (واقعا شرمنده بابت این سوتی :دی)
            ولی یه اشکال دیگه هم که بود اینکه موقع کار با لین سری از EEPROM باید حواسمون به صفحات EEPROM هم باشه مثلا تو این سری که من کار میکردم صفحات 64 بایتی میشد رایت کرد که اگه طول رشته بیشتر از این باشه یا بین دو صحه بیوفته باید تو دو مرحله رایت کنی.

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

            موفق باشید.
            دوش دیوانه شدم عشق مرا دید و بگفت آمدم نعره مزن جامه مدر هیچ مگو
            گفتم ای عشق من از چیز دگر می​ترسم گفت آن چیز دگر نیست دگر هیچ مگو
            من به گوش تو سخن​های نهان خواهم گفت سر بجنبان که بلی جز که به سر هیچ مگو
            قمری جان صفتی در ره دل پیدا شد در ره دل چه لطیف است سفر هیچ مگو
            مولانا

            دیدگاه

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