Thông báo

Collapse
No announcement yet.

SPI trong mega8515

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

  • SPI trong mega8515

    các bác ơi em đang dùng với mega8515 nhưng em chưa biết SPI để truyền dữ liệu ra 74HC595 như thế nào và thời gian để nó truyền được một byte sang là bao nhiêu thời gian ? so với truyền dữ liệu ở các chân thông thường ( dùng 3 chân : clock , shift và data ) để truyền ra 595 thì ở phương pháp truyền bằng SPI có nhanh hơn nhiều không ?
    mong các bác chỉ giúp!!!!!!!!!!!!
    chỉ có tâm hồn là nơi duy nhất: có thể biến thiên đường thành địa ngục và ngược lại có thể biến địa ngục hóa thiên đường
    Everything should be made as simple as possible, but not simpler

  • #2
    Trog con chip ma bạn nói trên có một modul phần cứng SPI được tích hợp sẵn bên trong. Nếu bạn cấu hình cho nó thành con master thì khi bạn thực hiện gửi dữ một byte dữ liệu qua cổng SPI bạn sẽ thu được: 8 xung clk được gửi ra qua chân SCK, đồng thời 8 bit dữ liệu cũng sẽ được gửi ra đồng thời tại các sườn xung. Với cách này thì ta hoàn toàn có thể dùng SPI để gửi qua 595 (kèm theo một chân chốt dữ liệu nữa). Khi dùng cách này thì ta không cần viết thêm một thủ tục nào để gửi dữ liệu mà dùng luôn ham SPI(data) được codevision hỗ trợ.

    Về tốc độ nó đạt được tốc độ tối đa của SPI, đối với thạch anh 12mhz thì có thể đạt được tốc độ của xung clk =6mhz. So với cách lập trình thông thường thì.... chưa tính thử.
    Phone: 0978536011

    Comment


    • #3
      Nguyên văn bởi daohuytien Xem bài viết
      các bác ơi em đang dùng với mega8515 nhưng em chưa biết SPI để truyền dữ liệu ra 74HC595 như thế nào và thời gian để nó truyền được một byte sang là bao nhiêu thời gian ? so với truyền dữ liệu ở các chân thông thường ( dùng 3 chân : clock , shift và data ) để truyền ra 595 thì ở phương pháp truyền bằng SPI có nhanh hơn nhiều không ?
      mong các bác chỉ giúp!!!!!!!!!!!!
      Đọc 'datasheet' trước đi! Atmel có nói rõ đấy bạn à! Nếu dùng SPI cho 74HC595 thì chỉ cần 2 chân SCK và MOSI. Mà bạn muốn so sánh ph.pháp này nhanh hơn so với ph.pháp nào?
      !e

      Comment


      • #4
        SPI trong mega8515

        cảm ơn hai bác BYTE và ZEMEN đã giúp em !
        em muốn nói cách truyền nối tiếp thông thường là dùng 3 chân của vi điều khiển làm 3 chân điều khiển tới 74HC595 như với cách làm của 89C51 ( P0_0 là chân data , P0_1 là chân clock và P0_2 là chân store ) thủ tục như ở dưới đây
        void send(unsigned char byte) // truyền một byte tới 595
        {
        unsigned char n;
        for(n=0;n<8,n++)
        {
        byte=byte<<1; // dịch trái đi một đơn vị
        data=CY; // lấy dữ liệu ở cờ nhớ CY ( hay C gì dó)
        clock=1; // tạo xung clock cấp cho 595
        clock=0;
        }
        } // kết thúc truyền một byte
        chỉ có tâm hồn là nơi duy nhất: có thể biến thiên đường thành địa ngục và ngược lại có thể biến địa ngục hóa thiên đường
        Everything should be made as simple as possible, but not simpler

        Comment


        • #5
          Nếu bạn dùng codevision thì hãy xem trong ví dụ của nó. Rất đơn giản.
          AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
          Xem thêm tại Online Store ---> Click here
          Mob: 0982.083.106

          Comment


          • #6
            Nguyên văn bởi daohuytien Xem bài viết
            các bác ơi em đang dùng với mega8515 nhưng em chưa biết SPI để truyền dữ liệu ra 74HC595 như thế nào và thời gian để nó truyền được một byte sang là bao nhiêu thời gian ? so với truyền dữ liệu ở các chân thông thường ( dùng 3 chân : clock , shift và data ) để truyền ra 595 thì ở phương pháp truyền bằng SPI có nhanh hơn nhiều không ?
            mong các bác chỉ giúp!!!!!!!!!!!!
            Phương pháp là sử dụng phần cứng tích hợp sẵn trên chip, tạm gọi là "SPI cứng"
            Ưu điểm:
            - Tốc độ thực hiện nhanh.
            - Code đơn giản hơn.
            Nhược điểm:
            - phải sử dụng đúng pin đã tích hợp chức năng SPI.

            Phương pháp viết code để thực hiện, tạm gọi là "SPI mềm"
            Ưu điểm:
            - sử dụng linh hoạt cho mọi pin.
            Nhược điểm:
            - Tốc độ thực hiện chậm hơn.
            - Code đương nhiên là phức tạp hơn.

            Thân mến,
            blackmoon.

            Comment


            • #7
              Nguyên văn bởi blackmoon Xem bài viết
              Phương pháp viết code để thực hiện, tạm gọi là "SPI mềm"
              Ưu điểm:
              - sử dụng linh hoạt cho mọi pin.
              Nhược điểm:
              - Tốc độ thực hiện chậm hơn.
              - Code đương nhiên là phức tạp hơn.

              Thân mến,
              blackmoon.
              Bổ xung thêm tí ưu:
              - Có thể dùng với nhiều loại chip khác nhau nếu dùng C.
              Ví dụ đoạn code sau:
              Code:
              //-------------------------------
              // Write I2C
              //-------------------------------
              void WriteI2C(unsigned char Data)
              {    
              unsigned char i;
              	for (i=0;i<8;i++)
              	{
                  SER = (Data & 0x80) ? 1:0;
                  SCK=0;
                  #asm("NOP");
                  SCK=1;
                  Data<<=1;
              	}
              
              }
              đã dùng thử với 89 và mega32
              AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
              Xem thêm tại Online Store ---> Click here
              Mob: 0982.083.106

              Comment


              • #8
                Phương pháp viết code để thực hiện, tạm gọi là "SPI mềm"
                Ưu điểm:
                - sử dụng linh hoạt cho mọi pin.
                Nhược điểm:
                - Tốc độ thực hiện chậm hơn.
                - Code đương nhiên là phức tạp hơn.
                Bổ sung thêm tí nhược:
                Không sử dụng được ngắt.

                - Và không có ngắt, thì vi điều khiển hay bất cứ cái gì đó lập trình được đều là on/off. Chúng ta sẽ quay lại thời 1 and 0 = 0!
                Mồm chó vó ngựa

                Comment


                • #9
                  Nguyên văn bởi daohuytien Xem bài viết
                  cảm ơn hai bác BYTE và ZEMEN đã giúp em !
                  em muốn nói cách truyền nối tiếp thông thường là dùng 3 chân của vi điều khiển làm 3 chân điều khiển tới 74HC595 như với cách làm của 89C51 ( P0_0 là chân data , P0_1 là chân clock và P0_2 là chân store ) thủ tục như ở dưới đây
                  void send(unsigned char byte) // truyền một byte tới 595
                  {
                  unsigned char n;
                  for(n=0;n<8,n++)
                  {
                  byte=byte<<1; // dịch trái đi một đơn vị
                  data=CY; // lấy dữ liệu ở cờ nhớ CY ( hay C gì dó)
                  clock=1; // tạo xung clock cấp cho 595
                  clock=0;
                  }
                  } // kết thúc truyền một byte
                  Bạn mà truyền dữ liệu ra 595 bằng hàm này thì chắc chỉ được vài chục cột led thôi, tôi nói thế ko biết đúng ko, nhưng tôi hay nghĩ 595 thường đi liền với bảng quang báo..
                  Và trong trường hợp này, tốc độ đưa dữ liệu ra của bạn chỉ bằng khoảng 1/20 module SPI (áng chừng thôi), tuy nhiên ko hẳn SPI đã nhanh nhất, còn tùy thuộc vào thiết kế của bạn, cách sắp xếp dữ liệu nữa...
                  |

                  Comment


                  • #10
                    Nguyên văn bởi yankazaz Xem bài viết
                    Bổ sung thêm tí nhược:
                    Không sử dụng được ngắt.

                    - Và không có ngắt, thì vi điều khiển hay bất cứ cái gì đó lập trình được đều là on/off. Chúng ta sẽ quay lại thời 1 and 0 = 0!
                    daohuytien dùng SPI cho HC595 thì chắc là o cần dùng đến ngắt đâu!
                    !e

                    Comment


                    • #11
                      Dùng UART, tốc độ cũng có thể ngang ngửa với SPI. Nhưng nếu mà không phải là xuất một lúc 8 bít ra hc595 thì dùng SPI và UART có lẽ thua!
                      !e

                      Comment


                      • #12
                        Nguyên văn bởi zemen Xem bài viết
                        Dùng UART, tốc độ cũng có thể ngang ngửa với SPI. Nhưng nếu mà không phải là xuất một lúc 8 bít ra hc595 thì dùng SPI và UART có lẽ thua!
                        Nếu dùng UART thì xuất ra 595 kiểu gì nhỉ?
                        AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
                        Xem thêm tại Online Store ---> Click here
                        Mob: 0982.083.106

                        Comment


                        • #13
                          Nguyên văn bởi VNarmy Xem bài viết
                          Nếu dùng UART thì xuất ra 595 kiểu gì nhỉ?
                          Trong 8051 có hỗ trợ chế dộ này. các dòng khác thì không biết.

                          Comment


                          • #14
                            bác Yankaza em có lẽ trong phần này em không dùng ngắt.
                            em dùng SPI này để gửi liên tiếp nhiều byte ra 595 và sau đó là xuất đồng thời dữ ở 595
                            chỉ có tâm hồn là nơi duy nhất: có thể biến thiên đường thành địa ngục và ngược lại có thể biến địa ngục hóa thiên đường
                            Everything should be made as simple as possible, but not simpler

                            Comment


                            • #15
                              Nguyên văn bởi hightech_uc Xem bài viết
                              Bạn mà truyền dữ liệu ra 595 bằng hàm này thì chắc chỉ được vài chục cột led thôi, tôi nói thế ko biết đúng ko, nhưng tôi hay nghĩ 595 thường đi liền với bảng quang báo..
                              Và trong trường hợp này, tốc độ đưa dữ liệu ra của bạn chỉ bằng khoảng 1/20 module SPI (áng chừng thôi), tuy nhiên ko hẳn SPI đã nhanh nhất, còn tùy thuộc vào thiết kế của bạn, cách sắp xếp dữ liệu nữa...

                              bác nói rất đúng em dùng 89C51 mà gửi dữ liệu theo kiểu này thì tính ra em phải mất cỡ 77us thạch anh 12M mà dùng SPI trong mega8515 thì có lẽ chỉ mất cỡ hơn 1u tẹo thôi (thạch anh 12M )vậy thì tốc độ nhanh hơn cỡ 60 lần nhỉ. (nhưng ở 89C51 em quét được cỡ 80 cột mà chạy vẫn tít lắm bác à) thế mà dùng mega8515 thì chạy không biết có được vài trăm cột không nhỉ??????
                              à em định dùng như thế này
                              xử lí được dữ liệu ở hàng rồi sau đó thực hiện gửi dữ liệu ra một hàng đợi trễ 100us thì lại xuất dữ liệu ở hàng tiếp theo cứ như thế cho đến hết các hàng .
                              À bác cho em hỏi vậy em có thể dùng ngắt trong SPI trong phần xen kẽ với xử lí dữ liệu không? và cách làm có thể như thế nào ?
                              chỉ có tâm hồn là nơi duy nhất: có thể biến thiên đường thành địa ngục và ngược lại có thể biến địa ngục hóa thiên đường
                              Everything should be made as simple as possible, but not simpler

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X