سلام...
دوستان من برای یاد گرفتن 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 */ }
مرسی...
دیدگاه