Thông báo

Collapse
No announcement yet.

Xin giúp đỡ?

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

  • Xin giúp đỡ?

    Mình dùng 89C51 điều khiển con Transitor PNP : A564 trở hạn dòng 220R. nguồn cấp vào chân E : 12 V . Khi viết chương trình không hiểu tại sao viết đảo cả hao trạng thái thì nó đều xuất nguồn.
    đổi sang con NPN thì đo áp đầu ra giảm đi đáng kể 12V còn khoảng 5V. mong các cao nhân giúp đỡ
    Mình đang dùng con led 7 đoạn loại lớn 9cmx12cm. mình cần cần cấp nguồn 12V .

  • #2
    Nguyên văn bởi MrPLC Xem bài viết
    Mình dùng 89C51 điều khiển con Transitor PNP : A564 trở hạn dòng 220R. nguồn cấp vào chân E : 12 V . Khi viết chương trình không hiểu tại sao viết đảo cả hao trạng thái thì nó đều xuất nguồn.
    đổi sang con NPN thì đo áp đầu ra giảm đi đáng kể 12V còn khoảng 5V. mong các cao nhân giúp đỡ
    Mình đang dùng con led 7 đoạn loại lớn 9cmx12cm. mình cần cần cấp nguồn 12V .
    lý do đó là do khi ngõ ra của VĐK lên mức cao H thì nó vẫn chỉ có 5v , mức 5v này đưa vào chân B (qua trở) thì vẫn thấp hơn chân E (PNP) nên chân B vẫn có áp "âm" hơn chân E , nên nó vẫn dẫn, muốn xử dụng loại trans. PNP với nguồn 12v thì bạn nên mắc ngõ ra VĐK 1 trở 100 ohm, mắc 1 zen 5v nối xuống masss từ đầu điện trở này, sau đó dùng 1 trở khác 1,5k hối tiếp để đến chân B PNP, sau đó dùng một trở khác (10k-22k) nối từ chân B đến E của trans. PNP , như thế thì khi ngõ ra của VĐK lên mức cao thì chân B sẽ có mức 12v , như vậy nó mới khóa (ngưng dẫn) được . con zen có nhiệm vụ chận áp cao 12v vào VĐK khi ngõ ra VĐK lên mức cao , áp tưg chân E sẽ vượt qua chân B để đi ngược vào VĐK , có vài loại VĐK áp 12v đi vào port không sao , nhưng cũng có loại sẽ bị hư, do đó nên ngăn trược chom an toàn , hoặc bạn dùng thêm một trans. NPN để đệm đảo pha giữa VĐK và trans. PNP cũng được .

    Comment


    • #3
      xin cám ơn Bạn!. Qua phân tích trên của bạn mình đã hiểu về điều khiển qua transitor. Hiện tại mình đã khắc phục bằng cách sử dụng thêm một con NPN như bạn nói.
      Một lần nữa xin cám ơn rất nhiều.

      Comment


      • #4
        Cho mình hỏi một vấn đề nữa. Hiện tại mình đang thiết kế mạch đếm dùng led 7 đoạn. dùng cảm biến quang để phát hiện sản phẩm. Mình không làm dạng ngắt ngoài mà làm giạng nút bấm( do không cần nhu cầu đếm nhanh) vì vậy nếu mình test thử mà nhấn phím lâu thì màn hình tối thui , nếu nhả ra thì nó mới sáng lại và tăng số đếm. Vấn đề ở đây là trong khi mình chờ nhả phím thì đèn led vẫn sáng không nhỉ. Đây là code của mình.
        Mong anh em góp ý và chỉ giap
        #include <REGX52.H>
        #include<stdio.h>
        #include<math.h>
        sbit Transitor1= P1^0;
        sbit Transitor2= P1^1;
        sbit Transitor3= P1^2;
        sbit Transitor4= P1^3;
        sbit Transitor5= P1^4;
        sbit Transitor6= P1^5;
        sbit UP= P3^2; //chan 12
        unsigned char m[10]= {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90 };
        unsigned char donvi,chuc,tram,nghin;chucnghin;tramnghin ;

        int num=0; //khai bao bien dem
        void delay(int time)
        {
        while(time--);
        }
        void clear_led(void)
        {

        P2=0xff;
        }
        void DISPLAY_BCD()
        {
        int i;

        tramnghin=num/100000 ; // 9 <>99999
        chucnghin=(num%100000)/10000 ; //(99999%10000)=9 <>99999
        nghin= ((num%100000)%10000)/1000 ; // 9999/1000 =9 <> 999
        tram= (((num%100000)%10000)%1000)/100; //999/100 = 9 <> 99
        chuc= ((((num%100000)%10000)%1000)%100)/10 ; // 99 /10= 9 <> 9
        donvi= ((((num%100000)%10000)%1000)%100)%10 ; // 99/10 = 9 <> 9


        for(i=0;i<25;i++)
        {
        if (num==0)
        {
        P2=0xC0;
        //Transitor1=1;Transitor2=0;Transitor3=0;Transitor4= 0;Transitor5=0;Transitor6=0;
        P1=0xFF;
        delay(1);

        }
        else
        {
        // Hien thi hang don vi
        P2=m[donvi];
        Transitor1=1;Transitor2=0;Transitor3=0;Transitor4= 0;Transitor5=0;Transitor6=0;
        delay(1);
        clear_led();
        Transitor1=0 ;

        // Hien thi hang chuc
        if (num<10)
        {
        Transitor2=0 ;
        }
        else
        {
        P2=m[chuc];
        Transitor2=1;Transitor1=0;Transitor3=0;Transitor4= 0;Transitor5=0;Transitor6=0;
        delay(1);
        clear_led();
        Transitor2=0;
        }
        // Hien thi hang tram
        if (num<100)
        {
        Transitor3=0;
        }
        else
        {
        P2=m[tram];
        Transitor3=3;Transitor1=0;Transitor2=0;Transitor4= 0 ; Transitor5=0,Transitor6=0;
        delay(1);
        clear_led();
        Transitor3=0 ;
        }
        // Hien thi hang nghin
        if (num<1000)
        {
        Transitor4=0;
        }
        else
        {
        P2=m[nghin];
        Transitor4=3;Transitor1=0;Transitor2=0,Transitor3= 0 ; Transitor5=0,Transitor6=0;
        delay(1);
        clear_led();
        Transitor4=0 ;

        }

        // Hien thi hang chuc nghin
        if (num<10000)
        {
        Transitor5=0;
        }
        else
        {

        P2=m[chucnghin];
        Transitor5=3;Transitor1=0;Transitor2=0,Transitor3= 0 ;Transitor4=0,Transitor6=0;
        delay(1);
        clear_led();
        Transitor5=0 ;

        }
        // Hien thi hang tram nghin
        if (num<100000)
        {
        Transitor6=0;
        }
        else
        {
        P2=m[tramnghin];
        Transitor6=3;Transitor1=0;Transitor2=0,Transitor3= 0 ;Transitor4=0,Transitor5=0;
        delay(1);
        clear_led();
        Transitor6=0;
        }
        }
        }
        }
        void PUSH_SWICHT()
        {
        if (!UP )
        {
        num++ ;
        if (num>999999)
        {
        num=0;
        DISPLAY_BCD();
        }
        while(!UP) ;
        }

        }


        void main()
        {

        while(1)
        {

        PUSH_SWICHT() ;
        DISPLAY_BCD();


        }
        }

        Comment

        Về tác giả

        Collapse

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

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

        Collapse

        Đang tải...
        X