اطلاعیه

Collapse
No announcement yet.

کمک در راه اندازی AT24C64 با xmega32a4

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

    کمک در راه اندازی AT24C64 با xmega32a4

    باسلام :nerd:
    من این کد نمونه برای راه اندازی eeprom پیدا کردم ولی کلا نمی دونم این برنامه چطور کار می کنه تو توضیحاتش گفته که عددی را از کیبورد تایپ و بعد از نمایش برروی سون سگمنت ان را بر روی eeprom نوشته و بعد می خوانیم و بر روی سگمنت نمایش می دهیم .. اگر ممکن است از دوستان...... :angry: :angry:
    با تشکر
    کد:
    #include "avr_compiler.h"
    #include "twi_master_driver.h"
    #include "KEY_7SEG.h"
    #define SLAVE_ADDRESS  0x50
    #define CPU_SPEED    2000000
    #define BAUDRATE  100000
    #define TWI_BAUDSETTING TWI_BAUD(CPU_SPEED, BAUDRATE)
    
    TWI_Master_t twiMaster;  /*!< TWI master module. */
    unsigned char EEPROM_Address_Data[8]={0,0,0,0,0,0,0,0}; 
    
    void main(void)
    {  
     unsigned char key_code=nokey_code; 
     unsigned char old_key_code=nokey_code; 
     unsigned char DIGITS[6]={0,0,0,0,0,0}; 
     unsigned char i=0,j; 
     /* Initialize TWI master. */
     TWI_MasterInit(&twiMaster,&TWIC,TWI_MASTER_INTLVL_LO_gc,TWI_BAUDSETTING);
     init_7seg();
     init_key(); 
     __enable_interrupt(); 
    
     TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,&EEPROM_Address_Data[0],2,0);
     while (twiMaster.status != TWIM_STATUS_READY);
     TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,&DIGITS[0],0,6);
     while (twiMaster.status != TWIM_STATUS_READY);
     for(j=0;j<6;j++)DIGITS[j]=twiMaster.readData[j];
     show_7seg(DIGITS,0x00,0x00); 
    
     while(1)
     {
     key_code=get_key(); 
     if (key_code!= old_key_code)
     {      
      old_key_code=key_code; 
      if (key_code!=nokey_code)
      {
      if (key_code==10)
      {
       TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,&EEPROM_Address_Data[0],2,0);
       while (twiMaster.status != TWIM_STATUS_READY);
       TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,&DIGITS[0],0,6);
       while (twiMaster.status != TWIM_STATUS_READY);
       for(j=0;j<6;j++)DIGITS[j]=twiMaster.readData[j];
       show_7seg(DIGITS,0x00,0x00); 
      } 
      else if (key_code==11)
      {
       for(j=0;j<6;j++)EEPROM_Address_Data[j+2]=DIGITS[j];
       TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,&EEPROM_Address_Data[0],8,0);
       while (twiMaster.status != TWIM_STATUS_READY);   
      } 
       
      else
      { 
       DIGITS[i]=key_code;
       i++;
       if (i==6) i=0;
       show_7seg(DIGITS,0x00,0x00);   
      }
      } 
     }
     } 
    }
    
    /*! TWIC Master Interrupt vector. */
    ISR(TWIC_TWIM_vect)
    {
     TWI_MasterInterruptHandler(&twiMaster);
    }

    #2
    پاسخ : کمک در راه اندازی AT24C64 با xmega32a4

    دوستان برنامه رو به این صورت تغییر دادم ولی برنامه از این به بعد اجرا نمیشه یعنی بعد از این دو خط که نمایش دیتا تو LCD است هیچ دیتایی نمایش داده نمی شود....
    TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,& amp;write_Data,3,3);
    while (twiMaster.status != TWIM_STATUS_READY);

    این هم برنامه :
    کد:
    /*
     * TWI_24C64.c
     *
     * Created: 01/24/2012 02:06:08 ق.ظ
     * Author: DELLN4030
     */ 
    #include <avr/io.h>
    #include "lcd.h"
    #include <avr/delay.h>
    #include <stdio.h>
    #include "avr_compiler.h"
    #include "twi_master_driver.h"
    #define SLAVE_ADDRESS  0x50
    #define CPU_SPEED    2000000
    #define BAUDRATE  100000
    #define TWI_BAUDSETTING TWI_BAUD(CPU_SPEED, BAUDRATE)
    TWI_Master_t twiMaster;  /*!< TWI master module. */
    uint8_t write_Data[8] = {0 ,0 , 0xaa};
    char read_Data[8];
    char eepromread(int add);
    void eepromwrite(unsigned char data,int add);
    
    int main(void)
    { 
     lcd_init(LCD_DISP_ON);
     unsigned char i=0,j; 
     char lcd_buff[20];
     /* Initialize TWI master. */
     TWI_MasterInit(&twiMaster,&TWIE,TWI_MASTER_INTLVL_LO_gc,TWI_BAUDSETTING);
     PMIC.CTRL |= PMIC_LOLVLEN_bm;
     sei(); 
     
     TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,&write_Data,3,3);
     while (twiMaster.status != TWIM_STATUS_READY);
     
     lcd_gotoxy(0,0);
     lcd_puts("EEPROM XMEGA");
    
    
     while(1)
     {
     eepromwrite(55,1);
     read_Data[0]=eepromread(1);
     lcd_gotoxy(1,1);
     sprintf(lcd_buff,"data=%x ",read_Data[0]);
     lcd_puts(lcd_buff);
      _delay_ms(3000);   
     }
    } 
    
    
    /*! TWIC Master Interrupt vector. */
    ISR(TWIC_TWIM_vect)
    {
      TWI_MasterInterruptHandler(&twiMaster);
    }
    
    
    //read's a byte from memory
    char eepromread(int add)
    {
      uint8_t local_data[2];
      local_data[0] = add>>8;
      local_data[1] = add;
     
      TWI_MasterWriteRead(&twiMaster, SLAVE_ADDRESS, local_data, 2, 0);
      while (twiMaster.status != TWIM_STATUS_READY);
      
      TWI_MasterWriteRead(&twiMaster, SLAVE_ADDRESS, 0, 0, 1);
      while (twiMaster.status != TWIM_STATUS_READY);
      
      return twiMaster.readData[0];
    
    }
    
    //write's a byte to memory
    void eepromwrite(unsigned char data,int add)
    {
      uint8_t local_data[3];
    
      local_data[0] = add>>8;
      local_data[1] = add;
      local_data[2] = data;
    
      TWI_MasterWriteRead(&twiMaster, SLAVE_ADDRESS, local_data, 3, 0);
      while (twiMaster.status != TWIM_STATUS_READY);
    
    }

    دیدگاه


      #3
      پاسخ : کمک در راه اندازی AT24C64 با xmega32a4

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

      دیدگاه


        #4
        پاسخ : کمک در راه اندازی AT24C64 با xmega32a4

        با تشکر از جناب طراح
        هدف من نوشتن اطلاعات بر روی eeprom وبعد خواندن آن و نمایش در LCD است ..
        سخت افزار هم یک عدد ای سی at24c64 است که پایه های 1 تا 4 به زمین وصل است و 8 vcc و 7 زمین - 5 , 6 هم دیتا وکلاک است که به پورت e0 وe1 میکرو xmega32a4 متصل است با مقاومت بالا کش 10 کیلو برای هر دو پایه های sda و sck

        دیدگاه


          #5
          پاسخ : کمک در راه اندازی AT24C64 با xmega32a4

          برنامه رو به این صورت تغییر دادم ولی کار نمی کنه از دوستانی که با at24cxx کار کردن میشه راهنمایی کنند. در این برنامه خروجی data=0 هستش ..که همش صفر است

          کد:
          *
           * TWI_24C64.c
           *
           * Created: 01/24/2012 02:06:08 ق.ظ
           * Author: N4030
           */
          #include <avr/io.h>
          #include "lcd.h"
          #include <avr/delay.h>
          #include <stdio.h>
          #include "avr_compiler.h"
          #include "twi_master_driver.h"
          #define SLAVE_ADDRESS  0x50
          #define CPU_SPEED    2000000
          #define BAUDRATE  100000
          #define TWI_BAUDSETTING TWI_BAUD(CPU_SPEED, BAUDRATE)
          TWI_Master_t twiMaster;  /*!< TWI master module. */
          //uint8_t write_Data[8] = {0 ,0 , 0xaa};
          
          unsigned char eepromread(int add);
          void eepromwrite(unsigned char data,int add);
          
          int main(void)
          {
           lcd_init(LCD_DISP_ON);
           unsigned char i=0,j;
           char lcd_buff[20];
           unsigned char read_Data[8],read_status;
           TWI_MasterInit(&twiMaster,&TWIC,TWI_MASTER_INTLVL_LO_gc,TWI_BAUDSETTING);
           PMIC.CTRL |= PMIC_LOLVLEN_bm;
           sei();
          
           lcd_gotoxy(0,0);
           lcd_puts("EEPROM XMEGA");
          
           
           while(1)
           {
           
           eepromwrite(10,2);
           read_Data[0]=eepromread(200);
           lcd_gotoxy(1,1);
           sprintf(lcd_buff,"data=%d ", read_Data[0]);
           lcd_puts(lcd_buff);
            _delay_ms(2000);  
            lcd_clrscr();
          
           }
          }
          
          
          /*! TWIC Master Interrupt vector. */
          ISR(TWIC_TWIM_vect)
          {
            TWI_MasterInterruptHandler(&twiMaster);
          }
          
          
          //read's a byte from memory
          unsigned char eepromread(int add)
          {
            uint8_t local_data[2];
            char lcd_buff[20];
            local_data[0] = add>>8;
            local_data[1] = add;
           
            TWI_MasterWriteRead(&twiMaster, SLAVE_ADDRESS, local_data, 2, 0);
            while (twiMaster.status != TWIM_STATUS_READY);
           
            TWI_MasterWriteRead(&twiMaster, SLAVE_ADDRESS, 0, 0, 1);
            while (twiMaster.status != TWIM_STATUS_READY);
           
            return twiMaster.readData[0];
          
          }
          
          //write's a byte to memory
          void eepromwrite(unsigned char data,int add)
          {
            uint8_t local_data[3];
            local_data[0] = add>>8;
            local_data[1] = add;
            local_data[2] = data;
          
            TWI_MasterWriteRead(&twiMaster, SLAVE_ADDRESS, local_data, 3, 0);
            while (twiMaster.status != TWIM_STATUS_READY);
          
          }

          دیدگاه


            #6
            پاسخ : کمک در راه اندازی AT24C64 با xmega32a4

            کد:
            #include<ioavr.h>
            #include<intrinsics.h>
            #include"lcd_4bit.h"
            int a=0;
            char str[12];
            int main(){
             lcd_init(16,2);
             lcd_clear();
             TWIE_MASTER_CTRLA=0x38;
             TWIE_MASTER_STATUS|=0x01;
             TWIE_MASTER_DATA=10;
             TWIE_MASTER_ADDR=0xA3;
             __delay_cycles(1000);
             while(((TWIE_MASTER_STATUS&0x40)!=0x40)&&((TWIE_MASTER_STATUS&0x10)==0x10)){
              TWIE_MASTER_STATUS|=0x01;
              TWIE_MASTER_DATA=10;
              TWIE_MASTER_ADDR=0xA3;
              __delay_cycles(1000);
             }
             lcd_puts_ram("lag");
             while((TWIE_MASTER_STATUS&0x80)!=0x80){
              TWIE_MASTER_ADDR=0xA2;
              __delay_cycles(1000);
             }
             a=TWIE_MASTER_DATA;
             sprintf(str,"data=%d",a);
             lcd_puts_ram(str);
             return 0;
            }

            به نظرتون کجای این کد برای خوندن از ایپرام مشکل داره؟

            دیدگاه


              #7
              پاسخ : کمک در راه اندازی AT24C64 با xmega32a4

              من امروز قصد پاسخگویی به شما را داشتم که انجمن دچار مشکل شد. در کد شما در یک حلقه while بصورت دائمی در آدرس 2 مقدار 10 نوشته می شود و محتویات آدرس 200 نمایش داده می شود. صرف نظر از بحث صحیح بودن کد، اگر قصد نمایش اطلاعات نوشته شده را دارید، باید اطلاعات را از یک ادرس واحد بخوانید و و در آن بنویسید.
              (نوع نمایش کدهای شما به لحاظ نمایش از چپ به راست تصحیح شد)
              اوژن: به معنای افکننده و شکست دهنده است
              دانایی، توانایی است-Knowledge is POWER
              برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
              وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
              قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
              اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
              ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

              دیدگاه


                #8
                پاسخ : کمک در راه اندازی AT24C64 با xmega32a4

                با سلام
                دوستان من یک برنامه دیگه واسه ارتباط با at24c64 توشتم ولی بازم کار نمی کنه ..مشکل اینه که از RxACK مساوی 1 نمیشه
                while(!(TWIC_MASTER_STATUS & (1<<RXACK))); //wait in RXACK=1
                حالا باید چی کار کنم میشه بگید کجا اشکال داره ؟ :angry: :angry: :angry:

                کد:
                /*
                 * EEPROM64.c
                 *
                 * Created: 01/29/2012 10:54:19 ب.ظ
                 * Author: N4030
                 */ 
                
                #include <avr/io.h>
                #include "lcd.h"
                #include <avr/delay.h>
                #include <stdio.h>
                #include "avr_compiler.h"
                
                // Register CTRLA
                #define CTAENABLE 3
                #define CTAWIEN 4
                #define CTARIEN 5
                #define CTAINTLVL0 6
                #define CTAINTLVL1 7
                // Register STATUS
                #define STATUSBIT0 0
                #define RXACK 4
                //Address 
                #define write_address_bus 160
                #define read_address_bus 161
                
                #define CPU_SPEED    2000000
                #define BAUDRATE	100000
                #define TWI_BAUD(F_SYS, F_TWI) ((F_SYS / (2 * F_TWI)) - 5)
                #define TWI_BAUDSETTING TWI_BAUD(CPU_SPEED, BAUDRATE)
                char lcd_buff[20];
                unsigned char read_eeprom(unsigned int add);
                void write_eeprom(unsigned char data,unsigned int add);
                void init_eeprom(void);
                
                int main(void)
                {
                	unsigned char i=0,j; 
                  
                	lcd_init(LCD_DISP_ON);
                  init_eeprom();
                	//lcd_gotoxy(0,0);
                  //lcd_puts("EEPROM XMEGA");
                	write_eeprom(20,40);
                  while(1)
                  {
                    
                  }
                }
                
                void init_eeprom(void)
                {
                	//an Interrupt 
                	//TWIE_MASTER_CTRLA = (1<<CTAENABLE) | (1<<CTAWIEN) | (1<<CTARIEN) | (1<<CTAINTLVL0) | ~(1<<CTAINTLVL1);
                	TWIC_MASTER_CTRLA = (1<<CTAENABLE) | (1<<CTAINTLVL0) | ~(1<<CTAINTLVL1);
                	TWIC_MASTER_BAUD = TWI_BAUDSETTING;
                  TWIC_MASTER_STATUS = (1<<STATUSBIT0); 
                }
                
                void write_eeprom(unsigned char data,unsigned int add)
                {
                	
                	while(!(TWIC_MASTER_STATUS & (1<<STATUSBIT0))); //wait in idle=1 
                	if(TWIC_MASTER_STATUS==1)
                	TWIC_MASTER_ADDR = write_address_bus;
                	while(!(TWIC_MASTER_STATUS & (1<<RXACK)));  //wait in RXACK=1 
                	lcd_gotoxy(0,0);
                  lcd_puts("EEPROM XMEGA");
                	if((TWIC_MASTER_STATUS & (1<<RXACK)))
                	{
                	TWIC_MASTER_ADDR=(unsigned char)add >> 8;
                	TWIC_MASTER_ADDR=(unsigned char)add;
                	}
                	while(!(TWIC_MASTER_STATUS & (1<<RXACK)));	 //wait in RXACK=1 
                	if((TWIC_MASTER_STATUS & (1<<RXACK)))
                	{
                	TWIE_MASTER_DATA=data;
                	}
                	lcd_gotoxy(1,1);
                  sprintf(lcd_buff,"data=%d ", data);
                  lcd_puts(lcd_buff);
                	_delay_ms(20);
                }

                دیدگاه


                  #9
                  پاسخ : کمک در راه اندازی AT24C64 با xmega32a4

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

                  دیدگاه


                    #10
                    پاسخ : کمک در راه اندازی AT24C64 با xmega32a4

                    با تشکر از جناب طراح
                    آی سی مورد استفاده atxmega32a4 و eeprom مورد استقاده at24c64 است که به پایه های 11 و12 که پورت C را تشکیل می دهند. و LCD هم به پورت D اتصال یافته است .

                    دیدگاه


                      #11
                      پاسخ : کمک در راه اندازی AT24C64 با xmega32a4

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

                      دیدگاه


                        #12
                        پاسخ : کمک در راه اندازی AT24C64 با xmega32a4

                        با تشکر
                        LCD به پورت D وصل است .///


                        دیدگاه


                          #13
                          پاسخ : کمک در راه اندازی AT24C64 با xmega32a4

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

                          دیدگاه


                            #14
                            پاسخ : کمک در راه اندازی AT24C64 با xmega32a4

                            با تشکر از جناب طراح :nice:

                            برنامه را کامپایل کردم و اجرا شد . ولی بعضی از قسمت ها رو نفهمیدم اگه ممکنه راهنمایی کنید ///
                            کد:
                            unsigned char EEPROM_Address_Data[]={0,0,9,8,7,6,5,4,3};
                            طبق برنامه اول تابع Init اجرا می شود و بعد توسط تابع زیر ادرس سخت افزاری و ادرس مکانی که می خواهیم بنویسیم روی رجیستر دیتا قرار می گیرد آیا این توضیح درست است ؟

                            کد:
                             TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,EEPROM_Address_Data,8,0);
                                                                                                  while (twiMaster.status != TWIM_STATUS_READY);
                            بعد مراحل نمایش دیتا و ادرس که هر دو یکی هستند // ایا هر دو ادرس ودیتا یکی است ؟

                            بعد این تابع اجرا می شود ولی برای چه مقدار bytesToWrite برابر 2 انتخاب شده است ؟
                            کد:
                             TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,EEPROM_Address_Data,2,0);
                                                                                                   while (twiMaster.status != TWIM_STATUS_READY);
                            بعد با تابع زیر 6 بایت از دیتا خوانده می شود آیا صحت دارد ؟
                            کد:
                            TWI_MasterWriteRead(&twiMaster,SLAVE_ADDRESS,EEPROM_Address_Data,0,6);
                                                                                                   while (twiMaster.status != TWIM_STATUS_READY);
                            بعد دیتا از رجیستر twiMaster.readData خوانده می شود و روی LCD نمایش می یابد.
                            نحوه نمایش در LCD به این صورت است :

                            WRITE= 987654
                            READ= 987654

                            درنوشتن برنامه شما 6 بایت را ریختید و 6 بایت را خواندید حال اگر بخواهم در آدرس 500 دیتا 250 را برزیم باید چه طور برنامه را تغییر بدهم ؟

                            باتشکرات ویژه از زحمات شما :job:



                            دیدگاه


                              #15
                              پاسخ : کمک در راه اندازی AT24C64 با xmega32a4

                              برای نوشتن و خواندن به این نوع eeprom و با فرض زمین کردن پایه های آدرس، ابتدا باید کدی به صورت 10100000 یا همان A0 فرستاده شود که با توجه به آنکه بایت آدرس در متن کد یکبار به چپ شیفت داده می شود، بنابراین مقدار 0X50 به عنوان آدرس در ارسال TWI در نظر گرفته می شود. سپس دو بایت آدرس محل مورد نظر در eeprom فرستاده می شود (که توجه کنید از نظر ارتباط TWI این بایت ها یک نوع Data هستند). در ادامه اگر منظور، نوشتن اطلاعات باشد که بایت های مورد نظر بصورت متوالی ارسال می شوند و اگر منظور خواندن باشد، باید مجددا آدرس دهی TWI ( نه آدرس دهی به eeprom) با LSB=1 انجام شود و سپس بایت های مورد نظر در آرایه ای که در کتابخانه Atmel تعریف شده، نوشته می شوند. برای نوشتن مقدار 250 در آدرس 500 می توانید در آرایه ای که دو بایت اول آن حاوی آدرس محل مورد نظر برای نوشتن است، به عنوان عضو اول مقدار بایت بالای متناظر 500 و برای عضو دوم بایت پائین متناظر 500 را قرار دهید و عضو سوم آرایه هم می تواند 250 باشد و در هنگام نوشتن هم 3 بایت (شامل دو بایت بالا و پائین 500 و سپس 250) را بنویسید.
                              اوژن: به معنای افکننده و شکست دهنده است
                              دانایی، توانایی است-Knowledge is POWER
                              برای حرفه ای شدن در الکترونیک باید با آن زندگی کرد
                              وضعمان بهتر می شود، اگر همه نسبت به جامعه و اطراف خود مسوول باشیم و نگوئیم به ما چه
                              قوی شدن و خوب ماندن - خوبی کردن به دیگران یک لذت ماندگار است
                              اگر قرار باشد نفت و منابع خام را بدهیم و چرخ بگیریم، بهتر است چرخ را از نو اختراع کنیم
                              ساعت کار بدن اکثر انسان ها کمتر از 800000 ساعت است و بعد از آن از کار می افتد

                              دیدگاه

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