Thông báo

Collapse
No announcement yet.

Truyền nhận dữ liệu chân RXD TXD của AVR dùng chuyển mạch

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

  • Truyền nhận dữ liệu chân RXD TXD của AVR dùng chuyển mạch

    AVR có 2 chân truyền nhận dữ liệu RXD và TXD ( ở đây mình truyền nhận theo chuẩn USART ) . nhưng vấn đề là mình đã dùng 2 chân này kết nối với cổng COM để gửi dữ liệu lên máy tính. Dữ liệu vào mạch của mình lấy tín hiệu sau module thu GPS cũng theo chuẩn USART , nghĩa là cũng phải dùng 2 chân này .vậy mình xin hỏi các bạn có kinh nghiệm về vấn đề này là ?

    1.Mình có thể dùng chung cả dữ liệu vào và ra ở 2 chân này ko. Mình nghĩ là nó sẽ ảnh hưởng ?

    2.Mình nghĩ đến khả năng là dùng 1 cái chuyển mạch
    nhưng ko biết ko nên dùng IC nào. lập trình ra sao.?

    Bạn nào biết chỉ mình nên dùng IC nào.? sơ đồ kết nối ra sao ? nếu có thể hướng dẫn mình lập trình cho nó?

    cám ơn mọi người đã đọc bài.mong sớm nhận được trả lời của mọi người
    |

  • #2
    AVR có 2 chân truyền nhận dữ liệu RXD và TXD ( ở đây mình truyền nhận theo chuẩn USART ) . nhưng vấn đề là mình đã dùng 2 chân này kết nối với cổng COM để gửi dữ liệu lên máy tính. Dữ liệu vào mạch của mình lấy tín hiệu sau module thu GPS cũng theo chuẩn USART , nghĩa là cũng phải dùng 2 chân này .vậy mình xin hỏi các bạn có kinh nghiệm về vấn đề này là ?

    1.Mình có thể dùng chung cả dữ liệu vào và ra ở 2 chân này ko. Mình nghĩ là nó sẽ ảnh hưởng ?
    - Chắc chắn là bạn không thể dùng chung 2 chân này rồi, bởi vì trong cả hai tác vụ nhận dữ liệu từ máy tính và module GPS, VDK của bạn đều ở trạng thái bị động, tức là không thể biết trước được khi nào mình phải nhận dữ liệu. Dó đó không thể tránh được các trường hợp xung đột, ví dụ như đang nhận dữ liệu từ máy tính thì dữ liệu từ GPS xen vào và ngược lại. Truyền dữ liệu cho máy tính thì đồng thời GPS cũng nhận được và ngược lại. Đang truyền cho máy tính thì nhận được dữ liệu từ GPS và ngược lại... Do vậy chắc chắn là bạn phải có biện pháp để tách riêng quyền sử dụng cổng COM cho 2 ngoại vi là máy tính và GPS.

    - Có một số giải pháp mà bạn có thể sử dụng như sau:
    + Dùng VDK có 2 cổng COM. Thật đơn giản, bạn chỉ cần dùng một con VDK có 2 COM. mỗi tội giá hơi chát.
    + Dùng dăm chọn bằng tay, hoặc chuyển mạch bằng tay. Mỗi lần bạn muốn đổi đường truyền thì dùng tay cắm lại dăm hoặc bấm công tắc,--> thật là bất tiện.
    + Dùng 2 bộ dồn kênh (Mux) 2 đầu vào 1 đầu ra. VĐK lập trình tín hiệu cho phép chọn kênh của Mux sao cho ứng với tổ hợp tín hiệu điều khiển này thì chọn máy tính, ứng với tổ hợp tín hiệu điều khiển khác thì chọn module GPS.

    Trong mấy giải pháp này chỉ có sử dụng 2 COM là tối ưu thôi vì ở hai giải pháp sau bạn vẫn không giải quyết được tình trạng truyền nhận dữ liệu đồng thời giữa 2 ngoại vi mà chỉ có thể sử dụng 1 trong 2. Vậy khi bạn đang truyền nhận với máy tính, thì rất có thể GPS sẽ gửi dữ liệu về, và chắc chắn bạn sẽ không biết để phục vụ vì phần cứng không kết nối.

    Thân mến,
    For a better world

    Comment


    • #3
      Góp thêm 1 giải pháp là sử dụng 2 con ATMEGA rẻ tiền (ATMEGA8) 1 cho GPS, 1 cho PC interface. giữa 2 MCU thì dùng giao tiếp parallel hoac SPI, I2C...

      Comment


      • #4
        Thank 2 bạn. Nhưng ở đây mình muốn dùng 1 con IC chuyển mạch có lẽ đơn giản hơn chứ. Mọi người có thể cho mình ý kiến góp ý về việc dùng IC nào ko ? Mình chưa có nhiều kinh nghiệm lắm.

        1. Bạn Toan.lv có thể nói rõ hơn về việc dùng 2 COM ko ạ. Con VDK avr nào có 2 COM vậy bạn. giá của nó thế nào. Bạn đã dùng bao giờ chưa.
        2. Zinix. ý tưởng của cậu về dùng 2 VDK cùng có vẻ hay. Bạn có thể nói rõ hơn cho mình giao tiếp parallel hoac SPI, I2C... được ko. Dùng thế nào.

        mình lập trình C ( dùng phần mềm codevisionC) với VDK là AVR

        mong sớm nhận được trả lời, Thanks
        |

        Comment


        • #5
          - Nếu dùng VDK có 2 COM thì hai cổng COM này đều dùng chuẩn RS232 nhưng chúng hoạt động độc lập với nhau, không liên quan về phần cứng, do đó bạn dùng cái này làm gì thì cũng chẳng ảnh hưởng đến cái kia. Nên bạn chẳng phải lo đến chuyện xung đột dữ liệu.
          Con VDK avr nào có 2 COM vậy bạn. giá của nó thế nào. Bạn đã dùng bao giờ chưa.
          - Đối với AVR có nhiều con có 2 COM lắm ví dụ ATmega128, ATmega162, ATmega164,...giá của bọn này hơi chát đấy, con ATmega128 giá là 130K, hai con kia thì không bít rõ bao nhiêu. Nhưng mà dùng con ATmega128 thì khỏi phải nghĩ, với cả bộ nhớ nó rộng mêng mông... tha hồ mà vẽ hưu vẽ vượn.

          Bạn có thể nói rõ hơn cho mình giao tiếp parallel hoac SPI, I2C... được ko
          - Việc kết nối 2 VDK với nhau thì tui chưa làm, nhưng giao tiếp song song, SPI, I2C thì đều là những giao tiếp cơ bản, hầu như AVR nào cũng hỗ trợ. Giao tiếp song song thì bạn cứ nối trực tiếp port của con này vào port của con kia. Con này out dữ liệu thì con kia đọc vào. SPI và I2C thì bạn cứ nối đúng vào giao diện phần cững tương ứng của nó, rồi lập trình. CodevisionAVR nó đã có thư viện hỗ trợ điều khiển tất cả các giao tiếp này rồi.

          Thân mến,
          For a better world

          Comment


          • #6
            Bạn Toàn đã trả lời dủm phần của mình rồi. Nói thêm chút ý tường đó là: bên MCU nhận dữ liệu GPS thi bạn khai báo mảng buffer[] chứa dữ liệu nhận được. Bên MCU phía giao tiếp với PC thì chỉ việc đọc dữ liệu trong buffer này theo giao thức parallel hoac SPI, I2C.. Nếu có điều kiện thì mua luôn con ATMEGA64 hoac ATMEGA128 làm cho nó đơn giản

            Comment


            • #7
              thanks 2 bạn
              Last edited by ericcantona; 02-05-2009, 23:04.
              |

              Comment


              • #8
                Thank 2 bạn rất nhìu. ý kiến của 2 bạn giúp ích cho mình rất nhìu.cho mình hỏi thêm mấy câu hỏi ?

                1. Mình vẽ mạch in dung Orcard 9.2 lite edition ( bản svien , ko can *****) nhưng khi vẽ thấy có 1 số linh kiện ko có, thư viện chân cũng vậy
                các bạn có thư viện đầy đủ của bản Orcard đấy và bản Protelus 7.0 pro thì sent cho mình với nha

                2. Có kinh nghiệm gì để sắp xếp linh kiện khi vẽ mạch in sao cho tiết kiệm diện tích nhất ko.Mà đi dây thì ko bị trùng ,để đở phải câu dây

                ---> mình ko phải chuyên về điện tử, nên ko có nhiều kinh nghiệm lắm

                mong mọi người chỉ dẫn nha.

                thank
                |

                Comment


                • #9
                  Có lẽ mình sẽ thử dùng ATmega64 xem thế nào.
                  Nếu mình truyền và nhận dữ liệu ở 2 cổng riêng biệt ( RXD TXD ) của 2 Port khác nhau thì có cần thiết lập tốc độ truyền nhận như nhau ko.? Khi khởi tạo Project trong CodevisionC thì mình thiết lập 2 cái uarst như thế nào. tần số thạch anh ra sao..có gì cần chú ý các bạn bảo mình với nha. Thời gian của mình cũng ko còn nhìu nữa. nhầm nhọt là ko kịp sửa chữa . thanks
                  |

                  Comment


                  • #10
                    Nguyên văn bởi ericcantona Xem bài viết
                    Có lẽ mình sẽ thử dùng ATmega64 xem thế nào.
                    Nếu mình truyền và nhận dữ liệu ở 2 cổng riêng biệt ( RXD TXD ) của 2 Port khác nhau thì có cần thiết lập tốc độ truyền nhận như nhau ko.? Khi khởi tạo Project trong CodevisionC thì mình thiết lập 2 cái uarst như thế nào. tần số thạch anh ra sao..có gì cần chú ý các bạn bảo mình với nha. Thời gian của mình cũng ko còn nhìu nữa. nhầm nhọt là ko kịp sửa chữa . thanks
                    mỗi uart có thể lập tốc độ truyền nhận riêng tùy theo ngoại vi gắn vào uart đó. truyền thông nên chọn tần số thạch anh lẻ theo datasheet để có sai số truyền nhỏ nhất.vd:7.3728mhz;11.0592mhz...

                    Comment


                    • #11
                      Chào các bác!
                      mình cũng đang làm với chuẩn USART,vấn đề của mình là giao tiếp giữa con mega32 với PC và 2 con mega8,minh không biết phải kết nối phần cứng và làm thế nào để truyền và nhận dữ liệu đúng địa chỉ cả.Bác nào biết giúp mình với.
                      Thanks!

                      Comment


                      • #12
                        Chào các bác!
                        mình cũng đang làm với chuẩn USART,vấn đề của mình là giao tiếp giữa con mega32 với PC và 2 con mega8,minh không biết phải kết nối phần cứng và làm thế nào để truyền và nhận dữ liệu đúng địa chỉ cả.Bác nào biết giúp mình với.
                        Thanks!
                        - Đối với USART AVR hỗ trợ 4 chế độ là:
                        + Normal Asyschronous
                        + Asyschronous double speed
                        + Master Syschronous
                        + Slave Syschronous
                        - Nếu dùng để truyền thông với máy tính thì bạn sử dụng 2 chế độ đầu. Phần cứng giao tiếp này có rất nhiều, dùng con Max232 để chuyển đổi mức điện áp
                        - Để truyền giữa 2 con với nhau, bạn sử dụng chế độ Syschronous, nối chung chân XCK của 2 con với nhau, cấu hình một con ở chế độ master, một con ở chế độ slave.
                        Chi tiết bạn xem thêm trong datasheet
                        For a better world

                        Comment

                        Về tác giả

                        Collapse

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

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

                        Collapse

                        Đang tải...
                        X