[Help] Cấu Hình I2c bằng USCI

lee_trieu

Gà con
Chào các anh chị !!
em muốn học I2c để giao tiếp với DS1307, vấn đề em gặp phải là em học xong phần USI nhưng con IC của em lại hỗ trợ USCI. giwof không thể giao tiếp được.
Mong các anh chị hướng dẫn em cấu hình USCI để giao tiếp DS1307 qua I2c
Thanks all !!
 

honghiep

Cố Vấn CLB
Staff member
Chào các anh chị !!
em muốn học I2c để giao tiếp với DS1307, vấn đề em gặp phải là em học xong phần USI nhưng con IC của em lại hỗ trợ USCI. giwof không thể giao tiếp được.
Mong các anh chị hướng dẫn em cấu hình USCI để giao tiếp DS1307 qua I2c
Thanks all !!
Về USI và USCI gần như là giống nhau, chỉ khác tên thanh ghi. Bạn xem Family User's Guide để sửa lại tên thanh ghi cho đúng là được :D
 

lee_trieu

Gà con
Chào các anh chị !!
em muốn học I2c để giao tiếp với DS1307, vấn đề em gặp phải là em học xong phần USI nhưng con IC của em lại hỗ trợ USCI. giwof không thể giao tiếp được.
Mong các anh chị hướng dẫn em cấu hình USCI để giao tiếp DS1307 qua I2c
Thanks all !!
Về USI và USCI gần như là giống nhau, chỉ khác tên thanh ghi. Bạn xem Family User's Guide để sửa lại tên thanh ghi cho đúng là được :D
Nó có cấu hình lại các điều kiện START , STOP,..gì không anh?? em thấy trong các thanh ghi có sẵn các BIT điều kiện START, STOP,.....
 

honghiep

Cố Vấn CLB
Staff member
Việc cấu hình lại các điều kiện là tùy theo mục đích sử dụng của bạn
Còn việc cấu hình cho USI và USCI là tương tự nhau, chỉ khác tên thanh ghi thôi
 

Manhdd

Cố Vấn CLB
Staff member
Chào các anh chị !!
em muốn học I2c để giao tiếp với DS1307, vấn đề em gặp phải là em học xong phần USI nhưng con IC của em lại hỗ trợ USCI. giwof không thể giao tiếp được.
Mong các anh chị hướng dẫn em cấu hình USCI để giao tiếp DS1307 qua I2c
Thanks all !!
Bạn tìm trong box C7 có sẵn Driver I2C USCI của MSP430G2553 đó :)
 

lee_trieu

Gà con
Việc cấu hình lại các điều kiện là tùy theo mục đích sử dụng của bạn
Còn việc cấu hình cho USI và USCI là tương tự nhau, chỉ khác tên thanh ghi thôi
Em không hiểu là như thế này:
Trong USI ta phải tạo ra các điều kiện START, STOP,....
còn trong USCI thì có các BIT điều Kiện START,STOP,....
Vậy có phải các BIT đó có thể dùng được như các điều kiện đã cấu hình sẵn hay không>? hay phải cấu hình lại như USI ạ??
 

honghiep

Cố Vấn CLB
Staff member
Việc cấu hình lại các điều kiện là tùy theo mục đích sử dụng của bạn
Còn việc cấu hình cho USI và USCI là tương tự nhau, chỉ khác tên thanh ghi thôi
Em không hiểu là như thế này:
Trong USI ta phải tạo ra các điều kiện START, STOP,....
còn trong USCI thì có các BIT điều Kiện START,STOP,....
Vậy có phải các BIT đó có thể dùng được như các điều kiện đã cấu hình sẵn hay không>? hay phải cấu hình lại như USI ạ??
Sory mình nhầm chút.
2 module này có vài chỗ khác nhau.
Các bit START, STOP này bạn phải tự set mỗi khi muốn tạo ra tín hiệu START hay STOP khi sử dụng I2C với USCI.
 

lee_trieu

Gà con
Việc cấu hình lại các điều kiện là tùy theo mục đích sử dụng của bạn
Còn việc cấu hình cho USI và USCI là tương tự nhau, chỉ khác tên thanh ghi thôi
Em không hiểu là như thế này:
Trong USI ta phải tạo ra các điều kiện START, STOP,....
còn trong USCI thì có các BIT điều Kiện START,STOP,....
Vậy có phải các BIT đó có thể dùng được như các điều kiện đã cấu hình sẵn hay không>? hay phải cấu hình lại như USI ạ??
Sory mình nhầm chút.
2 module này có vài chỗ khác nhau.
Các bit START, STOP này bạn phải tự set mỗi khi muốn tạo ra tín hiệu START hay STOP khi sử dụng I2C với USCI.
vậy là thay vì cấu hình từng điều kiện như USI thì USCI lại set các BIT để có các điều kiện đó đúng chứ ạ??
 

honghiep

