اطلاعیه

Collapse
No announcement yet.

I2C سخت افزاری در Atmel Studio 6

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

    I2C سخت افزاری در Atmel Studio 6

    سلام دوستان
    کسی کتابخانه ای برای کار با I2C توی atmel studio سراغ نداره؟
    http://massoud68.persiangig.com/pict...1406891613.gif

    مشکلتون حل شده ؟؟؟
    پس روی "موضوع به نتیجه رسید" کلیک کنید !! :job:

    #2
    پاسخ : I2C سخت افزاری در Atmel Studio 6

    سلام

    اگه برای DS1307 میخوای اینا هست که بنده از داخل پروژه مهندس کی نژاد برداشتم که فقط واسه خوندن ساعت نوشتم و میشه قسمت ساعتشو حذف کرد برای کاربردای دیگه:
    هدر فایل
    [code=c]
    #ifndef _ds1307_h_
    #define _ds1307_h_
    #include <avr/io.h>
    #define F_CPU 8000000UL
    #include <util/delay.h>
    #define sec 0
    #define min 1
    #define hur 2


    void TWI_init();

    //-------------------------------------------------------------------------------------

    void TWI_start(void);

    //--------------------------------------------------------------------------------

    void TWI_stop(void);

    //--------------------------------------------------------------------------------

    void TWI_write(unsigned char data);

    //--------------------------------------------------------------------------------

    unsigned char TWI_read(unsigned char ack);


    //--------------------------------------------------------------------------------

    unsigned char status(void);

    //--------------------------------------------------------------------------------


    unsigned char write_ds(unsigned char address, unsigned char);


    //--------------------------------------------------------------------------------

    unsigned char read_ds(unsigned char );
    unsigned char bcd_to_dec(unsigned char);
    unsigned char dec_to_bcd(unsigned char);
    #endif
    [/code]

    فایل .c
    [code=c]
    #include "ds1307.h"
    //value decimal


    void TWI_init(){

    TWSR = 0x00;
    TWBR = 2;

    }

    void TWI_start(void)
    {
    TWCR = (1<<TWINT)|(0<<TWEA)|(1<<TWSTA)| (0<<TWSTO)|(0<<TWWC)|(1<<TWEN)|( 0<<TWIE);
    while ((TWCR & (1<<TWINT)) == 0);
    }

    //--------------------------------------------------------------------------------

    void TWI_stop(void)
    {
    TWCR = (1<<TWINT)|(0<<TWEA)|(0<<TWSTA)| (1<<TWSTO)|(0<<TWWC)|(1<<TWEN)|( 0<<TWIE);
    }

    //--------------------------------------------------------------------------------

    void TWI_write(unsigned char data)
    {
    TWDR = data;
    TWCR = (1<<TWINT)|(0<<TWEA)|(0<<TWSTA)| (0<<TWSTO)|(0<<TWWC)|(1<<TWEN)|( 0<<TWIE);
    while ((TWCR & (1<<TWINT)) == 0);
    }

    //--------------------------------------------------------------------------------

    unsigned char TWI_read(unsigned char ack)
    {
    if(ack)TWCR = (1<<TWINT)|(1<<TWEA)|(0<<TWSTA)| (0<<TWSTO)|(0<<TWWC)|(1<<TWEN)|( 0<<TWIE);
    else TWCR = (1<<TWINT)|(0<<TWEA)|(0<<TWSTA)| (0<<TWSTO)|(0<<TWWC)|(1<<TWEN)|( 0<<TWIE);
    while ((TWCR & (1<<TWINT)) == 0);
    return TWDR;
    }

    //--------------------------------------------------------------------------------

    unsigned char status(void)
    {
    return(TWSR & 0xf8);
    }




    unsigned char write_ds(unsigned char address, unsigned char data)
    {
    TWI_start();
    if (status() != 0x08){TWI_stop();return 0;}
    TWI_write(0xd0);
    if (status() != 0x18){TWI_stop();return 0;}
    TWI_write(address);
    if (status() != 0x28) return 0;
    TWI_write(dec_to_bcd(data));
    if (status() != 0x28) return 0;
    TWI_stop();
    return 1;
    }

    //--------------------------------------------------------------------------------

    unsigned char read_ds (unsigned char address)
    { unsigned char data___=0;
    TWI_start();
    if (status() != 0x08){TWI_stop();return 0;}
    TWI_write(0xd0);
    if (status() != 0x18){TWI_stop();return 0;}
    TWI_write(address);
    if (status() != 0x28) return 0;
    TWI_start();
    if (status() != 0x10) return 0;
    TWI_write(0xd1);
    if (status() != 0x40) return 0;
    data___=bcd_to_dec(TWI_read(0));
    if (status() != 0x58) return 0;
    TWI_stop();
    return data___;
    }

    unsigned char bcd_to_dec(unsigned char p){


    return ((((p & 0xF0)>>4)*10)+(p & 0x0F));

    }

    unsigned char dec_to_bcd(unsigned char dec){


    return (dec/10)<<4|(dec%10);
    }


    [/code]
    .The best question deserves a better answer
    =-=-=-=-=-=-=-=-=-==-=-=-=-=-=-=-=-=
    «پناه»می برم «به خدا»
    از عـیبی که ، «امروز» در خود می بینم، و «دیروز» «دیگران را» به خاطر، «هـمان عیـب» ملامت کرده ام.
    محتاط باشیم، در «سرزنش» و «قضاوت کردن دیگران». وقتی نه از «دیروز او» خبر داریم و نه از "فردای خودمان" .

    دیدگاه


      #3
      پاسخ : I2C سخت افزاری در Atmel Studio 6

      خودم یه کتابخانه برای I2C پیدا کردم.
      http://cld.persiangig.com/download/wczyun/dl
      http://massoud68.persiangig.com/pict...1406891613.gif

      مشکلتون حل شده ؟؟؟
      پس روی "موضوع به نتیجه رسید" کلیک کنید !! :job:

      دیدگاه

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