Thông báo

Collapse
No announcement yet.

Đồng hồ led 7 đoạn dùng Pic16F887 , cài đặt được thời gian rồi nhưng không tự chạy

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

  • Đồng hồ led 7 đoạn dùng Pic16F887 , cài đặt được thời gian rồi nhưng không tự chạy

    Mày mò vẽ lại cái Pickit chạy ok rồi , đến test làm cái đồng hồ led 7 đoạn dùng Pic16F887 chơi , thì mô phỏng cũng ok rồi , nhưng khi test trên bo cắm thử ( dựa vào mô phỏng thôi , chưa làm mạch thật ) thì đã " set " được thời gian , nhưng sau nó cứ đứng sáng led không chạy gì , nhiều khi cắm nguồn vào còn phải set Ok cái cho nó sáng led 7 đoạn ( sau nó vẫn " rậm chân tại chỗ" mới đau ):-(||>
    Nên mình nghĩ chỉ sửa trên code thôi , chưa mạch thật nên không cần nguyên lý , nhưng chưa làm thực tế cái nào nên chưa biết lỗi tại đâu .
    Nhờ bác nào làm rồi hay biết giúp mình gấp với , nếu lỗi code chỉnh lại giúp mình được không , máy mình bị " lên vùng cao" bảo hành rồi , không có gì chơi ,thỉnh thoảng mới ra internet tham khảo được . Mấy hôm nữa lên vùng cao tình nguyện rồi , nên nhờ các bác biết code lỗi đâu xin bớt chút thời gian sửa giúp được không , sau mình test thử , mình xin hậu tạ .
    trích :
    #include<16f887.h>
    #device ADC=8
    #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT,NOLVP, NOCPD, NOWRT
    #use delay(clock=12m)
    #define set input(pin_B3)
    #define up input(pin_B4)
    #define down input(pin_B5)
    #define ok input(pin_B6)
    #use i2c(master, sda=pin_B2, scl=pin_B1)
    unsigned char so[11]={64,121,36,48,25,18,2,120,0,16,70};
    unsigned char i,year,month,date,day,hour,min,sec,b,kt,a;
    char t;
    char set0,set1,up0,up1,down0,down1;
    #include<lunar.h>
    #include<ds1307.h>
    #include<ktphim.h>
    #include<hienthi.h>
    #int_timer0
    void timer0interrupt()
    {
    b++;
    if(b==20)output_high(pin_D2);
    if(b==40){output_low(pin_D2);b=0;}
    }
    #int_EXT //ngat ngoai RB0
    void EXT_RB0(void)//cu moi lan co ngat ngoai thi doc du lieu (1s doc 1lan)
    {
    a++;
    get_time();
    if(a==5)
    {
    t=read_adc();
    lunar_calculate(date,month,year);
    a=0;
    }
    }
    void main()
    {
    setup_timer_0 (RTCC_DIV_256);
    ENABLE_INTERRUPTS(INT_TIMER0);
    set_timer0(0);
    ext_int_edge(0,H_TO_L);//chon ngat ngoai 0, suon ngat la suon xuong
    enable_interrupts(GLOBAL);//cho phep ngat toan cuc
    setup_adc(ADC_CLOCK_INTERNAL);//ADC lam viec voi nguon xung noi
    setup_adc_ports(sAN0);//chon kenh ADC
    setup_rtc();
    while(1)
    {
    ktphim();
    hien_thi();
    }
    }
    file mô phỏng + code ( mình không úp diễn đàn được ) : dong ho 16f877.rar
    Last edited by ChuTieu_Quay; 08-09-2013, 23:28.

  • #2
    MẠCH này chắc copy đc ở đâu về test, bạn nên hiểu bản chất code trước khi cắm board nó sẽ cho bạn hiểu và cắm board chuẩn
    với trường hợp này bạn phải nói rõ hiện tượng trên led 7. led 7 sáng như thế nào, đã có số má j chưa, thời gian nó hiển thị ra sao
    Website chính thức đổi địa chỉ website thành
    Mời các bạn ghé thăm !!!

    Comment


    • #3
      Nguyên văn bởi mast090 Xem bài viết
      MẠCH này chắc copy đc ở đâu về test, bạn nên hiểu bản chất code trước khi cắm board nó sẽ cho bạn hiểu và cắm board chuẩn
      với trường hợp này bạn phải nói rõ hiện tượng trên led 7. led 7 sáng như thế nào, đã có số má j chưa, thời gian nó hiển thị ra sao
      uhm . mình nhặt từ đồ án mang về sửa , led 7 đoạn hiển thị hết số rồi , mình đã set được thời gian ( tăng / giảm /ok) , nhưng sau đó nó vẫn không tự chạy , nên nghĩ code chưa ổn ở đâu đó mà không biết .
      Test chỉ với : Píc6f887 ,74hc595 ( cả 2 test chạy led đơn thử , chưa die)+ ds1307 ....

      Comment


      • #4
        nó đã hiện thị giờ thì chứng tỏ đã giao tiếp đc con ds1307 rồi, bạn kiểm tra lại kết nối con thạch anh 32k với con ds1307, xem nó có chết hay ko.
        1 cách đơn giản là bạn lấy tay xờ qua xờ lại chỗ chân con ds1307 xem số trên led 7 có nhảy ko là biết
        Website chính thức đổi địa chỉ website thành
        Mời các bạn ghé thăm !!!

        Comment


        • #5
          hình như mình sờ tay vào ds1307 , thì thấy không tác dụng , mà vuốt tay trên Pic thấy có nhấp nháy , reset thì hết ,để mình test vấn đề đó có gì comment nhờ ' bác sĩ 'tiếp , mà có 2 con thạch anh 32k test chả nhẽ die cả

          Comment


          • #6
            xờ vào ds xờ làm gì, xờ vào con thạch anh cho nó nhảy xung xem nó có chạy giờ ko thôi
            Website chính thức đổi địa chỉ website thành
            Mời các bạn ghé thăm !!!

            Comment


            • #7
              thì thạch anh 32k nối với Ds1307 , sờ vào Ds chả như vậy hả thím , m cũng thử rồi , vẫn vậy , thay cả 3 con thạch anh , chả nhẽ die cả , chán quá chả nhẽ rã linh kiện ra

              Comment


              • #8
                Nguyên văn bởi ChuTieu_Quay Xem bài viết
                thì thạch anh 32k nối với Ds1307 , sờ vào Ds chả như vậy hả thím , m cũng thử rồi , vẫn vậy , thay cả 3 con thạch anh , chả nhẽ die cả , chán quá chả nhẽ rã linh kiện ra
                bạn có hiểu là thạch anh tạo xung nên mình mới bảo bạn chạm tay vào để nó gây ra xung chứ bạn chạm tay vào con DS thì nó còn cả VCC, VBAT,GND các kiểu, chưa kể tay ẩm ẩm có mồ hôi nó loại xoẹt xoẹt cho phát
                bệnh này mình nghĩ ko khó chưa, chỉ đơn giản là bạn nói thế kia khó giải quyết
                Website chính thức đổi địa chỉ website thành
                Mời các bạn ghé thăm !!!

                Comment


                • #9
                  Nguyên văn bởi ChuTieu_Quay Xem bài viết
                  thì thạch anh 32k nối với Ds1307 , sờ vào Ds chả như vậy hả thím , m cũng thử rồi , vẫn vậy , thay cả 3 con thạch anh , chả nhẽ die cả , chán quá chả nhẽ rã linh kiện ra
                  tự nhiên lại thím với cháu. có lẽ bác ấy 0 trả lời nữa đâu.

                  Comment


                  • #10
                    Nguyên văn bởi toi ngu kinh Xem bài viết
                    tự nhiên lại thím với cháu. có lẽ bác ấy 0 trả lời nữa đâu.
                    em nghĩ bác nên chuyên tên acc diễn đàn đó cho em đi , hic
                    Nguyên văn bởi mast090 Xem bài viết
                    bạn có hiểu là thạch anh tạo xung nên mình mới bảo bạn chạm tay vào để nó gây ra xung chứ bạn chạm tay vào con DS thì nó còn cả VCC, VBAT,GND các kiểu, chưa kể tay ẩm ẩm có mồ hôi nó loại xoẹt xoẹt cho phát
                    bệnh này mình nghĩ ko khó chưa, chỉ đơn giản là bạn nói thế kia khó giải quyết
                    thì mình test trên bo trắng đục lỗ , cắm ra cắm vào , cũng sờ đủ kiểu thì mình nói thế , nếu code không lỗi thì nghĩ đến phần cứng thôi . Pic , 74hc595 , test chắc không vấn đề , treo trở 10k vào Scl , Sda đủ cả ... vậy thì biết " đổ lỗi "cho thằng nào trời , chắc nó không biết " auto"

                    Comment


                    • #11
                      Mọi người ơi! Nhấn chỉnh giờ mà OK thì có nghĩa là PIC và mọi thứ liên quan tốt cả rồi đấy!

                      Tôi cố đọc code của bạn rồi, hàm main() của bạn gọi hai hàm là kiểm tra phím và hiển thị, tôi tìm trong các header của bạn thì thấy rằng, chương trình chỉ đọc giờ khi có nhận ngắt ngoài RB, vì vậy khi nhấn thay đổi thời gian thì OK, buông ra rồi thì chẳng có tác động gì đến "get time" nữa nên nó vẫn đơ ra là phải rồi.
                      Bạn nên có động tác đọc thời gian nữa, ví dụ bạn dùng một biến cố tăng giảm bộ đếm nào đó, đếm một giá trị quy định thì "get time" - tôi cũng đã dùng như thế, mục đích giảm thiểu thời gian đọc lên 1307 thôi.

                      đề xuất nhé:
                      main()
                      {
                      //...... tùm lum thứ của bạn
                      while(1)
                      {
                      dem++;
                      if(dem==1000) //tùy các lần gọi delay trong các hàm có liên quan nữa
                      {
                      dem=0;
                      gettime();
                      }
                      kiemtraphim();
                      hienthi();
                      }//hết while

                      }//hết main

                      Comment


                      • #12
                        Nguyên văn bởi t10000 Xem bài viết
                        Mọi người ơi! Nhấn chỉnh giờ mà OK thì có nghĩa là PIC và mọi thứ liên quan tốt cả rồi đấy!

                        Tôi cố đọc code của bạn rồi, hàm main() của bạn gọi hai hàm là kiểm tra phím và hiển thị, tôi tìm trong các header của bạn thì thấy rằng, chương trình chỉ đọc giờ khi có nhận ngắt ngoài RB, vì vậy khi nhấn thay đổi thời gian thì OK, buông ra rồi thì chẳng có tác động gì đến "get time" nữa nên nó vẫn đơ ra là phải rồi.
                        Bạn nên có động tác đọc thời gian nữa, ví dụ bạn dùng một biến cố tăng giảm bộ đếm nào đó, đếm một giá trị quy định thì "get time" - tôi cũng đã dùng như thế, mục đích giảm thiểu thời gian đọc lên 1307 thôi.

                        đề xuất nhé:
                        main()
                        {
                        //...... tùm lum thứ của bạn
                        while(1)
                        {
                        dem++;
                        if(dem==1000) //tùy các lần gọi delay trong các hàm có liên quan nữa
                        {
                        dem=0;
                        gettime();
                        }
                        kiemtraphim();
                        hienthi();
                        }//hết while

                        }//hết main
                        cảm ơn bác , để mình thử , ah thế cho mình hỏi thêm , cùng 1 code này trước mình làm có lần test thấy thời gian chạy bị châm , giờ lại bị nhanh , vậy có nên tác động đến code , mà 2 co tụ 33p nối thạch anh 32k thực tế mạch thật hay bỏ đi hả , mà mình đang xem sao con LM35 , chạy nhiệt độ chi mùa hè trong nhà mà toàn 15*C

                        Comment


                        • #13
                          Nguyên văn bởi ChuTieu_Quay Xem bài viết
                          cảm ơn bác , để mình thử , ah thế cho mình hỏi thêm , cùng 1 code này trước mình làm có lần test thấy thời gian chạy bị châm , giờ lại bị nhanh , vậy có nên tác động đến code , mà 2 co tụ 33p nối thạch anh 32k thực tế mạch thật hay bỏ đi hả , mà mình đang xem sao con LM35 , chạy nhiệt độ chi mùa hè trong nhà mà toàn 15*C
                          Nhanh hay chậm thời gian thì mình chưa gặp, hãy kiểm tra thạch anh 32768 của bạn, hehe, kiếm con của Nhật í, mua loại rẻ tiền của TQ thì không tin được, mách nhỏ nhé: tìm cái main vi tinh hư bỏ đi, loại nào cũng được, có con thạch anh này nhưng không ai để ý, tốt cực!
                          Vụ tụ (33p hoặc khác) mắc với 20Mhz là để nâng cao ổn định của thạch anh 20Mhz cho VXL, bỏ đi cũng có thể mạch vẫn chạy nhưng không nên! Còn thạnh anh 32768 thì không thấy ai gắn cả, ngay cả datasheet cung không thấy có.
                          LM35 thì liên quan đến điện áp cấp của VXL, LM35 và ... ăn thua là code lập trình, chú ý khoản ADC 8bit hay 10bit v.v...
                          Có "thớt" này bạn tham khảo thêm nhé Payitforward Community
                          Last edited by t10000; 16-09-2013, 09:21.

                          Comment


                          • #14
                            tks bác , linh kiện mình chơi toàn china , đang test k nhưng thấy sai số , con ds1307 , xem datashet nếu dùng thạch anh 32k thì dung tụ 15p , còn thực tế người cho vào người không , đang định nôí gnd cho vỏ thạch anh , và thêm tụ 104 cho Ds , con này nhiễu quá

                            Comment

                            Về tác giả

                            Collapse

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

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

                            Collapse

                            Đang tải...
                            X