Cố Vấn CLB
Staff member
Với USI thì bạn cần set số byte cần truyền, USI sẽ tự tạo ra tín hiệu START và STOP.
Với USCI, sau khi đặt xong các thông số cho module, khi muốn truyền Data, bạn cần tạo tín hiệu START bằng cách set bit UCTXSTT. Kết thúc quá trình truyền, bạn cần set bit UCTXSTP để tạo tín hiệu STOP
 

lee_trieu

Gà con
Với USI thì bạn cần set số byte cần truyền, USI sẽ tự tạo ra tín hiệu START và STOP.
Với USCI, sau khi đặt xong các thông số cho module, khi muốn truyền Data, bạn cần tạo tín hiệu START bằng cách set bit UCTXSTT. Kết thúc quá trình truyền, bạn cần set bit UCTXSTP để tạo tín hiệu STOP
Em xem datasheet sáng giờ mà vẫn chưa biết cách cấu hình cho USCI , anh cho em code mẫu nha !!! để em tìm hiểu theo code đó, học ngược lại với thanh ghi
 

honghiep

Cố Vấn CLB
Staff member
Với USI thì bạn cần set số byte cần truyền, USI sẽ tự tạo ra tín hiệu START và STOP.
Với USCI, sau khi đặt xong các thông số cho module, khi muốn truyền Data, bạn cần tạo tín hiệu START bằng cách set bit UCTXSTT. Kết thúc quá trình truyền, bạn cần set bit UCTXSTP để tạo tín hiệu STOP
Em xem datasheet sáng giờ mà vẫn chưa biết cách cấu hình cho USCI , anh cho em code mẫu nha !!! để em tìm hiểu theo code đó, học ngược lại với thanh ghi
Về hướng dẫn bạn có thể xem các bài giảng trong box C7
Đây là link bài I2C: http://www.payitforward.edu.vn/forum/threads/922/
Các file Drivers bạn xem trong bài đầu tiên của link này: http://www.payitforward.edu.vn/forum/threads/949/
 

lee_trieu

Gà con
Với USI thì bạn cần set số byte cần truyền, USI sẽ tự tạo ra tín hiệu START và STOP.
Với USCI, sau khi đặt xong các thông số cho module, khi muốn truyền Data, bạn cần tạo tín hiệu START bằng cách set bit UCTXSTT. Kết thúc quá trình truyền, bạn cần set bit UCTXSTP để tạo tín hiệu STOP
Em xem datasheet sáng giờ mà vẫn chưa biết cách cấu hình cho USCI , anh cho em code mẫu nha !!! để em tìm hiểu theo code đó, học ngược lại với thanh ghi
Về hướng dẫn bạn có thể xem các bài giảng trong box C7
Đây là link bài I2C: http://www.payitforward.edu.vn/forum/threads/922/
Các file Drivers bạn xem trong bài đầu tiên của link này: http://www.payitforward.edu.vn/forum/threads/949/
Anh ơi ! cái link bài giảng I2c nó die mất rồi, anh có link nào khác hay sample code liên quan đến USCI I2c mode không anh?? trong datashet em đọc mà không hiểu cái hình nói về quá trình Truyền-Nhận dữ liệu :-s
 

honghiep

Cố Vấn CLB
Staff member
Em xem datasheet sáng giờ mà vẫn chưa biết cách cấu hình cho USCI , anh cho em code mẫu nha !!! để em tìm hiểu theo code đó, học ngược lại với thanh ghi
Về hướng dẫn bạn có thể xem các bài giảng trong box C7
Đây là link bài I2C: http://www.payitforward.edu.vn/forum/threads/922/
Các file Drivers bạn xem trong bài đầu tiên của link này: http://www.payitforward.edu.vn/forum/threads/949/
Anh ơi ! cái link bài giảng I2c nó die mất rồi, anh có link nào khác hay sample code liên quan đến USCI I2c mode không anh?? trong datashet em đọc mà không hiểu cái hình nói về quá trình Truyền-Nhận dữ liệu :-s
Bạn nên đọc qua các bài trong những link trên, cũng không nhiều lắm đâu :5cool_sweat:, sẽ tìm được vài sample code trong đó.
Còn về implement I2C bạn có thể xem qua các TUT với PIC: http://www.payitforward.edu.vn/wordpress/tutorials/hitech-pic/bai-6-i2c/
Tuy 2 con khác nhau nhưng I2C là chuẩn giao tiếp, bạn có thể xem TUT đó để biết quá trình truyền, nhận dữ liệu
 

lee_trieu

