PIC Vietnam

PIC Vietnam (http://www.picvietnam.com/forum/index.php)
-   Giao tiếp USB, CAN, I2C, SPI, USART... (http://www.picvietnam.com/forum/forumdisplay.php?f=45)
-   -   Giao tiếp I2C (http://www.picvietnam.com/forum/showthread.php?t=611)

falleaf 18-09-2006 04:27 PM

Có 2 application notes về master và slave được M cung cấp khá chi tiết, 734, 735 thì phải, không nhớ chính xác là cái nào, bạn có thể tìm hiểu thêm về nó.

Tutorial về I2C bằng MPASM thì Phạm Đức Mạnh đã cung cấp rồi thì phải, bạn tìm lại bài viết của mafd47a.

Chúc vui.

thanhha 18-09-2006 05:12 PM

Vâng! Đúng như Bác F nói !! Hà đã load tài liệu ASM về I2C này ở đây:
http://www.microchip.com/stellent/id...t6_NextRow=101

+Tài liệu AN735 nói về Master.
+Tài liệu AN734 nói về Slave.

Theo Hà nghĩ, mình có thể dùng tài liệu này
để tham khảo tự viết lệnh I2C mới trong CCS C thì rất tốt.
Chương trình viết hay lắm!!

Bạn tham khảo đi !

namqn 21-09-2006 06:26 PM

Các bạn tham khảo thêm ở đây về I2C:

http://namqn.byethost7.com/Commu.php
Thân,

hoangminh1234 03-10-2006 02:23 PM

Anh oi, em chua hieu ve I2C lam va tren dien dan lai chang thay ai noi ve chuyen nay. Trong giao thuc I2C trong CCS co ham i2c_read(), nhung ham do chi la ham doc tu master truyen xuong slave dung ko a? Cai ma tui em dang can la nhu vay: master truyen xuong 10byte (10byte nay chua gia tri la vi tri muon dieu khien dong co rc), sau do slave se doc 10 byte do va xuat gia tri dieu khien cho tung dong co ung voi tung byte da duoc truyen tu master. Nhung em ko thay ai noi ve chuyen nay va co thac mac nhu sau, anh chi dum em nhe
- Du lieu tu master truyen xuong se vao dau trong slave(eeprom?),neu trong eeprom thi lam sao de con slave co the lay ra va su dung cac gia tri do?

falleaf 03-10-2006 02:41 PM

Trích:

Nguyên văn bởi hoangminh1234 (Post 5230)
Anh oi, em chua hieu ve I2C lam va tren dien dan lai chang thay ai noi ve chuyen nay. Trong giao thuc I2C trong CCS co ham i2c_read(), nhung ham do chi la ham doc tu master truyen xuong slave dung ko a? Cai ma tui em dang can la nhu vay: master truyen xuong 10byte (10byte nay chua gia tri la vi tri muon dieu khien dong co rc), sau do slave se doc 10 byte do va xuat gia tri dieu khien cho tung dong co ung voi tung byte da duoc truyen tu master. Nhung em ko thay ai noi ve chuyen nay va co thac mac nhu sau, anh chi dum em nhe
- Du lieu tu master truyen xuong se vao dau trong slave(eeprom?),neu trong eeprom thi lam sao de con slave co the lay ra va su dung cac gia tri do?

Bạn đọc thật kỹ tutorial của picvietnam do Linh viết ở ngay bài đầu tiên của luồng này (falleaf gửi thay cho Linh).

Linh viết bài này có một số vấn đề truyền tải chưa được rõ lắm do cách dùng câu chữ mà thôi. F viết lại đôi chút như sau:

trong giao tiếp I2C, có thể có (1 master và 1 slave) hoặc (1master và nhiều slave). Đây là giao thức chuẩn. Tuy nhiên, cải tiến giao thức này một chút, chúng ta sẽ có mạng I2C (nhiều master, mỗi con thay phiên làm master)..

Chúng ta chỉ đề cập giao tiếp I2C ở dạng chuẩn, tức là có duy nhất 1 master trong mạng.

Khi muốn dữ liệu truyền từ A tới B. Có nhiều trường hợp xảy ra như sau:
A là master, B là slave: khi đó A sẽ gửi một loạt dữ liệu có định dạng sẵn (các bạn xem lại định dạng I2C), thì trong định dạng đó có bao gồm mấy thông tin như sau (master muốn đọc hay muốn ghi? địa chỉ của slave là bao nhiêu? master có muốn kiểm tra bằng xung ACK, tức là xung báo đã truyền nhận đầy đủ hay không? và nội dung dữ liệu (nếu master muốn ghi), và địa chỉ thanh ghi của slave (nếu master muốn đọc một thanh ghi nào đó trong slave).

Nếu A là slave, thì slave không được quyền muốn. Khi nào master kêu nhận thì phải nhận, khi nào master kêu gửi, thì phải gửi. Slave thì không được quyền muốn. Nếu muốn thì làm nô tì I-Sau-ra :D.

Còn nếu cả A và B đều là slave, khi master cần truyền dữ liệu từ A sang B, thì Master phải yêu cầu A gửi cho master, nhận xong, master gửi lại cho B.

Như vậy vấn đề học giao tiếp I2C, chỉ đơn giản là học cách định dạng dữ liệu trong frame truyền của I2C (mô tả sơ bộ ở trên), và học cách nối mạng giữa mạng điện áp thấp và điện áp cao (vd: một thiết bị I2C 3.3V, kết nối với thiết bị 5V thì làm thế nào?).. kiểu như vậy thôi là các bạn đã có thể thiết kể rất nhiều ứng dụng với I2C, và làm việc với rất nhiều thiết bị rồi.

Chúc vui.

hoangminh1234 03-10-2006 04:01 PM

tức là con tớ hoàn toàn bị động trong trường hợp này sao? Nó không thể nào lấy tí thông tin nào đem bán cho các điệp viên để kiếm chút cháo sao? Buồn vậy! Vậy theo anh làm sao giải quyết bài toán mà tụi em đang gặp phải nhỉ:

Một con chủ truyền 10 byte cho con tớ và con tớ có toàn quyền sử dụng 10 byte này??
anh cho em xin ý kiến nhé

Encoder 03-10-2006 06:05 PM

Trích:

Nguyên văn bởi falleaf (Post 4956)
Đơn giản vậy thôi, các em vừa làm xong một bài hướng dẫn I2C khá đầy đủ rồi :)

Chưa đâu bác. Còn viết I2C trên HTPIC thì sao. Bác đã viết chương trình nào chưa, cho em xin tí code.

hoangminh1234 03-10-2006 06:17 PM

Trích:

Nguyên văn bởi falleaf (Post 5232)
và địa chỉ thanh ghi của slave (nếu master muốn đọc một thanh ghi nào đó trong slave).

cai nay sao em ko thay trong CCS noi nang gi toivay anh? Nếu ta biết được địa chỉ thanh ghi bên slave thì hoàn toàn có thể lấy ra xài rồi.
Em vừa đọc cái SPI, thấy con tớ đọc dữ liệu trong thanh ghi SSPBUF ( được master truyền xuống) sau đó xuất ra port B.
file: http://ww1.microchip.com/downloads/en/devicedoc/spi.pdf
Nó làm em nghĩ rằng ko biết mình có thể làm tương tự với i2c ko?? cao huynh nào rành i2c cho ý kiến nhé

falleaf 03-10-2006 09:46 PM

Trích:

Nguyên văn bởi hoangminh1234 (Post 5234)
Một con chủ truyền 10 byte cho con tớ và con tớ có toàn quyền sử dụng 10 byte này??
anh cho em xin ý kiến nhé

Khi con Slave nhận được dữ liệu, thì nó nằm trong thanh ghi đệm, thanh ghi nào thì F quên rồi, và khi đã nằm trong bộ đệm của nó, thì nó có toàn quyền sử dụng. Nó thích làm gì thì làm.

Các bạn lưu ý rằng, F nói trường hợp nâng cao, thì chúng ta hoàn toàn có quyền sử dụng mạng Multi Master. Khi bạn setup chip ở chế độ Slave, thì nó thụ động. Nhưng hãy thử nghĩ, tôi làm slave cho mạng này, và làm master của một mạng khác, vậy thì có được không? Vì tôi có tới 40 chân chứ không phải 2 chân.

Vậy nếu tôi làm master cho một mạng khác, mà trong đó slave của tôi lại là master của cái mạng mà tôi làm slave :). Hoàn toàn được.

Nhưng vấn đề nâng cao ở chỗ nữa, nếu làm như vậy, tôi phải tốn 4 dây để làm 2 mạng. Vấn đề trước đây hình như F đặt ra cho Linh, nhưng Linh chưa giải quyết xong, đó là Multi Master trong một mạng dùng 2 dây thôi.

Vấn đề này F tiếp tục treo ở đây chờ người giải quyết.

Chúc vui.

falleaf 03-10-2006 09:47 PM

Trích:

Nguyên văn bởi hoangminh1234 (Post 5237)
cai nay sao em ko thay trong CCS noi nang gi toivay anh? Nếu ta biết được địa chỉ thanh ghi bên slave thì hoàn toàn có thể lấy ra xài rồi.
Em vừa đọc cái SPI, thấy con tớ đọc dữ liệu trong thanh ghi SSPBUF ( được master truyền xuống) sau đó xuất ra port B.
file: http://ww1.microchip.com/downloads/en/devicedoc/spi.pdf
Nó làm em nghĩ rằng ko biết mình có thể làm tương tự với i2c ko?? cao huynh nào rành i2c cho ý kiến nhé

Bạn đọc lại frame truyền từ Master đến Slave ở hai chế độ ghi và đọc

Chúc vui.

hoangminh1234 04-10-2006 12:41 AM

Trích:

Nguyên văn bởi falleaf (Post 5241)
Khi con Slave nhận được dữ liệu, thì nó nằm trong thanh ghi đệm, thanh ghi nào thì F quên rồi, và khi đã nằm trong bộ đệm của nó, thì nó có toàn quyền sử dụng. Nó thích làm gì thì làm.

Các bạn lưu ý rằng, F nói trường hợp nâng cao, thì chúng ta hoàn toàn có quyền sử dụng mạng Multi Master. Khi bạn setup chip ở chế độ Slave, thì nó thụ động. Nhưng hãy thử nghĩ, tôi làm slave cho mạng này, và làm master của một mạng khác, vậy thì có được không? Vì tôi có tới 40 chân chứ không phải 2 chân.

Vậy nếu tôi làm master cho một mạng khác, mà trong đó slave của tôi lại là master của cái mạng mà tôi làm slave :). Hoàn toàn được.

Nhưng vấn đề nâng cao ở chỗ nữa, nếu làm như vậy, tôi phải tốn 4 dây để làm 2 mạng. Vấn đề trước đây hình như F đặt ra cho Linh, nhưng Linh chưa giải quyết xong, đó là Multi Master trong một mạng dùng 2 dây thôi.

Vấn đề này F tiếp tục treo ở đây chờ người giải quyết.

Chúc vui.

bác Falleaf nghĩ cao siêu quá, cái em hỏi chỉ ở mức cơ sở, chưa nâng cao dữ vậy đâu anh. Theo em nghĩ với yêu cầu truyền một số lượng byte ( 10 byte chẳng hạn) từ một con pic này sang một con pic khác là yêu cầu rất hay gặp . Anh Falleaf nghĩ cao quá nên vẫn chưa trả lời em câu hỏi này nhỉ?
Em nghĩ rằng dữ liệu truyền từ master sang slave sẽ được lưu tạm trong thanh ghi SSPBUF. Nếu mình lấy ra xài đúng lúc thì sẽ giải quyết được câu hỏi mà em đang đặt ra, được ko anh?

falleaf 04-10-2006 02:15 AM

Anh nói là em đọc lại bài tutorial và frame truyền!

Em chưa đọc kỹ cái bài bạn Thanh Hà gửi về hai cái app mà anh giới thiệu sao?

Chúc vui.

hoangminh1234 04-10-2006 10:22 PM

2 Attachment(s)
hình như mình vẫn chưa hiểu nhau (:)) anh Falleaf nhi?
Như anh đã nói việc truyền và đọc là do con chủ ra lệnh
Cũng như anh đã nói là dữ liệu sẽ được nằm trong thanh ghi SSPBUF của con tớ ( 1thanh ghi ! ?????)
Quan sát hai khung truyền ta thấy rằng việc truyền hay nhận nhiều byte từ master là chuyện nhỏ. Nhưng chuyện không nhỏ ( hay quá nhỏ không ai để ý ) là dữ liệu chạy đi đâu trong con tớ. Khi thằng chủ đưa 10 cô em sang nhà thằng tớ chơi, nhưng thằng tớ nhà nghèo chật hẹp chỉ chứa được một cô thôi, vậy 9 cô kia ở đâu? Không hiểu sao mà khi chủ gọi về thì vẫn đủ 10 cô ?? ( chắc có di động gọi nhau )
Chắc là mấy cô dẫn nhau ra quán Sinh Viên trên đường Bửu Long ngồi đây. Nếu ta biết địa chỉ đường Bửu Long thì hay quá nhỉ :D . Anh Falleaf có biết đường BL nằm đâu ko ?


//sau khi đọc application

À, thì ra nó nằm trong RXbuff, vậy mà sao anh ko nói sớm

namqn 04-10-2006 10:39 PM

Khi slave nhận ra địa chỉ của mình thì nó cần đảm bảo xử lý ở mức nhanh nhất để không bị mất dữ liệu, nghĩa là nhận được byte nào thì nó chuyển ngay byte đó ra khỏi bộ đệm. Ngoài ra, nó còn được phép kéo dài xung clock (clock stretching), và gửi NACK để báo hiệu là nó chưa sẵn sàng. Với PIC thì các phần này được xử lý bằng phần cứng. Bạn chịu khó đọc thêm tài liệu đi.

Thân,

hoangminh1234 08-10-2006 02:49 AM

cám ơn trưởng lão


Múi giờ GMT. Hiện tại là 07:25 AM.

Tên diễn đàn: vBulletin Version 3.8.11
Được sáng lập bởi Đoàn Hiệp.
Copyright © PIC Vietnam