اطلاعیه

Collapse
No announcement yet.

سرعت بسیار پایین میکرو در ارتباط I2C

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

    سرعت بسیار پایین میکرو در ارتباط I2C

    سلام دوستان ،
    من یک CMPS03 رو به یک میکرو وصل کردم ، بعد اومدم باد کد زیر اطلاعات رو میخونم ، اما متاسفانه خیلی طول میکشه که بخونه حدود 6 - 7 ثانیه ای طول میکشه . لطفا راهنمایی کنید ! فیوزبیت ها رو چه جوری باید تنظیم کنم ؟
    کد:
    2c_start();
    i2c_write(0xc0);
    i2c_write(0x01);
    i2c_start();
    i2c_write(0xc1);
    delay_ms(1);
    data = i2c_read(0);
    i2c_stop();
    lcd_clear();
    delay_ms(500);
    val2lcd(data,0,0);

    #2
    پاسخ : سرعت بسیار پایین میکرو در ارتباط I2C

    سلام.
    لطفاً تنظیمات اولیه رو هم بذارید. شاید اشکال از تنظیمات رجیسترها باشه.
    بهتره کل برنامه رو بذارید.
    تشکر لازم نیست!

    دیدگاه


      #3
      پاسخ : سرعت بسیار پایین میکرو در ارتباط I2C

      امید وارم که این بدرد به خور باشه.

      در ضمن من با پرو گرامر هاتل پروگرام کردم به حالت اولیه فیوز بیت ها دست نزدم و کار کرد .

      /
      #include <mega8.h>
      #include <stdio.h>
      #include <stdlib.h>
      #include <i2c.h>
      #include <delay.h>
      #include <lcd.h>
      void start();
      void process();
      interrupt [EXT_INT0] void ext_int0_isr(void)
      {
      // Place your code here
      }
      int data;
      #asm
      .equ __i2c_port=0x15
      .equ __sda_bit=4
      .equ __scl_bit=5
      #endasm
      #asm
      .equ __lcd_port=0x12
      #endasm
      //************************************************** **
      void main(void)
      {
      PORTD=0x08;
      DDRD=0x08;
      lcd_init(20);
      i2c_init();
      //************************************************** **
      while (1)
      {
      start();
      }
      }
      //************************************************** **
      void start()
      {
      lcd_clear();
      i2c_start();
      i2c_write(0xc0);
      i2c_write(0x01);
      i2c_start();
      i2c_write(0xc1);
      data=i2c_read(0);
      data=data*1.4117647058823529411764705882353;
      i2c_stop();
      process();
      }
      //************************************************** **
      //************************************************** **
      void process()
      {
      if(data < 45 || data > 315)
      {
      lcd_clear();
      lcd_gotoxy(0,0);
      lcd_putsf("north"
      delay_ms(20);
      }
      if(data < 135 && data > 45)
      {
      lcd_clear();
      lcd_gotoxy(0,0);
      lcd_putsf("east"
      delay_ms(20);

      }
      if(data < 215 && data > 135)
      {
      lcd_clear();
      lcd_gotoxy(0,0);
      lcd_putsf("soth"
      delay_ms(20);
      }
      if(data < 315 && data > 215)
      {
      lcd_clear();
      lcd_gotoxy(0,0);
      lcd_putsf("west"
      delay_ms(20);
      }
      }
      //************************************************** **

      ضمنا با توجه به اینکه کامپس عددی بین 0-255 به ما تحویل می دهد، باید آنرا تبدیل به 0-360 کنیم،برای اینکار دیتا را در عدد 1.41 (این عدد از تقسیم 360 بر 255 حاصل شده) ضرب می نمایم
      خداوندا
      از بچگی به من آموختندهمه را دوست بدار حال که بزرگ شده ام و کسی را دوست می*دارم می گویند:
      فراموشش کن
      دکتر علی شریعتی

      دیدگاه


        #4
        پاسخ : سرعت بسیار پایین میکرو در ارتباط I2C

        ممنون دوستان مشکل از کیت و مدارات بود ، با چاپ یک مار جدا تونستم نتیجه بگیر بسیار دقیق .

        دیدگاه

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