PIC Vietnam

Go Back   PIC Vietnam > Truyền thông > Giao tiếp USB, CAN, I2C, SPI, USART...

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Giao tiếp USB, CAN, I2C, SPI, USART... Những giao tiếp được tích hợp trên PIC

Trả lời
 
Ðiều Chỉnh Xếp Bài
Old 16-05-2008, 03:29 PM   #1
napobao
Nhập môn đệ tử
 
napobao's Avatar
 
Tham gia ngày: Sep 2007
Bài gửi: 8
:
Hỏi về giao tiếp SPI

1.Mình đang làm SPI giữa hai DSPic 30F4011. Khi để ở dạng Master - Slave thì masster truyền Slave nhận tôt nhưng khi cho Slave truyền thì Master ko nhận được. Mình dùng với 3 dây DIN,DOUT và CLK. Cho hỏi muốn khắc phục được cả truyền và nhận thì làm thế nào.
2.Khi giao tiếp SPI giữa DSpic và một ngoại vi khác (không lập trình được nhưng có hỗ trợ SPI như ADE7756) thì DSPic phải ở chế độ Master để tạo xung CLK phải ko. KHi muốn treo xung CLK (trạng thái ko dao động ở mức cao hay thấp, ko dao động nữa) thì phaí disable module SPI(SPIEN=0) mà ko có cách nào khác nữa phảiko?
napobao vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-05-2008, 06:01 PM   #2
bien_van_khat
...Damned...
 
bien_van_khat's Avatar
 
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
:
Trích:
Nguyên văn bởi napobao View Post
1.Mình đang làm SPI giữa hai DSPic 30F4011. Khi để ở dạng Master - Slave thì masster truyền Slave nhận tôt nhưng khi cho Slave truyền thì Master ko nhận được. Mình dùng với 3 dây DIN,DOUT và CLK. Cho hỏi muốn khắc phục được cả truyền và nhận thì làm thế nào.
Trong các dạng bus master - slave, slave thụ động, tức là không có quyền gửi dữ liệu hoặc đọc dữ liệu từ master, công việc này do master thực hiện. Xung CLK do master điều khiển

Với SPI để đọc dữ liệu từ slave, master phải ghi dữ liệu lên bus, dữ liệu sẽ được đọc vào đồng thời với dữ liệu ghi ra.

Trích:
2.Khi giao tiếp SPI giữa DSpic và một ngoại vi khác (không lập trình được nhưng có hỗ trợ SPI như ADE7756) thì DSPic phải ở chế độ Master để tạo xung CLK phải ko. KHi muốn treo xung CLK (trạng thái ko dao động ở mức cao hay thấp, ko dao động nữa) thì phaí disable module SPI(SPIEN=0) mà ko có cách nào khác nữa phảiko?
Khi bus idle, tức là master ko gửi dữ liệu, chân CLK sẽ ở mức cố định, mức này có thể là mức cao hoặc mức thấp.
__________________
- Xin đọc trước khi post bài

Xin đặt code trong thẻ [ code ] [ /code ]
bien_van_khat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-05-2008, 07:09 PM   #3
napobao
Nhập môn đệ tử
 
napobao's Avatar
 
Tham gia ngày: Sep 2007
Bài gửi: 8
:
Trích:
Nguyên văn bởi bien_van_khat View Post
Trong các dạng bus master - slave, slave thụ động, tức là không có quyền gửi dữ liệu hoặc đọc dữ liệu từ master, công việc này do master thực hiện. Xung CLK do master điều khiển

Với SPI để đọc dữ liệu từ slave, master phải ghi dữ liệu lên bus, dữ liệu sẽ được đọc vào đồng thời với dữ liệu ghi ra.



Khi bus idle, tức là master ko gửi dữ liệu, chân CLK sẽ ở mức cố định, mức này có thể là mức cao hoặc mức thấp.
Cảm ơn bien_van_khat!
Mình vẫn chưa rõ chỗ :"master phải ghi dữ liệu lên bus, dữ liệu sẽ được đọc vào đồng thời với dữ liệu ghi ra." Tức là muốn đọc dữ liệu từ Slave thì Master chỉ có thể đọc trog thời gian nó dang tạo xung CLK, muốn vậy thì phải ghi dữ liệu lên Bus???? Vấn đề ở chỗ khi đo SPIxBUS lại ở trạng thái full,ko nhận được dữ liệu. Nếu dữ liệu được chuyển lên SPIxSR thì ko biết dữ liệu dữ trên đó trong khoảng thời gian bao lâu?????
Khi slave gửi dữ liệu lên master thì liệu có ngắt SPI nhận ở Master ko!
napobao vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 16-05-2008, 09:06 PM   #4
bien_van_khat
...Damned...
 
