Thông báo

Collapse
No announcement yet.

AVR cho người mới bắt đầu

Collapse
This is a sticky topic.
X
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • AVR cho người mới bắt đầu

    Các tài liệu hữu ích cho việc học tập với AVR, link đều do các thành viên tâm huyết post lên (cần đăng nhập trước khi tải):

    - AVR for Beginner (TuxHero): http://dientuvietnam.net/forums/atta...7&d=1166240499
    - Hướng dẫn sử dụng Code Vision AVR (Zemen): http://dientuvietnam.net/forums/atta...3&d=1166768426


    Một số link hữu ích:
    http://www.avrtutor.com/tutorial/thermo/contents.htm
    http://www.vagam.dieukhien.net/index...id=5&chapid=59
    http://www.avrfreaks.net







    ___
    Last edited by sphinx; 25-02-2008, 01:32.
    Sống và làm việc theo gương Bác Hồ vĩ đại

  • #2
    Re: AVR CHO NGƯỜI MỚI BẮT ĐẦU

    Nguyên văn bởi TuxHero
    Bà con mới làm quen với AVR có thể tham khảo tại trang: http://www.freewebs.com/engineersite/VNAVRFreaks/

    Các thông tin tại trang này đã được thực hiện thành công bởi tác giả và nhiều người khác. Bạn cứ yên tâm làm theo và phải thật cẩn thận để khỏi đốt chết con AVR của mình. Chúc các bạn thành công.
    Chắc cao thủ AVR đây rồi, tui cũng có dùi mài mấy chú PIC18, nhưng chưa có dịp thử xài mấy thằng AVR xem nó màu mè ra làm sao? Kể cũng lạ, 89C51 thì support lệnh nhân chia, trong khi đó AVR cùng là ATMEL nhà ta cả lại ko. Chắc là ATMEL cải lùi về mặt này rồi. Một lệnh nhân or chia của 89 chỉ mất vài chu kỳ lệnh, trong khi thủ công = lệnh của AVR lại mất khá nhiều thời gian. Ha ha... điểm này thì AVR đâu có sánh được với họ PIC18 nhi? Ko hiểu ATMEL nghĩ gì mà vậy?

    Comment


    • #3
      Gởi bác PPIICC

      E hèm, “dấn đề” bác hỏi Tux tôi xin trả lời như sau:
      - Thứ nhất, bác phải nói rằng 89C51 có support các lệnh nhân/chia trực tiếp trên các thanh ghi chứ không nên nói chung chung là lệnh nhân/chia. Vì vậy nếu nói AVR không support các lệnh này là trật lất. Tux tôi ví dụ ngay đây:
      mul Rd, Rr => R1:R0=Rd*Rr
      ldi R30, label/2 => R30 = label/2

      - Thứ hai bác nói là mình có dùi mài PIC. Vậy bác thử xem lại tập lệnh của PIC18 có lệnh chia hai thanh ghi hay không. Hay là bác chỉ dùng PIC Basic mà chưa bao giờ đụng tới trình dịch hợp ngữ. Còn nếu tính các lệnh nhân thì AVR thậm chí còn nhiều hơn.

      - Thứ 3 là bác nói lệnh = của AVR mất nhiều thời gian. Ha ha ha. Bác phải coi thử các lệnh gán này thực hiện trên thanh ghi mấy bit, dùng trình dịch nào (hợp ngữ hay C) để so sánh chứ?

      - Cuối cùng bác phải chú ý đến khoảng thời gian của mỗi chu kỳ lệnh. Cái này khác nhau ở từng loại vi điều khiển à nha. Cho dù AVR có thực hiện một lệnh tốn nhiều chu kỳ đi nữa thì nếu một chu kỳ của AVR chỉ mất có 1/16 micro giây thì cũng nhanh chán so với anh chàng 89 thực hiện 1 lệnh trong 1 chu kỳ.

      Không biết như vậy có đáp ứng tính “hiếu học” của bác hay chưa nhỉ?
      Sống và làm việc theo gương Bác Hồ vĩ đại

      Comment


      • #4
        Re: Gởi bác PPIICC

        Nguyên văn bởi TuxHero
        E hèm, “dấn đề” bác hỏi Tux tôi xin trả lời như sau:
        - Thứ nhất, bác phải nói rằng 89C51 có support các lệnh nhân/chia trực tiếp trên các thanh ghi chứ không nên nói chung chung là lệnh nhân/chia. Vì vậy nếu nói AVR không support các lệnh này là trật lất. Tux tôi ví dụ ngay đây:
        mul Rd, Rr => R1:R0=Rd*Rr
        ldi R30, label/2 => R30 = label/2

        - Thứ hai bác nói là mình có dùi mài PIC. Vậy bác thử xem lại tập lệnh của PIC18 có lệnh chia hai thanh ghi hay không. Hay là bác chỉ dùng PIC Basic mà chưa bao giờ đụng tới trình dịch hợp ngữ. Còn nếu tính các lệnh nhân thì AVR thậm chí còn nhiều hơn.

        - Thứ 3 là bác nói lệnh = của AVR mất nhiều thời gian. Ha ha ha. Bác phải coi thử các lệnh gán này thực hiện trên thanh ghi mấy bit, dùng trình dịch nào (hợp ngữ hay C) để so sánh chứ?

        - Cuối cùng bác phải chú ý đến khoảng thời gian của mỗi chu kỳ lệnh. Cái này khác nhau ở từng loại vi điều khiển à nha. Cho dù AVR có thực hiện một lệnh tốn nhiều chu kỳ đi nữa thì nếu một chu kỳ của AVR chỉ mất có 1/16 micro giây thì cũng nhanh chán so với anh chàng 89 thực hiện 1 lệnh trong 1 chu kỳ.

        Không biết như vậy có đáp ứng tính “hiếu học” của bác hay chưa nhỉ?
        Đúng là các hạ ko hổ danh là moderator của AVR. Nắm rất kỹ về chúng nó và ko quên vach ra những lời sơ hở của tại hạ.
        Về PIC18: chỉ có lệnh nhân(tất nhiên nói ở ASM), ko có lệnh chia. Tui nói sai 50%. Bác nói đúng hoàn toàn.

        Về AVR thì có con có lệnh nhân/chia, nhưng có con ko có. Con thông dụng kiểu như AT90S8535 thì ko có. Đây la 1 sự cải lùi. Có thê nói tông quát: AVR90 thì ko có, còn ATMEGA thì có? mong bác đính chính thêm. Câu này tui sai 50%. Bác cũng sai 50% he he...
        Túm lại công lực vê khoản này tui thua bác 1 bậc. Chắc phải tu tâm dưỡng tính để mong được các bác cất nhắc lên làm mod của 1 box nào đó.

        Comment


        • #5
          Vi điều AVR có bao nhiêu họ con: AT90S,Atmega90s,Atiny....? và khác nhau cơ bản của các họ này là gì? Mong các bác chỉ rõ cho kẻ hiếu học này với!

          Comment


          • #6
            AVR có nhiều dòng lắm!!!

            AVR càng ngày càng có nhiều dòng, hiện nay theo tại hạ biết thì có các dòng sau:
            - AVR cổ điển (là mấy con AT90S). Loại này chỉ mới với Vietnam thôi chứ Tây nó hầu như chuyển sang dòng khác hết rồi.
            - AVR có tích hợp CAN (AT90CAN128).
            - AVR có tích hợp LCD driver (là mấy con có số 9 như là ATmega169, ATmega329, ATmega649...)
            - AVR có tích hợp PSC (Power Stage Controller) (là mấy con AT90PWM) hay được dùng trong các ứng dụng điều khiển Motor hay chiếu sáng (nên còn gọi là lighting AVR).
            - megaAVR (ví dụ ATmega8, 16, 32, 64, 128...)là loại AVR tốc độ cao, thường đạt 16MIPS, thường có tích hợp ADC 10bit, thường có giao tiếp JTAG.
            - mấy chú tí hon dòng ATtiny (ATtiny11, 12, 15, 25, 26...) bé nhưng là "bé hạt tiêu", một số con có thể đạt 20 MISP.
            - gần đây mới ra loại AVR thích hợp với các ứng dụng pin, hình như gọi là Smart Battery AVR và chỉ mới có một thành viên là ATmega406 thì phải (cái này tại hạ không nhớ rõ lắm).

            Comment


            • #7
              AVR đâu có cải lùi, đúng là dòng cổ điển AT90S không có lệnh nhân/chia nhưng đó là đồ cổ rồi. Các dòng AVR mới đều cải tiến hết. Hơn nữa kiến trúc của AVR được thiết kế để tối ưu với high-level language, nên nhân chia không quan trọng lắm.
              Còn nếu nói về hợp ngữ thì đúng như đại hiệp TuxHero nói, nhân mềm của AVR cũng thực hiện nhanh gọn lắm. Tuy nhiên về lệnh chia thì tại hạ lại nghĩ khác. Lệnh chia cứng AVR không có, nhưng lại được bù đắp bằng lệnh nhân fractional (FMUL), chứ không phải chia cứng như ví dụ của đại hiệp TuxHero đưa ra là "ldi R30, label/2 => R30 = label/2". Trong ví dụ trên, việc chia "label/2" là phần việc mà compiler làm thay lập trình viên, trong đó nhãn label là một hằng số. Cái này có thể thấy được ở hầu hết các compiler, ví dụ giống như ta viết trong Reads51 cho 8051 là "mov R0,#high(50000)". "/" và "high" chỉ là các hàm mà compiler cung cấp cho người lập trình để bớt phần tính toán. Có lẽ khi post ví dụ đó, đại hiệp TuxHero đang tiêu diêu bên cung đàn chén rượu nên có phần sơ hở. Tại hạ xin được đỡ lời đại hiệp.

              Comment


              • #8
                Nguyên văn bởi blackmoon
                AVR đâu có cải lùi, đúng là dòng cổ điển AT90S không có lệnh nhân/chia nhưng đó là đồ cổ rồi. Các dòng AVR mới đều cải tiến hết. Hơn nữa kiến trúc của AVR được thiết kế để tối ưu với high-level language, nên nhân chia không quan trọng lắm.
                Còn nếu nói về hợp ngữ thì đúng như đại hiệp TuxHero nói, nhân mềm của AVR cũng thực hiện nhanh gọn lắm. Tuy nhiên về lệnh chia thì tại hạ lại nghĩ khác. Lệnh chia cứng AVR không có, nhưng lại được bù đắp bằng lệnh nhân fractional (FMUL), chứ không phải chia cứng như ví dụ của đại hiệp TuxHero đưa ra là "ldi R30, label/2 => R30 = label/2". Trong ví dụ trên, việc chia "label/2" là phần việc mà compiler làm thay lập trình viên, trong đó nhãn label là một hằng số. Cái này có thể thấy được ở hầu hết các compiler, ví dụ giống như ta viết trong Reads51 cho 8051 là "mov R0,#high(50000)". "/" và "high" chỉ là các hàm mà compiler cung cấp cho người lập trình để bớt phần tính toán. Có lẽ khi post ví dụ đó, đại hiệp TuxHero đang tiêu diêu bên cung đàn chén rượu nên có phần sơ hở. Tại hạ xin được đỡ lời đại hiệp.
                Khà khà, hảo huynh đệ, hảo huynh đệ
                Sống và làm việc theo gương Bác Hồ vĩ đại

                Comment


                • #9
                  Quả đúng là các cao thủ!

                  Tôi mới bắt đầu làm quen với VDK thôi, và cũng chọn dòng AVR để bắt đầu (mới chỉ biết con đầu tiên là atmega8515L).

                  Lý do tôi chọn nó là vì mới làm quen thì dùng CodeVisionAVR viết bằng C (vì cũng đã học qua C) để điều khiển đơn giản thôi (toàn là các câu lệnh của C để nhập ra các port thôi, chưa sử dụng được tài nguyên nào của AVR cả).
                  Còn phần tìm hiểu cấu trúc phần cứng và các lệnh ASM thì có lẽ là chưa được cụ thể lắm.Xin các cao thủ chỉ bảo một vài kinh nghiệm khi tìm hiểu về VDK nói chung và AVR cho những người mới bắt đầu để làm quen với nó. Nếu có thể thì đưa ra các để bài ứng dụng để những người mới bắt đầu có thể vọc ngay được và trên cơ sở đó để hiểu được về cấu trúc và các sử dụng nó.
                  Thấy các bác mở chuyên mục về AVR trên diễn đàn này tui mừng lắm. Và rất mong được sự chỉ bảo của mọi người!

                  Comment


                  • #10
                    To anhtt2005,
                    Hì, khiêm tốn quá. Cũng có một số bài viết trong box này. Tuấn thích thì tải về đọc thử, sợ không có thời gian thôi.
                    Sống và làm việc theo gương Bác Hồ vĩ đại

                    Comment


                    • #11
                      Oái! Các bác giúp em với
                      Cái mạch của em như bị ma vậy. Khi thay đổi vị trí thì dường như tốc độ chạy cũng thay đổi á (em nói tốc độ là do quan sát dãy đèn led nhấp nháy bên ngoài ), khi chạm vào trở 10K kéo lên nguồn của chân Reset hoặc thạch anh là dường như nó chạy đúng một lát rồi treo luôn.
                      Em đã kiểm tra lại mạch cẩn thận rồi, không chạm chập và không lỏng con linh kiện nào cả.
                      Các bác chỉ cho em cách khắc phục với. Em dùng con atmega8515L với thạch anh 8MHz.

                      Em cũng đã đặt chế độ Crystal như datasheet nhưng nó lại không chạy luôn. Các bác chỉ cho em cách khắc phục với

                      CKOPT | SEL3..1 | Frequency Range (MHz) | C1=C2 (pF)
                      | | |
                      1 | 111 | 3-8 | 12 - 22
                      Last edited by sphinx; 25-02-2008, 01:05. Lý do: lọc chủ đề

                      Comment


                      • #12
                        Có thể là do nhiễu bên ngoài tác động vào. ATMega8515L dùng thạch anh tối đa là 8Mhz, theo tôi bạn có thể thay bằng thạch anh 4Mhz thì an toàn hơn.

                        Comment


                        • #13
                          Tôi đã từng ép 90s8515 và mega8515 chạy với xtal 12MHz, có nghĩa là overclock lên 1.5 lần mà vẫn ngon lành. Theo tôi bạn nên kiểm tra lại các điểm tiếp xúc xem có vấn đề gì không. Một nguyên nhân khác có thể làm mạch không ổn định là các nguồn ngắt ngoài. Nếu chương trình của bạn không dùng tới thì cần disable các ngắt đó đi.
                          Chúc bạn thành công.

                          Comment


                          • #14
                            Cám ơn các bác.
                            Đúng là khi dùng codewizard em sơ ý để ngắt ngoài là mức Falling Egde mà trong mạch lại không đưa nguồn ngắt vào. Chỉ tại không chịu đọc cho kỹ datasheet của nó đấy mà.Thank bác sorcerer!

                            Comment


                            • #15
                              chao cac bac
                              em la mot thanh vien moi cua dien dan, em dang dung ho AT89XXX em muon chuyen sang dung AVR xin cac bac chi giao, bac nao co tap lenh cua AVR hay cac ung dung nho cua AVR thi cho em xin, em dang viet bang ASM. mong cac bac giup cho em xin cam on

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X