Gà con
Về hướng dẫn bạn có thể xem các bài giảng trong box C7
Đây là link bài I2C: http://www.payitforward.edu.vn/forum/threads/922/
Các file Drivers bạn xem trong bài đầu tiên của link này: http://www.payitforward.edu.vn/forum/threads/949/
Anh ơi ! cái link bài giảng I2c nó die mất rồi, anh có link nào khác hay sample code liên quan đến USCI I2c mode không anh?? trong datashet em đọc mà không hiểu cái hình nói về quá trình Truyền-Nhận dữ liệu :-s
Bạn nên đọc qua các bài trong những link trên, cũng không nhiều lắm đâu :5cool_sweat:, sẽ tìm được vài sample code trong đó.
Còn về implement I2C bạn có thể xem qua các TUT với PIC: http://www.payitforward.edu.vn/wordpress/tutorials/hitech-pic/bai-6-i2c/
Tuy 2 con khác nhau nhưng I2C là chuẩn giao tiếp, bạn có thể xem TUT đó để biết quá trình truyền, nhận dữ liệu
Tàm thời thì em dùng driver của các anh mà em tìm được trên diễn đàn. là cái file này ne anh
https://www.dropbox.com/s/39fa2sd0krtwhhm/Drivers.zip

vấn đề làm dữ liệu trong Ds1307 là các số BCD làm thế nào để chuyển sang thập phân cho chúng hiện ra LCD anh??
 

Manhdd

Cố Vấn CLB
Staff member
Anh ơi ! cái link bài giảng I2c nó die mất rồi, anh có link nào khác hay sample code liên quan đến USCI I2c mode không anh?? trong datashet em đọc mà không hiểu cái hình nói về quá trình Truyền-Nhận dữ liệu :-s
Do "sự cố dropbox" nên các link bài giảng của C7 bị mất hết. Mình đã gom lại thành một bộ và edit link rồi :)
 

lee_trieu

Gà con
Anh ơi ! cái link bài giảng I2c nó die mất rồi, anh có link nào khác hay sample code liên quan đến USCI I2c mode không anh?? trong datashet em đọc mà không hiểu cái hình nói về quá trình Truyền-Nhận dữ liệu :-s
Do "sự cố dropbox" nên các link bài giảng của C7 bị mất hết. Mình đã gom lại thành một bộ và edit link rồi :)
em tải được cái bộ driver của anh rồi:1cool_byebye:nhưng vẫn chưa đọc được DS1307 để hiển thị lên LCD
PHP:
void i2c_read(unsigned char AddRes,unsigned char numbyte,unsigned char *poirev)
anh cho em hỏi, cái tham số *poirev để nhận dữ liệu từ DS1307 ra đúng ạ??
em viết i2c_read(0x00,8,*data); để lấy 7 thanh ghi của DS1307 gán vào mảng data đúng không anh???
 

omega5161

Thành Viên PIF
bạn chỉ cần viết i2c_read(0x00,8,data); là đủ, về cái này bạn nên xem lại phần pointer nha
 

lee_trieu

Gà con
bạn chỉ cần viết i2c_read(0x00,8,data); là đủ, về cái này bạn nên xem lại phần pointer nha
nếu em muốn hiện giá trị trong data ra LCD thì phải xữ lý với số BCD như thế nào vậy anh ????
vì các giá trị trong các thanh ghi của DS1307 là các số BCD việc chuyển nó sang số nhị phân 8 bit thì em làm được( lấy giá trị AND với 0x0f và 0xf0) nhưng em gặp khó khăn ở việc hiển thị nó lên LCD. anh hướng dẫn em chỗ này với !!:-s
 

omega5161

Thành Viên PIF
trong diver LCD của clb có sẵn hàm lcd_put_num(); em mở ra đọc đi, có chú thích rất đầy đủ rồi đó
 

lee_trieu

Gà con
trong diver LCD của clb có sẵn hàm lcd_put_num(); em mở ra đọc đi, có chú thích rất đầy đủ rồi đó
Em viết như thế này:
PHP:
#include "msp430g2553.h"
#include "lcd.c"
#include "i2c.c"
unsigned char *datarev;
long int i;
void main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
//P1REN = BIT6 + BIT7;
P1DIR = 0xFC;
P2DIR |= 0xff;
lcd_init();
i2c_init(0x68); //Them cai ham nay thi khong hien gi len LCD dc nua???
unsigned char datawr[]={0x00,0x08,0x03,0x05,0x15,0x11,0x12};
i2c_write(0x00,7, datawr);
 
 
 
 
while(1)
  {
 
  lcd_puts ("Hello Word !!");
 
  i2c_read(0x00,8,datarev);
  __delay_cycles(1000000);
  lcd_clear();
 
  i=datarev[0];
 
  lcd_put_num (i, 0, 0);
  __delay_cycles(1000000);
  lcd_clear();
  }
}

Không hiểu sao khi em không viết các lênh giao tiếp với DS1307, chỉ cho hiển thị một dngf "Hello word" thì nó chạy (Em test trực tiếp trên mạch thật)
nhưng khi em viết code giao tiếp với DS1307 vào thì màn hình nó trống rỗng???? các anh xem code giúp em có lỗi chỗ nào không ạ???:((
 
Top