Thông báo

Collapse
No announcement yet.

Cần giúp đỡ về vấn đề truyền dữ liệu lến máy tính !

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

  • Cần giúp đỡ về vấn đề truyền dữ liệu lến máy tính !

    Em đang muốn truyền dữ liệu lên máy tính sử dụng hàm putchar trong codevision, bắt đầu chỉ chuyền kí tự đơn giản như putchar(49) đáng ra phải nhận dc là số 1 nhưng đây nhận dc toàn là các kí tự lạ.
    Em đã dùng thạch anh mua ngoài chợ trời là 8000 và 12000, baudrate 9600,
    rồi sau đó chuyển sang sử dụng nguồn clock nội bên trong 4Mhz,8Mhz bằng cách chỉnh CKSELECT 0123 là 1100 và 0010 trong configure những vẫn không dc.
    Mong các anh chỉ cho em nguyên nhân là vì sao ? và cách xử lý ! Cảm ơn các anh !

  • #2
    Bạn dùng CVAR Wizard đi! Cài đặt dao động 1MHz, baudrate 9600 (sai số 0,2%). Khi nạp VDK thì trước tiên 'Erase' nó trước để đưa về mặc định dao động của IC là 1MHz bên trong. Sau khi nạp, để kiểm chứng, bạn chạy ch.trình Terminal của CVAVR (cũng cài baudrate 9600 giống phần cứng) thì sẽ có ngay kết quả mà!
    !e

    Comment


    • #3
      Nguyên văn bởi zemen Xem bài viết
      Bạn dùng CVAR Wizard đi! Cài đặt dao động 1MHz, baudrate 9600 (sai số 0,2%). Khi nạp VDK thì trước tiên 'Erase' nó trước để đưa về mặc định dao động của IC là 1MHz bên trong. Sau khi nạp, để kiểm chứng, bạn chạy ch.trình Terminal của CVAVR (cũng cài baudrate 9600 giống phần cứng) thì sẽ có ngay kết quả mà!
      Cảm ơn a zemem, nhưng kết quả vẫn như vậy hịc, em đã thử mô phỏng trên protues nhưng sao sau khi nó đi qua max 232 lại là "g" chứ ko phải là "1" ? Và khi dùng hàm delay_ms thì ở mạch thật lại không truyền lên dc ? (đã thay max232 rùi ) Các anh xem lỗi hộ em với nhé ! thanks
      Attached Files

      Comment


      • #4
        Tôi thấy trong code của em, phần đầu tiên ghi:
        Chip type : ATmega16
        Program type : Application
        Clock frequency : 11.059200 MHz
        Phải chăng em dùng CodeWizard ban đầu để thiết lập các thông số cho ngoại vi, chọn thạch anh là 11.0592 trong khi lại hàn thạch anh 8MHz và 12MHz?
        Em lưu ý rằng việc khai báo giá trị thạch anh sử dụng khi dùng CodeWizard (cùng tab với chọn loại chip) là quan trọng để tạo ra giá trị ghi vào 2 thanh ghi baudrate tương ứng. Nó không đơn thuần chỉ là mấy dòng chú thích phía trên đầu file mã nguồn của mình đâu.
        Với thạch anh 11.0592MHz, giá trị tự động tạo ra của CodeWizard như trong code của em là đúng (UBRRH = 0x00 và UBRRL = 0x47).
        Nhưng thạch anh em mua được và hàn vào mạch giả sử là 8.0MHz thì khi khai báo lại, giá trị tự động tạo ra của CodeWizard phải là (UBRRH = 0x00 và UBRRL = 0x33), sai số 0.2%.
        Vấn đề nằm ở giá trị ghi vào thanh ghi baudrate. Em khai báo 1 giá trị thạch anh khác (11.0592MHz), trong khi lại dùng thực tế 1 giá trị khác (8Mhz, 12MHz, thậm chí dao động RC nội 1MHz, ...).
        Cẩn thận cho lần sau nhé.

        Thân mến,
        blackmoon.

        Comment


        • #5
          Xóa chip AVR

          Nguyên văn bởi zemen Xem bài viết
          Khi nạp VDK thì trước tiên 'Erase' nó trước để đưa về mặc định dao động của IC là 1MHz bên trong.
          Xin phép đỡ lời đại hiệp dế mèn, khi ta xóa chip AVR thì các fuse sẽ không bị ảnh hưởng nên cấu hình fuse gần nhất sẽ vẫn có tác dụng. Vì thế nếu trước khi xóa ta đang cấu hình cho AVR chạy với thạch anh ngoài chẳng hạn, thì sau khi xóa vẫn là vậy, không trở về dao động mặc định bên trong là 1MHz đâu. Muốn trở về thì phải tự tay cấu hình lại.
          Khi xóa chip AVR, có vài thứ bị ảnh hưởng:
          - bộ nhớ chương trình Flash.
          - bộ nhớ EEPROM (tuy nhiên vẫn có thể cấu hình để ko xóa EEPROM khi xóa chip bằng 1 fuse).
          - lockbit.

          Thân mến,
          blackmoon.

          Comment


          • #6
            Nguyên văn bởi blackmoon Xem bài viết
            Tôi thấy trong code của em, phần đầu tiên ghi:

            Phải chăng em dùng CodeWizard ban đầu để thiết lập các thông số cho ngoại vi, chọn thạch anh là 11.0592 trong khi lại hàn thạch anh 8MHz và 12MHz?
            Em lưu ý rằng việc khai báo giá trị thạch anh sử dụng khi dùng CodeWizard (cùng tab với chọn loại chip) là quan trọng để tạo ra giá trị ghi vào 2 thanh ghi baudrate tương ứng. Nó không đơn thuần chỉ là mấy dòng chú thích phía trên đầu file mã nguồn của mình đâu.
            Với thạch anh 11.0592MHz, giá trị tự động tạo ra của CodeWizard như trong code của em là đúng (UBRRH = 0x00 và UBRRL = 0x47).
            Nhưng thạch anh em mua được và hàn vào mạch giả sử là 8.0MHz thì khi khai báo lại, giá trị tự động tạo ra của CodeWizard phải là (UBRRH = 0x00 và UBRRL = 0x33), sai số 0.2%.
            Vấn đề nằm ở giá trị ghi vào thanh ghi baudrate. Em khai báo 1 giá trị thạch anh khác (11.0592MHz), trong khi lại dùng thực tế 1 giá trị khác (8Mhz, 12MHz, thậm chí dao động RC nội 1MHz, ...).
            Cẩn thận cho lần sau nhé.

            Thân mến,
            blackmoon.
            hịc, vẫn ko dc a à! em đã thử với 2 con thạch anh 8000 và 12000, đã hiệu chỉnh trong codewinzard tương ứng với nó và thủ chỉnh cả là 11,5Mhz (vì hình như thạch anh ngoài chợ trời chỉ trong khoảng đó) nhưng vẫn ko dc . Khi chạy thử thì 3 trường hợp :
            - Chạy nhiều kí tự lung tung
            - Chỉ chạy kí tự @
            - Và không chạy gì khi thêm câu lệnh delay_ms(1000) ;
            Và khi mô phỏng cũng vậy, sao sau khi qua Max 232 lại là "g" . Các anh xem giúp e với nhé !

            Comment


            • #7
              Nguyên văn bởi blackmoon Xem bài viết
              Xin phép đỡ lời đại hiệp dế mèn, khi ta xóa chip AVR thì các fuse sẽ không bị ảnh hưởng nên cấu hình fuse gần nhất sẽ vẫn có tác dụng. Vì thế nếu trước khi xóa ta đang cấu hình cho AVR chạy với thạch anh ngoài chẳng hạn, thì sau khi xóa vẫn là vậy, không trở về dao động mặc định bên trong là 1MHz đâu. Muốn trở về thì phải tự tay cấu hình lại.
              Khi xóa chip AVR, có vài thứ bị ảnh hưởng:
              - bộ nhớ chương trình Flash.
              - bộ nhớ EEPROM (tuy nhiên vẫn có thể cấu hình để ko xóa EEPROM khi xóa chip bằng 1 fuse).
              - lockbit.

              Thân mến,
              blackmoon.
              Vậy thì chắc là tùy phần mềm đó blackmoon! Như ISP Flash Programmer 3.7: khi nhấn "Erase", chẳng hạn ATmega32, thì bảng cấu hình của nó tự động đưa về các giá trị mặc định: 1MHz dao động trong, dùng JTAG, xóa EEPROM,... Nếu ta nhấn "Program" thì IC sẽ nhận file hex với cấu hình mặc định này. Ta có thể kiểm tra lại bằng nhấn "Signature" và mở "Fuse Bytes" ra coi mà!
              À, mình o phải là đại hiệp đại hủng gì đâu, làm nhiều nên quen tay rồi đó thôi! blackmoon mới đáng nể ấy!
              !e

              Comment


              • #8
                Xin chào dế mèn,
                Đúng là nếu hiểu theo từ Erase in trên nút bấm của giao diện phần mềm nạp thì mỗi phần mềm 1 khác. Tuy nhiên cũng mong dế mèn thông cảm cho blackmoon, vì blackmoon hay ỷ lại vào datasheet, ví như con mega32, phần Fuse bits (trang 258) nó nói thế này:
                The status of the fuse bits is not affected by Chip Erase.
                Tại vì blackmoon hiểu từ Erase theo nghĩa "Chip Erase" trong datasheet nên đưa ra ý kiến vậy, chứ không có ý bắt bẻ gì cả.
                Đúng là phần mềm nạp thì mỗi thằng một khác. Các bạn mới học AVR cũng nên lưu ý việc này, kẻo không để ý mấy cái fuse bit bị xóa thì lại chạy chậm như rùa với cái dao động RC bên trong thôi.
                Thân mến,
                blackmoon.

                Comment


                • #9
                  Nguyên văn bởi yen_trang Xem bài viết
                  hịc, vẫn ko dc a à! em đã thử với 2 con thạch anh 8000 và 12000, đã hiệu chỉnh trong codewinzard tương ứng với nó và thủ chỉnh cả là 11,5Mhz (vì hình như thạch anh ngoài chợ trời chỉ trong khoảng đó) nhưng vẫn ko dc ...
                  Nếu em mày mò tiếp mà không ra, có thể email lại cho tôi và mang mạch đến tôi tìm lỗi cho.

                  Thân mến,
                  blackmoon.

                  Comment


                  • #10
                    - Chạy nhiều kí tự lung tung
                    - Chỉ chạy kí tự @
                    - Và không chạy gì khi thêm câu lệnh delay_ms(1000) ;
                    Và khi mô phỏng cũng vậy, sao sau khi qua Max 232 lại là "g"
                    Mình thử code của bạn trên mạch cứng thì chắc chắn là truyền lên máy tính là đúng, bạn thử xem lại phần cứng của bạn.
                    Hiện tượng câu lệnh delay_ms(1000) chạy sai có thể do bạn dùng codewizard để thiết lập cho chip atmega8 nhưng bạn lại thay đổi #include <mega8.h> sang #inculde <mega16.h>.
                    @Bác blackmoon: em chạy trên mạch thật thì đúng nhưng cũng giống như bác yen_trang khi mô phỏng trên proteus ký tự truyển sau con max 232 lại sai, em có gửi code và mạch mô phỏng.
                    Cảm ơn bác nhiều!
                    Attached Files
                    ----------------------
                    Bể học là mênh mông!

                    Comment


                    • #11
                      Nguyên văn bởi hai_abc Xem bài viết
                      Mình thử code của bạn trên mạch cứng thì chắc chắn là truyền lên máy tính là đúng, bạn thử xem lại phần cứng của bạn.
                      Hiện tượng câu lệnh delay_ms(1000) chạy sai có thể do bạn dùng codewizard để thiết lập cho chip atmega8 nhưng bạn lại thay đổi #include <mega8.h> sang #inculde <mega16.h>....
                      @anh hai_abc : cho em hoi la anh chay cai code thì dùng thạch anh 12000 hay bao nhiêu? nếu mà thạch anh 11,0592Mhz thì hình như ngoài chợ trời ko có thì phải .

                      Comment


                      • #12
                        Nguyên văn bởi yen_trang Xem bài viết
                        Em đang muốn truyền dữ liệu lên máy tính sử dụng hàm putchar trong codevision, bắt đầu chỉ chuyền kí tự đơn giản như putchar(49) đáng ra phải nhận dc là số 1 nhưng đây nhận dc toàn là các kí tự lạ.
                        Em đã dùng thạch anh mua ngoài chợ trời là 8000 và 12000, baudrate 9600,
                        rồi sau đó chuyển sang sử dụng nguồn clock nội bên trong 4Mhz,8Mhz bằng cách chỉnh CKSELECT 0123 là 1100 và 0010 trong configure những vẫn không dc.
                        Mong các anh chỉ cho em nguyên nhân là vì sao ? và cách xử lý ! Cảm ơn các anh !
                        Trong code mình thấy toàn bộ chân vào ra bạn chưa thiết lập gì cả. Liệu có phải đó là lỗi không?
                        Last edited by nbb3i; 06-03-2009, 23:27.
                        123...

                        Comment


                        • #13
                          Nguyên văn bởi nbb3i Xem bài viết
                          Trong code mình thấy toàn bộ chân vào ra bạn chưa thiết lập gì cả. Liệu có phải đó là lỗi không?
                          Chân vào là sao bạn? Bạn nói rõ hơn cho mình được ko? Mình chỉ muốn truyền dữ liệu lên máy tính đều đặn theo thời gian thui, chưa điều khiển gì từ máy tính cả.

                          Comment


                          • #14
                            Nguyên văn bởi yen_trang Xem bài viết
                            Chân vào là sao bạn? Bạn nói rõ hơn cho mình được ko? Mình chỉ muốn truyền dữ liệu lên máy tính đều đặn theo thời gian thui, chưa điều khiển gì từ máy tính cả.
                            nghĩa là: bạn muốn truyền dữ liệu từ VĐK vào máy tính thì phải phải lập trình cho VĐK xuất tín hiệu ra các chân của nó, rồi từ các chân đó truyền đến máy tính. Để nhập - xuất dữ liệu tại các chân của VĐK, bạn phải qui định nó là chân In hoặc Out.
                            :-)

                            Comment


                            • #15
                              thạch anh 11,0592Mhz thì hình như ngoài chợ trời ko có thì phải
                              Thạch anh 11.0592Mhz thì ở đâu cũng bán. Ở chợ trời thì bạn tìm đến cửa hàng Mai Khanh nằm ở cuối dãy bán hàng bên tay trái - có nhiều Led xanh đỏ sáng lập lòe. Hoặc lên 17A-HànThuyên là chắc chắn có.

                              bạn muốn truyền dữ liệu từ VĐK vào máy tính thì phải phải lập trình cho VĐK xuất tín hiệu ra các chân của nó, rồi từ các chân đó truyền đến máy tính. Để nhập - xuất dữ liệu tại các chân của VĐK, bạn phải qui định nó là chân In hoặc Out.
                              Khi thiết lập chế độ truyền thông nối tiếp thì không cần cấu hình chân AVR là In hay Out.
                              ----------------------
                              Bể học là mênh mông!

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X