سلام
شما باید به پالت I2C مراجعه کنید و پورتی که میخوایید ایسی رو به اون متصل کنید رو مشخص کنید ، بعد در همون پنجره ایسی رو که میخوایید براش برنامه بنیوسید رو انتخاب کنید (تیکش رو بزنید ) (نیازی بخش i2c(2wire) نیست )
بخش i2c(2wire) برای ایجاد ارتباط سریال به میکرو ها و... هست در این بخش شما باید خوتون توابع رو بنویسید و کتابخونه ای وجود نداره .
در بخش i2c کتابخونه های اماده برای بعضی از ایسی های I2C وجود داره و شما فقط باید ایسی رو انتخاب کنید تا کد اون به برنامه اضافه بشه .
اینم یه مثال که قبلا داشتم :
کد:
include <mega16.h>
#include <stdio.h>
#include <delay.h>
#include <stdlib.h>
#include <string.h>
// I2C Bus functions
#asm
.equ __i2c_port=0x12 ;PORTD
.equ __sda_bit=0
.equ __scl_bit=1
#endasm
#include <i2c.h>
// DS1307 Real Time Clock functions
#include <ds1307.h>
// Alphanumeric LCD Module functions
#asm
.equ __lcd_port=0x15 ;PORTC
#endasm
#include <lcd.h>
// Declare your global variables here
unsigned int di,moi,yi;
void main(void)
{
// Declare your local variables here
unsigned char h,m,s;
unsigned char d,mo,y;
char lcda[16],lcdb[16];
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x01;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x03;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;
// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// I2C Bus initialization
i2c_init();
// DS1307 Real Time Clock initialization
// Square wave output on pin SQW/OUT: On
// Square wave frequency: 1Hz
rtc_init(0,1,0);
// LCD module initialization
lcd_init(16);
di=29;moi=12;yi=86;
//i2c_start();
rtc_set_time(23,59,53);
rtc_set_date(di,moi,yi);
//i2c_stop();
while (1)
{
// Place your code here
// i2c_start();
rtc_get_time(&h,&m,&s);
rtc_get_date(&d,&mo,&y);
// i2c_stop();
sprintf(lcda,"Time:%02u:%02u:%02u",h,m,s);
sprintf(lcdb,"Date:%02u/%02u/%02u",d,mo,y);
lcd_clear();
lcd_gotoxy(0,0);
lcd_puts(lcda);
lcd_putsf(" ");
if(h<=12 ) lcd_putsf("AM");
else lcd_putsf("PM");
lcd_gotoxy(0,1);
lcd_puts(lcdb);
delay_ms(1000);
};
}
موارد زیر رو هم باید رعایت کنید تا جواب بگیرید :
1- کریستال متصل به ds1307 حتی الامکان در نزدیک ایسی باشد
2- در صورتی که روغن لحیم و... برای لحیم کردن برد استفاده میکنید ، اطراف کریستال را کاملا پاک کنید .