bien_van_khat's Avatar
 
Tham gia ngày: Apr 2006
Nơi Cư Ngụ: Hồ Chí Minh
Bài gửi: 522
:
Trích:
Nguyên văn bởi napobao View Post
Cảm ơn bien_van_khat!
Mình vẫn chưa rõ chỗ :"master phải ghi dữ liệu lên bus, dữ liệu sẽ được đọc vào đồng thời với dữ liệu ghi ra." Tức là muốn đọc dữ liệu từ Slave thì Master chỉ có thể đọc trog thời gian nó dang tạo xung CLK, muốn vậy thì phải ghi dữ liệu lên Bus
Đúng. Để đọc dữ liệu bạn phải ghi dữ liệu.

Trích:
Vấn đề ở chỗ khi đo SPIxBUS lại ở trạng thái full,ko nhận được dữ liệu. Nếu dữ liệu được chuyển lên SPIxSR thì ko biết dữ liệu dữ trên đó trong khoảng thời gian bao lâu?????
Khi slave gửi dữ liệu lên master thì liệu có ngắt SPI nhận ở Master ko!
Bạn nên phân biệt rõ 2 thanh ghi SPIxBUF và SPIxSR.

Khi ghi dữ liệu vào thanh ghi SPIxBUF, dữ liệu sẽ được copy vào thanh ghi SPIxSR, SPIxBUF lúc này empty.
Dữ liệu sau đó được right shift từ thanh ghi SPIxSR ra chân SDO trước rồi left shift từ chân SDI vào. sau 8 xung CLK, SPIxSR full, và dữ liệu sẽ được copy vào thanh ghi SPIxBUF nếu có thể.

Trong trường hợp dưới đây dữ liệu từ SPIxSR sẽ bị mất mà sẽ ko được copy vào thanh ghi SPIxBUF
- SPIxBUF đã full (bit SPIRBF = 1) trong trường hợp này, bit SPIROV sẽ được set.
- bit SPIROV đã được set.

Điều này nghĩa là để đảm bảo đọc dữ liệu đúng, bạn nên đọc dữ liệu 1 lần (để xóa bit SPIRBF nếu có), xóa bit SPIROV, ghi dữ liệu vào SPIBUF (nên ghi 0xFF nếu chỉ đọc), chờ bit SPIRBF được set và đọc dữ liệu về.
__________________
- Xin đọc trước khi post bài

Xin đặt code trong thẻ [ code ] [ /code ]
bien_van_khat vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-05-2008, 12:35 PM   #5
napobao
Nhập môn đệ tử
 
napobao's Avatar
 
Tham gia ngày: Sep 2007
Bài gửi: 8
:
[QUOTE=bien_van_khat;16287]Đúng. Để đọc dữ liệu bạn phải ghi dữ liệu.


Mình vẫn chưa rõ điều khiển xung SCK của master như thế nào, SPIBUF rỗnng thì ko có SCK, ghi dữ liệu lên BUF thì khi truyền dữ liệu sẽ có SCK. Ghi lên mà không có Slave để nhận thì có SCK ko, số xung SCK đúng bằng chế độ bits truyền???(8,16 bits) và khi truyền thành công thì SCK cũng mất??? Ko điều khiển SCK bằng cách Set bit dc phải ko?
napobao vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-10-2008, 04:26 PM   #6
diepvy
Nhập môn đệ tử
 
Tham gia ngày: Apr 2008
Bài gửi: 1
:
Bạ nói : Với SPI để đọc dữ liệu từ slave, master phải ghi dữ liệu lên bus, dữ liệu sẽ được đọc vào đồng thời với dữ liệu ghi ra.
Vậy thì có phải master đọc chính dữ liệu mà nó đã ghi lên bus .nếu như vậy thì nó cần gì phải đọc dữ liệu từ slaver nữa
diepvy vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 30-10-2008, 05:12 PM   #7
namqn
Trưởng lão PIC bang
 
