PDA

View Full Version : Giao tiếp I2C


nvquyvn
11-08-2011, 08:10 PM
Mình đanh học giao tiếp i2c , mình đo nhiệt độ sử dụng IC số TC74 nhưng mô phỏng ko chạy được. Bác nào biết chỉ em với .

nvquyvn
11-08-2011, 11:06 PM
Ah file mp mình nối sai dây phải là sclk=pin_c3, sda=pin_c4 . mình ko hiểu sao nó chạy sai ra kêt quả 255 nhỉ ???

nvquyvn
25-08-2011, 06:04 AM
Chan qua , cha ai them qtam den , toan la .....

DINH THANH SANG
25-08-2011, 08:05 AM
Mình đanh học giao tiếp i2c , mình đo nhiệt độ sử dụng IC số TC74 nhưng mô phỏng ko chạy được. Bác nào biết chỉ em với .

bạn tham khảo bài này nhé.
[code=
#include <htc.h>
#include <stdio.h>
#include "lcd.h"
#include "i2c.h"

//__CONFIG(INTIO & WDTDIS & PWRTEN & MCLREN & UNPROTECT & DUNPROTECT & BORDIS & IESODIS & FCMDIS & LVPDIS);

char khoi_dong_sensor();
char doc_nhiet_do_sesor();


char t;

void main()
{
unsigned int i;

lcd_init();
i2c_init();

if(khoi_dong_sensor())
{
printf("\fI2C Sensor fails");
while(1);
}

printf("\f----- Lab5 -----\n***I2C Sensor***");

// delay 3s
for(i=0;i<30;i++)
__delay_ms(100);

while(1)
{
t = doc_nhiet_do_sesor();
printf("\fNhiet do phong:\n %d", t);
__delay_ms(100);
__delay_ms(100);
__delay_ms(100);
}

}

void putch(char c)
{
lcd_putc(c);
}

char khoi_dong_sensor()
{
i2c_start();
if(i2c_write(0x90)) return -1;
if(i2c_write(0x00)) return -1;
i2c_stop();
return 0;
}

char doc_nhiet_do_sesor()
{
char nhiet;
i2c_start();
if(i2c_write(0x90)) return -1;
if(i2c_write(0x00)) return -1;
i2c_start();
if(i2c_write(0x91)) return -1;

nhiet = i2c_read(1);
i2c_stop();
//return nhiet;
}[\code]

nvquyvn
05-09-2011, 12:45 PM
e thu rui ko duoc !
co ai giup minh vs .
#include "16f877a.h"
#device *=16
#use delay(clock=20M)
#fuses nowdt, hs, noput, nodebug,noprotect, nobrownout, nolvp, nocpd, nowrt
#use i2c(master,sda=pin_c4,scl=pin_c3)
#include "lcd.c"


void main()
{

int i,temp;
lcd_init();
lcd_putc("STARTING");
for(i=0;i<=10;i++)
{
lcd_putc(".");
delay_ms(5);
}
lcd_putc("\f");
while(1)
{
// khoi dong sensor
i2c_start();
i2c_write(0x9B);
i2c_write(0x00) ;
i2c_stop();
// doc nhiet do
i2c_start();
i2c_write(0x9B);
i2c_write(0x00);
i2c_start();
//if(i2c_write(0x91))
temp=i2c_read(1);
i2c_stop();

lcd_putc(" Nhiet do phong ");
lcd_putc("\n");
printf(lcd_putc,"\r %u",temp);
delay_ms(100);
}
}