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

  • Nguyên văn bởi minhhieu Xem bài viết
    Mình đã test thử kiểu khai báo biến trực tiếp vào eeprom thấy khá là thú vị.
    Cách sử dụng như sau:

    //Khai báo biến lưu trong eeprom
    eeprom char i0,i1,i2;
    eeprom char i3,i4,i5;


    //cách ghi vào một giá trị

    i0 = 10; //ghi số 10 vào địa chỉ 0x0000 trong eeprom
    i1 = 1; //ghi số 1 vào địa chỉ 0x0001
    i2 = 2; //ghi số 2 vào địa chỉ 0x0002
    i3 = 3; //ghi số 2 vào địa chỉ 0x0003
    i4 = 4; //ghi số 2 vào địa chỉ 0x0004
    i5 = 5; //ghi số 2 vào địa chỉ 0x0005

    //cách đọc một giá trị lưu trong eeprom

    char temp;

    temp = i0; // temp lúc này có giá trị = 10
    temp = i3; // temp có giá trị = 3 đọc từ địa chỉ 0x0003 của eeprom

    //================================================== ===

    Chú ý:
    + Khi khai báo biến eeprom, CodevisionAVR sẽ tự động gán địa chỉ tăng dần bắt đầu từ 0x0000 cho biến khai báo đầu tiên nhất, rồi đến các biến khai báo kế tiếp.
    + Khi khai báo biến eeprom các bạn lưu ý phải sử dụng biến đã khai báo ít nhất một lần tại bất kỳ vị trí nào trong chương trình cũng được. Nếu ví dụ khai báo biến i0,i1...,i5 mà chỉ sử dụng i1,i2,...,i5 (i0 có khai báo mà không sử dụng) lúc này giá trị đọc được của i1,i2,...,i5 bị sai do địa chỉ được thay đổi, lúc này địa chỉ của i1 không còn là 0x0001 nữa mà bị dồn về địa chỉ đầu tiên.
    + Khi khai báo biến eeprom cần khai báo thứ tự từ đầu chương trình xuống để địa chỉ tự động tăng lên. Khi sửa chương trình hoặc khai báo thêm biến nên cho xuống vị trí là biến được khai báo cuối cùng nhất của biến eeprom. Như vậy sẽ tránh được việc lẫn lộn gây sai địa chỉ của biến trong eeprom.
    Đỏ: Tại sao vậy. Có phải tại cái warning ko? Nếu tại warning thì đâu có bắt buộc. CAVR warning vậy để bạn tạo giá trị ban đầu cho nó giúp nó có thể build được file eeprom. Khi đó cần khai báo giá trị khởi tạo. VD:
    Code:
    eeprom char i0=10
    thì địa chỉ của file .eep sẽ được ghi là 10.

    Xanh: Chính xác. Nhưng loáng thoáng ở đâu nói địa chỉ 0x0000 của eeprom bị lỗi mà nhể. Nhưng mình dùng mãi có vấn đề gì đâu.
    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


    • Nguyên văn bởi VNarmy Xem bài viết
      Xanh: Chính xác. Nhưng loáng thoáng ở đâu nói địa chỉ 0x0000 của eeprom bị lỗi mà nhể. Nhưng mình dùng mãi có vấn đề gì đâu.
      Bây giờ thì ko hẳn, với v2.0 thì có thể đặt biến ở đâu cũng được.
      vd: eeprom int var @0x80 // biến var ở địa chỉ 80h của eeprom.
      các version trước ko chơi như vậy được.

      Comment


      • Lâu rồi không lên diễn đàn, không biết bây giờ tình hình phát triển học AVR thế nào rồi
        Sống và làm việc theo gương Bác Hồ vĩ đại

        Comment


        • Nguyên văn bởi TuxHero Xem bài viết
          Lâu rồi không lên diễn đàn, không biết bây giờ tình hình phát triển học AVR thế nào rồi
          Ha ha ha ... ! Lâu nay đại hiệp TuxHero quy ẩn giang hồ hôm nay mới thấy anh quá giang . Anh thấy đấy box AVR vẫn phát triển ( tuy không rầm rộ bằng box PIC ). Nếu có điều kiện anh post bài giới thiệu 1 số project cho nó có khí thế !

          Comment


          • điện áp output 1 = 3V ? datasheet đúng hay sai ?

            Các bạn khi sử dụng AVR, xuất ra chân mức logic 1 có bao giờ bị mức điện áp là 3 V ko ? tui sử dụng tiny2313 xuất ra portB, có chân mức high là 5V nhưng chân khác lại là 3V, thậm chí chỉ còn 2.5V .
            Ban đầu nghĩ là do port của AVR dẫn ko đủ dòng gây sụt mức áp (trong datasheet ghi dòng dẫn tối đa 60mA). Nhưng tui cho một test khác, AVR có thể dẫn trực tiếp 4 con led gần 100mA vẫn tốt, không sụt áp.
            Như vậy, datasheet ko phải hoàn toàn đúng phải ko ?

            Comment


            • Hình như bạn nhầm giữa dòng điện trung bình mỗi chân cổng với dòng điện tổng cộng của cả port. Mỗi chân của ATiny 2312 có thể tải dòng max 10mA ;tổng dòng điện ra cũng như dòng điện vào các port của nó không quá 60 mA. Mình hiểu thế không biết có đúng không ?!! Bạn thử xem lại nhé.
              Thường thì khi thiết kế với AVR, mình luôn có trở hạn dòng để dòng điện mỗi chân cổng của nó không bao giờ quá 20mA, thường dùng khoảng 10-15 mA. Nếu cần dòng cao hơn thì bắt buộc phải nối thêm cổng đệm, có thể là tranzito, ULN.. Chúc bạn thành công.

              Comment


              • trả lời

                Đúng như bạn nói - vì tui thấy datasheet ghi như thế - tổng dòng vào hay ra của tất cả các port ko quá 60mA. mỗi chân tải (sink hoặc source) max là 10mA. Nhưng tui tải trực tiếp đến 100mA, 3 con led mắc nối tiếp trở 100 Ohm , 1con led trở 1K. Nó vẫn chạy tốt.
                Nhưng còn phần điện áp mức logic 1 chỉ có 2.5V hay 3V. Bạn có gặp trường hợp này chưa ?

                hình như tui phát hiện ra lỗi rồi. Ở phần mềm he he .. !! cám ơn bạn đã trả lời
                Last edited by study24816; 14-08-2008, 14:29.

                Comment


                • Mình đoán thê này nhé: Do phần mềm nên chân cổng đầu ra luôn bị đảo giữa mức 1 và mức 0 (giống như là phát xung vậy) . Do đó, nếu cắm đồng hồ vào thì tùy thuộc vào tỷ lệ giữa mức 1 và mức 0 mà ta nhận được điện áp trung bình là bao nhiêu. Nếu điện áp nhận được khoảng 2.5-3v thì có thể là chân đầu ra luôn có sự thay đổi 0 và 1 với tỷ lệ khoảng 50%.

                  Comment


                  • Có thể bạn chưa thiết lập trở kéo lên bên trong.
                    n
                    ĐT: 0986 492 489

                    Tham khảo:

                    Comment


                    • các bác ơi.! công thức trong chế độ PWM là thế nào ấy nhỉ? Làm sao mình có thể xuất ra độ rộng xung mà mình muốn.......!

                      Comment


                      • Nguyên văn bởi HiMas88 Xem bài viết
                        các bác ơi.! công thức trong chế độ PWM là thế nào ấy nhỉ? Làm sao mình có thể xuất ra độ rộng xung mà mình muốn.......!
                        Bạn sử dụng 2 thanh ghi OCRxx và TCNTx ,đọc trong datasheet đó, nó có 3 chế độ thì phải.
                        dientuvietnam.net

                        Comment


                        • Em muốn hỏi project này 1 tí......!

                          Mình điều xung bằng giá trị vào của adc qua 1 biến trở...đem giá trị ấy đi điều xung...! Bên kia mình có thể xuất ra led 7 đoạn % khi mình thay đổi được không
                          !

                          Comment


                          • Nguyên văn bởi HiMas88 Xem bài viết
                            Em muốn hỏi project này 1 tí......!

                            Mình điều xung bằng giá trị vào của adc qua 1 biến trở...đem giá trị ấy đi điều xung...! Bên kia mình có thể xuất ra led 7 đoạn % khi mình thay đổi được không
                            !
                            Hơi loằng ngoằng nhỉ, chưa hiểu ý bạn lắm
                            dientuvietnam.net

                            Comment


                            • cho minh hoi co ai co pham mem viet code cho AVR BANG avrasm khong co the cho minh link dc khong
                              minh dang thu viet bang asm
                              minh xin cam on
                              DAY LA MAIL CUA MINH :QUANTUGIANGNAM2005@YAHOO.COM.VN

                              Comment


                              • Nguyên văn bởi HiMas88 Xem bài viết
                                Em muốn hỏi project này 1 tí......!

                                Mình điều xung bằng giá trị vào của adc qua 1 biến trở...đem giá trị ấy đi điều xung...! Bên kia mình có thể xuất ra led 7 đoạn % khi mình thay đổi được không
                                !
                                Nếu mà bạn hỏi có được không thì câu trả lời tất nhiên là được.Còn nếu bạn muốn biết cụ thể về cái đấy thì thế này:
                                1.Hardware:
                                - Biến trở điều chỉnh để điện áp ra thay đổi đc đưa vào chân ADC của VĐk.(nối luôn với test point để đo)
                                - Nên có 1 test point nối vào đầu ra chân PWM để bạn dễ đo mức điện áp PWM bằng thiết bị đo
                                - dùng 2 led 7 đoạn để hiển thị % điều xung từ 0% ->99% (ứng với việc điều chỉnh biến trở để điện áp vào thay đổi từ 0->max).

                                2.Firmware:
                                - module ADC đọc giá trị vào
                                - module PWM dùng 1 timer nào đấy
                                - module display led7seg
                                - Từ giá trị áp vào => % áp vào / Vmax => độ rộng xugn tương ứng mà bạn cần điều khiển.

                                Đôi dòng góp ý.

                                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