Tham gia ngày: Feb 2006
Nơi Cư Ngụ: Tp. HCM, Việt Nam
Bài gửi: 3,025
:
Send a message via Yahoo to namqn
Trích:
Nguyên văn bởi diepvy View Post
Bạ nói : Với SPI để đọc dữ liệu từ slave, master phải ghi dữ liệu lên bus, dữ liệu sẽ được đọc vào đồng thời với dữ liệu ghi ra.
Vậy thì có phải master đọc chính dữ liệu mà nó đã ghi lên bus .nếu như vậy thì nó cần gì phải đọc dữ liệu từ slaver nữa
SPI dùng 2 dây dữ liệu, SDO và SDI. Do đó, tín hiệu ghi ra và tín hiệu đọc vào nằm trên 2 dây khác nhau. Trừ khi bạn nối chân SDO của PIC vào chân SDI của nó (hoặc dùng một mạch nào đó đưa ngược tín hiệu về), bạn không thể đọc chính dữ liệu mà bạn đã ghi ra.

Thân,
__________________
Biển học mênh mông, sức người có hạn.

Đang gặp vấn đề cần được giúp đỡ? Hãy dành ra vài phút đọc luồng sau:
http://www.picvietnam.com/forum/showthread.php?t=1263
namqn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 17-06-2010, 06:54 PM   #8
thanhchuatebk
Nhập môn đệ tử
 
Tham gia ngày: May 2009
Bài gửi: 2
:
Em đang làm về phần giao tiếp SPI giữa pic 16f877a và ade7753.Vấn đề của em bay giờ là làm sao truyền được dữ liệu đo 24 bit từ con ADE về pic. Vì SPI của pic chi có 8 bit thui.MOng được mọi người giúp đỡ ah.
thanhchuatebk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-11-2010, 08:59 AM   #9
NBTrung
Nhập môn đệ tử
 
Tham gia ngày: Feb 2009
Bài gửi: 10
:
Trích:
Nguyên văn bởi thanhchuatebk View Post
Em đang làm về phần giao tiếp SPI giữa pic 16f877a và ade7753.Vấn đề của em bay giờ là làm sao truyền được dữ liệu đo 24 bit từ con ADE về pic. Vì SPI của pic chi có 8 bit thui.MOng được mọi người giúp đỡ ah.
Gửi từng 8 bit 1 lần, giữa các lần dừng lại để đọc dữ liệu (khi bạn dừng thì CLK cũng sẽ dừng phát xung, chân SS hay CS vẫn ở tích cực, bạn muốn dừng bao lâu cũng được, nhưng phải > tối thiểu 1 khoảng time nào đó để con ADE xử lý dữ liệu bạn gửi tới nó). Mỗi lần ra lệnh ghi/đọc 1 byte là PIC sẽ tự động dừng lại sau 8 xung CLK.
NBTrung vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 25-06-2010, 09:39 AM   #10
thanhchuatebk
Nhập môn đệ tử
 
Tham gia ngày: May 2009
Bài gửi: 2
:
Tiền bối nào biết thì giúp em với.Em đang gặp khó khăn mong được các tiền bối giup đỡ.
thanhchuatebk vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 10-10-2010, 10:53 AM   #11
duyb7
Nhập môn đệ tử
 
Tham gia ngày: Jun 2010
Bài gửi: 2
:
không biết cái này có giúp bạn được không (vì tui chưa làm được spi trong thực tế)
tui có đọc tài liệu về việc truyền nhận dữ liệu giữa pic24 (16 bit) với eerom 8bit thì thấy khi nhận dữ liệu từ bên 8bit về người ta đọc 2 lần (tức là vào 2 thanh ghi) rồi dịch 1 thanh ghi qua 8bit, or 2 cái lại với nhau, cuối cùng là được dữ liệu 16bit cho pic24

vì vậy tui nghĩ có lẽ bạn làm ngược lại thử, tức là đọc dữ liệu 3 lần, gán vào 3 biến để xử lý (vì spi không có stop hay start bit, chỉ cần có clock là dữ liệu truyền nhận thôi)
duyb7 vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Old 19-11-2010, 04:29 PM   #12
ducdn
Nhập môn đệ tử
 
Tham gia ngày: Aug 2007
Bài gửi: 4
:
Cho mình hỏi khoảng cách truyền tối đa khi sử dụng giao tiếp SPI là bao nhiêu. Nó có phụ thuộc vào tốc độ baud hay không, có công thức nào để tính toán hay không. Mình cũng đang làm về giao tiếp SPI của 16f877a với ngoại vi.
ducdn vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
Trả lời


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


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


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam