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

  • #16
    beginer

    chào các bác , tôi mới băt đầu với AVR ,phần lập trình cho timer vẫn chưa hiểu nhiều , bác nào cho tôi 1 ví dụ lập trình phát ra tần số 10kHZ tại 1 chân nào đó ,thanks các bác nhiều
    |

    Comment


    • #17
      - To NOBITAVN:
      Tập lệnh của AVR bác tìm file "AVRASM.chm" trong mục "Help" khi cài AVRStudio 4

      - Tôi cũng đang tìm hiểu về Timer và cũng xin hỏi các bác:
      Nếu tạo một timer bằng codewizard như sau:
      + Chip: Atmega8515L - Clock 8MHz
      + Timers: tab Timer0 : Clock Source = System Clock
      Clock Value = 8000.0kHz
      Mode: Normal Top = 0xFF
      Output: Toggle on compare match
      Time Value = 0h
      Compare = 0h
      thì nó có tạo ra xung vuông f = 4MHz ở chân OC0 (PORTB.0) không? Nếu không thì các bác cho em biết hình thù nó ra sao nhé?
      (Cái này mà có con oxilồ thì tốt quá).

      Comment


      • #18
        AVR's Timers

        Nếu tạo một timer bằng codewizard như sau:
        + Chip: Atmega8515L - Clock 8MHz
        + Timers: tab Timer0 : Clock Source = System Clock
        Clock Value = 8000.0kHz
        Mode: Normal Top = 0xFF
        Output: Toggle on compare match
        Time Value = 0h
        Compare = 0h
        thì nó có tạo ra xung vuông f = 4MHz ở chân OC0 (PORTB.0) không?
        Có xung vuông ra, nhưng ... không phải là xung có tần số = 4MHz.

        Nào, cùng xem tần số ra là bao nhiêu nhé:
        1 - Normal mode: đếm từ 0 lên 255 lại về 0, mãi như thế... Chu kỳ tràn là 256 clock. Clock là 8MHz suy ra chu kỳ tràn là 256*125ns = 32,000ns = 32us.
        2 - Output toggle on compare match: cứ khi so sánh timer và OCR0 thấy bằng nhau sẽ đảo đầu ra chân OC0.
        3 - OCR0 = 0h (hay bằng bao nhiêu đi nữa trong dải từ 0 đến 255) thì cũng chỉ so sánh khớp với timer tại một điểm trong quá trình timer đếm từ 0 đến 255. Như vậy chu kỳ của sự kiện so sánh khớp (compare match) bằng với chu kỳ tràn timer (vì trong mỗi chu kỳ tràn chỉ so sánh khớp có một lần). Tuy nhiên mỗi lần khớp lại đảo trạng thái OC0 một lần, vậy phải có hai lần so sánh khớp mới tạo ra một xung vuông hoàn chỉnh.

        Tóm lại, khi ở normal mode, bất kể Compare value bằng bao nhiêu, xung vuông tạo ra có tần số bằng 1/2 tần số tràn của timer. Trong trường hợp này, timer là 8bit, clock = 8MHz ---> tần số tràn của timer = 1/32us = 31,250Hz ---> tần số xung vuông tạo ra là 31,250/2 = 15,625Hz!

        Nếu muốn tạo xung bằng timer, không nên dùng normal mode.

        Comment


        • #19
          Tôt nhất là tạo xung = PWM. Chính xác, đỡ tốn tài nguyên xử lý của chip.

          Comment


          • #20
            ldi temp,(1<<int0)+(1<<int1)
            lệnh này có chức năng j` vậy , toán tử << nghĩa là j` , ai chỉ jup' mình với
            |

            Comment


            • #21
              Toán tử << là toán tử dịch trái. Lệnh của các hạ đưa ra phân tích chi tiết thì là thế này:
              - dịch trái bit 1 (bit = 1 chứ không phải bit 1 trong 8bit từ 0 đến 7!!!) đi int0 lần ---> kết quả thu được là một byte có một bit = 1 (tại số thứ tự = int0). Ví dụ nếu int0 = 5 thì sẽ thu được byte có giá trị là 00100000b.
              - tương tự có được byte có một bit = 1 (tại số thứ tự = int1).
              - OR hai byte đó với nhau thu được một byte có 02 bit = 1 tại số thứ tự int0 và int1 (các bit có số thứ tự khác đều bằng 0). Đó chính là giá trị người lập trình muốn đưa vào biến temp.
              Tóm lại, lệnh trên có nghĩa là nạp một hằng số 8bit có giá trị bằng 1 ở các bit có cùng số thứ tự với các bit int0, int1 vào biến temp.
              Tại hạ đoán sau đó là lệnh nạp temp vào thanh ghi cho phép ngắt của AVR. Kiến trúc của AVR không cho phép nạp trực tiếp giá trị tức thời vào các thanh ghi thuộc vùng I/O.
              Giang hồ hiểm ác, bảo trọng.
              Last edited by blackmoon; 14-11-2005, 10:55.

              Comment


              • #22
                cho hỏi như muốn thực hiện lệnh chia trong AVR thì làm như thế nào ngoài cách sử dung lệnh ld r16,lable/2 ?
                và muốn chuyển một số hẽ về dạng BCD thì như thế nào (như là 8051 thì có lệnh DA)?

                Comment


                • #23
                  Xin cho hỏi mạch RESET cho AVR vẽ như thế nào. Con AVR nào cũng cùng một mạch RESET như vậy à?

                  Comment


                  • #24
                    cho hỏi như muốn thực hiện lệnh chia trong AVR thì làm như thế nào ngoài cách sử dung lệnh ld r16,lable/2 ?
                    Hãy sử dụng ngôn ngữ C, nhất là với các ứng dụng đòi hỏi tính toán. Nếu nhất định phải là "hợp ngữ muôn năm" thì bạn phải xây dựng các chương trình con chia 2 số. Việc này không khó vì có nhiều appnote hướng dẫn, có cả mã nguồn. Đây là link: http://www.atmel.com/dyn/resources/p...ts/DOC0936.PDF

                    và muốn chuyển một số hẽ về dạng BCD thì như thế nào (như là 8051 thì có lệnh DA)?
                    Hãy thực hiện bằng thuật toán.

                    Thân mến,
                    blackmoon.

                    Comment


                    • #25
                      Xin cho hỏi mạch RESET cho AVR vẽ như thế nào. Con AVR nào cũng cùng một mạch RESET như vậy à?
                      Mạch reset cho AVR bạn vẽ ngược lại với 8051 vì mức reset của AVR là mức thấp. Chi tiết là nối một con trở khoảng 10K nối tiếp với một con tụ khoảng 1uF (nếu là tụ hóa thì phải là cực dương nhé). Đầu kia con trở nối +5V, đầu kia con tụ nối với 0V. Lấy ở giữa 2 linh kiện đó ra đi qua con trở nhỏ khoảng vài trăm Ohm rồi tương thẳng vào chân Reset của AVR. Phím bấm nếu có sẽ nối song song với con tụ.
                      Thân mến,
                      blackmoon.

                      Comment


                      • #26
                        Em mới biết sự lợi hại của AVR trong việc điều chế vecto không gian điều khiển độ rộng xung(PWM). Bác nào có thông tin về loại AVR này cho em biết với nhé. Cám ơn các bác nhiều.
                        Con người. Ngươi là quả lắc giữa nụ cười và nước mắt.

                        Comment


                        • #27
                          Su dung adc

                          Minh dang lam thu con mega8535 nhung khi chay chuong trinh thi bao loi o lenh cbi và sbi:
                          #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
                          #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))

                          Mong cac dai ca chi gip.
                          Neu bac nao da lam con nay co the post vai vi du len cho anh em hoc tap
                          Chan thanh cam on!

                          Comment


                          • #28
                            Use CodeVisionAVR

                            #define cbi(reg, bit) (reg&=~(1<<bit))
                            #define sbi(reg, bit) (reg|= (1<<bit))
                            example:
                            #define SPIPORT PORTC
                            #define SPIDDR DDRC
                            #define CS 4

                            #define CS0 cbi(SPIPORT,CS);
                            #define CS1 sbi(SPIPORT,CS);
                            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


                            • #29
                              mình mới bắt đầu làm việc với AVR nên còn rất kém.Mình đang muốn tạo một xung 1hz đến chân PORTA.0 dùng bộ định thời TIMER0.các anh có thể viết cho em 1 chương trình mẫu bằng C được không.em cám ơn trước.

                              Comment


                              • #30
                                các bác cho em hỏi chút . em đang dùng avrstudio để lập trình bằng C . nhưng khi dùng đến ngắt thì lại ko bít hàm ngắt trong đó dùng ra sao . bác nào biết xin nhắc em cái . tiện thể bác nào có tài liệu về tập lệnh C trong avrstudio thi jum` em nhe' . thanks cac bác
                                Biển học mênh mông , quay đầu lại là!

                                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