Thông báo

Collapse
No announcement yet.

Giao tiếp TWI (I2C) giữa các AVR???

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

  • Giao tiếp TWI (I2C) giữa các AVR???

    Các bác ơi! Em vẫn đang mày mò cái giao tiếp I2C của AVR (em xài con atmega8)! Trong mạch của em sử dụng 4 con AVR ( 1 Master và 3 Slaver) giao tiếp với nhau = I2C!
    Em đọc datasheet thấy nó chia ra 4 mode (Master Transmitter, Master Receiver,Slave Transmitter, Slave Receiver). Em cứ thắc mắc vì em đọc trong các tài liệu thì thấy trong I2C khi con nào truyền thì con đó làm master, như vậy các mode mà datasheet chia ra là dùng để làm gì vậy nhỉ ??? nó có ý nghĩa đối với người dùng hay với cả AVR (vì mỗi mode có cái status codes riêng )???
    Và còn trong trường hợp mạch của em thì em phải ứng dụng viết code cho việc truyền nhận như thế nào vậy các bác ??? (em dùng code vision để viết)
    Em còn mù mờ về việc này quá ! Mong các bác chỉ bảo thêm!


    Mobile: 0906300128

  • #2
    Các mode đó còn có ý nghĩa khi muốn nối mạng các con MCU lại với nhau vì khi đó một trong các MCU sẽ có một con mode master và các con còn lại là slave ( khi đó là receive ) . Và cái code riêng giống như là phân định địa chỉ từng con làm nhiệm vụ gì ! vì trên bus có nhiều con có chức năng khác nhau như RTC và EEProm đều dùng giao tiếp TWI cả nên phải có địa chỉ chỉnh định từng con nó gần giống như chức năng CS trong ic số !
    Mạch nạp Little Programmer
    MSC-51,AVR,EEPROM ... etc

    Site Fukusei shop :

    Comment


    • #3
      À! Như vậy là các mode đó đều có ý nghĩa cho AVR trong từng thời điểm tương ứng với nó phải ko bác?
      Vậy là trong giao tiếp IC thì AVR đa phần đều sử dụng lần lượt cả 4 mode đó! Không biết em nghĩ thế có gì sai ko nhỉ
      Cám ơn bác đã trả lời cho bài viết của em


      Mobile: 0906300128

      Comment


      • #4
        Ừ thường khi giao tiếp với họ 24cxx thì con MCU là mode master !
        Mạch nạp Little Programmer
        MSC-51,AVR,EEPROM ... etc

        Site Fukusei shop :

        Comment


        • #5
          Mình dùng con ATmega162 giao tiếp với con 24c512, dùng hàm mẫu của CodeVision AVR mà cũng không được. Mong các bạn chỉ giáo cho mình một số điều quan trọng trong việc giao tiếp giữa 2 con này.
          Thank's!

          Comment


          • #6
            Nguyên văn bởi sun_rise Xem bài viết
            Mình dùng con ATmega162 giao tiếp với con 24c512, dùng hàm mẫu của CodeVision AVR mà cũng không được. Mong các bạn chỉ giáo cho mình một số điều quan trọng trong việc giao tiếp giữa 2 con này.
            Thank's!
            hàm mẫu trong Codevision là hàm cơ bản để giao tiếp mà thôi, bạn cần xây dựng thêm nữa mới giao tiếp được với 24C512. bạn cần đọc kĩ datasheet của 24C512, nhất là địa chỉ, 24C512 cần đến 2 byte địa chỉ lận, ngoài ra còn có các chân địa chỉ ngoài (A0,A1,A2) để chọn chíp nữa. mình mới vừa làm xong cái này:

            #include <i2c.h>
            #include <delay.h>
            //#define EEPROM_BUS_ADDRESS 0xa0

            /* read a byte from the EEPROM */
            unsigned char eeprom_read(unsigned char eeprom_address, unsigned char address_H, unsigned address_L)
            {
            unsigned char data;
            i2c_start();
            i2c_write(eeprom_address);
            i2c_write(address_H);
            i2c_write(address_L);
            i2c_start();
            i2c_write(eeprom_address | 1);
            data=i2c_read(0);
            i2c_stop();
            delay_ms(10);

            return data;
            }

            /* write a byte to the EEPROM */
            void eeprom_write(unsigned char eeprom_address, unsigned char address_H, unsigned char address_L, unsigned char data)
            {
            i2c_start();
            i2c_write(eeprom_address);
            i2c_write(address_H);
            i2c_write(address_L);
            i2c_write(data);
            i2c_stop();
            delay_ms(10);
            }

            cái này trong phần help của Codevision có nói đến. bạn cần chỉnh sữa lại cho phù hợp! chúc bạn thành công.....
            hãy cố gắng dù vướn phải thất bại!!!!!!!!

            Comment


            • #7
              Làm theo bạn thì bạn khai báo "#define EEPROM_BUS_ADDRESS 0xa0" để làm gì? Thực chất đây chính là địa chỉ của con eeprom mà ta sử dụng. Nếu ta dùng nhiều eeprom thì cái này không cần vì địa chỉ của từng con được thay đổi dựa trên sự thiết lập 2 chân A1 và A0 (không có A2, tức là nếu chỉ set 0,1 cho các chân này một cách đơn thuần thì ta nối được tối đa là 4 con 24c512).
              Nếu dùng 1 con 24c512 thì EEPROM_BUS_ADDRESS tương đương với eeprom_address trong chương trình của bạn. Còn về phần sau thì tôi cũng làm giống bạn nhưng lạ là không thấy nó chạy. Chán ghê!
              Để tôi làm lại phần cứng và dùng linh kiện mới xem có khả thi không rồi báo cho anh em vậy.
              Cảm ơn bạn nhiều!
              Last edited by sun_rise; 03-07-2007, 20:04.

              Comment


              • #8
                Nguyên văn bởi sun_rise Xem bài viết
                Làm theo bạn thì bạn khai báo "#define EEPROM_BUS_ADDRESS 0xa0" để làm gì? Thực chất đây chính là địa chỉ của con eeprom mà ta sử dụng. Nếu ta dùng nhiều eeprom thì cái này không cần vì địa chỉ của từng con được thay đổi dựa trên sự thiết lập 2 chân A1 và A0 (không có A2, tức là nếu chỉ set 0,1 cho các chân này một cách đơn thuần thì ta nối được tối đa là 4 con 24c512).
                Nếu dùng 1 con 24c512 thì EEPROM_BUS_ADDRESS tương đương với eeprom_address trong chương trình của bạn. Còn về phần sau thì tôi cũng làm giống bạn nhưng lạ là không thấy nó chạy. Chán ghê!
                Để tôi làm lại phần cứng và dùng linh kiện mới xem có khả thi không rồi báo cho anh em vậy.
                Cảm ơn bạn nhiều!
                mình làm chạy ngon lăm đấy, bạn thử con khác coi sao, mình cũng mua 2 con nhưng mà chỉ chạy được có 1 con a! không biết con kia bị sao nữa, chắc có lẽ là đồ cũ
                hãy cố gắng dù vướn phải thất bại!!!!!!!!

                Comment


                • #9
                  có ai biết cách định địa chỉ slave cho Atmega8 không? Tớ mới tìm hiểu về i2c nên mong các huynh chỉ giáo. thanks

                  Comment


                  • #10
                    có ai biết cách định địa chỉ slave cho Atmega8 không? Tớ mới tìm hiểu về i2c nên mong các huynh chỉ giáo. thanks. tớ viết bằng bascom

                    Comment


                    • #11
                      Nguyên văn bởi chutchit
                      Em đọc datasheet thấy nó chia ra 4 mode (Master Transmitter, Master Receiver,Slave Transmitter, Slave Receiver). Em cứ thắc mắc vì em đọc trong các tài liệu thì thấy trong I2C khi con nào truyền thì con đó làm master, như vậy các mode mà datasheet chia ra là dùng để làm gì vậy nhỉ ???
                      Trong giao tiếp đồng bộ I2C, master là device quyết định clock chứ không phải là device thực hiện việc truyền. Ví dụ: khi giao tiếp với AT24Cxx, nếu AVR đọc dữ liệu của bộ nhớ thì bộ nhớ sẽ truyền dữ liệu về cho AVR, nhưng trong ghép nối này AVR luôn là master (nó cung cấp clock cho việc trao đổi dữ liệu), bộ nhớ luôn là slave (dù nó truyền dữ liệu khi AVR đọc, hay nhận dữ liệu khi AVR ghi)
                      Chính vì vậy người ta mới chia thành 4 chế độ: Master Transmitter, Master Receiver,Slave Transmitter và Slave Receiver.

                      Thân mến,
                      blackmoon.

                      Comment


                      • #12
                        Nguyên văn bởi quocdat_cdt
                        có ai biết cách định địa chỉ slave cho Atmega8 không?
                        Khi AVR hoạt động ở chế độ Slave, địa chỉ của nó sẽ được gán vào thanh ghi TWAR. Lưu ý với thanh ghi này, địa chỉ 7 bit sẽ nằm từ bit 1 đến bit 7, còn bit 0 (tên là TWGCE) là bit cho phép AVR đáp ứng lại với các lệnh gọi General Call (tạm dịch là tổng động viên) do master phát ra trên bus.
                        Thông tin thêm về General Call: bình thường TWI (hay I2C) của mỗi AVR Slave chỉ đáp ứng lại với các lệnh gọi có địa chỉ trùng với địa chỉ đã gán cho nó (đặt trong thanh ghi TWAR như đã nói ở trên). Tuy nhiên trong I2C có thêm một lệnh gọi cho phép gọi tất cả các Slave một lúc, lệnh này gọi là General Call, lúc này các Salve sẽ đáp ứng lại (thường là lắng nghe dữ liệu chuẩn bị gửi tới tất cả Slave) mà không cần địa chỉ trùng với địa chỉ của nó.
                        General Call là lệnh mà địa chỉ của Slave là 0x00.


                        Thân mến,
                        blackmoon.

                        Comment


                        • #13
                          Nguyên văn bởi sun_rise
                          Nếu dùng 1 con 24c512 thì EEPROM_BUS_ADDRESS tương đương với eeprom_address trong chương trình của bạn. Còn về phần sau thì tôi cũng làm giống bạn nhưng lạ là không thấy nó chạy. Chán ghê!
                          Để tôi làm lại phần cứng và dùng linh kiện mới xem có khả thi không rồi báo cho anh em vậy.
                          Bạn nên up sơ đồ nguyên lý và code lên.

                          Thân mến,
                          blackmoon.

                          Comment


                          • #14
                            nếu bạn cần sử dụng 1master và 3 slave thì cứ việc set các bit là ok,
                            con master sẽ hoạt động chỉ ở 2 mode là master transmit và master receiver, còn 3 con slave sẽ hoạt động ở 2 mode còn lại.
                            chú ý là bạn cần set địa chỉ cho 3 con slave khác nhau. và khi con master gọi đúng địa chỉ của nó thì nó trả tín hiệu về cho bạn thôi. toàn bộ hoạt động, xung clock trên đường truyền đều do con master quyết định.

                            Comment


                            • #15
                              thân chào.
                              mình cũng vừa tiếp cận với i2c .khi giao tiếp giữa 2 con mega8 vẫn chưa được (mô phỏng bằng Protus).
                              có ai biết souce ví dụ bằng Bascom avr cho mình xin được ko?
                              cảm ơn trước.

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X