Thông báo

Collapse
No announcement yet.

SPI, chuẩn giao tiếp 3 dây!

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #16
    Khiếp, nghe nói con 89s8252 tới 50k lận. Thôi dùng con S52 cũng được
    !e

    Comment


    • #17
      A, vậy nếu dùng giao tiếp 4 con S52 với nhau thi ta dùng kiểu SPI hay I2C tiện hơn?
      !e

      Comment


      • #18
        Nguyên văn bởi zemen
        A, vậy nếu dùng giao tiếp 4 con S52 với nhau thi ta dùng kiểu SPI hay I2C tiện hơn?
        Bạn dùng chế độ truyền thông đa xử lý (UART)của 89 là tối ưu nhất. Phương án tồi hơn thì dùng I2C hoặc SPI(vì 89s51/52 ko support phần cứng).
        Nếu khoảng cách xa xa hơn nên dùng rs485.

        Comment


        • #19
          Kám ơn bạn thaithutrang lắm lắm. Vậy tu dùng UART thôi. Giao tiếp 2 con thì được chứ nhiều con thì chưa biết ra sao, chắc phải đem tài liệu ra ngâm dài dài quái
          !e

          Comment


          • #20
            - Chuẩn I2C do Philips khởi sướng.
            - Chuẩn SPI do Motorola khởi sướng.
            Trong chuẩn I2C việc chọn địa chỉ đã có trong bản tin gửi đi,trong SPI phải dùng thêm các dây chọn địa chỉ (Chip select) nên phải tốn thêm các chân VDK hơn (đặc biệt quan trong nếu mạng có nhiều slave). Tôi dùng thử thấy SPI nhanh hơn I2C. Một ví dụ SPI là việc nạp chương trình cho các chip AT89S và AVR, nó dùng protocol 3 hoặc 4 byte trong mỗi bản tin trao đổi cho nhau khá đơn giản.
            - Trong mạng VDK chọn chuẩn I2C có vẻ ưu việt hơn.
            0912666017

            Comment


            • #21
              Nếu muốn dùng tốt hai chuần này cùng lúc thì bạn nên viết hai chương trình nhúng cho cả hai chuần thì tốt nhất vì bạn dùng luôn cho cả hai chuẩn và đặc biệt là bạn hiểu về cấu trúc truyền data của nó nữa .
              Con 89S8252 trong Nhật Tảo ( HCM ) bán 65K lận . Nhưng tôi khuyên bạn nên dùng con 89c51 cộng với con 24c64 thì rẻ hơn rất nhiều !
              Mạch nạp Little Programmer
              MSC-51,AVR,EEPROM ... etc

              Site Fukusei shop :

              Comment


              • #22
                Chào các bác, tôi có một số ví dụ về chuẩn I2C và SPI:
                - về chuẩn I2C có ví dụ về giao tiếp C51 với EEPROM 24C04, các bác dowload file ck24c.pdf.
                - về chuẩn SPI có ví dụ về giao tiếp C51 với EEPROM 25C64, các bác dowload file ck25c.pdf.
                Các ví dụ này có source code (Keil/C)+ sơ đồ mạch điện.
                Tại link:
                http://www.diendandientu.com/diendan...d?thread=10222
                0912666017

                Comment


                • #23
                  cảm ơn các bác nhé! bài viết của các bác thật hay. ^.^
                  Nếu chẳng một phen sương thấm lạnh
                  Hoa mai đâu dễ tỏa mùi hương

                  Comment


                  • #24
                    Mình có một số thắc mắc:

                    1. SPI không truyền được xa ... vậy nó có thể giao tiếp tối đa là bao xa?
                    2. Truyền đồng bộ dữ liệu trong SPI là dịch chuyển và hoán đổi các bít dữ liệu trong hai thanh ghi của master và slaver, vậy nếu ta copy một dữ liệu từ thẻ SD vào máy tính thông qua đầu đọc thẻ của laptop( không phải là đầu đọc chuyển đổi cắm cổng USB) thì họat động nó sẽ như thế nào?
                    3. Trong sơ đồ đấu nối master và slave tối đa chỉ có 4 chân hoặc 3 chân nếu không dùng đến Chip select (slaver select), vậy việc cung cấp nguồn cho quá trình vận hành thông qua đâu?
                    4. Phần CPOL, CPHA mình đọc mà chưa hiểu lắm, CPOL có khi là mức 1 có khi là mức 0, cái này có phải là do không có quy chuẩn chung nên có hãng để CPOL ở mức 1 và có hãng lại để ở mức 0?

                    Mình mới tìm hiểu nên còn hạn chế lắm, mong các anh/chị thông cảm nếu câu hỏi có vấn đề ...

                    Comment


                    • #25
                      Các anh ơi, em mới học chuyên ngành nên chưa biết lắm. Kỳ này thầy giáo bảo em làm bài luận về các chuẩn giao tiếp trong máy tính. Các anh có thể chỉ cho em phần sườn phải cần làm và hướng đi được không? Nếu có tài liệu gì thì cho em xin một ít nhé.
                      Em cám ơn trước!

                      Comment


                      • #26
                        Chuyện đơn giản, dễ ợt, Trên PC dùng MSCOMM.DLL dưới vi điều khiển thì khai báo giao tiếp UART.

                        Ví dụ: trên PC:
                        Mscomm.out="A"

                        Dưới vi điều khiển: tam= SBUF;
                        ok

                        Comment


                        • #27
                          Chào mọi người!
                          Em mới bắt đàu tìm hiểu về chuẩn giao tiế spi qua pic 16f877a, không biết bắt đầu từ đâu và sơ đồ nguyên lý cơ bản như thế nào? Cao nhân nào có sơ đồ nguyên lý cơ bản của mạch nào đó thì cho em xin được không.
                          Xin cảm ơn!

                          Comment


                          • #28
                            CHUẨN GIAO TIẾP SPI : từ MOTOROLA
                            CHUẨN I2C: DO PHILIP
                            Là chuẩn truyền 8 bit sử dụng 4 dây ( giao tiếp 1 – 1 là 3 dây)
                            - SDO : đường truyền data ra
                            - SDI : đường nhận data
                            - SCK : đường đồng bộ xung CK
                            - SS : Slave Select: chọn giao tiếp với Slave nào
                            Làm việc với SPI liên quan đến 4 thanh ghi:
                            - SSPSTAT: thanh ghi trạng thái
                            - SSPCON: thanh ghi điều khiển
                            - SSP BUF: thanh ghi đệm
                            - SSPSR : thanh ghi dịch (shift)
                            Khi giao tiếp với nhiều Slave, Slave nào được chọn thì chân SS tương ứng ở mức thấp



                            Thanh ghi dịch được nối với chân của vi điều khiển để nhận các bit dữ liệu. sau khi nhận đủ 8 bit thì dữ liệu được đưa vào thanh ghi SBUF, nhờ có bộ đệm này mà cho phép vi điều khiển nhận dữ liệu tiếp theo trong khi dữ liệu ở bộ đệm có thể chưa được xử lý
                            /* In this example, PIC microcontroller (master) sends data byte to peripheral chip
                            (slave) via SPI. Program uses SPI library functions SPI1_init() and SPI1_Write. */

                            sbit Chip_Select at RC0_bit; // Peripheral chip_select pin is connected to RC0
                            sbit Chip_Select_Direction at TRISC0_bit; // TRISC0 bit defines RC0 pin to be input or output
                            unsigned int value; // Data to be sent (value) is of unsigned int type

                            void main() {
                            ANSEL = ANSELH = 0; // All I/O pins are digital
                            TRISB0_bit = TRISB1_bit = 1; // Configure RB0, RB1 pins as inputs
                            Chip_Select = 0; // Select peripheral chip
                            Chip_Select_Direction = 0; // Configure the CS# pin as an output
                            SPI1_Init(); // Initialize SPI module
                            SPI1_Write(value); // Send value to peripheral chip

                            Mô tả ví dụ trên như sau:
                            - Sbit là một kiểu dữ liệu cho phép truy cập các thanh ghi, thanh ghi SFR, biến…vv
                            Các thanh ghi liên quan
                            1. SSPSTAT


                             Bit SMP:
                            Ở chế độ SPI: bit xác định thời điểm đọc dữ liệu
                            1: đọc vào cuối thời điểm dữ liệu
                            0 : đọc vào thời điểm giữa
                            Chú ý: khi hoạt động ở chế độ Slave, bit này phải được xóa
                            Ở chế độ I2C:
                            1: hoạt động 100KHz
                            0 : 400Khz
                             Bit CKE: bit lựa chọn thời điểm truyền nhận data
                            Nó còn liên quan đến bit CKP
                            Nếu CKP = 1
                            CKE = 0: cạnh xuống
                            CKE = 1: cạnh lên
                            Nếu CKP =0 : ngược lại
                             Bit D/ A : chỉ sử dụng trong chế độ I2C
                            = 1: tức byte cuối cùng nhận được hay truyền đi là dữ liệu
                            = 0 : tức byte cuối cùng nhận hay truyền là địa chỉ
                             P : bit stop, chỉ sử dụng trong I2C
                            = 1:
                            = 0:
                             S : bit start:, chỉ sử dụng cho I2C
                            = 1: bit start được phát hiện cuối cùng
                            = 0 : không được phát hiện cuối cùng
                             Bit R/W : là bit read hay write. Chỉ sử dụng cho I2C,
                            Trong chế độ Slave:
                            = 1 : đọc dữ liệu
                            = 0: ghi dữ liệu
                            Chế độ Master:
                            = 1: tiến hành truyền data
                            = 0: không truyền data
                             Bit UA : chỉ sử dụng trong chế độ I2C chế độ 10bit
                             Bit BF : buffer Full Status bit: bit báo trạng thái bộ đệm đã đầy chưa
                            Trong quá trình nhận dữ liệu ( cả SPI và I2C)
                            = 1: đầy
                            = 0: chưa nhận, bộ đệm trống
                            Trong quá trình truyền data: ( chỉ I2C)
                            = 1: dữ liệu trong quá trình truyền ( không bao gồm bit ACK và bit STOP)
                            = 0 : truyền xong data ( không bao gồm bit ACK và bit STOP)
                            2. Thanh ghi SSPCON : thanh ghi điều khiển, biểu diễn như sau:

                             Bit WCON:
                            = 1: phát hiện xung đột , cố thực hiện ghi vào SBUF trong SPI còn trong I2C thì là điều kiện không phù hợp để truyền
                            = 0: không xung đột
                             SSPOV: bit báo nhận đầy
                            = 1: một byte mới được nhận trước khi đọc byte dữ liệu trước đó. Vì không có bộ nhớ cho data mới nhận được nên một trong 2 byte sẽ bị xóa . trong trường hợp này, dữ liệu lưu trong thanh ghi SSPSR ( dịch ) bị mất
                            = 0: nhận được đúng data, không có lỗi
                             SSPEN: xác định chức năng chân vi điều khiển và khởi tạo module MCCP.
                            Trong chế độ SPI:
                            = 1: cho phép module MCCP cấu hình 4 chân SDI, SDO, SCK, và SS
                            = 0: không cho phép
                            Trong chế độ I2C:
                            = 1 : cho phép module MCCP và cấu hình 2 chân SDA và SCL
                            =0 : không cho phép
                             CKP: không sử dụng trong chế độ master I2C
                            Trong chế độ SPI:
                            = 1:
                            = 0:
                            Trong chế độ Slave I2C:
                            = 1: cho phép clock
                            = 0: giữ clock ở mức thấp, sử dụng để kéo dài thời gian làm tăng sự ổn định
                             4 bit còn lại: SSPM3: SSPM0 – xác định chế độ sử dụng: I2C hay SPI, tần số bao nhiêu

                            Tóm lại, để thực hiện giao tiếp SPI, cần làm những việc sau trước khi khởi tạo SPI:
                            - Chế độ master: cho TRISC.3 = 0 ( cấu hình ngõ ra cung cấp xung clock)
                            - Chế độ Slave: TRISC.3 = 1: ngõ vào nhận xung clock
                            - Chú ý thiết lập chế độ cho bit MSP của thanh ghi SSPSTAT
                            - Xung CK tác động cạnh lên hay cạnh xuống ( bit CKE của thanh ghi SSPSTAT)
                            - Tốc độ bauds nằm trong 4 bit của thanh ghi SSPCON ( chỉ sử dụng cho Master)
                            - Lựa chọn chế độ Slave: 4 bit cuối của thanh thi SSPCON ( chỉ sử dụng cho chế đọ Slave)


                            Module bắt đầu hoạt động bằng cách set bit SSPEN :
                            - Bước 1: dữ liệu chuẩn bị truyền phải được ghi vào bộ đệm. nếu hoạt động ở chế độ master, vi điều khiển sẽ tự thực hiện bước 2,3.4. nếu ở chế độ Slave, nó sẽ không thực hiện được bước 2 , 3, 4 cho đến khi phát hiện xung clock ở chân SCK
                            - Bước 2:
                            Dữ liệu được ghi vào thanh ghi dịch và dữ liệu ở bộ đệm vẫn còn, chưa bị xóa
                            - Bước 3: dữ liệu được dịch ra ngoài chân ra SDO, bắt đầu từ bit có giá trị lớn nhất và trong khi đó thanh ghi dịch đồng thời được ghi đầy bởi các bit từ chân vào SDI.ở chế độ master, tự nó tạo ra xung clock trong khi chế độ slave sử dụng clock từ bên ngoài thông qua chân SCK
                            - Bước 4: thanh ghi dịch đầy 8 bit data vừa nhận , lúc này 2 bit là BF( bit báo đầy) và bit SSPIF được set = 1, dữ liệu nhận được là 1 byte tự động di chuyển vào bộ đệm SSPBUF. Sau khi nhận xong, nó tự động tạo ra 1 ngắt nếu cho phép
                            - Bước 5: cuối cùng, dữ liệu nhận được đã sẵn sàng được di chuyển vào một thanh ghi nội mong muốn trong vi điều khiển để thực hiện các nhiệm vụ mong muốn khác nhau.


                            EM XIN BỔ DUNG MỘT YẾU TỐ QUAN TRỌNG NHƯ BÁC GÌ GÌ ĐÓ ĐÃ NÓI: SPI LÀ CHUẨN GIAOTIEEOP MÀ MASTER VÀ SLAVE TRAO ĐỔI DÂT CHO NHAU. HẾT, CÓ GÌ SAI MOING ANH EM CHỈ GIÁO
                            Be quan. Plz contact through email:

                            Comment


                            • #29
                              EM SỬ DỤNG MikroC Pro for pic để lập trình, nó support nhiều thư viện lắm, ngon lành, bác nào muốn sử dụng thì : vie.hanguyen89@gmail.com
                              Be quan. Plz contact through email:

                              Comment


                              • #30
                                em được bít spi chỉ truyền trong một khoảng cách ngắn. mún truyền xa cần có bộ đệm (thiết bị hỗ trợ ). bác nào bít về thiết bị này có thể nói rõ cho em bít không. Hiện tại em đang cần truyền dữ liệu giữa hai vdk với khoảng cách khoảng 30m . mong anh em diễn đàn hỗ trợ

                                Comment

                                Về tác giả

                                Collapse

                                Thaphuong Tìm hiểu thêm về Thaphuong

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X