Thông báo

Collapse
No announcement yet.

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

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

  • #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


    • #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


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

        Comment


        • #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


          • #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


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

              Comment


              • #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


                • #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


                  • #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


                    • #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


                      • #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


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

                          Comment


                          • #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


                            • #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


                              • #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...
                                X