اطلاعیه

Collapse
No announcement yet.

مشکل در راه اندازی eeprom 512k با sam7x256

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

    مشکل در راه اندازی eeprom 512k با sam7x256

    با عرض سلام خدمت دوستان.
    چند روزه درگیر راه اندازی eeprom 512k هستم.متاسفانه هنوز نتونستم از eeprom جواب بگیرم!! واقعا کلافه شدم :angry: :angry: :angry:
    خواهشا اگه کسی از دوستان کار کرده ممنون میشم راهنماییم کنه.
    با تشکر.
    کدی ک خودم نوشتم جواب نگرفتم!!!!.
    کد:
    #include <AT91SAM7X256.h>	
    #include <lib_AT91SAM7X256.h>
    #include <PIO.h>
    #include <delay.h>
    #include <adc.h> 
    #include <twi.c>
    
    #define PORTRAIT
    #define family_AT91SAM7X
    #define TFTLCD_DATAPORT_B
    #define LCD_OFFSET 0
    #define TFTLCD_CONTROLPORT_A
    #define TFTLCD_CS 22
    #define TFTLCD_RS 23
    #define TFTLCD_WR 24
    #define TFTLCD_RD 25
    #define TFTLCD_RST 26
    #include <lcd.h>
    
    
    int x11,y11;
    char m;
    char lcd_buf[100];
    unsigned char eeprom[30];
    unsigned char str[20];
    char tx =m;
    char data;
    
    
    int main()
    {
    
    LCD_Init();
    	
    	*AT91C_PIOA_PDR = 1<<10 | 1<<11;
    	*AT91C_PIOA_ASR = 1<<10 | 1<<11;
    	*AT91C_PIOA_MDER = 1<<10 | 1<<11;
    	*AT91C_PIOA_PPUER = 1<<10 | 1<<11;
     *AT91C_PMC_PCER = 1<<9;
    	*AT91C_TWI_CWGR = 0X00017676;
    	*AT91C_TWI_CR = 1<2;
    	
    
    	//WIRTE
    	*AT91C_TWI_MMR = 0X00450200;
    *AT91C_TWI_IADR = 3520;
    *AT91C_TWI_THR = a;
    while((*AT91C_TWI_SR & 0X4) == 0 );		
    while((*AT91C_TWI_SR & 0X1) == 0 );		
    		delay_ms(12 );
    
    		//read 
    	*AT91C_TWI_MMR = 0X00451200;
    *AT91C_TWI_IADR = 3520;
    *AT91C_TWI_CR = 0X3;
    		while((*AT91C_TWI_SR & 0X2) == 0 );		
    		data=*AT91C_TWI_RHR;
    		while((*AT91C_TWI_SR & 0X1) == 0 );		
    		delay_ms(10);
    				 sprintf(eeprom,"data=""%d",data);
    			 LCD_ShowString(40,60,eeprom);
    	delay_s(2);
    
    	
    	/*
    	
    		PIO_Periph(PORT_A,1<<10|1<<11,0);	
    PIO_Opendrain(PORT_A,1<<10|1<<1);
    	Pullup(PORT_A,1<<10|1<<11);
    	TWI_Configure(100000);
    TWI_WriteByteIadr (BASE_TWI,0X45,20000,2,&tx);
    	delay_ms(10);
    TWI_ReadByteIadr (BASE_TWI,0X45,20000,2,&rx);
    		LCD_Clear(BLACK);
    		 sprintf(eeprom_buf,"rx=""%d",rx);
    	 LCD_ShowString(40,60,eeprom_buf);
    	delay_s(1);
    	*/
    while(1)
     {
    
    	
    	}
    }

    #2
    پاسخ : مشکل در راه اندازی eeprom 512k با sam7x256

    سلام.

    لطفا کدها رو که می زارید از قسمت انتخاب کد C رو انتخواب کنید که خواناتر نمایش داده بشه.
    پیشنهاد می کنم یه کتابخانه بهتر انتخاب کنید و البته با نوشتن یه سری توابع در سطح بالاتری از رجیستر کد بزنید.
    در مورد آی سی های سری AT24CXX ، اینها 2 مدل دارن ، یه نمونه آدرس دهی شون با 3 پایه ی آدرس هست. مثل AT24C32 و ... ، این روش هم یه روش قدیمی هست.
    و یه نمونه دیگه از خطوط آدرس سخت افزاری برای آدرس دهی استفاده نمی کنه و این کار رو نرم افزاری انجام می ده. مثل AT24C02 و ... و اکثرا از این دسته هستن.

    در مورد اول برای ارتباط با I2C شما باید با پایه ی های سخت افزاری وارد رنج خاصی از آدرس بشید و بعد از اون با 8بیت آدرسی که با I2C انتقال می دید به خانه مد نظر می رسید.
    در مورد دوم شما 2 تا 8 بیت با I2C به سمت EEPROM می فرستید که حاصل 16 بیتیش مکان آدرس رو تعیین می کنه.
    دیتاشیت AT24C512 رو چک کنید ببینید از کدوم دسته می شه ، احتمال می دم از دسته ی دوم باشه.

    موفق باشید.
    It is what it is
    آموزش های ویدئویی به سبک MBED
    پروژه EasyMCU :: تا ارائه چیزی نمانده!

    دیدگاه


      #3
      پاسخ : مشکل در راه اندازی eeprom 512k با sam7x256

      سلام.

      لطفا کدها رو که می زارید از قسمت انتخاب کد C رو انتخواب کنید که خواناتر نمایش داده بشه.
      پیشنهاد می کنم یه کتابخانه بهتر انتخاب کنید و البته با نوشتن یه سری توابع در سطح بالاتری از رجیستر کد بزنید.
      در مورد آی سی های سری AT24CXX ، اینها 2 مدل دارن ، یه نمونه آدرس دهی شون با 3 پایه ی آدرس هست. مثل AT24C32 و ... ، این روش هم یه روش قدیمی هست.
      و یه نمونه دیگه از خطوط آدرس سخت افزاری برای آدرس دهی استفاده نمی کنه و این کار رو نرم افزاری انجام می ده. مثل AT24C02 و ... و اکثرا از این دسته هستن.

      در مورد اول برای ارتباط با I2C شما باید با پایه ی های سخت افزاری وارد رنج خاصی از آدرس بشید و بعد از اون با 8بیت آدرسی که با I2C انتقال می دید به خانه مد نظر می رسید.
      در مورد دوم شما 2 تا 8 بیت با I2C به سمت EEPROM می فرستید که حاصل 16 بیتیش مکان آدرس رو تعیین می کنه.
      دیتاشیت AT24C512 رو چک کنید ببینید از کدوم دسته می شه ، احتمال می دم از دسته ی دوم باشه.

      موفق باشید.

      خیلی ممنون از پاسخ شما.
      AT24C512 از نوعی هستش ک از پایه های سخت افزاری برای ادرس دهی استفاده میکنه.
      از کتابخونه TWI.C ک استفاده میکنم هنگامی ک میکرو ب خط کافیگ کردن کلاک TWI میرسه هنگ میکنه ب طوری ک صفحه LCD سفید میشه!!!بعد از هر خط کد یک متن رو روی lcd نمایش دادم تا متوجه بشم ک دقیقا مشکل از کجاست! بعد متوجه شدم ک مشکل از کانفیگ کلاک twi هستش!!!
      [code=c]#include <AT91SAM7X256.h>
      #include <lib_AT91SAM7X256.h>
      #include <PIO.h>
      #include <delay.h>
      #include <adc.h>
      #include <twi.c>
      #define PORTRAIT
      #define family_AT91SAM7X
      #define TFTLCD_DATAPORT_B
      #define LCD_OFFSET 0
      #define TFTLCD_CONTROLPORT_A
      #define TFTLCD_CS 22
      #define TFTLCD_RS 23
      #define TFTLCD_WR 24
      #define TFTLCD_RD 25
      #define TFTLCD_RST 26
      #include <lcd.h>

      int x11,y11;
      char a;
      char lcd_buf[100];
      unsigned char eeprom[30];
      unsigned char str[20];
      char tx = 0xff;
      char sa = 0xff;
      char data;
      const unsigned char str1[] =
      {
      0x44, 0x06, 0x37, 0x06, 0x41, 0x06, 0x27, 0x06, 0x20, 0x00, 0x31, 0x06, 0x45, 0x06,
      0x32, 0x06, 0x20, 0x00, 0x2E, 0x06, 0x48, 0x06, 0x2F, 0x06, 0x20, 0x00, 0x31, 0x06, 0x27, 0x06,
      0x20, 0x00, 0x48, 0x06, 0x27, 0x06, 0x31, 0x06, 0x2F, 0x06, 0x20, 0x00, 0x46, 0x06, 0x45, 0x06,
      0x27, 0x06, 0xCC, 0x06, 0xCC, 0x06, 0x2F, 0x06,0x00,0x00
      } ;


      int x1 (void)
      {
      int b;
      config_adc(0x04);
      Output(PORT_B,PB_28|PB_30);
      Input(PORT_B,PB_27|PB_29);
      Set_Out(PORT_B,PB_30);
      Clr_Out(PORT_B,PB_28);

      start_adc();
      b = read_adc(2);
      delay_us(100);
      return b;
      };
      int y1 (void)
      {
      int a;
      config_adc(0x02);
      Output(PORT_B,PB_27|PB_29);
      Input(PORT_B,PB_28|PB_30);
      Set_Out(PORT_B,PB_29);
      Clr_Out(PORT_B,PB_27);

      start_adc();
      a = read_adc(1);
      delay_us(100);
      return a;

      };

      int main()
      {

      LCD_Init();

      PIO_Periph(PORT_A,1<<10|1<<11,0);
      LCD_Clear(BLACK);
      tftlcd_putsf_mix((unsigned char*)"aa",2);
      delay_ms(500);

      PIO_Opendrain(PORT_A,1<<10|1<<11);
      LCD_Clear(BLACK);
      tftlcd_putsf_mix((unsigned char*)"bb",2);
      delay_ms(500);

      Pullup(PORT_A,1<<10|1<<11);
      LCD_Clear(BLACK);
      tftlcd_putsf_mix((unsigned char*)"cc",2);
      delay_ms(500);
      TWI_Configure(100000);
      LCD_Clear(BLACK);
      tftlcd_putsf_mix((unsigned char*)"dd",2);
      delay_ms(500);


      while(1)
      {


      TWI_WriteByteIadr (BASE_TWI,0XA0,20000,2,&tx);
      LCD_Clear(BLACK);
      tftlcd_putsf_mix((unsigned char*)"O",2);
      delay_ms(500);

      delay_ms(10);
      TWI_ReadByteIadr (BASE_TWI,0XA1,20000,2,&data);
      LCD_Clear(BLACK);
      tftlcd_putsf_mix((unsigned char*)"OO",2);
      delay_ms(500);

      delay_ms(10);
      LCD_Clear(BLACK);
      if(data == sa)
      tftlcd_putsf_mix((unsigned char*)"yes",2);
      else
      tftlcd_putsf_mix((unsigned char*)"no",2);

      delay_s(1);


      x11=x1();
      sprintf(str,"x=""%d",x11);
      POINT_COLOR=Yellow;
      LCD_Clear(RED);
      LCD_ShowString(40,60,str);
      y11=y1();
      sprintf(str,"y=""%d",y11);
      LCD_ShowString(40,80,str);
      delay_ms(500);



      }
      }
      [/code]

      دیدگاه


        #4
        پاسخ : مشکل در راه اندازی eeprom 512k با sam7x256

        چند سال پیش از سری sam7x استفاده می کردم و الان ذهنیتی از این کتابخانه ندارم. اما شما چک کنید ورودی تابع TWI_Configure چی هست و آیا رقمی که بر حسب Hz بهش دادید درست هست یا نه ، اگر هم مثالی براش دارید می تونید در مثال چک کنید.
        یه سرچ از تابع تو گوگل زدم لینک زیر به چشم خورد که احتمالا با کتابخانه ی شما متفاوته ، اما می تونید توابع مورد استفاده تون رو باهاش چک کنید و یا مستقیم از همین استفاده کنید.

        http://elk.informatik.fh-augsburg.de/da/da-42/Quellcode/ELUA/bearbeitet/elua-0.5/src/platform/at91sam7x/twi.c
        It is what it is
        آموزش های ویدئویی به سبک MBED
        پروژه EasyMCU :: تا ارائه چیزی نمانده!

        دیدگاه

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