Thông báo

Collapse
No announcement yet.

Bàn luận về mạch AVR910-USB của Prottoss

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

  • Bàn luận về mạch AVR910-USB của Prottoss

    Mình mới chuyển từ 8051 qua AVR nên có nhiều cái chưa quen.

    Cái đầu tiên đụng phải là mạch nạp AVR910-USB của Prottoss vì nó dễ làm.

    Link: http://pinokio3000.narod.ru/my_desig...rammer_eng.htm




    Thử trên testboard thì OK. Tuy nhiên có một số cái còn lăn tăn như sau:

    1. Theo datasheet, cái chân AVCC nếu không dùng chức năng ADC thì nên nối lên VCC, nhưng trong mạch lại thấy nối qua 1 R 100 và 1 C 104 lọc. Nối như vậy để làm gì và có cần thiết k? Mình có thể nối lên VCC cho tiết kiệm không gian mạch được k (bỏ R 100 và C104)?

    Datasheet: "It should be externally connected to VCC, even if the ADC is not used. If the ADC is used, it should be connected to VCC through a low-pass filter."
    2. Khi dùng header 5x2 để nối đến mạch có chip cần nạp, theo mình thấy luôn có cái R 10K nối từ VCC xuống chân RESET trên mạch đích cho hầu hết các loại chip, nếu mình nối cái R 10K luôn trong mạch nạp cho tiện được k?

    3. Nếu lấy 2 con Ziner 3.3V ghim hai chân D+ và D- và bỏ 2 con 1N4007, nguồn ATMega8 lấy 5V từ USB, phần xuất các tín hiệu MOSI, MISO, SCK, RESET bỏ luôn mấy con R 330 được k? Có an toàn k?

    4. Theo nguyên lý làm việc của mạch này nó sẽ giả lập giao tiếp USB, sử dụng driver usbser.sys chuẩn của Windows. Phần firmware dựa vào cạnh xuống của D+ nối đến INT0 của ATMega8. Dựa vào ngắt INT0 mạch sẽ nhận biết dữ liệu được yêu cầu dữ liệu từ Host (máy tính). Mình đã nhưng đọc source code usbdrv.c của tác giả nhưng tìm không thấy hàm xử lý INT0. Bác nào đã tham khảo qua có thể chỉ cho mình biết với.

    5. Nếu muốn định nghĩa lại các chân theo ý mình thì cần phải có những gì để biên dịch ?

    6. Vì giao tiếp với mạch là Virtual COM qua USB, phần Code cho App bên máy tính sử dụng đối tượng TCOMPort (Delphi) để phát, nhận dữ liệu với mạch được k?


    Rất mong được các pro chỉ giúp!
    Last edited by sphinx; 21-03-2008, 14:01. Lý do: Thêm thông tin

  • #2
    theo như nội dung câu hỏi của bạn thì mình nghĩ bạn là 1 pro rồi hoặc là tìm hiểu rất kĩ cái này rồi.
    Về việc chân AVCC, bạn đã làm trên testboard rồi sao không rút nó ra thử là biết liền, điện trở 10K kéo chân reset lên Vcc mình nghĩ nên giữ ở trên mach USB 910 như của tác giả để tránh trường hợp nó bị reset khi gặp nhiễu(chạm tay lúc cắm vào máy tính)làm máy tính không nhận ra thiết bị. Việc bỏ các trở 330 là hoàn toàn được, mình đã làm và thấy không sao cả tốt là đằng khác.
    thay 4007 bằng 2 con 3.3V ok luôn(như nhau chẳng khác gì về nguyên lý).
    Còn về driver bó tay không dám bàn, cái này phải nhờ đến các bậc siêu cao thủ thôi, tôi mới thấp thủ không dám nói.

    Comment


    • #3
      Thiết lập các fuse cho mạch nạp AVR910

      Trong quá trình làm quen với AVR, "problem" mình gặp phải là phần thiết lập các bit fuse. Bên 8051 không rắc rối như vậy nên lần đầu tiên lập trình cho MCU, kết quả test LED chạy chậm như rùa bò, kết quả xuất ra các cổng không chính xác. Nguyên nhân không để ý đến các fuse bit -> mạch chạy với dao động nội 1M. May nhờ sử dụng bộ nạp SPI 3.7, nó không đụng đến các bit fuse nên không sao.

      Sau đây là phần tiếp thu của mình về fuse bit, hy vọng có ích cho bác nào chưa ngâm kỹ về nó:

      Theo như mô tả trong datasheet của ATMega8 (Phần Memory Program\Fuse Bits) ATMega8 có 2 byte Fuse (High Byte fuse và Low Byte fuse). Một chú ý đặc biệt quan trọng có thể gây hiểu nhầm cho người đọc nếu không xem kỹ datasheet:

      Các bit fuse được đọc như logical "0", có nghĩa là nếu bit fuse nào được lập trình (programmed) thì bit đó bằng "0", ngược lại (unprogrammed) thì bit đó bằng "1".


      Nội dung của byte cao như sau:

      7 RSTDISBL
      6 WDTON
      5 SPIEN
      4 CKOPT
      3 EESAVE
      2 BOOTSZ1
      1 BOOTSZ0
      0 BOOTRST

      Giá trị mặc định của byte này là: 1101 1001 (0xD9). Theo như mô tả ở trên thì các bit fuse: SPIEN, BOOTSZ1, BOOTSZ0 được lập trình.
      Bit fuse SPIEN không thể truy cập ở chế độ lập trình SPI. Ý ngĩa các bit khác xem chi tiết trong datasheet.

      Nội dung byte thấp như sau:
      7 BODLEVEL
      6 BODEN
      5 SUT1
      4 SUT0
      3 CKSEL3
      2 CKSEL2
      1 CKSEL1
      0 CKSEL0


      Trong đó:
      SUT1-SUT0: chọn thời gian khởi động MCU.
      CKSEL3-SKSEL0: chọn nguồn clock cho MCU (xem chi tiết trong datasheet)

      Giá trị mặc định của byte này là: 1110 0001 (0xE1). Điều này có nghĩa là SUT1-SUT0=10: chế độ khởi động nhanh, CKSEL3-SKSEL0=0001: chọn nguồn clock là dao động nội 1 MHz.

      Nếu sử dụng thạch anh ngoài, tốc độ > 8Mhz thì phải thiết lập như sau:
      CKSEL3-SKSEL0: 1111
      CKOPT (trong byte cao): 0

      Chú ý: Trạng thái của các bit fuse không ảnh hưởng khi xóa chip. Các bit Fuse bị khóa nếu Lock bit 1 (LB1) được lập trình, vì thế phải lập trình các bit fuse trước khi lập trình các bit Lock.

      Đối với mạch AVR910, mình chọn như sau:

      Byte cao: 11x0 1001
      Byte thấp: 1110 1111

      Phục hồi các bit fuse nếu thiết lập sai:
      - Sử dụng một bộ nạp có chức năng reset các bit fuse
      - Sử dụng nguồn clock từ RC ngoài hoặc từ một nguồn khác đưa sang (chi tiết phần này các pro Mod đã post ở các bài trước).
      Attached Files
      Last edited by tintintin; 19-12-2007, 08:14.

      Comment


      • #4
        Mình cũng mới làm thử 1 mạch protoss nhưng thấy có vấn đề xảy ra là: nếu set fuse cho ATmega chạy với thạch anh ngoài thì mạch protoss k thể set lại được nữa. Phải dùng mạch của stk500 đọc mới được. k bit bác tintintin có gặp phải vấn đề đó k?
        K bit bác dùng chương trình j để nạp với mạch của protoss. Còn tớ thì dùng avrprog trong bộ avrstudio của atmel. Mình thấy hình bạn post lên trông lạ lắm.

        Vote hộ tớ với. Thanks!

        Comment


        • #5
          Nguyên văn bởi va_hien Xem bài viết
          Mình cũng mới làm thử 1 mạch protoss nhưng thấy có vấn đề xảy ra là: nếu set fuse cho ATmega chạy với thạch anh ngoài thì mạch protoss k thể set lại được nữa. Phải dùng mạch của stk500 đọc mới được. k bit bác tintintin có gặp phải vấn đề đó k?
          K bit bác dùng chương trình j để nạp với mạch của protoss. Còn tớ thì dùng avrprog trong bộ avrstudio của atmel. Mình thấy hình bạn post lên trông lạ lắm.
          Ô sao lạ vậy. K biết Hiền dùng con nào nhỉ? Mình vẫn set đi set lại thoải mái mà.

          Dạo này lại đi quảng cáo thời trang nữa à
          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


          • #6
            Bác VNarmy cho em hỏi tí: Có thể dùng luôn cái mạch nạp USB này để bắn dữ liệu từ AVR lên PC k bác nhỉ? Nếu được thì hay quá, giao tiếp quá chuyên nghiệp luôn.
            Nỏ biết chữ mần răng ký được??!! Thôi nhé.

            Comment


            • #7
              Nguyên văn bởi thangktvta Xem bài viết
              Bác VNarmy cho em hỏi tí: Có thể dùng luôn cái mạch nạp USB này để bắn dữ liệu từ AVR lên PC k bác nhỉ? Nếu được thì hay quá, giao tiếp quá chuyên nghiệp luôn.
              Mạch này chỉ để nạp thôi. Còn bác muốn bắn qua bắn lại thì chắc là phải viết thêm rồi.

              @VNarmy: Mạch của e lại k dc mới đau chứ. dùng firmware 1.04 của protoss. Toàn báo lỗi enter programming mode thôi. Nếu để thạch anh nội 1M thì ổn. Mạch đích có đầy đủ thạch anh rồi nhé. Vẫn với mạch đích đó, dùng mạch nạp avrisp nạp thì ổn, setfuse thoải mái.
              Shop thời trang quảng cáo hộ thôi ạ.

              Vote hộ tớ với. Thanks!

              Comment


              • #8
                Nguyên văn bởi va_hien Xem bài viết
                Mạch này chỉ để nạp thôi. Còn bác muốn bắn qua bắn lại thì chắc là phải viết thêm rồi.

                @VNarmy: Mạch của e lại k dc mới đau chứ. dùng firmware 1.04 của protoss. Toàn báo lỗi enter programming mode thôi. Nếu để thạch anh nội 1M thì ổn. Mạch đích có đầy đủ thạch anh rồi nhé. Vẫn với mạch đích đó, dùng mạch nạp avrisp nạp thì ổn, setfuse thoải mái.
                Shop thời trang quảng cáo hộ thôi ạ.
                Lỗi này thì anh cũng ko đỡ được
                Hôm nọ lấy của bên PNLab cái STK500 về kéo lại được gần chục con 2313 và mấy con 8535. Tinh ra còn lãi.
                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


                • #9
                  6 câu hỏi trên mình đã tự giải quyết được rồi. Phát sinh thêm một số thắc mắc nữa, mong các bác thông cảm nhé.

                  Sau khi làm thử cái mạch của Prottoss thì cảm nhận tốc độ rất chậm. Sau một hồi google thì mới biết có nhiều giao thức ISP để nạp như STK500 v2, ISP mkII, nạp qua USB bootloader...

                  1. Xin hỏi các bác đã làm rồi, cái giao thức nào nhanh nhất (dùng USB Low Speed) ?
                  2. Nếu không dùng USB Low Speed mà dùng con chip USB chuyên dụng thì phải dùng con nào, mua nó ở đâu (Sài Gòn), giá bao nhiêu ?
                  Last edited by tintintin; 24-12-2007, 08:00.

                  Comment


                  • #10
                    Nếu được mong bạn tintintin post các giải đáp của mình lên cho mọi người cùng tham khảo!

                    Câu trả lời của mình cho 2 câu hỏi trên:
                    1. Mạch AVR910 sử dụng giao thức 901 của Atmel, nó đạt tốc độ tối ưu với AVRProg, còn nếu sử dụng với các phần mềm khác (như CodeVisionAVR) thì rất chậm!
                    Hiện tại giao thức nhanh nhất được sử dụng (có sản phẩm clone) là STK500 v2, chẳng hạn như AVR Doper.

                    2. Nếu sử dụng các giao thức trên thì không thể dùng các chíp True USB, mà chỉ có thế sử dụng các chíp chuyển đổi USB2COM, khi đó chúng không ảnh hường gì đến tốc độ hoạt động của mạch.

                    @tintintin: tớ stick luồng này lên cho những người quan tâm có thể đọc
                    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


                    • #11
                      Hix, ngày trước cũng tính thử mấy con AVR, nghịch ngợm với cái AVR901 USB thế nào mà toi mất mầy con AVR vì hỏng fuse, nhà thì chỉ có mạch nạp SPI thế nên cũng lâu rồi không đụng đền AVR.
                      Thank Tintintin vì thôg tin bạn đưa ra.
                      Next time, I will try
                      Ethernet-RS232, PIC Webserver, RFID Reader
                      CallerID, Cảnh báo BTS, ...
                      0988006696
                      linhnc308@gmail.com
                      http://linhnc308.blogspot.com

                      Comment


                      • #12
                        mấy bác đi trước rồi khuyên em nên chọn cái thằng nào để làm việc với cái mạch này đây ạ. Em sài codevision thử mà chán lắm. Đọc lên được nhưng mà hơi chậm, còn ghi xuống chíp thì trời ơi, ghi lần nào đơ lần đó. ..Hic

                        Em qua dùng thử AVR studio thì không biết làm sao cho nó nhận phần cứng cả (mặc dù với codevision nó đã nhận chíp rồi). Bác biết chỉ em luôn nhé. Thanks
                        Phone: 0978536011

                        Comment


                        • #13
                          hic, cuối cùng thì cũng làm chủ được thằng này. Tốc độ nạp có khi còn nhanh gấp 2 lần dùng codevision avr với mạch giao tiếp cổng LPT ấy chứ.
                          Phone: 0978536011

                          Comment


                          • #14
                            Sau khi tự tìm hiểu, dưới đây là những gì mình tự giải quyết được.

                            1. Theo datasheet, cái chân AVCC nếu không dùng chức năng ADC thì nên nối lên VCC, nhưng trong mạch lại thấy nối qua 1 R 100 và 1 C 104 lọc. Nối như vậy để làm gì và có cần thiết k? Mình có thể nối lên VCC cho tiết kiệm không gian mạch được k (bỏ R 100 và C104)?
                            Làm theo datasheet.

                            2. Khi dùng header 5x2 để nối đến mạch có chip cần nạp, theo mình thấy luôn có cái R 10K nối từ VCC xuống chân RESET trên mạch đích cho hầu hết các loại chip, nếu mình nối cái R 10K luôn trong mạch nạp cho tiện được k?
                            Nối cái R 10K luôn trong mạch nạp.

                            3. Nếu lấy 2 con Ziner 3.3V ghim hai chân D+ và D- và bỏ 2 con 1N4007, nguồn ATMega8 lấy 5V từ USB, phần xuất các tín hiệu MOSI, MISO, SCK, RESET bỏ luôn mấy con R 330 được k? Có an toàn k?
                            OK, chạy good.

                            4. Theo nguyên lý làm việc của mạch này nó sẽ giả lập giao tiếp USB, sử dụng driver usbser.sys chuẩn của Windows. Phần firmware dựa vào cạnh xuống của D+ nối đến INT0 của ATMega8. Dựa vào ngắt INT0 mạch sẽ nhận biết dữ liệu được yêu cầu dữ liệu từ Host (máy tính). Mình đã nhưng đọc source code usbdrv.c của tác giả nhưng tìm không thấy hàm xử lý INT0. Bác nào đã tham khảo qua có thể chỉ cho mình biết với.
                            Phần xử lý ngắt INT0 nằm trong file này: usbdrvasm.S
                            Nó xử lý phát hiện bắt đầu frame, EOP, loại bỏ các bit chèn trong mã NRZI, giải mã/mã hóa từ binary sang NRZI khi nhận và phát dữ liệu.
                            Nói chung là phần giao tiếp với giao thức truyền nhận dữ liệu của USB (theo định dạng các gói tin).

                            5. Nếu muốn định nghĩa lại các chân theo ý mình thì cần phải có những gì để biên dịch ?
                            AVR ICCCV7, WinAVR

                            6. Vì giao tiếp với mạch là Virtual COM qua USB, phần Code cho App bên máy tính sử dụng đối tượng TCOMPort (Delphi) để phát, nhận dữ liệu với mạch được k?
                            Có thể dùng đối tượng TCOMPort, tuy nhiên nếu dùng các hàm API của usblib thì nhanh hơn. Thư viện usblib win32 là một project mã nguồn mở, chỉ có mấy hàm giao tiếp với USB, nếu chịu khó đọc thì cũng dễ dùng.

                            Sau khi đọc qua các code trong usbdrv.c thì mình thấy có thể viết giao tiếp truyền nhận dữ liệu qua USB một cách đơn giản (Low Speed). Phần firmware làm theo hướng dẫn của tác giả: khai báo cấu hình trong file usbconfig.h, sau đó viết các hàm usbFunctionSetup, usbFunctionWrite, usbFunctionRead. Phần App trên máy tính có thể dùng thư viện usblib win32. Tốc độ khá nhanh so với nhu cầu của mình.

                            Comment


                            • #15
                              Mình đang làm một project Bootloader (USB) bên AVR Studio, sau khi biên dịch ra file hex thì gặp một vấn đề sau:

                              Thông tin: AVR ATMega16, XTAL=12Mhz, dự định sử dụng bootloader có size=1024 (BOOTSZ1,BOOTSZ0=00), bắt đầu tại địa chỉ 0x1C00 (word).

                              Do trong file hex luôn kèm theo địa chỉ, khi biên dịch địa chỉ bắt đầu là 0x0000. Mình đã tìm nhưng không thấy Option nào trong AVR Studio cho phép thay địa chỉ bắt đầu.

                              Sử dụng tool bin2hex và hex2bin cũng không được (báo lỗi >64k).

                              Trong tay đang có 2 bộ nạp: AVR910 và ISP v3.7 cổng PLT. Source đang viết bên AVR Studio, cho dù dịch ra file bin hay hex thì cũng đã kèm địa chỉ trong đó. Làm thế nào để nạp bootloader vào địa chỉ mình cần ?

                              Trong CodeVision cho phép thay đổi địa chỉ bắt đầu nạp nhưng khi load file hex thì nó set lại địa chỉ theo file hex. Nếu chuyển project từ AVR Studio qua CodeVision thì được nhưng như vậy thì mất công quá.

                              Hy vọng còn cách nào khác, mong các bro giúp với.

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X