اطلاعیه

Collapse
No announcement yet.

مشکل با twi سخت افزاری

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

    مشکل با twi سخت افزاری

    سلام دوستان
    همونطور که میدونید برای استفاده کردن از i2c در کدویژن دو راه داریم.یکی استفاده از i2c نرم افزاریه که از پایه های I/O استفاده میشه و توابع
    کد:
    i2c_start()
    i2C_stop()
    i2c_read()
    i2c_write()
    به صورت آماده نوشته شدند.یه راه دیگه هم استفاده از twi سخت افزاریه که باید با رجیستر ها کار کرد.
    حالا من میخوام این توابع را برای twi سخت افزاری ایجاد کنم.و هم زمان هم تستش هم میکنم.یعنی دارم رو یه ماژولی کار میکم که با i2c نرم افزاری راه اندازی شده و از همون توابع آماده استفاده کرده.
    حالا همون توابع را به این صورت نوشتم ولی دیگه کار نکرد.برای اینکه بفهمم کجا کار اشتباه شده در هر مرحله یه کلمه روی ال سی دی میاد که میفهمم الان کجای کاره.
    ولی نتیجه این شده که در همون مرحله ی start میمونه.
    کد:
      TWBR=4;
      TWCR=(1<<TWEA)|(1<<TWEN);
      TWSR|=(1<<TWPS0)|(1<<TWPS1);
    void i2c_Start()
    {
          lcd_clear();
          lcd_putsf("start");
          delay_ms(2000);
          TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
          while(!(TWCR & (1<<TWINT)));
    }
    void i2c_Stop()
    {
          lcd_clear();
          lcd_putsf("stop");
          delay_ms(2000);
          TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
          while(!(TWCR & (1<<TWINT)));
    }
    void i2c_Write(unsigned char data)
    {
          lcd_clear();
          sprintf(strr,"write%u",data);
          lcd_puts(strr);
          delay_ms(2000);
          TWDR=data;
          TWCR=(1<<TWINT)|(1<<TWEN);
          while(!(TWCR & (1<<TWINT)));
    }
    unsigned char i2c_Read()
    {
          lcd_clear();
          sprintf(strr,"read%u",TWDR);
          lcd_puts(strr);
        return TWDR;
          TWCR=(1<<TWINT)|(1<<TWEN);
    }
    میکرو قراره توی حالات master receiver و master transmeter کار کنه.
    یه نکته جالب اینکه وقتی پایه sda را از بیرون به زمین وصل میکنم میکرو به وضعیت بدی میره.یعنی میره تابع i2c_Write() را اجرا میکنه.
    لطفا راهنمایی کنید
    آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

    #2
    پاسخ : مشکل با twi سخت افزاری

    مشکل اینجا بود
    کد:
    void i2c_Stop()
    {
          lcd_clear();
          lcd_putsf("stop");
          delay_ms(2000);
          TWCR = (1<<TWINT)|(1<<TWEN)|(1<<TWSTO);
          while(!(TWCR & (1<<TWINT)));///باید حذف بشه
    }
    آیا جهالت نیست که آدمی ساعات شیرین امروز را فدای روزهای آینده کند؟

    دیدگاه

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