Thông báo

Collapse
No announcement yet.

đếm sp 89s52, dùng counter. Thắc mắc

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

  • đếm sp 89s52, dùng counter. Thắc mắc

    Thầy cho đề tài sử dụng vi điều khiển hoặc IC đếm sản phẩm hiển thị led 7 đoạn dùng led thu phát hồng ngoại
    Mình tìm các bài trước đó của mấy anh chị thì toàn sử dụng int1, int0 để đếm chứ ko ai dùng counter của t0,t1 cả. Mà em thì học chỉ biết viết dùng counter đếm xung ngoại thôi.
    Em cũng sử dụng theo là dùng led thu phát hồng ngoại để ngắt và đóng cho V+ nhưng lúc lấy đầu ra cấp cho counter T0 thì toàn đứng yên trong khi code em test bằng xung clock thì lại đúng .
    Em thắc mắc ko biết dùng các mạch so sánh opamp thường thấy để cấp cho đếm counter được ko, nếu ko được còn phương pháp nào khác sử dụng led thu phát ko ( nếu có thì cho em xin cái mạch thu phát như thế nào, phần còn lại tự làm được nhưng toàn kẹt ngay cái chỗ thu phát hồng ngoại)


    Em đang cần gấp, cám ơn mấy anh

  • #2
    Phần cảm biến :
    Dùng cái gì cũng được miễn nó ra được 0,1 khi có sản phẩm chạy qua. Đơn giản thì dùng OPAMP hay COMPARATOR. Như sơ đồ trên thì biến trở mắc vào 1 chân IN của LM358, led hồng ngoại mắc phân áp với 1 điện trở và điểm giữa cho vào chân IN còn lại.
    Phần Counter :
    Cấu hình cho timer đếm xung ngoài, chọn hệ số chia trước là 1:1. Khi bắt đầu đếm set cho timer giá trị 0 hay gì đó. Khi đó số sp đếm được là giá trị của timer trừ đi giá trị set cho nó ở đầu quá trình đếm.

    Comment


    • #3
      Nguyên văn bởi duong_act Xem bài viết
      Phần cảm biến :
      Dùng cái gì cũng được miễn nó ra được 0,1 khi có sản phẩm chạy qua. Đơn giản thì dùng OPAMP hay COMPARATOR. Như sơ đồ trên thì biến trở mắc vào 1 chân IN của LM358, led hồng ngoại mắc phân áp với 1 điện trở và điểm giữa cho vào chân IN còn lại.
      Phần Counter :
      Cấu hình cho timer đếm xung ngoài, chọn hệ số chia trước là 1:1. Khi bắt đầu đếm set cho timer giá trị 0 hay gì đó. Khi đó số sp đếm được là giá trị của timer trừ đi giá trị set cho nó ở đầu quá trình đếm.
      Vậy tức là so sánh opamp vẫn dùng được phải ko ạ, em có đo điện áp lúc gắn Vout khi led thu và nhận tín hiệu là 0v và ~4v, nhưng gắn vào chân T0 thì nó ko chịu nhảy.
      Code em viết như vậy (dùng keilC), đã test bằng xung clock đúng rồi:

      #include<at89x52.h>
      unsigned char dem,dv,chuc;
      unsigned char ma7doan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};

      void main()
      {TMOD=0x05;
      TL0=0;
      TH0=0;
      TR0=1;
      dem=0;
      while(1)
      {dem=TL0;
      if(dem==100)
      {TL0=0;TH0=0;}
      P2=ma7doan[dem%10];
      P0=ma7doan[dem/10];
      }
      }

      Viết khá ngắn vì em dùng led 7 đoạn gắn trực tiếp

      Comment


      • #4
        Nguyên văn bởi bloodyeye Xem bài viết
        Vậy tức là so sánh opamp vẫn dùng được phải ko ạ, em có đo điện áp lúc gắn Vout khi led thu và nhận tín hiệu là 0v và ~4v, nhưng gắn vào chân T0 thì nó ko chịu nhảy.
        Code em viết như vậy (dùng keilC), đã test bằng xung clock đúng rồi:

        #include<at89x52.h>
        unsigned char dem,dv,chuc;
        unsigned char ma7doan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};

        void main()
        {TMOD=0x05;
        TL0=0;
        TH0=0;
        TR0=1;
        dem=0;
        while(1)
        {dem=TL0;
        if(dem==100)
        {TL0=0;TH0=0;}
        P2=ma7doan[dem%10];
        P0=ma7doan[dem/10];
        }
        }

        Viết khá ngắn vì em dùng led 7 đoạn gắn trực tiếp
        8051 thì mình hơi mù nên chưa biết bạn cấu hình timer đúng chưa nhưng bạn thử kích 0-5V vào T0 xem nó có đếm không. Nếu nó đếm thì do mạch so sánh chưa đủ 5V. Có thể dùng IC đệm logic hoặc chuyển sang dùng COMPARATOR để được 0-5V.

        Comment


        • #5
          bác search post của mình nhé. có 1 thread tương tự thế này.

          Comment


          • #6
            cám ơn mấy anh, em dùng IC đỆM 4050 mạch chạy bình thường rồi (do ko đủ 5v, lúc đầu em nghĩ chỉ 3,5v là đủ)
            Cho em hỏi luôn, em mô phỏng bằng protues ko có 89s52 , dùng 89c51 thay nhưng em xem trong datasheet nó có chân 20 là GND , trong mô phỏng của em ko có chân 20 này, vậy lúc em làm mạch in có bị gì ko ( mô phỏng em chỉ cấp Vcc chứ ko nối GND)

            Dùng IC đệm 4050 ko đảo em chỉ dùng 1 cổng,nhưng em tra thư viện nó có nhìu loại ,vậy thì ở ngoài nên mua loại nào bây giờ ?
            Cho em hỏi luôn có cần nối R=200 ohm cho từng chân của led 7 đoạn ko.

            Lần đầu làm đề tài mong các anh thông cảm ^^

            mạch với code hoàn thiện xong, xem dùm em có chỗ nào ko được ko

            #include<at89x52.h>
            #define START P1_0
            #define UP P1_1
            #define DN P1_2

            unsigned int dem,KQD,dv,chuc;
            unsigned char ma7doan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x9 0};
            bit tt;
            void sodem()
            {dv=KQD%10;
            chuc=KQD/10;
            }

            void hienthi()
            {sodem();
            P2=ma7doan[dv];
            if(KQD>=10)
            {P0=ma7doan[chuc];}
            if(KQD<10)
            {P0=0xff;}
            }

            void mode()
            {if(UP==0)
            {tt=0;dem=KQD;TL0=0;}
            if(DN==0)
            {tt=1;dem=KQD;TL0=0;}
            }
            void main()
            {TMOD=0x05;
            P1_4=0;P1_5=0;
            TL0=0;
            TH0=0;
            TR0=1;
            dem=0;tt=0;
            if(START==0)
            {while(1)
            {mode();
            if(tt==0)
            {KQD=dem+TL0;
            P1_5=1;P1_4=0;
            if(KQD==100)
            {TL0=0;TH0=0;dem=0;}
            }
            if(tt==1)
            {KQD=dem-TL0;
            P1_4=1;P1_5=0;
            if(KQD==-1)
            {TL0=0;TH0=0;dem=99;}
            }


            hienthi();
            }
            }
            }
            Last edited by bloodyeye; 19-11-2013, 19:24.

            Comment


            • #7
              Mình đã thử dùng kit TI msp430 kích vào t0, t1 và khẳng định là được 100% không cần phải đệm (vì msp430 dùng áp 3.3v) mình dùng 89s52, nếu bạn chắc chắn nó là 3.5v thì chắc là được đó không phải đệm đâu vì trạng thái 1 đâu nhất thiết phải 5v đâu phải có sai số chứ. Mà nếu là đệm để nâng áp thì dùng trans là được chứ chi phải mua con nào cho tốn obama? Còn mô phỏng thì nó thần kỳ lắm nếu là MCU thì không cần cấp điện với cả lắp thạch anh nó vẫn chạy cơ, bạn mắc cho nó cái vcc còn là hên cho nó đấy .

              Comment


              • #8
                Nguyên văn bởi myth-coder Xem bài viết
                Mình đã thử dùng kit TI msp430 kích vào t0, t1 và khẳng định là được 100% không cần phải đệm (vì msp430 dùng áp 3.3v) mình dùng 89s52, nếu bạn chắc chắn nó là 3.5v thì chắc là được đó không phải đệm đâu vì trạng thái 1 đâu nhất thiết phải 5v đâu phải có sai số chứ. Mà nếu là đệm để nâng áp thì dùng trans là được chứ chi phải mua con nào cho tốn obama? Còn mô phỏng thì nó thần kỳ lắm nếu là MCU thì không cần cấp điện với cả lắp thạch anh nó vẫn chạy cơ, bạn mắc cho nó cái vcc còn là hên cho nó đấy .
                Mình mới xem lại, đo áp chỗ T0 thì thấy Vout chỉ nhảy từ 4,2 lên 4,5v, trong khi ko gắn vào T0 thì nó nhảy 0-4,7v , cái này có bác nào giúp em ko .
                Gắn 4050 vào thì nhảy bình thường lại được, bó tay
                Last edited by bloodyeye; 19-11-2013, 19:25.

                Comment


                • #9
                  Nguyên văn bởi myth-coder Xem bài viết
                  Mình đã thử dùng kit TI msp430 kích vào t0, t1 và khẳng định là được 100% không cần phải đệm (vì msp430 dùng áp 3.3v) mình dùng 89s52, nếu bạn chắc chắn nó là 3.5v thì chắc là được đó không phải đệm đâu vì trạng thái 1 đâu nhất thiết phải 5v đâu phải có sai số chứ. Mà nếu là đệm để nâng áp thì dùng trans là được chứ chi phải mua con nào cho tốn obama? Còn mô phỏng thì nó thần kỳ lắm nếu là MCU thì không cần cấp điện với cả lắp thạch anh nó vẫn chạy cơ, bạn mắc cho nó cái vcc còn là hên cho nó đấy .
                  Bạn có đo tín hiệu kích không ? MSP thì 3V3 nhưng có cấp thẳng từ IO hay trên KIT đã có đệm ?

                  Comment


                  • #10
                    Em không có gì mà đo bác ạ, nhưng mà em lấy tín hiệu trực tiếp từ IO không hề qua đệm, nó vẫn đếm bình thường. Hôm có vụ cãi nhau với bác mast090 về độ chính xác của tạo dao động bằng timer em mode cái ma trận của em thành cái đo tần số và đo được thật dùng ngắt 1s của 1307 làm chuẩn. em đẩy trực tiếp xung từ kit TI sang và đếm bình thường kể cả trường hợp để PWM duty=5% vẫn đếm như thường. Ngoài ra nếu tháo chân Tx đó ra khoỉ kit TI mà mình để tay vào cái chân Tx đó tín hiệu nhiễu cũng làm nó đếm và nó đếm kinh người luôn ấy. Nên có thể khẳng định trạng thái 1 của 89s52 không nhất thiết phải quá lớn (đến khoảng 4v đâu) mà, ngoài ra em còn cho 89s52 chạy ở điện áp của pin điện thoại (3.7v) vẫn chạy được nên nếu trạng thái 1 của 89s52 là >=4v thì làm sao chạy được ở điện áp 3.7v

                    Comment


                    • #11
                      Nguyên văn bởi myth-coder Xem bài viết
                      Em không có gì mà đo bác ạ, nhưng mà em lấy tín hiệu trực tiếp từ IO không hề qua đệm, nó vẫn đếm bình thường. Hôm có vụ cãi nhau với bác mast090 về độ chính xác của tạo dao động bằng timer em mode cái ma trận của em thành cái đo tần số và đo được thật dùng ngắt 1s của 1307 làm chuẩn. em đẩy trực tiếp xung từ kit TI sang và đếm bình thường kể cả trường hợp để PWM duty=5% vẫn đếm như thường. Ngoài ra nếu tháo chân Tx đó ra khoỉ kit TI mà mình để tay vào cái chân Tx đó tín hiệu nhiễu cũng làm nó đếm và nó đếm kinh người luôn ấy. Nên có thể khẳng định trạng thái 1 của 89s52 không nhất thiết phải quá lớn (đến khoảng 4v đâu) mà, ngoài ra em còn cho 89s52 chạy ở điện áp của pin điện thoại (3.7v) vẫn chạy được nên nếu trạng thái 1 của 89s52 là >=4v thì làm sao chạy được ở điện áp 3.7v
                      cuối cùng mấy bác biết cách nào lấy thẳng xung từ opamp vào T0 ko ạ, làm qua IC đệm áp thấy kì quá, lý thuyết em tính lúc nào cũng hơn 4v nhưng cấp vào nó nhảy 4,2-4,7 chứ ko chịu nhảy 0-4,7 như em tính, kì quá, lúc em gỡ đầu ra opamp với T0 thì nó nhảy 0-4,7v lại bình thường

                      Comment


                      • #12
                        Nguyên văn bởi bloodyeye Xem bài viết
                        Thầy cho đề tài sử dụng vi điều khiển hoặc IC đếm sản phẩm hiển thị led 7 đoạn dùng led thu phát hồng ngoại
                        Mình tìm các bài trước đó của mấy anh chị thì toàn sử dụng int1, int0 để đếm chứ ko ai dùng counter của t0,t1 cả. Mà em thì học chỉ biết viết dùng counter đếm xung ngoại thôi.
                        Em cũng sử dụng theo là dùng led thu phát hồng ngoại để ngắt và đóng cho V+ nhưng lúc lấy đầu ra cấp cho counter T0 thì toàn đứng yên trong khi code em test bằng xung clock thì lại đúng .
                        Em thắc mắc ko biết dùng các mạch so sánh opamp thường thấy để cấp cho đếm counter được ko, nếu ko được còn phương pháp nào khác sử dụng led thu phát ko ( nếu có thì cho em xin cái mạch thu phát như thế nào, phần còn lại tự làm được nhưng toàn kẹt ngay cái chỗ thu phát hồng ngoại)


                        Em đang cần gấp, cám ơn mấy anh
                        Theo mình thì cân chỉnh dần dần. mắc 1 con đèn LED vào đầu ra của opamp sau đó điều chỉnh giá trị điện trở sao cho khi che hồng ngoại thì đèn LED bật sáng hoặc tắt đi. Chắc chắn phải có 1 giá trị điện trở nào đó để trạng thái che và không che trở nên thật sự khác nhau chứ. Nếu không thì bạn không cần dùng opamp làm gì chỉ cần dùng 1 con trans là đủ rồi, về lý thuyết mạch điện tử thì mình không biết gì cả nhưng mình có thể khẳng định cái này hoàn toàn có thể chỉ dùng 1 con trans 2 con điện trở là đủ vì ngày trước mình có thử ráp mấy cái mạch linh tinh dùng linh kiện rời. Nếu có ôm kế thì đo điện trở của LED thu khi che và không che ánh sáng, sau đó tính toán điện trở để tạo áp mở cho trans. Mình nhớ ngày xưa đọc ở đâu đó thì áp kích vào b của trans thông thường là 0.3v thì trans bắt đầu dẫn. Vậy thì chỉ cần hiệu chỉnh sao cho khi không che áp đặt vào b là >=0.3v khi che thì áp nhỏ hơn 0.3v là tạo ra được trạng thái 0 và 1 rồi còn gì?

                        Comment


                        • #13
                          em thử rồi, led sáng tắt bình thường , gắn vào T0 thì lại bất thường như em nói ở trên
                          Em chơi qua con đệm 7050 thì mới ra 2 mức slow và high rõ ràng, lúc này chạy mới được

                          Comment


                          • #14
                            Nguyên văn bởi bloodyeye Xem bài viết
                            em thử rồi, led sáng tắt bình thường , gắn vào T0 thì lại bất thường như em nói ở trên
                            Em chơi qua con đệm 7050 thì mới ra 2 mức slow và high rõ ràng, lúc này chạy mới được
                            Nếu LED tắt với sáng bình thường thì bạn treo trở xuống mass gây sụt áp là được mà. Có gì mà phải lăn tăn?

                            Comment


                            • #15
                              vì chân này có điện trở pull up nên như vậy!
                              hãy làm theo cách của bạn!

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X