اطلاعیه

Collapse
No announcement yet.

مشکل با i2c

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

    مشکل با i2c

    با سلام خدمت دوستان

    مشکل ما با پرت سریال که حل نشد

    اما یه مشکل دیگه پیدا شده میخوام با یه ای سی eeprom 24c02 کار کنم

    یه برنامه نوشتم کار خواصی نمیکنه ولی فقط قسمتی که از روی ic میخونه کار میکنه نمیتونه داخل ic بنویسه
    کد:
    #include<p18f4550.h>
    #include<delays.h>
    #include<i2c.h>
    #include<xlcd.h>
    #include<stdio.h>
    #pragma config WDT=OFF,LVP=OFF,FOSC=HS,PBADEN = OFF,PWRT = ON
    
    
    void DelayFor18TCY(void){
    	Delay10TCYx(2);
    }
    void DelayPORXLCD(void){
    	Delay1KTCYx(20);
    }
    void DelayXLCD(void){
    	Delay1KTCYx(5);
    }
    
    
    char buf[10];
    void main(){
      unsigned char test=0;
      unsigned char i=0;
    	OpenXLCD(FOUR_BIT&LINES_5X7);
    	OpenI2C(MASTER,SLEW_ON);
    	SSPADD=9;// 400kHz Baud clock
      WriteCmdXLCD(DON & BLINK_OFF & CURSOR_OFF);
      WriteCmdXLCD(0x1);//clear display
      putrsXLCD( "be name KHODA" );
      Delay10KTCYx(200);
    
    	WriteI2C(0b10100010);
    	Delay10KTCYx(1);
      WriteI2C(0x02);
      test=0x0;
    
    for(i=0;i<10;i++){
    Delay10KTCYx(1);
    test++;
      WriteI2C(test);
    }
    
      RestartI2C();
    Delay10KTCYx(1);
      WriteI2C(0b10100010);
    Delay10KTCYx(1);
      WriteI2C(0x02);
      RestartI2C();
    Delay10KTCYx(1);
      WriteI2C(0X0b10100011);
    while(1){
    
      test=ReadI2C();
      WriteCmdXLCD(0x1);//clear display
      sprintf(buf,"%d ",test);
      putsXLCD( buf );
    Delay10KTCYx(100);
    
    }  
    
    }
    عامل کليدي تمام موفقيتها " عمل کردن" است

    #2
    پاسخ : مشکل با i2c

    سلام

    من تونستم از روی اون بخونم ولی نمیشه داخلش چیزی نوشت ؟

    کار دستور AckI2C(); تو ارتباط i2c چی هست ؟؟
    عامل کليدي تمام موفقيتها " عمل کردن" است

    دیدگاه


      #3
      پاسخ : مشکل با i2c

      سلام
      کار دستور AckI2C(); تو ارتباط i2c چی هست ؟؟
      در ارسال از مستر به سمت کلاینت ، منظور میکرو به سمت تراشه ، بعد از ارسال داده به سمت slave میکرو منتظر می ماند تا تایید دریافت داده از سمت slave تایید بشه اگر همچنین چیزی صورت نگرفته باشد و با چک کردن بیت WCOL از ریجستر SSPCON1 متوجه تصادم شده باشید باید مجددا داده هاتون رو ارسال کنین ، سعی کنین برای ارسال داده ابتدا داده رو با WriteI2C بفرستین و گرفتن خروجی تابع WriteI2C در صورت خطا داشتن مجددا سعی به نوشتن در حافظه کنین نمونه برنامه برای ارسال داده هم می تونین اینجا ببینین
      http://www.eca.ir/forum2/index.php?t...5088#msg385088
      یا داده هاتون رو به وسیله این تابع ارسال کنین


      کد:
      void WriteDs(unsigned char dat)
      {
        signed char states,pert;
        states=WriteI2C(dat);
        while(states==-1)
        {
          pert=SSPBUF;
          SSPCON1bits.WCOL=0;
          states=WriteI2C(dat);
        }
        while(SSPCON2bits.ACKSTAT);
      }
      هیچ دانش آموزی نیست که به در خانۀ دانشمندی آمد و شد کند, مگر این که خداوند برای هر گامی که برمی دارد عبادت یک سال را برایش رقم زند.

      دیدگاه


        #4
        پاسخ : مشکل با i2c

        دوستان مشکلم با نوشتن حل شده ولی چیزی ازش نمیشه بخونی ؟؟

        یعنی هرچی میخونی مقدار 0xff رو میده
        عامل کليدي تمام موفقيتها " عمل کردن" است

        دیدگاه

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