سلام...
دوستان من برای یاد گرفتن i2c eeprom رو با i2c وصل کردم و جواب گرفتم بعدش اومدم این سنسور رو راه بندازم اما نشد :cry:
سوال های ابتدایی: ازونجا که این آی سی ack میده واسه خوندنش باید i2c_read(1)بذاریم یا همون صفر؟
2. این آی سی رنج ولتاژش 2.5 تا 3.5 هست این قضیه مهمه تو pull up کردن پایه های sck sda؟
این برنامه ی منه:
خواستید فایل شبیه سازیش تو پروتئوس رو هم میزارم :cry:
مرسی...
دوستان من برای یاد گرفتن i2c eeprom رو با i2c وصل کردم و جواب گرفتم بعدش اومدم این سنسور رو راه بندازم اما نشد :cry:
سوال های ابتدایی: ازونجا که این آی سی ack میده واسه خوندنش باید i2c_read(1)بذاریم یا همون صفر؟
2. این آی سی رنج ولتاژش 2.5 تا 3.5 هست این قضیه مهمه تو pull up کردن پایه های sck sda؟
این برنامه ی منه:
کد:
Project :
Version :
Date : 12/18/2012
Author : ariahope
Company :
Comments:
Chip type : ATmega32L
Program type : Application
AVR Core Clock frequency: 1.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 512
*****************************************************/
#include <mega32.h>
// I2C Bus functions
#asm
.equ __i2c_port=0x18 ;PORTB
.equ __sda_bit=3
.equ __scl_bit=4
#endasm
#include <i2c.h>
// Declare your global variables here
#include <delay.h>
char ic_address =0x80;// ic address from datasheet
unsigned char read_i2c(unsigned char reg)
{
unsigned char data;
i2c_start();
i2c_write(ic_address);
i2c_write(reg);
i2c_start();
i2c_write(ic_address | 1);
data= i2c_read(0);
return data;
}
void write_i2c(unsigned char reg, unsigned char data)
{
i2c_start();
i2c_write(ic_address);
i2c_write(reg);
i2c_write(data);
i2c_stop();
delay_ms(20);
}
void main(void) {
unsigned char i;
DDRD=0xFF;
// initialize the I2C bus //
i2c_init();
// write the byte 55h at address e6h //
write_i2c(0xe6,0x03);
// read the byte from address e7h //
i=read_i2c(0xe7);
PORTD=i;
while (1); /* loop forever */
}
مرسی...


دیدگاه