HELP đọc ghi dữ liệu với eeprom thông qua I2C

xe đạp

Trứng gà
em có viết một đoạn chương trình dùng để ghi dữ liệu vào eeprom sau đó đọc ngược giá trị này và hiển thị ra PORTB nhưng mãi mà nó ko chạy, kiểm tra thì ko biết nó sai chỗ nào. chương trình dùng thư viện I2C.c trên diễn đàn. đây là code của nó (em dùng HT PIC V9.83 hay 80 gì đấy ko nhớ rõ lắm) mọi người kiểm tra giúp em cái, nếu sử dụng HT PIC trong tut của 4rum thì chỉ cần đổi 2 dòng config là được



Code:
//*********************************************************
#include <htc.h>
#include "i2c.h"
 
__CONFIG(FOSC_HS & WDTE_OFF & PWRTE_ON & MCLRE_ON & LVP_OFF & DEBUG_OFF &
BOREN_OFF & CP_ON & CPD_ON & FCMEN_OFF & IESO_OFF);    //1st config. word
__CONFIG(BOR4V_BOR21V);                                //2nd config. word
//---------------------------------------------------------
 
void delay(int time)
{
    int i,j;
    for(i=0;i<time;i++)
    {
        for(j=0;j<time;j++)
        {;}
    }
}
 
 
//---------------------------------------------------------       
void main()
{
    ANSEL=0;
    ANSELH=0;
    TRISB=0x00;
    PORTB=0x00;
   
    i2c_init();
 
    i2c_start();
    i2c_write(0xA0);        // gui dia chi EEPROM + W
    i2c_write(0x02);        // gui dia chi thanh ghi cua eeprom
    i2c_write(0xAA);        // ghi du lieu vao eeprom
    i2c_stop();                // dung qua trinh ghi du lieu
   
    delay(100);
   
    i2c_start();
    i2c_write(0xA0);        // gui dia chi eeprom + W
    i2c_write(0x02);        // gui dia chi thanh ghi cua eeprom
    i2c_stop();                // tao dieu kien Restart
    i2c_start();            //
    i2c_write(0xA1);        // gui dia chi eeprom +R
    PORTB=i2c_read(1);        // doc gia tri trong eeprom va gan cho portB
    i2c_stop();                // dung qua trinh doc du lieu
   
    while(1);                // dung chuong trinh tai day   
}
 

xe đạp

Trứng gà
ôi, ko ai xem giúp em cái, em mò cả tuần rồi mà ko biết sai chỗ nào, ai có code mẫu giao tiếp i2c của pic cho em xin cũng được, cả tuần ngồi mò ko ra mệt quá trời luôn
 

tungbk

Cố Vấn CLB
Staff member
E coi code ví dụ ở bài I2C giao tiếp DS1307.
Chú ý trong PIC có sẵn EEPROM 256 byte có thể dùng ngay nếu dữ liệu cần lưu nằm trong tầm này.
Còn với EEPROM sau khi ghi vào thì nên delay khoảng 5-10ms rồi mới đọc ra lại. Dùng luôn hàm __delay_ms(5) luôn khỏi phải viết hàm riêng.
 

xe đạp

Trứng gà
thật ra giao tiếp với con 24Cxx là để hiểu được cách ghi đọc dữ liệu thông qua i2c thôi anh ah, bài DS1307 em cũng down code về build ra mà chạy chả thấy gì
 

xe đạp

Trứng gà
em dùng code của anh Manhdd, em thử cái code của anh
naebolo
trong link trên mà vẫn ko được, có lẽ nào máy em có vấn đề không nhỉ??? nhưng em thử build các bài khác vẫn ổn mà. để chắc ăn mai cài lại máy thử coi
 

honghiep

Cố Vấn CLB
Staff member
Bạn kiểm tra phần cứng xem có vấn đề gì không? :-(
 

tungbk

Cố Vấn CLB
Staff member
K biết e chạy xún mạch thực chưa hay chỉ mô phỏng? Vì I2C mô phỏng trên Proteus k chạy.
 

xe đạp

Trứng gà
em cũng chạy thật luôn rồi anh ah, nhưng cũng ko ăn thua, hay nó có bị nhiễu giống như các bạn làm DS1307 không nữa.
 
Top