Thông báo

Collapse
No announcement yet.

a USART trong AVR

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

  • #31
    Ý tưởng của em là đúng. Để nối mạng thì mỗi nốt mạng(slave) sẽ có một địa chỉ, master sẽ sử dụng các địa chỉ này để liên lạc với các slave. Nhưng dùng kiểu kết nối 232 như của em là không ổn về mặt tín hiệu vì tín hiệu 232 dễ nhiễu nên không thể truyền đi xa được. Thường RS232 chỉ dùng để kết nối 1<->1 trong khoảng cách <15m. Với những ứng dụng vừa phải người ta sẽ dùng mạng RS485 hoặc cao hơn là mạng LAN.

    Comment


    • #32
      chào các bác.có ai dùng AVR dể truyền thông nối tiếp vói khung du liệu 9 bit ko?có ai có tài liệu về vấn đề này ko, gủi cho đệ xin vói.t dang làm đò án nên ít lên mạng,xin các bác gủi vào mail cho đẹ vói.địa chỉ của mình là:dientu49@gmail.com

      Comment


      • #33
        có ai trả lòi dệ ko vậy.
        có thể cho m mọt ví dụ truyền thông vói 9 bit dữ liệu,dùng AT16

        Comment


        • #34
          Nguyên văn bởi hungnp Xem bài viết
          Ý tưởng của em là đúng. Để nối mạng thì mỗi nốt mạng(slave) sẽ có một địa chỉ, master sẽ sử dụng các địa chỉ này để liên lạc với các slave. Nhưng dùng kiểu kết nối 232 như của em là không ổn về mặt tín hiệu vì tín hiệu 232 dễ nhiễu nên không thể truyền đi xa được. Thường RS232 chỉ dùng để kết nối 1<->1 trong khoảng cách <15m. Với những ứng dụng vừa phải người ta sẽ dùng mạng RS485 hoặc cao hơn là mạng LAN.
          ơ thế đấy là kiểu RS232 hả anh
          thôi thế thì em lại phải nghiên cứu thêm vậy
          Thiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.

          Comment


          • #35
            Nguyên văn bởi lytau Xem bài viết
            có ai trả lòi dệ ko vậy.
            có thể cho m mọt ví dụ truyền thông vói 9 bit dữ liệu,dùng AT16
            9 bít có thể coi là dạng mở rộng của các kiểu truyền nối tiếp, để làm cho nó chuyên nghiệp thì nên tìm hiểu giao thức truyền I2C ,sau đó phát triển lên để truyền nhiều bit hơn. Chúc bác thành công.
            Nỏ biết chữ mần răng ký được??!! Thôi nhé.

            Comment


            • #36
              Nguyên văn bởi lytau Xem bài viết
              có ai trả lòi dệ ko vậy.
              có thể cho m mọt ví dụ truyền thông vói 9 bit dữ liệu,dùng AT16
              9 bit như bác thắng đã bảo, y hệt 8 bit, chả có gì khác cả, , chỉ khác lúc khai báo khung truyền thôi, mà bạn đã truyền được 8 thì 9 thử là đc thôi, có gì cứ ... " xem datasheet "
              *** Thành viên không biết gì về điện ***

              Comment


              • #37
                nói chung a khuyên Bích nên bỏ cái ý định giao tiếp nhiều chíp bằng USART đi là hay nhất, cứ thử I2C, khó khăn có thể nhờ mọi người chỉ cho mà, hehe ...
                *** Thành viên không biết gì về điện ***

                Comment


                • #38
                  Nguyên văn bởi Le Thi Bich Xem bài viết
                  ơ thế đấy là kiểu RS232 hả anh
                  thôi thế thì em lại phải nghiên cứu thêm vậy
                  Em muốn dùng USART giao tiếp nhiều chíp thì hãy dùng chế độ Multi Processor Communication.
                  Trong đó có một con Master, các con còn lại là Slave.

                  Khi thiết lập là Slave, nó sẽ được kích hoạt một bộ lọc khung dữ liệu đầu vào, khung dữ liệu nào ko chứa thông tin địa chỉ sẽ bị bỏ qua.

                  Dùng chế độ này có nhược điểm là các slave chỉ có khả năng nhận dữ liệu. Do USART ko có chức năng phân quyền ưu tiên sử dụng bus như của I2C (two wire serial interface).
                  +Nếu dùng khung dữ liệu 5-->8bit thì phải dùng 2 bit stop. Bit stop đầu tiên sẽ chỉ cho Slave biết khung dữ liệu đi vào là khung dữ liệu địa chỉ hay khung Data.
                  +Nếu khung dữ liệu là 9bit thì bit thứ 9 sẽ chỉ ra cho Slave biết khung dữ liệu đi vào là khung dữ liệu địa chỉ hay khung Data.

                  +Em xem cách thiết lập mode này trong datasheet phần Using MPCM

                  Chúc e ngâm cứu vui vẻ, lỡ ngâm cứu rồi thì ráng đi cho trọn mới thấy hết cái hay của cái mình nghiên cứu.
                  Last edited by apple; 24-10-2008, 23:19.
                  Mấy ai định nghĩa được tình yêu.
                  Có gì đâu một buổi chiều.
                  Kề dao lên cổ yêu hay chết .
                  Gật đầu cái rụp thế là yêu.

                  --------
                  Apple

                  Comment


                  • #39
                    thật ra thì em cũng không có ứng dụng bắt buộc nào phải làm, vấn đề em mới học cách truyền với USART nên thử hết các khả năng của nó xem có vấn đề jf thôi.
                    làm như cách của em cũng được chỉ có 2 điểm hạn chế em chưa khắc phục được là tốc độ truyền chậm và nếu byte dữ liệu trùng với byteđia chỉ của một chíp nào thì nó sẽ nhận ngay byte sau đó làm dữ liệu, em biết là buồn cười xong em thử để hiểu thêm về USART thôi các anh ạ.sau đó tất nhiên em sẽ phải học thêm các chuẩn giao tiếp khac chứ
                    anh APPle có thể nói cụ thể hơn về chế độ multi không hoặc cho em xin một đoạn code ví dụ thì tốt quá,
                    em cảm ơn các anh nhiều!.
                    Thiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.

                    Comment


                    • #40
                      Các bạn cho mình hỏi các hàm puts(), printf(), scanf(), sử dụng khi nào nhỉ. Mình muốn truyền một chuỗi ký tự lên máy tính qua cổng com thì phải làm thế nào! Sau đó sử dụng VB để nhận các ký tự này!!

                      Comment


                      • #41
                        các anh cho em hỏi tí:
                        khi đang làm việc mà nhận dữ liệu qua "USART" thì có phải ngừng các hoạt động khác không ạ(nó có ngắt không) hay nó tự động nhập vào thanh ghi của nó
                        Thiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.

                        Comment


                        • #42
                          Nguyên văn bởi Le Thi Bich Xem bài viết
                          các anh cho em hỏi tí:
                          khi đang làm việc mà nhận dữ liệu qua "USART" thì có phải ngừng các hoạt động khác không ạ(nó có ngắt không) hay nó tự động nhập vào thanh ghi của nó
                          Chào Bích,
                          Với câu hỏi này thì đáp án như sau: Ngừng hay không, ngắt hay không là do mình thiết lập. Nết thiết lập dùng ngắt thì khi đang làm việc gì đó mà nhận xong 1 byte vào thì VĐK thì xảy ra ngắt nhận. Truyền đi cũng vậy... Còn nếu không thiết lập ngắt thì muốn nhận được khi VĐK làm việc khác thì ta phải luôn kiểm tra cờ nhận. Bình thường cờ nhận =0 khi nhận xong 1 byte thì nó =1.
                          -------
                          Khi gửi nhiều byte cùng lúc không ai dùng trễ cả, mà dùng ngắt để truyền tự động hoặc kiểm tra cờ để truyền thủ công. Nếu không làm như vậy thì byte trước chưa truyền hết đã ghi byte khác vào->truyền sai. Code VR nó thiết lập sẵn bộ đệm >=8 byte khi dùng ngắt là như vậy.
                          -------
                          Khoảng cách truyền xa nhất phụ thuộc nhiều yếu tố như chất lượng dây dẫn, tốc độ... Để truyền xa từ VĐK người ta phải chuyển nó ra giao diện RS232 ( +-12V). Với rs232 theo lý thuyết <=15m --> nếu theo lý thuyết nhiều khi món. Với kinh nghiệm thực tế: dây chất lượng thường thường, tốc độ lên đến 38400 baud thì khoảng cách đạt được 50m.
                          -------
                          Bích làm giao tiếp 1 M với 3 S như vậy là đúng, chỉ phải chỉnh 1 chút - nói bên dưới. Các anh hình như không làm thực tế nhiều và M & S (dùng nối tiếp) nên cứ nói lung tung làm em nó băn khoăn. Không phải dùng I2C.... gì cả. Nếu nối trực tiếp các chân TX, RX của M và các S thì cũng được 1 M và >3 S, khoảng cách cớ 5m. Còn muốn nối xa hơn thì con M nối đến max232, nhóm S dùng chung 1 max232 ( phần TTL nối đến các S) - nói thế này chắc Bích hiểu ngay cách nối nhỉ?. Kiểu nối này tôi và nghaiha đã nói nhiều trong diễn đàn này rồi.
                          Thực tế dùng Rs485 cũng giống dùng rs232 bán song công thôi. Chuẩn Modbus, HDLC, FLAG... thì cũng dùng được cho đường truyền vật lý rs232, rs485... Trong các giao thức này họ tổ chức 1 gói tin ( frame) nhiều byte, trong đó có cả các byte địa chỉ...
                          Bích cứ làm như của B nhưng thay vì truyền 1 byte 1 gói B hãy tăng lên >2 byte. Trong đó có 1 byte địa chỉ, 1 byte dữ liệu... Khi M truyền nó truyền 2 byte 1 lần. các S khi nhận cũng phải nhận 2 byte thì mới kiểm tra phần địa chỉ, nếu trùng địa chỉ với mình thì nhận byte thứ 2 làm dữ liệu... khi báo cáo về cũng vậy, có yêu cầu từ M đến 1 S cụ thể thì S mới được truyền 2 byte về M. Đây là cách làm mà các kỹ sư trẻ ở Việt Nam thường dùng vì dễ. Nên truyền 1 gói lớn hơn 2 byte vì như vậy sẽ đủ thông tin cho 1 lần truyền và có các byte kiểm tra lỗi....
                          Nếu muốn tự động thì cấu hình VĐK họat động chế độ đa xử lý- truyền nhận 9 bit dữ liệu. bít 9 =1 thì dữ liệu truyền là địa chỉ, =0 là dữ liệu. Khi 1 S nhận được byte có bit 9=1 mà trùng địa chỉ của nó thì nó chuyển sang nạnn dữ liệu từ các byte tiếp theo, lúc này bit 9=0 -> các S khác không sinh ra ngắt nối tiếp được...

                          email:mahaco@fpt.vn

                          Comment


                          • #43
                            Nguyên văn bởi hoctro89xxx Xem bài viết
                            Chào Bích,
                            Với câu hỏi này thì đáp án như sau: Ngừng hay không, ngắt hay không là do mình thiết lập. Nết thiết lập dùng ngắt thì khi đang làm việc gì đó mà nhận xong 1 byte vào thì VĐK thì xảy ra ngắt nhận. Truyền đi cũng vậy... Còn nếu không thiết lập ngắt thì muốn nhận được khi VĐK làm việc khác thì ta phải luôn kiểm tra cờ nhận. Bình thường cờ nhận =0 khi nhận xong 1 byte thì nó =1.
                            -------
                            Khi gửi nhiều byte cùng lúc không ai dùng trễ cả, mà dùng ngắt để truyền tự động hoặc kiểm tra cờ để truyền thủ công. Nếu không làm như vậy thì byte trước chưa truyền hết đã ghi byte khác vào->truyền sai. Code VR nó thiết lập sẵn bộ đệm >=8 byte khi dùng ngắt là như vậy.
                            -------
                            Khoảng cách truyền xa nhất phụ thuộc nhiều yếu tố như chất lượng dây dẫn, tốc độ... Để truyền xa từ VĐK người ta phải chuyển nó ra giao diện RS232 ( +-12V). Với rs232 theo lý thuyết <=15m --> nếu theo lý thuyết nhiều khi món. Với kinh nghiệm thực tế: dây chất lượng thường thường, tốc độ lên đến 38400 baud thì khoảng cách đạt được 50m.
                            -------
                            Bích làm giao tiếp 1 M với 3 S như vậy là đúng, chỉ phải chỉnh 1 chút - nói bên dưới. Các anh hình như không làm thực tế nhiều và M & S (dùng nối tiếp) nên cứ nói lung tung làm em nó băn khoăn. Không phải dùng I2C.... gì cả. Nếu nối trực tiếp các chân TX, RX của M và các S thì cũng được 1 M và >3 S, khoảng cách cớ 5m. Còn muốn nối xa hơn thì con M nối đến max232, nhóm S dùng chung 1 max232 ( phần TTL nối đến các S) - nói thế này chắc Bích hiểu ngay cách nối nhỉ?. Kiểu nối này tôi và nghaiha đã nói nhiều trong diễn đàn này rồi.
                            Thực tế dùng Rs485 cũng giống dùng rs232 bán song công thôi. Chuẩn Modbus, HDLC, FLAG... thì cũng dùng được cho đường truyền vật lý rs232, rs485... Trong các giao thức này họ tổ chức 1 gói tin ( frame) nhiều byte, trong đó có cả các byte địa chỉ...
                            Bích cứ làm như của B nhưng thay vì truyền 1 byte 1 gói B hãy tăng lên >2 byte. Trong đó có 1 byte địa chỉ, 1 byte dữ liệu... Khi M truyền nó truyền 2 byte 1 lần. các S khi nhận cũng phải nhận 2 byte thì mới kiểm tra phần địa chỉ, nếu trùng địa chỉ với mình thì nhận byte thứ 2 làm dữ liệu... khi báo cáo về cũng vậy, có yêu cầu từ M đến 1 S cụ thể thì S mới được truyền 2 byte về M. Đây là cách làm mà các kỹ sư trẻ ở Việt Nam thường dùng vì dễ. Nên truyền 1 gói lớn hơn 2 byte vì như vậy sẽ đủ thông tin cho 1 lần truyền và có các byte kiểm tra lỗi....
                            Nếu muốn tự động thì cấu hình VĐK họat động chế độ đa xử lý- truyền nhận 9 bit dữ liệu. bít 9 =1 thì dữ liệu truyền là địa chỉ, =0 là dữ liệu. Khi 1 S nhận được byte có bit 9=1 mà trùng địa chỉ của nó thì nó chuyển sang nạnn dữ liệu từ các byte tiếp theo, lúc này bit 9=0 -> các S khác không sinh ra ngắt nối tiếp được...
                            ôi trời vậy mà em không nghĩ ra, tại vì em cứ tưởng chỉ truyền được 8 bít thôi,
                            để truyền đi xa em đang có ý tưởng chuyển thành nguồn dòng chuẩn 4-20mA không biết có được không nữa
                            Thiết kế chế tạo các loại máy xoáy nắp, chiết rót định lượng dùng trong dược phẩm và thực phẩm.

                            Comment


                            • #44
                              Nguyên văn bởi Le Thi Bich Xem bài viết
                              ôi trời vậy mà em không nghĩ ra, tại vì em cứ tưởng chỉ truyền được 8 bít thôi,
                              để truyền đi xa em đang có ý tưởng chuyển thành nguồn dòng chuẩn 4-20mA không biết có được không nữa
                              Sao phải mệt vậy em, hãy dùng chuyển đổi Serial <-> rs485 là OK ngay thôi. Nó là 1 mạch cứng mà IC chủ đạo là con SN75176, Tx,Rx từ AVR đưa thẳng vào đây --> nó sẽ ra rs485 -> xa được >1km. Mỗi con AVR em làm 1 bộ này. Lập trình để truyền nhận không có gì thay đổi, em coi nó là lập trình nối tiếp bán song công cho VĐK là được ( khi truyền thì thôi nhận và ngược lại).
                              Hãy tìm lại các bài viết của anh trong diễn đàn này, đã hướng dẫn kỹ về phần này rồi. Có cả hình vẽ chi tiết về mạch chuyển đổi này.
                              Nếu không thấy hãy liên hệ với anh.

                              email:mahaco@fpt.vn

                              Comment


                              • #45
                                Nếu muốn tự động thì cấu hình VĐK họat động chế độ đa xử lý- truyền nhận 9 bit dữ liệu. bít 9 =1 thì dữ liệu truyền là địa chỉ, =0 là dữ liệu. Khi 1 S nhận được byte có bit 9=1 mà trùng địa chỉ của nó thì nó chuyển sang nạnn dữ liệu từ các byte tiếp theo
                                Bác cho e hỏi, chế độ đa xử lý e ko rành lắm, địa chỉ của slave nó lưu ở đâu trong con slave để nó biết để lấy ra so sánh với byte địa chỉ nhận vào, e ko thấy trong datasheet nói về cái này.
                                Mấy ai định nghĩa được tình yêu.
                                Có gì đâu một buổi chiều.
                                Kề dao lên cổ yêu hay chết .
                                Gật đầu cái rụp thế là yêu.

                                --------
                                Apple

                                Comment

                                Về tác giả

                                Collapse

                                Le Thi Bich Tìm hiểu thêm về Le Thi Bich

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

                                Collapse

                                Đang tải...
                                X