Thông báo

Collapse
No announcement yet.

Đóng mở port của AVR theo thời gian

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

  • Đóng mở port của AVR theo thời gian

    Hì hì, hay quá. Hôm nay được một anh bạn giới thiệu trang Web này. Vào thấy nhiều cái hay và mới quá. Hì hì, quái lạ sao từ trước tới giờ tớ chẳng biết cái trang này. Hì hì, hôm nay tiểu đệ xin gia nhập gia đình AVR của diễn đàn, kính mong các huynh trưởng giúp đỡ.

    Hì hì, đệ có một vấn đề mà cả tuần nay không giải quết được. Số là đệ nối con DS1307 với ATmega8515L. OK, chạy tốt, Không vấn đề gì. Như giờ đây đệ muốn cứ đúng 5 phút thì con AVR điểu khiển đèn LED sáng lên 1 phút rồi tắt, cứ thế .... Việc bật con LED đó lên thì OK rồi, Nhưng cái khó ở đây là cứ đúng 5 phút AVR mới bật và chỉ bật trong thời gian đúng 1 phút. Tức là ( Ví dụ nhé ) : thời gian đặt ban đầu là : 12:00:00 thì đúng 12:05:00 AVR sẽ bật đền LED lên và đúng 12:06:00 thì tắt đèn LED và đúng 12:11:00 giây bật lên, 12:12:00 tắt LED .... cứ như thế. Tiểu đệ đã làm thử mà chưa được, tiểu đệ đã tạo hàm trễ 5 phút và 1 phút bên trong chương trình. Nhưng khổ nỗi là tần số thời gian giữa VXL và DS1307 không giống nhau ( không bao giờ giống nhau ). Nên không đạt yêu cầu. ( thời gian theo DS1307, coi như thời gian của DS1307 là của hệ thống, giống như trong Mainboard có một con thời gian của hệ thống ấy )
    Xin các huynh trưởng chỉ bảo cho đệ với. Bí quá
    Cảm ơn các huynh nhiều
    Last edited by mainboard; 05-11-2006, 15:38.

  • #2
    Trời, đã có con RTC rồi mà còn tạo trễ nữa làm chi
    Bạn đọc các giá trị thời gian rồi quy đổi hết ra giây.
    Xong thì cứ kiểm tra giá trị thời gian hiện tại:
    if (Thời gian hiện tại - Thời gian đặt=300) //5phút
    { bật đèn }
    còn tắt đèn sau 1 phút thì cũng tương tự ha
    chunhanhoabattu :rose:

    Comment


    • #3
      Làm như anh Redrose chưa hay !, em có cách này anh thử xem: dùng bảng tra, do thời gian RTC đọc về chỉ từ 0-->59.
      Ta làm bảng tra

      const unsigned char LED()={0,0,0,0,0,1,0,0,0,0,0,1...}

      Giả sử biến lưu giá trị đọc về của RTC là phut, bạn nối LED vào chân nào đó tùy.
      Chỉ cần thêm một dòng vào chương trình chính, hoặc một ngắt timer nào đó dòng
      chân nối led = LED(phut); --> thía là OK thui.
      Không cần if then gì cả.

      Comment


      • #4
        uh cách làm rất hay. Nếu bài toán của bạn mainboard là cố định thì rất tuyệt.
        Nếu phụ thuộc vào thời gian đặt thì cũng phải if then nhiều
        chunhanhoabattu :rose:

        Comment


        • #5
          Hì hì, Tớ đã thử bằng 2 cách, cách của sư huynh Phamthaihoa rất đơn giản và hay, nhưng không linh hoạt khi thay đổi thời gian đặt. Còn của "sư huynh" Redrose thì linh hoạt hơn, chỉ hiểm mội nỗi số to quá, mệt muốn đứt hơi . Hì hì, cảm ơn hai huynh nhé. Ấy ấy mà không biết là cảm ơn "sư huynh" RedRose hay "Đại tỷ" RedRose đây, hì hì. Nếu gọi sai mong các vị đại ca thông cảm.

          Chán quá Add cái ảnh mainboard và hồ sơ mãi không được. Hình nhưng phần này bị hỏng.
          Last edited by mainboard; 06-11-2006, 19:43.

          Comment


          • #6
            Hì hì, ý tớ là so sánh như vậy nhưng bạn có thể so sánh từng số (giờ, phút) thôi.

            Have fun with AVR :P
            chunhanhoabattu :rose:

            Comment


            • #7
              chao cac ban
              mình mới tập tò vào vdk
              các baạn có thể giúp mình mạch : dung VDK để đóng ngắt role
              minh xin cám ơn nhiều
              phanungnhanhanh@yahoo.com
              |

              Comment


              • #8
                to phanungnhanh

                Nguyên văn bởi phanungnhanh Xem bài viết
                chao cac ban
                mình mới tập tò vào vdk
                các baạn có thể giúp mình mạch : dung VDK để đóng ngắt role
                minh xin cám ơn nhiều
                phanungnhanhanh@yahoo.com
                tớ cũng mới tập học với AVR trước được học 89c51 thì tớ thấy với cái này bạn cứ nối chân AVR vào 1 con Tran sau đó nối Relay với Tran đó lúc này điều khiên như với led đơn thôi.Bạn thử xem thế nào
                gmail:

                Comment


                • #9
                  Nếu thời gian đặt là lẻ. Ví dụ: 0,5; 1,5; .... thì cách của bạn phamthaihoa không dùng được

                  Comment


                  • #10
                    Nguyên văn bởi hungnp Xem bài viết
                    Nếu thời gian đặt là lẻ. Ví dụ: 0,5; 1,5; .... thì cách của bạn phamthaihoa không dùng được
                    hihi ý bạn là sao nhỉ? thời gian đặt lẽ là sao? theo tôi nghĩ thì thời gian khi đặt ví dụ như 10(giờ):30(phút):20(giây). có chăng chính xác lắm nữa là thêm vài con số phần trăm của giây nữa thôi nhưng đối với DS1307 thì cái này không thể. Vì vậy theo thôi tôi ta cứ dùng một mảng gồm 3 số char lưu {giờ, phút, giây} để cài đặt giờ bắt đầu , một char nữa là cài khoảng cách sau một lần chuông reo {0, phút, giây}; một char nữa là cài thời gian reo {0, phút, giây}; và cái cuối cùng là {giờ, phút, giây} để đọc từ DS1307 và lưu vào đó.
                    Ta viết một chương trình ngắt ngoài nhờ cái sqwout của DS1307 đọc giờ và so sánh với giờ cài đặt nếu bằng nhau thì cho thực hiện vậy. Sau khi thực hiện xong nhớ tích lũy thêm giờ cài đặt cho lần sau nhé ( cứ cộng thêm mấy cái giây, phút, giờ nhé: nhớ khi cộng giây hơn = 60 thì thêm phút 1 nhé, và tương tự cho phút, riêng giờ thì hơn = 24 thì về 0 nhé và không cần nhớ cho ngày nữa đâu)

                    Comment

                    Về tác giả

                    Collapse

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

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

                    Collapse

                    • Andrea14
                      Vấn đề về tốc độ quay
                      bởi Andrea14
                      Chào mọi người,

                      Tôi muốn mô phỏng sự thay đổi các mùa bằng cách từ từ nghiêng một quả địa cầu 16 inch bằng một động cơ bước nhỏ. Một động cơ bước khác sẽ quay quả địa cầu theo thời gian thực. Hệ thống truyền động...
                      Hôm qua, 12:42
                    • bqviet
                      Trả lời cho Đấu tắt điện cho máy tính bảng
                      bởi bqviet
                      Bqv cáo lỗi vì chưa đủ khả năng diễn giải để người đọc hiểu. Người làm kỹ thuật sâu đôi khi như thế đó. Về việc nạp pin không vào dù cell mới, khả năng cái mạch quản lý đó đã hỏng - cũng chính là nguyên nhân đám cell cũ hỏng từ đầu.
                      06-12-2025, 17:17
                    • nguyendinhvan
                      Trả lời cho Xin hỏi về mạch thu FM/AM trong catsette
                      bởi nguyendinhvan
                      Theo tôi, nó chỉ là cái Tuy- ê - nơ, hoặc là khối Trung Văn Tần, nó một phần trong cái Da đì ô thôi. Vì có thấy một chỗ có ba chân hàn, giiống như chân Cờ rít sờ tăng 455 ki nô hẹc. Còn khối Tuy ê nơ thì không nhìn thây cái Di ốt Va di cáp...
                      05-12-2025, 19:59
                    • afrendly
                      Trả lời cho Đấu tắt điện cho máy tính bảng
                      bởi afrendly
                      Có vẻ ngoài hiểu biết của mình rồi. Cuối cùng mình quyết định tìm mua 2 pin trên Shopee, giá 200K thay vào. Tuy nhận pin được 1%, sạc mãi không vào nhưng cũng mở được máy lên. Vậy cũng tạm. Cảm ơn bạn đã hỗ trợ nhé....
                      04-12-2025, 01:27
                    Đang tải...
                    X