Lập trình AVR bằng CodeVisionAVR C Compiler cho người mới bắt đầu

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • sidesignvn
    Thành viên chính thức
    • Mar 2006
    • 61

    #61
    Trong các thiết kế của tôi cũng thường không dùng đến chân này vì vậy tôi hay dùng chân này để điều khiển backlight của LCD hoặc dùng lại cổng của LCD để làm luôn một bàn phím.
    Bạn có thể tham khảo ở bài này của tôi:
    http://dientuvietnam.net/forums/showthread.php?t=3966
    Dùng hàng VN - Giữ lại USD cho đất nước.

    Comment

    • thangcftd
      Thành viên chính thức
      • Dec 2006
      • 62

      #62
      Nguyên văn bởi ttcn Xem bài viết
      Thưa bạn rằng
      ý mình hỏi như sau, trong code thì nó bắt phần cứng phải lối chân R/W để LCD và AVR bắt tay nhau, =0 thì W, =1 thì R. xong mình chỉ cần W vào LCD thì có thể tiết kiệm được 1 pin, nếu nối R/W=0 và dùng thư viện chuẩn thì sẽ không bao giờ viết được ký tự lên LCD, cần phải can thiệp vào thư viện như thế nào. thank
      Trong thư viện họ đọc cờ bận nên chân RW phải nối giữa LCD và AVR, nếu bạn chỉ W thì nối RW xuống mass và sửa thư viện như sau:
      trong thư mục : C:\cvavr\lib\lcd

      có nội dung là:


      void _lcd_ready(void)
      {
      // rất nhiều code ở đây


      }

      Bạn sửa là:
      void _lcd_ready(void)
      {
      delay_ms(20); // vượt qua cờ bận


      }

      OK! bây giờ chương trình chạy rồi!

      Chúc các bạn thành công!

      Comment

      • ttcn
        Thành viên mới
        • Apr 2007
        • 21

        #63
        Cảm ơn bạn nhiều

        Comment

        • bijusi@
          Thành viên chính thức
          • Oct 2008
          • 61

          #64
          pác nào biết lập trình C cho con atmega32 để khi nhấn phím keypad 4x4 thì LCD nó hiển thị ra số của phím vừa nhấn không, em mò cả tuần nay mà không ra, mong các pác giúp đỡ, thank các pác nhiều nhiều!!!!

          Comment

          • thangcftd
            Thành viên chính thức
            • Dec 2006
            • 62

            #65
            Nguyên văn bởi bijusi@ Xem bài viết
            pác nào biết lập trình C cho con atmega32 để khi nhấn phím keypad 4x4 thì LCD nó hiển thị ra số của phím vừa nhấn không, em mò cả tuần nay mà không ra, mong các pác giúp đỡ, thank các pác nhiều nhiều!!!!
            Nếu bạn không dùng thêm phần cứng phụ trợ thì có thể dùng một PORT là được. Ví dụ PORTA chẳng hạn. Chia PORTA thành 2 phần, một phần PA0-PA3 định nghĩa là cổng ra(DDRA0->3 =1); từ PA4->7 định nghĩa là cổng vào(DDRA4->7 = 0);
            Gọi cổng vào là hàng, cổng ra là cột, nối 4 hàng vào bàn phím kèm theo trở treo 10k lên 5V. LCD sử dụng thư viện và dùng PORTB để giao tiếp. Dùng CAVR để lập trình. OK! bây giờ bắt đầu lập trình !!

            - Khởi tạo ban đầu : côt,1,2,3 = 1;
            - Quét cột:
            + cho cột thứ nhất = 0;
            + delay vài ms;
            + đọc tất cả các cổng vào. Nếu cổng nào =0 thì hiển thị cột và hàng tương ứng. Nếu không thấy hàng nào =0 thì quét cột tiếp theo
            Bạn làm lần lượt 4 cột sẽ được 16 phím như mong muốn.

            - Tôi giới thiệu thuật toán như thế. Bạn vẽ mạch rồi up lên mọi người cùng thảo luận.

            chúc bạn thành công!!

            Comment

            • bijusi@
              Thành viên chính thức
              • Oct 2008
              • 61

              #66
              còn chuyện chống dội phím thì sao mí pác

              Comment

              • hungnp
                Thành viên tích cực
                • Nov 2005
                • 178

                #67
                Đặt delay thích hợp hoặc đọc nhiều lần trong một lần quét thì sẽ chống được dội phím.

                Comment

                • tahoang
                  Thành viên mới
                  • Mar 2008
                  • 5

                  #68
                  Nguyên văn bởi thangcftd Xem bài viết
                  Trong thư viện họ đọc cờ bận nên chân RW phải nối giữa LCD và AVR, nếu bạn chỉ W thì nối RW xuống mass và sửa thư viện như sau:
                  trong thư mục : C:\cvavr\lib\lcd

                  có nội dung là:


                  void _lcd_ready(void)
                  {
                  // rất nhiều code ở đây


                  }

                  Bạn sửa là:
                  void _lcd_ready(void)
                  {
                  delay_ms(20); // vượt qua cờ bận


                  }

                  OK! bây giờ chương trình chạy rồi!

                  Chúc các bạn thành công!
                  Chào các bác!
                  Em đã thử theo cách này, hiển thị thì ngon rồi. Nhưng vấn đề là: Khi hiển thị các dữ liệu cần cập nhật liên tục là thời gian thì lại có vấn đề. Nó cứ bị trễ, các chữ hiển thị trên LCD thì nhấp nháy liên tục, trong khi đó em dùng thư viện ban đầu thì vẫn ngon(ví dụ là cho chữ chạy trên LCD).
                  Mong các cao thủ chỉ giúp phải làm thế nào (chân R/W vẫn nối đất đấy nhé)

                  Comment

                  • VNarmy
                    Moderator
                    • Feb 2007
                    • 1413

                    #69
                    Delay 37uS là đc.
                    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

                    • bac86_bk3i
                      Thành viên mới
                      • Nov 2007
                      • 13

                      #70
                      cac bac cho em hoi trong codevision co ham tra ve gia trị bit ko?
                      giả sử hàm bit data(unsigned char a)
                      return 1
                      thi data co the nhan gia tri 1 khong?

                      Comment

                      • LoveMCUs
                        Thành viên mới
                        • Aug 2008
                        • 8

                        #71
                        codevision và mô phỏng bằng protues

                        project:
                        portC <-> LCD
                        keypad 4x4 <-> ADC
                        finish: khi nhấn phím thì hiển thị giá tri lên LCD.

                        anh nào biết cách chống dội bằng phần mềm giúp em:
                        - cho thời gian timer 20ms ( ko biết đủ nhanh khi ta nhấn hai phím cùng lúc không? ) khi ta nhấn một phím thì giá trị LCD tăng 1 đơn vị, nhấn lâu hơn 20ms thì tăng liên tục.
                        Attached Files

                        Comment

                        • thangcoday
                          Thành viên mới
                          • Oct 2008
                          • 1

                          #72
                          huy dê viết cũng hay hey.em cảm ơn bác.heeee

                          Comment

                          • khanh248
                            Thành viên mới
                            • Oct 2008
                            • 9

                            #73
                            mình muốn dùng con DS 1307 để đếm giờ cho ATmega16, hiển thị ngày giờ trên LCD. khi lập code khai báo thư viện #include<ds1307.h> thì báo lỗi do không có trong thư viện.Mình muốn hỏi là muốn khai báo cho ds1307 thì phải lập trình như thế nào?

                            Comment

                            • thangcftd
                              Thành viên chính thức
                              • Dec 2006
                              • 62

                              #74
                              Nguyên văn bởi khanh248 Xem bài viết
                              mình muốn dùng con DS 1307 để đếm giờ cho ATmega16, hiển thị ngày giờ trên LCD. khi lập code khai báo thư viện #include<ds1307.h> thì báo lỗi do không có trong thư viện.Mình muốn hỏi là muốn khai báo cho ds1307 thì phải lập trình như thế nào?
                              Có thư viện mà : bạn dùng CodeVision ah

                              #include <mega8.h>

                              // I2C Bus functions
                              #asm
                              .equ __i2c_port=0x18 ;PORTB
                              .equ __sda_bit=0
                              .equ __scl_bit=1
                              #endasm
                              #include <i2c.h>

                              // DS1307 Real Time Clock functions
                              #include <ds1307.h>

                              // Declare your global variables here

                              void main(void)
                              {
                              // Declare your local variables here

                              Comment

                              • hunter_17
                                Thành viên chính thức
                                • Mar 2008
                                • 66

                                #75
                                Bạn dùng CodeVision thì trong lúc khai báo bạn chọn I2C \chọn Port B chẳng hạn \ chọn DS1307 bằng cách tích vào Enable.Vậy là xong.
                                Bạn nên chịu khó đọc phần help của nó,rất bổ ích đấy bạn ah.Chúc bạn thành công.

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                Đang tải...