Thông báo

Collapse
No announcement yet.

nhờ giúp đỡ về giao tiếp SPI

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

  • nhờ giúp đỡ về giao tiếp SPI

    e đang tập tành AVR ạ. e viết đến giao tiếp SPI thì gặp nhiều lỗi mô phỏng quá. các bác giúp e với.
    Attached Files

  • #2
    có ai biết thì giúp e với ạ.

    Comment


    • #3
      Các bác cho hỏi e tìm thấy cái thư viện spi.h trong codevision mà không biết dùng thế nào .bác nào có thể chỉ cho e với ạ

      Comment


      • #4
        Nguyên văn bởi quang_le_pt Xem bài viết
        Các bác cho hỏi e tìm thấy cái thư viện spi.h trong codevision mà không biết dùng thế nào .bác nào có thể chỉ cho e với ạ
        Bạn ah. Hàm gửi và nhận dữ liệu qua spi rất đơn giản, khuyên bạn nên tự viết thư viện.

        Giải pháp điện tử của bạn

        Comment


        • #5
          B có ví dụ đơn giản nào có thể cho mình tham khảo qua được không mình dùng codevision

          Comment


          • #6
            Việc truyền dữ liệu SPI thường do người lập trình chủ động, còn việc nhận thì bạn có thể dùng ngắt hoặc không. Ở trên bạn nguyentuanqs đã đưa 1 code tham khảo spi khi viết bằng avrstudio bạn coppy nguyên sang codevision là chạy. Chỉ chú ý khi viết cho slave thì chương trình ngắt phải là

            // SPI interrupt service routine
            interrupt [SPI_STC] void spi_isr(void)
            {
            unsigned char data;
            data=SPDR;
            // Place your code here

            }

            Giải pháp điện tử của bạn

            Comment


            • #7
              mih cop thử nhưng ko được nhiều lỗi lắm nhất là mấy cái trong thư viện không biết sang đây sửa thế nào

              Comment


              • #8
                Bạn up code mình sửa lỗi cho.

                Giải pháp điện tử của bạn

                Comment


                • #9
                  đây là code của bạn trên
                  master


                  //chuong trinh master spi dung atmega8
                  #include <avr/io.h>
                  #include <avr/interrupt.h>
                  #include <util/delay.h>
                  #include <string.h>


                  #define spi_port PORTB
                  #define spi_ddr DDRB
                  #define ss 4
                  #define mosi 5
                  #define miso 6
                  #define sck 7

                  char data[] = "nguyen minh tuan";
                  void init_spi (void)
                  {
                  spi_ddr = (1<<ss)|(1<<mosi)|(1<<sck);
                  //spi_port= (1<<miso);

                  SPCR = (1<<SPIE)|(1<<SPE)|(1<<MSTR)|(1<<CPHA)|(1<<SPR1)|( 1<<SPR0);

                  }

                  void transmit (void)
                  {
                  int i;
                  for (i=1;i<=strlen(data);i++)
                  {
                  SPDR = data[i];
                  _delay_ms(100);
                  while (bit_is_clear (SPSR,SPIF))
                  {};

                  _delay_ms (100);


                  };
                  }

                  int main ()
                  {
                  init_spi();
                  transmit();

                  while (1)
                  {};
                  return 0;
                  }
                  slave
                  #include <avr/io.h>
                  #include <avr/interrupt.h>
                  #include <util/delay.h>
                  #include "myLCD.h"
                  #include <string.h>

                  #define spi_port PORTB
                  #define spi_ddr DDRB
                  #define ss 4
                  #define mosi 5
                  #define miso 6
                  #define sck 7

                  void init_spi (void)
                  {
                  //spi_ddr = (1<<miso);
                  spi_port= (1<<mosi)|(1<<ss)|(1<<sck);

                  SPCR = (1<<SPIE)|(1<<SPE)|(1<<DORD)|(1<<CPHA)|(1<<SPR1);

                  }
                  void hienthi(void)
                  {
                  char a;
                  while(bit_is_clear(SPSR,SPIF))
                  {
                  a = SPDR;
                  putChar_LCD (a);
                  }

                  }
                  int main ()
                  {
                  init_LCD();
                  home_LCD();
                  init_spi();
                  while (1)
                  {};

                  }
                  ISR (SPI_STC_vect)
                  {
                  hienthi();
                  _delay_ms(100);
                  }

                  thanks

                  Comment


                  • #10
                    Bạn up code viết trên codevision mà bạn viết để mình xem lỗi và sửa giúp bạn.

                    Giải pháp điện tử của bạn

                    Comment


                    • #11
                      b có thể cho mình nick yahoo được ko

                      Comment

                      Về tác giả

                      Collapse

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

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

                      Collapse

                      Đang tải...
                      X