Thông báo

Collapse
No announcement yet.

Giúp em ạ. Đồng hồ LCD của em làm đếm giờ sai số lớn quá...

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

  • Giúp em ạ. Đồng hồ LCD của em làm đếm giờ sai số lớn quá...

    - Em có làm 1 cái đồng hồ LCD chạy = VDK 89C52, em canh hoài nhưng nó vẫn đếm không chính xác lắm (em mô phỏng trên Proteus 7 ạ.).
    - Không biết có cách nào cho nó đếm chính xác không ạ? Ví dụ như khi em chạy qua chương trình khác thì nó vẫn đếm 1 cách chính xác.
    - Cái sơ đồ + code mà em đưa lên chưa hoàn chỉnh ạ. Mới chỉ làm phần phút và giây thui. Mà khi em so với clock của computer thì nó cứ 1 phút đếm sai ~ 5s.

    Cám ơn Các Bác.
    _ Em hơi ngu điện tử (do em là dân Toán Tin chứ không phải dân Điện Tử ạ.).
    Attached Files

  • #2
    void dongho()
    {
    unsigned int gio=0,phut=0,giay=0;
    while(1)
    {
    //x=x+1;
    giay=giay+1;
    if(giay==60)
    phut=phut+1,giay=0;
    if(phut==60)
    gio=gio+1,phut=0;
    print_to_lcd(gio,phut,giay);
    delay(3900);
    }
    }



    tre nhieu wa ban cho it hon 1 it thoi xem sao

    Comment


    • #3
      ban nen bu them 1 khoang thoi gian ma luc ban in ra man hinh thi dong ho bi cham lai

      Comment


      • #4
        Ví dụ như em cần chạy chương trình báo thức chắng hạn, khi vào chương trình nó lại bị delay thêm, như vậy có cách nào để nó không bị chạy sai khi mình vào chương trình khác ạ ? Và còn phải làm hàm quét keyboard nữa => lại delay . Và mỗi chương trình nó lại bị delay khác nhau ạ.

        Hay là em dùng thêm 1 con 89C52 (2) chỉ dùng để đếm giờ, rồi get qua con 89C82 (1) rồi chạy chương trình.

        À, nếu như em làm 1 cái mạch y như trong hình thì có ổn không ạ ? Có cần thêm trở hay tụ gì không ạ ? Nguồn em dùng từ nguồn 5V của PSU của computer ạ.

        Cảm Ơn Bác nhiều ạ.
        Thân,

        Comment


        • #5
          Đếm giây = delay => đồng hồ "nước" hì hì , bạn chịu khó tìm hiểu modul định thời (timer) của 89S52 thì mới chính xác đuợc, OK
          Chính thức phát hành mạch điều khiển LED FireStar1
          Yêu mến tất cả anh em dientuvietnam.net

          Comment


          • #6
            bạn nên tìm hiểu ngắt nữa bạn ơi. dùng timer ko chưa đủ đâu (ko cách nào dùng timer mà chính xác được), cách chính xác là dùng mấy con realtime tham khảo ở đây http://dientuvietnam.net/forums/show...5400#post85400
            còn các đơn giản hơn để không phải tìm hiểu cách kết nối giữa 89 với realtime thì bạn tháo mấy cái đồng hồ Trung Quốc ra lấy phần xung nhịp của nó để làm nguồn xung cho đồng hô của bạn(đưa xung vào ngắt ấy)

            Comment


            • #7
              phần xung nhịp của mấy đồng hồ trung quốc hình như có phụ thuộc vào điện áp nguồn, nhưng cứ khoảng 1,5V sai lệch 0,3V là cũng chấp nhận được rồi, ko cần chính xác lắm.
              mô phỏng bằng proteus cũng đâu có chính xác với thực tế được, nhất là phần thời gian thực lại càng ko chính xác
              Phạm Minh Tuấn

              (+84) 982006467

              Comment


              • #8
                Bạn muốn đồng hồ chạy chính xác thì nên tìm hiểu thêm ngắt timer nữa bạn à! nếu chỉ chạy bằng delay thông thường thì làm sao chính xác?
                Nếu bạn có ý định làm đồng hồ đơn giản thì nên tìm hiểu về Ngắt timer. Tôi cũng đã từng làm đồng hồ kiểu này, tôi dùng ngắt timer và chạy cũng khá ổn, sai số\ tháng chỉ tính khoàng 1-2 phút thôi!

                Comment


                • #9
                  Bạn thử sử dụng ngắt timer xem (sử dụng thạch anh 11,059MHz). Bạn lấy biến sec,min,hour đưa ra hiển thị
                  Code:
                  void time ()
                  {
                     sec100++;
                     if (sec100 >= 100)       /* 100 * 10 ms = 1 s */
                     {sec100 = 0;
                      sec++;
                      if (sec >= 60)
                      {sec = 0;
                       min++;
                       if (min >= 60)
                       {min = 0;
                       hour++;
                       if (hour >= 24)hour = 0;    
                    }
                   }
                   }
                  }
                  void timer0int (void)  interrupt 1  using 1  
                  	{
                  	TH0 |= 0xdc;  // reload timer 0 with 0DC00H
                  	time();       // update realtime clock       
                  	}

                  Comment


                  • #10
                    Bạn nên thử với mạch thực tế. Đối với real time thì Proteus mô phỏng ko tốt đâ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


                    • #11
                      http://www.kmitl.ac.th/~kswichit%20/Ajay3/clock.htm
                      http://www.kmitl.ac.th/~kswichit%20/Ajay/clock.html
                      Đây là những link về thiết kế đồng hồ thời gianthwuc chỉ sử dụng AT89. Bạn tham khảo thiết kế,có cả code, lắp là chạy. Tôi đã làm nhiều rồi, chạy rất chính xác.
                      Chúc thành công.
                      Ethernet-RS232, PIC Webserver, RFID Reader
                      CallerID, Cảnh báo BTS, ...
                      0988006696
                      linhnc308@gmail.com
                      http://linhnc308.blogspot.com

                      Comment


                      • #12
                        Tui cũng kô hiểu tại sao nữa,trước đây cũng có chạy mô phỏng rồi làm mạch thật nhưng thời gian bị sai rất nhiều,thường là chậm vài giây nên phải sửa lại code bằng thực nghiệm,theo tôi nguyên nhân có lẽ do phần tạo dao động của thạch anh chưa được chuẩn!


                        email:
                        Giá mà mạch điện tử không có nhiễu (noise) thì mình bây giờ đã là ... đại gia

                        Comment


                        • #13
                          Nguyên văn bởi khanhduy301 Xem bài viết
                          - Em có làm 1 cái đồng hồ LCD chạy = VDK 89C52, em canh hoài nhưng nó vẫn đếm không chính xác lắm (em mô phỏng trên Proteus 7 ạ.).
                          - Không biết có cách nào cho nó đếm chính xác không ạ? Ví dụ như khi em chạy qua chương trình khác thì nó vẫn đếm 1 cách chính xác.
                          - Cái sơ đồ + code mà em đưa lên chưa hoàn chỉnh ạ. Mới chỉ làm phần phút và giây thui. Mà khi em so với clock của computer thì nó cứ 1 phút đếm sai ~ 5s.

                          Cám ơn Các Bác.
                          _ Em hơi ngu điện tử (do em là dân Toán Tin chứ không phải dân Điện Tử ạ.).
                          trời.bạn ko dùng con RTC nào sao?thế thì sai số 1 tí là đúng rồi.ít ra bạn cũng fair dùng DS12c887 hoặc DS1307 chứ!

                          Comment


                          • #14
                            Mô phỏng trên Proteus thì làm sao chính xác được? Mà tại sao không dùng thạch anh 12Mhz tính toán thời gian cho đỡ khổ, cứ phải lấy 11.0592 mà tính toán?
                            Cái đồng hồ dùng ĂT9c52 mình cũng nghiền nó nhiều, chỉ mỗi cái là mất điện là toi hết, dùng Pin cũng không ổn.
                            Dùng AT89s52 hoặc là nên dùng AT89c2051 cho nhỏ gọn và tiết kiệm điện. Việc tính toán thời gian rất khó chính xác, kể cả dùng ngắt timer đi nữa. Phải có thời gian chỉnh sửa lại mã code cho phù hợp.
                            Last edited by mrcuongcon; 15-10-2008, 12:40.

                            Comment


                            • #15
                              - Cái project đó mình chuyển sang dùng con RC DS1307 lâu rồi.
                              - Hiện nay mình đang định mode nó lại, không dùng LCD nữa mà dùng 2 led matrix 8x8 để hiển thị .

                              Thân,

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X