Thông báo

Collapse
No announcement yet.

giao tiếp 2 ATmega16 sử dụng SPI

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

  • #16
    Cái mà mình quan tâm và mong đợi bạn trả lời là cái khác cơ. VD:
    - SPI là gì?
    - SPI gồm các tín hiệu gì? Chức năng của từng tín hiệu thế nào?
    - Mã hóa tín hiệu trong SPI thế nào?
    - Các chế độ truyền trong SPI thế nào?
    Chứ còn việc viết phần mềm với cả config trong CV mình ko quan tâm lắm.
    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


    • #17
      Nguyên văn bởi quytim Xem bài viết
      thật ra thì mọi khởi tạo và thiết lập thì dùng cái CodeWInzadAVR của Codeversion nó đã thiết lập cho mình rồi, theo tìm hiểu thì cái khó là phải bật SPI lên đúng lúc truyền dữ liệu, Khi đo bằng oxilo thì đã thấy việc truyền đi (em dùng mạch khác có dùng AT16). nhưng vì truyền 1byte nên khá nhanh, không kiểm tra đc nó truyền và lưu trữ data như thế nào, vì thế mới lên hỏi các Pro mờ
      Khác nhau cơ bản nhất của SPI so với các chuẩn khác như I2C hay UART là dữ liệu được truyền nhận đồng thời.
      Nói một cách dễ hiểu là khi Master truyền 1 byte tới Slave, sau khi kết thúc quá trình truyền thì nó cũng nhận về 1 byte từ Slave. Dữ liệu truyền đi và nhận về dưới dạng nối tiếp, cứ truyền đi 1 bit (trên MOSI) thì cũng sẽ nhận về một bít (trên MISO).

      Chính vì thế, trong CodeVisionAVR, nếu muốn đọc dữ liệu thì Slave, thì Master phải gửi đi một byte 0x00.
      Code:
      result=spi(0);
      PNLab
      Mạch nạp/debug ULink2, Jlink ARM USB
      Mạch nạp AVR, PIC, 8051, MSP430 USB
      Mạch phát triển STM32, ARM9, ARM11
      more...www.pnlabvn.com

      Comment


      • #18
        Hi cả nhà!
        Vấn đề SPI mà cũng lôi kéo tất cả các cao thủ AVR trong diễn đàn rồi, Blackmoon, VnArmy, Sphinx...
        Mình cũng đã làm cái SPI này rồi, truyền thông cũng bình thường thôi, nhưng mình không chơi với anh Protues chỉ dùng cho sinh viên, làm mạch thật tốt hơn. Cái này trên diễn đàn cũng nói nhiều rồi. Code thì trong datasheet cũng nói, tất nhiên là phải biết cách phối hợp, bạn có thể copy nguyên cả hướng dẫn vào là được thôi. Lần sau không được cáu với mấy bậc tiền bối nhé, nhờ vả phải đúng cách, nhất là anh Army anh ý nóng tính lắm.
        Chúc vui và thành công.

        Comment


        • #19
          Anh em cứ 'datasheet' của mega/89S, phần SPI mà đọc thì sẽ trả lời đc những câu hỏi của bác VNArmy thôi. Đọc 1 lần chưa thông thì, 2 lần, ... 10 lần. Mà phải ráp mạch làm thử (cũng đơn giản, cắm qua cắm lại mấy chân ISP), nó o chạy như thế nào? Lúc đó các anh em khác mới cùng trao đổi, vấn đề nó mới hay, nhiều người mới cùng biết. Chứ cứ nói là viết 'code' i chang như sách và mô phỏng không chạy thì chưa đủ!
          !e

          Comment


          • #20
            Cái chương trình bạn quytim viết ở trên ngắn gọn quá, hơi khó hiểu nên các anh em khó mà trả lời. Chằng hạn:
            - Dao động của 'master', 'slaver' là bao nhiêu? (để anh em đoán mò à?)
            - Xung cho SPI là bnhiêu? có giống nhau giữa 'master' và 'slaver' không?
            - SPI chạy ở chế độ mấy? (không nói thì ae muốn biết phải đọc lại 'datasheet' mất thôi)
            - Những câu lệnh như:
            #define DD_MOSI PORTB.5
            #define DD_MISO PORTB.6
            #define DD_SCK PORTB.7
            #define DDR_SPI DDRB
            rồi:
            DDR_SPI = (1<<DD_MISO);
            thì bạn đã chắc là nó như ý mình chưa? Cần gì đến mô phỏng.
            - Bạn nói cấu hình SS bằng phần mềm nhưng mình o thấy đâu, còn nếu bằng phần cứng thì bạn đưa lên cho các anh em xem thế nào!

            Nói chung vấn đề kĩ thuật thì o phải là khó khăn lắm, mình biết trên này có nhiều anh rành mà; vấn đề ở đây là cách trình bày, làm sao cho người khác hiểu rồi mới chia sẻ đc.
            !e

            Comment


            • #21
              Ô thế là bạn Quytim and friends chạy mất roài à. Mình mà học một mình thì lại ko có nhu cầu lắm.
              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


              • #22
                xin chào !nhân tiện nói về SPI mình muôn đóng góp một chương trình nhờ mọi người kiểm tra hộ ,mình mô phỏng chạy dc rồi,chương trình này ko dùng ngắt
                và truyền từng byte một
                Đối với master:
                //các chân MOSI ,SCK,SS đã là đầu ra, các chân PA0,PA2,PA4 là đầu vào
                dc nối với các BUTTON ,PORTC của cả master và slave là đầu ra dc nối
                với 8led đơn
                SPSR=0;
                #asm
                in r30,spdr
                in r31,spsr
                #endasm
                main:
                {
                while(1)
                {
                PORTB.4=1;
                if(PINA.0==0)
                {
                PORTB.4=0;
                #asm
                NOP
                #endasm
                SPDR=0X56;
                while(SPCR.7==0)
                {};
                PORTC=SPDR
                #asm
                in r30,spdr
                in r31,spsr
                #endasm
                }
                if(PINA.2==0)
                {
                PORTB.4=0;
                #asm
                NOP
                #endasm
                SPDR=0X98;
                while(SPCR.7==0)
                {};
                PORTC=SPDR
                #asm
                in r30,spdr
                in r31,spsr
                #endasm
                }
                };
                }
                đối với master tạm thời 2 PINA.0 và PINA.2 đã còn với pin còn lại tương tự
                giải thích chương trình:
                #asm
                in r30,spdr
                in r31,spsr
                #endasm
                là các lệnh xóa cờ SPIF.
                #asm
                NOP
                #endasm
                là độ trễ để cho dữ liệu ổn định trên spdr của slave
                Đối với SLAVE:
                //đã khởi tạo xong cho spi ở chế độ slave
                main:
                {
                while(1)
                {
                if(PINB.4==0)
                {
                SPDR=0x54;
                while(SPCR.7==0)
                {};
                PORTC=SPDR;
                #asm
                in r30,spdr
                in r31,spsr
                #endasm
                }
                };
                }
                xong !mọi người đừng cười nhá

                Comment


                • #23
                  hic
                  tớ cũng đang đau đầu về cái SPI nè.
                  Dùng con ATmega16 làm smater và 1 con làm slave.
                  truyền data 8bit mà chưa làm được nè.
                  mô phỏng protues thì ngon lành mà tới chừng nạp vào cái mạch ....
                  ko chạy được.không biết do mạch hay do cái protues nó lừa mình nữa.
                  hic.xin các bác chỉ giáo
                  các vấn đề về sdcard, usb, tcp/ip, upgrate firmware,...
                  trên các dòng chip: stm32, lpc of nxp
                  please cell phone: 01649895559

                  Comment


                  • #24
                    các bác ơi cho em hỏi về cách truyền và nhận giữa 2 con atmega 8 với nhau theo chuẩn truyền spi với.
                    em cám ơn!

                    Comment


                    • #25
                      Chả thấy ông bạn hỏi gì cả

                      Comment


                      • #26
                        các bác ơi ai có tài liệu giao tiếp giữa 2 con atmega theo chuẩn truyền spi cho em xin với em đang làm đồ án về nó .
                        em xin cám ơn

                        Comment


                        • #27
                          Em xin nhờ các tiền bối giúp đỡ: có thể cho em một bài vi dụ đơn gian về giao tiếp SPI để em biết cách chuyền và nhận tín hiệu qua SPI
                          em xin cảm ơn

                          Comment


                          • #28
                            cho em một bài vi dụ đơn gian về giao tiếp SPI để em biết cách chuyền và nhận tín hiệu qua SPI
                            - SPI (Serial Peripherals Interface) là chuẩn truyền thông nối tiếp đồng bộ (dùng chung tín hiệu clock), song công. Đôi khi người ta cũng gọi nó là chuẩn truyền thông nối tiếp 4 dây.
                            - 4 đường tín hiệu của SPI thường gọi là SS (Slave select), SCK (Serial Clock), MISO (Master input slave output), MOSI (Master output slave input). Ngoài ra người ta cũng có thể gọi với các tên khác như (CLK, SDO, SDI, CS,...)
                            - SPI có thể giao tiếp giữa 2 thiết bị trong đó một thiết bị đóng vai trò là Master, 1 thiết bị đóng vai trò là Slave. Cũng có thể nối chung nhiều thiết bị thành Bus qua chuẩn SPI. Khi đó mạng sẽ có 1 Master và nhiều Slave. Các đường clock và dữ liệu được nối chung, mỗi Slave có một đường SS nối với Master. Số Slave luôn bằng số đường SS.
                            - Khi hai thiết bị trao đổi dữ liệu qua chuẩn SPI chúng thực hiện giống như 2 thanh ghi dịch được kết nối với nhau theo kiểu đầu ra thanh ghi này nối với đầu vào thanh ghi kia. Đầu ra thanh ghi kia nối ngược lại đầu vào thanh ghi này. Mỗi khi có một xung clock cả hai thanh ghi dịch cùng dịch ra một bít và sau 8 lần dịch thì 2 thanh ghi hoán đổi 1 byte dữ liệu cho nhau.
                            - Chi tiết về chuẩn truyền thông SPI các bạn có thể tham khảo ở link sau:
                            http://en.wikipedia.org/wiki/Serial_..._Interface_Bus
                            - Trong file đính kèm là application notes của bọn atmel viết về SPI cho bộ nhớ EEPROM AT93Cxx. Các bạn có thể tham khảo kết nối phần cứng và code mẫu bằng cả Assembly và C
                            Attached Files
                            For a better world

                            Comment


                            • #29
                              Nguyên văn bởi enter88 Xem bài viết
                              xin chào !nhân tiện nói về SPI mình muôn đóng góp một chương trình nhờ mọi người kiểm tra hộ ,mình mô phỏng chạy dc rồi,chương trình này ko dùng ngắt
                              và truyền từng byte một
                              Đối với master:
                              //các chân MOSI ,SCK,SS đã là đầu ra, các chân PA0,PA2,PA4 là đầu vào
                              dc nối với các BUTTON ,PORTC của cả master và slave là đầu ra dc nối
                              với 8led đơn
                              SPSR=0;
                              #asm
                              in r30,spdr
                              in r31,spsr
                              #endasm
                              main:
                              {
                              while(1)
                              {
                              PORTB.4=1;
                              if(PINA.0==0)
                              {
                              PORTB.4=0;
                              #asm
                              NOP
                              #endasm
                              SPDR=0X56;
                              while(SPCR.7==0)
                              {};
                              PORTC=SPDR
                              #asm
                              in r30,spdr
                              in r31,spsr
                              #endasm
                              }
                              if(PINA.2==0)
                              {
                              PORTB.4=0;
                              #asm
                              NOP
                              #endasm
                              SPDR=0X98;
                              while(SPCR.7==0)
                              {};
                              PORTC=SPDR
                              #asm
                              in r30,spdr
                              in r31,spsr
                              #endasm
                              }
                              };
                              }
                              đối với master tạm thời 2 PINA.0 và PINA.2 đã còn với pin còn lại tương tự
                              giải thích chương trình:
                              #asm
                              in r30,spdr
                              in r31,spsr
                              #endasm
                              là các lệnh xóa cờ SPIF.
                              #asm
                              NOP
                              #endasm
                              là độ trễ để cho dữ liệu ổn định trên spdr của slave
                              Đối với SLAVE:
                              //đã khởi tạo xong cho spi ở chế độ slave
                              main:
                              {
                              while(1)
                              {
                              if(PINB.4==0)
                              {
                              SPDR=0x54;
                              while(SPCR.7==0)
                              {};
                              PORTC=SPDR;
                              #asm
                              in r30,spdr
                              in r31,spsr
                              #endasm
                              }
                              };
                              }
                              xong !mọi người đừng cười nhá
                              Bác viết code này nghĩa là bấm nút ở PInA0 thì master truyền 0x56 cho sla và đẩy giá trị trả về từ sla vào port C của mas luôn... ấn nút pinA.2 thì mas gửi 0x98 và đẩy giá trị trả về từ sla vào portC của mas luôn... với sla thì ngay khi đc master gọi sẽ phản hồi về là 0x54 ? E trình bày thế có đúng k ạ ?

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              • vi van pham
                                Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?
                                bởi vi van pham
                                Đồng ý với Bqv.
                                50 năm làm nghề, tôi đã chứng kiến 3 lần máy x quang mới nhập từ nước ngoài về bị lỗi.
                                - Lần thứ 1 máy xq của Pháp được ks Pháp lằp đặt bị lỗi 1 con didode, đưa cho ks Pháp con didode khác cùng mã số, ông...
                                hôm nay, 08:09
                              • mèomướp
                                Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?
                                bởi mèomướp
                                Dạ chú dinh... muốn sửa lỗi cho hãng thì chú cứ gửi những hình ảnh, video cho họ đi ạ, chú có thể tìm thông tin của những lãnh đạo bên ấy để gửi thì sẽ hiệu quả hơn ạ. Về tổng quan thì họ sẽ ko phản hồi rõ ràng đâu ạ, vì nhận...
                                hôm nay, 06:19
                              • bqviet
                                Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?
                                bởi bqviet
                                Cuối năm bàn thêm chuyện to hơn chút, đấy là 2 vụ rơi đám 737 đời mới và trục trặc ở cả tá chiếc khác. Ngay cả những thứ tưởng như cao siêu sang xịn thật thì vẫn có thể gặp trường hợp oái oăm như thường. Từ hồi đó bqv đã thấy khó hiểu làm sao lại đẻ ra đám MCAS quái thai đến thế được. Rồi...
                                24-01-2025, 19:40
                              • bqviet
                                Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?
                                bởi bqviet
                                Bqv phải vào ngay để tán đồng với bài viết trên của bạn. Chỉ bàn về kỹ thuật, thiết bị máy móc của hãng dù danh tiếng vẫn có thể xảy ra những chuyện ngoài dự kiến, thậm chí những chuyện tưởng như không bao giờ có thể xảy ra....
                                24-01-2025, 19:31
                              • dinhthuong80
                                Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?
                                bởi dinhthuong80
                                (ĐT chia sẻ MPPT này, với mong muốn rằng, chúng ta hãy tự tin lên, hãy tự hào là người VN, đừng quá tin vào người khác, đừng quá thần tượng họ, cần kiểm tra thực chứng chứ không nên cứ cho các thiết bị thông minh, cao siêu là hoàn hảo)
                                24-01-2025, 12:08
                              • dinhthuong80
                                Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?
                                bởi dinhthuong80
                                Dưới đây là hình ảnh thực:

                                (bị phạm con tụ pi C17 (phía trên IC U3/DIP08: văng mất xác!)

                                (hàn vào vị trí C17 tụ pi 27nF ( giá trị phỏng đoán từ 10-100nF!), mạch vẫn chạy như trước khi cạy keo)...
                                24-01-2025, 12:05
                              • dinhthuong80
                                Trả lời cho Giúp em về mạch MPPT và Solar Panel với!?
                                bởi dinhthuong80
                                ĐT đã mạnh dạn mail thử cho hãng SRNE, họ trả lời là nó dùng nhiệt điện trở ở bên trong mạch như sau:

                                "Our street light controller product triggers high temperature protection based on internal thermistor sampling''

                                Thấy hơi lo lắng vì kiến thức điện tử...
                                24-01-2025, 11:39
                              • mèomướp
                                Trả lời cho tìm mua đồng hồ vạn năng
                                bởi mèomướp
                                Dạ chú mua cái kẹp dòng ấy ạ. Chị hàng xóm nhà cháu có 1 cái thấy lâu lâu rùi chưa hỏng ạ. Ví dụ như mẫu này trên shoppee đầy ạ...
                                https://vn.shp.ee/dWYVgq7
                                21-01-2025, 12:48
                              • vi van pham
                                Trả lời cho Sửa bộ nguồn DC 60V 45A
                                bởi vi van pham
                                Bác Đinh Vặn sai rồi,bây giờ con nít mẫu giáo đã giải phương trình 2 ẩn số rồi.
                                Tôi chứng minh bác lên youtube đầy video đơn giản tựa rất hot, chỉ 1 transistor hay 1 con diode và hướng dẩn cách làm, tác giả không vẽ sơ đồ mạch điện...
                                21-01-2025, 11:55
                              • nguyendinhvan
                                Trả lời cho Sửa bộ nguồn DC 60V 45A
                                bởi nguyendinhvan
                                Bây giờ mới có tháng giêng, bao giờ mới đến tháng mười ?
                                Các cháu mẫu giáo mới lên lớp 1 được có 4 tháng. Nên đừng lấy lý do chúng nó đã đi học rồi để bắt nó viết một bài luận văn, hay là giải bài toán hàm. Phải kiên nhẫn...
                                21-01-2025, 00:47
                              Đang tải...
                              X