اطلاعیه

Collapse
No announcement yet.

از دوستانی که عملی با توابع i2c در کد ویژن کار کرده اند کمک میخوام.

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

    از دوستانی که عملی با توابع i2c در کد ویژن کار کرده اند کمک میخوام.

    من با استفاده از توابع i2c یک برنامه نوشته ام که رجیستر 1 یک slave را میخونه و روی lcd به وسیله مگا 16 نمایش می ده.وهمین برنامه را به وسیله twi هم نوشته ام. جوابی که باید بگیرم این است که با ید با خوندن رجیستر slave که یک بایت است عدد از 0تا 255 را بگیرم . ولی در برنامه ای که با توابع i2c نوشته ام به جای 0تا 255 اعداد 128تا 255 را می گیرم .ولی در برنامه ای که با twi نوشته ام جواب درست رامی گیرم.
    من هر دوی این برنامه ها را در ادامه آوردم واز دوستانی که با i2c آشنا هستند می خواهم که ببینند آیا این برنامه مشکلی دارد یا نه.وسوال دیگر این است که فرکانس i2c در این کار باید 100 کیلو هرتز باشد آیا این فرکانس در کد ویژن خودکار تعریف میشه (البته این فرکانس با فرکانس اصلی میکرو که 4 مگا هست فرق می کنه) . دو برنامه هم به این صورت هستند که من تو ضیحاتی را هم که خودم فهمیده ام را دربرنامه نوشته ام واگر اشتباهی دارد بگویید . باتشکر

    کد:
    #include <mega16.h> 
    #include <stdio.h>
    #include <stdlib.h>
    
    // I2C Bus functions
    #asm
      .equ __i2c_port=0x12 ;PORTD
      .equ __sda_bit=0
      .equ __scl_bit=1
    #endasm
    #include <i2c.h>
    
    // Alphanumeric LCD Module functions
    #asm
      .equ __lcd_port=0x18 ;PORTB
    #endasm
    #include <lcd.h>
    char s[21];
    
    void main(void)
    {
    // I2C Bus initialization
    i2c_init();
    
    // LCD module initialization
    lcd_init(16);
    
    while (1)
    {  
    unsigned char h; 
    unsigned int h;
    lcd_gotoxy(0,0);
    i2c_start();
    i2c_write(0xC0); 
    i2c_write(1);
    i2c_start();
    i2c_write(0xC1);
    h=i2c_read(0);
    i2c_stop(); 
    
    sprintf(s,"C = %3d.%d\xDF",h/10,h%10);
    
    lcd_puts(s);
    [code/][/left]
     [font=Verdana] برنامه دوم: : [/font]                         
    
    
    
    
    [code]
    #include <mega16.h>
    #include <stdio.h>
    #include <stdlib.h>
    #include <lcd.h>
    
    #asm
     .equ __lcd_port=0x1B ;PORTA
    #endasm
    unsigned int i2c_readf(char ,char );
    char s[21];
    
    void main(void)
     { 
     unsigned int angle=0;
     TWBR=0x0C;                                  فرکانس برابر 100کیلو هرتز با پالس ساعت 4 مگا هرتز
     lcd_init(16);
     
      while(1)
     {
      angle = i2c_readf(0xC0,1) <<8;               
                   
      sprintf(s,"degree=%3d.%d\xDF",angle/10,angle%10);      
      lcd_gotoxy(0,0);
      lcd_puts(s); 
     }
    } 
    
    unsigned int i2c_readf(char address, char reg)
     {
     char read_data = 0; 
    
     TWCR = 0xA4;                فرستاده می شود STARTشرط TWSTAو TWENدراین دستور با یک کردن بیتهای 
                       
     while(!(TWCR & 0x80));         یک شودTWINT منتظرمیشود تا پرچم
     
     TWDR = address;              ریخته میشود TWDR آدرس در
     
     TWCR = 0x84;              رایک میکند تا ارسال ادرس اغاز شودTWINTبیت
    
     while(!(TWCR & 0x80));        یک شودTWINT منتظرمیشود تا پرچم
     
     TWDR = reg;                     می ریزد TWDRشماره رجیستری که میخواهیم از ان بخوانیم رادر
     
    TWCR = 0x84;              رایک میکند تا ارسال ادرس اغاز شودTWINTبیت
     
    while(!(TWCR & 0x80));        یک شودTWINT منتظرمیشود تا پرچم
    
     
     TWCR = 0xA4;              فرستاده می شود STARTشرط TWSTAو TWENدراین دستور با یک کردن بیتهای
     
     while(!(TWCR & 0x80));         یک شودTWINT منتظرمیشود تا پرچم 
     
     TWDR = address+1;          ریخته میشود TWDRآدرس که بیت اخرش یک شده در
     
     while(!(TWCR & 0x80));        یک شودTWINT منتظرمیشود تا پرچم 
     
     TWCR = 0x84;              رایک میکند تا ارسال ادرس اغاز شودTWINTبیت
     
     while(!(TWCR & 0x80));         یک شودTWINT منتظرمیشود تا پرچم 
     
     read_data = TWDR;           را درون متغیر می ریزدTWDR داده های 
    
     TWCR = 0x94;              TWSTOوTWENوTWINTبایک کردن بیتهای STOPفرستادن
     
     return read_data;              داده متغیر را برمی گرداند       
    
    }
    [/code]

    #2
    پاسخ : از دوستانی که عملی با توابع i2c در کد ویژن کار کرده اند کمک میخوام.

    من همین چند هفته پیش کار کردم و جوای نگرفتم. مثل بقیه چیزای این کامپیلر مضخرفه. شما از این فایل استفاده کنید.
    http://rapidshare.com/files/197339560/24Cxx.rar.html

    کسی نیست واسه من دعوتنامه persianGig بفرسته؟
    بت در بغل و به سجده پیشانی ما کافر زده خنده بر مسلمانی ما
    اسلام به ذات خود ندارد عیبی هر عیب که هست در این مسلمانی ماست

    دیدگاه


      #3
      پاسخ : از دوستانی که عملی با توابع i2c در کد ویژن کار کرده اند کمک میخوام.

      سلام.
      اقا من الان برات یدونه دعوتنامه فرستادم!

      دیدگاه

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