اطلاعیه

Collapse
No announcement yet.

مشکل در راه اندازی 24c512

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

    مشکل در راه اندازی 24c512

    سلام
    من با atmega128 یک I2c 24c04 را راه انداختم و مشکلی ندارم ولی 512 راه نمیفته آیا باید آدرس باس تغییری بکنه یا بایه ها ی سخت افزاری باید به گونه ای متفاوت از 24c04 متصل شوند.

    #2
    پاسخ : مشکل در راه اندازی 24c512

    تعداد بایت آدرس برای این دوتا فرق میکنه.
    کدتو بزاری بهتر میشه کمک کرد.

    دیدگاه


      #3
      پاسخ : مشکل در راه اندازی 24c512

      ممنوناز پاسختون
      #include <mega128.h>
      #include <i2c.h>
      // I2C Bus functions
      #asm
      .equ __i2c_port=0x12 ;PORTD
      .equ __sda_bit=7
      .equ __scl_bit=6
      #endasm


      /* 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;
      DDRB=0xFF;

      /* initialize the I2C bus */
      i2c_init();

      /* write the byte 55h at address 10h */


      while (1)
      {
      //if(PINC.0==1)
      //{
      eeprom_write(0x10,0x1F);
      // }
      /* read the byte from address AAh */

      i=eeprom_read(0x10);
      PORTB=i;
      /* read the byte from address AAh */


      }
      }

      دیدگاه


        #4
        پاسخ : مشکل در راه اندازی 24c512

        همونطور که گفتم 24c512 بادو بایت آدرس دهی میشه.( 65536 بایت ظرفیت داره پس برای آدرس دهی 16 بیت میخواد.)
        باید متغیر adderss رو بصورت 16 بیتی تعریف کنی و یک بار بایت بالا و بعد بایت پایین رو بفرستی.
        اینو انجام بده بزار.

        دیدگاه


          #5
          پاسخ : مشکل در راه اندازی 24c512

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

          دیدگاه


            #6
            پاسخ : مشکل در راه اندازی 24c512

            من زیاد کدویژن بلد نیستم ولی باید یه چیزی مثل این بشه.ضمناً تستش هم نکردم.

            کد:
            /* read a byte from the EEPROM */
            unsigned char eeprom_read(unsigned int address) {
            unsigned char data;
            i2c_start();
            i2c_write(EEPROM_BUS_ADDRESS);
            i2c_write((unsigned char)(address>>8));
            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);
            i2c_write((unsigned char)(address>>8));
            i2c_write((unsigned char)address);
            i2c_write(data);
            i2c_stop();
            /* 10ms delay to complete the write operation */
            delay_ms(10);
            }
            /////////////////////////////////////////////////
            eeprom_write(0x0010,0x1F);
            i=eeprom_read(0x0010);

            دیدگاه


              #7
              پاسخ : مشکل در راه اندازی 24c512

              آقا خیلی لطف کردید. درست شد. ممنون

              دیدگاه

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